diff --git a/backend/package.json b/backend/package.json index ce4dcd59b..79fb4bd82 100644 --- a/backend/package.json +++ b/backend/package.json @@ -17,15 +17,15 @@ "lint:fix": "eslint . --ext .ts --fix" }, "dependencies": { - "@better-auth/passkey": "^1.4.17", + "@better-auth/passkey": "^1.7.12", "@hono/node-server": "^1.19.17", "@hono/node-ws": "^1.3.1", "@opencode-manager/shared": "workspace:*", "archiver": "^7.0.1", - "better-auth": "^1.4.17", + "better-auth": "^1.7.12", "croner": "^10.0.1", "eventsource": "^4.1.0", - "hono": "^4.11.7", + "hono": "^4.13.13", "jsonc-parser": "^3.3.1", "web-push": "^3.6.7", "zod": "^4.1.12" diff --git a/backend/src/auth/index.ts b/backend/src/auth/index.ts index 956f51280..161527f2c 100644 --- a/backend/src/auth/index.ts +++ b/backend/src/auth/index.ts @@ -69,17 +69,13 @@ export function createAuth(db: Database) { origin: ENV.AUTH.PASSKEY_ORIGIN, authenticatorSelection: { residentKey: 'required', - userVerification: 'preferred', + userVerification: 'required', }, }), ], session: { expiresIn: 60 * 60 * 24 * 7, updateAge: 60 * 60 * 24, - cookieCache: { - enabled: true, - maxAge: 60 * 5, - }, }, user: { additionalFields: { diff --git a/backend/src/auth/middleware.ts b/backend/src/auth/middleware.ts index 32cdbeddd..64e40adde 100644 --- a/backend/src/auth/middleware.ts +++ b/backend/src/auth/middleware.ts @@ -16,7 +16,6 @@ export function createAuthMiddleware( user: Session['user'] } }>(async (c, next) => { - const cookies = c.req.header('cookie') const origin = c.req.header('origin') const fetchSite = c.req.header('sec-fetch-site') @@ -30,11 +29,7 @@ export function createAuthMiddleware( return c.json({ error: 'Cross-site request rejected' }, 403) } - logger.debug(`Auth check - Path: ${c.req.path}, Origin: ${origin}, Has cookies: ${!!cookies}`) - if (cookies) { - const cookieNames = cookies.split(';').map(c => c.trim().split('=')[0]).join(', ') - logger.debug(`Cookie names: ${cookieNames}`) - } + logger.debug(`Auth check - Path: ${c.req.path}, Origin: ${origin}`) let session try { diff --git a/backend/src/routes/auth.ts b/backend/src/routes/auth.ts index 75c927e9a..57e267d82 100644 --- a/backend/src/routes/auth.ts +++ b/backend/src/routes/auth.ts @@ -8,19 +8,7 @@ import { hashPassword } from 'better-auth/crypto' export function createAuthRoutes(auth: AuthInstance): Hono { const app = new Hono() - app.all('/*', async (c) => { - const response = await auth.handler(c.req.raw) - - const setCookie = response.headers.get('set-cookie') - if (c.req.path.includes('sign-in')) { - logger.info(`Sign-in response - Status: ${response.status}, Set-Cookie: ${setCookie ? 'present' : 'missing'}`) - if (setCookie) { - logger.debug(`Set-Cookie header: ${setCookie.substring(0, 100)}...`) - } - } - - return response - }) + app.all('/*', (c) => auth.handler(c.req.raw)) return app } @@ -31,16 +19,20 @@ export async function syncAdminFromEnv(auth: AuthInstance, db: Database): Promis const adminEmail = ENV.AUTH.ADMIN_EMAIL! const adminPassword = ENV.AUTH.ADMIN_PASSWORD! - const existingUser = db.prepare('SELECT id, email FROM "user" WHERE email = ?').get(adminEmail) as { id: string; email: string } | undefined + const existingUser = db.prepare('SELECT id, email FROM "user" WHERE lower(email) = lower(?)').get(adminEmail) as { id: string; email: string } | undefined if (existingUser) { if (ENV.AUTH.ADMIN_PASSWORD_RESET) { const hashedPassword = await hashPassword(adminPassword) - db.prepare('UPDATE "account" SET password = ? WHERE "userId" = ? AND "providerId" = ?').run( - hashedPassword, - existingUser.id, - 'credential' - ) + const resetAdminCredentials = db.transaction(() => { + db.prepare('UPDATE "account" SET password = ? WHERE "userId" = ? AND "providerId" = ?').run( + hashedPassword, + existingUser.id, + 'credential' + ) + db.prepare('DELETE FROM "session" WHERE "userId" = ?').run(existingUser.id) + }) + resetAdminCredentials() logger.info(`Admin password reset from environment for ${adminEmail}`) logger.warn('Remove ADMIN_PASSWORD_RESET=true from environment after password reset') } diff --git a/backend/src/routes/repo-git.ts b/backend/src/routes/repo-git.ts index 381110464..05ee02b8c 100644 --- a/backend/src/routes/repo-git.ts +++ b/backend/src/routes/repo-git.ts @@ -41,7 +41,7 @@ export function createRepoGitRoutes( logMessage: string, handler: (repo: Repo, id: number) => Promise, ): Promise { - const id = parseInt(c.req.param('id')) + const id = Number.parseInt(c.req.param('id') ?? '', 10) const repo = getRepoById(database, id) if (!repo) { diff --git a/backend/src/routes/repo-terminal-socket.ts b/backend/src/routes/repo-terminal-socket.ts index 666e548ad..486feec3a 100644 --- a/backend/src/routes/repo-terminal-socket.ts +++ b/backend/src/routes/repo-terminal-socket.ts @@ -52,7 +52,7 @@ export function createRepoTerminalSocketRoutes( upgradeWebSocket((c) => { const directory = c.get('terminalDirectory') const cursor = c.get('terminalCursor') - const ptyID = c.req.param('ptyID') + const ptyID = c.req.param('ptyID') ?? '' return createBridgedSocketEvents((peer) => terminalService.connect(directory, ptyID, cursor, peer)) }), diff --git a/backend/test/auth/index.test.ts b/backend/test/auth/index.test.ts index 56e53315e..70af8bf33 100644 --- a/backend/test/auth/index.test.ts +++ b/backend/test/auth/index.test.ts @@ -1,5 +1,4 @@ import { describe, it, expect, vi, beforeEach } from 'vitest' -import { createTestDb } from '../helpers/assistant-workspace' import { createAuth } from '../../src/auth' import { DatabaseSync } from 'node:sqlite' import type { Database } from 'bun:sqlite' @@ -120,8 +119,36 @@ describe('createAuth', () => { } }) + it('rejects a session cookie immediately after its session row is deleted', async () => { + const db = createAuthDatabase() + const auth = createAuth(db) + + try { + const signUpResponse = await auth.handler(new Request('http://localhost:5173/api/auth/sign-up/email', { + method: 'POST', + headers: { 'content-type': 'application/json', origin: 'http://localhost:5173' }, + body: JSON.stringify({ email: 'revoked@example.com', password: 'test-password', name: 'Revoked' }), + })) + expect(signUpResponse.status).toBe(200) + + const setCookies = signUpResponse.headers.getSetCookie() + expect(setCookies.length).toBeGreaterThan(0) + const headers = new Headers({ cookie: setCookies.map((cookie) => cookie.split(';')[0]).join('; ') }) + + const session = await auth.api.getSession({ headers }) + expect(session?.user.email).toBe('revoked@example.com') + + db.prepare('DELETE FROM "session" WHERE "userId" = ?').run(session!.user.id) + expect(db.prepare('SELECT COUNT(*) AS count FROM "session"').get()).toEqual({ count: 0 }) + + expect(await auth.api.getSession({ headers })).toBeNull() + } finally { + db.close() + } + }, 30000) + it('creates an auth instance without social providers and responds to requests', async () => { - const db = createTestDb() + const db = createAuthDatabase() const auth = createAuth(db) expect(typeof auth.api.getSession).toBe('function') @@ -141,7 +168,7 @@ describe('createAuth', () => { ENV.AUTH.DISCORD_CLIENT_ID = 'discord-id' ENV.AUTH.DISCORD_CLIENT_SECRET = 'discord-secret' - const db = createTestDb() + const db = createAuthDatabase() const auth = createAuth(db) expect(typeof auth.api.getSession).toBe('function') @@ -157,7 +184,7 @@ describe('createAuth', () => { ENV.AUTH.GOOGLE_CLIENT_SECRET = 'google-secret' ENV.AUTH.DISCORD_CLIENT_ID = 'discord-id' - const db = createTestDb() + const db = createAuthDatabase() const auth = createAuth(db) const res = await auth.handler(new Request('http://localhost/api/auth/ok')) @@ -171,7 +198,7 @@ describe('createAuth', () => { ENV.SERVER.PORT = 4321 ENV.AUTH.SECURE_COOKIES = true - const db = createTestDb() + const db = createAuthDatabase() const auth = createAuth(db) const res = await auth.handler(new Request('http://localhost/api/auth/ok')) @@ -183,7 +210,7 @@ describe('createAuth', () => { it('uses the first trusted origin as the base URL', async () => { ENV.AUTH.TRUSTED_ORIGINS = ' http://example.test ,http://localhost:5003' - const db = createTestDb() + const db = createAuthDatabase() const auth = createAuth(db) const res = await auth.handler(new Request('http://example.test/api/auth/ok')) diff --git a/backend/test/auth/middleware-same-site.test.ts b/backend/test/auth/middleware-same-site.test.ts index 5fa8c67c9..f507860ec 100644 --- a/backend/test/auth/middleware-same-site.test.ts +++ b/backend/test/auth/middleware-same-site.test.ts @@ -147,6 +147,17 @@ describe('createAuthMiddleware same-site guard', () => { expect(res.status).toBe(403) expect(getSession).not.toHaveBeenCalled() }) + + it('does not log cookie names or values during the auth check', async () => { + const app = createApp(getSession) + + const res = await app.request('/', { headers: { cookie: 'opencode.session=secret-token' } }) + + expect(res.status).toBe(200) + const debugMessages = loggerMock.debug.mock.calls.flat().join(' ') + expect(debugMessages).not.toContain('opencode.session') + expect(debugMessages).not.toContain('secret-token') + }) }) describe('getTrustedOrigins', () => { diff --git a/backend/test/routes/auth.test.ts b/backend/test/routes/auth.test.ts index e9d5eee73..00ddc9c3a 100644 --- a/backend/test/routes/auth.test.ts +++ b/backend/test/routes/auth.test.ts @@ -72,6 +72,17 @@ function insertCredentialAccount(db: ReturnType, id: string ).run(id, userId, 'credential', userId, password, Date.now(), Date.now()) } +function insertSession(db: ReturnType, id: string, userId: string, token: string): void { + db.prepare( + 'INSERT INTO "session" (id, expiresAt, token, createdAt, updatedAt, userId) VALUES (?, ?, ?, ?, ?, ?)' + ).run(id, Date.now() + 86_400_000, token, Date.now(), Date.now(), userId) +} + +function listSessionIds(db: ReturnType, userId: string): string[] { + const rows = db.prepare('SELECT id FROM "session" WHERE "userId" = ? ORDER BY id').all(userId) as { id: string }[] + return rows.map((row) => row.id) +} + function createSession(): Session { return { session: { @@ -127,7 +138,7 @@ describe('createAuthRoutes', () => { expect(await res.text()).toBe('created') }) - it('logs sign-in responses when a set-cookie header is present', async () => { + it('does not log sign-in response headers', async () => { const handler = vi.fn(async () => new Response('ok', { status: 200, headers: { 'set-cookie': 'opencode.session=abc; Path=/; HttpOnly' }, @@ -136,30 +147,6 @@ describe('createAuthRoutes', () => { await app.fetch(new Request('http://localhost/api/auth/sign-in/email', { method: 'POST', body: '{}' })) - expect(mockLoggerInfo).toHaveBeenCalledWith(expect.stringContaining('Sign-in response')) - expect(mockLoggerInfo).toHaveBeenCalledWith(expect.stringContaining('present')) - expect(mockLoggerDebug).toHaveBeenCalledWith(expect.stringContaining('Set-Cookie header')) - }) - - it('logs sign-in responses when no set-cookie header is present', async () => { - const handler = vi.fn(async () => new Response('unauthorized', { status: 401 })) - const app = createAuthRoutes({ handler } as unknown as AuthInstance) - - await app.fetch(new Request('http://localhost/api/auth/sign-in/email', { method: 'POST', body: '{}' })) - - expect(mockLoggerInfo).toHaveBeenCalledWith(expect.stringContaining('missing')) - expect(mockLoggerDebug).not.toHaveBeenCalled() - }) - - it('does not log for non sign-in paths', async () => { - const handler = vi.fn(async () => new Response('ok', { - status: 200, - headers: { 'set-cookie': 'opencode.session=abc' }, - })) - const app = createAuthRoutes({ handler } as unknown as AuthInstance) - - await app.fetch(new Request('http://localhost/api/auth/get-session')) - expect(mockLoggerInfo).not.toHaveBeenCalled() expect(mockLoggerDebug).not.toHaveBeenCalled() }) @@ -204,6 +191,7 @@ describe('syncAdminFromEnv', () => { ENV.AUTH.ADMIN_PASSWORD = 'admin-password' insertUser(db, 'user-1', 'admin@example.com') insertCredentialAccount(db, 'account-1', 'user-1', 'old-hash') + insertSession(db, 'session-1', 'user-1', 'token-1') const auth = { api: { signUpEmail } } as unknown as AuthInstance await syncAdminFromEnv(auth, db) @@ -212,6 +200,19 @@ describe('syncAdminFromEnv', () => { expect(hashPasswordMock).not.toHaveBeenCalled() const account = db.prepare('SELECT password FROM "account" WHERE "userId" = ?').get('user-1') as { password: string } expect(account.password).toBe('old-hash') + expect(listSessionIds(db, 'user-1')).toEqual(['session-1']) + }) + + it('finds the existing admin user when ADMIN_EMAIL differs only by case', async () => { + ENV.AUTH.ADMIN_EMAIL = 'Admin@Example.com' + ENV.AUTH.ADMIN_PASSWORD = 'admin-password' + insertUser(db, 'user-1', 'admin@example.com') + const auth = { api: { signUpEmail } } as unknown as AuthInstance + + await syncAdminFromEnv(auth, db) + + expect(signUpEmail).not.toHaveBeenCalled() + expect(db.prepare('SELECT COUNT(*) AS count FROM "user"').get()).toEqual({ count: 1 }) }) it('resets the credential account password for an existing user', async () => { @@ -232,6 +233,39 @@ describe('syncAdminFromEnv', () => { expect(mockLoggerWarn).toHaveBeenCalledWith(expect.stringContaining('ADMIN_PASSWORD_RESET')) }) + it('revokes the existing sessions of the admin whose password was reset', async () => { + ENV.AUTH.ADMIN_EMAIL = 'admin@example.com' + ENV.AUTH.ADMIN_PASSWORD = 'new-password' + ENV.AUTH.ADMIN_PASSWORD_RESET = true + insertUser(db, 'user-1', 'admin@example.com') + insertUser(db, 'user-2', 'other@example.com') + insertCredentialAccount(db, 'account-1', 'user-1', 'old-hash') + insertSession(db, 'session-1', 'user-1', 'token-1') + insertSession(db, 'session-2', 'user-1', 'token-2') + insertSession(db, 'session-3', 'user-2', 'token-3') + const auth = { api: { signUpEmail } } as unknown as AuthInstance + + await syncAdminFromEnv(auth, db) + + expect(listSessionIds(db, 'user-1')).toEqual([]) + expect(listSessionIds(db, 'user-2')).toEqual(['session-3']) + }) + + it('rolls back the password reset when revoking the sessions fails', async () => { + ENV.AUTH.ADMIN_EMAIL = 'admin@example.com' + ENV.AUTH.ADMIN_PASSWORD = 'new-password' + ENV.AUTH.ADMIN_PASSWORD_RESET = true + insertUser(db, 'user-1', 'admin@example.com') + insertCredentialAccount(db, 'account-1', 'user-1', 'old-hash') + db.exec('DROP TABLE "session"') + const auth = { api: { signUpEmail } } as unknown as AuthInstance + + await expect(syncAdminFromEnv(auth, db)).rejects.toThrow() + + const account = db.prepare('SELECT password FROM "account" WHERE "userId" = ?').get('user-1') as { password: string } + expect(account.password).toBe('old-hash') + }) + it('creates a new admin user when none exists', async () => { ENV.AUTH.ADMIN_EMAIL = 'admin@example.com' ENV.AUTH.ADMIN_PASSWORD = 'admin-password' diff --git a/frontend/package.json b/frontend/package.json index 8dad5385b..e4a6eddb8 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -12,7 +12,7 @@ "test:run": "vitest run" }, "dependencies": { - "@better-auth/passkey": "^1.4.17", + "@better-auth/passkey": "^1.7.12", "@dnd-kit/core": "^6.3.1", "@dnd-kit/sortable": "^10.0.0", "@dnd-kit/utilities": "^3.2.2", @@ -32,7 +32,7 @@ "@xterm/addon-fit": "^0.11.0", "@xterm/addon-web-links": "^0.12.0", "@xterm/xterm": "^6.0.0", - "better-auth": "^1.4.17", + "better-auth": "^1.7.12", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "cronstrue": "^3.13.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6501e98a6..8a769f7a7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -27,14 +27,14 @@ importers: backend: dependencies: '@better-auth/passkey': - specifier: ^1.4.17 - version: 1.4.17(@better-auth/core@1.4.17(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.2))(jose@6.1.3)(kysely@0.28.10)(nanostores@1.1.0))(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-auth@1.4.17(better-sqlite3@12.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(solid-js@1.9.15)(vitest@3.2.4))(better-call@1.1.8(zod@4.3.2))(nanostores@1.1.0) + specifier: ^1.7.12 + version: 1.7.12(@better-auth/core@1.7.12(@better-auth/utils@0.5.0)(@better-fetch/fetch@1.3.2)(@opentelemetry/api@1.9.0)(better-call@1.4.4(zod@4.3.2))(jose@6.2.13)(kysely@0.29.7)(nanostores@1.5.5))(@better-auth/utils@0.5.0)(@better-fetch/fetch@1.3.2)(better-auth@1.7.12(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(solid-js@1.9.15)(vitest@3.2.4))(better-call@1.4.4(zod@4.3.2))(nanostores@1.5.5) '@hono/node-server': specifier: ^1.19.17 - version: 1.19.17(hono@4.11.7) + version: 1.19.17(hono@4.13.13) '@hono/node-ws': specifier: ^1.3.1 - version: 1.3.1(@hono/node-server@1.19.17(hono@4.11.7))(hono@4.11.7) + version: 1.3.1(@hono/node-server@1.19.17(hono@4.13.13))(hono@4.13.13) '@opencode-manager/shared': specifier: workspace:* version: link:../shared @@ -42,8 +42,8 @@ importers: specifier: ^7.0.1 version: 7.0.1 better-auth: - specifier: ^1.4.17 - version: 1.4.17(better-sqlite3@12.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(solid-js@1.9.15)(vitest@3.2.4) + specifier: ^1.7.12 + version: 1.7.12(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(solid-js@1.9.15)(vitest@3.2.4) croner: specifier: ^10.0.1 version: 10.0.1 @@ -51,8 +51,8 @@ importers: specifier: ^4.1.0 version: 4.1.0 hono: - specifier: ^4.11.7 - version: 4.11.7 + specifier: ^4.13.13 + version: 4.13.13 jsonc-parser: specifier: ^3.3.1 version: 3.3.1 @@ -106,8 +106,8 @@ importers: frontend: dependencies: '@better-auth/passkey': - specifier: ^1.4.17 - version: 1.4.17(@better-auth/core@1.4.17(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.2))(jose@6.1.3)(kysely@0.28.10)(nanostores@1.1.0))(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-auth@1.4.17(better-sqlite3@12.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(solid-js@1.9.15)(vitest@3.2.4))(better-call@1.1.8(zod@4.3.2))(nanostores@1.1.0) + specifier: ^1.7.12 + version: 1.7.12(@better-auth/core@1.7.12(@better-auth/utils@0.5.0)(@better-fetch/fetch@1.3.2)(@opentelemetry/api@1.9.0)(better-call@1.4.4(zod@4.3.2))(jose@6.2.13)(kysely@0.29.7)(nanostores@1.5.5))(@better-auth/utils@0.5.0)(@better-fetch/fetch@1.3.2)(better-auth@1.7.12(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(solid-js@1.9.15)(vitest@3.2.4))(better-call@1.4.4(zod@4.3.2))(nanostores@1.5.5) '@dnd-kit/core': specifier: ^6.3.1 version: 6.3.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -166,8 +166,8 @@ importers: specifier: ^6.0.0 version: 6.0.0 better-auth: - specifier: ^1.4.17 - version: 1.4.17(better-sqlite3@12.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(solid-js@1.9.15)(vitest@3.2.4) + specifier: ^1.7.12 + version: 1.7.12(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(solid-js@1.9.15)(vitest@3.2.4) class-variance-authority: specifier: ^0.7.1 version: 0.7.1 @@ -656,6 +656,10 @@ packages: resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} engines: {node: '>=6.9.0'} + '@babel/runtime@7.29.10': + resolution: {integrity: sha512-NpugTzbKgGrNe45Ui32cN8vCFFMxVtP/9rtfwv0nP5FRDAjvYBxJcLVpYA9mr1jxP6cnIT7x9LUzuDTbWYYNRA==} + engines: {node: '>=6.9.0'} + '@babel/template@7.27.2': resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} @@ -684,36 +688,91 @@ packages: resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} - '@better-auth/core@1.4.17': - resolution: {integrity: sha512-WSaEQDdUO6B1CzAmissN6j0lx9fM9lcslEYzlApB5UzFaBeAOHNUONTdglSyUs6/idiZBoRvt0t/qMXCgIU8ug==} + '@better-auth/core@1.7.12': + resolution: {integrity: sha512-SUStBGHJ13KnSO6+7U/1DSlfuOtln4jtOrFZqzQtxZVHZIrAoMjwHNGitlF+s7hvKbuC3Z14xjnqfLLqIqGfxw==} peerDependencies: - '@better-auth/utils': 0.3.0 - '@better-fetch/fetch': 1.1.21 - better-call: 1.1.8 + '@better-auth/utils': ^0.4.2 || ^0.5.0 + '@better-fetch/fetch': 1.3.2 + '@opentelemetry/api': ^1.9.0 + better-call: 1.4.4 jose: ^6.1.0 - kysely: ^0.28.5 + kysely: ^0.28.5 || ^0.29.0 nanostores: ^1.0.1 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + + '@better-auth/drizzle-adapter@1.7.12': + resolution: {integrity: sha512-Qzoyuf05aK01Pc0k3EXv8Xj3XCT2m2dCWc5HoB7x+xX6N3Pm2eQsca+UIArsJcbuNEWWP3L51oIebnBoHJ5DTw==} + peerDependencies: + '@better-auth/core': ^1.7.12 + '@better-auth/utils': ^0.4.2 || ^0.5.0 + drizzle-orm: ^0.45.2 || >=1.0.0-rc.1 <2.0.0 + peerDependenciesMeta: + drizzle-orm: + optional: true + + '@better-auth/kysely-adapter@1.7.12': + resolution: {integrity: sha512-1PaFXktLv4n3DmrGbPaCj5SsvcT40NnWw7NLua5/J1+8/A051N5ZzqOwJifXEIQX5k6NdwvmymwDQxKytduEAQ==} + peerDependencies: + '@better-auth/core': ^1.7.12 + '@better-auth/utils': ^0.4.2 || ^0.5.0 + kysely: ^0.28.17 || ^0.29.0 + peerDependenciesMeta: + kysely: + optional: true + + '@better-auth/memory-adapter@1.7.12': + resolution: {integrity: sha512-glaDwXzDptnddHqRuu7fj47FAssUcOzLNgdlTGJoEPrspkX69x2vnXwgAzNuApjZI21WLtPH/rQ6CN+DQGybPA==} + peerDependencies: + '@better-auth/core': ^1.7.12 + '@better-auth/utils': ^0.4.2 || ^0.5.0 + + '@better-auth/mongo-adapter@1.7.12': + resolution: {integrity: sha512-HKV4sgYSw/Gdt9AuHlESMkiKL72SWdGweDy1Wsyxoh06BpG7aNu4aSJ7marNpMdKZteyRbxWWqQkA9ediA8qFw==} + peerDependencies: + '@better-auth/core': ^1.7.12 + '@better-auth/utils': ^0.4.2 || ^0.5.0 + mongodb: ^6.0.0 || ^7.0.0 + peerDependenciesMeta: + mongodb: + optional: true - '@better-auth/passkey@1.4.17': - resolution: {integrity: sha512-SmS7a3UYi9A0muo4fWx1wEn59vtjoOLBFD5PnRo330BcXro6mHWxG/IXtnOnyeQKNGnEp4X7/QXcRrW/nDH0Iw==} + '@better-auth/passkey@1.7.12': + resolution: {integrity: sha512-DV775/rqg56sxOo13xo6RcFEtVYMXvUBWIhovadzsroZX7JF8VBQC+fLCcYoG1+n5yniI2l5r3PB5+Zt2UNYjg==} peerDependencies: - '@better-auth/core': 1.4.17 - '@better-auth/utils': 0.3.0 - '@better-fetch/fetch': 1.1.21 - better-auth: 1.4.17 - better-call: 1.1.8 + '@better-auth/core': ^1.7.12 + '@better-auth/utils': ^0.4.2 || ^0.5.0 + '@better-fetch/fetch': 1.3.2 + better-auth: ^1.7.12 + better-call: 1.4.4 nanostores: ^1.0.1 - '@better-auth/telemetry@1.4.17': - resolution: {integrity: sha512-R1BC4e/bNjQbXu7lG6ubpgmsPj7IMqky5DvMlzAtnAJWJhh99pMh/n6w5gOHa0cqDZgEAuj75IPTxv+q3YiInA==} + '@better-auth/prisma-adapter@1.7.12': + resolution: {integrity: sha512-FZRX6ORbwhDmeYE1Tl0IPtUn8v3BlVFgbJxDnm/DCNHxuFRf+0t4HfddUgYeYehHFR8aSDsdYX44fEFWM9877w==} peerDependencies: - '@better-auth/core': 1.4.17 + '@better-auth/core': ^1.7.12 + '@better-auth/utils': ^0.4.2 || ^0.5.0 + '@prisma/client': ^5.0.0 || ^6.0.0 || ^7.0.0 + prisma: ^5.0.0 || ^6.0.0 || ^7.0.0 + peerDependenciesMeta: + '@prisma/client': + optional: true + prisma: + optional: true + + '@better-auth/telemetry@1.7.12': + resolution: {integrity: sha512-DaDkKNnI99vKGGbWq9KJg2uYeaOjsK9nIBw9T2m2KG/RkxpvQRjYkZ00++up2bZQkR5pB1nukGbplza3UJG/Xg==} + peerDependencies: + '@better-auth/core': ^1.7.12 + '@better-auth/utils': ^0.4.2 || ^0.5.0 + '@better-fetch/fetch': 1.3.2 - '@better-auth/utils@0.3.0': - resolution: {integrity: sha512-W+Adw6ZA6mgvnSnhOki270rwJ42t4XzSK6YWGF//BbVXL6SwCLWfyzBc1lN2m/4RM28KubdBKQ4X5VMoLRNPQw==} + '@better-auth/utils@0.5.0': + resolution: {integrity: sha512-BL8W4EfIZFwlu0r54m3v1ztjDhu6dDe/amLTm0xybmbZaNgYUqhD3SjpAsnq0q8YD6/ki4iwIgxJNLP/N3TxiA==} - '@better-fetch/fetch@1.1.21': - resolution: {integrity: sha512-/ImESw0sskqlVR94jB+5+Pxjf+xBwDZF/N5+y2/q4EqD7IARUTSpPfIo8uf39SYpCxyOCtbyYpUrZ3F/k0zT4A==} + '@better-fetch/fetch@1.3.2': + resolution: {integrity: sha512-Gs7n99b5tqUC6cQAPbV0uED3IraHB6xQbHLQ/C3l7ZFafHScOx9pQ+DYmP5blbLFShVWLqxNUlI9wi4xU/X+ow==} '@braintree/sanitize-url@7.1.1': resolution: {integrity: sha512-i1L7noDNxtFyL5DmZafWy1wRVhGehQmzZaz1HiN5e7iylJMSZR7ekOV7NsIqa5qBldlLrsKv4HbgFUVlQrz8Mw==} @@ -1171,12 +1230,12 @@ packages: cpu: [x64] os: [win32] - '@noble/ciphers@2.1.1': - resolution: {integrity: sha512-bysYuiVfhxNJuldNXlFEitTVdNnYUc+XNJZd7Qm2a5j1vZHgY+fazadNFWFaMK/2vye0JVlxV3gHmC0WDfAOQw==} + '@noble/ciphers@2.4.0': + resolution: {integrity: sha512-AnjFn0Jv92laAkvMrghlFZq4qQCIN/4DxFV/eooqtC2YTjB7kBeLMS2T9KJX4Dn+ZVXLOwK0lSgqDtx9gvxtiw==} engines: {node: '>= 20.19.0'} - '@noble/hashes@2.0.1': - resolution: {integrity: sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==} + '@noble/hashes@2.4.0': + resolution: {integrity: sha512-X5XaVWZIBCT7HHZGm5I7ZQXDwLG+bGXuSrMQAW+7Zvl87h1kmc1ZB1VSRJcpUfoUrGQp4Fkoxm5kZ+Ms+aW+eA==} engines: {node: '>= 20.19.0'} '@npmcli/agent@4.0.2': @@ -1415,8 +1474,9 @@ packages: '@peculiar/asn1-csr@2.6.0': resolution: {integrity: sha512-BeWIu5VpTIhfRysfEp73SGbwjjoLL/JWXhJ/9mo4vXnz3tRGm+NGm3KNcRzQ9VMVqwYS2RHlolz21svzRXIHPQ==} - '@peculiar/asn1-ecc@2.6.0': - resolution: {integrity: sha512-FF3LMGq6SfAOwUG2sKpPXblibn6XnEIKa+SryvUl5Pik+WR9rmRA3OCiwz8R3lVXnYnyRkSZsSLdml8H3UiOcw==} + '@peculiar/asn1-ecc@2.11.0': + resolution: {integrity: sha512-jj1alGEKev7/un+cI+exyVK9m31lmP7cCBMCZuCb0wkFQH2zmKmJzNiG4wqXFNzlcP8timHLnzf3lV3OxBpb/Q==} + engines: {node: '>=14'} '@peculiar/asn1-pfx@2.6.0': resolution: {integrity: sha512-rtUvtf+tyKGgokHHmZzeUojRZJYPxoD/jaN1+VAB4kKR7tXrnDCA/RAWXAIhMJJC+7W27IIRGe9djvxKgsldCQ==} @@ -1427,17 +1487,23 @@ packages: '@peculiar/asn1-pkcs9@2.6.0': resolution: {integrity: sha512-b78OQ6OciW0aqZxdzliXGYHASeCvvw5caqidbpQRYW2mBtXIX2WhofNXTEe7NyxTb0P6J62kAAWLwn0HuMF1Fw==} - '@peculiar/asn1-rsa@2.6.0': - resolution: {integrity: sha512-Nu4C19tsrTsCp9fDrH+sdcOKoVfdfoQQ7S3VqjJU6vedR7tY3RLkQ5oguOIB3zFW33USDUuYZnPEQYySlgha4w==} + '@peculiar/asn1-rsa@2.11.0': + resolution: {integrity: sha512-S2sBJmbfI09Kzdt9cEhE6pDNjHpVTkURs+811+PxS8AvsTLxC4woMNRhxHYaIbClkkNfAVt0tZxJdINVfUmzuA==} + engines: {node: '>=14'} - '@peculiar/asn1-schema@2.6.0': - resolution: {integrity: sha512-xNLYLBFTBKkCzEZIw842BxytQQATQv+lDTCEMZ8C196iJcJJMBUZxrhSTxLaohMyKK8QlzRNTRkUmanucnDSqg==} + '@peculiar/asn1-schema@2.11.0': + resolution: {integrity: sha512-8xh4avo53/vXO6UEv9yaoJ83hY581geaLTygf61NPIXP5AeIZCPjJhpTaYU23IZkG+NpLN/C9FYzWp7hphIT9A==} + engines: {node: '>=14'} '@peculiar/asn1-x509-attr@2.6.0': resolution: {integrity: sha512-MuIAXFX3/dc8gmoZBkwJWxUWOSvG4MMDntXhrOZpJVMkYX+MYc/rUAU2uJOved9iJEoiUx7//3D8oG83a78UJA==} - '@peculiar/asn1-x509@2.6.0': - resolution: {integrity: sha512-uzYbPEpoQiBoTq0/+jZtpM6Gq6zADBx+JNFP3yqRgziWBxQ/Dt/HcuvRfm9zJTPdRcBqPNdaRHTVwpyiq6iNMA==} + '@peculiar/asn1-x509@2.11.0': + resolution: {integrity: sha512-J1sHAwGNlk+8J+FeR1eLVc6Gq0T9f9ITc3HWyPYgJraoW6U8AJuQiWVJ3SCEpltfTdpOY7fHdHT5oKAsbK/jww==} + engines: {node: '>=14'} + + '@peculiar/utils@2.0.3': + resolution: {integrity: sha512-+oL3HPFRIZ1St2K50lWCXiioIgSoxzz7R1J3uF6neO2yl1sgmpgY6XXJH4BdpoDkMWznQTeYF6oWNDZLCdQ4eQ==} '@peculiar/x509@1.14.3': resolution: {integrity: sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA==} @@ -2083,11 +2149,11 @@ packages: resolution: {integrity: sha512-qv7+G3J2cc6wwFj3yKvXOamzqhMwSk1ogPGmhpS8iXllcPrJaIIBA+4HbttlHVu1pqWTdmaCH/WE7UOC51kdoA==} engines: {node: ^20.17.0 || >=22.9.0} - '@simplewebauthn/browser@13.2.2': - resolution: {integrity: sha512-FNW1oLQpTJyqG5kkDg5ZsotvWgmBaC6jCHR7Ej0qUNep36Wl9tj2eZu7J5rP+uhXgHaLk+QQ3lqcw2vS5MX1IA==} + '@simplewebauthn/browser@13.3.0': + resolution: {integrity: sha512-BE/UWv6FOToAdVk0EokzkqQQDOWtNydYlY6+OrmiZ5SCNmb41VehttboTetUM3T/fr6EAFYVXjz4My2wg230rQ==} - '@simplewebauthn/server@13.2.2': - resolution: {integrity: sha512-HcWLW28yTMGXpwE9VLx9J+N2KEUaELadLrkPEEI9tpI5la70xNEVEsu/C+m3u7uoq4FulLqZQhgBCzR9IZhFpA==} + '@simplewebauthn/server@13.3.3': + resolution: {integrity: sha512-LelX/lcy5cjc15A86i/aNxHhB5eU7dd20QsbP0VLAf9e38+SLlsnqCCyecx3xqfGofhmX05h1J9fKRYWxw+luA==} engines: {node: '>=20.0.0'} '@smithy/core@3.35.0': @@ -2611,6 +2677,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.19.0: + resolution: {integrity: sha512-oJlA3XiRm7Cyk6qFD2Jn8ak9B7jSy0qy00ADO3+8dpT0LSjFihQYv4C02LFCSYJV3Q37xYwwRy5m+IpIiUzqWw==} + engines: {node: '>=0.4.0'} + hasBin: true + agent-base@7.1.4: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} @@ -2663,8 +2734,8 @@ packages: asn1.js@5.4.1: resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} - asn1js@3.0.7: - resolution: {integrity: sha512-uLvq6KJu04qoQM6gvBfKFjlh6Gl0vOKQuR5cJMDHQkmwfMOQeN3F3SHCv9SNYSL+CRoHvOGFfllDlVz03GQjvQ==} + asn1js@3.1.0: + resolution: {integrity: sha512-HWYi1THkOqguCiO+vwj09ZkQFD2kKEsejYHAYCtX0D80WVdoDnvRc9IukXX/jeb0T9NRWJnRtqwdbHltnFjwXA==} engines: {node: '>=12.0.0'} assertion-error@2.0.1: @@ -2730,17 +2801,16 @@ packages: resolution: {integrity: sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==} hasBin: true - better-auth@1.4.17: - resolution: {integrity: sha512-VmHGQyKsEahkEs37qguROKg/6ypYpNF13D7v/lkbO7w7Aivz0Bv2h+VyUkH4NzrGY0QBKXi1577mGhDCVwp0ew==} + better-auth@1.7.12: + resolution: {integrity: sha512-f1fEG0QdTslzbmFA+vOGFFW/XXCWkG4kBxLeH9n1vp1otTH9+ZzV6EJ6797GStWeiYYgS5Vnt9xqE12KwSyAAw==} peerDependencies: '@lynx-js/react': '*' '@prisma/client': ^5.0.0 || ^6.0.0 || ^7.0.0 - '@sveltejs/kit': ^2.0.0 + '@sveltejs/kit': ^2.0.0 || ^3.0.0 '@tanstack/react-start': ^1.0.0 '@tanstack/solid-start': ^1.0.0 - better-sqlite3: ^12.0.0 - drizzle-kit: '>=0.31.4' - drizzle-orm: '>=0.41.0' + drizzle-kit: '>=0.31.4 || >=1.0.0-beta.1' + drizzle-orm: ^0.45.2 || >=1.0.0-rc.1 <2.0.0 mongodb: ^6.0.0 || ^7.0.0 mysql2: ^3.0.0 next: ^14.0.0 || ^15.0.0 || ^16.0.0 @@ -2750,7 +2820,7 @@ packages: react-dom: ^18.0.0 || ^19.0.0 solid-js: ^1.0.0 svelte: ^4.0.0 || ^5.0.0 - vitest: ^2.0.0 || ^3.0.0 || ^4.0.0 + vitest: ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 vue: ^3.0.0 peerDependenciesMeta: '@lynx-js/react': @@ -2763,8 +2833,6 @@ packages: optional: true '@tanstack/solid-start': optional: true - better-sqlite3: - optional: true drizzle-kit: optional: true drizzle-orm: @@ -2792,8 +2860,8 @@ packages: vue: optional: true - better-call@1.1.8: - resolution: {integrity: sha512-XMQ2rs6FNXasGNfMjzbyroSwKwYbZ/T3IxruSS6U2MJRsSYh3wYtG3o6H00ZlKZ/C/UPOAD97tqgQJNsxyeTXw==} + better-call@1.4.4: + resolution: {integrity: sha512-Gq4XdGFy4dmUxFEAX2nj0ycFcFbD9ZWh8YROouZoyXeF1M11TpYbplk0pDByTFF8Wz+MYa6W9052c9m7dD+mfw==} peerDependencies: zod: ^4.0.0 peerDependenciesMeta: @@ -3252,8 +3320,8 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - defu@6.1.4: - resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + defu@6.1.7: + resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==} delaunator@5.0.1: resolution: {integrity: sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==} @@ -3652,8 +3720,8 @@ packages: resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==} engines: {node: '>=12.0.0'} - hono@4.11.7: - resolution: {integrity: sha512-l7qMiNee7t82bH3SeyUCt9UF15EVmaBvsppY2zQtrbIhl/yzBTny+YUxsVjSjQ6gaqaeVtZmGocom8TzBlA4Yw==} + hono@4.13.13: + resolution: {integrity: sha512-CQ46U0ZkAGmbT/4UxdzzGJpacP2IeKgY4a5/tOI9AABbpOMfK739wfDXmv1usCk+3RkKj1hQy4/fjhiwa2xlrA==} engines: {node: '>=16.9.0'} hosted-git-info@9.0.3: @@ -3822,8 +3890,8 @@ packages: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true - jose@6.1.3: - resolution: {integrity: sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==} + jose@6.2.13: + resolution: {integrity: sha512-7TIg10ZE1x82YediN+lcrPNvGMKge9yFHQD+Qho/b8y2adfugU3AsvvHfxV0fzyFllT6l9xCjf4RWY9g/Z9PJQ==} js-tokens@10.0.0: resolution: {integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==} @@ -3911,9 +3979,9 @@ packages: khroma@2.1.0: resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==} - kysely@0.28.10: - resolution: {integrity: sha512-ksNxfzIW77OcZ+QWSAPC7yDqUSaIVwkTWnTPNiIy//vifNbwsSgQ57OkkncHxxpcBHM3LRfLAZVEh7kjq5twVA==} - engines: {node: '>=20.0.0'} + kysely@0.29.7: + resolution: {integrity: sha512-fmIq+7kv4WbFm2tcfznRzikqB4cuNpgZ40PSU2fAJ2/OO5XhojqnTPrmgrCjYSRJVwBln03XcRXJGnw9H099IQ==} + engines: {node: '>=22.0.0'} langium@3.3.1: resolution: {integrity: sha512-QJv/h939gDpvT+9SiLVlY7tZC3xB2qK57v0J04Sh9wpMb6MP1q8gB21L3WIo8T5P1MSMg3Ep14L7KkDCFG3y4w==} @@ -4331,8 +4399,8 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - nanostores@1.1.0: - resolution: {integrity: sha512-yJBmDJr18xy47dbNVlHcgdPrulSn1nhSE6Ns9vTG+Nx9VPT6iV1MD6aQFp/t52zpf82FhLLTXAXr30NuCnxvwA==} + nanostores@1.5.5: + resolution: {integrity: sha512-FixtE239Gl6Gz0ZGCK0WzvNwObNCIwVT+L7zQcf1QgcA6AzBxblzqe9OT88qiucNkhsjSOqiogSaF5jVbJiqSA==} engines: {node: ^20.0.0 || >=22.0.0} napi-build-utils@2.0.0: @@ -4592,8 +4660,8 @@ packages: pvtsutils@1.3.6: resolution: {integrity: sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==} - pvutils@1.1.5: - resolution: {integrity: sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==} + pvutils@1.2.0: + resolution: {integrity: sha512-BbubeCEyTuQjVMakvJQ/Sxbc93F2pwmbsxONT/ZRrwU7Ua38d8unYTwXpTVLAKJ4BDuH9IGztCjQcd/N/39Dvg==} engines: {node: '>=16.0.0'} rc@1.2.8: @@ -4757,8 +4825,8 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - rou3@0.7.12: - resolution: {integrity: sha512-iFE4hLDuloSWcD7mjdCDhx2bKcIsYbtOTpfH5MHHLSKMOUyjqQXTeZVa289uuwEGEKFoE/BAPbhaU4B774nceg==} + rou3@0.9.2: + resolution: {integrity: sha512-3SOzvaAg8rkHrXtRjpCvCvbyO5to9oOO27Z/XqHEYXfMRVSw/qMIVdmaOk9W2lcRLtR6dlqTjo9hDeJk70QBYQ==} roughjs@4.6.6: resolution: {integrity: sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==} @@ -4803,13 +4871,26 @@ packages: peerDependencies: seroval: ^1.0 + seroval-plugins@1.5.6: + resolution: {integrity: sha512-HXuLAX2pu/UByPpaeo/TaMfvMIi+1QqIoPJYCcAtU8QkVNwgR6MPlGuCQTErV1JwraaMbYaWVIBX7mppzGLATQ==} + engines: {node: '>=10'} + peerDependencies: + seroval: ^1.0 + seroval@1.5.4: resolution: {integrity: sha512-46uFvgrXTVxZcUorgSSRZ4y+ieqLLQRMlG4bnCZKW3qI6BZm7Rg4ntMW4p1mILEEBZWrFlcpp0AyIIlM6jD9iw==} engines: {node: '>=10'} + seroval@1.5.6: + resolution: {integrity: sha512-rVQVWjjSvlINzaQPZH5JFqsqEsIWdTxY3iJZCnTL/5gQbXIRooVZKI60tVCkOVfzcRPejboxO2t0P89dg5mQaA==} + engines: {node: '>=10'} + set-cookie-parser@2.7.2: resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==} + set-cookie-parser@3.1.4: + resolution: {integrity: sha512-iEmdEew+Tn1BwMGMP8LzGBEPC7Mf1sySjglCeEPb/Vchm9bnGezePvacYcId+fGprQzIng+TBkzqfJ/qS7AsBg==} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -5438,8 +5519,8 @@ packages: zod@4.3.2: resolution: {integrity: sha512-b8L8yn4rIVfiXyHAmnr52/ZEpDumlT0bmxiq3Ws1ybrinhflGpt12Hvv54kYnEsGPRs6o/Ka3/ppA2OWY21IVg==} - zod@4.3.5: - resolution: {integrity: sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==} + zod@4.6.7: + resolution: {integrity: sha512-g8W2D2kU6a8untc053fX1uVBKzM7yqAxW/3zwk83+6RyF2+SKOuV+c0wBDhUwzV1PaGapmZH+rmcUzPf+3CGwg==} zustand@5.0.9: resolution: {integrity: sha512-ALBtUj0AfjJt3uNRQoL1tL2tMvj6Gp/6e39dnfT6uzpelGru8v1tPOGBzayOWbPJvujM8JojDk3E1LxeFisBNg==} @@ -5952,6 +6033,8 @@ snapshots: '@babel/runtime@7.28.4': {} + '@babel/runtime@7.29.10': {} + '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 @@ -6000,38 +6083,69 @@ snapshots: '@bcoe/v8-coverage@1.0.2': {} - '@better-auth/core@1.4.17(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.2))(jose@6.1.3)(kysely@0.28.10)(nanostores@1.1.0)': + '@better-auth/core@1.7.12(@better-auth/utils@0.5.0)(@better-fetch/fetch@1.3.2)(@opentelemetry/api@1.9.0)(better-call@1.4.4(zod@4.3.2))(jose@6.2.13)(kysely@0.29.7)(nanostores@1.5.5)': dependencies: - '@better-auth/utils': 0.3.0 - '@better-fetch/fetch': 1.1.21 + '@better-auth/utils': 0.5.0 + '@better-fetch/fetch': 1.3.2 '@standard-schema/spec': 1.1.0 - better-call: 1.1.8(zod@4.3.2) - jose: 6.1.3 - kysely: 0.28.10 - nanostores: 1.1.0 - zod: 4.3.5 + better-call: 1.4.4(zod@4.3.2) + jose: 6.2.13 + kysely: 0.29.7 + nanostores: 1.5.5 + zod: 4.6.7 + optionalDependencies: + '@opentelemetry/api': 1.9.0 - '@better-auth/passkey@1.4.17(@better-auth/core@1.4.17(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.2))(jose@6.1.3)(kysely@0.28.10)(nanostores@1.1.0))(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-auth@1.4.17(better-sqlite3@12.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(solid-js@1.9.15)(vitest@3.2.4))(better-call@1.1.8(zod@4.3.2))(nanostores@1.1.0)': + '@better-auth/drizzle-adapter@1.7.12(@better-auth/core@1.7.12(@better-auth/utils@0.5.0)(@better-fetch/fetch@1.3.2)(@opentelemetry/api@1.9.0)(better-call@1.4.4(zod@4.3.2))(jose@6.2.13)(kysely@0.29.7)(nanostores@1.5.5))(@better-auth/utils@0.5.0)': dependencies: - '@better-auth/core': 1.4.17(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.2))(jose@6.1.3)(kysely@0.28.10)(nanostores@1.1.0) - '@better-auth/utils': 0.3.0 - '@better-fetch/fetch': 1.1.21 - '@simplewebauthn/browser': 13.2.2 - '@simplewebauthn/server': 13.2.2 - better-auth: 1.4.17(better-sqlite3@12.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(solid-js@1.9.15)(vitest@3.2.4) - better-call: 1.1.8(zod@4.3.2) - nanostores: 1.1.0 - zod: 4.3.5 + '@better-auth/core': 1.7.12(@better-auth/utils@0.5.0)(@better-fetch/fetch@1.3.2)(@opentelemetry/api@1.9.0)(better-call@1.4.4(zod@4.3.2))(jose@6.2.13)(kysely@0.29.7)(nanostores@1.5.5) + '@better-auth/utils': 0.5.0 - '@better-auth/telemetry@1.4.17(@better-auth/core@1.4.17(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.2))(jose@6.1.3)(kysely@0.28.10)(nanostores@1.1.0))': + '@better-auth/kysely-adapter@1.7.12(@better-auth/core@1.7.12(@better-auth/utils@0.5.0)(@better-fetch/fetch@1.3.2)(@opentelemetry/api@1.9.0)(better-call@1.4.4(zod@4.3.2))(jose@6.2.13)(kysely@0.29.7)(nanostores@1.5.5))(@better-auth/utils@0.5.0)(kysely@0.29.7)': dependencies: - '@better-auth/core': 1.4.17(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.2))(jose@6.1.3)(kysely@0.28.10)(nanostores@1.1.0) - '@better-auth/utils': 0.3.0 - '@better-fetch/fetch': 1.1.21 + '@better-auth/core': 1.7.12(@better-auth/utils@0.5.0)(@better-fetch/fetch@1.3.2)(@opentelemetry/api@1.9.0)(better-call@1.4.4(zod@4.3.2))(jose@6.2.13)(kysely@0.29.7)(nanostores@1.5.5) + '@better-auth/utils': 0.5.0 + optionalDependencies: + kysely: 0.29.7 - '@better-auth/utils@0.3.0': {} + '@better-auth/memory-adapter@1.7.12(@better-auth/core@1.7.12(@better-auth/utils@0.5.0)(@better-fetch/fetch@1.3.2)(@opentelemetry/api@1.9.0)(better-call@1.4.4(zod@4.3.2))(jose@6.2.13)(kysely@0.29.7)(nanostores@1.5.5))(@better-auth/utils@0.5.0)': + dependencies: + '@better-auth/core': 1.7.12(@better-auth/utils@0.5.0)(@better-fetch/fetch@1.3.2)(@opentelemetry/api@1.9.0)(better-call@1.4.4(zod@4.3.2))(jose@6.2.13)(kysely@0.29.7)(nanostores@1.5.5) + '@better-auth/utils': 0.5.0 + + '@better-auth/mongo-adapter@1.7.12(@better-auth/core@1.7.12(@better-auth/utils@0.5.0)(@better-fetch/fetch@1.3.2)(@opentelemetry/api@1.9.0)(better-call@1.4.4(zod@4.3.2))(jose@6.2.13)(kysely@0.29.7)(nanostores@1.5.5))(@better-auth/utils@0.5.0)': + dependencies: + '@better-auth/core': 1.7.12(@better-auth/utils@0.5.0)(@better-fetch/fetch@1.3.2)(@opentelemetry/api@1.9.0)(better-call@1.4.4(zod@4.3.2))(jose@6.2.13)(kysely@0.29.7)(nanostores@1.5.5) + '@better-auth/utils': 0.5.0 + + '@better-auth/passkey@1.7.12(@better-auth/core@1.7.12(@better-auth/utils@0.5.0)(@better-fetch/fetch@1.3.2)(@opentelemetry/api@1.9.0)(better-call@1.4.4(zod@4.3.2))(jose@6.2.13)(kysely@0.29.7)(nanostores@1.5.5))(@better-auth/utils@0.5.0)(@better-fetch/fetch@1.3.2)(better-auth@1.7.12(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(solid-js@1.9.15)(vitest@3.2.4))(better-call@1.4.4(zod@4.3.2))(nanostores@1.5.5)': + dependencies: + '@better-auth/core': 1.7.12(@better-auth/utils@0.5.0)(@better-fetch/fetch@1.3.2)(@opentelemetry/api@1.9.0)(better-call@1.4.4(zod@4.3.2))(jose@6.2.13)(kysely@0.29.7)(nanostores@1.5.5) + '@better-auth/utils': 0.5.0 + '@better-fetch/fetch': 1.3.2 + '@simplewebauthn/browser': 13.3.0 + '@simplewebauthn/server': 13.3.3 + better-auth: 1.7.12(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(solid-js@1.9.15)(vitest@3.2.4) + better-call: 1.4.4(zod@4.3.2) + nanostores: 1.5.5 + zod: 4.6.7 + + '@better-auth/prisma-adapter@1.7.12(@better-auth/core@1.7.12(@better-auth/utils@0.5.0)(@better-fetch/fetch@1.3.2)(@opentelemetry/api@1.9.0)(better-call@1.4.4(zod@4.3.2))(jose@6.2.13)(kysely@0.29.7)(nanostores@1.5.5))(@better-auth/utils@0.5.0)': + dependencies: + '@better-auth/core': 1.7.12(@better-auth/utils@0.5.0)(@better-fetch/fetch@1.3.2)(@opentelemetry/api@1.9.0)(better-call@1.4.4(zod@4.3.2))(jose@6.2.13)(kysely@0.29.7)(nanostores@1.5.5) + '@better-auth/utils': 0.5.0 + + '@better-auth/telemetry@1.7.12(@better-auth/core@1.7.12(@better-auth/utils@0.5.0)(@better-fetch/fetch@1.3.2)(@opentelemetry/api@1.9.0)(better-call@1.4.4(zod@4.3.2))(jose@6.2.13)(kysely@0.29.7)(nanostores@1.5.5))(@better-auth/utils@0.5.0)(@better-fetch/fetch@1.3.2)': + dependencies: + '@better-auth/core': 1.7.12(@better-auth/utils@0.5.0)(@better-fetch/fetch@1.3.2)(@opentelemetry/api@1.9.0)(better-call@1.4.4(zod@4.3.2))(jose@6.2.13)(kysely@0.29.7)(nanostores@1.5.5) + '@better-auth/utils': 0.5.0 + '@better-fetch/fetch': 1.3.2 + + '@better-auth/utils@0.5.0': + dependencies: + '@noble/hashes': 2.4.0 - '@better-fetch/fetch@1.1.21': {} + '@better-fetch/fetch@1.3.2': {} '@braintree/sanitize-url@7.1.1': {} @@ -6279,14 +6393,14 @@ snapshots: '@hexagon/base64@1.1.28': {} - '@hono/node-server@1.19.17(hono@4.11.7)': + '@hono/node-server@1.19.17(hono@4.13.13)': dependencies: - hono: 4.11.7 + hono: 4.13.13 - '@hono/node-ws@1.3.1(@hono/node-server@1.19.17(hono@4.11.7))(hono@4.11.7)': + '@hono/node-ws@1.3.1(@hono/node-server@1.19.17(hono@4.13.13))(hono@4.13.13)': dependencies: - '@hono/node-server': 1.19.17(hono@4.11.7) - hono: 4.11.7 + '@hono/node-server': 1.19.17(hono@4.13.13) + hono: 4.13.13 ws: 8.21.3 transitivePeerDependencies: - bufferutil @@ -6384,9 +6498,9 @@ snapshots: '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.4': optional: true - '@noble/ciphers@2.1.1': {} + '@noble/ciphers@2.4.0': {} - '@noble/hashes@2.0.1': {} + '@noble/hashes@2.4.0': {} '@npmcli/agent@4.0.2': dependencies: @@ -6750,46 +6864,46 @@ snapshots: '@peculiar/asn1-android@2.6.0': dependencies: - '@peculiar/asn1-schema': 2.6.0 - asn1js: 3.0.7 + '@peculiar/asn1-schema': 2.11.0 + asn1js: 3.1.0 tslib: 2.8.1 '@peculiar/asn1-cms@2.6.0': dependencies: - '@peculiar/asn1-schema': 2.6.0 - '@peculiar/asn1-x509': 2.6.0 + '@peculiar/asn1-schema': 2.11.0 + '@peculiar/asn1-x509': 2.11.0 '@peculiar/asn1-x509-attr': 2.6.0 - asn1js: 3.0.7 + asn1js: 3.1.0 tslib: 2.8.1 '@peculiar/asn1-csr@2.6.0': dependencies: - '@peculiar/asn1-schema': 2.6.0 - '@peculiar/asn1-x509': 2.6.0 - asn1js: 3.0.7 + '@peculiar/asn1-schema': 2.11.0 + '@peculiar/asn1-x509': 2.11.0 + asn1js: 3.1.0 tslib: 2.8.1 - '@peculiar/asn1-ecc@2.6.0': + '@peculiar/asn1-ecc@2.11.0': dependencies: - '@peculiar/asn1-schema': 2.6.0 - '@peculiar/asn1-x509': 2.6.0 - asn1js: 3.0.7 + '@peculiar/asn1-schema': 2.11.0 + '@peculiar/asn1-x509': 2.11.0 + asn1js: 3.1.0 tslib: 2.8.1 '@peculiar/asn1-pfx@2.6.0': dependencies: '@peculiar/asn1-cms': 2.6.0 '@peculiar/asn1-pkcs8': 2.6.0 - '@peculiar/asn1-rsa': 2.6.0 - '@peculiar/asn1-schema': 2.6.0 - asn1js: 3.0.7 + '@peculiar/asn1-rsa': 2.11.0 + '@peculiar/asn1-schema': 2.11.0 + asn1js: 3.1.0 tslib: 2.8.1 '@peculiar/asn1-pkcs8@2.6.0': dependencies: - '@peculiar/asn1-schema': 2.6.0 - '@peculiar/asn1-x509': 2.6.0 - asn1js: 3.0.7 + '@peculiar/asn1-schema': 2.11.0 + '@peculiar/asn1-x509': 2.11.0 + asn1js: 3.1.0 tslib: 2.8.1 '@peculiar/asn1-pkcs9@2.6.0': @@ -6797,48 +6911,52 @@ snapshots: '@peculiar/asn1-cms': 2.6.0 '@peculiar/asn1-pfx': 2.6.0 '@peculiar/asn1-pkcs8': 2.6.0 - '@peculiar/asn1-schema': 2.6.0 - '@peculiar/asn1-x509': 2.6.0 + '@peculiar/asn1-schema': 2.11.0 + '@peculiar/asn1-x509': 2.11.0 '@peculiar/asn1-x509-attr': 2.6.0 - asn1js: 3.0.7 + asn1js: 3.1.0 tslib: 2.8.1 - '@peculiar/asn1-rsa@2.6.0': + '@peculiar/asn1-rsa@2.11.0': dependencies: - '@peculiar/asn1-schema': 2.6.0 - '@peculiar/asn1-x509': 2.6.0 - asn1js: 3.0.7 + '@peculiar/asn1-schema': 2.11.0 + '@peculiar/asn1-x509': 2.11.0 + asn1js: 3.1.0 tslib: 2.8.1 - '@peculiar/asn1-schema@2.6.0': + '@peculiar/asn1-schema@2.11.0': dependencies: - asn1js: 3.0.7 - pvtsutils: 1.3.6 + '@peculiar/utils': 2.0.3 + asn1js: 3.1.0 tslib: 2.8.1 '@peculiar/asn1-x509-attr@2.6.0': dependencies: - '@peculiar/asn1-schema': 2.6.0 - '@peculiar/asn1-x509': 2.6.0 - asn1js: 3.0.7 + '@peculiar/asn1-schema': 2.11.0 + '@peculiar/asn1-x509': 2.11.0 + asn1js: 3.1.0 tslib: 2.8.1 - '@peculiar/asn1-x509@2.6.0': + '@peculiar/asn1-x509@2.11.0': + dependencies: + '@peculiar/asn1-schema': 2.11.0 + '@peculiar/utils': 2.0.3 + asn1js: 3.1.0 + tslib: 2.8.1 + + '@peculiar/utils@2.0.3': dependencies: - '@peculiar/asn1-schema': 2.6.0 - asn1js: 3.0.7 - pvtsutils: 1.3.6 tslib: 2.8.1 '@peculiar/x509@1.14.3': dependencies: '@peculiar/asn1-cms': 2.6.0 '@peculiar/asn1-csr': 2.6.0 - '@peculiar/asn1-ecc': 2.6.0 + '@peculiar/asn1-ecc': 2.11.0 '@peculiar/asn1-pkcs9': 2.6.0 - '@peculiar/asn1-rsa': 2.6.0 - '@peculiar/asn1-schema': 2.6.0 - '@peculiar/asn1-x509': 2.6.0 + '@peculiar/asn1-rsa': 2.11.0 + '@peculiar/asn1-schema': 2.11.0 + '@peculiar/asn1-x509': 2.11.0 pvtsutils: 1.3.6 reflect-metadata: 0.2.2 tslib: 2.8.1 @@ -7414,17 +7532,17 @@ snapshots: '@sigstore/core': 3.2.1 '@sigstore/protobuf-specs': 0.5.2 - '@simplewebauthn/browser@13.2.2': {} + '@simplewebauthn/browser@13.3.0': {} - '@simplewebauthn/server@13.2.2': + '@simplewebauthn/server@13.3.3': dependencies: '@hexagon/base64': 1.1.28 '@levischuck/tiny-cbor': 0.2.11 '@peculiar/asn1-android': 2.6.0 - '@peculiar/asn1-ecc': 2.6.0 - '@peculiar/asn1-rsa': 2.6.0 - '@peculiar/asn1-schema': 2.6.0 - '@peculiar/asn1-x509': 2.6.0 + '@peculiar/asn1-ecc': 2.11.0 + '@peculiar/asn1-rsa': 2.11.0 + '@peculiar/asn1-schema': 2.11.0 + '@peculiar/asn1-x509': 2.11.0 '@peculiar/x509': 1.14.3 '@smithy/core@3.35.0': @@ -7578,7 +7696,7 @@ snapshots: '@testing-library/dom@10.4.1': dependencies: '@babel/code-frame': 7.29.7 - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.29.10 '@types/aria-query': 5.0.4 aria-query: 5.3.0 dom-accessibility-api: 0.5.16 @@ -8045,6 +8163,9 @@ snapshots: acorn@8.15.0: {} + acorn@8.19.0: + optional: true + agent-base@7.1.4: {} ajv@6.12.6: @@ -8108,10 +8229,10 @@ snapshots: minimalistic-assert: 1.0.1 safer-buffer: 2.1.2 - asn1js@3.0.7: + asn1js@3.1.0: dependencies: pvtsutils: 1.3.6 - pvutils: 1.1.5 + pvutils: 1.2.0 tslib: 2.8.1 assertion-error@2.0.1: {} @@ -8164,44 +8285,50 @@ snapshots: baseline-browser-mapping@2.9.11: {} - better-auth@1.4.17(better-sqlite3@12.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(solid-js@1.9.15)(vitest@3.2.4): - dependencies: - '@better-auth/core': 1.4.17(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.2))(jose@6.1.3)(kysely@0.28.10)(nanostores@1.1.0) - '@better-auth/telemetry': 1.4.17(@better-auth/core@1.4.17(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.2))(jose@6.1.3)(kysely@0.28.10)(nanostores@1.1.0)) - '@better-auth/utils': 0.3.0 - '@better-fetch/fetch': 1.1.21 - '@noble/ciphers': 2.1.1 - '@noble/hashes': 2.0.1 - better-call: 1.1.8(zod@4.3.5) - defu: 6.1.4 - jose: 6.1.3 - kysely: 0.28.10 - nanostores: 1.1.0 - zod: 4.3.5 + better-auth@1.7.12(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(solid-js@1.9.15)(vitest@3.2.4): + dependencies: + '@better-auth/core': 1.7.12(@better-auth/utils@0.5.0)(@better-fetch/fetch@1.3.2)(@opentelemetry/api@1.9.0)(better-call@1.4.4(zod@4.3.2))(jose@6.2.13)(kysely@0.29.7)(nanostores@1.5.5) + '@better-auth/drizzle-adapter': 1.7.12(@better-auth/core@1.7.12(@better-auth/utils@0.5.0)(@better-fetch/fetch@1.3.2)(@opentelemetry/api@1.9.0)(better-call@1.4.4(zod@4.3.2))(jose@6.2.13)(kysely@0.29.7)(nanostores@1.5.5))(@better-auth/utils@0.5.0) + '@better-auth/kysely-adapter': 1.7.12(@better-auth/core@1.7.12(@better-auth/utils@0.5.0)(@better-fetch/fetch@1.3.2)(@opentelemetry/api@1.9.0)(better-call@1.4.4(zod@4.3.2))(jose@6.2.13)(kysely@0.29.7)(nanostores@1.5.5))(@better-auth/utils@0.5.0)(kysely@0.29.7) + '@better-auth/memory-adapter': 1.7.12(@better-auth/core@1.7.12(@better-auth/utils@0.5.0)(@better-fetch/fetch@1.3.2)(@opentelemetry/api@1.9.0)(better-call@1.4.4(zod@4.3.2))(jose@6.2.13)(kysely@0.29.7)(nanostores@1.5.5))(@better-auth/utils@0.5.0) + '@better-auth/mongo-adapter': 1.7.12(@better-auth/core@1.7.12(@better-auth/utils@0.5.0)(@better-fetch/fetch@1.3.2)(@opentelemetry/api@1.9.0)(better-call@1.4.4(zod@4.3.2))(jose@6.2.13)(kysely@0.29.7)(nanostores@1.5.5))(@better-auth/utils@0.5.0) + '@better-auth/prisma-adapter': 1.7.12(@better-auth/core@1.7.12(@better-auth/utils@0.5.0)(@better-fetch/fetch@1.3.2)(@opentelemetry/api@1.9.0)(better-call@1.4.4(zod@4.3.2))(jose@6.2.13)(kysely@0.29.7)(nanostores@1.5.5))(@better-auth/utils@0.5.0) + '@better-auth/telemetry': 1.7.12(@better-auth/core@1.7.12(@better-auth/utils@0.5.0)(@better-fetch/fetch@1.3.2)(@opentelemetry/api@1.9.0)(better-call@1.4.4(zod@4.3.2))(jose@6.2.13)(kysely@0.29.7)(nanostores@1.5.5))(@better-auth/utils@0.5.0)(@better-fetch/fetch@1.3.2) + '@better-auth/utils': 0.5.0 + '@better-fetch/fetch': 1.3.2 + '@noble/ciphers': 2.4.0 + '@noble/hashes': 2.4.0 + better-call: 1.4.4(zod@4.6.7) + defu: 6.1.7 + jose: 6.2.13 + kysely: 0.29.7 + nanostores: 1.5.5 + zod: 4.6.7 optionalDependencies: - better-sqlite3: 12.9.0 react: 19.2.3 react-dom: 19.2.3(react@19.2.3) solid-js: 1.9.15 vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.10.4)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@27.4.0)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.9.0) + transitivePeerDependencies: + - '@opentelemetry/api' - better-call@1.1.8(zod@4.3.2): + better-call@1.4.4(zod@4.3.2): dependencies: - '@better-auth/utils': 0.3.0 - '@better-fetch/fetch': 1.1.21 - rou3: 0.7.12 - set-cookie-parser: 2.7.2 + '@better-auth/utils': 0.5.0 + '@better-fetch/fetch': 1.3.2 + rou3: 0.9.2 + set-cookie-parser: 3.1.4 optionalDependencies: zod: 4.3.2 - better-call@1.1.8(zod@4.3.5): + better-call@1.4.4(zod@4.6.7): dependencies: - '@better-auth/utils': 0.3.0 - '@better-fetch/fetch': 1.1.21 - rou3: 0.7.12 - set-cookie-parser: 2.7.2 + '@better-auth/utils': 0.5.0 + '@better-fetch/fetch': 1.3.2 + rou3: 0.9.2 + set-cookie-parser: 3.1.4 optionalDependencies: - zod: 4.3.5 + zod: 4.6.7 better-sqlite3@12.9.0: dependencies: @@ -8674,7 +8801,7 @@ snapshots: deep-is@0.1.4: {} - defu@6.1.4: {} + defu@6.1.7: {} delaunator@5.0.1: dependencies: @@ -9145,7 +9272,7 @@ snapshots: highlight.js@11.11.1: {} - hono@4.11.7: {} + hono@4.13.13: {} hosted-git-info@9.0.3: dependencies: @@ -9289,7 +9416,7 @@ snapshots: jiti@2.6.1: {} - jose@6.1.3: {} + jose@6.2.13: {} js-tokens@10.0.0: {} @@ -9380,7 +9507,7 @@ snapshots: khroma@2.1.0: {} - kysely@0.28.10: {} + kysely@0.29.7: {} langium@3.3.1: dependencies: @@ -10008,7 +10135,7 @@ snapshots: nanoid@3.3.11: {} - nanostores@1.1.0: {} + nanostores@1.5.5: {} napi-build-utils@2.0.0: {} @@ -10311,7 +10438,7 @@ snapshots: dependencies: tslib: 2.8.1 - pvutils@1.1.5: {} + pvutils@1.2.0: {} rc@1.2.8: dependencies: @@ -10544,7 +10671,7 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.54.0 fsevents: 2.3.3 - rou3@0.7.12: {} + rou3@0.9.2: {} roughjs@4.6.6: dependencies: @@ -10581,10 +10708,20 @@ snapshots: dependencies: seroval: 1.5.4 + seroval-plugins@1.5.6(seroval@1.5.6): + dependencies: + seroval: 1.5.6 + optional: true + seroval@1.5.4: {} + seroval@1.5.6: + optional: true + set-cookie-parser@2.7.2: {} + set-cookie-parser@3.1.4: {} + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -10646,8 +10783,8 @@ snapshots: solid-js@1.9.15: dependencies: csstype: 3.2.3 - seroval: 1.5.4 - seroval-plugins: 1.5.4(seroval@1.5.4) + seroval: 1.5.6 + seroval-plugins: 1.5.6(seroval@1.5.6) optional: true sonner@2.0.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3): @@ -10808,7 +10945,7 @@ snapshots: terser@5.46.0: dependencies: '@jridgewell/source-map': 0.3.11 - acorn: 8.15.0 + acorn: 8.19.0 commander: 2.20.3 source-map-support: 0.5.21 optional: true @@ -11291,7 +11428,7 @@ snapshots: zod@4.3.2: {} - zod@4.3.5: {} + zod@4.6.7: {} zustand@5.0.9(@types/react@19.2.7)(react@19.2.3): optionalDependencies: