From 03c8ea38ee13dff2cdfafc7c3c0099615871b4c1 Mon Sep 17 00:00:00 2001 From: Brandon Wilson Date: Wed, 14 Aug 2024 13:14:17 -0500 Subject: [PATCH] feat(astro): add clerk auth Remove lucia auth. --- packages/codius-astro/astro.config.mjs | 2 + packages/codius-astro/package.json | 1 + packages/codius-astro/src/actions/index.ts | 16 +- .../src/components/UserAppsTable.astro | 7 +- packages/codius-astro/src/env.d.ts | 3 + .../codius-astro/src/layouts/Layout.astro | 25 +- packages/codius-astro/src/middleware.ts | 38 +- packages/codius-astro/src/pages/apps.astro | 5 +- .../codius-astro/src/pages/apps/[id].astro | 2 +- .../checkout-sessions/[id]/success.astro | 6 +- packages/codius-astro/src/pages/index.astro | 2 +- .../codius-astro/worker-configuration.d.ts | 4 +- pnpm-lock.yaml | 499 ++++++++++++++++++ 13 files changed, 553 insertions(+), 57 deletions(-) diff --git a/packages/codius-astro/astro.config.mjs b/packages/codius-astro/astro.config.mjs index 3a0202d..d7cf871 100644 --- a/packages/codius-astro/astro.config.mjs +++ b/packages/codius-astro/astro.config.mjs @@ -1,6 +1,7 @@ import cloudflare from "@astrojs/cloudflare" import react from "@astrojs/react" import tailwind from "@astrojs/tailwind" +import clerk from "@clerk/astro" import { defineConfig } from "astro/config" import simpleStackQuery from "simple-stack-query" @@ -17,6 +18,7 @@ export default defineConfig({ }, }), integrations: [ + clerk(), react(), tailwind({ applyBaseStyles: false, diff --git a/packages/codius-astro/package.json b/packages/codius-astro/package.json index 8d9cf4d..804f758 100644 --- a/packages/codius-astro/package.json +++ b/packages/codius-astro/package.json @@ -21,6 +21,7 @@ "@astrojs/cloudflare": "^11.0.4", "@astrojs/react": "^3.6.1", "@astrojs/tailwind": "^5.1.0", + "@clerk/astro": "^1.0.12", "@lucia-auth/adapter-sqlite": "^3.0.1", "@octokit/request-error": "^6.1.1", "@octokit/rest": "^21.0.0", diff --git a/packages/codius-astro/src/actions/index.ts b/packages/codius-astro/src/actions/index.ts index 4a1247a..de97ff7 100644 --- a/packages/codius-astro/src/actions/index.ts +++ b/packages/codius-astro/src/actions/index.ts @@ -10,14 +10,16 @@ export const server = { id: z.string(), }), handler: async ({ id }, context) => { - if (!context.locals.user) { + // TODO: protect /_actions/deleteApp in clerk? + const { userId } = context.locals.auth() + if (!userId) { throw new ActionError({ code: "UNAUTHORIZED", }) } const app = await context.locals.db.apps.delete({ id, - userId: context.locals.user.id, + userId, }) if (!app) { throw new ActionError({ @@ -60,7 +62,9 @@ export const server = { }), // https://github.com/withastro/roadmap/blob/actions/proposals/0046-actions.md#access-api-context handler: async ({ repoUrl, branch, directory }, context) => { - if (!context.locals.user) { + // TODO: protect /_actions/deployApp in clerk? + const { userId } = context.locals.auth() + if (!userId) { throw new ActionError({ code: "UNAUTHORIZED", }) @@ -73,7 +77,7 @@ export const server = { const commit = await getCommit({ owner, repo, branch }) const app = await context.locals.db.apps.create({ - userId: context.locals.user.id, + userId, githubOwner: owner, repo, branch, @@ -125,8 +129,8 @@ export const server = { const metadata: Stripe.MetadataParam = { appId, } - if (context.locals.user) { - metadata.userId = context.locals.user.id + if (context.locals.auth().userId) { + metadata.userId = context.locals.auth().userId } const session = await stripe.checkout.sessions.create({ line_items: [ diff --git a/packages/codius-astro/src/components/UserAppsTable.astro b/packages/codius-astro/src/components/UserAppsTable.astro index 6db961c..0983202 100644 --- a/packages/codius-astro/src/components/UserAppsTable.astro +++ b/packages/codius-astro/src/components/UserAppsTable.astro @@ -9,15 +9,14 @@ import { TableHeader, TableRow, } from "@/components/ui/table" -import type { User } from "lucia" interface Props { - user: User + userId: string dispatcherHostname: string } -const { dispatcherHostname, user } = Astro.props -const apps = await Astro.locals.db.apps.getByUserId(user.id) +const { dispatcherHostname, userId } = Astro.props +const apps = await Astro.locals.db.apps.getByUserId(userId) --- diff --git a/packages/codius-astro/src/env.d.ts b/packages/codius-astro/src/env.d.ts index ff2e08f..beb1e49 100644 --- a/packages/codius-astro/src/env.d.ts +++ b/packages/codius-astro/src/env.d.ts @@ -1,5 +1,6 @@ /// /// +/// type D1Database = import("@cloudflare/workers-types").D1Database type DurableObjectNamespace = import("@cloudflare/workers-types").DurableObjectNamespace @@ -19,6 +20,8 @@ type ENV = { GITHUB_WEBHOOK_SECRET: string STRIPE_TOPUP_PRICE_ID: string STRIPE_SECRET_KEY: string + PUBLIC_CLERK_PUBLISHABLE_KEY: string + CLERK_SECRET_KEY: string BILLING_DURABLE_OBJECT: DurableObjectNamespace DB: D1Database } diff --git a/packages/codius-astro/src/layouts/Layout.astro b/packages/codius-astro/src/layouts/Layout.astro index 799243e..e03a5aa 100644 --- a/packages/codius-astro/src/layouts/Layout.astro +++ b/packages/codius-astro/src/layouts/Layout.astro @@ -1,8 +1,14 @@ --- import "@/styles/globals.css" import { ModeToggle } from "@/components/ModeToggle" -import LoginButton from "@/components/LoginButton.astro" -import LogoutButton from "@/components/LogoutButton.astro" +// import LoginButton from "@/components/LoginButton.astro" +// import LogoutButton from "@/components/LogoutButton.astro" +import { + SignedIn, + SignedOut, + UserButton, + SignInButton, +} from "@clerk/astro/components" interface Props { title?: string @@ -75,15 +81,12 @@ const { title = "Welcome to Codius" } = Astro.props

Welcome to Codius

- { - Astro.locals.user ? ( - - ) : ( -
- -
- ) - } + + + + + + diff --git a/packages/codius-astro/src/middleware.ts b/packages/codius-astro/src/middleware.ts index 0abac75..3b834f3 100644 --- a/packages/codius-astro/src/middleware.ts +++ b/packages/codius-astro/src/middleware.ts @@ -1,10 +1,12 @@ import { initializeLucia, initializeGitHub } from "@/lib/auth" import { DB } from "@/lib/db" -import { defineMiddleware } from "astro:middleware" +import { clerkMiddleware } from "@clerk/astro/server" +import type { MiddlewareHandler } from "astro" +import { sequence } from "astro:middleware" -// import { verifyRequestOrigin } from "lucia" +const clerkAuth = clerkMiddleware() -export const onRequest = defineMiddleware(async (context, next) => { +const setupContext: MiddlewareHandler = (context, next) => { context.locals.db = new DB(context.locals.runtime.env.DB) const lucia = initializeLucia(context.locals.runtime.env.DB) context.locals.lucia = lucia @@ -13,31 +15,7 @@ export const onRequest = defineMiddleware(async (context, next) => { context.locals.runtime.env.GITHUB_CLIENT_SECRET, ) context.locals.github = github - 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() -}) +} + +export const onRequest = sequence(clerkAuth, setupContext) diff --git a/packages/codius-astro/src/pages/apps.astro b/packages/codius-astro/src/pages/apps.astro index c0b6385..4a081f1 100644 --- a/packages/codius-astro/src/pages/apps.astro +++ b/packages/codius-astro/src/pages/apps.astro @@ -3,7 +3,8 @@ import { AppForm } from "@/components/AppForm" import UserAppsTable from "@/components/UserAppsTable.astro" import Layout from "@/layouts/Layout.astro" -if (!Astro.locals.user) { +const { userId } = Astro.locals.auth() +if (!userId) { return Astro.redirect("/") } --- @@ -12,7 +13,7 @@ if (!Astro.locals.user) {
diff --git a/packages/codius-astro/src/pages/apps/[id].astro b/packages/codius-astro/src/pages/apps/[id].astro index ad35f7d..137d1db 100644 --- a/packages/codius-astro/src/pages/apps/[id].astro +++ b/packages/codius-astro/src/pages/apps/[id].astro @@ -28,7 +28,7 @@ if (!app) { }) } -const userIsDeployer = Astro.locals.user?.id === app.deployer.id +const userIsDeployer = Astro.locals.auth().userId === app.deployer.id if (app.status !== "deployed" && !userIsDeployer) { return new Response(null, { diff --git a/packages/codius-astro/src/pages/checkout-sessions/[id]/success.astro b/packages/codius-astro/src/pages/checkout-sessions/[id]/success.astro index 9d6ef9d..81a23d8 100644 --- a/packages/codius-astro/src/pages/checkout-sessions/[id]/success.astro +++ b/packages/codius-astro/src/pages/checkout-sessions/[id]/success.astro @@ -33,7 +33,11 @@ if (!session.amount_total) { const { appId, userId } = session.metadata -if (Astro.locals.user && userId && userId !== Astro.locals.user.id) { +if ( + Astro.locals.auth().userId && + userId && + userId !== Astro.locals.auth().userId +) { return new Response("Forbidden", { status: 403 }) } diff --git a/packages/codius-astro/src/pages/index.astro b/packages/codius-astro/src/pages/index.astro index dbfc91a..30e396e 100644 --- a/packages/codius-astro/src/pages/index.astro +++ b/packages/codius-astro/src/pages/index.astro @@ -1,7 +1,7 @@ --- import Layout from "@/layouts/Layout.astro" -if (Astro.locals.user) { +if (Astro.locals.auth().userId) { return Astro.redirect("/apps") } --- diff --git a/packages/codius-astro/worker-configuration.d.ts b/packages/codius-astro/worker-configuration.d.ts index 9a94f07..4e6d117 100644 --- a/packages/codius-astro/worker-configuration.d.ts +++ b/packages/codius-astro/worker-configuration.d.ts @@ -1,4 +1,4 @@ -// Generated by Wrangler on Mon Jul 29 2024 19:08:12 GMT-0500 (Central Daylight Time) +// Generated by Wrangler on Wed Aug 14 2024 12:47:10 GMT-0500 (Central Daylight Time) // by running `wrangler types` interface Env { @@ -14,6 +14,8 @@ interface Env { GITHUB_WEBHOOK_SECRET: string; STRIPE_TOPUP_PRICE_ID: string; STRIPE_SECRET_KEY: string; + PUBLIC_CLERK_PUBLISHABLE_KEY: string; + CLERK_SECRET_KEY: string; BILLING_DURABLE_OBJECT: DurableObjectNamespace /* BillingDurableObject from dispatcher */; DB: D1Database; } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d868f01..28001fb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -50,6 +50,9 @@ importers: '@astrojs/tailwind': specifier: ^5.1.0 version: 5.1.0(astro@4.13.1(@types/node@20.14.2)(terser@5.31.1)(typescript@5.5.4))(tailwindcss@3.4.4) + '@clerk/astro': + specifier: ^1.0.12 + version: 1.0.12(@types/react@18.3.3)(astro@4.13.1(@types/node@20.14.2)(terser@5.31.1)(typescript@5.5.4))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@lucia-auth/adapter-sqlite': specifier: ^3.0.1 version: 3.0.1(lucia@3.2.0) @@ -483,6 +486,43 @@ packages: bundledDependencies: - is-unicode-supported + '@clerk/astro@1.0.12': + resolution: {integrity: sha512-pgZF+R0ajKXdqJq9bfConsG+iTPF1B+x+2OJPH5U8hnDW1YlhJsK95P2IFFzSP94kB04tGVsASAIg1Poblbd1A==} + engines: {node: '>=18.17.0'} + peerDependencies: + astro: ^3.2.0 || ^4.0.0 + + '@clerk/backend@1.6.3': + resolution: {integrity: sha512-rZHrbVpmHF9T61EVM2mksocLVQ9/7oWY/Q+Fq0lZGtIVfBPJa1QMYGosPooOw9MeMvpBK21BujjBg4OxrT9ToQ==} + engines: {node: '>=18.17.0'} + + '@clerk/clerk-js@5.14.1': + resolution: {integrity: sha512-d7q4UEsY1WZJj02RJX7E3bu9eqmE2L1WFyJ3EgdPh+VlxqZ95zJGWkeqRIFWP+7Q7bi8iFu5R4Mk/MPUQ4+SvA==} + engines: {node: '>=18.17.0'} + peerDependencies: + react: '>=18' + react-dom: '>=18' + + '@clerk/localizations@2.5.8': + resolution: {integrity: sha512-C3heP/dCO1b5xCggABQsMKwumkaXW3+BR+fc0HdmPAA1vwDqFWrom0ESlfer9/p3XZ9zOTRSD91oNU4pNLg3oA==} + engines: {node: '>=18.17.0'} + + '@clerk/shared@2.5.1': + resolution: {integrity: sha512-RslzZvjolG8ToZlegV8XPEkINQ4XM23lO2xS6ZtJEeGzRzchkpEBUOYywjG6aGtJDByWBY2OxyrPaa5rwx1XEg==} + engines: {node: '>=18.17.0'} + peerDependencies: + react: '>=18 || >=19.0.0-beta' + react-dom: '>=18 || >=19.0.0-beta' + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + + '@clerk/types@4.13.1': + resolution: {integrity: sha512-AfFTA1Du0pog62CSl23Y8NNDN+iHwXdUQAp/sQ/LbE+/wYBOMSaV5d+cS5F4HX+/uzXgKsc3BpCNI/Th3CLNHg==} + engines: {node: '>=18.17.0'} + '@cloudflare/kv-asset-handler@0.3.4': resolution: {integrity: sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q==} engines: {node: '>=16.13'} @@ -624,6 +664,50 @@ packages: '@emnapi/runtime@1.2.0': resolution: {integrity: sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==} + '@emotion/babel-plugin@11.12.0': + resolution: {integrity: sha512-y2WQb+oP8Jqvvclh8Q55gLUyb7UFvgv7eJfsj7td5TToBrIUtPay2kMrZi4xjq9qw2vD0ZR5fSho0yqoFgX7Rw==} + + '@emotion/cache@11.11.0': + resolution: {integrity: sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==} + + '@emotion/hash@0.9.2': + resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} + + '@emotion/memoize@0.8.1': + resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} + + '@emotion/memoize@0.9.0': + resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} + + '@emotion/react@11.11.1': + resolution: {integrity: sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==} + peerDependencies: + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + + '@emotion/serialize@1.3.0': + resolution: {integrity: sha512-jACuBa9SlYajnpIVXB+XOXnfJHyckDfe6fOpORIM6yhBDlqGuExvDdZYHDQGoDf3bZXGv7tNr+LpLjJqiEQ6EA==} + + '@emotion/sheet@1.4.0': + resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==} + + '@emotion/unitless@0.9.0': + resolution: {integrity: sha512-TP6GgNZtmtFaFcsOgExdnfxLLpRDla4Q66tnenA9CktvVSdNKDvMVuUah4QvWPIpNjrWsGg3qeGo9a43QooGZQ==} + + '@emotion/use-insertion-effect-with-fallbacks@1.1.0': + resolution: {integrity: sha512-+wBOcIV5snwGgI2ya3u99D7/FJquOIniQT1IKyDsBmEgwvpxMNeS65Oib7OnE2d2aY+3BU4OiH+0Wchf8yk3Hw==} + peerDependencies: + react: '>=16.8.0' + + '@emotion/utils@1.4.0': + resolution: {integrity: sha512-spEnrA1b6hDR/C68lC2M7m6ALPUHZC0lIY7jAS/B/9DuuO1ZP04eov8SMv/6fwRd8pzmsn2AuJEznRREWlQrlQ==} + + '@emotion/weak-memoize@0.3.1': + resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==} + '@esbuild-kit/core-utils@3.3.2': resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} @@ -1358,9 +1442,21 @@ packages: react: '>=16.8.0' react-dom: '>=16.8.0' + '@floating-ui/react@0.25.4': + resolution: {integrity: sha512-lWRQ/UiTvSIBxohn0/2HFHEmnmOVRjl7j6XcRJuLH0ls6f/9AyHMWVzkAJFuwx0n9gaEeCmg9VccCSCJzbEJig==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/utils@0.1.6': + resolution: {integrity: sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==} + '@floating-ui/utils@0.2.3': resolution: {integrity: sha512-XGndio0l5/Gvd6CLIABvsav9HHezgDFFhDfHk1bvLfr9ni8dojqLSvBbotJEjmIwNHL7vK4QzBJTdBRoB+c1ww==} + '@formkit/auto-animate@0.8.2': + resolution: {integrity: sha512-SwPWfeRa5veb1hOIBMdzI+73te5puUBHmqqaF1Bu7FjvxlYSz/kJcZKSa9Cg60zL0uRNeJL2SbRxV6Jp6Q1nFQ==} + '@humanwhocodes/config-array@0.11.14': resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} @@ -2240,6 +2336,9 @@ packages: '@types/node@20.14.2': resolution: {integrity: sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==} + '@types/parse-json@4.0.2': + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + '@types/prop-types@15.7.12': resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} @@ -2339,6 +2438,12 @@ packages: '@vscode/l10n@0.0.18': resolution: {integrity: sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==} + '@zxcvbn-ts/core@3.0.4': + resolution: {integrity: sha512-aQeiT0F09FuJaAqNrxynlAwZ2mW/1MdXakKWNmGM1Qp/VaY6CnB/GfnMS2T8gB2231Esp1/maCWd8vTG4OuShw==} + + '@zxcvbn-ts/language-common@3.0.4': + resolution: {integrity: sha512-viSNNnRYtc7ULXzxrQIVUNwHAPSXRtoIwy/Tq4XQQdIknBzw4vz36lQLF6mvhMlTIlpjoN/Z1GFu/fwiAlUSsw==} + abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} @@ -2482,6 +2587,10 @@ packages: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} engines: {node: '>= 0.4'} + babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} + bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} @@ -2518,6 +2627,9 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} + browser-tabs-lock@1.2.15: + resolution: {integrity: sha512-J8K9vdivK0Di+b8SBdE7EZxDr88TnATing7XoLw6+nFkXMQ6sVBh92K3NQvZlZU91AIkFRi0w3sztk5Z+vsswA==} + browserslist@4.23.1: resolution: {integrity: sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -2613,6 +2725,9 @@ packages: resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} + client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -2679,6 +2794,9 @@ packages: resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} engines: {node: ^14.18.0 || >=16.10.0} + convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -2690,15 +2808,31 @@ packages: resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} engines: {node: '>= 0.6'} + copy-to-clipboard@3.3.3: + resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} + + core-js@3.26.1: + resolution: {integrity: sha512-21491RRQVzUn0GGM9Z1Jrpr6PNPxPi+Za8OM9q4tksTSnlbXXGKK1nXNg/QvwFYettXvSX6zWKCtHHfjN4puyA==} + + cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} + crypto-js@4.2.0: + resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} + cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} hasBin: true + csstype@3.1.1: + resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==} + csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} @@ -2802,6 +2936,9 @@ packages: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} + dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + drizzle-kit@0.22.8: resolution: {integrity: sha512-VjI4wsJjk3hSqHSa3TwBf+uvH6M6pRHyxyoVbt935GUzP9tUR/BRZ+MhEJNgryqbzN2Za1KP0eJMTgKEPsalYQ==} hasBin: true @@ -2921,6 +3058,9 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + es-define-property@1.0.0: resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} engines: {node: '>= 0.4'} @@ -3085,6 +3225,10 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fastest-levenshtein@1.0.16: + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} + engines: {node: '>= 4.9.1'} + fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} @@ -3096,6 +3240,9 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} + find-root@1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + find-up-simple@1.0.0: resolution: {integrity: sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==} engines: {node: '>=18'} @@ -3298,6 +3445,9 @@ packages: hastscript@8.0.0: resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==} + hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + html-escaper@3.0.3: resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==} @@ -3343,6 +3493,9 @@ packages: invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + is-arrayish@0.3.2: resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} @@ -3425,6 +3578,10 @@ packages: resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} hasBin: true + js-cookie@3.0.5: + resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==} + engines: {node: '>=14'} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -3447,6 +3604,9 @@ packages: json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} @@ -3527,6 +3687,9 @@ packages: loupe@2.3.7: resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + lru-cache@10.2.2: resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} engines: {node: 14 || >=16.14} @@ -3551,6 +3714,10 @@ packages: magic-string@0.30.11: resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} + map-obj@4.3.0: + resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} + engines: {node: '>=8'} + markdown-table@3.0.3: resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} @@ -3767,12 +3934,24 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + nanoid@5.0.7: + resolution: {integrity: sha512-oLxFY2gd2IqnjcYyOXD8XGCftpGtZP2AbHbOkthDkvRywH5ayNtPVy9YlOPcHckXzbLTCHpkb7FB+yuxKV13pQ==} + engines: {node: ^18 || >=20} + hasBin: true + + nanostores@0.10.3: + resolution: {integrity: sha512-Nii8O1XqmawqSCf9o2aWqVxhKRN01+iue9/VEd1TiJCr9VT5XxgPFbF1Edl1XN6pwJcZRsl8Ki+z01yb/T/C2g==} + engines: {node: ^18.0.0 || >=20.0.0} + natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} nlcst-to-string@4.0.0: resolution: {integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==} + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} @@ -3882,6 +4061,10 @@ packages: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + parse-latin@7.0.0: resolution: {integrity: sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==} @@ -4037,6 +4220,11 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} + qrcode.react@3.1.0: + resolution: {integrity: sha512-oyF+Urr3oAMUG/OiOuONL3HXM+53wvuH3mtIWQrYmsXoAq0DkvZp2RYUWFSMFtbdOpuS++9v+WAkzNVkMlNW6Q==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + qs@6.12.2: resolution: {integrity: sha512-x+NLUpx9SYrcwXtX7ob1gnkSems4i/mGZX5SlYxwIau6RrUSODO89TR/XDGGpn5RPWSYIB+aSfuSlV5+CmbTBg==} engines: {node: '>=0.6'} @@ -4054,6 +4242,9 @@ packages: peerDependencies: react: '*' + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} @@ -4106,6 +4297,9 @@ packages: resolution: {integrity: sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==} engines: {node: '>= 4'} + regenerator-runtime@0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} @@ -4289,6 +4483,13 @@ packages: resolution: {integrity: sha512-s2+eG9vNMWQQvu8Jz+SfAiihpYsmaMtcyPnHtBuZEhaAAQOQV63xSSL9StWv2p08xKgvSC8pEZ28rXoy41FhLg==} hasBin: true + snake-case@3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + + snakecase-keys@5.4.4: + resolution: {integrity: sha512-YTywJG93yxwHLgrYLZjlC75moVEX04LZM4FHfihjHe1FCXm+QaLOFfSf535aXOAd0ArVQMWUAe8ZPm4VtWyXaA==} + engines: {node: '>=12'} + source-map-js@1.2.0: resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} @@ -4377,6 +4578,9 @@ packages: resolution: {integrity: sha512-syeEEd112om/waJ5gOQ+SaYi+setuidQ4ZIPiQREF4yJeegXhn2HKy6C0JYm7uhVQKfMAvuZ22dIRsnoDv7AMw==} engines: {node: '>=12.*'} + stylis@4.2.0: + resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} + sucrase@3.35.0: resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} engines: {node: '>=16 || 14 >=14.17'} @@ -4397,10 +4601,18 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + swr@2.2.5: + resolution: {integrity: sha512-QtxqyclFeAsxEUeZIYmsaQ0UjimSq1RZ9Un7I68/0ClKK/U3LoyQunwkQfJZr2fc22DfIXLNDc2wFyTEikCUpg==} + peerDependencies: + react: ^16.11.0 || ^17.0.0 || ^18.0.0 + synckit@0.9.0: resolution: {integrity: sha512-7RnqIMq572L8PeEzKeBINYEJDDxpcH8JEgLwUqBd3TkofhFRbkq4QLR0u+36avGAhCRbk2nnmjcW9SE531hPDg==} engines: {node: ^14.18.0 || >=16.0.0} + tabbable@6.2.0: + resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} + tailwind-merge@2.3.0: resolution: {integrity: sha512-vkYrLpIP+lgR0tQCG6AP7zZXCTLc1Lnv/CCRT3BqJ9CZ3ui2++GPaGb1x/ILsINIMSYqqvrpqjUFsMNLlW99EA==} @@ -4454,6 +4666,9 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} + toggle-selection@1.0.6: + resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} + tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} @@ -4482,6 +4697,9 @@ packages: typescript: optional: true + tslib@2.4.1: + resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} + tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} @@ -4598,6 +4816,11 @@ packages: '@types/react': optional: true + use-sync-external-store@1.2.2: + resolution: {integrity: sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -4918,6 +5141,10 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + yaml@2.4.5: resolution: {integrity: sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==} engines: {node: '>= 14'} @@ -5434,6 +5661,76 @@ snapshots: picocolors: 1.0.1 sisteransi: 1.0.5 + '@clerk/astro@1.0.12(@types/react@18.3.3)(astro@4.13.1(@types/node@20.14.2)(terser@5.31.1)(typescript@5.5.4))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@clerk/backend': 1.6.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@clerk/clerk-js': 5.14.1(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@clerk/shared': 2.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@clerk/types': 4.13.1 + astro: 4.13.1(@types/node@20.14.2)(terser@5.31.1)(typescript@5.5.4) + nanoid: 5.0.7 + nanostores: 0.10.3 + path-to-regexp: 6.2.2 + transitivePeerDependencies: + - '@types/react' + - react + - react-dom + - supports-color + + '@clerk/backend@1.6.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@clerk/shared': 2.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@clerk/types': 4.13.1 + cookie: 0.5.0 + snakecase-keys: 5.4.4 + tslib: 2.4.1 + transitivePeerDependencies: + - react + - react-dom + + '@clerk/clerk-js@5.14.1(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@clerk/localizations': 2.5.8 + '@clerk/shared': 2.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@clerk/types': 4.13.1 + '@emotion/cache': 11.11.0 + '@emotion/react': 11.11.1(@types/react@18.3.3)(react@18.3.1) + '@floating-ui/react': 0.25.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@formkit/auto-animate': 0.8.2 + '@zxcvbn-ts/core': 3.0.4 + '@zxcvbn-ts/language-common': 3.0.4 + browser-tabs-lock: 1.2.15 + copy-to-clipboard: 3.3.3 + core-js: 3.26.1 + crypto-js: 4.2.0 + dequal: 2.0.3 + qrcode.react: 3.1.0(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + regenerator-runtime: 0.13.11 + transitivePeerDependencies: + - '@types/react' + - supports-color + + '@clerk/localizations@2.5.8': + dependencies: + '@clerk/types': 4.13.1 + + '@clerk/shared@2.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@clerk/types': 4.13.1 + glob-to-regexp: 0.4.1 + js-cookie: 3.0.5 + std-env: 3.7.0 + swr: 2.2.5(react@18.3.1) + optionalDependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@clerk/types@4.13.1': + dependencies: + csstype: 3.1.1 + '@cloudflare/kv-asset-handler@0.3.4': dependencies: mime: 3.0.0 @@ -5548,6 +5845,72 @@ snapshots: tslib: 2.6.3 optional: true + '@emotion/babel-plugin@11.12.0': + dependencies: + '@babel/helper-module-imports': 7.24.7 + '@babel/runtime': 7.24.7 + '@emotion/hash': 0.9.2 + '@emotion/memoize': 0.9.0 + '@emotion/serialize': 1.3.0 + babel-plugin-macros: 3.1.0 + convert-source-map: 1.9.0 + escape-string-regexp: 4.0.0 + find-root: 1.1.0 + source-map: 0.5.7 + stylis: 4.2.0 + transitivePeerDependencies: + - supports-color + + '@emotion/cache@11.11.0': + dependencies: + '@emotion/memoize': 0.8.1 + '@emotion/sheet': 1.4.0 + '@emotion/utils': 1.4.0 + '@emotion/weak-memoize': 0.3.1 + stylis: 4.2.0 + + '@emotion/hash@0.9.2': {} + + '@emotion/memoize@0.8.1': {} + + '@emotion/memoize@0.9.0': {} + + '@emotion/react@11.11.1(@types/react@18.3.3)(react@18.3.1)': + dependencies: + '@babel/runtime': 7.24.7 + '@emotion/babel-plugin': 11.12.0 + '@emotion/cache': 11.11.0 + '@emotion/serialize': 1.3.0 + '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@18.3.1) + '@emotion/utils': 1.4.0 + '@emotion/weak-memoize': 0.3.1 + hoist-non-react-statics: 3.3.2 + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 + transitivePeerDependencies: + - supports-color + + '@emotion/serialize@1.3.0': + dependencies: + '@emotion/hash': 0.9.2 + '@emotion/memoize': 0.9.0 + '@emotion/unitless': 0.9.0 + '@emotion/utils': 1.4.0 + csstype: 3.1.3 + + '@emotion/sheet@1.4.0': {} + + '@emotion/unitless@0.9.0': {} + + '@emotion/use-insertion-effect-with-fallbacks@1.1.0(react@18.3.1)': + dependencies: + react: 18.3.1 + + '@emotion/utils@1.4.0': {} + + '@emotion/weak-memoize@0.3.1': {} + '@esbuild-kit/core-utils@3.3.2': dependencies: esbuild: 0.18.20 @@ -5950,8 +6313,20 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + '@floating-ui/react@0.25.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@floating-ui/react-dom': 2.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@floating-ui/utils': 0.1.6 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + tabbable: 6.2.0 + + '@floating-ui/utils@0.1.6': {} + '@floating-ui/utils@0.2.3': {} + '@formkit/auto-animate@0.8.2': {} + '@humanwhocodes/config-array@0.11.14': dependencies: '@humanwhocodes/object-schema': 2.0.3 @@ -6715,6 +7090,8 @@ snapshots: dependencies: undici-types: 5.26.5 + '@types/parse-json@4.0.2': {} + '@types/prop-types@15.7.12': {} '@types/qs@6.9.15': {} @@ -6883,6 +7260,12 @@ snapshots: '@vscode/l10n@0.0.18': {} + '@zxcvbn-ts/core@3.0.4': + dependencies: + fastest-levenshtein: 1.0.16 + + '@zxcvbn-ts/language-common@3.0.4': {} + abort-controller@3.0.0: dependencies: event-target-shim: 5.0.1 @@ -7100,6 +7483,12 @@ snapshots: axobject-query@4.1.0: {} + babel-plugin-macros@3.1.0: + dependencies: + '@babel/runtime': 7.24.7 + cosmiconfig: 7.1.0 + resolve: 1.22.8 + bail@2.0.2: {} balanced-match@1.0.2: {} @@ -7138,6 +7527,10 @@ snapshots: dependencies: fill-range: 7.1.1 + browser-tabs-lock@1.2.15: + dependencies: + lodash: 4.17.21 + browserslist@4.23.1: dependencies: caniuse-lite: 1.0.30001632 @@ -7239,6 +7632,8 @@ snapshots: cli-spinners@2.9.2: {} + client-only@0.0.1: {} + cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -7309,20 +7704,40 @@ snapshots: consola@3.2.3: {} + convert-source-map@1.9.0: {} + convert-source-map@2.0.0: {} cookie@0.5.0: {} cookie@0.6.0: {} + copy-to-clipboard@3.3.3: + dependencies: + toggle-selection: 1.0.6 + + core-js@3.26.1: {} + + cosmiconfig@7.1.0: + dependencies: + '@types/parse-json': 4.0.2 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + cross-spawn@7.0.3: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 + crypto-js@4.2.0: {} + cssesc@3.0.0: {} + csstype@3.1.1: {} + csstype@3.1.3: {} data-uri-to-buffer@2.0.2: {} @@ -7396,6 +7811,11 @@ snapshots: dependencies: esutils: 2.0.3 + dot-case@3.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.6.3 + drizzle-kit@0.22.8: dependencies: '@esbuild-kit/esm-loader': 2.6.5 @@ -7429,6 +7849,10 @@ snapshots: entities@4.5.0: {} + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + es-define-property@1.0.0: dependencies: get-intrinsic: 1.2.4 @@ -7730,6 +8154,8 @@ snapshots: fast-levenshtein@2.0.6: {} + fastest-levenshtein@1.0.16: {} + fastq@1.17.1: dependencies: reusify: 1.0.4 @@ -7742,6 +8168,8 @@ snapshots: dependencies: to-regex-range: 5.0.1 + find-root@1.1.0: {} + find-up-simple@1.0.0: {} find-up@4.1.0: @@ -7997,6 +8425,10 @@ snapshots: property-information: 6.5.0 space-separated-tokens: 2.0.2 + hoist-non-react-statics@3.3.2: + dependencies: + react-is: 16.13.1 + html-escaper@3.0.3: {} html-void-elements@3.0.0: {} @@ -8033,6 +8465,8 @@ snapshots: dependencies: loose-envify: 1.4.0 + is-arrayish@0.2.1: {} + is-arrayish@0.3.2: optional: true @@ -8090,6 +8524,8 @@ snapshots: jiti@1.21.6: {} + js-cookie@3.0.5: {} + js-tokens@4.0.0: {} js-tokens@9.0.0: {} @@ -8107,6 +8543,8 @@ snapshots: json-buffer@3.0.1: {} + json-parse-even-better-errors@2.3.1: {} + json-schema-traverse@0.4.1: {} json-stable-stringify-without-jsonify@1.0.1: {} @@ -8175,6 +8613,10 @@ snapshots: dependencies: get-func-name: 2.0.2 + lower-case@2.0.2: + dependencies: + tslib: 2.6.3 + lru-cache@10.2.2: {} lru-cache@5.1.1: @@ -8201,6 +8643,8 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 + map-obj@4.3.0: {} + markdown-table@3.0.3: {} mdast-util-definitions@6.0.0: @@ -8634,12 +9078,21 @@ snapshots: nanoid@3.3.7: {} + nanoid@5.0.7: {} + + nanostores@0.10.3: {} + natural-compare@1.4.0: {} nlcst-to-string@4.0.0: dependencies: '@types/nlcst': 2.0.3 + no-case@3.0.4: + dependencies: + lower-case: 2.0.2 + tslib: 2.6.3 + node-domexception@1.0.0: {} node-fetch-native@1.6.4: {} @@ -8741,6 +9194,13 @@ snapshots: dependencies: callsites: 3.1.0 + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.24.7 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + parse-latin@7.0.0: dependencies: '@types/nlcst': 2.0.3 @@ -8877,6 +9337,10 @@ snapshots: punycode@2.3.1: {} + qrcode.react@3.1.0(react@18.3.1): + dependencies: + react: 18.3.1 + qs@6.12.2: dependencies: side-channel: 1.0.6 @@ -8893,6 +9357,8 @@ snapshots: dependencies: react: 18.3.1 + react-is@16.13.1: {} + react-is@18.3.1: {} react-refresh@0.14.2: {} @@ -8945,6 +9411,8 @@ snapshots: tiny-invariant: 1.3.3 tslib: 2.6.3 + regenerator-runtime@0.13.11: {} + regenerator-runtime@0.14.1: {} rehype-parse@9.0.0: @@ -9220,6 +9688,17 @@ snapshots: eventsource: 2.0.2 validator: 13.12.0 + snake-case@3.0.4: + dependencies: + dot-case: 3.0.4 + tslib: 2.6.3 + + snakecase-keys@5.4.4: + dependencies: + map-obj: 4.3.0 + snake-case: 3.0.4 + type-fest: 2.19.0 + source-map-js@1.2.0: {} source-map-support@0.5.21: @@ -9298,6 +9777,8 @@ snapshots: '@types/node': 20.14.2 qs: 6.12.2 + stylis@4.2.0: {} + sucrase@3.35.0: dependencies: '@jridgewell/gen-mapping': 0.3.5 @@ -9322,11 +9803,19 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} + swr@2.2.5(react@18.3.1): + dependencies: + client-only: 0.0.1 + react: 18.3.1 + use-sync-external-store: 1.2.2(react@18.3.1) + synckit@0.9.0: dependencies: '@pkgr/core': 0.1.1 tslib: 2.6.3 + tabbable@6.2.0: {} + tailwind-merge@2.3.0: dependencies: '@babel/runtime': 7.24.7 @@ -9399,6 +9888,8 @@ snapshots: dependencies: is-number: 7.0.0 + toggle-selection@1.0.6: {} + tr46@0.0.3: {} trim-lines@3.0.1: {} @@ -9419,6 +9910,8 @@ snapshots: optionalDependencies: typescript: 5.5.4 + tslib@2.4.1: {} + tslib@2.6.2: {} tslib@2.6.3: {} @@ -9541,6 +10034,10 @@ snapshots: optionalDependencies: '@types/react': 18.3.3 + use-sync-external-store@1.2.2(react@18.3.1): + dependencies: + react: 18.3.1 + util-deprecate@1.0.2: {} validator@13.12.0: {} @@ -9867,6 +10364,8 @@ snapshots: yallist@3.1.1: {} + yaml@1.10.2: {} + yaml@2.4.5: {} yargs-parser@21.1.1: {}