diff --git a/package-lock.json b/package-lock.json index 782b4724e9a..07b6701c152 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5543,6 +5543,39 @@ "node": ">=10.0.0" } }, + "node_modules/@cloudflare/unenv-preset": { + "version": "2.7.13", + "resolved": "https://registry.npmjs.org/@cloudflare/unenv-preset/-/unenv-preset-2.7.13.tgz", + "integrity": "sha512-NulO1H8R/DzsJguLC0ndMuk4Ufv0KSlN+E54ay9rn9ZCQo0kpAPwwh3LhgpZ96a3Dr6L9LqW57M4CqC34iLOvw==", + "dev": true, + "license": "MIT OR Apache-2.0", + "peerDependencies": { + "unenv": "2.0.0-rc.24", + "workerd": "^1.20251202.0" + }, + "peerDependenciesMeta": { + "workerd": { + "optional": true + } + } + }, + "node_modules/@cloudflare/workerd-darwin-64": { + "version": "1.20251210.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20251210.0.tgz", + "integrity": "sha512-Nn9X1moUDERA9xtFdCQ2XpQXgAS9pOjiCxvOT8sVx9UJLAiBLkfSCGbpsYdarODGybXCpjRlc77Yppuolvt7oQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16" + } + }, "node_modules/@cloudflare/workerd-darwin-arm64": { "version": "1.20240223.1", "cpu": [ @@ -5558,6 +5591,57 @@ "node": ">=16" } }, + "node_modules/@cloudflare/workerd-linux-64": { + "version": "1.20251210.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20251210.0.tgz", + "integrity": "sha512-kjC2fCZhZ2Gkm1biwk2qByAYpGguK5Gf5ic8owzSCUw0FOUfQxTZUT9Lp3gApxsfTLbbnLBrX/xzWjywH9QR4g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-linux-arm64": { + "version": "1.20251210.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20251210.0.tgz", + "integrity": "sha512-2IB37nXi7PZVQLa1OCuO7/6pNxqisRSO8DmCQ5x/3sezI5op1vwOxAcb1osAnuVsVN9bbvpw70HJvhKruFJTuA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-windows-64": { + "version": "1.20251210.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20251210.0.tgz", + "integrity": "sha512-Uaz6/9XE+D6E7pCY4OvkCuJHu7HcSDzeGcCGY1HLhojXhHd7yL52c3yfiyJdS8hPatiAa0nn5qSI/42+aTdDSw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16" + } + }, "node_modules/@cnakazawa/watch": { "version": "1.0.4", "dev": true, @@ -18517,6 +18601,71 @@ "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", "license": "MIT" }, + "node_modules/@poppinss/colors": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@poppinss/colors/-/colors-4.1.6.tgz", + "integrity": "sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==", + "dev": true, + "license": "MIT", + "dependencies": { + "kleur": "^4.1.5" + } + }, + "node_modules/@poppinss/colors/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, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@poppinss/dumper": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@poppinss/dumper/-/dumper-0.6.5.tgz", + "integrity": "sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@poppinss/colors": "^4.1.5", + "@sindresorhus/is": "^7.0.2", + "supports-color": "^10.0.0" + } + }, + "node_modules/@poppinss/dumper/node_modules/@sindresorhus/is": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-7.2.0.tgz", + "integrity": "sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@poppinss/dumper/node_modules/supports-color": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz", + "integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/@poppinss/exception": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@poppinss/exception/-/exception-1.2.3.tgz", + "integrity": "sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==", + "dev": true, + "license": "MIT" + }, "node_modules/@project-serum/anchor": { "version": "0.24.1", "license": "(MIT OR Apache-2.0)", @@ -30748,6 +30897,13 @@ "webidl-conversions": "^3.0.0" } }, + "node_modules/@speed-highlight/core": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@speed-highlight/core/-/core-1.2.14.tgz", + "integrity": "sha512-G4ewlBNhUtlLvrJTb88d2mdy2KRijzs4UhnlrOSRT4bmjh/IqNElZa3zkrZ+TC47TwtlDWzVLFADljF1Ijp5hA==", + "dev": true, + "license": "CC0-1.0" + }, "node_modules/@stablelib/aead": { "version": "1.0.1", "license": "MIT" @@ -49070,6 +49226,16 @@ "stackframe": "^1.3.4" } }, + "node_modules/error-stack-parser-es": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-1.0.5.tgz", + "integrity": "sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/errorhandler": { "version": "1.5.1", "dev": true, @@ -88052,32 +88218,19 @@ "license": "MIT" }, "node_modules/unenv": { - "version": "1.9.0", + "version": "2.0.0-rc.24", + "resolved": "https://registry.npmjs.org/unenv/-/unenv-2.0.0-rc.24.tgz", + "integrity": "sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==", "license": "MIT", "dependencies": { - "consola": "^3.2.3", - "defu": "^6.1.3", - "mime": "^3.0.0", - "node-fetch-native": "^1.6.1", - "pathe": "^1.1.1" - } - }, - "node_modules/unenv/node_modules/consola": { - "version": "3.2.3", - "license": "MIT", - "engines": { - "node": "^14.18.0 || >=16.10.0" + "pathe": "^2.0.3" } }, - "node_modules/unenv/node_modules/mime": { - "version": "3.0.0", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=10.0.0" - } + "node_modules/unenv/node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "license": "MIT" }, "node_modules/unfetch": { "version": "4.2.0", @@ -95595,6 +95748,17 @@ "stacktracey": "^2.1.8" } }, + "node_modules/youch-core": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/youch-core/-/youch-core-0.3.3.tgz", + "integrity": "sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@poppinss/exception": "^1.2.2", + "error-stack-parser-es": "^1.0.5" + } + }, "node_modules/youch/node_modules/cookie": { "version": "0.5.0", "dev": true, @@ -132449,6 +132613,7 @@ "type-fest": "4.26.1", "typed-redux-saga": "1.3.1", "typesafe-actions": "5.1.0", + "unenv": "2.0.0-rc.24", "viem": "2.21.21", "vike": "0.4.247", "vike-react": "^0.3.7", @@ -132533,7 +132698,8 @@ "vite-plugin-glslify": "2.0.2", "vite-plugin-node-polyfills": "^0.15.0", "vite-plugin-svgr": "4.1.0", - "vitest": "^3.2.4" + "vitest": "^3.2.4", + "wrangler": "4.54.0" } }, "packages/web/node_modules/@adobe/css-tools": { @@ -132581,6 +132747,23 @@ "node": ">=10.0.0" } }, + "packages/web/node_modules/@cloudflare/workerd-darwin-arm64": { + "version": "1.20251210.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20251210.0.tgz", + "integrity": "sha512-Mg8iYIZQFnbevq/ls9eW/eneWTk/EE13Pej1MwfkY5et0jVpdHnvOLywy/o+QtMJFef1AjsqXGULwAneYyBfHw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16" + } + }, "packages/web/node_modules/@coinbase/wallet-sdk": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/@coinbase/wallet-sdk/-/wallet-sdk-4.3.0.tgz", @@ -133142,6 +133325,386 @@ "node": ">=18" } }, + "packages/web/node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", + "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.4" + } + }, + "packages/web/node_modules/@img/sharp-darwin-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", + "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.4" + } + }, + "packages/web/node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", + "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "packages/web/node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", + "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "packages/web/node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", + "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "packages/web/node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", + "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "packages/web/node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", + "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "packages/web/node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", + "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "packages/web/node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", + "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "packages/web/node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", + "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "packages/web/node_modules/@img/sharp-linux-arm": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", + "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.0.5" + } + }, + "packages/web/node_modules/@img/sharp-linux-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", + "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.0.4" + } + }, + "packages/web/node_modules/@img/sharp-linux-s390x": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", + "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.0.4" + } + }, + "packages/web/node_modules/@img/sharp-linux-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", + "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.4" + } + }, + "packages/web/node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", + "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" + } + }, + "packages/web/node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", + "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.4" + } + }, + "packages/web/node_modules/@img/sharp-wasm32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", + "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.2.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "packages/web/node_modules/@img/sharp-win32-ia32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", + "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "packages/web/node_modules/@img/sharp-win32-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", + "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, "packages/web/node_modules/@jimp/bmp": { "version": "0.6.8", "license": "MIT", @@ -134534,6 +135097,29 @@ } } }, + "packages/web/node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "packages/web/node_modules/acorn-walk": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, "packages/web/node_modules/ansi-styles": { "version": "4.3.0", "dev": true, @@ -134877,6 +135463,20 @@ "node": ">= 16" } }, + "packages/web/node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, "packages/web/node_modules/commander": { "version": "2.20.3", "dev": true, @@ -134990,6 +135590,16 @@ "integrity": "sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==", "license": "MIT" }, + "packages/web/node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, "packages/web/node_modules/dir-compare": { "version": "3.3.0", "dev": true, @@ -135461,6 +136071,55 @@ "react": ">= 0.14.0" } }, + "packages/web/node_modules/miniflare": { + "version": "4.20251210.0", + "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-4.20251210.0.tgz", + "integrity": "sha512-k6kIoXwGVqlPZb0hcn+X7BmnK+8BjIIkusQPY22kCo2RaQJ/LzAjtxHQdGXerlHSnJyQivDQsL6BJHMpQfUFyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "0.8.1", + "acorn": "8.14.0", + "acorn-walk": "8.3.2", + "exit-hook": "2.2.1", + "glob-to-regexp": "0.4.1", + "sharp": "^0.33.5", + "stoppable": "1.1.0", + "undici": "7.14.0", + "workerd": "1.20251210.0", + "ws": "8.18.0", + "youch": "4.1.0-beta.10", + "zod": "3.22.3" + }, + "bin": { + "miniflare": "bootstrap.js" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "packages/web/node_modules/miniflare/node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "dev": true, + "license": "MIT", + "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 + } + } + }, "packages/web/node_modules/minimist": { "version": "0.0.8", "license": "MIT" @@ -135807,6 +136466,59 @@ "version": "1.3.0", "license": "ISC" }, + "packages/web/node_modules/sharp": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", + "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.3", + "semver": "^7.6.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.33.5", + "@img/sharp-darwin-x64": "0.33.5", + "@img/sharp-libvips-darwin-arm64": "1.0.4", + "@img/sharp-libvips-darwin-x64": "1.0.4", + "@img/sharp-libvips-linux-arm": "1.0.5", + "@img/sharp-libvips-linux-arm64": "1.0.4", + "@img/sharp-libvips-linux-s390x": "1.0.4", + "@img/sharp-libvips-linux-x64": "1.0.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", + "@img/sharp-libvips-linuxmusl-x64": "1.0.4", + "@img/sharp-linux-arm": "0.33.5", + "@img/sharp-linux-arm64": "0.33.5", + "@img/sharp-linux-s390x": "0.33.5", + "@img/sharp-linux-x64": "0.33.5", + "@img/sharp-linuxmusl-arm64": "0.33.5", + "@img/sharp-linuxmusl-x64": "0.33.5", + "@img/sharp-wasm32": "0.33.5", + "@img/sharp-win32-ia32": "0.33.5", + "@img/sharp-win32-x64": "0.33.5" + } + }, + "packages/web/node_modules/sharp/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "packages/web/node_modules/shebang-command": { "version": "2.0.0", "dev": true, @@ -135950,6 +136662,16 @@ "multiformats": "^9.4.2" } }, + "packages/web/node_modules/undici": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.14.0.tgz", + "integrity": "sha512-Vqs8HTzjpQXZeXdpsfChQTlafcMQaaIwnGwLam1wudSSjlJeQ3bw1j+TLPePgrCnCpUXx7Ba5Pdpf5OBih62NQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, "packages/web/node_modules/undici-types": { "version": "6.19.8", "dev": true, @@ -136218,10 +136940,600 @@ "node": ">=8" } }, + "packages/web/node_modules/workerd": { + "version": "1.20251210.0", + "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20251210.0.tgz", + "integrity": "sha512-9MUUneP1BnRE9XAYi94FXxHmiLGbO75EHQZsgWqSiOXjoXSqJCw8aQbIEPxCy19TclEl/kHUFYce8ST2W+Qpjw==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "bin": { + "workerd": "bin/workerd" + }, + "engines": { + "node": ">=16" + }, + "optionalDependencies": { + "@cloudflare/workerd-darwin-64": "1.20251210.0", + "@cloudflare/workerd-darwin-arm64": "1.20251210.0", + "@cloudflare/workerd-linux-64": "1.20251210.0", + "@cloudflare/workerd-linux-arm64": "1.20251210.0", + "@cloudflare/workerd-windows-64": "1.20251210.0" + } + }, + "packages/web/node_modules/wrangler": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-4.54.0.tgz", + "integrity": "sha512-bANFsjDwJLbprYoBK+hUDZsVbUv2SqJd8QvArLIcZk+fPq4h/Ohtj5vkKXD3k0s2bD1DXLk08D+hYmeNH+xC6A==", + "dev": true, + "license": "MIT OR Apache-2.0", + "dependencies": { + "@cloudflare/kv-asset-handler": "0.4.1", + "@cloudflare/unenv-preset": "2.7.13", + "blake3-wasm": "2.1.5", + "esbuild": "0.27.0", + "miniflare": "4.20251210.0", + "path-to-regexp": "6.3.0", + "unenv": "2.0.0-rc.24", + "workerd": "1.20251210.0" + }, + "bin": { + "wrangler": "bin/wrangler.js", + "wrangler2": "bin/wrangler.js" + }, + "engines": { + "node": ">=20.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@cloudflare/workers-types": "^4.20251210.0" + }, + "peerDependenciesMeta": { + "@cloudflare/workers-types": { + "optional": true + } + } + }, + "packages/web/node_modules/wrangler/node_modules/@cloudflare/kv-asset-handler": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.4.1.tgz", + "integrity": "sha512-Nu8ahitGFFJztxUml9oD/DLb7Z28C8cd8F46IVQ7y5Btz575pvMY8AqZsXkX7Gds29eCKdMgIHjIvzskHgPSFg==", + "dev": true, + "license": "MIT OR Apache-2.0", + "dependencies": { + "mime": "^3.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "packages/web/node_modules/wrangler/node_modules/@esbuild/aix-ppc64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.0.tgz", + "integrity": "sha512-KuZrd2hRjz01y5JK9mEBSD3Vj3mbCvemhT466rSuJYeE/hjuBrHfjjcjMdTm/sz7au+++sdbJZJmuBwQLuw68A==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "packages/web/node_modules/wrangler/node_modules/@esbuild/android-arm": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.0.tgz", + "integrity": "sha512-j67aezrPNYWJEOHUNLPj9maeJte7uSMM6gMoxfPC9hOg8N02JuQi/T7ewumf4tNvJadFkvLZMlAq73b9uwdMyQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/web/node_modules/wrangler/node_modules/@esbuild/android-arm64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.0.tgz", + "integrity": "sha512-CC3vt4+1xZrs97/PKDkl0yN7w8edvU2vZvAFGD16n9F0Cvniy5qvzRXjfO1l94efczkkQE6g1x0i73Qf5uthOQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/web/node_modules/wrangler/node_modules/@esbuild/android-x64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.0.tgz", + "integrity": "sha512-wurMkF1nmQajBO1+0CJmcN17U4BP6GqNSROP8t0X/Jiw2ltYGLHpEksp9MpoBqkrFR3kv2/te6Sha26k3+yZ9Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/web/node_modules/wrangler/node_modules/@esbuild/darwin-arm64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.0.tgz", + "integrity": "sha512-uJOQKYCcHhg07DL7i8MzjvS2LaP7W7Pn/7uA0B5S1EnqAirJtbyw4yC5jQ5qcFjHK9l6o/MX9QisBg12kNkdHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "packages/web/node_modules/wrangler/node_modules/@esbuild/darwin-x64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.0.tgz", + "integrity": "sha512-8mG6arH3yB/4ZXiEnXof5MK72dE6zM9cDvUcPtxhUZsDjESl9JipZYW60C3JGreKCEP+p8P/72r69m4AZGJd5g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "packages/web/node_modules/wrangler/node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.0.tgz", + "integrity": "sha512-9FHtyO988CwNMMOE3YIeci+UV+x5Zy8fI2qHNpsEtSF83YPBmE8UWmfYAQg6Ux7Gsmd4FejZqnEUZCMGaNQHQw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/web/node_modules/wrangler/node_modules/@esbuild/freebsd-x64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.0.tgz", + "integrity": "sha512-zCMeMXI4HS/tXvJz8vWGexpZj2YVtRAihHLk1imZj4efx1BQzN76YFeKqlDr3bUWI26wHwLWPd3rwh6pe4EV7g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/web/node_modules/wrangler/node_modules/@esbuild/linux-arm": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.0.tgz", + "integrity": "sha512-t76XLQDpxgmq2cNXKTVEB7O7YMb42atj2Re2Haf45HkaUpjM2J0UuJZDuaGbPbamzZ7bawyGFUkodL+zcE+jvQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/web/node_modules/wrangler/node_modules/@esbuild/linux-arm64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.0.tgz", + "integrity": "sha512-AS18v0V+vZiLJyi/4LphvBE+OIX682Pu7ZYNsdUHyUKSoRwdnOsMf6FDekwoAFKej14WAkOef3zAORJgAtXnlQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/web/node_modules/wrangler/node_modules/@esbuild/linux-ia32": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.0.tgz", + "integrity": "sha512-Mz1jxqm/kfgKkc/KLHC5qIujMvnnarD9ra1cEcrs7qshTUSksPihGrWHVG5+osAIQ68577Zpww7SGapmzSt4Nw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/web/node_modules/wrangler/node_modules/@esbuild/linux-loong64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.0.tgz", + "integrity": "sha512-QbEREjdJeIreIAbdG2hLU1yXm1uu+LTdzoq1KCo4G4pFOLlvIspBm36QrQOar9LFduavoWX2msNFAAAY9j4BDg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/web/node_modules/wrangler/node_modules/@esbuild/linux-mips64el": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.0.tgz", + "integrity": "sha512-sJz3zRNe4tO2wxvDpH/HYJilb6+2YJxo/ZNbVdtFiKDufzWq4JmKAiHy9iGoLjAV7r/W32VgaHGkk35cUXlNOg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/web/node_modules/wrangler/node_modules/@esbuild/linux-ppc64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.0.tgz", + "integrity": "sha512-z9N10FBD0DCS2dmSABDBb5TLAyF1/ydVb+N4pi88T45efQ/w4ohr/F/QYCkxDPnkhkp6AIpIcQKQ8F0ANoA2JA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/web/node_modules/wrangler/node_modules/@esbuild/linux-riscv64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.0.tgz", + "integrity": "sha512-pQdyAIZ0BWIC5GyvVFn5awDiO14TkT/19FTmFcPdDec94KJ1uZcmFs21Fo8auMXzD4Tt+diXu1LW1gHus9fhFQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/web/node_modules/wrangler/node_modules/@esbuild/linux-s390x": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.0.tgz", + "integrity": "sha512-hPlRWR4eIDDEci953RI1BLZitgi5uqcsjKMxwYfmi4LcwyWo2IcRP+lThVnKjNtk90pLS8nKdroXYOqW+QQH+w==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/web/node_modules/wrangler/node_modules/@esbuild/linux-x64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.0.tgz", + "integrity": "sha512-1hBWx4OUJE2cab++aVZ7pObD6s+DK4mPGpemtnAORBvb5l/g5xFGk0vc0PjSkrDs0XaXj9yyob3d14XqvnQ4gw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/web/node_modules/wrangler/node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.0.tgz", + "integrity": "sha512-6m0sfQfxfQfy1qRuecMkJlf1cIzTOgyaeXaiVaaki8/v+WB+U4hc6ik15ZW6TAllRlg/WuQXxWj1jx6C+dfy3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/web/node_modules/wrangler/node_modules/@esbuild/netbsd-x64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.0.tgz", + "integrity": "sha512-xbbOdfn06FtcJ9d0ShxxvSn2iUsGd/lgPIO2V3VZIPDbEaIj1/3nBBe1AwuEZKXVXkMmpr6LUAgMkLD/4D2PPA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/web/node_modules/wrangler/node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.0.tgz", + "integrity": "sha512-fWgqR8uNbCQ/GGv0yhzttj6sU/9Z5/Sv/VGU3F5OuXK6J6SlriONKrQ7tNlwBrJZXRYk5jUhuWvF7GYzGguBZQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/web/node_modules/wrangler/node_modules/@esbuild/openbsd-x64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.0.tgz", + "integrity": "sha512-aCwlRdSNMNxkGGqQajMUza6uXzR/U0dIl1QmLjPtRbLOx3Gy3otfFu/VjATy4yQzo9yFDGTxYDo1FfAD9oRD2A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/web/node_modules/wrangler/node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.0.tgz", + "integrity": "sha512-nyvsBccxNAsNYz2jVFYwEGuRRomqZ149A39SHWk4hV0jWxKM0hjBPm3AmdxcbHiFLbBSwG6SbpIcUbXjgyECfA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "packages/web/node_modules/wrangler/node_modules/@esbuild/sunos-x64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.0.tgz", + "integrity": "sha512-Q1KY1iJafM+UX6CFEL+F4HRTgygmEW568YMqDA5UV97AuZSm21b7SXIrRJDwXWPzr8MGr75fUZPV67FdtMHlHA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "packages/web/node_modules/wrangler/node_modules/@esbuild/win32-arm64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.0.tgz", + "integrity": "sha512-W1eyGNi6d+8kOmZIwi/EDjrL9nxQIQ0MiGqe/AWc6+IaHloxHSGoeRgDRKHFISThLmsewZ5nHFvGFWdBYlgKPg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/web/node_modules/wrangler/node_modules/@esbuild/win32-ia32": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.0.tgz", + "integrity": "sha512-30z1aKL9h22kQhilnYkORFYt+3wp7yZsHWus+wSKAJR8JtdfI76LJ4SBdMsCopTR3z/ORqVu5L1vtnHZWVj4cQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/web/node_modules/wrangler/node_modules/@esbuild/win32-x64": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.0.tgz", + "integrity": "sha512-aIitBcjQeyOhMTImhLZmtxfdOcuNRpwlPNmlFKPcHQYPhEssw75Cl1TSXJXpMkzaua9FUetx/4OQKq7eJul5Cg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/web/node_modules/wrangler/node_modules/esbuild": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.0.tgz", + "integrity": "sha512-jd0f4NHbD6cALCyGElNpGAOtWxSq46l9X/sWB0Nzd5er4Kz2YTm+Vl0qKFT9KUJvD8+fiO8AvoHhFvEatfVixA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.0", + "@esbuild/android-arm": "0.27.0", + "@esbuild/android-arm64": "0.27.0", + "@esbuild/android-x64": "0.27.0", + "@esbuild/darwin-arm64": "0.27.0", + "@esbuild/darwin-x64": "0.27.0", + "@esbuild/freebsd-arm64": "0.27.0", + "@esbuild/freebsd-x64": "0.27.0", + "@esbuild/linux-arm": "0.27.0", + "@esbuild/linux-arm64": "0.27.0", + "@esbuild/linux-ia32": "0.27.0", + "@esbuild/linux-loong64": "0.27.0", + "@esbuild/linux-mips64el": "0.27.0", + "@esbuild/linux-ppc64": "0.27.0", + "@esbuild/linux-riscv64": "0.27.0", + "@esbuild/linux-s390x": "0.27.0", + "@esbuild/linux-x64": "0.27.0", + "@esbuild/netbsd-arm64": "0.27.0", + "@esbuild/netbsd-x64": "0.27.0", + "@esbuild/openbsd-arm64": "0.27.0", + "@esbuild/openbsd-x64": "0.27.0", + "@esbuild/openharmony-arm64": "0.27.0", + "@esbuild/sunos-x64": "0.27.0", + "@esbuild/win32-arm64": "0.27.0", + "@esbuild/win32-ia32": "0.27.0", + "@esbuild/win32-x64": "0.27.0" + } + }, + "packages/web/node_modules/wrangler/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, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, "packages/web/node_modules/yallist": { "version": "4.0.0", "license": "ISC" }, + "packages/web/node_modules/youch": { + "version": "4.1.0-beta.10", + "resolved": "https://registry.npmjs.org/youch/-/youch-4.1.0-beta.10.tgz", + "integrity": "sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@poppinss/colors": "^4.1.5", + "@poppinss/dumper": "^0.6.4", + "@speed-highlight/core": "^1.2.7", + "cookie": "^1.0.2", + "youch-core": "^0.3.3" + } + }, + "packages/web/node_modules/zod": { + "version": "3.22.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.3.tgz", + "integrity": "sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "packagse/mobile/node_modules/@react-navigation/stack": { "version": "7.6.12", "resolved": "https://registry.npmjs.org/@react-navigation/stack/-/stack-7.6.12.tgz", diff --git a/packages/create-audius-app/examples/react/package.json b/packages/create-audius-app/examples/react/package.json index 750032adc9a..619e75e0475 100644 --- a/packages/create-audius-app/examples/react/package.json +++ b/packages/create-audius-app/examples/react/package.json @@ -5,7 +5,7 @@ "type": "module", "scripts": { "dev": "vite", - "build": "tsc && vite build", + "build": "npx tsc && vite build", "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", "preview": "vite preview", "start": "npm run preview" diff --git a/packages/distro/package.json b/packages/distro/package.json index f3e1ef47fc3..a7d5542ca2d 100644 --- a/packages/distro/package.json +++ b/packages/distro/package.json @@ -8,7 +8,7 @@ "start:dev": "env-cmd -f .env.dev turbo run start --filter=@audius/distro", "start:stage": "env-cmd -f .env.stage turbo run start --filter=@audius/distro", "start:prod": "env-cmd -f .env.prod turbo run start --filter=@audius/distro", - "build": "tsc && vite build", + "build": "npx tsc && vite build", "build:dev": "env-cmd -f .env.dev turbo run build --filter=@audius/distro", "build:stage": "env-cmd -f .env.stage turbo run build --filter=@audius/distro", "build:prod": "env-cmd -f .env.prod turbo run build --filter=@audius/distro", diff --git a/packages/eth/package.json b/packages/eth/package.json index f0ccc2549e5..b07b0c36186 100644 --- a/packages/eth/package.json +++ b/packages/eth/package.json @@ -6,8 +6,8 @@ "module": "dist/esm/index.js", "types": "dist/types/index.d.ts", "scripts": { - "start": "tsc --build --verbose --watch tsconfig.all.json", - "build": "tsc --build --verbose tsconfig.all.json", + "start": "npx tsc --build --verbose --watch tsconfig.all.json", + "build": "npx tsc --build --verbose tsconfig.all.json", "test": "echo \"Error: no test specified\" && exit 1" }, "repository": { diff --git a/packages/fixed-decimal/package.json b/packages/fixed-decimal/package.json index b934d0d5f0a..1d00cfc313a 100644 --- a/packages/fixed-decimal/package.json +++ b/packages/fixed-decimal/package.json @@ -11,9 +11,9 @@ "types": "./dist/types/index.d.ts" }, "scripts": { - "start": "./scripts/makePackageTypes.sh && tsc --build --verbose --watch tsconfig.build.json", - "build": "./scripts/makePackageTypes.sh && tsc --build --verbose tsconfig.build.json", - "typecheck": "tsc --noEmit", + "start": "./scripts/makePackageTypes.sh && npx tsc --build --verbose --watch tsconfig.build.json", + "build": "./scripts/makePackageTypes.sh && npx tsc --build --verbose tsconfig.build.json", + "typecheck": "npx tsc --noEmit", "test": "vitest run", "test:watch": "vitest" }, diff --git a/packages/identity-service/package.json b/packages/identity-service/package.json index 61c9ca5dd3c..c6001c170c2 100644 --- a/packages/identity-service/package.json +++ b/packages/identity-service/package.json @@ -20,9 +20,9 @@ "lint:fix": "eslint --fix --ext=js,ts src", "lint": "eslint --ext=js,ts src", "copyfiles": "cp -r ./src/notifications/emails ./build/src/notifications", - "build": "tsc --project tsconfig.build.json && npm run copyfiles", - "typecheck": "tsc", - "typecheck:watch": "tsc --watch", + "build": "npx tsc --project tsconfig.build.json && npm run copyfiles", + "typecheck": "npx tsc", + "typecheck:watch": "npx tsc --watch", "verify": "concurrently \"npm:typecheck\" \"npm:lint\"" }, "dependencies": { diff --git a/packages/mobile/ios/Podfile.lock b/packages/mobile/ios/Podfile.lock index 4d10400ee3c..53e079ad184 100644 --- a/packages/mobile/ios/Podfile.lock +++ b/packages/mobile/ios/Podfile.lock @@ -1369,7 +1369,7 @@ PODS: - React - react-native-google-cast/NoBluetoothArm (= 4.6.2) - react-native-google-cast/NoBluetoothArm (4.6.2): - - google-cast-sdk-dynamic-xcframework-no-bluetooth + - google-cast-sdk-dynamic-xcframework-no-bluetooth (= 4.7.1) - React - react-native-google-cast/RNGoogleCast - react-native-google-cast/RNGoogleCast (4.6.2): @@ -2872,7 +2872,7 @@ SPEC CHECKSUMS: react-native-document-picker: 9fe3cd3187a2995d78d1f34d3a52eac1b68df245 react-native-fast-crypto: b30594570dab23aca7e74e206b2c03e28a006216 react-native-get-random-values: 384787fd76976f5aec9465aff6fa9e9129af1e74 - react-native-google-cast: 18b9b2fc518caabfa65d309409e160b3fc6d1733 + react-native-google-cast: 0a82cf63114470403e41e04ffa2b13d6448b6112 react-native-image-picker: 42e3b160d82fb168288345db3b9a2a99aad02afe react-native-in-app-review: db8bb167a5f238e7ceca5c242d6b36ce8c4404a4 react-native-keyboard-controller: 3aaba4f7015628ca833ce7ad889754571cef6455 diff --git a/packages/spl/package.json b/packages/spl/package.json index 926416de9b6..8c8bfa79a88 100644 --- a/packages/spl/package.json +++ b/packages/spl/package.json @@ -6,8 +6,8 @@ "module": "dist/esm/index.js", "types": "dist/types/index.d.ts", "scripts": { - "start": "tsc --build --verbose --watch tsconfig.all.json", - "build": "tsc --build --verbose tsconfig.all.json", + "start": "npx tsc --build --verbose --watch tsconfig.all.json", + "build": "npx tsc --build --verbose tsconfig.all.json", "test": "vitest run", "test:watch": "vitest" }, diff --git a/packages/web/package.json b/packages/web/package.json index 79d68894b32..90d07906237 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -178,6 +178,7 @@ "type-fest": "4.26.1", "typed-redux-saga": "1.3.1", "typesafe-actions": "5.1.0", + "unenv": "2.0.0-rc.24", "viem": "2.21.21", "vike": "0.4.247", "vike-react": "^0.3.7", @@ -266,6 +267,7 @@ "vite-plugin-glslify": "2.0.2", "vite-plugin-node-polyfills": "^0.15.0", "vite-plugin-svgr": "4.1.0", - "vitest": "^3.2.4" + "vitest": "^3.2.4", + "wrangler": "4.54.0" } } diff --git a/packages/web/src/ssr/+onRenderClient.tsx b/packages/web/src/ssr/+onRenderClient.tsx index 4bd46819a43..73484fb2b2b 100644 --- a/packages/web/src/ssr/+onRenderClient.tsx +++ b/packages/web/src/ssr/+onRenderClient.tsx @@ -1,7 +1,6 @@ -import { Buffer } from 'buffer' +import './polyfills' import 'setimmediate' -import processBrowser from 'process/browser' import { hydrateRoot } from 'react-dom/client' import type { PageContextClient } from 'vike/types' @@ -10,12 +9,6 @@ import { isMobile as getIsMobile } from 'utils/clientUtil' import '../index.css' import { checkIsCrawler } from './util' -// @ts-ignore -window.global ||= window -// @ts-ignore -window.Buffer = Buffer -window.process = { ...processBrowser, env: process.env } - // Set this to false to turn off client hydration // Useful for testing the SSR output const HYDRATE_CLIENT = true diff --git a/packages/web/src/ssr/audio/+onRenderClient.tsx b/packages/web/src/ssr/audio/+onRenderClient.tsx index 2df5d681deb..7eef81283ba 100644 --- a/packages/web/src/ssr/audio/+onRenderClient.tsx +++ b/packages/web/src/ssr/audio/+onRenderClient.tsx @@ -1,22 +1,15 @@ // Simple SSR pages use createRoot instead of hydrateRoot // to avoid hydration mismatches since we only render meta tags during SSR -import 'setimmediate' -import { Buffer } from 'buffer' +import '../polyfills' -import processBrowser from 'process/browser' +import 'setimmediate' import { createRoot } from 'react-dom/client' import '../../index.css' import RootWithProviders from 'ssr/RootWithProviders' import { isMobile as getIsMobile } from 'utils/clientUtil' -// @ts-ignore -window.global ||= window -// @ts-ignore -window.Buffer = Buffer -window.process = { ...processBrowser, env: process.env } - export default function render() { const container = document.getElementById('root') if (container) { diff --git a/packages/web/src/ssr/cash/+onRenderClient.tsx b/packages/web/src/ssr/cash/+onRenderClient.tsx index 2df5d681deb..7eef81283ba 100644 --- a/packages/web/src/ssr/cash/+onRenderClient.tsx +++ b/packages/web/src/ssr/cash/+onRenderClient.tsx @@ -1,22 +1,15 @@ // Simple SSR pages use createRoot instead of hydrateRoot // to avoid hydration mismatches since we only render meta tags during SSR -import 'setimmediate' -import { Buffer } from 'buffer' +import '../polyfills' -import processBrowser from 'process/browser' +import 'setimmediate' import { createRoot } from 'react-dom/client' import '../../index.css' import RootWithProviders from 'ssr/RootWithProviders' import { isMobile as getIsMobile } from 'utils/clientUtil' -// @ts-ignore -window.global ||= window -// @ts-ignore -window.Buffer = Buffer -window.process = { ...processBrowser, env: process.env } - export default function render() { const container = document.getElementById('root') if (container) { diff --git a/packages/web/src/ssr/coins/+onRenderClient.tsx b/packages/web/src/ssr/coins/+onRenderClient.tsx index 2df5d681deb..7eef81283ba 100644 --- a/packages/web/src/ssr/coins/+onRenderClient.tsx +++ b/packages/web/src/ssr/coins/+onRenderClient.tsx @@ -1,22 +1,15 @@ // Simple SSR pages use createRoot instead of hydrateRoot // to avoid hydration mismatches since we only render meta tags during SSR -import 'setimmediate' -import { Buffer } from 'buffer' +import '../polyfills' -import processBrowser from 'process/browser' +import 'setimmediate' import { createRoot } from 'react-dom/client' import '../../index.css' import RootWithProviders from 'ssr/RootWithProviders' import { isMobile as getIsMobile } from 'utils/clientUtil' -// @ts-ignore -window.global ||= window -// @ts-ignore -window.Buffer = Buffer -window.process = { ...processBrowser, env: process.env } - export default function render() { const container = document.getElementById('root') if (container) { diff --git a/packages/web/src/ssr/dashboard/+onRenderClient.tsx b/packages/web/src/ssr/dashboard/+onRenderClient.tsx index 2df5d681deb..7eef81283ba 100644 --- a/packages/web/src/ssr/dashboard/+onRenderClient.tsx +++ b/packages/web/src/ssr/dashboard/+onRenderClient.tsx @@ -1,22 +1,15 @@ // Simple SSR pages use createRoot instead of hydrateRoot // to avoid hydration mismatches since we only render meta tags during SSR -import 'setimmediate' -import { Buffer } from 'buffer' +import '../polyfills' -import processBrowser from 'process/browser' +import 'setimmediate' import { createRoot } from 'react-dom/client' import '../../index.css' import RootWithProviders from 'ssr/RootWithProviders' import { isMobile as getIsMobile } from 'utils/clientUtil' -// @ts-ignore -window.global ||= window -// @ts-ignore -window.Buffer = Buffer -window.process = { ...processBrowser, env: process.env } - export default function render() { const container = document.getElementById('root') if (container) { diff --git a/packages/web/src/ssr/download/+onRenderClient.tsx b/packages/web/src/ssr/download/+onRenderClient.tsx index 2df5d681deb..7eef81283ba 100644 --- a/packages/web/src/ssr/download/+onRenderClient.tsx +++ b/packages/web/src/ssr/download/+onRenderClient.tsx @@ -1,22 +1,15 @@ // Simple SSR pages use createRoot instead of hydrateRoot // to avoid hydration mismatches since we only render meta tags during SSR -import 'setimmediate' -import { Buffer } from 'buffer' +import '../polyfills' -import processBrowser from 'process/browser' +import 'setimmediate' import { createRoot } from 'react-dom/client' import '../../index.css' import RootWithProviders from 'ssr/RootWithProviders' import { isMobile as getIsMobile } from 'utils/clientUtil' -// @ts-ignore -window.global ||= window -// @ts-ignore -window.Buffer = Buffer -window.process = { ...processBrowser, env: process.env } - export default function render() { const container = document.getElementById('root') if (container) { diff --git a/packages/web/src/ssr/explore/+onRenderClient.tsx b/packages/web/src/ssr/explore/+onRenderClient.tsx index 2df5d681deb..7eef81283ba 100644 --- a/packages/web/src/ssr/explore/+onRenderClient.tsx +++ b/packages/web/src/ssr/explore/+onRenderClient.tsx @@ -1,22 +1,15 @@ // Simple SSR pages use createRoot instead of hydrateRoot // to avoid hydration mismatches since we only render meta tags during SSR -import 'setimmediate' -import { Buffer } from 'buffer' +import '../polyfills' -import processBrowser from 'process/browser' +import 'setimmediate' import { createRoot } from 'react-dom/client' import '../../index.css' import RootWithProviders from 'ssr/RootWithProviders' import { isMobile as getIsMobile } from 'utils/clientUtil' -// @ts-ignore -window.global ||= window -// @ts-ignore -window.Buffer = Buffer -window.process = { ...processBrowser, env: process.env } - export default function render() { const container = document.getElementById('root') if (container) { diff --git a/packages/web/src/ssr/feed/+onRenderClient.tsx b/packages/web/src/ssr/feed/+onRenderClient.tsx index 2df5d681deb..7eef81283ba 100644 --- a/packages/web/src/ssr/feed/+onRenderClient.tsx +++ b/packages/web/src/ssr/feed/+onRenderClient.tsx @@ -1,22 +1,15 @@ // Simple SSR pages use createRoot instead of hydrateRoot // to avoid hydration mismatches since we only render meta tags during SSR -import 'setimmediate' -import { Buffer } from 'buffer' +import '../polyfills' -import processBrowser from 'process/browser' +import 'setimmediate' import { createRoot } from 'react-dom/client' import '../../index.css' import RootWithProviders from 'ssr/RootWithProviders' import { isMobile as getIsMobile } from 'utils/clientUtil' -// @ts-ignore -window.global ||= window -// @ts-ignore -window.Buffer = Buffer -window.process = { ...processBrowser, env: process.env } - export default function render() { const container = document.getElementById('root') if (container) { diff --git a/packages/web/src/ssr/history/+onRenderClient.tsx b/packages/web/src/ssr/history/+onRenderClient.tsx index 2df5d681deb..7eef81283ba 100644 --- a/packages/web/src/ssr/history/+onRenderClient.tsx +++ b/packages/web/src/ssr/history/+onRenderClient.tsx @@ -1,22 +1,15 @@ // Simple SSR pages use createRoot instead of hydrateRoot // to avoid hydration mismatches since we only render meta tags during SSR -import 'setimmediate' -import { Buffer } from 'buffer' +import '../polyfills' -import processBrowser from 'process/browser' +import 'setimmediate' import { createRoot } from 'react-dom/client' import '../../index.css' import RootWithProviders from 'ssr/RootWithProviders' import { isMobile as getIsMobile } from 'utils/clientUtil' -// @ts-ignore -window.global ||= window -// @ts-ignore -window.Buffer = Buffer -window.process = { ...processBrowser, env: process.env } - export default function render() { const container = document.getElementById('root') if (container) { diff --git a/packages/web/src/ssr/index/+onRenderClient.tsx b/packages/web/src/ssr/index/+onRenderClient.tsx index ddc77fb08d5..b02f5012bf4 100644 --- a/packages/web/src/ssr/index/+onRenderClient.tsx +++ b/packages/web/src/ssr/index/+onRenderClient.tsx @@ -2,21 +2,14 @@ // simply render the SPA without SSR // TODO: Use vike SPA setting -import 'setimmediate' -import { Buffer } from 'buffer' +import '../polyfills' -import processBrowser from 'process/browser' +import 'setimmediate' import { createRoot } from 'react-dom/client' import '../../index.css' import RootWithProviders from 'ssr/RootWithProviders' -// @ts-ignore -window.global ||= window -// @ts-ignore -window.Buffer = Buffer -window.process = { ...processBrowser, env: process.env } - export default function render() { const container = document.getElementById('root') if (container) { diff --git a/packages/web/src/ssr/library/+onRenderClient.tsx b/packages/web/src/ssr/library/+onRenderClient.tsx index 2df5d681deb..7eef81283ba 100644 --- a/packages/web/src/ssr/library/+onRenderClient.tsx +++ b/packages/web/src/ssr/library/+onRenderClient.tsx @@ -1,22 +1,15 @@ // Simple SSR pages use createRoot instead of hydrateRoot // to avoid hydration mismatches since we only render meta tags during SSR -import 'setimmediate' -import { Buffer } from 'buffer' +import '../polyfills' -import processBrowser from 'process/browser' +import 'setimmediate' import { createRoot } from 'react-dom/client' import '../../index.css' import RootWithProviders from 'ssr/RootWithProviders' import { isMobile as getIsMobile } from 'utils/clientUtil' -// @ts-ignore -window.global ||= window -// @ts-ignore -window.Buffer = Buffer -window.process = { ...processBrowser, env: process.env } - export default function render() { const container = document.getElementById('root') if (container) { diff --git a/packages/web/src/ssr/messages/+onRenderClient.tsx b/packages/web/src/ssr/messages/+onRenderClient.tsx index 2df5d681deb..7eef81283ba 100644 --- a/packages/web/src/ssr/messages/+onRenderClient.tsx +++ b/packages/web/src/ssr/messages/+onRenderClient.tsx @@ -1,22 +1,15 @@ // Simple SSR pages use createRoot instead of hydrateRoot // to avoid hydration mismatches since we only render meta tags during SSR -import 'setimmediate' -import { Buffer } from 'buffer' +import '../polyfills' -import processBrowser from 'process/browser' +import 'setimmediate' import { createRoot } from 'react-dom/client' import '../../index.css' import RootWithProviders from 'ssr/RootWithProviders' import { isMobile as getIsMobile } from 'utils/clientUtil' -// @ts-ignore -window.global ||= window -// @ts-ignore -window.Buffer = Buffer -window.process = { ...processBrowser, env: process.env } - export default function render() { const container = document.getElementById('root') if (container) { diff --git a/packages/web/src/ssr/notifications/+onRenderClient.tsx b/packages/web/src/ssr/notifications/+onRenderClient.tsx index 2df5d681deb..7eef81283ba 100644 --- a/packages/web/src/ssr/notifications/+onRenderClient.tsx +++ b/packages/web/src/ssr/notifications/+onRenderClient.tsx @@ -1,22 +1,15 @@ // Simple SSR pages use createRoot instead of hydrateRoot // to avoid hydration mismatches since we only render meta tags during SSR -import 'setimmediate' -import { Buffer } from 'buffer' +import '../polyfills' -import processBrowser from 'process/browser' +import 'setimmediate' import { createRoot } from 'react-dom/client' import '../../index.css' import RootWithProviders from 'ssr/RootWithProviders' import { isMobile as getIsMobile } from 'utils/clientUtil' -// @ts-ignore -window.global ||= window -// @ts-ignore -window.Buffer = Buffer -window.process = { ...processBrowser, env: process.env } - export default function render() { const container = document.getElementById('root') if (container) { diff --git a/packages/web/src/ssr/polyfills.ts b/packages/web/src/ssr/polyfills.ts new file mode 100644 index 00000000000..de595c5588f --- /dev/null +++ b/packages/web/src/ssr/polyfills.ts @@ -0,0 +1,15 @@ +/** + * Browser polyfills for Node.js globals + * This file MUST be imported before any other imports to ensure + * Buffer, process, and global are available when modules load. + */ + +import { Buffer } from 'buffer' + +import processBrowser from 'process/browser' + +// @ts-ignore +window.global ||= window +// @ts-ignore +window.Buffer = Buffer +window.process = { ...processBrowser, env: process.env } diff --git a/packages/web/src/ssr/rewards/+onRenderClient.tsx b/packages/web/src/ssr/rewards/+onRenderClient.tsx index 2df5d681deb..7eef81283ba 100644 --- a/packages/web/src/ssr/rewards/+onRenderClient.tsx +++ b/packages/web/src/ssr/rewards/+onRenderClient.tsx @@ -1,22 +1,15 @@ // Simple SSR pages use createRoot instead of hydrateRoot // to avoid hydration mismatches since we only render meta tags during SSR -import 'setimmediate' -import { Buffer } from 'buffer' +import '../polyfills' -import processBrowser from 'process/browser' +import 'setimmediate' import { createRoot } from 'react-dom/client' import '../../index.css' import RootWithProviders from 'ssr/RootWithProviders' import { isMobile as getIsMobile } from 'utils/clientUtil' -// @ts-ignore -window.global ||= window -// @ts-ignore -window.Buffer = Buffer -window.process = { ...processBrowser, env: process.env } - export default function render() { const container = document.getElementById('root') if (container) { diff --git a/packages/web/src/ssr/search/+onRenderClient.tsx b/packages/web/src/ssr/search/+onRenderClient.tsx index 2df5d681deb..7eef81283ba 100644 --- a/packages/web/src/ssr/search/+onRenderClient.tsx +++ b/packages/web/src/ssr/search/+onRenderClient.tsx @@ -1,22 +1,15 @@ // Simple SSR pages use createRoot instead of hydrateRoot // to avoid hydration mismatches since we only render meta tags during SSR -import 'setimmediate' -import { Buffer } from 'buffer' +import '../polyfills' -import processBrowser from 'process/browser' +import 'setimmediate' import { createRoot } from 'react-dom/client' import '../../index.css' import RootWithProviders from 'ssr/RootWithProviders' import { isMobile as getIsMobile } from 'utils/clientUtil' -// @ts-ignore -window.global ||= window -// @ts-ignore -window.Buffer = Buffer -window.process = { ...processBrowser, env: process.env } - export default function render() { const container = document.getElementById('root') if (container) { diff --git a/packages/web/src/ssr/settings/+onRenderClient.tsx b/packages/web/src/ssr/settings/+onRenderClient.tsx index 2df5d681deb..7eef81283ba 100644 --- a/packages/web/src/ssr/settings/+onRenderClient.tsx +++ b/packages/web/src/ssr/settings/+onRenderClient.tsx @@ -1,22 +1,15 @@ // Simple SSR pages use createRoot instead of hydrateRoot // to avoid hydration mismatches since we only render meta tags during SSR -import 'setimmediate' -import { Buffer } from 'buffer' +import '../polyfills' -import processBrowser from 'process/browser' +import 'setimmediate' import { createRoot } from 'react-dom/client' import '../../index.css' import RootWithProviders from 'ssr/RootWithProviders' import { isMobile as getIsMobile } from 'utils/clientUtil' -// @ts-ignore -window.global ||= window -// @ts-ignore -window.Buffer = Buffer -window.process = { ...processBrowser, env: process.env } - export default function render() { const container = document.getElementById('root') if (container) { diff --git a/packages/web/src/ssr/signup/+onRenderClient.tsx b/packages/web/src/ssr/signup/+onRenderClient.tsx index 2df5d681deb..7eef81283ba 100644 --- a/packages/web/src/ssr/signup/+onRenderClient.tsx +++ b/packages/web/src/ssr/signup/+onRenderClient.tsx @@ -1,22 +1,15 @@ // Simple SSR pages use createRoot instead of hydrateRoot // to avoid hydration mismatches since we only render meta tags during SSR -import 'setimmediate' -import { Buffer } from 'buffer' +import '../polyfills' -import processBrowser from 'process/browser' +import 'setimmediate' import { createRoot } from 'react-dom/client' import '../../index.css' import RootWithProviders from 'ssr/RootWithProviders' import { isMobile as getIsMobile } from 'utils/clientUtil' -// @ts-ignore -window.global ||= window -// @ts-ignore -window.Buffer = Buffer -window.process = { ...processBrowser, env: process.env } - export default function render() { const container = document.getElementById('root') if (container) { diff --git a/packages/web/src/ssr/trending/+onRenderClient.tsx b/packages/web/src/ssr/trending/+onRenderClient.tsx index 2df5d681deb..7eef81283ba 100644 --- a/packages/web/src/ssr/trending/+onRenderClient.tsx +++ b/packages/web/src/ssr/trending/+onRenderClient.tsx @@ -1,22 +1,15 @@ // Simple SSR pages use createRoot instead of hydrateRoot // to avoid hydration mismatches since we only render meta tags during SSR -import 'setimmediate' -import { Buffer } from 'buffer' +import '../polyfills' -import processBrowser from 'process/browser' +import 'setimmediate' import { createRoot } from 'react-dom/client' import '../../index.css' import RootWithProviders from 'ssr/RootWithProviders' import { isMobile as getIsMobile } from 'utils/clientUtil' -// @ts-ignore -window.global ||= window -// @ts-ignore -window.Buffer = Buffer -window.process = { ...processBrowser, env: process.env } - export default function render() { const container = document.getElementById('root') if (container) { diff --git a/packages/web/src/ssr/upload/+onRenderClient.tsx b/packages/web/src/ssr/upload/+onRenderClient.tsx index 2df5d681deb..7eef81283ba 100644 --- a/packages/web/src/ssr/upload/+onRenderClient.tsx +++ b/packages/web/src/ssr/upload/+onRenderClient.tsx @@ -1,22 +1,15 @@ // Simple SSR pages use createRoot instead of hydrateRoot // to avoid hydration mismatches since we only render meta tags during SSR -import 'setimmediate' -import { Buffer } from 'buffer' +import '../polyfills' -import processBrowser from 'process/browser' +import 'setimmediate' import { createRoot } from 'react-dom/client' import '../../index.css' import RootWithProviders from 'ssr/RootWithProviders' import { isMobile as getIsMobile } from 'utils/clientUtil' -// @ts-ignore -window.global ||= window -// @ts-ignore -window.Buffer = Buffer -window.process = { ...processBrowser, env: process.env } - export default function render() { const container = document.getElementById('root') if (container) { diff --git a/packages/web/src/ssr/wallet/+onRenderClient.tsx b/packages/web/src/ssr/wallet/+onRenderClient.tsx index 2df5d681deb..7eef81283ba 100644 --- a/packages/web/src/ssr/wallet/+onRenderClient.tsx +++ b/packages/web/src/ssr/wallet/+onRenderClient.tsx @@ -1,22 +1,15 @@ // Simple SSR pages use createRoot instead of hydrateRoot // to avoid hydration mismatches since we only render meta tags during SSR -import 'setimmediate' -import { Buffer } from 'buffer' +import '../polyfills' -import processBrowser from 'process/browser' +import 'setimmediate' import { createRoot } from 'react-dom/client' import '../../index.css' import RootWithProviders from 'ssr/RootWithProviders' import { isMobile as getIsMobile } from 'utils/clientUtil' -// @ts-ignore -window.global ||= window -// @ts-ignore -window.Buffer = Buffer -window.process = { ...processBrowser, env: process.env } - export default function render() { const container = document.getElementById('root') if (container) { diff --git a/packages/web/src/ssr/worker.js b/packages/web/src/ssr/worker.js index afab9c01701..65bbd89e9b1 100644 --- a/packages/web/src/ssr/worker.js +++ b/packages/web/src/ssr/worker.js @@ -7,47 +7,51 @@ */ import { getAssetFromKV } from '@cloudflare/kv-asset-handler' +// eslint-disable-next-line import/no-unresolved +import manifestJSON from '__STATIC_CONTENT_MANIFEST' import { Toucan } from 'toucan-js' import { renderPage } from 'vike/server' -/* globals SENTRY_DSN */ +const assetManifest = JSON.parse(manifestJSON) const DEBUG = false const BROWSER_CACHE_TTL_SECONDS = 60 * 60 * 24 -addEventListener('fetch', (event) => { - const sentry = - typeof SENTRY_DSN !== 'undefined' +export default { + async fetch(request, env, ctx) { + const sentry = env.SENTRY_DSN ? new Toucan({ - dsn: SENTRY_DSN, - context: event, - request: event.request + dsn: env.SENTRY_DSN, + context: ctx, + request }) : null - try { - event.respondWith(handleEvent(event)) - } catch (e) { - if (sentry) { - sentry.captureException(e) - } - if (DEBUG) { - return event.respondWith( - new Response(e.message || e.toString(), { - status: 500 - }) - ) + + try { + return await handleRequest(request, env, ctx) + } catch (e) { + if (sentry) { + sentry.captureException(e) + } + if (DEBUG) { + return new Response(e.message || e.toString(), { status: 500 }) + } + return new Response('Internal Error', { status: 500 }) } - event.respondWith(new Response('Internal Error', { status: 500 })) } -}) +} -async function handleEvent(event) { - if (!isAssetUrl(event.request.url)) { - // If the request is not for an asset, then it's a request for a page +async function handleRequest(request, env, ctx) { + if (!isAssetUrl(request.url)) { + // Convert request headers to a plain object for Vike + const headers = {} + request.headers.forEach((value, key) => { + headers[key.toLowerCase()] = value + }) const pageContextInit = { - urlOriginal: event.request.url, - userAgent: event.request.headers.get('User-Agent') + urlOriginal: request.url, + headers } const pageContext = await renderPage(pageContextInit) @@ -56,18 +60,39 @@ async function handleEvent(event) { if (!httpResponse) { throw new Error(pageContext.errorWhileRendering) } else { - const { body, statusCode: status, headers } = httpResponse + const { statusCode: status, headers } = httpResponse + // httpResponse.body can be a string or ReadableStream + // Use getBody() if available, otherwise use body directly + const body = + typeof httpResponse.getBody === 'function' + ? await httpResponse.getBody() + : httpResponse.body + return new Response(body, { headers, status }) } } else { - // Adjust browser cache on assets that don't change frequently and/or - // are given unique hashes when they do. - const asset = await getAssetFromKV(event) + try { + const asset = await getAssetFromKV( + { + request, + waitUntil: ctx.waitUntil.bind(ctx) + }, + { + ASSET_NAMESPACE: env.__STATIC_CONTENT, + ASSET_MANIFEST: assetManifest + } + ) - const response = new Response(asset.body, asset) - response.headers.set('cache-control', BROWSER_CACHE_TTL_SECONDS) + const response = new Response(asset.body, asset) + response.headers.set( + 'cache-control', + `max-age=${BROWSER_CACHE_TTL_SECONDS}` + ) - return response + return response + } catch (e) { + return new Response('Asset not found', { status: 404 }) + } } } diff --git a/packages/web/src/ssr/wrangler.toml b/packages/web/src/ssr/wrangler.toml index ba6446157df..c33f2e87a0c 100644 --- a/packages/web/src/ssr/wrangler.toml +++ b/packages/web/src/ssr/wrangler.toml @@ -1,13 +1,16 @@ -compatibility_date = "2023-10-25" +compatibility_date = "2025-12-10" +compatibility_flags = ["nodejs_compat"] account_id = "3811365464a8e56b2b27a5590e328e49" main = "./worker.js" -node_compat = true [site] bucket = "../../build-ssr/client" [env.release] name = "audius-web-ssr-release-candidate" +vars = { VITE_ENVIRONMENT = "production", DISCOVERY_NODE_ALLOWLIST = [ + "https://api.audius.co" +] } [env.production] name = "audius-web-ssr" diff --git a/packages/web/wrangler.toml b/packages/web/wrangler.toml index 2e3438c5d64..c20c571ca7e 100644 --- a/packages/web/wrangler.toml +++ b/packages/web/wrangler.toml @@ -1,7 +1,7 @@ -compatibility_date = "2023-10-25" +compatibility_date = "2025-12-10" +compatibility_flags = ["nodejs_compat"] account_id = "3811365464a8e56b2b27a5590e328e49" main = "./scripts/workers-site/index.js" -node_compat = true [site] bucket = "./build"