feat(oauth2): add email format transformation support (#818)

* feat(oauth2): add email format transformation support

- Add enableEmailFormat, userEmailFormat, userEmailReplace fields
- Support regex pattern matching and replacement template ($1, $2, etc.)
- Add Linux Do OAuth2 template with email format pre-configured
- Add input length limit (256 chars) to prevent ReDoS attacks
- Update admin UI with conditional display and tooltips
- Update documentation (zh/en) with configuration examples

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* chore: update lock files and version

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix: restore accessTokenFormat as optional field

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Dream Hunter
2026-01-23 21:30:44 +08:00
committed by GitHub
parent e4c96c9868
commit decede7ed3
13 changed files with 906 additions and 791 deletions

View File

@@ -1,6 +1,6 @@
{
"name": "cloudflare_temp_email",
"version": "1.2.1",
"version": "1.3.0",
"private": true,
"type": "module",
"scripts": {
@@ -49,7 +49,7 @@
"vite-plugin-wasm": "^3.5.0",
"workbox-build": "^7.4.0",
"workbox-window": "^7.4.0",
"wrangler": "^4.59.2"
"wrangler": "^4.60.0"
},
"packageManager": "pnpm@10.10.0+sha512.d615db246fe70f25dcfea6d8d73dee782ce23e2245e3c4f6f888249fb568149318637dca73c2c5c8ef2a4ca0d5657fb9567188bfab47f566d1ee6ce987815c39"
}

454
frontend/pnpm-lock.yaml generated
View File

@@ -91,8 +91,8 @@ importers:
specifier: ^7.4.0
version: 7.4.0
wrangler:
specifier: ^4.59.2
version: 4.59.2
specifier: ^4.60.0
version: 4.60.0
packages:
@@ -601,41 +601,41 @@ packages:
resolution: {integrity: sha512-SIOD2DxrRRwQ+jgzlXCqoEFiKOFqaPjhnNTGKXSRLvp1HiOvapLaFG2kEr9dYQTYe8rKrd9uvDUzmAITeNyaHQ==}
engines: {node: '>=18.0.0'}
'@cloudflare/unenv-preset@2.10.0':
resolution: {integrity: sha512-/uII4vLQXhzCAZzEVeYAjFLBNg2nqTJ1JGzd2lRF6ItYe6U2zVoYGfeKpGx/EkBF6euiU+cyBXgMdtJih+nQ6g==}
'@cloudflare/unenv-preset@2.11.0':
resolution: {integrity: sha512-z3hxFajL765VniNPGV0JRStZolNz63gU3B3AktwoGdDlnQvz5nP+Ah4RL04PONlZQjwmDdGHowEStJ94+RsaJg==}
peerDependencies:
unenv: 2.0.0-rc.24
workerd: ^1.20251221.0
workerd: ^1.20260115.0
peerDependenciesMeta:
workerd:
optional: true
'@cloudflare/workerd-darwin-64@1.20260114.0':
resolution: {integrity: sha512-HNlsRkfNgardCig2P/5bp/dqDECsZ4+NU5XewqArWxMseqt3C5daSuptI620s4pn7Wr0ZKg7jVLH0PDEBkA+aA==}
'@cloudflare/workerd-darwin-64@1.20260120.0':
resolution: {integrity: sha512-JLHx3p5dpwz4wjVSis45YNReftttnI3ndhdMh5BUbbpdreN/g0jgxNt5Qp9tDFqEKl++N63qv+hxJiIIvSLR+Q==}
engines: {node: '>=16'}
cpu: [x64]
os: [darwin]
'@cloudflare/workerd-darwin-arm64@1.20260114.0':
resolution: {integrity: sha512-qyE1UdFnAlxzb+uCfN/d9c8icch7XRiH49/DjoqEa+bCDihTuRS7GL1RmhVIqHJhb3pX3DzxmKgQZBDBL83Inw==}
'@cloudflare/workerd-darwin-arm64@1.20260120.0':
resolution: {integrity: sha512-1Md2tCRhZjwajsZNOiBeOVGiS3zbpLPzUDjHr4+XGTXWOA6FzzwScJwQZLa0Doc28Cp4Nr1n7xGL0Dwiz1XuOA==}
engines: {node: '>=16'}
cpu: [arm64]
os: [darwin]
'@cloudflare/workerd-linux-64@1.20260114.0':
resolution: {integrity: sha512-Z0BLvAj/JPOabzads2ddDEfgExWTlD22pnwsuNbPwZAGTSZeQa3Y47eGUWyHk+rSGngknk++S7zHTGbKuG7RRg==}
'@cloudflare/workerd-linux-64@1.20260120.0':
resolution: {integrity: sha512-O0mIfJfvU7F8N5siCoRDaVDuI12wkz2xlG4zK6/Ct7U9c9FiE0ViXNFWXFQm5PPj+qbkNRyhjUwhP+GCKTk5EQ==}
engines: {node: '>=16'}
cpu: [x64]
os: [linux]
'@cloudflare/workerd-linux-arm64@1.20260114.0':
resolution: {integrity: sha512-kPUmEtUxUWlr9PQ64kuhdK0qyo8idPe5IIXUgi7xCD7mDd6EOe5J7ugDpbfvfbYKEjx4DpLvN2t45izyI/Sodw==}
'@cloudflare/workerd-linux-arm64@1.20260120.0':
resolution: {integrity: sha512-aRHO/7bjxVpjZEmVVcpmhbzpN6ITbFCxuLLZSW0H9O0C0w40cDCClWSi19T87Ax/PQcYjFNT22pTewKsupkckA==}
engines: {node: '>=16'}
cpu: [arm64]
os: [linux]
'@cloudflare/workerd-windows-64@1.20260114.0':
resolution: {integrity: sha512-MJnKgm6i1jZGyt2ZHQYCnRlpFTEZcK2rv9y7asS3KdVEXaDgGF8kOns5u6YL6/+eMogfZuHRjfDS+UqRTUYIFA==}
'@cloudflare/workerd-windows-64@1.20260120.0':
resolution: {integrity: sha512-ASZIz1E8sqZQqQCgcfY1PJbBpUDrxPt8NZ+lqNil0qxnO4qX38hbCsdDF2/TDAuq0Txh7nu8ztgTelfNDlb4EA==}
engines: {node: '>=16'}
cpu: [x64]
os: [win32]
@@ -1231,128 +1231,128 @@ packages:
rollup:
optional: true
'@rollup/rollup-android-arm-eabi@4.55.2':
resolution: {integrity: sha512-21J6xzayjy3O6NdnlO6aXi/urvSRjm6nCI6+nF6ra2YofKruGixN9kfT+dt55HVNwfDmpDHJcaS3JuP/boNnlA==}
'@rollup/rollup-android-arm-eabi@4.56.0':
resolution: {integrity: sha512-LNKIPA5k8PF1+jAFomGe3qN3bbIgJe/IlpDBwuVjrDKrJhVWywgnJvflMt/zkbVNLFtF1+94SljYQS6e99klnw==}
cpu: [arm]
os: [android]
'@rollup/rollup-android-arm64@4.55.2':
resolution: {integrity: sha512-eXBg7ibkNUZ+sTwbFiDKou0BAckeV6kIigK7y5Ko4mB/5A1KLhuzEKovsmfvsL8mQorkoincMFGnQuIT92SKqA==}
'@rollup/rollup-android-arm64@4.56.0':
resolution: {integrity: sha512-lfbVUbelYqXlYiU/HApNMJzT1E87UPGvzveGg2h0ktUNlOCxKlWuJ9jtfvs1sKHdwU4fzY7Pl8sAl49/XaEk6Q==}
cpu: [arm64]
os: [android]
'@rollup/rollup-darwin-arm64@4.55.2':
resolution: {integrity: sha512-UCbaTklREjrc5U47ypLulAgg4njaqfOVLU18VrCrI+6E5MQjuG0lSWaqLlAJwsD7NpFV249XgB0Bi37Zh5Sz4g==}
'@rollup/rollup-darwin-arm64@4.56.0':
resolution: {integrity: sha512-EgxD1ocWfhoD6xSOeEEwyE7tDvwTgZc8Bss7wCWe+uc7wO8G34HHCUH+Q6cHqJubxIAnQzAsyUsClt0yFLu06w==}
cpu: [arm64]
os: [darwin]
'@rollup/rollup-darwin-x64@4.55.2':
resolution: {integrity: sha512-dP67MA0cCMHFT2g5XyjtpVOtp7y4UyUxN3dhLdt11at5cPKnSm4lY+EhwNvDXIMzAMIo2KU+mc9wxaAQJTn7sQ==}
'@rollup/rollup-darwin-x64@4.56.0':
resolution: {integrity: sha512-1vXe1vcMOssb/hOF8iv52A7feWW2xnu+c8BV4t1F//m9QVLTfNVpEdja5ia762j/UEJe2Z1jAmEqZAK42tVW3g==}
cpu: [x64]
os: [darwin]
'@rollup/rollup-freebsd-arm64@4.55.2':
resolution: {integrity: sha512-WDUPLUwfYV9G1yxNRJdXcvISW15mpvod1Wv3ok+Ws93w1HjIVmCIFxsG2DquO+3usMNCpJQ0wqO+3GhFdl6Fow==}
'@rollup/rollup-freebsd-arm64@4.56.0':
resolution: {integrity: sha512-bof7fbIlvqsyv/DtaXSck4VYQ9lPtoWNFCB/JY4snlFuJREXfZnm+Ej6yaCHfQvofJDXLDMTVxWscVSuQvVWUQ==}
cpu: [arm64]
os: [freebsd]
'@rollup/rollup-freebsd-x64@4.55.2':
resolution: {integrity: sha512-Ng95wtHVEulRwn7R0tMrlUuiLVL/HXA8Lt/MYVpy88+s5ikpntzZba1qEulTuPnPIZuOPcW9wNEiqvZxZmgmqQ==}
'@rollup/rollup-freebsd-x64@4.56.0':
resolution: {integrity: sha512-KNa6lYHloW+7lTEkYGa37fpvPq+NKG/EHKM8+G/g9WDU7ls4sMqbVRV78J6LdNuVaeeK5WB9/9VAFbKxcbXKYg==}
cpu: [x64]
os: [freebsd]
'@rollup/rollup-linux-arm-gnueabihf@4.55.2':
resolution: {integrity: sha512-AEXMESUDWWGqD6LwO/HkqCZgUE1VCJ1OhbvYGsfqX2Y6w5quSXuyoy/Fg3nRqiwro+cJYFxiw5v4kB2ZDLhxrw==}
'@rollup/rollup-linux-arm-gnueabihf@4.56.0':
resolution: {integrity: sha512-E8jKK87uOvLrrLN28jnAAAChNq5LeCd2mGgZF+fGF5D507WlG/Noct3lP/QzQ6MrqJ5BCKNwI9ipADB6jyiq2A==}
cpu: [arm]
os: [linux]
'@rollup/rollup-linux-arm-musleabihf@4.55.2':
resolution: {integrity: sha512-ZV7EljjBDwBBBSv570VWj0hiNTdHt9uGznDtznBB4Caj3ch5rgD4I2K1GQrtbvJ/QiB+663lLgOdcADMNVC29Q==}
'@rollup/rollup-linux-arm-musleabihf@4.56.0':
resolution: {integrity: sha512-jQosa5FMYF5Z6prEpTCCmzCXz6eKr/tCBssSmQGEeozA9tkRUty/5Vx06ibaOP9RCrW1Pvb8yp3gvZhHwTDsJw==}
cpu: [arm]
os: [linux]
'@rollup/rollup-linux-arm64-gnu@4.55.2':
resolution: {integrity: sha512-uvjwc8NtQVPAJtq4Tt7Q49FOodjfbf6NpqXyW/rjXoV+iZ3EJAHLNAnKT5UJBc6ffQVgmXTUL2ifYiLABlGFqA==}
'@rollup/rollup-linux-arm64-gnu@4.56.0':
resolution: {integrity: sha512-uQVoKkrC1KGEV6udrdVahASIsaF8h7iLG0U0W+Xn14ucFwi6uS539PsAr24IEF9/FoDtzMeeJXJIBo5RkbNWvQ==}
cpu: [arm64]
os: [linux]
'@rollup/rollup-linux-arm64-musl@4.55.2':
resolution: {integrity: sha512-s3KoWVNnye9mm/2WpOZ3JeUiediUVw6AvY/H7jNA6qgKA2V2aM25lMkVarTDfiicn/DLq3O0a81jncXszoyCFA==}
'@rollup/rollup-linux-arm64-musl@4.56.0':
resolution: {integrity: sha512-vLZ1yJKLxhQLFKTs42RwTwa6zkGln+bnXc8ueFGMYmBTLfNu58sl5/eXyxRa2RarTkJbXl8TKPgfS6V5ijNqEA==}
cpu: [arm64]
os: [linux]
'@rollup/rollup-linux-loong64-gnu@4.55.2':
resolution: {integrity: sha512-gi21faacK+J8aVSyAUptML9VQN26JRxe484IbF+h3hpG+sNVoMXPduhREz2CcYr5my0NE3MjVvQ5bMKX71pfVA==}
'@rollup/rollup-linux-loong64-gnu@4.56.0':
resolution: {integrity: sha512-FWfHOCub564kSE3xJQLLIC/hbKqHSVxy8vY75/YHHzWvbJL7aYJkdgwD/xGfUlL5UV2SB7otapLrcCj2xnF1dg==}
cpu: [loong64]
os: [linux]
'@rollup/rollup-linux-loong64-musl@4.55.2':
resolution: {integrity: sha512-qSlWiXnVaS/ceqXNfnoFZh4IiCA0EwvCivivTGbEu1qv2o+WTHpn1zNmCTAoOG5QaVr2/yhCoLScQtc/7RxshA==}
'@rollup/rollup-linux-loong64-musl@4.56.0':
resolution: {integrity: sha512-z1EkujxIh7nbrKL1lmIpqFTc/sr0u8Uk0zK/qIEFldbt6EDKWFk/pxFq3gYj4Bjn3aa9eEhYRlL3H8ZbPT1xvA==}
cpu: [loong64]
os: [linux]
'@rollup/rollup-linux-ppc64-gnu@4.55.2':
resolution: {integrity: sha512-rPyuLFNoF1B0+wolH277E780NUKf+KoEDb3OyoLbAO18BbeKi++YN6gC/zuJoPPDlQRL3fIxHxCxVEWiem2yXw==}
'@rollup/rollup-linux-ppc64-gnu@4.56.0':
resolution: {integrity: sha512-iNFTluqgdoQC7AIE8Q34R3AuPrJGJirj5wMUErxj22deOcY7XwZRaqYmB6ZKFHoVGqRcRd0mqO+845jAibKCkw==}
cpu: [ppc64]
os: [linux]
'@rollup/rollup-linux-ppc64-musl@4.55.2':
resolution: {integrity: sha512-g+0ZLMook31iWV4PvqKU0i9E78gaZgYpSrYPed/4Bu+nGTgfOPtfs1h11tSSRPXSjC5EzLTjV/1A7L2Vr8pJoQ==}
'@rollup/rollup-linux-ppc64-musl@4.56.0':
resolution: {integrity: sha512-MtMeFVlD2LIKjp2sE2xM2slq3Zxf9zwVuw0jemsxvh1QOpHSsSzfNOTH9uYW9i1MXFxUSMmLpeVeUzoNOKBaWg==}
cpu: [ppc64]
os: [linux]
'@rollup/rollup-linux-riscv64-gnu@4.55.2':
resolution: {integrity: sha512-i+sGeRGsjKZcQRh3BRfpLsM3LX3bi4AoEVqmGDyc50L6KfYsN45wVCSz70iQMwPWr3E5opSiLOwsC9WB4/1pqg==}
'@rollup/rollup-linux-riscv64-gnu@4.56.0':
resolution: {integrity: sha512-in+v6wiHdzzVhYKXIk5U74dEZHdKN9KH0Q4ANHOTvyXPG41bajYRsy7a8TPKbYPl34hU7PP7hMVHRvv/5aCSew==}
cpu: [riscv64]
os: [linux]
'@rollup/rollup-linux-riscv64-musl@4.55.2':
resolution: {integrity: sha512-C1vLcKc4MfFV6I0aWsC7B2Y9QcsiEcvKkfxprwkPfLaN8hQf0/fKHwSF2lcYzA9g4imqnhic729VB9Fo70HO3Q==}
'@rollup/rollup-linux-riscv64-musl@4.56.0':
resolution: {integrity: sha512-yni2raKHB8m9NQpI9fPVwN754mn6dHQSbDTwxdr9SE0ks38DTjLMMBjrwvB5+mXrX+C0npX0CVeCUcvvvD8CNQ==}
cpu: [riscv64]
os: [linux]
'@rollup/rollup-linux-s390x-gnu@4.55.2':
resolution: {integrity: sha512-68gHUK/howpQjh7g7hlD9DvTTt4sNLp1Bb+Yzw2Ki0xvscm2cOdCLZNJNhd2jW8lsTPrHAHuF751BygifW4bkQ==}
'@rollup/rollup-linux-s390x-gnu@4.56.0':
resolution: {integrity: sha512-zhLLJx9nQPu7wezbxt2ut+CI4YlXi68ndEve16tPc/iwoylWS9B3FxpLS2PkmfYgDQtosah07Mj9E0khc3Y+vQ==}
cpu: [s390x]
os: [linux]
'@rollup/rollup-linux-x64-gnu@4.55.2':
resolution: {integrity: sha512-1e30XAuaBP1MAizaOBApsgeGZge2/Byd6wV4a8oa6jPdHELbRHBiw7wvo4dp7Ie2PE8TZT4pj9RLGZv9N4qwlw==}
'@rollup/rollup-linux-x64-gnu@4.56.0':
resolution: {integrity: sha512-MVC6UDp16ZSH7x4rtuJPAEoE1RwS8N4oK9DLHy3FTEdFoUTCFVzMfJl/BVJ330C+hx8FfprA5Wqx4FhZXkj2Kw==}
cpu: [x64]
os: [linux]
'@rollup/rollup-linux-x64-musl@4.55.2':
resolution: {integrity: sha512-4BJucJBGbuGnH6q7kpPqGJGzZnYrpAzRd60HQSt3OpX/6/YVgSsJnNzR8Ot74io50SeVT4CtCWe/RYIAymFPwA==}
'@rollup/rollup-linux-x64-musl@4.56.0':
resolution: {integrity: sha512-ZhGH1eA4Qv0lxaV00azCIS1ChedK0V32952Md3FtnxSqZTBTd6tgil4nZT5cU8B+SIw3PFYkvyR4FKo2oyZIHA==}
cpu: [x64]
os: [linux]
'@rollup/rollup-openbsd-x64@4.55.2':
resolution: {integrity: sha512-cT2MmXySMo58ENv8p6/O6wI/h/gLnD3D6JoajwXFZH6X9jz4hARqUhWpGuQhOgLNXscfZYRQMJvZDtWNzMAIDw==}
'@rollup/rollup-openbsd-x64@4.56.0':
resolution: {integrity: sha512-O16XcmyDeFI9879pEcmtWvD/2nyxR9mF7Gs44lf1vGGx8Vg2DRNx11aVXBEqOQhWb92WN4z7fW/q4+2NYzCbBA==}
cpu: [x64]
os: [openbsd]
'@rollup/rollup-openharmony-arm64@4.55.2':
resolution: {integrity: sha512-sZnyUgGkuzIXaK3jNMPmUIyJrxu/PjmATQrocpGA1WbCPX8H5tfGgRSuYtqBYAvLuIGp8SPRb1O4d1Fkb5fXaQ==}
'@rollup/rollup-openharmony-arm64@4.56.0':
resolution: {integrity: sha512-LhN/Reh+7F3RCgQIRbgw8ZMwUwyqJM+8pXNT6IIJAqm2IdKkzpCh/V9EdgOMBKuebIrzswqy4ATlrDgiOwbRcQ==}
cpu: [arm64]
os: [openharmony]
'@rollup/rollup-win32-arm64-msvc@4.55.2':
resolution: {integrity: sha512-sDpFbenhmWjNcEbBcoTV0PWvW5rPJFvu+P7XoTY0YLGRupgLbFY0XPfwIbJOObzO7QgkRDANh65RjhPmgSaAjQ==}
'@rollup/rollup-win32-arm64-msvc@4.56.0':
resolution: {integrity: sha512-kbFsOObXp3LBULg1d3JIUQMa9Kv4UitDmpS+k0tinPBz3watcUiV2/LUDMMucA6pZO3WGE27P7DsfaN54l9ing==}
cpu: [arm64]
os: [win32]
'@rollup/rollup-win32-ia32-msvc@4.55.2':
resolution: {integrity: sha512-GvJ03TqqaweWCigtKQVBErw2bEhu1tyfNQbarwr94wCGnczA9HF8wqEe3U/Lfu6EdeNP0p6R+APeHVwEqVxpUQ==}
'@rollup/rollup-win32-ia32-msvc@4.56.0':
resolution: {integrity: sha512-vSSgny54D6P4vf2izbtFm/TcWYedw7f8eBrOiGGecyHyQB9q4Kqentjaj8hToe+995nob/Wv48pDqL5a62EWtg==}
cpu: [ia32]
os: [win32]
'@rollup/rollup-win32-x64-gnu@4.55.2':
resolution: {integrity: sha512-KvXsBvp13oZz9JGe5NYS7FNizLe99Ny+W8ETsuCyjXiKdiGrcz2/J/N8qxZ/RSwivqjQguug07NLHqrIHrqfYw==}
'@rollup/rollup-win32-x64-gnu@4.56.0':
resolution: {integrity: sha512-FeCnkPCTHQJFbiGG49KjV5YGW/8b9rrXAM2Mz2kiIoktq2qsJxRD5giEMEOD2lPdgs72upzefaUvS+nc8E3UzQ==}
cpu: [x64]
os: [win32]
'@rollup/rollup-win32-x64-msvc@4.55.2':
resolution: {integrity: sha512-xNO+fksQhsAckRtDSPWaMeT1uIM+JrDRXlerpnWNXhn1TdB3YZ6uKBMBTKP0eX9XtYEP978hHk1f8332i2AW8Q==}
'@rollup/rollup-win32-x64-msvc@4.56.0':
resolution: {integrity: sha512-H8AE9Ur/t0+1VXujj90w0HrSOuv0Nq9r1vSZF2t5km20NTfosQsGGUXDaKdQZzwuLts7IyL1fYT4hM95TI9c4g==}
cpu: [x64]
os: [win32]
@@ -1373,68 +1373,68 @@ packages:
'@surma/rollup-plugin-off-main-thread@2.2.3':
resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==}
'@swc/core-darwin-arm64@1.15.8':
resolution: {integrity: sha512-M9cK5GwyWWRkRGwwCbREuj6r8jKdES/haCZ3Xckgkl8MUQJZA3XB7IXXK1IXRNeLjg6m7cnoMICpXv1v1hlJOg==}
'@swc/core-darwin-arm64@1.15.10':
resolution: {integrity: sha512-U72pGqmJYbjrLhMndIemZ7u9Q9owcJczGxwtfJlz/WwMaGYAV/g4nkGiUVk/+QSX8sFCAjanovcU1IUsP2YulA==}
engines: {node: '>=10'}
cpu: [arm64]
os: [darwin]
'@swc/core-darwin-x64@1.15.8':
resolution: {integrity: sha512-j47DasuOvXl80sKJHSi2X25l44CMc3VDhlJwA7oewC1nV1VsSzwX+KOwE5tLnfORvVJJyeiXgJORNYg4jeIjYQ==}
'@swc/core-darwin-x64@1.15.10':
resolution: {integrity: sha512-NZpDXtwHH083L40xdyj1sY31MIwLgOxKfZEAGCI8xHXdHa+GWvEiVdGiu4qhkJctoHFzAEc7ZX3GN5phuJcPuQ==}
engines: {node: '>=10'}
cpu: [x64]
os: [darwin]
'@swc/core-linux-arm-gnueabihf@1.15.8':
resolution: {integrity: sha512-siAzDENu2rUbwr9+fayWa26r5A9fol1iORG53HWxQL1J8ym4k7xt9eME0dMPXlYZDytK5r9sW8zEA10F2U3Xwg==}
'@swc/core-linux-arm-gnueabihf@1.15.10':
resolution: {integrity: sha512-ioieF5iuRziUF1HkH1gg1r93e055dAdeBAPGAk40VjqpL5/igPJ/WxFHGvc6WMLhUubSJI4S0AiZAAhEAp1jDg==}
engines: {node: '>=10'}
cpu: [arm]
os: [linux]
'@swc/core-linux-arm64-gnu@1.15.8':
resolution: {integrity: sha512-o+1y5u6k2FfPYbTRUPvurwzNt5qd0NTumCTFscCNuBksycloXY16J8L+SMW5QRX59n4Hp9EmFa3vpvNHRVv1+Q==}
'@swc/core-linux-arm64-gnu@1.15.10':
resolution: {integrity: sha512-tD6BClOrxSsNus9cJL7Gxdv7z7Y2hlyvZd9l0NQz+YXzmTWqnfzLpg16ovEI7gknH2AgDBB5ywOsqu8hUgSeEQ==}
engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
'@swc/core-linux-arm64-musl@1.15.8':
resolution: {integrity: sha512-koiCqL09EwOP1S2RShCI7NbsQuG6r2brTqUYE7pV7kZm9O17wZ0LSz22m6gVibpwEnw8jI3IE1yYsQTVpluALw==}
'@swc/core-linux-arm64-musl@1.15.10':
resolution: {integrity: sha512-4uAHO3nbfbrTcmO/9YcVweTQdx5fN3l7ewwl5AEK4yoC4wXmoBTEPHAVdKNe4r9+xrTgd4BgyPsy0409OjjlMw==}
engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
'@swc/core-linux-x64-gnu@1.15.8':
resolution: {integrity: sha512-4p6lOMU3bC+Vd5ARtKJ/FxpIC5G8v3XLoPEZ5s7mLR8h7411HWC/LmTXDHcrSXRC55zvAVia1eldy6zDLz8iFQ==}
'@swc/core-linux-x64-gnu@1.15.10':
resolution: {integrity: sha512-W0h9ONNw1pVIA0cN7wtboOSTl4Jk3tHq+w2cMPQudu9/+3xoCxpFb9ZdehwCAk29IsvdWzGzY6P7dDVTyFwoqg==}
engines: {node: '>=10'}
cpu: [x64]
os: [linux]
'@swc/core-linux-x64-musl@1.15.8':
resolution: {integrity: sha512-z3XBnbrZAL+6xDGAhJoN4lOueIxC/8rGrJ9tg+fEaeqLEuAtHSW2QHDHxDwkxZMjuF/pZ6MUTjHjbp8wLbuRLA==}
'@swc/core-linux-x64-musl@1.15.10':
resolution: {integrity: sha512-XQNZlLZB62S8nAbw7pqoqwy91Ldy2RpaMRqdRN3T+tAg6Xg6FywXRKCsLh6IQOadr4p1+lGnqM/Wn35z5a/0Vw==}
engines: {node: '>=10'}
cpu: [x64]
os: [linux]
'@swc/core-win32-arm64-msvc@1.15.8':
resolution: {integrity: sha512-djQPJ9Rh9vP8GTS/Df3hcc6XP6xnG5c8qsngWId/BLA9oX6C7UzCPAn74BG/wGb9a6j4w3RINuoaieJB3t+7iQ==}
'@swc/core-win32-arm64-msvc@1.15.10':
resolution: {integrity: sha512-qnAGrRv5Nj/DATxAmCnJQRXXQqnJwR0trxLndhoHoxGci9MuguNIjWahS0gw8YZFjgTinbTxOwzatkoySihnmw==}
engines: {node: '>=10'}
cpu: [arm64]
os: [win32]
'@swc/core-win32-ia32-msvc@1.15.8':
resolution: {integrity: sha512-/wfAgxORg2VBaUoFdytcVBVCgf1isWZIEXB9MZEUty4wwK93M/PxAkjifOho9RN3WrM3inPLabICRCEgdHpKKQ==}
'@swc/core-win32-ia32-msvc@1.15.10':
resolution: {integrity: sha512-i4X/q8QSvzVlaRtv1xfnfl+hVKpCfiJ+9th484rh937fiEZKxZGf51C+uO0lfKDP1FfnT6C1yBYwHy7FLBVXFw==}
engines: {node: '>=10'}
cpu: [ia32]
os: [win32]
'@swc/core-win32-x64-msvc@1.15.8':
resolution: {integrity: sha512-GpMePrh9Sl4d61o4KAHOOv5is5+zt6BEXCOCgs/H0FLGeii7j9bWDE8ExvKFy2GRRZVNR1ugsnzaGWHKM6kuzA==}
'@swc/core-win32-x64-msvc@1.15.10':
resolution: {integrity: sha512-HvY8XUFuoTXn6lSccDLYFlXv1SU/PzYi4PyUqGT++WfTnbw/68N/7BdUZqglGRwiSqr0qhYt/EhmBpULj0J9rA==}
engines: {node: '>=10'}
cpu: [x64]
os: [win32]
'@swc/core@1.15.8':
resolution: {integrity: sha512-T8keoJjXaSUoVBCIjgL6wAnhADIb09GOELzKg10CjNg+vLX48P93SME6jTfte9MZIm5m+Il57H3rTSk/0kzDUw==}
'@swc/core@1.15.10':
resolution: {integrity: sha512-udNofxftduMUEv7nqahl2nvodCiCDQ4Ge0ebzsEm6P8s0RC2tBM0Hqx0nNF5J/6t9uagFJyWIDjXy3IIWMHDJw==}
engines: {node: '>=10'}
peerDependencies:
'@swc/helpers': '>=0.5.17'
@@ -1448,8 +1448,8 @@ packages:
'@swc/types@0.1.25':
resolution: {integrity: sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==}
'@swc/wasm@1.15.8':
resolution: {integrity: sha512-RG2BxGbbsjtddFCo1ghKH6A/BMXbY1eMBfpysV0lJMCpI4DZOjW1BNBnxvBt7YsYmlJtmy5UXIg9/4ekBTFFaQ==}
'@swc/wasm@1.15.10':
resolution: {integrity: sha512-kVTb346oP16MOwDibhLr/nv+swrw/M8dcim6VjsWKZR5ZVOCZU9RrzrT5gMh72v4Y37Agilb8SCzEZ4wTvQGpQ==}
'@transloadit/prettier-bytes@0.0.7':
resolution: {integrity: sha512-VeJbUb0wEKbcwaSlj5n+LscBl9IPgLPkHVGBkh00cztv6X4L/TJXK58LzFuBKX7/GAfiGhIwH67YTLTlzvIzBA==}
@@ -1722,8 +1722,8 @@ packages:
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
baseline-browser-mapping@2.9.15:
resolution: {integrity: sha512-kX8h7K2srmDyYnXRIppo4AH/wYgzWVCs+eKr3RusRSQ5PvRYoEFmR/I0PbdTjKFAoKqp5+kbxnNTFO9jOfSVJg==}
baseline-browser-mapping@2.9.17:
resolution: {integrity: sha512-agD0MgJFUP/4nvjqzIB29zRPUuCF7Ge6mEv9s8dHrtYD7QWXRcx75rOADE/d5ah1NI+0vkDl0yorDd5U852IQQ==}
hasBin: true
blake3-wasm@2.1.5:
@@ -1752,8 +1752,8 @@ packages:
resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==}
engines: {node: '>= 0.4'}
caniuse-lite@1.0.30001765:
resolution: {integrity: sha512-LWcNtSyZrakjECqmpP4qdg0MMGdN368D7X8XvvAqOcqMv0RxnlqVKZl2V6/mBR68oYMxOZPLw/gO7DuisMHUvQ==}
caniuse-lite@1.0.30001766:
resolution: {integrity: sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==}
chokidar@4.0.3:
resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
@@ -1796,8 +1796,8 @@ packages:
resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==}
engines: {node: '>=18'}
core-js-compat@3.47.0:
resolution: {integrity: sha512-IGfuznZ/n7Kp9+nypamBhvwdwLsW6KC8IOaURw2doAK5e98AG3acVLdh0woOnEqCfUtS+Vu882JE4k/DAm3ItQ==}
core-js-compat@3.48.0:
resolution: {integrity: sha512-OM4cAF3D6VtH/WkLtWvyNC56EZVXsZdU3iqaMG2B4WvYrlqU831pc4UtG5yp0sE9z8Y02wVN7PjW5Zf9Gt0f1Q==}
core-util-is@1.0.3:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
@@ -1890,8 +1890,8 @@ packages:
engines: {node: '>=0.10.0'}
hasBin: true
electron-to-chromium@1.5.267:
resolution: {integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==}
electron-to-chromium@1.5.277:
resolution: {integrity: sha512-wKXFZw4erWmmOz5N/grBoJ2XrNJGDFMu2+W5ACHza5rHtvsqrK4gb6rnLC7XxKB9WlJ+RmyQatuEXmtm86xbnw==}
emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
@@ -1899,8 +1899,8 @@ packages:
emoji-regex@9.2.2:
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
entities@7.0.0:
resolution: {integrity: sha512-FDWG5cmEYf2Z00IkYRhbFrwIwvdFKH07uV8dvNy0omp/Qb1xcyCWp2UDtcwJF4QZZvk0sLudP6/hAu42TaqVhQ==}
entities@7.0.1:
resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==}
engines: {node: '>=0.12'}
error-stack-parser-es@1.0.5:
@@ -2325,8 +2325,8 @@ packages:
resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==}
engines: {node: '>=14'}
lodash-es@4.17.22:
resolution: {integrity: sha512-XEawp1t0gxSi9x01glktRZ5HDy0HXqrM0x5pXQM98EaI0NxO6jVM7omDOxsuEo5UIASAnm2bRp1Jt/e0a2XU8Q==}
lodash-es@4.17.23:
resolution: {integrity: sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==}
lodash.camelcase@4.3.0:
resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==}
@@ -2353,8 +2353,8 @@ packages:
lodash.toarray@4.4.0:
resolution: {integrity: sha512-QyffEA3i5dma5q2490+SgCvDN0pXLmRGSyAANuVi0HQ01Pkfr9fuoKQW8wm1wGBnJITs/mS7wQvS6VshUEBFCw==}
lodash@4.17.21:
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
lodash@4.17.23:
resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==}
lru-cache@11.2.4:
resolution: {integrity: sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==}
@@ -2387,8 +2387,8 @@ packages:
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
engines: {node: '>= 0.6'}
miniflare@4.20260114.0:
resolution: {integrity: sha512-QwHT7S6XqGdQxIvql1uirH/7/i3zDEt0B/YBXTYzMfJtVCR4+ue3KPkU+Bl0zMxvpgkvjh9+eCHhJbKEqya70A==}
miniflare@4.20260120.0:
resolution: {integrity: sha512-XXZyE2pDKMtP5OLuv0LPHEAzIYhov4jrYjcqrhhqtxGGtXneWOHvXIPo+eV8sqwqWd3R7j4DlEKcyb+87BR49Q==}
engines: {node: '>=18.0.0'}
hasBin: true
@@ -2574,8 +2574,8 @@ packages:
engines: {node: '>=10.0.0'}
hasBin: true
rollup@4.55.2:
resolution: {integrity: sha512-PggGy4dhwx5qaW+CKBilA/98Ql9keyfnb7lh4SR6shQ91QQQi1ORJ1v4UinkdP2i87OBs9AQFooQylcrrRfIcg==}
rollup@4.56.0:
resolution: {integrity: sha512-9FwVqlgUHzbXtDg9RCMgodF3Ua4Na6Gau+Sdt9vyCN4RhHfVKX2DCHy3BjMLTDd47ITDhYAnTwGulWTblJSDLg==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
@@ -2831,8 +2831,8 @@ packages:
resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==}
engines: {node: '>= 0.4'}
undici@7.14.0:
resolution: {integrity: sha512-Vqs8HTzjpQXZeXdpsfChQTlafcMQaaIwnGwLam1wudSSjlJeQ3bw1j+TLPePgrCnCpUXx7Ba5Pdpf5OBih62NQ==}
undici@7.18.2:
resolution: {integrity: sha512-y+8YjDFzWdQlSE9N5nzKMT3g4a5UBX1HKowfdXh0uvAnTaqqwqB92Jt4UXBAeKekDs5IaDKyJFR4X1gYVCgXcw==}
engines: {node: '>=20.18.1'}
unenv@2.0.0-rc.24:
@@ -3100,17 +3100,17 @@ packages:
workbox-window@7.4.0:
resolution: {integrity: sha512-/bIYdBLAVsNR3v7gYGaV4pQW3M3kEPx5E8vDxGvxo6khTrGtSSCS7QiFKv9ogzBgZiy0OXLP9zO28U/1nF1mfw==}
workerd@1.20260114.0:
resolution: {integrity: sha512-kTJ+jNdIllOzWuVA3NRQRvywP0T135zdCjAE2dAUY1BFbxM6fmMZV8BbskEoQ4hAODVQUfZQmyGctcwvVCKxFA==}
workerd@1.20260120.0:
resolution: {integrity: sha512-R6X/VQOkwLTBGLp4VRUwLQZZVxZ9T9J8pGiJ6GQUMaRkY7TVWrCSkVfoNMM1/YyFsY5UYhhPoQe5IehnhZ3Pdw==}
engines: {node: '>=16'}
hasBin: true
wrangler@4.59.2:
resolution: {integrity: sha512-Z4xn6jFZTaugcOKz42xvRAYKgkVUERHVbuCJ5+f+gK+R6k12L02unakPGOA0L0ejhUl16dqDjKe4tmL9sedHcw==}
wrangler@4.60.0:
resolution: {integrity: sha512-n4kibm/xY0Qd5G2K/CbAQeVeOIlwPNVglmFjlDRCCYk3hZh8IggO/rg8AXt/vByK2Sxsugl5Z7yvgWxrUbmS6g==}
engines: {node: '>=20.0.0'}
hasBin: true
peerDependencies:
'@cloudflare/workers-types': ^4.20260114.0
'@cloudflare/workers-types': ^4.20260120.0
peerDependenciesMeta:
'@cloudflare/workers-types':
optional: true
@@ -3773,7 +3773,7 @@ snapshots:
babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.6)
babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.6)
babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.6)
core-js-compat: 3.47.0
core-js-compat: 3.48.0
semver: 6.3.1
transitivePeerDependencies:
- supports-color
@@ -3812,25 +3812,25 @@ snapshots:
'@cloudflare/kv-asset-handler@0.4.2': {}
'@cloudflare/unenv-preset@2.10.0(unenv@2.0.0-rc.24)(workerd@1.20260114.0)':
'@cloudflare/unenv-preset@2.11.0(unenv@2.0.0-rc.24)(workerd@1.20260120.0)':
dependencies:
unenv: 2.0.0-rc.24
optionalDependencies:
workerd: 1.20260114.0
workerd: 1.20260120.0
'@cloudflare/workerd-darwin-64@1.20260114.0':
'@cloudflare/workerd-darwin-64@1.20260120.0':
optional: true
'@cloudflare/workerd-darwin-arm64@1.20260114.0':
'@cloudflare/workerd-darwin-arm64@1.20260120.0':
optional: true
'@cloudflare/workerd-linux-64@1.20260114.0':
'@cloudflare/workerd-linux-64@1.20260120.0':
optional: true
'@cloudflare/workerd-linux-arm64@1.20260114.0':
'@cloudflare/workerd-linux-arm64@1.20260120.0':
optional: true
'@cloudflare/workerd-windows-64@1.20260114.0':
'@cloudflare/workerd-windows-64@1.20260120.0':
optional: true
'@cspotcode/source-map-support@0.8.1':
@@ -4230,79 +4230,79 @@ snapshots:
optionalDependencies:
rollup: 2.79.2
'@rollup/rollup-android-arm-eabi@4.55.2':
'@rollup/rollup-android-arm-eabi@4.56.0':
optional: true
'@rollup/rollup-android-arm64@4.55.2':
'@rollup/rollup-android-arm64@4.56.0':
optional: true
'@rollup/rollup-darwin-arm64@4.55.2':
'@rollup/rollup-darwin-arm64@4.56.0':
optional: true
'@rollup/rollup-darwin-x64@4.55.2':
'@rollup/rollup-darwin-x64@4.56.0':
optional: true
'@rollup/rollup-freebsd-arm64@4.55.2':
'@rollup/rollup-freebsd-arm64@4.56.0':
optional: true
'@rollup/rollup-freebsd-x64@4.55.2':
'@rollup/rollup-freebsd-x64@4.56.0':
optional: true
'@rollup/rollup-linux-arm-gnueabihf@4.55.2':
'@rollup/rollup-linux-arm-gnueabihf@4.56.0':
optional: true
'@rollup/rollup-linux-arm-musleabihf@4.55.2':
'@rollup/rollup-linux-arm-musleabihf@4.56.0':
optional: true
'@rollup/rollup-linux-arm64-gnu@4.55.2':
'@rollup/rollup-linux-arm64-gnu@4.56.0':
optional: true
'@rollup/rollup-linux-arm64-musl@4.55.2':
'@rollup/rollup-linux-arm64-musl@4.56.0':
optional: true
'@rollup/rollup-linux-loong64-gnu@4.55.2':
'@rollup/rollup-linux-loong64-gnu@4.56.0':
optional: true
'@rollup/rollup-linux-loong64-musl@4.55.2':
'@rollup/rollup-linux-loong64-musl@4.56.0':
optional: true
'@rollup/rollup-linux-ppc64-gnu@4.55.2':
'@rollup/rollup-linux-ppc64-gnu@4.56.0':
optional: true
'@rollup/rollup-linux-ppc64-musl@4.55.2':
'@rollup/rollup-linux-ppc64-musl@4.56.0':
optional: true
'@rollup/rollup-linux-riscv64-gnu@4.55.2':
'@rollup/rollup-linux-riscv64-gnu@4.56.0':
optional: true
'@rollup/rollup-linux-riscv64-musl@4.55.2':
'@rollup/rollup-linux-riscv64-musl@4.56.0':
optional: true
'@rollup/rollup-linux-s390x-gnu@4.55.2':
'@rollup/rollup-linux-s390x-gnu@4.56.0':
optional: true
'@rollup/rollup-linux-x64-gnu@4.55.2':
'@rollup/rollup-linux-x64-gnu@4.56.0':
optional: true
'@rollup/rollup-linux-x64-musl@4.55.2':
'@rollup/rollup-linux-x64-musl@4.56.0':
optional: true
'@rollup/rollup-openbsd-x64@4.55.2':
'@rollup/rollup-openbsd-x64@4.56.0':
optional: true
'@rollup/rollup-openharmony-arm64@4.55.2':
'@rollup/rollup-openharmony-arm64@4.56.0':
optional: true
'@rollup/rollup-win32-arm64-msvc@4.55.2':
'@rollup/rollup-win32-arm64-msvc@4.56.0':
optional: true
'@rollup/rollup-win32-ia32-msvc@4.55.2':
'@rollup/rollup-win32-ia32-msvc@4.56.0':
optional: true
'@rollup/rollup-win32-x64-gnu@4.55.2':
'@rollup/rollup-win32-x64-gnu@4.56.0':
optional: true
'@rollup/rollup-win32-x64-msvc@4.55.2':
'@rollup/rollup-win32-x64-msvc@4.56.0':
optional: true
'@simplewebauthn/browser@10.0.0':
@@ -4322,51 +4322,51 @@ snapshots:
magic-string: 0.25.9
string.prototype.matchall: 4.0.12
'@swc/core-darwin-arm64@1.15.8':
'@swc/core-darwin-arm64@1.15.10':
optional: true
'@swc/core-darwin-x64@1.15.8':
'@swc/core-darwin-x64@1.15.10':
optional: true
'@swc/core-linux-arm-gnueabihf@1.15.8':
'@swc/core-linux-arm-gnueabihf@1.15.10':
optional: true
'@swc/core-linux-arm64-gnu@1.15.8':
'@swc/core-linux-arm64-gnu@1.15.10':
optional: true
'@swc/core-linux-arm64-musl@1.15.8':
'@swc/core-linux-arm64-musl@1.15.10':
optional: true
'@swc/core-linux-x64-gnu@1.15.8':
'@swc/core-linux-x64-gnu@1.15.10':
optional: true
'@swc/core-linux-x64-musl@1.15.8':
'@swc/core-linux-x64-musl@1.15.10':
optional: true
'@swc/core-win32-arm64-msvc@1.15.8':
'@swc/core-win32-arm64-msvc@1.15.10':
optional: true
'@swc/core-win32-ia32-msvc@1.15.8':
'@swc/core-win32-ia32-msvc@1.15.10':
optional: true
'@swc/core-win32-x64-msvc@1.15.8':
'@swc/core-win32-x64-msvc@1.15.10':
optional: true
'@swc/core@1.15.8':
'@swc/core@1.15.10':
dependencies:
'@swc/counter': 0.1.3
'@swc/types': 0.1.25
optionalDependencies:
'@swc/core-darwin-arm64': 1.15.8
'@swc/core-darwin-x64': 1.15.8
'@swc/core-linux-arm-gnueabihf': 1.15.8
'@swc/core-linux-arm64-gnu': 1.15.8
'@swc/core-linux-arm64-musl': 1.15.8
'@swc/core-linux-x64-gnu': 1.15.8
'@swc/core-linux-x64-musl': 1.15.8
'@swc/core-win32-arm64-msvc': 1.15.8
'@swc/core-win32-ia32-msvc': 1.15.8
'@swc/core-win32-x64-msvc': 1.15.8
'@swc/core-darwin-arm64': 1.15.10
'@swc/core-darwin-x64': 1.15.10
'@swc/core-linux-arm-gnueabihf': 1.15.10
'@swc/core-linux-arm64-gnu': 1.15.10
'@swc/core-linux-arm64-musl': 1.15.10
'@swc/core-linux-x64-gnu': 1.15.10
'@swc/core-linux-x64-musl': 1.15.10
'@swc/core-win32-arm64-msvc': 1.15.10
'@swc/core-win32-ia32-msvc': 1.15.10
'@swc/core-win32-x64-msvc': 1.15.10
'@swc/counter@0.1.3': {}
@@ -4374,7 +4374,7 @@ snapshots:
dependencies:
'@swc/counter': 0.1.3
'@swc/wasm@1.15.8': {}
'@swc/wasm@1.15.10': {}
'@transloadit/prettier-bytes@0.0.7': {}
@@ -4447,7 +4447,7 @@ snapshots:
dependencies:
'@babel/parser': 7.28.6
'@vue/shared': 3.5.27
entities: 7.0.0
entities: 7.0.1
estree-walker: 2.0.2
source-map-js: 1.2.1
@@ -4689,7 +4689,7 @@ snapshots:
dependencies:
'@babel/core': 7.28.6
'@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.6)
core-js-compat: 3.47.0
core-js-compat: 3.48.0
transitivePeerDependencies:
- supports-color
@@ -4702,7 +4702,7 @@ snapshots:
balanced-match@1.0.2: {}
baseline-browser-mapping@2.9.15: {}
baseline-browser-mapping@2.9.17: {}
blake3-wasm@2.1.5: {}
@@ -4712,9 +4712,9 @@ snapshots:
browserslist@4.28.1:
dependencies:
baseline-browser-mapping: 2.9.15
caniuse-lite: 1.0.30001765
electron-to-chromium: 1.5.267
baseline-browser-mapping: 2.9.17
caniuse-lite: 1.0.30001766
electron-to-chromium: 1.5.277
node-releases: 2.0.27
update-browserslist-db: 1.2.3(browserslist@4.28.1)
@@ -4737,7 +4737,7 @@ snapshots:
call-bind-apply-helpers: 1.0.2
get-intrinsic: 1.3.0
caniuse-lite@1.0.30001765: {}
caniuse-lite@1.0.30001766: {}
chokidar@4.0.3:
dependencies:
@@ -4773,7 +4773,7 @@ snapshots:
cookie@1.1.1: {}
core-js-compat@3.47.0:
core-js-compat@3.48.0:
dependencies:
browserslist: 4.28.1
@@ -4865,13 +4865,13 @@ snapshots:
dependencies:
jake: 10.9.4
electron-to-chromium@1.5.267: {}
electron-to-chromium@1.5.277: {}
emoji-regex@8.0.0: {}
emoji-regex@9.2.2: {}
entities@7.0.0: {}
entities@7.0.1: {}
error-stack-parser-es@1.0.5: {}
@@ -5388,7 +5388,7 @@ snapshots:
pkg-types: 2.3.0
quansync: 0.2.11
lodash-es@4.17.22: {}
lodash-es@4.17.23: {}
lodash.camelcase@4.3.0: {}
@@ -5406,7 +5406,7 @@ snapshots:
lodash.toarray@4.4.0: {}
lodash@4.17.21: {}
lodash@4.17.23: {}
lru-cache@11.2.4: {}
@@ -5436,12 +5436,12 @@ snapshots:
dependencies:
mime-db: 1.52.0
miniflare@4.20260114.0:
miniflare@4.20260120.0:
dependencies:
'@cspotcode/source-map-support': 0.8.1
sharp: 0.34.5
undici: 7.14.0
workerd: 1.20260114.0
undici: 7.18.2
workerd: 1.20260120.0
ws: 8.18.0
youch: 4.1.0-beta.10
zod: 3.25.76
@@ -5482,8 +5482,8 @@ snapshots:
date-fns-tz: 3.2.0(date-fns@4.1.0)
evtd: 0.2.4
highlight.js: 11.11.1
lodash: 4.17.21
lodash-es: 4.17.22
lodash: 4.17.23
lodash-es: 4.17.23
seemly: 0.3.10
treemate: 0.3.11
vdirs: 0.1.8(vue@3.5.27(typescript@5.4.5))
@@ -5648,35 +5648,35 @@ snapshots:
optionalDependencies:
fsevents: 2.3.3
rollup@4.55.2:
rollup@4.56.0:
dependencies:
'@types/estree': 1.0.8
optionalDependencies:
'@rollup/rollup-android-arm-eabi': 4.55.2
'@rollup/rollup-android-arm64': 4.55.2
'@rollup/rollup-darwin-arm64': 4.55.2
'@rollup/rollup-darwin-x64': 4.55.2
'@rollup/rollup-freebsd-arm64': 4.55.2
'@rollup/rollup-freebsd-x64': 4.55.2
'@rollup/rollup-linux-arm-gnueabihf': 4.55.2
'@rollup/rollup-linux-arm-musleabihf': 4.55.2
'@rollup/rollup-linux-arm64-gnu': 4.55.2
'@rollup/rollup-linux-arm64-musl': 4.55.2
'@rollup/rollup-linux-loong64-gnu': 4.55.2
'@rollup/rollup-linux-loong64-musl': 4.55.2
'@rollup/rollup-linux-ppc64-gnu': 4.55.2
'@rollup/rollup-linux-ppc64-musl': 4.55.2
'@rollup/rollup-linux-riscv64-gnu': 4.55.2
'@rollup/rollup-linux-riscv64-musl': 4.55.2
'@rollup/rollup-linux-s390x-gnu': 4.55.2
'@rollup/rollup-linux-x64-gnu': 4.55.2
'@rollup/rollup-linux-x64-musl': 4.55.2
'@rollup/rollup-openbsd-x64': 4.55.2
'@rollup/rollup-openharmony-arm64': 4.55.2
'@rollup/rollup-win32-arm64-msvc': 4.55.2
'@rollup/rollup-win32-ia32-msvc': 4.55.2
'@rollup/rollup-win32-x64-gnu': 4.55.2
'@rollup/rollup-win32-x64-msvc': 4.55.2
'@rollup/rollup-android-arm-eabi': 4.56.0
'@rollup/rollup-android-arm64': 4.56.0
'@rollup/rollup-darwin-arm64': 4.56.0
'@rollup/rollup-darwin-x64': 4.56.0
'@rollup/rollup-freebsd-arm64': 4.56.0
'@rollup/rollup-freebsd-x64': 4.56.0
'@rollup/rollup-linux-arm-gnueabihf': 4.56.0
'@rollup/rollup-linux-arm-musleabihf': 4.56.0
'@rollup/rollup-linux-arm64-gnu': 4.56.0
'@rollup/rollup-linux-arm64-musl': 4.56.0
'@rollup/rollup-linux-loong64-gnu': 4.56.0
'@rollup/rollup-linux-loong64-musl': 4.56.0
'@rollup/rollup-linux-ppc64-gnu': 4.56.0
'@rollup/rollup-linux-ppc64-musl': 4.56.0
'@rollup/rollup-linux-riscv64-gnu': 4.56.0
'@rollup/rollup-linux-riscv64-musl': 4.56.0
'@rollup/rollup-linux-s390x-gnu': 4.56.0
'@rollup/rollup-linux-x64-gnu': 4.56.0
'@rollup/rollup-linux-x64-musl': 4.56.0
'@rollup/rollup-openbsd-x64': 4.56.0
'@rollup/rollup-openharmony-arm64': 4.56.0
'@rollup/rollup-win32-arm64-msvc': 4.56.0
'@rollup/rollup-win32-ia32-msvc': 4.56.0
'@rollup/rollup-win32-x64-gnu': 4.56.0
'@rollup/rollup-win32-x64-msvc': 4.56.0
fsevents: 2.3.3
safe-array-concat@1.1.3:
@@ -6010,7 +6010,7 @@ snapshots:
has-symbols: 1.1.0
which-boxed-primitive: 1.1.1
undici@7.14.0: {}
undici@7.18.2: {}
unenv@2.0.0-rc.24:
dependencies:
@@ -6124,8 +6124,8 @@ snapshots:
vite-plugin-top-level-await@1.6.0(rollup@2.79.2)(vite@7.3.1(terser@5.46.0)):
dependencies:
'@rollup/plugin-virtual': 3.0.2(rollup@2.79.2)
'@swc/core': 1.15.8
'@swc/wasm': 1.15.8
'@swc/core': 1.15.10
'@swc/wasm': 1.15.10
uuid: 10.0.0
vite: 7.3.1(terser@5.46.0)
transitivePeerDependencies:
@@ -6142,7 +6142,7 @@ snapshots:
fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3
postcss: 8.5.6
rollup: 4.55.2
rollup: 4.56.0
tinyglobby: 0.2.15
optionalDependencies:
fsevents: 2.3.3
@@ -6272,7 +6272,7 @@ snapshots:
fast-json-stable-stringify: 2.1.0
fs-extra: 9.1.0
glob: 11.1.0
lodash: 4.17.21
lodash: 4.17.23
pretty-bytes: 5.6.0
rollup: 2.79.2
source-map: 0.8.0-beta.0
@@ -6360,24 +6360,24 @@ snapshots:
'@types/trusted-types': 2.0.7
workbox-core: 7.4.0
workerd@1.20260114.0:
workerd@1.20260120.0:
optionalDependencies:
'@cloudflare/workerd-darwin-64': 1.20260114.0
'@cloudflare/workerd-darwin-arm64': 1.20260114.0
'@cloudflare/workerd-linux-64': 1.20260114.0
'@cloudflare/workerd-linux-arm64': 1.20260114.0
'@cloudflare/workerd-windows-64': 1.20260114.0
'@cloudflare/workerd-darwin-64': 1.20260120.0
'@cloudflare/workerd-darwin-arm64': 1.20260120.0
'@cloudflare/workerd-linux-64': 1.20260120.0
'@cloudflare/workerd-linux-arm64': 1.20260120.0
'@cloudflare/workerd-windows-64': 1.20260120.0
wrangler@4.59.2:
wrangler@4.60.0:
dependencies:
'@cloudflare/kv-asset-handler': 0.4.2
'@cloudflare/unenv-preset': 2.10.0(unenv@2.0.0-rc.24)(workerd@1.20260114.0)
'@cloudflare/unenv-preset': 2.11.0(unenv@2.0.0-rc.24)(workerd@1.20260120.0)
blake3-wasm: 2.1.5
esbuild: 0.27.0
miniflare: 4.20260114.0
miniflare: 4.20260120.0
path-to-regexp: 6.3.0
unenv: 2.0.0-rc.24
workerd: 1.20260114.0
workerd: 1.20260120.0
optionalDependencies:
fsevents: 2.3.3
transitivePeerDependencies:

