├── .editorconfig ├── .github ├── release.yml └── workflows │ └── deploy.yml ├── .gitignore ├── .prettierrc ├── README.md ├── package-lock.json ├── package.json ├── src ├── bindings.d.ts ├── email.ts ├── index.ts └── template.ts ├── tsconfig.json └── wrangler.toml /.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = tab 6 | end_of_line = lf 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | 11 | [*.yml] 12 | indent_style = space 13 | -------------------------------------------------------------------------------- /.github/release.yml: -------------------------------------------------------------------------------- 1 | # .github/release.yml 2 | 3 | changelog: 4 | 5 | categories: 6 | 7 | - title: New Features 8 | labels: 9 | - enhancement 10 | 11 | - title: Bugs Fixed 12 | labels: 13 | - bug 14 | 15 | - title: Other Changes 16 | labels: 17 | - "*" 18 | -------------------------------------------------------------------------------- /.github/workflows/deploy.yml: -------------------------------------------------------------------------------- 1 | name: Deploy Worker 2 | on: 3 | push: 4 | tags: 5 | - "v*" 6 | jobs: 7 | deploy: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - uses: actions/checkout@v4 11 | - name: Build & Deploy Worker 12 | uses: cloudflare/wrangler-action@v3 13 | with: 14 | apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} 15 | accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} 16 | secrets: | 17 | ACCESS_TOKEN 18 | RESEND_APIKEY 19 | SENDER_NAME 20 | SENDER_EMAIL 21 | env: 22 | ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }} 23 | RESEND_APIKEY: ${{ secrets.RESEND_APIKEY }} 24 | SENDER_NAME: ${{ secrets.SENDER_NAME }} 25 | SENDER_EMAIL: ${{ secrets.SENDER_EMAIL }} 26 | 27 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | 3 | logs 4 | _.log 5 | npm-debug.log_ 6 | yarn-debug.log* 7 | yarn-error.log* 8 | lerna-debug.log* 9 | .pnpm-debug.log* 10 | 11 | # Diagnostic reports (https://nodejs.org/api/report.html) 12 | 13 | report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json 14 | 15 | # Runtime data 16 | 17 | pids 18 | _.pid 19 | _.seed 20 | \*.pid.lock 21 | 22 | # Directory for instrumented libs generated by jscoverage/JSCover 23 | 24 | lib-cov 25 | 26 | # Coverage directory used by tools like istanbul 27 | 28 | coverage 29 | \*.lcov 30 | 31 | # nyc test coverage 32 | 33 | .nyc_output 34 | 35 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 36 | 37 | .grunt 38 | 39 | # Bower dependency directory (https://bower.io/) 40 | 41 | bower_components 42 | 43 | # node-waf configuration 44 | 45 | .lock-wscript 46 | 47 | # Compiled binary addons (https://nodejs.org/api/addons.html) 48 | 49 | build/Release 50 | 51 | # Dependency directories 52 | 53 | node_modules/ 54 | jspm_packages/ 55 | 56 | # Snowpack dependency directory (https://snowpack.dev/) 57 | 58 | web_modules/ 59 | 60 | # TypeScript cache 61 | 62 | \*.tsbuildinfo 63 | 64 | # Optional npm cache directory 65 | 66 | .npm 67 | 68 | # Optional eslint cache 69 | 70 | .eslintcache 71 | 72 | # Optional stylelint cache 73 | 74 | .stylelintcache 75 | 76 | # Microbundle cache 77 | 78 | .rpt2_cache/ 79 | .rts2_cache_cjs/ 80 | .rts2_cache_es/ 81 | .rts2_cache_umd/ 82 | 83 | # Optional REPL history 84 | 85 | .node_repl_history 86 | 87 | # Output of 'npm pack' 88 | 89 | \*.tgz 90 | 91 | # Yarn Integrity file 92 | 93 | .yarn-integrity 94 | 95 | # dotenv environment variable files 96 | 97 | .env 98 | .env.development.local 99 | .env.test.local 100 | .env.production.local 101 | .env.local 102 | 103 | # parcel-bundler cache (https://parceljs.org/) 104 | 105 | .cache 106 | .parcel-cache 107 | 108 | # Next.js build output 109 | 110 | .next 111 | out 112 | 113 | # Nuxt.js build / generate output 114 | 115 | .nuxt 116 | dist 117 | 118 | # Gatsby files 119 | 120 | .cache/ 121 | 122 | # Comment in the public line in if your project uses Gatsby and not Next.js 123 | 124 | # https://nextjs.org/blog/next-9-1#public-directory-support 125 | 126 | # public 127 | 128 | # vuepress build output 129 | 130 | .vuepress/dist 131 | 132 | # vuepress v2.x temp and cache directory 133 | 134 | .temp 135 | .cache 136 | 137 | # Docusaurus cache and generated files 138 | 139 | .docusaurus 140 | 141 | # Serverless directories 142 | 143 | .serverless/ 144 | 145 | # FuseBox cache 146 | 147 | .fusebox/ 148 | 149 | # DynamoDB Local files 150 | 151 | .dynamodb/ 152 | 153 | # TernJS port file 154 | 155 | .tern-port 156 | 157 | # Stores VSCode versions used for testing VSCode extensions 158 | 159 | .vscode-test 160 | 161 | # yarn v2 162 | 163 | .yarn/cache 164 | .yarn/unplugged 165 | .yarn/build-state.yml 166 | .yarn/install-state.gz 167 | .pnp.\* 168 | 169 | # wrangler project 170 | 171 | .dev.vars 172 | .wrangler/ 173 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 140, 3 | "singleQuote": true, 4 | "semi": true, 5 | "useTabs": true 6 | } 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # cloudflare-email-sender 2 | 3 | 4 | > 自 2024 年 8 月 31 日起,MailChannels 不再为 Cloudflare Workers 用户提供免费电子邮件发送服务 [MailChannels原文](https://support.mailchannels.com/hc/en-us/articles/26814255454093-End-of-Life-Notice-Cloudflare-Workers) 5 | > 由于mailchannels不再免费 且申请免费账户需信用卡成本较高,因此放弃继续使用,转为Resend发信服务 6 | > 如仍需要mailchannels发信, 请查看 `old/mailchannels` 分支 7 | 8 | 使用 cloudflare 免费发送邮件 9 | 10 | ## 前置条件 11 | 12 | - 一个 Cloudflare 帐户 13 | - 一个 Resend 账户 14 | - 一个可以被 Cloudflare 管理的域名 15 | - npm 软件包 create-cloudflare、resend 16 | - git 17 | - openssl(可选) 18 | 19 | ## Resend 相关 20 | 21 | 如果您还没有 Resend 帐户,可以注册一个 [Resend 免费帐户](https://resend.com/signup) 。注册后,前往 Domains 菜单项,然后点击`Add Domain`,输入要添加的域,然后选择一个区域。 22 | 23 | 随后在 Cloudflare 中的 DNS 中配置 Resend 中需要的 DNS 记录 24 | 25 | ![](https://developers.cloudflare.com/_astro/verified_domain.ouYLJaQl_Z2eLlGH.webp) 26 | 27 | 配置并校验完成后,在 Resend 菜单中找到 `API Keys` 创建一个 key 记下这个 key 随后项目中会用到。 28 | 29 | > 注意 Resend免费计划用户 每天有100封的发信限制 每月有3000封的发信限制。 30 | > 如果需要发送更多邮件请升级 Resend 的计划 31 | 32 | ## 创建邮件发送服务 33 | 34 | 1. 克隆项目到本地 35 | 36 | ``` 37 | git clone https://github.com/devcxl/cloudflare-email-sender 38 | ``` 39 | 40 | 2. 编辑 `wrangler.toml` 中的变量 41 | ``` 42 | # 自定义域名的发信邮件地址 43 | SENDER_EMAIL = "do-not-replay@example.com" 44 | # 发信人简称/名字 45 | SENDER_NAME = "Example" 46 | ``` 47 | 3. 运行 `openssl rand -base64 32` 生成一个随机密钥(可选,可以自己设置密钥) 48 | 49 | ![image](https://file.devcxl.cn/blog/images/2024111600182427-20241116001824.png) 50 | 51 | 4. 运行 `npx wrangler secret put ACCESS_TOKEN` 设置上一步生成的随机密钥 52 | 53 | ![image](https://file.devcxl.cn/blog/images/2024111600201505-20241116002014.png) 54 | 55 | 5. 运行 `npx wrangler secret put RESEND_APIKEY` 设置 Resend 中得到的 key 56 | ![image](https://file.devcxl.cn/blog/images/2024111600143187-20241116001431.png) 57 | 58 | 6. 部署项目 59 | ``` 60 | npm run deploy 61 | ``` 62 | 63 | ## 使用示例 64 | 65 | ### 发送HTML邮件 66 | 67 | ```shell 68 | curl -X POST -L https://custom.yourdomain.com/v1/send \ 69 | -H 'Content-Type: application/json' \ 70 | -H 'Authorization: Bearer {ACCESS_TOKEN}' \ 71 | -d '{ 72 | "to": "you@example.com", 73 | "title": "Just Test Message", 74 | "content": "

Hello This is test message

