From 3071c2e62d9f881df01f85b81951312bf79bee6b Mon Sep 17 00:00:00 2001 From: Rayan Pal <90289028+theonlypal@users.noreply.github.com> Date: Mon, 12 Jan 2026 01:49:22 -0800 Subject: [PATCH 01/39] fix(two-factor): add missing POST endpoints to client pathMethods (#7284) --- packages/better-auth/src/plugins/two-factor/client.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/better-auth/src/plugins/two-factor/client.ts b/packages/better-auth/src/plugins/two-factor/client.ts index b9621b1312..7f27b3cc24 100644 --- a/packages/better-auth/src/plugins/two-factor/client.ts +++ b/packages/better-auth/src/plugins/two-factor/client.ts @@ -29,6 +29,10 @@ export const twoFactorClient = ( "/two-factor/enable": "POST", "/two-factor/send-otp": "POST", "/two-factor/generate-backup-codes": "POST", + "/two-factor/get-totp-uri": "POST", + "/two-factor/verify-totp": "POST", + "/two-factor/verify-otp": "POST", + "/two-factor/verify-backup-code": "POST", }, fetchPlugins: [ { From a7073ed586890fe7a31057a2008054fbd0155e49 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 12 Jan 2026 01:52:11 -0800 Subject: [PATCH 02/39] chore(deps): update github-actions (#7278) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/claude.yml | 4 ++-- .github/workflows/e2e.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/claude.yml b/.github/workflows/claude.yml index d300267f18..624b892751 100644 --- a/.github/workflows/claude.yml +++ b/.github/workflows/claude.yml @@ -26,13 +26,13 @@ jobs: actions: read # Required for Claude to read CI results on PRs steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 with: fetch-depth: 1 - name: Run Claude Code id: claude - uses: anthropics/claude-code-action@v1 + uses: anthropics/claude-code-action@1b8ee3b94104046d71fde52ec3557651ad8c0d71 # v1.0.29 with: claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }} diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 20ca9c3559..7e3f722d4d 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -55,7 +55,7 @@ jobs: - uses: denoland/setup-deno@e95548e56dfa95d4e1a28d6f422fafe75c4c26fb # v2.0.3 with: - deno-version: 2.6.3 + deno-version: 2.6.4 - name: Smoke env: From 23ac747b727802d9363a9cce5fed7e416fe38011 Mon Sep 17 00:00:00 2001 From: Alex Yang Date: Mon, 12 Jan 2026 02:47:34 -0800 Subject: [PATCH 03/39] chore: release v1.5.0-beta.4 --- packages/better-auth/package.json | 2 +- packages/cli/package.json | 2 +- packages/core/package.json | 2 +- packages/expo/package.json | 2 +- packages/oauth-provider/package.json | 2 +- packages/passkey/package.json | 2 +- packages/scim/package.json | 2 +- packages/sso/package.json | 2 +- packages/stripe/package.json | 2 +- packages/telemetry/package.json | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/better-auth/package.json b/packages/better-auth/package.json index 737b0cb174..780acae5ba 100644 --- a/packages/better-auth/package.json +++ b/packages/better-auth/package.json @@ -1,6 +1,6 @@ { "name": "better-auth", - "version": "1.5.0-beta.3", + "version": "1.5.0-beta.4", "description": "The most comprehensive authentication framework for TypeScript.", "type": "module", "license": "MIT", diff --git a/packages/cli/package.json b/packages/cli/package.json index a70f8f528d..399f8cce51 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@better-auth/cli", - "version": "1.5.0-beta.3", + "version": "1.5.0-beta.4", "type": "module", "description": "The CLI for Better Auth", "module": "dist/index.mjs", diff --git a/packages/core/package.json b/packages/core/package.json index bd61d4ebcd..2fdf840cf4 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@better-auth/core", - "version": "1.5.0-beta.3", + "version": "1.5.0-beta.4", "description": "The most comprehensive authentication framework for TypeScript.", "type": "module", "repository": { diff --git a/packages/expo/package.json b/packages/expo/package.json index 3cbacdaeba..1d9a0cac08 100644 --- a/packages/expo/package.json +++ b/packages/expo/package.json @@ -1,6 +1,6 @@ { "name": "@better-auth/expo", - "version": "1.5.0-beta.3", + "version": "1.5.0-beta.4", "type": "module", "description": "Better Auth integration for Expo and React Native applications.", "main": "dist/index.mjs", diff --git a/packages/oauth-provider/package.json b/packages/oauth-provider/package.json index 553548cc2c..6997e56ba8 100644 --- a/packages/oauth-provider/package.json +++ b/packages/oauth-provider/package.json @@ -1,6 +1,6 @@ { "name": "@better-auth/oauth-provider", - "version": "1.5.0-beta.3", + "version": "1.5.0-beta.4", "type": "module", "description": "An oauth provider plugin for Better Auth", "main": "dist/index.mjs", diff --git a/packages/passkey/package.json b/packages/passkey/package.json index f4e30a6e3b..f2cb61dfe9 100644 --- a/packages/passkey/package.json +++ b/packages/passkey/package.json @@ -1,6 +1,6 @@ { "name": "@better-auth/passkey", - "version": "1.5.0-beta.3", + "version": "1.5.0-beta.4", "type": "module", "description": "Passkey plugin for Better Auth", "main": "dist/index.mjs", diff --git a/packages/scim/package.json b/packages/scim/package.json index 7da546c4b3..fb5d7e7d47 100644 --- a/packages/scim/package.json +++ b/packages/scim/package.json @@ -1,7 +1,7 @@ { "name": "@better-auth/scim", "author": "Jonathan Samines", - "version": "1.5.0-beta.3", + "version": "1.5.0-beta.4", "type": "module", "main": "dist/index.mjs", "types": "dist/index.d.mts", diff --git a/packages/sso/package.json b/packages/sso/package.json index 411fd58aab..da2a9c68e2 100644 --- a/packages/sso/package.json +++ b/packages/sso/package.json @@ -1,7 +1,7 @@ { "name": "@better-auth/sso", "author": "Bereket Engida", - "version": "1.5.0-beta.3", + "version": "1.5.0-beta.4", "type": "module", "main": "dist/index.mjs", "types": "dist/index.d.mts", diff --git a/packages/stripe/package.json b/packages/stripe/package.json index 784ef357c5..4c25e1a7b9 100644 --- a/packages/stripe/package.json +++ b/packages/stripe/package.json @@ -1,7 +1,7 @@ { "name": "@better-auth/stripe", "author": "Bereket Engida", - "version": "1.5.0-beta.3", + "version": "1.5.0-beta.4", "type": "module", "main": "dist/index.mjs", "types": "dist/index.d.mts", diff --git a/packages/telemetry/package.json b/packages/telemetry/package.json index 296ed69175..8ebc7a5c68 100644 --- a/packages/telemetry/package.json +++ b/packages/telemetry/package.json @@ -1,6 +1,6 @@ { "name": "@better-auth/telemetry", - "version": "1.5.0-beta.3", + "version": "1.5.0-beta.4", "description": "Telemetry package for Better Auth", "type": "module", "repository": { From 4c897d19d26ce0bf21cc3d20c73d906a1a839f45 Mon Sep 17 00:00:00 2001 From: Alex Yang Date: Mon, 12 Jan 2026 03:36:24 -0800 Subject: [PATCH 04/39] chore: bump dev deps (#7287) --- demo/oidc-client/package.json | 2 +- e2e/integration/vanilla-node/package.json | 2 +- e2e/smoke/test/fixtures/vite/package.json | 2 +- package.json | 10 +- packages/better-auth/package.json | 2 +- .../kysely-adapter/bun-sqlite-dialect.ts | 2 +- .../kysely-adapter/node-sqlite-dialect.ts | 2 +- pnpm-lock.yaml | 1407 ++++++++++------- pnpm-workspace.yaml | 2 +- 9 files changed, 818 insertions(+), 613 deletions(-) diff --git a/demo/oidc-client/package.json b/demo/oidc-client/package.json index 1be58cce90..3d3347ed5b 100644 --- a/demo/oidc-client/package.json +++ b/demo/oidc-client/package.json @@ -33,6 +33,6 @@ "@vitejs/plugin-react-swc": "^4.0.0", "tailwindcss": "catalog:tailwind", "typescript": "^5.9.3", - "vite": "^7.2.4" + "vite": "^7.3.1" } } diff --git a/e2e/integration/vanilla-node/package.json b/e2e/integration/vanilla-node/package.json index 8cbaf8c381..f7cf8011da 100644 --- a/e2e/integration/vanilla-node/package.json +++ b/e2e/integration/vanilla-node/package.json @@ -7,7 +7,7 @@ }, "devDependencies": { "@better-auth/test-utils": "workspace:*", - "vite": "^7.2.4" + "vite": "^7.3.1" }, "dependencies": { "better-auth": "workspace:*", diff --git a/e2e/smoke/test/fixtures/vite/package.json b/e2e/smoke/test/fixtures/vite/package.json index 45d37b9f4d..748ddfb4ef 100644 --- a/e2e/smoke/test/fixtures/vite/package.json +++ b/e2e/smoke/test/fixtures/vite/package.json @@ -8,6 +8,6 @@ "better-auth": "workspace:*" }, "devDependencies": { - "vite": "^7.2.4" + "vite": "^7.3.1" } } diff --git a/package.json b/package.json index aea0e38a82..2e7468aaaa 100644 --- a/package.json +++ b/package.json @@ -37,20 +37,20 @@ }, "devDependencies": { "@arethetypeswrong/cli": "^0.18.2", - "@biomejs/biome": "2.3.8", - "@types/bun": "^1.3.3", - "@types/node": "^24.10.1", + "@biomejs/biome": "2.3.11", + "@types/bun": "^1.3.5", + "@types/node": "^25.0.6", "@vitest/coverage-istanbul": "catalog:vitest", "bumpp": "^10.3.2", "cspell": "^9.4.0", - "knip": "^5.71.0", + "knip": "^5.80.2", "nyc": "^17.1.0", "publint": "^0.3.15", "remark-cli": "^12.0.1", "remark-mdx": "^3.1.1", "remark-preset-wooorm": "^11.0.0", "tinyglobby": "^0.2.15", - "turbo": "^2.6.3", + "turbo": "^2.7.4", "typescript": "catalog:", "vitest": "catalog:vitest" } diff --git a/packages/better-auth/package.json b/packages/better-auth/package.json index 780acae5ba..afd8ff7e69 100644 --- a/packages/better-auth/package.json +++ b/packages/better-auth/package.json @@ -463,7 +463,7 @@ "@prisma/client": "^5.22.0", "@sveltejs/kit": "^2.37.1", "@types/better-sqlite3": "^7.6.13", - "@types/bun": "^1.3.3", + "@types/bun": "^1.3.5", "@types/pg": "^8.15.5", "@types/react": "catalog:react19", "better-sqlite3": "^12.4.1", diff --git a/packages/better-auth/src/adapters/kysely-adapter/bun-sqlite-dialect.ts b/packages/better-auth/src/adapters/kysely-adapter/bun-sqlite-dialect.ts index 1b81b6052c..86931984e6 100644 --- a/packages/better-auth/src/adapters/kysely-adapter/bun-sqlite-dialect.ts +++ b/packages/better-auth/src/adapters/kysely-adapter/bun-sqlite-dialect.ts @@ -147,7 +147,7 @@ class ConnectionMutex { #resolve?: () => void; async lock(): Promise { - while (this.#promise) { + while (this.#promise !== undefined) { await this.#promise; } diff --git a/packages/better-auth/src/adapters/kysely-adapter/node-sqlite-dialect.ts b/packages/better-auth/src/adapters/kysely-adapter/node-sqlite-dialect.ts index fd19a9a89d..825c5433dd 100644 --- a/packages/better-auth/src/adapters/kysely-adapter/node-sqlite-dialect.ts +++ b/packages/better-auth/src/adapters/kysely-adapter/node-sqlite-dialect.ts @@ -149,7 +149,7 @@ class ConnectionMutex { #resolve?: () => void; async lock(): Promise { - while (this.#promise) { + while (this.#promise !== undefined) { await this.#promise; } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d4d2ea5cb6..4aca814119 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,8 +16,8 @@ catalogs: specifier: 1.1.8 version: 1.1.8 tsdown: - specifier: ^0.17.2 - version: 0.17.2 + specifier: ^0.19.0 + version: 0.19.0 typescript: specifier: ^5.9.3 version: 5.9.3 @@ -63,17 +63,17 @@ importers: specifier: ^0.18.2 version: 0.18.2 '@biomejs/biome': - specifier: 2.3.8 - version: 2.3.8 + specifier: 2.3.11 + version: 2.3.11 '@types/bun': - specifier: ^1.3.3 - version: 1.3.3 + specifier: ^1.3.5 + version: 1.3.5 '@types/node': - specifier: ^24.10.1 - version: 24.10.1 + specifier: ^25.0.6 + version: 25.0.6 '@vitest/coverage-istanbul': specifier: catalog:vitest - version: 4.0.16(vitest@4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(happy-dom@20.0.11)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(msw@2.12.7(@types/node@24.10.1)(typescript@5.9.3))(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.0.16(vitest@4.0.16(@opentelemetry/api@1.9.0)(@types/node@25.0.6)(happy-dom@20.0.11)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(msw@2.12.7(@types/node@25.0.6)(typescript@5.9.3))(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) bumpp: specifier: ^10.3.2 version: 10.3.2(magicast@0.5.1) @@ -81,8 +81,8 @@ importers: specifier: ^9.4.0 version: 9.4.0 knip: - specifier: ^5.71.0 - version: 5.71.0(@types/node@24.10.1)(typescript@5.9.3) + specifier: ^5.80.2 + version: 5.80.2(@types/node@25.0.6)(typescript@5.9.3) nyc: specifier: ^17.1.0 version: 17.1.0 @@ -102,14 +102,14 @@ importers: specifier: ^0.2.15 version: 0.2.15 turbo: - specifier: ^2.6.3 - version: 2.6.3 + specifier: ^2.7.4 + version: 2.7.4 typescript: specifier: 'catalog:' version: 5.9.3 vitest: specifier: catalog:vitest - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(happy-dom@20.0.11)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(msw@2.12.7(@types/node@24.10.1)(typescript@5.9.3))(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@25.0.6)(happy-dom@20.0.11)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(msw@2.12.7(@types/node@25.0.6)(typescript@5.9.3))(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) demo/expo: dependencies: @@ -464,7 +464,7 @@ importers: version: 2.0.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3) stripe: specifier: ^20.0.0 - version: 20.0.0(@types/node@25.0.3) + version: 20.0.0(@types/node@25.0.6) tailwind-merge: specifier: ^3.3.1 version: 3.4.0 @@ -553,7 +553,7 @@ importers: devDependencies: '@tailwindcss/vite': specifier: catalog:tailwind - version: 4.1.18(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.1.18(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) '@types/react': specifier: catalog:react19 version: 19.2.7 @@ -562,7 +562,7 @@ importers: version: 19.2.3(@types/react@19.2.7) '@vitejs/plugin-react-swc': specifier: ^4.0.0 - version: 4.2.2(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.2.2(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) tailwindcss: specifier: catalog:tailwind version: 4.1.18 @@ -570,8 +570,8 @@ importers: specifier: ^5.9.3 version: 5.9.3 vite: - specifier: ^7.2.4 - version: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^7.3.1 + version: 7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) demo/stateless: dependencies: @@ -719,7 +719,7 @@ importers: version: 8.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@vercel/analytics': specifier: ^1.5.0 - version: 1.5.0(@remix-run/react@2.17.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3))(@sveltejs/kit@2.49.2(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(next@16.1.1(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.57.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.1))(react@19.2.3)(svelte@5.46.1)(vue-router@4.6.4(vue@3.5.26(typescript@5.9.3)))(vue@3.5.26(typescript@5.9.3)) + version: 1.5.0(@remix-run/react@2.17.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3))(@sveltejs/kit@2.49.2(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.1)(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.46.1)(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(next@16.1.1(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.57.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.1))(react@19.2.3)(svelte@5.46.1)(vue-router@4.6.4(vue@3.5.26(typescript@5.9.3)))(vue@3.5.26(typescript@5.9.3)) '@vercel/og': specifier: ^0.8.5 version: 0.8.5 @@ -758,7 +758,7 @@ importers: version: 16.4.3(@oramacloud/client@2.1.4)(@tanstack/react-router@1.144.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/react@19.2.7)(algoliasearch@5.46.2)(lucide-react@0.542.0(react@19.2.3))(next@16.1.1(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.57.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.1))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(zod@4.3.4) fumadocs-mdx: specifier: 14.2.4 - version: 14.2.4(@types/react@19.2.7)(fumadocs-core@16.4.3(@oramacloud/client@2.1.4)(@tanstack/react-router@1.144.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/react@19.2.7)(algoliasearch@5.46.2)(lucide-react@0.542.0(react@19.2.3))(next@16.1.1(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.57.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.1))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(zod@4.3.4))(next@16.1.1(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.57.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.1))(react@19.2.3)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 14.2.4(@types/react@19.2.7)(fumadocs-core@16.4.3(@oramacloud/client@2.1.4)(@tanstack/react-router@1.144.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/react@19.2.7)(algoliasearch@5.46.2)(lucide-react@0.542.0(react@19.2.3))(next@16.1.1(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.57.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.1))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(zod@4.3.4))(next@16.1.1(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.57.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.1))(react@19.2.3)(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) fumadocs-typescript: specifier: ^5.0.1 version: 5.0.1(@types/react@19.2.7)(fumadocs-core@16.4.3(@oramacloud/client@2.1.4)(@tanstack/react-router@1.144.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/react@19.2.7)(algoliasearch@5.46.2)(lucide-react@0.542.0(react@19.2.3))(next@16.1.1(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.57.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.1))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(zod@4.3.4))(fumadocs-ui@16.4.3(@oramacloud/client@2.1.4)(@tanstack/react-router@1.144.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(algoliasearch@5.46.2)(next@16.1.1(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.57.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.1))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(tailwindcss@4.1.18)(zod@4.3.4))(react@19.2.3)(typescript@5.9.3) @@ -928,7 +928,7 @@ importers: version: 0.15.3(solid-js@1.9.9) '@solidjs/start': specifier: ^1.1.7 - version: 1.1.7(solid-js@1.9.9)(vinxi@0.5.8(931b65613734baa15c1aafc78ec19b78))(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 1.1.7(solid-js@1.9.9)(vinxi@0.5.8(0332b19681288fa24f523fbd4fb9232e))(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) better-auth: specifier: workspace:* version: link:../../../packages/better-auth @@ -940,7 +940,7 @@ importers: version: 1.9.9 vinxi: specifier: ^0.5.8 - version: 0.5.8(931b65613734baa15c1aafc78ec19b78) + version: 0.5.8(0332b19681288fa24f523fbd4fb9232e) devDependencies: '@better-auth/test-utils': specifier: workspace:* @@ -974,8 +974,8 @@ importers: specifier: workspace:* version: link:../test-utils vite: - specifier: ^7.2.4 - version: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^7.3.1 + version: 7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) e2e/smoke: dependencies: @@ -997,7 +997,7 @@ importers: devDependencies: '@cloudflare/vitest-pool-workers': specifier: ^0.8.69 - version: 0.8.69(@cloudflare/workers-types@4.20260103.0)(@vitest/runner@4.0.16)(@vitest/snapshot@4.0.16)(vitest@4.0.16(@opentelemetry/api@1.9.0)(@types/node@25.0.3)(happy-dom@20.0.11)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(msw@2.12.7(@types/node@25.0.3)(typescript@5.9.3))(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 0.8.69(@cloudflare/workers-types@4.20260103.0)(@vitest/runner@4.0.16)(@vitest/snapshot@4.0.16)(vitest@4.0.16(@opentelemetry/api@1.9.0)(@types/node@25.0.6)(happy-dom@20.0.11)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(msw@2.12.7(@types/node@25.0.6)(typescript@5.9.3))(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) '@cloudflare/workers-types': specifier: ^4.20250903.0 version: 4.20260103.0 @@ -1027,7 +1027,7 @@ importers: version: link:../../../../../packages/better-auth stripe: specifier: ^20.0.0 - version: 20.0.0(@types/node@25.0.3) + version: 20.0.0(@types/node@25.0.6) e2e/smoke/test/fixtures/tsconfig-exact-optional-property-types: dependencies: @@ -1063,8 +1063,8 @@ importers: version: link:../../../../../packages/better-auth devDependencies: vite: - specifier: ^7.2.4 - version: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + specifier: ^7.3.1 + version: 7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) packages/better-auth: dependencies: @@ -1119,13 +1119,13 @@ importers: version: 5.22.0(prisma@5.22.0) '@sveltejs/kit': specifier: ^2.37.1 - version: 2.49.2(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 2.49.2(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.1)(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.46.1)(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) '@types/better-sqlite3': specifier: ^7.6.13 version: 7.6.13 '@types/bun': - specifier: ^1.3.3 - version: 1.3.3 + specifier: ^1.3.5 + version: 1.3.5 '@types/pg': specifier: ^8.15.5 version: 8.16.0 @@ -1155,7 +1155,7 @@ importers: version: 6.18.0 msw: specifier: ^2.12.4 - version: 2.12.7(@types/node@25.0.3)(typescript@5.9.3) + version: 2.12.7(@types/node@25.0.6)(typescript@5.9.3) mysql2: specifier: ^3.14.4 version: 3.16.0 @@ -1188,7 +1188,7 @@ importers: version: 18.6.1 tsdown: specifier: 'catalog:' - version: 0.17.2(@arethetypeswrong/core@0.18.2)(oxc-resolver@11.16.2)(publint@0.3.16)(synckit@0.11.11)(typescript@5.9.3) + version: 0.19.0(@arethetypeswrong/core@0.18.2)(oxc-resolver@11.16.2)(publint@0.3.16)(synckit@0.11.11)(typescript@5.9.3) type-fest: specifier: ^5.2.0 version: 5.3.1 @@ -1197,7 +1197,7 @@ importers: version: 5.9.3 vitest: specifier: ^4.0.15 - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@25.0.3)(happy-dom@20.0.11)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(msw@2.12.7(@types/node@25.0.3)(typescript@5.9.3))(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@25.0.6)(happy-dom@20.0.11)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(msw@2.12.7(@types/node@25.0.6)(typescript@5.9.3))(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) vue: specifier: ^3.5.18 version: 3.5.26(typescript@5.9.3) @@ -1294,7 +1294,7 @@ importers: version: 2.6.1 tsdown: specifier: 'catalog:' - version: 0.17.2(@arethetypeswrong/core@0.18.2)(oxc-resolver@11.16.2)(publint@0.3.16)(synckit@0.11.11)(typescript@5.9.3) + version: 0.19.0(@arethetypeswrong/core@0.18.2)(oxc-resolver@11.16.2)(publint@0.3.16)(synckit@0.11.11)(typescript@5.9.3) tsx: specifier: ^4.20.6 version: 4.21.0 @@ -1334,7 +1334,7 @@ importers: version: 1.0.1 tsdown: specifier: 'catalog:' - version: 0.17.2(@arethetypeswrong/core@0.18.2)(oxc-resolver@11.16.2)(publint@0.3.16)(synckit@0.11.11)(typescript@5.9.3) + version: 0.19.0(@arethetypeswrong/core@0.18.2)(oxc-resolver@11.16.2)(publint@0.3.16)(synckit@0.11.11)(typescript@5.9.3) packages/expo: dependencies: @@ -1371,7 +1371,7 @@ importers: version: 0.80.2(@babel/core@7.28.5)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@types/react@19.2.7)(react@19.2.3) tsdown: specifier: 'catalog:' - version: 0.17.2(@arethetypeswrong/core@0.18.2)(oxc-resolver@11.16.2)(publint@0.3.16)(synckit@0.11.11)(typescript@5.9.3) + version: 0.19.0(@arethetypeswrong/core@0.18.2)(oxc-resolver@11.16.2)(publint@0.3.16)(synckit@0.11.11)(typescript@5.9.3) packages/oauth-provider: dependencies: @@ -1405,7 +1405,7 @@ importers: version: 1.9.0 tsdown: specifier: 'catalog:' - version: 0.17.2(@arethetypeswrong/core@0.18.2)(oxc-resolver@11.16.2)(publint@0.3.16)(synckit@0.11.11)(typescript@5.9.3) + version: 0.19.0(@arethetypeswrong/core@0.18.2)(oxc-resolver@11.16.2)(publint@0.3.16)(synckit@0.11.11)(typescript@5.9.3) packages/passkey: dependencies: @@ -1439,7 +1439,7 @@ importers: version: link:../better-auth tsdown: specifier: 'catalog:' - version: 0.17.2(@arethetypeswrong/core@0.18.2)(oxc-resolver@11.16.2)(publint@0.3.16)(synckit@0.11.11)(typescript@5.9.3) + version: 0.19.0(@arethetypeswrong/core@0.18.2)(oxc-resolver@11.16.2)(publint@0.3.16)(synckit@0.11.11)(typescript@5.9.3) packages/scim: dependencies: @@ -1464,7 +1464,7 @@ importers: version: link:../sso tsdown: specifier: 'catalog:' - version: 0.17.2(@arethetypeswrong/core@0.18.2)(oxc-resolver@11.16.2)(publint@0.3.16)(synckit@0.11.11)(typescript@5.9.3) + version: 0.19.0(@arethetypeswrong/core@0.18.2)(oxc-resolver@11.16.2)(publint@0.3.16)(synckit@0.11.11)(typescript@5.9.3) packages/sso: dependencies: @@ -1513,7 +1513,7 @@ importers: version: 8.2.0 tsdown: specifier: 'catalog:' - version: 0.17.2(@arethetypeswrong/core@0.18.2)(oxc-resolver@11.16.2)(publint@0.3.16)(synckit@0.11.11)(typescript@5.9.3) + version: 0.19.0(@arethetypeswrong/core@0.18.2)(oxc-resolver@11.16.2)(publint@0.3.16)(synckit@0.11.11)(typescript@5.9.3) packages/stripe: dependencies: @@ -1535,10 +1535,10 @@ importers: version: 1.1.8(zod@4.3.4) stripe: specifier: ^20.0.0 - version: 20.0.0(@types/node@25.0.3) + version: 20.0.0(@types/node@25.0.6) tsdown: specifier: 'catalog:' - version: 0.17.2(@arethetypeswrong/core@0.18.2)(oxc-resolver@11.16.2)(publint@0.3.16)(synckit@0.11.11)(typescript@5.9.3) + version: 0.19.0(@arethetypeswrong/core@0.18.2)(oxc-resolver@11.16.2)(publint@0.3.16)(synckit@0.11.11)(typescript@5.9.3) packages/telemetry: dependencies: @@ -1554,7 +1554,7 @@ importers: version: link:../core tsdown: specifier: 'catalog:' - version: 0.17.2(@arethetypeswrong/core@0.18.2)(oxc-resolver@11.16.2)(publint@0.3.16)(synckit@0.11.11)(typescript@5.9.3) + version: 0.19.0(@arethetypeswrong/core@0.18.2)(oxc-resolver@11.16.2)(publint@0.3.16)(synckit@0.11.11)(typescript@5.9.3) type-fest: specifier: ^5.2.0 version: 5.3.1 @@ -1572,13 +1572,13 @@ importers: version: link:../packages/better-auth msw: specifier: ^2.12.4 - version: 2.12.7(@types/node@25.0.3)(typescript@5.9.3) + version: 2.12.7(@types/node@25.0.6)(typescript@5.9.3) openid-client: specifier: ^6.8.1 version: 6.8.1 vitest: specifier: catalog:vitest - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@25.0.3)(happy-dom@20.0.11)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(msw@2.12.7(@types/node@25.0.3)(typescript@5.9.3))(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@25.0.6)(happy-dom@20.0.11)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(msw@2.12.7(@types/node@25.0.6)(typescript@5.9.3))(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) packages: @@ -2464,55 +2464,55 @@ packages: '@better-fetch/fetch@1.1.21': resolution: {integrity: sha512-/ImESw0sskqlVR94jB+5+Pxjf+xBwDZF/N5+y2/q4EqD7IARUTSpPfIo8uf39SYpCxyOCtbyYpUrZ3F/k0zT4A==} - '@biomejs/biome@2.3.8': - resolution: {integrity: sha512-Qjsgoe6FEBxWAUzwFGFrB+1+M8y/y5kwmg5CHac+GSVOdmOIqsAiXM5QMVGZJ1eCUCLlPZtq4aFAQ0eawEUuUA==} + '@biomejs/biome@2.3.11': + resolution: {integrity: sha512-/zt+6qazBWguPG6+eWmiELqO+9jRsMZ/DBU3lfuU2ngtIQYzymocHhKiZRyrbra4aCOoyTg/BmY+6WH5mv9xmQ==} engines: {node: '>=14.21.3'} hasBin: true - '@biomejs/cli-darwin-arm64@2.3.8': - resolution: {integrity: sha512-HM4Zg9CGQ3txTPflxD19n8MFPrmUAjaC7PQdLkugeeC0cQ+PiVrd7i09gaBS/11QKsTDBJhVg85CEIK9f50Qww==} + '@biomejs/cli-darwin-arm64@2.3.11': + resolution: {integrity: sha512-/uXXkBcPKVQY7rc9Ys2CrlirBJYbpESEDme7RKiBD6MmqR2w3j0+ZZXRIL2xiaNPsIMMNhP1YnA+jRRxoOAFrA==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [darwin] - '@biomejs/cli-darwin-x64@2.3.8': - resolution: {integrity: sha512-lUDQ03D7y/qEao7RgdjWVGCu+BLYadhKTm40HkpJIi6kn8LSv5PAwRlew/DmwP4YZ9ke9XXoTIQDO1vAnbRZlA==} + '@biomejs/cli-darwin-x64@2.3.11': + resolution: {integrity: sha512-fh7nnvbweDPm2xEmFjfmq7zSUiox88plgdHF9OIW4i99WnXrAC3o2P3ag9judoUMv8FCSUnlwJCM1B64nO5Fbg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [darwin] - '@biomejs/cli-linux-arm64-musl@2.3.8': - resolution: {integrity: sha512-PShR4mM0sjksUMyxbyPNMxoKFPVF48fU8Qe8Sfx6w6F42verbwRLbz+QiKNiDPRJwUoMG1nPM50OBL3aOnTevA==} + '@biomejs/cli-linux-arm64-musl@2.3.11': + resolution: {integrity: sha512-XPSQ+XIPZMLaZ6zveQdwNjbX+QdROEd1zPgMwD47zvHV+tCGB88VH+aynyGxAHdzL+Tm/+DtKST5SECs4iwCLg==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] - '@biomejs/cli-linux-arm64@2.3.8': - resolution: {integrity: sha512-Uo1OJnIkJgSgF+USx970fsM/drtPcQ39I+JO+Fjsaa9ZdCN1oysQmy6oAGbyESlouz+rzEckLTF6DS7cWse95g==} + '@biomejs/cli-linux-arm64@2.3.11': + resolution: {integrity: sha512-l4xkGa9E7Uc0/05qU2lMYfN1H+fzzkHgaJoy98wO+b/7Gl78srbCRRgwYSW+BTLixTBrM6Ede5NSBwt7rd/i6g==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] - '@biomejs/cli-linux-x64-musl@2.3.8': - resolution: {integrity: sha512-YGLkqU91r1276uwSjiUD/xaVikdxgV1QpsicT0bIA1TaieM6E5ibMZeSyjQ/izBn4tKQthUSsVZacmoJfa3pDA==} + '@biomejs/cli-linux-x64-musl@2.3.11': + resolution: {integrity: sha512-vU7a8wLs5C9yJ4CB8a44r12aXYb8yYgBn+WeyzbMjaCMklzCv1oXr8x+VEyWodgJt9bDmhiaW/I0RHbn7rsNmw==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] - '@biomejs/cli-linux-x64@2.3.8': - resolution: {integrity: sha512-QDPMD5bQz6qOVb3kiBui0zKZXASLo0NIQ9JVJio5RveBEFgDgsvJFUvZIbMbUZT3T00M/1wdzwWXk4GIh0KaAw==} + '@biomejs/cli-linux-x64@2.3.11': + resolution: {integrity: sha512-/1s9V/H3cSe0r0Mv/Z8JryF5x9ywRxywomqZVLHAoa/uN0eY7F8gEngWKNS5vbbN/BsfpCG5yeBT5ENh50Frxg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] - '@biomejs/cli-win32-arm64@2.3.8': - resolution: {integrity: sha512-H4IoCHvL1fXKDrTALeTKMiE7GGWFAraDwBYFquE/L/5r1927Te0mYIGseXi4F+lrrwhSWbSGt5qPFswNoBaCxg==} + '@biomejs/cli-win32-arm64@2.3.11': + resolution: {integrity: sha512-PZQ6ElCOnkYapSsysiTy0+fYX+agXPlWugh6+eQ6uPKI3vKAqNp6TnMhoM3oY2NltSB89hz59o8xIfOdyhi9Iw==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [win32] - '@biomejs/cli-win32-x64@2.3.8': - resolution: {integrity: sha512-RguzimPoZWtBapfKhKjcWXBVI91tiSprqdBYu7tWhgN8pKRZhw24rFeNZTNf6UiBfjCYCi9eFQs/JzJZIhuK4w==} + '@biomejs/cli-win32-x64@2.3.11': + resolution: {integrity: sha512-43VrG813EW+b5+YbDbz31uUsheX+qFKCpXeY9kfdAx+ww3naKxeVkTD9zLIWxUPfJquANMHrmW3wbe/037G0Qg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [win32] @@ -2865,12 +2865,15 @@ packages: '@electric-sql/pglite@0.3.2': resolution: {integrity: sha512-zfWWa+V2ViDCY/cmUfRqeWY1yLto+EpxjXnZzenB1TyxsTiXaTWeZFIZw6mac52BsuQm0RjCnisjBtdBaXOI6w==} - '@emnapi/core@1.7.1': - resolution: {integrity: sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==} + '@emnapi/core@1.8.1': + resolution: {integrity: sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==} '@emnapi/runtime@1.7.1': resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} + '@emnapi/runtime@1.8.1': + resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==} + '@emnapi/wasi-threads@1.1.0': resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} @@ -4620,11 +4623,8 @@ packages: '@oramacloud/client@2.1.4': resolution: {integrity: sha512-uNPFs4wq/iOPbggCwTkVNbIr64Vfd7ZS/h+cricXVnzXWocjDTfJ3wLL4lr0qiSu41g8z+eCAGBqJ30RO2O4AA==} - '@oxc-project/types@0.101.0': - resolution: {integrity: sha512-nuFhqlUzJX+gVIPPfuE6xurd4lST3mdcWOhyK/rZO0B9XWMKm79SuszIQEnSMmmDhq1DC8WWVYGVd+6F93o1gQ==} - - '@oxc-project/types@0.106.0': - resolution: {integrity: sha512-QdsH3rZq480VnOHSHgPYOhjL8O8LBdcnSjM408BpPCCUc0JYYZPG9Gafl9i3OcGk/7137o+gweb4cCv3WAUykg==} + '@oxc-project/types@0.107.0': + resolution: {integrity: sha512-QFDRbYfV2LVx8tyqtyiah3jQPUj1mK2+RYwxyFWyGoys6XJnwTdlzO6rdNNHOPorHAu5Uo34oWRKcvNpbJarmQ==} '@oxc-resolver/binding-android-arm-eabi@11.16.2': resolution: {integrity: sha512-lVJbvydLQIDZHKUb6Zs9Rq80QVTQ9xdCQE30eC9/cjg4wsMoEOg65QZPymUAIVJotpUAWJD0XYcwE7ugfxx5kQ==} @@ -4732,60 +4732,120 @@ packages: cpu: [arm64] os: [android] + '@parcel/watcher-android-arm64@2.5.4': + resolution: {integrity: sha512-hoh0vx4v+b3BNI7Cjoy2/B0ARqcwVNrzN/n7DLq9ZB4I3lrsvhrkCViJyfTj/Qi5xM9YFiH4AmHGK6pgH1ss7g==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + '@parcel/watcher-darwin-arm64@2.5.1': resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [darwin] + '@parcel/watcher-darwin-arm64@2.5.4': + resolution: {integrity: sha512-kphKy377pZiWpAOyTgQYPE5/XEKVMaj6VUjKT5VkNyUJlr2qZAn8gIc7CPzx+kbhvqHDT9d7EqdOqRXT6vk0zw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + '@parcel/watcher-darwin-x64@2.5.1': resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [darwin] + '@parcel/watcher-darwin-x64@2.5.4': + resolution: {integrity: sha512-UKaQFhCtNJW1A9YyVz3Ju7ydf6QgrpNQfRZ35wNKUhTQ3dxJ/3MULXN5JN/0Z80V/KUBDGa3RZaKq1EQT2a2gg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + '@parcel/watcher-freebsd-x64@2.5.1': resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [freebsd] + '@parcel/watcher-freebsd-x64@2.5.4': + resolution: {integrity: sha512-Dib0Wv3Ow/m2/ttvLdeI2DBXloO7t3Z0oCp4bAb2aqyqOjKPPGrg10pMJJAQ7tt8P4V2rwYwywkDhUia/FgS+Q==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + '@parcel/watcher-linux-arm-glibc@2.5.1': resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + '@parcel/watcher-linux-arm-glibc@2.5.4': + resolution: {integrity: sha512-I5Vb769pdf7Q7Sf4KNy8Pogl/URRCKu9ImMmnVKYayhynuyGYMzuI4UOWnegQNa2sGpsPSbzDsqbHNMyeyPCgw==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + '@parcel/watcher-linux-arm-musl@2.5.1': resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + '@parcel/watcher-linux-arm-musl@2.5.4': + resolution: {integrity: sha512-kGO8RPvVrcAotV4QcWh8kZuHr9bXi9a3bSZw7kFarYR0+fGliU7hd/zevhjw8fnvIKG3J9EO5G6sXNGCSNMYPQ==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + '@parcel/watcher-linux-arm64-glibc@2.5.1': resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + '@parcel/watcher-linux-arm64-glibc@2.5.4': + resolution: {integrity: sha512-KU75aooXhqGFY2W5/p8DYYHt4hrjHZod8AhcGAmhzPn/etTa+lYCDB2b1sJy3sWJ8ahFVTdy+EbqSBvMx3iFlw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + '@parcel/watcher-linux-arm64-musl@2.5.1': resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + '@parcel/watcher-linux-arm64-musl@2.5.4': + resolution: {integrity: sha512-Qx8uNiIekVutnzbVdrgSanM+cbpDD3boB1f8vMtnuG5Zau4/bdDbXyKwIn0ToqFhIuob73bcxV9NwRm04/hzHQ==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + '@parcel/watcher-linux-x64-glibc@2.5.1': resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + '@parcel/watcher-linux-x64-glibc@2.5.4': + resolution: {integrity: sha512-UYBQvhYmgAv61LNUn24qGQdjtycFBKSK3EXr72DbJqX9aaLbtCOO8+1SkKhD/GNiJ97ExgcHBrukcYhVjrnogA==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + '@parcel/watcher-linux-x64-musl@2.5.1': resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + '@parcel/watcher-linux-x64-musl@2.5.4': + resolution: {integrity: sha512-YoRWCVgxv8akZrMhdyVi6/TyoeeMkQ0PGGOf2E4omODrvd1wxniXP+DBynKoHryStks7l+fDAMUBRzqNHrVOpg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + '@parcel/watcher-wasm@2.3.0': resolution: {integrity: sha512-ejBAX8H0ZGsD8lSICDNyMbSEtPMWgDL0WFCt/0z7hyf5v8Imz4rAM8xY379mBsECkq/Wdqa5WEDLqtjZ+6NxfA==} engines: {node: '>= 10.0.0'} @@ -4804,22 +4864,44 @@ packages: cpu: [arm64] os: [win32] + '@parcel/watcher-win32-arm64@2.5.4': + resolution: {integrity: sha512-iby+D/YNXWkiQNYcIhg8P5hSjzXEHaQrk2SLrWOUD7VeC4Ohu0WQvmV+HDJokZVJ2UjJ4AGXW3bx7Lls9Ln4TQ==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + '@parcel/watcher-win32-ia32@2.5.1': resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==} engines: {node: '>= 10.0.0'} cpu: [ia32] os: [win32] + '@parcel/watcher-win32-ia32@2.5.4': + resolution: {integrity: sha512-vQN+KIReG0a2ZDpVv8cgddlf67J8hk1WfZMMP7sMeZmJRSmEax5xNDNWKdgqSe2brOKTQQAs3aCCUal2qBHAyg==} + engines: {node: '>= 10.0.0'} + cpu: [ia32] + os: [win32] + '@parcel/watcher-win32-x64@2.5.1': resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [win32] + '@parcel/watcher-win32-x64@2.5.4': + resolution: {integrity: sha512-3A6efb6BOKwyw7yk9ro2vus2YTt2nvcd56AuzxdMiVOxL9umDyN5PKkKfZ/gZ9row41SjVmTVQNWQhaRRGpOKw==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + '@parcel/watcher@2.5.1': resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==} engines: {node: '>= 10.0.0'} + '@parcel/watcher@2.5.4': + resolution: {integrity: sha512-WYa2tUVV5HiArWPB3ydlOc4R2ivq0IDrlqhMi3l7mVsFEXNcTfxYFPIHXHXIh/ca/y/V5N4E1zecyxdIBjYnkQ==} + engines: {node: '>= 10.0.0'} + '@peculiar/asn1-android@2.3.16': resolution: {integrity: sha512-a1viIv3bIahXNssrOIkXZIlI2ePpZaNmR30d4aBL99mu2rO+mT9D6zBsp7H6eROWGtmwv0Ionp5olJurIo09dw==} @@ -6121,156 +6203,79 @@ packages: react-native-web: optional: true - '@rolldown/binding-android-arm64@1.0.0-beta.53': - resolution: {integrity: sha512-Ok9V8o7o6YfSdTTYA/uHH30r3YtOxLD6G3wih/U9DO0ucBBFq8WPt/DslU53OgfteLRHITZny9N/qCUxMf9kjQ==} + '@rolldown/binding-android-arm64@1.0.0-beta.59': + resolution: {integrity: sha512-6yLLgyswYwiCfls9+hoNFY9F8TQdwo15hpXDHzlAR0X/GojeKF+AuNcXjYNbOJ4zjl/5D6lliE8CbpB5t1OWIQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-android-arm64@1.0.0-beta.58': - resolution: {integrity: sha512-mWj5eE4Qc8TbPdGGaaLvBb9XfDPvE1EmZkJQgiGKwchkWH4oAJcRAKMTw7ZHnb1L+t7Ah41sBkAecaIsuUgsug==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [android] - - '@rolldown/binding-darwin-arm64@1.0.0-beta.53': - resolution: {integrity: sha512-yIsKqMz0CtRnVa6x3Pa+mzTihr4Ty+Z6HfPbZ7RVbk1Uxnco4+CUn7Qbm/5SBol1JD/7nvY8rphAgyAi7Lj6Vg==} + '@rolldown/binding-darwin-arm64@1.0.0-beta.59': + resolution: {integrity: sha512-hqGXRc162qCCIOAcHN2Cw4eXiVTwYsMFLOhAy1IG2CxY+dwc/l4Ga+dLPkLor3Ikqy5WDn+7kxHbbh6EmshEpQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-arm64@1.0.0-beta.58': - resolution: {integrity: sha512-wFxUymI/5R8bH8qZFYDfAxAN9CyISEIYke+95oZPiv6EWo88aa5rskjVcCpKA532R+klFmdqjbbaD56GNmTF4Q==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [darwin] - - '@rolldown/binding-darwin-x64@1.0.0-beta.53': - resolution: {integrity: sha512-GTXe+mxsCGUnJOFMhfGWmefP7Q9TpYUseHvhAhr21nCTgdS8jPsvirb0tJwM3lN0/u/cg7bpFNa16fQrjKrCjQ==} + '@rolldown/binding-darwin-x64@1.0.0-beta.59': + resolution: {integrity: sha512-ezvvGuhteE15JmMhJW0wS7BaXmhwLy1YHeEwievYaPC1PgGD86wgBKfOpHr9tSKllAXbCe0BeeMvasscWLhKdA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-beta.58': - resolution: {integrity: sha512-ybp3MkPj23VDV9PhtRwdU5qrGhlViWRV5BjKwO6epaSlUD5lW0WyY+roN3ZAzbma/9RrMTgZ/a/gtQq8YXOcqw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [darwin] - - '@rolldown/binding-freebsd-x64@1.0.0-beta.53': - resolution: {integrity: sha512-9Tmp7bBvKqyDkMcL4e089pH3RsjD3SUungjmqWtyhNOxoQMh0fSmINTyYV8KXtE+JkxYMPWvnEt+/mfpVCkk8w==} + '@rolldown/binding-freebsd-x64@1.0.0-beta.59': + resolution: {integrity: sha512-4fhKVJiEYVd5n6no/mrL3LZ9kByfCGwmONOrdtvx8DJGDQhehH/q3RfhG3V/4jGKhpXgbDjpIjkkFdybCTcgew==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-freebsd-x64@1.0.0-beta.58': - resolution: {integrity: sha512-Evxj3yh7FWvyklUYZa0qTVT9N2zX9TPDqGF056hl8hlCZ9/ndQ2xMv6uw9PD1VlLpukbsqL+/C6M0qwipL0QMg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [freebsd] - - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.53': - resolution: {integrity: sha512-a1y5fiB0iovuzdbjUxa7+Zcvgv+mTmlGGC4XydVIsyl48eoxgaYkA3l9079hyTyhECsPq+mbr0gVQsFU11OJAQ==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.59': + resolution: {integrity: sha512-T3Y52sW6JAhvIqArBw+wtjNU1Ieaz4g0NBxyjSJoW971nZJBZygNlSYx78G4cwkCmo1dYTciTPDOnQygLV23pA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.58': - resolution: {integrity: sha512-tYeXprDOrEgVHUbPXH6MPso4cM/c6RTkmJNICMQlYdki4hGMh92aj3yU6CKs+4X5gfG0yj5kVUw/L4M685SYag==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [linux] - - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.53': - resolution: {integrity: sha512-bpIGX+ov9PhJYV+wHNXl9rzq4F0QvILiURn0y0oepbQx+7stmQsKA0DhPGwmhfvF856wq+gbM8L92SAa/CBcLg==} + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.59': + resolution: {integrity: sha512-NIW40jQDSQap2KDdmm9z3B/4OzWJ6trf8dwx3FD74kcQb3v34ThsBFTtzE5KjDuxnxgUlV+DkAu+XgSMKrgufw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.58': - resolution: {integrity: sha512-N78vmZzP6zG967Ohr+MasCjmKtis0geZ1SOVmxrA0/bklTQSzH5kHEjW5Qn+i1taFno6GEre1E40v0wuWsNOQw==} + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.59': + resolution: {integrity: sha512-CCKEk+H+8c0WGe/8n1E20n85Tq4Pv+HNAbjP1KfUXW+01aCWSMjU56ChNrM2tvHnXicfm7QRNoZyfY8cWh7jLQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.53': - resolution: {integrity: sha512-bGe5EBB8FVjHBR1mOLOPEFg1Lp3//7geqWkU5NIhxe+yH0W8FVrQ6WRYOap4SUTKdklD/dC4qPLREkMMQ855FA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.58': - resolution: {integrity: sha512-l+p4QVtG72C7wI2SIkNQw/KQtSjuYwS3rV6AKcWrRBF62ClsFUcif5vLaZIEbPrCXu5OFRXigXFJnxYsVVZqdQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.53': - resolution: {integrity: sha512-qL+63WKVQs1CMvFedlPt0U9PiEKJOAL/bsHMKUDS6Vp2Q+YAv/QLPu8rcvkfIMvQ0FPU2WL0aX4eWwF6e/GAnA==} + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.59': + resolution: {integrity: sha512-VlfwJ/HCskPmQi8R0JuAFndySKVFX7yPhE658o27cjSDWWbXVtGkSbwaxstii7Q+3Rz87ZXN+HLnb1kd4R9Img==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.58': - resolution: {integrity: sha512-urzJX0HrXxIh0FfxwWRjfPCMeInU9qsImLQxHBgLp5ivji1EEUnOfux8KxPPnRQthJyneBrN2LeqUix9DYrNaQ==} + '@rolldown/binding-linux-x64-musl@1.0.0-beta.59': + resolution: {integrity: sha512-kuO92hTRyGy0Ts3Nsqll0rfO8eFsEJe9dGQGktkQnZ2hrJrDVN0y419dMgKy/gB2S2o7F2dpWhpfQOBehZPwVA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@rolldown/binding-linux-x64-musl@1.0.0-beta.53': - resolution: {integrity: sha512-VGl9JIGjoJh3H8Mb+7xnVqODajBmrdOOb9lxWXdcmxyI+zjB2sux69br0hZJDTyLJfvBoYm439zPACYbCjGRmw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - - '@rolldown/binding-linux-x64-musl@1.0.0-beta.58': - resolution: {integrity: sha512-7ijfVK3GISnXIwq/1FZo+KyAUJjL3kWPJ7rViAL6MWeEBhEgRzJ0yEd9I8N9aut8Y8ab+EKFJyRNMWZuUBwQ0A==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - - '@rolldown/binding-openharmony-arm64@1.0.0-beta.53': - resolution: {integrity: sha512-B4iIserJXuSnNzA5xBLFUIjTfhNy7d9sq4FUMQY3GhQWGVhS2RWWzzDnkSU6MUt7/aHUrep0CdQfXUJI9D3W7A==} + '@rolldown/binding-openharmony-arm64@1.0.0-beta.59': + resolution: {integrity: sha512-PXAebvNL4sYfCqi8LdY4qyFRacrRoiPZLo3NoUmiTxm7MPtYYR8CNtBGNokqDmMuZIQIecRaD/jbmFAIDz7DxQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-openharmony-arm64@1.0.0-beta.58': - resolution: {integrity: sha512-/m7sKZCS+cUULbzyJTIlv8JbjNohxbpAOA6cM+lgWgqVzPee3U6jpwydrib328JFN/gF9A99IZEnuGYqEDJdww==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [openharmony] - - '@rolldown/binding-wasm32-wasi@1.0.0-beta.53': - resolution: {integrity: sha512-BUjAEgpABEJXilGq/BPh7jeU3WAJ5o15c1ZEgHaDWSz3LB881LQZnbNJHmUiM4d1JQWMYYyR1Y490IBHi2FPJg==} + '@rolldown/binding-wasm32-wasi@1.0.0-beta.59': + resolution: {integrity: sha512-yJoklQg7XIZq8nAg0bbkEXcDK6sfpjxQGxpg2Nd6ERNtvg+eOaEBRgPww0BVTrYFQzje1pB5qPwC2VnJHT3koQ==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@rolldown/binding-wasm32-wasi@1.0.0-beta.58': - resolution: {integrity: sha512-6SZk7zMgv+y3wFFQ9qE5P9NnRHcRsptL1ypmudD26PDY+PvFCvfHRkJNfclWnvacVGxjowr7JOL3a9fd1wWhUw==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.53': - resolution: {integrity: sha512-s27uU7tpCWSjHBnxyVXHt3rMrQdJq5MHNv3BzsewCIroIw3DJFjMH1dzCPPMUFxnh1r52Nf9IJ/eWp6LDoyGcw==} + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.59': + resolution: {integrity: sha512-ljZ4+McmCbIuZwEBaoGtiG8Rq2nJjaXEnLEIx+usWetXn1ECjXY0LAhkELxOV6ytv4ensEmoJJ8nXg47hRMjlw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.58': - resolution: {integrity: sha512-sFqfYPnBZ6xBhMkadB7UD0yjEDRvs7ipR3nCggblN+N4ODCXY6qhg/bKL39+W+dgQybL7ErD4EGERVbW9DAWvg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [win32] - - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.53': - resolution: {integrity: sha512-cjWL/USPJ1g0en2htb4ssMjIycc36RvdQAx1WlXnS6DpULswiUTVXPDesTifSKYSyvx24E0YqQkEm0K/M2Z/AA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [win32] - - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.58': - resolution: {integrity: sha512-AnFWJdAqB8+IDPcGrATYs67Kik/6tnndNJV2jGRmwlbeNiQQ8GhRJU8ETRlINfII0pqi9k4WWLnb00p1QCxw/Q==} + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.59': + resolution: {integrity: sha512-bMY4tTIwbdZljW+xe/ln1hvs0SRitahQSXfWtvgAtIzgSX9Ar7KqJzU7lRm33YTRFIHLULRi53yNjw9nJGd6uQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -6281,11 +6286,8 @@ packages: '@rolldown/pluginutils@1.0.0-beta.47': resolution: {integrity: sha512-8QagwMH3kNCuzD8EWL8R2YPW5e4OrHNSAHRFDdmFqEwEaD/KcNKjVoumo+gP2vW5eKB2UPbM6vTYiGZX0ixLnw==} - '@rolldown/pluginutils@1.0.0-beta.53': - resolution: {integrity: sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==} - - '@rolldown/pluginutils@1.0.0-beta.58': - resolution: {integrity: sha512-qWhDs6yFGR5xDfdrwiSa3CWGIHxD597uGE/A9xGqytBjANvh4rLCTTkq7szhMV4+Ygh+PMS90KVJ8xWG/TkX4w==} + '@rolldown/pluginutils@1.0.0-beta.59': + resolution: {integrity: sha512-aoh6LAJRyhtazs98ydgpNOYstxUlsOV1KJXcpf/0c0vFcUA8uyd/hwKRhqE/AAPNqAho9RliGsvitCoOzREoVA==} '@rollup/plugin-alias@5.1.1': resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==} @@ -6364,111 +6366,236 @@ packages: cpu: [arm] os: [android] + '@rollup/rollup-android-arm-eabi@4.55.1': + resolution: {integrity: sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==} + cpu: [arm] + os: [android] + '@rollup/rollup-android-arm64@4.54.0': resolution: {integrity: sha512-Skx39Uv+u7H224Af+bDgNinitlmHyQX1K/atIA32JP3JQw6hVODX5tkbi2zof/E69M1qH2UoN3Xdxgs90mmNYw==} cpu: [arm64] os: [android] + '@rollup/rollup-android-arm64@4.55.1': + resolution: {integrity: sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg==} + cpu: [arm64] + os: [android] + '@rollup/rollup-darwin-arm64@4.54.0': resolution: {integrity: sha512-k43D4qta/+6Fq+nCDhhv9yP2HdeKeP56QrUUTW7E6PhZP1US6NDqpJj4MY0jBHlJivVJD5P8NxrjuobZBJTCRw==} cpu: [arm64] os: [darwin] + '@rollup/rollup-darwin-arm64@4.55.1': + resolution: {integrity: sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==} + cpu: [arm64] + os: [darwin] + '@rollup/rollup-darwin-x64@4.54.0': resolution: {integrity: sha512-cOo7biqwkpawslEfox5Vs8/qj83M/aZCSSNIWpVzfU2CYHa2G3P1UN5WF01RdTHSgCkri7XOlTdtk17BezlV3A==} cpu: [x64] os: [darwin] + '@rollup/rollup-darwin-x64@4.55.1': + resolution: {integrity: sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ==} + cpu: [x64] + os: [darwin] + '@rollup/rollup-freebsd-arm64@4.54.0': resolution: {integrity: sha512-miSvuFkmvFbgJ1BevMa4CPCFt5MPGw094knM64W9I0giUIMMmRYcGW/JWZDriaw/k1kOBtsWh1z6nIFV1vPNtA==} cpu: [arm64] os: [freebsd] + '@rollup/rollup-freebsd-arm64@4.55.1': + resolution: {integrity: sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg==} + cpu: [arm64] + os: [freebsd] + '@rollup/rollup-freebsd-x64@4.54.0': resolution: {integrity: sha512-KGXIs55+b/ZfZsq9aR026tmr/+7tq6VG6MsnrvF4H8VhwflTIuYh+LFUlIsRdQSgrgmtM3fVATzEAj4hBQlaqQ==} cpu: [x64] os: [freebsd] + '@rollup/rollup-freebsd-x64@4.55.1': + resolution: {integrity: sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw==} + cpu: [x64] + os: [freebsd] + '@rollup/rollup-linux-arm-gnueabihf@4.54.0': resolution: {integrity: sha512-EHMUcDwhtdRGlXZsGSIuXSYwD5kOT9NVnx9sqzYiwAc91wfYOE1g1djOEDseZJKKqtHAHGwnGPQu3kytmfaXLQ==} cpu: [arm] os: [linux] + '@rollup/rollup-linux-arm-gnueabihf@4.55.1': + resolution: {integrity: sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ==} + cpu: [arm] + os: [linux] + '@rollup/rollup-linux-arm-musleabihf@4.54.0': resolution: {integrity: sha512-+pBrqEjaakN2ySv5RVrj/qLytYhPKEUwk+e3SFU5jTLHIcAtqh2rLrd/OkbNuHJpsBgxsD8ccJt5ga/SeG0JmA==} cpu: [arm] os: [linux] + '@rollup/rollup-linux-arm-musleabihf@4.55.1': + resolution: {integrity: sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg==} + cpu: [arm] + os: [linux] + '@rollup/rollup-linux-arm64-gnu@4.54.0': resolution: {integrity: sha512-NSqc7rE9wuUaRBsBp5ckQ5CVz5aIRKCwsoa6WMF7G01sX3/qHUw/z4pv+D+ahL1EIKy6Enpcnz1RY8pf7bjwng==} cpu: [arm64] os: [linux] + '@rollup/rollup-linux-arm64-gnu@4.55.1': + resolution: {integrity: sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ==} + cpu: [arm64] + os: [linux] + '@rollup/rollup-linux-arm64-musl@4.54.0': resolution: {integrity: sha512-gr5vDbg3Bakga5kbdpqx81m2n9IX8M6gIMlQQIXiLTNeQW6CucvuInJ91EuCJ/JYvc+rcLLsDFcfAD1K7fMofg==} cpu: [arm64] os: [linux] + '@rollup/rollup-linux-arm64-musl@4.55.1': + resolution: {integrity: sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA==} + cpu: [arm64] + os: [linux] + '@rollup/rollup-linux-loong64-gnu@4.54.0': resolution: {integrity: sha512-gsrtB1NA3ZYj2vq0Rzkylo9ylCtW/PhpLEivlgWe0bpgtX5+9j9EZa0wtZiCjgu6zmSeZWyI/e2YRX1URozpIw==} cpu: [loong64] os: [linux] + '@rollup/rollup-linux-loong64-gnu@4.55.1': + resolution: {integrity: sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-loong64-musl@4.55.1': + resolution: {integrity: sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw==} + cpu: [loong64] + os: [linux] + '@rollup/rollup-linux-ppc64-gnu@4.54.0': resolution: {integrity: sha512-y3qNOfTBStmFNq+t4s7Tmc9hW2ENtPg8FeUD/VShI7rKxNW7O4fFeaYbMsd3tpFlIg1Q8IapFgy7Q9i2BqeBvA==} cpu: [ppc64] os: [linux] + '@rollup/rollup-linux-ppc64-gnu@4.55.1': + resolution: {integrity: sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-ppc64-musl@4.55.1': + resolution: {integrity: sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw==} + cpu: [ppc64] + os: [linux] + '@rollup/rollup-linux-riscv64-gnu@4.54.0': resolution: {integrity: sha512-89sepv7h2lIVPsFma8iwmccN7Yjjtgz0Rj/Ou6fEqg3HDhpCa+Et+YSufy27i6b0Wav69Qv4WBNl3Rs6pwhebQ==} cpu: [riscv64] os: [linux] + '@rollup/rollup-linux-riscv64-gnu@4.55.1': + resolution: {integrity: sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw==} + cpu: [riscv64] + os: [linux] + '@rollup/rollup-linux-riscv64-musl@4.54.0': resolution: {integrity: sha512-ZcU77ieh0M2Q8Ur7D5X7KvK+UxbXeDHwiOt/CPSBTI1fBmeDMivW0dPkdqkT4rOgDjrDDBUed9x4EgraIKoR2A==} cpu: [riscv64] os: [linux] + '@rollup/rollup-linux-riscv64-musl@4.55.1': + resolution: {integrity: sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg==} + cpu: [riscv64] + os: [linux] + '@rollup/rollup-linux-s390x-gnu@4.54.0': resolution: {integrity: sha512-2AdWy5RdDF5+4YfG/YesGDDtbyJlC9LHmL6rZw6FurBJ5n4vFGupsOBGfwMRjBYH7qRQowT8D/U4LoSvVwOhSQ==} cpu: [s390x] os: [linux] + '@rollup/rollup-linux-s390x-gnu@4.55.1': + resolution: {integrity: sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg==} + cpu: [s390x] + os: [linux] + '@rollup/rollup-linux-x64-gnu@4.54.0': resolution: {integrity: sha512-WGt5J8Ij/rvyqpFexxk3ffKqqbLf9AqrTBbWDk7ApGUzaIs6V+s2s84kAxklFwmMF/vBNGrVdYgbblCOFFezMQ==} cpu: [x64] os: [linux] + '@rollup/rollup-linux-x64-gnu@4.55.1': + resolution: {integrity: sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==} + cpu: [x64] + os: [linux] + '@rollup/rollup-linux-x64-musl@4.54.0': resolution: {integrity: sha512-JzQmb38ATzHjxlPHuTH6tE7ojnMKM2kYNzt44LO/jJi8BpceEC8QuXYA908n8r3CNuG/B3BV8VR3Hi1rYtmPiw==} cpu: [x64] os: [linux] + '@rollup/rollup-linux-x64-musl@4.55.1': + resolution: {integrity: sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-openbsd-x64@4.55.1': + resolution: {integrity: sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg==} + cpu: [x64] + os: [openbsd] + '@rollup/rollup-openharmony-arm64@4.54.0': resolution: {integrity: sha512-huT3fd0iC7jigGh7n3q/+lfPcXxBi+om/Rs3yiFxjvSxbSB6aohDFXbWvlspaqjeOh+hx7DDHS+5Es5qRkWkZg==} cpu: [arm64] os: [openharmony] + '@rollup/rollup-openharmony-arm64@4.55.1': + resolution: {integrity: sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw==} + cpu: [arm64] + os: [openharmony] + '@rollup/rollup-win32-arm64-msvc@4.54.0': resolution: {integrity: sha512-c2V0W1bsKIKfbLMBu/WGBz6Yci8nJ/ZJdheE0EwB73N3MvHYKiKGs3mVilX4Gs70eGeDaMqEob25Tw2Gb9Nqyw==} cpu: [arm64] os: [win32] + '@rollup/rollup-win32-arm64-msvc@4.55.1': + resolution: {integrity: sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g==} + cpu: [arm64] + os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.54.0': resolution: {integrity: sha512-woEHgqQqDCkAzrDhvDipnSirm5vxUXtSKDYTVpZG3nUdW/VVB5VdCYA2iReSj/u3yCZzXID4kuKG7OynPnB3WQ==} cpu: [ia32] os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.55.1': + resolution: {integrity: sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==} + cpu: [ia32] + os: [win32] + '@rollup/rollup-win32-x64-gnu@4.54.0': resolution: {integrity: sha512-dzAc53LOuFvHwbCEOS0rPbXp6SIhAf2txMP5p6mGyOXXw5mWY8NGGbPMPrs4P1WItkfApDathBj/NzMLUZ9rtQ==} cpu: [x64] os: [win32] + '@rollup/rollup-win32-x64-gnu@4.55.1': + resolution: {integrity: sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==} + cpu: [x64] + os: [win32] + '@rollup/rollup-win32-x64-msvc@4.54.0': resolution: {integrity: sha512-hYT5d3YNdSh3mbCU1gwQyPgQd3T2ne0A3KG8KSBdav5TiBg6eInVmV+TeR5uHufiIgSFg0XsOWGW5/RhNcSvPg==} cpu: [x64] os: [win32] + '@rollup/rollup-win32-x64-msvc@4.55.1': + resolution: {integrity: sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==} + cpu: [x64] + os: [win32] + '@scalar/core@0.3.14': resolution: {integrity: sha512-Fjgscu148WY1g28VNVZikQxGX8iwronPttIoCf7ayausnVMWX6s6wOZm0D3StNbxqMl2js8FQ/s0GlfCAG6XEg==} engines: {node: '>=20'} @@ -6988,8 +7115,8 @@ packages: '@types/braces@3.0.5': resolution: {integrity: sha512-SQFof9H+LXeWNz8wDe7oN5zu7ket0qwMu5vZubW4GCJ8Kkeh6nBWUz87+KTz/G3Kqsrp0j/W253XJb3KMEeg3w==} - '@types/bun@1.3.3': - resolution: {integrity: sha512-ogrKbJ2X5N0kWLLFKeytG0eHDleBYtngtlbu9cyBKFtNL3cnpDZkNdQj8flVf6WTZUX5ulI9AY1oa7ljhSrp+g==} + '@types/bun@1.3.5': + resolution: {integrity: sha512-RnygCqNrd3srIPEWBd5LFeUYG7plCoH2Yw9WaZGyNmdTEei+gWaHqydbaIRkIkcbXwhBT94q78QljxN0Sk838w==} '@types/canvas-confetti@1.9.0': resolution: {integrity: sha512-aBGj/dULrimR1XDZLtG9JwxX1b4HPRF6CX9Yfwh3NvstZEm1ZL7RBnel4keCPSqs1ANRu1u2Aoz9R+VmtjYuTg==} @@ -7108,8 +7235,8 @@ packages: '@types/node@20.19.27': resolution: {integrity: sha512-N2clP5pJhB2YnZJ3PIHFk5RkygRX5WO/5f0WC08tp0wd+sv0rsJk3MqWn3CbNmT2J505a5336jaQj4ph1AdMug==} - '@types/node@22.19.3': - resolution: {integrity: sha512-1N9SBnWYOJTrNZCdh/yJE+t910Y128BoyY+zBLWhL3r0TYzlTmFdXrPwHL9DyFZmlEXNQQolTZh3KHV31QDhyA==} + '@types/node@22.19.5': + resolution: {integrity: sha512-HfF8+mYcHPcPypui3w3mvzuIErlNOh2OAG+BCeBZCEwyiD5ls2SiCwEyT47OELtf7M3nHxBdu0FsmzdKxkN52Q==} '@types/node@24.10.1': resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==} @@ -7117,6 +7244,9 @@ packages: '@types/node@25.0.3': resolution: {integrity: sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==} + '@types/node@25.0.6': + resolution: {integrity: sha512-NNu0sjyNxpoiW3YuVFfNz7mxSQ+S4X2G28uqg2s+CzoqoQjLPsWSbsFFyztIAqt2vb8kfEAsJNepMGPTxFDx3Q==} + '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -7349,8 +7479,8 @@ packages: '@vitest/utils@4.0.16': resolution: {integrity: sha512-h8z9yYhV3e1LEfaQ3zdypIrnAg/9hguReGZoS7Gl0aBG5xgA410zBqECqmaF/+RkTggRsfnzc1XaAHA6bmUufA==} - '@vscode/sudo-prompt@9.3.1': - resolution: {integrity: sha512-9ORTwwS74VaTn38tNbQhsA5U44zkJfcb0BdTSyyG6frP4e8KMtHuTXYmwefe5dpL8XB1aGSIVTaLjD3BbWb5iA==} + '@vscode/sudo-prompt@9.3.2': + resolution: {integrity: sha512-gcXoCN00METUNFeQOFJ+C9xUI0DKB+0EGMVg7wbVYRHBw2Eq3fKisDZOkRdOz3kqXRKOENMfShPOmypw1/8nOw==} '@vue/compiler-core@3.5.26': resolution: {integrity: sha512-vXyI5GMfuoBCnv5ucIT7jhHKl55Y477yxP6fc4eUswjP8FG3FFVFd41eNDArR+Uk3QKn2Z85NavjaxLxOC19/w==} @@ -7815,8 +7945,8 @@ packages: birpc@0.2.14: resolution: {integrity: sha512-37FHE8rqsYM5JEKCnXFyHpBCzvgHEExwVVTq+nUmloInU7l8ezD1TpOhKpS8oe1DTYFqEK27rFZVKG43oTqXRA==} - birpc@3.0.0: - resolution: {integrity: sha512-by+04pHuxpCEQcucAXqzopqfhyI8TLK5Qg5MST0cB6MP+JhHna9ollrtK9moVh27aq6Q6MEJgebD0cVm//yBkg==} + birpc@4.0.0: + resolution: {integrity: sha512-LShSxJP0KTmd101b6DRyGBj57LZxSDYWKitQNW/mi8GRMvZb078Uf9+pveax1DrVL89vm7mWe+TovdI/UDOuPw==} bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} @@ -7911,9 +8041,6 @@ packages: engines: {node: '>=18'} hasBin: true - bun-types@1.3.3: - resolution: {integrity: sha512-z3Xwlg7j2l9JY27x5Qn3Wlyos8YAp0kKRlrePAOjgjMGS5IG6E7Jnlx736vH9UVI4wUICwwhC9anYL++XeOgTQ==} - bun-types@1.3.5: resolution: {integrity: sha512-inmAYe2PFLs0SUbFOWSVD24sg1jFlMPxOjOSSCYqUgn4Hsc3rDc7dFvfVYjFPNHtov6kgUeulV4SxbuIV/stPw==} @@ -9641,8 +9768,8 @@ packages: resolution: {integrity: sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==} hasBin: true - fastq@1.19.1: - resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + fastq@1.20.1: + resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} @@ -10193,6 +10320,9 @@ packages: hookable@5.5.3: resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + hookable@6.0.1: + resolution: {integrity: sha512-uKGyY8BuzN/a5gvzvA+3FVWo0+wUjgtfSdnmjtrOVwQCZPHpHDH2WRO3VZSOeluYrHoDCiXFffZXs8Dj1ULWtw==} + hosted-git-info@7.0.2: resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} engines: {node: ^16.14.0 || >=18.0.0} @@ -10275,6 +10405,10 @@ packages: resolution: {integrity: sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw==} engines: {node: '>=0.10.0'} + iconv-lite@0.7.2: + resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} + engines: {node: '>=0.10.0'} + ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -10325,8 +10459,8 @@ packages: import-meta-resolve@4.2.0: resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} - import-without-cache@0.2.2: - resolution: {integrity: sha512-4TTuRrZ0jBULXzac3EoX9ZviOs8Wn9iAbNhJEyLhTpAGF9eNmYSruaMMN/Tec/yqaO7H6yS2kALfQDJ5FxfatA==} + import-without-cache@0.2.5: + resolution: {integrity: sha512-B6Lc2s6yApwnD2/pMzFh/d5AVjdsDXjgkeJ766FmFuJELIGHNycKRj+l3A39yZPM4CchqNCB4RITEAYB1KUM6A==} engines: {node: '>=20.19.0'} imurmurhash@0.1.4: @@ -10801,8 +10935,8 @@ packages: resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} engines: {node: '>= 8'} - knip@5.71.0: - resolution: {integrity: sha512-hwgdqEJ+7DNJ5jE8BCPu7b57TY7vUwP6MzWYgCgPpg6iPCee/jKPShDNIlFER2koti4oz5xF88VJbKCb4Wl71g==} + knip@5.80.2: + resolution: {integrity: sha512-Yt7iF8Uzl7pp3mGA6yvum6PZBcbGhjasZYuqIwcIAX1jsIhGRUAK0icP0qrB6FSPBI3BpIeMHl7n9meCLO6ovg==} engines: {node: '>=18.18.0'} hasBin: true peerDependencies: @@ -13493,15 +13627,15 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true - rolldown-plugin-dts@0.18.3: - resolution: {integrity: sha512-rd1LZ0Awwfyn89UndUF/HoFF4oH9a5j+2ZeuKSJYM80vmeN/p0gslYMnHTQHBEXPhUlvAlqGA3tVgXB/1qFNDg==} + rolldown-plugin-dts@0.20.0: + resolution: {integrity: sha512-cLAY1kN2ilTYMfZcFlGWbXnu6Nb+8uwUBsi+Mjbh4uIx7IN8uMOmJ7RxrrRgPsO4H7eSz3E+JwGoL1gyugiyUA==} engines: {node: '>=20.19.0'} peerDependencies: '@ts-macro/tsc': ^0.3.6 '@typescript/native-preview': '>=7.0.0-dev.20250601.1' - rolldown: ^1.0.0-beta.51 + rolldown: ^1.0.0-beta.57 typescript: ^5.0.0 - vue-tsc: ~3.1.0 + vue-tsc: ~3.2.0 peerDependenciesMeta: '@ts-macro/tsc': optional: true @@ -13512,13 +13646,8 @@ packages: vue-tsc: optional: true - rolldown@1.0.0-beta.53: - resolution: {integrity: sha512-Qd9c2p0XKZdgT5AYd+KgAMggJ8ZmCs3JnS9PTMWkyUfteKlfmKtxJbWTHkVakxwXs1Ub7jrRYVeFeF7N0sQxyw==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - - rolldown@1.0.0-beta.58: - resolution: {integrity: sha512-v1FCjMZCan7f+xGAHBi+mqiE4MlH7I+SXEHSQSJoMOGNNB2UYtvMiejsq9YuUOiZjNeUeV/a21nSFbrUR+4ZCQ==} + rolldown@1.0.0-beta.59: + resolution: {integrity: sha512-Slm000Gd8/AO9z4Kxl4r8mp/iakrbAuJ1L+7ddpkNxgQ+Vf37WPvY63l3oeyZcfuPD1DRrUYBsRPIXSOhvOsmw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -13540,6 +13669,11 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rollup@4.55.1: + resolution: {integrity: sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + rou3@0.7.10: resolution: {integrity: sha512-aoFj6f7MJZ5muJ+Of79nrhs9N3oLGqi2VEMe94Zbkjb6Wupha46EuoYgpWSOZlXww3bbd8ojgXTAA2mzimX5Ww==} @@ -13586,6 +13720,10 @@ packages: sax@1.4.3: resolution: {integrity: sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==} + sax@1.4.4: + resolution: {integrity: sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==} + engines: {node: '>=11.0.0'} + scheduler@0.26.0: resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} @@ -13813,6 +13951,10 @@ packages: resolution: {integrity: sha512-QlaZEqcAH3/RtNyet1IPIYPsEWAaYyXXv1Krsi+1L/QHppjX4Ifm8MQsBISz9vE8cHicIq3clogsheili5vhaQ==} engines: {node: '>= 18'} + smol-toml@1.6.0: + resolution: {integrity: sha512-4zemZi0HvTnYwLfrpk/CF9LOd9Lt87kAt50GnqhMpyF9U3poDAP2+iukq2bZsO/ufegbYehBkqINbsWxj4l4cw==} + engines: {node: '>= 18'} + solid-js@1.9.9: resolution: {integrity: sha512-A0ZBPJQldAeGCTW0YRYJmt7RCeh5rbFfPZ2aOttgYnctHE7HgKeHCBB/PVc2P7eOfmNXqMFFFoYYdm3S4dcbkA==} @@ -14323,13 +14465,13 @@ packages: ts-morph@27.0.2: resolution: {integrity: sha512-fhUhgeljcrdZ+9DZND1De1029PrE+cMkIP7ooqkLRTrRLTqcki2AstsyJm0vRNbTbVCNJ0idGlbBrfqc7/nA8w==} - tsdown@0.17.2: - resolution: {integrity: sha512-SuU+0CWm/95KfXqojHTVuwcouIsdn7HpYcwDyOdKktJi285NxKwysjFUaxYLxpCNqqPvcFvokXLO4dZThRwzkw==} + tsdown@0.19.0: + resolution: {integrity: sha512-uqg8yzlS7GemFWcM6aCp/sptF4bJiJbWUibuHTRLLCBEsGCgJxuqxPhuVTqyHXqoEkh9ohwAdlyDKli5MEWCyQ==} engines: {node: '>=20.19.0'} hasBin: true peerDependencies: '@arethetypeswrong/core': ^0.18.1 - '@vitejs/devtools': ^0.0.0-alpha.19 + '@vitejs/devtools': '*' publint: ^0.3.0 typescript: ^5.0.0 unplugin-lightningcss: ^0.4.0 @@ -14359,41 +14501,41 @@ packages: tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} - turbo-darwin-64@2.6.3: - resolution: {integrity: sha512-BlJJDc1CQ7SK5Y5qnl7AzpkvKSnpkfPmnA+HeU/sgny3oHZckPV2776ebO2M33CYDSor7+8HQwaodY++IINhYg==} + turbo-darwin-64@2.7.4: + resolution: {integrity: sha512-xDR30ltfkSsRfGzABBckvl1nz1cZ3ssTujvdj+TPwOweeDRvZ0e06t5DS0rmRBvyKpgGs42K/EK6Mn2qLlFY9A==} cpu: [x64] os: [darwin] - turbo-darwin-arm64@2.6.3: - resolution: {integrity: sha512-MwVt7rBKiOK7zdYerenfCRTypefw4kZCue35IJga9CH1+S50+KTiCkT6LBqo0hHeoH2iKuI0ldTF2a0aB72z3w==} + turbo-darwin-arm64@2.7.4: + resolution: {integrity: sha512-P7sjqXtOL/+nYWPvcDGWhi8wf8M8mZHHB8XEzw2VX7VJrS8IGHyJHGD1AYfDvhAEcr7pnk3gGifz3/xyhI655w==} cpu: [arm64] os: [darwin] - turbo-linux-64@2.6.3: - resolution: {integrity: sha512-cqpcw+dXxbnPtNnzeeSyWprjmuFVpHJqKcs7Jym5oXlu/ZcovEASUIUZVN3OGEM6Y/OTyyw0z09tOHNt5yBAVg==} + turbo-linux-64@2.7.4: + resolution: {integrity: sha512-GofFOxRO/IhG8BcPyMSSB3Y2+oKQotsaYbHxL9yD6JPb20/o35eo+zUSyazOtilAwDHnak5dorAJFoFU8MIg2A==} cpu: [x64] os: [linux] - turbo-linux-arm64@2.6.3: - resolution: {integrity: sha512-MterpZQmjXyr4uM7zOgFSFL3oRdNKeflY7nsjxJb2TklsYqiu3Z9pQ4zRVFFH8n0mLGna7MbQMZuKoWqqHb45w==} + turbo-linux-arm64@2.7.4: + resolution: {integrity: sha512-+RQKgNjksVPxYAyAgmDV7w/1qj++qca+nSNTAOKGOfJiDtSvRKoci89oftJ6anGs00uamLKVEQ712TI/tfNAIw==} cpu: [arm64] os: [linux] turbo-stream@2.4.1: resolution: {integrity: sha512-v8kOJXpG3WoTN/+at8vK7erSzo6nW6CIaeOvNOkHQVDajfz1ZVeSxCbc6tOH4hrGZW7VUCV0TOXd8CPzYnYkrw==} - turbo-windows-64@2.6.3: - resolution: {integrity: sha512-biDU70v9dLwnBdLf+daoDlNJVvqOOP8YEjqNipBHzgclbQlXbsi6Gqqelp5er81Qo3BiRgmTNx79oaZQTPb07Q==} + turbo-windows-64@2.7.4: + resolution: {integrity: sha512-rfak1+g+ON3czs1mDYsCS4X74ZmK6gOgRQTXjDICtzvR4o61paqtgAYtNPofcVsMWeF4wvCajSeoAkkeAnQ1kg==} cpu: [x64] os: [win32] - turbo-windows-arm64@2.6.3: - resolution: {integrity: sha512-dDHVKpSeukah3VsI/xMEKeTnV9V9cjlpFSUs4bmsUiLu3Yv2ENlgVEZv65wxbeE0bh0jjpmElDT+P1KaCxArQQ==} + turbo-windows-arm64@2.7.4: + resolution: {integrity: sha512-1ZgBNjNRbDu/fPeqXuX9i26x3CJ/Y1gcwUpQ+Vp7kN9Un6RZ9kzs164f/knrjcu5E+szCRexVjRSJay1k5jApA==} cpu: [arm64] os: [win32] - turbo@2.6.3: - resolution: {integrity: sha512-bf6YKUv11l5Xfcmg76PyWoy/e2vbkkxFNBGJSnfdSXQC33ZiUfutYh6IXidc5MhsnrFkWfdNNLyaRk+kHMLlwA==} + turbo@2.7.4: + resolution: {integrity: sha512-bkO4AddmDishzJB2ze7aYYPaejMoJVfS0XnaR6RCdXFOY8JGJfQE+l9fKiV7uDPa5Ut44gmOWJL3894CIMeH9g==} hasBin: true tw-animate-css@1.3.8: @@ -14607,8 +14749,8 @@ packages: resolution: {integrity: sha512-lkaSIlxceytPyt9yfb1h7L9jDFqwMqvUZeGsKB7Z8QrvAO3xZv2S+xMQQYzxk0AGJHcQhbcvhKEstrMy99jnuQ==} engines: {node: '>=18.12.0'} - unrun@0.2.19: - resolution: {integrity: sha512-DbwbJ9BvPEb3BeZnIpP9S5tGLO/JIgPQ3JrpMRFIfZMZfMG19f26OlLbC2ml8RRdrI2ZA7z2t+at5tsIHbh6Qw==} + unrun@0.2.24: + resolution: {integrity: sha512-xa4/O5q2jmI6EqxweJ+sOy5cyORZWcsgmi8pmABVSUyg24Fh44qJrneUHavZEMsbJbghHYWKSraFy5hDCb/m4w==} engines: {node: '>=20.19.0'} hasBin: true peerDependencies: @@ -14905,6 +15047,46 @@ packages: yaml: optional: true + vite@7.3.1: + resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + vitefu@1.1.1: resolution: {integrity: sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==} peerDependencies: @@ -15327,6 +15509,9 @@ packages: zod@4.3.4: resolution: {integrity: sha512-Zw/uYiiyF6pUT1qmKbZziChgNPRu+ZRneAsMUDU6IwmXdWt5JwcUfy2bvLOCUtz5UniaN/Zx5aFttZYbYc7O/A==} + zod@4.3.5: + resolution: {integrity: sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==} + zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} @@ -16522,39 +16707,39 @@ snapshots: '@better-fetch/fetch@1.1.21': {} - '@biomejs/biome@2.3.8': + '@biomejs/biome@2.3.11': optionalDependencies: - '@biomejs/cli-darwin-arm64': 2.3.8 - '@biomejs/cli-darwin-x64': 2.3.8 - '@biomejs/cli-linux-arm64': 2.3.8 - '@biomejs/cli-linux-arm64-musl': 2.3.8 - '@biomejs/cli-linux-x64': 2.3.8 - '@biomejs/cli-linux-x64-musl': 2.3.8 - '@biomejs/cli-win32-arm64': 2.3.8 - '@biomejs/cli-win32-x64': 2.3.8 + '@biomejs/cli-darwin-arm64': 2.3.11 + '@biomejs/cli-darwin-x64': 2.3.11 + '@biomejs/cli-linux-arm64': 2.3.11 + '@biomejs/cli-linux-arm64-musl': 2.3.11 + '@biomejs/cli-linux-x64': 2.3.11 + '@biomejs/cli-linux-x64-musl': 2.3.11 + '@biomejs/cli-win32-arm64': 2.3.11 + '@biomejs/cli-win32-x64': 2.3.11 - '@biomejs/cli-darwin-arm64@2.3.8': + '@biomejs/cli-darwin-arm64@2.3.11': optional: true - '@biomejs/cli-darwin-x64@2.3.8': + '@biomejs/cli-darwin-x64@2.3.11': optional: true - '@biomejs/cli-linux-arm64-musl@2.3.8': + '@biomejs/cli-linux-arm64-musl@2.3.11': optional: true - '@biomejs/cli-linux-arm64@2.3.8': + '@biomejs/cli-linux-arm64@2.3.11': optional: true - '@biomejs/cli-linux-x64-musl@2.3.8': + '@biomejs/cli-linux-x64-musl@2.3.11': optional: true - '@biomejs/cli-linux-x64@2.3.8': + '@biomejs/cli-linux-x64@2.3.11': optional: true - '@biomejs/cli-win32-arm64@2.3.8': + '@biomejs/cli-win32-arm64@2.3.11': optional: true - '@biomejs/cli-win32-x64@2.3.8': + '@biomejs/cli-win32-x64@2.3.11': optional: true '@braidai/lang@1.1.2': {} @@ -16595,7 +16780,7 @@ snapshots: optionalDependencies: workerd: 1.20250829.0 - '@cloudflare/vitest-pool-workers@0.8.69(@cloudflare/workers-types@4.20260103.0)(@vitest/runner@4.0.16)(@vitest/snapshot@4.0.16)(vitest@4.0.16(@opentelemetry/api@1.9.0)(@types/node@25.0.3)(happy-dom@20.0.11)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(msw@2.12.7(@types/node@25.0.3)(typescript@5.9.3))(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': + '@cloudflare/vitest-pool-workers@0.8.69(@cloudflare/workers-types@4.20260103.0)(@vitest/runner@4.0.16)(@vitest/snapshot@4.0.16)(vitest@4.0.16(@opentelemetry/api@1.9.0)(@types/node@25.0.6)(happy-dom@20.0.11)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(msw@2.12.7(@types/node@25.0.6)(typescript@5.9.3))(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@vitest/runner': 4.0.16 '@vitest/snapshot': 4.0.16 @@ -16604,7 +16789,7 @@ snapshots: devalue: 5.6.1 miniflare: 4.20250829.0 semver: 7.7.3 - vitest: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@25.0.3)(happy-dom@20.0.11)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(msw@2.12.7(@types/node@25.0.3)(typescript@5.9.3))(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@25.0.6)(happy-dom@20.0.11)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(msw@2.12.7(@types/node@25.0.6)(typescript@5.9.3))(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) wrangler: 4.33.2(@cloudflare/workers-types@4.20260103.0) zod: 3.25.76 transitivePeerDependencies: @@ -16894,7 +17079,7 @@ snapshots: '@electric-sql/pglite@0.3.2': optional: true - '@emnapi/core@1.7.1': + '@emnapi/core@1.8.1': dependencies: '@emnapi/wasi-threads': 1.1.0 tslib: 2.8.1 @@ -16905,6 +17090,11 @@ snapshots: tslib: 2.8.1 optional: true + '@emnapi/runtime@1.8.1': + dependencies: + tslib: 2.8.1 + optional: true + '@emnapi/wasi-threads@1.1.0': dependencies: tslib: 2.8.1 @@ -18012,58 +18202,31 @@ snapshots: '@inquirer/ansi@1.0.2': {} - '@inquirer/confirm@5.1.21(@types/node@24.10.1)': + '@inquirer/confirm@5.1.21(@types/node@25.0.6)': dependencies: - '@inquirer/core': 10.3.2(@types/node@24.10.1) - '@inquirer/type': 3.0.10(@types/node@24.10.1) + '@inquirer/core': 10.3.2(@types/node@25.0.6) + '@inquirer/type': 3.0.10(@types/node@25.0.6) optionalDependencies: - '@types/node': 24.10.1 - optional: true + '@types/node': 25.0.6 - '@inquirer/confirm@5.1.21(@types/node@25.0.3)': - dependencies: - '@inquirer/core': 10.3.2(@types/node@25.0.3) - '@inquirer/type': 3.0.10(@types/node@25.0.3) - optionalDependencies: - '@types/node': 25.0.3 - - '@inquirer/core@10.3.2(@types/node@24.10.1)': + '@inquirer/core@10.3.2(@types/node@25.0.6)': dependencies: '@inquirer/ansi': 1.0.2 '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@24.10.1) + '@inquirer/type': 3.0.10(@types/node@25.0.6) cli-width: 4.1.0 mute-stream: 2.0.0 signal-exit: 4.1.0 wrap-ansi: 6.2.0 yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.10.1 - optional: true - - '@inquirer/core@10.3.2(@types/node@25.0.3)': - dependencies: - '@inquirer/ansi': 1.0.2 - '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@25.0.3) - cli-width: 4.1.0 - mute-stream: 2.0.0 - signal-exit: 4.1.0 - wrap-ansi: 6.2.0 - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 25.0.3 + '@types/node': 25.0.6 '@inquirer/figures@1.0.15': {} - '@inquirer/type@3.0.10(@types/node@24.10.1)': + '@inquirer/type@3.0.10(@types/node@25.0.6)': optionalDependencies: - '@types/node': 24.10.1 - optional: true - - '@inquirer/type@3.0.10(@types/node@25.0.3)': - optionalDependencies: - '@types/node': 25.0.3 + '@types/node': 25.0.6 '@ioredis/commands@1.3.0': {} @@ -18106,14 +18269,14 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 24.10.1 + '@types/node': 25.0.6 jest-mock: 29.7.0 '@jest/fake-timers@29.7.0': dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 24.10.1 + '@types/node': 25.0.6 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -18147,7 +18310,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 24.10.1 + '@types/node': 25.0.6 '@types/yargs': 17.0.33 chalk: 4.1.2 @@ -18411,8 +18574,8 @@ snapshots: '@napi-rs/wasm-runtime@1.1.1': dependencies: - '@emnapi/core': 1.7.1 - '@emnapi/runtime': 1.7.1 + '@emnapi/core': 1.8.1 + '@emnapi/runtime': 1.8.1 '@tybys/wasm-util': 0.10.1 optional: true @@ -18590,7 +18753,7 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.19.1 + fastq: 1.20.1 '@npmcli/config@8.3.4': dependencies: @@ -18760,10 +18923,7 @@ snapshots: '@orama/orama': 3.1.18 lodash: 4.17.21 - '@oxc-project/types@0.101.0': {} - - '@oxc-project/types@0.106.0': - optional: true + '@oxc-project/types@0.107.0': {} '@oxc-resolver/binding-android-arm-eabi@11.16.2': optional: true @@ -18830,33 +18990,63 @@ snapshots: '@parcel/watcher-android-arm64@2.5.1': optional: true + '@parcel/watcher-android-arm64@2.5.4': + optional: true + '@parcel/watcher-darwin-arm64@2.5.1': optional: true + '@parcel/watcher-darwin-arm64@2.5.4': + optional: true + '@parcel/watcher-darwin-x64@2.5.1': optional: true + '@parcel/watcher-darwin-x64@2.5.4': + optional: true + '@parcel/watcher-freebsd-x64@2.5.1': optional: true + '@parcel/watcher-freebsd-x64@2.5.4': + optional: true + '@parcel/watcher-linux-arm-glibc@2.5.1': optional: true + '@parcel/watcher-linux-arm-glibc@2.5.4': + optional: true + '@parcel/watcher-linux-arm-musl@2.5.1': optional: true + '@parcel/watcher-linux-arm-musl@2.5.4': + optional: true + '@parcel/watcher-linux-arm64-glibc@2.5.1': optional: true + '@parcel/watcher-linux-arm64-glibc@2.5.4': + optional: true + '@parcel/watcher-linux-arm64-musl@2.5.1': optional: true + '@parcel/watcher-linux-arm64-musl@2.5.4': + optional: true + '@parcel/watcher-linux-x64-glibc@2.5.1': optional: true + '@parcel/watcher-linux-x64-glibc@2.5.4': + optional: true + '@parcel/watcher-linux-x64-musl@2.5.1': optional: true + '@parcel/watcher-linux-x64-musl@2.5.4': + optional: true + '@parcel/watcher-wasm@2.3.0': dependencies: is-glob: 4.0.3 @@ -18870,12 +19060,21 @@ snapshots: '@parcel/watcher-win32-arm64@2.5.1': optional: true + '@parcel/watcher-win32-arm64@2.5.4': + optional: true + '@parcel/watcher-win32-ia32@2.5.1': optional: true + '@parcel/watcher-win32-ia32@2.5.4': + optional: true + '@parcel/watcher-win32-x64@2.5.1': optional: true + '@parcel/watcher-win32-x64@2.5.4': + optional: true + '@parcel/watcher@2.5.1': dependencies: detect-libc: 1.0.3 @@ -18897,6 +19096,28 @@ snapshots: '@parcel/watcher-win32-ia32': 2.5.1 '@parcel/watcher-win32-x64': 2.5.1 + '@parcel/watcher@2.5.4': + dependencies: + detect-libc: 2.1.2 + is-glob: 4.0.3 + node-addon-api: 7.1.1 + picomatch: 4.0.3 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.5.4 + '@parcel/watcher-darwin-arm64': 2.5.4 + '@parcel/watcher-darwin-x64': 2.5.4 + '@parcel/watcher-freebsd-x64': 2.5.4 + '@parcel/watcher-linux-arm-glibc': 2.5.4 + '@parcel/watcher-linux-arm-musl': 2.5.4 + '@parcel/watcher-linux-arm64-glibc': 2.5.4 + '@parcel/watcher-linux-arm64-musl': 2.5.4 + '@parcel/watcher-linux-x64-glibc': 2.5.4 + '@parcel/watcher-linux-x64-musl': 2.5.4 + '@parcel/watcher-win32-arm64': 2.5.4 + '@parcel/watcher-win32-ia32': 2.5.4 + '@parcel/watcher-win32-x64': 2.5.4 + optional: true + '@peculiar/asn1-android@2.3.16': dependencies: '@peculiar/asn1-schema': 2.3.15 @@ -20032,7 +20253,7 @@ snapshots: '@react-native-community/cli-tools@20.0.2': dependencies: - '@vscode/sudo-prompt': 9.3.1 + '@vscode/sudo-prompt': 9.3.2 appdirsjs: 1.2.7 chalk: 4.1.2 execa: 5.1.1 @@ -20328,9 +20549,7 @@ snapshots: metro-runtime: 0.83.3 transitivePeerDependencies: - '@babel/core' - - bufferutil - supports-color - - utf-8-validate optional: true '@react-native/normalize-colors@0.74.89': {} @@ -20586,96 +20805,52 @@ snapshots: react-native: 0.81.5(@babel/core@7.28.5)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.5))(@types/react@19.2.7)(react@19.2.3) react-native-web: 0.21.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@rolldown/binding-android-arm64@1.0.0-beta.53': + '@rolldown/binding-android-arm64@1.0.0-beta.59': optional: true - '@rolldown/binding-android-arm64@1.0.0-beta.58': + '@rolldown/binding-darwin-arm64@1.0.0-beta.59': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-beta.53': + '@rolldown/binding-darwin-x64@1.0.0-beta.59': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-beta.58': + '@rolldown/binding-freebsd-x64@1.0.0-beta.59': optional: true - '@rolldown/binding-darwin-x64@1.0.0-beta.53': + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.59': optional: true - '@rolldown/binding-darwin-x64@1.0.0-beta.58': + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.59': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-beta.53': + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.59': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-beta.58': + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.59': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.53': + '@rolldown/binding-linux-x64-musl@1.0.0-beta.59': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.58': + '@rolldown/binding-openharmony-arm64@1.0.0-beta.59': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.53': - optional: true - - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.58': - optional: true - - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.53': - optional: true - - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.58': - optional: true - - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.53': - optional: true - - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.58': - optional: true - - '@rolldown/binding-linux-x64-musl@1.0.0-beta.53': - optional: true - - '@rolldown/binding-linux-x64-musl@1.0.0-beta.58': - optional: true - - '@rolldown/binding-openharmony-arm64@1.0.0-beta.53': - optional: true - - '@rolldown/binding-openharmony-arm64@1.0.0-beta.58': - optional: true - - '@rolldown/binding-wasm32-wasi@1.0.0-beta.53': + '@rolldown/binding-wasm32-wasi@1.0.0-beta.59': dependencies: '@napi-rs/wasm-runtime': 1.1.1 optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-beta.58': - dependencies: - '@napi-rs/wasm-runtime': 1.1.1 + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.59': optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.53': - optional: true - - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.58': - optional: true - - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.53': - optional: true - - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.58': + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.59': optional: true '@rolldown/pluginutils@1.0.0-beta.40': {} '@rolldown/pluginutils@1.0.0-beta.47': {} - '@rolldown/pluginutils@1.0.0-beta.53': {} - - '@rolldown/pluginutils@1.0.0-beta.58': - optional: true + '@rolldown/pluginutils@1.0.0-beta.59': {} '@rollup/plugin-alias@5.1.1(rollup@4.54.0)': optionalDependencies: @@ -20743,69 +20918,144 @@ snapshots: '@rollup/rollup-android-arm-eabi@4.54.0': optional: true + '@rollup/rollup-android-arm-eabi@4.55.1': + optional: true + '@rollup/rollup-android-arm64@4.54.0': optional: true + '@rollup/rollup-android-arm64@4.55.1': + optional: true + '@rollup/rollup-darwin-arm64@4.54.0': optional: true + '@rollup/rollup-darwin-arm64@4.55.1': + optional: true + '@rollup/rollup-darwin-x64@4.54.0': optional: true + '@rollup/rollup-darwin-x64@4.55.1': + optional: true + '@rollup/rollup-freebsd-arm64@4.54.0': optional: true + '@rollup/rollup-freebsd-arm64@4.55.1': + optional: true + '@rollup/rollup-freebsd-x64@4.54.0': optional: true + '@rollup/rollup-freebsd-x64@4.55.1': + optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.54.0': optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.55.1': + optional: true + '@rollup/rollup-linux-arm-musleabihf@4.54.0': optional: true + '@rollup/rollup-linux-arm-musleabihf@4.55.1': + optional: true + '@rollup/rollup-linux-arm64-gnu@4.54.0': optional: true + '@rollup/rollup-linux-arm64-gnu@4.55.1': + optional: true + '@rollup/rollup-linux-arm64-musl@4.54.0': optional: true + '@rollup/rollup-linux-arm64-musl@4.55.1': + optional: true + '@rollup/rollup-linux-loong64-gnu@4.54.0': optional: true + '@rollup/rollup-linux-loong64-gnu@4.55.1': + optional: true + + '@rollup/rollup-linux-loong64-musl@4.55.1': + optional: true + '@rollup/rollup-linux-ppc64-gnu@4.54.0': optional: true + '@rollup/rollup-linux-ppc64-gnu@4.55.1': + optional: true + + '@rollup/rollup-linux-ppc64-musl@4.55.1': + optional: true + '@rollup/rollup-linux-riscv64-gnu@4.54.0': optional: true + '@rollup/rollup-linux-riscv64-gnu@4.55.1': + optional: true + '@rollup/rollup-linux-riscv64-musl@4.54.0': optional: true + '@rollup/rollup-linux-riscv64-musl@4.55.1': + optional: true + '@rollup/rollup-linux-s390x-gnu@4.54.0': optional: true + '@rollup/rollup-linux-s390x-gnu@4.55.1': + optional: true + '@rollup/rollup-linux-x64-gnu@4.54.0': optional: true + '@rollup/rollup-linux-x64-gnu@4.55.1': + optional: true + '@rollup/rollup-linux-x64-musl@4.54.0': optional: true + '@rollup/rollup-linux-x64-musl@4.55.1': + optional: true + + '@rollup/rollup-openbsd-x64@4.55.1': + optional: true + '@rollup/rollup-openharmony-arm64@4.54.0': optional: true + '@rollup/rollup-openharmony-arm64@4.55.1': + optional: true + '@rollup/rollup-win32-arm64-msvc@4.54.0': optional: true + '@rollup/rollup-win32-arm64-msvc@4.55.1': + optional: true + '@rollup/rollup-win32-ia32-msvc@4.54.0': optional: true + '@rollup/rollup-win32-ia32-msvc@4.55.1': + optional: true + '@rollup/rollup-win32-x64-gnu@4.54.0': optional: true + '@rollup/rollup-win32-x64-gnu@4.55.1': + optional: true + '@rollup/rollup-win32-x64-msvc@4.54.0': optional: true + '@rollup/rollup-win32-x64-msvc@4.55.1': + optional: true + '@scalar/core@0.3.14': dependencies: '@scalar/types': 0.2.13 @@ -20959,11 +21209,11 @@ snapshots: dependencies: solid-js: 1.9.9 - '@solidjs/start@1.1.7(solid-js@1.9.9)(vinxi@0.5.8(931b65613734baa15c1aafc78ec19b78))(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': + '@solidjs/start@1.1.7(solid-js@1.9.9)(vinxi@0.5.8(0332b19681288fa24f523fbd4fb9232e))(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: - '@tanstack/server-functions-plugin': 1.121.21(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) - '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.8(931b65613734baa15c1aafc78ec19b78)) - '@vinxi/server-components': 0.5.1(vinxi@0.5.8(931b65613734baa15c1aafc78ec19b78)) + '@tanstack/server-functions-plugin': 1.121.21(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.8(0332b19681288fa24f523fbd4fb9232e)) + '@vinxi/server-components': 0.5.1(vinxi@0.5.8(0332b19681288fa24f523fbd4fb9232e)) defu: 6.1.4 error-stack-parser: 2.1.4 html-to-image: 1.11.13 @@ -20974,8 +21224,8 @@ snapshots: source-map-js: 1.2.1 terracotta: 1.0.6(solid-js@1.9.9) tinyglobby: 0.2.15 - vinxi: 0.5.8(931b65613734baa15c1aafc78ec19b78) - vite-plugin-solid: 2.11.8(solid-js@1.9.9)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + vinxi: 0.5.8(0332b19681288fa24f523fbd4fb9232e) + vite-plugin-solid: 2.11.8(solid-js@1.9.9)(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) transitivePeerDependencies: - '@testing-library/jest-dom' - solid-js @@ -20992,11 +21242,11 @@ snapshots: dependencies: acorn: 8.15.0 - '@sveltejs/kit@2.49.2(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': + '@sveltejs/kit@2.49.2(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.1)(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.46.1)(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@standard-schema/spec': 1.1.0 '@sveltejs/acorn-typescript': 1.0.8(acorn@8.15.0) - '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.46.1)(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) '@types/cookie': 0.6.0 acorn: 8.15.0 cookie: 0.6.0 @@ -21009,26 +21259,26 @@ snapshots: set-cookie-parser: 2.7.2 sirv: 3.0.2 svelte: 5.46.1 - vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) optionalDependencies: '@opentelemetry/api': 1.9.0 - '@sveltejs/vite-plugin-svelte-inspector@5.0.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': + '@sveltejs/vite-plugin-svelte-inspector@5.0.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.1)(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.46.1)(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: - '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.46.1)(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) obug: 2.1.1 svelte: 5.46.1 - vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) - '@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': + '@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.1)(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 5.0.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + '@sveltejs/vite-plugin-svelte-inspector': 5.0.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.1)(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.46.1)(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) debug: 4.4.3 deepmerge: 4.3.1 magic-string: 0.30.21 svelte: 5.46.1 - vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) - vitefu: 1.1.1(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + vite: 7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + vitefu: 1.1.1(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) transitivePeerDependencies: - supports-color @@ -21157,14 +21407,14 @@ snapshots: postcss: 8.5.6 tailwindcss: 4.1.18 - '@tailwindcss/vite@4.1.18(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': + '@tailwindcss/vite@4.1.18(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@tailwindcss/node': 4.1.18 '@tailwindcss/oxide': 4.1.18 tailwindcss: 4.1.18 - vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) - '@tanstack/directive-functions-plugin@1.121.21(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': + '@tanstack/directive-functions-plugin@1.121.21(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@babel/code-frame': 7.26.2 '@babel/core': 7.28.5 @@ -21173,7 +21423,7 @@ snapshots: '@tanstack/router-utils': 1.139.0 babel-dead-code-elimination: 1.0.10 tiny-invariant: 1.3.3 - vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color @@ -21358,7 +21608,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/server-functions-plugin@1.121.21(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': + '@tanstack/server-functions-plugin@1.121.21(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@babel/code-frame': 7.26.2 '@babel/core': 7.28.5 @@ -21367,7 +21617,7 @@ snapshots: '@babel/template': 7.27.2 '@babel/traverse': 7.28.5 '@babel/types': 7.28.5 - '@tanstack/directive-functions-plugin': 1.121.21(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + '@tanstack/directive-functions-plugin': 1.121.21(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) babel-dead-code-elimination: 1.0.10 tiny-invariant: 1.3.3 transitivePeerDependencies: @@ -21495,9 +21745,9 @@ snapshots: '@types/braces@3.0.5': {} - '@types/bun@1.3.3': + '@types/bun@1.3.5': dependencies: - bun-types: 1.3.3 + bun-types: 1.3.5 '@types/canvas-confetti@1.9.0': {} @@ -21508,7 +21758,7 @@ snapshots: '@types/concat-stream@2.0.3': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.0.6 '@types/connect@3.4.38': dependencies: @@ -21554,7 +21804,7 @@ snapshots: '@types/express-serve-static-core@5.1.0': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.0.6 '@types/qs': 6.14.0 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 @@ -21567,7 +21817,7 @@ snapshots: '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.0.6 '@types/hammerjs@2.0.46': {} @@ -21615,14 +21865,14 @@ snapshots: '@types/node-fetch@2.6.13': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.0.6 form-data: 4.0.4 '@types/node@20.19.27': dependencies: undici-types: 6.21.0 - '@types/node@22.19.3': + '@types/node@22.19.5': dependencies: undici-types: 6.21.0 @@ -21635,6 +21885,10 @@ snapshots: undici-types: 7.16.0 optional: true + '@types/node@25.0.6': + dependencies: + undici-types: 7.16.0 + '@types/normalize-package-data@2.4.4': {} '@types/pg@8.16.0': @@ -21675,16 +21929,16 @@ snapshots: '@types/send@0.17.6': dependencies: '@types/mime': 1.3.5 - '@types/node': 24.10.1 + '@types/node': 25.0.6 '@types/send@1.2.1': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.0.6 '@types/serve-static@1.15.10': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 24.10.1 + '@types/node': 25.0.6 '@types/send': 0.17.6 '@types/stack-utils@2.0.3': {} @@ -21717,7 +21971,7 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.0.6 '@types/yargs-parser@21.0.3': {} @@ -21727,7 +21981,7 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 24.10.1 + '@types/node': 25.0.6 optional: true '@typescript-eslint/project-service@8.40.0(typescript@5.9.3)': @@ -21788,10 +22042,10 @@ snapshots: '@urql/core': 5.2.0(graphql@16.12.0) wonka: 6.3.5 - '@vercel/analytics@1.5.0(@remix-run/react@2.17.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3))(@sveltejs/kit@2.49.2(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(next@16.1.1(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.57.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.1))(react@19.2.3)(svelte@5.46.1)(vue-router@4.6.4(vue@3.5.26(typescript@5.9.3)))(vue@3.5.26(typescript@5.9.3))': + '@vercel/analytics@1.5.0(@remix-run/react@2.17.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3))(@sveltejs/kit@2.49.2(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.1)(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.46.1)(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(next@16.1.1(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.57.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.1))(react@19.2.3)(svelte@5.46.1)(vue-router@4.6.4(vue@3.5.26(typescript@5.9.3)))(vue@3.5.26(typescript@5.9.3))': optionalDependencies: '@remix-run/react': 2.17.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3) - '@sveltejs/kit': 2.49.2(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + '@sveltejs/kit': 2.49.2(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.1)(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.46.1)(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) next: 16.1.1(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.57.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.1) react: 19.2.3 svelte: 5.46.1 @@ -21844,7 +22098,7 @@ snapshots: untun: 0.1.3 uqr: 0.1.2 - '@vinxi/plugin-directives@0.5.1(vinxi@0.5.8(931b65613734baa15c1aafc78ec19b78))': + '@vinxi/plugin-directives@0.5.1(vinxi@0.5.8(0332b19681288fa24f523fbd4fb9232e))': dependencies: '@babel/parser': 7.28.5 acorn: 8.15.0 @@ -21855,28 +22109,28 @@ snapshots: magicast: 0.2.11 recast: 0.23.11 tslib: 2.8.1 - vinxi: 0.5.8(931b65613734baa15c1aafc78ec19b78) + vinxi: 0.5.8(0332b19681288fa24f523fbd4fb9232e) - '@vinxi/server-components@0.5.1(vinxi@0.5.8(931b65613734baa15c1aafc78ec19b78))': + '@vinxi/server-components@0.5.1(vinxi@0.5.8(0332b19681288fa24f523fbd4fb9232e))': dependencies: - '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.8(931b65613734baa15c1aafc78ec19b78)) + '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.8(0332b19681288fa24f523fbd4fb9232e)) acorn: 8.15.0 acorn-loose: 8.5.2 acorn-typescript: 1.4.13(acorn@8.15.0) astring: 1.9.0 magicast: 0.2.11 recast: 0.23.11 - vinxi: 0.5.8(931b65613734baa15c1aafc78ec19b78) + vinxi: 0.5.8(0332b19681288fa24f523fbd4fb9232e) - '@vitejs/plugin-react-swc@4.2.2(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': + '@vitejs/plugin-react-swc@4.2.2(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@rolldown/pluginutils': 1.0.0-beta.47 '@swc/core': 1.15.3 - vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - '@swc/helpers' - '@vitest/coverage-istanbul@4.0.16(vitest@4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(happy-dom@20.0.11)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(msw@2.12.7(@types/node@24.10.1)(typescript@5.9.3))(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/coverage-istanbul@4.0.16(vitest@4.0.16(@opentelemetry/api@1.9.0)(@types/node@25.0.6)(happy-dom@20.0.11)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(msw@2.12.7(@types/node@25.0.6)(typescript@5.9.3))(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@istanbuljs/schema': 0.1.3 '@jridgewell/gen-mapping': 0.3.13 @@ -21889,7 +22143,7 @@ snapshots: magicast: 0.5.1 obug: 2.1.1 tinyrainbow: 3.0.3 - vitest: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(happy-dom@20.0.11)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(msw@2.12.7(@types/node@24.10.1)(typescript@5.9.3))(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@25.0.6)(happy-dom@20.0.11)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(msw@2.12.7(@types/node@25.0.6)(typescript@5.9.3))(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color @@ -21902,23 +22156,14 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.0.3 - '@vitest/mocker@4.0.16(msw@2.12.7(@types/node@24.10.1)(typescript@5.9.3))(vite@7.3.0(@types/node@24.10.1)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/mocker@4.0.16(msw@2.12.7(@types/node@25.0.6)(typescript@5.9.3))(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@vitest/spy': 4.0.16 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - msw: 2.12.7(@types/node@24.10.1)(typescript@5.9.3) - vite: 7.3.0(@types/node@24.10.1)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) - - '@vitest/mocker@4.0.16(msw@2.12.7(@types/node@25.0.3)(typescript@5.9.3))(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': - dependencies: - '@vitest/spy': 4.0.16 - estree-walker: 3.0.3 - magic-string: 0.30.21 - optionalDependencies: - msw: 2.12.7(@types/node@25.0.3)(typescript@5.9.3) - vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + msw: 2.12.7(@types/node@25.0.6)(typescript@5.9.3) + vite: 7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) '@vitest/pretty-format@4.0.16': dependencies: @@ -21942,7 +22187,7 @@ snapshots: '@vitest/pretty-format': 4.0.16 tinyrainbow: 3.0.3 - '@vscode/sudo-prompt@9.3.1': + '@vscode/sudo-prompt@9.3.2': optional: true '@vue/compiler-core@3.5.26': @@ -22498,7 +22743,7 @@ snapshots: birpc@0.2.14: {} - birpc@3.0.0: {} + birpc@4.0.0: {} bl@4.1.0: dependencies: @@ -22666,14 +22911,9 @@ snapshots: transitivePeerDependencies: - magicast - bun-types@1.3.3: - dependencies: - '@types/node': 24.10.1 - bun-types@1.3.5: dependencies: - '@types/node': 24.10.1 - optional: true + '@types/node': 25.0.6 bundle-name@4.1.0: dependencies: @@ -22887,7 +23127,7 @@ snapshots: chrome-launcher@0.15.2: dependencies: - '@types/node': 24.10.1 + '@types/node': 25.0.6 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 1.4.2 @@ -22896,7 +23136,7 @@ snapshots: chromium-edge-launcher@0.2.0: dependencies: - '@types/node': 24.10.1 + '@types/node': 25.0.6 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 1.4.2 @@ -24598,7 +24838,7 @@ snapshots: dependencies: strnum: 2.1.1 - fastq@1.19.1: + fastq@1.20.1: dependencies: reusify: 1.1.0 @@ -24878,7 +25118,7 @@ snapshots: transitivePeerDependencies: - supports-color - fumadocs-mdx@14.2.4(@types/react@19.2.7)(fumadocs-core@16.4.3(@oramacloud/client@2.1.4)(@tanstack/react-router@1.144.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/react@19.2.7)(algoliasearch@5.46.2)(lucide-react@0.542.0(react@19.2.3))(next@16.1.1(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.57.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.1))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(zod@4.3.4))(next@16.1.1(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.57.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.1))(react@19.2.3)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)): + fumadocs-mdx@14.2.4(@types/react@19.2.7)(fumadocs-core@16.4.3(@oramacloud/client@2.1.4)(@tanstack/react-router@1.144.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/react@19.2.7)(algoliasearch@5.46.2)(lucide-react@0.542.0(react@19.2.3))(next@16.1.1(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.57.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.1))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(zod@4.3.4))(next@16.1.1(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.57.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.1))(react@19.2.3)(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)): dependencies: '@mdx-js/mdx': 3.1.1 '@standard-schema/spec': 1.1.0 @@ -24902,7 +25142,7 @@ snapshots: '@types/react': 19.2.7 next: 16.1.1(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.57.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.97.1) react: 19.2.3 - vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color @@ -25281,6 +25521,8 @@ snapshots: hookable@5.5.3: {} + hookable@6.0.1: {} + hosted-git-info@7.0.2: dependencies: lru-cache: 10.4.3 @@ -25381,6 +25623,11 @@ snapshots: dependencies: safer-buffer: 2.1.2 + iconv-lite@0.7.2: + dependencies: + safer-buffer: 2.1.2 + optional: true + ieee754@1.2.1: {} ignore@5.3.2: {} @@ -25423,7 +25670,7 @@ snapshots: import-meta-resolve@4.2.0: {} - import-without-cache@0.2.2: {} + import-without-cache@0.2.5: {} imurmurhash@0.1.4: {} @@ -25680,7 +25927,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 24.10.1 + '@types/node': 25.0.6 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -25690,7 +25937,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 24.10.1 + '@types/node': 25.0.6 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -25717,7 +25964,7 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 24.10.1 + '@types/node': 25.0.6 jest-util: 29.7.0 jest-regex-util@29.6.3: {} @@ -25725,7 +25972,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 24.10.1 + '@types/node': 25.0.6 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -25742,7 +25989,7 @@ snapshots: jest-worker@29.7.0: dependencies: - '@types/node': 24.10.1 + '@types/node': 25.0.6 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -25874,10 +26121,10 @@ snapshots: klona@2.0.6: {} - knip@5.71.0(@types/node@24.10.1)(typescript@5.9.3): + knip@5.80.2(@types/node@25.0.6)(typescript@5.9.3): dependencies: '@nodelib/fs.walk': 1.2.8 - '@types/node': 24.10.1 + '@types/node': 25.0.6 fast-glob: 3.3.3 formatly: 0.3.0 jiti: 2.6.1 @@ -25886,10 +26133,10 @@ snapshots: oxc-resolver: 11.16.2 picocolors: 1.1.1 picomatch: 4.0.3 - smol-toml: 1.5.2 + smol-toml: 1.6.0 strip-json-comments: 5.0.3 typescript: 5.9.3 - zod: 4.3.4 + zod: 4.3.5 knitwork@1.2.0: {} @@ -27312,35 +27559,9 @@ snapshots: ms@2.1.3: {} - msw@2.12.7(@types/node@24.10.1)(typescript@5.9.3): + msw@2.12.7(@types/node@25.0.6)(typescript@5.9.3): dependencies: - '@inquirer/confirm': 5.1.21(@types/node@24.10.1) - '@mswjs/interceptors': 0.40.0 - '@open-draft/deferred-promise': 2.2.0 - '@types/statuses': 2.0.6 - cookie: 1.1.1 - graphql: 16.12.0 - headers-polyfill: 4.0.3 - is-node-process: 1.2.0 - outvariant: 1.4.3 - path-to-regexp: 6.3.0 - picocolors: 1.1.1 - rettime: 0.7.0 - statuses: 2.0.2 - strict-event-emitter: 0.5.1 - tough-cookie: 6.0.0 - type-fest: 5.3.1 - until-async: 3.0.2 - yargs: 17.7.2 - optionalDependencies: - typescript: 5.9.3 - transitivePeerDependencies: - - '@types/node' - optional: true - - msw@2.12.7(@types/node@25.0.3)(typescript@5.9.3): - dependencies: - '@inquirer/confirm': 5.1.21(@types/node@25.0.3) + '@inquirer/confirm': 5.1.21(@types/node@25.0.6) '@mswjs/interceptors': 0.40.0 '@open-draft/deferred-promise': 2.2.0 '@types/statuses': 2.0.6 @@ -27370,7 +27591,7 @@ snapshots: aws-ssl-profiles: 1.1.2 denque: 2.1.0 generate-function: 2.3.1 - iconv-lite: 0.7.1 + iconv-lite: 0.7.2 long: 5.3.2 lru.min: 1.1.3 named-placeholders: 1.1.6 @@ -27429,7 +27650,7 @@ snapshots: needle@3.3.1: dependencies: iconv-lite: 0.6.3 - sax: 1.4.3 + sax: 1.4.4 optional: true negotiator@0.6.3: {} @@ -27482,7 +27703,7 @@ snapshots: - '@babel/core' - babel-plugin-macros - nitropack@2.12.4(@azure/identity@4.13.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.15.15)(@netlify/blobs@10.5.0)(better-sqlite3@12.5.0)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260103.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.15.15)(@opentelemetry/api@1.9.0)(@prisma/client@7.2.0(prisma@7.2.0(@types/react@19.2.7)(better-sqlite3@12.5.0)(magicast@0.3.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.5.0)(bun-types@1.3.5)(kysely@0.28.9)(mysql2@3.16.0)(pg@8.16.3)(postgres@3.4.7)(prisma@7.2.0(@types/react@19.2.7)(better-sqlite3@12.5.0)(magicast@0.3.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)))(mysql2@3.16.0)(rolldown@1.0.0-beta.58): + nitropack@2.12.4(@azure/identity@4.13.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.15.15)(@netlify/blobs@10.5.0)(better-sqlite3@12.5.0)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260103.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.15.15)(@opentelemetry/api@1.9.0)(@prisma/client@7.2.0(prisma@7.2.0(@types/react@19.2.7)(better-sqlite3@12.5.0)(magicast@0.3.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.5.0)(bun-types@1.3.5)(kysely@0.28.9)(mysql2@3.16.0)(pg@8.16.3)(postgres@3.4.7)(prisma@7.2.0(@types/react@19.2.7)(better-sqlite3@12.5.0)(magicast@0.3.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)))(mysql2@3.16.0)(rolldown@1.0.0-beta.59): dependencies: '@cloudflare/kv-asset-handler': 0.4.0 '@netlify/functions': 3.1.10(rollup@4.54.0) @@ -27536,7 +27757,7 @@ snapshots: pretty-bytes: 6.1.1 radix3: 1.1.2 rollup: 4.54.0 - rollup-plugin-visualizer: 6.0.3(rolldown@1.0.0-beta.58)(rollup@4.54.0) + rollup-plugin-visualizer: 6.0.3(rolldown@1.0.0-beta.59)(rollup@4.54.0) scule: 1.3.0 semver: 7.7.3 serve-placeholder: 2.0.2 @@ -30141,70 +30362,49 @@ snapshots: dependencies: glob: 7.2.3 - rolldown-plugin-dts@0.18.3(oxc-resolver@11.16.2)(rolldown@1.0.0-beta.53)(typescript@5.9.3): + rolldown-plugin-dts@0.20.0(oxc-resolver@11.16.2)(rolldown@1.0.0-beta.59)(typescript@5.9.3): dependencies: '@babel/generator': 7.28.5 '@babel/parser': 7.28.5 '@babel/types': 7.28.5 ast-kit: 2.2.0 - birpc: 3.0.0 + birpc: 4.0.0 dts-resolver: 2.1.3(oxc-resolver@11.16.2) get-tsconfig: 4.13.0 - magic-string: 0.30.21 obug: 2.1.1 - rolldown: 1.0.0-beta.53 + rolldown: 1.0.0-beta.59 optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: - oxc-resolver - rolldown@1.0.0-beta.53: + rolldown@1.0.0-beta.59: dependencies: - '@oxc-project/types': 0.101.0 - '@rolldown/pluginutils': 1.0.0-beta.53 + '@oxc-project/types': 0.107.0 + '@rolldown/pluginutils': 1.0.0-beta.59 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-beta.53 - '@rolldown/binding-darwin-arm64': 1.0.0-beta.53 - '@rolldown/binding-darwin-x64': 1.0.0-beta.53 - '@rolldown/binding-freebsd-x64': 1.0.0-beta.53 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.53 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.53 - '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.53 - '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.53 - '@rolldown/binding-linux-x64-musl': 1.0.0-beta.53 - '@rolldown/binding-openharmony-arm64': 1.0.0-beta.53 - '@rolldown/binding-wasm32-wasi': 1.0.0-beta.53 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.53 - '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.53 + '@rolldown/binding-android-arm64': 1.0.0-beta.59 + '@rolldown/binding-darwin-arm64': 1.0.0-beta.59 + '@rolldown/binding-darwin-x64': 1.0.0-beta.59 + '@rolldown/binding-freebsd-x64': 1.0.0-beta.59 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.59 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.59 + '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.59 + '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.59 + '@rolldown/binding-linux-x64-musl': 1.0.0-beta.59 + '@rolldown/binding-openharmony-arm64': 1.0.0-beta.59 + '@rolldown/binding-wasm32-wasi': 1.0.0-beta.59 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.59 + '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.59 - rolldown@1.0.0-beta.58: - dependencies: - '@oxc-project/types': 0.106.0 - '@rolldown/pluginutils': 1.0.0-beta.58 - optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-beta.58 - '@rolldown/binding-darwin-arm64': 1.0.0-beta.58 - '@rolldown/binding-darwin-x64': 1.0.0-beta.58 - '@rolldown/binding-freebsd-x64': 1.0.0-beta.58 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.58 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.58 - '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.58 - '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.58 - '@rolldown/binding-linux-x64-musl': 1.0.0-beta.58 - '@rolldown/binding-openharmony-arm64': 1.0.0-beta.58 - '@rolldown/binding-wasm32-wasi': 1.0.0-beta.58 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.58 - '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.58 - optional: true - - rollup-plugin-visualizer@6.0.3(rolldown@1.0.0-beta.58)(rollup@4.54.0): + rollup-plugin-visualizer@6.0.3(rolldown@1.0.0-beta.59)(rollup@4.54.0): dependencies: open: 8.4.2 picomatch: 4.0.3 source-map: 0.7.6 yargs: 17.7.2 optionalDependencies: - rolldown: 1.0.0-beta.58 + rolldown: 1.0.0-beta.59 rollup: 4.54.0 rollup@4.54.0: @@ -30235,6 +30435,37 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.54.0 fsevents: 2.3.3 + rollup@4.55.1: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.55.1 + '@rollup/rollup-android-arm64': 4.55.1 + '@rollup/rollup-darwin-arm64': 4.55.1 + '@rollup/rollup-darwin-x64': 4.55.1 + '@rollup/rollup-freebsd-arm64': 4.55.1 + '@rollup/rollup-freebsd-x64': 4.55.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.55.1 + '@rollup/rollup-linux-arm-musleabihf': 4.55.1 + '@rollup/rollup-linux-arm64-gnu': 4.55.1 + '@rollup/rollup-linux-arm64-musl': 4.55.1 + '@rollup/rollup-linux-loong64-gnu': 4.55.1 + '@rollup/rollup-linux-loong64-musl': 4.55.1 + '@rollup/rollup-linux-ppc64-gnu': 4.55.1 + '@rollup/rollup-linux-ppc64-musl': 4.55.1 + '@rollup/rollup-linux-riscv64-gnu': 4.55.1 + '@rollup/rollup-linux-riscv64-musl': 4.55.1 + '@rollup/rollup-linux-s390x-gnu': 4.55.1 + '@rollup/rollup-linux-x64-gnu': 4.55.1 + '@rollup/rollup-linux-x64-musl': 4.55.1 + '@rollup/rollup-openbsd-x64': 4.55.1 + '@rollup/rollup-openharmony-arm64': 4.55.1 + '@rollup/rollup-win32-arm64-msvc': 4.55.1 + '@rollup/rollup-win32-ia32-msvc': 4.55.1 + '@rollup/rollup-win32-x64-gnu': 4.55.1 + '@rollup/rollup-win32-x64-msvc': 4.55.1 + fsevents: 2.3.3 + rou3@0.7.10: {} router@2.2.0: @@ -30285,7 +30516,7 @@ snapshots: immutable: 5.1.4 source-map-js: 1.2.1 optionalDependencies: - '@parcel/watcher': 2.5.1 + '@parcel/watcher': 2.5.4 optional: true satori@0.16.0: @@ -30304,6 +30535,9 @@ snapshots: sax@1.4.3: {} + sax@1.4.4: + optional: true + scheduler@0.26.0: {} scheduler@0.27.0: {} @@ -30645,6 +30879,8 @@ snapshots: smol-toml@1.5.2: {} + smol-toml@1.6.0: {} + solid-js@1.9.9: dependencies: csstype: 3.2.3 @@ -30841,11 +31077,11 @@ snapshots: dependencies: js-tokens: 9.0.1 - stripe@20.0.0(@types/node@25.0.3): + stripe@20.0.0(@types/node@25.0.6): dependencies: qs: 6.14.1 optionalDependencies: - '@types/node': 25.0.3 + '@types/node': 25.0.6 strnum@1.1.2: optional: true @@ -31162,22 +31398,24 @@ snapshots: '@ts-morph/common': 0.28.1 code-block-writer: 13.0.3 - tsdown@0.17.2(@arethetypeswrong/core@0.18.2)(oxc-resolver@11.16.2)(publint@0.3.16)(synckit@0.11.11)(typescript@5.9.3): + tsdown@0.19.0(@arethetypeswrong/core@0.18.2)(oxc-resolver@11.16.2)(publint@0.3.16)(synckit@0.11.11)(typescript@5.9.3): dependencies: ansis: 4.2.0 cac: 6.7.14 + defu: 6.1.4 empathic: 2.0.0 - hookable: 5.5.3 - import-without-cache: 0.2.2 + hookable: 6.0.1 + import-without-cache: 0.2.5 obug: 2.1.1 - rolldown: 1.0.0-beta.53 - rolldown-plugin-dts: 0.18.3(oxc-resolver@11.16.2)(rolldown@1.0.0-beta.53)(typescript@5.9.3) + picomatch: 4.0.3 + rolldown: 1.0.0-beta.59 + rolldown-plugin-dts: 0.20.0(oxc-resolver@11.16.2)(rolldown@1.0.0-beta.59)(typescript@5.9.3) semver: 7.7.3 tinyexec: 1.0.2 tinyglobby: 0.2.15 tree-kill: 1.2.2 unconfig-core: 7.4.2 - unrun: 0.2.19(synckit@0.11.11) + unrun: 0.2.24(synckit@0.11.11) optionalDependencies: '@arethetypeswrong/core': 0.18.2 publint: 0.3.16 @@ -31202,35 +31440,35 @@ snapshots: dependencies: safe-buffer: 5.2.1 - turbo-darwin-64@2.6.3: + turbo-darwin-64@2.7.4: optional: true - turbo-darwin-arm64@2.6.3: + turbo-darwin-arm64@2.7.4: optional: true - turbo-linux-64@2.6.3: + turbo-linux-64@2.7.4: optional: true - turbo-linux-arm64@2.6.3: + turbo-linux-arm64@2.7.4: optional: true turbo-stream@2.4.1: optional: true - turbo-windows-64@2.6.3: + turbo-windows-64@2.7.4: optional: true - turbo-windows-arm64@2.6.3: + turbo-windows-arm64@2.7.4: optional: true - turbo@2.6.3: + turbo@2.7.4: optionalDependencies: - turbo-darwin-64: 2.6.3 - turbo-darwin-arm64: 2.6.3 - turbo-linux-64: 2.6.3 - turbo-linux-arm64: 2.6.3 - turbo-windows-64: 2.6.3 - turbo-windows-arm64: 2.6.3 + turbo-darwin-64: 2.7.4 + turbo-darwin-arm64: 2.7.4 + turbo-linux-64: 2.7.4 + turbo-linux-arm64: 2.7.4 + turbo-windows-64: 2.7.4 + turbo-windows-arm64: 2.7.4 tw-animate-css@1.3.8: {} @@ -31371,7 +31609,7 @@ snapshots: '@types/concat-stream': 2.0.3 '@types/debug': 4.1.12 '@types/is-empty': 1.2.3 - '@types/node': 22.19.3 + '@types/node': 22.19.5 '@types/unist': 3.0.3 concat-stream: 2.0.0 debug: 4.4.3 @@ -31513,9 +31751,9 @@ snapshots: picomatch: 4.0.3 webpack-virtual-modules: 0.6.2 - unrun@0.2.19(synckit@0.11.11): + unrun@0.2.24(synckit@0.11.11): dependencies: - rolldown: 1.0.0-beta.53 + rolldown: 1.0.0-beta.59 optionalDependencies: synckit: 0.11.11 @@ -31688,7 +31926,7 @@ snapshots: d3-time: 3.1.0 d3-timer: 3.0.1 - vinxi@0.5.8(931b65613734baa15c1aafc78ec19b78): + vinxi@0.5.8(0332b19681288fa24f523fbd4fb9232e): dependencies: '@babel/core': 7.28.5 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5) @@ -31709,7 +31947,7 @@ snapshots: hookable: 5.5.3 http-proxy: 1.18.1 micromatch: 4.0.8 - nitropack: 2.12.4(@azure/identity@4.13.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.15.15)(@netlify/blobs@10.5.0)(better-sqlite3@12.5.0)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260103.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.15.15)(@opentelemetry/api@1.9.0)(@prisma/client@7.2.0(prisma@7.2.0(@types/react@19.2.7)(better-sqlite3@12.5.0)(magicast@0.3.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.5.0)(bun-types@1.3.5)(kysely@0.28.9)(mysql2@3.16.0)(pg@8.16.3)(postgres@3.4.7)(prisma@7.2.0(@types/react@19.2.7)(better-sqlite3@12.5.0)(magicast@0.3.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)))(mysql2@3.16.0)(rolldown@1.0.0-beta.58) + nitropack: 2.12.4(@azure/identity@4.13.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.15.15)(@netlify/blobs@10.5.0)(better-sqlite3@12.5.0)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260103.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.15.15)(@opentelemetry/api@1.9.0)(@prisma/client@7.2.0(prisma@7.2.0(@types/react@19.2.7)(better-sqlite3@12.5.0)(magicast@0.3.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.5.0)(bun-types@1.3.5)(kysely@0.28.9)(mysql2@3.16.0)(pg@8.16.3)(postgres@3.4.7)(prisma@7.2.0(@types/react@19.2.7)(better-sqlite3@12.5.0)(magicast@0.3.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)))(mysql2@3.16.0)(rolldown@1.0.0-beta.59) node-fetch-native: 1.6.7 path-to-regexp: 6.3.0 pathe: 1.1.2 @@ -31722,7 +31960,7 @@ snapshots: unctx: 2.4.1 unenv: 1.10.0 unstorage: 1.16.1(@azure/identity@4.13.0)(@netlify/blobs@10.5.0)(db0@0.3.2(@electric-sql/pglite@0.3.14)(@libsql/client@0.15.15)(better-sqlite3@12.5.0)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260103.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.15.15)(@opentelemetry/api@1.9.0)(@prisma/client@7.2.0(prisma@7.2.0(@types/react@19.2.7)(better-sqlite3@12.5.0)(magicast@0.3.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.5.0)(bun-types@1.3.5)(kysely@0.28.9)(mysql2@3.16.0)(pg@8.16.3)(postgres@3.4.7)(prisma@7.2.0(@types/react@19.2.7)(better-sqlite3@12.5.0)(magicast@0.3.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)))(mysql2@3.16.0))(ioredis@5.7.0) - vite: 6.4.1(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 6.4.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) zod: 3.25.76 transitivePeerDependencies: - '@azure/app-configuration' @@ -31766,7 +32004,7 @@ snapshots: - xml2js - yaml - vite-plugin-solid@2.11.8(solid-js@1.9.9)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)): + vite-plugin-solid@2.11.8(solid-js@1.9.9)(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)): dependencies: '@babel/core': 7.28.5 '@types/babel__core': 7.20.5 @@ -31774,12 +32012,12 @@ snapshots: merge-anything: 5.1.7 solid-js: 1.9.9 solid-refresh: 0.6.3(solid-js@1.9.9) - vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) - vitefu: 1.1.1(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + vite: 7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + vitefu: 1.1.1(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) transitivePeerDependencies: - supports-color - vite@6.4.1(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2): + vite@6.4.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.3) @@ -31788,26 +32026,7 @@ snapshots: rollup: 4.54.0 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 25.0.3 - fsevents: 2.3.3 - jiti: 2.6.1 - less: 4.5.1 - lightningcss: 1.30.2 - sass: 1.97.1 - terser: 5.44.1 - tsx: 4.21.0 - yaml: 2.8.2 - - vite@7.3.0(@types/node@24.10.1)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2): - dependencies: - esbuild: 0.27.2 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - postcss: 8.5.6 - rollup: 4.54.0 - tinyglobby: 0.2.15 - optionalDependencies: - '@types/node': 24.10.1 + '@types/node': 25.0.6 fsevents: 2.3.3 jiti: 2.6.1 less: 4.5.1 @@ -31836,53 +32055,37 @@ snapshots: tsx: 4.21.0 yaml: 2.8.2 + vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2): + dependencies: + esbuild: 0.27.2 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.55.1 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 25.0.6 + fsevents: 2.3.3 + jiti: 2.6.1 + less: 4.5.1 + lightningcss: 1.30.2 + sass: 1.97.1 + terser: 5.44.1 + tsx: 4.21.0 + yaml: 2.8.2 + vitefu@1.1.1(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)): optionalDependencies: vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) - vitest@4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(happy-dom@20.0.11)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(msw@2.12.7(@types/node@24.10.1)(typescript@5.9.3))(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2): - dependencies: - '@vitest/expect': 4.0.16 - '@vitest/mocker': 4.0.16(msw@2.12.7(@types/node@24.10.1)(typescript@5.9.3))(vite@7.3.0(@types/node@24.10.1)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) - '@vitest/pretty-format': 4.0.16 - '@vitest/runner': 4.0.16 - '@vitest/snapshot': 4.0.16 - '@vitest/spy': 4.0.16 - '@vitest/utils': 4.0.16 - es-module-lexer: 1.7.0 - expect-type: 1.3.0 - magic-string: 0.30.21 - obug: 2.1.1 - pathe: 2.0.3 - picomatch: 4.0.3 - std-env: 3.10.0 - tinybench: 2.9.0 - tinyexec: 1.0.2 - tinyglobby: 0.2.15 - tinyrainbow: 3.0.3 - vite: 7.3.0(@types/node@24.10.1)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) - why-is-node-running: 2.3.0 + vitefu@1.1.1(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)): optionalDependencies: - '@opentelemetry/api': 1.9.0 - '@types/node': 24.10.1 - happy-dom: 20.0.11 - transitivePeerDependencies: - - jiti - - less - - lightningcss - - msw - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - yaml + vite: 7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) - vitest@4.0.16(@opentelemetry/api@1.9.0)(@types/node@25.0.3)(happy-dom@20.0.11)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(msw@2.12.7(@types/node@25.0.3)(typescript@5.9.3))(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2): + vitest@4.0.16(@opentelemetry/api@1.9.0)(@types/node@25.0.6)(happy-dom@20.0.11)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(msw@2.12.7(@types/node@25.0.6)(typescript@5.9.3))(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: '@vitest/expect': 4.0.16 - '@vitest/mocker': 4.0.16(msw@2.12.7(@types/node@25.0.3)(typescript@5.9.3))(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/mocker': 4.0.16(msw@2.12.7(@types/node@25.0.6)(typescript@5.9.3))(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/pretty-format': 4.0.16 '@vitest/runner': 4.0.16 '@vitest/snapshot': 4.0.16 @@ -31899,11 +32102,11 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 - '@types/node': 25.0.3 + '@types/node': 25.0.6 happy-dom: 20.0.11 transitivePeerDependencies: - jiti @@ -32289,4 +32492,6 @@ snapshots: zod@4.3.4: {} + zod@4.3.5: {} + zwitch@2.0.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 9454d7f62d..793656dfb0 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -9,7 +9,7 @@ catalog: '@better-auth/utils': 0.3.0 '@better-fetch/fetch': 1.1.21 better-call: 1.1.8 - tsdown: ^0.17.2 + tsdown: ^0.19.0 typescript: ^5.9.3 catalogs: From 3f4044ba131028366447657859bc6e8f7c644582 Mon Sep 17 00:00:00 2001 From: Meet Goti Date: Mon, 12 Jan 2026 17:08:21 +0530 Subject: [PATCH 05/39] docs: update upstream remote setup commands in contributing guide (#7265) --- docs/content/docs/reference/contributing.mdx | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/docs/content/docs/reference/contributing.mdx b/docs/content/docs/reference/contributing.mdx index 4e0b7780b4..93f5297592 100644 --- a/docs/content/docs/reference/contributing.mdx +++ b/docs/content/docs/reference/contributing.mdx @@ -74,11 +74,14 @@ Once you have an idea of what you want to contribute, you can start making chang ### 1. Create a new branch ```bash - # Make sure you're on main - git checkout main + # Add upstream remote (if not already added) + git remote add upstream https://github.com/better-auth/better-auth.git + + # Make sure you're on canary + git checkout canary # Pull latest changes - git pull upstream main + git pull upstream canary # Create and switch to a new branch git checkout -b feature/your-feature-name From 8aa8fd7e9e606ebf9c0dc6acd0cf103f77745d82 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 12 Jan 2026 03:39:22 -0800 Subject: [PATCH 06/39] chore(deps): update actions/checkout action to v6 (#7279) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/claude.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/claude.yml b/.github/workflows/claude.yml index 624b892751..15943c1f54 100644 --- a/.github/workflows/claude.yml +++ b/.github/workflows/claude.yml @@ -26,7 +26,7 @@ jobs: actions: read # Required for Claude to read CI results on PRs steps: - name: Checkout repository - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: fetch-depth: 1 From 4bb52e1bae80d8c1ff03d127086145ac942514d8 Mon Sep 17 00:00:00 2001 From: Taesu <166604494+bytaesu@users.noreply.github.com> Date: Mon, 12 Jan 2026 21:10:53 +0900 Subject: [PATCH 07/39] docs: correct `sequenzy-better-auth` community plugin link (#7289) --- docs/components/community-plugins-table.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/components/community-plugins-table.tsx b/docs/components/community-plugins-table.tsx index ed1c2d41f1..c05ece72a2 100644 --- a/docs/components/community-plugins-table.tsx +++ b/docs/components/community-plugins-table.tsx @@ -252,8 +252,8 @@ export const communityPlugins: CommunityPlugin[] = [ }, }, { - name: "better-auth-sequenzy", - url: "https://www.npmjs.com/package/better-auth-sequenzy", + name: "@sequenzy/better-auth", + url: "https://github.com/Sequenzy/sequenzy-better-auth", description: "Automatically add users to Sequenzy mailing lists on signup for seamless email marketing integration.", author: { From 884d4f943af64894f47638009cb1b278c3c8ed52 Mon Sep 17 00:00:00 2001 From: Rayan Pal <90289028+theonlypal@users.noreply.github.com> Date: Mon, 12 Jan 2026 04:22:06 -0800 Subject: [PATCH 08/39] fix(session): prevent duplicate tokens in active sessions list (#7285) Co-authored-by: Taesu Co-authored-by: Taesu <166604494+bytaesu@users.noreply.github.com> Co-authored-by: Alex Yang --- .../src/db/internal-adapter.test.ts | 71 +++++++++++++++++++ .../better-auth/src/db/internal-adapter.ts | 61 ++++++++-------- 2 files changed, 102 insertions(+), 30 deletions(-) diff --git a/packages/better-auth/src/db/internal-adapter.test.ts b/packages/better-auth/src/db/internal-adapter.test.ts index 9d5ffd2051..41914880cd 100644 --- a/packages/better-auth/src/db/internal-adapter.test.ts +++ b/packages/better-auth/src/db/internal-adapter.test.ts @@ -751,4 +751,75 @@ describe("internal adapter test", async () => { // Clean up DB testDb.close(); }); + + it("should deduplicate sessions when active-sessions list contains duplicates", async () => { + const testDb = new Database(":memory:"); + const testDialect = new SqliteDialect({ database: testDb }); + + const testMap = new Map(); + const testExpirationMap = new Map(); + + const testOpts = { + database: { + dialect: testDialect, + type: "sqlite", + }, + secondaryStorage: { + set(key: string, value: string, ttl?: number) { + testMap.set(key, value); + if (ttl !== undefined) { + testExpirationMap.set(key, ttl); + } + }, + get(key: string) { + return testMap.get(key) || null; + }, + delete(key: string) { + testMap.delete(key); + testExpirationMap.delete(key); + }, + }, + } satisfies BetterAuthOptions; + + (await getMigrations(testOpts)).runMigrations(); + const testAuthContext = await init(testOpts); + const testInternalAdapter = testAuthContext.internalAdapter; + + // Create a user + const user = await testInternalAdapter.createUser({ + name: "corrupt-sessions-test-user", + email: "corrupt-sessions-test@example.com", + }); + + // Create a session + const session = await testInternalAdapter.createSession(user.id); + + // Manually corrupt the active-sessions list by adding duplicate tokens + const listStr = testMap.get(`active-sessions-${user.id}`); + const list = safeJSONParse<{ token: string; expiresAt: number }[]>( + listStr!, + ); + + // Add duplicates of the same token + const corruptedList = [ + ...list!, + { token: session.token, expiresAt: session.expiresAt.getTime() }, + { token: session.token, expiresAt: session.expiresAt.getTime() }, + ]; + testMap.set(`active-sessions-${user.id}`, JSON.stringify(corruptedList)); + + // Verify corruption + const corruptedListStr = testMap.get(`active-sessions-${user.id}`); + const parsed = safeJSONParse<{ token: string; expiresAt: number }[]>( + corruptedListStr!, + ); + expect(parsed!.length).toBe(3); // 1 original + 2 duplicates + + // listSessions should deduplicate and return only unique sessions + const sessions = await testInternalAdapter.listSessions(user.id); + expect(sessions.length).toBe(1); + + // Clean up DB + testDb.close(); + }); }); diff --git a/packages/better-auth/src/db/internal-adapter.ts b/packages/better-auth/src/db/internal-adapter.ts index 5295fe5825..8e5e18d940 100644 --- a/packages/better-auth/src/db/internal-adapter.ts +++ b/packages/better-auth/src/db/internal-adapter.ts @@ -158,23 +158,28 @@ export const createInternalAdapter = ( safeJSONParse(currentList) || []; const now = Date.now(); - const validSessions = list.filter((s) => s.expiresAt > now); - const sessions = []; + const seenTokens = new Set(); + const sessions: Session[] = []; - for (const session of validSessions) { - const sessionStringified = await secondaryStorage.get(session.token); - if (sessionStringified) { - const s = safeJSONParse<{ - session: Session; - user: User; - }>(sessionStringified); - if (!s) return []; - const parsedSession = parseSessionOutput(ctx.options, { - ...s.session, - expiresAt: new Date(s.session.expiresAt), - }); - sessions.push(parsedSession); - } + for (const { token, expiresAt } of list) { + if (expiresAt <= now || seenTokens.has(token)) continue; + seenTokens.add(token); + + const data = await secondaryStorage.get(token); + if (!data) continue; + + const parsed = safeJSONParse<{ + session: Session; + user: User; + }>(data); + if (!parsed) continue; + + sessions.push( + parseSessionOutput(ctx.options, { + ...parsed.session, + expiresAt: new Date(parsed.session.expiresAt), + }), + ); } return sessions; } @@ -313,22 +318,18 @@ export const createInternalAdapter = ( if (currentList) { list = safeJSONParse(currentList) || []; - list = list.filter((session) => session.expiresAt > now); + list = list.filter( + (session) => + session.expiresAt > now && session.token !== data.token, + ); } - const sorted = list.sort((a, b) => a.expiresAt - b.expiresAt); - let furthestSessionExp = sorted.at(-1)?.expiresAt; - - sorted.push({ - token: data.token, - expiresAt: data.expiresAt.getTime(), - }); - if ( - !furthestSessionExp || - furthestSessionExp < data.expiresAt.getTime() - ) { - furthestSessionExp = data.expiresAt.getTime(); - } + const sorted = [ + ...list, + { token: data.token, expiresAt: data.expiresAt.getTime() }, + ].sort((a, b) => a.expiresAt - b.expiresAt); + const furthestSessionExp = + sorted.at(-1)?.expiresAt ?? data.expiresAt.getTime(); const furthestSessionTTL = Math.max( Math.floor((furthestSessionExp - now) / 1000), 0, From 47b9aa90daa9f60517982c40df7deae02d41ebca Mon Sep 17 00:00:00 2001 From: Alex Yang Date: Mon, 12 Jan 2026 09:03:52 -0800 Subject: [PATCH 09/39] chore: update cloudflare fixture (#7293) --- .../cloudflare/drizzle/0000_clean_vector.sql | 49 ----- .../drizzle/0000_lively_paladin.sql | 74 ++++++++ .../drizzle/meta/0000_snapshot.json | 175 ++++++++++++++++-- .../cloudflare/drizzle/meta/_journal.json | 4 +- .../test/fixtures/cloudflare/package.json | 1 + .../fixtures/cloudflare/src/auth-schema.ts | 161 ++++++++++++---- .../test/fixtures/cloudflare/src/index.ts | 3 + .../test/fixtures/cloudflare/wrangler.json | 2 +- pnpm-lock.yaml | 104 ++--------- 9 files changed, 382 insertions(+), 191 deletions(-) delete mode 100644 e2e/smoke/test/fixtures/cloudflare/drizzle/0000_clean_vector.sql create mode 100644 e2e/smoke/test/fixtures/cloudflare/drizzle/0000_lively_paladin.sql diff --git a/e2e/smoke/test/fixtures/cloudflare/drizzle/0000_clean_vector.sql b/e2e/smoke/test/fixtures/cloudflare/drizzle/0000_clean_vector.sql deleted file mode 100644 index 23a31bf55b..0000000000 --- a/e2e/smoke/test/fixtures/cloudflare/drizzle/0000_clean_vector.sql +++ /dev/null @@ -1,49 +0,0 @@ -CREATE TABLE `account` ( - `id` text PRIMARY KEY NOT NULL, - `account_id` text NOT NULL, - `provider_id` text NOT NULL, - `user_id` text NOT NULL, - `access_token` text, - `refresh_token` text, - `id_token` text, - `access_token_expires_at` integer, - `refresh_token_expires_at` integer, - `scope` text, - `password` text, - `created_at` integer NOT NULL, - `updated_at` integer NOT NULL, - FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE cascade -); ---> statement-breakpoint -CREATE TABLE `session` ( - `id` text PRIMARY KEY NOT NULL, - `expires_at` integer NOT NULL, - `token` text NOT NULL, - `created_at` integer NOT NULL, - `updated_at` integer NOT NULL, - `ip_address` text, - `user_agent` text, - `user_id` text NOT NULL, - FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE cascade -); ---> statement-breakpoint -CREATE UNIQUE INDEX `session_token_unique` ON `session` (`token`);--> statement-breakpoint -CREATE TABLE `user` ( - `id` text PRIMARY KEY NOT NULL, - `name` text NOT NULL, - `email` text NOT NULL, - `email_verified` integer NOT NULL, - `image` text, - `created_at` integer NOT NULL, - `updated_at` integer NOT NULL -); ---> statement-breakpoint -CREATE UNIQUE INDEX `user_email_unique` ON `user` (`email`);--> statement-breakpoint -CREATE TABLE `verification` ( - `id` text PRIMARY KEY NOT NULL, - `identifier` text NOT NULL, - `value` text NOT NULL, - `expires_at` integer NOT NULL, - `created_at` integer, - `updated_at` integer -); diff --git a/e2e/smoke/test/fixtures/cloudflare/drizzle/0000_lively_paladin.sql b/e2e/smoke/test/fixtures/cloudflare/drizzle/0000_lively_paladin.sql new file mode 100644 index 0000000000..09f0df5082 --- /dev/null +++ b/e2e/smoke/test/fixtures/cloudflare/drizzle/0000_lively_paladin.sql @@ -0,0 +1,74 @@ +CREATE TABLE `account` ( + `id` text PRIMARY KEY NOT NULL, + `account_id` text NOT NULL, + `provider_id` text NOT NULL, + `user_id` text NOT NULL, + `access_token` text, + `refresh_token` text, + `id_token` text, + `access_token_expires_at` integer, + `refresh_token_expires_at` integer, + `scope` text, + `password` text, + `created_at` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL, + `updated_at` integer NOT NULL, + FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE cascade +); +--> statement-breakpoint +CREATE INDEX `account_userId_idx` ON `account` (`user_id`);--> statement-breakpoint +CREATE TABLE `jwks` ( + `id` text PRIMARY KEY NOT NULL, + `public_key` text NOT NULL, + `private_key` text NOT NULL, + `created_at` integer NOT NULL, + `expires_at` integer +); +--> statement-breakpoint +CREATE TABLE `session` ( + `id` text PRIMARY KEY NOT NULL, + `expires_at` integer NOT NULL, + `token` text NOT NULL, + `created_at` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL, + `updated_at` integer NOT NULL, + `ip_address` text, + `user_agent` text, + `user_id` text NOT NULL, + FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE cascade +); +--> statement-breakpoint +CREATE UNIQUE INDEX `session_token_unique` ON `session` (`token`);--> statement-breakpoint +CREATE INDEX `session_userId_idx` ON `session` (`user_id`);--> statement-breakpoint +CREATE TABLE `sso_provider` ( + `id` text PRIMARY KEY NOT NULL, + `issuer` text NOT NULL, + `oidc_config` text, + `saml_config` text, + `user_id` text, + `provider_id` text NOT NULL, + `organization_id` text, + `domain` text NOT NULL, + FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE cascade +); +--> statement-breakpoint +CREATE UNIQUE INDEX `sso_provider_provider_id_unique` ON `sso_provider` (`provider_id`);--> statement-breakpoint +CREATE TABLE `user` ( + `id` text PRIMARY KEY NOT NULL, + `name` text NOT NULL, + `email` text NOT NULL, + `email_verified` integer DEFAULT false NOT NULL, + `image` text, + `created_at` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL, + `updated_at` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL +); +--> statement-breakpoint +CREATE UNIQUE INDEX `user_email_unique` ON `user` (`email`);--> statement-breakpoint +CREATE TABLE `verification` ( + `id` text PRIMARY KEY NOT NULL, + `identifier` text NOT NULL, + `value` text NOT NULL, + `expires_at` integer NOT NULL, + `created_at` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL, + `updated_at` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL +); +--> statement-breakpoint +CREATE INDEX `verification_identifier_idx` ON `verification` (`identifier`); \ No newline at end of file diff --git a/e2e/smoke/test/fixtures/cloudflare/drizzle/meta/0000_snapshot.json b/e2e/smoke/test/fixtures/cloudflare/drizzle/meta/0000_snapshot.json index 9ab2fb6021..39b601b102 100644 --- a/e2e/smoke/test/fixtures/cloudflare/drizzle/meta/0000_snapshot.json +++ b/e2e/smoke/test/fixtures/cloudflare/drizzle/meta/0000_snapshot.json @@ -1,7 +1,7 @@ { "version": "6", "dialect": "sqlite", - "id": "dde09aa0-ff07-4e38-a49a-742a3c2b7af4", + "id": "cd9bf58a-5fe9-4865-8507-e1fe41e35967", "prevId": "00000000-0000-0000-0000-000000000000", "tables": { "account": { @@ -89,7 +89,8 @@ "type": "integer", "primaryKey": false, "notNull": true, - "autoincrement": false + "autoincrement": false, + "default": "(cast(unixepoch('subsecond') * 1000 as integer))" }, "updated_at": { "name": "updated_at", @@ -99,7 +100,13 @@ "autoincrement": false } }, - "indexes": {}, + "indexes": { + "account_userId_idx": { + "name": "account_userId_idx", + "columns": ["user_id"], + "isUnique": false + } + }, "foreignKeys": { "account_user_id_user_id_fk": { "name": "account_user_id_user_id_fk", @@ -115,6 +122,51 @@ "uniqueConstraints": {}, "checkConstraints": {} }, + "jwks": { + "name": "jwks", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "public_key": { + "name": "public_key", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "private_key": { + "name": "private_key", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "expires_at": { + "name": "expires_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, "session": { "name": "session", "columns": { @@ -144,7 +196,8 @@ "type": "integer", "primaryKey": false, "notNull": true, - "autoincrement": false + "autoincrement": false, + "default": "(cast(unixepoch('subsecond') * 1000 as integer))" }, "updated_at": { "name": "updated_at", @@ -180,6 +233,11 @@ "name": "session_token_unique", "columns": ["token"], "isUnique": true + }, + "session_userId_idx": { + "name": "session_userId_idx", + "columns": ["user_id"], + "isUnique": false } }, "foreignKeys": { @@ -197,6 +255,88 @@ "uniqueConstraints": {}, "checkConstraints": {} }, + "sso_provider": { + "name": "sso_provider", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "issuer": { + "name": "issuer", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "oidc_config": { + "name": "oidc_config", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "saml_config": { + "name": "saml_config", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "provider_id": { + "name": "provider_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "organization_id": { + "name": "organization_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "domain": { + "name": "domain", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "sso_provider_provider_id_unique": { + "name": "sso_provider_provider_id_unique", + "columns": ["provider_id"], + "isUnique": true + } + }, + "foreignKeys": { + "sso_provider_user_id_user_id_fk": { + "name": "sso_provider_user_id_user_id_fk", + "tableFrom": "sso_provider", + "tableTo": "user", + "columnsFrom": ["user_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, "user": { "name": "user", "columns": { @@ -226,7 +366,8 @@ "type": "integer", "primaryKey": false, "notNull": true, - "autoincrement": false + "autoincrement": false, + "default": false }, "image": { "name": "image", @@ -240,14 +381,16 @@ "type": "integer", "primaryKey": false, "notNull": true, - "autoincrement": false + "autoincrement": false, + "default": "(cast(unixepoch('subsecond') * 1000 as integer))" }, "updated_at": { "name": "updated_at", "type": "integer", "primaryKey": false, "notNull": true, - "autoincrement": false + "autoincrement": false, + "default": "(cast(unixepoch('subsecond') * 1000 as integer))" } }, "indexes": { @@ -297,18 +440,26 @@ "name": "created_at", "type": "integer", "primaryKey": false, - "notNull": false, - "autoincrement": false + "notNull": true, + "autoincrement": false, + "default": "(cast(unixepoch('subsecond') * 1000 as integer))" }, "updated_at": { "name": "updated_at", "type": "integer", "primaryKey": false, - "notNull": false, - "autoincrement": false + "notNull": true, + "autoincrement": false, + "default": "(cast(unixepoch('subsecond') * 1000 as integer))" + } + }, + "indexes": { + "verification_identifier_idx": { + "name": "verification_identifier_idx", + "columns": ["identifier"], + "isUnique": false } }, - "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, "uniqueConstraints": {}, diff --git a/e2e/smoke/test/fixtures/cloudflare/drizzle/meta/_journal.json b/e2e/smoke/test/fixtures/cloudflare/drizzle/meta/_journal.json index 1615d5a563..ffe60ed674 100644 --- a/e2e/smoke/test/fixtures/cloudflare/drizzle/meta/_journal.json +++ b/e2e/smoke/test/fixtures/cloudflare/drizzle/meta/_journal.json @@ -5,8 +5,8 @@ { "idx": 0, "version": "6", - "when": 1740122602683, - "tag": "0000_clean_vector", + "when": 1768234754154, + "tag": "0000_lively_paladin", "breakpoints": true } ] diff --git a/e2e/smoke/test/fixtures/cloudflare/package.json b/e2e/smoke/test/fixtures/cloudflare/package.json index 335d909871..2b04560e1e 100644 --- a/e2e/smoke/test/fixtures/cloudflare/package.json +++ b/e2e/smoke/test/fixtures/cloudflare/package.json @@ -2,6 +2,7 @@ "name": "cloudflare", "private": true, "dependencies": { + "@better-auth/sso": "workspace:*", "better-auth": "workspace:*", "drizzle-orm": "^0.44.5", "hono": "^4.9.7" diff --git a/e2e/smoke/test/fixtures/cloudflare/src/auth-schema.ts b/e2e/smoke/test/fixtures/cloudflare/src/auth-schema.ts index 11022fcbad..59c9b6cef4 100644 --- a/e2e/smoke/test/fixtures/cloudflare/src/auth-schema.ts +++ b/e2e/smoke/test/fixtures/cloudflare/src/auth-schema.ts @@ -1,55 +1,134 @@ -import { integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; +import { relations, sql } from "drizzle-orm"; +import { index, integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; export const user = sqliteTable("user", { id: text("id").primaryKey(), name: text("name").notNull(), email: text("email").notNull().unique(), - emailVerified: integer("email_verified", { mode: "boolean" }).notNull(), + emailVerified: integer("email_verified", { mode: "boolean" }) + .default(false) + .notNull(), image: text("image"), - createdAt: integer("created_at", { mode: "timestamp" }).notNull(), - updatedAt: integer("updated_at", { mode: "timestamp" }).notNull(), + createdAt: integer("created_at", { mode: "timestamp_ms" }) + .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`) + .notNull(), + updatedAt: integer("updated_at", { mode: "timestamp_ms" }) + .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`) + .$onUpdate(() => /* @__PURE__ */ new Date()) + .notNull(), }); -export const session = sqliteTable("session", { +export const session = sqliteTable( + "session", + { + id: text("id").primaryKey(), + expiresAt: integer("expires_at", { mode: "timestamp_ms" }).notNull(), + token: text("token").notNull().unique(), + createdAt: integer("created_at", { mode: "timestamp_ms" }) + .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`) + .notNull(), + updatedAt: integer("updated_at", { mode: "timestamp_ms" }) + .$onUpdate(() => /* @__PURE__ */ new Date()) + .notNull(), + ipAddress: text("ip_address"), + userAgent: text("user_agent"), + userId: text("user_id") + .notNull() + .references(() => user.id, { onDelete: "cascade" }), + }, + (table) => [index("session_userId_idx").on(table.userId)], +); + +export const account = sqliteTable( + "account", + { + id: text("id").primaryKey(), + accountId: text("account_id").notNull(), + providerId: text("provider_id").notNull(), + userId: text("user_id") + .notNull() + .references(() => user.id, { onDelete: "cascade" }), + accessToken: text("access_token"), + refreshToken: text("refresh_token"), + idToken: text("id_token"), + accessTokenExpiresAt: integer("access_token_expires_at", { + mode: "timestamp_ms", + }), + refreshTokenExpiresAt: integer("refresh_token_expires_at", { + mode: "timestamp_ms", + }), + scope: text("scope"), + password: text("password"), + createdAt: integer("created_at", { mode: "timestamp_ms" }) + .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`) + .notNull(), + updatedAt: integer("updated_at", { mode: "timestamp_ms" }) + .$onUpdate(() => /* @__PURE__ */ new Date()) + .notNull(), + }, + (table) => [index("account_userId_idx").on(table.userId)], +); + +export const verification = sqliteTable( + "verification", + { + id: text("id").primaryKey(), + identifier: text("identifier").notNull(), + value: text("value").notNull(), + expiresAt: integer("expires_at", { mode: "timestamp_ms" }).notNull(), + createdAt: integer("created_at", { mode: "timestamp_ms" }) + .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`) + .notNull(), + updatedAt: integer("updated_at", { mode: "timestamp_ms" }) + .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`) + .$onUpdate(() => /* @__PURE__ */ new Date()) + .notNull(), + }, + (table) => [index("verification_identifier_idx").on(table.identifier)], +); + +export const jwks = sqliteTable("jwks", { id: text("id").primaryKey(), - expiresAt: integer("expires_at", { mode: "timestamp" }).notNull(), - token: text("token").notNull().unique(), - createdAt: integer("created_at", { mode: "timestamp" }).notNull(), - updatedAt: integer("updated_at", { mode: "timestamp" }).notNull(), - ipAddress: text("ip_address"), - userAgent: text("user_agent"), - userId: text("user_id") - .notNull() - .references(() => user.id, { onDelete: "cascade" }), + publicKey: text("public_key").notNull(), + privateKey: text("private_key").notNull(), + createdAt: integer("created_at", { mode: "timestamp_ms" }).notNull(), + expiresAt: integer("expires_at", { mode: "timestamp_ms" }), }); -export const account = sqliteTable("account", { +export const ssoProvider = sqliteTable("sso_provider", { id: text("id").primaryKey(), - accountId: text("account_id").notNull(), - providerId: text("provider_id").notNull(), - userId: text("user_id") - .notNull() - .references(() => user.id, { onDelete: "cascade" }), - accessToken: text("access_token"), - refreshToken: text("refresh_token"), - idToken: text("id_token"), - accessTokenExpiresAt: integer("access_token_expires_at", { - mode: "timestamp", + issuer: text("issuer").notNull(), + oidcConfig: text("oidc_config"), + samlConfig: text("saml_config"), + userId: text("user_id").references(() => user.id, { onDelete: "cascade" }), + providerId: text("provider_id").notNull().unique(), + organizationId: text("organization_id"), + domain: text("domain").notNull(), +}); + +export const userRelations = relations(user, ({ many }) => ({ + sessions: many(session), + accounts: many(account), + ssoProviders: many(ssoProvider), +})); + +export const sessionRelations = relations(session, ({ one }) => ({ + user: one(user, { + fields: [session.userId], + references: [user.id], }), - refreshTokenExpiresAt: integer("refresh_token_expires_at", { - mode: "timestamp", - }), - scope: text("scope"), - password: text("password"), - createdAt: integer("created_at", { mode: "timestamp" }).notNull(), - updatedAt: integer("updated_at", { mode: "timestamp" }).notNull(), -}); +})); -export const verification = sqliteTable("verification", { - id: text("id").primaryKey(), - identifier: text("identifier").notNull(), - value: text("value").notNull(), - expiresAt: integer("expires_at", { mode: "timestamp" }).notNull(), - createdAt: integer("created_at", { mode: "timestamp" }), - updatedAt: integer("updated_at", { mode: "timestamp" }), -}); +export const accountRelations = relations(account, ({ one }) => ({ + user: one(user, { + fields: [account.userId], + references: [user.id], + }), +})); + +export const ssoProviderRelations = relations(ssoProvider, ({ one }) => ({ + user: one(user, { + fields: [ssoProvider.userId], + references: [user.id], + }), +})); diff --git a/e2e/smoke/test/fixtures/cloudflare/src/index.ts b/e2e/smoke/test/fixtures/cloudflare/src/index.ts index 992b65078e..be6bf868ba 100644 --- a/e2e/smoke/test/fixtures/cloudflare/src/index.ts +++ b/e2e/smoke/test/fixtures/cloudflare/src/index.ts @@ -1,5 +1,7 @@ +import { sso } from "@better-auth/sso"; import { betterAuth } from "better-auth"; import { drizzleAdapter } from "better-auth/adapters/drizzle"; +import { jwt } from "better-auth/plugins/jwt"; import { Hono } from "hono"; import { createDrizzle } from "./db"; @@ -17,6 +19,7 @@ const createAuth = (env: CloudflareBindings) => logger: { level: "debug", }, + plugins: [jwt(), sso()], }); type Auth = ReturnType; diff --git a/e2e/smoke/test/fixtures/cloudflare/wrangler.json b/e2e/smoke/test/fixtures/cloudflare/wrangler.json index bdd00e492c..8d253b1041 100644 --- a/e2e/smoke/test/fixtures/cloudflare/wrangler.json +++ b/e2e/smoke/test/fixtures/cloudflare/wrangler.json @@ -8,7 +8,7 @@ "d1_databases": [ { "binding": "DB", - "database_id": "d1-db-id", + "database_id": "REPLACE_ME", "database_name": "db", "migrations_dir": "./drizzle" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4aca814119..bd9b89db65 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -985,6 +985,9 @@ importers: e2e/smoke/test/fixtures/cloudflare: dependencies: + '@better-auth/sso': + specifier: workspace:* + version: link:../../../../../packages/sso better-auth: specifier: workspace:* version: link:../../../../../packages/better-auth @@ -1088,7 +1091,7 @@ importers: version: 2.0.0 '@tanstack/react-start': specifier: ^1.0.0 - version: 1.139.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 1.139.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) better-call: specifier: 'catalog:' version: 1.1.8(zod@4.3.4) @@ -7241,9 +7244,6 @@ packages: '@types/node@24.10.1': resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==} - '@types/node@25.0.3': - resolution: {integrity: sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==} - '@types/node@25.0.6': resolution: {integrity: sha512-NNu0sjyNxpoiW3YuVFfNz7mxSQ+S4X2G28uqg2s+CzoqoQjLPsWSbsFFyztIAqt2vb8kfEAsJNepMGPTxFDx3Q==} @@ -15007,46 +15007,6 @@ packages: yaml: optional: true - vite@7.3.0: - resolution: {integrity: sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - peerDependencies: - '@types/node': ^20.19.0 || >=22.12.0 - jiti: '>=1.21.0' - less: ^4.0.0 - lightningcss: ^1.21.0 - sass: ^1.70.0 - sass-embedded: ^1.70.0 - stylus: '>=0.54.8' - sugarss: ^5.0.0 - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - '@types/node': - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - vite@7.3.1: resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -21427,7 +21387,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/directive-functions-plugin@1.139.0(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': + '@tanstack/directive-functions-plugin@1.139.0(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@babel/code-frame': 7.27.1 '@babel/core': 7.28.5 @@ -21437,7 +21397,7 @@ snapshots: babel-dead-code-elimination: 1.0.10 pathe: 2.0.3 tiny-invariant: 1.3.3 - vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color @@ -21506,19 +21466,19 @@ snapshots: transitivePeerDependencies: - crossws - '@tanstack/react-start@1.139.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': + '@tanstack/react-start@1.139.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@tanstack/react-router': 1.139.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@tanstack/react-start-client': 1.139.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@tanstack/react-start-server': 1.139.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@tanstack/router-utils': 1.139.0 '@tanstack/start-client-core': 1.139.7 - '@tanstack/start-plugin-core': 1.139.8(@tanstack/react-router@1.139.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + '@tanstack/start-plugin-core': 1.139.8(@tanstack/react-router@1.139.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) '@tanstack/start-server-core': 1.139.8 pathe: 2.0.3 react: 19.2.3 react-dom: 19.2.3(react@19.2.3) - vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - '@rsbuild/core' - crossws @@ -21573,7 +21533,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.139.7(@tanstack/react-router@1.139.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': + '@tanstack/router-plugin@1.139.7(@tanstack/react-router@1.139.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@babel/core': 7.28.5 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5) @@ -21591,7 +21551,7 @@ snapshots: zod: 3.25.76 optionalDependencies: '@tanstack/react-router': 1.139.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color @@ -21624,7 +21584,7 @@ snapshots: - supports-color - vite - '@tanstack/server-functions-plugin@1.139.0(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': + '@tanstack/server-functions-plugin@1.139.0(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@babel/code-frame': 7.27.1 '@babel/core': 7.28.5 @@ -21633,7 +21593,7 @@ snapshots: '@babel/template': 7.27.2 '@babel/traverse': 7.28.5 '@babel/types': 7.28.5 - '@tanstack/directive-functions-plugin': 1.139.0(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + '@tanstack/directive-functions-plugin': 1.139.0(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) babel-dead-code-elimination: 1.0.10 tiny-invariant: 1.3.3 transitivePeerDependencies: @@ -21648,7 +21608,7 @@ snapshots: tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/start-plugin-core@1.139.8(@tanstack/react-router@1.139.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': + '@tanstack/start-plugin-core@1.139.8(@tanstack/react-router@1.139.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@babel/code-frame': 7.26.2 '@babel/core': 7.28.5 @@ -21656,9 +21616,9 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.40 '@tanstack/router-core': 1.139.7 '@tanstack/router-generator': 1.139.7 - '@tanstack/router-plugin': 1.139.7(@tanstack/react-router@1.139.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + '@tanstack/router-plugin': 1.139.7(@tanstack/react-router@1.139.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) '@tanstack/router-utils': 1.139.0 - '@tanstack/server-functions-plugin': 1.139.0(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + '@tanstack/server-functions-plugin': 1.139.0(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) '@tanstack/start-client-core': 1.139.7 '@tanstack/start-server-core': 1.139.8 babel-dead-code-elimination: 1.0.10 @@ -21668,8 +21628,8 @@ snapshots: srvx: 0.8.16 tinyglobby: 0.2.15 ufo: 1.6.1 - vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) - vitefu: 1.1.1(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) + vite: 7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + vitefu: 1.1.1(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) xmlbuilder2: 4.0.0 zod: 3.25.76 transitivePeerDependencies: @@ -21880,11 +21840,6 @@ snapshots: dependencies: undici-types: 7.16.0 - '@types/node@25.0.3': - dependencies: - undici-types: 7.16.0 - optional: true - '@types/node@25.0.6': dependencies: undici-types: 7.16.0 @@ -32036,25 +31991,6 @@ snapshots: tsx: 4.21.0 yaml: 2.8.2 - vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2): - dependencies: - esbuild: 0.27.2 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - postcss: 8.5.6 - rollup: 4.54.0 - tinyglobby: 0.2.15 - optionalDependencies: - '@types/node': 25.0.3 - fsevents: 2.3.3 - jiti: 2.6.1 - less: 4.5.1 - lightningcss: 1.30.2 - sass: 1.97.1 - terser: 5.44.1 - tsx: 4.21.0 - yaml: 2.8.2 - vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: esbuild: 0.27.2 @@ -32074,10 +32010,6 @@ snapshots: tsx: 4.21.0 yaml: 2.8.2 - vitefu@1.1.1(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)): - optionalDependencies: - vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) - vitefu@1.1.1(vite@7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)): optionalDependencies: vite: 7.3.1(@types/node@25.0.6)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) From 69c9c790db24fdf4f7c13730ef9b0bec9ad8609a Mon Sep 17 00:00:00 2001 From: Taesu <166604494+bytaesu@users.noreply.github.com> Date: Tue, 13 Jan 2026 02:08:10 +0900 Subject: [PATCH 10/39] feat(oauth): add custom authorizationEndpoint option (#6962) Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- docs/content/docs/reference/options.mdx | 18 ++++++++++++ .../src/oauth2/create-authorization-url.ts | 2 +- packages/core/src/oauth2/oauth-provider.ts | 6 ++++ test/unit/oauth/index.spec.ts | 29 +++++++++++++++++++ 4 files changed, 54 insertions(+), 1 deletion(-) diff --git a/docs/content/docs/reference/options.mdx b/docs/content/docs/reference/options.mdx index ecc337098b..1b34eb2159 100644 --- a/docs/content/docs/reference/options.mdx +++ b/docs/content/docs/reference/options.mdx @@ -269,6 +269,24 @@ export const auth = betterAuth({ }) ``` +- `clientId`: OAuth client ID from the provider +- `clientSecret`: OAuth client secret from the provider +- `clientKey`: Client key (used by some providers like TikTok instead of clientId) (optional) +- `redirectURI`: Custom redirect URI for the OAuth callback (optional) +- `scope`: Additional OAuth scopes to request (optional) +- `mapProfileToUser`: Custom function to map the provider profile to a user (optional) +- `disableSignUp`: Disable sign up for new users (optional) +- `disableImplicitSignUp`: Disable implicit sign up for new users (optional) +- `overrideUserInfoOnSignIn`: Override user info with provider user info on sign in (optional) +- `prompt`: The prompt to use for the authorization code request (`"select_account"`, `"consent"`, `"login"`, `"none"`, `"select_account consent"`) (optional) +- `responseMode`: The response mode to use (`"query"`, `"form_post"`) (optional) +- `getUserInfo`: Custom function to get user info from the provider (optional) +- `refreshAccessToken`: Custom function to refresh a token (optional) +- `verifyIdToken`: Custom function to verify the ID token (optional) +- `disableIdTokenSignIn`: Disable sign in with ID token sent from the client (optional) +- `disableDefaultScope`: Disable the provider's default scopes (optional) +- `authorizationEndpoint`: Custom authorization endpoint URL (optional) + ## `plugins` List of Better Auth plugins. diff --git a/packages/core/src/oauth2/create-authorization-url.ts b/packages/core/src/oauth2/create-authorization-url.ts index 919c30d5a8..a02d7ac477 100644 --- a/packages/core/src/oauth2/create-authorization-url.ts +++ b/packages/core/src/oauth2/create-authorization-url.ts @@ -40,7 +40,7 @@ export async function createAuthorizationURL({ additionalParams?: Record | undefined; scopeJoiner?: string | undefined; }) { - const url = new URL(authorizationEndpoint); + const url = new URL(options.authorizationEndpoint || authorizationEndpoint); url.searchParams.set("response_type", responseType || "code"); const primaryClientId = Array.isArray(options.clientId) ? options.clientId[0] diff --git a/packages/core/src/oauth2/oauth-provider.ts b/packages/core/src/oauth2/oauth-provider.ts index 36b246973c..2e57de6796 100644 --- a/packages/core/src/oauth2/oauth-provider.ts +++ b/packages/core/src/oauth2/oauth-provider.ts @@ -119,6 +119,12 @@ export type ProviderOptions = any> = { * whitelisted in the provider's dashboard. */ redirectURI?: string | undefined; + /** + * Custom authorization endpoint URL. + * Use this to override the default authorization endpoint of the provider. + * Useful for testing with local OAuth servers or using sandbox environments. + */ + authorizationEndpoint?: string | undefined; /** * The client key of your application * Tiktok Social Provider uses this field instead of clientId diff --git a/test/unit/oauth/index.spec.ts b/test/unit/oauth/index.spec.ts index 0390d47881..69ee6e711d 100644 --- a/test/unit/oauth/index.spec.ts +++ b/test/unit/oauth/index.spec.ts @@ -139,3 +139,32 @@ test("should login with google successfully", async () => { invitedBy: "user-123", }); }); + +test("should use custom authorizationEndpoint when provided", async () => { + const customAuthEndpoint = "http://localhost:8080/custom-oauth/authorize"; + + const { client } = await getTestInstance({ + secret: DEFAULT_SECRET, + socialProviders: { + google: { + clientId: "test-client-id", + clientSecret: "test-client-secret", + authorizationEndpoint: customAuthEndpoint, + }, + }, + }); + + const signInRes = await client.signIn.social({ + provider: "google", + callbackURL: "/dashboard", + }); + + expect(signInRes.data).toMatchObject({ + url: expect.stringContaining(customAuthEndpoint), + redirect: true, + }); + + // Verify it uses custom endpoint instead of default google.com + expect(signInRes.data?.url).not.toContain("accounts.google.com"); + expect(signInRes.data?.url).toContain("localhost:8080"); +}); From 1dcd9d2259c8925819abd5a34b1e6d87906a6b51 Mon Sep 17 00:00:00 2001 From: Maxwell <145994855+ping-maxwell@users.noreply.github.com> Date: Tue, 13 Jan 2026 03:52:06 +1000 Subject: [PATCH 11/39] fix(anonymous): define delete-anonymous-user path method (#7296) --- packages/better-auth/src/plugins/anonymous/client.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/better-auth/src/plugins/anonymous/client.ts b/packages/better-auth/src/plugins/anonymous/client.ts index b92d9df6a7..6d012336f9 100644 --- a/packages/better-auth/src/plugins/anonymous/client.ts +++ b/packages/better-auth/src/plugins/anonymous/client.ts @@ -8,6 +8,7 @@ export const anonymousClient = () => { $InferServerPlugin: {} as ReturnType, pathMethods: { "/sign-in/anonymous": "POST", + "/delete-anonymous-user": "POST", }, atomListeners: [ { From 82be02b205f5785985a313e43677b4d448220617 Mon Sep 17 00:00:00 2001 From: Jonathan Samines Date: Mon, 12 Jan 2026 11:56:05 -0600 Subject: [PATCH 12/39] chore: fix filter server api type (#7294) --- packages/better-auth/src/types/api.ts | 19 +++++-------------- packages/better-auth/src/types/types.test.ts | 14 ++++++++++++-- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/packages/better-auth/src/types/api.ts b/packages/better-auth/src/types/api.ts index cfcbb6288a..f4b86e0f58 100644 --- a/packages/better-auth/src/types/api.ts +++ b/packages/better-auth/src/types/api.ts @@ -6,25 +6,16 @@ export type FilteredAPI = Omit< API extends { [key in infer K]: Endpoint } ? K extends string ? K extends "getSession" - ? K - : API[K]["options"]["metadata"] extends { isAction: false } + ? never + : API[K]["options"]["metadata"] extends + | { isAction: false } + | { scope: "http" } ? K : never : never : never >; -export type FilterActions = Omit< - API, - API extends { [key in infer K]: Endpoint } - ? K extends string - ? API[K]["options"]["metadata"] extends { isAction: false } - ? K - : never - : never - : never ->; - export type InferSessionAPI = API extends { [key: string]: infer E; } @@ -59,4 +50,4 @@ export type InferSessionAPI = API extends { > : never; -export type InferAPI = InferSessionAPI & API; +export type InferAPI = InferSessionAPI & FilteredAPI; diff --git a/packages/better-auth/src/types/types.test.ts b/packages/better-auth/src/types/types.test.ts index 845b169eb2..a37103ebe9 100644 --- a/packages/better-auth/src/types/types.test.ts +++ b/packages/better-auth/src/types/types.test.ts @@ -76,14 +76,24 @@ describe("general types", async (it) => { }, async () => "ok", ), + testNonAction: createAuthEndpoint( + "/test-non-action", + { + method: "GET", + metadata: { + isAction: false, + }, + }, + async () => "ok", + ), }, }, ], }); - expectTypeOf().toHaveProperty("testServerScoped"); expectTypeOf().toHaveProperty("testVirtual"); - expectTypeOf().not.toHaveProperty("testHttpScoped"); + expectTypeOf().not.toHaveProperty("testHTTPScoped"); + expectTypeOf().not.toHaveProperty("testNonAction"); }); it("should infer additional fields from plugins", async () => { From 7ab73b1c083d4452141b85510382c2ca67cd34c2 Mon Sep 17 00:00:00 2001 From: Alex Yang Date: Mon, 12 Jan 2026 10:57:51 -0800 Subject: [PATCH 13/39] refactor(core): split utils into small files (#7288) --- knip.jsonc | 5 ++++- .../better-auth/src/adapters/create-test-suite.ts | 2 +- packages/better-auth/src/adapters/test.ts | 2 +- .../better-auth/src/api/middlewares/origin-check.ts | 2 +- packages/better-auth/src/api/rate-limiter/index.ts | 2 +- packages/better-auth/src/api/routes/callback.ts | 2 +- packages/better-auth/src/api/routes/password.ts | 2 +- packages/better-auth/src/api/routes/session.ts | 2 +- packages/better-auth/src/client/lynx/index.ts | 2 +- packages/better-auth/src/client/react/index.ts | 2 +- packages/better-auth/src/client/solid/index.ts | 2 +- packages/better-auth/src/client/svelte/index.ts | 2 +- packages/better-auth/src/client/vanilla.ts | 2 +- packages/better-auth/src/client/vue/index.ts | 2 +- packages/better-auth/src/context/create-context.ts | 4 ++-- packages/better-auth/src/cookies/index.ts | 2 +- packages/better-auth/src/cookies/session-store.ts | 2 +- packages/better-auth/src/db/internal-adapter.test.ts | 2 +- packages/better-auth/src/db/internal-adapter.ts | 3 ++- packages/better-auth/src/db/secondary-storage.test.ts | 2 +- packages/better-auth/src/index.ts | 4 +++- packages/better-auth/src/plugins/admin/error-codes.ts | 2 +- .../better-auth/src/plugins/anonymous/error-codes.ts | 2 +- packages/better-auth/src/plugins/anonymous/index.ts | 2 +- packages/better-auth/src/plugins/api-key/adapter.ts | 2 +- .../better-auth/src/plugins/api-key/error-codes.ts | 2 +- .../src/plugins/api-key/routes/create-api-key.ts | 4 ++-- .../src/plugins/api-key/routes/get-api-key.ts | 2 +- .../src/plugins/api-key/routes/list-api-keys.ts | 2 +- .../src/plugins/api-key/routes/update-api-key.ts | 2 +- .../src/plugins/api-key/routes/verify-api-key.ts | 2 +- .../better-auth/src/plugins/captcha/error-codes.ts | 2 +- .../src/plugins/device-authorization/error-codes.ts | 2 +- .../better-auth/src/plugins/email-otp/error-codes.ts | 2 +- .../src/plugins/generic-oauth/error-codes.ts | 2 +- .../better-auth/src/plugins/haveibeenpwned/index.ts | 2 +- packages/better-auth/src/plugins/mcp/index.ts | 2 +- .../src/plugins/multi-session/error-codes.ts | 2 +- .../src/plugins/organization/error-codes.ts | 2 +- .../better-auth/src/plugins/organization/schema.ts | 2 +- .../src/plugins/phone-number/error-codes.ts | 2 +- .../src/plugins/two-factor/backup-codes/index.ts | 2 +- .../better-auth/src/plugins/two-factor/error-code.ts | 2 +- .../better-auth/src/plugins/username/error-codes.ts | 2 +- packages/better-auth/src/utils/index.ts | 1 - packages/cli/src/generators/prisma.ts | 2 +- packages/core/package.json | 11 +++++++---- packages/core/src/db/adapter/get-id-field.ts | 2 +- packages/core/src/error/codes.ts | 2 +- packages/core/src/utils/index.ts | 5 ----- packages/core/tsdown.config.ts | 4 +++- packages/passkey/src/error-codes.ts | 2 +- packages/stripe/src/error-codes.ts | 2 +- 53 files changed, 67 insertions(+), 62 deletions(-) delete mode 100644 packages/core/src/utils/index.ts diff --git a/knip.jsonc b/knip.jsonc index afd25873d5..189fc5be43 100644 --- a/knip.jsonc +++ b/knip.jsonc @@ -49,7 +49,10 @@ "ignoreDependencies": [ // type-only dependencies "kysely!", - "nanostores!" + "nanostores!", + + // implicit test dependencies + "vitest" ] }, "packages/cli": { diff --git a/packages/better-auth/src/adapters/create-test-suite.ts b/packages/better-auth/src/adapters/create-test-suite.ts index f260e066af..e8980f6df2 100644 --- a/packages/better-auth/src/adapters/create-test-suite.ts +++ b/packages/better-auth/src/adapters/create-test-suite.ts @@ -7,7 +7,7 @@ import { initGetDefaultModelName, } from "@better-auth/core/db/adapter"; import { TTY_COLORS } from "@better-auth/core/env"; -import { generateId } from "@better-auth/core/utils"; +import { generateId } from "@better-auth/core/utils/id"; import { test } from "vitest"; import { betterAuth } from "../auth"; import type { Account, Session, User, Verification } from "../types"; diff --git a/packages/better-auth/src/adapters/test.ts b/packages/better-auth/src/adapters/test.ts index 41a2e096a7..b5e726ddc2 100644 --- a/packages/better-auth/src/adapters/test.ts +++ b/packages/better-auth/src/adapters/test.ts @@ -1,8 +1,8 @@ import type { Awaitable, BetterAuthOptions } from "@better-auth/core"; import type { DBAdapter } from "@better-auth/core/db/adapter"; +import { generateId } from "@better-auth/core/utils/id"; import { beforeAll, describe, expect, test } from "vitest"; import type { User } from "../types"; -import { generateId } from "../utils"; interface AdapterTestOptions { getAdapter: ( diff --git a/packages/better-auth/src/api/middlewares/origin-check.ts b/packages/better-auth/src/api/middlewares/origin-check.ts index 05d3ddf241..c9f54e66cd 100644 --- a/packages/better-auth/src/api/middlewares/origin-check.ts +++ b/packages/better-auth/src/api/middlewares/origin-check.ts @@ -1,7 +1,7 @@ import type { GenericEndpointContext } from "@better-auth/core"; import { createAuthMiddleware } from "@better-auth/core/api"; import { APIError, BASE_ERROR_CODES } from "@better-auth/core/error"; -import { deprecate } from "@better-auth/core/utils"; +import { deprecate } from "@better-auth/core/utils/deprecate"; import { matchesOriginPattern } from "../../auth/trusted-origins"; /** diff --git a/packages/better-auth/src/api/rate-limiter/index.ts b/packages/better-auth/src/api/rate-limiter/index.ts index f57be41998..b9c92b5b9c 100644 --- a/packages/better-auth/src/api/rate-limiter/index.ts +++ b/packages/better-auth/src/api/rate-limiter/index.ts @@ -1,5 +1,5 @@ import type { AuthContext } from "@better-auth/core"; -import { safeJSONParse } from "@better-auth/core/utils"; +import { safeJSONParse } from "@better-auth/core/utils/json"; import type { RateLimit } from "../../types"; import { getIp } from "../../utils/get-request-ip"; import { wildcardMatch } from "../../utils/wildcard"; diff --git a/packages/better-auth/src/api/routes/callback.ts b/packages/better-auth/src/api/routes/callback.ts index 43ab8404f6..84e7b34151 100644 --- a/packages/better-auth/src/api/routes/callback.ts +++ b/packages/better-auth/src/api/routes/callback.ts @@ -1,6 +1,6 @@ import { createAuthEndpoint } from "@better-auth/core/api"; import type { OAuth2Tokens } from "@better-auth/core/oauth2"; -import { safeJSONParse } from "@better-auth/core/utils"; +import { safeJSONParse } from "@better-auth/core/utils/json"; import * as z from "zod"; import { setSessionCookie } from "../../cookies"; import { handleOAuthUserInfo } from "../../oauth2/link-account"; diff --git a/packages/better-auth/src/api/routes/password.ts b/packages/better-auth/src/api/routes/password.ts index dc3104e29c..b42a79437c 100644 --- a/packages/better-auth/src/api/routes/password.ts +++ b/packages/better-auth/src/api/routes/password.ts @@ -1,8 +1,8 @@ import type { AuthContext } from "@better-auth/core"; import { createAuthEndpoint } from "@better-auth/core/api"; import { APIError, BASE_ERROR_CODES } from "@better-auth/core/error"; +import { generateId } from "@better-auth/core/utils/id"; import * as z from "zod"; -import { generateId } from "../../utils"; import { getDate } from "../../utils/date"; import { validatePassword } from "../../utils/password"; import { originCheck } from "../middlewares"; diff --git a/packages/better-auth/src/api/routes/session.ts b/packages/better-auth/src/api/routes/session.ts index e657e71ec0..56ab298730 100644 --- a/packages/better-auth/src/api/routes/session.ts +++ b/packages/better-auth/src/api/routes/session.ts @@ -7,7 +7,7 @@ import { createAuthMiddleware, } from "@better-auth/core/api"; import { APIError, BASE_ERROR_CODES } from "@better-auth/core/error"; -import { safeJSONParse } from "@better-auth/core/utils"; +import { safeJSONParse } from "@better-auth/core/utils/json"; import { base64Url } from "@better-auth/utils/base64"; import { binary } from "@better-auth/utils/binary"; import { createHMAC } from "@better-auth/utils/hmac"; diff --git a/packages/better-auth/src/client/lynx/index.ts b/packages/better-auth/src/client/lynx/index.ts index a6e70ff679..3595009fb6 100644 --- a/packages/better-auth/src/client/lynx/index.ts +++ b/packages/better-auth/src/client/lynx/index.ts @@ -3,7 +3,7 @@ import type { BetterAuthClientPlugin, } from "@better-auth/core"; import type { BASE_ERROR_CODES } from "@better-auth/core/error"; -import { capitalizeFirstLetter } from "@better-auth/core/utils"; +import { capitalizeFirstLetter } from "@better-auth/core/utils/string"; import type { BetterFetchError, BetterFetchResponse, diff --git a/packages/better-auth/src/client/react/index.ts b/packages/better-auth/src/client/react/index.ts index 80b0b76547..cebc904eea 100644 --- a/packages/better-auth/src/client/react/index.ts +++ b/packages/better-auth/src/client/react/index.ts @@ -3,7 +3,7 @@ import type { BetterAuthClientPlugin, } from "@better-auth/core"; import type { BASE_ERROR_CODES } from "@better-auth/core/error"; -import { capitalizeFirstLetter } from "@better-auth/core/utils"; +import { capitalizeFirstLetter } from "@better-auth/core/utils/string"; import type { BetterFetchError, BetterFetchResponse, diff --git a/packages/better-auth/src/client/solid/index.ts b/packages/better-auth/src/client/solid/index.ts index b3655f0a81..648e0a31f4 100644 --- a/packages/better-auth/src/client/solid/index.ts +++ b/packages/better-auth/src/client/solid/index.ts @@ -3,7 +3,7 @@ import type { BetterAuthClientPlugin, } from "@better-auth/core"; import type { BASE_ERROR_CODES } from "@better-auth/core/error"; -import { capitalizeFirstLetter } from "@better-auth/core/utils"; +import { capitalizeFirstLetter } from "@better-auth/core/utils/string"; import type { BetterFetchError, BetterFetchResponse, diff --git a/packages/better-auth/src/client/svelte/index.ts b/packages/better-auth/src/client/svelte/index.ts index ea3cdc2ac3..24ae8ccbf2 100644 --- a/packages/better-auth/src/client/svelte/index.ts +++ b/packages/better-auth/src/client/svelte/index.ts @@ -3,7 +3,7 @@ import type { BetterAuthClientPlugin, } from "@better-auth/core"; import type { BASE_ERROR_CODES } from "@better-auth/core/error"; -import { capitalizeFirstLetter } from "@better-auth/core/utils"; +import { capitalizeFirstLetter } from "@better-auth/core/utils/string"; import type { BetterFetchError, BetterFetchResponse, diff --git a/packages/better-auth/src/client/vanilla.ts b/packages/better-auth/src/client/vanilla.ts index e52000bbb8..507336af55 100644 --- a/packages/better-auth/src/client/vanilla.ts +++ b/packages/better-auth/src/client/vanilla.ts @@ -3,7 +3,7 @@ import type { BetterAuthClientPlugin, } from "@better-auth/core"; import type { BASE_ERROR_CODES } from "@better-auth/core/error"; -import { capitalizeFirstLetter } from "@better-auth/core/utils"; +import { capitalizeFirstLetter } from "@better-auth/core/utils/string"; import type { BetterFetchError, BetterFetchResponse, diff --git a/packages/better-auth/src/client/vue/index.ts b/packages/better-auth/src/client/vue/index.ts index 8260e12abf..bcdb2be311 100644 --- a/packages/better-auth/src/client/vue/index.ts +++ b/packages/better-auth/src/client/vue/index.ts @@ -3,7 +3,7 @@ import type { BetterAuthClientPlugin, } from "@better-auth/core"; import type { BASE_ERROR_CODES } from "@better-auth/core/error"; -import { capitalizeFirstLetter } from "@better-auth/core/utils"; +import { capitalizeFirstLetter } from "@better-auth/core/utils/string"; import type { BetterFetchError, BetterFetchResponse, diff --git a/packages/better-auth/src/context/create-context.ts b/packages/better-auth/src/context/create-context.ts index db7c8ce29c..13eb6027e9 100644 --- a/packages/better-auth/src/context/create-context.ts +++ b/packages/better-auth/src/context/create-context.ts @@ -6,7 +6,8 @@ import { BetterAuthError } from "@better-auth/core/error"; import type { OAuthProvider } from "@better-auth/core/oauth2"; import type { SocialProviders } from "@better-auth/core/social-providers"; import { socialProviders } from "@better-auth/core/social-providers"; -import { deprecate } from "@better-auth/core/utils"; +import { deprecate } from "@better-auth/core/utils/deprecate"; +import { generateId } from "@better-auth/core/utils/id"; import { createTelemetry } from "@better-auth/telemetry"; import defu from "defu"; import type { Entries } from "type-fest"; @@ -15,7 +16,6 @@ import { matchesOriginPattern } from "../auth/trusted-origins"; import { createCookieGetter, getCookies } from "../cookies"; import { hashPassword, verifyPassword } from "../crypto/password"; import { createInternalAdapter } from "../db/internal-adapter"; -import { generateId } from "../utils"; import { DEFAULT_SECRET } from "../utils/constants"; import { isPromise } from "../utils/is-promise"; import { checkPassword } from "../utils/password"; diff --git a/packages/better-auth/src/cookies/index.ts b/packages/better-auth/src/cookies/index.ts index 84b08f245d..10b2d5d797 100644 --- a/packages/better-auth/src/cookies/index.ts +++ b/packages/better-auth/src/cookies/index.ts @@ -5,7 +5,7 @@ import type { } from "@better-auth/core"; import { env, isProduction } from "@better-auth/core/env"; import { BetterAuthError } from "@better-auth/core/error"; -import { safeJSONParse } from "@better-auth/core/utils"; +import { safeJSONParse } from "@better-auth/core/utils/json"; import { base64Url } from "@better-auth/utils/base64"; import { binary } from "@better-auth/utils/binary"; import { createHMAC } from "@better-auth/utils/hmac"; diff --git a/packages/better-auth/src/cookies/session-store.ts b/packages/better-auth/src/cookies/session-store.ts index f519f3ecc2..c521913372 100644 --- a/packages/better-auth/src/cookies/session-store.ts +++ b/packages/better-auth/src/cookies/session-store.ts @@ -1,7 +1,7 @@ import type { GenericEndpointContext } from "@better-auth/core"; import type { Account } from "@better-auth/core/db"; import type { InternalLogger } from "@better-auth/core/env"; -import { safeJSONParse } from "@better-auth/core/utils"; +import { safeJSONParse } from "@better-auth/core/utils/json"; import type { CookieOptions } from "better-call"; import * as z from "zod"; import { symmetricDecodeJWT, symmetricEncodeJWT } from "../crypto"; diff --git a/packages/better-auth/src/db/internal-adapter.test.ts b/packages/better-auth/src/db/internal-adapter.test.ts index 41914880cd..2795a2a21e 100644 --- a/packages/better-auth/src/db/internal-adapter.test.ts +++ b/packages/better-auth/src/db/internal-adapter.test.ts @@ -1,5 +1,5 @@ import type { GenericEndpointContext } from "@better-auth/core"; -import { safeJSONParse } from "@better-auth/core/utils"; +import { safeJSONParse } from "@better-auth/core/utils/json"; import Database from "better-sqlite3"; import { Kysely, SqliteDialect } from "kysely"; import { afterEach, beforeAll, describe, expect, it, vi } from "vitest"; diff --git a/packages/better-auth/src/db/internal-adapter.ts b/packages/better-auth/src/db/internal-adapter.ts index 8e5e18d940..84766e5f05 100644 --- a/packages/better-auth/src/db/internal-adapter.ts +++ b/packages/better-auth/src/db/internal-adapter.ts @@ -10,7 +10,8 @@ import { } from "@better-auth/core/context"; import type { DBAdapter, Where } from "@better-auth/core/db/adapter"; import type { InternalLogger } from "@better-auth/core/env"; -import { generateId, safeJSONParse } from "@better-auth/core/utils"; +import { generateId } from "@better-auth/core/utils/id"; +import { safeJSONParse } from "@better-auth/core/utils/json"; import type { Account, Session, User, Verification } from "../types"; import { getDate } from "../utils/date"; import { getIp } from "../utils/get-request-ip"; diff --git a/packages/better-auth/src/db/secondary-storage.test.ts b/packages/better-auth/src/db/secondary-storage.test.ts index cfc6f545b4..a87a75b155 100644 --- a/packages/better-auth/src/db/secondary-storage.test.ts +++ b/packages/better-auth/src/db/secondary-storage.test.ts @@ -1,4 +1,4 @@ -import { safeJSONParse } from "@better-auth/core/utils"; +import { safeJSONParse } from "@better-auth/core/utils/json"; import { beforeEach, describe, expect, it } from "vitest"; import { getTestInstance } from "../test-utils/test-instance"; diff --git a/packages/better-auth/src/index.ts b/packages/better-auth/src/index.ts index 8c9df39bee..c91470bc0e 100644 --- a/packages/better-auth/src/index.ts +++ b/packages/better-auth/src/index.ts @@ -6,7 +6,9 @@ export * from "@better-auth/core/db"; export * from "@better-auth/core/env"; export * from "@better-auth/core/error"; export * from "@better-auth/core/oauth2"; -export * from "@better-auth/core/utils"; +export * from "@better-auth/core/utils/error-codes"; +export * from "@better-auth/core/utils/id"; +export * from "@better-auth/core/utils/json"; //#endregion export { betterAuth } from "./auth"; // @ts-expect-error diff --git a/packages/better-auth/src/plugins/admin/error-codes.ts b/packages/better-auth/src/plugins/admin/error-codes.ts index 2b386a5f6e..532360d02c 100644 --- a/packages/better-auth/src/plugins/admin/error-codes.ts +++ b/packages/better-auth/src/plugins/admin/error-codes.ts @@ -1,4 +1,4 @@ -import { defineErrorCodes } from "@better-auth/core/utils"; +import { defineErrorCodes } from "@better-auth/core/utils/error-codes"; export const ADMIN_ERROR_CODES = defineErrorCodes({ FAILED_TO_CREATE_USER: "Failed to create user", diff --git a/packages/better-auth/src/plugins/anonymous/error-codes.ts b/packages/better-auth/src/plugins/anonymous/error-codes.ts index 8c1748ca1e..3118f6e25d 100644 --- a/packages/better-auth/src/plugins/anonymous/error-codes.ts +++ b/packages/better-auth/src/plugins/anonymous/error-codes.ts @@ -1,4 +1,4 @@ -import { defineErrorCodes } from "@better-auth/core/utils"; +import { defineErrorCodes } from "@better-auth/core/utils/error-codes"; export const ANONYMOUS_ERROR_CODES = defineErrorCodes({ INVALID_EMAIL_FORMAT: "Email was not generated in a valid format", diff --git a/packages/better-auth/src/plugins/anonymous/index.ts b/packages/better-auth/src/plugins/anonymous/index.ts index aef8e405da..b70da2b105 100644 --- a/packages/better-auth/src/plugins/anonymous/index.ts +++ b/packages/better-auth/src/plugins/anonymous/index.ts @@ -3,7 +3,7 @@ import { createAuthEndpoint, createAuthMiddleware, } from "@better-auth/core/api"; -import { generateId } from "@better-auth/core/utils"; +import { generateId } from "@better-auth/core/utils/id"; import * as z from "zod"; import { APIError, diff --git a/packages/better-auth/src/plugins/api-key/adapter.ts b/packages/better-auth/src/plugins/api-key/adapter.ts index dfd0803500..3fbc32673f 100644 --- a/packages/better-auth/src/plugins/api-key/adapter.ts +++ b/packages/better-auth/src/plugins/api-key/adapter.ts @@ -1,6 +1,6 @@ import type { GenericEndpointContext } from "@better-auth/core"; import type { SecondaryStorage } from "@better-auth/core/db"; -import { safeJSONParse } from "@better-auth/core/utils"; +import { safeJSONParse } from "@better-auth/core/utils/json"; import type { PredefinedApiKeyOptions } from "./routes"; import type { ApiKey } from "./types"; diff --git a/packages/better-auth/src/plugins/api-key/error-codes.ts b/packages/better-auth/src/plugins/api-key/error-codes.ts index 9c5a37acda..a40bea1b4a 100644 --- a/packages/better-auth/src/plugins/api-key/error-codes.ts +++ b/packages/better-auth/src/plugins/api-key/error-codes.ts @@ -1,4 +1,4 @@ -import { defineErrorCodes } from "@better-auth/core/utils"; +import { defineErrorCodes } from "@better-auth/core/utils/error-codes"; export const API_KEY_ERROR_CODES = defineErrorCodes({ INVALID_METADATA_TYPE: "metadata must be an object or undefined", diff --git a/packages/better-auth/src/plugins/api-key/routes/create-api-key.ts b/packages/better-auth/src/plugins/api-key/routes/create-api-key.ts index c99e207311..bcd14d1550 100644 --- a/packages/better-auth/src/plugins/api-key/routes/create-api-key.ts +++ b/packages/better-auth/src/plugins/api-key/routes/create-api-key.ts @@ -1,10 +1,10 @@ import type { AuthContext, Awaitable } from "@better-auth/core"; import { createAuthEndpoint } from "@better-auth/core/api"; import { APIError } from "@better-auth/core/error"; -import { safeJSONParse } from "@better-auth/core/utils"; +import { generateId } from "@better-auth/core/utils/id"; +import { safeJSONParse } from "@better-auth/core/utils/json"; import * as z from "zod"; import { getSessionFromCtx } from "../../../api"; -import { generateId } from "../../../utils"; import { getDate } from "../../../utils/date"; import { API_KEY_TABLE_NAME, API_KEY_ERROR_CODES as ERROR_CODES } from ".."; import { defaultKeyHasher } from "../"; diff --git a/packages/better-auth/src/plugins/api-key/routes/get-api-key.ts b/packages/better-auth/src/plugins/api-key/routes/get-api-key.ts index 559be4c776..e06c1155a8 100644 --- a/packages/better-auth/src/plugins/api-key/routes/get-api-key.ts +++ b/packages/better-auth/src/plugins/api-key/routes/get-api-key.ts @@ -1,7 +1,7 @@ import type { AuthContext } from "@better-auth/core"; import { createAuthEndpoint } from "@better-auth/core/api"; import { APIError } from "@better-auth/core/error"; -import { safeJSONParse } from "@better-auth/core/utils"; +import { safeJSONParse } from "@better-auth/core/utils/json"; import * as z from "zod"; import { sessionMiddleware } from "../../../api"; import { API_KEY_ERROR_CODES as ERROR_CODES } from ".."; diff --git a/packages/better-auth/src/plugins/api-key/routes/list-api-keys.ts b/packages/better-auth/src/plugins/api-key/routes/list-api-keys.ts index c12ded09f4..4eef32f0c9 100644 --- a/packages/better-auth/src/plugins/api-key/routes/list-api-keys.ts +++ b/packages/better-auth/src/plugins/api-key/routes/list-api-keys.ts @@ -1,6 +1,6 @@ import type { AuthContext } from "@better-auth/core"; import { createAuthEndpoint } from "@better-auth/core/api"; -import { safeJSONParse } from "@better-auth/core/utils"; +import { safeJSONParse } from "@better-auth/core/utils/json"; import { sessionMiddleware } from "../../../api"; import { batchMigrateLegacyMetadata, diff --git a/packages/better-auth/src/plugins/api-key/routes/update-api-key.ts b/packages/better-auth/src/plugins/api-key/routes/update-api-key.ts index aa6739c463..1cc006569c 100644 --- a/packages/better-auth/src/plugins/api-key/routes/update-api-key.ts +++ b/packages/better-auth/src/plugins/api-key/routes/update-api-key.ts @@ -1,7 +1,7 @@ import type { AuthContext } from "@better-auth/core"; import { createAuthEndpoint } from "@better-auth/core/api"; import { APIError } from "@better-auth/core/error"; -import { safeJSONParse } from "@better-auth/core/utils"; +import { safeJSONParse } from "@better-auth/core/utils/json"; import * as z from "zod"; import { getSessionFromCtx } from "../../../api"; import { getDate } from "../../../utils/date"; diff --git a/packages/better-auth/src/plugins/api-key/routes/verify-api-key.ts b/packages/better-auth/src/plugins/api-key/routes/verify-api-key.ts index 7993ddcf7c..558931bbc9 100644 --- a/packages/better-auth/src/plugins/api-key/routes/verify-api-key.ts +++ b/packages/better-auth/src/plugins/api-key/routes/verify-api-key.ts @@ -1,7 +1,7 @@ import type { AuthContext, GenericEndpointContext } from "@better-auth/core"; import { createAuthEndpoint } from "@better-auth/core/api"; import { APIError } from "@better-auth/core/error"; -import { safeJSONParse } from "@better-auth/core/utils"; +import { safeJSONParse } from "@better-auth/core/utils/json"; import * as z from "zod"; import { isAPIError } from "../../../utils/is-api-error"; import { role } from "../../access"; diff --git a/packages/better-auth/src/plugins/captcha/error-codes.ts b/packages/better-auth/src/plugins/captcha/error-codes.ts index ea5aae2cc5..acc75bf842 100644 --- a/packages/better-auth/src/plugins/captcha/error-codes.ts +++ b/packages/better-auth/src/plugins/captcha/error-codes.ts @@ -1,5 +1,5 @@ // These error codes are returned by the API -import { defineErrorCodes } from "@better-auth/core/utils"; +import { defineErrorCodes } from "@better-auth/core/utils/error-codes"; export const EXTERNAL_ERROR_CODES = defineErrorCodes({ VERIFICATION_FAILED: "Captcha verification failed", diff --git a/packages/better-auth/src/plugins/device-authorization/error-codes.ts b/packages/better-auth/src/plugins/device-authorization/error-codes.ts index af432a27d1..39cdf50fac 100644 --- a/packages/better-auth/src/plugins/device-authorization/error-codes.ts +++ b/packages/better-auth/src/plugins/device-authorization/error-codes.ts @@ -1,4 +1,4 @@ -import { defineErrorCodes } from "@better-auth/core/utils"; +import { defineErrorCodes } from "@better-auth/core/utils/error-codes"; export const DEVICE_AUTHORIZATION_ERROR_CODES = defineErrorCodes({ INVALID_DEVICE_CODE: "Invalid device code", diff --git a/packages/better-auth/src/plugins/email-otp/error-codes.ts b/packages/better-auth/src/plugins/email-otp/error-codes.ts index f4a538133e..24efa6d646 100644 --- a/packages/better-auth/src/plugins/email-otp/error-codes.ts +++ b/packages/better-auth/src/plugins/email-otp/error-codes.ts @@ -1,4 +1,4 @@ -import { defineErrorCodes } from "@better-auth/core/utils"; +import { defineErrorCodes } from "@better-auth/core/utils/error-codes"; export const EMAIL_OTP_ERROR_CODES = defineErrorCodes({ OTP_EXPIRED: "OTP expired", diff --git a/packages/better-auth/src/plugins/generic-oauth/error-codes.ts b/packages/better-auth/src/plugins/generic-oauth/error-codes.ts index b0bf720a30..d2dd714f97 100644 --- a/packages/better-auth/src/plugins/generic-oauth/error-codes.ts +++ b/packages/better-auth/src/plugins/generic-oauth/error-codes.ts @@ -1,4 +1,4 @@ -import { defineErrorCodes } from "@better-auth/core/utils"; +import { defineErrorCodes } from "@better-auth/core/utils/error-codes"; export const GENERIC_OAUTH_ERROR_CODES = defineErrorCodes({ INVALID_OAUTH_CONFIGURATION: "Invalid OAuth configuration", diff --git a/packages/better-auth/src/plugins/haveibeenpwned/index.ts b/packages/better-auth/src/plugins/haveibeenpwned/index.ts index 056a8d78c7..44823ab7f1 100644 --- a/packages/better-auth/src/plugins/haveibeenpwned/index.ts +++ b/packages/better-auth/src/plugins/haveibeenpwned/index.ts @@ -1,6 +1,6 @@ import type { BetterAuthPlugin } from "@better-auth/core"; import { getCurrentAuthContext } from "@better-auth/core/context"; -import { defineErrorCodes } from "@better-auth/core/utils"; +import { defineErrorCodes } from "@better-auth/core/utils/error-codes"; import { createHash } from "@better-auth/utils/hash"; import { betterFetch } from "@better-fetch/fetch"; import { APIError } from "../../api"; diff --git a/packages/better-auth/src/plugins/mcp/index.ts b/packages/better-auth/src/plugins/mcp/index.ts index d8761e7b4e..91771c7632 100644 --- a/packages/better-auth/src/plugins/mcp/index.ts +++ b/packages/better-auth/src/plugins/mcp/index.ts @@ -8,7 +8,7 @@ import { createAuthMiddleware, } from "@better-auth/core/api"; import { isProduction, logger } from "@better-auth/core/env"; -import { safeJSONParse } from "@better-auth/core/utils"; +import { safeJSONParse } from "@better-auth/core/utils/json"; import { getWebcryptoSubtle } from "@better-auth/utils"; import { base64 } from "@better-auth/utils/base64"; import { createHash } from "@better-auth/utils/hash"; diff --git a/packages/better-auth/src/plugins/multi-session/error-codes.ts b/packages/better-auth/src/plugins/multi-session/error-codes.ts index 5d5e2d3590..c603668d17 100644 --- a/packages/better-auth/src/plugins/multi-session/error-codes.ts +++ b/packages/better-auth/src/plugins/multi-session/error-codes.ts @@ -1,4 +1,4 @@ -import { defineErrorCodes } from "@better-auth/core/utils"; +import { defineErrorCodes } from "@better-auth/core/utils/error-codes"; export const MULTI_SESSION_ERROR_CODES = defineErrorCodes({ INVALID_SESSION_TOKEN: "Invalid session token", diff --git a/packages/better-auth/src/plugins/organization/error-codes.ts b/packages/better-auth/src/plugins/organization/error-codes.ts index 3c1bafe61d..22c4514079 100644 --- a/packages/better-auth/src/plugins/organization/error-codes.ts +++ b/packages/better-auth/src/plugins/organization/error-codes.ts @@ -1,4 +1,4 @@ -import { defineErrorCodes } from "@better-auth/core/utils"; +import { defineErrorCodes } from "@better-auth/core/utils/error-codes"; export const ORGANIZATION_ERROR_CODES = defineErrorCodes({ YOU_ARE_NOT_ALLOWED_TO_CREATE_A_NEW_ORGANIZATION: diff --git a/packages/better-auth/src/plugins/organization/schema.ts b/packages/better-auth/src/plugins/organization/schema.ts index 029d700d94..6520789576 100644 --- a/packages/better-auth/src/plugins/organization/schema.ts +++ b/packages/better-auth/src/plugins/organization/schema.ts @@ -1,8 +1,8 @@ import type { BetterAuthPluginDBSchema } from "@better-auth/core/db"; +import { generateId } from "@better-auth/core/utils/id"; import type { Prettify } from "better-call"; import * as z from "zod"; import type { InferAdditionalFieldsFromPluginOptions } from "../../db"; -import { generateId } from "../../utils"; import type { OrganizationOptions } from "./types"; type InferSchema< diff --git a/packages/better-auth/src/plugins/phone-number/error-codes.ts b/packages/better-auth/src/plugins/phone-number/error-codes.ts index 288250d952..223ce63010 100644 --- a/packages/better-auth/src/plugins/phone-number/error-codes.ts +++ b/packages/better-auth/src/plugins/phone-number/error-codes.ts @@ -1,4 +1,4 @@ -import { defineErrorCodes } from "@better-auth/core/utils"; +import { defineErrorCodes } from "@better-auth/core/utils/error-codes"; export const PHONE_NUMBER_ERROR_CODES = defineErrorCodes({ INVALID_PHONE_NUMBER: "Invalid phone number", diff --git a/packages/better-auth/src/plugins/two-factor/backup-codes/index.ts b/packages/better-auth/src/plugins/two-factor/backup-codes/index.ts index bc9df89441..3f8315c060 100644 --- a/packages/better-auth/src/plugins/two-factor/backup-codes/index.ts +++ b/packages/better-auth/src/plugins/two-factor/backup-codes/index.ts @@ -1,6 +1,6 @@ import { createAuthEndpoint } from "@better-auth/core/api"; import { APIError } from "@better-auth/core/error"; -import { safeJSONParse } from "@better-auth/core/utils"; +import { safeJSONParse } from "@better-auth/core/utils/json"; import * as z from "zod"; import { sessionMiddleware } from "../../../api"; import { symmetricDecrypt, symmetricEncrypt } from "../../../crypto"; diff --git a/packages/better-auth/src/plugins/two-factor/error-code.ts b/packages/better-auth/src/plugins/two-factor/error-code.ts index 2aac1caadb..29ee8c3617 100644 --- a/packages/better-auth/src/plugins/two-factor/error-code.ts +++ b/packages/better-auth/src/plugins/two-factor/error-code.ts @@ -1,4 +1,4 @@ -import { defineErrorCodes } from "@better-auth/core/utils"; +import { defineErrorCodes } from "@better-auth/core/utils/error-codes"; export const TWO_FACTOR_ERROR_CODES = defineErrorCodes({ OTP_NOT_ENABLED: "OTP not enabled", diff --git a/packages/better-auth/src/plugins/username/error-codes.ts b/packages/better-auth/src/plugins/username/error-codes.ts index 03454efabd..0a0b376c55 100644 --- a/packages/better-auth/src/plugins/username/error-codes.ts +++ b/packages/better-auth/src/plugins/username/error-codes.ts @@ -1,4 +1,4 @@ -import { defineErrorCodes } from "@better-auth/core/utils"; +import { defineErrorCodes } from "@better-auth/core/utils/error-codes"; export const USERNAME_ERROR_CODES = defineErrorCodes({ INVALID_USERNAME_OR_PASSWORD: "Invalid username or password", diff --git a/packages/better-auth/src/utils/index.ts b/packages/better-auth/src/utils/index.ts index 2c9b571e3d..38232d0c40 100644 --- a/packages/better-auth/src/utils/index.ts +++ b/packages/better-auth/src/utils/index.ts @@ -1,3 +1,2 @@ -export { generateId } from "@better-auth/core/utils"; export * from "../oauth2/state"; export * from "./hide-metadata"; diff --git a/packages/cli/src/generators/prisma.ts b/packages/cli/src/generators/prisma.ts index b508e9720a..6a9d2e534d 100644 --- a/packages/cli/src/generators/prisma.ts +++ b/packages/cli/src/generators/prisma.ts @@ -1,7 +1,7 @@ import { existsSync } from "node:fs"; import fs from "node:fs/promises"; import path from "node:path"; -import { capitalizeFirstLetter } from "@better-auth/core/utils"; +import { capitalizeFirstLetter } from "@better-auth/core/utils/string"; import { produceSchema } from "@mrleebo/prisma-ast"; import { initGetFieldName, initGetModelName } from "better-auth/adapters"; import type { DBFieldType } from "better-auth/db"; diff --git a/packages/core/package.json b/packages/core/package.json index 2fdf840cf4..e4eb000080 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -48,10 +48,10 @@ "types": "./dist/error/index.d.mts", "default": "./dist/error/index.mjs" }, - "./utils": { - "dev-source": "./src/utils/index.ts", - "types": "./dist/utils/index.d.mts", - "default": "./dist/utils/index.mjs" + "./utils/*": { + "dev-source": "./src/utils/*.ts", + "types": "./dist/utils/*.d.mts", + "default": "./dist/utils/*.mjs" }, "./social-providers": { "dev-source": "./src/social-providers/index.ts", @@ -97,6 +97,9 @@ "utils": [ "dist/utils/index.d.mts" ], + "utils/*": [ + "dist/utils/*.d.mts" + ], "social-providers": [ "dist/social-providers/index.d.mts" ], diff --git a/packages/core/src/db/adapter/get-id-field.ts b/packages/core/src/db/adapter/get-id-field.ts index 487fa520a3..522c02332b 100644 --- a/packages/core/src/db/adapter/get-id-field.ts +++ b/packages/core/src/db/adapter/get-id-field.ts @@ -1,6 +1,6 @@ import { logger } from "../../env"; import type { BetterAuthOptions } from "../../types"; -import { generateId as defaultGenerateId } from "../../utils"; +import { generateId as defaultGenerateId } from "../../utils/id"; import type { BetterAuthDBSchema, DBFieldAttribute } from "../type"; import { initGetDefaultModelName } from "./get-default-model-name"; diff --git a/packages/core/src/error/codes.ts b/packages/core/src/error/codes.ts index 1d0f6870d0..f26a6cf137 100644 --- a/packages/core/src/error/codes.ts +++ b/packages/core/src/error/codes.ts @@ -1,4 +1,4 @@ -import { defineErrorCodes } from "../utils"; +import { defineErrorCodes } from "../utils/error-codes"; export const BASE_ERROR_CODES = defineErrorCodes({ USER_NOT_FOUND: "User not found", diff --git a/packages/core/src/utils/index.ts b/packages/core/src/utils/index.ts deleted file mode 100644 index 4b10aec1e2..0000000000 --- a/packages/core/src/utils/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export { deprecate } from "./deprecate"; -export { defineErrorCodes } from "./error-codes"; -export { generateId } from "./id"; -export { safeJSONParse } from "./json"; -export { capitalizeFirstLetter } from "./string"; diff --git a/packages/core/tsdown.config.ts b/packages/core/tsdown.config.ts index 6337f28f36..464c4f00a8 100644 --- a/packages/core/tsdown.config.ts +++ b/packages/core/tsdown.config.ts @@ -14,9 +14,11 @@ export default defineConfig({ "./src/oauth2/index.ts", "./src/api/index.ts", "./src/social-providers/index.ts", - "./src/utils/index.ts", + "./src/utils/*.ts", + "!./src/utils/*.test.ts", "./src/error/index.ts", ], external: ["@better-auth/core/async_hooks"], + unbundle: true, clean: true, }); diff --git a/packages/passkey/src/error-codes.ts b/packages/passkey/src/error-codes.ts index 71ad1ed1f7..bf724ae2d2 100644 --- a/packages/passkey/src/error-codes.ts +++ b/packages/passkey/src/error-codes.ts @@ -1,4 +1,4 @@ -import { defineErrorCodes } from "@better-auth/core/utils"; +import { defineErrorCodes } from "@better-auth/core/utils/error-codes"; export const PASSKEY_ERROR_CODES = defineErrorCodes({ CHALLENGE_NOT_FOUND: "Challenge not found", diff --git a/packages/stripe/src/error-codes.ts b/packages/stripe/src/error-codes.ts index 90ddc4ef24..aed14da4c0 100644 --- a/packages/stripe/src/error-codes.ts +++ b/packages/stripe/src/error-codes.ts @@ -1,4 +1,4 @@ -import { defineErrorCodes } from "@better-auth/core/utils"; +import { defineErrorCodes } from "@better-auth/core/utils/error-codes"; export const STRIPE_ERROR_CODES = defineErrorCodes({ UNAUTHORIZED: "Unauthorized access", From 669dba00c3b94aad865ab35770339f6287ce3b6a Mon Sep 17 00:00:00 2001 From: Alex Yang Date: Mon, 12 Jan 2026 11:20:55 -0800 Subject: [PATCH 14/39] docs(faq): add troubleshooting guide for dual module hazard (#7299) --- docs/content/docs/reference/faq.mdx | 70 +++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/docs/content/docs/reference/faq.mdx b/docs/content/docs/reference/faq.mdx index f388534c7c..8d842809a7 100644 --- a/docs/content/docs/reference/faq.mdx +++ b/docs/content/docs/reference/faq.mdx @@ -104,4 +104,74 @@ At this time, you can't remove the `name`, `image`, or `email` fields from the u We do plan to have more customizability in the future in this regard, but for now, you can't remove these fields. + + +If you're encountering errors like: + +``` +No request state found. Please make sure you are calling this function within a `runWithRequestState` callback. +``` + +This is typically caused by a **dual module hazard** - when multiple versions of `better-auth` or `@better-auth/core` exist in your dependency tree. This commonly occurs after upgrading to v1.4+, especially in Cloudflare Workers, Nuxt, or when using plugins like `oauthProvider`. + +### How to Diagnose + +Check if you have duplicate versions of Better Auth packages: + +```bash +# For pnpm users +pnpm why @better-auth/core +pnpm why better-auth + +# For npm users +npm ls @better-auth/core +npm ls better-auth + +# For yarn users +yarn why @better-auth/core +yarn why better-auth +``` + +If you see multiple versions listed, you have a dual module hazard. + +### How to Fix + +1. **Delete and reinstall dependencies:** + +```bash +# Remove node_modules and lockfile +rm -rf node_modules +rm pnpm-lock.yaml # or package-lock.json or yarn.lock + +# Reinstall dependencies +pnpm install # or npm install or yarn install +``` + +2. **Ensure all Better Auth packages use the same version:** + +Check your `package.json` and make sure all Better Auth related packages (`better-auth`, `@better-auth/core`, `@better-auth/oauth-provider`, etc.) are using compatible versions. + +3. **For Cloudflare Workers users:** + +Make sure you have the `nodejs_compat` compatibility flag enabled in your `wrangler.toml`: + +```toml +compatibility_flags = ["nodejs_compat"] +``` + +4. **Verify the fix:** + +Run the diagnostic commands again to confirm only one version of each package exists: + +```bash +pnpm why @better-auth/core +pnpm why better-auth +``` + +You should see only one version listed for each package. + + + Related issue: [#6613](https://github.com/better-auth/better-auth/issues/6613) + + From 244e4142f70df06a5edd78a4663ca5ade758d6f4 Mon Sep 17 00:00:00 2001 From: Alex Yang Date: Mon, 12 Jan 2026 12:11:24 -0800 Subject: [PATCH 15/39] chore: release v1.5.0-beta.5 --- packages/better-auth/package.json | 2 +- packages/cli/package.json | 2 +- packages/core/package.json | 2 +- packages/expo/package.json | 2 +- packages/oauth-provider/package.json | 2 +- packages/passkey/package.json | 2 +- packages/scim/package.json | 2 +- packages/sso/package.json | 2 +- packages/stripe/package.json | 2 +- packages/telemetry/package.json | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/better-auth/package.json b/packages/better-auth/package.json index afd8ff7e69..7d450dc0fc 100644 --- a/packages/better-auth/package.json +++ b/packages/better-auth/package.json @@ -1,6 +1,6 @@ { "name": "better-auth", - "version": "1.5.0-beta.4", + "version": "1.5.0-beta.5", "description": "The most comprehensive authentication framework for TypeScript.", "type": "module", "license": "MIT", diff --git a/packages/cli/package.json b/packages/cli/package.json index 399f8cce51..2938695862 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@better-auth/cli", - "version": "1.5.0-beta.4", + "version": "1.5.0-beta.5", "type": "module", "description": "The CLI for Better Auth", "module": "dist/index.mjs", diff --git a/packages/core/package.json b/packages/core/package.json index e4eb000080..7e77628fa0 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@better-auth/core", - "version": "1.5.0-beta.4", + "version": "1.5.0-beta.5", "description": "The most comprehensive authentication framework for TypeScript.", "type": "module", "repository": { diff --git a/packages/expo/package.json b/packages/expo/package.json index 1d9a0cac08..556fed3178 100644 --- a/packages/expo/package.json +++ b/packages/expo/package.json @@ -1,6 +1,6 @@ { "name": "@better-auth/expo", - "version": "1.5.0-beta.4", + "version": "1.5.0-beta.5", "type": "module", "description": "Better Auth integration for Expo and React Native applications.", "main": "dist/index.mjs", diff --git a/packages/oauth-provider/package.json b/packages/oauth-provider/package.json index 6997e56ba8..5d228b86a0 100644 --- a/packages/oauth-provider/package.json +++ b/packages/oauth-provider/package.json @@ -1,6 +1,6 @@ { "name": "@better-auth/oauth-provider", - "version": "1.5.0-beta.4", + "version": "1.5.0-beta.5", "type": "module", "description": "An oauth provider plugin for Better Auth", "main": "dist/index.mjs", diff --git a/packages/passkey/package.json b/packages/passkey/package.json index f2cb61dfe9..bda8ba7d6e 100644 --- a/packages/passkey/package.json +++ b/packages/passkey/package.json @@ -1,6 +1,6 @@ { "name": "@better-auth/passkey", - "version": "1.5.0-beta.4", + "version": "1.5.0-beta.5", "type": "module", "description": "Passkey plugin for Better Auth", "main": "dist/index.mjs", diff --git a/packages/scim/package.json b/packages/scim/package.json index fb5d7e7d47..a4ff9b817d 100644 --- a/packages/scim/package.json +++ b/packages/scim/package.json @@ -1,7 +1,7 @@ { "name": "@better-auth/scim", "author": "Jonathan Samines", - "version": "1.5.0-beta.4", + "version": "1.5.0-beta.5", "type": "module", "main": "dist/index.mjs", "types": "dist/index.d.mts", diff --git a/packages/sso/package.json b/packages/sso/package.json index da2a9c68e2..2db3837e6b 100644 --- a/packages/sso/package.json +++ b/packages/sso/package.json @@ -1,7 +1,7 @@ { "name": "@better-auth/sso", "author": "Bereket Engida", - "version": "1.5.0-beta.4", + "version": "1.5.0-beta.5", "type": "module", "main": "dist/index.mjs", "types": "dist/index.d.mts", diff --git a/packages/stripe/package.json b/packages/stripe/package.json index 4c25e1a7b9..ae0e1057b8 100644 --- a/packages/stripe/package.json +++ b/packages/stripe/package.json @@ -1,7 +1,7 @@ { "name": "@better-auth/stripe", "author": "Bereket Engida", - "version": "1.5.0-beta.4", + "version": "1.5.0-beta.5", "type": "module", "main": "dist/index.mjs", "types": "dist/index.d.mts", diff --git a/packages/telemetry/package.json b/packages/telemetry/package.json index 8ebc7a5c68..88210127d3 100644 --- a/packages/telemetry/package.json +++ b/packages/telemetry/package.json @@ -1,6 +1,6 @@ { "name": "@better-auth/telemetry", - "version": "1.5.0-beta.4", + "version": "1.5.0-beta.5", "description": "Telemetry package for Better Auth", "type": "module", "repository": { From 16fca560f798b00f4c9d2c4ed82859460100f7e5 Mon Sep 17 00:00:00 2001 From: Alex Yang Date: Mon, 12 Jan 2026 14:51:45 -0800 Subject: [PATCH 16/39] docs: update FAQ with dual module hazard (#7305) --- docs/content/docs/reference/faq.mdx | 79 ++++++++++++++++++++++++++--- 1 file changed, 71 insertions(+), 8 deletions(-) diff --git a/docs/content/docs/reference/faq.mdx b/docs/content/docs/reference/faq.mdx index 8d842809a7..738ca44fc6 100644 --- a/docs/content/docs/reference/faq.mdx +++ b/docs/content/docs/reference/faq.mdx @@ -105,9 +105,15 @@ At this time, you can't remove the `name`, `image`, or `email` fields from the u We do plan to have more customizability in the future in this regard, but for now, you can't remove these fields. - + If you're encountering errors like: +``` +Better Auth was already imported. This breaks async local storage instance and will lead to issues! +``` + +Or like: + ``` No request state found. Please make sure you are calling this function within a `runWithRequestState` callback. ``` @@ -136,7 +142,12 @@ If you see multiple versions listed, you have a dual module hazard. ### How to Fix -1. **Delete and reinstall dependencies:** +#### Basic Steps + +Start by ensuring your dependencies are clean and all Better Auth packages use compatible versions. + + +**Clean reinstall:** ```bash # Remove node_modules and lockfile @@ -147,31 +158,83 @@ rm pnpm-lock.yaml # or package-lock.json or yarn.lock pnpm install # or npm install or yarn install ``` -2. **Ensure all Better Auth packages use the same version:** - Check your `package.json` and make sure all Better Auth related packages (`better-auth`, `@better-auth/core`, `@better-auth/oauth-provider`, etc.) are using compatible versions. + -3. **For Cloudflare Workers users:** +#### Package Manager Resolution Issues + +If you're using Yarn v1 (Classic) or potentially other package managers like pnpm v9, you may need to force `better-call` to resolve to a single instance. + + +**For Yarn v1 / pnpm v9 users:** + +Manually install `better-call` and add it to both `dependencies` and `resolutions` to force it to be hoisted to the top level: + +```json title="package.json" +{ + "dependencies": { + "better-call": "^1.1.8", + // ... other dependencies + }, + "resolutions": { + "better-call": "^1.1.8" + } +} +``` + +Then reinstall your dependencies: + +```bash +yarn install # or pnpm install +``` + +Note: Yarn v3 and pnpm v10 don't typically have this issue. + + + +**Important:** Make sure to install `better-auth` and related packages in `dependencies`, not `devDependencies`. + + +#### Bundler Resolution Issues + +This is a bundler-level issue where the same module gets resolved to different instances. The goal is to make your bundler resolve the module to the same instance. + + +**For Next.js users:** + +Add `better-auth` to `serverExternalPackages` in your `next.config.js`: + +```ts title="next.config.js" +const config = { + serverExternalPackages: ['better-auth'] +}; +``` + + + +**For Cloudflare Workers users:** Make sure you have the `nodejs_compat` compatibility flag enabled in your `wrangler.toml`: -```toml +```toml title="wrangler.toml" compatibility_flags = ["nodejs_compat"] ``` + -4. **Verify the fix:** +#### Verify the Fix Run the diagnostic commands again to confirm only one version of each package exists: ```bash pnpm why @better-auth/core pnpm why better-auth +pnpm why better-call ``` You should see only one version listed for each package. - Related issue: [#6613](https://github.com/better-auth/better-auth/issues/6613) + Related issues: [#6613](https://github.com/better-auth/better-auth/issues/6613), [yjs#438](https://github.com/yjs/yjs/issues/438) From 6d625f73637bd20005a69382f71b310ef5c902a1 Mon Sep 17 00:00:00 2001 From: Alex Yang Date: Mon, 12 Jan 2026 15:19:32 -0800 Subject: [PATCH 17/39] chore(demo): fix import (#7310) --- packages/oauth-provider/src/client.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/oauth-provider/src/client.ts b/packages/oauth-provider/src/client.ts index 352fdfa9b1..b5278e5fca 100644 --- a/packages/oauth-provider/src/client.ts +++ b/packages/oauth-provider/src/client.ts @@ -1,4 +1,4 @@ -import { safeJSONParse } from "@better-auth/core/utils"; +import { safeJSONParse } from "@better-auth/core/utils/json"; import type { BetterAuthClientPlugin } from "better-auth/types"; import type { oauthProvider } from "./oauth"; From 38ab02501348868d0b050981fb2b804517290a6a Mon Sep 17 00:00:00 2001 From: Alex Yang Date: Mon, 12 Jan 2026 15:19:46 -0800 Subject: [PATCH 18/39] fix(core): remove dual module warning (#7308) --- packages/core/src/context/endpoint-context.ts | 13 +++++++-- packages/core/src/context/index.ts | 29 ------------------- packages/core/src/context/request-state.ts | 10 +++++-- packages/core/src/context/transaction.ts | 13 +++++++-- 4 files changed, 30 insertions(+), 35 deletions(-) diff --git a/packages/core/src/context/endpoint-context.ts b/packages/core/src/context/endpoint-context.ts index 58f32426fc..9dde2c3f2a 100644 --- a/packages/core/src/context/endpoint-context.ts +++ b/packages/core/src/context/endpoint-context.ts @@ -9,15 +9,24 @@ export type AuthEndpointContext = Partial< context: AuthContext; }; +const symbol = Symbol.for("better-auth:endpoint-context-async-storage"); + let currentContextAsyncStorage: AsyncLocalStorage | null = null; const ensureAsyncStorage = async () => { - if (!currentContextAsyncStorage) { + if ( + !currentContextAsyncStorage || + (globalThis as any)[symbol] === undefined + ) { const AsyncLocalStorage = await getAsyncLocalStorage(); currentContextAsyncStorage = new AsyncLocalStorage(); + (globalThis as any)[symbol] = currentContextAsyncStorage; } - return currentContextAsyncStorage; + return ( + currentContextAsyncStorage || + ((globalThis as any)[symbol] as AsyncLocalStorage) + ); }; /** diff --git a/packages/core/src/context/index.ts b/packages/core/src/context/index.ts index f877c0aa19..ec52f268b1 100644 --- a/packages/core/src/context/index.ts +++ b/packages/core/src/context/index.ts @@ -19,32 +19,3 @@ export { runWithAdapter, runWithTransaction, } from "./transaction"; - -const glo: any = - typeof globalThis !== "undefined" - ? globalThis - : typeof window !== "undefined" - ? window - : typeof global !== "undefined" - ? global - : {}; - -const importIdentifier = "__ $BETTER_AUTH$ __"; - -if (glo[importIdentifier] === true) { - /** - * Dear reader of this message. Please take this seriously. - * - * If you see this message, make sure that you only import one version of Better Auth. In many cases, - * your package manager installs two versions of Better Auth that are used by different packages within your project. - * - * This often leads to issues that are hard to debug. We often need to ensure async local storage instance, - * If you imported different versions of Better Auth, it is impossible for us to - * do status synchronization per request anymore - which might break the states. - * - */ - console.error( - "Better Auth was already imported. This breaks async local storage instance and will lead to issues!", - ); -} -glo[importIdentifier] = true; diff --git a/packages/core/src/context/request-state.ts b/packages/core/src/context/request-state.ts index 6bb9b3fa7f..00ea24b8d6 100644 --- a/packages/core/src/context/request-state.ts +++ b/packages/core/src/context/request-state.ts @@ -3,15 +3,21 @@ import { getAsyncLocalStorage } from "@better-auth/core/async_hooks"; export type RequestStateWeakMap = WeakMap; +const symbol = Symbol.for("better-auth:request-state-async-storage"); + let requestStateAsyncStorage: AsyncLocalStorage | null = null; const ensureAsyncStorage = async () => { - if (!requestStateAsyncStorage) { + if (!requestStateAsyncStorage || (globalThis as any)[symbol] === undefined) { const AsyncLocalStorage = await getAsyncLocalStorage(); requestStateAsyncStorage = new AsyncLocalStorage(); + (globalThis as any)[symbol] = requestStateAsyncStorage; } - return requestStateAsyncStorage; + return ( + requestStateAsyncStorage || + ((globalThis as any)[symbol] as AsyncLocalStorage) + ); }; export async function getRequestStateAsyncLocalStorage() { diff --git a/packages/core/src/context/transaction.ts b/packages/core/src/context/transaction.ts index a086ee2de0..80017472fa 100644 --- a/packages/core/src/context/transaction.ts +++ b/packages/core/src/context/transaction.ts @@ -2,15 +2,24 @@ import type { AsyncLocalStorage } from "@better-auth/core/async_hooks"; import { getAsyncLocalStorage } from "@better-auth/core/async_hooks"; import type { DBAdapter, DBTransactionAdapter } from "../db/adapter"; +const symbol = Symbol.for("better-auth:transaction-adapter-async-storage"); + let currentAdapterAsyncStorage: AsyncLocalStorage | null = null; const ensureAsyncStorage = async () => { - if (!currentAdapterAsyncStorage) { + if ( + !currentAdapterAsyncStorage || + (globalThis as any)[symbol] === undefined + ) { const AsyncLocalStorage = await getAsyncLocalStorage(); currentAdapterAsyncStorage = new AsyncLocalStorage(); + (globalThis as any)[symbol] = currentAdapterAsyncStorage; } - return currentAdapterAsyncStorage; + return ( + currentAdapterAsyncStorage || + ((globalThis as any)[symbol] as AsyncLocalStorage) + ); }; /** From 74357c5392a1f5c67f771e77f6c00f814d50c54a Mon Sep 17 00:00:00 2001 From: Alex Yang Date: Mon, 12 Jan 2026 15:21:20 -0800 Subject: [PATCH 19/39] chore: release v1.5.0-beta.6 --- packages/better-auth/package.json | 2 +- packages/cli/package.json | 2 +- packages/core/package.json | 2 +- packages/expo/package.json | 2 +- packages/oauth-provider/package.json | 2 +- packages/passkey/package.json | 2 +- packages/scim/package.json | 2 +- packages/sso/package.json | 2 +- packages/stripe/package.json | 2 +- packages/telemetry/package.json | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/better-auth/package.json b/packages/better-auth/package.json index 7d450dc0fc..b549b5255d 100644 --- a/packages/better-auth/package.json +++ b/packages/better-auth/package.json @@ -1,6 +1,6 @@ { "name": "better-auth", - "version": "1.5.0-beta.5", + "version": "1.5.0-beta.6", "description": "The most comprehensive authentication framework for TypeScript.", "type": "module", "license": "MIT", diff --git a/packages/cli/package.json b/packages/cli/package.json index 2938695862..bfc76438fa 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@better-auth/cli", - "version": "1.5.0-beta.5", + "version": "1.5.0-beta.6", "type": "module", "description": "The CLI for Better Auth", "module": "dist/index.mjs", diff --git a/packages/core/package.json b/packages/core/package.json index 7e77628fa0..2e7e75d91e 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@better-auth/core", - "version": "1.5.0-beta.5", + "version": "1.5.0-beta.6", "description": "The most comprehensive authentication framework for TypeScript.", "type": "module", "repository": { diff --git a/packages/expo/package.json b/packages/expo/package.json index 556fed3178..f69ff09aef 100644 --- a/packages/expo/package.json +++ b/packages/expo/package.json @@ -1,6 +1,6 @@ { "name": "@better-auth/expo", - "version": "1.5.0-beta.5", + "version": "1.5.0-beta.6", "type": "module", "description": "Better Auth integration for Expo and React Native applications.", "main": "dist/index.mjs", diff --git a/packages/oauth-provider/package.json b/packages/oauth-provider/package.json index 5d228b86a0..b1722122b4 100644 --- a/packages/oauth-provider/package.json +++ b/packages/oauth-provider/package.json @@ -1,6 +1,6 @@ { "name": "@better-auth/oauth-provider", - "version": "1.5.0-beta.5", + "version": "1.5.0-beta.6", "type": "module", "description": "An oauth provider plugin for Better Auth", "main": "dist/index.mjs", diff --git a/packages/passkey/package.json b/packages/passkey/package.json index bda8ba7d6e..7aa2a16088 100644 --- a/packages/passkey/package.json +++ b/packages/passkey/package.json @@ -1,6 +1,6 @@ { "name": "@better-auth/passkey", - "version": "1.5.0-beta.5", + "version": "1.5.0-beta.6", "type": "module", "description": "Passkey plugin for Better Auth", "main": "dist/index.mjs", diff --git a/packages/scim/package.json b/packages/scim/package.json index a4ff9b817d..b5bbb52fe8 100644 --- a/packages/scim/package.json +++ b/packages/scim/package.json @@ -1,7 +1,7 @@ { "name": "@better-auth/scim", "author": "Jonathan Samines", - "version": "1.5.0-beta.5", + "version": "1.5.0-beta.6", "type": "module", "main": "dist/index.mjs", "types": "dist/index.d.mts", diff --git a/packages/sso/package.json b/packages/sso/package.json index 2db3837e6b..2989c8dffe 100644 --- a/packages/sso/package.json +++ b/packages/sso/package.json @@ -1,7 +1,7 @@ { "name": "@better-auth/sso", "author": "Bereket Engida", - "version": "1.5.0-beta.5", + "version": "1.5.0-beta.6", "type": "module", "main": "dist/index.mjs", "types": "dist/index.d.mts", diff --git a/packages/stripe/package.json b/packages/stripe/package.json index ae0e1057b8..66df093173 100644 --- a/packages/stripe/package.json +++ b/packages/stripe/package.json @@ -1,7 +1,7 @@ { "name": "@better-auth/stripe", "author": "Bereket Engida", - "version": "1.5.0-beta.5", + "version": "1.5.0-beta.6", "type": "module", "main": "dist/index.mjs", "types": "dist/index.d.mts", diff --git a/packages/telemetry/package.json b/packages/telemetry/package.json index 88210127d3..bd57e06715 100644 --- a/packages/telemetry/package.json +++ b/packages/telemetry/package.json @@ -1,6 +1,6 @@ { "name": "@better-auth/telemetry", - "version": "1.5.0-beta.5", + "version": "1.5.0-beta.6", "description": "Telemetry package for Better Auth", "type": "module", "repository": { From 7bf47e72846001de08d38bccd046c22d83e02a99 Mon Sep 17 00:00:00 2001 From: Bereket Engida <86073083+Bekacru@users.noreply.github.com> Date: Mon, 12 Jan 2026 15:24:14 -0800 Subject: [PATCH 20/39] docs: add programmatic migration guide for Cloudflare Workers and runtime environment variable handling (#7274) Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com> --- docs/content/docs/concepts/database.mdx | 148 ++++++++++++++++++++++++ docs/content/docs/integrations/hono.mdx | 134 +++++++++++++++++++++ 2 files changed, 282 insertions(+) diff --git a/docs/content/docs/concepts/database.mdx b/docs/content/docs/concepts/database.mdx index 78bce0d693..ec663ee96e 100644 --- a/docs/content/docs/concepts/database.mdx +++ b/docs/content/docs/concepts/database.mdx @@ -45,6 +45,154 @@ See the [CLI](/docs/concepts/cli) documentation for more information on the CLI. required by plugins in the plugin documentation. +### Programmatic Migrations + +In some environments (like Cloudflare Workers, serverless functions, or custom deployment setups), running the CLI may not be possible or practical. In these cases, you can run migrations programmatically from within your application code. + +Better Auth provides a `getMigrations` function that you can use to generate and run migrations programmatically. This is particularly useful when: + +- You're deploying to edge environments (Cloudflare Workers, Deno Deploy, etc.) +- Your environment variables are only available at runtime (not at build time) +- You need to run migrations as part of your application startup or through a custom endpoint + +#### Using `getMigrations` + +The `getMigrations` function is available from `better-auth/db` and works with the built-in Kysely adapter (SQLite, PostgreSQL, MySQL, MSSQL). + +```typescript +import { getMigrations } from "better-auth/db"; + +const { toBeCreated, toBeAdded, runMigrations, compileMigrations } = await getMigrations(authConfig); + +// Check what migrations are needed +console.log("Tables to create:", toBeCreated); +console.log("Fields to add:", toBeAdded); + +// Run migrations +await runMigrations(); + +// Or get the SQL to run manually +const sql = await compileMigrations(); +console.log(sql); +``` + +#### Example: Cloudflare Workers Migration Endpoint + +For Cloudflare Workers using D1 (SQLite), you can create a migration endpoint that runs when your worker starts or through a manual trigger: + +```typescript title="src/index.ts" +import { Hono } from "hono"; +import { auth } from "./auth"; // your auth instance +import { getMigrations } from "better-auth/db"; + +const app = new Hono<{ Bindings: Env }>(); + +// Migration endpoint - call this once to set up your database +app.post("/migrate", async (c) => { + const env = c.env; + + // Create auth config with runtime environment + const authConfig = { + database: env.DB, // D1 database binding + // ... rest of your auth config + }; + + try { + const { toBeCreated, toBeAdded, runMigrations } = await getMigrations(authConfig); + + if (toBeCreated.length === 0 && toBeAdded.length === 0) { + return c.json({ message: "No migrations needed" }); + } + + await runMigrations(); + + return c.json({ + message: "Migrations completed successfully", + created: toBeCreated.map(t => t.table), + added: toBeAdded.map(t => t.table) + }); + } catch (error) { + return c.json({ error: error instanceof Error ? error.message : String(error) }, 500); + } +}); + +// Your normal auth endpoints +app.on(["POST", "GET"], "/api/auth/*", (c) => { + return auth.handler(c.req.raw); +}); + +export default app; +``` + + +**Important Limitations** + +Programmatic migrations currently work **only** with: +- Built-in database adapters (SQLite/D1, PostgreSQL, MySQL, MSSQL) using the Kysely adapter +- Does **not** work with Prisma or Drizzle ORM adapters + +For Prisma or Drizzle in Cloudflare Workers, see the [Cloudflare Workers](#cloudflare-workers-with-prisma-drizzle) section below. + + +#### Cloudflare Workers with Prisma/Drizzle + +If you're using Prisma or Drizzle with Cloudflare Workers, you have a few options: + +1. **Use `cloudflare:workers` import** (Recommended for newer Cloudflare projects): + + Cloudflare now supports importing environment variables from `cloudflare:workers`, which allows you to access `env` at the top level: + + ```typescript title="auth.ts" + import { env } from "cloudflare:workers"; + import { drizzle } from "drizzle-orm/d1"; + + export const auth = betterAuth({ + database: drizzle(env.DB), + // ... rest of config + }); + ``` + + With this approach, you can run the standard CLI commands: + + ```bash + npx @better-auth/cli migrate + # or + npx @better-auth/cli generate + ``` + +2. **Use `process.env` with compatibility flag**: + + Add the `nodejs_compat_populate_process_env` compatibility flag to your `wrangler.toml`: + + ```toml title="wrangler.toml" + compatibility_flags = ["nodejs_compat_populate_process_env"] + ``` + + Then use `process.env` in your auth config: + + ```typescript title="auth.ts" + import { drizzle } from "drizzle-orm/d1"; + + export const auth = betterAuth({ + database: drizzle(process.env.DB as any), + // ... rest of config + }); + ``` + + After setting this up, run the CLI commands as normal: + + ```bash + npx @better-auth/cli generate + ``` + +3. **Generate schema locally and push manually**: + + Run the generate command locally with a mock configuration, then use your ORM's push/migrate commands to apply the schema. + + +See the [Hono integration documentation](/docs/integrations/hono#cloudflare-workers) for a complete example of using Better Auth with Cloudflare Workers. + + ## Secondary Storage Secondary storage in Better Auth allows you to use key-value stores for managing session data, rate limiting counters, etc. This can be useful when you want to offload the storage of this intensive records to a high performance storage or even RAM. diff --git a/docs/content/docs/integrations/hono.mdx b/docs/content/docs/integrations/hono.mdx index 009d34e158..779a09c043 100644 --- a/docs/content/docs/integrations/hono.mdx +++ b/docs/content/docs/integrations/hono.mdx @@ -184,3 +184,137 @@ This configuration is necessary when: The `credentials: "include"` option tells the fetch client to send cookies even for cross-origin requests. This works in conjunction with the CORS configuration on your server that has `credentials: true`. > **Note:** Make sure your CORS configuration on the server matches your client's domain, and that `credentials: true` is set in both the server's CORS config and the client's fetch config. + +### Cloudflare Workers + +When deploying Better Auth with Hono on Cloudflare Workers, you may encounter issues with the CLI if your auth configuration depends on runtime environment variables (like `env.DB` for D1 databases). + +#### The Problem + +In Cloudflare Workers, environment variables are passed at runtime through request handlers, not available via `process.env` at build time. This makes it challenging to use the Better Auth CLI for migrations since the CLI needs to import your auth configuration file. + +```typescript title="auth.ts" +// This won't work with the CLI because env is not available +export const createAuth = (env: Env) => betterAuth({ + database: env.DB, // env.DB is only available at runtime + // ... rest of config +}); +``` + +#### Solution 1: Programmatic Migrations (Built-in Kysely Adapter) + +If you're using the built-in Kysely adapter (SQLite/D1, PostgreSQL, MySQL), you can run migrations programmatically through a custom endpoint: + +```typescript title="src/index.ts" +import { Hono } from "hono"; +import { getMigrations } from "better-auth/db"; +import { betterAuth } from "better-auth"; + +type Env = { + DB: D1Database; + // ... other bindings +}; + +const app = new Hono<{ Bindings: Env }>(); + +// Migration endpoint - call this to set up your database +app.post("/migrate", async (c) => { + const authConfig = { + database: c.env.DB, + // Add all your other auth config options here + // (socialProviders, plugins, etc.) + }; + + try { + const { toBeCreated, toBeAdded, runMigrations } = await getMigrations(authConfig); + + if (toBeCreated.length === 0 && toBeAdded.length === 0) { + return c.json({ message: "No migrations needed" }); + } + + await runMigrations(); + + return c.json({ + message: "Migrations completed successfully", + tablesCreated: toBeCreated.map(t => t.table), + tablesUpdated: toBeAdded.map(t => t.table) + }); + } catch (error) { + return c.json({ + error: error instanceof Error ? error.message : "Migration failed" + }, 500); + } +}); + +// Your auth handler +app.on(["POST", "GET"], "/api/auth/*", async (c) => { + const auth = betterAuth({ + database: c.env.DB, + // ... your config + }); + return auth.handler(c.req.raw); +}); + +export default app; +``` + +**Usage:** +1. Deploy your worker +2. Call the migration endpoint once: `curl -X POST https://your-worker.workers.dev/migrate` +3. Remove or protect the migration endpoint after running + + +**Security Note**: Protect your migration endpoint in production! Consider: +- Adding authentication/authorization +- Using environment-based checks to only allow migrations in development +- Removing the endpoint entirely after initial setup + + +#### Solution 2: Use `cloudflare:workers` Import (Prisma/Drizzle) + +For Prisma or Drizzle users, Cloudflare now supports importing environment variables from `cloudflare:workers`: + +```typescript title="auth.ts" +import { env } from "cloudflare:workers"; +import { drizzle } from "drizzle-orm/d1"; +import { betterAuth } from "better-auth"; + +export const auth = betterAuth({ + database: drizzle(env.DB), + // ... rest of your config +}); +``` + +This allows you to use the standard CLI commands: + +```bash +npx @better-auth/cli generate +``` + +See the [Cloudflare changelog](https://developers.cloudflare.com/changelog/2025-03-17-importable-env/) for more details on this feature. + +#### Solution 3: Use `process.env` with Compatibility Flag + +Add the `nodejs_compat_populate_process_env` flag to your `wrangler.toml`: + +```toml title="wrangler.toml" +compatibility_flags = ["nodejs_compat_populate_process_env"] +``` + +Then use `process.env` in your auth config: + +```typescript title="auth.ts" +import { drizzle } from "drizzle-orm/d1"; +import { betterAuth } from "better-auth"; + +export const auth = betterAuth({ + database: drizzle(process.env.DB as any), + // ... rest of config +}); +``` + +For compatibility dates on or after `2025-04-01`, this is the default behavior when `nodejs_compat` is enabled. See the [Cloudflare documentation](https://developers.cloudflare.com/workers/runtime-apis/nodejs/process/) for more details. + + +For more information on programmatic migrations, see the [Database documentation](/docs/concepts/database#programmatic-migrations). + From bb68f8e78fa6e486837e85ee8000376daaf212ed Mon Sep 17 00:00:00 2001 From: Alex Yang Date: Mon, 12 Jan 2026 15:27:35 -0800 Subject: [PATCH 21/39] docs: update `faq.mdx` (#7309) --- docs/content/docs/reference/faq.mdx | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/docs/content/docs/reference/faq.mdx b/docs/content/docs/reference/faq.mdx index 738ca44fc6..88ff649cb1 100644 --- a/docs/content/docs/reference/faq.mdx +++ b/docs/content/docs/reference/faq.mdx @@ -6,7 +6,7 @@ description: Frequently asked questions about Better Auth. This page contains frequently asked questions, common issues, and other helpful information about Better Auth. - + When encountering `createAuthClient` related errors, make sure to have the correct import path as it varies based on environment. If you're using the auth client on react front-end, you'll need to import it from `/react`: @@ -23,7 +23,7 @@ import { createAuthClient } from "better-auth/client"; - + If you try to call `authClient.getSession` on a server environment (e.g, a Next.js server component), it doesn't work since it can't access the cookies. You can use the `auth.api.getSession` instead and pass the request headers to it. ```tsx title="server.tsx" @@ -49,13 +49,13 @@ const session = await authClient.getSession({ ``` - + Better Auth provides a type-safe way to extend the user and session schemas, take a look at our docs on extending core schema. - + Both `useSession` and `getSession` instances are used fundamentally different based on the situation. `useSession` is a hook, meaning it can trigger re-renders whenever session data changes. @@ -78,7 +78,7 @@ For all other situations where you shouldn't use `useSession`, is when you shoul - + If you're facing typescript errors, make sure your tsconfig has `strict` set to `true`: ```json title="tsconfig.json" { @@ -99,21 +99,15 @@ if you can't set strict to true, you can enable strictNullChecks: You can learn more in our TypeScript docs. - + At this time, you can't remove the `name`, `image`, or `email` fields from the user table. We do plan to have more customizability in the future in this regard, but for now, you can't remove these fields. - + If you're encountering errors like: -``` -Better Auth was already imported. This breaks async local storage instance and will lead to issues! -``` - -Or like: - ``` No request state found. Please make sure you are calling this function within a `runWithRequestState` callback. ``` From 249c0fc5ed971265377334a6bd669647c54e2ce4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paola=20Estefan=C3=ADa=20de=20Campos?= <84341268+Paola3stefania@users.noreply.github.com> Date: Tue, 13 Jan 2026 00:43:25 +0100 Subject: [PATCH 22/39] fix(client): add `refetch` to `useSession` for all clients (#7255) --- .../better-auth/src/client/client.test.ts | 154 ++++++++++++++++++ .../better-auth/src/client/solid/index.ts | 4 + .../better-auth/src/client/svelte/index.ts | 4 + packages/better-auth/src/client/vanilla.ts | 5 + packages/better-auth/src/client/vue/index.ts | 4 + 5 files changed, 171 insertions(+) diff --git a/packages/better-auth/src/client/client.test.ts b/packages/better-auth/src/client/client.test.ts index 4ea2d1046b..510a7483a0 100644 --- a/packages/better-auth/src/client/client.test.ts +++ b/packages/better-auth/src/client/client.test.ts @@ -407,6 +407,160 @@ describe("type", () => { }>(); }); + it("should support refetch with query parameters - solid", () => { + const client = createSolidClient({ + plugins: [testClientPlugin()], + baseURL: "http://localhost:3000", + fetchOptions: { + customFetchImpl: async (url, init) => { + return new Response(); + }, + }, + }); + + type UseSessionReturn = ReturnType>; + expectTypeOf().toMatchTypeOf<{ + data: { + user: { + id: string; + email: string; + emailVerified: boolean; + name: string; + createdAt: Date; + updatedAt: Date; + image?: string | undefined | null; + testField4: string; + testField?: string | undefined | null; + testField2?: number | undefined | null; + }; + session: Session; + } | null; + isPending: boolean; + isRefetching: boolean; + error: BetterFetchError | null; + refetch: ( + queryParams?: { query?: SessionQueryParams } | undefined, + ) => Promise; + }>(); + }); + + it("should support refetch with query parameters - svelte", () => { + const client = createSvelteClient({ + plugins: [testClientPlugin()], + baseURL: "http://localhost:3000", + fetchOptions: { + customFetchImpl: async (url, init) => { + return new Response(); + }, + }, + }); + + type UseSessionAtom = ReturnType; + type UseSessionReturn = ReturnType; + expectTypeOf().toMatchTypeOf<{ + data: { + user: { + id: string; + email: string; + emailVerified: boolean; + name: string; + createdAt: Date; + updatedAt: Date; + image?: string | undefined | null; + testField4: string; + testField?: string | undefined | null; + testField2?: number | undefined | null; + }; + session: Session; + } | null; + isPending: boolean; + isRefetching: boolean; + error: BetterFetchError | null; + refetch: ( + queryParams?: { query?: SessionQueryParams } | undefined, + ) => Promise; + }>(); + }); + + it("should support refetch with query parameters - vue", () => { + const client = createVueClient({ + plugins: [testClientPlugin()], + baseURL: "http://localhost:3000", + fetchOptions: { + customFetchImpl: async (url, init) => { + return new Response(); + }, + }, + }); + + // Test the function signature directly to avoid overload resolution issues + expectTypeOf(client.useSession).toMatchTypeOf< + () => Readonly< + Ref<{ + data: { + user: { + id: string; + email: string; + emailVerified: boolean; + name: string; + createdAt: Date; + updatedAt: Date; + image?: string | undefined | null; + testField4: string; + testField?: string | undefined | null; + testField2?: number | undefined | null; + }; + session: Session; + } | null; + isPending: boolean; + isRefetching: boolean; + error: BetterFetchError | null; + refetch: ( + queryParams?: { query?: SessionQueryParams } | undefined, + ) => Promise; + }> + > + >(); + }); + + it("should support refetch with query parameters - vanilla", () => { + const client = createVanillaClient({ + plugins: [testClientPlugin()], + baseURL: "http://localhost:3000", + fetchOptions: { + customFetchImpl: async (url, init) => { + return new Response(); + }, + }, + }); + + type UseSessionAtom = typeof client.useSession; + type UseSessionReturn = ReturnType; + expectTypeOf().toMatchTypeOf<{ + data: { + user: { + id: string; + email: string; + emailVerified: boolean; + name: string; + createdAt: Date; + updatedAt: Date; + image?: string | undefined | null; + testField4: string; + testField?: string | undefined | null; + testField2?: number | undefined | null; + }; + session: Session; + } | null; + isPending: boolean; + isRefetching: boolean; + error: BetterFetchError | null; + refetch: ( + queryParams?: { query?: SessionQueryParams } | undefined, + ) => Promise; + }>(); + }); + it("should infer $ERROR_CODES with multiple plugins", () => { const client = createReactClient({ plugins: [ diff --git a/packages/better-auth/src/client/solid/index.ts b/packages/better-auth/src/client/solid/index.ts index 648e0a31f4..010169493f 100644 --- a/packages/better-auth/src/client/solid/index.ts +++ b/packages/better-auth/src/client/solid/index.ts @@ -17,6 +17,7 @@ import type { InferClientAPI, InferErrorCodes, IsSignal, + SessionQueryParams, } from "../types"; import { useStore } from "./solid-store"; @@ -87,6 +88,9 @@ export function createAuthClient