View File

@@ -9,6 +9,9 @@ export type UserOauth2Settings = {
redirectURL: string;
logoutURL?: string;
userEmailKey: string;
enableEmailFormat?: boolean; // Enable email format transformation
userEmailFormat?: string; // Regex pattern to match email
userEmailReplace?: string; // Replacement template using $1, $2, etc.
scope: string;
enableMailAllowList?: boolean | undefined;
mailAllowList?: string[] | undefined;

View File

@@ -26,6 +26,10 @@ const { t } = useI18n({
addOauth2: 'Add Oauth2',
name: 'Name',
oauth2Type: 'Oauth2 Type',
enableEmailFormat: 'Enable Email Format',
userEmailFormat: 'Email Regex Pattern',
userEmailReplace: 'Replace Template',
userEmailFormatTip: 'Use regex to transform email. Example: ^(.+)@old\\.com$ with $1@new.com',
tip: 'Third-party login will automatically use the user\'s email to register an account (the same email will be regarded as the same account), this account is the same as the registered account, and you can also set the password through the forget password',
},
zh: {
@@ -39,6 +43,10 @@ const { t } = useI18n({
addOauth2: '添加 Oauth2',
name: '名称',
oauth2Type: 'Oauth2 类型',
enableEmailFormat: '启用邮箱格式转换',
userEmailFormat: '邮箱正则表达式',
userEmailReplace: '替换模板',
userEmailFormatTip: '使用正则转换邮箱。示例: ^(.+)@old\\.com$ 配合 $1@new.com',
tip: '第三方登录会自动使用用户邮箱注册账号(邮箱相同将视为同一账号), 此账号和注册的账号相同, 也可以通过忘记密码设置密码',
}
}
@@ -75,80 +83,55 @@ const save = async () => {
}
const addNewOauth2 = () => {
const authorizationURL = () => {
switch (newOauth2Type.value) {
case 'github':
return 'https://github.com/login/oauth/authorize'
case 'authentik':
return 'https://youdomain/application/o/authorize/'
default:
return ''
}
}
const accessTokenURL = () => {
switch (newOauth2Type.value) {
case 'github':
return 'https://github.com/login/oauth/access_token'
case 'authentik':
return 'https://youdomain/application/o/token/'
default:
return ''
}
}
const accessTokenFormat = () => {
switch (newOauth2Type.value) {
case 'github':
return 'json'
case 'authentik':
return 'urlencoded'
default:
return ''
}
}
const userInfoURL = () => {
switch (newOauth2Type.value) {
case 'github':
return 'https://api.github.com/user'
case 'authentik':
return 'https://youdomain/application/o/userinfo/'
default:
return ''
}
}
const userEmailKey = () => {
switch (newOauth2Type.value) {
case 'github':
return 'email'
case 'authentik':
return 'email'
default:
return ''
}
}
const scope = () => {
switch (newOauth2Type.value) {
case 'github':
return 'user:email'
case 'authentik':
return 'email openid'
default:
return ''
}
const templates: Record<string, Partial<UserOauth2Settings>> = {
github: {
authorizationURL: 'https://github.com/login/oauth/authorize',
accessTokenURL: 'https://github.com/login/oauth/access_token',
accessTokenFormat: 'json',
userInfoURL: 'https://api.github.com/user',
userEmailKey: 'email',
scope: 'user:email',
},
linuxdo: {
authorizationURL: 'https://connect.linux.do/oauth2/authorize',
accessTokenURL: 'https://connect.linux.do/oauth2/token',
accessTokenFormat: 'urlencoded',
userInfoURL: 'https://connect.linux.do/api/user',
userEmailKey: 'id',
scope: 'user',
enableEmailFormat: true,
userEmailFormat: '^(.+)$',
userEmailReplace: 'linux_do_$1@oauth.linux.do',
},
authentik: {
authorizationURL: 'https://youdomain/application/o/authorize/',
accessTokenURL: 'https://youdomain/application/o/token/',
accessTokenFormat: 'urlencoded',
userInfoURL: 'https://youdomain/application/o/userinfo/',
userEmailKey: 'email',
scope: 'email openid',
},
custom: {},
}
const template = templates[newOauth2Type.value] || {}
userOauth2Settings.value.push({
name: newOauth2Name.value,
clientID: '',
clientSecret: '',
authorizationURL: authorizationURL(),
accessTokenURL: accessTokenURL(),
accessTokenFormat: accessTokenFormat(),
userInfoURL: userInfoURL(),
userEmailKey: userEmailKey(),
authorizationURL: '',
accessTokenURL: '',
accessTokenFormat: '',
userInfoURL: '',
userEmailKey: '',
redirectURL: `${window.location.origin}/user/oauth2/callback`,
logoutURL: '',
scope: scope(),
scope: '',
enableEmailFormat: false,
userEmailFormat: '',
userEmailReplace: '',
enableMailAllowList: false,
mailAllowList: constant.COMMOM_MAIL
mailAllowList: constant.COMMOM_MAIL,
...template,
} as UserOauth2Settings)
newOauth2Name.value = ''
showAddOauth2.value = false
@@ -174,6 +157,7 @@ onMounted(async () => {
<n-form-item-row :label="t('oauth2Type')" required>
<n-radio-group v-model:value="newOauth2Type">
<n-radio-button value="github" label="Github" />
<n-radio-button value="linuxdo" label="Linux Do" />
<n-radio-button value="authentik" label="Authentik" />
<n-radio-button value="custom" label="Custom" />
</n-radio-group>
@@ -218,7 +202,7 @@ onMounted(async () => {
<n-input v-model:value="item.clientID" />
</n-form-item-row>
<n-form-item-row label="Client Secret" required>
<n-input v-model:value="item.clientSecret" type="password" show-password-on="click" />
<n-input v-model:value="item.clientSecret" />
</n-form-item-row>
<n-form-item-row label="Authorization URL" required>
<n-input v-model:value="item.authorizationURL" />
@@ -235,6 +219,27 @@ onMounted(async () => {
<n-form-item-row label="User Email Key (Support JSONPATH like $[0].email)" required>
<n-input v-model:value="item.userEmailKey" />
</n-form-item-row>
<n-form-item-row :label="t('enableEmailFormat')">
<n-checkbox v-model:checked="item.enableEmailFormat">
{{ t('enable') }}
</n-checkbox>
</n-form-item-row>
<n-form-item-row v-if="item.enableEmailFormat" :label="t('userEmailFormat')">
<n-tooltip trigger="hover">
<template #trigger>
<n-input v-model:value="item.userEmailFormat" :placeholder="'^(.+)@old\\.com$'" />
</template>
{{ t('userEmailFormatTip') }}
</n-tooltip>
</n-form-item-row>
<n-form-item-row v-if="item.enableEmailFormat" :label="t('userEmailReplace')">
<n-tooltip trigger="hover">
<template #trigger>
<n-input v-model:value="item.userEmailReplace" placeholder="$1@new.com" />
</template>
{{ t('userEmailFormatTip') }}
</n-tooltip>
</n-form-item-row>
<n-form-item-row label="Redirect URL" required>
<n-input v-model:value="item.redirectURL" />
</n-form-item-row>

View File

@@ -11,7 +11,7 @@
"author": "",
"license": "ISC",
"devDependencies": {
"wrangler": "^4.59.2"
"wrangler": "^4.60.0"
},
"packageManager": "pnpm@10.10.0+sha512.d615db246fe70f25dcfea6d8d73dee782ce23e2245e3c4f6f888249fb568149318637dca73c2c5c8ef2a4ca0d5657fb9567188bfab47f566d1ee6ce987815c39"
}

View File

@@ -13,6 +13,11 @@
Reference: [Creating an OAuth App](https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/creating-an-oauth-app)
### Linux Do
- Create an application at [Linux Do Connect](https://connect.linux.do/) to obtain `Client ID` and `Client Secret`
- Linux Do returns a user ID instead of an email, so you need to enable the Email Format feature
### Authentik
- [Authentik OAuth2 Provider](https://docs.goauthentik.io/docs/providers/oauth2/)
@@ -21,6 +26,43 @@ Reference: [Creating an OAuth App](https://docs.github.com/en/apps/oauth-apps/bu
![oauth2](/feature/oauth2.png)
### Configuration Fields
| Field | Description |
|-------|-------------|
| Name | OAuth2 provider name, displayed on the login page |
| Client ID | OAuth2 application ID |
| Client Secret | OAuth2 application secret |
| Authorization URL | OAuth2 authorization endpoint |
| Access Token URL | Endpoint to obtain Access Token |
| Access Token Params Format | Token request format: `json` or `urlencoded` |
| User Info URL | Endpoint to get user information |
| User Email Key | Key for email field in user info, supports JSONPath (e.g., `$[0].email`) |
| Redirect URL | OAuth2 callback URL |
| Scope | OAuth2 permission scope |
### Email Format Transformation
When OAuth2 returns a non-standard email format (e.g., returns a user ID), you can enable the Email Format feature.
| Field | Description |
|-------|-------------|
| Enable Email Format | Enable email format transformation |
| Email Regex Pattern | Regular expression to match the original value, use capture groups `()` |
| Replace Template | Replacement template, use `$1`, `$2`, etc. to reference capture groups |
**Examples:**
| Scenario | Original Value | Regex Pattern | Replace Template | Result |
|----------|---------------|---------------|------------------|--------|
| ID to Email | `12345` | `^(.+)$` | `linux_do_$1@oauth.linux.do` | `linux_do_12345@oauth.linux.do` |
| Change Domain | `john@old.com` | `^(.+)@old\.com$` | `$1@new.com` | `john@new.com` |
| Extract Username | `john@corp.com` | `^(.+)@.*$` | `$1@mymail.com` | `john@mymail.com` |
### Email Address Allow List
When enabled, only emails from specified domains can login.
## Test User Login Page
![oauth2 login](/feature/oauth2-login.png)

View File

@@ -13,6 +13,11 @@
参考 [Creating an OAuth App](https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/creating-an-oauth-app)
### Linux Do
- 在 [Linux Do Connect](https://connect.linux.do/) 创建应用获取 `Client ID``Client Secret`
- Linux Do 返回的是用户 ID 而非邮箱,需要启用邮箱格式转换功能
### Authentik
- [Authentik OAuth2 Provider](https://docs.goauthentik.io/docs/providers/oauth2/)
@@ -21,6 +26,43 @@
![oauth2](/feature/oauth2.png)
### 配置字段说明
| 字段 | 说明 |
|------|------|
| Name | OAuth2 提供商名称,显示在登录页面 |
| Client ID | OAuth2 应用 ID |
| Client Secret | OAuth2 应用密钥 |
| Authorization URL | OAuth2 授权端点 |
| Access Token URL | 获取 Access Token 的端点 |
| Access Token Params Format | Token 请求格式:`json``urlencoded` |
| User Info URL | 获取用户信息的端点 |
| User Email Key | 用户信息中邮箱字段的 key支持 JSONPath (如 `$[0].email`) |
| Redirect URL | OAuth2 回调地址 |
| Scope | OAuth2 权限范围 |
### 邮箱格式转换
当 OAuth2 返回的不是标准邮箱格式时(如返回用户 ID可以启用邮箱格式转换功能。
| 字段 | 说明 |
|------|------|
| Enable Email Format | 启用邮箱格式转换 |
| Email Regex Pattern | 正则表达式,用于匹配原始值,使用捕获组 `()` |
| Replace Template | 替换模板,使用 `$1``$2` 等引用捕获组 |
**示例:**
| 场景 | 原始值 | 正则表达式 | 替换模板 | 结果 |
|------|--------|-----------|----------|------|
| ID 转邮箱 | `12345` | `^(.+)$` | `linux_do_$1@oauth.linux.do` | `linux_do_12345@oauth.linux.do` |
| 换域名 | `john@old.com` | `^(.+)@old\.com$` | `$1@new.com` | `john@new.com` |
| 提取用户名 | `john@corp.com` | `^(.+)@.*$` | `$1@mymail.com` | `john@mymail.com` |
### 邮件地址白名单
启用后,只有指定域名的邮箱才能登录。
## 测试用户登录页面
![oauth2 login](/feature/oauth2-login.png)

View File

@@ -4,9 +4,9 @@
"version": "1.2.1",
"type": "module",
"devDependencies": {
"@types/node": "^25.0.9",
"@types/node": "^25.0.10",
"vitepress": "^1.6.4",
"wrangler": "^4.59.2"
"wrangler": "^4.60.0"
},
"scripts": {
"dev": "vitepress dev docs",

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{
"name": "cloudflare_temp_email",
"version": "1.2.1",
"version": "1.3.0",
"private": true,
"type": "module",
"scripts": {
@@ -11,24 +11,24 @@
"build": "wrangler deploy --dry-run --outdir dist --minify"
},
"devDependencies": {
"@cloudflare/workers-types": "^4.20260118.0",
"@cloudflare/workers-types": "^4.20260123.0",
"@eslint/js": "9.39.1",
"@simplewebauthn/types": "10.0.0",
"@types/node": "^25.0.9",
"@types/node": "^25.0.10",
"eslint": "9.39.1",
"globals": "^16.5.0",
"typescript-eslint": "^8.53.0",
"wrangler": "^4.59.2"
"typescript-eslint": "^8.53.1",
"wrangler": "^4.60.0"
},
"dependencies": {
"@aws-sdk/client-s3": "3.888.0",
"@aws-sdk/s3-request-presigner": "3.888.0",
"@simplewebauthn/server": "10.0.1",
"hono": "^4.11.4",
"hono": "^4.11.5",
"jsonpath-plus": "^10.3.0",
"mimetext": "^3.0.27",
"postal-mime": "^2.7.3",
"resend": "^6.7.0",
"resend": "^6.8.0",
"telegraf": "4.16.3",
"worker-mailer": "^1.2.1"
},

386
worker/pnpm-lock.yaml generated
View File

@@ -23,8 +23,8 @@ importers:
specifier: 10.0.1
version: 10.0.1
hono:
specifier: ^4.11.4
version: 4.11.4
specifier: ^4.11.5
version: 4.11.5
jsonpath-plus:
specifier: ^10.3.0
version: 10.3.0
@@ -35,8 +35,8 @@ importers:
specifier: ^2.7.3
version: 2.7.3
resend:
specifier: ^6.7.0
version: 6.7.0(@react-email/render@1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
specifier: ^6.8.0
version: 6.8.0(@react-email/render@1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
telegraf:
specifier: 4.16.3
version: 4.16.3(patch_hash=4ce8461c7f21d886ddd30d13d2be4fc8c72134fd7ffa5da3b27319c883447eed)
@@ -45,8 +45,8 @@ importers:
version: 1.2.1
devDependencies:
'@cloudflare/workers-types':
specifier: ^4.20260118.0
version: 4.20260118.0
specifier: ^4.20260123.0
version: 4.20260123.0
'@eslint/js':
specifier: 9.39.1
version: 9.39.1
@@ -54,8 +54,8 @@ importers:
specifier: 10.0.0
version: 10.0.0
'@types/node':
specifier: ^25.0.9
version: 25.0.9
specifier: ^25.0.10
version: 25.0.10
eslint:
specifier: 9.39.1
version: 9.39.1
@@ -63,11 +63,11 @@ importers:
specifier: ^16.5.0
version: 16.5.0
typescript-eslint:
specifier: ^8.53.0
version: 8.53.0(eslint@9.39.1)(typescript@5.4.5)
specifier: ^8.53.1
version: 8.53.1(eslint@9.39.1)(typescript@5.4.5)
wrangler:
specifier: ^4.59.2
version: 4.59.2(@cloudflare/workers-types@4.20260118.0)
specifier: ^4.60.0
version: 4.60.0(@cloudflare/workers-types@4.20260123.0)
packages:
@@ -210,8 +210,8 @@ packages:
resolution: {integrity: sha512-ABDSP6KsrdD+JC7qwMqUpLXqPidvfgT+Q+W8sGGuk/IBy7smgZDOdYSZLE4VBbQpH3N/zSJuslAWhL2x37Qwww==}
engines: {node: '>=18.0.0'}
'@aws-sdk/util-locate-window@3.965.2':
resolution: {integrity: sha512-qKgO7wAYsXzhwCHhdbaKFyxd83Fgs8/1Ka+jjSPrv2Ll7mB55Wbwlo0kkfMLh993/yEc8aoDIAc1Fz9h4Spi4Q==}
'@aws-sdk/util-locate-window@3.965.3':
resolution: {integrity: sha512-FNUqAjlKAGA7GM05kywE99q8wiPHPZqrzhq3wXRga6PRD6A0kzT85Pb0AzYBVTBRpSrKyyr6M92Y6bnSBVp2BA==}
engines: {node: '>=20.0.0'}
'@aws-sdk/util-user-agent-browser@3.887.0':
@@ -246,47 +246,47 @@ packages:
resolution: {integrity: sha512-SIOD2DxrRRwQ+jgzlXCqoEFiKOFqaPjhnNTGKXSRLvp1HiOvapLaFG2kEr9dYQTYe8rKrd9uvDUzmAITeNyaHQ==}
engines: {node: '>=18.0.0'}
'@cloudflare/unenv-preset@2.10.0':
resolution: {integrity: sha512-/uII4vLQXhzCAZzEVeYAjFLBNg2nqTJ1JGzd2lRF6ItYe6U2zVoYGfeKpGx/EkBF6euiU+cyBXgMdtJih+nQ6g==}
'@cloudflare/unenv-preset@2.11.0':
resolution: {integrity: sha512-z3hxFajL765VniNPGV0JRStZolNz63gU3B3AktwoGdDlnQvz5nP+Ah4RL04PONlZQjwmDdGHowEStJ94+RsaJg==}
peerDependencies:
unenv: 2.0.0-rc.24
workerd: ^1.20251221.0
workerd: ^1.20260115.0
peerDependenciesMeta:
workerd:
optional: true
'@cloudflare/workerd-darwin-64@1.20260114.0':
resolution: {integrity: sha512-HNlsRkfNgardCig2P/5bp/dqDECsZ4+NU5XewqArWxMseqt3C5daSuptI620s4pn7Wr0ZKg7jVLH0PDEBkA+aA==}
'@cloudflare/workerd-darwin-64@1.20260120.0':
resolution: {integrity: sha512-JLHx3p5dpwz4wjVSis45YNReftttnI3ndhdMh5BUbbpdreN/g0jgxNt5Qp9tDFqEKl++N63qv+hxJiIIvSLR+Q==}
engines: {node: '>=16'}
cpu: [x64]
os: [darwin]
'@cloudflare/workerd-darwin-arm64@1.20260114.0':
resolution: {integrity: sha512-qyE1UdFnAlxzb+uCfN/d9c8icch7XRiH49/DjoqEa+bCDihTuRS7GL1RmhVIqHJhb3pX3DzxmKgQZBDBL83Inw==}
'@cloudflare/workerd-darwin-arm64@1.20260120.0':
resolution: {integrity: sha512-1Md2tCRhZjwajsZNOiBeOVGiS3zbpLPzUDjHr4+XGTXWOA6FzzwScJwQZLa0Doc28Cp4Nr1n7xGL0Dwiz1XuOA==}
engines: {node: '>=16'}
cpu: [arm64]
os: [darwin]
'@cloudflare/workerd-linux-64@1.20260114.0':
resolution: {integrity: sha512-Z0BLvAj/JPOabzads2ddDEfgExWTlD22pnwsuNbPwZAGTSZeQa3Y47eGUWyHk+rSGngknk++S7zHTGbKuG7RRg==}
'@cloudflare/workerd-linux-64@1.20260120.0':
resolution: {integrity: sha512-O0mIfJfvU7F8N5siCoRDaVDuI12wkz2xlG4zK6/Ct7U9c9FiE0ViXNFWXFQm5PPj+qbkNRyhjUwhP+GCKTk5EQ==}
engines: {node: '>=16'}
cpu: [x64]
os: [linux]
'@cloudflare/workerd-linux-arm64@1.20260114.0':
resolution: {integrity: sha512-kPUmEtUxUWlr9PQ64kuhdK0qyo8idPe5IIXUgi7xCD7mDd6EOe5J7ugDpbfvfbYKEjx4DpLvN2t45izyI/Sodw==}
'@cloudflare/workerd-linux-arm64@1.20260120.0':
resolution: {integrity: sha512-aRHO/7bjxVpjZEmVVcpmhbzpN6ITbFCxuLLZSW0H9O0C0w40cDCClWSi19T87Ax/PQcYjFNT22pTewKsupkckA==}
engines: {node: '>=16'}
cpu: [arm64]
os: [linux]
'@cloudflare/workerd-windows-64@1.20260114.0':
resolution: {integrity: sha512-MJnKgm6i1jZGyt2ZHQYCnRlpFTEZcK2rv9y7asS3KdVEXaDgGF8kOns5u6YL6/+eMogfZuHRjfDS+UqRTUYIFA==}
'@cloudflare/workerd-windows-64@1.20260120.0':
resolution: {integrity: sha512-ASZIz1E8sqZQqQCgcfY1PJbBpUDrxPt8NZ+lqNil0qxnO4qX38hbCsdDF2/TDAuq0Txh7nu8ztgTelfNDlb4EA==}
engines: {node: '>=16'}
cpu: [x64]
os: [win32]
'@cloudflare/workers-types@4.20260118.0':
resolution: {integrity: sha512-t+2Q421kAQqwBzMUDvgg2flp8zFVxOpiAyZPbyNcnPxMDHf0z3B7LqBIVQawwI6ntZinbk9f4oUmaA5bGeYwlg==}
'@cloudflare/workers-types@4.20260123.0':
resolution: {integrity: sha512-pQccZ8IDLFKkvdKBXZRPkbMtWtS7vVz1giJGkAAZ5cZH2RHK5Bs6p1OoVZA8Z2Sry8Q0tZbZ5Yjud4R7SrG3KQ==}
'@cspotcode/source-map-support@0.8.1':
resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
@@ -732,8 +732,8 @@ packages:
resolution: {integrity: sha512-qJpzYC64kaj3S0fueiu3kXm8xPrR3PcXDPEgnaNMRn0EjNSZFoFjvbUp0YUDsRhN1CB90EnHJtbxWKevnH99UQ==}
engines: {node: '>=18.0.0'}
'@smithy/core@3.20.7':
resolution: {integrity: sha512-aO7jmh3CtrmPsIJxUwYIzI5WVlMK8BMCPQ4D4nTzqTqBhbzvxHNzBMGcEg13yg/z9R2Qsz49NUFl0F0lVbTVFw==}
'@smithy/core@3.21.1':
resolution: {integrity: sha512-NUH8R4O6FkN8HKMojzbGg/5pNjsfTjlMmeFclyPfPaXXUrbr5TzhWgbf7t92wfrpCHRgpjyz7ffASIS3wX28aA==}
engines: {node: '>=18.0.0'}
'@smithy/credential-provider-imds@4.2.8':
@@ -796,12 +796,12 @@ packages:
resolution: {integrity: sha512-RO0jeoaYAB1qBRhfVyq0pMgBoUK34YEJxVxyjOWYZiOKOq2yMZ4MnVXMZCUDenpozHue207+9P5ilTV1zeda0A==}
engines: {node: '>=18.0.0'}
'@smithy/middleware-endpoint@4.4.8':
resolution: {integrity: sha512-TV44qwB/T0OMMzjIuI+JeS0ort3bvlPJ8XIH0MSlGADraXpZqmyND27ueuAL3E14optleADWqtd7dUgc2w+qhQ==}
'@smithy/middleware-endpoint@4.4.11':
resolution: {integrity: sha512-/WqsrycweGGfb9sSzME4CrsuayjJF6BueBmkKlcbeU5q18OhxRrvvKlmfw3tpDsK5ilx2XUJvoukwxHB0nHs/Q==}
engines: {node: '>=18.0.0'}
'@smithy/middleware-retry@4.4.24':
resolution: {integrity: sha512-yiUY1UvnbUFfP5izoKLtfxDSTRv724YRRwyiC/5HYY6vdsVDcDOXKSXmkJl/Hovcxt5r+8tZEUAdrOaCJwrl9Q==}
'@smithy/middleware-retry@4.4.27':
resolution: {integrity: sha512-xFUYCGRVsfgiN5EjsJJSzih9+yjStgMTCLANPlf0LVQkPDYCe0hz97qbdTZosFOiYlGBlHYityGRxrQ/hxhfVQ==}
engines: {node: '>=18.0.0'}
'@smithy/middleware-serde@4.2.9':
@@ -848,8 +848,8 @@ packages:
resolution: {integrity: sha512-6A4vdGj7qKNRF16UIcO8HhHjKW27thsxYci+5r/uVRkdcBEkOEiY8OMPuydLX4QHSrJqGHPJzPRwwVTqbLZJhg==}
engines: {node: '>=18.0.0'}
'@smithy/smithy-client@4.10.9':
resolution: {integrity: sha512-Je0EvGXVJ0Vrrr2lsubq43JGRIluJ/hX17aN/W/A0WfE+JpoMdI8kwk2t9F0zTX9232sJDGcoH4zZre6m6f/sg==}
'@smithy/smithy-client@4.10.12':
resolution: {integrity: sha512-VKO/HKoQ5OrSHW6AJUmEnUKeXI1/5LfCwO9cwyao7CmLvGnZeM1i36Lyful3LK1XU7HwTVieTqO1y2C/6t3qtA==}
engines: {node: '>=18.0.0'}
'@smithy/types@4.12.0':
@@ -884,12 +884,12 @@ packages:
resolution: {integrity: sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==}
engines: {node: '>=18.0.0'}
'@smithy/util-defaults-mode-browser@4.3.23':
resolution: {integrity: sha512-mMg+r/qDfjfF/0psMbV4zd7F/i+rpyp7Hjh0Wry7eY15UnzTEId+xmQTGDU8IdZtDfbGQxuWNfgBZKBj+WuYbA==}
'@smithy/util-defaults-mode-browser@4.3.26':
resolution: {integrity: sha512-vva0dzYUTgn7DdE0uaha10uEdAgmdLnNFowKFjpMm6p2R0XDk5FHPX3CBJLzWQkQXuEprsb0hGz9YwbicNWhjw==}
engines: {node: '>=18.0.0'}
'@smithy/util-defaults-mode-node@4.2.26':
resolution: {integrity: sha512-EQqe/WkbCinah0h1lMWh9ICl0Ob4lyl20/10WTB35SC9vDQfD8zWsOT+x2FIOXKAoZQ8z/y0EFMoodbcqWJY/w==}
'@smithy/util-defaults-mode-node@4.2.29':
resolution: {integrity: sha512-c6D7IUBsZt/aNnTBHMTf+OVh+h/JcxUUgfTcIJaWRe6zhOum1X+pNKSZtZ+7fbOn5I99XVFtmrnXKv8yHHErTQ==}
engines: {node: '>=18.0.0'}
'@smithy/util-endpoints@3.2.8':
@@ -947,69 +947,69 @@ packages:
'@types/json-schema@7.0.15':
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
'@types/node@25.0.9':
resolution: {integrity: sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw==}
'@types/node@25.0.10':
resolution: {integrity: sha512-zWW5KPngR/yvakJgGOmZ5vTBemDoSqF3AcV/LrO5u5wTWyEAVVh+IT39G4gtyAkh3CtTZs8aX/yRM82OfzHJRg==}
'@types/uuid@9.0.8':
resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==}
'@typescript-eslint/eslint-plugin@8.53.0':
resolution: {integrity: sha512-eEXsVvLPu8Z4PkFibtuFJLJOTAV/nPdgtSjkGoPpddpFk3/ym2oy97jynY6ic2m6+nc5M8SE1e9v/mHKsulcJg==}
'@typescript-eslint/eslint-plugin@8.53.1':
resolution: {integrity: sha512-cFYYFZ+oQFi6hUnBTbLRXfTJiaQtYE3t4O692agbBl+2Zy+eqSKWtPjhPXJu1G7j4RLjKgeJPDdq3EqOwmX5Ag==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
'@typescript-eslint/parser': ^8.53.0
'@typescript-eslint/parser': ^8.53.1
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/parser@8.53.0':
resolution: {integrity: sha512-npiaib8XzbjtzS2N4HlqPvlpxpmZ14FjSJrteZpPxGUaYPlvhzlzUZ4mZyABo0EFrOWnvyd0Xxroq//hKhtAWg==}
'@typescript-eslint/parser@8.53.1':
resolution: {integrity: sha512-nm3cvFN9SqZGXjmw5bZ6cGmvJSyJPn0wU9gHAZZHDnZl2wF9PhHv78Xf06E0MaNk4zLVHL8hb2/c32XvyJOLQg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/project-service@8.53.0':
resolution: {integrity: sha512-Bl6Gdr7NqkqIP5yP9z1JU///Nmes4Eose6L1HwpuVHwScgDPPuEWbUVhvlZmb8hy0vX9syLk5EGNL700WcBlbg==}
'@typescript-eslint/project-service@8.53.1':
resolution: {integrity: sha512-WYC4FB5Ra0xidsmlPb+1SsnaSKPmS3gsjIARwbEkHkoWloQmuzcfypljaJcR78uyLA1h8sHdWWPHSLDI+MtNog==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/scope-manager@8.53.0':
resolution: {integrity: sha512-kWNj3l01eOGSdVBnfAF2K1BTh06WS0Yet6JUgb9Cmkqaz3Jlu0fdVUjj9UI8gPidBWSMqDIglmEXifSgDT/D0g==}
'@typescript-eslint/scope-manager@8.53.1':
resolution: {integrity: sha512-Lu23yw1uJMFY8cUeq7JlrizAgeQvWugNQzJp8C3x8Eo5Jw5Q2ykMdiiTB9vBVOOUBysMzmRRmUfwFrZuI2C4SQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/tsconfig-utils@8.53.0':
resolution: {integrity: sha512-K6Sc0R5GIG6dNoPdOooQ+KtvT5KCKAvTcY8h2rIuul19vxH5OTQk7ArKkd4yTzkw66WnNY0kPPzzcmWA+XRmiA==}
'@typescript-eslint/tsconfig-utils@8.53.1':
resolution: {integrity: sha512-qfvLXS6F6b1y43pnf0pPbXJ+YoXIC7HKg0UGZ27uMIemKMKA6XH2DTxsEDdpdN29D+vHV07x/pnlPNVLhdhWiA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/type-utils@8.53.0':
resolution: {integrity: sha512-BBAUhlx7g4SmcLhn8cnbxoxtmS7hcq39xKCgiutL3oNx1TaIp+cny51s8ewnKMpVUKQUGb41RAUWZ9kxYdovuw==}
'@typescript-eslint/type-utils@8.53.1':
resolution: {integrity: sha512-MOrdtNvyhy0rHyv0ENzub1d4wQYKb2NmIqG7qEqPWFW7Mpy2jzFC3pQ2yKDvirZB7jypm5uGjF2Qqs6OIqu47w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/types@8.53.0':
resolution: {integrity: sha512-Bmh9KX31Vlxa13+PqPvt4RzKRN1XORYSLlAE+sO1i28NkisGbTtSLFVB3l7PWdHtR3E0mVMuC7JilWJ99m2HxQ==}
'@typescript-eslint/types@8.53.1':
resolution: {integrity: sha512-jr/swrr2aRmUAUjW5/zQHbMaui//vQlsZcJKijZf3M26bnmLj8LyZUpj8/Rd6uzaek06OWsqdofN/Thenm5O8A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/typescript-estree@8.53.0':
resolution: {integrity: sha512-pw0c0Gdo7Z4xOG987u3nJ8akL9093yEEKv8QTJ+Bhkghj1xyj8cgPaavlr9rq8h7+s6plUJ4QJYw2gCZodqmGw==}
'@typescript-eslint/typescript-estree@8.53.1':
resolution: {integrity: sha512-RGlVipGhQAG4GxV1s34O91cxQ/vWiHJTDHbXRr0li2q/BGg3RR/7NM8QDWgkEgrwQYCvmJV9ichIwyoKCQ+DTg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/utils@8.53.0':
resolution: {integrity: sha512-XDY4mXTez3Z1iRDI5mbRhH4DFSt46oaIFsLg+Zn97+sYrXACziXSQcSelMybnVZ5pa1P6xYkPr5cMJyunM1ZDA==}
'@typescript-eslint/utils@8.53.1':
resolution: {integrity: sha512-c4bMvGVWW4hv6JmDUEG7fSYlWOl3II2I4ylt0NM+seinYQlZMQIaKaXIIVJWt9Ofh6whrpM+EdDQXKXjNovvrg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/visitor-keys@8.53.0':
resolution: {integrity: sha512-LZ2NqIHFhvFwxG0qZeLL9DvdNAHPGCY5dIRwBhyYeU+LfLhcStE1ImjsuTG/WaVh3XysGaeLW8Rqq7cGkPCFvw==}
'@typescript-eslint/visitor-keys@8.53.1':
resolution: {integrity: sha512-oy+wV7xDKFPRyNggmXuZQSBzvoLnpmJs+GhzRhPjrxl2b/jIlyjVokzm47CZCDUdXKr2zd7ZLodPfOBpOPyPlg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
abort-controller@3.0.0:
@@ -1086,8 +1086,8 @@ packages:
resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==}
engines: {node: '>=18'}
core-js-pure@3.47.0:
resolution: {integrity: sha512-BcxeDbzUrRnXGYIVAGFtcGQVNpFcUhVjr6W7F8XktvQW2iJP9e66GP6xdKotCRFlrxBvNIBrhwKteRXqMV86Nw==}
core-js-pure@3.48.0:
resolution: {integrity: sha512-1slJgk89tWC51HQ1AEqG+s2VuwpTRr8ocu4n20QUcH1v9lAN0RXen0Q0AABa/DK1I7RrNWLucplOHMx8hfTGTw==}
cross-fetch@4.1.0:
resolution: {integrity: sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==}
@@ -1255,8 +1255,8 @@ packages:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
engines: {node: '>=8'}
hono@4.11.4:
resolution: {integrity: sha512-U7tt8JsyrxSRKspfhtLET79pU8K+tInj5QZXs1jSugO1Vq5dFj3kmZsRldo29mTBfcjDRVRXrEZ6LS63Cog9ZA==}
hono@4.11.5:
resolution: {integrity: sha512-WemPi9/WfyMwZs+ZUXdiwcCh9Y+m7L+8vki9MzDw3jJ+W9Lc+12HGsd368Qc1vZi1xwW8BWMMsnK5efYKPdt4g==}
engines: {node: '>=16.9.0'}
html-to-text@9.0.5:
@@ -1357,8 +1357,8 @@ packages:
mimetext@3.0.27:
resolution: {integrity: sha512-mUhWAsZD1N/K6dbN4+a5Yq78OPnYQw1ubOSMasBntsLQ2S7KVNlvDEA8dwpr4a7PszWMzeslKahAprtwYMgaBA==}
miniflare@4.20260114.0:
resolution: {integrity: sha512-QwHT7S6XqGdQxIvql1uirH/7/i3zDEt0B/YBXTYzMfJtVCR4+ue3KPkU+Bl0zMxvpgkvjh9+eCHhJbKEqya70A==}
miniflare@4.20260120.0:
resolution: {integrity: sha512-XXZyE2pDKMtP5OLuv0LPHEAzIYhov4jrYjcqrhhqtxGGtXneWOHvXIPo+eV8sqwqWd3R7j4DlEKcyb+87BR49Q==}
engines: {node: '>=18.0.0'}
hasBin: true
@@ -1439,8 +1439,8 @@ packages:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
prettier@3.8.0:
resolution: {integrity: sha512-yEPsovQfpxYfgWNhCfECjG5AQaO+K3dp6XERmOepyPDVqcJm+bjyCVO3pmU+nAPe0N5dDvekfGezt/EIiRe1TA==}
prettier@3.8.1:
resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==}
engines: {node: '>=14'}
hasBin: true
@@ -1467,8 +1467,8 @@ packages:
resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
engines: {node: '>=0.10.0'}
resend@6.7.0:
resolution: {integrity: sha512-2ZV0NDZsh4Gh+Nd1hvluZIitmGJ59O4+OxMufymG6Y8uz1Jgt2uS1seSENnkIUlmwg7/dwmfIJC9rAufByz7wA==}
resend@6.8.0:
resolution: {integrity: sha512-fDOXGqafQfQXl8nXe93wr93pus8tW7YPpowenE3SmG7dJJf0hH3xUWm3xqacnPvhqjCQTJH9xETg07rmUeSuqQ==}
engines: {node: '>=20'}
peerDependencies:
'@react-email/render': '*'
@@ -1556,8 +1556,8 @@ packages:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
engines: {node: '>= 0.8.0'}
typescript-eslint@8.53.0:
resolution: {integrity: sha512-xHURCQNxZ1dsWn0sdOaOfCSQG0HKeqSj9OexIxrz6ypU6wHYOdX2I3D2b8s8wFSsSOYJb+6q283cLiLlkEsBYw==}
typescript-eslint@8.53.1:
resolution: {integrity: sha512-gB+EVQfP5RDElh9ittfXlhZJdjSU4jUSTyE2+ia8CYyNvet4ElfaLlAIqDvQV9JPknKx0jQH1racTYe/4LaLSg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
@@ -1571,8 +1571,8 @@ packages:
undici-types@7.16.0:
resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==}
undici@7.14.0:
resolution: {integrity: sha512-Vqs8HTzjpQXZeXdpsfChQTlafcMQaaIwnGwLam1wudSSjlJeQ3bw1j+TLPePgrCnCpUXx7Ba5Pdpf5OBih62NQ==}
undici@7.18.2:
resolution: {integrity: sha512-y+8YjDFzWdQlSE9N5nzKMT3g4a5UBX1HKowfdXh0uvAnTaqqwqB92Jt4UXBAeKekDs5IaDKyJFR4X1gYVCgXcw==}
engines: {node: '>=20.18.1'}
unenv@2.0.0-rc.24:
@@ -1607,17 +1607,17 @@ packages:
worker-mailer@1.2.1:
resolution: {integrity: sha512-gS2ei/mrpRqNs+AHmqxhT6vFPwCLw2qnz5ShmyGD0ULaU0Q9hxnFAcx9jhAip/MnD6+MjgnQu6hQQgA8mlOkVA==}
workerd@1.20260114.0:
resolution: {integrity: sha512-kTJ+jNdIllOzWuVA3NRQRvywP0T135zdCjAE2dAUY1BFbxM6fmMZV8BbskEoQ4hAODVQUfZQmyGctcwvVCKxFA==}
workerd@1.20260120.0:
resolution: {integrity: sha512-R6X/VQOkwLTBGLp4VRUwLQZZVxZ9T9J8pGiJ6GQUMaRkY7TVWrCSkVfoNMM1/YyFsY5UYhhPoQe5IehnhZ3Pdw==}
engines: {node: '>=16'}
hasBin: true
wrangler@4.59.2:
resolution: {integrity: sha512-Z4xn6jFZTaugcOKz42xvRAYKgkVUERHVbuCJ5+f+gK+R6k12L02unakPGOA0L0ejhUl16dqDjKe4tmL9sedHcw==}
wrangler@4.60.0:
resolution: {integrity: sha512-n4kibm/xY0Qd5G2K/CbAQeVeOIlwPNVglmFjlDRCCYk3hZh8IggO/rg8AXt/vByK2Sxsugl5Z7yvgWxrUbmS6g==}
engines: {node: '>=20.0.0'}
hasBin: true
peerDependencies:
'@cloudflare/workers-types': ^4.20260114.0
'@cloudflare/workers-types': ^4.20260120.0
peerDependenciesMeta:
'@cloudflare/workers-types':
optional: true
@@ -1666,7 +1666,7 @@ snapshots:
'@aws-crypto/supports-web-crypto': 5.2.0
'@aws-crypto/util': 5.2.0
'@aws-sdk/types': 3.887.0
'@aws-sdk/util-locate-window': 3.965.2
'@aws-sdk/util-locate-window': 3.965.3
'@smithy/util-utf8': 2.3.0
tslib: 2.8.1
@@ -1676,7 +1676,7 @@ snapshots:
'@aws-crypto/supports-web-crypto': 5.2.0
'@aws-crypto/util': 5.2.0
'@aws-sdk/types': 3.887.0
'@aws-sdk/util-locate-window': 3.965.2
'@aws-sdk/util-locate-window': 3.965.3
'@smithy/util-utf8': 2.3.0
tslib: 2.8.1
@@ -1721,7 +1721,7 @@ snapshots:
'@aws-sdk/util-user-agent-node': 3.888.0
'@aws-sdk/xml-builder': 3.887.0
'@smithy/config-resolver': 4.4.6
'@smithy/core': 3.20.7
'@smithy/core': 3.21.1
'@smithy/eventstream-serde-browser': 4.2.8
'@smithy/eventstream-serde-config-resolver': 4.3.8
'@smithy/eventstream-serde-node': 4.2.8
@@ -1732,21 +1732,21 @@ snapshots:
'@smithy/invalid-dependency': 4.2.8
'@smithy/md5-js': 4.2.8
'@smithy/middleware-content-length': 4.2.8
'@smithy/middleware-endpoint': 4.4.8
'@smithy/middleware-retry': 4.4.24
'@smithy/middleware-endpoint': 4.4.11
'@smithy/middleware-retry': 4.4.27
'@smithy/middleware-serde': 4.2.9
'@smithy/middleware-stack': 4.2.8
'@smithy/node-config-provider': 4.3.8
'@smithy/node-http-handler': 4.4.8
'@smithy/protocol-http': 5.3.8
'@smithy/smithy-client': 4.10.9
'@smithy/smithy-client': 4.10.12
'@smithy/types': 4.12.0
'@smithy/url-parser': 4.2.8
'@smithy/util-base64': 4.3.0
'@smithy/util-body-length-browser': 4.2.0
'@smithy/util-body-length-node': 4.2.1
'@smithy/util-defaults-mode-browser': 4.3.23
'@smithy/util-defaults-mode-node': 4.2.26
'@smithy/util-defaults-mode-browser': 4.3.26
'@smithy/util-defaults-mode-node': 4.2.29
'@smithy/util-endpoints': 3.2.8
'@smithy/util-middleware': 4.2.8
'@smithy/util-retry': 4.2.8
@@ -1774,26 +1774,26 @@ snapshots:
'@aws-sdk/util-user-agent-browser': 3.887.0
'@aws-sdk/util-user-agent-node': 3.888.0
'@smithy/config-resolver': 4.4.6
'@smithy/core': 3.20.7
'@smithy/core': 3.21.1
'@smithy/fetch-http-handler': 5.3.9
'@smithy/hash-node': 4.2.8
'@smithy/invalid-dependency': 4.2.8
'@smithy/middleware-content-length': 4.2.8
'@smithy/middleware-endpoint': 4.4.8
'@smithy/middleware-retry': 4.4.24
'@smithy/middleware-endpoint': 4.4.11
'@smithy/middleware-retry': 4.4.27
'@smithy/middleware-serde': 4.2.9
'@smithy/middleware-stack': 4.2.8
'@smithy/node-config-provider': 4.3.8
'@smithy/node-http-handler': 4.4.8
'@smithy/protocol-http': 5.3.8
'@smithy/smithy-client': 4.10.9
'@smithy/smithy-client': 4.10.12
'@smithy/types': 4.12.0
'@smithy/url-parser': 4.2.8
'@smithy/util-base64': 4.3.0
'@smithy/util-body-length-browser': 4.2.0
'@smithy/util-body-length-node': 4.2.1
'@smithy/util-defaults-mode-browser': 4.3.23
'@smithy/util-defaults-mode-node': 4.2.26
'@smithy/util-defaults-mode-browser': 4.3.26
'@smithy/util-defaults-mode-node': 4.2.29
'@smithy/util-endpoints': 3.2.8
'@smithy/util-middleware': 4.2.8
'@smithy/util-retry': 4.2.8
@@ -1806,12 +1806,12 @@ snapshots:
dependencies:
'@aws-sdk/types': 3.887.0
'@aws-sdk/xml-builder': 3.887.0
'@smithy/core': 3.20.7
'@smithy/core': 3.21.1
'@smithy/node-config-provider': 4.3.8
'@smithy/property-provider': 4.2.8
'@smithy/protocol-http': 5.3.8
'@smithy/signature-v4': 5.3.8
'@smithy/smithy-client': 4.10.9
'@smithy/smithy-client': 4.10.12
'@smithy/types': 4.12.0
'@smithy/util-base64': 4.3.0
'@smithy/util-body-length-browser': 4.2.0
@@ -1836,7 +1836,7 @@ snapshots:
'@smithy/node-http-handler': 4.4.8
'@smithy/property-provider': 4.2.8
'@smithy/protocol-http': 5.3.8
'@smithy/smithy-client': 4.10.9
'@smithy/smithy-client': 4.10.12
'@smithy/types': 4.12.0
'@smithy/util-stream': 4.5.10
tslib: 2.8.1
@@ -1974,11 +1974,11 @@ snapshots:
'@aws-sdk/core': 3.888.0
'@aws-sdk/types': 3.887.0
'@aws-sdk/util-arn-parser': 3.873.0
'@smithy/core': 3.20.7
'@smithy/core': 3.21.1
'@smithy/node-config-provider': 4.3.8
'@smithy/protocol-http': 5.3.8
'@smithy/signature-v4': 5.3.8
'@smithy/smithy-client': 4.10.9
'@smithy/smithy-client': 4.10.12
'@smithy/types': 4.12.0
'@smithy/util-config-provider': 4.2.0
'@smithy/util-middleware': 4.2.8
@@ -1997,7 +1997,7 @@ snapshots:
'@aws-sdk/core': 3.888.0
'@aws-sdk/types': 3.887.0
'@aws-sdk/util-endpoints': 3.887.0
'@smithy/core': 3.20.7
'@smithy/core': 3.21.1
'@smithy/protocol-http': 5.3.8
'@smithy/types': 4.12.0
tslib: 2.8.1
@@ -2017,26 +2017,26 @@ snapshots:
'@aws-sdk/util-user-agent-browser': 3.887.0
'@aws-sdk/util-user-agent-node': 3.888.0
'@smithy/config-resolver': 4.4.6
'@smithy/core': 3.20.7
'@smithy/core': 3.21.1
'@smithy/fetch-http-handler': 5.3.9
'@smithy/hash-node': 4.2.8
'@smithy/invalid-dependency': 4.2.8
'@smithy/middleware-content-length': 4.2.8
'@smithy/middleware-endpoint': 4.4.8
'@smithy/middleware-retry': 4.4.24
'@smithy/middleware-endpoint': 4.4.11
'@smithy/middleware-retry': 4.4.27
'@smithy/middleware-serde': 4.2.9
'@smithy/middleware-stack': 4.2.8
'@smithy/node-config-provider': 4.3.8
'@smithy/node-http-handler': 4.4.8
'@smithy/protocol-http': 5.3.8
'@smithy/smithy-client': 4.10.9
'@smithy/smithy-client': 4.10.12
'@smithy/types': 4.12.0
'@smithy/url-parser': 4.2.8
'@smithy/util-base64': 4.3.0
'@smithy/util-body-length-browser': 4.2.0
'@smithy/util-body-length-node': 4.2.1
'@smithy/util-defaults-mode-browser': 4.3.23
'@smithy/util-defaults-mode-node': 4.2.26
'@smithy/util-defaults-mode-browser': 4.3.26
'@smithy/util-defaults-mode-node': 4.2.29
'@smithy/util-endpoints': 3.2.8
'@smithy/util-middleware': 4.2.8
'@smithy/util-retry': 4.2.8
@@ -2059,9 +2059,9 @@ snapshots:
'@aws-sdk/signature-v4-multi-region': 3.888.0
'@aws-sdk/types': 3.887.0
'@aws-sdk/util-format-url': 3.887.0
'@smithy/middleware-endpoint': 4.4.8
'@smithy/middleware-endpoint': 4.4.11
'@smithy/protocol-http': 5.3.8
'@smithy/smithy-client': 4.10.9
'@smithy/smithy-client': 4.10.12
'@smithy/types': 4.12.0
tslib: 2.8.1
@@ -2110,7 +2110,7 @@ snapshots:
'@smithy/types': 4.12.0
tslib: 2.8.1
'@aws-sdk/util-locate-window@3.965.2':
'@aws-sdk/util-locate-window@3.965.3':
dependencies:
tslib: 2.8.1
@@ -2138,34 +2138,34 @@ snapshots:
'@babel/runtime-corejs3@7.28.6':
dependencies:
core-js-pure: 3.47.0
core-js-pure: 3.48.0
'@babel/runtime@7.28.6': {}
'@cloudflare/kv-asset-handler@0.4.2': {}
'@cloudflare/unenv-preset@2.10.0(unenv@2.0.0-rc.24)(workerd@1.20260114.0)':
'@cloudflare/unenv-preset@2.11.0(unenv@2.0.0-rc.24)(workerd@1.20260120.0)':
dependencies:
unenv: 2.0.0-rc.24
optionalDependencies:
workerd: 1.20260114.0
workerd: 1.20260120.0
'@cloudflare/workerd-darwin-64@1.20260114.0':
'@cloudflare/workerd-darwin-64@1.20260120.0':
optional: true
'@cloudflare/workerd-darwin-arm64@1.20260114.0':
'@cloudflare/workerd-darwin-arm64@1.20260120.0':
optional: true
'@cloudflare/workerd-linux-64@1.20260114.0':
'@cloudflare/workerd-linux-64@1.20260120.0':
optional: true
'@cloudflare/workerd-linux-arm64@1.20260114.0':
'@cloudflare/workerd-linux-arm64@1.20260120.0':
optional: true
'@cloudflare/workerd-windows-64@1.20260114.0':
'@cloudflare/workerd-windows-64@1.20260120.0':
optional: true
'@cloudflare/workers-types@4.20260118.0': {}
'@cloudflare/workers-types@4.20260123.0': {}
'@cspotcode/source-map-support@0.8.1':
dependencies:
@@ -2476,7 +2476,7 @@ snapshots:
'@react-email/render@1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
html-to-text: 9.0.5
prettier: 3.8.0
prettier: 3.8.1
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
react-promise-suspense: 0.3.4
@@ -2529,7 +2529,7 @@ snapshots:
'@smithy/util-middleware': 4.2.8
tslib: 2.8.1
'@smithy/core@3.20.7':
'@smithy/core@3.21.1':
dependencies:
'@smithy/middleware-serde': 4.2.9
'@smithy/protocol-http': 5.3.8
@@ -2633,9 +2633,9 @@ snapshots:
'@smithy/types': 4.12.0
tslib: 2.8.1
'@smithy/middleware-endpoint@4.4.8':
'@smithy/middleware-endpoint@4.4.11':
dependencies:
'@smithy/core': 3.20.7
'@smithy/core': 3.21.1
'@smithy/middleware-serde': 4.2.9
'@smithy/node-config-provider': 4.3.8
'@smithy/shared-ini-file-loader': 4.4.3
@@ -2644,12 +2644,12 @@ snapshots:
'@smithy/util-middleware': 4.2.8
tslib: 2.8.1
'@smithy/middleware-retry@4.4.24':
'@smithy/middleware-retry@4.4.27':
dependencies:
'@smithy/node-config-provider': 4.3.8
'@smithy/protocol-http': 5.3.8
'@smithy/service-error-classification': 4.2.8
'@smithy/smithy-client': 4.10.9
'@smithy/smithy-client': 4.10.12
'@smithy/types': 4.12.0
'@smithy/util-middleware': 4.2.8
'@smithy/util-retry': 4.2.8
@@ -2723,10 +2723,10 @@ snapshots:
'@smithy/util-utf8': 4.2.0
tslib: 2.8.1
'@smithy/smithy-client@4.10.9':
'@smithy/smithy-client@4.10.12':
dependencies:
'@smithy/core': 3.20.7
'@smithy/middleware-endpoint': 4.4.8
'@smithy/core': 3.21.1
'@smithy/middleware-endpoint': 4.4.11
'@smithy/middleware-stack': 4.2.8
'@smithy/protocol-http': 5.3.8
'@smithy/types': 4.12.0
@@ -2771,20 +2771,20 @@ snapshots:
dependencies:
tslib: 2.8.1
'@smithy/util-defaults-mode-browser@4.3.23':
'@smithy/util-defaults-mode-browser@4.3.26':
dependencies:
'@smithy/property-provider': 4.2.8
'@smithy/smithy-client': 4.10.9
'@smithy/smithy-client': 4.10.12
'@smithy/types': 4.12.0
tslib: 2.8.1
'@smithy/util-defaults-mode-node@4.2.26':
'@smithy/util-defaults-mode-node@4.2.29':
dependencies:
'@smithy/config-resolver': 4.4.6
'@smithy/credential-provider-imds': 4.2.8
'@smithy/node-config-provider': 4.3.8
'@smithy/property-provider': 4.2.8
'@smithy/smithy-client': 4.10.9
'@smithy/smithy-client': 4.10.12
'@smithy/types': 4.12.0
tslib: 2.8.1
@@ -2854,20 +2854,20 @@ snapshots:
'@types/json-schema@7.0.15': {}
'@types/node@25.0.9':
'@types/node@25.0.10':
dependencies:
undici-types: 7.16.0
'@types/uuid@9.0.8': {}
'@typescript-eslint/eslint-plugin@8.53.0(@typescript-eslint/parser@8.53.0(eslint@9.39.1)(typescript@5.4.5))(eslint@9.39.1)(typescript@5.4.5)':
'@typescript-eslint/eslint-plugin@8.53.1(@typescript-eslint/parser@8.53.1(eslint@9.39.1)(typescript@5.4.5))(eslint@9.39.1)(typescript@5.4.5)':
dependencies:
'@eslint-community/regexpp': 4.12.2
'@typescript-eslint/parser': 8.53.0(eslint@9.39.1)(typescript@5.4.5)
'@typescript-eslint/scope-manager': 8.53.0
'@typescript-eslint/type-utils': 8.53.0(eslint@9.39.1)(typescript@5.4.5)
'@typescript-eslint/utils': 8.53.0(eslint@9.39.1)(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 8.53.0
'@typescript-eslint/parser': 8.53.1(eslint@9.39.1)(typescript@5.4.5)
'@typescript-eslint/scope-manager': 8.53.1
'@typescript-eslint/type-utils': 8.53.1(eslint@9.39.1)(typescript@5.4.5)
'@typescript-eslint/utils': 8.53.1(eslint@9.39.1)(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 8.53.1
eslint: 9.39.1
ignore: 7.0.5
natural-compare: 1.4.0
@@ -2876,41 +2876,41 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/parser@8.53.0(eslint@9.39.1)(typescript@5.4.5)':
'@typescript-eslint/parser@8.53.1(eslint@9.39.1)(typescript@5.4.5)':
dependencies:
'@typescript-eslint/scope-manager': 8.53.0
'@typescript-eslint/types': 8.53.0
'@typescript-eslint/typescript-estree': 8.53.0(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 8.53.0
'@typescript-eslint/scope-manager': 8.53.1
'@typescript-eslint/types': 8.53.1
'@typescript-eslint/typescript-estree': 8.53.1(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 8.53.1
debug: 4.4.3
eslint: 9.39.1
typescript: 5.4.5
transitivePeerDependencies:
- supports-color
'@typescript-eslint/project-service@8.53.0(typescript@5.4.5)':
'@typescript-eslint/project-service@8.53.1(typescript@5.4.5)':
dependencies:
'@typescript-eslint/tsconfig-utils': 8.53.0(typescript@5.4.5)
'@typescript-eslint/types': 8.53.0
'@typescript-eslint/tsconfig-utils': 8.53.1(typescript@5.4.5)
'@typescript-eslint/types': 8.53.1
debug: 4.4.3
typescript: 5.4.5
transitivePeerDependencies:
- supports-color
'@typescript-eslint/scope-manager@8.53.0':
'@typescript-eslint/scope-manager@8.53.1':
dependencies:
'@typescript-eslint/types': 8.53.0
'@typescript-eslint/visitor-keys': 8.53.0
'@typescript-eslint/types': 8.53.1
'@typescript-eslint/visitor-keys': 8.53.1
'@typescript-eslint/tsconfig-utils@8.53.0(typescript@5.4.5)':
'@typescript-eslint/tsconfig-utils@8.53.1(typescript@5.4.5)':
dependencies:
typescript: 5.4.5
'@typescript-eslint/type-utils@8.53.0(eslint@9.39.1)(typescript@5.4.5)':
'@typescript-eslint/type-utils@8.53.1(eslint@9.39.1)(typescript@5.4.5)':
dependencies:
'@typescript-eslint/types': 8.53.0
'@typescript-eslint/typescript-estree': 8.53.0(typescript@5.4.5)
'@typescript-eslint/utils': 8.53.0(eslint@9.39.1)(typescript@5.4.5)
'@typescript-eslint/types': 8.53.1
'@typescript-eslint/typescript-estree': 8.53.1(typescript@5.4.5)
'@typescript-eslint/utils': 8.53.1(eslint@9.39.1)(typescript@5.4.5)
debug: 4.4.3
eslint: 9.39.1
ts-api-utils: 2.4.0(typescript@5.4.5)
@@ -2918,14 +2918,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/types@8.53.0': {}
'@typescript-eslint/types@8.53.1': {}
'@typescript-eslint/typescript-estree@8.53.0(typescript@5.4.5)':
'@typescript-eslint/typescript-estree@8.53.1(typescript@5.4.5)':
dependencies:
'@typescript-eslint/project-service': 8.53.0(typescript@5.4.5)
'@typescript-eslint/tsconfig-utils': 8.53.0(typescript@5.4.5)
'@typescript-eslint/types': 8.53.0
'@typescript-eslint/visitor-keys': 8.53.0
'@typescript-eslint/project-service': 8.53.1(typescript@5.4.5)
'@typescript-eslint/tsconfig-utils': 8.53.1(typescript@5.4.5)
'@typescript-eslint/types': 8.53.1
'@typescript-eslint/visitor-keys': 8.53.1
debug: 4.4.3
minimatch: 9.0.5
semver: 7.7.3
@@ -2935,20 +2935,20 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/utils@8.53.0(eslint@9.39.1)(typescript@5.4.5)':
'@typescript-eslint/utils@8.53.1(eslint@9.39.1)(typescript@5.4.5)':
dependencies:
'@eslint-community/eslint-utils': 4.9.1(eslint@9.39.1)
'@typescript-eslint/scope-manager': 8.53.0
'@typescript-eslint/types': 8.53.0
'@typescript-eslint/typescript-estree': 8.53.0(typescript@5.4.5)
'@typescript-eslint/scope-manager': 8.53.1
'@typescript-eslint/types': 8.53.1
'@typescript-eslint/typescript-estree': 8.53.1(typescript@5.4.5)
eslint: 9.39.1
typescript: 5.4.5
transitivePeerDependencies:
- supports-color
'@typescript-eslint/visitor-keys@8.53.0':
'@typescript-eslint/visitor-keys@8.53.1':
dependencies:
'@typescript-eslint/types': 8.53.0
'@typescript-eslint/types': 8.53.1
eslint-visitor-keys: 4.2.1
abort-controller@3.0.0:
@@ -3021,7 +3021,7 @@ snapshots:
cookie@1.1.1: {}
core-js-pure@3.47.0: {}
core-js-pure@3.48.0: {}
cross-fetch@4.1.0:
dependencies:
@@ -3220,7 +3220,7 @@ snapshots:
has-flag@4.0.0: {}
hono@4.11.4: {}
hono@4.11.5: {}
html-to-text@9.0.5:
dependencies:
@@ -3319,12 +3319,12 @@ snapshots:
js-base64: 3.7.8
mime-types: 2.1.35
miniflare@4.20260114.0:
miniflare@4.20260120.0:
dependencies:
'@cspotcode/source-map-support': 0.8.1
sharp: 0.34.5
undici: 7.14.0
workerd: 1.20260114.0
undici: 7.18.2
workerd: 1.20260120.0
ws: 8.18.0
youch: 4.1.0-beta.10
zod: 3.25.76
@@ -3396,7 +3396,7 @@ snapshots:
prelude-ls@1.2.1: {}
prettier@3.8.0:
prettier@3.8.1:
optional: true
punycode@2.3.1: {}
@@ -3424,7 +3424,7 @@ snapshots:
loose-envify: 1.4.0
optional: true
resend@6.7.0(@react-email/render@1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)):
resend@6.8.0(@react-email/render@1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)):
dependencies:
svix: 1.84.1
optionalDependencies:
@@ -3538,12 +3538,12 @@ snapshots:
dependencies:
prelude-ls: 1.2.1
typescript-eslint@8.53.0(eslint@9.39.1)(typescript@5.4.5):
typescript-eslint@8.53.1(eslint@9.39.1)(typescript@5.4.5):
dependencies:
'@typescript-eslint/eslint-plugin': 8.53.0(@typescript-eslint/parser@8.53.0(eslint@9.39.1)(typescript@5.4.5))(eslint@9.39.1)(typescript@5.4.5)
'@typescript-eslint/parser': 8.53.0(eslint@9.39.1)(typescript@5.4.5)
'@typescript-eslint/typescript-estree': 8.53.0(typescript@5.4.5)
'@typescript-eslint/utils': 8.53.0(eslint@9.39.1)(typescript@5.4.5)
'@typescript-eslint/eslint-plugin': 8.53.1(@typescript-eslint/parser@8.53.1(eslint@9.39.1)(typescript@5.4.5))(eslint@9.39.1)(typescript@5.4.5)
'@typescript-eslint/parser': 8.53.1(eslint@9.39.1)(typescript@5.4.5)
'@typescript-eslint/typescript-estree': 8.53.1(typescript@5.4.5)
'@typescript-eslint/utils': 8.53.1(eslint@9.39.1)(typescript@5.4.5)
eslint: 9.39.1
typescript: 5.4.5
transitivePeerDependencies:
@@ -3553,7 +3553,7 @@ snapshots:
undici-types@7.16.0: {}
undici@7.14.0: {}
undici@7.18.2: {}
unenv@2.0.0-rc.24:
dependencies:
@@ -3582,26 +3582,26 @@ snapshots:
worker-mailer@1.2.1: {}
workerd@1.20260114.0:
workerd@1.20260120.0:
optionalDependencies:
'@cloudflare/workerd-darwin-64': 1.20260114.0
'@cloudflare/workerd-darwin-arm64': 1.20260114.0
'@cloudflare/workerd-linux-64': 1.20260114.0
'@cloudflare/workerd-linux-arm64': 1.20260114.0
'@cloudflare/workerd-windows-64': 1.20260114.0
'@cloudflare/workerd-darwin-64': 1.20260120.0
'@cloudflare/workerd-darwin-arm64': 1.20260120.0
'@cloudflare/workerd-linux-64': 1.20260120.0
'@cloudflare/workerd-linux-arm64': 1.20260120.0
'@cloudflare/workerd-windows-64': 1.20260120.0
wrangler@4.59.2(@cloudflare/workers-types@4.20260118.0):
wrangler@4.60.0(@cloudflare/workers-types@4.20260123.0):
dependencies:
'@cloudflare/kv-asset-handler': 0.4.2
'@cloudflare/unenv-preset': 2.10.0(unenv@2.0.0-rc.24)(workerd@1.20260114.0)
'@cloudflare/unenv-preset': 2.11.0(unenv@2.0.0-rc.24)(workerd@1.20260120.0)
blake3-wasm: 2.1.5
esbuild: 0.27.0
miniflare: 4.20260114.0
miniflare: 4.20260120.0
path-to-regexp: 6.3.0
unenv: 2.0.0-rc.24
workerd: 1.20260114.0
workerd: 1.20260120.0
optionalDependencies:
'@cloudflare/workers-types': 4.20260118.0
'@cloudflare/workers-types': 4.20260123.0
fsevents: 2.3.3
transitivePeerDependencies:
- bufferutil

View File

@@ -155,6 +155,9 @@ export type UserOauth2Settings = {
redirectURL: string;
logoutURL?: string;
userEmailKey: string;
enableEmailFormat?: boolean; // Enable email format transformation
userEmailFormat?: string; // Regex pattern to match email
userEmailReplace?: string; // Replacement template using $1, $2, etc.
scope: string;
enableMailAllowList?: boolean | undefined;
mailAllowList?: string[] | undefined;

View File

@@ -68,7 +68,7 @@ export default {
}
const userInfo = await userRes.json<any>()
const email = await (async () => {
const rawEmail = await (async () => {
if (setting.userEmailKey.startsWith("$")) {
const { JSONPath } = await import('jsonpath-plus');
const email = JSONPath({
@@ -83,6 +83,26 @@ export default {
return email;
})()
if (!rawEmail) {
return c.text(msgs.Oauth2FailedGetUserEmailMsg, 400);
}
// Apply email format transformation if enabled
const email = (() => {
const rawEmailStr = String(rawEmail).slice(0, 256).trim(); // 限制长度防止 ReDoS
if (!setting.enableEmailFormat || !setting.userEmailFormat) {
return rawEmailStr;
}
try {
const regex = new RegExp(setting.userEmailFormat);
const replacement = setting.userEmailReplace || '$1';
return rawEmailStr.replace(regex, replacement).trim();
} catch (e) {
console.error(`Invalid regex in userEmailFormat: ${setting.userEmailFormat}`, e);
return rawEmailStr;
}
})();
if (!email) {
return c.text(msgs.Oauth2FailedGetUserEmailMsg, 400);
}