From 7b1ca8abb4b1a2296fc46492281aaa981da3d4d8 Mon Sep 17 00:00:00 2001 From: Mats Jun Date: Sat, 5 Oct 2024 11:40:17 +0900 Subject: [PATCH] Separate tRPC from Next.js app (#930) --- .github/workflows/ci.yml | 2 + apps/dashboard/package.json | 1 + .../src/app/api/trpc/[...path]/route.ts | 10 + apps/dashboard/src/utils/trpc.ts | 4 +- apps/rpc/biome.json | 4 + apps/rpc/package.json | 30 + apps/rpc/src/index.ts | 51 + apps/rpc/tsconfig.json | 11 + apps/web/package.json | 3 +- apps/web/src/app/api/trpc/[...path]/route.ts | 10 + apps/web/src/pages/api/trpc-playground.ts | 19 - apps/web/src/pages/api/trpc/[...trpc].ts | 13 - apps/web/src/utils/trpc/client.ts | 13 - apps/web/src/utils/trpc/serverClient.ts | 6 +- biome.json | 2 +- packages/auth/src/auth-options.ts | 22 + packages/env/index.d.ts | 5 +- packages/env/src/env.mjs | 6 + packages/gateway-edge-nextjs/src/cal/cal.ts | 6 +- packages/gateway-trpc/package.json | 1 + packages/gateway-trpc/src/context.ts | 23 +- packages/gateway-trpc/src/crypto.ts | 35 + packages/gateway-trpc/src/index.ts | 1 + .../src/modules/payment/payment-router.ts | 2 +- .../modules/payment/refund-request-router.ts | 6 +- .../src/modules/user/user-router.ts | 2 +- packages/gateway-trpc/src/trpc.ts | 6 +- packages/proxy-nextjs/biome.json | 4 + packages/proxy-nextjs/package.json | 21 + packages/proxy-nextjs/src/index.ts | 46 + packages/proxy-nextjs/tsconfig.json | 8 + pnpm-lock.yaml | 1030 ++++++++++++++--- 32 files changed, 1131 insertions(+), 272 deletions(-) create mode 100644 apps/dashboard/src/app/api/trpc/[...path]/route.ts create mode 100644 apps/rpc/biome.json create mode 100644 apps/rpc/package.json create mode 100644 apps/rpc/src/index.ts create mode 100644 apps/rpc/tsconfig.json create mode 100644 apps/web/src/app/api/trpc/[...path]/route.ts delete mode 100644 apps/web/src/pages/api/trpc-playground.ts delete mode 100644 apps/web/src/pages/api/trpc/[...trpc].ts create mode 100644 packages/gateway-trpc/src/crypto.ts create mode 100644 packages/proxy-nextjs/biome.json create mode 100644 packages/proxy-nextjs/package.json create mode 100644 packages/proxy-nextjs/src/index.ts create mode 100644 packages/proxy-nextjs/tsconfig.json diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c00d303be..6a81748fc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,6 +27,8 @@ env: GTX_AUTH0_CLIENT_ID: ${{ secrets.GTX_AUTH0_CLIENT_ID }} GTX_AUTH0_CLIENT_SECRET: ${{ secrets.GTX_AUTH0_CLIENT_SECRET }} GTX_AUTH0_ISSUER: ${{ secrets.GTX_AUTH0_ISSUER }} + RPC_HOST: ${{ secrets.RPC_HOST }} + RPC_ALLOWED_ORIGINS: ${{ secrets.RPC_ALLOWED_ORIGINS }} jobs: build: diff --git a/apps/dashboard/package.json b/apps/dashboard/package.json index 4c0242e99..627aef9dd 100644 --- a/apps/dashboard/package.json +++ b/apps/dashboard/package.json @@ -14,6 +14,7 @@ "@dotkomonline/auth": "workspace:*", "@dotkomonline/env": "workspace:*", "@dotkomonline/gateway-trpc": "workspace:*", + "@dotkomonline/proxy-nextjs": "workspace:*", "@dotkomonline/types": "workspace:*", "@dotkomonline/ui": "workspace:*", "@dotkomonline/utils": "workspace:*", diff --git a/apps/dashboard/src/app/api/trpc/[...path]/route.ts b/apps/dashboard/src/app/api/trpc/[...path]/route.ts new file mode 100644 index 000000000..9ca6ce910 --- /dev/null +++ b/apps/dashboard/src/app/api/trpc/[...path]/route.ts @@ -0,0 +1,10 @@ +import { env } from "@dotkomonline/env" +import { createProxyRoute } from "@dotkomonline/proxy-nextjs" + +const handler = createProxyRoute({ + mountPath: "/api/trpc", + apiEndpoint: env.RPC_HOST, +}) + +export const GET = handler +export const POST = handler diff --git a/apps/dashboard/src/utils/trpc.ts b/apps/dashboard/src/utils/trpc.ts index 0097e0e42..4b8654f76 100644 --- a/apps/dashboard/src/utils/trpc.ts +++ b/apps/dashboard/src/utils/trpc.ts @@ -9,9 +9,9 @@ import superjson from "superjson" const getBaseUrl = () => { if (env.NEXT_PUBLIC_NODE_ENV === "production") { - return "https://web.online.ntnu.no" + return "https://rpc.web.online.ntnu.no" } - return "http://localhost:3000" + return "http://localhost:3002" } export const trpcConfig: CreateTRPCClientOptions = { diff --git a/apps/rpc/biome.json b/apps/rpc/biome.json new file mode 100644 index 000000000..d9cb87fd7 --- /dev/null +++ b/apps/rpc/biome.json @@ -0,0 +1,4 @@ +{ + "$schema": "./node_modules/@biomejs/biome/configuration_schema.json", + "extends": ["../../biome.json"] +} diff --git a/apps/rpc/package.json b/apps/rpc/package.json new file mode 100644 index 000000000..02bb44b48 --- /dev/null +++ b/apps/rpc/package.json @@ -0,0 +1,30 @@ +{ + "name": "@dotkomonline/rpc", + "version": "0.1.0", + "private": true, + "type": "module", + "scripts": { + "dev": "tsx src/index.ts", + "build": "tsc", + "lint": "biome check . --apply", + "lint-check": "biome check .", + "type-check": "tsc --noEmit" + }, + "dependencies": { + "@dotkomonline/env": "workspace:*", + "@dotkomonline/gateway-trpc": "workspace:*", + "@fastify/cors": "^9.0.1", + "@trpc/server": "^10.45.0", + "fastify": "^4.28.0", + "zod": "^3.22.4" + }, + "devDependencies": { + "@biomejs/biome": "1.6.4", + "@dotkomonline/config": "workspace:*", + "@dotkomonline/tsconfig": "workspace:*", + "@types/node": "^20.12.7", + "tslib": "^2.6.2", + "typescript": "^5.4.5", + "tsx": "^4.15.6" + } +} diff --git a/apps/rpc/src/index.ts b/apps/rpc/src/index.ts new file mode 100644 index 000000000..072230498 --- /dev/null +++ b/apps/rpc/src/index.ts @@ -0,0 +1,51 @@ +import { env } from "@dotkomonline/env" +import { type AppRouter, JwtService, appRouter, createContext } from "@dotkomonline/gateway-trpc" +import fastifyCors from "@fastify/cors" +import { type FastifyTRPCPluginOptions, fastifyTRPCPlugin } from "@trpc/server/adapters/fastify" +import type { CreateFastifyContextOptions } from "@trpc/server/dist/adapters/fastify" +import fastify from "fastify" + +const jwtService = new JwtService(env.WEB_AUTH0_ISSUER, [ + env.WEB_AUTH0_CLIENT_ID, + env.DASHBOARD_AUTH0_CLIENT_ID, + env.GTX_AUTH0_CLIENT_ID, +]) + +const allowedOrigins = env.RPC_ALLOWED_ORIGINS.split(",") + +export async function createFastifyContext({ req }: CreateFastifyContextOptions) { + const bearer = req.headers.authorization + if (bearer !== undefined) { + const token = bearer.substring("Bearer ".length) + const principal = await jwtService.verify(token) + return createContext({ principal: principal.payload.sub ?? null }) + } + + return createContext({ + principal: null, + }) +} + +const server = fastify({ + maxParamLength: 5000, +}) +server.register(fastifyCors, { + origin: allowedOrigins, + methods: ["GET", "POST", "PUT", "DELETE"], + allowedHeaders: ["Content-Type", "Authorization"], + credentials: true, +}) + +server.register(fastifyTRPCPlugin, { + prefix: "/api/trpc", + trpcOptions: { + router: appRouter, + createContext: createFastifyContext, + onError: ({ path, error }) => { + // report to error monitoring + console.error(`Error in tRPC handler on path '${path}':`, error) + }, + } satisfies FastifyTRPCPluginOptions["trpcOptions"], +}) + +await server.listen({ port: 4444 }) diff --git a/apps/rpc/tsconfig.json b/apps/rpc/tsconfig.json new file mode 100644 index 000000000..7029e82fb --- /dev/null +++ b/apps/rpc/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../../packages/tsconfig/tsconfig.json", + "include": ["./**/*.ts", "./**/*.tsx"], + "exclude": [], + "compilerOptions": { + "baseUrl": ".", + "jsx": "preserve", + "incremental": true, + "strictNullChecks": true + } +} diff --git a/apps/web/package.json b/apps/web/package.json index 1c8d9d90b..c2363db7c 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -19,6 +19,7 @@ "@dotkomonline/env": "workspace:*", "@dotkomonline/gateway-edge-nextjs": "workspace:*", "@dotkomonline/gateway-trpc": "workspace:*", + "@dotkomonline/proxy-nextjs": "workspace:*", "@dotkomonline/types": "workspace:*", "@dotkomonline/ui": "workspace:*", "@dotkomonline/utils": "workspace:*", @@ -38,7 +39,6 @@ "@trpc/client": "^10.45.0", "@trpc/next": "^10.45.0", "@trpc/react-query": "^10.45.0", - "@trpc/server": "^10.45.0", "axios": "1.7.7", "clsx": "^2.0.0", "cors": "^2.8.5", @@ -71,7 +71,6 @@ "jsdom": "^22.1.0", "postcss": "^8.4.31", "tailwindcss": "^3.3.5", - "trpc-playground": "^1.0.4", "tslib": "^2.6.2", "typescript": "^5.4.5" } diff --git a/apps/web/src/app/api/trpc/[...path]/route.ts b/apps/web/src/app/api/trpc/[...path]/route.ts new file mode 100644 index 000000000..9ca6ce910 --- /dev/null +++ b/apps/web/src/app/api/trpc/[...path]/route.ts @@ -0,0 +1,10 @@ +import { env } from "@dotkomonline/env" +import { createProxyRoute } from "@dotkomonline/proxy-nextjs" + +const handler = createProxyRoute({ + mountPath: "/api/trpc", + apiEndpoint: env.RPC_HOST, +}) + +export const GET = handler +export const POST = handler diff --git a/apps/web/src/pages/api/trpc-playground.ts b/apps/web/src/pages/api/trpc-playground.ts deleted file mode 100644 index 09edb403d..000000000 --- a/apps/web/src/pages/api/trpc-playground.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { appRouter } from "@dotkomonline/gateway-trpc" -import type { NextApiHandler } from "next" -import { nextHandler } from "trpc-playground/handlers/next" - -const setupHandler = nextHandler({ - router: appRouter, - trpcApiEndpoint: "/api/trpc", - playgroundEndpoint: "/api/trpc-playground", - request: { - superjson: true, - }, -}) - -const handler: NextApiHandler = async (req, res) => { - const playgroundHandler = await setupHandler - await playgroundHandler(req, res) -} - -export default handler diff --git a/apps/web/src/pages/api/trpc/[...trpc].ts b/apps/web/src/pages/api/trpc/[...trpc].ts deleted file mode 100644 index 95f030c41..000000000 --- a/apps/web/src/pages/api/trpc/[...trpc].ts +++ /dev/null @@ -1,13 +0,0 @@ -import { applyCorsMiddleware } from "@/middlewares/cors" -import { appRouter, createContext } from "@dotkomonline/gateway-trpc" -import { createNextApiHandler } from "@trpc/server/adapters/next" - -export default applyCorsMiddleware( - createNextApiHandler({ - router: appRouter, - createContext, - onError({ error }) { - console.error(error) - }, - }) -) diff --git a/apps/web/src/utils/trpc/client.ts b/apps/web/src/utils/trpc/client.ts index 04e3b3ab1..c4b5e4bd6 100644 --- a/apps/web/src/utils/trpc/client.ts +++ b/apps/web/src/utils/trpc/client.ts @@ -4,7 +4,6 @@ import { env } from "@dotkomonline/env" import type { AppRouter } from "@dotkomonline/gateway-trpc" import { type CreateTRPCClientOptions, httpBatchLink, loggerLink } from "@trpc/client" import { createTRPCReact } from "@trpc/react-query" -import type { inferRouterInputs, inferRouterOutputs } from "@trpc/server" import superjson from "superjson" const getBaseUrl = () => { @@ -35,15 +34,3 @@ export const trpcConfig: CreateTRPCClientOptions = { // React query trpc export const trpc = createTRPCReact({}) - -/** - * Inference helpers for input types - * @example type HelloInput = RouterInputs['example']['hello'] - **/ -export type RouterInputs = inferRouterInputs - -/** - * Inference helpers for output types - * @example type HelloOutput = RouterOutputs['example']['hello'] - **/ -export type RouterOutputs = inferRouterOutputs diff --git a/apps/web/src/utils/trpc/serverClient.ts b/apps/web/src/utils/trpc/serverClient.ts index 86fb17af1..7e2607764 100644 --- a/apps/web/src/utils/trpc/serverClient.ts +++ b/apps/web/src/utils/trpc/serverClient.ts @@ -1,8 +1,8 @@ "use server" -import { appRouter, createCallerFactory, createContextInner } from "@dotkomonline/gateway-trpc" +import { appRouter, createCallerFactory, createContext } from "@dotkomonline/gateway-trpc" const createCaller = createCallerFactory(appRouter) // TODO: Add a way to get the userId from the request -export const getServerClient = async () => createCaller(await createContextInner({ auth: null })) -export const getUnauthorizedServerClient = async () => createCaller(await createContextInner({ auth: null })) +export const getServerClient = async () => createCaller(await createContext({ principal: null })) +export const getUnauthorizedServerClient = async () => createCaller(await createContext({ principal: null })) diff --git a/biome.json b/biome.json index fd3330d9f..987fb15c2 100644 --- a/biome.json +++ b/biome.json @@ -19,7 +19,7 @@ }, "javascript": { "formatter": { - "trailingCommas": "es5", + "trailingComma": "es5", "semicolons": "asNeeded", "lineWidth": 120, "quoteProperties": "asNeeded" diff --git a/packages/auth/src/auth-options.ts b/packages/auth/src/auth-options.ts index 5c5f0bde9..21163a67d 100644 --- a/packages/auth/src/auth-options.ts +++ b/packages/auth/src/auth-options.ts @@ -1,5 +1,6 @@ import type { ServiceLayer } from "@dotkomonline/core" import type { DefaultSession, DefaultUser, NextAuthOptions, User } from "next-auth" +import type { DefaultJWT, JWT } from "next-auth/jwt" import Auth0Provider from "next-auth/providers/auth0" interface Auth0IdTokenClaims { @@ -37,6 +38,13 @@ declare module "next-auth" { } } +declare module "next-auth/jwt" { + interface JWT extends DefaultJWT, Record { + accessToken?: string + refreshToken?: string + } +} + export interface AuthOptions { auth0ClientId: string auth0ClientSecret: string @@ -66,12 +74,26 @@ export const getAuthOptions = ({ // givenName: profile.given_name, // familyName: profile.family_name, }), + authorization: { + params: { + scope: "openid profile email offline_access", + }, + }, }), ], session: { strategy: "jwt", }, callbacks: { + async jwt({ token, account }): Promise { + if (account?.access_token) { + token.accessToken = account.access_token + } + if (account?.refresh_token) { + token.refreshToken = account.refresh_token + } + return token + }, async session({ session, token }) { if (token.sub) { await core.auth0SynchronizationService.populateUserWithFakeData(token.sub, token.email) // Remove when we have real data diff --git a/packages/env/index.d.ts b/packages/env/index.d.ts index cacf335df..1da6da610 100644 --- a/packages/env/index.d.ts +++ b/packages/env/index.d.ts @@ -23,9 +23,8 @@ export declare type EnvironmentKeys = | "WEB_AUTH0_CLIENT_ID" | "WEB_AUTH0_CLIENT_SECRET" | "WEB_AUTH0_ISSUER" - | "GTX_AUTH0_CLIENT_ID" - | "GTX_AUTH0_CLIENT_SECRET" - | "GTX_AUTH0_ISSUER" + | "RPC_HOST" + | "RPC_ALLOWED_ORIGINS" export declare type Environment = Record diff --git a/packages/env/src/env.mjs b/packages/env/src/env.mjs index 4beaa3889..cb2158d6f 100644 --- a/packages/env/src/env.mjs +++ b/packages/env/src/env.mjs @@ -33,6 +33,9 @@ export const createEnvironment = () => FAGKOM_STRIPE_SECRET_KEY: environmentVariableSchema, FAGKOM_STRIPE_WEBHOOK_SECRET: environmentVariableSchema, + RPC_ALLOWED_ORIGINS: environmentVariableSchema, + RPC_HOST: environmentVariableSchema, + S3_BUCKET_MONOWEB: environmentVariableSchema, }, client: { @@ -69,6 +72,9 @@ export const createEnvironment = () => FAGKOM_STRIPE_SECRET_KEY: process.env.FAGKOM_STRIPE_SECRET_KEY, FAGKOM_STRIPE_WEBHOOK_SECRET: process.env.FAGKOM_STRIPE_WEBHOOK_SECRET, + RPC_ALLOWED_ORIGINS: process.env.RPC_ALLOWED_ORIGINS, + RPC_HOST: process.env.RPC_HOST, + S3_BUCKET_MONOWEB: process.env.S3_BUCKET_MONOWEB, }, skipValidation: process.env.DOCKER_BUILD !== undefined, diff --git a/packages/gateway-edge-nextjs/src/cal/cal.ts b/packages/gateway-edge-nextjs/src/cal/cal.ts index 9ce5d6d89..366ae26eb 100644 --- a/packages/gateway-edge-nextjs/src/cal/cal.ts +++ b/packages/gateway-edge-nextjs/src/cal/cal.ts @@ -1,4 +1,4 @@ -import { appRouter, createContextInner, transformer } from "@dotkomonline/gateway-trpc" +import { appRouter, createContext, transformer } from "@dotkomonline/gateway-trpc" import type { Event } from "@dotkomonline/types" import { createServerSideHelpers } from "@trpc/react-query/server" import ical, { type ICalEventData } from "ical-generator" @@ -9,8 +9,8 @@ import { authOptions } from "../../../auth/src/web.app" const helpers = createServerSideHelpers({ router: appRouter, - ctx: await createContextInner({ - auth: null, + ctx: await createContext({ + principal: null, }), transformer, // optional - adds superjson serialization }) diff --git a/packages/gateway-trpc/package.json b/packages/gateway-trpc/package.json index 8505a41aa..59f31c540 100644 --- a/packages/gateway-trpc/package.json +++ b/packages/gateway-trpc/package.json @@ -19,6 +19,7 @@ "@dotkomonline/db": "workspace:*", "@trpc/server": "^10.45.0", "superjson": "^2.0.0", + "jose": "^5.4.0", "zod": "^3.22.4" }, "peerDependencies": { diff --git a/packages/gateway-trpc/src/context.ts b/packages/gateway-trpc/src/context.ts index 887a6efd8..221bf06bf 100644 --- a/packages/gateway-trpc/src/context.ts +++ b/packages/gateway-trpc/src/context.ts @@ -1,34 +1,17 @@ -import { authOptions } from "@dotkomonline/auth/src/web.app" import { createServiceLayer } from "@dotkomonline/core" import { kysely } from "@dotkomonline/db" import type { inferAsyncReturnType } from "@trpc/server" -import type { CreateNextContextOptions } from "@trpc/server/adapters/next" -import { getServerSession } from "next-auth" interface AuthContextProps { - auth: { - userId: string - } | null + principal: string | null } -export const createContextInner = async (opts: AuthContextProps) => { +export const createContext = async (opts: AuthContextProps) => { const services = await createServiceLayer({ db: kysely }) return { ...services, - auth: opts.auth, + principal: opts.principal, } } -export const createContext = async (opts: CreateNextContextOptions) => { - const session = await getServerSession(opts.req, opts.res, authOptions) - if (session !== null) { - return createContextInner({ - auth: { - userId: session.user.id, - }, - }) - } - return createContextInner({ auth: null }) -} - export type Context = inferAsyncReturnType diff --git a/packages/gateway-trpc/src/crypto.ts b/packages/gateway-trpc/src/crypto.ts new file mode 100644 index 000000000..2f04cd109 --- /dev/null +++ b/packages/gateway-trpc/src/crypto.ts @@ -0,0 +1,35 @@ +import { + type FlattenedJWSInput, + type GetKeyFunction, + type JWTHeaderParameters, + createRemoteJWKSet, + jwtVerify, +} from "jose" + +export class JwtService { + private jwks: GetKeyFunction | null = null + private readonly jwksUrl: URL + + public constructor( + private readonly issuer: string, + private readonly audiences: string[] + ) { + const issuerWithoutTrailingSlash = issuer.replace(/\/$/, "") + this.jwksUrl = new URL(`${issuerWithoutTrailingSlash}/.well-known/jwks.json`) + } + + public async verify(accessToken: string) { + this.jwks ??= createRemoteJWKSet(this.jwksUrl, { + // Auth0 gives a max-age=15 and stale-while-revalidate=15 header. We will cache the JWKS for 30 seconds at a time. + cacheMaxAge: 30000, + }) + return jwtVerify(accessToken, this.jwks, { + clockTolerance: "5s", + algorithms: ["RS256"], + // Auth0's issuer contains a trailing slash, but Next Auth does not + issuer: `${this.issuer}/`, + // audience: this.audiences, + typ: "JWT", + }) + } +} diff --git a/packages/gateway-trpc/src/index.ts b/packages/gateway-trpc/src/index.ts index d28580b14..65422ff47 100644 --- a/packages/gateway-trpc/src/index.ts +++ b/packages/gateway-trpc/src/index.ts @@ -2,3 +2,4 @@ export * from "./router" export * from "./transformer" export * from "./context" export * from "./trpc" +export * from "./crypto" diff --git a/packages/gateway-trpc/src/modules/payment/payment-router.ts b/packages/gateway-trpc/src/modules/payment/payment-router.ts index 597ac70a1..fb2aa344f 100644 --- a/packages/gateway-trpc/src/modules/payment/payment-router.ts +++ b/packages/gateway-trpc/src/modules/payment/payment-router.ts @@ -27,7 +27,7 @@ export const paymentRouter = t.router({ input.stripePublicKey, input.successRedirectUrl, input.cancelRedirectUrl, - ctx.auth.userId + ctx.principal ) ), refundPayment: protectedProcedure diff --git a/packages/gateway-trpc/src/modules/payment/refund-request-router.ts b/packages/gateway-trpc/src/modules/payment/refund-request-router.ts index 3cb478815..4e250af3f 100644 --- a/packages/gateway-trpc/src/modules/payment/refund-request-router.ts +++ b/packages/gateway-trpc/src/modules/payment/refund-request-router.ts @@ -12,17 +12,17 @@ export const refundRequestRouter = t.router({ }) ) .mutation(async ({ input, ctx }) => - ctx.refundRequestService.createRefundRequest(input.paymentId, ctx.auth.userId, input.reason) + ctx.refundRequestService.createRefundRequest(input.paymentId, ctx.principal, input.reason) ), edit: protectedProcedure .input(z.object({ id: RefundRequestSchema.shape.id, reason: z.string().min(0).max(255) })) .mutation(async ({ input, ctx }) => ctx.refundRequestService.updateRefundRequest(input.id, input)), approve: protectedProcedure .input(RefundRequestSchema.shape.id) - .mutation(async ({ input, ctx }) => ctx.refundRequestService.approveRefundRequest(input, ctx.auth.userId)), + .mutation(async ({ input, ctx }) => ctx.refundRequestService.approveRefundRequest(input, ctx.principal)), reject: protectedProcedure .input(RefundRequestSchema.shape.id) - .mutation(async ({ input, ctx }) => ctx.refundRequestService.rejectRefundRequest(input, ctx.auth.userId)), + .mutation(async ({ input, ctx }) => ctx.refundRequestService.rejectRefundRequest(input, ctx.principal)), delete: protectedProcedure .input(RefundRequestSchema.shape.id) .mutation(async ({ input, ctx }) => ctx.refundRequestService.deleteRefundRequest(input)), diff --git a/packages/gateway-trpc/src/modules/user/user-router.ts b/packages/gateway-trpc/src/modules/user/user-router.ts index a3101cb30..90bfd8a86 100644 --- a/packages/gateway-trpc/src/modules/user/user-router.ts +++ b/packages/gateway-trpc/src/modules/user/user-router.ts @@ -6,7 +6,7 @@ import { protectedProcedure, publicProcedure, t } from "../../trpc" export const userRouter = t.router({ all: publicProcedure.input(PaginateInputSchema).query(async ({ input, ctx }) => ctx.userService.getAll(input.take)), get: publicProcedure.input(UserSchema.shape.id).query(async ({ input, ctx }) => ctx.userService.getById(input)), - getMe: protectedProcedure.query(async ({ ctx }) => ctx.userService.getByAuth0Id(ctx.auth.userId)), + getMe: protectedProcedure.query(async ({ ctx }) => ctx.userService.getByAuth0Id(ctx.principal)), update: protectedProcedure .input( z.object({ diff --git a/packages/gateway-trpc/src/trpc.ts b/packages/gateway-trpc/src/trpc.ts index 6b0cdf610..8cb297501 100644 --- a/packages/gateway-trpc/src/trpc.ts +++ b/packages/gateway-trpc/src/trpc.ts @@ -10,13 +10,13 @@ export const t = initTRPC.context().create({ }) const isAuthed = t.middleware(async ({ ctx, next }) => { - const auth = ctx.auth + const principal = ctx.principal - if (auth === null) { + if (principal === null) { throw new TRPCError({ code: "UNAUTHORIZED", message: "Not authenticated" }) } - return next({ ctx: { auth } }) + return next({ ctx: { principal } }) }) export const router = t.router diff --git a/packages/proxy-nextjs/biome.json b/packages/proxy-nextjs/biome.json new file mode 100644 index 000000000..d9cb87fd7 --- /dev/null +++ b/packages/proxy-nextjs/biome.json @@ -0,0 +1,4 @@ +{ + "$schema": "./node_modules/@biomejs/biome/configuration_schema.json", + "extends": ["../../biome.json"] +} diff --git a/packages/proxy-nextjs/package.json b/packages/proxy-nextjs/package.json new file mode 100644 index 000000000..d228301de --- /dev/null +++ b/packages/proxy-nextjs/package.json @@ -0,0 +1,21 @@ +{ + "name": "@dotkomonline/proxy-nextjs", + "type": "module", + "main": "./src/index.ts", + "types": "./src/index.ts", + "private": true, + "scripts": { + "clean": "rm -rf node_modules", + "lint": "biome check . --apply", + "lint-check": "biome check .", + "type-check": "tsc --noEmit" + }, + "dependencies": { + "@dotkomonline/logger": "workspace:*", + "next": "^14.2.14", + "next-auth": "^4.24.8" + }, + "devDependencies": { + "@biomejs/biome": "^1.9.3" + } +} diff --git a/packages/proxy-nextjs/src/index.ts b/packages/proxy-nextjs/src/index.ts new file mode 100644 index 000000000..a8ac0d0cd --- /dev/null +++ b/packages/proxy-nextjs/src/index.ts @@ -0,0 +1,46 @@ +import { getLogger } from "@dotkomonline/logger" +import { getToken } from "next-auth/jwt" +import type { NextRequest } from "next/server" + +export interface ProxyOptions { + mountPath: string + apiEndpoint: string +} + +export function createProxyRoute(opts: ProxyOptions): (request: NextRequest) => Promise { + const logger = getLogger(`proxy-nextjs (${opts.mountPath})`) + + return async function route(request: NextRequest): Promise { + const url = new URL(request.url) + const pathFromRoot = url.pathname.replace(new RegExp(`^\/${opts.mountPath}`), "/") + const endpoint = new URL(pathFromRoot, opts.apiEndpoint) + for (const [key, value] of url.searchParams) { + endpoint.searchParams.append(key, value) + } + + const token = await getToken({ req: request }) + const headers = new Headers(request.headers) + if (token !== null) { + headers.set("Authorization", `Bearer ${token.accessToken}`) + } + + const req = new Request(endpoint, { + headers, + method: request.method, + body: request.method === "GET" ? undefined : request.body, + // @ts-expect-error + duplex: request.method !== "GET" ? "half" : undefined, + }) + + logger.info("proxying endpoint request: %s %s", req.method, req.url) + const response = await fetch(req) + const responseHeaders = new Headers() + headers.set("Content-Type", response.headers.get("Content-Type") ?? "application/json") + logger.info("proxying endpoint response: %s %s", response.status, response.statusText) + return new Response(response.body, { + status: response.status, + statusText: response.statusText, + headers: responseHeaders, + }) + } +} diff --git a/packages/proxy-nextjs/tsconfig.json b/packages/proxy-nextjs/tsconfig.json new file mode 100644 index 000000000..7cd7cf19b --- /dev/null +++ b/packages/proxy-nextjs/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../packages/tsconfig/tsconfig.json", + "compilerOptions": { + "outDir": "dist", + "declaration": true + }, + "include": ["./**/*.ts", "./**/*.tsx"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0b9d68d14..10d032c18 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -47,7 +47,7 @@ importers: version: 20.16.10 tsup: specifier: ^7.2.0 - version: 7.3.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(postcss@8.4.47)(typescript@5.6.2) + version: 7.3.0(@swc/core@1.7.28)(postcss@8.4.47)(typescript@5.6.2) typescript: specifier: ^5.4.5 version: 5.6.2 @@ -63,6 +63,9 @@ importers: '@dotkomonline/gateway-trpc': specifier: workspace:* version: link:../../packages/gateway-trpc + '@dotkomonline/proxy-nextjs': + specifier: workspace:* + version: link:../../packages/proxy-nextjs '@dotkomonline/types': specifier: workspace:* version: link:../../packages/types @@ -355,6 +358,49 @@ importers: specifier: ^5.4.5 version: 5.6.2 + apps/rpc: + dependencies: + '@dotkomonline/env': + specifier: workspace:* + version: link:../../packages/env + '@dotkomonline/gateway-trpc': + specifier: workspace:* + version: link:../../packages/gateway-trpc + '@fastify/cors': + specifier: ^9.0.1 + version: 9.0.1 + '@trpc/server': + specifier: ^10.45.0 + version: 10.45.2 + fastify: + specifier: ^4.28.0 + version: 4.28.1 + zod: + specifier: ^3.22.4 + version: 3.23.8 + devDependencies: + '@biomejs/biome': + specifier: 1.6.4 + version: 1.6.4 + '@dotkomonline/config': + specifier: workspace:* + version: link:../../packages/config + '@dotkomonline/tsconfig': + specifier: workspace:* + version: link:../../packages/tsconfig + '@types/node': + specifier: ^20.12.7 + version: 20.16.10 + tslib: + specifier: ^2.6.2 + version: 2.7.0 + tsx: + specifier: ^4.15.6 + version: 4.19.1 + typescript: + specifier: ^5.4.5 + version: 5.6.2 + apps/web: dependencies: '@dotkomonline/auth': @@ -372,6 +418,9 @@ importers: '@dotkomonline/gateway-trpc': specifier: workspace:* version: link:../../packages/gateway-trpc + '@dotkomonline/proxy-nextjs': + specifier: workspace:* + version: link:../../packages/proxy-nextjs '@dotkomonline/types': specifier: workspace:* version: link:../../packages/types @@ -429,9 +478,6 @@ importers: '@trpc/react-query': specifier: ^10.45.0 version: 10.45.2(@tanstack/react-query@4.36.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/client@10.45.2(@trpc/server@10.45.2))(@trpc/server@10.45.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@trpc/server': - specifier: ^10.45.0 - version: 10.45.2 axios: specifier: 1.7.7 version: 1.7.7 @@ -523,9 +569,6 @@ importers: tailwindcss: specifier: ^3.3.5 version: 3.4.13 - trpc-playground: - specifier: ^1.0.4 - version: 1.0.4(@trpc/server@10.45.2)(@types/node@20.16.10)(koa@2.15.3)(sugarss@4.0.1(postcss@8.4.47))(typescript@5.6.2)(zod@3.23.8) tslib: specifier: ^2.6.2 version: 2.7.0 @@ -668,10 +711,10 @@ importers: version: 5.6.2 vitest: specifier: ^1.3.1 - version: 1.6.0(@types/node@20.16.10)(@vitest/ui@1.6.0)(jsdom@22.1.0)(sugarss@4.0.1(postcss@8.4.47)) + version: 1.6.0(@types/node@20.16.10)(@vitest/ui@1.6.0)(jsdom@22.1.0)(sugarss@4.0.1) vitest-mock-extended: specifier: ^1.3.1 - version: 1.3.2(typescript@5.6.2)(vitest@1.6.0(@types/node@20.16.10)(@vitest/ui@1.6.0)(jsdom@22.1.0)(sugarss@4.0.1(postcss@8.4.47))) + version: 1.3.2(typescript@5.6.2)(vitest@1.6.0(@types/node@20.16.10)(@vitest/ui@1.6.0)(jsdom@22.1.0)(sugarss@4.0.1)) packages/db: dependencies: @@ -804,7 +847,7 @@ importers: version: 5.6.2 vitest: specifier: ^1.3.1 - version: 1.6.0(@types/node@22.7.4)(@vitest/ui@1.6.0)(jsdom@22.1.0)(sugarss@4.0.1(postcss@8.4.47)) + version: 1.6.0(@types/node@22.7.4)(@vitest/ui@1.6.0)(jsdom@22.1.0)(sugarss@4.0.1) packages/gateway-trpc: dependencies: @@ -820,6 +863,9 @@ importers: '@trpc/server': specifier: ^10.45.0 version: 10.45.2 + jose: + specifier: ^5.4.0 + version: 5.4.0 next: specifier: ^14.2.14 version: 14.2.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -850,7 +896,7 @@ importers: version: 5.6.2 vitest: specifier: ^1.3.1 - version: 1.6.0(@types/node@22.7.4)(@vitest/ui@1.6.0)(jsdom@22.1.0)(sugarss@4.0.1(postcss@8.4.47)) + version: 1.6.0(@types/node@22.7.4)(@vitest/ui@1.6.0)(jsdom@22.1.0)(sugarss@4.0.1) packages/logger: dependencies: @@ -870,6 +916,22 @@ importers: packages/pgx-ulid: {} + packages/proxy-nextjs: + dependencies: + '@dotkomonline/logger': + specifier: workspace:* + version: link:../logger + next: + specifier: ^14.2.14 + version: 14.2.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next-auth: + specifier: ^4.24.8 + version: 4.24.8(next@14.2.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + devDependencies: + '@biomejs/biome': + specifier: ^1.9.3 + version: 1.9.3 + packages/tsconfig: {} packages/types: @@ -1338,53 +1400,106 @@ packages: '@balena/dockerignore@1.0.2': resolution: {integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==} + '@biomejs/biome@1.6.4': + resolution: {integrity: sha512-3groVd2oWsLC0ZU+XXgHSNbq31lUcOCBkCcA7sAQGBopHcmL+jmmdoWlY3S61zIh+f2mqQTQte1g6PZKb3JJjA==} + engines: {node: '>=14.21.3'} + hasBin: true + '@biomejs/biome@1.9.3': resolution: {integrity: sha512-POjAPz0APAmX33WOQFGQrwLvlu7WLV4CFJMlB12b6ZSg+2q6fYu9kZwLCOA+x83zXfcPd1RpuWOKJW0GbBwLIQ==} engines: {node: '>=14.21.3'} hasBin: true + '@biomejs/cli-darwin-arm64@1.6.4': + resolution: {integrity: sha512-2WZef8byI9NRzGajGj5RTrroW9BxtfbP9etigW1QGAtwu/6+cLkdPOWRAs7uFtaxBNiKFYA8j/BxV5zeAo5QOQ==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [darwin] + '@biomejs/cli-darwin-arm64@1.9.3': resolution: {integrity: sha512-QZzD2XrjJDUyIZK+aR2i5DDxCJfdwiYbUKu9GzkCUJpL78uSelAHAPy7m0GuPMVtF/Uo+OKv97W3P9nuWZangQ==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [darwin] + '@biomejs/cli-darwin-x64@1.6.4': + resolution: {integrity: sha512-uo1zgM7jvzcoDpF6dbGizejDLCqNpUIRkCj/oEK0PB0NUw8re/cn1EnxuOLZqDpn+8G75COLQTOx8UQIBBN/Kg==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [darwin] + '@biomejs/cli-darwin-x64@1.9.3': resolution: {integrity: sha512-vSCoIBJE0BN3SWDFuAY/tRavpUtNoqiceJ5PrU3xDfsLcm/U6N93JSM0M9OAiC/X7mPPfejtr6Yc9vSgWlEgVw==} engines: {node: '>=14.21.3'} cpu: [x64] os: [darwin] + '@biomejs/cli-linux-arm64-musl@1.6.4': + resolution: {integrity: sha512-Hp8Jwt6rjj0wCcYAEN6/cfwrrPLLlGOXZ56Lei4Pt4jy39+UuPeAVFPeclrrCfxyL1wQ2xPrhd/saTHSL6DoJg==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + '@biomejs/cli-linux-arm64-musl@1.9.3': resolution: {integrity: sha512-VBzyhaqqqwP3bAkkBrhVq50i3Uj9+RWuj+pYmXrMDgjS5+SKYGE56BwNw4l8hR3SmYbLSbEo15GcV043CDSk+Q==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] + '@biomejs/cli-linux-arm64@1.6.4': + resolution: {integrity: sha512-wAOieaMNIpLrxGc2/xNvM//CIZg7ueWy3V5A4T7gDZ3OL/Go27EKE59a+vMKsBCYmTt7jFl4yHz0TUkUbodA/w==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + '@biomejs/cli-linux-arm64@1.9.3': resolution: {integrity: sha512-vJkAimD2+sVviNTbaWOGqEBy31cW0ZB52KtpVIbkuma7PlfII3tsLhFa+cwbRAcRBkobBBhqZ06hXoZAN8NODQ==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] + '@biomejs/cli-linux-x64-musl@1.6.4': + resolution: {integrity: sha512-wqi0hr8KAx5kBO0B+m5u8QqiYFFBJOSJVSuRqTeGWW+GYLVUtXNidykNqf1JsW6jJDpbkSp2xHKE/bTlVaG2Kg==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + '@biomejs/cli-linux-x64-musl@1.9.3': resolution: {integrity: sha512-TJmnOG2+NOGM72mlczEsNki9UT+XAsMFAOo8J0me/N47EJ/vkLXxf481evfHLlxMejTY6IN8SdRSiPVLv6AHlA==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] + '@biomejs/cli-linux-x64@1.6.4': + resolution: {integrity: sha512-qTWhuIw+/ePvOkjE9Zxf5OqSCYxtAvcTJtVmZT8YQnmY2I62JKNV2m7tf6O5ViKZUOP0mOQ6NgqHKcHH1eT8jw==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + '@biomejs/cli-linux-x64@1.9.3': resolution: {integrity: sha512-x220V4c+romd26Mu1ptU+EudMXVS4xmzKxPVb9mgnfYlN4Yx9vD5NZraSx/onJnd3Gh/y8iPUdU5CDZJKg9COA==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] + '@biomejs/cli-win32-arm64@1.6.4': + resolution: {integrity: sha512-Wp3FiEeF6v6C5qMfLkHwf4YsoNHr/n0efvoC8jCKO/kX05OXaVExj+1uVQ1eGT7Pvx0XVm/TLprRO0vq/V6UzA==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [win32] + '@biomejs/cli-win32-arm64@1.9.3': resolution: {integrity: sha512-lg/yZis2HdQGsycUvHWSzo9kOvnGgvtrYRgoCEwPBwwAL8/6crOp3+f47tPwI/LI1dZrhSji7PNsGKGHbwyAhw==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [win32] + '@biomejs/cli-win32-x64@1.6.4': + resolution: {integrity: sha512-mz183Di5hTSGP7KjNWEhivcP1wnHLGmOxEROvoFsIxMYtDhzJDad4k5gI/1JbmA0xe4n52vsgqo09tBhrMT/Zg==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [win32] + '@biomejs/cli-win32-x64@1.9.3': resolution: {integrity: sha512-cQMy2zanBkVLpmmxXdK6YePzmZx0s5Z7KEnwmrW54rcXK3myCNbQa09SwGZ8i/8sLw0H9F3X7K4rxVNGU8/D4Q==} engines: {node: '>=14.21.3'} @@ -1424,6 +1539,12 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/aix-ppc64@0.23.1': + resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/android-arm64@0.16.4': resolution: {integrity: sha512-VPuTzXFm/m2fcGfN6CiwZTlLzxrKsWbPkG7ArRFpuxyaHUm/XFHQPD4xNwZT6uUmpIHhnSjcaCmcla8COzmZ5Q==} engines: {node: '>=12'} @@ -1448,6 +1569,12 @@ packages: cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.23.1': + resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm@0.16.4': resolution: {integrity: sha512-rZzb7r22m20S1S7ufIc6DC6W659yxoOrl7sKP1nCYhuvUlnCFHVSbATG4keGUtV8rDz11sRRDbWkvQZpzPaHiw==} engines: {node: '>=12'} @@ -1472,6 +1599,12 @@ packages: cpu: [arm] os: [android] + '@esbuild/android-arm@0.23.1': + resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-x64@0.16.4': resolution: {integrity: sha512-MW+B2O++BkcOfMWmuHXB15/l1i7wXhJFqbJhp82IBOais8RBEQv2vQz/jHrDEHaY2X0QY7Wfw86SBL2PbVOr0g==} engines: {node: '>=12'} @@ -1496,6 +1629,12 @@ packages: cpu: [x64] os: [android] + '@esbuild/android-x64@0.23.1': + resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/darwin-arm64@0.16.4': resolution: {integrity: sha512-a28X1O//aOfxwJVZVs7ZfM8Tyih2Za4nKJrBwW5Wm4yKsnwBy9aiS/xwpxiiTRttw3EaTg4Srerhcm6z0bu9Wg==} engines: {node: '>=12'} @@ -1520,6 +1659,12 @@ packages: cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.23.1': + resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-x64@0.16.4': resolution: {integrity: sha512-e3doCr6Ecfwd7VzlaQqEPrnbvvPjE9uoTpxG5pyLzr2rI2NMjDHmvY1E5EO81O/e9TUOLLkXA5m6T8lfjK9yAA==} engines: {node: '>=12'} @@ -1544,6 +1689,12 @@ packages: cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.23.1': + resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/freebsd-arm64@0.16.4': resolution: {integrity: sha512-Oup3G/QxBgvvqnXWrBed7xxkFNwAwJVHZcklWyQt7YCAL5bfUkaa6FVWnR78rNQiM8MqqLiT6ZTZSdUFuVIg1w==} engines: {node: '>=12'} @@ -1568,6 +1719,12 @@ packages: cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.23.1': + resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-x64@0.16.4': resolution: {integrity: sha512-vAP+eYOxlN/Bpo/TZmzEQapNS8W1njECrqkTpNgvXskkkJC2AwOXwZWai/Kc2vEFZUXQttx6UJbj9grqjD/+9Q==} engines: {node: '>=12'} @@ -1592,6 +1749,12 @@ packages: cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.23.1': + resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/linux-arm64@0.16.4': resolution: {integrity: sha512-2zXoBhv4r5pZiyjBKrOdFP4CXOChxXiYD50LRUU+65DkdS5niPFHbboKZd/c81l0ezpw7AQnHeoCy5hFrzzs4g==} engines: {node: '>=12'} @@ -1616,6 +1779,12 @@ packages: cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.23.1': + resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm@0.16.4': resolution: {integrity: sha512-A47ZmtpIPyERxkSvIv+zLd6kNIOtJH03XA0Hy7jaceRDdQaQVGSDt4mZqpWqJYgDk9rg96aglbF6kCRvPGDSUA==} engines: {node: '>=12'} @@ -1640,6 +1809,12 @@ packages: cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.23.1': + resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-ia32@0.16.4': resolution: {integrity: sha512-uxdSrpe9wFhz4yBwt2kl2TxS/NWEINYBUFIxQtaEVtglm1eECvsj1vEKI0KX2k2wCe17zDdQ3v+jVxfwVfvvjw==} engines: {node: '>=12'} @@ -1664,6 +1839,12 @@ packages: cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.23.1': + resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-loong64@0.16.4': resolution: {integrity: sha512-peDrrUuxbZ9Jw+DwLCh/9xmZAk0p0K1iY5d2IcwmnN+B87xw7kujOkig6ZRcZqgrXgeRGurRHn0ENMAjjD5DEg==} engines: {node: '>=12'} @@ -1688,6 +1869,12 @@ packages: cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.23.1': + resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-mips64el@0.16.4': resolution: {integrity: sha512-sD9EEUoGtVhFjjsauWjflZklTNr57KdQ6xfloO4yH1u7vNQlOfAlhEzbyBKfgbJlW7rwXYBdl5/NcZ+Mg2XhQA==} engines: {node: '>=12'} @@ -1712,6 +1899,12 @@ packages: cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.23.1': + resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-ppc64@0.16.4': resolution: {integrity: sha512-X1HSqHUX9D+d0l6/nIh4ZZJ94eQky8d8z6yxAptpZE3FxCWYWvTDd9X9ST84MGZEJx04VYUD/AGgciddwO0b8g==} engines: {node: '>=12'} @@ -1736,6 +1929,12 @@ packages: cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.23.1': + resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-riscv64@0.16.4': resolution: {integrity: sha512-97ANpzyNp0GTXCt6SRdIx1ngwncpkV/z453ZuxbnBROCJ5p/55UjhbaG23UdHj88fGWLKPFtMoU4CBacz4j9FA==} engines: {node: '>=12'} @@ -1760,6 +1959,12 @@ packages: cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.23.1': + resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-s390x@0.16.4': resolution: {integrity: sha512-pUvPQLPmbEeJRPjP0DYTC1vjHyhrnCklQmCGYbipkep+oyfTn7GTBJXoPodR7ZS5upmEyc8lzAkn2o29wD786A==} engines: {node: '>=12'} @@ -1784,6 +1989,12 @@ packages: cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.23.1': + resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-x64@0.16.4': resolution: {integrity: sha512-N55Q0mJs3Sl8+utPRPBrL6NLYZKBCLLx0bme/+RbjvMforTGGzFvsRl4xLTZMUBFC1poDzBEPTEu5nxizQ9Nlw==} engines: {node: '>=12'} @@ -1808,6 +2019,12 @@ packages: cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.23.1': + resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/netbsd-x64@0.16.4': resolution: {integrity: sha512-LHSJLit8jCObEQNYkgsDYBh2JrJT53oJO2HVdkSYLa6+zuLJh0lAr06brXIkljrlI+N7NNW1IAXGn/6IZPi3YQ==} engines: {node: '>=12'} @@ -1832,6 +2049,18 @@ packages: cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.23.1': + resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.23.1': + resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-x64@0.16.4': resolution: {integrity: sha512-nLgdc6tWEhcCFg/WVFaUxHcPK3AP/bh+KEwKtl69Ay5IBqUwKDaq/6Xk0E+fh/FGjnLwqFSsarsbPHeKM8t8Sw==} engines: {node: '>=12'} @@ -1856,6 +2085,12 @@ packages: cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.23.1': + resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/sunos-x64@0.16.4': resolution: {integrity: sha512-08SluG24GjPO3tXKk95/85n9kpyZtXCVwURR2i4myhrOfi3jspClV0xQQ0W0PYWHioJj+LejFMt41q+PG3mlAQ==} engines: {node: '>=12'} @@ -1880,6 +2115,12 @@ packages: cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.23.1': + resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/win32-arm64@0.16.4': resolution: {integrity: sha512-yYiRDQcqLYQSvNQcBKN7XogbrSvBE45FEQdH8fuXPl7cngzkCvpsG2H9Uey39IjQ6gqqc+Q4VXYHsQcKW0OMjQ==} engines: {node: '>=12'} @@ -1904,6 +2145,12 @@ packages: cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.23.1': + resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-ia32@0.16.4': resolution: {integrity: sha512-5rabnGIqexekYkh9zXG5waotq8mrdlRoBqAktjx2W3kb0zsI83mdCwrcAeKYirnUaTGztR5TxXcXmQrEzny83w==} engines: {node: '>=12'} @@ -1928,6 +2175,12 @@ packages: cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.23.1': + resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-x64@0.16.4': resolution: {integrity: sha512-sN/I8FMPtmtT2Yw+Dly8Ur5vQ5a/RmC8hW7jO9PtPSQUPkowxWpcUZnqOggU7VwyT3Xkj6vcXWd3V/qTXwultQ==} engines: {node: '>=12'} @@ -1952,13 +2205,34 @@ packages: cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.23.1': + resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@fadi-ui/react-country-flag@1.0.7': resolution: {integrity: sha512-UO+mSApJ9tKcTFo/XN8SPkko+KAWoiJRAOuY2CHAHrH0x7tBaCO8rXiTVpN70jR2sEuhDIsOn604kElRRJxRNg==} + '@fastify/ajv-compiler@3.6.0': + resolution: {integrity: sha512-LwdXQJjmMD+GwLOkP7TVC68qa+pSSogeWWmznRJ/coyTcfe9qA05AHFSe1eZFwK6q+xVRpChnvFUkf1iYaSZsQ==} + '@fastify/busboy@2.1.1': resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} engines: {node: '>=14'} + '@fastify/cors@9.0.1': + resolution: {integrity: sha512-YY9Ho3ovI+QHIL2hW+9X4XqQjXLjJqsU+sMV/xFsxZkE8p3GNnYVFpoOxF7SsP5ZL76gwvbo3V9L+FIekBGU4Q==} + + '@fastify/error@3.4.1': + resolution: {integrity: sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ==} + + '@fastify/fast-json-stringify-compiler@4.3.0': + resolution: {integrity: sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==} + + '@fastify/merge-json-schemas@0.1.1': + resolution: {integrity: sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA==} + '@floating-ui/core@1.6.8': resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==} @@ -3351,14 +3625,6 @@ packages: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} - '@trpc-playground/html@1.0.4': - resolution: {integrity: sha512-HVnqaUXxEJJcrAHvVgivwtZFqTE6NNxXxrXEnd+rCxun97xnZknwdiTxq69wQEsZYxPrgtwPmO/nAEZL8AReWg==} - - '@trpc-playground/types@1.0.0': - resolution: {integrity: sha512-Ap5aNaVlglfM9WLkPLKF2rHDZ8CwHcqK32A8YaqTyHUuoEFTSOh6oSgVU6Cv8toxClKiTXFvbWmE4aZxIoh4Zg==} - peerDependencies: - '@trpc/server': ^10 - '@trpc/client@10.45.2': resolution: {integrity: sha512-ykALM5kYWTLn1zYuUOZ2cPWlVfrXhc18HzBDyRhoPYN0jey4iQHEFSEowfnhg1RvYnrAVjNBgHNeSAXjrDbGwg==} peerDependencies: @@ -3572,6 +3838,9 @@ packages: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} + abstract-logging@2.0.1: + resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==} + accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} @@ -3598,6 +3867,25 @@ packages: resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} engines: {node: '>= 14'} + ajv-formats@2.1.1: + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + ansi-align@3.0.1: resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} @@ -3689,6 +3977,10 @@ packages: asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + atomic-sleep@1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + auth0@4.10.0: resolution: {integrity: sha512-xfNtSyL84w9z1DQXWV1GXgtq2Oi3OXeJe/r+pI29GKZHpfgspNb4rFqp/CqI8zKVir6L3Iq2KZgE2rDHRDtxfA==} engines: {node: '>=18'} @@ -3700,6 +3992,9 @@ packages: peerDependencies: postcss: ^8.1.0 + avvio@8.4.0: + resolution: {integrity: sha512-CDSwaxINFy59iNwhYnkvALBwZiTydGkOecZyPkqBpABYR1KqGEsET0VOOYDwtleZSUIdeY36DC2bSZ24CO1igA==} + axe-core@4.10.0: resolution: {integrity: sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==} engines: {node: '>=4'} @@ -3988,9 +4283,6 @@ packages: resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} - commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} @@ -4027,6 +4319,10 @@ packages: resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} engines: {node: '>= 0.6'} + cookie@0.6.0: + resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} + engines: {node: '>= 0.6'} + cookies@0.9.1: resolution: {integrity: sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==} engines: {node: '>= 0.8'} @@ -4067,9 +4363,6 @@ packages: engines: {node: '>=4'} hasBin: true - cssfilter@0.0.10: - resolution: {integrity: sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==} - cssstyle@3.0.0: resolution: {integrity: sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==} engines: {node: '>=14'} @@ -4323,6 +4616,11 @@ packages: engines: {node: '>=12'} hasBin: true + esbuild@0.23.1: + resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} + engines: {node: '>=18'} + hasBin: true + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -4382,9 +4680,18 @@ packages: extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + fast-content-type-parse@1.1.0: + resolution: {integrity: sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ==} + + fast-decode-uri-component@1.0.1: + resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} + fast-deep-equal@2.0.1: resolution: {integrity: sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==} + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + fast-fifo@1.3.2: resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} @@ -4392,10 +4699,32 @@ packages: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} + fast-json-stringify@5.16.1: + resolution: {integrity: sha512-KAdnLvy1yu/XrRtP+LJnxbBGrhN+xXu+gt3EUvZhYGKCr3lFHq/7UFJHHFgmJKoqlh6B40bZLEv7w46B0mqn1g==} + + fast-querystring@1.1.2: + resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==} + + fast-redact@3.5.0: + resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} + engines: {node: '>=6'} + + fast-uri@2.4.0: + resolution: {integrity: sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA==} + + fast-uri@3.0.1: + resolution: {integrity: sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==} + fast-xml-parser@4.4.1: resolution: {integrity: sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==} hasBin: true + fastify-plugin@4.5.1: + resolution: {integrity: sha512-stRHYGeuqpEZTL1Ef0Ovr2ltazUT9g844X5z/zEBFLG8RYlpDiOCIG+ATvYEp+/zmc7sN29mcIMp8gvYplYPIQ==} + + fastify@4.28.1: + resolution: {integrity: sha512-kFWUtpNr4i7t5vY2EJPCN2KgMVpuqfU4NjnJNCgiNB900oiDeYqaNDRcAfeBbOF5hGixixxcKnOU4KN9z6QncQ==} + fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} @@ -4413,6 +4742,10 @@ packages: resolution: {integrity: sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng==} engines: {node: '>=14.16'} + find-my-way@8.2.2: + resolution: {integrity: sha512-Dobi7gcTEq8yszimcfp/R7+owiT4WncAJ7VTTgFH1jYJ5GaG1FbhjwDG820hptN0QDFvzVY3RfCzdInvGPGzjA==} + engines: {node: '>=14'} + find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -4440,6 +4773,10 @@ packages: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + fraction.js@4.3.7: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} @@ -4784,6 +5121,10 @@ packages: invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + is-alphabetical@2.0.1: resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} @@ -4912,6 +5253,9 @@ packages: jose@4.15.9: resolution: {integrity: sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==} + jose@5.4.0: + resolution: {integrity: sha512-6rpxTHPAQyWMb9A35BroFl1Sp0ST3DpPcm5EVIxZxdH+e0Hv9fwhyB3XLKFUcHNpdSDnETmBfuPPTTlYz5+USw==} + joycon@3.1.1: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} @@ -4955,6 +5299,12 @@ packages: json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + json-schema-ref-resolver@1.0.1: + resolution: {integrity: sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} @@ -5049,6 +5399,9 @@ packages: leac@0.6.0: resolution: {integrity: sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==} + light-my-request@5.13.0: + resolution: {integrity: sha512-9IjUN9ZyCS9pTG+KqTDEQo68Sui2lHsYBrfMyVUTTZ3XhH8PMZq7xO94Kr+eP9dhi/kcKsx4N41p2IXEBil1pQ==} + lilconfig@2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} @@ -5398,6 +5751,9 @@ packages: mlly@1.7.1: resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==} + mnemonist@0.39.6: + resolution: {integrity: sha512-A/0v5Z59y63US00cRSLiloEIw3t5G+MiKz4BhX21FI+YBJXBOGW0ohFxTxO08dsOYlzxo87T7vGfZKYp2bcAWA==} + mrmime@2.0.0: resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} engines: {node: '>=10'} @@ -5542,6 +5898,9 @@ packages: resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} engines: {node: '>= 0.4'} + obliterator@2.0.4: + resolution: {integrity: sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==} + obuf@1.1.2: resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} @@ -5549,6 +5908,10 @@ packages: resolution: {integrity: sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw==} engines: {node: ^10.13.0 || >=12.0.0} + on-exit-leak-free@2.1.2: + resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} + engines: {node: '>=14.0.0'} + on-finished@2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} @@ -5725,6 +6088,16 @@ packages: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} + pino-abstract-transport@1.2.0: + resolution: {integrity: sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==} + + pino-std-serializers@7.0.0: + resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==} + + pino@9.4.0: + resolution: {integrity: sha512-nbkQb5+9YPhQRz/BeQmrWpEknAaqjpAqRK8NwJpmrX/JHu7JuZC5G1CeAwJDJfGes4h+YihC6in3Q2nGb+Y09w==} + hasBin: true + pirates@4.0.6: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} @@ -5866,6 +6239,12 @@ packages: process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + process-warning@3.0.0: + resolution: {integrity: sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==} + + process-warning@4.0.0: + resolution: {integrity: sha512-/MyYDxttz7DfGMMHiysAsFE4qF+pQYAA8ziO/3NcRVrQ5fSk+Mns4QZA/oRPFzvcqNoVJXQNWNAsdwBXLUkQKw==} + process@0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} @@ -5889,6 +6268,10 @@ packages: proto-list@1.2.4: resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} @@ -5924,6 +6307,9 @@ packages: queue-tick@1.0.1: resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} + quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + quick-lru@4.0.1: resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} engines: {node: '>=8'} @@ -6070,6 +6456,10 @@ packages: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} + real-require@0.2.0: + resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} + engines: {node: '>= 12.13.0'} + rechoir@0.6.2: resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} engines: {node: '>= 0.10'} @@ -6106,6 +6496,10 @@ packages: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} @@ -6124,6 +6518,10 @@ packages: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} engines: {node: '>=8'} + ret@0.4.3: + resolution: {integrity: sha512-0f4Memo5QP7WQyUEAYUO3esD/XjOc3Zjjg5CPsAq1p8sIu0XPeMbHJemKA0BO7tV0X7+A0FoEpbmHXWxPyD3wQ==} + engines: {node: '>=10'} + retry@0.12.0: resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} engines: {node: '>= 4'} @@ -6132,10 +6530,8 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rollup@3.29.5: - resolution: {integrity: sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} rollup@4.22.4: resolution: {integrity: sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==} @@ -6161,6 +6557,9 @@ packages: safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-regex2@3.1.0: + resolution: {integrity: sha512-RAAZAGbap2kBfbVhvmnTFv73NWLMvDGOITFYTZBAaY8eR+Ir4ef7Up/e7amo+y1+AH+3PtLkrt9mvcTsG9LXug==} + safe-stable-stringify@2.5.0: resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} engines: {node: '>=10'} @@ -6175,6 +6574,9 @@ packages: scheduler@0.23.2: resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + secure-json-parse@2.7.0: + resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} + selderee@0.11.0: resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==} @@ -6191,6 +6593,9 @@ packages: engines: {node: '>=10'} hasBin: true + set-cookie-parser@2.7.0: + resolution: {integrity: sha512-lXLOiqpkUumhRdFF3k1osNXCy9akgx/dyPZ5p8qAg9seJzXr5ZrlqZuWIMuY6ejOsVLE6flJ5/h3lsn57fQ/PQ==} + set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} @@ -6244,6 +6649,9 @@ packages: resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} engines: {node: '>=14.16'} + sonic-boom@4.1.0: + resolution: {integrity: sha512-NGipjjRicyJJ03rPiZCJYjwlsuP2d1/5QUviozRXC7S3WdVWNK5e3Ojieb9CCyfhq2UC+3+SRd9nG3I2lPRvUw==} + source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -6478,6 +6886,9 @@ packages: thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + thread-stream@3.1.0: + resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} + through2@2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} @@ -6504,6 +6915,10 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} + toad-cache@3.7.0: + resolution: {integrity: sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==} + engines: {node: '>=12'} + toidentifier@1.0.1: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} @@ -6549,12 +6964,6 @@ packages: trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - trpc-playground@1.0.4: - resolution: {integrity: sha512-6nVf1o2LNoo1g6oTS24yajoH7xV4CFjxGAbAH7qLXqa3yo9qB5QHsWLbrm1hNt51SyCG++P0zHJaCdVfgvEVDg==} - peerDependencies: - '@trpc/server': ^10 - zod: ^3 - ts-custom-error@3.3.1: resolution: {integrity: sha512-5OX1tzOjxWEgsr/YEUWSuPrQ00deKLh6D7OTWcvNHm12/7QPyRh8SYpyWvA4IZv8H/+GQWQEh/kwo95Q9OVW1A==} engines: {node: '>=14.0.0'} @@ -6567,14 +6976,6 @@ packages: typescript: optional: true - ts-essentials@9.4.2: - resolution: {integrity: sha512-mB/cDhOvD7pg3YCLk2rOtejHjjdSi9in/IBYE13S+8WA5FBSraYf4V/ws55uvs0IvQ/l0wBOlXy5yBNZ9Bl8ZQ==} - peerDependencies: - typescript: '>=4.1.0' - peerDependenciesMeta: - typescript: - optional: true - ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} @@ -6616,6 +7017,11 @@ packages: resolution: {integrity: sha512-xHtFaKtHxM9LOklMmJdI3BEnQq/D5F73Of2E1GDrITi9sgoVkvIsrQUTY1G8FlmGtA+awCI4EBlTRRYxkL2sRg==} hasBin: true + tsx@4.19.1: + resolution: {integrity: sha512-0flMz1lh74BR4wOvBjuh9olbnwqCPc35OOlfyzHba0Dc+QNUeWX/Gq2YTbnwcWPO3BMd8fkzRVrHcsR+a7z7rA==} + engines: {node: '>=18.0.0'} + hasBin: true + tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} @@ -6814,23 +7220,6 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - uttp@0.1.3: - resolution: {integrity: sha512-LWRHPNmivLr/4rTt3CXVtQfWdhzoN7OQwBPHfcsYGffeFo9a8/CtDxtl3xcVR965paRjLr3Ocxs/shwyjPzE2Q==} - peerDependencies: - express: ^4 - fastify: ^3 || ^4 - h3: '*' - koa: ^2 - peerDependenciesMeta: - express: - optional: true - fastify: - optional: true - h3: - optional: true - koa: - optional: true - uuid-random@1.3.2: resolution: {integrity: sha512-UOzej0Le/UgkbWEO8flm+0y+G+ljUon1QWTEZOq1rnMAsxo2+SckbiZdKzAHHlVh6gJqI1TjC/xwgR50MuCrBQ==} @@ -6871,34 +7260,6 @@ packages: vite: optional: true - vite@4.5.5: - resolution: {integrity: sha512-ifW3Lb2sMdX+WU91s3R0FyQlAyLxOzCSCP37ujw0+r5POeHPwe6udWVIElKQq8gk3t7b8rkmvqC6IHBpCff4GQ==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - '@types/node': '>= 14' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - vite@5.4.8: resolution: {integrity: sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==} engines: {node: ^18.0.0 || >=20.0.0} @@ -7055,11 +7416,6 @@ packages: xmlchars@2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} - xss@1.0.15: - resolution: {integrity: sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg==} - engines: {node: '>= 0.10.0'} - hasBin: true - xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} @@ -7107,12 +7463,6 @@ packages: resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==} engines: {node: '>= 14'} - zod-to-ts@1.2.0: - resolution: {integrity: sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA==} - peerDependencies: - typescript: ^4.9.4 || ^5.0.2 - zod: ^3 - zod@3.23.8: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} @@ -7823,6 +8173,17 @@ snapshots: '@balena/dockerignore@1.0.2': {} + '@biomejs/biome@1.6.4': + optionalDependencies: + '@biomejs/cli-darwin-arm64': 1.6.4 + '@biomejs/cli-darwin-x64': 1.6.4 + '@biomejs/cli-linux-arm64': 1.6.4 + '@biomejs/cli-linux-arm64-musl': 1.6.4 + '@biomejs/cli-linux-x64': 1.6.4 + '@biomejs/cli-linux-x64-musl': 1.6.4 + '@biomejs/cli-win32-arm64': 1.6.4 + '@biomejs/cli-win32-x64': 1.6.4 + '@biomejs/biome@1.9.3': optionalDependencies: '@biomejs/cli-darwin-arm64': 1.9.3 @@ -7834,27 +8195,51 @@ snapshots: '@biomejs/cli-win32-arm64': 1.9.3 '@biomejs/cli-win32-x64': 1.9.3 + '@biomejs/cli-darwin-arm64@1.6.4': + optional: true + '@biomejs/cli-darwin-arm64@1.9.3': optional: true + '@biomejs/cli-darwin-x64@1.6.4': + optional: true + '@biomejs/cli-darwin-x64@1.9.3': optional: true + '@biomejs/cli-linux-arm64-musl@1.6.4': + optional: true + '@biomejs/cli-linux-arm64-musl@1.9.3': optional: true + '@biomejs/cli-linux-arm64@1.6.4': + optional: true + '@biomejs/cli-linux-arm64@1.9.3': optional: true + '@biomejs/cli-linux-x64-musl@1.6.4': + optional: true + '@biomejs/cli-linux-x64-musl@1.9.3': optional: true + '@biomejs/cli-linux-x64@1.6.4': + optional: true + '@biomejs/cli-linux-x64@1.9.3': optional: true + '@biomejs/cli-win32-arm64@1.6.4': + optional: true + '@biomejs/cli-win32-arm64@1.9.3': optional: true + '@biomejs/cli-win32-x64@1.6.4': + optional: true + '@biomejs/cli-win32-x64@1.9.3': optional: true @@ -7889,6 +8274,9 @@ snapshots: '@esbuild/aix-ppc64@0.21.5': optional: true + '@esbuild/aix-ppc64@0.23.1': + optional: true + '@esbuild/android-arm64@0.16.4': optional: true @@ -7901,6 +8289,9 @@ snapshots: '@esbuild/android-arm64@0.21.5': optional: true + '@esbuild/android-arm64@0.23.1': + optional: true + '@esbuild/android-arm@0.16.4': optional: true @@ -7913,6 +8304,9 @@ snapshots: '@esbuild/android-arm@0.21.5': optional: true + '@esbuild/android-arm@0.23.1': + optional: true + '@esbuild/android-x64@0.16.4': optional: true @@ -7925,6 +8319,9 @@ snapshots: '@esbuild/android-x64@0.21.5': optional: true + '@esbuild/android-x64@0.23.1': + optional: true + '@esbuild/darwin-arm64@0.16.4': optional: true @@ -7937,6 +8334,9 @@ snapshots: '@esbuild/darwin-arm64@0.21.5': optional: true + '@esbuild/darwin-arm64@0.23.1': + optional: true + '@esbuild/darwin-x64@0.16.4': optional: true @@ -7949,6 +8349,9 @@ snapshots: '@esbuild/darwin-x64@0.21.5': optional: true + '@esbuild/darwin-x64@0.23.1': + optional: true + '@esbuild/freebsd-arm64@0.16.4': optional: true @@ -7961,6 +8364,9 @@ snapshots: '@esbuild/freebsd-arm64@0.21.5': optional: true + '@esbuild/freebsd-arm64@0.23.1': + optional: true + '@esbuild/freebsd-x64@0.16.4': optional: true @@ -7973,6 +8379,9 @@ snapshots: '@esbuild/freebsd-x64@0.21.5': optional: true + '@esbuild/freebsd-x64@0.23.1': + optional: true + '@esbuild/linux-arm64@0.16.4': optional: true @@ -7985,6 +8394,9 @@ snapshots: '@esbuild/linux-arm64@0.21.5': optional: true + '@esbuild/linux-arm64@0.23.1': + optional: true + '@esbuild/linux-arm@0.16.4': optional: true @@ -7997,6 +8409,9 @@ snapshots: '@esbuild/linux-arm@0.21.5': optional: true + '@esbuild/linux-arm@0.23.1': + optional: true + '@esbuild/linux-ia32@0.16.4': optional: true @@ -8009,6 +8424,9 @@ snapshots: '@esbuild/linux-ia32@0.21.5': optional: true + '@esbuild/linux-ia32@0.23.1': + optional: true + '@esbuild/linux-loong64@0.16.4': optional: true @@ -8021,6 +8439,9 @@ snapshots: '@esbuild/linux-loong64@0.21.5': optional: true + '@esbuild/linux-loong64@0.23.1': + optional: true + '@esbuild/linux-mips64el@0.16.4': optional: true @@ -8033,6 +8454,9 @@ snapshots: '@esbuild/linux-mips64el@0.21.5': optional: true + '@esbuild/linux-mips64el@0.23.1': + optional: true + '@esbuild/linux-ppc64@0.16.4': optional: true @@ -8045,6 +8469,9 @@ snapshots: '@esbuild/linux-ppc64@0.21.5': optional: true + '@esbuild/linux-ppc64@0.23.1': + optional: true + '@esbuild/linux-riscv64@0.16.4': optional: true @@ -8057,6 +8484,9 @@ snapshots: '@esbuild/linux-riscv64@0.21.5': optional: true + '@esbuild/linux-riscv64@0.23.1': + optional: true + '@esbuild/linux-s390x@0.16.4': optional: true @@ -8069,6 +8499,9 @@ snapshots: '@esbuild/linux-s390x@0.21.5': optional: true + '@esbuild/linux-s390x@0.23.1': + optional: true + '@esbuild/linux-x64@0.16.4': optional: true @@ -8081,6 +8514,9 @@ snapshots: '@esbuild/linux-x64@0.21.5': optional: true + '@esbuild/linux-x64@0.23.1': + optional: true + '@esbuild/netbsd-x64@0.16.4': optional: true @@ -8093,6 +8529,12 @@ snapshots: '@esbuild/netbsd-x64@0.21.5': optional: true + '@esbuild/netbsd-x64@0.23.1': + optional: true + + '@esbuild/openbsd-arm64@0.23.1': + optional: true + '@esbuild/openbsd-x64@0.16.4': optional: true @@ -8105,6 +8547,9 @@ snapshots: '@esbuild/openbsd-x64@0.21.5': optional: true + '@esbuild/openbsd-x64@0.23.1': + optional: true + '@esbuild/sunos-x64@0.16.4': optional: true @@ -8117,6 +8562,9 @@ snapshots: '@esbuild/sunos-x64@0.21.5': optional: true + '@esbuild/sunos-x64@0.23.1': + optional: true + '@esbuild/win32-arm64@0.16.4': optional: true @@ -8129,6 +8577,9 @@ snapshots: '@esbuild/win32-arm64@0.21.5': optional: true + '@esbuild/win32-arm64@0.23.1': + optional: true + '@esbuild/win32-ia32@0.16.4': optional: true @@ -8141,6 +8592,9 @@ snapshots: '@esbuild/win32-ia32@0.21.5': optional: true + '@esbuild/win32-ia32@0.23.1': + optional: true + '@esbuild/win32-x64@0.16.4': optional: true @@ -8153,13 +8607,37 @@ snapshots: '@esbuild/win32-x64@0.21.5': optional: true + '@esbuild/win32-x64@0.23.1': + optional: true + '@fadi-ui/react-country-flag@1.0.7': dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + '@fastify/ajv-compiler@3.6.0': + dependencies: + ajv: 8.17.1 + ajv-formats: 2.1.1(ajv@8.17.1) + fast-uri: 2.4.0 + '@fastify/busboy@2.1.1': {} + '@fastify/cors@9.0.1': + dependencies: + fastify-plugin: 4.5.1 + mnemonist: 0.39.6 + + '@fastify/error@3.4.1': {} + + '@fastify/fast-json-stringify-compiler@4.3.0': + dependencies: + fast-json-stringify: 5.16.1 + + '@fastify/merge-json-schemas@0.1.1': + dependencies: + fast-deep-equal: 3.1.3 + '@floating-ui/core@1.6.8': dependencies: '@floating-ui/utils': 0.2.8 @@ -9745,26 +10223,6 @@ snapshots: '@tootallnate/once@2.0.0': {} - '@trpc-playground/html@1.0.4(@types/node@20.16.10)(sugarss@4.0.1(postcss@8.4.47))': - dependencies: - vite: 4.5.5(@types/node@20.16.10)(sugarss@4.0.1(postcss@8.4.47)) - xss: 1.0.15 - transitivePeerDependencies: - - '@types/node' - - less - - lightningcss - - sass - - stylus - - sugarss - - terser - - '@trpc-playground/types@1.0.0(@trpc/server@10.45.2)(typescript@5.6.2)': - dependencies: - '@trpc/server': 10.45.2 - ts-essentials: 9.4.2(typescript@5.6.2) - transitivePeerDependencies: - - typescript - '@trpc/client@10.45.2(@trpc/server@10.45.2)': dependencies: '@trpc/server': 10.45.2 @@ -9865,7 +10323,7 @@ snapshots: '@types/jsonwebtoken@9.0.7': dependencies: - '@types/node': 22.7.4 + '@types/node': 20.16.10 '@types/mdast@4.0.4': dependencies: @@ -9879,7 +10337,7 @@ snapshots: '@types/mute-stream@0.0.4': dependencies: - '@types/node': 22.7.4 + '@types/node': 20.16.10 '@types/node@18.19.54': dependencies: @@ -9897,7 +10355,7 @@ snapshots: '@types/pg@8.11.10': dependencies: - '@types/node': 22.7.4 + '@types/node': 20.16.10 pg-protocol: 1.7.0 pg-types: 4.0.2 @@ -9994,7 +10452,7 @@ snapshots: pathe: 1.1.2 picocolors: 1.1.0 sirv: 2.0.4 - vitest: 1.6.0(@types/node@20.16.10)(@vitest/ui@1.6.0)(jsdom@22.1.0)(sugarss@4.0.1(postcss@8.4.47)) + vitest: 1.6.0(@types/node@20.16.10)(@vitest/ui@1.6.0)(jsdom@22.1.0)(sugarss@4.0.1) '@vitest/utils@1.6.0': dependencies: @@ -10020,6 +10478,8 @@ snapshots: dependencies: event-target-shim: 5.0.1 + abstract-logging@2.0.1: {} + accepts@1.3.8: dependencies: mime-types: 2.1.35 @@ -10047,6 +10507,21 @@ snapshots: transitivePeerDependencies: - supports-color + ajv-formats@2.1.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + + ajv-formats@3.0.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.0.1 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + ansi-align@3.0.1: dependencies: string-width: 4.2.3 @@ -10128,6 +10603,8 @@ snapshots: asynckit@0.4.0: {} + atomic-sleep@1.0.0: {} + auth0@4.10.0: dependencies: jose: 4.15.9 @@ -10144,6 +10621,11 @@ snapshots: postcss: 8.4.47 postcss-value-parser: 4.2.0 + avvio@8.4.0: + dependencies: + '@fastify/error': 3.4.1 + fastq: 1.17.1 + axe-core@4.10.0: {} axios@1.7.7: @@ -10448,8 +10930,6 @@ snapshots: commander@12.1.0: {} - commander@2.20.3: {} - commander@4.1.1: {} commander@9.4.1: {} @@ -10481,6 +10961,8 @@ snapshots: cookie@0.5.0: {} + cookie@0.6.0: {} + cookies@0.9.1: dependencies: depd: 2.0.0 @@ -10520,8 +11002,6 @@ snapshots: cssesc@3.0.0: {} - cssfilter@0.0.10: {} - cssstyle@3.0.0: dependencies: rrweb-cssom: 0.6.0 @@ -10832,6 +11312,33 @@ snapshots: '@esbuild/win32-ia32': 0.21.5 '@esbuild/win32-x64': 0.21.5 + esbuild@0.23.1: + optionalDependencies: + '@esbuild/aix-ppc64': 0.23.1 + '@esbuild/android-arm': 0.23.1 + '@esbuild/android-arm64': 0.23.1 + '@esbuild/android-x64': 0.23.1 + '@esbuild/darwin-arm64': 0.23.1 + '@esbuild/darwin-x64': 0.23.1 + '@esbuild/freebsd-arm64': 0.23.1 + '@esbuild/freebsd-x64': 0.23.1 + '@esbuild/linux-arm': 0.23.1 + '@esbuild/linux-arm64': 0.23.1 + '@esbuild/linux-ia32': 0.23.1 + '@esbuild/linux-loong64': 0.23.1 + '@esbuild/linux-mips64el': 0.23.1 + '@esbuild/linux-ppc64': 0.23.1 + '@esbuild/linux-riscv64': 0.23.1 + '@esbuild/linux-s390x': 0.23.1 + '@esbuild/linux-x64': 0.23.1 + '@esbuild/netbsd-x64': 0.23.1 + '@esbuild/openbsd-arm64': 0.23.1 + '@esbuild/openbsd-x64': 0.23.1 + '@esbuild/sunos-x64': 0.23.1 + '@esbuild/win32-arm64': 0.23.1 + '@esbuild/win32-ia32': 0.23.1 + '@esbuild/win32-x64': 0.23.1 + escalade@3.2.0: {} escape-html@1.0.3: {} @@ -10902,8 +11409,14 @@ snapshots: extend@3.0.2: {} + fast-content-type-parse@1.1.0: {} + + fast-decode-uri-component@1.0.1: {} + fast-deep-equal@2.0.1: {} + fast-deep-equal@3.1.3: {} + fast-fifo@1.3.2: {} fast-glob@3.3.2: @@ -10914,10 +11427,51 @@ snapshots: merge2: 1.4.1 micromatch: 4.0.8 + fast-json-stringify@5.16.1: + dependencies: + '@fastify/merge-json-schemas': 0.1.1 + ajv: 8.17.1 + ajv-formats: 3.0.1(ajv@8.17.1) + fast-deep-equal: 3.1.3 + fast-uri: 2.4.0 + json-schema-ref-resolver: 1.0.1 + rfdc: 1.4.1 + + fast-querystring@1.1.2: + dependencies: + fast-decode-uri-component: 1.0.1 + + fast-redact@3.5.0: {} + + fast-uri@2.4.0: {} + + fast-uri@3.0.1: {} + fast-xml-parser@4.4.1: dependencies: strnum: 1.0.5 + fastify-plugin@4.5.1: {} + + fastify@4.28.1: + dependencies: + '@fastify/ajv-compiler': 3.6.0 + '@fastify/error': 3.4.1 + '@fastify/fast-json-stringify-compiler': 4.3.0 + abstract-logging: 2.0.1 + avvio: 8.4.0 + fast-content-type-parse: 1.1.0 + fast-json-stringify: 5.16.1 + find-my-way: 8.2.2 + light-my-request: 5.13.0 + pino: 9.4.0 + process-warning: 3.0.0 + proxy-addr: 2.0.7 + rfdc: 1.4.1 + secure-json-parse: 2.7.0 + semver: 7.6.3 + toad-cache: 3.7.0 + fastq@1.17.1: dependencies: reusify: 1.0.4 @@ -10932,6 +11486,12 @@ snapshots: filter-obj@5.1.0: {} + find-my-way@8.2.2: + dependencies: + fast-deep-equal: 3.1.3 + fast-querystring: 1.1.2 + safe-regex2: 3.1.0 + find-up@4.1.0: dependencies: locate-path: 5.0.0 @@ -10954,6 +11514,8 @@ snapshots: combined-stream: 1.0.8 mime-types: 2.1.35 + forwarded@0.2.0: {} + fraction.js@4.3.7: {} fresh@0.5.2: {} @@ -11403,6 +11965,8 @@ snapshots: dependencies: loose-envify: 1.4.0 + ipaddr.js@1.9.1: {} + is-alphabetical@2.0.1: {} is-alphanumerical@2.0.1: @@ -11498,6 +12062,8 @@ snapshots: jose@4.15.9: {} + jose@5.4.0: {} + joycon@3.1.1: {} js-beautify@1.15.1: @@ -11556,6 +12122,12 @@ snapshots: json-parse-even-better-errors@2.3.1: {} + json-schema-ref-resolver@1.0.1: + dependencies: + fast-deep-equal: 3.1.3 + + json-schema-traverse@1.0.0: {} + json5@2.2.3: {} jsonfile@4.0.0: @@ -11668,6 +12240,12 @@ snapshots: leac@0.6.0: {} + light-my-request@5.13.0: + dependencies: + cookie: 0.6.0 + process-warning: 3.0.0 + set-cookie-parser: 2.7.0 + lilconfig@2.1.0: {} lilconfig@3.1.2: {} @@ -12266,6 +12844,10 @@ snapshots: pkg-types: 1.2.0 ufo: 1.5.4 + mnemonist@0.39.6: + dependencies: + obliterator: 2.0.4 + mrmime@2.0.0: {} ms@2.1.3: {} @@ -12405,10 +12987,14 @@ snapshots: object-inspect@1.13.2: {} + obliterator@2.0.4: {} + obuf@1.1.2: {} oidc-token-hash@5.0.3: {} + on-exit-leak-free@2.1.2: {} + on-finished@2.4.1: dependencies: ee-first: 1.1.1 @@ -12594,6 +13180,27 @@ snapshots: pify@2.3.0: {} + pino-abstract-transport@1.2.0: + dependencies: + readable-stream: 4.5.2 + split2: 4.2.0 + + pino-std-serializers@7.0.0: {} + + pino@9.4.0: + dependencies: + atomic-sleep: 1.0.0 + fast-redact: 3.5.0 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 1.2.0 + pino-std-serializers: 7.0.0 + process-warning: 4.0.0 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.5.0 + sonic-boom: 4.1.0 + thread-stream: 3.1.0 + pirates@4.0.6: {} pkg-types@1.2.0: @@ -12722,6 +13329,10 @@ snapshots: process-nextick-args@2.0.1: {} + process-warning@3.0.0: {} + + process-warning@4.0.0: {} + process@0.11.10: {} progress-stream@2.0.0: @@ -12749,6 +13360,11 @@ snapshots: proto-list@1.2.4: {} + proxy-addr@2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + proxy-from-env@1.1.0: {} psl@1.9.0: {} @@ -12780,6 +13396,8 @@ snapshots: queue-tick@1.0.1: {} + quick-format-unescaped@4.0.4: {} + quick-lru@4.0.1: {} react-dom@18.2.0(react@18.2.0): @@ -12956,6 +13574,8 @@ snapshots: dependencies: picomatch: 2.3.1 + real-require@0.2.0: {} + rechoir@0.6.2: dependencies: resolve: 1.22.8 @@ -13023,6 +13643,8 @@ snapshots: require-directory@2.1.1: {} + require-from-string@2.0.2: {} + requires-port@1.0.0: {} resolve-from@5.0.0: {} @@ -13040,13 +13662,13 @@ snapshots: onetime: 5.1.2 signal-exit: 3.0.7 + ret@0.4.3: {} + retry@0.12.0: {} reusify@1.0.4: {} - rollup@3.29.5: - optionalDependencies: - fsevents: 2.3.3 + rfdc@1.4.1: {} rollup@4.22.4: dependencies: @@ -13086,6 +13708,10 @@ snapshots: safe-buffer@5.2.1: {} + safe-regex2@3.1.0: + dependencies: + ret: 0.4.3 + safe-stable-stringify@2.5.0: {} safer-buffer@2.1.2: {} @@ -13098,6 +13724,8 @@ snapshots: dependencies: loose-envify: 1.4.0 + secure-json-parse@2.7.0: {} + selderee@0.11.0: dependencies: parseley: 0.12.1 @@ -13108,6 +13736,8 @@ snapshots: semver@7.6.3: {} + set-cookie-parser@2.7.0: {} + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 @@ -13160,6 +13790,10 @@ snapshots: slash@5.1.0: {} + sonic-boom@4.1.0: + dependencies: + atomic-sleep: 1.0.0 + source-map-js@1.2.1: {} source-map-support@0.5.21: @@ -13435,6 +14069,10 @@ snapshots: dependencies: any-promise: 1.3.0 + thread-stream@3.1.0: + dependencies: + real-require: 0.2.0 + through2@2.0.5: dependencies: readable-stream: 2.3.8 @@ -13454,6 +14092,8 @@ snapshots: dependencies: is-number: 7.0.0 + toad-cache@3.7.0: {} + toidentifier@1.0.1: {} totalist@3.0.1: {} @@ -13494,39 +14134,12 @@ snapshots: trough@2.2.0: {} - trpc-playground@1.0.4(@trpc/server@10.45.2)(@types/node@20.16.10)(koa@2.15.3)(sugarss@4.0.1(postcss@8.4.47))(typescript@5.6.2)(zod@3.23.8): - dependencies: - '@trpc-playground/html': 1.0.4(@types/node@20.16.10)(sugarss@4.0.1(postcss@8.4.47)) - '@trpc-playground/types': 1.0.0(@trpc/server@10.45.2)(typescript@5.6.2) - '@trpc/server': 10.45.2 - lodash: 4.17.21 - uttp: 0.1.3(koa@2.15.3) - zod: 3.23.8 - zod-to-ts: 1.2.0(typescript@5.6.2)(zod@3.23.8) - transitivePeerDependencies: - - '@types/node' - - express - - fastify - - h3 - - koa - - less - - lightningcss - - sass - - stylus - - sugarss - - terser - - typescript - ts-custom-error@3.3.1: {} ts-essentials@10.0.2(typescript@5.6.2): optionalDependencies: typescript: 5.6.2 - ts-essentials@9.4.2(typescript@5.6.2): - optionalDependencies: - typescript: 5.6.2 - ts-interface-checker@0.1.13: {} tsconfck@3.1.3(typescript@5.6.2): @@ -13537,7 +14150,7 @@ snapshots: tsscmp@1.0.6: {} - tsup@7.3.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(postcss@8.4.47)(typescript@5.6.2): + tsup@7.3.0(@swc/core@1.7.28)(postcss@8.4.47)(typescript@5.6.2): dependencies: bundle-require: 4.2.1(esbuild@0.19.12) cac: 6.7.14 @@ -13569,6 +14182,13 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + tsx@4.19.1: + dependencies: + esbuild: 0.23.1 + get-tsconfig: 4.8.1 + optionalDependencies: + fsevents: 2.3.3 + tunnel-agent@0.6.0: dependencies: safe-buffer: 5.2.1 @@ -13735,10 +14355,6 @@ snapshots: util-deprecate@1.0.2: {} - uttp@0.1.3(koa@2.15.3): - optionalDependencies: - koa: 2.15.3 - uuid-random@1.3.2: {} uuid@8.3.2: {} @@ -13767,13 +14383,13 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-node@1.6.0(@types/node@20.16.10)(sugarss@4.0.1(postcss@8.4.47)): + vite-node@1.6.0(@types/node@20.16.10)(sugarss@4.0.1): dependencies: cac: 6.7.14 debug: 4.3.7 pathe: 1.1.2 picocolors: 1.1.0 - vite: 5.4.8(@types/node@20.16.10)(sugarss@4.0.1(postcss@8.4.47)) + vite: 5.4.8(@types/node@20.16.10)(sugarss@4.0.1) transitivePeerDependencies: - '@types/node' - less @@ -13803,6 +14419,24 @@ snapshots: - supports-color - terser + vite-node@1.6.0(@types/node@22.7.4)(sugarss@4.0.1): + dependencies: + cac: 6.7.14 + debug: 4.3.7 + pathe: 1.1.2 + picocolors: 1.1.0 + vite: 5.4.8(@types/node@22.7.4)(sugarss@4.0.1) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + vite-tsconfig-paths@4.3.2(typescript@5.6.2)(vite@5.4.8(@types/node@22.7.4)(sugarss@4.0.1(postcss@8.4.47))): dependencies: debug: 4.3.7 @@ -13814,27 +14448,27 @@ snapshots: - supports-color - typescript - vite@4.5.5(@types/node@20.16.10)(sugarss@4.0.1(postcss@8.4.47)): + vite@5.4.8(@types/node@20.16.10)(sugarss@4.0.1): dependencies: - esbuild: 0.18.20 + esbuild: 0.21.5 postcss: 8.4.47 - rollup: 3.29.5 + rollup: 4.22.4 optionalDependencies: '@types/node': 20.16.10 fsevents: 2.3.3 sugarss: 4.0.1(postcss@8.4.47) - vite@5.4.8(@types/node@20.16.10)(sugarss@4.0.1(postcss@8.4.47)): + vite@5.4.8(@types/node@22.7.4)(sugarss@4.0.1(postcss@8.4.47)): dependencies: esbuild: 0.21.5 postcss: 8.4.47 rollup: 4.22.4 optionalDependencies: - '@types/node': 20.16.10 + '@types/node': 22.7.4 fsevents: 2.3.3 sugarss: 4.0.1(postcss@8.4.47) - vite@5.4.8(@types/node@22.7.4)(sugarss@4.0.1(postcss@8.4.47)): + vite@5.4.8(@types/node@22.7.4)(sugarss@4.0.1): dependencies: esbuild: 0.21.5 postcss: 8.4.47 @@ -13844,13 +14478,13 @@ snapshots: fsevents: 2.3.3 sugarss: 4.0.1(postcss@8.4.47) - vitest-mock-extended@1.3.2(typescript@5.6.2)(vitest@1.6.0(@types/node@20.16.10)(@vitest/ui@1.6.0)(jsdom@22.1.0)(sugarss@4.0.1(postcss@8.4.47))): + vitest-mock-extended@1.3.2(typescript@5.6.2)(vitest@1.6.0(@types/node@20.16.10)(@vitest/ui@1.6.0)(jsdom@22.1.0)(sugarss@4.0.1)): dependencies: ts-essentials: 10.0.2(typescript@5.6.2) typescript: 5.6.2 - vitest: 1.6.0(@types/node@20.16.10)(@vitest/ui@1.6.0)(jsdom@22.1.0)(sugarss@4.0.1(postcss@8.4.47)) + vitest: 1.6.0(@types/node@20.16.10)(@vitest/ui@1.6.0)(jsdom@22.1.0)(sugarss@4.0.1) - vitest@1.6.0(@types/node@20.16.10)(@vitest/ui@1.6.0)(jsdom@22.1.0)(sugarss@4.0.1(postcss@8.4.47)): + vitest@1.6.0(@types/node@20.16.10)(@vitest/ui@1.6.0)(jsdom@22.1.0)(sugarss@4.0.1): dependencies: '@vitest/expect': 1.6.0 '@vitest/runner': 1.6.0 @@ -13869,8 +14503,8 @@ snapshots: strip-literal: 2.1.0 tinybench: 2.9.0 tinypool: 0.8.4 - vite: 5.4.8(@types/node@20.16.10)(sugarss@4.0.1(postcss@8.4.47)) - vite-node: 1.6.0(@types/node@20.16.10)(sugarss@4.0.1(postcss@8.4.47)) + vite: 5.4.8(@types/node@20.16.10)(sugarss@4.0.1) + vite-node: 1.6.0(@types/node@20.16.10)(sugarss@4.0.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 20.16.10 @@ -13922,6 +14556,42 @@ snapshots: - supports-color - terser + vitest@1.6.0(@types/node@22.7.4)(@vitest/ui@1.6.0)(jsdom@22.1.0)(sugarss@4.0.1): + dependencies: + '@vitest/expect': 1.6.0 + '@vitest/runner': 1.6.0 + '@vitest/snapshot': 1.6.0 + '@vitest/spy': 1.6.0 + '@vitest/utils': 1.6.0 + acorn-walk: 8.3.4 + chai: 4.5.0 + debug: 4.3.7 + execa: 8.0.1 + local-pkg: 0.5.0 + magic-string: 0.30.11 + pathe: 1.1.2 + picocolors: 1.1.0 + std-env: 3.7.0 + strip-literal: 2.1.0 + tinybench: 2.9.0 + tinypool: 0.8.4 + vite: 5.4.8(@types/node@22.7.4)(sugarss@4.0.1) + vite-node: 1.6.0(@types/node@22.7.4)(sugarss@4.0.1) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 22.7.4 + '@vitest/ui': 1.6.0(vitest@1.6.0) + jsdom: 22.1.0 + transitivePeerDependencies: + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + w3c-xmlserializer@4.0.0: dependencies: xml-name-validator: 4.0.0 @@ -14019,11 +14689,6 @@ snapshots: xmlchars@2.2.0: {} - xss@1.0.15: - dependencies: - commander: 2.20.3 - cssfilter: 0.0.10 - xtend@4.0.2: {} y18n@5.0.8: {} @@ -14063,11 +14728,6 @@ snapshots: compress-commons: 6.0.2 readable-stream: 4.5.2 - zod-to-ts@1.2.0(typescript@5.6.2)(zod@3.23.8): - dependencies: - typescript: 5.6.2 - zod: 3.23.8 - zod@3.23.8: {} zwitch@2.0.4: {}