diff --git a/peaceful-escape/.env.example b/peaceful-escape/.env.example new file mode 100644 index 0000000..f680dd2 --- /dev/null +++ b/peaceful-escape/.env.example @@ -0,0 +1,6 @@ +PGHOST=postgres.database.host +PGDATABASE=database +PGPORT=6543 +PGUSER=user.database +PGPASSWORD=password +AUTH_SECRET=base64 \ No newline at end of file diff --git a/peaceful-escape/.gitignore b/peaceful-escape/.gitignore index 016b59e..c0d2183 100644 --- a/peaceful-escape/.gitignore +++ b/peaceful-escape/.gitignore @@ -15,6 +15,7 @@ pnpm-debug.log* # environment variables .env +.env.local .env.production # macOS-specific files diff --git a/peaceful-escape/astro.config.ts b/peaceful-escape/astro.config.ts index e5d1641..b226b15 100644 --- a/peaceful-escape/astro.config.ts +++ b/peaceful-escape/astro.config.ts @@ -11,5 +11,13 @@ export default defineConfig({ solid(), ], output: "hybrid", - adapter: vercel() + adapter: vercel(), + experimental: { + actions: true, + }, + vite: { + optimizeDeps: { + exclude: ["oslo"] + } + } }); \ No newline at end of file diff --git a/peaceful-escape/package.json b/peaceful-escape/package.json index ef29f92..148b9f9 100644 --- a/peaceful-escape/package.json +++ b/peaceful-escape/package.json @@ -10,16 +10,30 @@ "astro": "astro" }, "dependencies": { - "@astrojs/check": "^0.7.0", "@astrojs/solid-js": "^4.2.0", "@astrojs/tailwind": "^5.1.0", "@astrojs/vercel": "^7.6.0", - "@fontsource-variable/montserrat": "^5.0.19", - "@fontsource/source-sans-pro": "^5.0.8", - "@orama/orama": "npm:@jsr/orama__orama@^2.0.6", + "@lucia-auth/adapter-drizzle": "^1.0.7", + "@node-rs/argon2": "^1.8.3", + "@orama/orama": "^2.0.19", + "@oxi/result": "npm:@jsr/oxi__result@^0.3.0", + "@std/encoding": "npm:@jsr/std__encoding@1.0.0-rc.1", + "arctic": "^1.9.0", "astro": "^4.9.2", + "drizzle-orm": "^0.31.1", + "lucia": "^3.2.0", + "oslo": "^1.2.0", + "postgres": "^3.4.4", "solid-js": "^1.8.17", "tailwindcss": "^3.4.3", + "zod": "^3.23.8" + }, + "devDependencies": { + "@astrojs/check": "^0.7.0", + "@types/node": "^20.14.1", + "dotenv": "^16.4.5", + "drizzle-kit": "^0.22.2", + "jsr": "^0.12.4", "typescript": "^5.4.5" } } \ No newline at end of file diff --git a/peaceful-escape/pnpm-lock.yaml b/peaceful-escape/pnpm-lock.yaml index 84b4e09..82d19c6 100644 --- a/peaceful-escape/pnpm-lock.yaml +++ b/peaceful-escape/pnpm-lock.yaml @@ -8,36 +8,73 @@ importers: .: dependencies: - '@astrojs/check': - specifier: ^0.7.0 - version: 0.7.0(typescript@5.4.5) '@astrojs/solid-js': specifier: ^4.2.0 - version: 4.2.0(solid-js@1.8.17)(vite@5.2.12) + version: 4.2.0(solid-js@1.8.17)(vite@5.2.12(@types/node@20.14.1)) '@astrojs/tailwind': specifier: ^5.1.0 - version: 5.1.0(astro@4.9.2(typescript@5.4.5))(tailwindcss@3.4.3) + version: 5.1.0(astro@4.9.2(@types/node@20.14.1)(typescript@5.4.5))(tailwindcss@3.4.3) '@astrojs/vercel': specifier: ^7.6.0 - version: 7.6.0(astro@4.9.2(typescript@5.4.5)) - '@fontsource-variable/montserrat': - specifier: ^5.0.19 - version: 5.0.19 - '@fontsource/source-sans-pro': - specifier: ^5.0.8 - version: 5.0.8 + version: 7.6.0(astro@4.9.2(@types/node@20.14.1)(typescript@5.4.5)) + '@lucia-auth/adapter-drizzle': + specifier: ^1.0.7 + version: 1.0.7(lucia@3.2.0) + '@node-rs/argon2': + specifier: ^1.8.3 + version: 1.8.3 '@orama/orama': - specifier: npm:@jsr/orama__orama@^2.0.6 - version: '@jsr/orama__orama@2.0.6' + specifier: ^2.0.19 + version: 2.0.19 + '@oxi/result': + specifier: npm:@jsr/oxi__result@^0.3.0 + version: '@jsr/oxi__result@0.3.0' + '@std/encoding': + specifier: npm:@jsr/std__encoding@1.0.0-rc.1 + version: '@jsr/std__encoding@1.0.0-rc.1' + arctic: + specifier: ^1.9.0 + version: 1.9.0 astro: specifier: ^4.9.2 - version: 4.9.2(typescript@5.4.5) + version: 4.9.2(@types/node@20.14.1)(typescript@5.4.5) + drizzle-orm: + specifier: ^0.31.1 + version: 0.31.1(postgres@3.4.4) + lucia: + specifier: ^3.2.0 + version: 3.2.0 + oslo: + specifier: ^1.2.0 + version: 1.2.0 + postgres: + specifier: ^3.4.4 + version: 3.4.4 solid-js: specifier: ^1.8.17 version: 1.8.17 tailwindcss: specifier: ^3.4.3 version: 3.4.3 + zod: + specifier: ^3.23.8 + version: 3.23.8 + devDependencies: + '@astrojs/check': + specifier: ^0.7.0 + version: 0.7.0(typescript@5.4.5) + '@types/node': + specifier: ^20.14.1 + version: 20.14.1 + dotenv: + specifier: ^16.4.5 + version: 16.4.5 + drizzle-kit: + specifier: ^0.22.2 + version: 0.22.2 + jsr: + specifier: ^0.12.4 + version: 0.12.4 typescript: specifier: ^5.4.5 version: 5.4.5 @@ -240,9 +277,33 @@ packages: '@emmetio/stream-reader@2.2.0': resolution: {integrity: sha512-fXVXEyFA5Yv3M3n8sUGT7+fvecGrZP4k6FnWWMSZVQf69kAq0LLpaBQLGcPR30m3zMmKYhECP4k/ZkzvhEW5kw==} + '@emnapi/core@0.45.0': + resolution: {integrity: sha512-DPWjcUDQkCeEM4VnljEOEcXdAD7pp8zSZsgOujk/LGIwCXWbXJngin+MO4zbH429lzeC3WbYLGjE2MaUOwzpyw==} + + '@emnapi/core@1.2.0': + resolution: {integrity: sha512-E7Vgw78I93we4ZWdYCb4DGAwRROGkMIXk7/y87UmANR+J6qsWusmC3gLt0H+O0KOt5e6O38U8oJamgbudrES/w==} + + '@emnapi/runtime@0.45.0': + resolution: {integrity: sha512-Txumi3td7J4A/xTTwlssKieHKTGl3j4A1tglBx72auZ49YK7ePY6XZricgIg9mnZT4xPfA+UPCUdnhRuEFDL+w==} + '@emnapi/runtime@1.2.0': resolution: {integrity: sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==} + '@emnapi/wasi-threads@1.0.1': + resolution: {integrity: sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==} + + '@esbuild-kit/core-utils@3.3.2': + resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} + + '@esbuild-kit/esm-loader@2.6.5': + resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==} + + '@esbuild/aix-ppc64@0.19.12': + resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + '@esbuild/aix-ppc64@0.20.2': resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} engines: {node: '>=12'} @@ -255,6 +316,18 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/android-arm64@0.18.20': + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.19.12': + resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm64@0.20.2': resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} engines: {node: '>=12'} @@ -267,6 +340,18 @@ packages: cpu: [arm64] os: [android] + '@esbuild/android-arm@0.18.20': + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.19.12': + resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + '@esbuild/android-arm@0.20.2': resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} engines: {node: '>=12'} @@ -279,6 +364,18 @@ packages: cpu: [arm] os: [android] + '@esbuild/android-x64@0.18.20': + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.19.12': + resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + '@esbuild/android-x64@0.20.2': resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} engines: {node: '>=12'} @@ -291,6 +388,18 @@ packages: cpu: [x64] os: [android] + '@esbuild/darwin-arm64@0.18.20': + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.19.12': + resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-arm64@0.20.2': resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} engines: {node: '>=12'} @@ -303,6 +412,18 @@ packages: cpu: [arm64] os: [darwin] + '@esbuild/darwin-x64@0.18.20': + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.19.12': + resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + '@esbuild/darwin-x64@0.20.2': resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} engines: {node: '>=12'} @@ -315,6 +436,18 @@ packages: cpu: [x64] os: [darwin] + '@esbuild/freebsd-arm64@0.18.20': + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.19.12': + resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-arm64@0.20.2': resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} engines: {node: '>=12'} @@ -327,6 +460,18 @@ packages: cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-x64@0.18.20': + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.19.12': + resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + '@esbuild/freebsd-x64@0.20.2': resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} engines: {node: '>=12'} @@ -339,6 +484,18 @@ packages: cpu: [x64] os: [freebsd] + '@esbuild/linux-arm64@0.18.20': + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.19.12': + resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm64@0.20.2': resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} engines: {node: '>=12'} @@ -351,6 +508,18 @@ packages: cpu: [arm64] os: [linux] + '@esbuild/linux-arm@0.18.20': + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.19.12': + resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + '@esbuild/linux-arm@0.20.2': resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} engines: {node: '>=12'} @@ -363,6 +532,18 @@ packages: cpu: [arm] os: [linux] + '@esbuild/linux-ia32@0.18.20': + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.19.12': + resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-ia32@0.20.2': resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} engines: {node: '>=12'} @@ -375,6 +556,18 @@ packages: cpu: [ia32] os: [linux] + '@esbuild/linux-loong64@0.18.20': + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.19.12': + resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-loong64@0.20.2': resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} engines: {node: '>=12'} @@ -387,6 +580,18 @@ packages: cpu: [loong64] os: [linux] + '@esbuild/linux-mips64el@0.18.20': + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.19.12': + resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-mips64el@0.20.2': resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} engines: {node: '>=12'} @@ -399,6 +604,18 @@ packages: cpu: [mips64el] os: [linux] + '@esbuild/linux-ppc64@0.18.20': + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.19.12': + resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-ppc64@0.20.2': resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} engines: {node: '>=12'} @@ -411,6 +628,18 @@ packages: cpu: [ppc64] os: [linux] + '@esbuild/linux-riscv64@0.18.20': + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.19.12': + resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-riscv64@0.20.2': resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} engines: {node: '>=12'} @@ -423,6 +652,18 @@ packages: cpu: [riscv64] os: [linux] + '@esbuild/linux-s390x@0.18.20': + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.19.12': + resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-s390x@0.20.2': resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} engines: {node: '>=12'} @@ -435,6 +676,18 @@ packages: cpu: [s390x] os: [linux] + '@esbuild/linux-x64@0.18.20': + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.19.12': + resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + '@esbuild/linux-x64@0.20.2': resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} engines: {node: '>=12'} @@ -447,6 +700,18 @@ packages: cpu: [x64] os: [linux] + '@esbuild/netbsd-x64@0.18.20': + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.19.12': + resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + '@esbuild/netbsd-x64@0.20.2': resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} engines: {node: '>=12'} @@ -459,6 +724,18 @@ packages: cpu: [x64] os: [netbsd] + '@esbuild/openbsd-x64@0.18.20': + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.19.12': + resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + '@esbuild/openbsd-x64@0.20.2': resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} engines: {node: '>=12'} @@ -471,6 +748,18 @@ packages: cpu: [x64] os: [openbsd] + '@esbuild/sunos-x64@0.18.20': + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.19.12': + resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + '@esbuild/sunos-x64@0.20.2': resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} engines: {node: '>=12'} @@ -483,6 +772,18 @@ packages: cpu: [x64] os: [sunos] + '@esbuild/win32-arm64@0.18.20': + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.19.12': + resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-arm64@0.20.2': resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} engines: {node: '>=12'} @@ -495,6 +796,18 @@ packages: cpu: [arm64] os: [win32] + '@esbuild/win32-ia32@0.18.20': + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.19.12': + resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-ia32@0.20.2': resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} engines: {node: '>=12'} @@ -507,6 +820,18 @@ packages: cpu: [ia32] os: [win32] + '@esbuild/win32-x64@0.18.20': + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.19.12': + resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + '@esbuild/win32-x64@0.20.2': resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} engines: {node: '>=12'} @@ -519,12 +844,6 @@ packages: cpu: [x64] os: [win32] - '@fontsource-variable/montserrat@5.0.19': - resolution: {integrity: sha512-vOlVjdGock2yBOeBbg5qexPa1TJM/PS8Nx9YlF6DFEtFf/Y5ayDbZRvV/WPj8W2vk7/aDxUEtTAp/Qp8wK9hNQ==} - - '@fontsource/source-sans-pro@5.0.8': - resolution: {integrity: sha512-5U2UvIYRkCMozZ388gCE73PEpa2MFgN/0t9O4a1FF7bGT/MIneQWSL1XpWZ8iMVYdh6ntxRf3iFA6slCIuFgkg==} - '@img/sharp-darwin-arm64@0.33.4': resolution: {integrity: sha512-p0suNqXufJs9t3RqLBO6vvrgr5OhgbWp76s5gTRvdmxmuv9E1rcaqGUsl3l4mKVmXPkTkTErXediAui4x+8PSA==} engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} @@ -663,13 +982,288 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - '@jsr/orama__orama@2.0.6': - resolution: {integrity: sha512-fG5ECq3vmcAmQyoB2yMibOPDBy8qiQEwqwZcRtP/QXW6+LGav6DY8a6KpQvvSxXWJ/xurgP0ICvMRmY0n6bOhA==, tarball: https://npm.jsr.io/~/11/@jsr/orama__orama/2.0.6.tgz} + '@jsr/oxi__core@0.2.1': + resolution: {integrity: sha512-CNgrxOD7fAgRBTDxkrKNsXVOuKwroFXZEjn9NpvZ45TrjWFvEKZ+E595cPKN/8xvRFZnJJwW1vwewGdCWiOshQ==, tarball: https://npm.jsr.io/~/11/@jsr/oxi__core/0.2.1.tgz} + + '@jsr/oxi__result@0.3.0': + resolution: {integrity: sha512-5YZAJ1EGeH7QNxDSRLpl0XHJPcEZM4HBUBOlkOQrH5ea+A5F03f9kEIy4YGUipRbeiAeKV1t7nDgmUcRKTKgIg==, tarball: https://npm.jsr.io/~/11/@jsr/oxi__result/0.3.0.tgz} + + '@jsr/std__encoding@1.0.0-rc.1': + resolution: {integrity: sha512-rUnbZPtM/S4KdVCTRTETuFj7BG3Hh49ybY1S6OPG1RKChed5+Zoh1PLf74Be5N9p+ayi0Aej7qCRIfzsQ9gmJA==, tarball: https://npm.jsr.io/~/11/@jsr/std__encoding/1.0.0-rc.1.tgz} + + '@lucia-auth/adapter-drizzle@1.0.7': + resolution: {integrity: sha512-X/V7fLBca8EC/gPXCntwbQpb0+F9oEuRoHElvsi9rCrdnGhCMNxHgwAvgiQ6pes+rIYpyvx4n3hvjqo/fPo03A==} + peerDependencies: + lucia: 3.x '@mapbox/node-pre-gyp@1.0.11': resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} hasBin: true + '@napi-rs/wasm-runtime@0.2.4': + resolution: {integrity: sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==} + + '@node-rs/argon2-android-arm-eabi@1.7.0': + resolution: {integrity: sha512-udDqkr5P9E+wYX1SZwAVPdyfYvaF4ry9Tm+R9LkfSHbzWH0uhU6zjIwNRp7m+n4gx691rk+lqqDAIP8RLKwbhg==} + engines: {node: '>= 10'} + cpu: [arm] + os: [android] + + '@node-rs/argon2-android-arm-eabi@1.8.3': + resolution: {integrity: sha512-JFZPlNM0A8Og+Tncb8UZsQrhEMlbHBXPsT3hRoKImzVmTmq28Os0ucFWow0AACp2coLHBSydXH3Dh0lZup3rWw==} + engines: {node: '>= 10'} + cpu: [arm] + os: [android] + + '@node-rs/argon2-android-arm64@1.7.0': + resolution: {integrity: sha512-s9j/G30xKUx8WU50WIhF0fIl1EdhBGq0RQ06lEhZ0Gi0ap8lhqbE2Bn5h3/G2D1k0Dx+yjeVVNmt/xOQIRG38A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@node-rs/argon2-android-arm64@1.8.3': + resolution: {integrity: sha512-zaf8P3T92caeW2xnMA7P1QvRA4pIt/04oilYP44XlTCtMye//vwXDMeK53sl7dvYiJKnzAWDRx41k8vZvpZazg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@node-rs/argon2-darwin-arm64@1.7.0': + resolution: {integrity: sha512-ZIz4L6HGOB9U1kW23g+m7anGNuTZ0RuTw0vNp3o+2DWpb8u8rODq6A8tH4JRL79S+Co/Nq608m9uackN2pe0Rw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@node-rs/argon2-darwin-arm64@1.8.3': + resolution: {integrity: sha512-DV/IbmLGdNXBtXb5o2UI5ba6kvqXqPAJgmMOTUCuHeBSp992GlLHdfU4rzGu0dNrxudBnunNZv+crd0YdEQSUA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@node-rs/argon2-darwin-x64@1.7.0': + resolution: {integrity: sha512-5oi/pxqVhODW/pj1+3zElMTn/YukQeywPHHYDbcAW3KsojFjKySfhcJMd1DjKTc+CHQI+4lOxZzSUzK7mI14Hw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@node-rs/argon2-darwin-x64@1.8.3': + resolution: {integrity: sha512-YMjmBGFZhLfYjfQ2gll9A+BZu/zAMV7lWZIbKxb7ZgEofILQwuGmExjDtY3Jplido/6leCEdpmlk2oIsME00LA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@node-rs/argon2-freebsd-x64@1.7.0': + resolution: {integrity: sha512-Ify08683hA4QVXYoIm5SUWOY5DPIT/CMB0CQT+IdxQAg/F+qp342+lUkeAtD5bvStQuCx/dFO3bnnzoe2clMhA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@node-rs/argon2-freebsd-x64@1.8.3': + resolution: {integrity: sha512-Hq3Rj5Yb2RolTG/luRPnv+XiGCbi5nAK25Pc8ou/tVapwX+iktEm/NXbxc5zsMxraYVkCvfdwBjweC5O+KqCGw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@node-rs/argon2-linux-arm-gnueabihf@1.7.0': + resolution: {integrity: sha512-7DjDZ1h5AUHAtRNjD19RnQatbhL+uuxBASuuXIBu4/w6Dx8n7YPxwTP4MXfsvuRgKuMWiOb/Ub/HJ3kXVCXRkg==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@node-rs/argon2-linux-arm-gnueabihf@1.8.3': + resolution: {integrity: sha512-x49l8RgzKoG0/V0IXa5rrEl1TcJEc936ctlYFvqcunSOyowZ6kiWtrp1qrbOR8gbaNILl11KTF52vF6+h8UlEQ==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@node-rs/argon2-linux-arm64-gnu@1.7.0': + resolution: {integrity: sha512-nJDoMP4Y3YcqGswE4DvP080w6O24RmnFEDnL0emdI8Nou17kNYBzP2546Nasx9GCyLzRcYQwZOUjrtUuQ+od2g==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@node-rs/argon2-linux-arm64-gnu@1.8.3': + resolution: {integrity: sha512-gJesam/qA63reGkb9qJ2TjFSLBtY41zQh2oei7nfnYsmVQPuHHWItJxEa1Bm21SPW53gZex4jFJbDIgj0+PxIw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@node-rs/argon2-linux-arm64-musl@1.7.0': + resolution: {integrity: sha512-BKWS8iVconhE3jrb9mj6t1J9vwUqQPpzCbUKxfTGJfc+kNL58F1SXHBoe2cDYGnHrFEHTY0YochzXoAfm4Dm/A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@node-rs/argon2-linux-arm64-musl@1.8.3': + resolution: {integrity: sha512-7O6kQdSKzB4Tjx/EBa8zKIxnmLkQE8VdJgPm6Ksrpn+ueo0mx2xf76fIDnbbTCtm3UbB+y+FkTo2wLA7tOqIKg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@node-rs/argon2-linux-x64-gnu@1.7.0': + resolution: {integrity: sha512-EmgqZOlf4Jurk/szW1iTsVISx25bKksVC5uttJDUloTgsAgIGReCpUUO1R24pBhu9ESJa47iv8NSf3yAfGv6jQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@node-rs/argon2-linux-x64-gnu@1.8.3': + resolution: {integrity: sha512-OBH+EFG7BGjFyldaao2H2gSCLmjtrrwf420B1L+lFn7JLW9UAjsIPFKAcWsYwPa/PwYzIge9Y7SGcpqlsSEX0w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@node-rs/argon2-linux-x64-musl@1.7.0': + resolution: {integrity: sha512-/o1efYCYIxjfuoRYyBTi2Iy+1iFfhqHCvvVsnjNSgO1xWiWrX0Rrt/xXW5Zsl7vS2Y+yu8PL8KFWRzZhaVxfKA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@node-rs/argon2-linux-x64-musl@1.8.3': + resolution: {integrity: sha512-bDbMuyekIxZaN7NaX+gHVkOyABB8bcMEJYeRPW1vCXKHj3brJns1wiUFSxqeUXreupifNVJlQfPt1Y5B/vFXgQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@node-rs/argon2-wasm32-wasi@1.7.0': + resolution: {integrity: sha512-Evmk9VcxqnuwQftfAfYEr6YZYSPLzmKUsbFIMep5nTt9PT4XYRFAERj7wNYp+rOcBenF3X4xoB+LhwcOMTNE5w==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@node-rs/argon2-wasm32-wasi@1.8.3': + resolution: {integrity: sha512-NBf2cMCDbNKMzp13Pog8ZPmI0M9U4Ak5b95EUjkp17kdKZFds12dwW67EMnj7Zy+pRqby2QLECaWebDYfNENTg==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@node-rs/argon2-win32-arm64-msvc@1.7.0': + resolution: {integrity: sha512-qgsU7T004COWWpSA0tppDqDxbPLgg8FaU09krIJ7FBl71Sz8SFO40h7fDIjfbTT5w7u6mcaINMQ5bSHu75PCaA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@node-rs/argon2-win32-arm64-msvc@1.8.3': + resolution: {integrity: sha512-AHpPo7UbdW5WWjwreVpgFSY0o1RY4A7cUFaqDXZB2OqEuyrhMxBdZct9PX7PQKI18D85pLsODnR+gvVuTwJ6rQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@node-rs/argon2-win32-ia32-msvc@1.7.0': + resolution: {integrity: sha512-JGafwWYQ/HpZ3XSwP4adQ6W41pRvhcdXvpzIWtKvX+17+xEXAe2nmGWM6s27pVkg1iV2ZtoYLRDkOUoGqZkCcg==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + + '@node-rs/argon2-win32-ia32-msvc@1.8.3': + resolution: {integrity: sha512-bqzn2rcQkEwCINefhm69ttBVVkgHJb/V03DdBKsPFtiX6H47axXKz62d1imi26zFXhOEYxhKbu3js03GobJOLw==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + + '@node-rs/argon2-win32-x64-msvc@1.7.0': + resolution: {integrity: sha512-9oq4ShyFakw8AG3mRls0AoCpxBFcimYx7+jvXeAf2OqKNO+mSA6eZ9z7KQeVCi0+SOEUYxMGf5UiGiDb9R6+9Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@node-rs/argon2-win32-x64-msvc@1.8.3': + resolution: {integrity: sha512-ILlrRThdbp5xNR5gwYM2ic1n/vG5rJ8dQZ+YMRqksl+lnTJ/6FDe5BOyIhiPtiDwlCiCtUA+1NxpDB9KlUCAIA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@node-rs/argon2@1.7.0': + resolution: {integrity: sha512-zfULc+/tmcWcxn+nHkbyY8vP3+MpEqKORbszt4UkpqZgBgDAAIYvuDN/zukfTgdmo6tmJKKVfzigZOPk4LlIog==} + engines: {node: '>= 10'} + + '@node-rs/argon2@1.8.3': + resolution: {integrity: sha512-sf/QAEI59hsMEEE2J8vO4hKrXrv4Oplte3KI2N4MhMDYpytH0drkVfErmHBfWFZxxIEK03fX1WsBNswS2nIZKg==} + engines: {node: '>= 10'} + + '@node-rs/bcrypt-android-arm-eabi@1.9.0': + resolution: {integrity: sha512-nOCFISGtnodGHNiLrG0WYLWr81qQzZKYfmwHc7muUeq+KY0sQXyHOwZk9OuNQAWv/lnntmtbwkwT0QNEmOyLvA==} + engines: {node: '>= 10'} + cpu: [arm] + os: [android] + + '@node-rs/bcrypt-android-arm64@1.9.0': + resolution: {integrity: sha512-+ZrIAtigVmjYkqZQTThHVlz0+TG6D+GDHWhVKvR2DifjtqJ0i+mb9gjo++hN+fWEQdWNGxKCiBBjwgT4EcXd6A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@node-rs/bcrypt-darwin-arm64@1.9.0': + resolution: {integrity: sha512-CQiS+F9Pa0XozvkXR1g7uXE9QvBOPOplDg0iCCPRYTN9PqA5qYxhwe48G3o+v2UeQceNRrbnEtWuANm7JRqIhw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@node-rs/bcrypt-darwin-x64@1.9.0': + resolution: {integrity: sha512-4pTKGawYd7sNEjdJ7R/R67uwQH1VvwPZ0SSUMmeNHbxD5QlwAPXdDH11q22uzVXsvNFZ6nGQBg8No5OUGpx6Ug==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@node-rs/bcrypt-freebsd-x64@1.9.0': + resolution: {integrity: sha512-UmWzySX4BJhT/B8xmTru6iFif3h0Rpx3TqxRLCcbgmH43r7k5/9QuhpiyzpvKGpKHJCFNm4F3rC2wghvw5FCIg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@node-rs/bcrypt-linux-arm-gnueabihf@1.9.0': + resolution: {integrity: sha512-8qoX4PgBND2cVwsbajoAWo3NwdfJPEXgpCsZQZURz42oMjbGyhhSYbovBCskGU3EBLoC8RA2B1jFWooeYVn5BA==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@node-rs/bcrypt-linux-arm64-gnu@1.9.0': + resolution: {integrity: sha512-TuAC6kx0SbcIA4mSEWPi+OCcDjTQUMl213v5gMNlttF+D4ieIZx6pPDGTaMO6M2PDHTeCG0CBzZl0Lu+9b0c7Q==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@node-rs/bcrypt-linux-arm64-musl@1.9.0': + resolution: {integrity: sha512-/sIvKDABOI8QOEnLD7hIj02BVaNOuCIWBKvxcJOt8+TuwJ6zmY1UI5kSv9d99WbiHjTp97wtAUbZQwauU4b9ew==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@node-rs/bcrypt-linux-x64-gnu@1.9.0': + resolution: {integrity: sha512-DyyhDHDsLBsCKz1tZ1hLvUZSc1DK0FU0v52jK6IBQxrj24WscSU9zZe7ie/V9kdmA4Ep57BfpWX8Dsa2JxGdgQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@node-rs/bcrypt-linux-x64-musl@1.9.0': + resolution: {integrity: sha512-duIiuqQ+Lew8ASSAYm6ZRqcmfBGWwsi81XLUwz86a2HR7Qv6V4yc3ZAUQovAikhjCsIqe8C11JlAZSK6+PlXYg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@node-rs/bcrypt-wasm32-wasi@1.9.0': + resolution: {integrity: sha512-ylaGmn9Wjwv/D5lxtawttx3H6Uu2WTTR7lWlRHGT6Ga/MB1Vj4OjSGUW8G8zIVnKuXpGbZ92pgHlt4HUpSLctw==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@node-rs/bcrypt-win32-arm64-msvc@1.9.0': + resolution: {integrity: sha512-2h86gF7QFyEzODuDFml/Dp1MSJoZjxJ4yyT2Erf4NkwsiA5MqowUhUsorRwZhX6+2CtlGa7orbwi13AKMsYndw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@node-rs/bcrypt-win32-ia32-msvc@1.9.0': + resolution: {integrity: sha512-kqxalCvhs4FkN0+gWWfa4Bdy2NQAkfiqq/CEf6mNXC13RSV673Ev9V8sRlQyNpCHCNkeXfOT9pgoBdJmMs9muA==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + + '@node-rs/bcrypt-win32-x64-msvc@1.9.0': + resolution: {integrity: sha512-2y0Tuo6ZAT2Cz8V7DHulSlv1Bip3zbzeXyeur+uR25IRNYXKvI/P99Zl85Fbuu/zzYAZRLLlGTRe6/9IHofe/w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@node-rs/bcrypt@1.9.0': + resolution: {integrity: sha512-u2OlIxW264bFUfvbFqDz9HZKFjwe8FHFtn7T/U8mYjPZ7DWYpbUB+/dkW/QgYfMSfR0ejkyuWaBBe0coW7/7ig==} + engines: {node: '>= 10'} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -682,6 +1276,10 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@orama/orama@2.0.19': + resolution: {integrity: sha512-9nlF5iYUghewRt2TDmAJO5TN4hYFPhql4d2ZAdJYJtGSIi2BZjMNQIqQ874w0q/rur67wp0AWLb020EakEN0aA==} + engines: {node: '>= 16.0.0'} + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -773,6 +1371,12 @@ packages: '@shikijs/core@1.6.2': resolution: {integrity: sha512-guW5JeDzZ7uwOjTfCOFZ2VtVXk5tmkMzBYbKGfXsmAH1qYOej49L5jQDcGmwd6/OgvpmWhzO2GNJkQIFnbwLPQ==} + '@tybys/wasm-util@0.8.3': + resolution: {integrity: sha512-Z96T/L6dUFFxgFJ+pQtkPpne9q7i6kIPYCFnQBHSgSPV9idTsKfIhCss0h5iM9irweZCatkrdeP8yi5uM1eX6Q==} + + '@tybys/wasm-util@0.9.0': + resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} + '@types/babel__core@7.20.5': resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} @@ -806,6 +1410,9 @@ packages: '@types/nlcst@1.0.4': resolution: {integrity: sha512-ABoYdNQ/kBSsLvZAekMhIPMQ3YUZvavStpKYs7BjLLuKVmIMA0LUgZ7b54zzuWJRbHF80v1cNf4r90Vd6eMQDg==} + '@types/node@20.14.1': + resolution: {integrity: sha512-T2MzSGEu+ysB/FkWfqmhV3PLyQlowdptmmgD20C6QxsS8Fmv5SjpZ1ayXaEC0S21/h5UJ9iA6W/5vSNU5l00OA==} + '@types/unist@2.0.10': resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} @@ -916,6 +1523,9 @@ packages: aproba@2.0.0: resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} + arctic@1.9.0: + resolution: {integrity: sha512-5llm2EMDM4wYv9q20JG19qnNAzEZj68MTYmZvfyKRivTHZqpR2uYHmN6umcaZjURvaaukwm5W6K1KH++qcdDRg==} + are-we-there-yet@2.0.0: resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} engines: {node: '>=10'} @@ -999,6 +1609,9 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + camelcase-css@2.0.1: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} @@ -1164,6 +1777,94 @@ packages: dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dotenv@16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + engines: {node: '>=12'} + + drizzle-kit@0.22.2: + resolution: {integrity: sha512-dxluXlhT1N9bpj2eZR3N/z3u4H0PbbrBYgyouIobFF25tOt2Buy1abx26Jii96qcYV0JgxjhnuV+FBcgR0Xa0w==} + hasBin: true + + drizzle-orm@0.31.1: + resolution: {integrity: sha512-hTbYne2XX3y6sV7WSxcPH6/vNSiQSUG9VZsFI27jBMCN0OT3Ok7ao3pIT5OMAqWkzJCRFgGjAaUeTAZWPgOKag==} + peerDependencies: + '@aws-sdk/client-rds-data': '>=3' + '@cloudflare/workers-types': '>=3' + '@electric-sql/pglite': '>=0.1.1' + '@libsql/client': '*' + '@neondatabase/serverless': '>=0.1' + '@op-engineering/op-sqlite': '>=2' + '@opentelemetry/api': ^1.4.1 + '@planetscale/database': '>=1' + '@types/better-sqlite3': '*' + '@types/pg': '*' + '@types/react': '>=18' + '@types/sql.js': '*' + '@vercel/postgres': '>=0.8.0' + '@xata.io/client': '*' + better-sqlite3: '>=7' + bun-types: '*' + expo-sqlite: '>=13.2.0' + knex: '*' + kysely: '*' + mysql2: '>=2' + pg: '>=8' + postgres: '>=3' + react: '>=18' + sql.js: '>=1' + sqlite3: '>=5' + peerDependenciesMeta: + '@aws-sdk/client-rds-data': + optional: true + '@cloudflare/workers-types': + optional: true + '@electric-sql/pglite': + optional: true + '@libsql/client': + optional: true + '@neondatabase/serverless': + optional: true + '@op-engineering/op-sqlite': + optional: true + '@opentelemetry/api': + optional: true + '@planetscale/database': + optional: true + '@types/better-sqlite3': + optional: true + '@types/pg': + optional: true + '@types/react': + optional: true + '@types/sql.js': + optional: true + '@vercel/postgres': + optional: true + '@xata.io/client': + optional: true + better-sqlite3: + optional: true + bun-types: + optional: true + expo-sqlite: + optional: true + knex: + optional: true + kysely: + optional: true + mysql2: + optional: true + pg: + optional: true + postgres: + optional: true + react: + optional: true + sql.js: + optional: true + sqlite3: + optional: true + dset@3.1.3: resolution: {integrity: sha512-20TuZZHCEZ2O71q9/+8BwKwZ0QtD9D8ObhrihJPr+vLLYlSuAU3/zL4cSlgbfeoGHTjCSJBa7NGcrF9/Bx/WJQ==} engines: {node: '>=4'} @@ -1171,8 +1872,8 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - electron-to-chromium@1.4.788: - resolution: {integrity: sha512-ubp5+Ev/VV8KuRoWnfP2QF2Bg+O2ZFdb49DiiNbz2VmgkIqrnyYaqIOqj8A6K/3p1xV0QcU5hBQ1+BmB6ot1OA==} + electron-to-chromium@1.4.789: + resolution: {integrity: sha512-0VbyiaXoT++Fi2vHGo2ThOeS6X3vgRCWrjPeO2FeIAWL6ItiSJ9BqlH8LfCXe3X1IdcG+S0iLoNaxQWhfZoGzQ==} emmet@2.4.7: resolution: {integrity: sha512-O5O5QNqtdlnQM2bmKHtJgyChcrFMgQuulI+WdiOw2NArzprUqqxUW6bgYtKvzKgrsYpuLWalOkdhNP+1jluhCA==} @@ -1193,6 +1894,21 @@ packages: es-module-lexer@1.5.3: resolution: {integrity: sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg==} + esbuild-register@3.5.0: + resolution: {integrity: sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==} + peerDependencies: + esbuild: '>=0.12 <1' + + esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + engines: {node: '>=12'} + hasBin: true + + esbuild@0.19.12: + resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} + engines: {node: '>=12'} + hasBin: true + esbuild@0.20.2: resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} engines: {node: '>=12'} @@ -1280,6 +1996,9 @@ packages: resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} engines: {node: '>= 8'} + fs-monkey@1.0.6: + resolution: {integrity: sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==} + fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -1312,6 +2031,9 @@ packages: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} + get-tsconfig@4.7.5: + resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==} + github-slugger@2.0.0: resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} @@ -1489,8 +2211,8 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - jackspeak@3.2.3: - resolution: {integrity: sha512-htOzIMPbpLid/Gq9/zaz9SfExABxqRe1sSCdxntlO/aMD6u0issZQiY25n2GKQUtJ02j7z5sfptlAOMpWWOmvw==} + jackspeak@3.3.0: + resolution: {integrity: sha512-glPiBfKguqA7v8JsXO3iLjJWZ9FV1vNpoI0I9hI9Mnk5yetO9uPLSpiCEmiVijAssv2f54HpvtzvAHfhPieiDQ==} engines: {node: '>=14'} jiti@1.21.0: @@ -1521,6 +2243,10 @@ packages: jsonc-parser@2.3.1: resolution: {integrity: sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==} + jsr@0.12.4: + resolution: {integrity: sha512-ZWDvqQE8014fWz9QBrkiuvRQ8mH97PRD13VIDzoMXDem3ff2S+wfXw+YAvrZE0aKzxh9FuHJX0HQRQ2MUHshig==} + hasBin: true + kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} @@ -1533,6 +2259,9 @@ packages: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} + kolorist@1.8.0: + resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + lilconfig@2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} @@ -1570,6 +2299,9 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lucia@3.2.0: + resolution: {integrity: sha512-eXMxXwk6hqtjRTj4W/x3EnTUtAztLPm0p2N2TEBMDEbakDLXiYnDQ9z/qahjPdPdhPguQc+vwO0/88zIWxlpuw==} + magic-string@0.30.10: resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} @@ -1619,6 +2351,13 @@ packages: mdast-util-to-string@4.0.0: resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + memfs-browser@3.5.10302: + resolution: {integrity: sha512-JJTc/nh3ig05O0gBBGZjTCPOyydaTxNF0uHYBrcc1gHNnO+KIHIvo0Y1FKCJsaei6FCl8C6xfQomXqu+cuzkIw==} + + memfs@3.5.3: + resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} + engines: {node: '>= 4.0.0'} + merge-anything@5.1.7: resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==} engines: {node: '>=12.13'} @@ -1791,6 +2530,10 @@ packages: node-releases@2.0.14: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + node-stream-zip@1.15.0: + resolution: {integrity: sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==} + engines: {node: '>=0.12.0'} + nopt@5.0.0: resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} engines: {node: '>=6'} @@ -1835,6 +2578,9 @@ packages: resolution: {integrity: sha512-ANIvzobt1rls2BDny5fWZ3ZVKyD6nscLvfFRpQgfWsythlcsVUC9kL0zq6j2Z5z9wwp1kd7wpsD/T9qNPVLCaQ==} engines: {node: '>=18'} + oslo@1.2.0: + resolution: {integrity: sha512-OoFX6rDsNcOQVAD2gQD/z03u4vEjWZLzJtwkmgfRF+KpQUXwdgEXErD7zNhyowmHwHefP+PM9Pw13pgpHMRlzw==} + p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -1966,6 +2712,10 @@ packages: resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} engines: {node: ^10 || ^12 || >=14} + postgres@3.4.4: + resolution: {integrity: sha512-IbyN+9KslkqcXa8AO9fxpk97PA4pzewvpi2B3Dwy9u4zpV32QicaEdgmF3eSQUzdRk7ttDHQejNgAEr4XoeH4A==} + engines: {node: '>=12'} + preferred-pm@3.1.3: resolution: {integrity: sha512-MkXsENfftWSRpzCzImcp4FRsCc3y1opwB73CfCNWyzMqArju2CrlMHlqB7VexKiPEOjGMbttv1r9fSCn5S610w==} engines: {node: '>=10'} @@ -2034,6 +2784,9 @@ packages: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true @@ -2078,6 +2831,10 @@ packages: resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} engines: {node: '>=4'} + semiver@1.1.0: + resolution: {integrity: sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg==} + engines: {node: '>=6'} + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -2146,6 +2903,13 @@ packages: resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} @@ -2253,8 +3017,8 @@ packages: typescript: optional: true - tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + tslib@2.6.3: + resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} type-fest@2.19.0: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} @@ -2271,6 +3035,9 @@ packages: engines: {node: '>=14.17'} hasBin: true + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + unherit@3.0.1: resolution: {integrity: sha512-akOOQ/Yln8a2sgcLj4U0Jmx0R5jpIg2IUyRrWOzmEbjBtGzBdHtSeFKgoEcoH4KYIG/Pb8GQ/BwtYm0GCq1Sqg==} @@ -2637,18 +3404,18 @@ snapshots: dependencies: prismjs: 1.29.0 - '@astrojs/solid-js@4.2.0(solid-js@1.8.17)(vite@5.2.12)': + '@astrojs/solid-js@4.2.0(solid-js@1.8.17)(vite@5.2.12(@types/node@20.14.1))': dependencies: solid-js: 1.8.17 - vite-plugin-solid: 2.10.2(solid-js@1.8.17)(vite@5.2.12) + vite-plugin-solid: 2.10.2(solid-js@1.8.17)(vite@5.2.12(@types/node@20.14.1)) transitivePeerDependencies: - '@testing-library/jest-dom' - supports-color - vite - '@astrojs/tailwind@5.1.0(astro@4.9.2(typescript@5.4.5))(tailwindcss@3.4.3)': + '@astrojs/tailwind@5.1.0(astro@4.9.2(@types/node@20.14.1)(typescript@5.4.5))(tailwindcss@3.4.3)': dependencies: - astro: 4.9.2(typescript@5.4.5) + astro: 4.9.2(@types/node@20.14.1)(typescript@5.4.5) autoprefixer: 10.4.19(postcss@8.4.38) postcss: 8.4.38 postcss-load-config: 4.0.2(postcss@8.4.38) @@ -2668,13 +3435,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/vercel@7.6.0(astro@4.9.2(typescript@5.4.5))': + '@astrojs/vercel@7.6.0(astro@4.9.2(@types/node@20.14.1)(typescript@5.4.5))': dependencies: '@astrojs/internal-helpers': 0.4.0 '@vercel/analytics': 1.3.1 '@vercel/edge': 1.1.1 '@vercel/nft': 0.26.5 - astro: 4.9.2(typescript@5.4.5) + astro: 4.9.2(@types/node@20.14.1)(typescript@5.4.5) esbuild: 0.21.4 fast-glob: 3.3.2 set-cookie-parser: 2.6.0 @@ -2847,17 +3614,51 @@ snapshots: '@emmetio/html-matcher@1.3.0': dependencies: - '@emmetio/scanner': 1.0.4 + '@emmetio/scanner': 1.0.4 + + '@emmetio/scanner@1.0.4': {} + + '@emmetio/stream-reader-utils@0.1.0': {} + + '@emmetio/stream-reader@2.2.0': {} + + '@emnapi/core@0.45.0': + dependencies: + tslib: 2.6.3 + optional: true + + '@emnapi/core@1.2.0': + dependencies: + '@emnapi/wasi-threads': 1.0.1 + tslib: 2.6.3 + optional: true + + '@emnapi/runtime@0.45.0': + dependencies: + tslib: 2.6.3 + optional: true - '@emmetio/scanner@1.0.4': {} + '@emnapi/runtime@1.2.0': + dependencies: + tslib: 2.6.3 + optional: true - '@emmetio/stream-reader-utils@0.1.0': {} + '@emnapi/wasi-threads@1.0.1': + dependencies: + tslib: 2.6.3 + optional: true - '@emmetio/stream-reader@2.2.0': {} + '@esbuild-kit/core-utils@3.3.2': + dependencies: + esbuild: 0.18.20 + source-map-support: 0.5.21 - '@emnapi/runtime@1.2.0': + '@esbuild-kit/esm-loader@2.6.5': dependencies: - tslib: 2.6.2 + '@esbuild-kit/core-utils': 3.3.2 + get-tsconfig: 4.7.5 + + '@esbuild/aix-ppc64@0.19.12': optional: true '@esbuild/aix-ppc64@0.20.2': @@ -2866,141 +3667,269 @@ snapshots: '@esbuild/aix-ppc64@0.21.4': optional: true + '@esbuild/android-arm64@0.18.20': + optional: true + + '@esbuild/android-arm64@0.19.12': + optional: true + '@esbuild/android-arm64@0.20.2': optional: true '@esbuild/android-arm64@0.21.4': optional: true + '@esbuild/android-arm@0.18.20': + optional: true + + '@esbuild/android-arm@0.19.12': + optional: true + '@esbuild/android-arm@0.20.2': optional: true '@esbuild/android-arm@0.21.4': optional: true + '@esbuild/android-x64@0.18.20': + optional: true + + '@esbuild/android-x64@0.19.12': + optional: true + '@esbuild/android-x64@0.20.2': optional: true '@esbuild/android-x64@0.21.4': optional: true + '@esbuild/darwin-arm64@0.18.20': + optional: true + + '@esbuild/darwin-arm64@0.19.12': + optional: true + '@esbuild/darwin-arm64@0.20.2': optional: true '@esbuild/darwin-arm64@0.21.4': optional: true + '@esbuild/darwin-x64@0.18.20': + optional: true + + '@esbuild/darwin-x64@0.19.12': + optional: true + '@esbuild/darwin-x64@0.20.2': optional: true '@esbuild/darwin-x64@0.21.4': optional: true + '@esbuild/freebsd-arm64@0.18.20': + optional: true + + '@esbuild/freebsd-arm64@0.19.12': + optional: true + '@esbuild/freebsd-arm64@0.20.2': optional: true '@esbuild/freebsd-arm64@0.21.4': optional: true + '@esbuild/freebsd-x64@0.18.20': + optional: true + + '@esbuild/freebsd-x64@0.19.12': + optional: true + '@esbuild/freebsd-x64@0.20.2': optional: true '@esbuild/freebsd-x64@0.21.4': optional: true + '@esbuild/linux-arm64@0.18.20': + optional: true + + '@esbuild/linux-arm64@0.19.12': + optional: true + '@esbuild/linux-arm64@0.20.2': optional: true '@esbuild/linux-arm64@0.21.4': optional: true + '@esbuild/linux-arm@0.18.20': + optional: true + + '@esbuild/linux-arm@0.19.12': + optional: true + '@esbuild/linux-arm@0.20.2': optional: true '@esbuild/linux-arm@0.21.4': optional: true + '@esbuild/linux-ia32@0.18.20': + optional: true + + '@esbuild/linux-ia32@0.19.12': + optional: true + '@esbuild/linux-ia32@0.20.2': optional: true '@esbuild/linux-ia32@0.21.4': optional: true + '@esbuild/linux-loong64@0.18.20': + optional: true + + '@esbuild/linux-loong64@0.19.12': + optional: true + '@esbuild/linux-loong64@0.20.2': optional: true '@esbuild/linux-loong64@0.21.4': optional: true + '@esbuild/linux-mips64el@0.18.20': + optional: true + + '@esbuild/linux-mips64el@0.19.12': + optional: true + '@esbuild/linux-mips64el@0.20.2': optional: true '@esbuild/linux-mips64el@0.21.4': optional: true + '@esbuild/linux-ppc64@0.18.20': + optional: true + + '@esbuild/linux-ppc64@0.19.12': + optional: true + '@esbuild/linux-ppc64@0.20.2': optional: true '@esbuild/linux-ppc64@0.21.4': optional: true + '@esbuild/linux-riscv64@0.18.20': + optional: true + + '@esbuild/linux-riscv64@0.19.12': + optional: true + '@esbuild/linux-riscv64@0.20.2': optional: true '@esbuild/linux-riscv64@0.21.4': optional: true + '@esbuild/linux-s390x@0.18.20': + optional: true + + '@esbuild/linux-s390x@0.19.12': + optional: true + '@esbuild/linux-s390x@0.20.2': optional: true '@esbuild/linux-s390x@0.21.4': optional: true + '@esbuild/linux-x64@0.18.20': + optional: true + + '@esbuild/linux-x64@0.19.12': + optional: true + '@esbuild/linux-x64@0.20.2': optional: true '@esbuild/linux-x64@0.21.4': optional: true + '@esbuild/netbsd-x64@0.18.20': + optional: true + + '@esbuild/netbsd-x64@0.19.12': + optional: true + '@esbuild/netbsd-x64@0.20.2': optional: true '@esbuild/netbsd-x64@0.21.4': optional: true + '@esbuild/openbsd-x64@0.18.20': + optional: true + + '@esbuild/openbsd-x64@0.19.12': + optional: true + '@esbuild/openbsd-x64@0.20.2': optional: true '@esbuild/openbsd-x64@0.21.4': optional: true + '@esbuild/sunos-x64@0.18.20': + optional: true + + '@esbuild/sunos-x64@0.19.12': + optional: true + '@esbuild/sunos-x64@0.20.2': optional: true '@esbuild/sunos-x64@0.21.4': optional: true + '@esbuild/win32-arm64@0.18.20': + optional: true + + '@esbuild/win32-arm64@0.19.12': + optional: true + '@esbuild/win32-arm64@0.20.2': optional: true '@esbuild/win32-arm64@0.21.4': optional: true + '@esbuild/win32-ia32@0.18.20': + optional: true + + '@esbuild/win32-ia32@0.19.12': + optional: true + '@esbuild/win32-ia32@0.20.2': optional: true '@esbuild/win32-ia32@0.21.4': optional: true - '@esbuild/win32-x64@0.20.2': + '@esbuild/win32-x64@0.18.20': optional: true - '@esbuild/win32-x64@0.21.4': + '@esbuild/win32-x64@0.19.12': optional: true - '@fontsource-variable/montserrat@5.0.19': {} + '@esbuild/win32-x64@0.20.2': + optional: true - '@fontsource/source-sans-pro@5.0.8': {} + '@esbuild/win32-x64@0.21.4': + optional: true '@img/sharp-darwin-arm64@0.33.4': optionalDependencies: @@ -3110,7 +4039,17 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 - '@jsr/orama__orama@2.0.6': {} + '@jsr/oxi__core@0.2.1': {} + + '@jsr/oxi__result@0.3.0': + dependencies: + '@jsr/oxi__core': 0.2.1 + + '@jsr/std__encoding@1.0.0-rc.1': {} + + '@lucia-auth/adapter-drizzle@1.0.7(lucia@3.2.0)': + dependencies: + lucia: 3.2.0 '@mapbox/node-pre-gyp@1.0.11': dependencies: @@ -3127,6 +4066,202 @@ snapshots: - encoding - supports-color + '@napi-rs/wasm-runtime@0.2.4': + dependencies: + '@emnapi/core': 1.2.0 + '@emnapi/runtime': 1.2.0 + '@tybys/wasm-util': 0.9.0 + optional: true + + '@node-rs/argon2-android-arm-eabi@1.7.0': + optional: true + + '@node-rs/argon2-android-arm-eabi@1.8.3': + optional: true + + '@node-rs/argon2-android-arm64@1.7.0': + optional: true + + '@node-rs/argon2-android-arm64@1.8.3': + optional: true + + '@node-rs/argon2-darwin-arm64@1.7.0': + optional: true + + '@node-rs/argon2-darwin-arm64@1.8.3': + optional: true + + '@node-rs/argon2-darwin-x64@1.7.0': + optional: true + + '@node-rs/argon2-darwin-x64@1.8.3': + optional: true + + '@node-rs/argon2-freebsd-x64@1.7.0': + optional: true + + '@node-rs/argon2-freebsd-x64@1.8.3': + optional: true + + '@node-rs/argon2-linux-arm-gnueabihf@1.7.0': + optional: true + + '@node-rs/argon2-linux-arm-gnueabihf@1.8.3': + optional: true + + '@node-rs/argon2-linux-arm64-gnu@1.7.0': + optional: true + + '@node-rs/argon2-linux-arm64-gnu@1.8.3': + optional: true + + '@node-rs/argon2-linux-arm64-musl@1.7.0': + optional: true + + '@node-rs/argon2-linux-arm64-musl@1.8.3': + optional: true + + '@node-rs/argon2-linux-x64-gnu@1.7.0': + optional: true + + '@node-rs/argon2-linux-x64-gnu@1.8.3': + optional: true + + '@node-rs/argon2-linux-x64-musl@1.7.0': + optional: true + + '@node-rs/argon2-linux-x64-musl@1.8.3': + optional: true + + '@node-rs/argon2-wasm32-wasi@1.7.0': + dependencies: + '@emnapi/core': 0.45.0 + '@emnapi/runtime': 0.45.0 + '@tybys/wasm-util': 0.8.3 + memfs-browser: 3.5.10302 + optional: true + + '@node-rs/argon2-wasm32-wasi@1.8.3': + dependencies: + '@napi-rs/wasm-runtime': 0.2.4 + optional: true + + '@node-rs/argon2-win32-arm64-msvc@1.7.0': + optional: true + + '@node-rs/argon2-win32-arm64-msvc@1.8.3': + optional: true + + '@node-rs/argon2-win32-ia32-msvc@1.7.0': + optional: true + + '@node-rs/argon2-win32-ia32-msvc@1.8.3': + optional: true + + '@node-rs/argon2-win32-x64-msvc@1.7.0': + optional: true + + '@node-rs/argon2-win32-x64-msvc@1.8.3': + optional: true + + '@node-rs/argon2@1.7.0': + optionalDependencies: + '@node-rs/argon2-android-arm-eabi': 1.7.0 + '@node-rs/argon2-android-arm64': 1.7.0 + '@node-rs/argon2-darwin-arm64': 1.7.0 + '@node-rs/argon2-darwin-x64': 1.7.0 + '@node-rs/argon2-freebsd-x64': 1.7.0 + '@node-rs/argon2-linux-arm-gnueabihf': 1.7.0 + '@node-rs/argon2-linux-arm64-gnu': 1.7.0 + '@node-rs/argon2-linux-arm64-musl': 1.7.0 + '@node-rs/argon2-linux-x64-gnu': 1.7.0 + '@node-rs/argon2-linux-x64-musl': 1.7.0 + '@node-rs/argon2-wasm32-wasi': 1.7.0 + '@node-rs/argon2-win32-arm64-msvc': 1.7.0 + '@node-rs/argon2-win32-ia32-msvc': 1.7.0 + '@node-rs/argon2-win32-x64-msvc': 1.7.0 + + '@node-rs/argon2@1.8.3': + optionalDependencies: + '@node-rs/argon2-android-arm-eabi': 1.8.3 + '@node-rs/argon2-android-arm64': 1.8.3 + '@node-rs/argon2-darwin-arm64': 1.8.3 + '@node-rs/argon2-darwin-x64': 1.8.3 + '@node-rs/argon2-freebsd-x64': 1.8.3 + '@node-rs/argon2-linux-arm-gnueabihf': 1.8.3 + '@node-rs/argon2-linux-arm64-gnu': 1.8.3 + '@node-rs/argon2-linux-arm64-musl': 1.8.3 + '@node-rs/argon2-linux-x64-gnu': 1.8.3 + '@node-rs/argon2-linux-x64-musl': 1.8.3 + '@node-rs/argon2-wasm32-wasi': 1.8.3 + '@node-rs/argon2-win32-arm64-msvc': 1.8.3 + '@node-rs/argon2-win32-ia32-msvc': 1.8.3 + '@node-rs/argon2-win32-x64-msvc': 1.8.3 + + '@node-rs/bcrypt-android-arm-eabi@1.9.0': + optional: true + + '@node-rs/bcrypt-android-arm64@1.9.0': + optional: true + + '@node-rs/bcrypt-darwin-arm64@1.9.0': + optional: true + + '@node-rs/bcrypt-darwin-x64@1.9.0': + optional: true + + '@node-rs/bcrypt-freebsd-x64@1.9.0': + optional: true + + '@node-rs/bcrypt-linux-arm-gnueabihf@1.9.0': + optional: true + + '@node-rs/bcrypt-linux-arm64-gnu@1.9.0': + optional: true + + '@node-rs/bcrypt-linux-arm64-musl@1.9.0': + optional: true + + '@node-rs/bcrypt-linux-x64-gnu@1.9.0': + optional: true + + '@node-rs/bcrypt-linux-x64-musl@1.9.0': + optional: true + + '@node-rs/bcrypt-wasm32-wasi@1.9.0': + dependencies: + '@emnapi/core': 0.45.0 + '@emnapi/runtime': 0.45.0 + '@tybys/wasm-util': 0.8.3 + memfs-browser: 3.5.10302 + optional: true + + '@node-rs/bcrypt-win32-arm64-msvc@1.9.0': + optional: true + + '@node-rs/bcrypt-win32-ia32-msvc@1.9.0': + optional: true + + '@node-rs/bcrypt-win32-x64-msvc@1.9.0': + optional: true + + '@node-rs/bcrypt@1.9.0': + optionalDependencies: + '@node-rs/bcrypt-android-arm-eabi': 1.9.0 + '@node-rs/bcrypt-android-arm64': 1.9.0 + '@node-rs/bcrypt-darwin-arm64': 1.9.0 + '@node-rs/bcrypt-darwin-x64': 1.9.0 + '@node-rs/bcrypt-freebsd-x64': 1.9.0 + '@node-rs/bcrypt-linux-arm-gnueabihf': 1.9.0 + '@node-rs/bcrypt-linux-arm64-gnu': 1.9.0 + '@node-rs/bcrypt-linux-arm64-musl': 1.9.0 + '@node-rs/bcrypt-linux-x64-gnu': 1.9.0 + '@node-rs/bcrypt-linux-x64-musl': 1.9.0 + '@node-rs/bcrypt-wasm32-wasi': 1.9.0 + '@node-rs/bcrypt-win32-arm64-msvc': 1.9.0 + '@node-rs/bcrypt-win32-ia32-msvc': 1.9.0 + '@node-rs/bcrypt-win32-x64-msvc': 1.9.0 + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -3139,6 +4274,8 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 + '@orama/orama@2.0.19': {} + '@pkgjs/parseargs@0.11.0': optional: true @@ -3197,6 +4334,16 @@ snapshots: '@shikijs/core@1.6.2': {} + '@tybys/wasm-util@0.8.3': + dependencies: + tslib: 2.6.3 + optional: true + + '@tybys/wasm-util@0.9.0': + dependencies: + tslib: 2.6.3 + optional: true + '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.24.6 @@ -3240,6 +4387,10 @@ snapshots: dependencies: '@types/unist': 2.0.10 + '@types/node@20.14.1': + dependencies: + undici-types: 5.26.5 + '@types/unist@2.0.10': {} '@types/unist@3.0.2': {} @@ -3371,6 +4522,10 @@ snapshots: aproba@2.0.0: {} + arctic@1.9.0: + dependencies: + oslo: 1.2.0 + are-we-there-yet@2.0.0: dependencies: delegates: 1.0.0 @@ -3390,7 +4545,7 @@ snapshots: array-iterate@2.0.1: {} - astro@4.9.2(typescript@5.4.5): + astro@4.9.2(@types/node@20.14.1)(typescript@5.4.5): dependencies: '@astrojs/compiler': 2.8.0 '@astrojs/internal-helpers': 0.4.0 @@ -3449,8 +4604,8 @@ snapshots: tsconfck: 3.1.0(typescript@5.4.5) unist-util-visit: 5.0.0 vfile: 6.0.1 - vite: 5.2.12 - vitefu: 0.2.5(vite@5.2.12) + vite: 5.2.12(@types/node@20.14.1) + vitefu: 0.2.5(vite@5.2.12(@types/node@20.14.1)) which-pm: 2.2.0 yargs-parser: 21.1.1 zod: 3.23.8 @@ -3537,10 +4692,12 @@ snapshots: browserslist@4.23.0: dependencies: caniuse-lite: 1.0.30001627 - electron-to-chromium: 1.4.788 + electron-to-chromium: 1.4.789 node-releases: 2.0.14 update-browserslist-db: 1.0.16(browserslist@4.23.0) + buffer-from@1.1.2: {} + camelcase-css@2.0.1: {} camelcase@7.0.1: {} @@ -3675,11 +4832,25 @@ snapshots: dlv@1.1.3: {} + dotenv@16.4.5: {} + + drizzle-kit@0.22.2: + dependencies: + '@esbuild-kit/esm-loader': 2.6.5 + esbuild: 0.19.12 + esbuild-register: 3.5.0(esbuild@0.19.12) + transitivePeerDependencies: + - supports-color + + drizzle-orm@0.31.1(postgres@3.4.4): + optionalDependencies: + postgres: 3.4.4 + dset@3.1.3: {} eastasianwidth@0.2.0: {} - electron-to-chromium@1.4.788: {} + electron-to-chromium@1.4.789: {} emmet@2.4.7: dependencies: @@ -3696,6 +4867,64 @@ snapshots: es-module-lexer@1.5.3: {} + esbuild-register@3.5.0(esbuild@0.19.12): + dependencies: + debug: 4.3.5 + esbuild: 0.19.12 + transitivePeerDependencies: + - supports-color + + esbuild@0.18.20: + optionalDependencies: + '@esbuild/android-arm': 0.18.20 + '@esbuild/android-arm64': 0.18.20 + '@esbuild/android-x64': 0.18.20 + '@esbuild/darwin-arm64': 0.18.20 + '@esbuild/darwin-x64': 0.18.20 + '@esbuild/freebsd-arm64': 0.18.20 + '@esbuild/freebsd-x64': 0.18.20 + '@esbuild/linux-arm': 0.18.20 + '@esbuild/linux-arm64': 0.18.20 + '@esbuild/linux-ia32': 0.18.20 + '@esbuild/linux-loong64': 0.18.20 + '@esbuild/linux-mips64el': 0.18.20 + '@esbuild/linux-ppc64': 0.18.20 + '@esbuild/linux-riscv64': 0.18.20 + '@esbuild/linux-s390x': 0.18.20 + '@esbuild/linux-x64': 0.18.20 + '@esbuild/netbsd-x64': 0.18.20 + '@esbuild/openbsd-x64': 0.18.20 + '@esbuild/sunos-x64': 0.18.20 + '@esbuild/win32-arm64': 0.18.20 + '@esbuild/win32-ia32': 0.18.20 + '@esbuild/win32-x64': 0.18.20 + + esbuild@0.19.12: + optionalDependencies: + '@esbuild/aix-ppc64': 0.19.12 + '@esbuild/android-arm': 0.19.12 + '@esbuild/android-arm64': 0.19.12 + '@esbuild/android-x64': 0.19.12 + '@esbuild/darwin-arm64': 0.19.12 + '@esbuild/darwin-x64': 0.19.12 + '@esbuild/freebsd-arm64': 0.19.12 + '@esbuild/freebsd-x64': 0.19.12 + '@esbuild/linux-arm': 0.19.12 + '@esbuild/linux-arm64': 0.19.12 + '@esbuild/linux-ia32': 0.19.12 + '@esbuild/linux-loong64': 0.19.12 + '@esbuild/linux-mips64el': 0.19.12 + '@esbuild/linux-ppc64': 0.19.12 + '@esbuild/linux-riscv64': 0.19.12 + '@esbuild/linux-s390x': 0.19.12 + '@esbuild/linux-x64': 0.19.12 + '@esbuild/netbsd-x64': 0.19.12 + '@esbuild/openbsd-x64': 0.19.12 + '@esbuild/sunos-x64': 0.19.12 + '@esbuild/win32-arm64': 0.19.12 + '@esbuild/win32-ia32': 0.19.12 + '@esbuild/win32-x64': 0.19.12 + esbuild@0.20.2: optionalDependencies: '@esbuild/aix-ppc64': 0.20.2 @@ -3828,6 +5057,9 @@ snapshots: dependencies: minipass: 3.3.6 + fs-monkey@1.0.6: + optional: true + fs.realpath@1.0.0: {} fsevents@2.3.3: @@ -3855,6 +5087,10 @@ snapshots: get-stream@8.0.1: {} + get-tsconfig@4.7.5: + dependencies: + resolve-pkg-maps: 1.0.0 + github-slugger@2.0.0: {} glob-parent@5.1.2: @@ -3868,7 +5104,7 @@ snapshots: glob@10.4.1: dependencies: foreground-child: 3.1.1 - jackspeak: 3.2.3 + jackspeak: 3.3.0 minimatch: 9.0.4 minipass: 7.1.2 path-scurry: 1.11.1 @@ -4064,7 +5300,7 @@ snapshots: isexe@2.0.0: {} - jackspeak@3.2.3: + jackspeak@3.3.0: dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: @@ -4089,12 +5325,20 @@ snapshots: jsonc-parser@2.3.1: {} + jsr@0.12.4: + dependencies: + kolorist: 1.8.0 + node-stream-zip: 1.15.0 + semiver: 1.1.0 + kind-of@6.0.3: {} kleur@3.0.3: {} kleur@4.1.5: {} + kolorist@1.8.0: {} + lilconfig@2.1.0: {} lilconfig@3.1.1: {} @@ -4129,6 +5373,10 @@ snapshots: dependencies: yallist: 3.1.1 + lucia@3.2.0: + dependencies: + oslo: 1.2.0 + magic-string@0.30.10: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 @@ -4258,6 +5506,16 @@ snapshots: dependencies: '@types/mdast': 4.0.4 + memfs-browser@3.5.10302: + dependencies: + memfs: 3.5.3 + optional: true + + memfs@3.5.3: + dependencies: + fs-monkey: 1.0.6 + optional: true + merge-anything@5.1.7: dependencies: is-what: 4.1.16 @@ -4515,6 +5773,8 @@ snapshots: node-releases@2.0.14: {} + node-stream-zip@1.15.0: {} + nopt@5.0.0: dependencies: abbrev: 1.1.1 @@ -4562,6 +5822,11 @@ snapshots: string-width: 7.1.0 strip-ansi: 7.1.0 + oslo@1.2.0: + dependencies: + '@node-rs/argon2': 1.7.0 + '@node-rs/bcrypt': 1.9.0 + p-limit@2.3.0: dependencies: p-try: 2.2.0 @@ -4671,6 +5936,8 @@ snapshots: picocolors: 1.0.1 source-map-js: 1.2.0 + postgres@3.4.4: {} + preferred-pm@3.1.3: dependencies: find-up: 5.0.0 @@ -4774,6 +6041,8 @@ snapshots: resolve-from@5.0.0: {} + resolve-pkg-maps@1.0.0: {} + resolve@1.22.8: dependencies: is-core-module: 2.13.1 @@ -4851,6 +6120,8 @@ snapshots: extend-shallow: 2.0.1 kind-of: 6.0.3 + semiver@1.1.0: {} + semver@6.3.1: {} semver@7.6.2: {} @@ -4930,6 +6201,13 @@ snapshots: source-map-js@1.2.0: {} + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + space-separated-tokens@2.0.2: {} sprintf-js@1.0.3: {} @@ -5055,7 +6333,7 @@ snapshots: optionalDependencies: typescript: 5.4.5 - tslib@2.6.2: + tslib@2.6.3: optional: true type-fest@2.19.0: {} @@ -5068,6 +6346,8 @@ snapshots: typescript@5.4.5: {} + undici-types@5.26.5: {} + unherit@3.0.1: {} unified@10.1.2: @@ -5189,7 +6469,7 @@ snapshots: unist-util-stringify-position: 4.0.0 vfile-message: 4.0.2 - vite-plugin-solid@2.10.2(solid-js@1.8.17)(vite@5.2.12): + vite-plugin-solid@2.10.2(solid-js@1.8.17)(vite@5.2.12(@types/node@20.14.1)): dependencies: '@babel/core': 7.24.6 '@types/babel__core': 7.20.5 @@ -5197,22 +6477,23 @@ snapshots: merge-anything: 5.1.7 solid-js: 1.8.17 solid-refresh: 0.6.3(solid-js@1.8.17) - vite: 5.2.12 - vitefu: 0.2.5(vite@5.2.12) + vite: 5.2.12(@types/node@20.14.1) + vitefu: 0.2.5(vite@5.2.12(@types/node@20.14.1)) transitivePeerDependencies: - supports-color - vite@5.2.12: + vite@5.2.12(@types/node@20.14.1): dependencies: esbuild: 0.20.2 postcss: 8.4.38 rollup: 4.18.0 optionalDependencies: + '@types/node': 20.14.1 fsevents: 2.3.3 - vitefu@0.2.5(vite@5.2.12): + vitefu@0.2.5(vite@5.2.12(@types/node@20.14.1)): optionalDependencies: - vite: 5.2.12 + vite: 5.2.12(@types/node@20.14.1) volar-service-css@0.0.45(@volar/language-service@2.2.5): dependencies: diff --git a/peaceful-escape/public/front/css/sidebar.css b/peaceful-escape/public/front/css/sidebar.css index cf3149b..0c446ad 100755 --- a/peaceful-escape/public/front/css/sidebar.css +++ b/peaceful-escape/public/front/css/sidebar.css @@ -15,7 +15,7 @@ flex-direction: column; justify-content: center; align-items: center; - gap: 35px; + gap: 25px; } .sidebar-right ul { diff --git a/peaceful-escape/src/actions/index.ts b/peaceful-escape/src/actions/index.ts new file mode 100644 index 0000000..adf509c --- /dev/null +++ b/peaceful-escape/src/actions/index.ts @@ -0,0 +1,10 @@ +import { defineAction } from "astro:actions"; +import * as signup from "./signup.ts"; + +export const server = { + signup: defineAction({ + accept: 'form', + input: signup.schema, + handler: signup.handler, + }), +}; \ No newline at end of file diff --git a/peaceful-escape/src/actions/login.ts b/peaceful-escape/src/actions/login.ts new file mode 100644 index 0000000..5fa7f1f --- /dev/null +++ b/peaceful-escape/src/actions/login.ts @@ -0,0 +1,59 @@ +import { Result } from "@oxi/result"; +import { z } from "zod"; + +import { lucia } from "~/auth/auth.ts"; +import { user } from "~/db/schema.ts"; +import { db } from "~/db/db.ts"; + +import { generateIdFromEntropySize } from "lucia"; +import { hash } from "~/utils/passsword.ts"; + +import { PostgresError } from "postgres"; +import { eq, or } from "drizzle-orm/expressions"; + +export const schema = z.object({ + // username must be between 4 ~ 31 characters, and only consists of lowercase letters, 0-9, -, and _ + // keep in mind some database (e.g. mysql) are case insensitive + username: z.string().regex(/^[a-z0-9_-]+$/).min(3).max(31, { message: "Invalid username" }), + email: z.string().email({ message: "Invalid email address" }), + password: z.string().min(6).max(255, { message: "Invalid password" }), +}); + +export async function handler(props: z.infer) { + const { username, email, password } = props; + const { success, error } = schema.safeParse(props); + if (!success) return Result.Err(error); + + try { + const userId = generateIdFromEntropySize(16); // 16 characters long + const passwordHash = await hash(password); + + // TODO: check if username is already used + await db.insert(user).values({ + id: userId, + username: username, + hash: passwordHash, + email: email + }); + + const savedHash = await db.select({ + id: user.id, + hash: user.hash + }).from(user).where( + or( + eq(user.username, username), + eq(user.email, email) + ) + ) + + const session = await lucia.createSession(userId, {}); + const sessionCookie = lucia.createSessionCookie(session.id); + return Result.Ok(sessionCookie); + } catch (e) { + if (e instanceof PostgresError && /unique_violation/i.test(e.code)) { + return Result.Err("Username already used"); + } + + return Result.Err("An unknown error occurred"); + } +}; \ No newline at end of file diff --git a/peaceful-escape/src/actions/signup.ts b/peaceful-escape/src/actions/signup.ts new file mode 100644 index 0000000..d1dd69c --- /dev/null +++ b/peaceful-escape/src/actions/signup.ts @@ -0,0 +1,47 @@ +import { Result } from "@oxi/result"; +import { z } from "zod"; + +import { lucia } from "~/auth/auth.ts"; +import { user } from "~/db/schema.ts"; +import { db } from "~/db/db.ts"; + +import { generateIdFromEntropySize } from "lucia"; +import { hash } from "~/utils/passsword.ts"; +import { PostgresError } from "postgres"; + +export const schema = z.object({ + // username must be between 4 ~ 31 characters, and only consists of lowercase letters, 0-9, -, and _ + // keep in mind some database (e.g. mysql) are case insensitive + username: z.string().regex(/^[a-z0-9_-]+$/).min(3).max(31, { message: "Invalid username" }), + email: z.string().email({ message: "Invalid email address" }), + password: z.string().min(6).max(255, { message: "Invalid password" }), +}); + +export async function handler(props: z.infer) { + const { username, email, password } = props; + const { success, error } = schema.safeParse(props); + if (!success) return Result.Err(error); + + try { + const userId = generateIdFromEntropySize(16); // 16 characters long + const passwordHash = await hash(password); + + // TODO: check if username is already used + await db.insert(user).values({ + id: userId, + username: username, + hash: passwordHash, + email: email + }); + + const session = await lucia.createSession(userId, {}); + const sessionCookie = lucia.createSessionCookie(session.id); + return Result.Ok(sessionCookie); + } catch (e) { + if (e instanceof PostgresError && /unique_violation/i.test(e.code)) { + return Result.Err("Username already used"); + } + + return Result.Err("An unknown error occurred"); + } +}; \ No newline at end of file diff --git a/peaceful-escape/src/auth/auth.ts b/peaceful-escape/src/auth/auth.ts new file mode 100644 index 0000000..ec4cb65 --- /dev/null +++ b/peaceful-escape/src/auth/auth.ts @@ -0,0 +1,39 @@ +import { DrizzlePostgreSQLAdapter } from "@lucia-auth/adapter-drizzle"; +import { Lucia } from "lucia"; + +import { user, session } from "~/db/schema.ts"; +import { db } from "~/db/db.ts"; + +import { MODE } from "~/env.ts"; + +export const adapter = new DrizzlePostgreSQLAdapter( db, session, user ); +export const lucia = new Lucia(adapter, { + sessionCookie: { + attributes: { + // Set to `true` when using HTTPS + secure: MODE === "production" + } + }, + getUserAttributes(attributes) { + return { + // Attributes has the type of DatabaseUserAttributes + username: attributes.username, + githubId: attributes.github_id, + }; + } +}); + +// const session = await lucia.createSession(userId, {}); +// await lucia.validateSession(session.id); + +declare module "lucia" { + interface Register { + Lucia: typeof lucia; + DatabaseUserAttributes: DatabaseUserAttributes + } +} + +interface DatabaseUserAttributes { + username: string; + github_id: number; +} \ No newline at end of file diff --git a/peaceful-escape/src/auth/github.ts b/peaceful-escape/src/auth/github.ts new file mode 100644 index 0000000..412e111 --- /dev/null +++ b/peaceful-escape/src/auth/github.ts @@ -0,0 +1,8 @@ + +import { GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET } from "~/env.ts"; +import { GitHub } from "arctic"; + +export const github = new GitHub( + GITHUB_CLIENT_ID!, + GITHUB_CLIENT_SECRET!, +); \ No newline at end of file diff --git a/peaceful-escape/src/components/Sidebar.astro b/peaceful-escape/src/components/Sidebar.astro index e69de29..91619d1 100644 --- a/peaceful-escape/src/components/Sidebar.astro +++ b/peaceful-escape/src/components/Sidebar.astro @@ -0,0 +1,15 @@ +--- +const assetPath = '/front/images/straight-line.svg'; +--- + diff --git a/peaceful-escape/src/data/data.ts b/peaceful-escape/src/data/data.ts index 50962f9..1450cbc 100644 --- a/peaceful-escape/src/data/data.ts +++ b/peaceful-escape/src/data/data.ts @@ -17,12 +17,21 @@ export interface Game { } export const games: Game[] = [ + // ARCADE GAMES + { + category: Category.ARCADE_GAMES, + name: 'Pummel A Politician', + slug: 'pummel-a-politician', + image: 'https://www.iwingaming.com/storage/game/qyfq1fyARY.png', + alt: 'Pummel A Politician', + url: 'https://www.iwingaming.com/practice-room/pummel-a-politician' + }, // PUZZLE GAMES { category: Category.PUZZLE_GAMES, name: 'TiKiMATCH 3', slug: 'tikimatch-3', - image: 'https://www.iwingaming.com/storage/game/oG6EfEGgYh.png', + image: '/front/images/tikimatch.png', alt: 'TiKiMATCH 3', url: 'https://www.iwingaming.com/practice-room/tikimatch-3' }, @@ -34,32 +43,6 @@ export const games: Game[] = [ alt: 'ClownMatch 3', url: 'https://www.iwingaming.com/practice-room/clownmatch-3' }, - { - category: Category.PUZZLE_GAMES, - name: 'Jigsaw Deluxe Puzzle', - slug: 'jigsaw-deluxe-puzzle', - image: 'https://www.iwingaming.com/storage/game/YevgROT1b3.png', - alt: 'Jigsaw Deluxe Puzzle', - url: 'https://www.iwingaming.com/practice-room/jigsaw-deluxe-puzzle' - }, - { - category: Category.PUZZLE_GAMES, - name: 'Word Up', - slug: 'word-up', - image: 'https://www.iwingaming.com/storage/game/Gwrl6V470g.png', - alt: 'Word Up', - url: 'https://www.iwingaming.com/practice-room/word-up' - }, - // ARCADE GAMES - { - category: Category.ARCADE_GAMES, - name: 'Pummel A Politician', - slug: 'pummel-a-politician', - image: 'https://www.iwingaming.com/storage/game/qyfq1fyARY.png', - alt: 'Pummel A Politician', - url: 'https://www.iwingaming.com/practice-room/pummel-a-politician' - }, - // ACTION GAMES { category: Category.ACTION_GAMES, name: 'DEAD CITY', @@ -84,15 +67,6 @@ export const games: Game[] = [ alt: 'American Football', url: 'https://www.iwingaming.com/practice-room/american-football' }, - { - category: Category.ACTION_GAMES, - name: 'Slot Kungfu', - slug: 'slot-kungfu', - image: 'https://www.iwingaming.com/storage/game/MqVwSV4if4.png', - alt: 'Slot Kungfu', - url: 'https://www.iwingaming.com/practice-room/slot-kungfu' - }, - // CARD GAMES { category: Category.CARD_GAMES, name: 'Black Jack Casino', @@ -101,6 +75,14 @@ export const games: Game[] = [ alt: 'Black Jack Casino', url: 'https://www.iwingaming.com/practice-room/black-jack-casino' }, + { + category: Category.SLOTS, + name: 'Pirate Slot', + slug: 'pirate-slot', + image: 'https://www.iwingaming.com/storage/game/954dmtHXn5.png', + alt: 'Pirate Slot', + url: 'https://www.iwingaming.com/practice-room/pirate-slot' + }, { category: Category.CARD_GAMES, name: 'Caribbean Stud Poker', @@ -117,6 +99,14 @@ export const games: Game[] = [ alt: 'Casino Cards Memory', url: 'https://www.iwingaming.com/practice-room/casino-cards-memory' }, + { + category: Category.PUZZLE_GAMES, + name: 'Jigsaw Deluxe Puzzle', + slug: 'jigsaw-deluxe-puzzle', + image: 'https://www.iwingaming.com/storage/game/YevgROT1b3.png', + alt: 'Jigsaw Deluxe Puzzle', + url: 'https://www.iwingaming.com/practice-room/jigsaw-deluxe-puzzle' + }, { category: Category.CARD_GAMES, name: 'Mahjong Deluxe', @@ -133,15 +123,23 @@ export const games: Game[] = [ alt: 'Pyramid Solitaire', url: 'https://www.iwingaming.com/practice-room/pyramid-solitaire' }, - // SLOTS { - category: Category.SLOTS, - name: 'Pirate Slot', - slug: 'pirate-slot', - image: 'https://www.iwingaming.com/storage/game/954dmtHXn5.png', - alt: 'Pirate Slot', - url: 'https://www.iwingaming.com/practice-room/pirate-slot' + category: Category.ACTION_GAMES, + name: 'Slot Kungfu', + slug: 'slot-kungfu', + image: 'https://www.iwingaming.com/storage/game/MqVwSV4if4.png', + alt: 'Slot Kungfu', + url: 'https://www.iwingaming.com/practice-room/slot-kungfu' + }, + { + category: Category.PUZZLE_GAMES, + name: 'Word Up', + slug: 'word-up', + image: 'https://www.iwingaming.com/storage/game/Gwrl6V470g.png', + alt: 'Word Up', + url: 'https://www.iwingaming.com/practice-room/word-up' }, + // SLOTS { category: Category.SLOTS, name: 'The Gold Pot Casino', diff --git a/peaceful-escape/src/db/db.ts b/peaceful-escape/src/db/db.ts new file mode 100644 index 0000000..4f501ca --- /dev/null +++ b/peaceful-escape/src/db/db.ts @@ -0,0 +1,11 @@ +import { PGHOST, PGDATABASE, PGUSER, PGPASSWORD, PGPORT } from "~/env.ts"; + +import { drizzle } from 'drizzle-orm/postgres-js'; +import postgres from 'postgres'; + +// Disable prefetch as it is not supported for "Transaction" pool mode +export const sql = postgres( + `postgres://${PGUSER}:${PGPASSWORD}@${PGHOST}:${PGPORT}/${PGDATABASE}`, + { prepare: false } +); +export const db = drizzle(sql, { logger: true }); \ No newline at end of file diff --git a/peaceful-escape/src/db/schema.ts b/peaceful-escape/src/db/schema.ts new file mode 100644 index 0000000..17de6d5 --- /dev/null +++ b/peaceful-escape/src/db/schema.ts @@ -0,0 +1,67 @@ +import { pgTable, text, varchar, timestamp, primaryKey, integer } from 'drizzle-orm/pg-core'; +import { relations } from 'drizzle-orm'; + +export const user = pgTable('user', { + id: text('id').primaryKey(), + username: varchar('username').notNull(), + hash: varchar('hash').notNull(), + email: varchar('email').unique().notNull(), + image: text("image"), + bio: text('bio'), +}); + +export const session = pgTable("session", { + id: text("id").primaryKey(), + userId: text("userId") + .notNull() + .references(() => user.id, { onDelete: "cascade" }), + expiresAt: timestamp("expires_at", { + withTimezone: true, + mode: "date" + }).notNull() +}) + +// // Accounts represent the different types of ways a user can signin +// export const accounts = pgTable("account", { +// userId: text('user_id').notNull().references(() => user.id, { onDelete: "cascade" }), + +// // Future proofing our implmentation +// type: text("type").notNull(), +// provider: text("provider").notNull(), +// providerAccountId: text("providerAccountId").notNull(), + +// // The password field stores the base64-encoded string representing the hashed and salted password. +// password: varchar('password'), +// refresh_token: text("refresh_token"), +// access_token: text("access_token"), +// expires_at: integer("expires_at"), +// token_type: text("token_type"), +// scope: text("scope"), +// id_token: text("id_token"), +// session_state: text("session_state"), +// }, +// (account) => ({ +// compoundKey: primaryKey({ +// columns: [account.provider, account.providerAccountId] +// }), +// }) +// ) + +// // VerificationTokens table schema +// export const verificationTokens = pgTable("verificationToken", +// { +// // Identifier, usually the email, used to link the token to the user. +// identifier: text("identifier").notNull(), + +// // The verification token sent to the user's email for account verification. +// token: text("token").notNull(), + +// // Expiry date of the token for security purposes. +// expires: timestamp("expires", { mode: "date" }).notNull(), +// }, +// (vt) => ({ +// compoundKey: primaryKey({ +// columns: [vt.identifier, vt.token] +// }), +// }) +// ); \ No newline at end of file diff --git a/peaceful-escape/src/env.d.ts b/peaceful-escape/src/env.d.ts index f964fe0..0d98171 100644 --- a/peaceful-escape/src/env.d.ts +++ b/peaceful-escape/src/env.d.ts @@ -1 +1,18 @@ +/// /// +interface ImportMetaEnv { + readonly DB_PASSWORD: string; + readonly PUBLIC_POKEAPI: string; + // more env variables... +} + +interface ImportMeta { + readonly env: ImportMetaEnv; +} + +declare namespace App { + interface Locals { + session: import("lucia").Session | null; + user: import("lucia").User | null; + } +} diff --git a/peaceful-escape/src/env.ts b/peaceful-escape/src/env.ts new file mode 100644 index 0000000..84a7e13 --- /dev/null +++ b/peaceful-escape/src/env.ts @@ -0,0 +1,19 @@ +import { generateSecret } from "~/utils/secret.ts"; +import { encodeBase64 } from "@std/encoding"; + +import * as process from "node:process"; +import * as dotenv from "dotenv"; + +dotenv.config(); +dotenv.config({ + path: ".env.local", +}); + +export const { + PGHOST, PGDATABASE, PGUSER, PGPASSWORD, + GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET, + EMAIL, EMAIL_PASS, + MODE, AUTH_SECRET = encodeBase64(generateSecret(32)), + NEXTAUTH_URL, +} = process.env; +export const PGPORT = +(process.env.PGPORT ?? 5432); \ No newline at end of file diff --git a/peaceful-escape/src/middleware.ts b/peaceful-escape/src/middleware.ts new file mode 100644 index 0000000..9a7d4c1 --- /dev/null +++ b/peaceful-escape/src/middleware.ts @@ -0,0 +1,39 @@ +import { lucia } from "~/auth/auth.ts"; +import { verifyRequestOrigin } from "lucia"; +import { defineMiddleware } from "astro:middleware"; + +/** + * @type {import("astro").MiddlewareHandler} + */ +// `context` and `next` are automatically typed +export const onRequest = defineMiddleware(async (context, next) => { + if (context.request.method !== "GET") { + const originHeader = context.request.headers.get("Origin"); + const hostHeader = context.request.headers.get("Host"); + if (!originHeader || !hostHeader || !verifyRequestOrigin(originHeader, [hostHeader])) { + return new Response(null, { + status: 403 + }); + } + } + + const sessionId = context.cookies.get(lucia.sessionCookieName)?.value ?? null; + if (!sessionId) { + context.locals.user = null; + context.locals.session = null; + return next(); + } + + const { session, user } = await lucia.validateSession(sessionId); + if (session && session.fresh) { + const sessionCookie = lucia.createSessionCookie(session.id); + context.cookies.set(sessionCookie.name, sessionCookie.value, sessionCookie.attributes); + } + if (!session) { + const sessionCookie = lucia.createBlankSessionCookie(); + context.cookies.set(sessionCookie.name, sessionCookie.value, sessionCookie.attributes); + } + context.locals.session = session; + context.locals.user = user; + return next(); +}); \ No newline at end of file diff --git a/peaceful-escape/src/pages/api/signup.ts b/peaceful-escape/src/pages/api/signup.ts new file mode 100644 index 0000000..0ef594c --- /dev/null +++ b/peaceful-escape/src/pages/api/signup.ts @@ -0,0 +1,24 @@ +import type { APIContext } from "astro"; +import * as signup from "~/actions/signup.ts"; + +export const prerender = false; +export async function POST(context: APIContext): Promise { + const formData = await context.request.formData(); + const username = formData.get("username")! as string; + const password = formData.get("password")! as string; + const email = formData.get("email")! as string; + + const result = await signup.handler({ username, password, email, }); + return result.match( + cookie => { + context.cookies.set(cookie.name, cookie.value, cookie.attributes); + return context.redirect("/"); + }, + err => { + return new Response(JSON.stringify({ error: err.message }), { + status: 400, + headers: { "Content-Type": "application/json" } + }); + } + ); +} diff --git a/peaceful-escape/src/pages/index.astro b/peaceful-escape/src/pages/index.astro index 410c246..87651c8 100644 --- a/peaceful-escape/src/pages/index.astro +++ b/peaceful-escape/src/pages/index.astro @@ -8,7 +8,7 @@ import Navbar from '../components/Navbar.astro'; import { games } from '../data/data.ts'; import { category } from '../data/category.ts'; -export const prerender = true; +export const prerender = false; ---
diff --git a/peaceful-escape/src/utils/passsword.ts b/peaceful-escape/src/utils/passsword.ts new file mode 100644 index 0000000..af2cb53 --- /dev/null +++ b/peaceful-escape/src/utils/passsword.ts @@ -0,0 +1,15 @@ +import { Argon2id } from "oslo/password"; +import { decodeBase64 } from "@std/encoding"; +import { AUTH_SECRET } from "~/env.ts"; + +export const Argon2 = new Argon2id({ + secret: decodeBase64(AUTH_SECRET) +}); + +export function hash(password: string) { + return Argon2.hash(password); +} + +export function verify(hash: string, password: string) { + return Argon2.verify(hash, password); +} \ No newline at end of file diff --git a/peaceful-escape/src/utils/secret.ts b/peaceful-escape/src/utils/secret.ts new file mode 100644 index 0000000..4d9d589 --- /dev/null +++ b/peaceful-escape/src/utils/secret.ts @@ -0,0 +1,6 @@ +// Function to generate a cryptographically secure random secret using Web Crypto API +export function generateSecret(length: number = 32) { + const array = new Uint8Array(length); + crypto.getRandomValues(array); + return array; +} \ No newline at end of file diff --git a/peaceful-escape/tsconfig.json b/peaceful-escape/tsconfig.json index 22751a6..29aeccf 100644 --- a/peaceful-escape/tsconfig.json +++ b/peaceful-escape/tsconfig.json @@ -1,7 +1,12 @@ { "extends": "astro/tsconfigs/strict", "compilerOptions": { - "jsx": "preserve", - "jsxImportSource": "solid-js" + "noUncheckedIndexedAccess": true, + "noImplicitOverride": true, + "jsxImportSource": "solid-js", + "paths": { + "~/*": ["./src/*"] + }, + "baseUrl": ".", } } \ No newline at end of file