diff --git a/apps/main/package.json b/apps/main/package.json index bd66a93..4b4fe2f 100644 --- a/apps/main/package.json +++ b/apps/main/package.json @@ -6,15 +6,14 @@ "scripts": { "dev": "vite dev --port 5173", "build": "NODE_ENV=build vite build", - "prod": "HOST=0.0.0.0 PORT=3000 bun run ./build/index.js", + "prod": "HOST=0.0.0.0 PORT=3000 node ./build/index.js", "preview": "vite preview", "prepare": "svelte-kit sync || echo ''", "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", "format": "prettier --write .", "lint": "prettier --check .", - "test:unit": "vitest", - "test": "bun run test:unit -- --run" + "test:unit": "vitest" }, "dependencies": { "@pkg/db": "workspace:*", diff --git a/apps/processor/package.json b/apps/processor/package.json new file mode 100644 index 0000000..339a559 --- /dev/null +++ b/apps/processor/package.json @@ -0,0 +1,20 @@ +{ + "name": "@apps/processor", + "type": "module", + "scripts": { + "dev": "tsx watch src/index.ts", + "build": "tsc", + "start": "node dist/index.js" + }, + "dependencies": { + "@pkg/logger": "workspace:*", + "@pkg/logic": "workspace:*", + "@hono/node-server": "^1.19.9", + "hono": "^4.11.1" + }, + "devDependencies": { + "@types/node": "^25.3.2", + "tsx": "^4.21.0", + "typescript": "^5.9.3" + } +} diff --git a/apps/processor/src/index.ts b/apps/processor/src/index.ts new file mode 100644 index 0000000..dd439ed --- /dev/null +++ b/apps/processor/src/index.ts @@ -0,0 +1,18 @@ +import { serve } from "@hono/node-server"; +import { Hono } from "hono"; + +const app = new Hono(); + +app.get("/", (c) => { + return c.text("Hello Hono!"); +}); + +serve( + { + fetch: app.fetch, + port: 3000, + }, + (info) => { + console.log(`Server is running on http://localhost:${info.port}`); + }, +); diff --git a/apps/processor/tsconfig.json b/apps/processor/tsconfig.json new file mode 100644 index 0000000..b55223e --- /dev/null +++ b/apps/processor/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "ESNext", + "module": "NodeNext", + "strict": true, + "verbatimModuleSyntax": true, + "skipLibCheck": true, + "types": [ + "node" + ], + "jsx": "react-jsx", + "jsxImportSource": "hono/jsx", + "outDir": "./dist" + }, + "exclude": ["node_modules"] +} diff --git a/dockerfiles/main.Dockerfile b/dockerfiles/main.Dockerfile index 14843cb..41eb13d 100644 --- a/dockerfiles/main.Dockerfile +++ b/dockerfiles/main.Dockerfile @@ -1,22 +1,22 @@ FROM node:25.6.1 AS production -RUN npm i -g bun +RUN npm i -g pnpm WORKDIR /app -COPY package.json bun.lock turbo.json ./ +COPY package.json pnpm-lock.yaml pnpm-workspace.yaml turbo.json ./ COPY apps/main/package.json ./apps/main/package.json COPY packages ./packages -RUN bun install +RUN pnpm install COPY apps/main ./apps/main -RUN bun install +RUN pnpm install -RUN bun run build +RUN pnpm run build COPY scripts ./scripts diff --git a/dockerfiles/migrator.Dockerfile b/dockerfiles/migrator.Dockerfile index ad9e319..a3c9d22 100644 --- a/dockerfiles/migrator.Dockerfile +++ b/dockerfiles/migrator.Dockerfile @@ -1,16 +1,16 @@ -FROM node:23.11.0 AS base +FROM node:25.6.1 AS production -RUN npm i -g bun +RUN npm i -g pnpm FROM base AS primary WORKDIR /app -COPY package.json bun.lock turbo.json ./ +COPY package.json pnpm-lock.yaml pnpm-workspace.yaml turbo.json ./ COPY packages/db packages/db -RUN bun install +RUN pnpm install COPY scripts scripts diff --git a/dockerfiles/processor.Dockerfile b/dockerfiles/processor.Dockerfile index a968026..9478c74 100644 --- a/dockerfiles/processor.Dockerfile +++ b/dockerfiles/processor.Dockerfile @@ -1,20 +1,20 @@ -FROM oven/bun:1.3.5-alpine +FROM node:25.6.1-alpine AS production RUN apk add --no-cache xh WORKDIR /app -COPY package.json bun.lock turbo.json ./ +COPY package.json pnpm-lock.yaml pnpm-workspace.yaml turbo.json ./ COPY apps/processor/package.json ./apps/processor/package.json COPY packages ./packages -RUN bun install +RUN pnpm install COPY apps/processor ./apps/processor -RUN bun install +RUN pnpm install COPY scripts ./scripts diff --git a/package.json b/package.json index 7f54340..254f984 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "scripts": { "build": "turbo build", "dev": "turbo dev --concurrency=8", - "auth:schemagen": "source .env && cd packages/logic && bun run auth:schemagen", + "auth:schemagen": "source .env && cd packages/logic && pnpm run auth:schemagen", "db:migrate": "./scripts/migrate.sh", "prod": "turbo prod", "test": "turbo test" diff --git a/packages/redis/index.ts b/packages/keystore/index.ts similarity index 100% rename from packages/redis/index.ts rename to packages/keystore/index.ts diff --git a/packages/redis/package.json b/packages/keystore/package.json similarity index 89% rename from packages/redis/package.json rename to packages/keystore/package.json index 1614bf5..9299919 100644 --- a/packages/redis/package.json +++ b/packages/keystore/package.json @@ -1,5 +1,5 @@ { - "name": "@pkg/redis", + "name": "@pkg/keystore", "module": "index.ts", "type": "module", "private": true, diff --git a/packages/logic/domains/2fa/controller.ts b/packages/logic/domains/2fa/controller.ts index 191482f..a436317 100644 --- a/packages/logic/domains/2fa/controller.ts +++ b/packages/logic/domains/2fa/controller.ts @@ -1,7 +1,7 @@ import { errAsync, okAsync, ResultAsync } from "neverthrow"; import { FlowExecCtx } from "@core/flow.execution.context"; import { UserRepository } from "@domains/user/repository"; -import { getRedisInstance, Redis } from "@pkg/redis"; +import { getRedisInstance, Redis } from "@pkg/keystore"; import { TwofaRepository } from "./repository"; import { auth } from "../auth/config.base"; import type { TwoFaSession } from "./data"; @@ -17,6 +17,7 @@ export class TwofaController { private twofaRepo: TwofaRepository, private userRepo: UserRepository, private store: Redis, + private secret: string, ) {} checkTotp(secret: string, code: string) { @@ -42,7 +43,7 @@ export class TwofaController { .andThen((enabled) => enabled ? errAsync(twofaErrors.alreadyEnabled(fctx)) - : this.twofaRepo.setup(fctx, user.id), + : this.twofaRepo.setup(fctx, user.id, this.secret), ) .map((secret) => { const appName = settings.appName; @@ -345,5 +346,6 @@ export function getTwofaController() { new TwofaRepository(db, _redis), new UserRepository(db), _redis, + settings.twoFaSecret, ); } diff --git a/packages/logic/domains/2fa/repository.ts b/packages/logic/domains/2fa/repository.ts index 6d0ec46..b36a0e4 100644 --- a/packages/logic/domains/2fa/repository.ts +++ b/packages/logic/domains/2fa/repository.ts @@ -3,13 +3,15 @@ import { FlowExecCtx } from "@core/flow.execution.context"; import { hashString, verifyHash } from "@/core/hash.utils"; import { twoFactor, twofaSessions } from "@pkg/db/schema"; import { TwoFactor, type TwoFaSession } from "./data"; +import { crypto } from "@otplib/plugin-crypto-noble"; +import { base32 } from "@otplib/plugin-base32-scure"; import { and, Database, eq, gt, lt } from "@pkg/db"; -import { generateSecret, verify } from "otplib"; +import { generate, verify } from "@otplib/totp"; import { settings } from "@core/settings"; import type { Err } from "@pkg/result"; import { twofaErrors } from "./errors"; +import { Redis } from "@pkg/keystore"; import { logger } from "@pkg/logger"; -import { Redis } from "@pkg/redis"; import { nanoid } from "nanoid"; type TwoFaSetup = { @@ -30,7 +32,7 @@ export class TwofaRepository { ) {} checkTotp(secret: string, code: string) { - const checked = verify({ secret, token: code }); + const checked = verify({ secret, token: code, crypto, base32 }); logger.debug("TOTP check result", { checked }); return checked; } @@ -98,14 +100,22 @@ export class TwofaRepository { }); } - setup(fctx: FlowExecCtx, userId: string): ResultAsync { + setup( + fctx: FlowExecCtx, + userId: string, + secret: string, + ): ResultAsync { logger.info("Starting 2FA setup", { ...fctx, userId }); return ResultAsync.fromSafePromise( (async () => { - const secret = generateSecret(); - const payload = { + const token = await generate({ secret, + crypto, + base32, + }); + const payload = { + secret: token, lastUsedCode: "", tries: 0, } as TwoFaSetup; diff --git a/packages/logic/domains/auth/config.base.ts b/packages/logic/domains/auth/config.base.ts index 9bf35d2..1e6af67 100644 --- a/packages/logic/domains/auth/config.base.ts +++ b/packages/logic/domains/auth/config.base.ts @@ -10,7 +10,7 @@ import { AuthController, getAuthController } from "./controller"; import { drizzleAdapter } from "better-auth/adapters/drizzle"; import { FlowExecCtx } from "@/core/flow.execution.context"; import { UserRoleMap } from "@domains/user/data"; -import { getRedisInstance } from "@pkg/redis"; +import { getRedisInstance } from "@pkg/keystore"; import { APIError } from "better-auth/api"; import { settings } from "@core/settings"; import { betterAuth } from "better-auth"; diff --git a/packages/logic/package.json b/packages/logic/package.json index 86fa87c..843d90e 100644 --- a/packages/logic/package.json +++ b/packages/logic/package.json @@ -1,13 +1,16 @@ { "name": "@pkg/logic", "scripts": { - "auth:schemagen": "bun x @better-auth/cli generate --config ./domains/auth/config.base.ts --output ../../packages/db/schema/better.auth.schema.ts" + "auth:schemagen": "pnpm dlx @better-auth/cli generate --config ./domains/auth/config.base.ts --output ../../packages/db/schema/better.auth.schema.ts" }, "dependencies": { "@hono/standard-validator": "^0.2.1", + "@otplib/plugin-base32-scure": "^13.3.0", + "@otplib/plugin-crypto-noble": "^13.3.0", + "@otplib/totp": "^13.3.0", "@pkg/db": "workspace:*", "@pkg/logger": "workspace:*", - "@pkg/redis": "workspace:*", + "@pkg/keystore": "workspace:*", "@pkg/result": "workspace:*", "@pkg/settings": "workspace:*", "@types/pdfkit": "^0.14.0", diff --git a/packages/settings/index.ts b/packages/settings/index.ts index d6f361f..d857746 100644 --- a/packages/settings/index.ts +++ b/packages/settings/index.ts @@ -22,6 +22,7 @@ export const settingsSchema = v.object({ betterAuthUrl: v.string(), betterAuthSecret: v.string(), + twoFaSecret: v.string(), twofaSessionExpiryMinutes: v.optional(v.number()), twofaRequiredHours: v.optional(v.number()), @@ -107,6 +108,7 @@ function loadSettings(): Settings { betterAuthUrl: getEnv("BETTER_AUTH_URL"), betterAuthSecret: getEnv("BETTER_AUTH_SECRET"), + twoFaSecret: getEnv("TWOFA_SECRET"), twofaSessionExpiryMinutes: getEnvNumber( "TWOFA_SESSION_EXPIRY_MINUTES", 10, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9b3be90..ff05740 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -46,7 +46,7 @@ importers: version: 6.0.18(svelte@5.53.6) better-auth: specifier: ^1.4.20 - version: 1.4.20(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(vitest@4.0.18(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)) + version: 1.4.20(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(vitest@4.0.18(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)) date-fns: specifier: ^4.1.0 version: 4.1.0 @@ -80,13 +80,13 @@ importers: version: 0.561.0(svelte@5.53.6) '@sveltejs/adapter-node': specifier: ^5.5.4 - version: 5.5.4(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1))) + version: 5.5.4(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0))) '@sveltejs/kit': specifier: ^2.53.4 - version: 2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)) + version: 2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)) '@sveltejs/vite-plugin-svelte': specifier: ^6.2.4 - version: 6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)) + version: 6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)) '@tailwindcss/forms': specifier: ^0.5.10 version: 0.5.11(tailwindcss@4.2.1) @@ -95,7 +95,7 @@ importers: version: 0.5.19(tailwindcss@4.2.1) '@tailwindcss/vite': specifier: ^4.1.18 - version: 4.2.1(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)) + version: 4.2.1(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)) '@tanstack/table-core': specifier: ^8.21.3 version: 8.21.3 @@ -104,7 +104,7 @@ importers: version: 1.5.6 bits-ui: specifier: ^2.14.4 - version: 2.16.2(@internationalized/date@3.11.0)(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6) + version: 2.16.2(@internationalized/date@3.11.0)(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6) clsx: specifier: ^2.1.1 version: 2.1.1 @@ -113,7 +113,7 @@ importers: version: 8.6.0(svelte@5.53.6) formsnap: specifier: ^2.0.1 - version: 2.0.1(svelte@5.53.6)(sveltekit-superforms@2.30.0(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)) + version: 2.0.1(svelte@5.53.6)(sveltekit-superforms@2.30.0(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)) layerchart: specifier: 2.0.0-next.43 version: 2.0.0-next.43(svelte@5.53.6) @@ -143,7 +143,7 @@ importers: version: 1.0.7(svelte@5.53.6) sveltekit-superforms: specifier: ^2.30.0 - version: 2.30.0(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3) + version: 2.30.0(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3) tailwind-merge: specifier: ^3.4.0 version: 3.5.0 @@ -167,10 +167,35 @@ importers: version: 1.0.0-next.7(svelte@5.53.6) vite: specifier: ^7.2.6 - version: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1) + version: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0) vitest: specifier: ^4.0.15 - version: 4.0.18(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1) + version: 4.0.18(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0) + + apps/processor: + dependencies: + '@hono/node-server': + specifier: ^1.19.9 + version: 1.19.9(hono@4.12.3) + '@pkg/logger': + specifier: workspace:* + version: link:../../packages/logger + '@pkg/logic': + specifier: workspace:* + version: link:../../packages/logic + hono: + specifier: ^4.11.1 + version: 4.12.3 + devDependencies: + '@types/node': + specifier: ^25.3.2 + version: 25.3.2 + tsx: + specifier: ^4.21.0 + version: 4.21.0 + typescript: + specifier: ^5.9.3 + version: 5.9.3 packages/db: dependencies: @@ -230,15 +255,24 @@ importers: '@hono/standard-validator': specifier: ^0.2.1 version: 0.2.2(@standard-schema/spec@1.1.0)(hono@4.12.3) + '@otplib/plugin-base32-scure': + specifier: ^13.3.0 + version: 13.3.0 + '@otplib/plugin-crypto-noble': + specifier: ^13.3.0 + version: 13.3.0 + '@otplib/totp': + specifier: ^13.3.0 + version: 13.3.0 '@pkg/db': specifier: workspace:* version: link:../db + '@pkg/keystore': + specifier: workspace:* + version: link:../redis '@pkg/logger': specifier: workspace:* version: link:../logger - '@pkg/redis': - specifier: workspace:* - version: link:../redis '@pkg/result': specifier: workspace:* version: link:../result @@ -253,7 +287,7 @@ importers: version: 0.43.1 better-auth: specifier: ^1.4.7 - version: 1.4.20(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(vitest@4.0.18(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)) + version: 1.4.20(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(vitest@4.0.18(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)) date-fns-tz: specifier: ^3.2.0 version: 3.2.0(date-fns@4.1.0) @@ -862,6 +896,12 @@ packages: '@hapi/topo@5.1.0': resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} + '@hono/node-server@1.19.9': + resolution: {integrity: sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==} + engines: {node: '>=18.14.1'} + peerDependencies: + hono: ^4 + '@hono/standard-validator@0.2.2': resolution: {integrity: sha512-mJ7W84Bt/rSvoIl63Ynew+UZOHAzzRAoAXb3JaWuxAkM/Lzg+ZHTCUiz77KOtn2e623WNN8LkD57Dk0szqUrIw==} peerDependencies: @@ -2919,6 +2959,11 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + tsx@4.21.0: + resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} + engines: {node: '>=18.0.0'} + hasBin: true + turbo-darwin-64@2.8.12: resolution: {integrity: sha512-EiHJmW2MeQQx+21x8hjMHw/uPhXt9PIxvDrxzOtyVwrXzL0tQmsxtO4qHf2l7uA+K6PUJ4+TjY1MHZDuCvWXrw==} cpu: [x64] @@ -3491,6 +3536,10 @@ snapshots: '@hapi/hoek': 9.3.0 optional: true + '@hono/node-server@1.19.9(hono@4.12.3)': + dependencies: + hono: 4.12.3 + '@hono/standard-validator@0.2.2(@standard-schema/spec@1.1.0)(hono@4.12.3)': dependencies: '@standard-schema/spec': 1.1.0 @@ -3743,19 +3792,19 @@ snapshots: dependencies: acorn: 8.16.0 - '@sveltejs/adapter-node@5.5.4(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)))': + '@sveltejs/adapter-node@5.5.4(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))': dependencies: '@rollup/plugin-commonjs': 29.0.0(rollup@4.59.0) '@rollup/plugin-json': 6.1.0(rollup@4.59.0) '@rollup/plugin-node-resolve': 16.0.3(rollup@4.59.0) - '@sveltejs/kit': 2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)) + '@sveltejs/kit': 2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)) rollup: 4.59.0 - '@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1))': + '@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0))': dependencies: '@standard-schema/spec': 1.1.0 '@sveltejs/acorn-typescript': 1.0.9(acorn@8.16.0) - '@sveltejs/vite-plugin-svelte': 6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)) + '@sveltejs/vite-plugin-svelte': 6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)) '@types/cookie': 0.6.0 acorn: 8.16.0 cookie: 0.6.0 @@ -3767,26 +3816,26 @@ snapshots: set-cookie-parser: 3.0.1 sirv: 3.0.2 svelte: 5.53.6 - vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1) + vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0) optionalDependencies: typescript: 5.9.3 - '@sveltejs/vite-plugin-svelte-inspector@5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1))': + '@sveltejs/vite-plugin-svelte-inspector@5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0))': dependencies: - '@sveltejs/vite-plugin-svelte': 6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)) + '@sveltejs/vite-plugin-svelte': 6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)) obug: 2.1.1 svelte: 5.53.6 - vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1) + vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0) - '@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1))': + '@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)) + '@sveltejs/vite-plugin-svelte-inspector': 5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)) deepmerge: 4.3.1 magic-string: 0.30.21 obug: 2.1.1 svelte: 5.53.6 - vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1) - vitefu: 1.1.2(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)) + vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0) + vitefu: 1.1.2(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)) '@swc/helpers@0.5.19': dependencies: @@ -3863,12 +3912,12 @@ snapshots: postcss-selector-parser: 6.0.10 tailwindcss: 4.2.1 - '@tailwindcss/vite@4.2.1(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1))': + '@tailwindcss/vite@4.2.1(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0))': dependencies: '@tailwindcss/node': 4.2.1 '@tailwindcss/oxide': 4.2.1 tailwindcss: 4.2.1 - vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1) + vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0) '@tanstack/query-core@5.90.20': {} @@ -3971,13 +4020,13 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.0.3 - '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1))': + '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0))': dependencies: '@vitest/spy': 4.0.18 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1) + vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0) '@vitest/pretty-format@4.0.18': dependencies: @@ -4049,7 +4098,7 @@ snapshots: base64-js@1.5.1: {} - better-auth@1.4.20(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(vitest@4.0.18(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)): + better-auth@1.4.20(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(vitest@4.0.18(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)): dependencies: '@better-auth/core': 1.4.20(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1) '@better-auth/telemetry': 1.4.20(@better-auth/core@1.4.20(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1)) @@ -4064,9 +4113,9 @@ snapshots: nanostores: 1.1.1 zod: 4.3.6 optionalDependencies: - '@sveltejs/kit': 2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)) + '@sveltejs/kit': 2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)) svelte: 5.53.6 - vitest: 4.0.18(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1) + vitest: 4.0.18(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0) better-call@1.1.8(zod@4.3.6): dependencies: @@ -4077,15 +4126,15 @@ snapshots: optionalDependencies: zod: 4.3.6 - bits-ui@2.16.2(@internationalized/date@3.11.0)(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6): + bits-ui@2.16.2(@internationalized/date@3.11.0)(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6): dependencies: '@floating-ui/core': 1.7.4 '@floating-ui/dom': 1.7.5 '@internationalized/date': 3.11.0 esm-env: 1.2.2 - runed: 0.35.1(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6) + runed: 0.35.1(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6) svelte: 5.53.6 - svelte-toolbelt: 0.10.6(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6) + svelte-toolbelt: 0.10.6(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6) tabbable: 6.4.0 transitivePeerDependencies: - '@sveltejs/kit' @@ -4524,11 +4573,11 @@ snapshots: unicode-properties: 1.4.1 unicode-trie: 2.0.0 - formsnap@2.0.1(svelte@5.53.6)(sveltekit-superforms@2.30.0(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)): + formsnap@2.0.1(svelte@5.53.6)(sveltekit-superforms@2.30.0(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)): dependencies: svelte: 5.53.6 svelte-toolbelt: 0.5.0(svelte@5.53.6) - sveltekit-superforms: 2.30.0(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3) + sveltekit-superforms: 2.30.0(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3) frac@1.1.2: {} @@ -5126,14 +5175,14 @@ snapshots: esm-env: 1.2.2 svelte: 5.53.6 - runed@0.35.1(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6): + runed@0.35.1(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6): dependencies: dequal: 2.0.3 esm-env: 1.2.2 lz-string: 1.5.0 svelte: 5.53.6 optionalDependencies: - '@sveltejs/kit': 2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)) + '@sveltejs/kit': 2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)) rw@1.3.3: {} @@ -5239,10 +5288,10 @@ snapshots: runed: 0.28.0(svelte@5.53.6) svelte: 5.53.6 - svelte-toolbelt@0.10.6(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6): + svelte-toolbelt@0.10.6(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6): dependencies: clsx: 2.1.1 - runed: 0.35.1(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6) + runed: 0.35.1(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6) style-to-object: 1.0.14 svelte: 5.53.6 transitivePeerDependencies: @@ -5287,9 +5336,9 @@ snapshots: magic-string: 0.30.21 zimmerframe: 1.1.4 - sveltekit-superforms@2.30.0(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3): + sveltekit-superforms@2.30.0(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3): dependencies: - '@sveltejs/kit': 2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)) + '@sveltejs/kit': 2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)) devalue: 5.6.3 memoize-weak: 1.0.2 svelte: 5.53.6 @@ -5369,6 +5418,13 @@ snapshots: tslib@2.8.1: {} + tsx@4.21.0: + dependencies: + esbuild: 0.27.3 + get-tsconfig: 4.13.6 + optionalDependencies: + fsevents: 2.3.3 + turbo-darwin-64@2.8.12: optional: true @@ -5456,7 +5512,7 @@ snapshots: svelte: 5.53.6 svelte-toolbelt: 0.7.1(svelte@5.53.6) - vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1): + vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0): dependencies: esbuild: 0.27.3 fdir: 6.5.0(picomatch@4.0.3) @@ -5469,15 +5525,16 @@ snapshots: fsevents: 2.3.3 jiti: 2.6.1 lightningcss: 1.31.1 + tsx: 4.21.0 - vitefu@1.1.2(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)): + vitefu@1.1.2(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)): optionalDependencies: - vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1) + vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0) - vitest@4.0.18(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1): + vitest@4.0.18(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0): dependencies: '@vitest/expect': 4.0.18 - '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)) + '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)) '@vitest/pretty-format': 4.0.18 '@vitest/runner': 4.0.18 '@vitest/snapshot': 4.0.18 @@ -5494,7 +5551,7 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1) + vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 25.3.2 diff --git a/scripts/migrate.sh b/scripts/migrate.sh index 14ee203..2b020c3 100755 --- a/scripts/migrate.sh +++ b/scripts/migrate.sh @@ -2,6 +2,6 @@ echo "🔄 Migrating Primary DB" cd packages/db -bun run db:migrate +pnpm run db:migrate cd ../../ diff --git a/scripts/prod.start.sh b/scripts/prod.start.sh index 622cd27..1504095 100755 --- a/scripts/prod.start.sh +++ b/scripts/prod.start.sh @@ -11,4 +11,4 @@ echo "Starting $APP_PATH" cd $APP_PATH -bun run prod +pnpm run prod