", 75 | "type": "text/html" 76 | }' 77 | ``` 78 | 79 | ### 发送纯文本邮件 80 | 81 | ```shell 82 | curl -X POST -L https://custom.yourdomain.com/v1/send \ 83 | -H 'Content-Type: application/json' \ 84 | -H 'Authorization: Bearer {ACCESS_TOKEN}' \ 85 | -d '{ 86 | "to": "you@example.com", 87 | "title": "Just Test Message", 88 | "content": "Hello This is test message. ", 89 | "type": "text/plain" 90 | }' 91 | ``` 92 | 93 | ### 发送模板邮件 94 | 95 | ```shell 96 | 97 | curl -X POST -L https://custom.yourdomain.com/v1/send/activation \ 98 | -H 'Content-Type: application/json' \ 99 | -H 'Authorization: Bearer {ACCESS_TOKEN}' \ 100 | -d '{ 101 | "to": "you@example.com", 102 | "title": "Just Test Message", 103 | "site_name": "Test Title", 104 | "url": "https://www.google.com/search?q=devcxl" 105 | }' 106 | ``` 107 | 108 | ## 参考 109 | 110 | - https://community.cloudflare.com/t/send-email-from-workers-using-mailchannels-for-free/361973/63 111 | - https://www.fadhil-blog.dev/blog/cloudflare-worker-send-email/ 112 | - https://medium.com/@tristantrommer/how-to-send-free-transactional-emails-with-worker-mailchannels-via-cloudflare-workers-818b787b33f9 113 | - https://developers.cloudflare.com/pages/functions/plugins/mailchannels/ 114 | - https://www.breakp.dev/blog/email-flare-send-from-worker-for-free/ 115 | - https://blog.mailchannels.com/what-is-dmarc/ 116 | - https://developers.cloudflare.com/workers/tutorials/send-emails-with-resend/ 117 | - https://www.cloudflare.com/en-ca/learning/dns/dns-records/dns-dkim-record/ 118 | - https://github.com/cloudsecurityalliance/webfinger.io/blob/main/docs.webfinger.io/DKIM-setup.md -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "email-sender", 3 | "version": "0.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "email-sender", 9 | "version": "0.0.0", 10 | "dependencies": { 11 | "hono": "^4.6.10", 12 | "resend": "4.0.1-alpha.0" 13 | }, 14 | "devDependencies": { 15 | "@cloudflare/workers-types": "^4.20241112.0", 16 | "typescript": "^5.6.3", 17 | "wrangler": "^3.87.0" 18 | } 19 | }, 20 | "node_modules/@cloudflare/kv-asset-handler": { 21 | "version": "0.3.4", 22 | "resolved": "https://registry.npmmirror.com/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.3.4.tgz", 23 | "integrity": "sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q==", 24 | "dev": true, 25 | "license": "MIT OR Apache-2.0", 26 | "dependencies": { 27 | "mime": "^3.0.0" 28 | }, 29 | "engines": { 30 | "node": ">=16.13" 31 | } 32 | }, 33 | "node_modules/@cloudflare/workerd-darwin-64": { 34 | "version": "1.20241106.1", 35 | "resolved": "https://registry.npmmirror.com/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20241106.1.tgz", 36 | "integrity": "sha512-zxvaToi1m0qzAScrxFt7UvFVqU8DxrCO2CinM1yQkv5no7pA1HolpIrwZ0xOhR3ny64Is2s/J6BrRjpO5dM9Zw==", 37 | "cpu": [ 38 | "x64" 39 | ], 40 | "dev": true, 41 | "license": "Apache-2.0", 42 | "optional": true, 43 | "os": [ 44 | "darwin" 45 | ], 46 | "engines": { 47 | "node": ">=16" 48 | } 49 | }, 50 | "node_modules/@cloudflare/workerd-darwin-arm64": { 51 | "version": "1.20241106.1", 52 | "resolved": "https://registry.npmmirror.com/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20241106.1.tgz", 53 | "integrity": "sha512-j3dg/42D/bPgfNP3cRUBxF+4waCKO/5YKwXNj+lnVOwHxDu+ne5pFw9TIkKYcWTcwn0ZUkbNZNM5rhJqRn4xbg==", 54 | "cpu": [ 55 | "arm64" 56 | ], 57 | "dev": true, 58 | "license": "Apache-2.0", 59 | "optional": true, 60 | "os": [ 61 | "darwin" 62 | ], 63 | "engines": { 64 | "node": ">=16" 65 | } 66 | }, 67 | "node_modules/@cloudflare/workerd-linux-64": { 68 | "version": "1.20241106.1", 69 | "resolved": "https://registry.npmmirror.com/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20241106.1.tgz", 70 | "integrity": "sha512-Ih+Ye8E1DMBXcKrJktGfGztFqHKaX1CeByqshmTbODnWKHt6O65ax3oTecUwyC0+abuyraOpAtdhHNpFMhUkmw==", 71 | "cpu": [ 72 | "x64" 73 | ], 74 | "dev": true, 75 | "license": "Apache-2.0", 76 | "optional": true, 77 | "os": [ 78 | "linux" 79 | ], 80 | "engines": { 81 | "node": ">=16" 82 | } 83 | }, 84 | "node_modules/@cloudflare/workerd-linux-arm64": { 85 | "version": "1.20241106.1", 86 | "resolved": "https://registry.npmmirror.com/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20241106.1.tgz", 87 | "integrity": "sha512-mdQFPk4+14Yywn7n1xIzI+6olWM8Ybz10R7H3h+rk0XulMumCWUCy1CzIDauOx6GyIcSgKIibYMssVHZR30ObA==", 88 | "cpu": [ 89 | "arm64" 90 | ], 91 | "dev": true, 92 | "license": "Apache-2.0", 93 | "optional": true, 94 | "os": [ 95 | "linux" 96 | ], 97 | "engines": { 98 | "node": ">=16" 99 | } 100 | }, 101 | "node_modules/@cloudflare/workerd-windows-64": { 102 | "version": "1.20241106.1", 103 | "resolved": "https://registry.npmmirror.com/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20241106.1.tgz", 104 | "integrity": "sha512-4rtcss31E/Rb/PeFocZfr+B9i1MdrkhsTBWizh8siNR4KMmkslU2xs2wPaH1z8+ErxkOsHrKRa5EPLh5rIiFeg==", 105 | "cpu": [ 106 | "x64" 107 | ], 108 | "dev": true, 109 | "license": "Apache-2.0", 110 | "optional": true, 111 | "os": [ 112 | "win32" 113 | ], 114 | "engines": { 115 | "node": ">=16" 116 | } 117 | }, 118 | "node_modules/@cloudflare/workers-shared": { 119 | "version": "0.7.1", 120 | "resolved": "https://registry.npmmirror.com/@cloudflare/workers-shared/-/workers-shared-0.7.1.tgz", 121 | "integrity": "sha512-46cP5FCrl3TrvHeoHLb5SRuiDMKH5kc9Yvo36SAfzt8dqJI/qJRoY1GP3ioHn/gP7v2QIoUOTAzIl7Ml7MnfrA==", 122 | "dev": true, 123 | "license": "MIT OR Apache-2.0", 124 | "dependencies": { 125 | "mime": "^3.0.0", 126 | "zod": "^3.22.3" 127 | }, 128 | "engines": { 129 | "node": ">=16.7.0" 130 | } 131 | }, 132 | "node_modules/@cloudflare/workers-types": { 133 | "version": "4.20241112.0", 134 | "resolved": "https://registry.npmmirror.com/@cloudflare/workers-types/-/workers-types-4.20241112.0.tgz", 135 | "integrity": "sha512-Q4p9bAWZrX14bSCKY9to19xl0KMU7nsO5sJ2cTVspHoypsjPUMeQCsjHjmsO2C4Myo8/LPeDvmqFmkyNAPPYZw==", 136 | "dev": true, 137 | "license": "MIT OR Apache-2.0" 138 | }, 139 | "node_modules/@cspotcode/source-map-support": { 140 | "version": "0.8.1", 141 | "resolved": "https://registry.npmmirror.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", 142 | "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", 143 | "dev": true, 144 | "license": "MIT", 145 | "dependencies": { 146 | "@jridgewell/trace-mapping": "0.3.9" 147 | }, 148 | "engines": { 149 | "node": ">=12" 150 | } 151 | }, 152 | "node_modules/@esbuild-plugins/node-globals-polyfill": { 153 | "version": "0.2.3", 154 | "resolved": "https://registry.npmmirror.com/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.2.3.tgz", 155 | "integrity": "sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==", 156 | "dev": true, 157 | "peerDependencies": { 158 | "esbuild": "*" 159 | } 160 | }, 161 | "node_modules/@esbuild-plugins/node-modules-polyfill": { 162 | "version": "0.2.2", 163 | "resolved": "https://registry.npmmirror.com/@esbuild-plugins/node-modules-polyfill/-/node-modules-polyfill-0.2.2.tgz", 164 | "integrity": "sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==", 165 | "dev": true, 166 | "dependencies": { 167 | "escape-string-regexp": "^4.0.0", 168 | "rollup-plugin-node-polyfills": "^0.2.1" 169 | }, 170 | "peerDependencies": { 171 | "esbuild": "*" 172 | } 173 | }, 174 | "node_modules/@esbuild-plugins/node-modules-polyfill/node_modules/escape-string-regexp": { 175 | "version": "4.0.0", 176 | "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 177 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 178 | "dev": true, 179 | "engines": { 180 | "node": ">=10" 181 | }, 182 | "funding": { 183 | "url": "https://github.com/sponsors/sindresorhus" 184 | } 185 | }, 186 | "node_modules/@esbuild-plugins/node-modules-polyfill/node_modules/estree-walker": { 187 | "version": "0.6.1", 188 | "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-0.6.1.tgz", 189 | "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", 190 | "dev": true 191 | }, 192 | "node_modules/@esbuild-plugins/node-modules-polyfill/node_modules/magic-string": { 193 | "version": "0.25.9", 194 | "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz", 195 | "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", 196 | "dev": true, 197 | "dependencies": { 198 | "sourcemap-codec": "^1.4.8" 199 | } 200 | }, 201 | "node_modules/@esbuild-plugins/node-modules-polyfill/node_modules/rollup-plugin-inject": { 202 | "version": "3.0.2", 203 | "resolved": "https://registry.npmmirror.com/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz", 204 | "integrity": "sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==", 205 | "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject.", 206 | "dev": true, 207 | "dependencies": { 208 | "estree-walker": "^0.6.1", 209 | "magic-string": "^0.25.3", 210 | "rollup-pluginutils": "^2.8.1" 211 | } 212 | }, 213 | "node_modules/@esbuild-plugins/node-modules-polyfill/node_modules/rollup-plugin-node-polyfills": { 214 | "version": "0.2.1", 215 | "resolved": "https://registry.npmmirror.com/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz", 216 | "integrity": "sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==", 217 | "dev": true, 218 | "dependencies": { 219 | "rollup-plugin-inject": "^3.0.0" 220 | } 221 | }, 222 | "node_modules/@esbuild-plugins/node-modules-polyfill/node_modules/rollup-pluginutils": { 223 | "version": "2.8.2", 224 | "resolved": "https://registry.npmmirror.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", 225 | "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", 226 | "dev": true, 227 | "dependencies": { 228 | "estree-walker": "^0.6.1" 229 | } 230 | }, 231 | "node_modules/@esbuild-plugins/node-modules-polyfill/node_modules/sourcemap-codec": { 232 | "version": "1.4.8", 233 | "resolved": "https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", 234 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", 235 | "deprecated": "Please use @jridgewell/sourcemap-codec instead", 236 | "dev": true 237 | }, 238 | "node_modules/@fastify/busboy": { 239 | "version": "2.1.1", 240 | "resolved": "https://registry.npmmirror.com/@fastify/busboy/-/busboy-2.1.1.tgz", 241 | "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", 242 | "dev": true, 243 | "license": "MIT", 244 | "engines": { 245 | "node": ">=14" 246 | } 247 | }, 248 | "node_modules/@isaacs/cliui": { 249 | "version": "8.0.2", 250 | "resolved": "https://registry.npmmirror.com/@isaacs/cliui/-/cliui-8.0.2.tgz", 251 | "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", 252 | "license": "ISC", 253 | "dependencies": { 254 | "string-width": "^5.1.2", 255 | "string-width-cjs": "npm:string-width@^4.2.0", 256 | "strip-ansi": "^7.0.1", 257 | "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", 258 | "wrap-ansi": "^8.1.0", 259 | "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" 260 | }, 261 | "engines": { 262 | "node": ">=12" 263 | } 264 | }, 265 | "node_modules/@jridgewell/resolve-uri": { 266 | "version": "3.1.2", 267 | "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 268 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 269 | "dev": true, 270 | "license": "MIT", 271 | "engines": { 272 | "node": ">=6.0.0" 273 | } 274 | }, 275 | "node_modules/@jridgewell/sourcemap-codec": { 276 | "version": "1.5.0", 277 | "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", 278 | "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", 279 | "dev": true, 280 | "license": "MIT" 281 | }, 282 | "node_modules/@jridgewell/trace-mapping": { 283 | "version": "0.3.9", 284 | "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", 285 | "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", 286 | "dev": true, 287 | "license": "MIT", 288 | "dependencies": { 289 | "@jridgewell/resolve-uri": "^3.0.3", 290 | "@jridgewell/sourcemap-codec": "^1.4.10" 291 | } 292 | }, 293 | "node_modules/@one-ini/wasm": { 294 | "version": "0.1.1", 295 | "resolved": "https://registry.npmmirror.com/@one-ini/wasm/-/wasm-0.1.1.tgz", 296 | "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==", 297 | "license": "MIT" 298 | }, 299 | "node_modules/@pkgjs/parseargs": { 300 | "version": "0.11.0", 301 | "resolved": "https://registry.npmmirror.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", 302 | "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", 303 | "license": "MIT", 304 | "optional": true, 305 | "engines": { 306 | "node": ">=14" 307 | } 308 | }, 309 | "node_modules/@react-email/render": { 310 | "version": "1.0.1", 311 | "resolved": "https://registry.npmmirror.com/@react-email/render/-/render-1.0.1.tgz", 312 | "integrity": "sha512-W3gTrcmLOVYnG80QuUp22ReIT/xfLsVJ+n7ghSlG2BITB8evNABn1AO2rGQoXuK84zKtDAlxCdm3hRyIpZdGSA==", 313 | "license": "MIT", 314 | "dependencies": { 315 | "html-to-text": "9.0.5", 316 | "js-beautify": "^1.14.11", 317 | "react-promise-suspense": "0.3.4" 318 | }, 319 | "engines": { 320 | "node": ">=18.0.0" 321 | }, 322 | "peerDependencies": { 323 | "react": "^18.0 || ^19.0 || ^19.0.0-rc", 324 | "react-dom": "^18.0 || ^19.0 || ^19.0.0-rc" 325 | } 326 | }, 327 | "node_modules/@selderee/plugin-htmlparser2": { 328 | "version": "0.11.0", 329 | "resolved": "https://registry.npmmirror.com/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.11.0.tgz", 330 | "integrity": "sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==", 331 | "license": "MIT", 332 | "dependencies": { 333 | "domhandler": "^5.0.3", 334 | "selderee": "^0.11.0" 335 | }, 336 | "funding": { 337 | "url": "https://ko-fi.com/killymxi" 338 | } 339 | }, 340 | "node_modules/abbrev": { 341 | "version": "2.0.0", 342 | "resolved": "https://registry.npmmirror.com/abbrev/-/abbrev-2.0.0.tgz", 343 | "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", 344 | "license": "ISC", 345 | "engines": { 346 | "node": "^14.17.0 || ^16.13.0 || >=18.0.0" 347 | } 348 | }, 349 | "node_modules/acorn": { 350 | "version": "8.14.0", 351 | "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.14.0.tgz", 352 | "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", 353 | "dev": true, 354 | "license": "MIT", 355 | "bin": { 356 | "acorn": "bin/acorn" 357 | }, 358 | "engines": { 359 | "node": ">=0.4.0" 360 | } 361 | }, 362 | "node_modules/acorn-walk": { 363 | "version": "8.3.4", 364 | "resolved": "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.3.4.tgz", 365 | "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", 366 | "dev": true, 367 | "license": "MIT", 368 | "dependencies": { 369 | "acorn": "^8.11.0" 370 | }, 371 | "engines": { 372 | "node": ">=0.4.0" 373 | } 374 | }, 375 | "node_modules/ansi-regex": { 376 | "version": "6.1.0", 377 | "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.1.0.tgz", 378 | "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", 379 | "license": "MIT", 380 | "engines": { 381 | "node": ">=12" 382 | }, 383 | "funding": { 384 | "url": "https://github.com/chalk/ansi-regex?sponsor=1" 385 | } 386 | }, 387 | "node_modules/ansi-styles": { 388 | "version": "6.2.1", 389 | "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.1.tgz", 390 | "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", 391 | "license": "MIT", 392 | "engines": { 393 | "node": ">=12" 394 | }, 395 | "funding": { 396 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 397 | } 398 | }, 399 | "node_modules/as-table": { 400 | "version": "1.0.55", 401 | "resolved": "https://registry.npmmirror.com/as-table/-/as-table-1.0.55.tgz", 402 | "integrity": "sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==", 403 | "dev": true, 404 | "license": "MIT", 405 | "dependencies": { 406 | "printable-characters": "^1.0.42" 407 | } 408 | }, 409 | "node_modules/balanced-match": { 410 | "version": "1.0.2", 411 | "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", 412 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 413 | "license": "MIT" 414 | }, 415 | "node_modules/blake3-wasm": { 416 | "version": "2.1.5", 417 | "resolved": "https://registry.npmmirror.com/blake3-wasm/-/blake3-wasm-2.1.5.tgz", 418 | "integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==", 419 | "dev": true 420 | }, 421 | "node_modules/brace-expansion": { 422 | "version": "2.0.1", 423 | "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz", 424 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 425 | "license": "MIT", 426 | "dependencies": { 427 | "balanced-match": "^1.0.0" 428 | } 429 | }, 430 | "node_modules/capnp-ts": { 431 | "version": "0.7.0", 432 | "resolved": "https://registry.npmmirror.com/capnp-ts/-/capnp-ts-0.7.0.tgz", 433 | "integrity": "sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==", 434 | "dev": true, 435 | "license": "MIT", 436 | "dependencies": { 437 | "debug": "^4.3.1", 438 | "tslib": "^2.2.0" 439 | } 440 | }, 441 | "node_modules/chokidar": { 442 | "version": "4.0.1", 443 | "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-4.0.1.tgz", 444 | "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", 445 | "dev": true, 446 | "license": "MIT", 447 | "dependencies": { 448 | "readdirp": "^4.0.1" 449 | }, 450 | "engines": { 451 | "node": ">= 14.16.0" 452 | }, 453 | "funding": { 454 | "url": "https://paulmillr.com/funding/" 455 | } 456 | }, 457 | "node_modules/color-convert": { 458 | "version": "2.0.1", 459 | "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", 460 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 461 | "license": "MIT", 462 | "dependencies": { 463 | "color-name": "~1.1.4" 464 | }, 465 | "engines": { 466 | "node": ">=7.0.0" 467 | } 468 | }, 469 | "node_modules/color-name": { 470 | "version": "1.1.4", 471 | "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", 472 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 473 | "license": "MIT" 474 | }, 475 | "node_modules/commander": { 476 | "version": "10.0.1", 477 | "resolved": "https://registry.npmmirror.com/commander/-/commander-10.0.1.tgz", 478 | "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", 479 | "license": "MIT", 480 | "engines": { 481 | "node": ">=14" 482 | } 483 | }, 484 | "node_modules/config-chain": { 485 | "version": "1.1.13", 486 | "resolved": "https://registry.npmmirror.com/config-chain/-/config-chain-1.1.13.tgz", 487 | "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", 488 | "license": "MIT", 489 | "dependencies": { 490 | "ini": "^1.3.4", 491 | "proto-list": "~1.2.1" 492 | } 493 | }, 494 | "node_modules/cookie": { 495 | "version": "0.7.2", 496 | "resolved": "https://registry.npmmirror.com/cookie/-/cookie-0.7.2.tgz", 497 | "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", 498 | "dev": true, 499 | "license": "MIT", 500 | "engines": { 501 | "node": ">= 0.6" 502 | } 503 | }, 504 | "node_modules/cross-spawn": { 505 | "version": "7.0.5", 506 | "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.5.tgz", 507 | "integrity": "sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==", 508 | "license": "MIT", 509 | "dependencies": { 510 | "path-key": "^3.1.0", 511 | "shebang-command": "^2.0.0", 512 | "which": "^2.0.1" 513 | }, 514 | "engines": { 515 | "node": ">= 8" 516 | } 517 | }, 518 | "node_modules/data-uri-to-buffer": { 519 | "version": "2.0.2", 520 | "resolved": "https://registry.npmmirror.com/data-uri-to-buffer/-/data-uri-to-buffer-2.0.2.tgz", 521 | "integrity": "sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==", 522 | "dev": true, 523 | "license": "MIT" 524 | }, 525 | "node_modules/date-fns": { 526 | "version": "4.1.0", 527 | "resolved": "https://registry.npmmirror.com/date-fns/-/date-fns-4.1.0.tgz", 528 | "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", 529 | "dev": true, 530 | "license": "MIT", 531 | "funding": { 532 | "type": "github", 533 | "url": "https://github.com/sponsors/kossnocorp" 534 | } 535 | }, 536 | "node_modules/debug": { 537 | "version": "4.3.7", 538 | "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.7.tgz", 539 | "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", 540 | "dev": true, 541 | "license": "MIT", 542 | "dependencies": { 543 | "ms": "^2.1.3" 544 | }, 545 | "engines": { 546 | "node": ">=6.0" 547 | }, 548 | "peerDependenciesMeta": { 549 | "supports-color": { 550 | "optional": true 551 | } 552 | } 553 | }, 554 | "node_modules/deepmerge": { 555 | "version": "4.3.1", 556 | "resolved": "https://registry.npmmirror.com/deepmerge/-/deepmerge-4.3.1.tgz", 557 | "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", 558 | "license": "MIT", 559 | "engines": { 560 | "node": ">=0.10.0" 561 | } 562 | }, 563 | "node_modules/defu": { 564 | "version": "6.1.4", 565 | "resolved": "https://registry.npmmirror.com/defu/-/defu-6.1.4.tgz", 566 | "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", 567 | "dev": true, 568 | "license": "MIT" 569 | }, 570 | "node_modules/dom-serializer": { 571 | "version": "2.0.0", 572 | "resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-2.0.0.tgz", 573 | "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", 574 | "license": "MIT", 575 | "dependencies": { 576 | "domelementtype": "^2.3.0", 577 | "domhandler": "^5.0.2", 578 | "entities": "^4.2.0" 579 | }, 580 | "funding": { 581 | "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" 582 | } 583 | }, 584 | "node_modules/domelementtype": { 585 | "version": "2.3.0", 586 | "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz", 587 | "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", 588 | "funding": [ 589 | { 590 | "type": "github", 591 | "url": "https://github.com/sponsors/fb55" 592 | } 593 | ], 594 | "license": "BSD-2-Clause" 595 | }, 596 | "node_modules/domhandler": { 597 | "version": "5.0.3", 598 | "resolved": "https://registry.npmmirror.com/domhandler/-/domhandler-5.0.3.tgz", 599 | "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", 600 | "license": "BSD-2-Clause", 601 | "dependencies": { 602 | "domelementtype": "^2.3.0" 603 | }, 604 | "engines": { 605 | "node": ">= 4" 606 | }, 607 | "funding": { 608 | "url": "https://github.com/fb55/domhandler?sponsor=1" 609 | } 610 | }, 611 | "node_modules/domutils": { 612 | "version": "3.1.0", 613 | "resolved": "https://registry.npmmirror.com/domutils/-/domutils-3.1.0.tgz", 614 | "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", 615 | "license": "BSD-2-Clause", 616 | "dependencies": { 617 | "dom-serializer": "^2.0.0", 618 | "domelementtype": "^2.3.0", 619 | "domhandler": "^5.0.3" 620 | }, 621 | "funding": { 622 | "url": "https://github.com/fb55/domutils?sponsor=1" 623 | } 624 | }, 625 | "node_modules/eastasianwidth": { 626 | "version": "0.2.0", 627 | "resolved": "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz", 628 | "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", 629 | "license": "MIT" 630 | }, 631 | "node_modules/editorconfig": { 632 | "version": "1.0.4", 633 | "resolved": "https://registry.npmmirror.com/editorconfig/-/editorconfig-1.0.4.tgz", 634 | "integrity": "sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==", 635 | "license": "MIT", 636 | "dependencies": { 637 | "@one-ini/wasm": "0.1.1", 638 | "commander": "^10.0.0", 639 | "minimatch": "9.0.1", 640 | "semver": "^7.5.3" 641 | }, 642 | "bin": { 643 | "editorconfig": "bin/editorconfig" 644 | }, 645 | "engines": { 646 | "node": ">=14" 647 | } 648 | }, 649 | "node_modules/emoji-regex": { 650 | "version": "9.2.2", 651 | "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-9.2.2.tgz", 652 | "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", 653 | "license": "MIT" 654 | }, 655 | "node_modules/entities": { 656 | "version": "4.5.0", 657 | "resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz", 658 | "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", 659 | "license": "BSD-2-Clause", 660 | "engines": { 661 | "node": ">=0.12" 662 | }, 663 | "funding": { 664 | "url": "https://github.com/fb55/entities?sponsor=1" 665 | } 666 | }, 667 | "node_modules/esbuild": { 668 | "version": "0.17.19", 669 | "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.17.19.tgz", 670 | "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", 671 | "dev": true, 672 | "hasInstallScript": true, 673 | "bin": { 674 | "esbuild": "bin/esbuild" 675 | }, 676 | "engines": { 677 | "node": ">=12" 678 | }, 679 | "optionalDependencies": { 680 | "@esbuild/android-arm": "0.17.19", 681 | "@esbuild/android-arm64": "0.17.19", 682 | "@esbuild/android-x64": "0.17.19", 683 | "@esbuild/darwin-arm64": "0.17.19", 684 | "@esbuild/darwin-x64": "0.17.19", 685 | "@esbuild/freebsd-arm64": "0.17.19", 686 | "@esbuild/freebsd-x64": "0.17.19", 687 | "@esbuild/linux-arm": "0.17.19", 688 | "@esbuild/linux-arm64": "0.17.19", 689 | "@esbuild/linux-ia32": "0.17.19", 690 | "@esbuild/linux-loong64": "0.17.19", 691 | "@esbuild/linux-mips64el": "0.17.19", 692 | "@esbuild/linux-ppc64": "0.17.19", 693 | "@esbuild/linux-riscv64": "0.17.19", 694 | "@esbuild/linux-s390x": "0.17.19", 695 | "@esbuild/linux-x64": "0.17.19", 696 | "@esbuild/netbsd-x64": "0.17.19", 697 | "@esbuild/openbsd-x64": "0.17.19", 698 | "@esbuild/sunos-x64": "0.17.19", 699 | "@esbuild/win32-arm64": "0.17.19", 700 | "@esbuild/win32-ia32": "0.17.19", 701 | "@esbuild/win32-x64": "0.17.19" 702 | } 703 | }, 704 | "node_modules/esbuild/node_modules/@esbuild/android-arm": { 705 | "version": "0.17.19", 706 | "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz", 707 | "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", 708 | "cpu": [ 709 | "arm" 710 | ], 711 | "dev": true, 712 | "optional": true, 713 | "os": [ 714 | "android" 715 | ], 716 | "engines": { 717 | "node": ">=12" 718 | } 719 | }, 720 | "node_modules/esbuild/node_modules/@esbuild/android-arm64": { 721 | "version": "0.17.19", 722 | "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", 723 | "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", 724 | "cpu": [ 725 | "arm64" 726 | ], 727 | "dev": true, 728 | "optional": true, 729 | "os": [ 730 | "android" 731 | ], 732 | "engines": { 733 | "node": ">=12" 734 | } 735 | }, 736 | "node_modules/esbuild/node_modules/@esbuild/android-x64": { 737 | "version": "0.17.19", 738 | "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz", 739 | "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", 740 | "cpu": [ 741 | "x64" 742 | ], 743 | "dev": true, 744 | "optional": true, 745 | "os": [ 746 | "android" 747 | ], 748 | "engines": { 749 | "node": ">=12" 750 | } 751 | }, 752 | "node_modules/esbuild/node_modules/@esbuild/darwin-arm64": { 753 | "version": "0.17.19", 754 | "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", 755 | "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", 756 | "cpu": [ 757 | "arm64" 758 | ], 759 | "dev": true, 760 | "optional": true, 761 | "os": [ 762 | "darwin" 763 | ], 764 | "engines": { 765 | "node": ">=12" 766 | } 767 | }, 768 | "node_modules/esbuild/node_modules/@esbuild/darwin-x64": { 769 | "version": "0.17.19", 770 | "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", 771 | "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", 772 | "cpu": [ 773 | "x64" 774 | ], 775 | "dev": true, 776 | "optional": true, 777 | "os": [ 778 | "darwin" 779 | ], 780 | "engines": { 781 | "node": ">=12" 782 | } 783 | }, 784 | "node_modules/esbuild/node_modules/@esbuild/freebsd-arm64": { 785 | "version": "0.17.19", 786 | "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", 787 | "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", 788 | "cpu": [ 789 | "arm64" 790 | ], 791 | "dev": true, 792 | "optional": true, 793 | "os": [ 794 | "freebsd" 795 | ], 796 | "engines": { 797 | "node": ">=12" 798 | } 799 | }, 800 | "node_modules/esbuild/node_modules/@esbuild/freebsd-x64": { 801 | "version": "0.17.19", 802 | "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", 803 | "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", 804 | "cpu": [ 805 | "x64" 806 | ], 807 | "dev": true, 808 | "optional": true, 809 | "os": [ 810 | "freebsd" 811 | ], 812 | "engines": { 813 | "node": ">=12" 814 | } 815 | }, 816 | "node_modules/esbuild/node_modules/@esbuild/linux-arm": { 817 | "version": "0.17.19", 818 | "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", 819 | "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", 820 | "cpu": [ 821 | "arm" 822 | ], 823 | "dev": true, 824 | "optional": true, 825 | "os": [ 826 | "linux" 827 | ], 828 | "engines": { 829 | "node": ">=12" 830 | } 831 | }, 832 | "node_modules/esbuild/node_modules/@esbuild/linux-arm64": { 833 | "version": "0.17.19", 834 | "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", 835 | "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", 836 | "cpu": [ 837 | "arm64" 838 | ], 839 | "dev": true, 840 | "optional": true, 841 | "os": [ 842 | "linux" 843 | ], 844 | "engines": { 845 | "node": ">=12" 846 | } 847 | }, 848 | "node_modules/esbuild/node_modules/@esbuild/linux-ia32": { 849 | "version": "0.17.19", 850 | "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", 851 | "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", 852 | "cpu": [ 853 | "ia32" 854 | ], 855 | "dev": true, 856 | "optional": true, 857 | "os": [ 858 | "linux" 859 | ], 860 | "engines": { 861 | "node": ">=12" 862 | } 863 | }, 864 | "node_modules/esbuild/node_modules/@esbuild/linux-loong64": { 865 | "version": "0.17.19", 866 | "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", 867 | "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", 868 | "cpu": [ 869 | "loong64" 870 | ], 871 | "dev": true, 872 | "optional": true, 873 | "os": [ 874 | "linux" 875 | ], 876 | "engines": { 877 | "node": ">=12" 878 | } 879 | }, 880 | "node_modules/esbuild/node_modules/@esbuild/linux-mips64el": { 881 | "version": "0.17.19", 882 | "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", 883 | "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", 884 | "cpu": [ 885 | "mips64el" 886 | ], 887 | "dev": true, 888 | "optional": true, 889 | "os": [ 890 | "linux" 891 | ], 892 | "engines": { 893 | "node": ">=12" 894 | } 895 | }, 896 | "node_modules/esbuild/node_modules/@esbuild/linux-ppc64": { 897 | "version": "0.17.19", 898 | "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", 899 | "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", 900 | "cpu": [ 901 | "ppc64" 902 | ], 903 | "dev": true, 904 | "optional": true, 905 | "os": [ 906 | "linux" 907 | ], 908 | "engines": { 909 | "node": ">=12" 910 | } 911 | }, 912 | "node_modules/esbuild/node_modules/@esbuild/linux-riscv64": { 913 | "version": "0.17.19", 914 | "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", 915 | "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", 916 | "cpu": [ 917 | "riscv64" 918 | ], 919 | "dev": true, 920 | "optional": true, 921 | "os": [ 922 | "linux" 923 | ], 924 | "engines": { 925 | "node": ">=12" 926 | } 927 | }, 928 | "node_modules/esbuild/node_modules/@esbuild/linux-s390x": { 929 | "version": "0.17.19", 930 | "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", 931 | "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", 932 | "cpu": [ 933 | "s390x" 934 | ], 935 | "dev": true, 936 | "optional": true, 937 | "os": [ 938 | "linux" 939 | ], 940 | "engines": { 941 | "node": ">=12" 942 | } 943 | }, 944 | "node_modules/esbuild/node_modules/@esbuild/linux-x64": { 945 | "version": "0.17.19", 946 | "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", 947 | "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", 948 | "cpu": [ 949 | "x64" 950 | ], 951 | "dev": true, 952 | "optional": true, 953 | "os": [ 954 | "linux" 955 | ], 956 | "engines": { 957 | "node": ">=12" 958 | } 959 | }, 960 | "node_modules/esbuild/node_modules/@esbuild/netbsd-x64": { 961 | "version": "0.17.19", 962 | "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", 963 | "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", 964 | "cpu": [ 965 | "x64" 966 | ], 967 | "dev": true, 968 | "optional": true, 969 | "os": [ 970 | "netbsd" 971 | ], 972 | "engines": { 973 | "node": ">=12" 974 | } 975 | }, 976 | "node_modules/esbuild/node_modules/@esbuild/openbsd-x64": { 977 | "version": "0.17.19", 978 | "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", 979 | "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", 980 | "cpu": [ 981 | "x64" 982 | ], 983 | "dev": true, 984 | "optional": true, 985 | "os": [ 986 | "openbsd" 987 | ], 988 | "engines": { 989 | "node": ">=12" 990 | } 991 | }, 992 | "node_modules/esbuild/node_modules/@esbuild/sunos-x64": { 993 | "version": "0.17.19", 994 | "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", 995 | "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", 996 | "cpu": [ 997 | "x64" 998 | ], 999 | "dev": true, 1000 | "optional": true, 1001 | "os": [ 1002 | "sunos" 1003 | ], 1004 | "engines": { 1005 | "node": ">=12" 1006 | } 1007 | }, 1008 | "node_modules/esbuild/node_modules/@esbuild/win32-arm64": { 1009 | "version": "0.17.19", 1010 | "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", 1011 | "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", 1012 | "cpu": [ 1013 | "arm64" 1014 | ], 1015 | "dev": true, 1016 | "optional": true, 1017 | "os": [ 1018 | "win32" 1019 | ], 1020 | "engines": { 1021 | "node": ">=12" 1022 | } 1023 | }, 1024 | "node_modules/esbuild/node_modules/@esbuild/win32-ia32": { 1025 | "version": "0.17.19", 1026 | "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", 1027 | "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", 1028 | "cpu": [ 1029 | "ia32" 1030 | ], 1031 | "dev": true, 1032 | "optional": true, 1033 | "os": [ 1034 | "win32" 1035 | ], 1036 | "engines": { 1037 | "node": ">=12" 1038 | } 1039 | }, 1040 | "node_modules/esbuild/node_modules/@esbuild/win32-x64": { 1041 | "version": "0.17.19", 1042 | "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", 1043 | "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", 1044 | "cpu": [ 1045 | "x64" 1046 | ], 1047 | "dev": true, 1048 | "optional": true, 1049 | "os": [ 1050 | "win32" 1051 | ], 1052 | "engines": { 1053 | "node": ">=12" 1054 | } 1055 | }, 1056 | "node_modules/exit-hook": { 1057 | "version": "2.2.1", 1058 | "resolved": "https://registry.npmmirror.com/exit-hook/-/exit-hook-2.2.1.tgz", 1059 | "integrity": "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==", 1060 | "dev": true, 1061 | "license": "MIT", 1062 | "engines": { 1063 | "node": ">=6" 1064 | }, 1065 | "funding": { 1066 | "url": "https://github.com/sponsors/sindresorhus" 1067 | } 1068 | }, 1069 | "node_modules/fast-deep-equal": { 1070 | "version": "2.0.1", 1071 | "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", 1072 | "integrity": "sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==", 1073 | "license": "MIT" 1074 | }, 1075 | "node_modules/foreground-child": { 1076 | "version": "3.3.0", 1077 | "resolved": "https://registry.npmmirror.com/foreground-child/-/foreground-child-3.3.0.tgz", 1078 | "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", 1079 | "license": "ISC", 1080 | "dependencies": { 1081 | "cross-spawn": "^7.0.0", 1082 | "signal-exit": "^4.0.1" 1083 | }, 1084 | "engines": { 1085 | "node": ">=14" 1086 | }, 1087 | "funding": { 1088 | "url": "https://github.com/sponsors/isaacs" 1089 | } 1090 | }, 1091 | "node_modules/fsevents": { 1092 | "version": "2.3.3", 1093 | "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz", 1094 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 1095 | "dev": true, 1096 | "hasInstallScript": true, 1097 | "license": "MIT", 1098 | "optional": true, 1099 | "os": [ 1100 | "darwin" 1101 | ], 1102 | "engines": { 1103 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1104 | } 1105 | }, 1106 | "node_modules/get-source": { 1107 | "version": "2.0.12", 1108 | "resolved": "https://registry.npmmirror.com/get-source/-/get-source-2.0.12.tgz", 1109 | "integrity": "sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==", 1110 | "dev": true, 1111 | "license": "Unlicense", 1112 | "dependencies": { 1113 | "data-uri-to-buffer": "^2.0.0", 1114 | "source-map": "^0.6.1" 1115 | } 1116 | }, 1117 | "node_modules/glob": { 1118 | "version": "10.4.5", 1119 | "resolved": "https://registry.npmmirror.com/glob/-/glob-10.4.5.tgz", 1120 | "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", 1121 | "license": "ISC", 1122 | "dependencies": { 1123 | "foreground-child": "^3.1.0", 1124 | "jackspeak": "^3.1.2", 1125 | "minimatch": "^9.0.4", 1126 | "minipass": "^7.1.2", 1127 | "package-json-from-dist": "^1.0.0", 1128 | "path-scurry": "^1.11.1" 1129 | }, 1130 | "bin": { 1131 | "glob": "dist/esm/bin.mjs" 1132 | }, 1133 | "funding": { 1134 | "url": "https://github.com/sponsors/isaacs" 1135 | } 1136 | }, 1137 | "node_modules/glob-to-regexp": { 1138 | "version": "0.4.1", 1139 | "resolved": "https://registry.npmmirror.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", 1140 | "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", 1141 | "dev": true, 1142 | "license": "BSD-2-Clause" 1143 | }, 1144 | "node_modules/glob/node_modules/minimatch": { 1145 | "version": "9.0.5", 1146 | "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.5.tgz", 1147 | "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", 1148 | "license": "ISC", 1149 | "dependencies": { 1150 | "brace-expansion": "^2.0.1" 1151 | }, 1152 | "engines": { 1153 | "node": ">=16 || 14 >=14.17" 1154 | }, 1155 | "funding": { 1156 | "url": "https://github.com/sponsors/isaacs" 1157 | } 1158 | }, 1159 | "node_modules/hono": { 1160 | "version": "4.6.10", 1161 | "resolved": "https://registry.npmmirror.com/hono/-/hono-4.6.10.tgz", 1162 | "integrity": "sha512-IXXNfRAZEahFnWBhUUlqKEGF9upeE6hZoRZszvNkyAz/CYp+iVbxm3viMvStlagRJohjlBRGOQ7f4jfcV0XMGg==", 1163 | "license": "MIT", 1164 | "engines": { 1165 | "node": ">=16.9.0" 1166 | } 1167 | }, 1168 | "node_modules/html-to-text": { 1169 | "version": "9.0.5", 1170 | "resolved": "https://registry.npmmirror.com/html-to-text/-/html-to-text-9.0.5.tgz", 1171 | "integrity": "sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==", 1172 | "license": "MIT", 1173 | "dependencies": { 1174 | "@selderee/plugin-htmlparser2": "^0.11.0", 1175 | "deepmerge": "^4.3.1", 1176 | "dom-serializer": "^2.0.0", 1177 | "htmlparser2": "^8.0.2", 1178 | "selderee": "^0.11.0" 1179 | }, 1180 | "engines": { 1181 | "node": ">=14" 1182 | } 1183 | }, 1184 | "node_modules/htmlparser2": { 1185 | "version": "8.0.2", 1186 | "resolved": "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-8.0.2.tgz", 1187 | "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", 1188 | "funding": [ 1189 | "https://github.com/fb55/htmlparser2?sponsor=1", 1190 | { 1191 | "type": "github", 1192 | "url": "https://github.com/sponsors/fb55" 1193 | } 1194 | ], 1195 | "license": "MIT", 1196 | "dependencies": { 1197 | "domelementtype": "^2.3.0", 1198 | "domhandler": "^5.0.3", 1199 | "domutils": "^3.0.1", 1200 | "entities": "^4.4.0" 1201 | } 1202 | }, 1203 | "node_modules/ini": { 1204 | "version": "1.3.8", 1205 | "resolved": "https://registry.npmmirror.com/ini/-/ini-1.3.8.tgz", 1206 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", 1207 | "license": "ISC" 1208 | }, 1209 | "node_modules/is-fullwidth-code-point": { 1210 | "version": "3.0.0", 1211 | "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1212 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1213 | "license": "MIT", 1214 | "engines": { 1215 | "node": ">=8" 1216 | } 1217 | }, 1218 | "node_modules/isexe": { 1219 | "version": "2.0.0", 1220 | "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", 1221 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 1222 | "license": "ISC" 1223 | }, 1224 | "node_modules/itty-time": { 1225 | "version": "1.0.6", 1226 | "resolved": "https://registry.npmmirror.com/itty-time/-/itty-time-1.0.6.tgz", 1227 | "integrity": "sha512-+P8IZaLLBtFv8hCkIjcymZOp4UJ+xW6bSlQsXGqrkmJh7vSiMFSlNne0mCYagEE0N7HDNR5jJBRxwN0oYv61Rw==", 1228 | "dev": true, 1229 | "license": "MIT" 1230 | }, 1231 | "node_modules/jackspeak": { 1232 | "version": "3.4.3", 1233 | "resolved": "https://registry.npmmirror.com/jackspeak/-/jackspeak-3.4.3.tgz", 1234 | "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", 1235 | "license": "BlueOak-1.0.0", 1236 | "dependencies": { 1237 | "@isaacs/cliui": "^8.0.2" 1238 | }, 1239 | "funding": { 1240 | "url": "https://github.com/sponsors/isaacs" 1241 | }, 1242 | "optionalDependencies": { 1243 | "@pkgjs/parseargs": "^0.11.0" 1244 | } 1245 | }, 1246 | "node_modules/js-beautify": { 1247 | "version": "1.15.1", 1248 | "resolved": "https://registry.npmmirror.com/js-beautify/-/js-beautify-1.15.1.tgz", 1249 | "integrity": "sha512-ESjNzSlt/sWE8sciZH8kBF8BPlwXPwhR6pWKAw8bw4Bwj+iZcnKW6ONWUutJ7eObuBZQpiIb8S7OYspWrKt7rA==", 1250 | "license": "MIT", 1251 | "dependencies": { 1252 | "config-chain": "^1.1.13", 1253 | "editorconfig": "^1.0.4", 1254 | "glob": "^10.3.3", 1255 | "js-cookie": "^3.0.5", 1256 | "nopt": "^7.2.0" 1257 | }, 1258 | "bin": { 1259 | "css-beautify": "js/bin/css-beautify.js", 1260 | "html-beautify": "js/bin/html-beautify.js", 1261 | "js-beautify": "js/bin/js-beautify.js" 1262 | }, 1263 | "engines": { 1264 | "node": ">=14" 1265 | } 1266 | }, 1267 | "node_modules/js-cookie": { 1268 | "version": "3.0.5", 1269 | "resolved": "https://registry.npmmirror.com/js-cookie/-/js-cookie-3.0.5.tgz", 1270 | "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", 1271 | "license": "MIT", 1272 | "engines": { 1273 | "node": ">=14" 1274 | } 1275 | }, 1276 | "node_modules/js-tokens": { 1277 | "version": "4.0.0", 1278 | "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz", 1279 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 1280 | "license": "MIT", 1281 | "peer": true 1282 | }, 1283 | "node_modules/leac": { 1284 | "version": "0.6.0", 1285 | "resolved": "https://registry.npmmirror.com/leac/-/leac-0.6.0.tgz", 1286 | "integrity": "sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==", 1287 | "license": "MIT", 1288 | "funding": { 1289 | "url": "https://ko-fi.com/killymxi" 1290 | } 1291 | }, 1292 | "node_modules/loose-envify": { 1293 | "version": "1.4.0", 1294 | "resolved": "https://registry.npmmirror.com/loose-envify/-/loose-envify-1.4.0.tgz", 1295 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 1296 | "license": "MIT", 1297 | "peer": true, 1298 | "dependencies": { 1299 | "js-tokens": "^3.0.0 || ^4.0.0" 1300 | }, 1301 | "bin": { 1302 | "loose-envify": "cli.js" 1303 | } 1304 | }, 1305 | "node_modules/lru-cache": { 1306 | "version": "10.4.3", 1307 | "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-10.4.3.tgz", 1308 | "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", 1309 | "license": "ISC" 1310 | }, 1311 | "node_modules/mime": { 1312 | "version": "3.0.0", 1313 | "resolved": "https://registry.npmmirror.com/mime/-/mime-3.0.0.tgz", 1314 | "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", 1315 | "dev": true, 1316 | "license": "MIT", 1317 | "bin": { 1318 | "mime": "cli.js" 1319 | }, 1320 | "engines": { 1321 | "node": ">=10.0.0" 1322 | } 1323 | }, 1324 | "node_modules/miniflare": { 1325 | "version": "3.20241106.0", 1326 | "resolved": "https://registry.npmmirror.com/miniflare/-/miniflare-3.20241106.0.tgz", 1327 | "integrity": "sha512-PjOoJKjUUofCueQskfhXlGvvHxZj36UAJAp1DnquMK88MFF50zCULblh0KXMSNM+bXeQYA94Gj06a7kfmBGxPw==", 1328 | "dev": true, 1329 | "license": "MIT", 1330 | "dependencies": { 1331 | "@cspotcode/source-map-support": "0.8.1", 1332 | "acorn": "^8.8.0", 1333 | "acorn-walk": "^8.2.0", 1334 | "capnp-ts": "^0.7.0", 1335 | "exit-hook": "^2.2.1", 1336 | "glob-to-regexp": "^0.4.1", 1337 | "stoppable": "^1.1.0", 1338 | "undici": "^5.28.4", 1339 | "workerd": "1.20241106.1", 1340 | "ws": "^8.18.0", 1341 | "youch": "^3.2.2", 1342 | "zod": "^3.22.3" 1343 | }, 1344 | "bin": { 1345 | "miniflare": "bootstrap.js" 1346 | }, 1347 | "engines": { 1348 | "node": ">=16.13" 1349 | } 1350 | }, 1351 | "node_modules/minimatch": { 1352 | "version": "9.0.1", 1353 | "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.1.tgz", 1354 | "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", 1355 | "license": "ISC", 1356 | "dependencies": { 1357 | "brace-expansion": "^2.0.1" 1358 | }, 1359 | "engines": { 1360 | "node": ">=16 || 14 >=14.17" 1361 | }, 1362 | "funding": { 1363 | "url": "https://github.com/sponsors/isaacs" 1364 | } 1365 | }, 1366 | "node_modules/minipass": { 1367 | "version": "7.1.2", 1368 | "resolved": "https://registry.npmmirror.com/minipass/-/minipass-7.1.2.tgz", 1369 | "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", 1370 | "license": "ISC", 1371 | "engines": { 1372 | "node": ">=16 || 14 >=14.17" 1373 | } 1374 | }, 1375 | "node_modules/ms": { 1376 | "version": "2.1.3", 1377 | "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", 1378 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 1379 | "dev": true, 1380 | "license": "MIT" 1381 | }, 1382 | "node_modules/mustache": { 1383 | "version": "4.2.0", 1384 | "resolved": "https://registry.npmmirror.com/mustache/-/mustache-4.2.0.tgz", 1385 | "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", 1386 | "dev": true, 1387 | "license": "MIT", 1388 | "bin": { 1389 | "mustache": "bin/mustache" 1390 | } 1391 | }, 1392 | "node_modules/nanoid": { 1393 | "version": "3.3.7", 1394 | "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz", 1395 | "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", 1396 | "dev": true, 1397 | "funding": [ 1398 | { 1399 | "type": "github", 1400 | "url": "https://github.com/sponsors/ai" 1401 | } 1402 | ], 1403 | "bin": { 1404 | "nanoid": "bin/nanoid.cjs" 1405 | }, 1406 | "engines": { 1407 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1408 | } 1409 | }, 1410 | "node_modules/nopt": { 1411 | "version": "7.2.1", 1412 | "resolved": "https://registry.npmmirror.com/nopt/-/nopt-7.2.1.tgz", 1413 | "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", 1414 | "license": "ISC", 1415 | "dependencies": { 1416 | "abbrev": "^2.0.0" 1417 | }, 1418 | "bin": { 1419 | "nopt": "bin/nopt.js" 1420 | }, 1421 | "engines": { 1422 | "node": "^14.17.0 || ^16.13.0 || >=18.0.0" 1423 | } 1424 | }, 1425 | "node_modules/ohash": { 1426 | "version": "1.1.4", 1427 | "resolved": "https://registry.npmmirror.com/ohash/-/ohash-1.1.4.tgz", 1428 | "integrity": "sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g==", 1429 | "dev": true, 1430 | "license": "MIT" 1431 | }, 1432 | "node_modules/package-json-from-dist": { 1433 | "version": "1.0.1", 1434 | "resolved": "https://registry.npmmirror.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", 1435 | "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", 1436 | "license": "BlueOak-1.0.0" 1437 | }, 1438 | "node_modules/parseley": { 1439 | "version": "0.12.1", 1440 | "resolved": "https://registry.npmmirror.com/parseley/-/parseley-0.12.1.tgz", 1441 | "integrity": "sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==", 1442 | "license": "MIT", 1443 | "dependencies": { 1444 | "leac": "^0.6.0", 1445 | "peberminta": "^0.9.0" 1446 | }, 1447 | "funding": { 1448 | "url": "https://ko-fi.com/killymxi" 1449 | } 1450 | }, 1451 | "node_modules/path-key": { 1452 | "version": "3.1.1", 1453 | "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz", 1454 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1455 | "license": "MIT", 1456 | "engines": { 1457 | "node": ">=8" 1458 | } 1459 | }, 1460 | "node_modules/path-scurry": { 1461 | "version": "1.11.1", 1462 | "resolved": "https://registry.npmmirror.com/path-scurry/-/path-scurry-1.11.1.tgz", 1463 | "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", 1464 | "license": "BlueOak-1.0.0", 1465 | "dependencies": { 1466 | "lru-cache": "^10.2.0", 1467 | "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" 1468 | }, 1469 | "engines": { 1470 | "node": ">=16 || 14 >=14.18" 1471 | }, 1472 | "funding": { 1473 | "url": "https://github.com/sponsors/isaacs" 1474 | } 1475 | }, 1476 | "node_modules/path-to-regexp": { 1477 | "version": "6.3.0", 1478 | "resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-6.3.0.tgz", 1479 | "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", 1480 | "dev": true, 1481 | "license": "MIT" 1482 | }, 1483 | "node_modules/pathe": { 1484 | "version": "1.1.2", 1485 | "resolved": "https://registry.npmmirror.com/pathe/-/pathe-1.1.2.tgz", 1486 | "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", 1487 | "dev": true, 1488 | "license": "MIT" 1489 | }, 1490 | "node_modules/peberminta": { 1491 | "version": "0.9.0", 1492 | "resolved": "https://registry.npmmirror.com/peberminta/-/peberminta-0.9.0.tgz", 1493 | "integrity": "sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==", 1494 | "license": "MIT", 1495 | "funding": { 1496 | "url": "https://ko-fi.com/killymxi" 1497 | } 1498 | }, 1499 | "node_modules/printable-characters": { 1500 | "version": "1.0.42", 1501 | "resolved": "https://registry.npmmirror.com/printable-characters/-/printable-characters-1.0.42.tgz", 1502 | "integrity": "sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==", 1503 | "dev": true, 1504 | "license": "Unlicense" 1505 | }, 1506 | "node_modules/proto-list": { 1507 | "version": "1.2.4", 1508 | "resolved": "https://registry.npmmirror.com/proto-list/-/proto-list-1.2.4.tgz", 1509 | "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", 1510 | "license": "ISC" 1511 | }, 1512 | "node_modules/react": { 1513 | "version": "18.3.1", 1514 | "resolved": "https://registry.npmmirror.com/react/-/react-18.3.1.tgz", 1515 | "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", 1516 | "license": "MIT", 1517 | "peer": true, 1518 | "dependencies": { 1519 | "loose-envify": "^1.1.0" 1520 | }, 1521 | "engines": { 1522 | "node": ">=0.10.0" 1523 | } 1524 | }, 1525 | "node_modules/react-dom": { 1526 | "version": "18.3.1", 1527 | "resolved": "https://registry.npmmirror.com/react-dom/-/react-dom-18.3.1.tgz", 1528 | "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", 1529 | "license": "MIT", 1530 | "peer": true, 1531 | "dependencies": { 1532 | "loose-envify": "^1.1.0", 1533 | "scheduler": "^0.23.2" 1534 | }, 1535 | "peerDependencies": { 1536 | "react": "^18.3.1" 1537 | } 1538 | }, 1539 | "node_modules/react-promise-suspense": { 1540 | "version": "0.3.4", 1541 | "resolved": "https://registry.npmmirror.com/react-promise-suspense/-/react-promise-suspense-0.3.4.tgz", 1542 | "integrity": "sha512-I42jl7L3Ze6kZaq+7zXWSunBa3b1on5yfvUW6Eo/3fFOj6dZ5Bqmcd264nJbTK/gn1HjjILAjSwnZbV4RpSaNQ==", 1543 | "license": "MIT", 1544 | "dependencies": { 1545 | "fast-deep-equal": "^2.0.1" 1546 | } 1547 | }, 1548 | "node_modules/readdirp": { 1549 | "version": "4.0.2", 1550 | "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-4.0.2.tgz", 1551 | "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", 1552 | "dev": true, 1553 | "license": "MIT", 1554 | "engines": { 1555 | "node": ">= 14.16.0" 1556 | }, 1557 | "funding": { 1558 | "type": "individual", 1559 | "url": "https://paulmillr.com/funding/" 1560 | } 1561 | }, 1562 | "node_modules/resend": { 1563 | "version": "4.0.1-alpha.0", 1564 | "resolved": "https://registry.npmmirror.com/resend/-/resend-4.0.1-alpha.0.tgz", 1565 | "integrity": "sha512-qtyGk72ZJ3b3ifmz34l/z/X9EpKuqgjTc76/wihMR8I71IdhDIpIPsx/CgKlkA9oLesc8mryW+zulGr8RtEkJQ==", 1566 | "license": "MIT", 1567 | "dependencies": { 1568 | "@react-email/render": "1.0.1" 1569 | }, 1570 | "engines": { 1571 | "node": ">=18" 1572 | } 1573 | }, 1574 | "node_modules/resolve": { 1575 | "version": "1.22.8", 1576 | "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.8.tgz", 1577 | "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", 1578 | "dev": true, 1579 | "dependencies": { 1580 | "is-core-module": "^2.13.0", 1581 | "path-parse": "^1.0.7", 1582 | "supports-preserve-symlinks-flag": "^1.0.0" 1583 | }, 1584 | "bin": { 1585 | "resolve": "bin/resolve" 1586 | }, 1587 | "funding": { 1588 | "url": "https://github.com/sponsors/ljharb" 1589 | } 1590 | }, 1591 | "node_modules/resolve.exports": { 1592 | "version": "2.0.2", 1593 | "resolved": "https://registry.npmmirror.com/resolve.exports/-/resolve.exports-2.0.2.tgz", 1594 | "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", 1595 | "dev": true, 1596 | "engines": { 1597 | "node": ">=10" 1598 | } 1599 | }, 1600 | "node_modules/resolve/node_modules/function-bind": { 1601 | "version": "1.1.2", 1602 | "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz", 1603 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 1604 | "dev": true, 1605 | "funding": { 1606 | "url": "https://github.com/sponsors/ljharb" 1607 | } 1608 | }, 1609 | "node_modules/resolve/node_modules/hasown": { 1610 | "version": "2.0.2", 1611 | "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz", 1612 | "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 1613 | "dev": true, 1614 | "dependencies": { 1615 | "function-bind": "^1.1.2" 1616 | }, 1617 | "engines": { 1618 | "node": ">= 0.4" 1619 | } 1620 | }, 1621 | "node_modules/resolve/node_modules/is-core-module": { 1622 | "version": "2.13.1", 1623 | "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.13.1.tgz", 1624 | "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", 1625 | "dev": true, 1626 | "dependencies": { 1627 | "hasown": "^2.0.0" 1628 | }, 1629 | "funding": { 1630 | "url": "https://github.com/sponsors/ljharb" 1631 | } 1632 | }, 1633 | "node_modules/resolve/node_modules/path-parse": { 1634 | "version": "1.0.7", 1635 | "resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz", 1636 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1637 | "dev": true 1638 | }, 1639 | "node_modules/resolve/node_modules/supports-preserve-symlinks-flag": { 1640 | "version": "1.0.0", 1641 | "resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 1642 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 1643 | "dev": true, 1644 | "engines": { 1645 | "node": ">= 0.4" 1646 | }, 1647 | "funding": { 1648 | "url": "https://github.com/sponsors/ljharb" 1649 | } 1650 | }, 1651 | "node_modules/scheduler": { 1652 | "version": "0.23.2", 1653 | "resolved": "https://registry.npmmirror.com/scheduler/-/scheduler-0.23.2.tgz", 1654 | "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", 1655 | "license": "MIT", 1656 | "peer": true, 1657 | "dependencies": { 1658 | "loose-envify": "^1.1.0" 1659 | } 1660 | }, 1661 | "node_modules/selderee": { 1662 | "version": "0.11.0", 1663 | "resolved": "https://registry.npmmirror.com/selderee/-/selderee-0.11.0.tgz", 1664 | "integrity": "sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==", 1665 | "license": "MIT", 1666 | "dependencies": { 1667 | "parseley": "^0.12.0" 1668 | }, 1669 | "funding": { 1670 | "url": "https://ko-fi.com/killymxi" 1671 | } 1672 | }, 1673 | "node_modules/selfsigned": { 1674 | "version": "2.4.1", 1675 | "resolved": "https://registry.npmmirror.com/selfsigned/-/selfsigned-2.4.1.tgz", 1676 | "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", 1677 | "dev": true, 1678 | "dependencies": { 1679 | "@types/node-forge": "^1.3.0", 1680 | "node-forge": "^1" 1681 | }, 1682 | "engines": { 1683 | "node": ">=10" 1684 | } 1685 | }, 1686 | "node_modules/selfsigned/node_modules/@types/node": { 1687 | "version": "20.8.3", 1688 | "resolved": "https://registry.npmmirror.com/@types/node/-/node-20.8.3.tgz", 1689 | "integrity": "sha512-jxiZQFpb+NlH5kjW49vXxvxTjeeqlbsnTAdBTKpzEdPs9itay7MscYXz3Fo9VYFEsfQ6LJFitHad3faerLAjCw==", 1690 | "dev": true 1691 | }, 1692 | "node_modules/selfsigned/node_modules/@types/node-forge": { 1693 | "version": "1.3.11", 1694 | "resolved": "https://registry.npmmirror.com/@types/node-forge/-/node-forge-1.3.11.tgz", 1695 | "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", 1696 | "dev": true, 1697 | "dependencies": { 1698 | "@types/node": "*" 1699 | } 1700 | }, 1701 | "node_modules/selfsigned/node_modules/node-forge": { 1702 | "version": "1.3.1", 1703 | "resolved": "https://registry.npmmirror.com/node-forge/-/node-forge-1.3.1.tgz", 1704 | "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", 1705 | "dev": true, 1706 | "engines": { 1707 | "node": ">= 6.13.0" 1708 | } 1709 | }, 1710 | "node_modules/semver": { 1711 | "version": "7.6.3", 1712 | "resolved": "https://registry.npmmirror.com/semver/-/semver-7.6.3.tgz", 1713 | "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", 1714 | "license": "ISC", 1715 | "bin": { 1716 | "semver": "bin/semver.js" 1717 | }, 1718 | "engines": { 1719 | "node": ">=10" 1720 | } 1721 | }, 1722 | "node_modules/shebang-command": { 1723 | "version": "2.0.0", 1724 | "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", 1725 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 1726 | "license": "MIT", 1727 | "dependencies": { 1728 | "shebang-regex": "^3.0.0" 1729 | }, 1730 | "engines": { 1731 | "node": ">=8" 1732 | } 1733 | }, 1734 | "node_modules/shebang-regex": { 1735 | "version": "3.0.0", 1736 | "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz", 1737 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 1738 | "license": "MIT", 1739 | "engines": { 1740 | "node": ">=8" 1741 | } 1742 | }, 1743 | "node_modules/signal-exit": { 1744 | "version": "4.1.0", 1745 | "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-4.1.0.tgz", 1746 | "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", 1747 | "license": "ISC", 1748 | "engines": { 1749 | "node": ">=14" 1750 | }, 1751 | "funding": { 1752 | "url": "https://github.com/sponsors/isaacs" 1753 | } 1754 | }, 1755 | "node_modules/source-map": { 1756 | "version": "0.6.1", 1757 | "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", 1758 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1759 | "dev": true, 1760 | "license": "BSD-3-Clause", 1761 | "engines": { 1762 | "node": ">=0.10.0" 1763 | } 1764 | }, 1765 | "node_modules/stacktracey": { 1766 | "version": "2.1.8", 1767 | "resolved": "https://registry.npmmirror.com/stacktracey/-/stacktracey-2.1.8.tgz", 1768 | "integrity": "sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==", 1769 | "dev": true, 1770 | "license": "Unlicense", 1771 | "dependencies": { 1772 | "as-table": "^1.0.36", 1773 | "get-source": "^2.0.12" 1774 | } 1775 | }, 1776 | "node_modules/stoppable": { 1777 | "version": "1.1.0", 1778 | "resolved": "https://registry.npmmirror.com/stoppable/-/stoppable-1.1.0.tgz", 1779 | "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", 1780 | "dev": true, 1781 | "license": "MIT", 1782 | "engines": { 1783 | "node": ">=4", 1784 | "npm": ">=6" 1785 | } 1786 | }, 1787 | "node_modules/string-width": { 1788 | "version": "5.1.2", 1789 | "resolved": "https://registry.npmmirror.com/string-width/-/string-width-5.1.2.tgz", 1790 | "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", 1791 | "license": "MIT", 1792 | "dependencies": { 1793 | "eastasianwidth": "^0.2.0", 1794 | "emoji-regex": "^9.2.2", 1795 | "strip-ansi": "^7.0.1" 1796 | }, 1797 | "engines": { 1798 | "node": ">=12" 1799 | }, 1800 | "funding": { 1801 | "url": "https://github.com/sponsors/sindresorhus" 1802 | } 1803 | }, 1804 | "node_modules/string-width-cjs": { 1805 | "name": "string-width", 1806 | "version": "4.2.3", 1807 | "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", 1808 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1809 | "license": "MIT", 1810 | "dependencies": { 1811 | "emoji-regex": "^8.0.0", 1812 | "is-fullwidth-code-point": "^3.0.0", 1813 | "strip-ansi": "^6.0.1" 1814 | }, 1815 | "engines": { 1816 | "node": ">=8" 1817 | } 1818 | }, 1819 | "node_modules/string-width-cjs/node_modules/ansi-regex": { 1820 | "version": "5.0.1", 1821 | "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", 1822 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1823 | "license": "MIT", 1824 | "engines": { 1825 | "node": ">=8" 1826 | } 1827 | }, 1828 | "node_modules/string-width-cjs/node_modules/emoji-regex": { 1829 | "version": "8.0.0", 1830 | "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", 1831 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 1832 | "license": "MIT" 1833 | }, 1834 | "node_modules/string-width-cjs/node_modules/strip-ansi": { 1835 | "version": "6.0.1", 1836 | "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", 1837 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1838 | "license": "MIT", 1839 | "dependencies": { 1840 | "ansi-regex": "^5.0.1" 1841 | }, 1842 | "engines": { 1843 | "node": ">=8" 1844 | } 1845 | }, 1846 | "node_modules/strip-ansi": { 1847 | "version": "7.1.0", 1848 | "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.0.tgz", 1849 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 1850 | "license": "MIT", 1851 | "dependencies": { 1852 | "ansi-regex": "^6.0.1" 1853 | }, 1854 | "engines": { 1855 | "node": ">=12" 1856 | }, 1857 | "funding": { 1858 | "url": "https://github.com/chalk/strip-ansi?sponsor=1" 1859 | } 1860 | }, 1861 | "node_modules/strip-ansi-cjs": { 1862 | "name": "strip-ansi", 1863 | "version": "6.0.1", 1864 | "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", 1865 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1866 | "license": "MIT", 1867 | "dependencies": { 1868 | "ansi-regex": "^5.0.1" 1869 | }, 1870 | "engines": { 1871 | "node": ">=8" 1872 | } 1873 | }, 1874 | "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { 1875 | "version": "5.0.1", 1876 | "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", 1877 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1878 | "license": "MIT", 1879 | "engines": { 1880 | "node": ">=8" 1881 | } 1882 | }, 1883 | "node_modules/tslib": { 1884 | "version": "2.8.1", 1885 | "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz", 1886 | "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", 1887 | "dev": true, 1888 | "license": "0BSD" 1889 | }, 1890 | "node_modules/typescript": { 1891 | "version": "5.6.3", 1892 | "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.6.3.tgz", 1893 | "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", 1894 | "dev": true, 1895 | "license": "Apache-2.0", 1896 | "bin": { 1897 | "tsc": "bin/tsc", 1898 | "tsserver": "bin/tsserver" 1899 | }, 1900 | "engines": { 1901 | "node": ">=14.17" 1902 | } 1903 | }, 1904 | "node_modules/ufo": { 1905 | "version": "1.5.4", 1906 | "resolved": "https://registry.npmmirror.com/ufo/-/ufo-1.5.4.tgz", 1907 | "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==", 1908 | "dev": true, 1909 | "license": "MIT" 1910 | }, 1911 | "node_modules/undici": { 1912 | "version": "5.28.4", 1913 | "resolved": "https://registry.npmmirror.com/undici/-/undici-5.28.4.tgz", 1914 | "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", 1915 | "dev": true, 1916 | "license": "MIT", 1917 | "dependencies": { 1918 | "@fastify/busboy": "^2.0.0" 1919 | }, 1920 | "engines": { 1921 | "node": ">=14.0" 1922 | } 1923 | }, 1924 | "node_modules/unenv": { 1925 | "name": "unenv-nightly", 1926 | "version": "2.0.0-20241024-111401-d4156ac", 1927 | "resolved": "https://registry.npmmirror.com/unenv-nightly/-/unenv-nightly-2.0.0-20241024-111401-d4156ac.tgz", 1928 | "integrity": "sha512-xJO1hfY+Te+/XnfCYrCbFbRcgu6XEODND1s5wnVbaBCkuQX7JXF7fHEXPrukFE2j8EOH848P8QN19VO47XN8hw==", 1929 | "dev": true, 1930 | "license": "MIT", 1931 | "dependencies": { 1932 | "defu": "^6.1.4", 1933 | "ohash": "^1.1.4", 1934 | "pathe": "^1.1.2", 1935 | "ufo": "^1.5.4" 1936 | } 1937 | }, 1938 | "node_modules/which": { 1939 | "version": "2.0.2", 1940 | "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", 1941 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1942 | "license": "ISC", 1943 | "dependencies": { 1944 | "isexe": "^2.0.0" 1945 | }, 1946 | "bin": { 1947 | "node-which": "bin/node-which" 1948 | }, 1949 | "engines": { 1950 | "node": ">= 8" 1951 | } 1952 | }, 1953 | "node_modules/workerd": { 1954 | "version": "1.20241106.1", 1955 | "resolved": "https://registry.npmmirror.com/workerd/-/workerd-1.20241106.1.tgz", 1956 | "integrity": "sha512-1GdKl0kDw8rrirr/ThcK66Kbl4/jd4h8uHx5g7YHBrnenY5SX1UPuop2cnCzYUxlg55kPjzIqqYslz1muRFgFw==", 1957 | "dev": true, 1958 | "hasInstallScript": true, 1959 | "license": "Apache-2.0", 1960 | "bin": { 1961 | "workerd": "bin/workerd" 1962 | }, 1963 | "engines": { 1964 | "node": ">=16" 1965 | }, 1966 | "optionalDependencies": { 1967 | "@cloudflare/workerd-darwin-64": "1.20241106.1", 1968 | "@cloudflare/workerd-darwin-arm64": "1.20241106.1", 1969 | "@cloudflare/workerd-linux-64": "1.20241106.1", 1970 | "@cloudflare/workerd-linux-arm64": "1.20241106.1", 1971 | "@cloudflare/workerd-windows-64": "1.20241106.1" 1972 | } 1973 | }, 1974 | "node_modules/wrangler": { 1975 | "version": "3.87.0", 1976 | "resolved": "https://registry.npmmirror.com/wrangler/-/wrangler-3.87.0.tgz", 1977 | "integrity": "sha512-BExktnSLeGgG+uxgnr4h9eZ5nefdpTVcTHR+gEIWRvqk07XL04nJwpPYAOIPKPpB7E2tMdDJgNLGQN/CY6e1xQ==", 1978 | "dev": true, 1979 | "license": "MIT OR Apache-2.0", 1980 | "dependencies": { 1981 | "@cloudflare/kv-asset-handler": "0.3.4", 1982 | "@cloudflare/workers-shared": "0.7.1", 1983 | "@esbuild-plugins/node-globals-polyfill": "^0.2.3", 1984 | "@esbuild-plugins/node-modules-polyfill": "^0.2.2", 1985 | "blake3-wasm": "^2.1.5", 1986 | "chokidar": "^4.0.1", 1987 | "date-fns": "^4.1.0", 1988 | "esbuild": "0.17.19", 1989 | "itty-time": "^1.0.6", 1990 | "miniflare": "3.20241106.0", 1991 | "nanoid": "^3.3.3", 1992 | "path-to-regexp": "^6.3.0", 1993 | "resolve": "^1.22.8", 1994 | "resolve.exports": "^2.0.2", 1995 | "selfsigned": "^2.0.1", 1996 | "source-map": "^0.6.1", 1997 | "unenv": "npm:unenv-nightly@2.0.0-20241024-111401-d4156ac", 1998 | "workerd": "1.20241106.1", 1999 | "xxhash-wasm": "^1.0.1" 2000 | }, 2001 | "bin": { 2002 | "wrangler": "bin/wrangler.js", 2003 | "wrangler2": "bin/wrangler.js" 2004 | }, 2005 | "engines": { 2006 | "node": ">=16.17.0" 2007 | }, 2008 | "optionalDependencies": { 2009 | "fsevents": "~2.3.2" 2010 | }, 2011 | "peerDependencies": { 2012 | "@cloudflare/workers-types": "^4.20241106.0" 2013 | }, 2014 | "peerDependenciesMeta": { 2015 | "@cloudflare/workers-types": { 2016 | "optional": true 2017 | } 2018 | } 2019 | }, 2020 | "node_modules/wrap-ansi": { 2021 | "version": "8.1.0", 2022 | "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz", 2023 | "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", 2024 | "license": "MIT", 2025 | "dependencies": { 2026 | "ansi-styles": "^6.1.0", 2027 | "string-width": "^5.0.1", 2028 | "strip-ansi": "^7.0.1" 2029 | }, 2030 | "engines": { 2031 | "node": ">=12" 2032 | }, 2033 | "funding": { 2034 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 2035 | } 2036 | }, 2037 | "node_modules/wrap-ansi-cjs": { 2038 | "name": "wrap-ansi", 2039 | "version": "7.0.0", 2040 | "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 2041 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 2042 | "license": "MIT", 2043 | "dependencies": { 2044 | "ansi-styles": "^4.0.0", 2045 | "string-width": "^4.1.0", 2046 | "strip-ansi": "^6.0.0" 2047 | }, 2048 | "engines": { 2049 | "node": ">=10" 2050 | }, 2051 | "funding": { 2052 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 2053 | } 2054 | }, 2055 | "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { 2056 | "version": "5.0.1", 2057 | "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", 2058 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 2059 | "license": "MIT", 2060 | "engines": { 2061 | "node": ">=8" 2062 | } 2063 | }, 2064 | "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { 2065 | "version": "4.3.0", 2066 | "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", 2067 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2068 | "license": "MIT", 2069 | "dependencies": { 2070 | "color-convert": "^2.0.1" 2071 | }, 2072 | "engines": { 2073 | "node": ">=8" 2074 | }, 2075 | "funding": { 2076 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 2077 | } 2078 | }, 2079 | "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { 2080 | "version": "8.0.0", 2081 | "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", 2082 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 2083 | "license": "MIT" 2084 | }, 2085 | "node_modules/wrap-ansi-cjs/node_modules/string-width": { 2086 | "version": "4.2.3", 2087 | "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", 2088 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 2089 | "license": "MIT", 2090 | "dependencies": { 2091 | "emoji-regex": "^8.0.0", 2092 | "is-fullwidth-code-point": "^3.0.0", 2093 | "strip-ansi": "^6.0.1" 2094 | }, 2095 | "engines": { 2096 | "node": ">=8" 2097 | } 2098 | }, 2099 | "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { 2100 | "version": "6.0.1", 2101 | "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", 2102 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2103 | "license": "MIT", 2104 | "dependencies": { 2105 | "ansi-regex": "^5.0.1" 2106 | }, 2107 | "engines": { 2108 | "node": ">=8" 2109 | } 2110 | }, 2111 | "node_modules/ws": { 2112 | "version": "8.18.0", 2113 | "resolved": "https://registry.npmmirror.com/ws/-/ws-8.18.0.tgz", 2114 | "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", 2115 | "dev": true, 2116 | "license": "MIT", 2117 | "engines": { 2118 | "node": ">=10.0.0" 2119 | }, 2120 | "peerDependencies": { 2121 | "bufferutil": "^4.0.1", 2122 | "utf-8-validate": ">=5.0.2" 2123 | }, 2124 | "peerDependenciesMeta": { 2125 | "bufferutil": { 2126 | "optional": true 2127 | }, 2128 | "utf-8-validate": { 2129 | "optional": true 2130 | } 2131 | } 2132 | }, 2133 | "node_modules/xxhash-wasm": { 2134 | "version": "1.0.2", 2135 | "resolved": "https://registry.npmmirror.com/xxhash-wasm/-/xxhash-wasm-1.0.2.tgz", 2136 | "integrity": "sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A==", 2137 | "dev": true 2138 | }, 2139 | "node_modules/youch": { 2140 | "version": "3.3.4", 2141 | "resolved": "https://registry.npmmirror.com/youch/-/youch-3.3.4.tgz", 2142 | "integrity": "sha512-UeVBXie8cA35DS6+nBkls68xaBBXCye0CNznrhszZjTbRVnJKQuNsyLKBTTL4ln1o1rh2PKtv35twV7irj5SEg==", 2143 | "dev": true, 2144 | "license": "MIT", 2145 | "dependencies": { 2146 | "cookie": "^0.7.1", 2147 | "mustache": "^4.2.0", 2148 | "stacktracey": "^2.1.8" 2149 | } 2150 | }, 2151 | "node_modules/zod": { 2152 | "version": "3.23.8", 2153 | "resolved": "https://registry.npmmirror.com/zod/-/zod-3.23.8.tgz", 2154 | "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", 2155 | "dev": true, 2156 | "license": "MIT", 2157 | "funding": { 2158 | "url": "https://github.com/sponsors/colinhacks" 2159 | } 2160 | } 2161 | } 2162 | } 2163 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "email-sender", 3 | "version": "0.0.0", 4 | "private": true, 5 | "scripts": { 6 | "deploy": "wrangler deploy --minify", 7 | "dev": "wrangler dev", 8 | "start": "wrangler dev" 9 | }, 10 | "devDependencies": { 11 | "@cloudflare/workers-types": "^4.20241112.0", 12 | "typescript": "^5.6.3", 13 | "wrangler": "^3.87.0" 14 | }, 15 | "dependencies": { 16 | "hono": "^4.6.10", 17 | "resend": "4.0.1-alpha.0" 18 | }, 19 | "overrides": { 20 | "@types/node": "20.8.3" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/bindings.d.ts: -------------------------------------------------------------------------------- 1 | export type Bindings = { 2 | ACCESS_TOKEN: string; 3 | SENDER_EMAIL: string; 4 | SENDER_NAME: string; 5 | RESEND_APIKEY: string; 6 | }; 7 | 8 | declare global { 9 | function getMiniflareBindings(): Bindings; 10 | } 11 | -------------------------------------------------------------------------------- /src/email.ts: -------------------------------------------------------------------------------- 1 | import { Bindings } from './bindings'; 2 | import { Resend } from 'resend'; 3 | 4 | export async function send(env: Bindings, to: string, title: string, content: string, type: string = 'text/html') { 5 | const resend = new Resend(env.RESEND_APIKEY); 6 | if ('text/html' === type) { 7 | const { data, error } = await resend.emails.send({ 8 | from: `${env.SENDER_NAME} <${env.SENDER_EMAIL}>`, 9 | to: to, 10 | subject: title, 11 | html: content, 12 | }); 13 | return Response.json({ data, error }); 14 | } else if ('text/plain' === type) { 15 | const { data, error } = await resend.emails.send({ 16 | from: `${env.SENDER_NAME} <${env.SENDER_EMAIL}>`, 17 | to: to, 18 | subject: title, 19 | text: content, 20 | }); 21 | return Response.json({ data, error }); 22 | } else { 23 | throw new Error(`type: ${type} not support!`); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { Hono } from 'hono'; 2 | import { Bindings } from './bindings'; 3 | import { bearerAuth } from 'hono/bearer-auth'; 4 | import { send } from './email'; 5 | import { activation } from './template'; 6 | 7 | const app = new Hono<{ Bindings: Bindings }>().basePath('/v1'); 8 | 9 | app.use( 10 | '/*', 11 | bearerAuth({ 12 | verifyToken: async (token, c) => { 13 | return token === c.env.ACCESS_TOKEN; 14 | }, 15 | }) 16 | ); 17 | 18 | app.post('/send', async (c) => { 19 | const body = await c.req.json(); 20 | const resp = await send(c.env, body.to, body.title, body.content, body.type); 21 | return resp; 22 | }); 23 | 24 | app.post('/send/activation', async (c) => { 25 | const body = await c.req.json(); 26 | const resp = await send( 27 | c.env, 28 | body.to, 29 | body.title, 30 | activation(body.site_name, `${body.name}`, `${body.url}`) 31 | ); 32 | return resp; 33 | }); 34 | 35 | export default { 36 | fetch: app.fetch, 37 | }; 38 | -------------------------------------------------------------------------------- /src/template.ts: -------------------------------------------------------------------------------- 1 | const activation_template = ` 2 | 3 | 4 | 5 | 6 | 7 | 8 | 激活您的账户 9 | 81 | 82 | 83 | 85 | 86 | 87 | 88 | 133 | 134 | 135 |
89 |
90 | 91 | 92 | 93 | 94 | 95 | 122 | 123 |
激活{siteTitle}账户
96 | 98 | 99 | 102 | 103 | 104 | 107 | 108 | 109 | 114 | 115 | 116 | 119 | 120 |
100 | 亲爱的{userName}: 101 |
感谢您注册{siteTitle},请点击下方按钮完成账户激活。
激活账户 113 |
感谢您选择{siteTitle}。
121 |
124 | 131 |
132 |
136 | 137 | `; 138 | 139 | export const activation = (siteTitle:string, userName:string, activationUrl:string) => { 140 | return activation_template 141 | .replace(/\{siteTitle\}/g, siteTitle) 142 | .replace(/\{userName\}/g, userName) 143 | .replace(/\{activationUrl\}/g, activationUrl); 144 | }; 145 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ESNext", 4 | "module": "ESNext", 5 | "moduleResolution": "Bundler", 6 | "strict": true, 7 | "lib": ["ESNext"], 8 | "types": ["@cloudflare/workers-types"], 9 | "jsx": "react-jsx", 10 | "jsxImportSource": "hono/jsx" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /wrangler.toml: -------------------------------------------------------------------------------- 1 | #:schema node_modules/wrangler/config-schema.json 2 | name = "email-sender" 3 | main = "src/index.ts" 4 | compatibility_date = "2024-04-05" 5 | 6 | dev.host = "127.0.0.1" 7 | dev.port = 8787 8 | 9 | [vars] 10 | # 自定义域名的发信邮件地址 11 | # SENDER_EMAIL = "do-not-replay@example.com" 12 | # 发信人简称/名字 13 | # SENDER_NAME = "Example" 14 | --------------------------------------------------------------------------------