diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..3f7bf98 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,6 @@ +node_modules + +/.cache +/build +/public/build +.env diff --git a/.github/workflows/fly.yml b/.github/workflows/fly.yml new file mode 100644 index 0000000..3a7e876 --- /dev/null +++ b/.github/workflows/fly.yml @@ -0,0 +1,15 @@ +name: Fly Deploy +on: + push: + branches: + - master +jobs: + deploy: + name: Deploy app + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: superfly/flyctl-actions/setup-flyctl@master + - run: flyctl deploy --remote-only + env: + FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }} diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..f87a044 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +auto-install-peers=true \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..5537664 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,49 @@ +# syntax = docker/dockerfile:1 + +# Adjust NODE_VERSION as desired +ARG NODE_VERSION=18.14.2 +FROM node:${NODE_VERSION}-slim as base + +LABEL fly_launch_runtime="Remix" + +# Remix app lives here +WORKDIR /app + +# Set production environment +ENV NODE_ENV="production" + +# Install pnpm +ARG PNPM_VERSION=8.9.2 +RUN npm install -g pnpm@$PNPM_VERSION + + +# Throw-away build stage to reduce size of final image +FROM base as build + +# Install packages needed to build node modules +RUN apt-get update -qq && \ + apt-get install -y build-essential pkg-config python-is-python3 + +# Install node modules +COPY --link package.json pnpm-lock.yaml ./ +RUN pnpm install --frozen-lockfile --prod=false + +# Copy application code +COPY --link . . + +# Build application +RUN pnpm run build + +# Remove development dependencies +RUN pnpm prune --prod + + +# Final stage for app image +FROM base + +# Copy built application +COPY --from=build /app /app + +# Start the server by default, this can be overwritten at runtime +EXPOSE 3000 +CMD [ "pnpm", "run", "start" ] diff --git a/app/routes/api.webhooks.clerk.ts b/app/routes/api.webhooks.clerk.ts new file mode 100644 index 0000000..1f4b4b1 --- /dev/null +++ b/app/routes/api.webhooks.clerk.ts @@ -0,0 +1,79 @@ +import { ActionFunctionArgs, json } from "@remix-run/node"; +import { Webhook } from "svix"; +import { WebhookEvent } from "@clerk/remix/api.server"; +import { + onUserCreatedHandler, + onUserDeletedHandler, +} from "~/services/webhookhelpers.server"; + +export async function action({ request, params, context }: ActionFunctionArgs) { + // Get the headers + const headerPayload = request.headers; + const svix_id = headerPayload.get("svix-id"); + const svix_timestamp = headerPayload.get("svix-timestamp"); + const svix_signature = headerPayload.get("svix-signature"); + + // If there are no headers, error out + if (!svix_id || !svix_timestamp || !svix_signature) { + return new Response("Error occured -- no svix headers", { + status: 400, + }); + } + + // Get the body + const body = JSON.stringify(await request.json()); + + // Create a new SVIX instance with your secret. + const wh = new Webhook(process.env.CLERK_WEBHOOK_SIGNING_SECRET!); + + let evt: WebhookEvent; + + // Verify the payload with the headers + try { + evt = wh.verify(body, { + "svix-id": svix_id, + "svix-timestamp": svix_timestamp, + "svix-signature": svix_signature, + }) as WebhookEvent; + } catch (err) { + console.error("Error verifying webhook:", err); + return new Response("Error occured", { + status: 400, + }); + } + + // Get the ID and type + const { id } = evt.data; + const eventType = evt.type; + let success = false; + + switch (eventType) { + case "user.created": + success = await onUserCreatedHandler(id); + if (success) { + return json( + { result: "USER CREATED" }, + { status: 200, statusText: "USER CREATED" } + ); + } else { + return json( + { result: "USER WITH THIS ID NOT FOUND" }, + { status: 404, statusText: "USER WITH THIS ID NOT FOUND" } + ); + } + + case "user.deleted": + success = await onUserDeletedHandler(id); + + return json( + { result: "USER DELETED" }, + { status: 200, statusText: "USER DELETED" } + ); + + default: + return json( + { result: "INVALID WEBHOOK EVENT TYPE" }, + { status: 400, statusText: "INVALID WEBHOOK EVENT TYPE" } + ); + } +} diff --git a/app/services/webhookhelpers.server.ts b/app/services/webhookhelpers.server.ts new file mode 100644 index 0000000..67a8642 --- /dev/null +++ b/app/services/webhookhelpers.server.ts @@ -0,0 +1,44 @@ +import { eq } from "drizzle-orm"; +import { db } from "./db.server"; +import { rooms } from "./schema"; + +export const onUserDeletedHandler = async (userId: string | undefined) => { + if (!userId) { + return false; + } + + try { + await db.delete(rooms).where(eq(rooms.userId, userId)); + + return true; + } catch (error) { + return false; + } +}; + +export const onUserCreatedHandler = async (userId: string | undefined) => { + if (!userId) { + return false; + } + + const userUpdateResponse = await fetch( + `https://api.clerk.com/v1/users/${userId}/metadata`, + { + method: "PATCH", + headers: { + Authorization: `Bearer ${process.env.CLERK_SECRET_KEY}`, + "Content-Type": "application/json", + }, + body: JSON.stringify({ + public_metadata: { + isVIP: false, + isAdmin: false, + }, + private_metadata: {}, + unsafe_metadata: {}, + }), + } + ); + + return userUpdateResponse.ok; +}; diff --git a/fly.toml b/fly.toml new file mode 100644 index 0000000..041e22f --- /dev/null +++ b/fly.toml @@ -0,0 +1,17 @@ +# fly.toml app configuration file generated for sprintpadawan on 2023-11-22T13:18:40-07:00 +# +# See https://fly.io/docs/reference/configuration/ for information about how to use this file. +# + +app = "sprintpadawan" +primary_region = "sea" + +[build] + +[http_service] + internal_port = 3000 + force_https = true + auto_stop_machines = true + auto_start_machines = true + min_machines_running = 0 + processes = ["app"] diff --git a/package.json b/package.json index 0b2c347..600f96b 100644 --- a/package.json +++ b/package.json @@ -14,11 +14,11 @@ "@clerk/remix": "^3.1.5", "@libsql/client": "0.4.0-pre.2", "@paralleldrive/cuid2": "^2.2.2", - "@remix-run/css-bundle": "^2.3.0", - "@remix-run/node": "^2.3.0", - "@remix-run/react": "^2.3.0", - "@remix-run/serve": "^2.3.0", - "ably": "1.2.47", + "@remix-run/css-bundle": "^2.3.1", + "@remix-run/node": "^2.3.1", + "@remix-run/react": "^2.3.1", + "@remix-run/serve": "^2.3.1", + "ably": "1.2.48", "csv42": "^5.0.0", "drizzle-orm": "^0.29.0", "ioredis": "^5.3.2", @@ -26,13 +26,15 @@ "lucide-react": "^0.292.0", "react": "^18.2.0", "react-dom": "^18.2.0", - "remix-utils": "^7.1.0" + "remix-utils": "^7.1.0", + "svix": "^1.14.0" }, "devDependencies": { - "@remix-run/dev": "^2.3.0", - "@remix-run/eslint-config": "^2.3.0", + "@flydotio/dockerfile": "^0.4.11", + "@remix-run/dev": "^2.3.1", + "@remix-run/eslint-config": "^2.3.1", "@types/react": "^18.2.38", - "@types/react-dom": "^18.2.16", + "@types/react-dom": "^18.2.17", "better-sqlite3": "^9.1.1", "daisyui": "^4.4.2", "dotenv": "^16.3.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 02f261f..cad8469 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,13 +1,13 @@ lockfileVersion: '6.0' settings: - autoInstallPeers: false + autoInstallPeers: true excludeLinksFromLockfile: false dependencies: '@clerk/remix': specifier: ^3.1.5 - version: 3.1.5(@remix-run/react@2.3.0)(react-dom@18.2.0)(react@18.2.0) + version: 3.1.5(@remix-run/react@2.3.1)(@remix-run/server-runtime@2.3.1)(react-dom@18.2.0)(react@18.2.0) '@libsql/client': specifier: 0.4.0-pre.2 version: 0.4.0-pre.2 @@ -15,20 +15,20 @@ dependencies: specifier: ^2.2.2 version: 2.2.2 '@remix-run/css-bundle': - specifier: ^2.3.0 - version: 2.3.0 + specifier: ^2.3.1 + version: 2.3.1 '@remix-run/node': - specifier: ^2.3.0 - version: 2.3.0(typescript@5.3.2) + specifier: ^2.3.1 + version: 2.3.1(typescript@5.3.2) '@remix-run/react': - specifier: ^2.3.0 - version: 2.3.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.2) + specifier: ^2.3.1 + version: 2.3.1(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.2) '@remix-run/serve': - specifier: ^2.3.0 - version: 2.3.0(typescript@5.3.2) + specifier: ^2.3.1 + version: 2.3.1(typescript@5.3.2) ably: - specifier: 1.2.47 - version: 1.2.47(react-dom@18.2.0)(react@18.2.0) + specifier: 1.2.48 + version: 1.2.48(react-dom@18.2.0)(react@18.2.0) csv42: specifier: ^5.0.0 version: 5.0.0 @@ -52,27 +52,33 @@ dependencies: version: 18.2.0(react@18.2.0) remix-utils: specifier: ^7.1.0 - version: 7.1.0(@remix-run/node@2.3.0)(@remix-run/react@2.3.0)(react@18.2.0) + version: 7.1.0(@remix-run/node@2.3.1)(@remix-run/react@2.3.1)(react@18.2.0) + svix: + specifier: ^1.14.0 + version: 1.14.0 devDependencies: + '@flydotio/dockerfile': + specifier: ^0.4.11 + version: 0.4.11 '@remix-run/dev': - specifier: ^2.3.0 - version: 2.3.0(@remix-run/serve@2.3.0)(typescript@5.3.2) + specifier: ^2.3.1 + version: 2.3.1(@remix-run/serve@2.3.1)(typescript@5.3.2) '@remix-run/eslint-config': - specifier: ^2.3.0 - version: 2.3.0(eslint@8.54.0)(react@18.2.0)(typescript@5.3.2) + specifier: ^2.3.1 + version: 2.3.1(eslint@8.54.0)(react@18.2.0)(typescript@5.3.2) '@types/react': specifier: ^18.2.38 version: 18.2.38 '@types/react-dom': - specifier: ^18.2.16 - version: 18.2.16 + specifier: ^18.2.17 + version: 18.2.17 better-sqlite3: specifier: ^9.1.1 version: 9.1.1 daisyui: specifier: ^4.4.2 - version: 4.4.2 + version: 4.4.2(postcss@8.4.31) dotenv: specifier: ^16.3.1 version: 16.3.1 @@ -548,7 +554,7 @@ packages: tslib: 2.4.1 dev: false - /@clerk/remix@3.1.5(@remix-run/react@2.3.0)(react-dom@18.2.0)(react@18.2.0): + /@clerk/remix@3.1.5(@remix-run/react@2.3.1)(@remix-run/server-runtime@2.3.1)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-SWacZIwm/2zyZjsN3I1/DDYo+yoQ2B3BkcwEHwkGCLMkaJwipoS6nQtD04cr/RGbzrlBETBGR7gOUdEaIAtKOw==} engines: {node: '>=18.0.0'} peerDependencies: @@ -561,7 +567,8 @@ packages: '@clerk/clerk-react': 4.28.0(react@18.2.0) '@clerk/shared': 1.1.0(react@18.2.0) '@clerk/types': 3.58.0 - '@remix-run/react': 2.3.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.2) + '@remix-run/react': 2.3.1(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.2) + '@remix-run/server-runtime': 2.3.1(typescript@5.3.2) cookie: 0.5.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -1316,6 +1323,18 @@ packages: engines: {node: '>=14'} dev: true + /@flydotio/dockerfile@0.4.11: + resolution: {integrity: sha512-L52UAfrOhmAn3T4TxpeRofQOSO+Kctg+uraB4nLzo4mvvh+4Z7HYxSi7Dnq0Kirz+xx6fDIc4OMNT1EdaORecA==} + engines: {node: '>=16.0.0'} + hasBin: true + dependencies: + chalk: 5.3.0 + diff: 5.1.0 + ejs: 3.1.9 + shell-quote: 1.8.1 + yargs: 17.7.2 + dev: true + /@humanwhocodes/config-array@0.11.13: resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} engines: {node: '>=10.10.0'} @@ -1630,17 +1649,17 @@ packages: dev: true optional: true - /@remix-run/css-bundle@2.3.0: - resolution: {integrity: sha512-+qjS0bk716XYEtcwrCMgFkZkreOHQN70L5+ItQyNyIxeTbuwBuBzu7239p6Scg9I9A3nV+NtxpKYHzL/qB1XKA==} + /@remix-run/css-bundle@2.3.1: + resolution: {integrity: sha512-07d40dZz3iS/rm2xyFzmvGylJ5K6vXbb0wCnO+60JBQGlKKZGR4O4u027EmgUT32tJP/Xryf6rpnR3QTjDxozg==} engines: {node: '>=18.0.0'} dev: false - /@remix-run/dev@2.3.0(@remix-run/serve@2.3.0)(typescript@5.3.2): - resolution: {integrity: sha512-Eno0XHyIKo5GyzN4OAwNkgkyl4H1mLWbqeVUA8T5HmVDj+8qJLIcYeayS2BmA1KYAHJBiy5ufAGi2MpaXMjKww==} + /@remix-run/dev@2.3.1(@remix-run/serve@2.3.1)(typescript@5.3.2): + resolution: {integrity: sha512-Qo6bbdDUHvg6+LiC+8paA40hWVRPBqYCoOse9hEZHRHNxY2r5JsF5RbXldx/70wtT1gJkp+k5z3MjVxkYUsqEw==} engines: {node: '>=18.0.0'} hasBin: true peerDependencies: - '@remix-run/serve': ^2.3.0 + '@remix-run/serve': ^2.3.1 typescript: ^5.1.0 vite: ^4.4.9 || ^5.0.0 peerDependenciesMeta: @@ -1661,10 +1680,10 @@ packages: '@babel/types': 7.23.4 '@mdx-js/mdx': 2.3.0 '@npmcli/package-json': 4.0.1 - '@remix-run/node': 2.3.0(typescript@5.3.2) - '@remix-run/router': 1.12.0-pre.0 - '@remix-run/serve': 2.3.0(typescript@5.3.2) - '@remix-run/server-runtime': 2.3.0(typescript@5.3.2) + '@remix-run/node': 2.3.1(typescript@5.3.2) + '@remix-run/router': 1.13.0 + '@remix-run/serve': 2.3.1(typescript@5.3.2) + '@remix-run/server-runtime': 2.3.1(typescript@5.3.2) '@types/mdx': 2.0.10 '@vanilla-extract/integration': 6.2.4 arg: 5.0.2 @@ -1725,8 +1744,8 @@ packages: - utf-8-validate dev: true - /@remix-run/eslint-config@2.3.0(eslint@8.54.0)(react@18.2.0)(typescript@5.3.2): - resolution: {integrity: sha512-iyuNO7tRjevLjwGH4nLv/6g5NROhUXIQHTNjTUhQjEkHac4/kp3EOnnQEtGmMUfLruTyz6OoOJQzTkT3l14VvQ==} + /@remix-run/eslint-config@2.3.1(eslint@8.54.0)(react@18.2.0)(typescript@5.3.2): + resolution: {integrity: sha512-nSPsgsEz6e3UDh2cDNq+tIoOf4yBnteuLyYGXyeOlW14oQoC4k5apfsjGAb3nphZtTNvTKP2qJhyYmje8Mr3Zw==} engines: {node: '>=18.0.0'} peerDependencies: eslint: ^8.0.0 @@ -1739,7 +1758,7 @@ packages: '@babel/core': 7.23.3 '@babel/eslint-parser': 7.23.3(@babel/core@7.23.3)(eslint@8.54.0) '@babel/preset-react': 7.23.3(@babel/core@7.23.3) - '@rushstack/eslint-patch': 1.5.1 + '@rushstack/eslint-patch': 1.6.0 '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.54.0)(typescript@5.3.2) '@typescript-eslint/parser': 5.62.0(eslint@8.54.0)(typescript@5.3.2) eslint: 8.54.0 @@ -1761,8 +1780,8 @@ packages: - supports-color dev: true - /@remix-run/express@2.3.0(express@4.18.2)(typescript@5.3.2): - resolution: {integrity: sha512-XSIR5H3YQ/anitOrp0m8PI7wqJ1Rri7LS2sHkwl8N9i+TKmZLkMAqg8SoSIaaxl/rMlA9gRCSC1msOHKw5xvzw==} + /@remix-run/express@2.3.1(express@4.18.2)(typescript@5.3.2): + resolution: {integrity: sha512-6gh+3InqBWkWRmFQtyE25PRD5bCYKBBgE0DBtqcI165otBuLK/SQul003n/lu6EateenT1RuQZgLjaDGX5UlyA==} engines: {node: '>=18.0.0'} peerDependencies: express: ^4.17.1 @@ -1771,12 +1790,12 @@ packages: typescript: optional: true dependencies: - '@remix-run/node': 2.3.0(typescript@5.3.2) + '@remix-run/node': 2.3.1(typescript@5.3.2) express: 4.18.2 typescript: 5.3.2 - /@remix-run/node@2.3.0(typescript@5.3.2): - resolution: {integrity: sha512-WQybWc1EWPLMD/btDtchVrhoLvz/ek6MB0gr2cV2N3Sxgn1VaJmpsN3+sUA5lK8vR2S/kOmGun2Ut3tKi8TKHg==} + /@remix-run/node@2.3.1(typescript@5.3.2): + resolution: {integrity: sha512-dXoNrmLrPblUM8UjgPzq3YBLXEGzm3HwtIt0iob1SlgKx0I5ii40JG0IXHDTI9f+fN9f/Ufx7Cjp0MGcUVXWVw==} engines: {node: '>=18.0.0'} peerDependencies: typescript: ^5.1.0 @@ -1784,7 +1803,7 @@ packages: typescript: optional: true dependencies: - '@remix-run/server-runtime': 2.3.0(typescript@5.3.2) + '@remix-run/server-runtime': 2.3.1(typescript@5.3.2) '@remix-run/web-fetch': 4.4.1 '@remix-run/web-file': 3.1.0 '@remix-run/web-stream': 1.1.0 @@ -1794,8 +1813,8 @@ packages: stream-slice: 0.1.2 typescript: 5.3.2 - /@remix-run/react@2.3.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.2): - resolution: {integrity: sha512-8sLgNw0wbNx0Gir0CKCqJVlQ8ipKMvTfUAY/sra/jiAkUSztz1HuGXNTV+4yrP9786puiMp9mB+bJqD32SAEPg==} + /@remix-run/react@2.3.1(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.2): + resolution: {integrity: sha512-7NozlZtbL5jtRGJhSrMydUGJGVp8kSjnv7APcsDojLbRHZJsLw8B0eXlVqKDg2M+WfRcBkuTI/ipgwIyLPRRyw==} engines: {node: '>=18.0.0'} peerDependencies: react: ^18.0.0 @@ -1805,30 +1824,25 @@ packages: typescript: optional: true dependencies: - '@remix-run/router': 1.12.0 - '@remix-run/server-runtime': 2.3.0(typescript@5.3.2) + '@remix-run/router': 1.13.0 + '@remix-run/server-runtime': 2.3.1(typescript@5.3.2) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-router-dom: 6.19.0(react-dom@18.2.0)(react@18.2.0) + react-router-dom: 6.20.0(react-dom@18.2.0)(react@18.2.0) typescript: 5.3.2 dev: false - /@remix-run/router@1.12.0: - resolution: {integrity: sha512-2hXv036Bux90e1GXTWSMfNzfDDK8LA8JYEWfyHxzvwdp6GyoWEovKc9cotb3KCKmkdwsIBuFGX7ScTWyiHv7Eg==} + /@remix-run/router@1.13.0: + resolution: {integrity: sha512-5dMOnVnefRsl4uRnAdoWjtVTdh8e6aZqgM4puy9nmEADH72ck+uXwzpJLEKE9Q6F8ZljNewLgmTfkxUrBdv4WA==} engines: {node: '>=14.0.0'} - /@remix-run/router@1.12.0-pre.0: - resolution: {integrity: sha512-+bBn9KqD2AC0pttSGydVFOZSsT0NqQ1+rGFwMTx9dRANk6oGxrPbKTDxLLikocscGzSL5przvcK4Uxfq8yU7BQ==} - engines: {node: '>=14.0.0'} - dev: true - - /@remix-run/serve@2.3.0(typescript@5.3.2): - resolution: {integrity: sha512-/Y1xpBlaA47e5Xmz3VxXfnIbK8yn0NzKVeuflVoyvEFK0lOzSpceHc079fADQr3vItWNBzzMaNRZSUSuLY/tQw==} + /@remix-run/serve@2.3.1(typescript@5.3.2): + resolution: {integrity: sha512-jlV0zL2XoF/4DBcFkOfydvf+bdLhS0oIELu0SQJXiWWCrV2SNkBImLpCCtTl5roYlGphhaq3zsu9mzCE2+DsiQ==} engines: {node: '>=18.0.0'} hasBin: true dependencies: - '@remix-run/express': 2.3.0(express@4.18.2)(typescript@5.3.2) - '@remix-run/node': 2.3.0(typescript@5.3.2) + '@remix-run/express': 2.3.1(express@4.18.2)(typescript@5.3.2) + '@remix-run/node': 2.3.1(typescript@5.3.2) chokidar: 3.5.3 compression: 1.7.4 express: 4.18.2 @@ -1839,8 +1853,8 @@ packages: - supports-color - typescript - /@remix-run/server-runtime@2.3.0(typescript@5.3.2): - resolution: {integrity: sha512-9BiRK7VPm5nt/aOlRmeROXWA8HKgqjvQy+f9NNpqvf3jj62EUl0h4eUdyqRj6nNh44I+0XUBG7ZQ2xXTrGJATw==} + /@remix-run/server-runtime@2.3.1(typescript@5.3.2): + resolution: {integrity: sha512-ym1nfuYJKn5Vd4bqGIJbZMR1wh/A/qXSzOwqCrZxjdsAmb4YLUBnUAJFIoCRBrvcge92kXq/lXjGOFYf+qidZg==} engines: {node: '>=18.0.0'} peerDependencies: typescript: ^5.1.0 @@ -1848,7 +1862,7 @@ packages: typescript: optional: true dependencies: - '@remix-run/router': 1.12.0 + '@remix-run/router': 1.13.0 '@types/cookie': 0.5.4 '@web3-storage/multipart-parser': 1.0.0 cookie: 0.5.0 @@ -1890,8 +1904,8 @@ packages: dependencies: web-streams-polyfill: 3.2.1 - /@rushstack/eslint-patch@1.5.1: - resolution: {integrity: sha512-6i/8UoL0P5y4leBIGzvkZdS85RDMG9y1ihZzmTZQ5LdHUYmZ7pKFoj8X0236s3lusPs1Fa5HTQUpwI+UfTcmeA==} + /@rushstack/eslint-patch@1.6.0: + resolution: {integrity: sha512-2/U3GXA6YiPYQDLGwtGlnNgKYBSwCFIHf8Y9LUY5VATHdtbLlU0Y1R3QoBnT0aB4qv/BEiVVsj7LJXoQCgJ2vA==} dev: true /@sindresorhus/is@4.6.0: @@ -1899,6 +1913,10 @@ packages: engines: {node: '>=10'} dev: false + /@stablelib/base64@1.0.1: + resolution: {integrity: sha512-1bnPQqSxSuc3Ii6MhBysoWCg58j97aUjuCSZrGSmDxNqtytIi0k8utUenAwTZN4V5mXXYGsVUI9zeBqy+jBOSQ==} + dev: false + /@szmarczak/http-timer@4.0.6: resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} engines: {node: '>=10'} @@ -1935,7 +1953,7 @@ packages: dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 20.9.3 + '@types/node': 20.9.4 '@types/responselike': 1.0.3 dev: false @@ -1979,7 +1997,7 @@ packages: /@types/keyv@3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: - '@types/node': 20.9.3 + '@types/node': 20.9.4 dev: false /@types/mdast@3.0.15: @@ -1999,22 +2017,22 @@ packages: /@types/node-fetch@2.6.9: resolution: {integrity: sha512-bQVlnMLFJ2d35DkPNjEPmd9ueO/rh5EiaZt2bhqiSarPjZIuIV6bPQVqcrEyvNo+AfTrRGVazle1tl597w3gfA==} dependencies: - '@types/node': 20.9.3 + '@types/node': 20.9.4 form-data: 4.0.0 dev: false /@types/node-forge@1.3.10: resolution: {integrity: sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw==} dependencies: - '@types/node': 20.9.3 + '@types/node': 20.9.4 dev: true /@types/node@16.18.6: resolution: {integrity: sha512-vmYJF0REqDyyU0gviezF/KHq/fYaUbFhkcNbQCuPGFQj6VTbXuHZoxs/Y7mutWe73C8AC6l9fFu8mSYiBAqkGA==} dev: false - /@types/node@20.9.3: - resolution: {integrity: sha512-nk5wXLAXGBKfrhLB0cyHGbSqopS+nz0BUgZkUQqSHSSgdee0kssp1IAqlQOu333bW+gMNs2QREx7iynm19Abxw==} + /@types/node@20.9.4: + resolution: {integrity: sha512-wmyg8HUhcn6ACjsn8oKYjkN/zUzQeNtMy44weTJSM6p4MMzEOuKbA3OjJ267uPCOW7Xex9dyrNTful8XTQYoDA==} dependencies: undici-types: 5.26.5 @@ -2022,8 +2040,8 @@ packages: resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} dev: true - /@types/react-dom@18.2.16: - resolution: {integrity: sha512-766c37araZ9vxtYs25gvY2wNdFWsT2ZiUvOd0zMhTaoGj6B911N8CKQWgXXJoPMLF3J82thpRqQA7Rf3rBwyJw==} + /@types/react-dom@18.2.17: + resolution: {integrity: sha512-rvrT/M7Df5eykWFxn6MYt5Pem/Dbyc1N8Y0S9Mrkw2WFCRiqUgw9P7ul2NpwsXCSM1DVdENzdG9J5SreqfAIWg==} dependencies: '@types/react': 18.2.38 dev: true @@ -2032,18 +2050,18 @@ packages: resolution: {integrity: sha512-cBBXHzuPtQK6wNthuVMV6IjHAFkdl/FOPFIlkd81/Cd1+IqkHu/A+w4g43kaQQoYHik/ruaQBDL72HyCy1vuMw==} dependencies: '@types/prop-types': 15.7.11 - '@types/scheduler': 0.16.7 + '@types/scheduler': 0.16.8 csstype: 3.1.2 dev: true /@types/responselike@1.0.3: resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} dependencies: - '@types/node': 20.9.3 + '@types/node': 20.9.4 dev: false - /@types/scheduler@0.16.7: - resolution: {integrity: sha512-8g25Nl3AuB1KulTlSUsUhUo/oBgBU6XIXQ+XURpeioEbEJvkO7qI4vDfREv3vJYHHzqXjcAHvoJy4pTtSQNZtA==} + /@types/scheduler@0.16.8: + resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} dev: true /@types/semver@7.5.6: @@ -2057,7 +2075,7 @@ packages: /@types/ws@8.5.10: resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} dependencies: - '@types/node': 20.9.3 + '@types/node': 20.9.4 dev: false /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.54.0)(typescript@5.3.2): @@ -2257,8 +2275,8 @@ packages: requiresBuild: true optional: true - /ably@1.2.47(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-YaBr4qwRNBfb9Zb6Oolbng7oK0oDadZG0cWCOv+Wh4XOWi91JKWbcy82bzN1RKkFTT/rCFG7nZrXT5pkMroMLg==} + /ably@1.2.48(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-/4HaZR4lu5D60twKN6dQIunxtKJCfcz0a+fuiFWxgqgXMMTiyoChg+IARx1xBK1ZZL3UZ/xdrpml0WBAsu/ZJQ==} engines: {node: '>=5.10.x'} peerDependencies: react: '>=16.8.0' @@ -2497,6 +2515,10 @@ packages: hasBin: true dev: true + /async@3.2.5: + resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} + dev: true + /asynciterator.prototype@1.0.0: resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} dependencies: @@ -2627,8 +2649,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001563 - electron-to-chromium: 1.4.590 + caniuse-lite: 1.0.30001564 + electron-to-chromium: 1.4.591 node-releases: 2.0.13 update-browserslist-db: 1.0.13(browserslist@4.22.1) dev: true @@ -2719,8 +2741,8 @@ packages: engines: {node: '>=14.16'} dev: true - /caniuse-lite@1.0.30001563: - resolution: {integrity: sha512-na2WUmOxnwIZtwnFI2CZ/3er0wdNzU7hN+cPYz/z2ajHThnkWjNBOpEPP4n+4r2WPM847JaMotaJE3bnfzjyKw==} + /caniuse-lite@1.0.30001564: + resolution: {integrity: sha512-DqAOf+rhof+6GVx1y+xzbFPeOumfQnhYzVnZD6LAXijR77yPtm9mfOcqOnT3mpnJiZVT+kwLAFnRlZcIz+c6bg==} dev: true /capnp-ts@0.7.0: @@ -2824,6 +2846,15 @@ packages: engines: {node: '>=6'} dev: true + /cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + /clone-response@1.0.3: resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} dependencies: @@ -2986,7 +3017,7 @@ packages: type: 1.2.0 dev: true - /daisyui@4.4.2: + /daisyui@4.4.2(postcss@8.4.31): resolution: {integrity: sha512-Ecg5loskj9dkaAnTSK5Xn5jb24TqDlQIg/NJ025jCkw2S/zw12btjvLgY2Sv5Ws1DFVoVBRs3XYXyojZG7zVnw==} engines: {node: '>=16.9.0'} dependencies: @@ -3238,7 +3269,7 @@ packages: hanji: 0.0.5 json-diff: 0.9.0 minimatch: 7.4.6 - wrangler: 3.17.0 + wrangler: 3.17.1 zod: 3.22.4 transitivePeerDependencies: - bufferutil @@ -3328,8 +3359,16 @@ packages: /ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - /electron-to-chromium@1.4.590: - resolution: {integrity: sha512-hohItzsQcG7/FBsviCYMtQwUSWvVF7NVqPOnJCErWsAshsP/CR2LAXdmq276RbESNdhxiAq5/vRo1g2pxGXVww==} + /ejs@3.1.9: + resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} + engines: {node: '>=0.10.0'} + hasBin: true + dependencies: + jake: 10.8.7 + dev: true + + /electron-to-chromium@1.4.591: + resolution: {integrity: sha512-vLv/P7wwAPKQoY+CVMyyI6rsTp+A14KGtPXx92oz1FY41AAqa9l6Wkizcixg0LDuJgyeo8xgNN9+9hsnGp66UA==} dev: true /emoji-regex@8.0.0: @@ -3485,6 +3524,10 @@ packages: es6-symbol: 3.1.3 dev: true + /es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + dev: false + /es6-symbol@3.1.3: resolution: {integrity: sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==} dependencies: @@ -4086,7 +4129,7 @@ packages: resolution: {integrity: sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==} engines: {node: '>= 0.8'} dependencies: - '@types/node': 20.9.3 + '@types/node': 20.9.4 require-like: 0.1.2 dev: true @@ -4196,6 +4239,10 @@ packages: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true + /fast-sha256@1.3.0: + resolution: {integrity: sha512-n11RGP/lrWEFI/bWdygLxhI+pVeo1ZYIVwvvPkW7azl/rOy+F3HYRZ2K5zeE9mmkhQppyv9sQFx0JM9UabnpPQ==} + dev: false + /fastparse@1.1.2: resolution: {integrity: sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==} dev: true @@ -4230,6 +4277,12 @@ packages: /file-uri-to-path@1.0.0: resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + /filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + dependencies: + minimatch: 5.1.6 + dev: true + /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} @@ -4378,6 +4431,11 @@ packages: engines: {node: '>=6.9.0'} dev: true + /get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: true + /get-intrinsic@1.2.2: resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} dependencies: @@ -5028,6 +5086,17 @@ packages: '@pkgjs/parseargs': 0.11.0 dev: true + /jake@10.8.7: + resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} + engines: {node: '>=10'} + hasBin: true + dependencies: + async: 3.2.5 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + dev: true + /javascript-stringify@2.1.0: resolution: {integrity: sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==} dev: true @@ -5262,8 +5331,8 @@ packages: engines: {node: '>=8'} dev: false - /lru-cache@10.0.3: - resolution: {integrity: sha512-B7gr+F6MkqB3uzINHXNctGieGsRTMwIBgxkp0yq/5BwcuDzD4A8wQpHQW6vDAm1uKSLQghmRdD9sKqf2vJ1cEg==} + /lru-cache@10.1.0: + resolution: {integrity: sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==} engines: {node: 14 || >=16.14} dev: true @@ -6323,7 +6392,7 @@ packages: resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} engines: {node: '>=16 || 14 >=14.17'} dependencies: - lru-cache: 10.0.3 + lru-cache: 10.1.0 minipass: 7.0.4 dev: true @@ -6664,6 +6733,10 @@ packages: dependencies: side-channel: 1.0.4 + /querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + dev: false + /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true @@ -6718,26 +6791,26 @@ packages: engines: {node: '>=0.10.0'} dev: true - /react-router-dom@6.19.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-N6dWlcgL2w0U5HZUUqU2wlmOrSb3ighJmtQ438SWbhB1yuLTXQ8yyTBMK3BSvVjp7gBtKurT554nCtMOgxCZmQ==} + /react-router-dom@6.20.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-CbcKjEyiSVpA6UtCHOIYLUYn/UJfwzp55va4yEfpk7JBN3GPqWfHrdLkAvNCcpXr8QoihcDMuk0dzWZxtlB/mQ==} engines: {node: '>=14.0.0'} peerDependencies: react: '>=16.8' react-dom: '>=16.8' dependencies: - '@remix-run/router': 1.12.0 + '@remix-run/router': 1.13.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-router: 6.19.0(react@18.2.0) + react-router: 6.20.0(react@18.2.0) dev: false - /react-router@6.19.0(react@18.2.0): - resolution: {integrity: sha512-0W63PKCZ7+OuQd7Tm+RbkI8kCLmn4GPjDbX61tWljPxWgqTKlEpeQUwPkT1DRjYhF8KSihK0hQpmhU4uxVMcdw==} + /react-router@6.20.0(react@18.2.0): + resolution: {integrity: sha512-pVvzsSsgUxxtuNfTHC4IxjATs10UaAtvLGVSA1tbUE4GDaOSU1Esu2xF5nWLz7KPiMuW8BJWuPFdlGYJ7/rW0w==} engines: {node: '>=14.0.0'} peerDependencies: react: '>=16.8' dependencies: - '@remix-run/router': 1.12.0 + '@remix-run/router': 1.13.0 react: 18.2.0 dev: false @@ -6868,7 +6941,7 @@ packages: unified: 10.1.2 dev: true - /remix-utils@7.1.0(@remix-run/node@2.3.0)(@remix-run/react@2.3.0)(react@18.2.0): + /remix-utils@7.1.0(@remix-run/node@2.3.1)(@remix-run/react@2.3.1)(react@18.2.0): resolution: {integrity: sha512-cceintceWvmNvgLLFeAUkWRcdWuOHGDLaWh0aeL0bLGWnMPBilIyT74Rira1az/ImS9owfh8tjLL4w/22AXJiA==} engines: {node: '>=18.0.0'} peerDependencies: @@ -6904,12 +6977,17 @@ packages: zod: optional: true dependencies: - '@remix-run/node': 2.3.0(typescript@5.3.2) - '@remix-run/react': 2.3.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.2) + '@remix-run/node': 2.3.1(typescript@5.3.2) + '@remix-run/react': 2.3.1(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.2) react: 18.2.0 type-fest: 4.8.2 dev: false + /require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + dev: true + /require-like@0.1.2: resolution: {integrity: sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==} dev: true @@ -6919,6 +6997,10 @@ packages: engines: {node: '>=0.10.5'} dev: true + /requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + dev: false + /resolve-alpn@1.2.1: resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} dev: false @@ -7148,6 +7230,10 @@ packages: engines: {node: '>=8'} dev: true + /shell-quote@1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + dev: true + /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: @@ -7441,6 +7527,27 @@ packages: engines: {node: '>= 0.4'} dev: true + /svix-fetch@3.0.0: + resolution: {integrity: sha512-rcADxEFhSqHbraZIsjyZNh4TF6V+koloX1OzZ+AQuObX9mZ2LIMhm1buZeuc5BIZPftZpJCMBsSiBaeszo9tRw==} + dependencies: + node-fetch: 2.7.0 + whatwg-fetch: 3.6.19 + transitivePeerDependencies: + - encoding + dev: false + + /svix@1.14.0: + resolution: {integrity: sha512-FuavzkxHTDDVnFzvWmY/35P+1K5pLjJiuGiAH3YncmUnk6FAraZONzWqoBb+ucWsXCJisWvemAl4yMqu4WVNGg==} + dependencies: + '@stablelib/base64': 1.0.1 + es6-promise: 4.2.8 + fast-sha256: 1.3.0 + svix-fetch: 3.0.0 + url-parse: 1.5.10 + transitivePeerDependencies: + - encoding + dev: false + /swr@2.2.0(react@18.2.0): resolution: {integrity: sha512-AjqHOv2lAhkuUdIiBu9xbuettzAzWXmCEcLONNKJRba87WAefz8Ca9d6ds/SzrPc235n1IxWYdhJ2zF3MNUaoQ==} peerDependencies: @@ -7834,6 +7941,13 @@ packages: punycode: 2.3.1 dev: true + /url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + dev: false + /use-sync-external-store@1.2.0(react@18.2.0): resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} peerDependencies: @@ -7992,6 +8106,10 @@ packages: /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + /whatwg-fetch@3.6.19: + resolution: {integrity: sha512-d67JP4dHSbm2TrpFj8AbO8DnL1JXL5J9u0Kq2xW6d0TFDbCA3Muhdt8orXC22utleTVj7Prqt82baN6RBvnEgw==} + dev: false + /whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} dependencies: @@ -8078,8 +8196,8 @@ packages: '@cloudflare/workerd-windows-64': 1.20231030.0 dev: true - /wrangler@3.17.0: - resolution: {integrity: sha512-xMPB7mmGzAzeel5bFAKOIO7O+rIG1TT7+iRiu4RAjxPkCAWRAL79++zi7KJVFnyHzGh+PBF91ramBWH2m8VDUw==} + /wrangler@3.17.1: + resolution: {integrity: sha512-Pr9+/tjFkthzG63uoVm1NtVvgokT6p92fy1UsOgrntHyTu0pZMC1VJzG0NC8Vhs+z/+yTT8AqVV6AiJb3w8ZOQ==} engines: {node: '>=16.17.0'} hasBin: true dependencies: @@ -8160,6 +8278,11 @@ packages: resolution: {integrity: sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A==} dev: true + /y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: true + /yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} dev: true @@ -8172,6 +8295,24 @@ packages: engines: {node: '>= 14'} dev: true + /yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + dev: true + + /yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + dependencies: + cliui: 8.0.1 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + dev: true + /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'}