feat: support deploy worker with UI assets (#627)

This commit is contained in:
Dream Hunter
2025-04-12 15:37:34 +08:00
committed by GitHub
parent 32767176f0
commit 47e2cb56b4
22 changed files with 449 additions and 343 deletions

View File

@@ -32,6 +32,14 @@ jobs:
- name: Deploy Backend for ${{ github.ref_name }}
run: |
export use_worker_assets=${{ secrets.USE_WORKER_ASSETS }}
if [ -n "$use_worker_assets" ]; then
cd frontend/
pnpm install --no-frozen-lockfile
pnpm build:pages
cd ..
fi
export debug_mode=${{ secrets.DEBUG_MODE }}
export use_mail_wasm_parser=${{ secrets.BACKEND_USE_MAIL_WASM_PARSER }}
cd worker/

View File

@@ -47,6 +47,6 @@
"vite-plugin-wasm": "^3.4.1",
"workbox-build": "^7.3.0",
"workbox-window": "^7.3.0",
"wrangler": "^4.7.2"
"wrangler": "^4.9.1"
}
}

102
frontend/pnpm-lock.yaml generated
View File

@@ -88,8 +88,8 @@ importers:
specifier: ^7.3.0
version: 7.3.0
wrangler:
specifier: ^4.7.2
version: 4.7.2
specifier: ^4.9.1
version: 4.9.1
packages:
@@ -601,32 +601,32 @@ packages:
workerd:
optional: true
'@cloudflare/workerd-darwin-64@1.20250404.0':
resolution: {integrity: sha512-+z67wjimn7pZDJI5Ibt2TtNxreFJdFPd5dBMmQqtIfkwrlIsL4PkjHYdiffO7guFP9UygomThuKUaBOU4JA15Q==}
'@cloudflare/workerd-darwin-64@1.20250408.0':
resolution: {integrity: sha512-bxhIwBWxaNItZLXDNOKY2dCv0FHjDiDkfJFpwv4HvtvU5MKcrivZHVmmfDzLW85rqzfcDOmKbZeMPVfiKxdBZw==}
engines: {node: '>=16'}
cpu: [x64]
os: [darwin]
'@cloudflare/workerd-darwin-arm64@1.20250404.0':
resolution: {integrity: sha512-MxFuWqR5bMcc92khreSlYOJxr0OIlJxABdrWQsaogWsxI6p7Df9gV1T36pqg+ERa9fVhkkGERkalt9DJYyYicA==}
'@cloudflare/workerd-darwin-arm64@1.20250408.0':
resolution: {integrity: sha512-5XZ2Oykr8bSo7zBmERtHh18h5BZYC/6H1YFWVxEj3PtalF3+6SHsO4KZsbGvDml9Pu7sHV277jiZE5eny8Hlyw==}
engines: {node: '>=16'}
cpu: [arm64]
os: [darwin]
'@cloudflare/workerd-linux-64@1.20250404.0':
resolution: {integrity: sha512-f4rNJ45376vGB6WHmxxiZ50nmxMws337EvWthhNAZTyeoTYmJUbZjjWCaHR8clWXN8LLK1Tu1bkjsih730X41g==}
'@cloudflare/workerd-linux-64@1.20250408.0':
resolution: {integrity: sha512-WbgItXWln6G5d7GvYLWcuOzAVwafysZaWunH3UEfsm95wPuRofpYnlDD861gdWJX10IHSVgMStGESUcs7FLerQ==}
engines: {node: '>=16'}
cpu: [x64]
os: [linux]
'@cloudflare/workerd-linux-arm64@1.20250404.0':
resolution: {integrity: sha512-UW54a/vZG6W1oiA9PUSatQ0LLWrxnwAX7rN/bCFLiT6n51PP8KgpM1LzrIvQM80WjH/ufqopZJe/TSgrrSss6Q==}
'@cloudflare/workerd-linux-arm64@1.20250408.0':
resolution: {integrity: sha512-pAhEywPPvr92SLylnQfZEPgXz+9pOG9G9haAPLpEatncZwYiYd9yiR6HYWhKp2erzCoNrOqKg9IlQwU3z1IDiw==}
engines: {node: '>=16'}
cpu: [arm64]
os: [linux]
'@cloudflare/workerd-windows-64@1.20250404.0':
resolution: {integrity: sha512-AJJP8vjJ6ioBzqUxVyByv5tE74z5LZ7G5To7w7dtYjWvKZzFo39bZZwGCGryHmH4yaOylXubFv72YVH8+Y4GSQ==}
'@cloudflare/workerd-windows-64@1.20250408.0':
resolution: {integrity: sha512-nJ3RjMKGae2aF2rZ/CNeBvQPM+W5V1SUK0FYWG/uomyr7uQ2l4IayHna1ODg/OHHTEgIjwom0Mbn58iXb0WOcQ==}
engines: {node: '>=16'}
cpu: [x64]
os: [win32]
@@ -1812,8 +1812,8 @@ packages:
engines: {node: '>=0.10.0'}
hasBin: true
electron-to-chromium@1.5.132:
resolution: {integrity: sha512-QgX9EBvWGmvSRa74zqfnG7+Eno0Ak0vftBll0Pt2/z5b3bEGYL6OUXLgKPtvx73dn3dvwrlyVkjPKRRlhLYTEg==}
electron-to-chromium@1.5.134:
resolution: {integrity: sha512-zSwzrLg3jNP3bwsLqWHmS5z2nIOQ5ngMnfMZOWWtXnqqQkPVyOipxK98w+1beLw1TB+EImPNcG8wVP/cLVs2Og==}
entities@4.5.0:
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
@@ -2329,8 +2329,8 @@ packages:
engines: {node: '>=10.0.0'}
hasBin: true
miniflare@4.20250404.0:
resolution: {integrity: sha512-OeNnXrOdgSoN5iDA+u1Ue3etOyPY89BJFFizMgGEPJvGTYL+kZhKqeBKeZiZIS7xjjlrfXNqleYGnCyomQ1pDQ==}
miniflare@4.20250408.0:
resolution: {integrity: sha512-h1FAK1l/RzZyhGAeLKD+XawWBWowY8tjOcj0Yz8RmCpZ5xBfl255O5eGw4Xk1rcpgxyEB0qiaL2CmV9HAyMfhw==}
engines: {node: '>=18.0.0'}
hasBin: true
@@ -2761,8 +2761,8 @@ packages:
engines: {node: '>=14.17'}
hasBin: true
ufo@1.5.4:
resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==}
ufo@1.6.1:
resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==}
unbox-primitive@1.1.0:
resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==}
@@ -2797,8 +2797,8 @@ packages:
resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==}
engines: {node: '>=4'}
unimport@4.1.3:
resolution: {integrity: sha512-H+IVJ7rAkE3b+oC8rSJ2FsPaVsweeMC8eKZc+C6Mz7+hxDF45AnrY/tVCNRBvzMwWNcJEV67WdAVcal27iMjOw==}
unimport@4.2.0:
resolution: {integrity: sha512-mYVtA0nmzrysnYnyb3ALMbByJ+Maosee2+WyE0puXl+Xm2bUwPorPaaeZt0ETfuroPOtG8jj1g/qeFZ6buFnag==}
engines: {node: '>=18.12.0'}
unique-string@2.0.0:
@@ -3035,17 +3035,17 @@ packages:
workbox-window@7.3.0:
resolution: {integrity: sha512-qW8PDy16OV1UBaUNGlTVcepzrlzyzNW/ZJvFQQs2j2TzGsg6IKjcpZC1RSquqQnTOafl5pCj5bGfAHlCjOOjdA==}
workerd@1.20250404.0:
resolution: {integrity: sha512-dvXsRdy49/vd4nPENpTDFjbPvR3XdPa8lJrxcnDKL1XtoioYXflq3ys8ljuu+X71ojqAAjnQj62AzrmmKM095g==}
workerd@1.20250408.0:
resolution: {integrity: sha512-bBUX+UsvpzAqiWFNeZrlZmDGddiGZdBBbftZJz2wE6iUg/cIAJeVQYTtS/3ahaicguoLBz4nJiDo8luqM9fx1A==}
engines: {node: '>=16'}
hasBin: true
wrangler@4.7.2:
resolution: {integrity: sha512-fK9h7PL8wrrdSLCFXVDotoSHOebRmdNdB4VRkUDWOIyiP0Dx54TBfXTt3bXB98EYx7VT+vj6CNVnEC8gSCxt0w==}
wrangler@4.9.1:
resolution: {integrity: sha512-wBV0OKFp+4Ii4bFIIBRm1JJi1od5KGhzsUjWw+2jtlX/H0n2TkdskMDQtrOdV9ybFKj2h+v93VxhAEBePghAkQ==}
engines: {node: '>=18.0.0'}
hasBin: true
peerDependencies:
'@cloudflare/workers-types': ^4.20250404.0
'@cloudflare/workers-types': ^4.20250408.0
peerDependenciesMeta:
'@cloudflare/workers-types':
optional: true
@@ -3734,25 +3734,25 @@ snapshots:
dependencies:
mime: 3.0.0
'@cloudflare/unenv-preset@2.3.1(unenv@2.0.0-rc.15)(workerd@1.20250404.0)':
'@cloudflare/unenv-preset@2.3.1(unenv@2.0.0-rc.15)(workerd@1.20250408.0)':
dependencies:
unenv: 2.0.0-rc.15
optionalDependencies:
workerd: 1.20250404.0
workerd: 1.20250408.0
'@cloudflare/workerd-darwin-64@1.20250404.0':
'@cloudflare/workerd-darwin-64@1.20250408.0':
optional: true
'@cloudflare/workerd-darwin-arm64@1.20250404.0':
'@cloudflare/workerd-darwin-arm64@1.20250408.0':
optional: true
'@cloudflare/workerd-linux-64@1.20250404.0':
'@cloudflare/workerd-linux-64@1.20250408.0':
optional: true
'@cloudflare/workerd-linux-arm64@1.20250404.0':
'@cloudflare/workerd-linux-arm64@1.20250408.0':
optional: true
'@cloudflare/workerd-windows-64@1.20250404.0':
'@cloudflare/workerd-windows-64@1.20250408.0':
optional: true
'@cspotcode/source-map-support@0.8.1':
@@ -4597,7 +4597,7 @@ snapshots:
browserslist@4.24.4:
dependencies:
caniuse-lite: 1.0.30001712
electron-to-chromium: 1.5.132
electron-to-chromium: 1.5.134
node-releases: 2.0.19
update-browserslist-db: 1.1.3(browserslist@4.24.4)
@@ -4772,7 +4772,7 @@ snapshots:
dependencies:
jake: 10.9.2
electron-to-chromium@1.5.132: {}
electron-to-chromium@1.5.134: {}
entities@4.5.0: {}
@@ -5357,7 +5357,7 @@ snapshots:
mime@3.0.0: {}
miniflare@4.20250404.0:
miniflare@4.20250408.0:
dependencies:
'@cspotcode/source-map-support': 0.8.1
acorn: 8.14.0
@@ -5366,7 +5366,7 @@ snapshots:
glob-to-regexp: 0.4.1
stoppable: 1.1.0
undici: 5.29.0
workerd: 1.20250404.0
workerd: 1.20250408.0
ws: 8.18.0
youch: 3.3.4
zod: 3.22.3
@@ -5387,7 +5387,7 @@ snapshots:
acorn: 8.14.1
pathe: 2.0.3
pkg-types: 1.3.1
ufo: 1.5.4
ufo: 1.6.1
ms@2.1.3: {}
@@ -5916,7 +5916,7 @@ snapshots:
typescript@5.4.5:
optional: true
ufo@1.5.4: {}
ufo@1.6.1: {}
unbox-primitive@1.1.0:
dependencies:
@@ -5938,7 +5938,7 @@ snapshots:
exsolve: 1.0.4
ohash: 2.0.11
pathe: 2.0.3
ufo: 1.5.4
ufo: 1.6.1
unhead@1.11.20:
dependencies:
@@ -5958,7 +5958,7 @@ snapshots:
unicode-property-aliases-ecmascript@2.1.0: {}
unimport@4.1.3:
unimport@4.2.0:
dependencies:
acorn: 8.14.1
escape-string-regexp: 5.0.0
@@ -5986,7 +5986,7 @@ snapshots:
local-pkg: 1.1.1
magic-string: 0.30.17
picomatch: 4.0.2
unimport: 4.1.3
unimport: 4.2.0
unplugin: 2.2.2
unplugin-utils: 0.2.4
optionalDependencies:
@@ -6278,24 +6278,24 @@ snapshots:
'@types/trusted-types': 2.0.7
workbox-core: 7.3.0
workerd@1.20250404.0:
workerd@1.20250408.0:
optionalDependencies:
'@cloudflare/workerd-darwin-64': 1.20250404.0
'@cloudflare/workerd-darwin-arm64': 1.20250404.0
'@cloudflare/workerd-linux-64': 1.20250404.0
'@cloudflare/workerd-linux-arm64': 1.20250404.0
'@cloudflare/workerd-windows-64': 1.20250404.0
'@cloudflare/workerd-darwin-64': 1.20250408.0
'@cloudflare/workerd-darwin-arm64': 1.20250408.0
'@cloudflare/workerd-linux-64': 1.20250408.0
'@cloudflare/workerd-linux-arm64': 1.20250408.0
'@cloudflare/workerd-windows-64': 1.20250408.0
wrangler@4.7.2:
wrangler@4.9.1:
dependencies:
'@cloudflare/kv-asset-handler': 0.4.0
'@cloudflare/unenv-preset': 2.3.1(unenv@2.0.0-rc.15)(workerd@1.20250404.0)
'@cloudflare/unenv-preset': 2.3.1(unenv@2.0.0-rc.15)(workerd@1.20250408.0)
blake3-wasm: 2.1.5
esbuild: 0.24.2
miniflare: 4.20250404.0
miniflare: 4.20250408.0
path-to-regexp: 6.3.0
unenv: 2.0.0-rc.15
workerd: 1.20250404.0
workerd: 1.20250408.0
optionalDependencies:
fsevents: 2.3.3
sharp: 0.33.5

