From f18ac575f30ff927bb5dce6f33f1708810c578b5 Mon Sep 17 00:00:00 2001 From: "Kieran Klukas - kierank@Glaedrs-Nest.local" <92754843+kcoderhtml@users.noreply.github.com> Date: Mon, 9 Oct 2023 13:17:55 -0400 Subject: [PATCH 01/10] Update deploy script to use "wrangler deploy" instead of "wrangler publish" --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 86c731d..d1e8380 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.0.0", "private": true, "scripts": { - "deploy": "wrangler publish --env production", + "deploy": "wrangler deploy --env production", "start": "wrangler dev" }, "devDependencies": { From f30b5a31260d18a543000d0454c384e9f43b1307 Mon Sep 17 00:00:00 2001 From: Kieran Klukas <92754843+kcoderhtml@users.noreply.github.com> Date: Sat, 27 Apr 2024 12:47:49 -0400 Subject: [PATCH 02/10] chore: migrate to bun --- bun.lockb | Bin 0 -> 51147 bytes package-lock.json | 1702 --------------------------------------------- 2 files changed, 1702 deletions(-) create mode 100755 bun.lockb delete mode 100644 package-lock.json diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..391b4026f4514602e68a6352a17b3df1aad40857 GIT binary patch literal 51147 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 dda0FY&>!w80@n|5VEgg52=16" - } - }, - "node_modules/@cloudflare/workerd-darwin-arm64": { - "version": "1.20230518.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20230518.0.tgz", - "integrity": "sha512-1l+xdbmPddqb2YIHd1YJ3YG/Fl1nhayzcxfL30xfNS89zJn9Xn3JomM0XMD4mk0d5GruBP3q8BQZ1Uo4rRLF3A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=16" - } - }, - "node_modules/@cloudflare/workerd-linux-64": { - "version": "1.20230518.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20230518.0.tgz", - "integrity": "sha512-/pfR+YBpMOPr2cAlwjtInil0hRZjD8KX9LqK9JkfkEiaBH8CYhnJQcOdNHZI+3OjcY09JnQtEVC5xC4nbW7Bvw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16" - } - }, - "node_modules/@cloudflare/workerd-linux-arm64": { - "version": "1.20230518.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20230518.0.tgz", - "integrity": "sha512-q3HQvn3J4uEkE0cfDAGG8zqzSZrD47cavB/Tzv4mNutqwg6B4wL3ifjtGeB55tnP2K2KL0GVmX4tObcvpUF4BA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16" - } - }, - "node_modules/@cloudflare/workerd-windows-64": { - "version": "1.20230518.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20230518.0.tgz", - "integrity": "sha512-vNEHKS5gKKduNOBYtQjcBopAmFT1iScuPWMZa2nJboSjOB9I/5oiVsUpSyk5Y2ARyrohXNz0y8D7p87YzTASWw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=16" - } - }, - "node_modules/@cloudflare/workers-types": { - "version": "4.20230518.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-4.20230518.0.tgz", - "integrity": "sha512-A0w1V+5SUawGaaPRlhFhSC/SCDT9oQG8TMoWOKFLA4qbqagELqEAFD4KySBIkeVOvCBLT1DZSYBMCxbXddl0kw==", - "dev": true - }, - "node_modules/@esbuild-plugins/node-globals-polyfill": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.1.1.tgz", - "integrity": "sha512-MR0oAA+mlnJWrt1RQVQ+4VYuRJW/P2YmRTv1AsplObyvuBMnPHiizUF95HHYiSsMGLhyGtWufaq2XQg6+iurBg==", - "dev": true, - "peerDependencies": { - "esbuild": "*" - } - }, - "node_modules/@esbuild-plugins/node-modules-polyfill": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-modules-polyfill/-/node-modules-polyfill-0.1.4.tgz", - "integrity": "sha512-uZbcXi0zbmKC/050p3gJnne5Qdzw8vkXIv+c2BW0Lsc1ji1SkrxbKPUy5Efr0blbTu1SL8w4eyfpnSdPg3G0Qg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^4.0.0", - "rollup-plugin-node-polyfills": "^0.2.1" - }, - "peerDependencies": { - "esbuild": "*" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.3.tgz", - "integrity": "sha512-mueuEoh+s1eRbSJqq9KNBQwI4QhQV6sRXIfTyLXSHGMpyew61rOK4qY21uKbXl1iBoMb0AdL1deWFCQVlN2qHA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.3.tgz", - "integrity": "sha512-RolFVeinkeraDvN/OoRf1F/lP0KUfGNb5jxy/vkIMeRRChkrX/HTYN6TYZosRJs3a1+8wqpxAo5PI5hFmxyPRg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.3.tgz", - "integrity": "sha512-SFpTUcIT1bIJuCCBMCQWq1bL2gPTjWoLZdjmIhjdcQHaUfV41OQfho6Ici5uvvkMmZRXIUGpM3GxysP/EU7ifQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.3.tgz", - "integrity": "sha512-DO8WykMyB+N9mIDfI/Hug70Dk1KipavlGAecxS3jDUwAbTpDXj0Lcwzw9svkhxfpCagDmpaTMgxWK8/C/XcXvw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.3.tgz", - "integrity": "sha512-uEqZQ2omc6BvWqdCiyZ5+XmxuHEi1SPzpVxXCSSV2+Sh7sbXbpeNhHIeFrIpRjAs0lI1FmA1iIOxFozKBhKgRQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.3.tgz", - "integrity": "sha512-nJansp3sSXakNkOD5i5mIz2Is/HjzIhFs49b1tjrPrpCmwgBmH9SSzhC/Z1UqlkivqMYkhfPwMw1dGFUuwmXhw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.3.tgz", - "integrity": "sha512-TfoDzLw+QHfc4a8aKtGSQ96Wa+6eimljjkq9HKR0rHlU83vw8aldMOUSJTUDxbcUdcgnJzPaX8/vGWm7vyV7ug==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.3.tgz", - "integrity": "sha512-VwswmSYwVAAq6LysV59Fyqk3UIjbhuc6wb3vEcJ7HEJUtFuLK9uXWuFoH1lulEbE4+5GjtHi3MHX+w1gNHdOWQ==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.3.tgz", - "integrity": "sha512-7I3RlsnxEFCHVZNBLb2w7unamgZ5sVwO0/ikE2GaYvYuUQs9Qte/w7TqWcXHtCwxvZx/2+F97ndiUQAWs47ZfQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.3.tgz", - "integrity": "sha512-X8FDDxM9cqda2rJE+iblQhIMYY49LfvW4kaEjoFbTTQ4Go8G96Smj2w3BRTwA8IHGoi9dPOPGAX63dhuv19UqA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.3.tgz", - "integrity": "sha512-hIbeejCOyO0X9ujfIIOKjBjNAs9XD/YdJ9JXAy1lHA+8UXuOqbFe4ErMCqMr8dhlMGBuvcQYGF7+kO7waj2KHw==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.3.tgz", - "integrity": "sha512-znFRzICT/V8VZQMt6rjb21MtAVJv/3dmKRMlohlShrbVXdBuOdDrGb+C2cZGQAR8RFyRe7HS6klmHq103WpmVw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.3.tgz", - "integrity": "sha512-EV7LuEybxhXrVTDpbqWF2yehYRNz5e5p+u3oQUS2+ZFpknyi1NXxr8URk4ykR8Efm7iu04//4sBg249yNOwy5Q==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.3.tgz", - "integrity": "sha512-uDxqFOcLzFIJ+r/pkTTSE9lsCEaV/Y6rMlQjUI9BkzASEChYL/aSQjZjchtEmdnVxDKETnUAmsaZ4pqK1eE5BQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.3.tgz", - "integrity": "sha512-NbeREhzSxYwFhnCAQOQZmajsPYtX71Ufej3IQ8W2Gxskfz9DK58ENEju4SbpIj48VenktRASC52N5Fhyf/aliQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.3.tgz", - "integrity": "sha512-SDiG0nCixYO9JgpehoKgScwic7vXXndfasjnD5DLbp1xltANzqZ425l7LSdHynt19UWOcDjG9wJJzSElsPvk0w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.3.tgz", - "integrity": "sha512-AzbsJqiHEq1I/tUvOfAzCY15h4/7Ivp3ff/o1GpP16n48JMNAtbW0qui2WCgoIZArEHD0SUQ95gvR0oSO7ZbdA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.3.tgz", - "integrity": "sha512-gSABi8qHl8k3Cbi/4toAzHiykuBuWLZs43JomTcXkjMZVkp0gj3gg9mO+9HJW/8GB5H89RX/V0QP4JGL7YEEVg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.3.tgz", - "integrity": "sha512-SF9Kch5Ete4reovvRO6yNjMxrvlfT0F0Flm+NPoUw5Z4Q3r1d23LFTgaLwm3Cp0iGbrU/MoUI+ZqwCv5XJijCw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.3.tgz", - "integrity": "sha512-u5aBonZIyGopAZyOnoPAA6fGsDeHByZ9CnEzyML9NqntK6D/xl5jteZUKm/p6nD09+v3pTM6TuUIqSPcChk5gg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.3.tgz", - "integrity": "sha512-GlgVq1WpvOEhNioh74TKelwla9KDuAaLZrdxuuUgsP2vayxeLgVc+rbpIv0IYF4+tlIzq2vRhofV+KGLD+37EQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.3.tgz", - "integrity": "sha512-5/JuTd8OWW8UzEtyf19fbrtMJENza+C9JoPIkvItgTBQ1FO2ZLvjbPO6Xs54vk0s5JB5QsfieUEshRQfu7ZHow==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/as-table": { - "version": "1.0.55", - "resolved": "https://registry.npmjs.org/as-table/-/as-table-1.0.55.tgz", - "integrity": "sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==", - "dev": true, - "dependencies": { - "printable-characters": "^1.0.42" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/better-sqlite3": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-8.4.0.tgz", - "integrity": "sha512-NmsNW1CQvqMszu/CFAJ3pLct6NEFlNfuGM6vw72KHkjOD1UDnL96XNN1BMQc1hiHo8vE2GbOWQYIpZ+YM5wrZw==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "bindings": "^1.5.0", - "prebuild-install": "^7.1.0" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/blake3-wasm": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz", - "integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==", - "dev": true - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dev": true, - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, - "node_modules/capnp-ts": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/capnp-ts/-/capnp-ts-0.7.0.tgz", - "integrity": "sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==", - "dev": true, - "dependencies": { - "debug": "^4.3.1", - "tslib": "^2.2.0" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/data-uri-to-buffer": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-2.0.2.tgz", - "integrity": "sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/detect-libc": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", - "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/esbuild": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.3.tgz", - "integrity": "sha512-71f7EjPWTiSguen8X/kxEpkAS7BFHwtQKisCDDV3Y4GLGWBaoSCyD5uXkaUew6JDzA9FEN1W23mdnSwW9kqCeg==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.16.3", - "@esbuild/android-arm64": "0.16.3", - "@esbuild/android-x64": "0.16.3", - "@esbuild/darwin-arm64": "0.16.3", - "@esbuild/darwin-x64": "0.16.3", - "@esbuild/freebsd-arm64": "0.16.3", - "@esbuild/freebsd-x64": "0.16.3", - "@esbuild/linux-arm": "0.16.3", - "@esbuild/linux-arm64": "0.16.3", - "@esbuild/linux-ia32": "0.16.3", - "@esbuild/linux-loong64": "0.16.3", - "@esbuild/linux-mips64el": "0.16.3", - "@esbuild/linux-ppc64": "0.16.3", - "@esbuild/linux-riscv64": "0.16.3", - "@esbuild/linux-s390x": "0.16.3", - "@esbuild/linux-x64": "0.16.3", - "@esbuild/netbsd-x64": "0.16.3", - "@esbuild/openbsd-x64": "0.16.3", - "@esbuild/sunos-x64": "0.16.3", - "@esbuild/win32-arm64": "0.16.3", - "@esbuild/win32-ia32": "0.16.3", - "@esbuild/win32-x64": "0.16.3" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", - "dev": true - }, - "node_modules/exit-hook": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-2.2.1.tgz", - "integrity": "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/get-source": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/get-source/-/get-source-2.0.12.tgz", - "integrity": "sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==", - "dev": true, - "dependencies": { - "data-uri-to-buffer": "^2.0.0", - "source-map": "^0.6.1" - } - }, - "node_modules/get-source/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", - "dev": true - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/itty-router": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/itty-router/-/itty-router-4.0.9.tgz", - "integrity": "sha512-al8PIAJEWuWZcg4iwLcLiF7R9njsIQxrT27ik2Vfp1Mi5CBEVr1BDKbA1xpOyqkRbj9cCBQiTRpLIKnNO2YKlQ==", - "dev": true - }, - "node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.8" - } - }, - "node_modules/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/miniflare": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-3.0.1.tgz", - "integrity": "sha512-aLOB8d26lOTn493GOv1LmpGHVLSxmeT4MixPG/k3Ze10j0wDKnMj8wsFgbZ6Q4cr1N4faf8O3IbNRJuQ+rLoJA==", - "dev": true, - "dependencies": { - "acorn": "^8.8.0", - "acorn-walk": "^8.2.0", - "better-sqlite3": "^8.1.0", - "capnp-ts": "^0.7.0", - "exit-hook": "^2.2.1", - "glob-to-regexp": "^0.4.1", - "http-cache-semantics": "^4.1.0", - "kleur": "^4.1.5", - "source-map-support": "0.5.21", - "stoppable": "^1.1.0", - "undici": "^5.13.0", - "workerd": "^1.20230512.0", - "ws": "^8.11.0", - "youch": "^3.2.2", - "zod": "^3.20.6" - }, - "engines": { - "node": ">=16.13" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/mustache": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", - "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", - "dev": true, - "bin": { - "mustache": "bin/mustache" - } - }, - "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", - "dev": true - }, - "node_modules/node-abi": { - "version": "3.45.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.45.0.tgz", - "integrity": "sha512-iwXuFrMAcFVi/ZoZiqq8BzAdsLw9kxDfTC0HMyjXfSL/6CSDAGD5UmR7azrAgWV1zKYq7dUUMj4owusBWKLsiQ==", - "dev": true, - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true, - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/path-to-regexp": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", - "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/prebuild-install": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", - "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", - "dev": true, - "dependencies": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/printable-characters": { - "version": "1.0.42", - "resolved": "https://registry.npmjs.org/printable-characters/-/printable-characters-1.0.42.tgz", - "integrity": "sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==", - "dev": true - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/rollup-plugin-inject": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz", - "integrity": "sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==", - "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject.", - "dev": true, - "dependencies": { - "estree-walker": "^0.6.1", - "magic-string": "^0.25.3", - "rollup-pluginutils": "^2.8.1" - } - }, - "node_modules/rollup-plugin-node-polyfills": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz", - "integrity": "sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==", - "dev": true, - "dependencies": { - "rollup-plugin-inject": "^3.0.0" - } - }, - "node_modules/rollup-pluginutils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", - "dev": true, - "dependencies": { - "estree-walker": "^0.6.1" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", - "dev": true, - "dependencies": { - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "deprecated": "Please use @jridgewell/sourcemap-codec instead", - "dev": true - }, - "node_modules/stacktracey": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/stacktracey/-/stacktracey-2.1.8.tgz", - "integrity": "sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==", - "dev": true, - "dependencies": { - "as-table": "^1.0.36", - "get-source": "^2.0.12" - } - }, - "node_modules/stoppable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", - "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", - "dev": true, - "engines": { - "node": ">=4", - "npm": ">=6" - } - }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dev": true, - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tslib": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", - "dev": true - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/typescript": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", - "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici": { - "version": "5.22.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.22.1.tgz", - "integrity": "sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==", - "dev": true, - "dependencies": { - "busboy": "^1.6.0" - }, - "engines": { - "node": ">=14.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/workerd": { - "version": "1.20230518.0", - "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20230518.0.tgz", - "integrity": "sha512-VNmK0zoNZXrwEEx77O/oQDVUzzyDjf5kKKK8bty+FmKCd5EQJCpqi8NlRKWLGMyyYrKm86MFz0kAsreTEs7HHA==", - "dev": true, - "hasInstallScript": true, - "bin": { - "workerd": "bin/workerd" - }, - "engines": { - "node": ">=16" - }, - "optionalDependencies": { - "@cloudflare/workerd-darwin-64": "1.20230518.0", - "@cloudflare/workerd-darwin-arm64": "1.20230518.0", - "@cloudflare/workerd-linux-64": "1.20230518.0", - "@cloudflare/workerd-linux-arm64": "1.20230518.0", - "@cloudflare/workerd-windows-64": "1.20230518.0" - } - }, - "node_modules/wrangler": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-3.1.0.tgz", - "integrity": "sha512-oqVBJZoOQqSKxhgaPt4LcmtBf0FssIz/4F1VgjWOomeGQ3kN9pg3swPO0Zkf0aAphDodG9rekjrtccvKW7bSsA==", - "dev": true, - "dependencies": { - "@cloudflare/kv-asset-handler": "^0.2.0", - "@esbuild-plugins/node-globals-polyfill": "^0.1.1", - "@esbuild-plugins/node-modules-polyfill": "^0.1.4", - "blake3-wasm": "^2.1.5", - "chokidar": "^3.5.3", - "esbuild": "0.16.3", - "miniflare": "^3.0.0", - "nanoid": "^3.3.3", - "path-to-regexp": "^6.2.0", - "selfsigned": "^2.0.1", - "source-map": "^0.7.4", - "xxhash-wasm": "^1.0.1" - }, - "bin": { - "wrangler": "bin/wrangler.js", - "wrangler2": "bin/wrangler.js" - }, - "engines": { - "node": ">=16.13.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xxhash-wasm": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.0.2.tgz", - "integrity": "sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A==", - "dev": true - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/youch": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/youch/-/youch-3.2.3.tgz", - "integrity": "sha512-ZBcWz/uzZaQVdCvfV4uk616Bbpf2ee+F/AvuKDR5EwX/Y4v06xWdtMluqTD7+KlZdM93lLm9gMZYo0sKBS0pgw==", - "dev": true, - "dependencies": { - "cookie": "^0.5.0", - "mustache": "^4.2.0", - "stacktracey": "^2.1.8" - } - }, - "node_modules/zod": { - "version": "3.21.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz", - "integrity": "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - } - } -} From bd4da102bdfb6c9e4e855f7a6d037c4de1862cea Mon Sep 17 00:00:00 2001 From: Kieran Klukas <92754843+kcoderhtml@users.noreply.github.com> Date: Sat, 27 Apr 2024 13:23:07 -0400 Subject: [PATCH 03/10] feat: add initial DKIM configuration to email sending --- src/controllers/email.ts | 15 +++++++++++++-- src/main.ts | 4 ++-- worker-configuration.d.ts | 3 +++ 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/controllers/email.ts b/src/controllers/email.ts index cfef2bd..15d6c1c 100644 --- a/src/controllers/email.ts +++ b/src/controllers/email.ts @@ -1,6 +1,11 @@ import { IContact, IEmail } from '../schema/email'; -type IMCPersonalization = { to: IMCContact[] }; +type IMCPersonalization = { + to: IMCContact[]; + dkim_domain?: string; + dkim_private_key?: string; + dkim_selector?: string; +}; type IMCContact = { email: string; name: string | undefined }; type IMCContent = { type: string; value: string }; @@ -19,10 +24,16 @@ class Email { * * @param email */ - static async send(email: IEmail) { + static async send(email: IEmail, env: Env) { // convert email to IMCEmail (MailChannels Email) const mcEmail: IMCEmail = Email.convertEmail(email); + if (env.DKIM_PRIVATE_KEY && env.DKIM_DOMAIN && env.DKIM_SELECTOR) { + mcEmail.personalizations[0].dkim_domain = env.DKIM_DOMAIN; + mcEmail.personalizations[0].dkim_private_key = env.DKIM_PRIVATE_KEY; + mcEmail.personalizations[0].dkim_selector = env.DKIM_SELECTOR + } + // send email through MailChannels const resp = await fetch( new Request('https://api.mailchannels.net/tx/v1/send', { diff --git a/src/main.ts b/src/main.ts index 29d2fcd..611b019 100644 --- a/src/main.ts +++ b/src/main.ts @@ -7,11 +7,11 @@ import { IEmail } from './schema/email'; const router = Router(); // POST /api/email -router.post('/api/email', AuthMiddleware, EmailSchemaMiddleware, async (request) => { +router.post('/api/email', AuthMiddleware, EmailSchemaMiddleware, async (request, env) => { const email = request.email as IEmail; try { - await Email.send(email); + await Email.send(email, env); } catch (e) { console.error(`Error sending email: ${e}`); return new Response('Internal Server Error', { status: 500 }); diff --git a/worker-configuration.d.ts b/worker-configuration.d.ts index 2d70b66..47de0e7 100644 --- a/worker-configuration.d.ts +++ b/worker-configuration.d.ts @@ -1,3 +1,6 @@ interface Env { TOKEN: string; + DKIM_DOMAIN: string; + DKIM_SELECTOR: string; + DKIM_PRIVATE_KEY: string; } From d0352cf58e3da5655a7fbcfeef525783d906dca7 Mon Sep 17 00:00:00 2001 From: Kieran Klukas <92754843+kcoderhtml@users.noreply.github.com> Date: Sat, 27 Apr 2024 14:04:01 -0400 Subject: [PATCH 04/10] Add placement mode configuration to wrangler.toml --- wrangler.toml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/wrangler.toml b/wrangler.toml index 4b84cd4..5b935cf 100644 --- a/wrangler.toml +++ b/wrangler.toml @@ -4,3 +4,6 @@ compatibility_date = "2023-05-18" [env.production] + +[placement] +mode = "smart" \ No newline at end of file From 59677020f100e6f0180cb6d75152f1cb3dee0bf9 Mon Sep 17 00:00:00 2001 From: Kieran Klukas <92754843+kcoderhtml@users.noreply.github.com> Date: Sat, 27 Apr 2024 14:04:12 -0400 Subject: [PATCH 05/10] Fix error handling in email sending --- src/controllers/email.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/email.ts b/src/controllers/email.ts index 15d6c1c..f7cac9a 100644 --- a/src/controllers/email.ts +++ b/src/controllers/email.ts @@ -47,7 +47,7 @@ class Email { // check if email was sent successfully if (resp.status > 299 || resp.status < 200) { - throw new Error(`Error sending email: ${resp.status} ${resp.statusText}`); + throw new Error(`Error sending email: ${resp.status} ${resp.statusText} ${await resp.text()}`); } } From 44c5e4760ea07b3e5566341e1751ec22fd11ab3c Mon Sep 17 00:00:00 2001 From: Kieran Klukas <92754843+kcoderhtml@users.noreply.github.com> Date: Sat, 27 Apr 2024 14:16:44 -0400 Subject: [PATCH 06/10] Update DKIM configuration in wrangler.toml --- wrangler.toml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/wrangler.toml b/wrangler.toml index 5b935cf..0e409c5 100644 --- a/wrangler.toml +++ b/wrangler.toml @@ -2,8 +2,9 @@ name = "worker-email" main = "src/main.ts" compatibility_date = "2023-05-18" -[env.production] - +[env.production.vars] +DKIM_DOMAIN = "" +DKIM_SELECTOR = "mailchannels" [placement] mode = "smart" \ No newline at end of file From 520f51fd17bdec654320b5d680bf765937e396e3 Mon Sep 17 00:00:00 2001 From: Kieran Klukas <92754843+kcoderhtml@users.noreply.github.com> Date: Sat, 27 Apr 2024 14:27:42 -0400 Subject: [PATCH 07/10] Update deployment instructions in README.md --- README.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c7de989..6ce2948 100644 --- a/README.md +++ b/README.md @@ -9,9 +9,12 @@ ## Getting Started! 1. Clone this repository -2. Install the dependencies with `npm install` -3. Use the command `npx wrangler secret put --env production TOKEN` to deploy a securely stored token to Cloudflare. With this command, you will be prompted to enter a random secret value, which will be used to authenticate your requests with the HTTP `Authorization` header as described below. You can also set this encrypted value directly in your Cloudflare dashboard. -4. Deploy the worker with `npm run deploy` +2. Install the dependencies with `bun install` +3. Use the command `bunx wrangler secret put --env production TOKEN` to deploy a securely stored token to Cloudflare. With this command, you will be prompted to enter a random secret value, which will be used to authenticate your requests with the HTTP `Authorization` header as described below. You can also set this encrypted value directly in your Cloudflare dashboard. +4. (optional) - If you want DKIM then generate your private and public keys following [mailchannels tutorial](https://support.mailchannels.com/hc/en-us/articles/7122849237389-Adding-a-DKIM-Signature) and put your private key into `bunx wrangler secret put --env production DKIM_PRIVATE_KEY` to deploy your key to cloudflare. +5. (optional) - Modify your domain name in wrangler.toml by changing `DKIM_DOMAIN` to the base domain of your site. +6. (optional) - If you modified the DKIM selector (the part of the TXT record with the name `._domainkey` and has `v=DKIM1;p=` as the content) then change `DKIM_SELECTOR` in wrangler.toml to that selector. +7. Deploy the worker with `bun run deploy` Or deploy directly to Cloudflare From c1098ecb2b86b228937363e40b6926afce2e3dca Mon Sep 17 00:00:00 2001 From: Kieran Klukas <92754843+kcoderhtml@users.noreply.github.com> Date: Sat, 27 Apr 2024 18:56:12 -0400 Subject: [PATCH 08/10] bug: fix bcc and cc not being in the personalization object --- src/controllers/email.ts | 10 ++++++---- src/middlewares/email.ts | 1 + 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/controllers/email.ts b/src/controllers/email.ts index f7cac9a..a5b5354 100644 --- a/src/controllers/email.ts +++ b/src/controllers/email.ts @@ -2,6 +2,8 @@ import { IContact, IEmail } from '../schema/email'; type IMCPersonalization = { to: IMCContact[]; + cc?: IMCContact[]; + bcc?: IMCContact[]; dkim_domain?: string; dkim_private_key?: string; dkim_selector?: string; @@ -13,8 +15,6 @@ interface IMCEmail { personalizations: IMCPersonalization[]; from: IMCContact; reply_to: IMCContact | undefined; - cc: IMCContact[] | undefined; - bcc: IMCContact[] | undefined; subject: string; content: IMCContent[]; } @@ -34,6 +34,8 @@ class Email { mcEmail.personalizations[0].dkim_selector = env.DKIM_SELECTOR } + console.log('Email.send: Sending email:', mcEmail); + // send email through MailChannels const resp = await fetch( new Request('https://api.mailchannels.net/tx/v1/send', { @@ -76,11 +78,13 @@ class Email { // Convert 'cc' field if (email.cc) { ccContacts = Email.convertContacts(email.cc); + personalizations[0].cc = ccContacts; } // Convert 'bcc' field if (email.bcc) { bccContacts = Email.convertContacts(email.bcc); + personalizations[0].bcc = bccContacts; } const from: IMCContact = Email.convertContact(email.from); @@ -105,8 +109,6 @@ class Email { return { personalizations, from, - cc: ccContacts, - bcc: bccContacts, reply_to: replyTo, subject, content, diff --git a/src/middlewares/email.ts b/src/middlewares/email.ts index 706a823..3592786 100644 --- a/src/middlewares/email.ts +++ b/src/middlewares/email.ts @@ -14,6 +14,7 @@ const EmailSchemaMiddleware = async (request: EmailRequest) => { const email = iEmailSchema.safeParse(content); if (email.success) { request.email = email.data; + console.log('EmailSchemaMiddleware: Email data:', email.data); return; } From f38d561276874d81d826b6c64f8f1a84c50a859d Mon Sep 17 00:00:00 2001 From: Kieran Klukas <92754843+kcoderhtml@users.noreply.github.com> Date: Sun, 28 Apr 2024 12:40:31 -0400 Subject: [PATCH 09/10] feat: add markdown parsing and sanitization --- bun.lockb | Bin 51147 -> 45073 bytes package.json | 10 ++++++++-- src/controllers/email.ts | 14 ++++++++++++-- src/schema/email.ts | 1 + 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/bun.lockb b/bun.lockb index 391b4026f4514602e68a6352a17b3df1aad40857..e027da24d08fbce3aa384785a76317df75466954 100755 GIT binary patch delta 17113 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 literal 51147 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 dda0FY&>!w80@n|5VEgg52 { const personalizations: IMCPersonalization[] = []; // Convert 'to' field @@ -98,6 +100,14 @@ class Email { textContent.push({ type: 'text/plain', value: email.text }); } + // Convert 'markdown' field + if (email.markdown) { + const html = await marked.parse(email.markdown); + const sanitizedHtml = sanitize(html); + + textContent.push({ type: 'text/html', value: sanitizedHtml }); + } + // Convert 'html' field const htmlContent: IMCContent[] = []; if (email.html) { diff --git a/src/schema/email.ts b/src/schema/email.ts index 860f119..581c328 100644 --- a/src/schema/email.ts +++ b/src/schema/email.ts @@ -16,6 +16,7 @@ const iEmailSchema = z.object({ from: iContactSchema, subject: z.string(), text: z.union([z.string(), z.undefined()]), + markdown: z.union([z.string(), z.undefined()]), html: z.union([z.string(), z.undefined()]), }); From e0d19bbf2b8acc998676591681c2b40156feecc1 Mon Sep 17 00:00:00 2001 From: Kieran Klukas <92754843+kcoderhtml@users.noreply.github.com> Date: Sun, 28 Apr 2024 14:02:11 -0400 Subject: [PATCH 10/10] remove: console log message in Email class --- src/controllers/email.ts | 2 +- src/middlewares/email.ts | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/controllers/email.ts b/src/controllers/email.ts index 19137d1..b5886ee 100644 --- a/src/controllers/email.ts +++ b/src/controllers/email.ts @@ -36,7 +36,7 @@ class Email { mcEmail.personalizations[0].dkim_selector = env.DKIM_SELECTOR } - console.log('Email.send: Sending email:', mcEmail); + console.log('Sending email:', mcEmail); // send email through MailChannels const resp = await fetch( diff --git a/src/middlewares/email.ts b/src/middlewares/email.ts index 3592786..706a823 100644 --- a/src/middlewares/email.ts +++ b/src/middlewares/email.ts @@ -14,7 +14,6 @@ const EmailSchemaMiddleware = async (request: EmailRequest) => { const email = iEmailSchema.safeParse(content); if (email.success) { request.email = email.data; - console.log('EmailSchemaMiddleware: Email data:', email.data); return; }