From 1d5eab6c637d53583a8083bbfd432f9cf3f83581 Mon Sep 17 00:00:00 2001
From: AF_Askar <68832286+abo3skr2019@users.noreply.github.com>
Date: Tue, 3 Feb 2026 10:48:11 +0300
Subject: [PATCH 01/12] starting migration
---
apps/tanstack-start/src/env.ts | 5 +++--
packages/auth/env.ts | 2 ++
packages/auth/package.json | 4 +---
3 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/apps/tanstack-start/src/env.ts b/apps/tanstack-start/src/env.ts
index 66f6f20..a2ff648 100644
--- a/apps/tanstack-start/src/env.ts
+++ b/apps/tanstack-start/src/env.ts
@@ -1,9 +1,8 @@
+import { authEnv } from "@governance/auth/env";
import { createEnv } from "@t3-oss/env-core";
import { vercel } from "@t3-oss/env-core/presets-zod";
import { z } from "zod/v4";
-import { authEnv } from "@governance/auth/env";
-
export const env = createEnv({
clientPrefix: "VITE_",
extends: [authEnv(), vercel()],
@@ -18,6 +17,8 @@ export const env = createEnv({
*/
server: {
POSTGRES_URL: z.url(),
+ WORKOS_API_KEY: z.string().min(1),
+ WORKOS_CLIENT_ID: z.string().min(1),
},
/**
diff --git a/packages/auth/env.ts b/packages/auth/env.ts
index 6b40d33..a516e85 100644
--- a/packages/auth/env.ts
+++ b/packages/auth/env.ts
@@ -8,6 +8,8 @@ export function authEnv() {
process.env.NODE_ENV === "production"
? z.string().min(1)
: z.string().min(1).optional(),
+ WORKOS_API_KEY: z.string().min(1),
+ WORKOS_CLIENT_ID: z.string().min(1),
NODE_ENV: z.enum(["development", "production"]).optional(),
},
runtimeEnv: process.env,
diff --git a/packages/auth/package.json b/packages/auth/package.json
index 7b30360..e38fcbd 100644
--- a/packages/auth/package.json
+++ b/packages/auth/package.json
@@ -13,17 +13,15 @@
"clean": "git clean -xdf .cache .turbo dist node_modules",
"format": "prettier --check . --ignore-path ../../.gitignore",
"lint": "eslint --flag unstable_native_nodejs_ts_config",
- "generate": "dotenv -e ../../.env -- pnpx @better-auth/cli generate --config script/auth-cli.ts --output ../db/src/auth-schema.ts",
"typecheck": "tsc --noEmit"
},
"dependencies": {
"@governance/db": "workspace:*",
"@t3-oss/env-core": "^0.13.8",
- "better-auth": "catalog:",
+ "@workos-inc/node": "^7.27.0",
"zod": "catalog:"
},
"devDependencies": {
- "@better-auth/cli": "catalog:",
"@governance/eslint-config": "workspace:*",
"@governance/prettier-config": "workspace:*",
"@governance/tsconfig": "workspace:*",
From 759a2117a92909840bcc029c2f98fe997538a24f Mon Sep 17 00:00:00 2001
From: AF_Askar <68832286+abo3skr2019@users.noreply.github.com>
Date: Tue, 3 Feb 2026 10:59:21 +0300
Subject: [PATCH 02/12] package
---
apps/tanstack-start/package.json | 1 +
pnpm-lock.yaml | 925 +++++++++++--------------------
2 files changed, 332 insertions(+), 594 deletions(-)
diff --git a/apps/tanstack-start/package.json b/apps/tanstack-start/package.json
index 4f8ceb5..0915a66 100644
--- a/apps/tanstack-start/package.json
+++ b/apps/tanstack-start/package.json
@@ -46,6 +46,7 @@
"@types/react": "catalog:react19",
"@types/react-dom": "catalog:react19",
"@vitejs/plugin-react": "catalog:",
+ "@workos/authkit-tanstack-react-start": "^0.5.0",
"eslint": "catalog:",
"prettier": "catalog:",
"tailwindcss": "catalog:",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 7eb1ba1..8270123 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -6,9 +6,6 @@ settings:
catalogs:
default:
- '@better-auth/cli':
- specifier: 1.4.0-beta.9
- version: 1.4.0-beta.9
'@eslint/js':
specifier: ^9.38.0
version: 9.38.0
@@ -195,6 +192,9 @@ importers:
'@vitejs/plugin-react':
specifier: 'catalog:'
version: 5.1.0(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))
+ '@workos/authkit-tanstack-react-start':
+ specifier: ^0.5.0
+ version: 0.5.0(@tanstack/react-router@1.135.2(react-dom@19.1.4(react@19.1.4))(react@19.1.4))(@tanstack/react-start@1.135.2(crossws@0.4.1(srvx@0.9.6))(react-dom@19.1.4(react@19.1.4))(react@19.1.4)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(react-dom@19.1.4(react@19.1.4))(react@19.1.4)
eslint:
specifier: 'catalog:'
version: 9.38.0(jiti@2.6.1)
@@ -262,16 +262,13 @@ importers:
'@t3-oss/env-core':
specifier: ^0.13.8
version: 0.13.8(arktype@2.1.20)(typescript@5.9.3)(valibot@1.0.0-beta.15(typescript@5.9.3))(zod@4.1.12)
- better-auth:
- specifier: 'catalog:'
- version: 1.4.0-beta.9(better-sqlite3@12.2.0)(react@19.2.3)
+ '@workos-inc/node':
+ specifier: ^7.27.0
+ version: 7.82.0
zod:
specifier: 'catalog:'
version: 4.1.12
devDependencies:
- '@better-auth/cli':
- specifier: 'catalog:'
- version: 1.4.0-beta.9(@neondatabase/serverless@0.10.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(@types/pg@8.11.10)(@types/react@19.1.12)(@vercel/postgres@0.10.0(utf-8-validate@6.0.4))(kysely@0.28.5)(mysql2@3.11.3)(postgres@3.4.4)(react@19.2.3)
'@governance/eslint-config':
specifier: workspace:*
version: link:../../tooling/eslint
@@ -629,18 +626,6 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-react-display-name@7.28.0':
- resolution: {integrity: sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-react-jsx-development@7.27.1':
- resolution: {integrity: sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
'@babel/plugin-transform-react-jsx-self@7.27.1':
resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==}
engines: {node: '>=6.9.0'}
@@ -653,30 +638,12 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-react-jsx@7.27.1':
- resolution: {integrity: sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-react-pure-annotations@7.27.1':
- resolution: {integrity: sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
'@babel/plugin-transform-typescript@7.28.5':
resolution: {integrity: sha512-x2Qa+v/CuEoX7Dr31iAfr0IhInrVOWZU/2vJMJ00FOR/2nM0BcBEclpaf9sWCDc+v5e9dMrhSH8/atq/kX7+bA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/preset-react@7.27.1':
- resolution: {integrity: sha512-oJHWh2gLhU9dW9HHr42q0cI0/iHHXTLGe39qvpAZZzagHy0MzYLCnCVV0symeRvzmjHyVU7mw2K06E6u/JwbhA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
'@babel/preset-typescript@7.28.5':
resolution: {integrity: sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==}
engines: {node: '>=6.9.0'}
@@ -699,10 +666,6 @@ packages:
resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==}
engines: {node: '>=6.9.0'}
- '@better-auth/cli@1.4.0-beta.9':
- resolution: {integrity: sha512-N7poVoYqC+pj4oUabUQN3qz+vnHJEOArPcm00qf9qRJJEGhOa252NX34/utvtfsnvvyXWE7n2U6WQz1lf6JH1w==}
- hasBin: true
-
'@better-auth/core@1.4.0-beta.9':
resolution: {integrity: sha512-4YanGHTihKhKamN2T4ndjYTR5By162kk88DPt2xwwVc2t/MnSO7TiVBB0V5gZ6JM6YMX2aSPTfMbk89AEjpvCQ==}
peerDependencies:
@@ -725,24 +688,6 @@ packages:
'@better-fetch/fetch@1.1.18':
resolution: {integrity: sha512-rEFOE1MYIsBmoMJtQbl32PGHHXuG2hDxvEd7rUHE0vCBoFQVSDqaVs9hkZEtHCxRoY+CljXKFCOuJ8uxqw1LcA==}
- '@chevrotain/cst-dts-gen@10.5.0':
- resolution: {integrity: sha512-lhmC/FyqQ2o7pGK4Om+hzuDrm9rhFYIJ/AXoQBeongmn870Xeb0L6oGEiuR8nohFNL5sMaQEJWCxr1oIVIVXrw==}
-
- '@chevrotain/gast@10.5.0':
- resolution: {integrity: sha512-pXdMJ9XeDAbgOWKuD1Fldz4ieCs6+nLNmyVhe2gZVqoO7v8HXuHYs5OV2EzUtbuai37TlOAQHrTDvxMnvMJz3A==}
-
- '@chevrotain/types@10.5.0':
- resolution: {integrity: sha512-f1MAia0x/pAVPWH/T73BJVyO2XU5tI4/iE7cnxb7tqdNTNhQI3Uq3XkqcoteTmD4t1aM0LbHCJOhgIDn07kl2A==}
-
- '@chevrotain/utils@10.5.0':
- resolution: {integrity: sha512-hBzuU5+JjB2cqNZyszkDHZgOSrUUT8V3dhgRl8Q9Gp6dAj/H5+KILGjbhDpc3Iy9qmqlm/akuOI2ut9VUtzJxQ==}
-
- '@clack/core@0.5.0':
- resolution: {integrity: sha512-p3y0FIOwaYRUPRcMO7+dlmLh8PSRcrjuTndsiA0WAFbWES0mLZlrjVoBRZ9DzkPFJZG6KGkJmoEAY0ZcVWTkow==}
-
- '@clack/prompts@0.11.0':
- resolution: {integrity: sha512-pMN5FcrEw9hUkZA4f+zLlzivQSeQf5dRGJjSUbvVYDLvpKCdQx5OaknvKzgbtXOizhP+SJJJjqEbOe55uKKfAw==}
-
'@cspotcode/source-map-support@0.8.1':
resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
engines: {node: '>=12'}
@@ -761,9 +706,11 @@ packages:
'@esbuild-kit/core-utils@3.3.2':
resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==}
+ deprecated: 'Merged into tsx: https://tsx.is'
'@esbuild-kit/esm-loader@2.6.5':
resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==}
+ deprecated: 'Merged into tsx: https://tsx.is'
'@esbuild/aix-ppc64@0.25.11':
resolution: {integrity: sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==}
@@ -1192,10 +1139,6 @@ packages:
'@levischuck/tiny-cbor@0.2.11':
resolution: {integrity: sha512-llBRm4dT4Z89aRsm6u2oEZ8tfwL/2l6BwpZ7JcyieouniDECM5AqNgr/y08zalEIvW3RSK4upYyybDcmjXqAow==}
- '@mrleebo/prisma-ast@0.13.0':
- resolution: {integrity: sha512-VxS+okLpNp6YUDLz3rAXv6sE8G4W5cX039bumkPub65xRr9BFxjHaT5ebX4DsiixIGaBwitjWTvx3mAbyI2EUQ==}
- engines: {node: '>=16'}
-
'@napi-rs/wasm-runtime@0.2.12':
resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==}
@@ -1536,6 +1479,14 @@ packages:
'@peculiar/asn1-x509@2.4.0':
resolution: {integrity: sha512-F7mIZY2Eao2TaoVqigGMLv+NDdpwuBKU1fucHPONfzaBS4JXXCNCmfO0Z3dsy7JzKGqtDcYC1mr9JjaZQZNiuw==}
+ '@peculiar/json-schema@1.1.12':
+ resolution: {integrity: sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==}
+ engines: {node: '>=8.0.0'}
+
+ '@peculiar/webcrypto@1.5.0':
+ resolution: {integrity: sha512-BRs5XUAwiyCDQMsVA9IDvDa7UBR9gAvPHgugOeGng3YN6vJ9JYonyDc0lNczErgtCWtucjR5N7VtaonboD/ezg==}
+ engines: {node: '>=10.12.0'}
+
'@petamoriken/float16@3.9.3':
resolution: {integrity: sha512-8awtpHXCx/bNpFt4mt2xdkgtgVvKqty8VbjHI/WWWQuEw+KLzFot3f4+LkQY9YmOtq7A5GdOnqoIC8Pdygjk2g==}
@@ -2730,6 +2681,9 @@ packages:
'@tybys/wasm-util@0.10.1':
resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==}
+ '@types/accepts@1.3.7':
+ resolution: {integrity: sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==}
+
'@types/babel__core@7.20.5':
resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
@@ -2745,12 +2699,39 @@ packages:
'@types/better-sqlite3@7.6.13':
resolution: {integrity: sha512-NMv9ASNARoKksWtsq/SHakpYAYnhBrQgGD8zkLYk/jaK8jUGn08CfEdTRgYhMypUQAfzSP8W6gNLe0q19/t4VA==}
+ '@types/body-parser@1.19.6':
+ resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/content-disposition@0.5.9':
+ resolution: {integrity: sha512-8uYXI3Gw35MhiVYhG3s295oihrxRyytcRHjSjqnqZVDDy/xcGBRny7+Xj1Wgfhv5QzRtN2hB2dVRBUX9XW3UcQ==}
+
+ '@types/cookie@0.5.4':
+ resolution: {integrity: sha512-7z/eR6O859gyWIAjuvBWFzNURmf2oPBmJlfVWkwehU5nzIyjwBsTh7WMmEEV4JFnHuQ3ex4oyTvfKzcyJVDBNA==}
+
+ '@types/cookies@0.9.2':
+ resolution: {integrity: sha512-1AvkDdZM2dbyFybL4fxpuNCaWyv//0AwsuUk2DWeXyM1/5ZKm6W3z6mQi24RZ4l2ucY+bkSHzbDVpySqPGuV8A==}
+
'@types/estree@1.0.8':
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+ '@types/express-serve-static-core@4.19.8':
+ resolution: {integrity: sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA==}
+
+ '@types/express@4.17.25':
+ resolution: {integrity: sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==}
+
'@types/glob@7.2.0':
resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==}
+ '@types/http-assert@1.5.6':
+ resolution: {integrity: sha512-TTEwmtjgVbYAzZYWyeHPrrtWnfVkm8tQkP8P21uQifPgMRgjrow3XDEYqucuC8SKZJT7pUnhU/JymvjggxO9vw==}
+
+ '@types/http-errors@2.0.5':
+ resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==}
+
'@types/inquirer@6.5.0':
resolution: {integrity: sha512-rjaYQ9b9y/VFGOpqBEXRavc3jh0a+e6evAbI31tMda8VlPaSy0AZJfXsvmIe3wklc7W6C3zCSfleuMXR7NOyXw==}
@@ -2760,9 +2741,24 @@ packages:
'@types/json5@0.0.29':
resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+ '@types/keygrip@1.0.6':
+ resolution: {integrity: sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ==}
+
+ '@types/koa-compose@3.2.9':
+ resolution: {integrity: sha512-BroAZ9FTvPiCy0Pi8tjD1OfJ7bgU1gQf0eR6e1Vm+JJATy9eKOG3hQMFtMciMawiSOVnLMdmUOC46s7HBhSTsA==}
+
+ '@types/koa@2.15.0':
+ resolution: {integrity: sha512-7QFsywoE5URbuVnG3loe03QXuGajrnotr3gQkXcEBShORai23MePfFYdhz90FEtBBpkyIYQbVD+evKtloCgX3g==}
+
+ '@types/mime@1.3.5':
+ resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==}
+
'@types/minimatch@5.1.2':
resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==}
+ '@types/node@17.0.45':
+ resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==}
+
'@types/node@20.19.30':
resolution: {integrity: sha512-WJtwWJu7UdlvzEAUm484QNg5eAoq5QR08KDNx7g45Usrs2NtOPiX8ugDqmKdXkyL03rBqU5dYNYVQetEpBHq2g==}
@@ -2778,8 +2774,11 @@ packages:
'@types/pg@8.11.6':
resolution: {integrity: sha512-/2WmmBXHLsfRqzfHW7BNZ8SbYzE8OSk7i3WjFYvfgRHj7S1xj+16Je5fUKv3lVdVzk/zn9TXOqf+avFCFIE0yQ==}
- '@types/prompts@2.4.9':
- resolution: {integrity: sha512-qTxFi6Buiu8+50/+3DGIWLHM6QuWsEKugJnnP6iv2Mc4ncxE4A/OJkjuVOA+5X0X1S/nq5VJRa8Lu+nwcvbrKA==}
+ '@types/qs@6.14.0':
+ resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==}
+
+ '@types/range-parser@1.2.7':
+ resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==}
'@types/react-dom@19.1.9':
resolution: {integrity: sha512-qXRuZaOsAdXKFyOhRBg6Lqqc0yay13vN7KrIg4L7N4aaHN68ma9OK3NE1BoDFgFOTfM7zg+3/8+2n8rLUH3OKQ==}
@@ -2789,6 +2788,15 @@ packages:
'@types/react@19.1.12':
resolution: {integrity: sha512-cMoR+FoAf/Jyq6+Df2/Z41jISvGZZ2eTlnsaJRptmZ76Caldwy1odD4xTr/gNV9VLj0AWgg/nmkevIyUfIIq5w==}
+ '@types/send@0.17.6':
+ resolution: {integrity: sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==}
+
+ '@types/send@1.2.1':
+ resolution: {integrity: sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==}
+
+ '@types/serve-static@1.15.10':
+ resolution: {integrity: sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==}
+
'@types/through@0.0.33':
resolution: {integrity: sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==}
@@ -2857,6 +2865,7 @@ packages:
'@vercel/postgres@0.10.0':
resolution: {integrity: sha512-fSD23DxGND40IzSkXjcFcxr53t3Tiym59Is0jSYIFpG4/0f0KO9SGtcp1sXiebvPaGe7N/tU05cH4yt2S6/IPg==}
engines: {node: '>=18.14'}
+ deprecated: '@vercel/postgres is deprecated. You can either choose an alternate storage solution from the Vercel Marketplace if you want to set up a new database. Or you can follow this guide to migrate your existing Vercel Postgres db: https://neon.com/docs/guides/vercel-postgres-transition-guide'
'@vitejs/plugin-react@5.1.0':
resolution: {integrity: sha512-4LuWrg7EKWgQaMJfnN+wcmbAW+VSsCmqGohftWjuct47bv8uE4n/nPpq4XjJPsxgq00GGG5J8dvBczp8uxScew==}
@@ -2879,6 +2888,27 @@ packages:
'@vue/shared@3.5.16':
resolution: {integrity: sha512-c/0fWy3Jw6Z8L9FmTyYfkpM5zklnqqa9+a6dz3DvONRKW2NEbh46BP0FHuLFSWi2TnQEtp91Z6zOWNrU6QiyPg==}
+ '@workos-inc/node@7.82.0':
+ resolution: {integrity: sha512-8h6XjIJf8nqNGYQMkWsjZ72WXMtzqrb4Azz39schXWoSRmwoK6tK+GpeAviJ9slddiJdOcp0Ht9/r+L6pGQMCg==}
+ engines: {node: '>=16'}
+
+ '@workos-inc/node@8.0.0':
+ resolution: {integrity: sha512-D8VDfx0GXeiVm8vccAl0rElW7taebRnrteKPJzZwehwzI9W/Usa4qKfmwxj+7Lh1Z1deEocDRCpZpV7ml4GpWQ==}
+ engines: {node: '>=20.15.0'}
+
+ '@workos/authkit-session@0.3.4':
+ resolution: {integrity: sha512-lbLP1y8MHWL1Op9athZ3SrzKLcL0+xBVpADCMQLI39mPgSQj+/lopVdOx0Cku96hYnJBOJTLVTK3Zox4FbZl4A==}
+ engines: {node: '>=20.0.0'}
+
+ '@workos/authkit-tanstack-react-start@0.5.0':
+ resolution: {integrity: sha512-W2Ot5QJLj1Kw2uzbs7VJk2vbkvwDXW9w7wLBFgUdmeu7JDmbW5VkI8tw4IU0fbA1PMBEt9ecj+h//B/BbKrPFg==}
+ engines: {node: '>=20.0.0'}
+ peerDependencies:
+ '@tanstack/react-router': '>=1.0.0'
+ '@tanstack/react-start': '>=1.0.0'
+ react: ^18.0 || ^19.0
+ react-dom: ^18.0 || ^19.0
+
acorn-jsx@5.3.2:
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies:
@@ -3106,22 +3136,13 @@ packages:
buffer@5.7.1:
resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
bufferutil@4.0.8:
resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
engines: {node: '>=6.14.2'}
- bundle-name@4.1.0:
- resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==}
- engines: {node: '>=18'}
-
- c12@3.2.0:
- resolution: {integrity: sha512-ixkEtbYafL56E6HiFuonMm1ZjoKtIo7TH68/uiEq4DAwv9NcUX2nJ95F8TrbMeNjqIkZpruo3ojXQJ+MGG5gcQ==}
- peerDependencies:
- magicast: ^0.3.5
- peerDependenciesMeta:
- magicast:
- optional: true
-
call-bind-apply-helpers@1.0.2:
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
engines: {node: '>= 0.4'}
@@ -3156,10 +3177,6 @@ packages:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
engines: {node: '>=10'}
- chalk@5.6.2:
- resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==}
- engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
-
change-case@3.1.0:
resolution: {integrity: sha512-2AZp7uJZbYEzRPsFoa+ijKdvp9zsrnnt6+yFokfwEpeJm0xuJDVoxiRCAaTzyJND8GJkofo2IcKWaUZ/OECVzw==}
@@ -3176,9 +3193,6 @@ packages:
resolution: {integrity: sha512-IkxPpb5rS/d1IiLbHMgfPuS0FgiWTtFIm/Nj+2woXDLTZ7fOT2eqzgYbdMlLweqlHbsZjxEChoVK+7iph7jyQg==}
engines: {node: '>=20.18.1'}
- chevrotain@10.5.0:
- resolution: {integrity: sha512-Pkv5rBY3+CsHOYfV5g/Vs5JY9WTHHDEKOlohI2XeygaZhUeqhAlldZ8Hz9cRmxu709bvS08YzxHdTPHhffc13A==}
-
chokidar@3.6.0:
resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
engines: {node: '>= 8.10.0'}
@@ -3190,9 +3204,6 @@ packages:
chownr@1.1.4:
resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
- citty@0.1.6:
- resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==}
-
class-variance-authority@0.7.1:
resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==}
@@ -3237,19 +3248,12 @@ packages:
resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==}
engines: {node: '>=14'}
- commander@12.1.0:
- resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==}
- engines: {node: '>=18'}
-
commander@2.20.3:
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
- confbox@0.2.2:
- resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==}
-
consola@3.4.2:
resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==}
engines: {node: ^14.18.0 || >=16.10.0}
@@ -3266,6 +3270,10 @@ packages:
cookie-es@2.0.0:
resolution: {integrity: sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg==}
+ cookie@0.5.0:
+ resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
+ engines: {node: '>= 0.6'}
+
copy-anything@4.0.5:
resolution: {integrity: sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==}
engines: {node: '>=18'}
@@ -3371,14 +3379,6 @@ packages:
deep-is@0.1.4:
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
- default-browser-id@5.0.0:
- resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==}
- engines: {node: '>=18'}
-
- default-browser@5.2.1:
- resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==}
- engines: {node: '>=18'}
-
defaults@1.0.4:
resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
@@ -3386,10 +3386,6 @@ packages:
resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
engines: {node: '>= 0.4'}
- define-lazy-prop@3.0.0:
- resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==}
- engines: {node: '>=12'}
-
define-properties@1.2.1:
resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
engines: {node: '>= 0.4'}
@@ -3409,9 +3405,6 @@ packages:
resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==}
engines: {node: '>=0.10'}
- destr@2.0.5:
- resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==}
-
detect-libc@2.1.2:
resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
engines: {node: '>=8'}
@@ -3478,95 +3471,6 @@ packages:
resolution: {integrity: sha512-+CHgPFzuoTQTt7cOYCV6MOw2w8vqEn/ap1yv4bpZOWL03u7rlVRQhUY0WYT3rHsgVTXwYQDZaSUJSQrMBUKuWg==}
hasBin: true
- drizzle-orm@0.33.0:
- resolution: {integrity: sha512-SHy72R2Rdkz0LEq0PSG/IdvnT3nGiWuRk+2tXZQ90GVq/XQhpCzu/EFT3V2rox+w8MlkBQxifF8pCStNYnERfA==}
- peerDependencies:
- '@aws-sdk/client-rds-data': '>=3'
- '@cloudflare/workers-types': '>=3'
- '@electric-sql/pglite': '>=0.1.1'
- '@libsql/client': '*'
- '@neondatabase/serverless': '>=0.1'
- '@op-engineering/op-sqlite': '>=2'
- '@opentelemetry/api': ^1.4.1
- '@planetscale/database': '>=1'
- '@prisma/client': '*'
- '@tidbcloud/serverless': '*'
- '@types/better-sqlite3': '*'
- '@types/pg': '*'
- '@types/react': '>=18'
- '@types/sql.js': '*'
- '@vercel/postgres': '>=0.8.0'
- '@xata.io/client': '*'
- better-sqlite3: '>=7'
- bun-types: '*'
- expo-sqlite: '>=13.2.0'
- knex: '*'
- kysely: '*'
- mysql2: '>=2'
- pg: '>=8'
- postgres: '>=3'
- prisma: '*'
- react: '>=18'
- sql.js: '>=1'
- sqlite3: '>=5'
- peerDependenciesMeta:
- '@aws-sdk/client-rds-data':
- optional: true
- '@cloudflare/workers-types':
- optional: true
- '@electric-sql/pglite':
- optional: true
- '@libsql/client':
- optional: true
- '@neondatabase/serverless':
- optional: true
- '@op-engineering/op-sqlite':
- optional: true
- '@opentelemetry/api':
- optional: true
- '@planetscale/database':
- optional: true
- '@prisma/client':
- optional: true
- '@tidbcloud/serverless':
- optional: true
- '@types/better-sqlite3':
- optional: true
- '@types/pg':
- optional: true
- '@types/react':
- optional: true
- '@types/sql.js':
- optional: true
- '@vercel/postgres':
- optional: true
- '@xata.io/client':
- optional: true
- better-sqlite3:
- optional: true
- bun-types:
- optional: true
- expo-sqlite:
- optional: true
- knex:
- optional: true
- kysely:
- optional: true
- mysql2:
- optional: true
- pg:
- optional: true
- postgres:
- optional: true
- prisma:
- optional: true
- react:
- optional: true
- sql.js:
- optional: true
- sqlite3:
- optional: true
-
drizzle-orm@0.44.7:
resolution: {integrity: sha512-quIpnYznjU9lHshEOAYLoZ9s3jweleHlZIAWR/jX9gAWNg/JhQ1wj0KGRf7/Zm+obRrYd9GjPVJg790QY9N5AQ==}
peerDependencies:
@@ -4013,10 +3917,6 @@ packages:
resolution: {integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==}
engines: {node: '>= 14'}
- giget@2.0.0:
- resolution: {integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==}
- hasBin: true
-
github-from-package@0.0.0:
resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==}
@@ -4030,6 +3930,7 @@ packages:
glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
globals@14.0.0:
resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
@@ -4180,6 +4081,7 @@ packages:
inflight@1.0.6:
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
@@ -4203,6 +4105,27 @@ packages:
resolution: {integrity: sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==}
engines: {node: '>= 12'}
+ iron-session@6.3.1:
+ resolution: {integrity: sha512-3UJ7y2vk/WomAtEySmPgM6qtYF1cZ3tXuWX5GsVX4PJXAcs5y/sV9HuSfpjKS6HkTL/OhZcTDWJNLZ7w+Erx3A==}
+ engines: {node: '>=12'}
+ peerDependencies:
+ express: '>=4'
+ koa: '>=2'
+ next: '>=10'
+ peerDependenciesMeta:
+ express:
+ optional: true
+ koa:
+ optional: true
+ next:
+ optional: true
+
+ iron-webcrypto@0.2.8:
+ resolution: {integrity: sha512-YPdCvjFMOBjXaYuDj5tiHst5CEk6Xw84Jo8Y2+jzhMceclAnb3+vNPP/CTtb5fO2ZEuXEaO4N+w62Vfko757KA==}
+
+ iron-webcrypto@2.0.0:
+ resolution: {integrity: sha512-rtffZKDUHciZElM8mjFCufBC7nVhCxHYyWHESqs89OioEDz4parOofd8/uhrejh/INhQFfYQfByS22LlezR9sQ==}
+
is-array-buffer@3.0.5:
resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==}
engines: {node: '>= 0.4'}
@@ -4239,11 +4162,6 @@ packages:
resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==}
engines: {node: '>= 0.4'}
- is-docker@3.0.0:
- resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- hasBin: true
-
is-extglob@2.1.1:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'}
@@ -4264,11 +4182,6 @@ packages:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines: {node: '>=0.10.0'}
- is-inside-container@1.0.0:
- resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
- engines: {node: '>=14.16'}
- hasBin: true
-
is-interactive@1.0.0:
resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==}
engines: {node: '>=8'}
@@ -4354,10 +4267,6 @@ packages:
resolution: {integrity: sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==}
engines: {node: '>=18'}
- is-wsl@3.1.0:
- resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==}
- engines: {node: '>=16'}
-
isarray@2.0.5:
resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
@@ -4384,9 +4293,15 @@ packages:
resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
hasBin: true
+ jose@5.6.3:
+ resolution: {integrity: sha512-1Jh//hEEwMhNYPDDLwXHa2ePWgWiFNNUadVmguAAw2IJ6sj9mNxV5tGXJNqlMkJAybF6Lgw1mISDxTePP/187g==}
+
jose@6.1.0:
resolution: {integrity: sha512-TTQJyoEoKcC1lscpVDCSsVgYzUDg/0Bt3WE//WiTPK6uOCQC2KZS4MpugbMWt/zyjkopgZoXhZuCi00gLudfUA==}
+ jose@6.1.3:
+ resolution: {integrity: sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==}
+
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
@@ -4431,10 +4346,6 @@ packages:
keyv@4.5.4:
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
- kleur@3.0.3:
- resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
- engines: {node: '>=6'}
-
kysely@0.28.5:
resolution: {integrity: sha512-rlB0I/c6FBDWPcQoDtkxi9zIvpmnV5xoIalfCMSMCa7nuA6VGA3F54TW9mEgX4DVf10sXAWCF5fDbamI/5ZpKA==}
engines: {node: '>=20.0.0'}
@@ -4446,6 +4357,9 @@ packages:
resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==}
engines: {node: '>=0.10'}
+ leb@1.0.0:
+ resolution: {integrity: sha512-Y3c3QZfvKWHX60BVOQPhLCvVGmDYWyJEiINE3drOog6KCyN2AOwvuQQzlS3uJg1J85kzpILXIUwRXULWavir+w==}
+
levn@0.4.1:
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
engines: {node: '>= 0.8.0'}
@@ -4514,16 +4428,13 @@ packages:
resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==}
engines: {node: '>= 12.0.0'}
- lilconfig@2.1.0:
- resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
- engines: {node: '>=10'}
-
locate-path@6.0.0:
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
engines: {node: '>=10'}
lodash.get@4.4.2:
resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==}
+ deprecated: This package is deprecated. Use the optional chaining (?.) operator instead.
lodash.merge@4.6.2:
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
@@ -4674,9 +4585,6 @@ packages:
resolution: {integrity: sha512-DSmt0OEcLoK4i3NuscSbGjOf3bqiDEutejqENSplMSFA/gmB8mkED9G4pKWnPl7MDU4rSHebKPHeitpDfyH0cQ==}
engines: {node: '>=10'}
- node-fetch-native@1.6.7:
- resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==}
-
node-gyp-build@4.8.4:
resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==}
hasBin: true
@@ -4699,11 +4607,6 @@ packages:
nth-check@2.1.1:
resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
- nypm@0.6.1:
- resolution: {integrity: sha512-hlacBiRiv1k9hZFiphPUkfSQ/ZfQzZDzC+8z0wL3lvDAOUu/2NnChkKuMoMjNur/9OpKuz2QsIeiPVN0xM5Q0w==}
- engines: {node: ^14.16.0 || >=16.10.0}
- hasBin: true
-
object-assign@4.1.1:
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
engines: {node: '>=0.10.0'}
@@ -4752,10 +4655,6 @@ packages:
resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
engines: {node: '>=6'}
- open@10.2.0:
- resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==}
- engines: {node: '>=18'}
-
optionator@0.9.4:
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
engines: {node: '>= 0.8.0'}
@@ -4852,9 +4751,6 @@ packages:
pathe@2.0.3:
resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
- perfect-debounce@1.0.0:
- resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==}
-
pg-int8@1.0.1:
resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==}
engines: {node: '>=4.0.0'}
@@ -4884,9 +4780,6 @@ packages:
resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
engines: {node: '>=12'}
- pkg-types@2.3.0:
- resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==}
-
possible-typed-array-names@1.0.0:
resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==}
engines: {node: '>= 0.4'}
@@ -4998,10 +4891,6 @@ packages:
engines: {node: '>=16.13'}
hasBin: true
- prompts@2.4.2:
- resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
- engines: {node: '>= 6'}
-
prop-types@15.8.1:
resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
@@ -5026,6 +4915,10 @@ packages:
resolution: {integrity: sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==}
engines: {node: '>=6.0.0'}
+ qs@6.14.1:
+ resolution: {integrity: sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==}
+ engines: {node: '>=0.6'}
+
queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
@@ -5042,9 +4935,6 @@ packages:
'@types/react-dom':
optional: true
- rc9@2.1.2:
- resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==}
-
rc@1.2.8:
resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
hasBin: true
@@ -5100,10 +4990,6 @@ packages:
resolution: {integrity: sha512-DHINL3PAmPUiK1uszfbKiXqfE03eszdt5BpVSuEAHb5nfmNPwnsy7g39h2t8aXFc/Bv99GH81s+j8dobtD+jOw==}
engines: {node: '>=0.10.0'}
- react@19.2.3:
- resolution: {integrity: sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==}
- engines: {node: '>=0.10.0'}
-
readable-stream@3.6.2:
resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
engines: {node: '>= 6'}
@@ -5124,9 +5010,6 @@ packages:
resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==}
engines: {node: '>= 0.4'}
- regexp-to-ast@0.5.0:
- resolution: {integrity: sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw==}
-
regexp.prototype.flags@1.5.4:
resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==}
engines: {node: '>= 0.4'}
@@ -5164,6 +5047,7 @@ packages:
rimraf@3.0.2:
resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
+ deprecated: Rimraf versions prior to v4 are no longer supported
hasBin: true
rollup@4.52.5:
@@ -5177,10 +5061,6 @@ packages:
rou3@0.7.10:
resolution: {integrity: sha512-aoFj6f7MJZ5muJ+Of79nrhs9N3oLGqi2VEMe94Zbkjb6Wupha46EuoYgpWSOZlXww3bbd8ojgXTAA2mzimX5Ww==}
- run-applescript@7.0.0:
- resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==}
- engines: {node: '>=18'}
-
run-async@2.4.1:
resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==}
engines: {node: '>=0.12.0'}
@@ -5301,9 +5181,6 @@ packages:
simple-get@4.0.1:
resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==}
- sisteransi@1.0.5:
- resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
-
slash@3.0.0:
resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
engines: {node: '>=8'}
@@ -5471,12 +5348,6 @@ packages:
tinycolor2@1.6.0:
resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==}
- tinyexec@0.3.2:
- resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
-
- tinyexec@1.0.1:
- resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==}
-
tinyglobby@0.2.15:
resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
engines: {node: '>=12.0.0'}
@@ -5620,6 +5491,10 @@ packages:
engines: {node: '>=0.8.0'}
hasBin: true
+ uint8array-extras@1.5.0:
+ resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==}
+ engines: {node: '>=18'}
+
unbox-primitive@1.1.0:
resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==}
engines: {node: '>= 0.4'}
@@ -5846,6 +5721,9 @@ packages:
wcwidth@1.0.1:
resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
+ webcrypto-core@1.8.1:
+ resolution: {integrity: sha512-P+x1MvlNCXlKbLSOY4cYrdreqPG5hbzkmawbcXLKN/mf6DZW0SdNNkZ+sjwsqVkI4A4Ko2sPZmkZtCKY58w83A==}
+
webpack-virtual-modules@0.6.2:
resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
@@ -5909,10 +5787,6 @@ packages:
utf-8-validate:
optional: true
- wsl-utils@0.1.0:
- resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==}
- engines: {node: '>=18'}
-
xmlbuilder2@3.1.1:
resolution: {integrity: sha512-WCSfbfZnQDdLQLiMdGUQpMxxckeQ4oZNMNhLVkcekTu7xhD4tuUDyAPoY8CwXvBYE6LwBHd6QW2WZXlOWr1vCw==}
engines: {node: '>=12.0'}
@@ -5933,14 +5807,6 @@ packages:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
- yocto-spinner@0.2.3:
- resolution: {integrity: sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ==}
- engines: {node: '>=18.19'}
-
- yoctocolors@2.1.2:
- resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==}
- engines: {node: '>=18'}
-
zod-validation-error@4.0.2:
resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==}
engines: {node: '>=18.0.0'}
@@ -6112,18 +5978,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-react-display-name@7.28.0(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.5)
- transitivePeerDependencies:
- - supports-color
-
'@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.5)':
dependencies:
'@babel/core': 7.28.5
@@ -6134,23 +5988,6 @@ snapshots:
'@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-annotate-as-pure': 7.27.3
- '@babel/helper-module-imports': 7.27.1
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5)
- '@babel/types': 7.28.5
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-annotate-as-pure': 7.27.3
- '@babel/helper-plugin-utils': 7.27.1
-
'@babel/plugin-transform-typescript@7.28.5(@babel/core@7.28.5)':
dependencies:
'@babel/core': 7.28.5
@@ -6162,18 +5999,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@babel/preset-react@7.27.1(@babel/core@7.28.5)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/helper-validator-option': 7.27.1
- '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.28.5)
- '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.28.5)
- '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.28.5)
- transitivePeerDependencies:
- - supports-color
-
'@babel/preset-typescript@7.28.5(@babel/core@7.28.5)':
dependencies:
'@babel/core': 7.28.5
@@ -6212,69 +6037,6 @@ snapshots:
'@babel/helper-string-parser': 7.27.1
'@babel/helper-validator-identifier': 7.28.5
- '@better-auth/cli@1.4.0-beta.9(@neondatabase/serverless@0.10.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(@types/pg@8.11.10)(@types/react@19.1.12)(@vercel/postgres@0.10.0(utf-8-validate@6.0.4))(kysely@0.28.5)(mysql2@3.11.3)(postgres@3.4.4)(react@19.2.3)':
- dependencies:
- '@babel/core': 7.28.5
- '@babel/preset-react': 7.27.1(@babel/core@7.28.5)
- '@babel/preset-typescript': 7.28.5(@babel/core@7.28.5)
- '@better-auth/utils': 0.3.0
- '@clack/prompts': 0.11.0
- '@mrleebo/prisma-ast': 0.13.0
- '@prisma/client': 5.22.0(prisma@5.22.0)
- '@types/better-sqlite3': 7.6.13
- '@types/prompts': 2.4.9
- better-auth: 1.4.0-beta.9(better-sqlite3@12.2.0)(react@19.2.3)
- better-sqlite3: 12.2.0
- c12: 3.2.0
- chalk: 5.6.2
- commander: 12.1.0
- dotenv: 17.2.2
- drizzle-orm: 0.33.0(@neondatabase/serverless@0.10.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.11.10)(@types/react@19.1.12)(@vercel/postgres@0.10.0(utf-8-validate@6.0.4))(better-sqlite3@12.2.0)(kysely@0.28.5)(mysql2@3.11.3)(postgres@3.4.4)(prisma@5.22.0)(react@19.2.3)
- get-tsconfig: 4.12.0
- jiti: 2.6.1
- open: 10.2.0
- prettier: 3.6.2
- prisma: 5.22.0
- prompts: 2.4.2
- semver: 7.7.3
- tinyexec: 0.3.2
- yocto-spinner: 0.2.3
- zod: 4.1.12
- transitivePeerDependencies:
- - '@aws-sdk/client-rds-data'
- - '@cloudflare/workers-types'
- - '@electric-sql/pglite'
- - '@libsql/client'
- - '@lynx-js/react'
- - '@neondatabase/serverless'
- - '@op-engineering/op-sqlite'
- - '@opentelemetry/api'
- - '@planetscale/database'
- - '@sveltejs/kit'
- - '@tidbcloud/serverless'
- - '@types/pg'
- - '@types/react'
- - '@types/sql.js'
- - '@vercel/postgres'
- - '@xata.io/client'
- - bun-types
- - expo-sqlite
- - knex
- - kysely
- - magicast
- - mysql2
- - next
- - pg
- - postgres
- - react
- - react-dom
- - solid-js
- - sql.js
- - sqlite3
- - supports-color
- - svelte
- - vue
-
'@better-auth/core@1.4.0-beta.9(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.18)(better-call@1.0.19)(better-sqlite3@12.2.0)(jose@6.1.0)(kysely@0.28.5)(nanostores@1.0.1)':
dependencies:
'@better-auth/utils': 0.3.0
@@ -6296,32 +6058,6 @@ snapshots:
'@better-fetch/fetch@1.1.18': {}
- '@chevrotain/cst-dts-gen@10.5.0':
- dependencies:
- '@chevrotain/gast': 10.5.0
- '@chevrotain/types': 10.5.0
- lodash: 4.17.21
-
- '@chevrotain/gast@10.5.0':
- dependencies:
- '@chevrotain/types': 10.5.0
- lodash: 4.17.21
-
- '@chevrotain/types@10.5.0': {}
-
- '@chevrotain/utils@10.5.0': {}
-
- '@clack/core@0.5.0':
- dependencies:
- picocolors: 1.1.1
- sisteransi: 1.0.5
-
- '@clack/prompts@0.11.0':
- dependencies:
- '@clack/core': 0.5.0
- picocolors: 1.1.1
- sisteransi: 1.0.5
-
'@cspotcode/source-map-support@0.8.1':
dependencies:
'@jridgewell/trace-mapping': 0.3.9
@@ -6639,11 +6375,6 @@ snapshots:
'@levischuck/tiny-cbor@0.2.11': {}
- '@mrleebo/prisma-ast@0.13.0':
- dependencies:
- chevrotain: 10.5.0
- lilconfig: 2.1.0
-
'@napi-rs/wasm-runtime@0.2.12':
dependencies:
'@emnapi/core': 1.6.0
@@ -6884,6 +6615,18 @@ snapshots:
pvtsutils: 1.3.6
tslib: 2.8.1
+ '@peculiar/json-schema@1.1.12':
+ dependencies:
+ tslib: 2.8.1
+
+ '@peculiar/webcrypto@1.5.0':
+ dependencies:
+ '@peculiar/asn1-schema': 2.4.0
+ '@peculiar/json-schema': 1.1.12
+ pvtsutils: 1.3.6
+ tslib: 2.8.1
+ webcrypto-core: 1.8.1
+
'@petamoriken/float16@3.9.3':
optional: true
@@ -6898,10 +6641,13 @@ snapshots:
'@prisma/client@5.22.0(prisma@5.22.0)':
optionalDependencies:
prisma: 5.22.0
+ optional: true
- '@prisma/debug@5.22.0': {}
+ '@prisma/debug@5.22.0':
+ optional: true
- '@prisma/engines-version@5.22.0-44.605197351a3c8bdd595af2d2a9bc3025bca48ea2': {}
+ '@prisma/engines-version@5.22.0-44.605197351a3c8bdd595af2d2a9bc3025bca48ea2':
+ optional: true
'@prisma/engines@5.22.0':
dependencies:
@@ -6909,16 +6655,19 @@ snapshots:
'@prisma/engines-version': 5.22.0-44.605197351a3c8bdd595af2d2a9bc3025bca48ea2
'@prisma/fetch-engine': 5.22.0
'@prisma/get-platform': 5.22.0
+ optional: true
'@prisma/fetch-engine@5.22.0':
dependencies:
'@prisma/debug': 5.22.0
'@prisma/engines-version': 5.22.0-44.605197351a3c8bdd595af2d2a9bc3025bca48ea2
'@prisma/get-platform': 5.22.0
+ optional: true
'@prisma/get-platform@5.22.0':
dependencies:
'@prisma/debug': 5.22.0
+ optional: true
'@radix-ui/number@1.1.1': {}
@@ -8221,6 +7970,10 @@ snapshots:
tslib: 2.8.1
optional: true
+ '@types/accepts@1.3.7':
+ dependencies:
+ '@types/node': 24.9.1
+
'@types/babel__core@7.20.5':
dependencies:
'@babel/parser': 7.28.5
@@ -8244,15 +7997,54 @@ snapshots:
'@types/better-sqlite3@7.6.13':
dependencies:
- '@types/node': 20.19.30
+ '@types/node': 24.9.1
+ optional: true
+
+ '@types/body-parser@1.19.6':
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 24.9.1
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 24.9.1
+
+ '@types/content-disposition@0.5.9': {}
+
+ '@types/cookie@0.5.4': {}
+
+ '@types/cookies@0.9.2':
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/express': 4.17.25
+ '@types/keygrip': 1.0.6
+ '@types/node': 24.9.1
'@types/estree@1.0.8': {}
+ '@types/express-serve-static-core@4.19.8':
+ dependencies:
+ '@types/node': 24.9.1
+ '@types/qs': 6.14.0
+ '@types/range-parser': 1.2.7
+ '@types/send': 1.2.1
+
+ '@types/express@4.17.25':
+ dependencies:
+ '@types/body-parser': 1.19.6
+ '@types/express-serve-static-core': 4.19.8
+ '@types/qs': 6.14.0
+ '@types/serve-static': 1.15.10
+
'@types/glob@7.2.0':
dependencies:
'@types/minimatch': 5.1.2
'@types/node': 20.19.30
+ '@types/http-assert@1.5.6': {}
+
+ '@types/http-errors@2.0.5': {}
+
'@types/inquirer@6.5.0':
dependencies:
'@types/through': 0.0.33
@@ -8262,8 +8054,29 @@ snapshots:
'@types/json5@0.0.29': {}
+ '@types/keygrip@1.0.6': {}
+
+ '@types/koa-compose@3.2.9':
+ dependencies:
+ '@types/koa': 2.15.0
+
+ '@types/koa@2.15.0':
+ dependencies:
+ '@types/accepts': 1.3.7
+ '@types/content-disposition': 0.5.9
+ '@types/cookies': 0.9.2
+ '@types/http-assert': 1.5.6
+ '@types/http-errors': 2.0.5
+ '@types/keygrip': 1.0.6
+ '@types/koa-compose': 3.2.9
+ '@types/node': 24.9.1
+
+ '@types/mime@1.3.5': {}
+
'@types/minimatch@5.1.2': {}
+ '@types/node@17.0.45': {}
+
'@types/node@20.19.30':
dependencies:
undici-types: 6.21.0
@@ -8289,10 +8102,9 @@ snapshots:
pg-protocol: 1.10.3
pg-types: 4.1.0
- '@types/prompts@2.4.9':
- dependencies:
- '@types/node': 20.19.30
- kleur: 3.0.3
+ '@types/qs@6.14.0': {}
+
+ '@types/range-parser@1.2.7': {}
'@types/react-dom@19.1.9(@types/react@19.1.12)':
dependencies:
@@ -8302,6 +8114,21 @@ snapshots:
dependencies:
csstype: 3.1.3
+ '@types/send@0.17.6':
+ dependencies:
+ '@types/mime': 1.3.5
+ '@types/node': 24.9.1
+
+ '@types/send@1.2.1':
+ dependencies:
+ '@types/node': 24.9.1
+
+ '@types/serve-static@1.15.10':
+ dependencies:
+ '@types/http-errors': 2.0.5
+ '@types/node': 24.9.1
+ '@types/send': 0.17.6
+
'@types/through@0.0.33':
dependencies:
'@types/node': 20.19.30
@@ -8458,6 +8285,36 @@ snapshots:
'@vue/shared@3.5.16':
optional: true
+ '@workos-inc/node@7.82.0':
+ dependencies:
+ iron-session: 6.3.1
+ jose: 5.6.3
+ leb: 1.0.0
+ qs: 6.14.1
+ transitivePeerDependencies:
+ - express
+ - koa
+ - next
+
+ '@workos-inc/node@8.0.0':
+ dependencies:
+ iron-webcrypto: 2.0.0
+ jose: 6.1.3
+
+ '@workos/authkit-session@0.3.4':
+ dependencies:
+ '@workos-inc/node': 8.0.0
+ iron-webcrypto: 2.0.0
+ jose: 6.1.3
+
+ '@workos/authkit-tanstack-react-start@0.5.0(@tanstack/react-router@1.135.2(react-dom@19.1.4(react@19.1.4))(react@19.1.4))(@tanstack/react-start@1.135.2(crossws@0.4.1(srvx@0.9.6))(react-dom@19.1.4(react@19.1.4))(react@19.1.4)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(react-dom@19.1.4(react@19.1.4))(react@19.1.4)':
+ dependencies:
+ '@tanstack/react-router': 1.135.2(react-dom@19.1.4(react@19.1.4))(react@19.1.4)
+ '@tanstack/react-start': 1.135.2(crossws@0.4.1(srvx@0.9.6))(react-dom@19.1.4(react@19.1.4))(react@19.1.4)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))
+ '@workos/authkit-session': 0.3.4
+ react: 19.1.4
+ react-dom: 19.1.4(react@19.1.4)
+
acorn-jsx@5.3.2(acorn@8.15.0):
dependencies:
acorn: 8.15.0
@@ -8661,27 +8518,6 @@ snapshots:
transitivePeerDependencies:
- better-sqlite3
- better-auth@1.4.0-beta.9(better-sqlite3@12.2.0)(react@19.2.3):
- dependencies:
- '@better-auth/core': 1.4.0-beta.9(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.18)(better-call@1.0.19)(better-sqlite3@12.2.0)(jose@6.1.0)(kysely@0.28.5)(nanostores@1.0.1)
- '@better-auth/telemetry': 1.4.0-beta.9(@better-auth/core@1.4.0-beta.9(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.18)(better-call@1.0.19)(better-sqlite3@12.2.0)(jose@6.1.0)(kysely@0.28.5)(nanostores@1.0.1))
- '@better-auth/utils': 0.3.0
- '@better-fetch/fetch': 1.1.18
- '@noble/ciphers': 2.0.0
- '@noble/hashes': 2.0.0
- '@simplewebauthn/browser': 13.1.2
- '@simplewebauthn/server': 13.1.2
- better-call: 1.0.19
- defu: 6.1.4
- jose: 6.1.0
- kysely: 0.28.5
- nanostores: 1.0.1
- zod: 4.1.12
- optionalDependencies:
- react: 19.2.3
- transitivePeerDependencies:
- - better-sqlite3
-
better-call@1.0.19:
dependencies:
'@better-auth/utils': 0.3.0
@@ -8737,28 +8573,14 @@ snapshots:
base64-js: 1.5.1
ieee754: 1.2.1
- bufferutil@4.0.8:
+ buffer@6.0.3:
dependencies:
- node-gyp-build: 4.8.4
-
- bundle-name@4.1.0:
- dependencies:
- run-applescript: 7.0.0
+ base64-js: 1.5.1
+ ieee754: 1.2.1
- c12@3.2.0:
+ bufferutil@4.0.8:
dependencies:
- chokidar: 4.0.3
- confbox: 0.2.2
- defu: 6.1.4
- dotenv: 17.2.2
- exsolve: 1.0.7
- giget: 2.0.0
- jiti: 2.6.1
- ohash: 2.0.11
- pathe: 2.0.3
- perfect-debounce: 1.0.0
- pkg-types: 2.3.0
- rc9: 2.1.2
+ node-gyp-build: 4.8.4
call-bind-apply-helpers@1.0.2:
dependencies:
@@ -8802,8 +8624,6 @@ snapshots:
ansi-styles: 4.3.0
supports-color: 7.2.0
- chalk@5.6.2: {}
-
change-case@3.1.0:
dependencies:
camel-case: 3.0.0
@@ -8852,15 +8672,6 @@ snapshots:
undici: 7.16.0
whatwg-mimetype: 4.0.0
- chevrotain@10.5.0:
- dependencies:
- '@chevrotain/cst-dts-gen': 10.5.0
- '@chevrotain/gast': 10.5.0
- '@chevrotain/types': 10.5.0
- '@chevrotain/utils': 10.5.0
- lodash: 4.17.21
- regexp-to-ast: 0.5.0
-
chokidar@3.6.0:
dependencies:
anymatch: 3.1.3
@@ -8876,13 +8687,10 @@ snapshots:
chokidar@4.0.3:
dependencies:
readdirp: 4.1.2
+ optional: true
chownr@1.1.4: {}
- citty@0.1.6:
- dependencies:
- consola: 3.4.2
-
class-variance-authority@0.7.1:
dependencies:
clsx: 2.1.1
@@ -8915,15 +8723,11 @@ snapshots:
commander@10.0.1: {}
- commander@12.1.0: {}
-
commander@2.20.3:
optional: true
concat-map@0.0.1: {}
- confbox@0.2.2: {}
-
consola@3.4.2: {}
constant-case@2.0.0:
@@ -8938,6 +8742,8 @@ snapshots:
cookie-es@2.0.0: {}
+ cookie@0.5.0: {}
+
copy-anything@4.0.5:
dependencies:
is-what: 5.5.0
@@ -9014,13 +8820,6 @@ snapshots:
deep-is@0.1.4: {}
- default-browser-id@5.0.0: {}
-
- default-browser@5.2.1:
- dependencies:
- bundle-name: 4.1.0
- default-browser-id: 5.0.0
-
defaults@1.0.4:
dependencies:
clone: 1.0.4
@@ -9031,8 +8830,6 @@ snapshots:
es-errors: 1.3.0
gopd: 1.2.0
- define-lazy-prop@3.0.0: {}
-
define-properties@1.2.1:
dependencies:
define-data-property: 1.1.4
@@ -9061,8 +8858,6 @@ snapshots:
denque@2.1.0:
optional: true
- destr@2.0.5: {}
-
detect-libc@2.1.2: {}
detect-node-es@1.1.0: {}
@@ -9129,23 +8924,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- drizzle-orm@0.33.0(@neondatabase/serverless@0.10.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.11.10)(@types/react@19.1.12)(@vercel/postgres@0.10.0(utf-8-validate@6.0.4))(better-sqlite3@12.2.0)(kysely@0.28.5)(mysql2@3.11.3)(postgres@3.4.4)(prisma@5.22.0)(react@19.2.3):
- optionalDependencies:
- '@neondatabase/serverless': 0.10.0
- '@opentelemetry/api': 1.9.0
- '@planetscale/database': 1.19.0
- '@prisma/client': 5.22.0(prisma@5.22.0)
- '@types/better-sqlite3': 7.6.13
- '@types/pg': 8.11.10
- '@types/react': 19.1.12
- '@vercel/postgres': 0.10.0(utf-8-validate@6.0.4)
- better-sqlite3: 12.2.0
- kysely: 0.28.5
- mysql2: 3.11.3
- postgres: 3.4.4
- prisma: 5.22.0
- react: 19.2.3
-
drizzle-orm@0.44.7(@neondatabase/serverless@0.10.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.11.10)(@vercel/postgres@0.10.0(utf-8-validate@6.0.4))(better-sqlite3@12.2.0)(gel@2.0.0)(kysely@0.28.5)(mysql2@3.11.3)(postgres@3.4.4)(prisma@5.22.0):
optionalDependencies:
'@neondatabase/serverless': 0.10.0
@@ -9723,15 +9501,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- giget@2.0.0:
- dependencies:
- citty: 0.1.6
- consola: 3.4.2
- defu: 6.1.4
- node-fetch-native: 1.6.7
- nypm: 0.6.1
- pathe: 2.0.3
-
github-from-package@0.0.0: {}
glob-parent@5.1.2:
@@ -9949,6 +9718,24 @@ snapshots:
ip-address@10.0.1: {}
+ iron-session@6.3.1:
+ dependencies:
+ '@peculiar/webcrypto': 1.5.0
+ '@types/cookie': 0.5.4
+ '@types/express': 4.17.25
+ '@types/koa': 2.15.0
+ '@types/node': 17.0.45
+ cookie: 0.5.0
+ iron-webcrypto: 0.2.8
+
+ iron-webcrypto@0.2.8:
+ dependencies:
+ buffer: 6.0.3
+
+ iron-webcrypto@2.0.0:
+ dependencies:
+ uint8array-extras: 1.5.0
+
is-array-buffer@3.0.5:
dependencies:
call-bind: 1.0.8
@@ -9993,8 +9780,6 @@ snapshots:
call-bound: 1.0.4
has-tostringtag: 1.0.2
- is-docker@3.0.0: {}
-
is-extglob@2.1.1: {}
is-finalizationregistry@1.1.1:
@@ -10014,10 +9799,6 @@ snapshots:
dependencies:
is-extglob: 2.1.1
- is-inside-container@1.0.0:
- dependencies:
- is-docker: 3.0.0
-
is-interactive@1.0.0: {}
is-lower-case@1.1.3:
@@ -10091,10 +9872,6 @@ snapshots:
is-what@5.5.0: {}
- is-wsl@3.1.0:
- dependencies:
- is-inside-container: 1.0.0
-
isarray@2.0.5: {}
isbinaryfile@4.0.10: {}
@@ -10117,8 +9894,12 @@ snapshots:
jiti@2.6.1: {}
+ jose@5.6.3: {}
+
jose@6.1.0: {}
+ jose@6.1.3: {}
+
js-tokens@4.0.0: {}
js-yaml@3.14.1:
@@ -10161,8 +9942,6 @@ snapshots:
dependencies:
json-buffer: 3.0.1
- kleur@3.0.3: {}
-
kysely@0.28.5: {}
language-subtag-registry@0.3.23: {}
@@ -10171,6 +9950,8 @@ snapshots:
dependencies:
language-subtag-registry: 0.3.23
+ leb@1.0.0: {}
+
levn@0.4.1:
dependencies:
prelude-ls: 1.2.1
@@ -10221,8 +10002,6 @@ snapshots:
lightningcss-win32-arm64-msvc: 1.30.1
lightningcss-win32-x64-msvc: 1.30.1
- lilconfig@2.1.0: {}
-
locate-path@6.0.0:
dependencies:
p-locate: 5.0.0
@@ -10393,8 +10172,6 @@ snapshots:
dependencies:
semver: 7.7.3
- node-fetch-native@1.6.7: {}
-
node-gyp-build@4.8.4: {}
node-plop@0.26.3:
@@ -10423,14 +10200,6 @@ snapshots:
dependencies:
boolbase: 1.0.0
- nypm@0.6.1:
- dependencies:
- citty: 0.1.6
- consola: 3.4.2
- pathe: 2.0.3
- pkg-types: 2.3.0
- tinyexec: 1.0.1
-
object-assign@4.1.1: {}
object-inspect@1.13.4: {}
@@ -10487,13 +10256,6 @@ snapshots:
dependencies:
mimic-fn: 2.1.0
- open@10.2.0:
- dependencies:
- default-browser: 5.2.1
- define-lazy-prop: 3.0.0
- is-inside-container: 1.0.0
- wsl-utils: 0.1.0
-
optionator@0.9.4:
dependencies:
deep-is: 0.1.4
@@ -10663,8 +10425,6 @@ snapshots:
pathe@2.0.3: {}
- perfect-debounce@1.0.0: {}
-
pg-int8@1.0.1: {}
pg-numeric@1.0.2: {}
@@ -10689,12 +10449,6 @@ snapshots:
picomatch@4.0.3: {}
- pkg-types@2.3.0:
- dependencies:
- confbox: 0.2.2
- exsolve: 1.0.7
- pathe: 2.0.3
-
possible-typed-array-names@1.0.0: {}
postcss@8.5.6:
@@ -10758,11 +10512,7 @@ snapshots:
'@prisma/engines': 5.22.0
optionalDependencies:
fsevents: 2.3.3
-
- prompts@2.4.2:
- dependencies:
- kleur: 3.0.3
- sisteransi: 1.0.5
+ optional: true
prop-types@15.8.1:
dependencies:
@@ -10798,6 +10548,10 @@ snapshots:
pvutils@1.1.3: {}
+ qs@6.14.1:
+ dependencies:
+ side-channel: 1.1.0
+
queue-microtask@1.2.3: {}
radix-ui@1.4.3(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.2.3(react@19.1.4))(react@19.1.4):
@@ -10863,11 +10617,6 @@ snapshots:
'@types/react': 19.1.12
'@types/react-dom': 19.1.9(@types/react@19.1.12)
- rc9@2.1.2:
- dependencies:
- defu: 6.1.4
- destr: 2.0.5
-
rc@1.2.8:
dependencies:
deep-extend: 0.6.0
@@ -10918,9 +10667,6 @@ snapshots:
react@19.1.4: {}
- react@19.2.3:
- optional: true
-
readable-stream@3.6.2:
dependencies:
inherits: 2.0.4
@@ -10931,7 +10677,8 @@ snapshots:
dependencies:
picomatch: 2.3.1
- readdirp@4.1.2: {}
+ readdirp@4.1.2:
+ optional: true
recast@0.23.11:
dependencies:
@@ -10952,8 +10699,6 @@ snapshots:
get-proto: 1.0.1
which-builtin-type: 1.2.1
- regexp-to-ast@0.5.0: {}
-
regexp.prototype.flags@1.5.4:
dependencies:
call-bind: 1.0.8
@@ -11031,8 +10776,6 @@ snapshots:
rou3@0.7.10: {}
- run-applescript@7.0.0: {}
-
run-async@2.4.1: {}
run-parallel@1.2.0:
@@ -11165,8 +10908,6 @@ snapshots:
once: 1.4.0
simple-concat: 1.0.1
- sisteransi@1.0.5: {}
-
slash@3.0.0: {}
smart-buffer@4.2.0: {}
@@ -11352,10 +11093,6 @@ snapshots:
tinycolor2@1.6.0: {}
- tinyexec@0.3.2: {}
-
- tinyexec@1.0.1: {}
-
tinyglobby@0.2.15:
dependencies:
fdir: 6.5.0(picomatch@4.0.3)
@@ -11511,6 +11248,8 @@ snapshots:
uglify-js@3.19.3:
optional: true
+ uint8array-extras@1.5.0: {}
+
unbox-primitive@1.1.0:
dependencies:
call-bound: 1.0.4
@@ -11638,6 +11377,14 @@ snapshots:
dependencies:
defaults: 1.0.4
+ webcrypto-core@1.8.1:
+ dependencies:
+ '@peculiar/asn1-schema': 2.4.0
+ '@peculiar/json-schema': 1.1.12
+ asn1js: 3.0.6
+ pvtsutils: 1.3.6
+ tslib: 2.8.1
+
webpack-virtual-modules@0.6.2: {}
whatwg-encoding@3.1.1:
@@ -11713,10 +11460,6 @@ snapshots:
bufferutil: 4.0.8
utf-8-validate: 6.0.4
- wsl-utils@0.1.0:
- dependencies:
- is-wsl: 3.1.0
-
xmlbuilder2@3.1.1:
dependencies:
'@oozcitak/dom': 1.15.10
@@ -11733,12 +11476,6 @@ snapshots:
yocto-queue@0.1.0: {}
- yocto-spinner@0.2.3:
- dependencies:
- yoctocolors: 2.1.2
-
- yoctocolors@2.1.2: {}
-
zod-validation-error@4.0.2(zod@4.1.12):
dependencies:
zod: 4.1.12
From ddd1915923eac7f746dd7c8af581fa024ed16b11 Mon Sep 17 00:00:00 2001
From: AF_Askar <68832286+abo3skr2019@users.noreply.github.com>
Date: Tue, 3 Feb 2026 11:02:06 +0300
Subject: [PATCH 03/12] antigravity
---
.agent/rules/project-rules.md | 65 +++++++++++++++++++++++++++++++++++
1 file changed, 65 insertions(+)
create mode 100644 .agent/rules/project-rules.md
diff --git a/.agent/rules/project-rules.md b/.agent/rules/project-rules.md
new file mode 100644
index 0000000..7ca7ba6
--- /dev/null
+++ b/.agent/rules/project-rules.md
@@ -0,0 +1,65 @@
+---
+trigger: always_on
+---
+
+## Architecture & Priorities
+
+- This is a PoC: prioritize developer speed and clarity over abstraction.
+- Treat all backends as APIs; do not couple services together.
+- The AI service is stateless and must not call application APIs directly.
+
+## Monorepo Structure
+
+- This is a TurboRepo monorepo with pnpm workspaces
+- Apps live in `apps/` (currently only tanstack-start)
+- Shared packages live in `packages/`
+- External services live in `services/`
+- Use `turbo.json` for task definitions and caching
+
+## Environment & Configuration
+
+- Use Zod for environment validation in TypeScript packages
+- Follow the pattern in `packages/auth/env.ts` for type-safe env vars
+- Never commit sensitive values; use `example.env` as a template
+- Prefix AI service env vars with `AI_` to avoid conflicts
+
+## Authentication
+
+- Use [WorkOS](https://workos.com/docs/llms.txt) for authentication and organization context.
+- Do not invent custom auth flows.
+- User identity and org context must be passed explicitly to services.
+
+## Frontend & UI
+
+- All reusable UI components must live in the `packages/ui` package.
+- Use Tailwind CSS for styling.
+- Prefer shadcn/ui components where applicable.
+- Do not create ad-hoc UI components in app folders.
+
+## Forms & State
+
+- Use `@tanstack/react-form` for all forms.
+- Use `@tanstack/react-query` for data fetching, caching, and mutations.
+- Use `@tanstack/react-router` for routing.
+
+## APIs & Data Fetching
+
+- Use tRPC for type-safe application API calls (user data, metrics, app state).
+- Use OpenAPI Generator to generate a typed client for the FastAPI AI service.
+- Do not mix tRPC and OpenAPI clients.
+- Do not have the AI service call the application API.
+
+## Database & Validation
+
+- Use Drizzle ORM for database access.
+- Use Zod for validation.
+- Use `drizzle-zod` for deriving Zod schemas from Drizzle models.
+- Do not duplicate schema definitions manually.
+- Place non-database Zod schemas in the `packages/validators` package.
+
+## AI Service Integration
+
+- The AI service receives all required inputs (user context, metrics, documents).
+- The AI service must not fetch user or metrics data on its own.
+- Inputs should be explicit, minimal, and versionable.
+- AI service shouldn't have a seperate auth flow it should instead use the AI_SERVICE_KEY env var to authenticate requests from the main app which will have that variable sent using a secure header.
From 450caaaf04e98be62678d63002db4b33b45bb72d Mon Sep 17 00:00:00 2001
From: AF_Askar <68832286+abo3skr2019@users.noreply.github.com>
Date: Tue, 3 Feb 2026 11:26:26 +0300
Subject: [PATCH 04/12] documentation
---
.agent/rules/project-rules.md | 4 ++--
example.env | 25 +++++++++++++++++--------
2 files changed, 19 insertions(+), 10 deletions(-)
diff --git a/.agent/rules/project-rules.md b/.agent/rules/project-rules.md
index 7ca7ba6..72b0e5e 100644
--- a/.agent/rules/project-rules.md
+++ b/.agent/rules/project-rules.md
@@ -37,7 +37,7 @@ trigger: always_on
- Do not create ad-hoc UI components in app folders.
## Forms & State
-
+- Here are the Tanstack [docs](https://tanstack.com/llms.txt)
- Use `@tanstack/react-form` for all forms.
- Use `@tanstack/react-query` for data fetching, caching, and mutations.
- Use `@tanstack/react-router` for routing.
@@ -62,4 +62,4 @@ trigger: always_on
- The AI service receives all required inputs (user context, metrics, documents).
- The AI service must not fetch user or metrics data on its own.
- Inputs should be explicit, minimal, and versionable.
-- AI service shouldn't have a seperate auth flow it should instead use the AI_SERVICE_KEY env var to authenticate requests from the main app which will have that variable sent using a secure header.
+- AI service shouldn't have a seperate auth flow it should instead use the AI_SERVICE_KEY env var to authenticate requests from the main app which will have that variable sent using a secure header.
\ No newline at end of file
diff --git a/example.env b/example.env
index c381413..8826c7a 100644
--- a/example.env
+++ b/example.env
@@ -1,5 +1,5 @@
# Docker environment variables
-# Copy this file to .env.local and update with your values
+# Copy this file to .env and update with your values
# AI Service Configuration
OPENAI_API_KEY=your_openai_api_key_here
@@ -9,15 +9,24 @@ AI_SERVICE_KEY="super-secret-internal-key"
# Database Configuration
-DATABASE_URL=postgresql://user:password@application_db:5432/app_db
+POSTGRES_URL=postgresql://user:password@application_db:5432/app_db
-# Next.js Configuration
-NEXT_PUBLIC_API_URL=http://localhost:5000
-NEXTAUTH_SECRET=your_nextauth_secret_here
-NEXTAUTH_URL=http://localhost:5001
-AUTH_SECRET='supersecret'
+# WorkOS AuthKit Configuration
+# Get these from the WorkOS Dashboard: https://dashboard.workos.com
+WORKOS_CLIENT_ID="client_..."
+WORKOS_API_KEY="sk_test_..."
+WORKOS_REDIRECT_URI="http://localhost:3001/api/auth/callback"
+# Generate a secure 32+ character password: openssl rand -base64 24
+WORKOS_COOKIE_PASSWORD="your-secure-cookie-password-here"
+
+# Optional WorkOS Configuration
+# WORKOS_COOKIE_MAX_AGE=34560000
+# WORKOS_COOKIE_NAME=wos-session
+# WORKOS_COOKIE_DOMAIN=
+# WORKOS_COOKIE_SAMESITE=lax
+
+# AI Service URL
AI_SERVICE_URL=http://localhost:5000
-AI_SERVICE_KEY="super-secret-internal-key"
# Development settings
NODE_ENV=development
From c556d7306d6b4e7d9e497653e83bdf26625db6d7 Mon Sep 17 00:00:00 2001
From: AF_Askar <68832286+abo3skr2019@users.noreply.github.com>
Date: Tue, 3 Feb 2026 11:26:56 +0300
Subject: [PATCH 05/12] workos migration
---
apps/tanstack-start/package.json | 3 +-
apps/tanstack-start/src/auth/client.ts | 3 -
apps/tanstack-start/src/auth/server.ts | 16 -
.../src/component/auth-showcase.tsx | 42 +-
apps/tanstack-start/src/env.ts | 6 +-
apps/tanstack-start/src/lib/trpc.ts | 5 +-
apps/tanstack-start/src/routeTree.gen.ts | 37 +-
apps/tanstack-start/src/routes/__root.tsx | 9 +-
apps/tanstack-start/src/routes/api/auth.$.ts | 12 -
.../src/routes/api/auth/callback.tsx | 10 +
apps/tanstack-start/src/routes/api/trpc.$.ts | 10 +-
apps/tanstack-start/src/start.ts | 6 +
packages/api/src/trpc.ts | 12 +-
packages/auth/env.ts | 11 +-
packages/auth/package.json | 6 +-
packages/auth/script/auth-cli.ts | 25 -
packages/auth/src/index.ts | 58 +-
pnpm-lock.yaml | 701 +++++-------------
18 files changed, 270 insertions(+), 702 deletions(-)
delete mode 100644 apps/tanstack-start/src/auth/client.ts
delete mode 100644 apps/tanstack-start/src/auth/server.ts
delete mode 100644 apps/tanstack-start/src/routes/api/auth.$.ts
create mode 100644 apps/tanstack-start/src/routes/api/auth/callback.tsx
create mode 100644 apps/tanstack-start/src/start.ts
delete mode 100644 packages/auth/script/auth-cli.ts
diff --git a/apps/tanstack-start/package.json b/apps/tanstack-start/package.json
index 0915a66..e26f9de 100644
--- a/apps/tanstack-start/package.json
+++ b/apps/tanstack-start/package.json
@@ -29,7 +29,7 @@
"@trpc/client": "catalog:",
"@trpc/server": "catalog:",
"@trpc/tanstack-react-query": "catalog:",
- "better-auth": "catalog:",
+ "@workos/authkit-tanstack-react-start": "^0.5.0",
"nitro": "3.0.1-alpha.1",
"react": "catalog:react19",
"react-dom": "catalog:react19",
@@ -46,7 +46,6 @@
"@types/react": "catalog:react19",
"@types/react-dom": "catalog:react19",
"@vitejs/plugin-react": "catalog:",
- "@workos/authkit-tanstack-react-start": "^0.5.0",
"eslint": "catalog:",
"prettier": "catalog:",
"tailwindcss": "catalog:",
diff --git a/apps/tanstack-start/src/auth/client.ts b/apps/tanstack-start/src/auth/client.ts
deleted file mode 100644
index f1012dd..0000000
--- a/apps/tanstack-start/src/auth/client.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-import { createAuthClient } from "better-auth/react";
-
-export const authClient = createAuthClient();
diff --git a/apps/tanstack-start/src/auth/server.ts b/apps/tanstack-start/src/auth/server.ts
deleted file mode 100644
index 5d59fe6..0000000
--- a/apps/tanstack-start/src/auth/server.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import { reactStartCookies } from "better-auth/react-start";
-
-import { initAuth } from "@governance/auth";
-
-import { env } from "~/env";
-import { getBaseUrl } from "~/lib/url";
-
-export const auth = initAuth({
- baseUrl: getBaseUrl(),
- productionUrl: `https://${env.VERCEL_PROJECT_PRODUCTION_URL ?? "turbo.t3.gg"}`,
- secret: env.AUTH_SECRET,
- discordClientId: env.AUTH_DISCORD_ID,
- discordClientSecret: env.AUTH_DISCORD_SECRET,
-
- extraPlugins: [reactStartCookies()],
-});
diff --git a/apps/tanstack-start/src/component/auth-showcase.tsx b/apps/tanstack-start/src/component/auth-showcase.tsx
index 86a45c2..ff887d0 100644
--- a/apps/tanstack-start/src/component/auth-showcase.tsx
+++ b/apps/tanstack-start/src/component/auth-showcase.tsx
@@ -1,29 +1,30 @@
-import { useNavigate } from "@tanstack/react-router";
+import { useAuth } from "@workos/authkit-tanstack-react-start/client";
+import { getSignInUrl } from "@workos/authkit-tanstack-react-start";
+import { createServerFn } from "@tanstack/react-start";
import { Button } from "@governance/ui/button";
-import { authClient } from "~/auth/client";
+const getSignInUrlFn = createServerFn({ method: "GET" }).handler(async () => {
+ return await getSignInUrl();
+});
export function AuthShowcase() {
- const { data: session } = authClient.useSession();
- const navigate = useNavigate();
+ const { user, loading, signOut } = useAuth();
- if (!session) {
+ if (loading) {
+ return
Loading...
;
+ }
+
+ if (!user) {
return (
);
}
@@ -31,16 +32,13 @@ export function AuthShowcase() {
return (
- Logged in as {session.user.name}
+
+ Logged in as {user.firstName} {user.lastName}
+
+
{user.email}
-
diff --git a/apps/tanstack-start/src/env.ts b/apps/tanstack-start/src/env.ts
index a2ff648..32477d3 100644
--- a/apps/tanstack-start/src/env.ts
+++ b/apps/tanstack-start/src/env.ts
@@ -17,16 +17,14 @@ export const env = createEnv({
*/
server: {
POSTGRES_URL: z.url(),
- WORKOS_API_KEY: z.string().min(1),
- WORKOS_CLIENT_ID: z.string().min(1),
},
/**
* Specify your client-side environment variables schema here.
- * For them to be exposed to the client, prefix them with `NEXT_PUBLIC_`.
+ * For them to be exposed to the client, prefix them with `VITE_`.
*/
client: {
- // NEXT_PUBLIC_CLIENTVAR: z.string(),
+ // VITE_CLIENTVAR: z.string(),
},
/**
* Destructure all variables from `process.env` to make sure they aren't tree-shaken away.
diff --git a/apps/tanstack-start/src/lib/trpc.ts b/apps/tanstack-start/src/lib/trpc.ts
index 70df5fb..c066fde 100644
--- a/apps/tanstack-start/src/lib/trpc.ts
+++ b/apps/tanstack-start/src/lib/trpc.ts
@@ -8,10 +8,10 @@ import {
} from "@trpc/client";
import { createTRPCContext } from "@trpc/tanstack-react-query";
import SuperJSON from "superjson";
+import { getAuth } from "@workos/authkit-tanstack-react-start";
import * as Api from "@governance/api";
-import { auth } from "~/auth/server";
import { env } from "~/env";
import { getBaseUrl } from "~/lib/url";
@@ -22,9 +22,10 @@ export const makeTRPCClient = createIsomorphicFn()
unstable_localLink({
router: Api.appRouter,
transformer: SuperJSON,
- createContext: () => {
+ createContext: async () => {
const headers = new Headers(getRequestHeaders());
headers.set("x-trpc-source", "tanstack-start-server");
+ const auth = await getAuth();
return Api.createTRPCContext({ auth, headers });
},
}),
diff --git a/apps/tanstack-start/src/routeTree.gen.ts b/apps/tanstack-start/src/routeTree.gen.ts
index 14b20b8..3428522 100644
--- a/apps/tanstack-start/src/routeTree.gen.ts
+++ b/apps/tanstack-start/src/routeTree.gen.ts
@@ -11,7 +11,7 @@
import { Route as rootRouteImport } from './routes/__root'
import { Route as IndexRouteImport } from './routes/index'
import { Route as ApiTrpcSplatRouteImport } from './routes/api/trpc.$'
-import { Route as ApiAuthSplatRouteImport } from './routes/api/auth.$'
+import { Route as ApiAuthCallbackRouteImport } from './routes/api/auth/callback'
const IndexRoute = IndexRouteImport.update({
id: '/',
@@ -23,39 +23,39 @@ const ApiTrpcSplatRoute = ApiTrpcSplatRouteImport.update({
path: '/api/trpc/$',
getParentRoute: () => rootRouteImport,
} as any)
-const ApiAuthSplatRoute = ApiAuthSplatRouteImport.update({
- id: '/api/auth/$',
- path: '/api/auth/$',
+const ApiAuthCallbackRoute = ApiAuthCallbackRouteImport.update({
+ id: '/api/auth/callback',
+ path: '/api/auth/callback',
getParentRoute: () => rootRouteImport,
} as any)
export interface FileRoutesByFullPath {
'/': typeof IndexRoute
- '/api/auth/$': typeof ApiAuthSplatRoute
+ '/api/auth/callback': typeof ApiAuthCallbackRoute
'/api/trpc/$': typeof ApiTrpcSplatRoute
}
export interface FileRoutesByTo {
'/': typeof IndexRoute
- '/api/auth/$': typeof ApiAuthSplatRoute
+ '/api/auth/callback': typeof ApiAuthCallbackRoute
'/api/trpc/$': typeof ApiTrpcSplatRoute
}
export interface FileRoutesById {
__root__: typeof rootRouteImport
'/': typeof IndexRoute
- '/api/auth/$': typeof ApiAuthSplatRoute
+ '/api/auth/callback': typeof ApiAuthCallbackRoute
'/api/trpc/$': typeof ApiTrpcSplatRoute
}
export interface FileRouteTypes {
fileRoutesByFullPath: FileRoutesByFullPath
- fullPaths: '/' | '/api/auth/$' | '/api/trpc/$'
+ fullPaths: '/' | '/api/auth/callback' | '/api/trpc/$'
fileRoutesByTo: FileRoutesByTo
- to: '/' | '/api/auth/$' | '/api/trpc/$'
- id: '__root__' | '/' | '/api/auth/$' | '/api/trpc/$'
+ to: '/' | '/api/auth/callback' | '/api/trpc/$'
+ id: '__root__' | '/' | '/api/auth/callback' | '/api/trpc/$'
fileRoutesById: FileRoutesById
}
export interface RootRouteChildren {
IndexRoute: typeof IndexRoute
- ApiAuthSplatRoute: typeof ApiAuthSplatRoute
+ ApiAuthCallbackRoute: typeof ApiAuthCallbackRoute
ApiTrpcSplatRoute: typeof ApiTrpcSplatRoute
}
@@ -75,11 +75,11 @@ declare module '@tanstack/react-router' {
preLoaderRoute: typeof ApiTrpcSplatRouteImport
parentRoute: typeof rootRouteImport
}
- '/api/auth/$': {
- id: '/api/auth/$'
- path: '/api/auth/$'
- fullPath: '/api/auth/$'
- preLoaderRoute: typeof ApiAuthSplatRouteImport
+ '/api/auth/callback': {
+ id: '/api/auth/callback'
+ path: '/api/auth/callback'
+ fullPath: '/api/auth/callback'
+ preLoaderRoute: typeof ApiAuthCallbackRouteImport
parentRoute: typeof rootRouteImport
}
}
@@ -87,7 +87,7 @@ declare module '@tanstack/react-router' {
const rootRouteChildren: RootRouteChildren = {
IndexRoute: IndexRoute,
- ApiAuthSplatRoute: ApiAuthSplatRoute,
+ ApiAuthCallbackRoute: ApiAuthCallbackRoute,
ApiTrpcSplatRoute: ApiTrpcSplatRoute,
}
export const routeTree = rootRouteImport
@@ -95,10 +95,11 @@ export const routeTree = rootRouteImport
._addFileTypes()
import type { getRouter } from './router.tsx'
-import type { createStart } from '@tanstack/react-start'
+import type { startInstance } from './start.ts'
declare module '@tanstack/react-start' {
interface Register {
ssr: true
router: Awaited>
+ config: Awaited>
}
}
diff --git a/apps/tanstack-start/src/routes/__root.tsx b/apps/tanstack-start/src/routes/__root.tsx
index 66bb2a5..bbf9073 100644
--- a/apps/tanstack-start/src/routes/__root.tsx
+++ b/apps/tanstack-start/src/routes/__root.tsx
@@ -9,6 +9,7 @@ import {
Scripts,
} from "@tanstack/react-router";
import { TanStackRouterDevtools } from "@tanstack/react-router-devtools";
+import { AuthKitProvider } from "@workos/authkit-tanstack-react-start/client";
import type { AppRouter } from "@governance/api";
import { ThemeProvider, ThemeToggle } from "@governance/ui/theme";
@@ -28,9 +29,11 @@ export const Route = createRootRouteWithContext<{
function RootComponent() {
return (
-
-
-
+
+
+
+
+
);
}
diff --git a/apps/tanstack-start/src/routes/api/auth.$.ts b/apps/tanstack-start/src/routes/api/auth.$.ts
deleted file mode 100644
index 5c88113..0000000
--- a/apps/tanstack-start/src/routes/api/auth.$.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import { createFileRoute } from "@tanstack/react-router";
-
-import { auth } from "~/auth/server";
-
-export const Route = createFileRoute("/api/auth/$")({
- server: {
- handlers: {
- GET: ({ request }) => auth.handler(request),
- POST: ({ request }) => auth.handler(request),
- },
- },
-});
diff --git a/apps/tanstack-start/src/routes/api/auth/callback.tsx b/apps/tanstack-start/src/routes/api/auth/callback.tsx
new file mode 100644
index 0000000..faf3097
--- /dev/null
+++ b/apps/tanstack-start/src/routes/api/auth/callback.tsx
@@ -0,0 +1,10 @@
+import { createFileRoute } from "@tanstack/react-router";
+import { handleCallbackRoute } from "@workos/authkit-tanstack-react-start";
+
+export const Route = createFileRoute("/api/auth/callback")({
+ server: {
+ handlers: {
+ GET: handleCallbackRoute(),
+ },
+ },
+});
diff --git a/apps/tanstack-start/src/routes/api/trpc.$.ts b/apps/tanstack-start/src/routes/api/trpc.$.ts
index 4abaa71..1ebb57e 100644
--- a/apps/tanstack-start/src/routes/api/trpc.$.ts
+++ b/apps/tanstack-start/src/routes/api/trpc.$.ts
@@ -1,24 +1,26 @@
import { createFileRoute } from "@tanstack/react-router";
import { fetchRequestHandler } from "@trpc/server/adapters/fetch";
+import { getAuth } from "@workos/authkit-tanstack-react-start";
import { appRouter, createTRPCContext } from "@governance/api";
-import { auth } from "~/auth/server";
+const handler = async (req: Request) => {
+ const auth = await getAuth();
-const handler = (req: Request) =>
- fetchRequestHandler({
+ return fetchRequestHandler({
endpoint: "/api/trpc",
router: appRouter,
req,
createContext: () =>
createTRPCContext({
- auth: auth,
+ auth,
headers: req.headers,
}),
onError({ error, path }) {
console.error(`>>> tRPC Error on '${path}'`, error);
},
});
+};
export const Route = createFileRoute("/api/trpc/$")({
server: {
diff --git a/apps/tanstack-start/src/start.ts b/apps/tanstack-start/src/start.ts
new file mode 100644
index 0000000..5a7d1c8
--- /dev/null
+++ b/apps/tanstack-start/src/start.ts
@@ -0,0 +1,6 @@
+import { createStart } from "@tanstack/react-start";
+import { authkitMiddleware } from "@workos/authkit-tanstack-react-start";
+
+export const startInstance = createStart(() => ({
+ requestMiddleware: [authkitMiddleware()],
+}));
diff --git a/packages/api/src/trpc.ts b/packages/api/src/trpc.ts
index dafc12c..7a1734c 100644
--- a/packages/api/src/trpc.ts
+++ b/packages/api/src/trpc.ts
@@ -10,7 +10,7 @@ import { initTRPC, TRPCError } from "@trpc/server";
import superjson from "superjson";
import { z, ZodError } from "zod/v4";
-import type { Auth } from "@governance/auth";
+import type { UserInfo, NoUserInfo } from "@governance/auth";
import { db } from "@governance/db/client";
/**
@@ -28,14 +28,10 @@ import { db } from "@governance/db/client";
export const createTRPCContext = async (opts: {
headers: Headers;
- auth: Auth;
+ auth: UserInfo | NoUserInfo;
}) => {
- const authApi = opts.auth.api;
- const session = await authApi.getSession({
- headers: opts.headers,
- });
+ const session = opts.auth;
return {
- authApi,
session,
db,
};
@@ -122,7 +118,7 @@ export const protectedProcedure = t.procedure
return next({
ctx: {
// infers the `session` as non-nullable
- session: { ...ctx.session, user: ctx.session.user },
+ session: ctx.session as UserInfo,
},
});
});
diff --git a/packages/auth/env.ts b/packages/auth/env.ts
index a516e85..722623b 100644
--- a/packages/auth/env.ts
+++ b/packages/auth/env.ts
@@ -4,12 +4,15 @@ import { z } from "zod/v4";
export function authEnv() {
return createEnv({
server: {
- AUTH_SECRET:
- process.env.NODE_ENV === "production"
- ? z.string().min(1)
- : z.string().min(1).optional(),
WORKOS_API_KEY: z.string().min(1),
WORKOS_CLIENT_ID: z.string().min(1),
+ WORKOS_REDIRECT_URI: z.string().url(),
+ WORKOS_COOKIE_PASSWORD: z.string().min(32),
+ // Optional WorkOS configuration
+ WORKOS_COOKIE_MAX_AGE: z.coerce.number().optional(),
+ WORKOS_COOKIE_NAME: z.string().optional(),
+ WORKOS_COOKIE_DOMAIN: z.string().optional(),
+ WORKOS_COOKIE_SAMESITE: z.enum(["lax", "strict", "none"]).optional(),
NODE_ENV: z.enum(["development", "production"]).optional(),
},
runtimeEnv: process.env,
diff --git a/packages/auth/package.json b/packages/auth/package.json
index e38fcbd..2e4ce4a 100644
--- a/packages/auth/package.json
+++ b/packages/auth/package.json
@@ -4,8 +4,6 @@
"type": "module",
"exports": {
".": "./src/index.ts",
- "./middleware": "./src/middleware.ts",
- "./client": "./src/client.ts",
"./env": "./env.ts"
},
"license": "MIT",
@@ -16,15 +14,15 @@
"typecheck": "tsc --noEmit"
},
"dependencies": {
- "@governance/db": "workspace:*",
"@t3-oss/env-core": "^0.13.8",
- "@workos-inc/node": "^7.27.0",
+ "@workos/authkit-tanstack-react-start": "^0.5.0",
"zod": "catalog:"
},
"devDependencies": {
"@governance/eslint-config": "workspace:*",
"@governance/prettier-config": "workspace:*",
"@governance/tsconfig": "workspace:*",
+ "@types/node": "catalog:",
"eslint": "catalog:",
"prettier": "catalog:",
"typescript": "catalog:"
diff --git a/packages/auth/script/auth-cli.ts b/packages/auth/script/auth-cli.ts
deleted file mode 100644
index fec9d34..0000000
--- a/packages/auth/script/auth-cli.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-/**
- * @fileoverview Better Auth CLI Configuration
- *
- * This file is used exclusively by the Better Auth CLI to generate database schemas.
- * DO NOT USE THIS FILE DIRECTLY IN YOUR APPLICATION.
- *
- * This configuration is consumed by the CLI command:
- * `pnpx @better-auth/cli generate --config script/auth-cli.ts --output ../db/src/auth-schema.ts`
- *
- * For actual authentication usage, import from "../src/index.ts" instead.
- */
-
-import { initAuth } from "../src/index";
-
-/**
- * CLI-only authentication configuration for schema generation.
- *
- * @warning This configuration is NOT intended for runtime use.
- * @warning Use the main auth configuration from "../src/index.ts" for your application.
- */
-export const auth = initAuth({
- baseUrl: "http://localhost:3000",
- productionUrl: "http://localhost:3000",
- secret: "secret",
-});
diff --git a/packages/auth/src/index.ts b/packages/auth/src/index.ts
index f173692..8a33801 100644
--- a/packages/auth/src/index.ts
+++ b/packages/auth/src/index.ts
@@ -1,40 +1,20 @@
-import type { BetterAuthOptions, BetterAuthPlugin } from "better-auth";
-import { db } from "@governance/db/client";
-import { betterAuth } from "better-auth";
-import { drizzleAdapter } from "better-auth/adapters/drizzle";
-import { oAuthProxy } from "better-auth/plugins";
+/**
+ * WorkOS AuthKit session types for TanStack Start
+ *
+ * This module re-exports the authentication types from the WorkOS AuthKit SDK
+ * for use throughout the application.
+ */
+export type {
+ UserInfo,
+ NoUserInfo,
+} from "@workos/authkit-tanstack-react-start";
-export function initAuth<
- TExtraPlugins extends BetterAuthPlugin[] = [],
->(options: {
- baseUrl: string;
- productionUrl: string;
- secret: string | undefined;
- extraPlugins?: TExtraPlugins;
-}) {
- const config = {
- database: drizzleAdapter(db, {
- provider: "pg",
- }),
- baseURL: options.baseUrl,
- secret: options.secret,
- plugins: [
- oAuthProxy({
- productionURL: options.productionUrl,
- }),
-
- ...(options.extraPlugins ?? []),
- ],
- socialProviders: {},
- onAPIError: {
- onError(error, ctx) {
- console.error("BETTER AUTH API ERROR", error, ctx);
- },
- },
- } satisfies BetterAuthOptions;
-
- return betterAuth(config);
-}
-
-export type Auth = ReturnType;
-export type Session = Auth["$Infer"]["Session"];
+// Re-export server functions for convenience
+export {
+ getAuth,
+ signOut,
+ getSignInUrl,
+ getSignUpUrl,
+ getAuthorizationUrl,
+ switchToOrganization,
+} from "@workos/authkit-tanstack-react-start";
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 8270123..ddd96dd 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -36,9 +36,6 @@ catalogs:
'@vitejs/plugin-react':
specifier: 5.1.0
version: 5.1.0
- better-auth:
- specifier: 1.4.0-beta.9
- version: 1.4.0-beta.9
eslint:
specifier: ^9.38.0
version: 9.38.0
@@ -146,9 +143,9 @@ importers:
'@trpc/tanstack-react-query':
specifier: 'catalog:'
version: 11.7.1(@tanstack/react-query@5.90.8(react@19.1.4))(@trpc/client@11.7.1(@trpc/server@11.7.1(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.7.1(typescript@5.9.3))(react-dom@19.1.4(react@19.1.4))(react@19.1.4)(typescript@5.9.3)
- better-auth:
- specifier: 'catalog:'
- version: 1.4.0-beta.9(better-sqlite3@12.2.0)(react-dom@19.1.4(react@19.1.4))(react@19.1.4)(solid-js@1.9.9)
+ '@workos/authkit-tanstack-react-start':
+ specifier: ^0.5.0
+ version: 0.5.0(@tanstack/react-router@1.135.2(react-dom@19.1.4(react@19.1.4))(react@19.1.4))(@tanstack/react-start@1.135.2(crossws@0.4.1(srvx@0.9.6))(react-dom@19.1.4(react@19.1.4))(react@19.1.4)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(react-dom@19.1.4(react@19.1.4))(react@19.1.4)
nitro:
specifier: 3.0.1-alpha.1
version: 3.0.1-alpha.1(@planetscale/database@1.19.0)(better-sqlite3@12.2.0)(chokidar@4.0.3)(drizzle-orm@0.44.7(@neondatabase/serverless@0.10.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.11.10)(@vercel/postgres@0.10.0(utf-8-validate@6.0.4))(better-sqlite3@12.2.0)(gel@2.0.0)(kysely@0.28.5)(mysql2@3.11.3)(postgres@3.4.4)(prisma@5.22.0))(mysql2@3.11.3)(rollup@4.52.5)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))
@@ -192,9 +189,6 @@ importers:
'@vitejs/plugin-react':
specifier: 'catalog:'
version: 5.1.0(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))
- '@workos/authkit-tanstack-react-start':
- specifier: ^0.5.0
- version: 0.5.0(@tanstack/react-router@1.135.2(react-dom@19.1.4(react@19.1.4))(react@19.1.4))(@tanstack/react-start@1.135.2(crossws@0.4.1(srvx@0.9.6))(react-dom@19.1.4(react@19.1.4))(react@19.1.4)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(react-dom@19.1.4(react@19.1.4))(react@19.1.4)
eslint:
specifier: 'catalog:'
version: 9.38.0(jiti@2.6.1)
@@ -256,15 +250,12 @@ importers:
packages/auth:
dependencies:
- '@governance/db':
- specifier: workspace:*
- version: link:../db
'@t3-oss/env-core':
specifier: ^0.13.8
version: 0.13.8(arktype@2.1.20)(typescript@5.9.3)(valibot@1.0.0-beta.15(typescript@5.9.3))(zod@4.1.12)
- '@workos-inc/node':
- specifier: ^7.27.0
- version: 7.82.0
+ '@workos/authkit-tanstack-react-start':
+ specifier: ^0.5.0
+ version: 0.5.0(@tanstack/react-router@1.135.2(react-dom@19.2.3(react@19.1.4))(react@19.1.4))(@tanstack/react-start@1.135.2(crossws@0.4.1(srvx@0.9.6))(react-dom@19.2.3(react@19.1.4))(react@19.1.4)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(react-dom@19.2.3(react@19.1.4))(react@19.1.4)
zod:
specifier: 'catalog:'
version: 4.1.12
@@ -278,6 +269,9 @@ importers:
'@governance/tsconfig':
specifier: workspace:*
version: link:../../tooling/typescript
+ '@types/node':
+ specifier: 'catalog:'
+ version: 22.18.12
eslint:
specifier: 'catalog:'
version: 9.38.0(jiti@2.6.1)
@@ -666,28 +660,6 @@ packages:
resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==}
engines: {node: '>=6.9.0'}
- '@better-auth/core@1.4.0-beta.9':
- resolution: {integrity: sha512-4YanGHTihKhKamN2T4ndjYTR5By162kk88DPt2xwwVc2t/MnSO7TiVBB0V5gZ6JM6YMX2aSPTfMbk89AEjpvCQ==}
- peerDependencies:
- '@better-auth/utils': 0.3.0
- '@better-fetch/fetch': 1.1.18
- better-call: 1.0.19
- better-sqlite3: ^12.4.1
- jose: ^6.1.0
- kysely: ^0.28.5
- nanostores: ^1.0.1
-
- '@better-auth/telemetry@1.4.0-beta.9':
- resolution: {integrity: sha512-lvl3nq648uAt3ACpjtBBW1Nhec1lxciWYKy+9wgkQRKuE+l4NyxVdfCnDAxxUPAScQNJ+6zMXgt9ZRW5cJJ8bQ==}
- peerDependencies:
- '@better-auth/core': 1.4.0-beta.9
-
- '@better-auth/utils@0.3.0':
- resolution: {integrity: sha512-W+Adw6ZA6mgvnSnhOki270rwJ42t4XzSK6YWGF//BbVXL6SwCLWfyzBc1lN2m/4RM28KubdBKQ4X5VMoLRNPQw==}
-
- '@better-fetch/fetch@1.1.18':
- resolution: {integrity: sha512-rEFOE1MYIsBmoMJtQbl32PGHHXuG2hDxvEd7rUHE0vCBoFQVSDqaVs9hkZEtHCxRoY+CljXKFCOuJ8uxqw1LcA==}
-
'@cspotcode/source-map-support@0.8.1':
resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
engines: {node: '>=12'}
@@ -1068,9 +1040,6 @@ packages:
'@fontsource-variable/geist@5.2.8':
resolution: {integrity: sha512-cJ6m9e+8MQ5dCYJsLylfZrgBh6KkG4bOLckB35Tr9J/EqdkEM6QllH5PxqP1dhTvFup+HtMRPuz9xOjxXJggxw==}
- '@hexagon/base64@1.1.28':
- resolution: {integrity: sha512-lhqDEAvWixy3bZ+UOYbPwUbBkwBq5C1LAJ/xPC8Oi+lL54oyakv/npbA0aU2hgCsx/1NUd4IBvV03+aUBWxerw==}
-
'@humanfs/core@0.19.1':
resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
engines: {node: '>=18.18.0'}
@@ -1136,9 +1105,6 @@ packages:
'@jridgewell/trace-mapping@0.3.9':
resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
- '@levischuck/tiny-cbor@0.2.11':
- resolution: {integrity: sha512-llBRm4dT4Z89aRsm6u2oEZ8tfwL/2l6BwpZ7JcyieouniDECM5AqNgr/y08zalEIvW3RSK4upYyybDcmjXqAow==}
-
'@napi-rs/wasm-runtime@0.2.12':
resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==}
@@ -1154,14 +1120,6 @@ packages:
'@next/eslint-plugin-next@16.0.0':
resolution: {integrity: sha512-IB7RzmmtrPOrpAgEBR1PIQPD0yea5lggh5cq54m51jHjjljU80Ia+czfxJYMlSDl1DPvpzb8S9TalCc0VMo9Hw==}
- '@noble/ciphers@2.0.0':
- resolution: {integrity: sha512-j/l6jpnpaIBM87cAYPJzi/6TgqmBv9spkqPyCXvRYsu5uxqh6tPJZDnD85yo8VWqzTuTQPgfv7NgT63u7kbwAQ==}
- engines: {node: '>= 20.19.0'}
-
- '@noble/hashes@2.0.0':
- resolution: {integrity: sha512-h8VUBlE8R42+XIDO229cgisD287im3kdY6nbNZJFjc6ZvKIXPYXe6Vc/t+kyjFdMFyt5JpapzTsEg8n63w5/lw==}
- engines: {node: '>= 20.19.0'}
-
'@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'}
@@ -1464,29 +1422,6 @@ packages:
cpu: [x64]
os: [win32]
- '@peculiar/asn1-android@2.4.0':
- resolution: {integrity: sha512-YFueREq97CLslZZBI8dKzis7jMfEHSLxM+nr0Zdx1POiXFLjqqwoY5s0F1UimdBiEw/iKlHey2m56MRDv7Jtyg==}
-
- '@peculiar/asn1-ecc@2.4.0':
- resolution: {integrity: sha512-fJiYUBCJBDkjh347zZe5H81BdJ0+OGIg0X9z06v8xXUoql3MFeENUX0JsjCaVaU9A0L85PefLPGYkIoGpTnXLQ==}
-
- '@peculiar/asn1-rsa@2.4.0':
- resolution: {integrity: sha512-6PP75voaEnOSlWR9sD25iCQyLgFZHXbmxvUfnnDcfL6Zh5h2iHW38+bve4LfH7a60x7fkhZZNmiYqAlAff9Img==}
-
- '@peculiar/asn1-schema@2.4.0':
- resolution: {integrity: sha512-umbembjIWOrPSOzEGG5vxFLkeM8kzIhLkgigtsOrfLKnuzxWxejAcUX+q/SoZCdemlODOcr5WiYa7+dIEzBXZQ==}
-
- '@peculiar/asn1-x509@2.4.0':
- resolution: {integrity: sha512-F7mIZY2Eao2TaoVqigGMLv+NDdpwuBKU1fucHPONfzaBS4JXXCNCmfO0Z3dsy7JzKGqtDcYC1mr9JjaZQZNiuw==}
-
- '@peculiar/json-schema@1.1.12':
- resolution: {integrity: sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==}
- engines: {node: '>=8.0.0'}
-
- '@peculiar/webcrypto@1.5.0':
- resolution: {integrity: sha512-BRs5XUAwiyCDQMsVA9IDvDa7UBR9gAvPHgugOeGng3YN6vJ9JYonyDc0lNczErgtCWtucjR5N7VtaonboD/ezg==}
- engines: {node: '>=10.12.0'}
-
'@petamoriken/float16@3.9.3':
resolution: {integrity: sha512-8awtpHXCx/bNpFt4mt2xdkgtgVvKqty8VbjHI/WWWQuEw+KLzFot3f4+LkQY9YmOtq7A5GdOnqoIC8Pdygjk2g==}
@@ -2336,13 +2271,6 @@ packages:
'@rtsao/scc@1.1.0':
resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}
- '@simplewebauthn/browser@13.1.2':
- resolution: {integrity: sha512-aZnW0KawAM83fSBUgglP5WofbrLbLyr7CoPqYr66Eppm7zO86YX6rrCjRB3hQKPrL7ATvY4FVXlykZ6w6FwYYw==}
-
- '@simplewebauthn/server@13.1.2':
- resolution: {integrity: sha512-VwoDfvLXSCaRiD+xCIuyslU0HLxVggeE5BL06+GbsP2l1fGf5op8e0c3ZtKoi+vSg1q4ikjtAghC23ze2Q3H9g==}
- engines: {node: '>=20.0.0'}
-
'@t3-oss/env-core@0.13.8':
resolution: {integrity: sha512-L1inmpzLQyYu4+Q1DyrXsGJYCXbtXjC4cICw1uAKv0ppYPQv656lhZPU91Qd1VS6SO/bou1/q5ufVzBGbNsUpw==}
peerDependencies:
@@ -2681,9 +2609,6 @@ packages:
'@tybys/wasm-util@0.10.1':
resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==}
- '@types/accepts@1.3.7':
- resolution: {integrity: sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==}
-
'@types/babel__core@7.20.5':
resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
@@ -2699,39 +2624,12 @@ packages:
'@types/better-sqlite3@7.6.13':
resolution: {integrity: sha512-NMv9ASNARoKksWtsq/SHakpYAYnhBrQgGD8zkLYk/jaK8jUGn08CfEdTRgYhMypUQAfzSP8W6gNLe0q19/t4VA==}
- '@types/body-parser@1.19.6':
- resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==}
-
- '@types/connect@3.4.38':
- resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
-
- '@types/content-disposition@0.5.9':
- resolution: {integrity: sha512-8uYXI3Gw35MhiVYhG3s295oihrxRyytcRHjSjqnqZVDDy/xcGBRny7+Xj1Wgfhv5QzRtN2hB2dVRBUX9XW3UcQ==}
-
- '@types/cookie@0.5.4':
- resolution: {integrity: sha512-7z/eR6O859gyWIAjuvBWFzNURmf2oPBmJlfVWkwehU5nzIyjwBsTh7WMmEEV4JFnHuQ3ex4oyTvfKzcyJVDBNA==}
-
- '@types/cookies@0.9.2':
- resolution: {integrity: sha512-1AvkDdZM2dbyFybL4fxpuNCaWyv//0AwsuUk2DWeXyM1/5ZKm6W3z6mQi24RZ4l2ucY+bkSHzbDVpySqPGuV8A==}
-
'@types/estree@1.0.8':
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
- '@types/express-serve-static-core@4.19.8':
- resolution: {integrity: sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA==}
-
- '@types/express@4.17.25':
- resolution: {integrity: sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==}
-
'@types/glob@7.2.0':
resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==}
- '@types/http-assert@1.5.6':
- resolution: {integrity: sha512-TTEwmtjgVbYAzZYWyeHPrrtWnfVkm8tQkP8P21uQifPgMRgjrow3XDEYqucuC8SKZJT7pUnhU/JymvjggxO9vw==}
-
- '@types/http-errors@2.0.5':
- resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==}
-
'@types/inquirer@6.5.0':
resolution: {integrity: sha512-rjaYQ9b9y/VFGOpqBEXRavc3jh0a+e6evAbI31tMda8VlPaSy0AZJfXsvmIe3wklc7W6C3zCSfleuMXR7NOyXw==}
@@ -2741,27 +2639,9 @@ packages:
'@types/json5@0.0.29':
resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
- '@types/keygrip@1.0.6':
- resolution: {integrity: sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ==}
-
- '@types/koa-compose@3.2.9':
- resolution: {integrity: sha512-BroAZ9FTvPiCy0Pi8tjD1OfJ7bgU1gQf0eR6e1Vm+JJATy9eKOG3hQMFtMciMawiSOVnLMdmUOC46s7HBhSTsA==}
-
- '@types/koa@2.15.0':
- resolution: {integrity: sha512-7QFsywoE5URbuVnG3loe03QXuGajrnotr3gQkXcEBShORai23MePfFYdhz90FEtBBpkyIYQbVD+evKtloCgX3g==}
-
- '@types/mime@1.3.5':
- resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==}
-
'@types/minimatch@5.1.2':
resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==}
- '@types/node@17.0.45':
- resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==}
-
- '@types/node@20.19.30':
- resolution: {integrity: sha512-WJtwWJu7UdlvzEAUm484QNg5eAoq5QR08KDNx7g45Usrs2NtOPiX8ugDqmKdXkyL03rBqU5dYNYVQetEpBHq2g==}
-
'@types/node@22.18.12':
resolution: {integrity: sha512-BICHQ67iqxQGFSzfCFTT7MRQ5XcBjG5aeKh5Ok38UBbPe5fxTyE+aHFxwVrGyr8GNlqFMLKD1D3P2K/1ks8tog==}
@@ -2774,12 +2654,6 @@ packages:
'@types/pg@8.11.6':
resolution: {integrity: sha512-/2WmmBXHLsfRqzfHW7BNZ8SbYzE8OSk7i3WjFYvfgRHj7S1xj+16Je5fUKv3lVdVzk/zn9TXOqf+avFCFIE0yQ==}
- '@types/qs@6.14.0':
- resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==}
-
- '@types/range-parser@1.2.7':
- resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==}
-
'@types/react-dom@19.1.9':
resolution: {integrity: sha512-qXRuZaOsAdXKFyOhRBg6Lqqc0yay13vN7KrIg4L7N4aaHN68ma9OK3NE1BoDFgFOTfM7zg+3/8+2n8rLUH3OKQ==}
peerDependencies:
@@ -2788,15 +2662,6 @@ packages:
'@types/react@19.1.12':
resolution: {integrity: sha512-cMoR+FoAf/Jyq6+Df2/Z41jISvGZZ2eTlnsaJRptmZ76Caldwy1odD4xTr/gNV9VLj0AWgg/nmkevIyUfIIq5w==}
- '@types/send@0.17.6':
- resolution: {integrity: sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==}
-
- '@types/send@1.2.1':
- resolution: {integrity: sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==}
-
- '@types/serve-static@1.15.10':
- resolution: {integrity: sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==}
-
'@types/through@0.0.33':
resolution: {integrity: sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==}
@@ -2888,10 +2753,6 @@ packages:
'@vue/shared@3.5.16':
resolution: {integrity: sha512-c/0fWy3Jw6Z8L9FmTyYfkpM5zklnqqa9+a6dz3DvONRKW2NEbh46BP0FHuLFSWi2TnQEtp91Z6zOWNrU6QiyPg==}
- '@workos-inc/node@7.82.0':
- resolution: {integrity: sha512-8h6XjIJf8nqNGYQMkWsjZ72WXMtzqrb4Azz39schXWoSRmwoK6tK+GpeAviJ9slddiJdOcp0Ht9/r+L6pGQMCg==}
- engines: {node: '>=16'}
-
'@workos-inc/node@8.0.0':
resolution: {integrity: sha512-D8VDfx0GXeiVm8vccAl0rElW7taebRnrteKPJzZwehwzI9W/Usa4qKfmwxj+7Lh1Z1deEocDRCpZpV7ml4GpWQ==}
engines: {node: '>=20.15.0'}
@@ -3014,10 +2875,6 @@ packages:
resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==}
engines: {node: '>= 0.4'}
- asn1js@3.0.6:
- resolution: {integrity: sha512-UOCGPYbl0tv8+006qks/dTgV9ajs97X2p0FAbyS2iyCRrmLSRolDaHdp+v/CLgnzHc3fVB+CwYiUmei7ndFcgA==}
- engines: {node: '>=12.0.0'}
-
ast-types-flow@0.0.8:
resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==}
@@ -3066,38 +2923,6 @@ packages:
resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==}
engines: {node: '>=10.0.0'}
- better-auth@1.4.0-beta.9:
- resolution: {integrity: sha512-JmVvaC/VCtFtI/sUGkoaLnzV/nnMn13XR6Vrkf4zGxah6g38S0GPvD7iZlBHehTN6Fb5aUwWPKgqFowxyOm2xw==}
- peerDependencies:
- '@lynx-js/react': '*'
- '@sveltejs/kit': '*'
- next: '*'
- react: '*'
- react-dom: '*'
- solid-js: '*'
- svelte: '*'
- vue: '*'
- peerDependenciesMeta:
- '@lynx-js/react':
- optional: true
- '@sveltejs/kit':
- optional: true
- next:
- optional: true
- react:
- optional: true
- react-dom:
- optional: true
- solid-js:
- optional: true
- svelte:
- optional: true
- vue:
- optional: true
-
- better-call@1.0.19:
- resolution: {integrity: sha512-sI3GcA1SCVa3H+CDHl8W8qzhlrckwXOTKhqq3OOPXjgn5aTOMIqGY34zLY/pHA6tRRMjTUC3lz5Mi7EbDA24Kw==}
-
better-sqlite3@12.2.0:
resolution: {integrity: sha512-eGbYq2CT+tos1fBwLQ/tkBt9J5M3JEHjku4hbvQUePCckkvVf14xWj+1m7dGoK81M/fOjFT7yM9UMeKT/+vFLQ==}
engines: {node: 20.x || 22.x || 23.x || 24.x}
@@ -3136,9 +2961,6 @@ packages:
buffer@5.7.1:
resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
- buffer@6.0.3:
- resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
-
bufferutil@4.0.8:
resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
engines: {node: '>=6.14.2'}
@@ -3270,10 +3092,6 @@ packages:
cookie-es@2.0.0:
resolution: {integrity: sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg==}
- cookie@0.5.0:
- resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
- engines: {node: '>= 0.6'}
-
copy-anything@4.0.5:
resolution: {integrity: sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==}
engines: {node: '>=18'}
@@ -3390,9 +3208,6 @@ packages:
resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
engines: {node: '>= 0.4'}
- defu@6.1.4:
- resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}
-
degenerator@5.0.1:
resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==}
engines: {node: '>= 14'}
@@ -4105,24 +3920,6 @@ packages:
resolution: {integrity: sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==}
engines: {node: '>= 12'}
- iron-session@6.3.1:
- resolution: {integrity: sha512-3UJ7y2vk/WomAtEySmPgM6qtYF1cZ3tXuWX5GsVX4PJXAcs5y/sV9HuSfpjKS6HkTL/OhZcTDWJNLZ7w+Erx3A==}
- engines: {node: '>=12'}
- peerDependencies:
- express: '>=4'
- koa: '>=2'
- next: '>=10'
- peerDependenciesMeta:
- express:
- optional: true
- koa:
- optional: true
- next:
- optional: true
-
- iron-webcrypto@0.2.8:
- resolution: {integrity: sha512-YPdCvjFMOBjXaYuDj5tiHst5CEk6Xw84Jo8Y2+jzhMceclAnb3+vNPP/CTtb5fO2ZEuXEaO4N+w62Vfko757KA==}
-
iron-webcrypto@2.0.0:
resolution: {integrity: sha512-rtffZKDUHciZElM8mjFCufBC7nVhCxHYyWHESqs89OioEDz4parOofd8/uhrejh/INhQFfYQfByS22LlezR9sQ==}
@@ -4293,12 +4090,6 @@ packages:
resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
hasBin: true
- jose@5.6.3:
- resolution: {integrity: sha512-1Jh//hEEwMhNYPDDLwXHa2ePWgWiFNNUadVmguAAw2IJ6sj9mNxV5tGXJNqlMkJAybF6Lgw1mISDxTePP/187g==}
-
- jose@6.1.0:
- resolution: {integrity: sha512-TTQJyoEoKcC1lscpVDCSsVgYzUDg/0Bt3WE//WiTPK6uOCQC2KZS4MpugbMWt/zyjkopgZoXhZuCi00gLudfUA==}
-
jose@6.1.3:
resolution: {integrity: sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==}
@@ -4357,9 +4148,6 @@ packages:
resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==}
engines: {node: '>=0.10'}
- leb@1.0.0:
- resolution: {integrity: sha512-Y3c3QZfvKWHX60BVOQPhLCvVGmDYWyJEiINE3drOog6KCyN2AOwvuQQzlS3uJg1J85kzpILXIUwRXULWavir+w==}
-
levn@0.4.1:
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
engines: {node: '>= 0.8.0'}
@@ -4539,10 +4327,6 @@ packages:
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
- nanostores@1.0.1:
- resolution: {integrity: sha512-kNZ9xnoJYKg/AfxjrVL4SS0fKX++4awQReGqWnwTRHxeHGZ1FJFVgTqr/eMrNQdp0Tz7M7tG/TDaX8QfHDwVCw==}
- engines: {node: ^20.0.0 || >=22.0.0}
-
napi-build-utils@2.0.0:
resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==}
@@ -4908,17 +4692,6 @@ packages:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
- pvtsutils@1.3.6:
- resolution: {integrity: sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==}
-
- pvutils@1.1.3:
- resolution: {integrity: sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==}
- engines: {node: '>=6.0.0'}
-
- qs@6.14.1:
- resolution: {integrity: sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==}
- engines: {node: '>=0.6'}
-
queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
@@ -5055,9 +4828,6 @@ packages:
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
- rou3@0.5.1:
- resolution: {integrity: sha512-OXMmJ3zRk2xeXFGfA3K+EOPHC5u7RDFG7lIOx0X1pdnhUkI8MdVrbV+sNsD80ElpUZ+MRHdyxPnFthq9VHs8uQ==}
-
rou3@0.7.10:
resolution: {integrity: sha512-aoFj6f7MJZ5muJ+Of79nrhs9N3oLGqi2VEMe94Zbkjb6Wupha46EuoYgpWSOZlXww3bbd8ojgXTAA2mzimX5Ww==}
@@ -5129,9 +4899,6 @@ packages:
resolution: {integrity: sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==}
engines: {node: '>=10'}
- set-cookie-parser@2.7.1:
- resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==}
-
set-function-length@1.2.2:
resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
engines: {node: '>= 0.4'}
@@ -5499,9 +5266,6 @@ packages:
resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==}
engines: {node: '>= 0.4'}
- uncrypto@0.1.3:
- resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==}
-
undici-types@6.21.0:
resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
@@ -5721,9 +5485,6 @@ packages:
wcwidth@1.0.1:
resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
- webcrypto-core@1.8.1:
- resolution: {integrity: sha512-P+x1MvlNCXlKbLSOY4cYrdreqPG5hbzkmawbcXLKN/mf6DZW0SdNNkZ+sjwsqVkI4A4Ko2sPZmkZtCKY58w83A==}
-
webpack-virtual-modules@0.6.2:
resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
@@ -6037,27 +5798,6 @@ snapshots:
'@babel/helper-string-parser': 7.27.1
'@babel/helper-validator-identifier': 7.28.5
- '@better-auth/core@1.4.0-beta.9(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.18)(better-call@1.0.19)(better-sqlite3@12.2.0)(jose@6.1.0)(kysely@0.28.5)(nanostores@1.0.1)':
- dependencies:
- '@better-auth/utils': 0.3.0
- '@better-fetch/fetch': 1.1.18
- better-call: 1.0.19
- better-sqlite3: 12.2.0
- jose: 6.1.0
- kysely: 0.28.5
- nanostores: 1.0.1
- zod: 4.1.12
-
- '@better-auth/telemetry@1.4.0-beta.9(@better-auth/core@1.4.0-beta.9(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.18)(better-call@1.0.19)(better-sqlite3@12.2.0)(jose@6.1.0)(kysely@0.28.5)(nanostores@1.0.1))':
- dependencies:
- '@better-auth/core': 1.4.0-beta.9(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.18)(better-call@1.0.19)(better-sqlite3@12.2.0)(jose@6.1.0)(kysely@0.28.5)(nanostores@1.0.1)
- '@better-auth/utils': 0.3.0
- '@better-fetch/fetch': 1.1.18
-
- '@better-auth/utils@0.3.0': {}
-
- '@better-fetch/fetch@1.1.18': {}
-
'@cspotcode/source-map-support@0.8.1':
dependencies:
'@jridgewell/trace-mapping': 0.3.9
@@ -6307,8 +6047,6 @@ snapshots:
'@fontsource-variable/geist@5.2.8': {}
- '@hexagon/base64@1.1.28': {}
-
'@humanfs/core@0.19.1': {}
'@humanfs/node@0.16.7':
@@ -6373,8 +6111,6 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.5
- '@levischuck/tiny-cbor@0.2.11': {}
-
'@napi-rs/wasm-runtime@0.2.12':
dependencies:
'@emnapi/core': 1.6.0
@@ -6402,10 +6138,6 @@ snapshots:
dependencies:
fast-glob: 3.3.1
- '@noble/ciphers@2.0.0': {}
-
- '@noble/hashes@2.0.0': {}
-
'@nodelib/fs.scandir@2.1.5':
dependencies:
'@nodelib/fs.stat': 2.0.5
@@ -6582,51 +6314,6 @@ snapshots:
'@oxc-transform/binding-win32-x64-msvc@0.96.0':
optional: true
- '@peculiar/asn1-android@2.4.0':
- dependencies:
- '@peculiar/asn1-schema': 2.4.0
- asn1js: 3.0.6
- tslib: 2.8.1
-
- '@peculiar/asn1-ecc@2.4.0':
- dependencies:
- '@peculiar/asn1-schema': 2.4.0
- '@peculiar/asn1-x509': 2.4.0
- asn1js: 3.0.6
- tslib: 2.8.1
-
- '@peculiar/asn1-rsa@2.4.0':
- dependencies:
- '@peculiar/asn1-schema': 2.4.0
- '@peculiar/asn1-x509': 2.4.0
- asn1js: 3.0.6
- tslib: 2.8.1
-
- '@peculiar/asn1-schema@2.4.0':
- dependencies:
- asn1js: 3.0.6
- pvtsutils: 1.3.6
- tslib: 2.8.1
-
- '@peculiar/asn1-x509@2.4.0':
- dependencies:
- '@peculiar/asn1-schema': 2.4.0
- asn1js: 3.0.6
- pvtsutils: 1.3.6
- tslib: 2.8.1
-
- '@peculiar/json-schema@1.1.12':
- dependencies:
- tslib: 2.8.1
-
- '@peculiar/webcrypto@1.5.0':
- dependencies:
- '@peculiar/asn1-schema': 2.4.0
- '@peculiar/json-schema': 1.1.12
- pvtsutils: 1.3.6
- tslib: 2.8.1
- webcrypto-core: 1.8.1
-
'@petamoriken/float16@3.9.3':
optional: true
@@ -7492,18 +7179,6 @@ snapshots:
'@rtsao/scc@1.1.0': {}
- '@simplewebauthn/browser@13.1.2': {}
-
- '@simplewebauthn/server@13.1.2':
- dependencies:
- '@hexagon/base64': 1.1.28
- '@levischuck/tiny-cbor': 0.2.11
- '@peculiar/asn1-android': 2.4.0
- '@peculiar/asn1-ecc': 2.4.0
- '@peculiar/asn1-rsa': 2.4.0
- '@peculiar/asn1-schema': 2.4.0
- '@peculiar/asn1-x509': 2.4.0
-
'@t3-oss/env-core@0.13.8(arktype@2.1.20)(typescript@5.9.3)(valibot@1.0.0-beta.15(typescript@5.9.3))(zod@4.1.12)':
optionalDependencies:
arktype: 2.1.20
@@ -7681,6 +7356,17 @@ snapshots:
tiny-invariant: 1.3.3
tiny-warning: 1.0.3
+ '@tanstack/react-router@1.135.2(react-dom@19.2.3(react@19.1.4))(react@19.1.4)':
+ dependencies:
+ '@tanstack/history': 1.133.28
+ '@tanstack/react-store': 0.8.0(react-dom@19.2.3(react@19.1.4))(react@19.1.4)
+ '@tanstack/router-core': 1.135.2
+ isbot: 5.1.31
+ react: 19.1.4
+ react-dom: 19.2.3(react@19.1.4)
+ tiny-invariant: 1.3.3
+ tiny-warning: 1.0.3
+
'@tanstack/react-start-client@1.135.2(react-dom@19.1.4(react@19.1.4))(react@19.1.4)':
dependencies:
'@tanstack/react-router': 1.135.2(react-dom@19.1.4(react@19.1.4))(react@19.1.4)
@@ -7691,6 +7377,16 @@ snapshots:
tiny-invariant: 1.3.3
tiny-warning: 1.0.3
+ '@tanstack/react-start-client@1.135.2(react-dom@19.2.3(react@19.1.4))(react@19.1.4)':
+ dependencies:
+ '@tanstack/react-router': 1.135.2(react-dom@19.2.3(react@19.1.4))(react@19.1.4)
+ '@tanstack/router-core': 1.135.2
+ '@tanstack/start-client-core': 1.135.2
+ react: 19.1.4
+ react-dom: 19.2.3(react@19.1.4)
+ tiny-invariant: 1.3.3
+ tiny-warning: 1.0.3
+
'@tanstack/react-start-server@1.135.2(crossws@0.4.1(srvx@0.9.6))(react-dom@19.1.4(react@19.1.4))(react@19.1.4)':
dependencies:
'@tanstack/history': 1.133.28
@@ -7703,6 +7399,18 @@ snapshots:
transitivePeerDependencies:
- crossws
+ '@tanstack/react-start-server@1.135.2(crossws@0.4.1(srvx@0.9.6))(react-dom@19.2.3(react@19.1.4))(react@19.1.4)':
+ dependencies:
+ '@tanstack/history': 1.133.28
+ '@tanstack/react-router': 1.135.2(react-dom@19.2.3(react@19.1.4))(react@19.1.4)
+ '@tanstack/router-core': 1.135.2
+ '@tanstack/start-client-core': 1.135.2
+ '@tanstack/start-server-core': 1.135.2(crossws@0.4.1(srvx@0.9.6))
+ react: 19.1.4
+ react-dom: 19.2.3(react@19.1.4)
+ transitivePeerDependencies:
+ - crossws
+
'@tanstack/react-start@1.135.2(crossws@0.4.1(srvx@0.9.6))(react-dom@19.1.4(react@19.1.4))(react@19.1.4)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))':
dependencies:
'@tanstack/react-router': 1.135.2(react-dom@19.1.4(react@19.1.4))(react@19.1.4)
@@ -7723,6 +7431,26 @@ snapshots:
- vite-plugin-solid
- webpack
+ '@tanstack/react-start@1.135.2(crossws@0.4.1(srvx@0.9.6))(react-dom@19.2.3(react@19.1.4))(react@19.1.4)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))':
+ dependencies:
+ '@tanstack/react-router': 1.135.2(react-dom@19.2.3(react@19.1.4))(react@19.1.4)
+ '@tanstack/react-start-client': 1.135.2(react-dom@19.2.3(react@19.1.4))(react@19.1.4)
+ '@tanstack/react-start-server': 1.135.2(crossws@0.4.1(srvx@0.9.6))(react-dom@19.2.3(react@19.1.4))(react@19.1.4)
+ '@tanstack/router-utils': 1.133.19
+ '@tanstack/start-client-core': 1.135.2
+ '@tanstack/start-plugin-core': 1.135.2(@tanstack/react-router@1.135.2(react-dom@19.2.3(react@19.1.4))(react@19.1.4))(crossws@0.4.1(srvx@0.9.6))(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))
+ '@tanstack/start-server-core': 1.135.2(crossws@0.4.1(srvx@0.9.6))
+ pathe: 2.0.3
+ react: 19.1.4
+ react-dom: 19.2.3(react@19.1.4)
+ vite: 7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
+ transitivePeerDependencies:
+ - '@rsbuild/core'
+ - crossws
+ - supports-color
+ - vite-plugin-solid
+ - webpack
+
'@tanstack/react-store@0.7.7(react-dom@19.1.4(react@19.1.4))(react@19.1.4)':
dependencies:
'@tanstack/store': 0.7.7
@@ -7737,6 +7465,13 @@ snapshots:
react-dom: 19.1.4(react@19.1.4)
use-sync-external-store: 1.6.0(react@19.1.4)
+ '@tanstack/react-store@0.8.0(react-dom@19.2.3(react@19.1.4))(react@19.1.4)':
+ dependencies:
+ '@tanstack/store': 0.8.0
+ react: 19.1.4
+ react-dom: 19.2.3(react@19.1.4)
+ use-sync-external-store: 1.6.0(react@19.1.4)
+
'@tanstack/router-core@1.135.2':
dependencies:
'@tanstack/history': 1.133.28
@@ -7805,6 +7540,28 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@tanstack/router-plugin@1.135.2(@tanstack/react-router@1.135.2(react-dom@19.2.3(react@19.1.4))(react@19.1.4))(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.5)
+ '@babel/template': 7.27.2
+ '@babel/traverse': 7.28.5
+ '@babel/types': 7.28.5
+ '@tanstack/router-core': 1.135.2
+ '@tanstack/router-generator': 1.135.2
+ '@tanstack/router-utils': 1.133.19
+ '@tanstack/virtual-file-routes': 1.133.19
+ babel-dead-code-elimination: 1.0.10
+ chokidar: 3.6.0
+ unplugin: 2.3.10
+ zod: 3.25.76
+ optionalDependencies:
+ '@tanstack/react-router': 1.135.2(react-dom@19.2.3(react@19.1.4))(react@19.1.4)
+ vite: 7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
+ transitivePeerDependencies:
+ - supports-color
+
'@tanstack/router-ssr-query-core@1.135.2(@tanstack/query-core@5.90.8)(@tanstack/router-core@1.135.2)':
dependencies:
'@tanstack/query-core': 5.90.8
@@ -7879,6 +7636,38 @@ snapshots:
- vite-plugin-solid
- webpack
+ '@tanstack/start-plugin-core@1.135.2(@tanstack/react-router@1.135.2(react-dom@19.2.3(react@19.1.4))(react@19.1.4))(crossws@0.4.1(srvx@0.9.6))(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))':
+ dependencies:
+ '@babel/code-frame': 7.26.2
+ '@babel/core': 7.28.5
+ '@babel/types': 7.28.5
+ '@rolldown/pluginutils': 1.0.0-beta.40
+ '@tanstack/router-core': 1.135.2
+ '@tanstack/router-generator': 1.135.2
+ '@tanstack/router-plugin': 1.135.2(@tanstack/react-router@1.135.2(react-dom@19.2.3(react@19.1.4))(react@19.1.4))(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))
+ '@tanstack/router-utils': 1.133.19
+ '@tanstack/server-functions-plugin': 1.134.5(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))
+ '@tanstack/start-client-core': 1.135.2
+ '@tanstack/start-server-core': 1.135.2(crossws@0.4.1(srvx@0.9.6))
+ babel-dead-code-elimination: 1.0.10
+ cheerio: 1.1.2
+ exsolve: 1.0.7
+ pathe: 2.0.3
+ srvx: 0.8.16
+ tinyglobby: 0.2.15
+ ufo: 1.6.1
+ vite: 7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
+ vitefu: 1.1.1(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))
+ xmlbuilder2: 3.1.1
+ zod: 3.25.76
+ transitivePeerDependencies:
+ - '@rsbuild/core'
+ - '@tanstack/react-router'
+ - crossws
+ - supports-color
+ - vite-plugin-solid
+ - webpack
+
'@tanstack/start-server-core@1.135.2(crossws@0.4.1(srvx@0.9.6))':
dependencies:
'@tanstack/history': 1.133.28
@@ -7970,10 +7759,6 @@ snapshots:
tslib: 2.8.1
optional: true
- '@types/accepts@1.3.7':
- dependencies:
- '@types/node': 24.9.1
-
'@types/babel__core@7.20.5':
dependencies:
'@babel/parser': 7.28.5
@@ -8000,50 +7785,12 @@ snapshots:
'@types/node': 24.9.1
optional: true
- '@types/body-parser@1.19.6':
- dependencies:
- '@types/connect': 3.4.38
- '@types/node': 24.9.1
-
- '@types/connect@3.4.38':
- dependencies:
- '@types/node': 24.9.1
-
- '@types/content-disposition@0.5.9': {}
-
- '@types/cookie@0.5.4': {}
-
- '@types/cookies@0.9.2':
- dependencies:
- '@types/connect': 3.4.38
- '@types/express': 4.17.25
- '@types/keygrip': 1.0.6
- '@types/node': 24.9.1
-
'@types/estree@1.0.8': {}
- '@types/express-serve-static-core@4.19.8':
- dependencies:
- '@types/node': 24.9.1
- '@types/qs': 6.14.0
- '@types/range-parser': 1.2.7
- '@types/send': 1.2.1
-
- '@types/express@4.17.25':
- dependencies:
- '@types/body-parser': 1.19.6
- '@types/express-serve-static-core': 4.19.8
- '@types/qs': 6.14.0
- '@types/serve-static': 1.15.10
-
'@types/glob@7.2.0':
dependencies:
'@types/minimatch': 5.1.2
- '@types/node': 20.19.30
-
- '@types/http-assert@1.5.6': {}
-
- '@types/http-errors@2.0.5': {}
+ '@types/node': 24.9.1
'@types/inquirer@6.5.0':
dependencies:
@@ -8054,33 +7801,8 @@ snapshots:
'@types/json5@0.0.29': {}
- '@types/keygrip@1.0.6': {}
-
- '@types/koa-compose@3.2.9':
- dependencies:
- '@types/koa': 2.15.0
-
- '@types/koa@2.15.0':
- dependencies:
- '@types/accepts': 1.3.7
- '@types/content-disposition': 0.5.9
- '@types/cookies': 0.9.2
- '@types/http-assert': 1.5.6
- '@types/http-errors': 2.0.5
- '@types/keygrip': 1.0.6
- '@types/koa-compose': 3.2.9
- '@types/node': 24.9.1
-
- '@types/mime@1.3.5': {}
-
'@types/minimatch@5.1.2': {}
- '@types/node@17.0.45': {}
-
- '@types/node@20.19.30':
- dependencies:
- undici-types: 6.21.0
-
'@types/node@22.18.12':
dependencies:
undici-types: 6.21.0
@@ -8098,14 +7820,10 @@ snapshots:
'@types/pg@8.11.6':
dependencies:
- '@types/node': 20.19.30
+ '@types/node': 24.9.1
pg-protocol: 1.10.3
pg-types: 4.1.0
- '@types/qs@6.14.0': {}
-
- '@types/range-parser@1.2.7': {}
-
'@types/react-dom@19.1.9(@types/react@19.1.12)':
dependencies:
'@types/react': 19.1.12
@@ -8114,24 +7832,9 @@ snapshots:
dependencies:
csstype: 3.1.3
- '@types/send@0.17.6':
- dependencies:
- '@types/mime': 1.3.5
- '@types/node': 24.9.1
-
- '@types/send@1.2.1':
- dependencies:
- '@types/node': 24.9.1
-
- '@types/serve-static@1.15.10':
- dependencies:
- '@types/http-errors': 2.0.5
- '@types/node': 24.9.1
- '@types/send': 0.17.6
-
'@types/through@0.0.33':
dependencies:
- '@types/node': 20.19.30
+ '@types/node': 24.9.1
'@types/tinycolor2@1.4.6': {}
@@ -8285,17 +7988,6 @@ snapshots:
'@vue/shared@3.5.16':
optional: true
- '@workos-inc/node@7.82.0':
- dependencies:
- iron-session: 6.3.1
- jose: 5.6.3
- leb: 1.0.0
- qs: 6.14.1
- transitivePeerDependencies:
- - express
- - koa
- - next
-
'@workos-inc/node@8.0.0':
dependencies:
iron-webcrypto: 2.0.0
@@ -8315,6 +8007,14 @@ snapshots:
react: 19.1.4
react-dom: 19.1.4(react@19.1.4)
+ '@workos/authkit-tanstack-react-start@0.5.0(@tanstack/react-router@1.135.2(react-dom@19.2.3(react@19.1.4))(react@19.1.4))(@tanstack/react-start@1.135.2(crossws@0.4.1(srvx@0.9.6))(react-dom@19.2.3(react@19.1.4))(react@19.1.4)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(react-dom@19.2.3(react@19.1.4))(react@19.1.4)':
+ dependencies:
+ '@tanstack/react-router': 1.135.2(react-dom@19.2.3(react@19.1.4))(react@19.1.4)
+ '@tanstack/react-start': 1.135.2(crossws@0.4.1(srvx@0.9.6))(react-dom@19.2.3(react@19.1.4))(react@19.1.4)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))
+ '@workos/authkit-session': 0.3.4
+ react: 19.1.4
+ react-dom: 19.2.3(react@19.1.4)
+
acorn-jsx@5.3.2(acorn@8.15.0):
dependencies:
acorn: 8.15.0
@@ -8449,12 +8149,6 @@ snapshots:
get-intrinsic: 1.3.0
is-array-buffer: 3.0.5
- asn1js@3.0.6:
- dependencies:
- pvtsutils: 1.3.6
- pvutils: 1.1.3
- tslib: 2.8.1
-
ast-types-flow@0.0.8: {}
ast-types@0.13.4:
@@ -8495,47 +8189,18 @@ snapshots:
basic-ftp@5.0.5: {}
- better-auth@1.4.0-beta.9(better-sqlite3@12.2.0)(react-dom@19.1.4(react@19.1.4))(react@19.1.4)(solid-js@1.9.9):
- dependencies:
- '@better-auth/core': 1.4.0-beta.9(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.18)(better-call@1.0.19)(better-sqlite3@12.2.0)(jose@6.1.0)(kysely@0.28.5)(nanostores@1.0.1)
- '@better-auth/telemetry': 1.4.0-beta.9(@better-auth/core@1.4.0-beta.9(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.18)(better-call@1.0.19)(better-sqlite3@12.2.0)(jose@6.1.0)(kysely@0.28.5)(nanostores@1.0.1))
- '@better-auth/utils': 0.3.0
- '@better-fetch/fetch': 1.1.18
- '@noble/ciphers': 2.0.0
- '@noble/hashes': 2.0.0
- '@simplewebauthn/browser': 13.1.2
- '@simplewebauthn/server': 13.1.2
- better-call: 1.0.19
- defu: 6.1.4
- jose: 6.1.0
- kysely: 0.28.5
- nanostores: 1.0.1
- zod: 4.1.12
- optionalDependencies:
- react: 19.1.4
- react-dom: 19.1.4(react@19.1.4)
- solid-js: 1.9.9
- transitivePeerDependencies:
- - better-sqlite3
-
- better-call@1.0.19:
- dependencies:
- '@better-auth/utils': 0.3.0
- '@better-fetch/fetch': 1.1.18
- rou3: 0.5.1
- set-cookie-parser: 2.7.1
- uncrypto: 0.1.3
-
better-sqlite3@12.2.0:
dependencies:
bindings: 1.5.0
prebuild-install: 7.1.3
+ optional: true
binary-extensions@2.3.0: {}
bindings@1.5.0:
dependencies:
file-uri-to-path: 1.0.0
+ optional: true
bl@4.1.0:
dependencies:
@@ -8573,11 +8238,6 @@ snapshots:
base64-js: 1.5.1
ieee754: 1.2.1
- buffer@6.0.3:
- dependencies:
- base64-js: 1.5.1
- ieee754: 1.2.1
-
bufferutil@4.0.8:
dependencies:
node-gyp-build: 4.8.4
@@ -8689,7 +8349,8 @@ snapshots:
readdirp: 4.1.2
optional: true
- chownr@1.1.4: {}
+ chownr@1.1.4:
+ optional: true
class-variance-authority@0.7.1:
dependencies:
@@ -8742,8 +8403,6 @@ snapshots:
cookie-es@2.0.0: {}
- cookie@0.5.0: {}
-
copy-anything@4.0.5:
dependencies:
is-what: 5.5.0
@@ -8815,6 +8474,7 @@ snapshots:
decompress-response@6.0.0:
dependencies:
mimic-response: 3.1.0
+ optional: true
deep-extend@0.6.0: {}
@@ -8836,8 +8496,6 @@ snapshots:
has-property-descriptors: 1.0.2
object-keys: 1.1.1
- defu@6.1.4: {}
-
degenerator@5.0.1:
dependencies:
ast-types: 0.13.4
@@ -8965,6 +8623,7 @@ snapshots:
end-of-stream@1.4.5:
dependencies:
once: 1.4.0
+ optional: true
enhanced-resolve@5.18.3:
dependencies:
@@ -9344,7 +9003,8 @@ snapshots:
signal-exit: 3.0.7
strip-final-newline: 2.0.0
- expand-template@2.0.3: {}
+ expand-template@2.0.3:
+ optional: true
exsolve@1.0.7: {}
@@ -9394,7 +9054,8 @@ snapshots:
dependencies:
flat-cache: 4.0.1
- file-uri-to-path@1.0.0: {}
+ file-uri-to-path@1.0.0:
+ optional: true
fill-range@7.1.1:
dependencies:
@@ -9416,7 +9077,8 @@ snapshots:
dependencies:
is-callable: 1.2.7
- fs-constants@1.0.0: {}
+ fs-constants@1.0.0:
+ optional: true
fs-extra@10.1.0:
dependencies:
@@ -9501,7 +9163,8 @@ snapshots:
transitivePeerDependencies:
- supports-color
- github-from-package@0.0.0: {}
+ github-from-package@0.0.0:
+ optional: true
glob-parent@5.1.2:
dependencies:
@@ -9718,20 +9381,6 @@ snapshots:
ip-address@10.0.1: {}
- iron-session@6.3.1:
- dependencies:
- '@peculiar/webcrypto': 1.5.0
- '@types/cookie': 0.5.4
- '@types/express': 4.17.25
- '@types/koa': 2.15.0
- '@types/node': 17.0.45
- cookie: 0.5.0
- iron-webcrypto: 0.2.8
-
- iron-webcrypto@0.2.8:
- dependencies:
- buffer: 6.0.3
-
iron-webcrypto@2.0.0:
dependencies:
uint8array-extras: 1.5.0
@@ -9894,10 +9543,6 @@ snapshots:
jiti@2.6.1: {}
- jose@5.6.3: {}
-
- jose@6.1.0: {}
-
jose@6.1.3: {}
js-tokens@4.0.0: {}
@@ -9942,7 +9587,8 @@ snapshots:
dependencies:
json-buffer: 3.0.1
- kysely@0.28.5: {}
+ kysely@0.28.5:
+ optional: true
language-subtag-registry@0.3.23: {}
@@ -9950,8 +9596,6 @@ snapshots:
dependencies:
language-subtag-registry: 0.3.23
- leb@1.0.0: {}
-
levn@0.4.1:
dependencies:
prelude-ls: 1.2.1
@@ -10062,7 +9706,8 @@ snapshots:
mimic-fn@2.1.0: {}
- mimic-response@3.1.0: {}
+ mimic-response@3.1.0:
+ optional: true
minimatch@3.1.2:
dependencies:
@@ -10074,7 +9719,8 @@ snapshots:
minimist@1.2.8: {}
- mkdirp-classic@0.5.3: {}
+ mkdirp-classic@0.5.3:
+ optional: true
mkdirp@0.5.6:
dependencies:
@@ -10104,9 +9750,8 @@ snapshots:
nanoid@3.3.11: {}
- nanostores@1.0.1: {}
-
- napi-build-utils@2.0.0: {}
+ napi-build-utils@2.0.0:
+ optional: true
natural-compare@1.4.0: {}
@@ -10171,6 +9816,7 @@ snapshots:
node-abi@3.77.0:
dependencies:
semver: 7.7.3
+ optional: true
node-gyp-build@4.8.4: {}
@@ -10486,6 +10132,7 @@ snapshots:
simple-get: 4.0.1
tar-fs: 2.1.3
tunnel-agent: 0.6.0
+ optional: true
prelude-ls@1.2.1: {}
@@ -10539,19 +10186,10 @@ snapshots:
dependencies:
end-of-stream: 1.4.5
once: 1.4.0
+ optional: true
punycode@2.3.1: {}
- pvtsutils@1.3.6:
- dependencies:
- tslib: 2.8.1
-
- pvutils@1.1.3: {}
-
- qs@6.14.1:
- dependencies:
- side-channel: 1.1.0
-
queue-microtask@1.2.3: {}
radix-ui@1.4.3(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.2.3(react@19.1.4))(react@19.1.4):
@@ -10772,8 +10410,6 @@ snapshots:
'@rollup/rollup-win32-x64-msvc': 4.52.5
fsevents: 2.3.3
- rou3@0.5.1: {}
-
rou3@0.7.10: {}
run-async@2.4.1: {}
@@ -10837,8 +10473,6 @@ snapshots:
seroval@1.3.2: {}
- set-cookie-parser@2.7.1: {}
-
set-function-length@1.2.2:
dependencies:
define-data-property: 1.1.4
@@ -10900,13 +10534,15 @@ snapshots:
signal-exit@3.0.7: {}
- simple-concat@1.0.1: {}
+ simple-concat@1.0.1:
+ optional: true
simple-get@4.0.1:
dependencies:
decompress-response: 6.0.0
once: 1.4.0
simple-concat: 1.0.1
+ optional: true
slash@3.0.0: {}
@@ -11068,6 +10704,7 @@ snapshots:
mkdirp-classic: 0.5.3
pump: 3.0.3
tar-stream: 2.2.0
+ optional: true
tar-stream@2.2.0:
dependencies:
@@ -11076,6 +10713,7 @@ snapshots:
fs-constants: 1.0.0
inherits: 2.0.4
readable-stream: 3.6.2
+ optional: true
terser@5.44.0:
dependencies:
@@ -11163,6 +10801,7 @@ snapshots:
tunnel-agent@0.6.0:
dependencies:
safe-buffer: 5.2.1
+ optional: true
turbo-darwin-64@2.5.8:
optional: true
@@ -11257,8 +10896,6 @@ snapshots:
has-symbols: 1.1.0
which-boxed-primitive: 1.1.1
- uncrypto@0.1.3: {}
-
undici-types@6.21.0: {}
undici-types@7.16.0: {}
@@ -11377,14 +11014,6 @@ snapshots:
dependencies:
defaults: 1.0.4
- webcrypto-core@1.8.1:
- dependencies:
- '@peculiar/asn1-schema': 2.4.0
- '@peculiar/json-schema': 1.1.12
- asn1js: 3.0.6
- pvtsutils: 1.3.6
- tslib: 2.8.1
-
webpack-virtual-modules@0.6.2: {}
whatwg-encoding@3.1.1:
From a5381fc424b90093a9b2d7d0f3747fa3dff9bf79 Mon Sep 17 00:00:00 2001
From: AF_Askar <68832286+abo3skr2019@users.noreply.github.com>
Date: Tue, 3 Feb 2026 11:45:58 +0300
Subject: [PATCH 06/12] database fixes
---
docker-compose.yml | 4 +-
packages/api/package.json | 1 +
packages/db/drizzle.config.ts | 4 +-
packages/db/package.json | 3 +-
packages/db/src/client.ts | 19 ++++++--
pnpm-lock.yaml | 81 ++++++++++++++++++++++-------------
6 files changed, 72 insertions(+), 40 deletions(-)
diff --git a/docker-compose.yml b/docker-compose.yml
index 8c1a48b..35e01ce 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -19,8 +19,8 @@ services:
- "5001:3000"
environment:
- NODE_ENV=production
- - NEXT_TELEMETRY_DISABLED=1
- AI_HOST=ai_service
+ - POSTGRES_URL=postgresql://postgres:password@application_db:5432/app_db
depends_on:
application_db:
condition: service_healthy
@@ -51,7 +51,7 @@ services:
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
- POSTGRES_DB: postgres
+ POSTGRES_DB: app_db
ports:
- "5432:5432"
volumes:
diff --git a/packages/api/package.json b/packages/api/package.json
index d6ad022..79f4f40 100644
--- a/packages/api/package.json
+++ b/packages/api/package.json
@@ -29,6 +29,7 @@
"@governance/eslint-config": "workspace:*",
"@governance/prettier-config": "workspace:*",
"@governance/tsconfig": "workspace:*",
+ "@types/node": "catalog:",
"eslint": "catalog:",
"prettier": "catalog:",
"typescript": "catalog:"
diff --git a/packages/db/drizzle.config.ts b/packages/db/drizzle.config.ts
index 5b18085..1a85e1c 100644
--- a/packages/db/drizzle.config.ts
+++ b/packages/db/drizzle.config.ts
@@ -4,11 +4,9 @@ if (!process.env.POSTGRES_URL) {
throw new Error("Missing POSTGRES_URL");
}
-const nonPoolingUrl = process.env.POSTGRES_URL.replace(":6543", ":5432");
-
export default {
schema: "./src/schema.ts",
dialect: "postgresql",
- dbCredentials: { url: nonPoolingUrl },
+ dbCredentials: { url: process.env.POSTGRES_URL },
casing: "snake_case",
} satisfies Config;
diff --git a/packages/db/package.json b/packages/db/package.json
index f3d4928..42579b1 100644
--- a/packages/db/package.json
+++ b/packages/db/package.json
@@ -29,15 +29,16 @@
"with-env": "dotenv -e ../../.env --"
},
"dependencies": {
- "@vercel/postgres": "^0.10.0",
"drizzle-orm": "^0.44.7",
"drizzle-zod": "^0.8.3",
+ "postgres": "^3.4.5",
"zod": "catalog:"
},
"devDependencies": {
"@governance/eslint-config": "workspace:*",
"@governance/prettier-config": "workspace:*",
"@governance/tsconfig": "workspace:*",
+ "@types/node": "catalog:",
"drizzle-kit": "^0.31.5",
"eslint": "catalog:",
"prettier": "catalog:",
diff --git a/packages/db/src/client.ts b/packages/db/src/client.ts
index e23181e..5460ebd 100644
--- a/packages/db/src/client.ts
+++ b/packages/db/src/client.ts
@@ -1,10 +1,21 @@
-import { sql } from "@vercel/postgres";
-import { drizzle } from "drizzle-orm/vercel-postgres";
+import { drizzle } from "drizzle-orm/postgres-js";
+import postgres from "postgres";
import * as schema from "./schema";
-export const db = drizzle({
- client: sql,
+const connectionString = process.env.POSTGRES_URL;
+
+if (!connectionString) {
+ throw new Error("Missing POSTGRES_URL environment variable");
+}
+
+/**
+ * Database client using postgres.js
+ * Works with both local Docker containers and Neon (via standard connection string)
+ */
+const client = postgres(connectionString);
+
+export const db = drizzle(client, {
schema,
casing: "snake_case",
});
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index ddd96dd..625d27e 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -148,7 +148,7 @@ importers:
version: 0.5.0(@tanstack/react-router@1.135.2(react-dom@19.1.4(react@19.1.4))(react@19.1.4))(@tanstack/react-start@1.135.2(crossws@0.4.1(srvx@0.9.6))(react-dom@19.1.4(react@19.1.4))(react@19.1.4)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(react-dom@19.1.4(react@19.1.4))(react@19.1.4)
nitro:
specifier: 3.0.1-alpha.1
- version: 3.0.1-alpha.1(@planetscale/database@1.19.0)(better-sqlite3@12.2.0)(chokidar@4.0.3)(drizzle-orm@0.44.7(@neondatabase/serverless@0.10.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.11.10)(@vercel/postgres@0.10.0(utf-8-validate@6.0.4))(better-sqlite3@12.2.0)(gel@2.0.0)(kysely@0.28.5)(mysql2@3.11.3)(postgres@3.4.4)(prisma@5.22.0))(mysql2@3.11.3)(rollup@4.52.5)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))
+ version: 3.0.1-alpha.1(@planetscale/database@1.19.0)(better-sqlite3@12.2.0)(chokidar@4.0.3)(drizzle-orm@0.44.7(@neondatabase/serverless@0.10.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.11.10)(@vercel/postgres@0.10.0(utf-8-validate@6.0.4))(better-sqlite3@12.2.0)(gel@2.0.0)(kysely@0.28.5)(mysql2@3.11.3)(postgres@3.4.8)(prisma@5.22.0))(mysql2@3.11.3)(rollup@4.52.5)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))
react:
specifier: catalog:react19
version: 19.1.4
@@ -238,6 +238,9 @@ importers:
'@governance/tsconfig':
specifier: workspace:*
version: link:../../tooling/typescript
+ '@types/node':
+ specifier: 'catalog:'
+ version: 22.18.12
eslint:
specifier: 'catalog:'
version: 9.38.0(jiti@2.6.1)
@@ -284,15 +287,15 @@ importers:
packages/db:
dependencies:
- '@vercel/postgres':
- specifier: ^0.10.0
- version: 0.10.0(utf-8-validate@6.0.4)
drizzle-orm:
specifier: ^0.44.7
- version: 0.44.7(@neondatabase/serverless@0.10.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.11.10)(@vercel/postgres@0.10.0(utf-8-validate@6.0.4))(better-sqlite3@12.2.0)(gel@2.0.0)(kysely@0.28.5)(mysql2@3.11.3)(postgres@3.4.4)(prisma@5.22.0)
+ version: 0.44.7(@neondatabase/serverless@0.10.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.11.10)(@vercel/postgres@0.10.0(utf-8-validate@6.0.4))(better-sqlite3@12.2.0)(gel@2.0.0)(kysely@0.28.5)(mysql2@3.11.3)(postgres@3.4.8)(prisma@5.22.0)
drizzle-zod:
specifier: ^0.8.3
- version: 0.8.3(drizzle-orm@0.44.7(@neondatabase/serverless@0.10.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.11.10)(@vercel/postgres@0.10.0(utf-8-validate@6.0.4))(better-sqlite3@12.2.0)(gel@2.0.0)(kysely@0.28.5)(mysql2@3.11.3)(postgres@3.4.4)(prisma@5.22.0))(zod@4.1.12)
+ version: 0.8.3(drizzle-orm@0.44.7(@neondatabase/serverless@0.10.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.11.10)(@vercel/postgres@0.10.0(utf-8-validate@6.0.4))(better-sqlite3@12.2.0)(gel@2.0.0)(kysely@0.28.5)(mysql2@3.11.3)(postgres@3.4.8)(prisma@5.22.0))(zod@4.1.12)
+ postgres:
+ specifier: ^3.4.5
+ version: 3.4.8
zod:
specifier: 'catalog:'
version: 4.1.12
@@ -306,6 +309,9 @@ importers:
'@governance/tsconfig':
specifier: workspace:*
version: link:../../tooling/typescript
+ '@types/node':
+ specifier: 'catalog:'
+ version: 22.18.12
drizzle-kit:
specifier: ^0.31.5
version: 0.31.5
@@ -4591,8 +4597,8 @@ packages:
postgres-range@1.1.4:
resolution: {integrity: sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==}
- postgres@3.4.4:
- resolution: {integrity: sha512-IbyN+9KslkqcXa8AO9fxpk97PA4pzewvpi2B3Dwy9u4zpV32QicaEdgmF3eSQUzdRk7ttDHQejNgAEr4XoeH4A==}
+ postgres@3.4.8:
+ resolution: {integrity: sha512-d+JFcLM17njZaOLkv6SCev7uoLaBtfK86vMUXhW1Z4glPWh4jozno9APvW/XKFJ3CCxVoC7OL38BqRydtu5nGg==}
engines: {node: '>=12'}
prebuild-install@7.1.3:
@@ -6133,6 +6139,7 @@ snapshots:
'@neondatabase/serverless@0.9.5':
dependencies:
'@types/pg': 8.11.6
+ optional: true
'@next/eslint-plugin-next@16.0.0':
dependencies:
@@ -7823,6 +7830,7 @@ snapshots:
'@types/node': 24.9.1
pg-protocol: 1.10.3
pg-types: 4.1.0
+ optional: true
'@types/react-dom@19.1.9(@types/react@19.1.12)':
dependencies:
@@ -7938,6 +7946,7 @@ snapshots:
ws: 8.18.3(bufferutil@4.0.8)(utf-8-validate@6.0.4)
transitivePeerDependencies:
- utf-8-validate
+ optional: true
'@vitejs/plugin-react@5.1.0(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))':
dependencies:
@@ -8241,6 +8250,7 @@ snapshots:
bufferutil@4.0.8:
dependencies:
node-gyp-build: 4.8.4
+ optional: true
call-bind-apply-helpers@1.0.2:
dependencies:
@@ -8455,10 +8465,10 @@ snapshots:
es-errors: 1.3.0
is-data-view: 1.0.2
- db0@0.3.4(better-sqlite3@12.2.0)(drizzle-orm@0.44.7(@neondatabase/serverless@0.10.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.11.10)(@vercel/postgres@0.10.0(utf-8-validate@6.0.4))(better-sqlite3@12.2.0)(gel@2.0.0)(kysely@0.28.5)(mysql2@3.11.3)(postgres@3.4.4)(prisma@5.22.0))(mysql2@3.11.3):
+ db0@0.3.4(better-sqlite3@12.2.0)(drizzle-orm@0.44.7(@neondatabase/serverless@0.10.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.11.10)(@vercel/postgres@0.10.0(utf-8-validate@6.0.4))(better-sqlite3@12.2.0)(gel@2.0.0)(kysely@0.28.5)(mysql2@3.11.3)(postgres@3.4.8)(prisma@5.22.0))(mysql2@3.11.3):
optionalDependencies:
better-sqlite3: 12.2.0
- drizzle-orm: 0.44.7(@neondatabase/serverless@0.10.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.11.10)(@vercel/postgres@0.10.0(utf-8-validate@6.0.4))(better-sqlite3@12.2.0)(gel@2.0.0)(kysely@0.28.5)(mysql2@3.11.3)(postgres@3.4.4)(prisma@5.22.0)
+ drizzle-orm: 0.44.7(@neondatabase/serverless@0.10.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.11.10)(@vercel/postgres@0.10.0(utf-8-validate@6.0.4))(better-sqlite3@12.2.0)(gel@2.0.0)(kysely@0.28.5)(mysql2@3.11.3)(postgres@3.4.8)(prisma@5.22.0)
mysql2: 3.11.3
debug@3.2.7:
@@ -8582,7 +8592,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- drizzle-orm@0.44.7(@neondatabase/serverless@0.10.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.11.10)(@vercel/postgres@0.10.0(utf-8-validate@6.0.4))(better-sqlite3@12.2.0)(gel@2.0.0)(kysely@0.28.5)(mysql2@3.11.3)(postgres@3.4.4)(prisma@5.22.0):
+ drizzle-orm@0.44.7(@neondatabase/serverless@0.10.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.11.10)(@vercel/postgres@0.10.0(utf-8-validate@6.0.4))(better-sqlite3@12.2.0)(gel@2.0.0)(kysely@0.28.5)(mysql2@3.11.3)(postgres@3.4.8)(prisma@5.22.0):
optionalDependencies:
'@neondatabase/serverless': 0.10.0
'@opentelemetry/api': 1.9.0
@@ -8595,12 +8605,12 @@ snapshots:
gel: 2.0.0
kysely: 0.28.5
mysql2: 3.11.3
- postgres: 3.4.4
+ postgres: 3.4.8
prisma: 5.22.0
- drizzle-zod@0.8.3(drizzle-orm@0.44.7(@neondatabase/serverless@0.10.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.11.10)(@vercel/postgres@0.10.0(utf-8-validate@6.0.4))(better-sqlite3@12.2.0)(gel@2.0.0)(kysely@0.28.5)(mysql2@3.11.3)(postgres@3.4.4)(prisma@5.22.0))(zod@4.1.12):
+ drizzle-zod@0.8.3(drizzle-orm@0.44.7(@neondatabase/serverless@0.10.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.11.10)(@vercel/postgres@0.10.0(utf-8-validate@6.0.4))(better-sqlite3@12.2.0)(gel@2.0.0)(kysely@0.28.5)(mysql2@3.11.3)(postgres@3.4.8)(prisma@5.22.0))(zod@4.1.12):
dependencies:
- drizzle-orm: 0.44.7(@neondatabase/serverless@0.10.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.11.10)(@vercel/postgres@0.10.0(utf-8-validate@6.0.4))(better-sqlite3@12.2.0)(gel@2.0.0)(kysely@0.28.5)(mysql2@3.11.3)(postgres@3.4.4)(prisma@5.22.0)
+ drizzle-orm: 0.44.7(@neondatabase/serverless@0.10.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.11.10)(@vercel/postgres@0.10.0(utf-8-validate@6.0.4))(better-sqlite3@12.2.0)(gel@2.0.0)(kysely@0.28.5)(mysql2@3.11.3)(postgres@3.4.8)(prisma@5.22.0)
zod: 4.1.12
dunder-proto@1.0.1:
@@ -9761,11 +9771,11 @@ snapshots:
nf3@0.1.10: {}
- nitro@3.0.1-alpha.1(@planetscale/database@1.19.0)(better-sqlite3@12.2.0)(chokidar@4.0.3)(drizzle-orm@0.44.7(@neondatabase/serverless@0.10.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.11.10)(@vercel/postgres@0.10.0(utf-8-validate@6.0.4))(better-sqlite3@12.2.0)(gel@2.0.0)(kysely@0.28.5)(mysql2@3.11.3)(postgres@3.4.4)(prisma@5.22.0))(mysql2@3.11.3)(rollup@4.52.5)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)):
+ nitro@3.0.1-alpha.1(@planetscale/database@1.19.0)(better-sqlite3@12.2.0)(chokidar@4.0.3)(drizzle-orm@0.44.7(@neondatabase/serverless@0.10.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.11.10)(@vercel/postgres@0.10.0(utf-8-validate@6.0.4))(better-sqlite3@12.2.0)(gel@2.0.0)(kysely@0.28.5)(mysql2@3.11.3)(postgres@3.4.8)(prisma@5.22.0))(mysql2@3.11.3)(rollup@4.52.5)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)):
dependencies:
consola: 3.4.2
crossws: 0.4.1(srvx@0.9.6)
- db0: 0.3.4(better-sqlite3@12.2.0)(drizzle-orm@0.44.7(@neondatabase/serverless@0.10.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.11.10)(@vercel/postgres@0.10.0(utf-8-validate@6.0.4))(better-sqlite3@12.2.0)(gel@2.0.0)(kysely@0.28.5)(mysql2@3.11.3)(postgres@3.4.4)(prisma@5.22.0))(mysql2@3.11.3)
+ db0: 0.3.4(better-sqlite3@12.2.0)(drizzle-orm@0.44.7(@neondatabase/serverless@0.10.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.11.10)(@vercel/postgres@0.10.0(utf-8-validate@6.0.4))(better-sqlite3@12.2.0)(gel@2.0.0)(kysely@0.28.5)(mysql2@3.11.3)(postgres@3.4.8)(prisma@5.22.0))(mysql2@3.11.3)
h3: 2.0.1-rc.5(crossws@0.4.1(srvx@0.9.6))
jiti: 2.6.1
nf3: 0.1.10
@@ -9776,7 +9786,7 @@ snapshots:
srvx: 0.9.6
undici: 7.16.0
unenv: 2.0.0-rc.24
- unstorage: 2.0.0-alpha.4(@planetscale/database@1.19.0)(chokidar@4.0.3)(db0@0.3.4(better-sqlite3@12.2.0)(drizzle-orm@0.44.7(@neondatabase/serverless@0.10.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.11.10)(@vercel/postgres@0.10.0(utf-8-validate@6.0.4))(better-sqlite3@12.2.0)(gel@2.0.0)(kysely@0.28.5)(mysql2@3.11.3)(postgres@3.4.4)(prisma@5.22.0))(mysql2@3.11.3))(ofetch@2.0.0-alpha.3)
+ unstorage: 2.0.0-alpha.4(@planetscale/database@1.19.0)(chokidar@4.0.3)(db0@0.3.4(better-sqlite3@12.2.0)(drizzle-orm@0.44.7(@neondatabase/serverless@0.10.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.11.10)(@vercel/postgres@0.10.0(utf-8-validate@6.0.4))(better-sqlite3@12.2.0)(gel@2.0.0)(kysely@0.28.5)(mysql2@3.11.3)(postgres@3.4.8)(prisma@5.22.0))(mysql2@3.11.3))(ofetch@2.0.0-alpha.3)
optionalDependencies:
rollup: 4.52.5
vite: 7.1.12(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
@@ -9818,7 +9828,8 @@ snapshots:
semver: 7.7.3
optional: true
- node-gyp-build@4.8.4: {}
+ node-gyp-build@4.8.4:
+ optional: true
node-plop@0.26.3:
dependencies:
@@ -9888,7 +9899,8 @@ snapshots:
define-properties: 1.2.1
es-object-atoms: 1.1.1
- obuf@1.1.2: {}
+ obuf@1.1.2:
+ optional: true
ofetch@2.0.0-alpha.3: {}
@@ -10071,11 +10083,14 @@ snapshots:
pathe@2.0.3: {}
- pg-int8@1.0.1: {}
+ pg-int8@1.0.1:
+ optional: true
- pg-numeric@1.0.2: {}
+ pg-numeric@1.0.2:
+ optional: true
- pg-protocol@1.10.3: {}
+ pg-protocol@1.10.3:
+ optional: true
pg-types@4.1.0:
dependencies:
@@ -10086,6 +10101,7 @@ snapshots:
postgres-date: 2.1.0
postgres-interval: 3.0.0
postgres-range: 1.1.4
+ optional: true
picocolors@1.0.1: {}
@@ -10103,21 +10119,25 @@ snapshots:
picocolors: 1.1.1
source-map-js: 1.2.1
- postgres-array@3.0.4: {}
+ postgres-array@3.0.4:
+ optional: true
postgres-bytea@3.0.0:
dependencies:
obuf: 1.1.2
+ optional: true
- postgres-date@2.1.0: {}
-
- postgres-interval@3.0.0: {}
+ postgres-date@2.1.0:
+ optional: true
- postgres-range@1.1.4: {}
+ postgres-interval@3.0.0:
+ optional: true
- postgres@3.4.4:
+ postgres-range@1.1.4:
optional: true
+ postgres@3.4.8: {}
+
prebuild-install@7.1.3:
dependencies:
detect-libc: 2.1.2
@@ -10915,11 +10935,11 @@ snapshots:
picomatch: 4.0.3
webpack-virtual-modules: 0.6.2
- unstorage@2.0.0-alpha.4(@planetscale/database@1.19.0)(chokidar@4.0.3)(db0@0.3.4(better-sqlite3@12.2.0)(drizzle-orm@0.44.7(@neondatabase/serverless@0.10.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.11.10)(@vercel/postgres@0.10.0(utf-8-validate@6.0.4))(better-sqlite3@12.2.0)(gel@2.0.0)(kysely@0.28.5)(mysql2@3.11.3)(postgres@3.4.4)(prisma@5.22.0))(mysql2@3.11.3))(ofetch@2.0.0-alpha.3):
+ unstorage@2.0.0-alpha.4(@planetscale/database@1.19.0)(chokidar@4.0.3)(db0@0.3.4(better-sqlite3@12.2.0)(drizzle-orm@0.44.7(@neondatabase/serverless@0.10.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.11.10)(@vercel/postgres@0.10.0(utf-8-validate@6.0.4))(better-sqlite3@12.2.0)(gel@2.0.0)(kysely@0.28.5)(mysql2@3.11.3)(postgres@3.4.8)(prisma@5.22.0))(mysql2@3.11.3))(ofetch@2.0.0-alpha.3):
optionalDependencies:
'@planetscale/database': 1.19.0
chokidar: 4.0.3
- db0: 0.3.4(better-sqlite3@12.2.0)(drizzle-orm@0.44.7(@neondatabase/serverless@0.10.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.11.10)(@vercel/postgres@0.10.0(utf-8-validate@6.0.4))(better-sqlite3@12.2.0)(gel@2.0.0)(kysely@0.28.5)(mysql2@3.11.3)(postgres@3.4.4)(prisma@5.22.0))(mysql2@3.11.3)
+ db0: 0.3.4(better-sqlite3@12.2.0)(drizzle-orm@0.44.7(@neondatabase/serverless@0.10.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.11.10)(@vercel/postgres@0.10.0(utf-8-validate@6.0.4))(better-sqlite3@12.2.0)(gel@2.0.0)(kysely@0.28.5)(mysql2@3.11.3)(postgres@3.4.8)(prisma@5.22.0))(mysql2@3.11.3)
ofetch: 2.0.0-alpha.3
update-browserslist-db@1.1.3(browserslist@4.26.3):
@@ -11088,6 +11108,7 @@ snapshots:
optionalDependencies:
bufferutil: 4.0.8
utf-8-validate: 6.0.4
+ optional: true
xmlbuilder2@3.1.1:
dependencies:
From 01d371f535c2fe7774727febf2790673f62dad07 Mon Sep 17 00:00:00 2001
From: AF_Askar <68832286+abo3skr2019@users.noreply.github.com>
Date: Tue, 3 Feb 2026 12:05:11 +0300
Subject: [PATCH 07/12] fixed console error
---
apps/tanstack-start/src/routes/__root.tsx | 12 ++++++++++--
packages/ui/src/theme.tsx | 5 +----
2 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/apps/tanstack-start/src/routes/__root.tsx b/apps/tanstack-start/src/routes/__root.tsx
index bbf9073..3aef9f6 100644
--- a/apps/tanstack-start/src/routes/__root.tsx
+++ b/apps/tanstack-start/src/routes/__root.tsx
@@ -12,7 +12,11 @@ import { TanStackRouterDevtools } from "@tanstack/react-router-devtools";
import { AuthKitProvider } from "@workos/authkit-tanstack-react-start/client";
import type { AppRouter } from "@governance/api";
-import { ThemeProvider, ThemeToggle } from "@governance/ui/theme";
+import {
+ themeDetectorScript,
+ ThemeProvider,
+ ThemeToggle,
+} from "@governance/ui/theme";
import { Toaster } from "@governance/ui/toast";
import appCss from "~/styles.css?url";
@@ -43,6 +47,10 @@ function RootDocument({ children }: { children: React.ReactNode }) {
+
{children}
@@ -54,6 +62,6 @@ function RootDocument({ children }: { children: React.ReactNode }) {
-
+
);
}
diff --git a/packages/ui/src/theme.tsx b/packages/ui/src/theme.tsx
index 8cc6f38..9d0b4c4 100644
--- a/packages/ui/src/theme.tsx
+++ b/packages/ui/src/theme.tsx
@@ -134,10 +134,7 @@ export function ThemeProvider({ children }: React.PropsWithChildren) {
toggleMode,
}}
>
-
+
{children}
);
From 736de8448d71989c375f4f63a7855670159d5fbb Mon Sep 17 00:00:00 2001
From: AF_Askar <68832286+abo3skr2019@users.noreply.github.com>
Date: Tue, 3 Feb 2026 12:11:05 +0300
Subject: [PATCH 08/12] 404 handling
---
.../tanstack-start/src/component/NotFound.tsx | 23 +++++++++++++++++++
apps/tanstack-start/src/routes/__root.tsx | 3 +++
2 files changed, 26 insertions(+)
create mode 100644 apps/tanstack-start/src/component/NotFound.tsx
diff --git a/apps/tanstack-start/src/component/NotFound.tsx b/apps/tanstack-start/src/component/NotFound.tsx
new file mode 100644
index 0000000..9f101ee
--- /dev/null
+++ b/apps/tanstack-start/src/component/NotFound.tsx
@@ -0,0 +1,23 @@
+import { Link } from "@tanstack/react-router";
+
+export function NotFound() {
+ return (
+
+
404
+
+ Page Not Found
+
+
+
+ Oops! The page you asked for doesn't exist.
+
+
+ Go Home
+
+
+
+ );
+}
diff --git a/apps/tanstack-start/src/routes/__root.tsx b/apps/tanstack-start/src/routes/__root.tsx
index 3aef9f6..91082f9 100644
--- a/apps/tanstack-start/src/routes/__root.tsx
+++ b/apps/tanstack-start/src/routes/__root.tsx
@@ -21,6 +21,8 @@ import { Toaster } from "@governance/ui/toast";
import appCss from "~/styles.css?url";
+import { NotFound } from "../component/NotFound";
+
export const Route = createRootRouteWithContext<{
queryClient: QueryClient;
trpc: TRPCOptionsProxy;
@@ -29,6 +31,7 @@ export const Route = createRootRouteWithContext<{
links: [{ rel: "stylesheet", href: appCss }],
}),
component: RootComponent,
+ notFoundComponent: NotFound,
});
function RootComponent() {
From f8267db55bcb4389bd2cb6efc56f0a584b4ce660 Mon Sep 17 00:00:00 2001
From: AF_Askar <68832286+abo3skr2019@users.noreply.github.com>
Date: Tue, 3 Feb 2026 12:12:49 +0300
Subject: [PATCH 09/12] console logs
---
apps/tanstack-start/src/component/NotFound.tsx | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/apps/tanstack-start/src/component/NotFound.tsx b/apps/tanstack-start/src/component/NotFound.tsx
index 9f101ee..c4e06aa 100644
--- a/apps/tanstack-start/src/component/NotFound.tsx
+++ b/apps/tanstack-start/src/component/NotFound.tsx
@@ -1,6 +1,9 @@
-import { Link } from "@tanstack/react-router";
+import { Link, useLocation } from "@tanstack/react-router";
export function NotFound() {
+ const location = useLocation();
+ console.log("NotFound triggered for path:", location.pathname);
+
return (
404
From 942080210712f9bc9c3782cea50f1f16f68e3970 Mon Sep 17 00:00:00 2001
From: AF_Askar <68832286+abo3skr2019@users.noreply.github.com>
Date: Tue, 3 Feb 2026 12:40:19 +0300
Subject: [PATCH 10/12] pnpm
---
.agent/rules/project-rules.md | 4 +++-
.github/.copilot-instructions.md | 3 ++-
2 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/.agent/rules/project-rules.md b/.agent/rules/project-rules.md
index 72b0e5e..3de81cf 100644
--- a/.agent/rules/project-rules.md
+++ b/.agent/rules/project-rules.md
@@ -7,6 +7,8 @@ trigger: always_on
- This is a PoC: prioritize developer speed and clarity over abstraction.
- Treat all backends as APIs; do not couple services together.
- The AI service is stateless and must not call application APIs directly.
+- always use pnpm and pnpx for package management
+
## Monorepo Structure
@@ -45,7 +47,7 @@ trigger: always_on
## APIs & Data Fetching
- Use tRPC for type-safe application API calls (user data, metrics, app state).
-- Use OpenAPI Generator to generate a typed client for the FastAPI AI service.
+- Use @hey-api/openapi-ts to generate a typed client for the FastAPI AI service.
- Do not mix tRPC and OpenAPI clients.
- Do not have the AI service call the application API.
diff --git a/.github/.copilot-instructions.md b/.github/.copilot-instructions.md
index a8a2f30..6b529ff 100644
--- a/.github/.copilot-instructions.md
+++ b/.github/.copilot-instructions.md
@@ -3,6 +3,7 @@
- This is a PoC: prioritize developer speed and clarity over abstraction.
- Treat all backends as APIs; do not couple services together.
- The AI service is stateless and must not call application APIs directly.
+- always use pnpm and pnpx for package management
## Monorepo Structure
@@ -41,7 +42,7 @@
## APIs & Data Fetching
- Use tRPC for type-safe application API calls (user data, metrics, app state).
-- Use OpenAPI Generator to generate a typed client for the FastAPI AI service.
+- Use @hey-api/openapi-ts to generate a typed client for the FastAPI AI service.
- Do not mix tRPC and OpenAPI clients.
- Do not have the AI service call the application API.
From a31b5ed68392ef855403cb0bbf60c4144dd1b9b5 Mon Sep 17 00:00:00 2001
From: AF_Askar <68832286+abo3skr2019@users.noreply.github.com>
Date: Tue, 3 Feb 2026 12:43:57 +0300
Subject: [PATCH 11/12] generating fastapi sdk
---
.gitignore | 3 +++
package.json | 3 ++-
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/.gitignore b/.gitignore
index 9f749ad..d301947 100644
--- a/.gitignore
+++ b/.gitignore
@@ -48,6 +48,9 @@ dist/
# tanstack
.tanstack
+# generated SDK
+packages/ai/src/
+
# ========= python =========
# Python-generated files
__pycache__/
diff --git a/package.json b/package.json
index 6d05aa4..f08ffad 100644
--- a/package.json
+++ b/package.json
@@ -21,7 +21,8 @@
"lint:ws": "pnpm dlx sherif@latest",
"postinstall": "pnpm lint:ws",
"typecheck": "turbo run typecheck",
- "ui-add": "turbo run ui-add"
+ "ui-add": "turbo run ui-add",
+ "ai-service:generate": "pnpm dlx @hey-api/openapi-ts -i http://localhost:8000/openapi.json"
},
"devDependencies": {
"@governance/prettier-config": "workspace:*",
From 4fcf379e89ece02afb1fbde8f3370ceb2438f6a8 Mon Sep 17 00:00:00 2001
From: AF_Askar <68832286+abo3skr2019@users.noreply.github.com>
Date: Tue, 3 Feb 2026 13:14:28 +0300
Subject: [PATCH 12/12] updated theme
---
.agent/rules/project-rules.md | 2 +-
.github/.copilot-instructions.md | 2 +-
tooling/tailwind/theme.css | 127 ++++++++++++++++---------------
3 files changed, 67 insertions(+), 64 deletions(-)
diff --git a/.agent/rules/project-rules.md b/.agent/rules/project-rules.md
index 3de81cf..8e81fe5 100644
--- a/.agent/rules/project-rules.md
+++ b/.agent/rules/project-rules.md
@@ -33,7 +33,7 @@ trigger: always_on
## Frontend & UI
-- All reusable UI components must live in the `packages/ui` package.
+- All reusable UI components must live in the `packages/ui` package. use them
- Use Tailwind CSS for styling.
- Prefer shadcn/ui components where applicable.
- Do not create ad-hoc UI components in app folders.
diff --git a/.github/.copilot-instructions.md b/.github/.copilot-instructions.md
index 6b529ff..f58ea44 100644
--- a/.github/.copilot-instructions.md
+++ b/.github/.copilot-instructions.md
@@ -28,7 +28,7 @@
## Frontend & UI
-- All reusable UI components must live in the `packages/ui` package.
+- All reusable UI components must live in the `packages/ui` package. use them
- Use Tailwind CSS for styling.
- Prefer shadcn/ui components where applicable.
- Do not create ad-hoc UI components in app folders.
diff --git a/tooling/tailwind/theme.css b/tooling/tailwind/theme.css
index 67ae2a3..95af4cb 100644
--- a/tooling/tailwind/theme.css
+++ b/tooling/tailwind/theme.css
@@ -1,37 +1,37 @@
:root {
- --background: oklch(0.9875 0.0045 314.8053);
- --foreground: oklch(0.2277 0.0105 312.0161);
+ --background: oklch(1 0 0);
+ --foreground: oklch(0.145 0 0);
--card: oklch(1 0 0);
- --card-foreground: oklch(0.2277 0.0105 312.0161);
+ --card-foreground: oklch(0.145 0 0);
--popover: oklch(1 0 0);
- --popover-foreground: oklch(0.2277 0.0105 312.0161);
- --primary: oklch(0.5605 0.1911 350.0331);
- --primary-foreground: oklch(1 0 0);
- --secondary: oklch(0.967 0.0106 316.4921);
- --secondary-foreground: oklch(0.4536 0.0226 309.5036);
- --muted: oklch(0.967 0.0106 316.4921);
- --muted-foreground: oklch(0.5653 0.021 306.4429);
- --accent: oklch(0.967 0.0106 316.4921);
- --accent-foreground: oklch(0.5605 0.1911 350.0331);
- --destructive: oklch(0.6368 0.2078 25.3313);
+ --popover-foreground: oklch(0.145 0 0);
+ --primary: oklch(0.646 0.222 41.116);
+ --primary-foreground: oklch(0.98 0.016 73.684);
+ --secondary: oklch(0.967 0.001 286.375);
+ --secondary-foreground: oklch(0.21 0.006 285.885);
+ --muted: oklch(0.97 0 0);
+ --muted-foreground: oklch(0.556 0 0);
+ --accent: oklch(0.97 0 0);
+ --accent-foreground: oklch(0.205 0 0);
+ --destructive: oklch(0.58 0.22 27);
--destructive-foreground: oklch(1 0 0);
- --border: oklch(0.9419 0.016 310.0997);
- --input: oklch(1 0 0);
- --ring: oklch(0.5605 0.1911 350.0331);
- --chart-1: oklch(0.5605 0.1911 350.0331);
- --chart-2: oklch(0.6747 0.1492 345.9482);
- --chart-3: oklch(0.7729 0.1045 344.4709);
- --chart-4: oklch(0.8625 0.0636 341.4088);
- --chart-5: oklch(0.9411 0.0261 343.2843);
- --sidebar: oklch(0.967 0.0106 316.4921);
- --sidebar-foreground: oklch(0.4536 0.0226 309.5036);
- --sidebar-primary: oklch(0.5605 0.1911 350.0331);
- --sidebar-primary-foreground: oklch(1 0 0);
- --sidebar-accent: oklch(0.9419 0.016 310.0997);
- --sidebar-accent-foreground: oklch(0.5605 0.1911 350.0331);
- --sidebar-border: oklch(0.9155 0.0235 310.6964);
- --sidebar-ring: oklch(0.5605 0.1911 350.0331);
- --radius: 0.75rem;
+ --border: oklch(0.922 0 0);
+ --input: oklch(0.922 0 0);
+ --ring: oklch(0.708 0 0);
+ --chart-1: oklch(0.837 0.128 66.29);
+ --chart-2: oklch(0.705 0.213 47.604);
+ --chart-3: oklch(0.646 0.222 41.116);
+ --chart-4: oklch(0.553 0.195 38.402);
+ --chart-5: oklch(0.47 0.157 37.304);
+ --sidebar: oklch(0.985 0 0);
+ --sidebar-foreground: oklch(0.145 0 0);
+ --sidebar-primary: oklch(0.646 0.222 41.116);
+ --sidebar-primary-foreground: oklch(0.98 0.016 73.684);
+ --sidebar-accent: oklch(0.97 0 0);
+ --sidebar-accent-foreground: oklch(0.205 0 0);
+ --sidebar-border: oklch(0.922 0 0);
+ --sidebar-ring: oklch(0.708 0 0);
+ --radius: 0.875rem;
--shadow-2xs: 0px 2px 10px 0px hsl(0 0% 0% / 0.03);
--shadow-xs: 0px 2px 10px 0px hsl(0 0% 0% / 0.03);
--shadow-sm:
@@ -49,38 +49,38 @@
--spacing: 0.25rem;
@variant dark {
- --background: oklch(0.1836 0.0111 311.9111);
- --foreground: oklch(0.9788 0.0057 308.3962);
- --card: oklch(0.1836 0.0111 311.9111);
- --card-foreground: oklch(0.9788 0.0057 308.3962);
- --popover: oklch(0.1836 0.0111 311.9111);
- --popover-foreground: oklch(0.9788 0.0057 308.3962);
- --primary: oklch(0.6747 0.1492 345.9482);
- --primary-foreground: oklch(0.1836 0.0111 311.9111);
- --secondary: oklch(0.2551 0.0142 310.7968);
- --secondary-foreground: oklch(0.721 0.0184 308.1777);
- --muted: oklch(0.2551 0.0142 310.7968);
- --muted-foreground: oklch(0.6288 0.0177 309.9946);
- --accent: oklch(0.2551 0.0142 310.7968);
- --accent-foreground: oklch(0.6747 0.1492 345.9482);
- --destructive: oklch(0.3958 0.1331 25.723);
+ --background: oklch(0.145 0 0);
+ --foreground: oklch(0.985 0 0);
+ --card: oklch(0.205 0 0);
+ --card-foreground: oklch(0.985 0 0);
+ --popover: oklch(0.205 0 0);
+ --popover-foreground: oklch(0.985 0 0);
+ --primary: oklch(0.705 0.213 47.604);
+ --primary-foreground: oklch(0.98 0.016 73.684);
+ --secondary: oklch(0.274 0.006 286.033);
+ --secondary-foreground: oklch(0.985 0 0);
+ --muted: oklch(0.269 0 0);
+ --muted-foreground: oklch(0.708 0 0);
+ --accent: oklch(0.371 0 0);
+ --accent-foreground: oklch(0.985 0 0);
+ --destructive: oklch(0.704 0.191 22.216);
--destructive-foreground: oklch(1 0 0);
- --border: oklch(0.2941 0.0175 310.1142);
- --input: oklch(0.2551 0.0142 310.7968);
- --ring: oklch(0.6747 0.1492 345.9482);
- --chart-1: oklch(0.6747 0.1492 345.9482);
- --chart-2: oklch(0.5605 0.1911 350.0331);
- --chart-3: oklch(0.4988 0.1668 350);
- --chart-4: oklch(0.4373 0.1428 349.7487);
- --chart-5: oklch(0.3738 0.1177 349.3988);
- --sidebar: oklch(0.2103 0.0107 311.9806);
- --sidebar-foreground: oklch(0.721 0.0184 308.1777);
- --sidebar-primary: oklch(0.6747 0.1492 345.9482);
- --sidebar-primary-foreground: oklch(0.1836 0.0111 311.9111);
- --sidebar-accent: oklch(0.2551 0.0142 310.7968);
- --sidebar-accent-foreground: oklch(0.6747 0.1492 345.9482);
- --sidebar-border: oklch(0.2941 0.0175 310.1142);
- --sidebar-ring: oklch(0.6747 0.1492 345.9482);
+ --border: oklch(1 0 0 / 10%);
+ --input: oklch(1 0 0 / 15%);
+ --ring: oklch(0.556 0 0);
+ --chart-1: oklch(0.837 0.128 66.29);
+ --chart-2: oklch(0.705 0.213 47.604);
+ --chart-3: oklch(0.646 0.222 41.116);
+ --chart-4: oklch(0.553 0.195 38.402);
+ --chart-5: oklch(0.47 0.157 37.304);
+ --sidebar: oklch(0.205 0 0);
+ --sidebar-foreground: oklch(0.985 0 0);
+ --sidebar-primary: oklch(0.705 0.213 47.604);
+ --sidebar-primary-foreground: oklch(0.98 0.016 73.684);
+ --sidebar-accent: oklch(0.269 0 0);
+ --sidebar-accent-foreground: oklch(0.985 0 0);
+ --sidebar-border: oklch(1 0 0 / 10%);
+ --sidebar-ring: oklch(0.556 0 0);
--radius: 0.75rem;
--shadow-2xs: 0px 2px 10px 0px hsl(0 0% 0% / 0.1);
--shadow-xs: 0px 2px 10px 0px hsl(0 0% 0% / 0.1);
@@ -139,6 +139,9 @@
--radius-md: calc(var(--radius) - 2px);
--radius-lg: var(--radius);
--radius-xl: calc(var(--radius) + 4px);
+ --radius-2xl: calc(var(--radius) + 8px);
+ --radius-3xl: calc(var(--radius) + 12px);
+ --radius-4xl: calc(var(--radius) + 16px);
--shadow-2xs: var(--shadow-2xs);
--shadow-xs: var(--shadow-xs);
@@ -155,4 +158,4 @@
--tracking-wide: calc(var(--tracking-normal) + 0.025em);
--tracking-wider: calc(var(--tracking-normal) + 0.05em);
--tracking-widest: calc(var(--tracking-normal) + 0.1em);
-}
+}
\ No newline at end of file