View File

@@ -3,7 +3,8 @@ const API_PATHS = [
"/open_api/",
"/user_api/",
"/admin/",
"/telegram/"
"/telegram/",
"/external/",
];
export async function onRequest(context) {

View File

@@ -11,6 +11,6 @@
"author": "",
"license": "ISC",
"devDependencies": {
"wrangler": "^4.7.2"
"wrangler": "^4.9.1"
}
}

View File

@@ -27,7 +27,6 @@ export default defineConfig({
}
},
themeConfig: {
logo: { src: '/logo.png', width: 24, height: 24 },
search: { provider: 'local' },
socialLinks: [

View File

@@ -6,6 +6,7 @@ export const en = defineConfig({
description: 'CloudFlare Free sending and receiving of temporary domain name mailboxes',
themeConfig: {
outline: 'deep',
nav: nav(),
editLink: {

View File

@@ -28,6 +28,7 @@ export const zh = defineConfig({
},
outline: {
level: 'deep',
label: '页面导航'
},
@@ -121,6 +122,7 @@ function sidebarGuide(): DefaultTheme.SidebarItem[] {
text: '通过 Github Actions 部署',
collapsed: true,
items: [
{ text: 'Github Actions 部署准备', link: 'actions/pre-requisite' },
{ text: 'D1 数据库', link: 'actions/d1' },
{ text: 'Github Actions 配置', link: 'actions/github-action' },
{ text: '配置邮件转发', link: 'email-routing.md' },

View File

@@ -7,23 +7,50 @@
## 部署步骤
1. 在 GitHub fork 仓库
### Fork 仓库并启用 Actions
2. 打开仓库的 `Actions` 页面,找到 `Deploy Backend Production``Deploy Frontend`,点击 `enable workflow` 启用 `workflow`
- 在 GitHub fork 本仓库
- 打开仓库的 `Actions` 页面
- 找到 `Deploy Backend` 点击 `enable workflow` 启用 `workflow`
- 如果需要前后端分离部署, 找到`Deploy Frontend` 点击 `enable workflow` 启用 `workflow`
3. 然后在仓库页面 `Settings` -> `Secrets and variables` -> `Actions` -> `Repository secrets`, 添加以下 `secrets`:
### 配置 Secrets
- `CLOUDFLARE_ACCOUNT_ID`: Cloudflare 账户 ID, [参考文档](https://developers.cloudflare.com/workers/wrangler/ci-cd/#cloudflare-account-id)
- `CLOUDFLARE_API_TOKEN`: Cloudflare API Token, [参考文档](https://developers.cloudflare.com/workers/wrangler/ci-cd/#api-token)
- `BACKEND_TOML`: 后端配置文件,[参考此处](/zh/guide/cli/worker.html#修改-wrangler-toml-配置文件)
- `FRONTEND_ENV`: 前端配置文件,请复制 `frontend/.env.example` 的内容,[并参考此处修改](/zh/guide/cli/pages.html)
- `FRONTEND_NAME`: 你在 Cloudflare Pages 创建的项目名称,可通过 [用户界面](https://temp-mail-docs.awsl.uk/zh/guide/ui/pages.html) 或者 [命令行](https://temp-mail-docs.awsl.uk/zh/guide/cli/pages.html) 创建
- `FRONTEND_BRANCH`: (可选) pages 部署的分支,可不配置,默认 `production`
- `TG_FRONTEND_NAME`: (可选) 你在 Cloudflare Pages 创建的项目名称,同 `FRONTEND_NAME`,如果需要 Telegram Mini App 功能,请填写
- `DEBUG_MODE`: (可选) 是否开启调试模式,配置为 `true` 开启, 默认 worker 部署日志不会输出到 Github Actions 页面,开启后会输出
- `BACKEND_USE_MAIL_WASM_PARSER`: (可选) 是否使用 wasm 解析邮件,配置为 `true` 开启, 功能参考 [配置 worker 使用 wasm 解析邮件](/zh/guide/feature/mail_parser_wasm_worker)
然后在仓库页面 `Settings` -> `Secrets and variables` -> `Actions` -> `Repository secrets`, 添加以下 `secrets`:
4. 打开仓库的 `Actions` 页面,找到 `Deploy Backend Production``Deploy Frontend`,点击 `Run workflow` 选择分支手动部署
- 公共 `secrets`
| 名称 | 说明 |
| ----------------------- | --------------------------------------------------------------------------------------------------------------- |
| `CLOUDFLARE_ACCOUNT_ID` | Cloudflare 账户 ID, [参考文档](https://developers.cloudflare.com/workers/wrangler/ci-cd/#cloudflare-account-id) |
| `CLOUDFLARE_API_TOKEN` | Cloudflare API Token, [参考文档](https://developers.cloudflare.com/workers/wrangler/ci-cd/#api-token) |
- worker 后端 `secrets`
| 名称 | 说明 |
| ------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------- |
| `BACKEND_TOML` | 后端配置文件,[参考此处](/zh/guide/cli/worker.html#修改-wrangler-toml-配置文件) |
| `DEBUG_MODE` | (可选) 是否开启调试模式,配置为 `true` 开启, 默认 worker 部署日志不会输出到 Github Actions 页面,开启后会输出 |
| `BACKEND_USE_MAIL_WASM_PARSER` | (可选) 是否使用 wasm 解析邮件,配置为 `true` 开启, 功能参考 [配置 worker 使用 wasm 解析邮件](/zh/guide/feature/mail_parser_wasm_worker) |
| `USE_WORKER_ASSETS` | (可选) 部署带有前端资源的 Worker, 配置为 `true` 开启 |
- pages 前端 `secrets`
> [!warning] 注意
> 如果选择部署带有前端资源的 Worker, 则无须配置这些 `secrets`
| 名称 | 说明 |
| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `FRONTEND_ENV` | 前端配置文件,请复制 `frontend/.env.example` 的内容,[并参考此处修改](/zh/guide/cli/pages.html) |
| `FRONTEND_NAME` | 你在 Cloudflare Pages 创建的项目名称,可通过 [用户界面](https://temp-mail-docs.awsl.uk/zh/guide/ui/pages.html) 或者 [命令行](https://temp-mail-docs.awsl.uk/zh/guide/cli/pages.html) 创建 |
| `FRONTEND_BRANCH` | (可选) pages 部署的分支,可不配置,默认 `production` |
| `TG_FRONTEND_NAME` | (可选) 你在 Cloudflare Pages 创建的项目名称,同 `FRONTEND_NAME`,如果需要 Telegram Mini App 功能,请填写 |
### 部署
- 打开仓库的 `Actions` 页面
- 找到 `Deploy Backend` 点击 `Run workflow` 选择分支手动部署
- 如果需要前后端分离部署, 找到 `Deploy Frontend`, 点击 `Run workflow` 选择分支手动部署
## 如何配置自动更新

View File

@@ -0,0 +1,10 @@
# Gihub Actions 部署准备
## GitHub 账户
- 需要一个 GitHub 账户
- 良好的网络环境
## Fork 仓库
- 在 GitHub fork [本仓库](https://github.com/dreamhunter2333/cloudflare_temp_email.git)

View File

@@ -1,8 +1,11 @@
# Cloudflare Pages 前端
::: warning
下面种方式选择一种即可
:::
> [!warning] 注意
> 下面种方式选择一种即可
## 部署带有前端资源的 Worker
参考 [部署 Worker](/zh/guide/cli/worker#部署带有前端页面的-worker-可选)
## 前后端分离部署

View File

@@ -1,4 +1,4 @@
# Cloudflare workers 后端
# Cloudflare Worker 后端
## 初始化项目
@@ -36,6 +36,12 @@ compatibility_flags = [ "nodejs_compat" ]
# { pattern = "temp-email-api.xxxxx.xyz", custom_domain = true },
# ]
# 如果你想要部署带有前端资源的 worker, 你需要添加 assets 配置
# [assets]
# directory = "../frontend/dist/"
# binding = "ASSETS"
# run_worker_first = true
# 如果你想要使用定时任务清理邮件,取消下面的注释,并修改 cron 表达式
# [triggers]
# crons = [ "0 0 * * *" ]
@@ -86,6 +92,29 @@ database_id = "xxx" # D1 数据库 ID
# service = "auth-inbox"
```
## 部署带有前端页面的 worker(可选)
> [!NOTE]
> 如果不需要 [带有前端页面的 worker],可以跳过此步骤
> 参考之后部署前端文档,可以进行前后端分离部署
确认已构建前端资源到 `frontend/dist` 目录
```bash
cd frontend
pnpm install --no-frozen-lockfile
pnpm build:pages
```
`worker` 目录下的 `wrangler.toml` 文件中添加下面的配置
```toml
[assets]
directory = "../frontend/dist/"
binding = "ASSETS"
run_worker_first = true
```
## Telegram Bot 配置
> [!NOTE]

View File

@@ -1,6 +1,6 @@
# 搭建 SMTP IMAP 代理服务
::: warning
::: warning 注意
如果你使用了 `resend`, 可直接使用 `resend``SMTP` 服务,不需要使用此服务
:::

View File

@@ -1,6 +1,6 @@
# OAuth2 第三方登录
> [!WARNING]
> [!WARNING] 注意
> 第三方登录会自动使用用户邮箱注册账号(邮箱相同将视为同一账号)
>
> 此账号和注册的账号相同, 也可以通过忘记密码设置密码

View File

@@ -8,7 +8,7 @@
- [通过命令行部署](/zh/guide/cli/pre-requisite)
- [通过用户界面部署](/zh/guide/ui/d1)
- [通过Github Actions 部署](/zh/guide/actions/github-action)
- [通过Github Actions 部署](/zh/guide/actions/pre-requisite)
### 也可以参考网友提供的详细的小白教程

View File

@@ -6,7 +6,7 @@
"devDependencies": {
"@types/node": "^22.14.0",
"vitepress": "^1.6.3",
"wrangler": "^4.7.2"
"wrangler": "^4.9.1"
},
"scripts": {
"dev": "vitepress dev docs",

View File

@@ -17,10 +17,10 @@ importers:
version: 22.14.0
vitepress:
specifier: ^1.6.3
version: 1.6.3(@algolia/client-search@5.23.2)(@types/node@22.14.0)(postcss@8.5.3)(search-insights@2.13.0)(typescript@5.4.5)
version: 1.6.3(@algolia/client-search@5.23.3)(@types/node@22.14.0)(postcss@8.5.3)(search-insights@2.13.0)(typescript@5.4.5)
wrangler:
specifier: ^4.7.2
version: 4.7.2
specifier: ^4.9.1
version: 4.9.1
packages:
@@ -44,56 +44,56 @@ packages:
'@algolia/client-search': '>= 4.9.1 < 6'
algoliasearch: '>= 4.9.1 < 6'
'@algolia/client-abtesting@5.23.2':
resolution: {integrity: sha512-EudQGeYEzviwqPH8WoqP5VTQssE/PW6sEdL0zzOyKt2bWnWoUp5Rnm67sCbxYDR44JpUchbkul0PfWrSYsBPjQ==}
'@algolia/client-abtesting@5.23.3':
resolution: {integrity: sha512-yHI0hBwYcNPc+nJoHPTmmlP8pG6nstCEhpHaZQCDwLZhdMtNhd1hliZMCtLgNnvd1yKEgTt/ZDnTSdZLehfKdA==}
engines: {node: '>= 14.0.0'}
'@algolia/client-analytics@5.23.2':
resolution: {integrity: sha512-zmJrkZqWFu+ft+VRcttZZJhw5ElkhBtOArRzQOu9sRnrSSodBOdPRhAfvu8tG93Hv67wh5qQaTBwLxM58AxuMg==}
'@algolia/client-analytics@5.23.3':
resolution: {integrity: sha512-/70Ey+nZm4bRr2DcNrGU251YIn9lDu0g8xeP4jTCyunGRNFZ/d8hQAw9El34pcTpO1QDojJWAi6ywKIrUaks9w==}
engines: {node: '>= 14.0.0'}
'@algolia/client-common@5.23.2':
resolution: {integrity: sha512-xaE6o4BMdqYBe0iB7JjX6G9/Qeqx6TSs9T4d6VJ0JHPsEyklSwIbKRiomPeYD7vzt2P4t45Io6QBhifOUP+0qg==}
'@algolia/client-common@5.23.3':
resolution: {integrity: sha512-fkpbPclIvaiyw3ADKRBCxMZhrNx/8//6DClfWGxeEiTJ0HEEYtHlqE6GjAkEJubz4v1ioCQkhZwMoFfFct2/vQ==}
engines: {node: '>= 14.0.0'}
'@algolia/client-insights@5.23.2':
resolution: {integrity: sha512-F85hpMszbr5ZGt8gFdl7WOugELRF4z3R1nD9n3t7PZ/2alV7IR75UQY8/jMQDwij/lrnVaKbLeIvKKy6K7ncZw==}
'@algolia/client-insights@5.23.3':
resolution: {integrity: sha512-TXc5Ve6QOCihWCTWY9N56CZxF1iovzpBWBUhQhy6JSiUfX3MXceV3saV+sXHQ1NVt2NKkyUfEspYHBsTrYzIDg==}
engines: {node: '>= 14.0.0'}
'@algolia/client-personalization@5.23.2':
resolution: {integrity: sha512-TuGaGKiQvQqFNR4c3Vdl+JBe6dkEPmRzVyIdWLrurOPEmFmVCKRxtSnLr0TVFl6de/JfDAXuchvtvLHFxv9P2A==}
'@algolia/client-personalization@5.23.3':
resolution: {integrity: sha512-JlReruxxiw9LB53jF/BmvVV+c0thiWQUHRdgtbVIEusvRaiX1IdpWJSPQExEtBQ7VFg89nP8niCzWtA34ktKSA==}
engines: {node: '>= 14.0.0'}
'@algolia/client-query-suggestions@5.23.2':
resolution: {integrity: sha512-fg2tZf7Sf51Icjfrea0dnfbfwlJ7kXMcRsWSJN3DZhEi/Y4mMmK9L0Cq8sby6HDzxy5T8xEWNWC3TMx5FvrJ6w==}
'@algolia/client-query-suggestions@5.23.3':
resolution: {integrity: sha512-GDEExFMXwx0ScE0AZUA4F6ssztdJvGcXUkdWmWyt2hbYz43ukqmlVJqPaYgGmWdjJjvTx+dNF/hcinwWuXbCug==}
engines: {node: '>= 14.0.0'}
'@algolia/client-search@5.23.2':
resolution: {integrity: sha512-XiTjt0qgsJk9OqvDpMwTgUaPAYNSQcMILRfSYiorgiyc71yYM7Lq1vRSVxhB0m51mrViWj4rIR6kSiJRXebqvQ==}
'@algolia/client-search@5.23.3':
resolution: {integrity: sha512-mwofV6tGo0oHt4BPi+S5eLC3wnhOa4A1OVgPxetTxZuetod+2W4cxKavUW2v/Ma5CABXPLooXX+g9E67umELZw==}
engines: {node: '>= 14.0.0'}
'@algolia/ingestion@1.23.2':
resolution: {integrity: sha512-7ClIghvUFZTomBipD8Kor9Z5llcAM3lHUBG3VFOvUsOxOJcaMMONlBXyoFDfI1na+u14lVaGehY2oIEfY1eB0w==}
'@algolia/ingestion@1.23.3':
resolution: {integrity: sha512-Zxgmi7Hk4lI52YFphzzJekUqWxYxVjY2GrCpOxV+QiojvUi8Ru+knq6REcwLHFSwpwaDh2Th5pOefMpn4EkQCw==}
engines: {node: '>= 14.0.0'}
'@algolia/monitoring@1.23.2':
resolution: {integrity: sha512-kF7KKd0iIIlaD70flFS+8+DNxRvIzrG9A22iWG5LDX225Kl6pITroq+qIUweqqyyoqJBYuIXKZGDGtnahEwQxw==}
'@algolia/monitoring@1.23.3':
resolution: {integrity: sha512-zi/IqvsmFW4E5gMaovAE4KRbXQ+LDYpPGG1nHtfuD5u3SSuQ31fT1vX2zqb6PbPTlgJMEmMk91Mbb7fIKmbQUw==}
engines: {node: '>= 14.0.0'}
'@algolia/recommend@5.23.2':
resolution: {integrity: sha512-nAgS2O5ww8J4fgW6GAiybAdr0uH7MV74srPdx51cPJRpQBEge4WnYBaOWx1/a53qI0xwNtQudnEyBGUzsSYaAw==}
'@algolia/recommend@5.23.3':
resolution: {integrity: sha512-C9TwbT1zGwULLXGSUSB+G7o/30djacPmQcsTHepvT47PVfPr2ISK/5QVtUnjMU84LEP8uNjuPUeM4ZeWVJ2iuQ==}
engines: {node: '>= 14.0.0'}
'@algolia/requester-browser-xhr@5.23.2':
resolution: {integrity: sha512-yw6IzgQcwr4cZuoQCEoQui9G0rhVRGCyhPhW+gmrXe6oVr4qB50FV6mWGLA170+iqGVjPn/DVuOhExjBzcViTQ==}
'@algolia/requester-browser-xhr@5.23.3':
resolution: {integrity: sha512-/7oYeUhYzY0lls7WtkAURM6wy21/Wwmq9GdujW1MpoYVC0ATXXxwCiAfOpYL9xdWxLV0R3wjyD+yZEni+nboKg==}
engines: {node: '>= 14.0.0'}
'@algolia/requester-fetch@5.23.2':
resolution: {integrity: sha512-8rmSybTwIqmGx3P0qkOEUkkyeIewglaKq6yUnxnVkBJbd4USfIZsw9cME1YUEHeZI7aOhTQg9QteUHSKXclF5A==}
'@algolia/requester-fetch@5.23.3':
resolution: {integrity: sha512-r/4fKz4t+bSU1KdjRq+swdNvuGfJ0spV8aFTHPtcsF+1ZaN/VqmdXrTe5NkaZLSztFeMqKwZlJIVvE7VuGlFtw==}
engines: {node: '>= 14.0.0'}
'@algolia/requester-node-http@5.23.2':
resolution: {integrity: sha512-IHpUiW3d3oVE5tCYqQN7X71/EbXI7f8WxU85eWW1UYEWEknqW3csdGctyIW7+qMHFfxeDymI1Wln/gGHHIXLIw==}
'@algolia/requester-node-http@5.23.3':
resolution: {integrity: sha512-UZiTNmUBQFPl3tUKuXaDd8BxEC0t0ny86wwW6XgwfM9IQf4PrzuMpvuOGIJMcCGlrNolZDEI0mcbz/tqRdKW7A==}
engines: {node: '>= 14.0.0'}
'@babel/helper-string-parser@7.25.9':
@@ -126,32 +126,32 @@ packages:
workerd:
optional: true
'@cloudflare/workerd-darwin-64@1.20250404.0':
resolution: {integrity: sha512-+z67wjimn7pZDJI5Ibt2TtNxreFJdFPd5dBMmQqtIfkwrlIsL4PkjHYdiffO7guFP9UygomThuKUaBOU4JA15Q==}
'@cloudflare/workerd-darwin-64@1.20250408.0':
resolution: {integrity: sha512-bxhIwBWxaNItZLXDNOKY2dCv0FHjDiDkfJFpwv4HvtvU5MKcrivZHVmmfDzLW85rqzfcDOmKbZeMPVfiKxdBZw==}
engines: {node: '>=16'}
cpu: [x64]
os: [darwin]
'@cloudflare/workerd-darwin-arm64@1.20250404.0':
resolution: {integrity: sha512-MxFuWqR5bMcc92khreSlYOJxr0OIlJxABdrWQsaogWsxI6p7Df9gV1T36pqg+ERa9fVhkkGERkalt9DJYyYicA==}
'@cloudflare/workerd-darwin-arm64@1.20250408.0':
resolution: {integrity: sha512-5XZ2Oykr8bSo7zBmERtHh18h5BZYC/6H1YFWVxEj3PtalF3+6SHsO4KZsbGvDml9Pu7sHV277jiZE5eny8Hlyw==}
engines: {node: '>=16'}
cpu: [arm64]
os: [darwin]
'@cloudflare/workerd-linux-64@1.20250404.0':
resolution: {integrity: sha512-f4rNJ45376vGB6WHmxxiZ50nmxMws337EvWthhNAZTyeoTYmJUbZjjWCaHR8clWXN8LLK1Tu1bkjsih730X41g==}
'@cloudflare/workerd-linux-64@1.20250408.0':
resolution: {integrity: sha512-WbgItXWln6G5d7GvYLWcuOzAVwafysZaWunH3UEfsm95wPuRofpYnlDD861gdWJX10IHSVgMStGESUcs7FLerQ==}
engines: {node: '>=16'}
cpu: [x64]
os: [linux]
'@cloudflare/workerd-linux-arm64@1.20250404.0':
resolution: {integrity: sha512-UW54a/vZG6W1oiA9PUSatQ0LLWrxnwAX7rN/bCFLiT6n51PP8KgpM1LzrIvQM80WjH/ufqopZJe/TSgrrSss6Q==}
'@cloudflare/workerd-linux-arm64@1.20250408.0':
resolution: {integrity: sha512-pAhEywPPvr92SLylnQfZEPgXz+9pOG9G9haAPLpEatncZwYiYd9yiR6HYWhKp2erzCoNrOqKg9IlQwU3z1IDiw==}
engines: {node: '>=16'}
cpu: [arm64]
os: [linux]
'@cloudflare/workerd-windows-64@1.20250404.0':
resolution: {integrity: sha512-AJJP8vjJ6ioBzqUxVyByv5tE74z5LZ7G5To7w7dtYjWvKZzFo39bZZwGCGryHmH4yaOylXubFv72YVH8+Y4GSQ==}
'@cloudflare/workerd-windows-64@1.20250408.0':
resolution: {integrity: sha512-nJ3RjMKGae2aF2rZ/CNeBvQPM+W5V1SUK0FYWG/uomyr7uQ2l4IayHna1ODg/OHHTEgIjwom0Mbn58iXb0WOcQ==}
engines: {node: '>=16'}
cpu: [x64]
os: [win32]
@@ -857,8 +857,8 @@ packages:
engines: {node: '>=0.4.0'}
hasBin: true
algoliasearch@5.23.2:
resolution: {integrity: sha512-IhKP22Czzg8Y9HaF6aIb5aAHK2HBj4VAzLLnKEPUnxqDwxpryH9sXbm0NkeY7Cby9GlF81wF+AG/VulKDFBphg==}
algoliasearch@5.23.3:
resolution: {integrity: sha512-0JlUaY/hl3LrKvbidI5FysEi2ggAlcTHM8AHV2UsrJUXnNo8/lWBfhzc1b7o8bK3YZNiU26JtLyT9exoj5VBgA==}
engines: {node: '>= 14.0.0'}
as-table@1.0.55:
@@ -1031,8 +1031,8 @@ packages:
engines: {node: '>=10.0.0'}
hasBin: true
miniflare@4.20250404.0:
resolution: {integrity: sha512-OeNnXrOdgSoN5iDA+u1Ue3etOyPY89BJFFizMgGEPJvGTYL+kZhKqeBKeZiZIS7xjjlrfXNqleYGnCyomQ1pDQ==}
miniflare@4.20250408.0:
resolution: {integrity: sha512-h1FAK1l/RzZyhGAeLKD+XawWBWowY8tjOcj0Yz8RmCpZ5xBfl255O5eGw4Xk1rcpgxyEB0qiaL2CmV9HAyMfhw==}
engines: {node: '>=18.0.0'}
hasBin: true
@@ -1178,8 +1178,8 @@ packages:
engines: {node: '>=14.17'}
hasBin: true
ufo@1.5.4:
resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==}
ufo@1.6.1:
resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==}
undici-types@6.21.0:
resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
@@ -1266,17 +1266,17 @@ packages:
typescript:
optional: true
workerd@1.20250404.0:
resolution: {integrity: sha512-dvXsRdy49/vd4nPENpTDFjbPvR3XdPa8lJrxcnDKL1XtoioYXflq3ys8ljuu+X71ojqAAjnQj62AzrmmKM095g==}
workerd@1.20250408.0:
resolution: {integrity: sha512-bBUX+UsvpzAqiWFNeZrlZmDGddiGZdBBbftZJz2wE6iUg/cIAJeVQYTtS/3ahaicguoLBz4nJiDo8luqM9fx1A==}
engines: {node: '>=16'}
hasBin: true
wrangler@4.7.2:
resolution: {integrity: sha512-fK9h7PL8wrrdSLCFXVDotoSHOebRmdNdB4VRkUDWOIyiP0Dx54TBfXTt3bXB98EYx7VT+vj6CNVnEC8gSCxt0w==}
wrangler@4.9.1:
resolution: {integrity: sha512-wBV0OKFp+4Ii4bFIIBRm1JJi1od5KGhzsUjWw+2jtlX/H0n2TkdskMDQtrOdV9ybFKj2h+v93VxhAEBePghAkQ==}
engines: {node: '>=18.0.0'}
hasBin: true
peerDependencies:
'@cloudflare/workers-types': ^4.20250404.0
'@cloudflare/workers-types': ^4.20250408.0
peerDependenciesMeta:
'@cloudflare/workers-types':
optional: true
@@ -1304,110 +1304,110 @@ packages:
snapshots:
'@algolia/autocomplete-core@1.17.7(@algolia/client-search@5.23.2)(algoliasearch@5.23.2)(search-insights@2.13.0)':
'@algolia/autocomplete-core@1.17.7(@algolia/client-search@5.23.3)(algoliasearch@5.23.3)(search-insights@2.13.0)':
dependencies:
'@algolia/autocomplete-plugin-algolia-insights': 1.17.7(@algolia/client-search@5.23.2)(algoliasearch@5.23.2)(search-insights@2.13.0)
'@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.23.2)(algoliasearch@5.23.2)
'@algolia/autocomplete-plugin-algolia-insights': 1.17.7(@algolia/client-search@5.23.3)(algoliasearch@5.23.3)(search-insights@2.13.0)
'@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.23.3)(algoliasearch@5.23.3)
transitivePeerDependencies:
- '@algolia/client-search'
- algoliasearch
- search-insights
'@algolia/autocomplete-plugin-algolia-insights@1.17.7(@algolia/client-search@5.23.2)(algoliasearch@5.23.2)(search-insights@2.13.0)':
'@algolia/autocomplete-plugin-algolia-insights@1.17.7(@algolia/client-search@5.23.3)(algoliasearch@5.23.3)(search-insights@2.13.0)':
dependencies:
'@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.23.2)(algoliasearch@5.23.2)
'@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.23.3)(algoliasearch@5.23.3)
search-insights: 2.13.0
transitivePeerDependencies:
- '@algolia/client-search'
- algoliasearch
'@algolia/autocomplete-preset-algolia@1.17.7(@algolia/client-search@5.23.2)(algoliasearch@5.23.2)':
'@algolia/autocomplete-preset-algolia@1.17.7(@algolia/client-search@5.23.3)(algoliasearch@5.23.3)':
dependencies:
'@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.23.2)(algoliasearch@5.23.2)
'@algolia/client-search': 5.23.2
algoliasearch: 5.23.2
'@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.23.3)(algoliasearch@5.23.3)
'@algolia/client-search': 5.23.3
algoliasearch: 5.23.3
'@algolia/autocomplete-shared@1.17.7(@algolia/client-search@5.23.2)(algoliasearch@5.23.2)':
'@algolia/autocomplete-shared@1.17.7(@algolia/client-search@5.23.3)(algoliasearch@5.23.3)':
dependencies:
'@algolia/client-search': 5.23.2
algoliasearch: 5.23.2
'@algolia/client-search': 5.23.3
algoliasearch: 5.23.3
'@algolia/client-abtesting@5.23.2':
'@algolia/client-abtesting@5.23.3':
dependencies:
'@algolia/client-common': 5.23.2
'@algolia/requester-browser-xhr': 5.23.2
'@algolia/requester-fetch': 5.23.2
'@algolia/requester-node-http': 5.23.2
'@algolia/client-common': 5.23.3
'@algolia/requester-browser-xhr': 5.23.3
'@algolia/requester-fetch': 5.23.3
'@algolia/requester-node-http': 5.23.3
'@algolia/client-analytics@5.23.2':
'@algolia/client-analytics@5.23.3':
dependencies:
'@algolia/client-common': 5.23.2
'@algolia/requester-browser-xhr': 5.23.2
'@algolia/requester-fetch': 5.23.2
'@algolia/requester-node-http': 5.23.2
'@algolia/client-common': 5.23.3
'@algolia/requester-browser-xhr': 5.23.3
'@algolia/requester-fetch': 5.23.3
'@algolia/requester-node-http': 5.23.3
'@algolia/client-common@5.23.2': {}
'@algolia/client-common@5.23.3': {}
'@algolia/client-insights@5.23.2':
'@algolia/client-insights@5.23.3':
dependencies:
'@algolia/client-common': 5.23.2
'@algolia/requester-browser-xhr': 5.23.2
'@algolia/requester-fetch': 5.23.2
'@algolia/requester-node-http': 5.23.2
'@algolia/client-common': 5.23.3
'@algolia/requester-browser-xhr': 5.23.3
'@algolia/requester-fetch': 5.23.3
'@algolia/requester-node-http': 5.23.3
'@algolia/client-personalization@5.23.2':
'@algolia/client-personalization@5.23.3':
dependencies:
'@algolia/client-common': 5.23.2
'@algolia/requester-browser-xhr': 5.23.2
'@algolia/requester-fetch': 5.23.2
'@algolia/requester-node-http': 5.23.2
'@algolia/client-common': 5.23.3
'@algolia/requester-browser-xhr': 5.23.3
'@algolia/requester-fetch': 5.23.3
'@algolia/requester-node-http': 5.23.3
'@algolia/client-query-suggestions@5.23.2':
'@algolia/client-query-suggestions@5.23.3':
dependencies:
'@algolia/client-common': 5.23.2
'@algolia/requester-browser-xhr': 5.23.2
'@algolia/requester-fetch': 5.23.2
'@algolia/requester-node-http': 5.23.2
'@algolia/client-common': 5.23.3
'@algolia/requester-browser-xhr': 5.23.3
'@algolia/requester-fetch': 5.23.3
'@algolia/requester-node-http': 5.23.3
'@algolia/client-search@5.23.2':
'@algolia/client-search@5.23.3':
dependencies:
'@algolia/client-common': 5.23.2
'@algolia/requester-browser-xhr': 5.23.2
'@algolia/requester-fetch': 5.23.2
'@algolia/requester-node-http': 5.23.2
'@algolia/client-common': 5.23.3
'@algolia/requester-browser-xhr': 5.23.3
'@algolia/requester-fetch': 5.23.3
'@algolia/requester-node-http': 5.23.3
'@algolia/ingestion@1.23.2':
'@algolia/ingestion@1.23.3':
dependencies:
'@algolia/client-common': 5.23.2
'@algolia/requester-browser-xhr': 5.23.2
'@algolia/requester-fetch': 5.23.2
'@algolia/requester-node-http': 5.23.2
'@algolia/client-common': 5.23.3
'@algolia/requester-browser-xhr': 5.23.3
'@algolia/requester-fetch': 5.23.3
'@algolia/requester-node-http': 5.23.3
'@algolia/monitoring@1.23.2':
'@algolia/monitoring@1.23.3':
dependencies:
'@algolia/client-common': 5.23.2
'@algolia/requester-browser-xhr': 5.23.2
'@algolia/requester-fetch': 5.23.2
'@algolia/requester-node-http': 5.23.2
'@algolia/client-common': 5.23.3
'@algolia/requester-browser-xhr': 5.23.3
'@algolia/requester-fetch': 5.23.3
'@algolia/requester-node-http': 5.23.3
'@algolia/recommend@5.23.2':
'@algolia/recommend@5.23.3':
dependencies:
'@algolia/client-common': 5.23.2
'@algolia/requester-browser-xhr': 5.23.2
'@algolia/requester-fetch': 5.23.2
'@algolia/requester-node-http': 5.23.2
'@algolia/client-common': 5.23.3
'@algolia/requester-browser-xhr': 5.23.3
'@algolia/requester-fetch': 5.23.3
'@algolia/requester-node-http': 5.23.3
'@algolia/requester-browser-xhr@5.23.2':
'@algolia/requester-browser-xhr@5.23.3':
dependencies:
'@algolia/client-common': 5.23.2
'@algolia/client-common': 5.23.3
'@algolia/requester-fetch@5.23.2':
'@algolia/requester-fetch@5.23.3':
dependencies:
'@algolia/client-common': 5.23.2
'@algolia/client-common': 5.23.3
'@algolia/requester-node-http@5.23.2':
'@algolia/requester-node-http@5.23.3':
dependencies:
'@algolia/client-common': 5.23.2
'@algolia/client-common': 5.23.3
'@babel/helper-string-parser@7.25.9': {}
@@ -1426,25 +1426,25 @@ snapshots:
dependencies:
mime: 3.0.0
'@cloudflare/unenv-preset@2.3.1(unenv@2.0.0-rc.15)(workerd@1.20250404.0)':
'@cloudflare/unenv-preset@2.3.1(unenv@2.0.0-rc.15)(workerd@1.20250408.0)':
dependencies:
unenv: 2.0.0-rc.15
optionalDependencies:
workerd: 1.20250404.0
workerd: 1.20250408.0
'@cloudflare/workerd-darwin-64@1.20250404.0':
'@cloudflare/workerd-darwin-64@1.20250408.0':
optional: true
'@cloudflare/workerd-darwin-arm64@1.20250404.0':
'@cloudflare/workerd-darwin-arm64@1.20250408.0':
optional: true
'@cloudflare/workerd-linux-64@1.20250404.0':
'@cloudflare/workerd-linux-64@1.20250408.0':
optional: true
'@cloudflare/workerd-linux-arm64@1.20250404.0':
'@cloudflare/workerd-linux-arm64@1.20250408.0':
optional: true
'@cloudflare/workerd-windows-64@1.20250404.0':
'@cloudflare/workerd-windows-64@1.20250408.0':
optional: true
'@cspotcode/source-map-support@0.8.1':
@@ -1453,9 +1453,9 @@ snapshots:
'@docsearch/css@3.8.2': {}
'@docsearch/js@3.8.2(@algolia/client-search@5.23.2)(search-insights@2.13.0)':
'@docsearch/js@3.8.2(@algolia/client-search@5.23.3)(search-insights@2.13.0)':
dependencies:
'@docsearch/react': 3.8.2(@algolia/client-search@5.23.2)(search-insights@2.13.0)
'@docsearch/react': 3.8.2(@algolia/client-search@5.23.3)(search-insights@2.13.0)
preact: 10.26.5
transitivePeerDependencies:
- '@algolia/client-search'
@@ -1464,12 +1464,12 @@ snapshots:
- react-dom
- search-insights
'@docsearch/react@3.8.2(@algolia/client-search@5.23.2)(search-insights@2.13.0)':
'@docsearch/react@3.8.2(@algolia/client-search@5.23.3)(search-insights@2.13.0)':
dependencies:
'@algolia/autocomplete-core': 1.17.7(@algolia/client-search@5.23.2)(algoliasearch@5.23.2)(search-insights@2.13.0)
'@algolia/autocomplete-preset-algolia': 1.17.7(@algolia/client-search@5.23.2)(algoliasearch@5.23.2)
'@algolia/autocomplete-core': 1.17.7(@algolia/client-search@5.23.3)(algoliasearch@5.23.3)(search-insights@2.13.0)
'@algolia/autocomplete-preset-algolia': 1.17.7(@algolia/client-search@5.23.3)(algoliasearch@5.23.3)
'@docsearch/css': 3.8.2
algoliasearch: 5.23.2
algoliasearch: 5.23.3
optionalDependencies:
search-insights: 2.13.0
transitivePeerDependencies:
@@ -1953,21 +1953,21 @@ snapshots:
acorn@8.14.0: {}
algoliasearch@5.23.2:
algoliasearch@5.23.3:
dependencies:
'@algolia/client-abtesting': 5.23.2
'@algolia/client-analytics': 5.23.2
'@algolia/client-common': 5.23.2
'@algolia/client-insights': 5.23.2
'@algolia/client-personalization': 5.23.2
'@algolia/client-query-suggestions': 5.23.2
'@algolia/client-search': 5.23.2
'@algolia/ingestion': 1.23.2
'@algolia/monitoring': 1.23.2
'@algolia/recommend': 5.23.2
'@algolia/requester-browser-xhr': 5.23.2
'@algolia/requester-fetch': 5.23.2
'@algolia/requester-node-http': 5.23.2
'@algolia/client-abtesting': 5.23.3
'@algolia/client-analytics': 5.23.3
'@algolia/client-common': 5.23.3
'@algolia/client-insights': 5.23.3
'@algolia/client-personalization': 5.23.3
'@algolia/client-query-suggestions': 5.23.3
'@algolia/client-search': 5.23.3
'@algolia/ingestion': 1.23.3
'@algolia/monitoring': 1.23.3
'@algolia/recommend': 5.23.3
'@algolia/requester-browser-xhr': 5.23.3
'@algolia/requester-fetch': 5.23.3
'@algolia/requester-node-http': 5.23.3
as-table@1.0.55:
dependencies:
@@ -2187,7 +2187,7 @@ snapshots:
mime@3.0.0: {}
miniflare@4.20250404.0:
miniflare@4.20250408.0:
dependencies:
'@cspotcode/source-map-support': 0.8.1
acorn: 8.14.0
@@ -2196,7 +2196,7 @@ snapshots:
glob-to-regexp: 0.4.1
stoppable: 1.1.0
undici: 5.29.0
workerd: 1.20250404.0
workerd: 1.20250408.0
ws: 8.18.0
youch: 3.3.4
zod: 3.22.3
@@ -2382,7 +2382,7 @@ snapshots:
typescript@5.4.5:
optional: true
ufo@1.5.4: {}
ufo@1.6.1: {}
undici-types@6.21.0: {}
@@ -2396,7 +2396,7 @@ snapshots:
exsolve: 1.0.4
ohash: 2.0.11
pathe: 2.0.3
ufo: 1.5.4
ufo: 1.6.1
unist-util-is@6.0.0:
dependencies:
@@ -2442,10 +2442,10 @@ snapshots:
'@types/node': 22.14.0
fsevents: 2.3.3
vitepress@1.6.3(@algolia/client-search@5.23.2)(@types/node@22.14.0)(postcss@8.5.3)(search-insights@2.13.0)(typescript@5.4.5):
vitepress@1.6.3(@algolia/client-search@5.23.3)(@types/node@22.14.0)(postcss@8.5.3)(search-insights@2.13.0)(typescript@5.4.5):
dependencies:
'@docsearch/css': 3.8.2
'@docsearch/js': 3.8.2(@algolia/client-search@5.23.2)(search-insights@2.13.0)
'@docsearch/js': 3.8.2(@algolia/client-search@5.23.3)(search-insights@2.13.0)
'@iconify-json/simple-icons': 1.2.31
'@shikijs/core': 2.5.0
'@shikijs/transformers': 2.5.0
@@ -2501,24 +2501,24 @@ snapshots:
optionalDependencies:
typescript: 5.4.5
workerd@1.20250404.0:
workerd@1.20250408.0:
optionalDependencies:
'@cloudflare/workerd-darwin-64': 1.20250404.0
'@cloudflare/workerd-darwin-arm64': 1.20250404.0
'@cloudflare/workerd-linux-64': 1.20250404.0
'@cloudflare/workerd-linux-arm64': 1.20250404.0
'@cloudflare/workerd-windows-64': 1.20250404.0
'@cloudflare/workerd-darwin-64': 1.20250408.0
'@cloudflare/workerd-darwin-arm64': 1.20250408.0
'@cloudflare/workerd-linux-64': 1.20250408.0
'@cloudflare/workerd-linux-arm64': 1.20250408.0
'@cloudflare/workerd-windows-64': 1.20250408.0
wrangler@4.7.2:
wrangler@4.9.1:
dependencies:
'@cloudflare/kv-asset-handler': 0.4.0
'@cloudflare/unenv-preset': 2.3.1(unenv@2.0.0-rc.15)(workerd@1.20250404.0)
'@cloudflare/unenv-preset': 2.3.1(unenv@2.0.0-rc.15)(workerd@1.20250408.0)
blake3-wasm: 2.1.5
esbuild: 0.24.2
miniflare: 4.20250404.0
miniflare: 4.20250408.0
path-to-regexp: 6.3.0
unenv: 2.0.0-rc.15
workerd: 1.20250404.0
workerd: 1.20250408.0
optionalDependencies:
fsevents: 2.3.3
sharp: 0.33.5

View File

@@ -11,19 +11,19 @@
"build": "wrangler deploy --dry-run --outdir dist --minify"
},
"devDependencies": {
"@cloudflare/workers-types": "^4.20250407.0",
"@cloudflare/workers-types": "^4.20250409.0",
"@eslint/js": "9.18.0",
"@simplewebauthn/types": "10.0.0",
"eslint": "9.18.0",
"globals": "^15.15.0",
"typescript-eslint": "^8.29.0",
"wrangler": "^4.7.2"
"typescript-eslint": "^8.29.1",
"wrangler": "^4.9.1"
},
"dependencies": {
"@aws-sdk/client-s3": "^3.782.0",
"@aws-sdk/s3-request-presigner": "^3.782.0",
"@simplewebauthn/server": "10.0.1",
"hono": "^4.7.5",
"hono": "^4.7.6",
"mimetext": "^3.0.27",
"postal-mime": "^2.4.3",
"resend": "^4.2.0",

208
worker/pnpm-lock.yaml generated
View File

@@ -23,8 +23,8 @@ importers:
specifier: 10.0.1
version: 10.0.1
hono:
specifier: ^4.7.5
version: 4.7.5
specifier: ^4.7.6
version: 4.7.6
mimetext:
specifier: ^3.0.27
version: 3.0.27
@@ -42,8 +42,8 @@ importers:
version: 1.1.1
devDependencies:
'@cloudflare/workers-types':
specifier: ^4.20250407.0
version: 4.20250407.0
specifier: ^4.20250409.0
version: 4.20250409.0
'@eslint/js':
specifier: 9.18.0
version: 9.18.0
@@ -57,11 +57,11 @@ importers:
specifier: ^15.15.0
version: 15.15.0
typescript-eslint:
specifier: ^8.29.0
version: 8.29.0(eslint@9.18.0)(typescript@5.4.5)
specifier: ^8.29.1
version: 8.29.1(eslint@9.18.0)(typescript@5.4.5)
wrangler:
specifier: ^4.7.2
version: 4.7.2(@cloudflare/workers-types@4.20250407.0)
specifier: ^4.9.1
version: 4.9.1(@cloudflare/workers-types@4.20250409.0)
packages:
@@ -245,38 +245,38 @@ packages:
workerd:
optional: true
'@cloudflare/workerd-darwin-64@1.20250404.0':
resolution: {integrity: sha512-+z67wjimn7pZDJI5Ibt2TtNxreFJdFPd5dBMmQqtIfkwrlIsL4PkjHYdiffO7guFP9UygomThuKUaBOU4JA15Q==}
'@cloudflare/workerd-darwin-64@1.20250408.0':
resolution: {integrity: sha512-bxhIwBWxaNItZLXDNOKY2dCv0FHjDiDkfJFpwv4HvtvU5MKcrivZHVmmfDzLW85rqzfcDOmKbZeMPVfiKxdBZw==}
engines: {node: '>=16'}
cpu: [x64]
os: [darwin]
'@cloudflare/workerd-darwin-arm64@1.20250404.0':
resolution: {integrity: sha512-MxFuWqR5bMcc92khreSlYOJxr0OIlJxABdrWQsaogWsxI6p7Df9gV1T36pqg+ERa9fVhkkGERkalt9DJYyYicA==}
'@cloudflare/workerd-darwin-arm64@1.20250408.0':
resolution: {integrity: sha512-5XZ2Oykr8bSo7zBmERtHh18h5BZYC/6H1YFWVxEj3PtalF3+6SHsO4KZsbGvDml9Pu7sHV277jiZE5eny8Hlyw==}
engines: {node: '>=16'}
cpu: [arm64]
os: [darwin]
'@cloudflare/workerd-linux-64@1.20250404.0':
resolution: {integrity: sha512-f4rNJ45376vGB6WHmxxiZ50nmxMws337EvWthhNAZTyeoTYmJUbZjjWCaHR8clWXN8LLK1Tu1bkjsih730X41g==}
'@cloudflare/workerd-linux-64@1.20250408.0':
resolution: {integrity: sha512-WbgItXWln6G5d7GvYLWcuOzAVwafysZaWunH3UEfsm95wPuRofpYnlDD861gdWJX10IHSVgMStGESUcs7FLerQ==}
engines: {node: '>=16'}
cpu: [x64]
os: [linux]
'@cloudflare/workerd-linux-arm64@1.20250404.0':
resolution: {integrity: sha512-UW54a/vZG6W1oiA9PUSatQ0LLWrxnwAX7rN/bCFLiT6n51PP8KgpM1LzrIvQM80WjH/ufqopZJe/TSgrrSss6Q==}
'@cloudflare/workerd-linux-arm64@1.20250408.0':
resolution: {integrity: sha512-pAhEywPPvr92SLylnQfZEPgXz+9pOG9G9haAPLpEatncZwYiYd9yiR6HYWhKp2erzCoNrOqKg9IlQwU3z1IDiw==}
engines: {node: '>=16'}
cpu: [arm64]
os: [linux]
'@cloudflare/workerd-windows-64@1.20250404.0':
resolution: {integrity: sha512-AJJP8vjJ6ioBzqUxVyByv5tE74z5LZ7G5To7w7dtYjWvKZzFo39bZZwGCGryHmH4yaOylXubFv72YVH8+Y4GSQ==}
'@cloudflare/workerd-windows-64@1.20250408.0':
resolution: {integrity: sha512-nJ3RjMKGae2aF2rZ/CNeBvQPM+W5V1SUK0FYWG/uomyr7uQ2l4IayHna1ODg/OHHTEgIjwom0Mbn58iXb0WOcQ==}
engines: {node: '>=16'}
cpu: [x64]
os: [win32]
'@cloudflare/workers-types@4.20250407.0':
resolution: {integrity: sha512-M6cB247uy32VzM/P4NpRSHNNTcPgTn+s31wBV7gD14hkA07jMGBYlEcAv1LOghLNGZ5AEvYxLxQCVSvkF7HNIw==}
'@cloudflare/workers-types@4.20250409.0':
resolution: {integrity: sha512-yPxxwE5nr168huEfLNOB6904OsvIWcq0tWT23NMD6jT5SIp2ds3oOGANw7wz39r5y3jZYC2h1OnGwnZXJDDCOg==}
'@cspotcode/source-map-support@0.8.1':
resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
@@ -883,51 +883,51 @@ packages:
'@types/json-schema@7.0.15':
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
'@typescript-eslint/eslint-plugin@8.29.0':
resolution: {integrity: sha512-PAIpk/U7NIS6H7TEtN45SPGLQaHNgB7wSjsQV/8+KYokAb2T/gloOA/Bee2yd4/yKVhPKe5LlaUGhAZk5zmSaQ==}
'@typescript-eslint/eslint-plugin@8.29.1':
resolution: {integrity: sha512-ba0rr4Wfvg23vERs3eB+P3lfj2E+2g3lhWcCVukUuhtcdUx5lSIFZlGFEBHKr+3zizDa/TvZTptdNHVZWAkSBg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
'@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <5.9.0'
'@typescript-eslint/parser@8.29.0':
resolution: {integrity: sha512-8C0+jlNJOwQso2GapCVWWfW/rzaq7Lbme+vGUFKE31djwNncIpgXD7Cd4weEsDdkoZDjH0lwwr3QDQFuyrMg9g==}
'@typescript-eslint/parser@8.29.1':
resolution: {integrity: sha512-zczrHVEqEaTwh12gWBIJWj8nx+ayDcCJs06yoNMY0kwjMWDM6+kppljY+BxWI06d2Ja+h4+WdufDcwMnnMEWmg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <5.9.0'
'@typescript-eslint/scope-manager@8.29.0':
resolution: {integrity: sha512-aO1PVsq7Gm+tcghabUpzEnVSFMCU4/nYIgC2GOatJcllvWfnhrgW0ZEbnTxm36QsikmCN1K/6ZgM7fok2I7xNw==}
'@typescript-eslint/scope-manager@8.29.1':
resolution: {integrity: sha512-2nggXGX5F3YrsGN08pw4XpMLO1Rgtnn4AzTegC2MDesv6q3QaTU5yU7IbS1tf1IwCR0Hv/1EFygLn9ms6LIpDA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/type-utils@8.29.0':
resolution: {integrity: sha512-ahaWQ42JAOx+NKEf5++WC/ua17q5l+j1GFrbbpVKzFL/tKVc0aYY8rVSYUpUvt2hUP1YBr7mwXzx+E/DfUWI9Q==}
'@typescript-eslint/type-utils@8.29.1':
resolution: {integrity: sha512-DkDUSDwZVCYN71xA4wzySqqcZsHKic53A4BLqmrWFFpOpNSoxX233lwGu/2135ymTCR04PoKiEEEvN1gFYg4Tw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <5.9.0'
'@typescript-eslint/types@8.29.0':
resolution: {integrity: sha512-wcJL/+cOXV+RE3gjCyl/V2G877+2faqvlgtso/ZRbTCnZazh0gXhe+7gbAnfubzN2bNsBtZjDvlh7ero8uIbzg==}
'@typescript-eslint/types@8.29.1':
resolution: {integrity: sha512-VT7T1PuJF1hpYC3AGm2rCgJBjHL3nc+A/bhOp9sGMKfi5v0WufsX/sHCFBfNTx2F+zA6qBc/PD0/kLRLjdt8mQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/typescript-estree@8.29.0':
resolution: {integrity: sha512-yOfen3jE9ISZR/hHpU/bmNvTtBW1NjRbkSFdZOksL1N+ybPEE7UVGMwqvS6CP022Rp00Sb0tdiIkhSCe6NI8ow==}
'@typescript-eslint/typescript-estree@8.29.1':
resolution: {integrity: sha512-l1enRoSaUkQxOQnbi0KPUtqeZkSiFlqrx9/3ns2rEDhGKfTa+88RmXqedC1zmVTOWrLc2e6DEJrTA51C9iLH5g==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <5.9.0'
'@typescript-eslint/utils@8.29.0':
resolution: {integrity: sha512-gX/A0Mz9Bskm8avSWFcK0gP7cZpbY4AIo6B0hWYFCaIsz750oaiWR4Jr2CI+PQhfW1CpcQr9OlfPS+kMFegjXA==}
'@typescript-eslint/utils@8.29.1':
resolution: {integrity: sha512-QAkFEbytSaB8wnmB+DflhUPz6CLbFWE2SnSCrRMEa+KnXIzDYbpsn++1HGvnfAsUY44doDXmvRkO5shlM/3UfA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <5.9.0'
'@typescript-eslint/visitor-keys@8.29.0':
resolution: {integrity: sha512-Sne/pVz8ryR03NFK21VpN88dZ2FdQXOlq3VIklbrTYEt8yXtRFr9tvUhqvCeKjqYk5FSim37sHbooT6vzBTZcg==}
'@typescript-eslint/visitor-keys@8.29.1':
resolution: {integrity: sha512-RGLh5CRaUEf02viP5c1Vh1cMGffQscyHe7HPAzGpfmfflFg1wUz2rYxd+OZqwpeypYvZ8UxSxuIpF++fmOzEcg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
abort-controller@3.0.0:
@@ -1218,8 +1218,8 @@ packages:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
engines: {node: '>=8'}
hono@4.7.5:
resolution: {integrity: sha512-fDOK5W2C1vZACsgLONigdZTRZxuBqFtcKh7bUQ5cVSbwI2RWjloJDcgFOVzbQrlI6pCmhlTsVYZ7zpLj4m4qMQ==}
hono@4.7.6:
resolution: {integrity: sha512-564rVzELU+9BRqqx5k8sT2NFwGD3I3Vifdb6P7CmM6FiarOSY+fDC+6B+k9wcCb86ReoayteZP2ki0cRLN1jbw==}
engines: {node: '>=16.9.0'}
html-to-text@9.0.5:
@@ -1323,8 +1323,8 @@ packages:
mimetext@3.0.27:
resolution: {integrity: sha512-mUhWAsZD1N/K6dbN4+a5Yq78OPnYQw1ubOSMasBntsLQ2S7KVNlvDEA8dwpr4a7PszWMzeslKahAprtwYMgaBA==}
miniflare@4.20250404.0:
resolution: {integrity: sha512-OeNnXrOdgSoN5iDA+u1Ue3etOyPY89BJFFizMgGEPJvGTYL+kZhKqeBKeZiZIS7xjjlrfXNqleYGnCyomQ1pDQ==}
miniflare@4.20250408.0:
resolution: {integrity: sha512-h1FAK1l/RzZyhGAeLKD+XawWBWowY8tjOcj0Yz8RmCpZ5xBfl255O5eGw4Xk1rcpgxyEB0qiaL2CmV9HAyMfhw==}
engines: {node: '>=18.0.0'}
hasBin: true
@@ -1544,8 +1544,8 @@ packages:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
engines: {node: '>= 0.8.0'}
typescript-eslint@8.29.0:
resolution: {integrity: sha512-ep9rVd9B4kQsZ7ZnWCVxUE/xDLUUUsRzE0poAeNu+4CkFErLfuvPt/qtm2EpnSyfvsR0S6QzDFSrPCFBwf64fg==}
typescript-eslint@8.29.1:
resolution: {integrity: sha512-f8cDkvndhbQMPcysk6CUSGBWV+g1utqdn71P5YKwMumVMOG/5k7cHq0KyG4O52nB0oKS4aN2Tp5+wB4APJGC+w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
@@ -1556,8 +1556,8 @@ packages:
engines: {node: '>=14.17'}
hasBin: true
ufo@1.5.4:
resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==}
ufo@1.6.1:
resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==}
undici@5.29.0:
resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==}
@@ -1591,17 +1591,17 @@ packages:
worker-mailer@1.1.1:
resolution: {integrity: sha512-UPPd48aBMVuAE2j9ha7wDEhBakM23zKBk8wd9lLUhChExPeq8B8cO6C1ur4hMOypmJO7mZ+xTZff1KoCKprvGA==}
workerd@1.20250404.0:
resolution: {integrity: sha512-dvXsRdy49/vd4nPENpTDFjbPvR3XdPa8lJrxcnDKL1XtoioYXflq3ys8ljuu+X71ojqAAjnQj62AzrmmKM095g==}
workerd@1.20250408.0:
resolution: {integrity: sha512-bBUX+UsvpzAqiWFNeZrlZmDGddiGZdBBbftZJz2wE6iUg/cIAJeVQYTtS/3ahaicguoLBz4nJiDo8luqM9fx1A==}
engines: {node: '>=16'}
hasBin: true
wrangler@4.7.2:
resolution: {integrity: sha512-fK9h7PL8wrrdSLCFXVDotoSHOebRmdNdB4VRkUDWOIyiP0Dx54TBfXTt3bXB98EYx7VT+vj6CNVnEC8gSCxt0w==}
wrangler@4.9.1:
resolution: {integrity: sha512-wBV0OKFp+4Ii4bFIIBRm1JJi1od5KGhzsUjWw+2jtlX/H0n2TkdskMDQtrOdV9ybFKj2h+v93VxhAEBePghAkQ==}
engines: {node: '>=18.0.0'}
hasBin: true
peerDependencies:
'@cloudflare/workers-types': ^4.20250404.0
'@cloudflare/workers-types': ^4.20250408.0
peerDependenciesMeta:
'@cloudflare/workers-types':
optional: true
@@ -2119,28 +2119,28 @@ snapshots:
dependencies:
mime: 3.0.0
'@cloudflare/unenv-preset@2.3.1(unenv@2.0.0-rc.15)(workerd@1.20250404.0)':
'@cloudflare/unenv-preset@2.3.1(unenv@2.0.0-rc.15)(workerd@1.20250408.0)':
dependencies:
unenv: 2.0.0-rc.15
optionalDependencies:
workerd: 1.20250404.0
workerd: 1.20250408.0
'@cloudflare/workerd-darwin-64@1.20250404.0':
'@cloudflare/workerd-darwin-64@1.20250408.0':
optional: true
'@cloudflare/workerd-darwin-arm64@1.20250404.0':
'@cloudflare/workerd-darwin-arm64@1.20250408.0':
optional: true
'@cloudflare/workerd-linux-64@1.20250404.0':
'@cloudflare/workerd-linux-64@1.20250408.0':
optional: true
'@cloudflare/workerd-linux-arm64@1.20250404.0':
'@cloudflare/workerd-linux-arm64@1.20250408.0':
optional: true
'@cloudflare/workerd-windows-64@1.20250404.0':
'@cloudflare/workerd-windows-64@1.20250408.0':
optional: true
'@cloudflare/workers-types@4.20250407.0': {}
'@cloudflare/workers-types@4.20250409.0': {}
'@cspotcode/source-map-support@0.8.1':
dependencies:
@@ -2786,14 +2786,14 @@ snapshots:
'@types/json-schema@7.0.15': {}
'@typescript-eslint/eslint-plugin@8.29.0(@typescript-eslint/parser@8.29.0(eslint@9.18.0)(typescript@5.4.5))(eslint@9.18.0)(typescript@5.4.5)':
'@typescript-eslint/eslint-plugin@8.29.1(@typescript-eslint/parser@8.29.1(eslint@9.18.0)(typescript@5.4.5))(eslint@9.18.0)(typescript@5.4.5)':
dependencies:
'@eslint-community/regexpp': 4.12.1
'@typescript-eslint/parser': 8.29.0(eslint@9.18.0)(typescript@5.4.5)
'@typescript-eslint/scope-manager': 8.29.0
'@typescript-eslint/type-utils': 8.29.0(eslint@9.18.0)(typescript@5.4.5)
'@typescript-eslint/utils': 8.29.0(eslint@9.18.0)(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 8.29.0
'@typescript-eslint/parser': 8.29.1(eslint@9.18.0)(typescript@5.4.5)
'@typescript-eslint/scope-manager': 8.29.1
'@typescript-eslint/type-utils': 8.29.1(eslint@9.18.0)(typescript@5.4.5)
'@typescript-eslint/utils': 8.29.1(eslint@9.18.0)(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 8.29.1
eslint: 9.18.0
graphemer: 1.4.0
ignore: 5.3.2
@@ -2803,27 +2803,27 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/parser@8.29.0(eslint@9.18.0)(typescript@5.4.5)':
'@typescript-eslint/parser@8.29.1(eslint@9.18.0)(typescript@5.4.5)':
dependencies:
'@typescript-eslint/scope-manager': 8.29.0
'@typescript-eslint/types': 8.29.0
'@typescript-eslint/typescript-estree': 8.29.0(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 8.29.0
'@typescript-eslint/scope-manager': 8.29.1
'@typescript-eslint/types': 8.29.1
'@typescript-eslint/typescript-estree': 8.29.1(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 8.29.1
debug: 4.4.0
eslint: 9.18.0
typescript: 5.4.5
transitivePeerDependencies:
- supports-color
'@typescript-eslint/scope-manager@8.29.0':
'@typescript-eslint/scope-manager@8.29.1':
dependencies:
'@typescript-eslint/types': 8.29.0
'@typescript-eslint/visitor-keys': 8.29.0
'@typescript-eslint/types': 8.29.1
'@typescript-eslint/visitor-keys': 8.29.1
'@typescript-eslint/type-utils@8.29.0(eslint@9.18.0)(typescript@5.4.5)':
'@typescript-eslint/type-utils@8.29.1(eslint@9.18.0)(typescript@5.4.5)':
dependencies:
'@typescript-eslint/typescript-estree': 8.29.0(typescript@5.4.5)
'@typescript-eslint/utils': 8.29.0(eslint@9.18.0)(typescript@5.4.5)
'@typescript-eslint/typescript-estree': 8.29.1(typescript@5.4.5)
'@typescript-eslint/utils': 8.29.1(eslint@9.18.0)(typescript@5.4.5)
debug: 4.4.0
eslint: 9.18.0
ts-api-utils: 2.1.0(typescript@5.4.5)
@@ -2831,12 +2831,12 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/types@8.29.0': {}
'@typescript-eslint/types@8.29.1': {}
'@typescript-eslint/typescript-estree@8.29.0(typescript@5.4.5)':
'@typescript-eslint/typescript-estree@8.29.1(typescript@5.4.5)':
dependencies:
'@typescript-eslint/types': 8.29.0
'@typescript-eslint/visitor-keys': 8.29.0
'@typescript-eslint/types': 8.29.1
'@typescript-eslint/visitor-keys': 8.29.1
debug: 4.4.0
fast-glob: 3.3.3
is-glob: 4.0.3
@@ -2847,20 +2847,20 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/utils@8.29.0(eslint@9.18.0)(typescript@5.4.5)':
'@typescript-eslint/utils@8.29.1(eslint@9.18.0)(typescript@5.4.5)':
dependencies:
'@eslint-community/eslint-utils': 4.5.1(eslint@9.18.0)
'@typescript-eslint/scope-manager': 8.29.0
'@typescript-eslint/types': 8.29.0
'@typescript-eslint/typescript-estree': 8.29.0(typescript@5.4.5)
'@typescript-eslint/scope-manager': 8.29.1
'@typescript-eslint/types': 8.29.1
'@typescript-eslint/typescript-estree': 8.29.1(typescript@5.4.5)
eslint: 9.18.0
typescript: 5.4.5
transitivePeerDependencies:
- supports-color
'@typescript-eslint/visitor-keys@8.29.0':
'@typescript-eslint/visitor-keys@8.29.1':
dependencies:
'@typescript-eslint/types': 8.29.0
'@typescript-eslint/types': 8.29.1
eslint-visitor-keys: 4.2.0
abort-controller@3.0.0:
@@ -3178,7 +3178,7 @@ snapshots:
has-flag@4.0.0: {}
hono@4.7.5: {}
hono@4.7.6: {}
html-to-text@9.0.5:
dependencies:
@@ -3274,7 +3274,7 @@ snapshots:
js-base64: 3.7.7
mime-types: 2.1.35
miniflare@4.20250404.0:
miniflare@4.20250408.0:
dependencies:
'@cspotcode/source-map-support': 0.8.1
acorn: 8.14.0
@@ -3283,7 +3283,7 @@ snapshots:
glob-to-regexp: 0.4.1
stoppable: 1.1.0
undici: 5.29.0
workerd: 1.20250404.0
workerd: 1.20250408.0
ws: 8.18.0
youch: 3.3.4
zod: 3.22.3
@@ -3503,11 +3503,11 @@ snapshots:
dependencies:
prelude-ls: 1.2.1
typescript-eslint@8.29.0(eslint@9.18.0)(typescript@5.4.5):
typescript-eslint@8.29.1(eslint@9.18.0)(typescript@5.4.5):
dependencies:
'@typescript-eslint/eslint-plugin': 8.29.0(@typescript-eslint/parser@8.29.0(eslint@9.18.0)(typescript@5.4.5))(eslint@9.18.0)(typescript@5.4.5)
'@typescript-eslint/parser': 8.29.0(eslint@9.18.0)(typescript@5.4.5)
'@typescript-eslint/utils': 8.29.0(eslint@9.18.0)(typescript@5.4.5)
'@typescript-eslint/eslint-plugin': 8.29.1(@typescript-eslint/parser@8.29.1(eslint@9.18.0)(typescript@5.4.5))(eslint@9.18.0)(typescript@5.4.5)
'@typescript-eslint/parser': 8.29.1(eslint@9.18.0)(typescript@5.4.5)
'@typescript-eslint/utils': 8.29.1(eslint@9.18.0)(typescript@5.4.5)
eslint: 9.18.0
typescript: 5.4.5
transitivePeerDependencies:
@@ -3515,7 +3515,7 @@ snapshots:
typescript@5.4.5: {}
ufo@1.5.4: {}
ufo@1.6.1: {}
undici@5.29.0:
dependencies:
@@ -3527,7 +3527,7 @@ snapshots:
exsolve: 1.0.4
ohash: 2.0.11
pathe: 2.0.3
ufo: 1.5.4
ufo: 1.6.1
uri-js@4.4.1:
dependencies:
@@ -3550,26 +3550,26 @@ snapshots:
worker-mailer@1.1.1: {}
workerd@1.20250404.0:
workerd@1.20250408.0:
optionalDependencies:
'@cloudflare/workerd-darwin-64': 1.20250404.0
'@cloudflare/workerd-darwin-arm64': 1.20250404.0
'@cloudflare/workerd-linux-64': 1.20250404.0
'@cloudflare/workerd-linux-arm64': 1.20250404.0
'@cloudflare/workerd-windows-64': 1.20250404.0
'@cloudflare/workerd-darwin-64': 1.20250408.0
'@cloudflare/workerd-darwin-arm64': 1.20250408.0
'@cloudflare/workerd-linux-64': 1.20250408.0
'@cloudflare/workerd-linux-arm64': 1.20250408.0
'@cloudflare/workerd-windows-64': 1.20250408.0
wrangler@4.7.2(@cloudflare/workers-types@4.20250407.0):
wrangler@4.9.1(@cloudflare/workers-types@4.20250409.0):
dependencies:
'@cloudflare/kv-asset-handler': 0.4.0
'@cloudflare/unenv-preset': 2.3.1(unenv@2.0.0-rc.15)(workerd@1.20250404.0)
'@cloudflare/unenv-preset': 2.3.1(unenv@2.0.0-rc.15)(workerd@1.20250408.0)
blake3-wasm: 2.1.5
esbuild: 0.24.2
miniflare: 4.20250404.0
miniflare: 4.20250408.0
path-to-regexp: 6.3.0
unenv: 2.0.0-rc.15
workerd: 1.20250404.0
workerd: 1.20250408.0
optionalDependencies:
'@cloudflare/workers-types': 4.20250407.0
'@cloudflare/workers-types': 4.20250409.0
fsevents: 2.3.3
sharp: 0.33.5
transitivePeerDependencies:

View File

@@ -10,6 +10,7 @@ export type Bindings = {
KV: KVNamespace
RATE_LIMITER: any
SEND_MAIL: any
ASSETS: Fetcher
// config
DEFAULT_LANG: string | undefined

View File

@@ -16,6 +16,15 @@ import { scheduled } from './scheduled';
import { getAdminPasswords, getPasswords, getBooleanValue, getStringArray } from './utils';
import { HonoCustomType, UserPayload } from './types';
const API_PATHS = [
"/api/",
"/open_api/",
"/user_api/",
"/admin/",
"/telegram/",
"/external/",
];
const app = new Hono<HonoCustomType>()
//cors
app.use('/*', cors());
@@ -24,8 +33,18 @@ app.onError((err, c) => {
console.error(err)
return c.text(`${err.name} ${err.message}`, 500)
})
// rate limit
// global middlewares
app.use('/*', async (c, next) => {
// check if the request is for static files
if (c.env.ASSETS && !API_PATHS.some(path => c.req.path.startsWith(path))) {
const url = new URL(c.req.raw.url);
if (!url.pathname.includes('.')) {
url.pathname = ""
}
return c.env.ASSETS.fetch(url);
}
// save language in context
const lang = c.req.raw.headers.get("x-lang");
if (lang) { c.set("lang", lang); }

View File

@@ -1,12 +1,18 @@
name = "cloudflare_temp_email"
main = "src/worker.ts"
compatibility_date = "2024-09-23"
compatibility_date = "2025-04-01"
compatibility_flags = [ "nodejs_compat" ]
# if you want use custom_domain, you need to add routes
# routes = [
# { pattern = "temp-email-api.xxxxx.xyz", custom_domain = true },
# ]
# if you want deploy worker with frontend assets, you need to add assets
# [assets]
# directory = "../frontend/dist/"
# binding = "ASSETS"
# run_worker_first = true
# enable cron if you want set auto clean up
# [triggers]
# crons = [ "0 0 * * *" ]