From 44d58f6e84f23cf3a3146571c6585e97bbef2fad Mon Sep 17 00:00:00 2001 From: Leo Date: Sat, 30 May 2026 09:01:10 -0400 Subject: [PATCH 1/5] T3CODE-6399234F feat: add local dev login --- apps/web/package.json | 1 + .../src/components/layout/auth/login-page.tsx | 48 +- apps/web/src/lib/dev-router-timing.ts | 2 +- apps/web/src/lib/dev-seed.ts | 477 ++++++++++++++++++ apps/web/src/routeTree.gen.ts | 21 + apps/web/src/routes/api/dev/login.ts | 25 + apps/web/src/scripts/seed-dev-login.ts | 8 + packages/auth/src/index.ts | 22 +- .../dev-login-review/01-dev-login-button.png | Bin 0 -> 7832 bytes .../dev-login-review/02-after-dev-login.png | Bin 0 -> 59572 bytes 10 files changed, 584 insertions(+), 20 deletions(-) create mode 100644 apps/web/src/lib/dev-seed.ts create mode 100644 apps/web/src/routes/api/dev/login.ts create mode 100644 apps/web/src/scripts/seed-dev-login.ts create mode 100644 screenshots/dev-login-review/01-dev-login-button.png create mode 100644 screenshots/dev-login-review/02-after-dev-login.png diff --git a/apps/web/package.json b/apps/web/package.json index cbd10bc4..874a13ad 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -12,6 +12,7 @@ "lint": "biome check . --formatter-enabled=false --assist-enabled=false", "lint:fix": "biome check --write . --formatter-enabled=false --assist-enabled=false", "test": "vitest run", + "dev:seed-login": "NODE_ENV=development tsx src/scripts/seed-dev-login.ts", "typecheck": "tsc --noEmit", "db:generate": "drizzle-kit generate", "db:migrate": "drizzle-kit migrate", diff --git a/apps/web/src/components/layout/auth/login-page.tsx b/apps/web/src/components/layout/auth/login-page.tsx index 0c7059fd..912459c4 100644 --- a/apps/web/src/components/layout/auth/login-page.tsx +++ b/apps/web/src/components/layout/auth/login-page.tsx @@ -1,6 +1,5 @@ -import { useNavigate } from "@tanstack/react-router" import { authClient } from "@tripwire/auth/client" -import { useEffect } from "react" +import { useEffect, useState } from "react" import { Button } from "@tripwire/ui/button" import { TripwireLogo } from "@tripwire/ui/icons/tripwire-logo" @@ -13,24 +12,47 @@ export function LoginPageSkeleton() { } export function LoginPage() { - const navigate = useNavigate() const { data: session, isPending } = authClient.useSession() + const [devLoginPending, setDevLoginPending] = useState(false) + const [devLoginError, setDevLoginError] = useState(null) - // Redirect to / if already logged in. The root resolver picks up - // from there and routes the user into their org workspace. + // Redirect signed-in users into the app shell. The legacy /home route + // resolves the active workspace and lands on the org-scoped home page. useEffect(() => { if (!isPending && session) { - navigate({ to: "/" }) + window.location.assign("/home") } - }, [session, isPending, navigate]) + }, [session, isPending]) - async function handleLogin() { + async function handleGithubLogin() { await authClient.signIn.social({ provider: "github", callbackURL: "/rules", }) } + async function handleDevLogin() { + setDevLoginPending(true) + setDevLoginError(null) + + try { + const seedResponse = await fetch("/api/dev/login", { + method: "POST", + }) + + if (!seedResponse.ok) { + throw new Error("Dev login is only available while running locally.") + } + + window.location.assign("/home") + } catch (error) { + setDevLoginError( + error instanceof Error ? error.message : "Dev login failed." + ) + setDevLoginPending(false) + } + } + if (isPending) { return } @@ -39,13 +61,19 @@ export function LoginPage() {
+ {devLoginError && ( +

+ {devLoginError} +

+ )}
) } diff --git a/apps/web/src/lib/dev-router-timing.ts b/apps/web/src/lib/dev-router-timing.ts index 9a669634..8e366737 100644 --- a/apps/web/src/lib/dev-router-timing.ts +++ b/apps/web/src/lib/dev-router-timing.ts @@ -1,4 +1,4 @@ -import type { AnyRouter, RouterEvents } from "@tanstack/router-core" +import type { AnyRouter, RouterEvents } from "@tanstack/react-router" /** Dev-only: logs client navigations from route resolve through first paint hook. */ export function attachDevRouterTiming(router: AnyRouter): void { diff --git a/apps/web/src/lib/dev-seed.ts b/apps/web/src/lib/dev-seed.ts new file mode 100644 index 00000000..57b9a333 --- /dev/null +++ b/apps/web/src/lib/dev-seed.ts @@ -0,0 +1,477 @@ +import { and, eq, inArray } from "drizzle-orm" +import { auth } from "@tripwire/auth" +import { db } from "@tripwire/db/client" +import { + DEFAULT_RULE_CONFIG, + account, + blacklistEntries, + customRules, + events, + member, + onboardingState, + organization, + organizations, + repositories, + ruleConfigs, + user, + userPreferences, + whitelistEntries, + workflows, + type CustomRuleDefinition, + type RuleConfig, + type WorkflowDefinition, +} from "@tripwire/db" + +const DEV_LOGIN_EMAIL = "dev@tripwire.local" +const DEV_LOGIN_PASSWORD = "tripwire-dev-password" + +const DEV_BA_ORG_ID = "dev-workspace" +const DEV_MEMBER_ID = "dev-workspace-owner" +const DEV_INSTALLATION_ID = 93_001 +const DEV_GITHUB_ACCOUNT_ID = 93_002 +const DEV_REPO_GITHUB_ID = 93_003 + +const seededRuleConfig: RuleConfig = { + ...DEFAULT_RULE_CONFIG, + accountAge: { enabled: true, action: "warn", days: 21 }, + maxPrsPerDay: { enabled: true, action: "block", limit: 3 }, + aiHoneypot: { enabled: true, action: "block" }, + repoFiles: { + ...DEFAULT_RULE_CONFIG.repoFiles, + prTemplate: { + autoSync: true, + honeypotEnabled: true, + honeypotPhrases: [{ kind: "natural", phrase: "mention the wax seal" }], + customContent: + "Please describe the intent of this change and any security-sensitive files touched.", + }, + }, +} + +const seededWorkflowDefinition: WorkflowDefinition = { + nodes: [ + { + id: "trigger-pr-opened", + type: "trigger", + position: { x: 0, y: 0 }, + data: { subtype: "pr_opened", label: "PR opened" }, + }, + { + id: "rule-account-age", + type: "rule", + position: { x: 260, y: 0 }, + data: { subtype: "accountAge", days: 21 }, + }, + { + id: "action-warn", + type: "action", + position: { x: 520, y: 0 }, + data: { subtype: "warn", message: "Ask for maintainer review" }, + }, + ], + edges: [ + { + id: "trigger-to-age", + source: "trigger-pr-opened", + target: "rule-account-age", + }, + { + id: "age-to-warn", + source: "rule-account-age", + target: "action-warn", + sourceHandle: "fail", + }, + ], +} + +const seededCustomRuleDefinition: CustomRuleDefinition = { + outputNodeId: "condition-suspicious-title", + nodes: [ + { + id: "condition-suspicious-title", + type: "condition", + position: { x: 0, y: 0 }, + data: { + field: "title", + operator: "contains", + value: "urgent", + }, + }, + ], + edges: [], +} + +export async function ensureDevLoginUser(headers = new Headers()) { + if (process.env.NODE_ENV !== "development") { + throw new Error("Dev login user is only available in development.") + } + + const [existing] = await db + .select({ id: user.id }) + .from(user) + .where(eq(user.email, DEV_LOGIN_EMAIL)) + .limit(1) + + if (existing) { + const [credentialAccount] = await db + .select({ id: account.id }) + .from(account) + .where( + and(eq(account.userId, existing.id), eq(account.providerId, "credential")) + ) + .limit(1) + + if (credentialAccount) return existing + + await db.delete(user).where(eq(user.id, existing.id)) + } + + await auth.api.signUpEmail({ + body: { + name: "Dev User", + email: DEV_LOGIN_EMAIL, + password: DEV_LOGIN_PASSWORD, + }, + headers, + }) + + const [created] = await db + .select({ id: user.id }) + .from(user) + .where(eq(user.email, DEV_LOGIN_EMAIL)) + .limit(1) + + if (!created) { + throw new Error("Failed to create the dev login user.") + } + + return created +} + +export async function signInDevLoginUser(headers = new Headers()) { + if (process.env.NODE_ENV !== "development") { + throw new Error("Dev login is only available in development.") + } + + return auth.api.signInEmail({ + body: { + email: DEV_LOGIN_EMAIL, + password: DEV_LOGIN_PASSWORD, + callbackURL: "/home", + }, + headers, + asResponse: true, + }) +} + +export async function seedDevWorkspace() { + if (process.env.NODE_ENV !== "development") { + throw new Error("Dev seed is only available in development.") + } + + const [devUser] = await db + .select({ id: user.id }) + .from(user) + .where(eq(user.email, DEV_LOGIN_EMAIL)) + .limit(1) + + if (!devUser) { + throw new Error("Create the dev user before seeding workspace data.") + } + + const now = new Date() + + await db + .insert(organization) + .values({ + id: DEV_BA_ORG_ID, + name: "Tripwire Dev", + slug: "tripwire-dev", + createdAt: now, + }) + .onConflictDoUpdate({ + target: organization.id, + set: { + name: "Tripwire Dev", + slug: "tripwire-dev", + }, + }) + + await db + .insert(member) + .values({ + id: DEV_MEMBER_ID, + organizationId: DEV_BA_ORG_ID, + userId: devUser.id, + role: "owner", + createdAt: now, + }) + .onConflictDoUpdate({ + target: member.id, + set: { + organizationId: DEV_BA_ORG_ID, + userId: devUser.id, + role: "owner", + }, + }) + + const [tripwireOrg] = await db + .insert(organizations) + .values({ + githubInstallationId: DEV_INSTALLATION_ID, + githubAccountId: DEV_GITHUB_ACCOUNT_ID, + githubAccountLogin: "tripwire-dev", + githubAccountType: "Organization", + avatarUrl: null, + ownerId: devUser.id, + betterAuthOrgId: DEV_BA_ORG_ID, + createdAt: now, + updatedAt: now, + }) + .onConflictDoUpdate({ + target: organizations.githubInstallationId, + set: { + githubAccountLogin: "tripwire-dev", + ownerId: devUser.id, + betterAuthOrgId: DEV_BA_ORG_ID, + updatedAt: now, + }, + }) + .returning({ id: organizations.id }) + + if (!tripwireOrg) { + throw new Error("Failed to seed Tripwire dev organization.") + } + + const [repo] = await db + .insert(repositories) + .values({ + orgId: tripwireOrg.id, + githubRepoId: DEV_REPO_GITHUB_ID, + name: "example-repo", + fullName: "tripwire-dev/example-repo", + isPrivate: false, + createdAt: now, + updatedAt: now, + }) + .onConflictDoUpdate({ + target: repositories.githubRepoId, + set: { + orgId: tripwireOrg.id, + name: "example-repo", + fullName: "tripwire-dev/example-repo", + isPrivate: false, + updatedAt: now, + }, + }) + .returning({ id: repositories.id }) + + if (!repo) { + throw new Error("Failed to seed Tripwire dev repository.") + } + + await db + .insert(ruleConfigs) + .values({ + repoId: repo.id, + config: seededRuleConfig, + createdAt: now, + updatedAt: now, + }) + .onConflictDoUpdate({ + target: ruleConfigs.repoId, + set: { + config: seededRuleConfig, + updatedAt: now, + }, + }) + + await db + .insert(userPreferences) + .values({ + userId: devUser.id, + activeOrgId: DEV_BA_ORG_ID, + activeRepoId: repo.id, + updatedAt: now, + }) + .onConflictDoUpdate({ + target: userPreferences.userId, + set: { + activeOrgId: DEV_BA_ORG_ID, + activeRepoId: repo.id, + updatedAt: now, + }, + }) + + await db + .insert(onboardingState) + .values({ + userId: devUser.id, + completedStep1: true, + completedStep2: true, + completedStep3: true, + completedStep4: true, + mainRepoId: repo.id, + source: "other", + setupAnswers: { + useCases: ["ai_prs", "spam_issues"], + priorIncident: "Seeded local demo workspace.", + teamSize: "small", + }, + gettingStartedDismissed: false, + configuredRules: true, + reviewedRiskAlerts: true, + vouchedSomeone: true, + createdAt: now, + updatedAt: now, + }) + .onConflictDoUpdate({ + target: onboardingState.userId, + set: { + completedStep1: true, + completedStep2: true, + completedStep3: true, + completedStep4: true, + mainRepoId: repo.id, + configuredRules: true, + reviewedRiskAlerts: true, + vouchedSomeone: true, + updatedAt: now, + }, + }) + + const [existingWorkflow] = await db + .select({ id: workflows.id }) + .from(workflows) + .where(and(eq(workflows.repoId, repo.id), eq(workflows.name, "Review new contributors"))) + .limit(1) + + if (existingWorkflow) { + await db + .update(workflows) + .set({ + description: "Warn when a new pull request comes from a young account.", + definition: seededWorkflowDefinition, + enabled: true, + updatedAt: now, + }) + .where(eq(workflows.id, existingWorkflow.id)) + } else { + await db.insert(workflows).values({ + repoId: repo.id, + name: "Review new contributors", + description: "Warn when a new pull request comes from a young account.", + definition: seededWorkflowDefinition, + enabled: true, + createdAt: now, + updatedAt: now, + }) + } + + const [existingCustomRule] = await db + .select({ id: customRules.id }) + .from(customRules) + .where(and(eq(customRules.repoId, repo.id), eq(customRules.name, "Urgent title check"))) + .limit(1) + + if (existingCustomRule) { + await db + .update(customRules) + .set({ + description: "Flags titles that use urgency language.", + definition: seededCustomRuleDefinition, + action: "warn", + enabled: true, + priority: 10, + updatedAt: now, + }) + .where(eq(customRules.id, existingCustomRule.id)) + } else { + await db.insert(customRules).values({ + repoId: repo.id, + name: "Urgent title check", + description: "Flags titles that use urgency language.", + definition: seededCustomRuleDefinition, + action: "warn", + enabled: true, + priority: 10, + createdAt: now, + updatedAt: now, + }) + } + + await db + .insert(whitelistEntries) + .values({ + repoId: repo.id, + githubUsername: "trusted-maintainer", + githubUserId: 91_001, + addedById: devUser.id, + createdAt: now, + }) + .onConflictDoNothing() + + await db + .insert(blacklistEntries) + .values({ + repoId: repo.id, + githubUsername: "drive-by-spammer", + githubUserId: 91_002, + addedById: devUser.id, + createdAt: now, + }) + .onConflictDoNothing() + + const seededPipelineIds = ["dev-seed-1", "dev-seed-2", "dev-seed-3"] + await db.delete(events).where(inArray(events.pipelineId, seededPipelineIds)) + + await db.insert(events).values([ + { + repoId: repo.id, + action: "pipeline_blocked", + severity: "error", + description: "@drive-by-spammer was blocked by the AI honeypot rule.", + contentType: "pull_request", + pipelineId: "dev-seed-1", + ruleName: "AI honeypot", + targetGithubUsername: "drive-by-spammer", + targetGithubUserId: 91_002, + githubRef: "PR #42", + metadata: { title: "urgent fix", filesChanged: 18 }, + createdAt: now, + }, + { + repoId: repo.id, + action: "pipeline_warned", + severity: "warning", + description: "@new-contributor triggered the account age warning.", + contentType: "pull_request", + pipelineId: "dev-seed-2", + ruleName: "Account age", + targetGithubUsername: "new-contributor", + targetGithubUserId: 91_003, + githubRef: "PR #43", + metadata: { accountAgeDays: 6 }, + createdAt: now, + }, + { + repoId: repo.id, + action: "whitelist_bypass", + severity: "success", + description: "@trusted-maintainer bypassed checks from the whitelist.", + contentType: "comment", + pipelineId: "dev-seed-3", + targetGithubUsername: "trusted-maintainer", + targetGithubUserId: 91_001, + githubRef: "Comment #44", + metadata: { source: "dev-seed" }, + createdAt: now, + }, + ]) + + return { + userId: devUser.id, + orgId: DEV_BA_ORG_ID, + repoId: repo.id, + } +} diff --git a/apps/web/src/routeTree.gen.ts b/apps/web/src/routeTree.gen.ts index fc37a5d1..d6760bd1 100644 --- a/apps/web/src/routeTree.gen.ts +++ b/apps/web/src/routeTree.gen.ts @@ -45,6 +45,7 @@ import { Route as ApiOauthAppInfoRouteImport } from './routes/api/oauth/app-info import { Route as ApiGithubWebhookRouteImport } from './routes/api/github/webhook' import { Route as ApiGithubInstallRouteImport } from './routes/api/github/install' import { Route as ApiGithubCallbackRouteImport } from './routes/api/github/callback' +import { Route as ApiDevLoginRouteImport } from './routes/api/dev/login' import { Route as ApiAuthSplatRouteImport } from './routes/api/auth/$' import { Route as AppUsersUsernameRouteImport } from './routes/_app/users/$username' import { Route as AppSettingsGeneralRouteImport } from './routes/_app/settings/general' @@ -262,6 +263,11 @@ const ApiGithubCallbackRoute = ApiGithubCallbackRouteImport.update({ path: '/api/github/callback', getParentRoute: () => rootRouteImport, } as any) +const ApiDevLoginRoute = ApiDevLoginRouteImport.update({ + id: '/api/dev/login', + path: '/api/dev/login', + getParentRoute: () => rootRouteImport, +} as any) const ApiAuthSplatRoute = ApiAuthSplatRouteImport.update({ id: '/api/auth/$', path: '/api/auth/$', @@ -494,6 +500,7 @@ export interface FileRoutesByFullPath { '/settings/general': typeof AppSettingsGeneralRoute '/users/$username': typeof AppUsersUsernameRoute '/api/auth/$': typeof ApiAuthSplatRoute + '/api/dev/login': typeof ApiDevLoginRoute '/api/github/callback': typeof ApiGithubCallbackRoute '/api/github/install': typeof ApiGithubInstallRoute '/api/github/webhook': typeof ApiGithubWebhookRoute @@ -565,6 +572,7 @@ export interface FileRoutesByTo { '/settings/general': typeof AppSettingsGeneralRoute '/users/$username': typeof AppUsersUsernameRoute '/api/auth/$': typeof ApiAuthSplatRoute + '/api/dev/login': typeof ApiDevLoginRoute '/api/github/callback': typeof ApiGithubCallbackRoute '/api/github/install': typeof ApiGithubInstallRoute '/api/github/webhook': typeof ApiGithubWebhookRoute @@ -640,6 +648,7 @@ export interface FileRoutesById { '/_app/settings/general': typeof AppSettingsGeneralRoute '/_app/users/$username': typeof AppUsersUsernameRoute '/api/auth/$': typeof ApiAuthSplatRoute + '/api/dev/login': typeof ApiDevLoginRoute '/api/github/callback': typeof ApiGithubCallbackRoute '/api/github/install': typeof ApiGithubInstallRoute '/api/github/webhook': typeof ApiGithubWebhookRoute @@ -714,6 +723,7 @@ export interface FileRouteTypes { | '/settings/general' | '/users/$username' | '/api/auth/$' + | '/api/dev/login' | '/api/github/callback' | '/api/github/install' | '/api/github/webhook' @@ -785,6 +795,7 @@ export interface FileRouteTypes { | '/settings/general' | '/users/$username' | '/api/auth/$' + | '/api/dev/login' | '/api/github/callback' | '/api/github/install' | '/api/github/webhook' @@ -859,6 +870,7 @@ export interface FileRouteTypes { | '/_app/settings/general' | '/_app/users/$username' | '/api/auth/$' + | '/api/dev/login' | '/api/github/callback' | '/api/github/install' | '/api/github/webhook' @@ -909,6 +921,7 @@ export interface RootRouteChildren { ApiMcpRoute: typeof ApiMcpRoute OauthConsentRoute: typeof OauthConsentRoute ApiAuthSplatRoute: typeof ApiAuthSplatRoute + ApiDevLoginRoute: typeof ApiDevLoginRoute ApiGithubCallbackRoute: typeof ApiGithubCallbackRoute ApiGithubInstallRoute: typeof ApiGithubInstallRoute ApiGithubWebhookRoute: typeof ApiGithubWebhookRoute @@ -1174,6 +1187,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof ApiGithubCallbackRouteImport parentRoute: typeof rootRouteImport } + '/api/dev/login': { + id: '/api/dev/login' + path: '/api/dev/login' + fullPath: '/api/dev/login' + preLoaderRoute: typeof ApiDevLoginRouteImport + parentRoute: typeof rootRouteImport + } '/api/auth/$': { id: '/api/auth/$' path: '/api/auth/$' @@ -1629,6 +1649,7 @@ const rootRouteChildren: RootRouteChildren = { ApiMcpRoute: ApiMcpRoute, OauthConsentRoute: OauthConsentRoute, ApiAuthSplatRoute: ApiAuthSplatRoute, + ApiDevLoginRoute: ApiDevLoginRoute, ApiGithubCallbackRoute: ApiGithubCallbackRoute, ApiGithubInstallRoute: ApiGithubInstallRoute, ApiGithubWebhookRoute: ApiGithubWebhookRoute, diff --git a/apps/web/src/routes/api/dev/login.ts b/apps/web/src/routes/api/dev/login.ts new file mode 100644 index 00000000..c1d88e55 --- /dev/null +++ b/apps/web/src/routes/api/dev/login.ts @@ -0,0 +1,25 @@ +import { createFileRoute } from "@tanstack/react-router" +import { + ensureDevLoginUser, + seedDevWorkspace, + signInDevLoginUser, +} from "#/lib/dev-seed" + +async function postDevLogin({ request }: { request: Request }) { + if (process.env.NODE_ENV !== "development") { + return Response.json({ error: "Not found" }, { status: 404 }) + } + + await ensureDevLoginUser(request.headers) + await seedDevWorkspace() + + return signInDevLoginUser(request.headers) +} + +export const Route = createFileRoute("/api/dev/login")({ + server: { + handlers: { + POST: postDevLogin, + }, + }, +}) diff --git a/apps/web/src/scripts/seed-dev-login.ts b/apps/web/src/scripts/seed-dev-login.ts new file mode 100644 index 00000000..37971520 --- /dev/null +++ b/apps/web/src/scripts/seed-dev-login.ts @@ -0,0 +1,8 @@ +import { ensureDevLoginUser, seedDevWorkspace } from "#/lib/dev-seed" + +const user = await ensureDevLoginUser() +const seeded = await seedDevWorkspace() + +console.info( + `Seeded dev login for ${user.id}: org ${seeded.orgId}, repo ${seeded.repoId}` +) diff --git a/packages/auth/src/index.ts b/packages/auth/src/index.ts index 3b8e6cb3..ed83746f 100644 --- a/packages/auth/src/index.ts +++ b/packages/auth/src/index.ts @@ -42,6 +42,9 @@ export const auth = betterAuth({ scope: ["read:user", "user:email", "read:org"], }, }, + emailAndPassword: { + enabled: env.NODE_ENV === "development", + }, user: { deleteUser: { enabled: true, @@ -223,15 +226,16 @@ export const auth = betterAuth({ console.error("[Tripwire] Failed to auto-create org:", err) } - // Create Autumn billing customer (idempotent) - try { - await autumnClient.customers.getOrCreate({ - customerId: user.id, - name: user.name, - email: user.email, - }) - } catch (err) { - console.error("[Tripwire] Failed to create Autumn customer:", err) + if (env.AUTUMN_SECRET_KEY) { + try { + await autumnClient.customers.getOrCreate({ + customerId: user.id, + name: user.name, + email: user.email, + }) + } catch (err) { + console.error("[Tripwire] Failed to create Autumn customer:", err) + } } }, }, diff --git a/screenshots/dev-login-review/01-dev-login-button.png b/screenshots/dev-login-review/01-dev-login-button.png new file mode 100644 index 0000000000000000000000000000000000000000..dd120c1ec21dd957f7d7f05e6a9e27d823214748 GIT binary patch literal 7832 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 E3#h(0CjbBd literal 0 HcmV?d00001 diff --git a/screenshots/dev-login-review/02-after-dev-login.png b/screenshots/dev-login-review/02-after-dev-login.png new file mode 100644 index 0000000000000000000000000000000000000000..d105b86a0f92f6e1947c05053cb68784d8b69268 GIT binary patch literal 59572 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

>1uH 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

@QB5upk%Mf|*#f$EZWS5~#EqZKmn7a1Z3 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 Date: Sat, 30 May 2026 09:31:59 -0400 Subject: [PATCH 2/5] T3CODE-6399234F fix: add PGlite dev database fallback --- .env.example | 2 + .gitignore | 1 + README.md | 6 +- apps/web/drizzle.config.ts | 29 +- apps/web/package.json | 1 + .../src/components/layout/auth/login-page.tsx | 11 +- apps/web/src/lib/dev-seed.ts | 522 +++++++++--------- apps/web/src/routes/api/dev/login.ts | 13 +- apps/web/src/scripts/seed-dev-login.ts | 2 + packages/db/package.json | 1 + packages/db/src/connection.ts | 46 +- pnpm-lock.yaml | 297 +++++----- 12 files changed, 522 insertions(+), 409 deletions(-) diff --git a/.env.example b/.env.example index f2efa8dd..c6d9033c 100644 --- a/.env.example +++ b/.env.example @@ -18,6 +18,8 @@ VITE_GITHUB_APP_SLUG=tripwire-dev # VITE_REACT_SCAN_ENABLED=true # VITE_REACT_GRAB_ENABLED=true +# Optional in local dev. Leave blank to use file-backed PGlite at .tripwire/pglite. +# Required in production. DATABASE_URL= # Unkey rate limiting (optional - allows all requests if not set) diff --git a/.gitignore b/.gitignore index 579131fe..e08b54b9 100644 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,7 @@ dist-ssr # Tooling caches count.txt todos.json +/.tripwire # Tool-managed dirs (not source of truth) /.agents diff --git a/README.md b/README.md index 6be0c9dc..2c01e3b7 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,8 @@ The required vars: - `GITHUB_CLIENT_ID` / `GITHUB_CLIENT_SECRET` — from your GitHub OAuth App - `GITHUB_APP_ID` / `GITHUB_APP_PRIVATE_KEY` / `GITHUB_WEBHOOK_SECRET` — from your GitHub App - `VITE_GITHUB_APP_SLUG` — the slug from `github.com/apps/{slug}` -- `DATABASE_URL` — Postgres connection string +- `DATABASE_URL` — Postgres connection string. Optional in local dev; leave + blank to use file-backed PGlite at `.tripwire/pglite`. Optional: @@ -63,6 +64,9 @@ Push tables to db: pnpm db:push ``` +If `DATABASE_URL` is blank outside production, `pnpm db:push` and the app use +the local PGlite database. No Docker or local Postgres service is required. + Start the dev server: ```bash diff --git a/apps/web/drizzle.config.ts b/apps/web/drizzle.config.ts index 2158eee1..f1d3c167 100644 --- a/apps/web/drizzle.config.ts +++ b/apps/web/drizzle.config.ts @@ -1,14 +1,37 @@ +import { mkdirSync } from "node:fs" +import { dirname } from "node:path" import { config } from "dotenv" import { defineConfig } from "drizzle-kit" // .env lives at the monorepo root so all packages (web, future cli) share it. config({ path: ["../../.env.local", "../../.env", ".env.local", ".env"] }) +const DEV_DATABASE_DIR = "../../.tripwire/pglite" +const isProduction = process.env.NODE_ENV === "production" +const databaseUrl = process.env.DATABASE_URL + +if (isProduction && !databaseUrl) { + throw new Error("DATABASE_URL is required in production.") +} + +if (!databaseUrl) { + mkdirSync(dirname(DEV_DATABASE_DIR), { recursive: true }) +} + export default defineConfig({ out: "./drizzle", schema: "../../packages/db/src/schema/index.ts", dialect: "postgresql", - dbCredentials: { - url: process.env.DATABASE_URL!, - }, + ...(databaseUrl + ? { + dbCredentials: { + url: databaseUrl, + }, + } + : { + driver: "pglite", + dbCredentials: { + url: DEV_DATABASE_DIR, + }, + }), }) diff --git a/apps/web/package.json b/apps/web/package.json index 874a13ad..1c419461 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -27,6 +27,7 @@ "@ai-sdk/react": "^3.0.186", "@base-ui/react": "^1.3.0", "@better-auth/infra": "^0.2.8", + "@electric-sql/pglite": "^0.4.6", "@json-render/core": "^0.18.0", "@json-render/react": "^0.18.0", "@modelcontextprotocol/sdk": "^1.29.0", diff --git a/apps/web/src/components/layout/auth/login-page.tsx b/apps/web/src/components/layout/auth/login-page.tsx index 912459c4..a8146649 100644 --- a/apps/web/src/components/layout/auth/login-page.tsx +++ b/apps/web/src/components/layout/auth/login-page.tsx @@ -41,7 +41,16 @@ export function LoginPage() { }) if (!seedResponse.ok) { - throw new Error("Dev login is only available while running locally.") + const responseBody = (await seedResponse.json().catch(() => null)) as { + error?: string + message?: string + } | null + + throw new Error( + responseBody?.error ?? + responseBody?.message ?? + "Dev login is only available while running locally." + ) } window.location.assign("/home") diff --git a/apps/web/src/lib/dev-seed.ts b/apps/web/src/lib/dev-seed.ts index 57b9a333..7e2a32db 100644 --- a/apps/web/src/lib/dev-seed.ts +++ b/apps/web/src/lib/dev-seed.ts @@ -117,13 +117,18 @@ export async function ensureDevLoginUser(headers = new Headers()) { .select({ id: account.id }) .from(account) .where( - and(eq(account.userId, existing.id), eq(account.providerId, "credential")) + and( + eq(account.userId, existing.id), + eq(account.providerId, "credential") + ) ) .limit(1) if (credentialAccount) return existing - await db.delete(user).where(eq(user.id, existing.id)) + throw new Error( + `User ${existing.id} has no credential account; aborting dev login to avoid data loss.` + ) } await auth.api.signUpEmail({ @@ -169,309 +174,322 @@ export async function seedDevWorkspace() { throw new Error("Dev seed is only available in development.") } - const [devUser] = await db - .select({ id: user.id }) - .from(user) - .where(eq(user.email, DEV_LOGIN_EMAIL)) - .limit(1) + return db.transaction(async (tx) => { + const [devUser] = await tx + .select({ id: user.id }) + .from(user) + .where(eq(user.email, DEV_LOGIN_EMAIL)) + .limit(1) - if (!devUser) { - throw new Error("Create the dev user before seeding workspace data.") - } + if (!devUser) { + throw new Error("Create the dev user before seeding workspace data.") + } + + const now = new Date() - const now = new Date() - - await db - .insert(organization) - .values({ - id: DEV_BA_ORG_ID, - name: "Tripwire Dev", - slug: "tripwire-dev", - createdAt: now, - }) - .onConflictDoUpdate({ - target: organization.id, - set: { + await tx + .insert(organization) + .values({ + id: DEV_BA_ORG_ID, name: "Tripwire Dev", slug: "tripwire-dev", - }, - }) + createdAt: now, + }) + .onConflictDoUpdate({ + target: organization.id, + set: { + name: "Tripwire Dev", + slug: "tripwire-dev", + }, + }) - await db - .insert(member) - .values({ - id: DEV_MEMBER_ID, - organizationId: DEV_BA_ORG_ID, - userId: devUser.id, - role: "owner", - createdAt: now, - }) - .onConflictDoUpdate({ - target: member.id, - set: { + await tx + .insert(member) + .values({ + id: DEV_MEMBER_ID, organizationId: DEV_BA_ORG_ID, userId: devUser.id, role: "owner", - }, - }) - - const [tripwireOrg] = await db - .insert(organizations) - .values({ - githubInstallationId: DEV_INSTALLATION_ID, - githubAccountId: DEV_GITHUB_ACCOUNT_ID, - githubAccountLogin: "tripwire-dev", - githubAccountType: "Organization", - avatarUrl: null, - ownerId: devUser.id, - betterAuthOrgId: DEV_BA_ORG_ID, - createdAt: now, - updatedAt: now, - }) - .onConflictDoUpdate({ - target: organizations.githubInstallationId, - set: { + createdAt: now, + }) + .onConflictDoUpdate({ + target: member.id, + set: { + organizationId: DEV_BA_ORG_ID, + userId: devUser.id, + role: "owner", + }, + }) + + const [tripwireOrg] = await tx + .insert(organizations) + .values({ + githubInstallationId: DEV_INSTALLATION_ID, + githubAccountId: DEV_GITHUB_ACCOUNT_ID, githubAccountLogin: "tripwire-dev", + githubAccountType: "Organization", + avatarUrl: null, ownerId: devUser.id, betterAuthOrgId: DEV_BA_ORG_ID, + createdAt: now, updatedAt: now, - }, - }) - .returning({ id: organizations.id }) + }) + .onConflictDoUpdate({ + target: organizations.githubInstallationId, + set: { + githubAccountLogin: "tripwire-dev", + ownerId: devUser.id, + betterAuthOrgId: DEV_BA_ORG_ID, + updatedAt: now, + }, + }) + .returning({ id: organizations.id }) - if (!tripwireOrg) { - throw new Error("Failed to seed Tripwire dev organization.") - } + if (!tripwireOrg) { + throw new Error("Failed to seed Tripwire dev organization.") + } - const [repo] = await db - .insert(repositories) - .values({ - orgId: tripwireOrg.id, - githubRepoId: DEV_REPO_GITHUB_ID, - name: "example-repo", - fullName: "tripwire-dev/example-repo", - isPrivate: false, - createdAt: now, - updatedAt: now, - }) - .onConflictDoUpdate({ - target: repositories.githubRepoId, - set: { + const [repo] = await tx + .insert(repositories) + .values({ orgId: tripwireOrg.id, + githubRepoId: DEV_REPO_GITHUB_ID, name: "example-repo", fullName: "tripwire-dev/example-repo", isPrivate: false, + createdAt: now, updatedAt: now, - }, - }) - .returning({ id: repositories.id }) + }) + .onConflictDoUpdate({ + target: repositories.githubRepoId, + set: { + orgId: tripwireOrg.id, + name: "example-repo", + fullName: "tripwire-dev/example-repo", + isPrivate: false, + updatedAt: now, + }, + }) + .returning({ id: repositories.id }) - if (!repo) { - throw new Error("Failed to seed Tripwire dev repository.") - } + if (!repo) { + throw new Error("Failed to seed Tripwire dev repository.") + } - await db - .insert(ruleConfigs) - .values({ - repoId: repo.id, - config: seededRuleConfig, - createdAt: now, - updatedAt: now, - }) - .onConflictDoUpdate({ - target: ruleConfigs.repoId, - set: { + await tx + .insert(ruleConfigs) + .values({ + repoId: repo.id, config: seededRuleConfig, + createdAt: now, updatedAt: now, - }, - }) + }) + .onConflictDoUpdate({ + target: ruleConfigs.repoId, + set: { + config: seededRuleConfig, + updatedAt: now, + }, + }) - await db - .insert(userPreferences) - .values({ - userId: devUser.id, - activeOrgId: DEV_BA_ORG_ID, - activeRepoId: repo.id, - updatedAt: now, - }) - .onConflictDoUpdate({ - target: userPreferences.userId, - set: { + await tx + .insert(userPreferences) + .values({ + userId: devUser.id, activeOrgId: DEV_BA_ORG_ID, activeRepoId: repo.id, updatedAt: now, - }, - }) + }) + .onConflictDoUpdate({ + target: userPreferences.userId, + set: { + activeOrgId: DEV_BA_ORG_ID, + activeRepoId: repo.id, + updatedAt: now, + }, + }) - await db - .insert(onboardingState) - .values({ - userId: devUser.id, - completedStep1: true, - completedStep2: true, - completedStep3: true, - completedStep4: true, - mainRepoId: repo.id, - source: "other", - setupAnswers: { - useCases: ["ai_prs", "spam_issues"], - priorIncident: "Seeded local demo workspace.", - teamSize: "small", - }, - gettingStartedDismissed: false, - configuredRules: true, - reviewedRiskAlerts: true, - vouchedSomeone: true, - createdAt: now, - updatedAt: now, - }) - .onConflictDoUpdate({ - target: onboardingState.userId, - set: { + await tx + .insert(onboardingState) + .values({ + userId: devUser.id, completedStep1: true, completedStep2: true, completedStep3: true, completedStep4: true, mainRepoId: repo.id, + source: "other", + setupAnswers: { + useCases: ["ai_prs", "spam_issues"], + priorIncident: "Seeded local demo workspace.", + teamSize: "small", + }, + gettingStartedDismissed: false, configuredRules: true, reviewedRiskAlerts: true, vouchedSomeone: true, + createdAt: now, updatedAt: now, - }, - }) + }) + .onConflictDoUpdate({ + target: onboardingState.userId, + set: { + completedStep1: true, + completedStep2: true, + completedStep3: true, + completedStep4: true, + mainRepoId: repo.id, + configuredRules: true, + reviewedRiskAlerts: true, + vouchedSomeone: true, + updatedAt: now, + }, + }) - const [existingWorkflow] = await db - .select({ id: workflows.id }) - .from(workflows) - .where(and(eq(workflows.repoId, repo.id), eq(workflows.name, "Review new contributors"))) - .limit(1) + const [existingWorkflow] = await tx + .select({ id: workflows.id }) + .from(workflows) + .where( + and( + eq(workflows.repoId, repo.id), + eq(workflows.name, "Review new contributors") + ) + ) + .limit(1) - if (existingWorkflow) { - await db - .update(workflows) - .set({ + if (existingWorkflow) { + await tx + .update(workflows) + .set({ + description: + "Warn when a new pull request comes from a young account.", + definition: seededWorkflowDefinition, + enabled: true, + updatedAt: now, + }) + .where(eq(workflows.id, existingWorkflow.id)) + } else { + await tx.insert(workflows).values({ + repoId: repo.id, + name: "Review new contributors", description: "Warn when a new pull request comes from a young account.", definition: seededWorkflowDefinition, enabled: true, + createdAt: now, updatedAt: now, }) - .where(eq(workflows.id, existingWorkflow.id)) - } else { - await db.insert(workflows).values({ - repoId: repo.id, - name: "Review new contributors", - description: "Warn when a new pull request comes from a young account.", - definition: seededWorkflowDefinition, - enabled: true, - createdAt: now, - updatedAt: now, - }) - } + } - const [existingCustomRule] = await db - .select({ id: customRules.id }) - .from(customRules) - .where(and(eq(customRules.repoId, repo.id), eq(customRules.name, "Urgent title check"))) - .limit(1) + const [existingCustomRule] = await tx + .select({ id: customRules.id }) + .from(customRules) + .where( + and( + eq(customRules.repoId, repo.id), + eq(customRules.name, "Urgent title check") + ) + ) + .limit(1) - if (existingCustomRule) { - await db - .update(customRules) - .set({ + if (existingCustomRule) { + await tx + .update(customRules) + .set({ + description: "Flags titles that use urgency language.", + definition: seededCustomRuleDefinition, + action: "warn", + enabled: true, + priority: 10, + updatedAt: now, + }) + .where(eq(customRules.id, existingCustomRule.id)) + } else { + await tx.insert(customRules).values({ + repoId: repo.id, + name: "Urgent title check", description: "Flags titles that use urgency language.", definition: seededCustomRuleDefinition, action: "warn", enabled: true, priority: 10, + createdAt: now, updatedAt: now, }) - .where(eq(customRules.id, existingCustomRule.id)) - } else { - await db.insert(customRules).values({ - repoId: repo.id, - name: "Urgent title check", - description: "Flags titles that use urgency language.", - definition: seededCustomRuleDefinition, - action: "warn", - enabled: true, - priority: 10, - createdAt: now, - updatedAt: now, - }) - } - - await db - .insert(whitelistEntries) - .values({ - repoId: repo.id, - githubUsername: "trusted-maintainer", - githubUserId: 91_001, - addedById: devUser.id, - createdAt: now, - }) - .onConflictDoNothing() - - await db - .insert(blacklistEntries) - .values({ - repoId: repo.id, - githubUsername: "drive-by-spammer", - githubUserId: 91_002, - addedById: devUser.id, - createdAt: now, - }) - .onConflictDoNothing() - - const seededPipelineIds = ["dev-seed-1", "dev-seed-2", "dev-seed-3"] - await db.delete(events).where(inArray(events.pipelineId, seededPipelineIds)) + } + + await tx + .insert(whitelistEntries) + .values({ + repoId: repo.id, + githubUsername: "trusted-maintainer", + githubUserId: 91_001, + addedById: devUser.id, + createdAt: now, + }) + .onConflictDoNothing() + + await tx + .insert(blacklistEntries) + .values({ + repoId: repo.id, + githubUsername: "drive-by-spammer", + githubUserId: 91_002, + addedById: devUser.id, + createdAt: now, + }) + .onConflictDoNothing() + + const seededPipelineIds = ["dev-seed-1", "dev-seed-2", "dev-seed-3"] + await tx.delete(events).where(inArray(events.pipelineId, seededPipelineIds)) + + await tx.insert(events).values([ + { + repoId: repo.id, + action: "pipeline_blocked", + severity: "error", + description: "@drive-by-spammer was blocked by the AI honeypot rule.", + contentType: "pull_request", + pipelineId: "dev-seed-1", + ruleName: "AI honeypot", + targetGithubUsername: "drive-by-spammer", + targetGithubUserId: 91_002, + githubRef: "PR #42", + metadata: { title: "urgent fix", filesChanged: 18 }, + createdAt: now, + }, + { + repoId: repo.id, + action: "pipeline_warned", + severity: "warning", + description: "@new-contributor triggered the account age warning.", + contentType: "pull_request", + pipelineId: "dev-seed-2", + ruleName: "Account age", + targetGithubUsername: "new-contributor", + targetGithubUserId: 91_003, + githubRef: "PR #43", + metadata: { accountAgeDays: 6 }, + createdAt: now, + }, + { + repoId: repo.id, + action: "whitelist_bypass", + severity: "success", + description: "@trusted-maintainer bypassed checks from the whitelist.", + contentType: "comment", + pipelineId: "dev-seed-3", + targetGithubUsername: "trusted-maintainer", + targetGithubUserId: 91_001, + githubRef: "Comment #44", + metadata: { source: "dev-seed" }, + createdAt: now, + }, + ]) - await db.insert(events).values([ - { - repoId: repo.id, - action: "pipeline_blocked", - severity: "error", - description: "@drive-by-spammer was blocked by the AI honeypot rule.", - contentType: "pull_request", - pipelineId: "dev-seed-1", - ruleName: "AI honeypot", - targetGithubUsername: "drive-by-spammer", - targetGithubUserId: 91_002, - githubRef: "PR #42", - metadata: { title: "urgent fix", filesChanged: 18 }, - createdAt: now, - }, - { - repoId: repo.id, - action: "pipeline_warned", - severity: "warning", - description: "@new-contributor triggered the account age warning.", - contentType: "pull_request", - pipelineId: "dev-seed-2", - ruleName: "Account age", - targetGithubUsername: "new-contributor", - targetGithubUserId: 91_003, - githubRef: "PR #43", - metadata: { accountAgeDays: 6 }, - createdAt: now, - }, - { + return { + userId: devUser.id, + orgId: DEV_BA_ORG_ID, repoId: repo.id, - action: "whitelist_bypass", - severity: "success", - description: "@trusted-maintainer bypassed checks from the whitelist.", - contentType: "comment", - pipelineId: "dev-seed-3", - targetGithubUsername: "trusted-maintainer", - targetGithubUserId: 91_001, - githubRef: "Comment #44", - metadata: { source: "dev-seed" }, - createdAt: now, - }, - ]) - - return { - userId: devUser.id, - orgId: DEV_BA_ORG_ID, - repoId: repo.id, - } + } + }) } diff --git a/apps/web/src/routes/api/dev/login.ts b/apps/web/src/routes/api/dev/login.ts index c1d88e55..10b312f0 100644 --- a/apps/web/src/routes/api/dev/login.ts +++ b/apps/web/src/routes/api/dev/login.ts @@ -10,8 +10,17 @@ async function postDevLogin({ request }: { request: Request }) { return Response.json({ error: "Not found" }, { status: 404 }) } - await ensureDevLoginUser(request.headers) - await seedDevWorkspace() + try { + await ensureDevLoginUser(request.headers) + await seedDevWorkspace() + } catch (error) { + return Response.json( + { + error: error instanceof Error ? error.message : String(error), + }, + { status: 500 } + ) + } return signInDevLoginUser(request.headers) } diff --git a/apps/web/src/scripts/seed-dev-login.ts b/apps/web/src/scripts/seed-dev-login.ts index 37971520..ff2312d4 100644 --- a/apps/web/src/scripts/seed-dev-login.ts +++ b/apps/web/src/scripts/seed-dev-login.ts @@ -6,3 +6,5 @@ const seeded = await seedDevWorkspace() console.info( `Seeded dev login for ${user.id}: org ${seeded.orgId}, repo ${seeded.repoId}` ) + +process.exit(0) diff --git a/packages/db/package.json b/packages/db/package.json index 55484b2b..ed789ae2 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -13,6 +13,7 @@ "typecheck": "tsc --noEmit" }, "dependencies": { + "@electric-sql/pglite": "^0.4.6", "@tripwire/env": "workspace:*", "drizzle-orm": "^0.45.1", "pg": "^8.16.3", diff --git a/packages/db/src/connection.ts b/packages/db/src/connection.ts index 79e02734..2cbb6025 100644 --- a/packages/db/src/connection.ts +++ b/packages/db/src/connection.ts @@ -1,11 +1,51 @@ -import { drizzle } from "drizzle-orm/node-postgres" +import { existsSync, mkdirSync } from "node:fs" +import { createRequire } from "node:module" +import { dirname, resolve } from "node:path" +import { fileURLToPath } from "node:url" +import { drizzle as drizzlePostgres } from "drizzle-orm/node-postgres" import { env } from "@tripwire/env/server" import * as schema from "./schema" -if (!env.DATABASE_URL) { +type PgliteDrizzleModule = typeof import("drizzle-orm/pglite") + +function findMonorepoRoot(startDir: string): string { + let dir = startDir + for (let i = 0; i < 10; i++) { + if (existsSync(resolve(dir, "pnpm-workspace.yaml"))) return dir + const parent = dirname(dir) + if (parent === dir) break + dir = parent + } + return process.cwd() +} + +const here = dirname(fileURLToPath(import.meta.url)) +const require = createRequire(import.meta.url) +const monorepoRoot = findMonorepoRoot(here) +const DEV_DATABASE_DIR = resolve(monorepoRoot, ".tripwire/pglite") +const isProduction = process.env.NODE_ENV === "production" +const shouldUseDevDatabase = !isProduction && !env.DATABASE_URL + +if (isProduction && !env.DATABASE_URL) { throw new Error("DATABASE_URL is required for @tripwire/db.") } -export const db = drizzle(env.DATABASE_URL, { schema }) +if (shouldUseDevDatabase) { + mkdirSync(dirname(DEV_DATABASE_DIR), { recursive: true }) +} + +const createPostgresDatabase = () => + drizzlePostgres(env.DATABASE_URL!, { schema }) +type AppDatabase = ReturnType + +const createDevDatabase = () => { + const pgliteDriver = "drizzle-orm/pglite" + const { drizzle } = require(pgliteDriver) as PgliteDrizzleModule + return drizzle(DEV_DATABASE_DIR, { schema }) as unknown as AppDatabase +} + +export const db: AppDatabase = shouldUseDevDatabase + ? createDevDatabase() + : createPostgresDatabase() export type Database = typeof db diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b608a2fa..37328b45 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -49,7 +49,10 @@ importers: version: 1.4.1(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@better-auth/infra': specifier: ^0.2.8 - version: 0.2.8(f6aba15f7298c83ad20760884f7a5591) + version: 0.2.8(b5a6bffde14e21b2f12962e5bb0de136) + '@electric-sql/pglite': + specifier: ^0.4.6 + version: 0.4.6 '@json-render/core': specifier: ^0.18.0 version: 0.18.0(zod@4.3.6) @@ -121,7 +124,7 @@ importers: version: 1.166.12(@tanstack/query-core@5.100.14)(@tanstack/react-query@5.100.14(react@19.2.5))(@tanstack/react-router@1.168.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@tanstack/router-core@1.168.16)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@tanstack/react-start': specifier: 1.167.49 - version: 1.167.49(@rsbuild/core@2.0.7)(@rspack/core@2.0.4(@swc/helpers@0.5.21))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) + version: 1.167.49(@rsbuild/core@2.0.9)(@rspack/core@2.0.5(@swc/helpers@0.5.23))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) '@tanstack/react-store': specifier: latest version: 0.11.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5) @@ -130,7 +133,7 @@ importers: version: 8.21.3(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@tanstack/router-plugin': specifier: 1.167.27 - version: 1.167.27(@rsbuild/core@2.0.7)(@tanstack/react-router@1.168.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) + version: 1.167.27(@rsbuild/core@2.0.9)(@tanstack/react-router@1.168.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) '@tanstack/store': specifier: latest version: 0.11.0 @@ -190,10 +193,10 @@ importers: version: 6.0.184(zod@4.3.6) autumn-js: specifier: ^1.2.12 - version: 1.2.12(better-auth@1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.7)(@rspack/core@2.0.4(@swc/helpers@0.5.21))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(better-call@1.3.5(zod@4.3.6))(express@5.2.1)(hono@4.12.18)(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5) + version: 1.2.12(a968eb16b13cb4e4c7f6dd9da175852c) better-auth: specifier: ^1.5.3 - version: 1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.7)(@rspack/core@2.0.4(@swc/helpers@0.5.21))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) + version: 1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.9)(@rspack/core@2.0.5(@swc/helpers@0.5.23))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) class-variance-authority: specifier: ^0.7.1 version: 0.7.1 @@ -205,13 +208,13 @@ importers: version: 0.31.10 drizzle-orm: specifier: ^0.45.1 - version: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0) + version: 0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0) embla-carousel-react: specifier: ^8.6.0 version: 8.6.0(react@19.2.5) evlog: specifier: ^2.17.0 - version: 2.17.0(ai@6.0.184(zod@4.3.6))(express@5.2.1)(hono@4.12.18)(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(nitro@3.0.260311-beta(dotenv@17.4.2)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(jiti@2.6.1)(lru-cache@11.3.5)(rollup@4.60.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) + version: 2.17.0(ai@6.0.184(zod@4.3.6))(express@5.2.1)(hono@4.12.18)(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(nitro@3.0.260311-beta(@electric-sql/pglite@0.4.6)(dotenv@17.4.2)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(jiti@2.6.1)(lru-cache@11.3.5)(rollup@4.60.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(ofetch@2.0.0-alpha.3)(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) framer-motion: specifier: ^12.38.0 version: 12.38.0(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) @@ -235,7 +238,7 @@ importers: version: 1.1.0(@modelcontextprotocol/sdk@1.29.0(zod@4.3.6))(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)) nitro: specifier: ^3.0.260311-beta - version: 3.0.260311-beta(dotenv@17.4.2)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(jiti@2.6.1)(lru-cache@11.3.5)(rollup@4.60.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) + version: 3.0.260311-beta(@electric-sql/pglite@0.4.6)(dotenv@17.4.2)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(jiti@2.6.1)(lru-cache@11.3.5)(rollup@4.60.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) nuqs: specifier: ^2.8.9 version: 2.8.9(@tanstack/react-router@1.168.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5) @@ -299,7 +302,7 @@ importers: version: 2.2.4 '@rsbuild/core': specifier: latest - version: 2.0.7 + version: 2.0.9 '@tailwindcss/typography': specifier: ^0.5.16 version: 0.5.19(tailwindcss@4.2.4) @@ -365,7 +368,7 @@ importers: version: 2.0.0-beta.0(ai@6.0.184(zod@4.3.6))(react@19.2.5) '@ai-sdk-tools/memory': specifier: 2.0.0-beta.0 - version: 2.0.0-beta.0(ai@6.0.184(zod@4.3.6))(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(redis@4.7.1) + version: 2.0.0-beta.0(ai@6.0.184(zod@4.3.6))(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(redis@4.7.1) '@tripwire/auth': specifier: workspace:* version: link:../auth @@ -380,16 +383,16 @@ importers: version: 6.0.184(zod@4.3.6) autumn-js: specifier: ^1.2.12 - version: 1.2.12(better-auth@1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.7)(@rspack/core@2.0.4(@swc/helpers@0.5.21))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(better-call@1.3.5(zod@4.3.6))(express@5.2.1)(hono@4.12.18)(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5) + version: 1.2.12(better-auth@1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.9)(@rspack/core@2.0.5(@swc/helpers@0.5.23))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(better-call@1.3.5(zod@4.3.6))(express@5.2.1)(hono@4.12.18)(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5) drizzle-orm: specifier: ^0.45.1 - version: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0) + version: 0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0) evlog: specifier: ^2.17.0 - version: 2.17.0(ai@6.0.184(zod@4.3.6))(express@5.2.1)(hono@4.12.18)(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(nitro@3.0.260311-beta(dotenv@17.4.2)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(jiti@2.6.1)(lru-cache@11.3.5)(rollup@4.60.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(ofetch@2.0.0-alpha.3)(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) + version: 2.17.0(ai@6.0.184(zod@4.3.6))(express@5.2.1)(hono@4.12.18)(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(nitro@3.0.260311-beta(@electric-sql/pglite@0.4.6)(dotenv@17.4.2)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(jiti@2.6.1)(lru-cache@11.3.5)(rollup@4.60.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(ofetch@2.0.0-alpha.3)(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) nitro: specifier: ^3.0.260311-beta - version: 3.0.260311-beta(dotenv@17.4.2)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(jiti@2.6.1)(lru-cache@11.3.5)(rollup@4.60.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) + version: 3.0.260311-beta(@electric-sql/pglite@0.4.6)(dotenv@17.4.2)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(jiti@2.6.1)(lru-cache@11.3.5)(rollup@4.60.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) react: specifier: ^19.2.0 version: 19.2.5 @@ -414,7 +417,7 @@ importers: dependencies: '@better-auth/infra': specifier: ^0.2.8 - version: 0.2.8(dd57db0571ca17b25b242dbb191dd2e6) + version: 0.2.8(2ebf2f797a034b1c7af44c1119889faf) '@tanstack/react-router': specifier: 1.168.24 version: 1.168.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5) @@ -429,13 +432,13 @@ importers: version: link:../github autumn-js: specifier: ^1.2.12 - version: 1.2.12(better-auth@1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.7)(@rspack/core@2.0.4(@swc/helpers@0.5.21))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(better-call@1.3.5(zod@4.3.6))(express@5.2.1)(hono@4.12.18)(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5) + version: 1.2.12(better-auth@1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.9)(@rspack/core@2.0.5(@swc/helpers@0.5.23))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(better-call@1.3.5(zod@4.3.6))(express@5.2.1)(hono@4.12.18)(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5) better-auth: specifier: ^1.5.3 - version: 1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.7)(@rspack/core@2.0.4(@swc/helpers@0.5.21))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) + version: 1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.9)(@rspack/core@2.0.5(@swc/helpers@0.5.23))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) drizzle-orm: specifier: ^0.45.1 - version: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0) + version: 0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0) react: specifier: ^19.2.0 version: 19.2.5 @@ -463,10 +466,10 @@ importers: version: link:../github drizzle-orm: specifier: ^0.45.1 - version: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0) + version: 0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0) evlog: specifier: ^2.17.0 - version: 2.17.0(ai@6.0.184(zod@4.3.6))(express@5.2.1)(hono@4.12.18)(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(nitro@3.0.260311-beta(dotenv@17.4.2)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(jiti@2.6.1)(lru-cache@11.3.5)(rollup@4.60.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(ofetch@2.0.0-alpha.3)(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) + version: 2.17.0(ai@6.0.184(zod@4.3.6))(express@5.2.1)(hono@4.12.18)(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(nitro@3.0.260311-beta(@electric-sql/pglite@0.4.6)(dotenv@17.4.2)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(jiti@2.6.1)(lru-cache@11.3.5)(rollup@4.60.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(ofetch@2.0.0-alpha.3)(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) zod: specifier: ^4.3.6 version: 4.3.6 @@ -483,12 +486,15 @@ importers: packages/db: dependencies: + '@electric-sql/pglite': + specifier: ^0.4.6 + version: 0.4.6 '@tripwire/env': specifier: workspace:* version: link:../env drizzle-orm: specifier: ^0.45.1 - version: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0) + version: 0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0) pg: specifier: ^8.16.3 version: 8.20.0 @@ -566,10 +572,10 @@ importers: version: link:../env drizzle-orm: specifier: ^0.45.1 - version: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0) + version: 0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0) evlog: specifier: ^2.17.0 - version: 2.17.0(ai@6.0.184(zod@4.3.6))(express@5.2.1)(hono@4.12.18)(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(nitro@3.0.260311-beta(dotenv@17.4.2)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(jiti@2.6.1)(lru-cache@11.3.5)(rollup@4.60.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(ofetch@2.0.0-alpha.3)(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) + version: 2.17.0(ai@6.0.184(zod@4.3.6))(express@5.2.1)(hono@4.12.18)(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(nitro@3.0.260311-beta(@electric-sql/pglite@0.4.6)(dotenv@17.4.2)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(jiti@2.6.1)(lru-cache@11.3.5)(rollup@4.60.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(ofetch@2.0.0-alpha.3)(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) jose: specifier: 5.9.6 version: 5.9.6 @@ -616,7 +622,7 @@ importers: version: 2.1.4 evlog: specifier: ^2.17.0 - version: 2.17.0(ai@6.0.184(zod@4.3.6))(express@5.2.1)(hono@4.12.18)(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(nitro@3.0.260311-beta(dotenv@17.4.2)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(jiti@2.6.1)(lru-cache@11.3.5)(rollup@4.60.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(ofetch@2.0.0-alpha.3)(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) + version: 2.17.0(ai@6.0.184(zod@4.3.6))(express@5.2.1)(hono@4.12.18)(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(nitro@3.0.260311-beta(@electric-sql/pglite@0.4.6)(dotenv@17.4.2)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(jiti@2.6.1)(lru-cache@11.3.5)(rollup@4.60.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(ofetch@2.0.0-alpha.3)(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) devDependencies: '@types/node': specifier: ^22.10.2 @@ -666,10 +672,10 @@ importers: version: 6.0.184(zod@4.3.6) drizzle-orm: specifier: ^0.45.1 - version: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0) + version: 0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0) evlog: specifier: ^2.17.0 - version: 2.17.0(ai@6.0.184(zod@4.3.6))(express@5.2.1)(hono@4.12.18)(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(nitro@3.0.260311-beta(dotenv@17.4.2)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(jiti@2.6.1)(lru-cache@11.3.5)(rollup@4.60.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(ofetch@2.0.0-alpha.3)(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) + version: 2.17.0(ai@6.0.184(zod@4.3.6))(express@5.2.1)(hono@4.12.18)(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(nitro@3.0.260311-beta(@electric-sql/pglite@0.4.6)(dotenv@17.4.2)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(jiti@2.6.1)(lru-cache@11.3.5)(rollup@4.60.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(ofetch@2.0.0-alpha.3)(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) zod: specifier: ^4.3.6 version: 4.3.6 @@ -1222,6 +1228,9 @@ packages: '@drizzle-team/brocli@0.10.2': resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==} + '@electric-sql/pglite@0.4.6': + resolution: {integrity: sha512-qmlmfN8UyKCee35qkV0r/MBp+Znl8FjBz7OpoglNvww3GJpw0/DLP0o1ZymvLNmcD5DTLOQdzKPtF8Hd3mdl1w==} + '@emnapi/core@1.10.0': resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} @@ -3980,8 +3989,8 @@ packages: cpu: [x64] os: [win32] - '@rsbuild/core@2.0.7': - resolution: {integrity: sha512-LsBONEzsjzOAqO72ot39eI7g53zSfF9QuDXTu4ks8IUX+EZsxRSniQfc+1zVA6a6y3b9KUUtG96avoMLKbWklQ==} + '@rsbuild/core@2.0.9': + resolution: {integrity: sha512-lK2bMNuwh3TuLXLskS7nG3fnQk+6eaLeeZiquJWcna4JZx9iaI59JSd+iLcg5TeZLjEVygkwn/HcE+yuYDQRAw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -3990,64 +3999,64 @@ packages: core-js: optional: true - '@rspack/binding-darwin-arm64@2.0.4': - resolution: {integrity: sha512-0Q1QXFEsZfDc4opiDnb8q50KlBbC2VovViDaYlMJZBzvjAo325mh3itXPfz7YZ31M+TxRE7TUiJXH3ltiV1Hdg==} + '@rspack/binding-darwin-arm64@2.0.5': + resolution: {integrity: sha512-++wjLQjQ20GcR0DwbzQmVXg9qy4XCX5NlfSzkzj2icHoDxr3KkrXhyVrQkdWuNG6l/bQrGLPnvLEAqkroC2Y7A==} cpu: [arm64] os: [darwin] - '@rspack/binding-darwin-x64@2.0.4': - resolution: {integrity: sha512-oO5J2QYf7+H+aYRj85EiGrDOoDEE9EDDl7NgXv46iWvIF0wXowEHXqnjMFxHxRq2Vf6scT+0yYQX9blWcvMWAA==} + '@rspack/binding-darwin-x64@2.0.5': + resolution: {integrity: sha512-JBD5mCN3JKjV64Mh9nDYx8lLUrWDfEl5tLBuMkREUnqEKbo+z4nfwotyqHHM8/XgZwL+Gr7ps4GLWuQQrZB8+Q==} cpu: [x64] os: [darwin] - '@rspack/binding-linux-arm64-gnu@2.0.4': - resolution: {integrity: sha512-BEk6mIYBK4BihW9qXXITJORrVXecTlkRjrqhgefili4xjXtLdcUnxAm9sN/2oJ8m378n2h33qDh4gr2orPBFWQ==} + '@rspack/binding-linux-arm64-gnu@2.0.5': + resolution: {integrity: sha512-JI8+//woanJPNsfL7iGjX39zyiWumnrKHznWQM/7lEtE5nPmk+j+X7TYXxczSWC9zfZegiqI74D3L5JPDC84Fw==} cpu: [arm64] os: [linux] - '@rspack/binding-linux-arm64-musl@2.0.4': - resolution: {integrity: sha512-Hyt3z1RwNcSMIoaoWLN4Hb/696/O5JPukf8rXQASvf2UkC+X3ij7tr+8lMSYi3Zysi1QL375CnT4fNoABEW0JA==} + '@rspack/binding-linux-arm64-musl@2.0.5': + resolution: {integrity: sha512-5LujilxLtJFRiiPz5i5iWcWJriK9oy4gN7gZtTo8YRB7wwmwA8LMypTjjO0GLbkPS4/KeCfY4fDfTC29KmK+tA==} cpu: [arm64] os: [linux] - '@rspack/binding-linux-x64-gnu@2.0.4': - resolution: {integrity: sha512-xHorBPBZAg0Pn9Q0k9dWZ9euowieDxcSOzQ9JhTCmhDY6wZH5M/kCBFlCs/OQeW5/NUArW3x3MwEdO/0QJHMxg==} + '@rspack/binding-linux-x64-gnu@2.0.5': + resolution: {integrity: sha512-241wqE132jh+/U/pn97qUPV4KpIy4bSrTH0tqfzQCocgw+8hrUj02GqNG+3MXVC3qtwaQeJFYgEBy3TqFKsrIQ==} cpu: [x64] os: [linux] - '@rspack/binding-linux-x64-musl@2.0.4': - resolution: {integrity: sha512-QLxEGUXofF0kVNU12Y2NT3Qi9lGs+WbnYpapVeb+2IXtrAXJfU7Rhy7lAp5GLMzYMQNrKKL9SVnTWKbODbNW9Q==} + '@rspack/binding-linux-x64-musl@2.0.5': + resolution: {integrity: sha512-BhaXZD064Lci3Kia0kLDAb4TyxO2C+0UidMlj44e8+ctasxIfFZgnrhCJrhTFHAtOiAwqhU3FHun2UuxPqX0Eg==} cpu: [x64] os: [linux] - '@rspack/binding-wasm32-wasi@2.0.4': - resolution: {integrity: sha512-YhN8HkiH46ONU9tm5dyoXDImDWGpU7E4SPqGI4OyAVF0445uIChurIUmTIOYcD6cg81GGeIjozWJOcb635Dcqw==} + '@rspack/binding-wasm32-wasi@2.0.5': + resolution: {integrity: sha512-duEkRoXrl9SW8uGHv7JURJ5lgKu87qFDQ4Exy6UQPvsUJVXhtRXTfvMHCb/CejVJuW2Bw2D632/axZq3qRSuBQ==} cpu: [wasm32] - '@rspack/binding-win32-arm64-msvc@2.0.4': - resolution: {integrity: sha512-MUlYIz82xQRN0aoiXXyEBrNVUwiOSSFRi7nuCgUKduaSdlbPWzCY31IdtOygZ06LVp5JIGUEtyqSrjQq4FrMRw==} + '@rspack/binding-win32-arm64-msvc@2.0.5': + resolution: {integrity: sha512-q2WT3HFoWL+2g84l3s2kY7CiE1gEZ1bwB3txx3eZzQQ6YKP7bE82z6sl6S/pTOHGjHdAO4snQXpSaHwUt3LX5g==} cpu: [arm64] os: [win32] - '@rspack/binding-win32-ia32-msvc@2.0.4': - resolution: {integrity: sha512-D7UcIFMzlY2yhhyuW4Ej15gBWmTwUM5DxuObl3Kv31qRv/pmV3MsqUeG5m2dqLbUxzqPH87qnp0cArbkJQ1b+w==} + '@rspack/binding-win32-ia32-msvc@2.0.5': + resolution: {integrity: sha512-nMJGIY7kvgbyMolEE7tXDe+Z9jSItDshTIqMQQkkD3WTHdjlBQozHxk4kBtKLsunO+3NkCLe5Oa3hXg1yyStIg==} cpu: [ia32] os: [win32] - '@rspack/binding-win32-x64-msvc@2.0.4': - resolution: {integrity: sha512-MnYKPfdrAEbtpKg/1SZ6cNtzreIRyQJK4APbxLLPXENdTH5QXQkaTjLMKEeJcJ51FRhI/+yNpOUm2oTHdCQ1Og==} + '@rspack/binding-win32-x64-msvc@2.0.5': + resolution: {integrity: sha512-vP0BR6fxdPL9cb02HAuZATg/CjR07aecWel3s1vqRwW1aDffgXh9PVmqEKIHTgyaNsNR55kSKNJsB9AcQ8/QrA==} cpu: [x64] os: [win32] - '@rspack/binding@2.0.4': - resolution: {integrity: sha512-/QeJDPUw/lWkBJESG264KA9u6/rAjvoJhKncU4rkTi5Ap45kue5HTgOzr0ufxKdd2Xl72fjFBuqlKmtFDD5LiQ==} + '@rspack/binding@2.0.5': + resolution: {integrity: sha512-Ta1y4WXJA87wM1OstqaMddoPsBGv7Cu779bYToKxEAqR/Yy9DxLkp7bdgBaAx2JH++BwVjV+toWts2V9AaiTFQ==} - '@rspack/core@2.0.4': - resolution: {integrity: sha512-OuxdQeeKWQpNvFBRDOcnoSaQvp6E4APM/6JJMM/k0p6oL1TEFQVGdNu3VGY4mRAsebnNBXapMVMhj+v66Bn2pg==} + '@rspack/core@2.0.5': + resolution: {integrity: sha512-9tv2HAnSiTote5WPH2tmz1hLZ1zKbzkiZc1eYp7LP/8jcsiJBuf40ihiWidAgbbuYtJo3kWET6q+qOm5UhNiGA==} engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: '@module-federation/runtime-tools': ^0.24.1 || ^2.0.0 - '@swc/helpers': '>=0.5.1' + '@swc/helpers': ^0.5.23 peerDependenciesMeta: '@module-federation/runtime-tools': optional: true @@ -4126,8 +4135,8 @@ packages: '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} - '@swc/helpers@0.5.21': - resolution: {integrity: sha512-jI/VAmtdjB/RnI8GTnokyX7Ug8c+g+ffD6QRLa6XQewtnGyukKkKSk3wLTM3b5cjt1jNh9x0jfVlagdN2gDKQg==} + '@swc/helpers@0.5.23': + resolution: {integrity: sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==} '@t3-oss/env-core@0.13.11': resolution: {integrity: sha512-sM7GYY+KL7H/Hl0BE0inWfk3nRHZOLhmVn7sHGxaZt9FAR6KqREXAE+6TqKfiavfXmpRxO/OZ2QgKRd+oiBYRQ==} @@ -9186,12 +9195,12 @@ snapshots: - supports-color - zod - '@ai-sdk-tools/memory@2.0.0-beta.0(ai@6.0.184(zod@4.3.6))(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(redis@4.7.1)': + '@ai-sdk-tools/memory@2.0.0-beta.0(ai@6.0.184(zod@4.3.6))(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(redis@4.7.1)': dependencies: zod: 4.3.6 optionalDependencies: ai: 6.0.184(zod@4.3.6) - drizzle-orm: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0) + drizzle-orm: 0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0) redis: 4.7.1 '@ai-sdk-tools/store@2.0.0-beta.0(@ai-sdk/react@3.0.186(react@19.2.5)(zod@4.3.6))(react@19.2.5)(zod@4.3.6)(zustand@5.0.13(@types/react@19.2.14)(react@19.2.5)(use-sync-external-store@1.6.0(react@19.2.5)))': @@ -9460,37 +9469,37 @@ snapshots: optionalDependencies: '@opentelemetry/api': 1.9.1 - '@better-auth/drizzle-adapter@1.6.9(@better-auth/core@1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@5.9.6)(kysely@0.28.16)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))': + '@better-auth/drizzle-adapter@1.6.9(@better-auth/core@1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@5.9.6)(kysely@0.28.16)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))': dependencies: '@better-auth/core': 1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@5.9.6)(kysely@0.28.16)(nanostores@1.3.0) '@better-auth/utils': 0.4.0 optionalDependencies: - drizzle-orm: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0) + drizzle-orm: 0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0) - '@better-auth/drizzle-adapter@1.6.9(@better-auth/core@1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))': + '@better-auth/drizzle-adapter@1.6.9(@better-auth/core@1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))': dependencies: '@better-auth/core': 1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.3.0) '@better-auth/utils': 0.4.0 optionalDependencies: - drizzle-orm: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0) + drizzle-orm: 0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0) - '@better-auth/infra@0.2.8(dd57db0571ca17b25b242dbb191dd2e6)': + '@better-auth/infra@0.2.8(2ebf2f797a034b1c7af44c1119889faf)': dependencies: '@better-auth/core': 1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.3.0) - '@better-auth/sso': 1.6.9(6559e4c72fc3d887f3fca4da37520e74) + '@better-auth/sso': 1.6.9(fb2c15fc6809bac617b7311047950fc2) '@better-fetch/fetch': 1.1.21 - better-auth: 1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.7)(@rspack/core@2.0.4(@swc/helpers@0.5.21))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) + better-auth: 1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.9)(@rspack/core@2.0.5(@swc/helpers@0.5.23))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) better-call: 1.3.5(zod@4.3.6) jose: 6.2.2 libphonenumber-js: 1.13.2 zod: 4.3.6 - '@better-auth/infra@0.2.8(f6aba15f7298c83ad20760884f7a5591)': + '@better-auth/infra@0.2.8(b5a6bffde14e21b2f12962e5bb0de136)': dependencies: '@better-auth/core': 1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@5.9.6)(kysely@0.28.16)(nanostores@1.3.0) - '@better-auth/sso': 1.6.9(8508c6f534b0740184f29160f40ce5fe) + '@better-auth/sso': 1.6.9(a2e8d8df655b27341a95b2c8983e4e7a) '@better-fetch/fetch': 1.1.21 - better-auth: 1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.7)(@rspack/core@2.0.4(@swc/helpers@0.5.21))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) + better-auth: 1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.9)(@rspack/core@2.0.5(@swc/helpers@0.5.23))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) better-call: 1.3.5(zod@4.3.6) jose: 6.2.2 libphonenumber-js: 1.13.2 @@ -9540,12 +9549,12 @@ snapshots: '@better-auth/core': 1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.3.0) '@better-auth/utils': 0.4.0 - '@better-auth/sso@1.6.9(6559e4c72fc3d887f3fca4da37520e74)': + '@better-auth/sso@1.6.9(a2e8d8df655b27341a95b2c8983e4e7a)': dependencies: - '@better-auth/core': 1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.3.0) + '@better-auth/core': 1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@5.9.6)(kysely@0.28.16)(nanostores@1.3.0) '@better-auth/utils': 0.4.0 '@better-fetch/fetch': 1.1.21 - better-auth: 1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.7)(@rspack/core@2.0.4(@swc/helpers@0.5.21))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) + better-auth: 1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.9)(@rspack/core@2.0.5(@swc/helpers@0.5.23))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) better-call: 1.3.5(zod@4.3.6) fast-xml-parser: 5.7.2 jose: 6.2.2 @@ -9553,12 +9562,12 @@ snapshots: tldts: 6.1.86 zod: 4.3.6 - '@better-auth/sso@1.6.9(8508c6f534b0740184f29160f40ce5fe)': + '@better-auth/sso@1.6.9(fb2c15fc6809bac617b7311047950fc2)': dependencies: - '@better-auth/core': 1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@5.9.6)(kysely@0.28.16)(nanostores@1.3.0) + '@better-auth/core': 1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.3.0) '@better-auth/utils': 0.4.0 '@better-fetch/fetch': 1.1.21 - better-auth: 1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.7)(@rspack/core@2.0.4(@swc/helpers@0.5.21))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) + better-auth: 1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.9)(@rspack/core@2.0.5(@swc/helpers@0.5.23))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) better-call: 1.3.5(zod@4.3.6) fast-xml-parser: 5.7.2 jose: 6.2.2 @@ -9672,6 +9681,8 @@ snapshots: '@drizzle-team/brocli@0.10.2': {} + '@electric-sql/pglite@0.4.6': {} + '@emnapi/core@1.10.0': dependencies: '@emnapi/wasi-threads': 1.2.1 @@ -12309,65 +12320,65 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.60.2': optional: true - '@rsbuild/core@2.0.7': + '@rsbuild/core@2.0.9': dependencies: - '@rspack/core': 2.0.4(@swc/helpers@0.5.21) - '@swc/helpers': 0.5.21 + '@rspack/core': 2.0.5(@swc/helpers@0.5.23) + '@swc/helpers': 0.5.23 transitivePeerDependencies: - '@module-federation/runtime-tools' - '@rspack/binding-darwin-arm64@2.0.4': + '@rspack/binding-darwin-arm64@2.0.5': optional: true - '@rspack/binding-darwin-x64@2.0.4': + '@rspack/binding-darwin-x64@2.0.5': optional: true - '@rspack/binding-linux-arm64-gnu@2.0.4': + '@rspack/binding-linux-arm64-gnu@2.0.5': optional: true - '@rspack/binding-linux-arm64-musl@2.0.4': + '@rspack/binding-linux-arm64-musl@2.0.5': optional: true - '@rspack/binding-linux-x64-gnu@2.0.4': + '@rspack/binding-linux-x64-gnu@2.0.5': optional: true - '@rspack/binding-linux-x64-musl@2.0.4': + '@rspack/binding-linux-x64-musl@2.0.5': optional: true - '@rspack/binding-wasm32-wasi@2.0.4': + '@rspack/binding-wasm32-wasi@2.0.5': dependencies: '@emnapi/core': 1.10.0 '@emnapi/runtime': 1.10.0 '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true - '@rspack/binding-win32-arm64-msvc@2.0.4': + '@rspack/binding-win32-arm64-msvc@2.0.5': optional: true - '@rspack/binding-win32-ia32-msvc@2.0.4': + '@rspack/binding-win32-ia32-msvc@2.0.5': optional: true - '@rspack/binding-win32-x64-msvc@2.0.4': + '@rspack/binding-win32-x64-msvc@2.0.5': optional: true - '@rspack/binding@2.0.4': + '@rspack/binding@2.0.5': optionalDependencies: - '@rspack/binding-darwin-arm64': 2.0.4 - '@rspack/binding-darwin-x64': 2.0.4 - '@rspack/binding-linux-arm64-gnu': 2.0.4 - '@rspack/binding-linux-arm64-musl': 2.0.4 - '@rspack/binding-linux-x64-gnu': 2.0.4 - '@rspack/binding-linux-x64-musl': 2.0.4 - '@rspack/binding-wasm32-wasi': 2.0.4 - '@rspack/binding-win32-arm64-msvc': 2.0.4 - '@rspack/binding-win32-ia32-msvc': 2.0.4 - '@rspack/binding-win32-x64-msvc': 2.0.4 - - '@rspack/core@2.0.4(@swc/helpers@0.5.21)': - dependencies: - '@rspack/binding': 2.0.4 + '@rspack/binding-darwin-arm64': 2.0.5 + '@rspack/binding-darwin-x64': 2.0.5 + '@rspack/binding-linux-arm64-gnu': 2.0.5 + '@rspack/binding-linux-arm64-musl': 2.0.5 + '@rspack/binding-linux-x64-gnu': 2.0.5 + '@rspack/binding-linux-x64-musl': 2.0.5 + '@rspack/binding-wasm32-wasi': 2.0.5 + '@rspack/binding-win32-arm64-msvc': 2.0.5 + '@rspack/binding-win32-ia32-msvc': 2.0.5 + '@rspack/binding-win32-x64-msvc': 2.0.5 + + '@rspack/core@2.0.5(@swc/helpers@0.5.23)': + dependencies: + '@rspack/binding': 2.0.5 optionalDependencies: - '@swc/helpers': 0.5.21 + '@swc/helpers': 0.5.23 '@sec-ant/readable-stream@0.4.1': {} @@ -12453,7 +12464,7 @@ snapshots: dependencies: tslib: 2.8.1 - '@swc/helpers@0.5.21': + '@swc/helpers@0.5.23': dependencies: tslib: 2.8.1 @@ -12658,7 +12669,7 @@ snapshots: react: 19.2.5 react-dom: 19.2.5(react@19.2.5) - '@tanstack/react-start-rsc@0.0.28(@rsbuild/core@2.0.7)(@rspack/core@2.0.4(@swc/helpers@0.5.21))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0))': + '@tanstack/react-start-rsc@0.0.28(@rsbuild/core@2.0.9)(@rspack/core@2.0.5(@swc/helpers@0.5.23))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0))': dependencies: '@tanstack/react-router': 1.168.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@tanstack/react-start-server': 1.166.43(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5) @@ -12666,14 +12677,14 @@ snapshots: '@tanstack/router-utils': 1.161.7 '@tanstack/start-client-core': 1.167.19 '@tanstack/start-fn-stubs': 1.161.6 - '@tanstack/start-plugin-core': 1.169.5(@rsbuild/core@2.0.7)(@tanstack/react-router@1.168.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(crossws@0.4.5(srvx@0.11.15))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) + '@tanstack/start-plugin-core': 1.169.5(@rsbuild/core@2.0.9)(@tanstack/react-router@1.168.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(crossws@0.4.5(srvx@0.11.15))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) '@tanstack/start-server-core': 1.167.21(crossws@0.4.5(srvx@0.11.15)) '@tanstack/start-storage-context': 1.166.30 pathe: 2.0.3 react: 19.2.5 react-dom: 19.2.5(react@19.2.5) optionalDependencies: - '@rspack/core': 2.0.4(@swc/helpers@0.5.21) + '@rspack/core': 2.0.5(@swc/helpers@0.5.23) transitivePeerDependencies: - '@rsbuild/core' - crossws @@ -12694,21 +12705,21 @@ snapshots: transitivePeerDependencies: - crossws - '@tanstack/react-start@1.167.49(@rsbuild/core@2.0.7)(@rspack/core@2.0.4(@swc/helpers@0.5.21))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0))': + '@tanstack/react-start@1.167.49(@rsbuild/core@2.0.9)(@rspack/core@2.0.5(@swc/helpers@0.5.23))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0))': dependencies: '@tanstack/react-router': 1.168.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@tanstack/react-start-client': 1.166.42(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@tanstack/react-start-rsc': 0.0.28(@rsbuild/core@2.0.7)(@rspack/core@2.0.4(@swc/helpers@0.5.21))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) + '@tanstack/react-start-rsc': 0.0.28(@rsbuild/core@2.0.9)(@rspack/core@2.0.5(@swc/helpers@0.5.23))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) '@tanstack/react-start-server': 1.166.43(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@tanstack/router-utils': 1.161.7 '@tanstack/start-client-core': 1.167.19 - '@tanstack/start-plugin-core': 1.169.5(@rsbuild/core@2.0.7)(@tanstack/react-router@1.168.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(crossws@0.4.5(srvx@0.11.15))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) + '@tanstack/start-plugin-core': 1.169.5(@rsbuild/core@2.0.9)(@tanstack/react-router@1.168.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(crossws@0.4.5(srvx@0.11.15))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) '@tanstack/start-server-core': 1.167.21(crossws@0.4.5(srvx@0.11.15)) pathe: 2.0.3 react: 19.2.5 react-dom: 19.2.5(react@19.2.5) optionalDependencies: - '@rsbuild/core': 2.0.7 + '@rsbuild/core': 2.0.9 vite: 7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0) transitivePeerDependencies: - '@rspack/core' @@ -12766,7 +12777,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.167.27(@rsbuild/core@2.0.7)(@tanstack/react-router@1.168.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0))': + '@tanstack/router-plugin@1.167.27(@rsbuild/core@2.0.9)(@tanstack/react-router@1.168.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) @@ -12782,7 +12793,7 @@ snapshots: unplugin: 3.0.0 zod: 3.25.76 optionalDependencies: - '@rsbuild/core': 2.0.7 + '@rsbuild/core': 2.0.9 '@tanstack/react-router': 1.168.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5) vite: 7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0) transitivePeerDependencies: @@ -12816,7 +12827,7 @@ snapshots: '@tanstack/start-fn-stubs@1.161.6': {} - '@tanstack/start-plugin-core@1.169.5(@rsbuild/core@2.0.7)(@tanstack/react-router@1.168.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(crossws@0.4.5(srvx@0.11.15))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0))': + '@tanstack/start-plugin-core@1.169.5(@rsbuild/core@2.0.9)(@tanstack/react-router@1.168.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(crossws@0.4.5(srvx@0.11.15))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0))': dependencies: '@babel/code-frame': 7.27.1 '@babel/core': 7.29.0 @@ -12824,7 +12835,7 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.40 '@tanstack/router-core': 1.168.16 '@tanstack/router-generator': 1.166.35 - '@tanstack/router-plugin': 1.167.27(@rsbuild/core@2.0.7)(@tanstack/react-router@1.168.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) + '@tanstack/router-plugin': 1.167.27(@rsbuild/core@2.0.9)(@tanstack/react-router@1.168.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) '@tanstack/router-utils': 1.161.7 '@tanstack/start-client-core': 1.167.19 '@tanstack/start-server-core': 1.167.21(crossws@0.4.5(srvx@0.11.15)) @@ -12842,7 +12853,7 @@ snapshots: xmlbuilder2: 4.0.3 zod: 3.25.76 optionalDependencies: - '@rsbuild/core': 2.0.7 + '@rsbuild/core': 2.0.9 vite: 7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0) transitivePeerDependencies: - '@tanstack/react-router' @@ -13586,26 +13597,26 @@ snapshots: auto-bind@5.0.1: {} - autumn-js@1.2.12(better-auth@1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.7)(@rspack/core@2.0.4(@swc/helpers@0.5.21))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(better-call@1.3.5(zod@4.3.6))(express@5.2.1)(hono@4.12.18)(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5): + autumn-js@1.2.12(a968eb16b13cb4e4c7f6dd9da175852c): dependencies: query-string: 9.3.1 rou3: 0.6.3 zod: 4.3.6 optionalDependencies: - better-auth: 1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.7)(@rspack/core@2.0.4(@swc/helpers@0.5.21))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) + better-auth: 1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.9)(@rspack/core@2.0.5(@swc/helpers@0.5.23))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) better-call: 1.3.5(zod@4.3.6) express: 5.2.1 hono: 4.12.18 next: 16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) react: 19.2.5 - autumn-js@1.2.12(better-auth@1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.7)(@rspack/core@2.0.4(@swc/helpers@0.5.21))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(better-call@1.3.5(zod@4.3.6))(express@5.2.1)(hono@4.12.18)(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5): + autumn-js@1.2.12(better-auth@1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.9)(@rspack/core@2.0.5(@swc/helpers@0.5.23))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(better-call@1.3.5(zod@4.3.6))(express@5.2.1)(hono@4.12.18)(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5): dependencies: query-string: 9.3.1 rou3: 0.6.3 zod: 4.3.6 optionalDependencies: - better-auth: 1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.7)(@rspack/core@2.0.4(@swc/helpers@0.5.21))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) + better-auth: 1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.9)(@rspack/core@2.0.5(@swc/helpers@0.5.23))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) better-call: 1.3.5(zod@4.3.6) express: 5.2.1 hono: 4.12.18 @@ -13651,10 +13662,10 @@ snapshots: baseline-browser-mapping@2.10.21: {} - better-auth@1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.7)(@rspack/core@2.0.4(@swc/helpers@0.5.21))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)): + better-auth@1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.9)(@rspack/core@2.0.5(@swc/helpers@0.5.23))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)): dependencies: '@better-auth/core': 1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.3.0) - '@better-auth/drizzle-adapter': 1.6.9(@better-auth/core@1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@5.9.6)(kysely@0.28.16)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0)) + '@better-auth/drizzle-adapter': 1.6.9(@better-auth/core@1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@5.9.6)(kysely@0.28.16)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0)) '@better-auth/kysely-adapter': 1.6.9(@better-auth/core@1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@5.9.6)(kysely@0.28.16)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(kysely@0.28.16) '@better-auth/memory-adapter': 1.6.9(@better-auth/core@1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@5.9.6)(kysely@0.28.16)(nanostores@1.3.0))(@better-auth/utils@0.4.0) '@better-auth/mongo-adapter': 1.6.9(@better-auth/core@1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@5.9.6)(kysely@0.28.16)(nanostores@1.3.0))(@better-auth/utils@0.4.0) @@ -13671,9 +13682,9 @@ snapshots: nanostores: 1.3.0 zod: 4.3.6 optionalDependencies: - '@tanstack/react-start': 1.167.49(@rsbuild/core@2.0.7)(@rspack/core@2.0.4(@swc/helpers@0.5.21))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) + '@tanstack/react-start': 1.167.49(@rsbuild/core@2.0.9)(@rspack/core@2.0.5(@swc/helpers@0.5.23))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) drizzle-kit: 0.31.10 - drizzle-orm: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0) + drizzle-orm: 0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0) next: 16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) pg: 8.20.0 react: 19.2.5 @@ -13684,10 +13695,10 @@ snapshots: - '@cloudflare/workers-types' - '@opentelemetry/api' - better-auth@1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.7)(@rspack/core@2.0.4(@swc/helpers@0.5.21))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)): + better-auth@1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.9)(@rspack/core@2.0.5(@swc/helpers@0.5.23))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)): dependencies: '@better-auth/core': 1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.3.0) - '@better-auth/drizzle-adapter': 1.6.9(@better-auth/core@1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0)) + '@better-auth/drizzle-adapter': 1.6.9(@better-auth/core@1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0)) '@better-auth/kysely-adapter': 1.6.9(@better-auth/core@1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(kysely@0.28.16) '@better-auth/memory-adapter': 1.6.9(@better-auth/core@1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.3.0))(@better-auth/utils@0.4.0) '@better-auth/mongo-adapter': 1.6.9(@better-auth/core@1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.3.0))(@better-auth/utils@0.4.0) @@ -13704,9 +13715,9 @@ snapshots: nanostores: 1.3.0 zod: 4.3.6 optionalDependencies: - '@tanstack/react-start': 1.167.49(@rsbuild/core@2.0.7)(@rspack/core@2.0.4(@swc/helpers@0.5.21))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) + '@tanstack/react-start': 1.167.49(@rsbuild/core@2.0.9)(@rspack/core@2.0.5(@swc/helpers@0.5.23))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) drizzle-kit: 0.31.10 - drizzle-orm: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0) + drizzle-orm: 0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0) next: 16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) pg: 8.20.0 react: 19.2.5 @@ -14276,9 +14287,10 @@ snapshots: dayjs@1.11.20: {} - db0@0.3.4(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0)): + db0@0.3.4(@electric-sql/pglite@0.4.6)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0)): optionalDependencies: - drizzle-orm: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0) + '@electric-sql/pglite': 0.4.6 + drizzle-orm: 0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0) debounce-fn@6.0.0: dependencies: @@ -14379,8 +14391,9 @@ snapshots: esbuild: 0.25.12 tsx: 4.21.0 - drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0): + drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0): optionalDependencies: + '@electric-sql/pglite': 0.4.6 '@opentelemetry/api': 1.9.1 '@types/pg': 8.20.0 kysely: 0.28.16 @@ -14649,23 +14662,13 @@ snapshots: dependencies: eventsource-parser: 3.0.8 - evlog@2.17.0(ai@6.0.184(zod@4.3.6))(express@5.2.1)(hono@4.12.18)(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(nitro@3.0.260311-beta(dotenv@17.4.2)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(jiti@2.6.1)(lru-cache@11.3.5)(rollup@4.60.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)): - optionalDependencies: - ai: 6.0.184(zod@4.3.6) - express: 5.2.1 - hono: 4.12.18 - next: 16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - nitro: 3.0.260311-beta(dotenv@17.4.2)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(jiti@2.6.1)(lru-cache@11.3.5)(rollup@4.60.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) - react: 19.2.5 - vite: 7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0) - - evlog@2.17.0(ai@6.0.184(zod@4.3.6))(express@5.2.1)(hono@4.12.18)(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(nitro@3.0.260311-beta(dotenv@17.4.2)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(jiti@2.6.1)(lru-cache@11.3.5)(rollup@4.60.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(ofetch@2.0.0-alpha.3)(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)): + evlog@2.17.0(ai@6.0.184(zod@4.3.6))(express@5.2.1)(hono@4.12.18)(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(nitro@3.0.260311-beta(@electric-sql/pglite@0.4.6)(dotenv@17.4.2)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(jiti@2.6.1)(lru-cache@11.3.5)(rollup@4.60.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(ofetch@2.0.0-alpha.3)(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)): optionalDependencies: ai: 6.0.184(zod@4.3.6) express: 5.2.1 hono: 4.12.18 next: 16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - nitro: 3.0.260311-beta(dotenv@17.4.2)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(jiti@2.6.1)(lru-cache@11.3.5)(rollup@4.60.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) + nitro: 3.0.260311-beta(@electric-sql/pglite@0.4.6)(dotenv@17.4.2)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(jiti@2.6.1)(lru-cache@11.3.5)(rollup@4.60.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) ofetch: 2.0.0-alpha.3 react: 19.2.5 vite: 7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0) @@ -16138,11 +16141,11 @@ snapshots: nf3@0.3.16: {} - nitro@3.0.260311-beta(dotenv@17.4.2)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(jiti@2.6.1)(lru-cache@11.3.5)(rollup@4.60.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)): + nitro@3.0.260311-beta(@electric-sql/pglite@0.4.6)(dotenv@17.4.2)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(jiti@2.6.1)(lru-cache@11.3.5)(rollup@4.60.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)): dependencies: consola: 3.4.2 crossws: 0.4.5(srvx@0.11.15) - db0: 0.3.4(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0)) + db0: 0.3.4(@electric-sql/pglite@0.4.6)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0)) env-runner: 0.1.7 h3: 2.0.1-rc.20(crossws@0.4.5(srvx@0.11.15)) hookable: 6.1.1 @@ -16153,7 +16156,7 @@ snapshots: rolldown: 1.0.0-rc.17 srvx: 0.11.15 unenv: 2.0.0-rc.24 - unstorage: 2.0.0-alpha.7(db0@0.3.4(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0)))(lru-cache@11.3.5)(ofetch@2.0.0-alpha.3) + unstorage: 2.0.0-alpha.7(db0@0.3.4(@electric-sql/pglite@0.4.6)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0)))(lru-cache@11.3.5)(ofetch@2.0.0-alpha.3) optionalDependencies: dotenv: 17.4.2 jiti: 2.6.1 @@ -17508,9 +17511,9 @@ snapshots: picomatch: 4.0.4 webpack-virtual-modules: 0.6.2 - unstorage@2.0.0-alpha.7(db0@0.3.4(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0)))(lru-cache@11.3.5)(ofetch@2.0.0-alpha.3): + unstorage@2.0.0-alpha.7(db0@0.3.4(@electric-sql/pglite@0.4.6)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0)))(lru-cache@11.3.5)(ofetch@2.0.0-alpha.3): optionalDependencies: - db0: 0.3.4(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0)) + db0: 0.3.4(@electric-sql/pglite@0.4.6)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0)) lru-cache: 11.3.5 ofetch: 2.0.0-alpha.3 From cc229fe7fdf2caa1a93ec910270def500dba2a22 Mon Sep 17 00:00:00 2001 From: Leo Date: Sun, 31 May 2026 14:01:38 -0400 Subject: [PATCH 3/5] T3CODE-6399234F fix: polish dev login button state --- apps/web/src/components/layout/auth/login-page.tsx | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/apps/web/src/components/layout/auth/login-page.tsx b/apps/web/src/components/layout/auth/login-page.tsx index a8146649..9ad84400 100644 --- a/apps/web/src/components/layout/auth/login-page.tsx +++ b/apps/web/src/components/layout/auth/login-page.tsx @@ -2,6 +2,7 @@ import { authClient } from "@tripwire/auth/client" import { useEffect, useState } from "react" import { Button } from "@tripwire/ui/button" import { TripwireLogo } from "@tripwire/ui/icons/tripwire-logo" +import { Spinner } from "@tripwire/ui/spinner" export function LoginPageSkeleton() { return ( @@ -73,10 +74,17 @@ export function LoginPage() { onClick={import.meta.env.DEV ? handleDevLogin : handleGithubLogin} variant="outline" size="sm" - loading={devLoginPending} - className="border-[#CDCDCD] bg-white text-black hover:bg-white/90" + disabled={devLoginPending} + aria-label={devLoginPending ? "Logging in as dev" : undefined} + className="min-w-24 border-[#CDCDCD] bg-white text-black hover:bg-white/90" > - {import.meta.env.DEV ? "Dev login" : "Log in"} + {devLoginPending ? ( + + ) : import.meta.env.DEV ? ( + "Login as dev" + ) : ( + "Log in" + )} {devLoginError && (

From 170622364ce708729ebc810c832a5d4071df804f Mon Sep 17 00:00:00 2001 From: Leo Date: Tue, 2 Jun 2026 17:15:32 -0400 Subject: [PATCH 4/5] T3CODE-6399234F fix: address dev seed review comments --- apps/web/drizzle.config.ts | 21 ++++++++++++++++----- apps/web/src/lib/dev-seed.ts | 25 +++++++++++++++++++------ 2 files changed, 35 insertions(+), 11 deletions(-) diff --git a/apps/web/drizzle.config.ts b/apps/web/drizzle.config.ts index f1d3c167..26a03e30 100644 --- a/apps/web/drizzle.config.ts +++ b/apps/web/drizzle.config.ts @@ -1,12 +1,23 @@ import { mkdirSync } from "node:fs" -import { dirname } from "node:path" +import { dirname, resolve } from "node:path" +import { fileURLToPath } from "node:url" import { config } from "dotenv" import { defineConfig } from "drizzle-kit" +const appDir = dirname(fileURLToPath(import.meta.url)) +const repoRoot = resolve(appDir, "../..") +const DEV_DATABASE_DIR = resolve(repoRoot, ".tripwire/pglite") + // .env lives at the monorepo root so all packages (web, future cli) share it. -config({ path: ["../../.env.local", "../../.env", ".env.local", ".env"] }) +config({ + path: [ + resolve(repoRoot, ".env.local"), + resolve(repoRoot, ".env"), + resolve(appDir, ".env.local"), + resolve(appDir, ".env"), + ], +}) -const DEV_DATABASE_DIR = "../../.tripwire/pglite" const isProduction = process.env.NODE_ENV === "production" const databaseUrl = process.env.DATABASE_URL @@ -19,8 +30,8 @@ if (!databaseUrl) { } export default defineConfig({ - out: "./drizzle", - schema: "../../packages/db/src/schema/index.ts", + out: resolve(appDir, "drizzle"), + schema: resolve(repoRoot, "packages/db/src/schema/index.ts"), dialect: "postgresql", ...(databaseUrl ? { diff --git a/apps/web/src/lib/dev-seed.ts b/apps/web/src/lib/dev-seed.ts index 7e2a32db..49c4721b 100644 --- a/apps/web/src/lib/dev-seed.ts +++ b/apps/web/src/lib/dev-seed.ts @@ -18,6 +18,7 @@ import { whitelistEntries, workflows, type CustomRuleDefinition, + type OnboardingSetupAnswers, type RuleConfig, type WorkflowDefinition, } from "@tripwire/db" @@ -31,6 +32,12 @@ const DEV_INSTALLATION_ID = 93_001 const DEV_GITHUB_ACCOUNT_ID = 93_002 const DEV_REPO_GITHUB_ID = 93_003 +const SEEDED_ONBOARDING_SETUP_ANSWERS = { + useCases: ["ai_prs", "spam_issues"], + priorIncident: "Seeded local demo workspace.", + teamSize: "small", +} satisfies OnboardingSetupAnswers + const seededRuleConfig: RuleConfig = { ...DEFAULT_RULE_CONFIG, accountAge: { enabled: true, action: "warn", days: 21 }, @@ -319,11 +326,7 @@ export async function seedDevWorkspace() { completedStep4: true, mainRepoId: repo.id, source: "other", - setupAnswers: { - useCases: ["ai_prs", "spam_issues"], - priorIncident: "Seeded local demo workspace.", - teamSize: "small", - }, + setupAnswers: SEEDED_ONBOARDING_SETUP_ANSWERS, gettingStartedDismissed: false, configuredRules: true, reviewedRiskAlerts: true, @@ -339,6 +342,9 @@ export async function seedDevWorkspace() { completedStep3: true, completedStep4: true, mainRepoId: repo.id, + source: "other", + setupAnswers: SEEDED_ONBOARDING_SETUP_ANSWERS, + gettingStartedDismissed: false, configuredRules: true, reviewedRiskAlerts: true, vouchedSomeone: true, @@ -440,7 +446,14 @@ export async function seedDevWorkspace() { .onConflictDoNothing() const seededPipelineIds = ["dev-seed-1", "dev-seed-2", "dev-seed-3"] - await tx.delete(events).where(inArray(events.pipelineId, seededPipelineIds)) + await tx + .delete(events) + .where( + and( + eq(events.repoId, repo.id), + inArray(events.pipelineId, seededPipelineIds) + ) + ) await tx.insert(events).values([ { From 1af686c8a7fadac6563b14c003306065d83ecdb9 Mon Sep 17 00:00:00 2001 From: Leo Date: Tue, 2 Jun 2026 17:35:00 -0400 Subject: [PATCH 5/5] T3CODE-6399234F fix: stabilize dev login lockfile --- apps/web/package.json | 16 +-- package.json | 5 + pnpm-lock.yaml | 252 ++++++++++++++++++++++-------------------- 3 files changed, 144 insertions(+), 129 deletions(-) diff --git a/apps/web/package.json b/apps/web/package.json index 1c419461..a729dee3 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -45,17 +45,17 @@ "@streamdown/code": "^1.1.1", "@t3-oss/env-core": "^0.13.10", "@tailwindcss/vite": "^4.1.18", - "@tanstack/react-devtools": "latest", - "@tanstack/react-query": "latest", - "@tanstack/react-query-devtools": "latest", + "@tanstack/react-devtools": "0.10.5", + "@tanstack/react-query": "5.100.14", + "@tanstack/react-query-devtools": "5.100.14", "@tanstack/react-router": "1.168.24", "@tanstack/react-table": "^8.21.2", "@tanstack/react-router-devtools": "1.166.13", "@tanstack/react-router-ssr-query": "1.166.12", "@tanstack/react-start": "1.167.49", - "@tanstack/react-store": "latest", + "@tanstack/react-store": "0.11.0", "@tanstack/router-plugin": "1.167.27", - "@tanstack/store": "latest", + "@tanstack/store": "0.11.0", "@tripwire/ai": "workspace:*", "@tripwire/auth": "workspace:*", "@tripwire/core": "workspace:*", @@ -112,10 +112,10 @@ }, "devDependencies": { "@biomejs/biome": "2.2.4", - "@rsbuild/core": "latest", + "@rsbuild/core": "2.0.7", "@tailwindcss/typography": "^0.5.16", - "@tanstack/devtools-event-client": "latest", - "@tanstack/devtools-vite": "latest", + "@tanstack/devtools-event-client": "0.4.3", + "@tanstack/devtools-vite": "0.7.0", "@testing-library/dom": "^10.4.1", "@testing-library/react": "^16.3.0", "@types/node": "^22.10.2", diff --git a/package.json b/package.json index e2e5cbe6..047661d9 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,11 @@ "typescript": "^5.7.2" }, "pnpm": { + "overrides": { + "@rsbuild/core": "2.0.7", + "@rspack/binding": "2.0.4", + "@rspack/core": "2.0.4" + }, "onlyBuiltDependencies": [ "esbuild", "lightningcss" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 37328b45..3a2459ad 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,6 +4,11 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +overrides: + '@rsbuild/core': 2.0.7 + '@rspack/binding': 2.0.4 + '@rspack/core': 2.0.4 + importers: .: @@ -49,7 +54,7 @@ importers: version: 1.4.1(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@better-auth/infra': specifier: ^0.2.8 - version: 0.2.8(b5a6bffde14e21b2f12962e5bb0de136) + version: 0.2.8(ca635e65c532e154708b0fa02055fd51) '@electric-sql/pglite': specifier: ^0.4.6 version: 0.4.6 @@ -105,13 +110,13 @@ importers: specifier: ^4.1.18 version: 4.2.4(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) '@tanstack/react-devtools': - specifier: latest + specifier: 0.10.5 version: 0.10.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(csstype@3.2.3)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12) '@tanstack/react-query': - specifier: latest + specifier: 5.100.14 version: 5.100.14(react@19.2.5) '@tanstack/react-query-devtools': - specifier: latest + specifier: 5.100.14 version: 5.100.14(@tanstack/react-query@5.100.14(react@19.2.5))(react@19.2.5) '@tanstack/react-router': specifier: 1.168.24 @@ -121,21 +126,21 @@ importers: version: 1.166.13(@tanstack/react-router@1.168.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@tanstack/router-core@1.168.16)(csstype@3.2.3)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@tanstack/react-router-ssr-query': specifier: 1.166.12 - version: 1.166.12(@tanstack/query-core@5.100.14)(@tanstack/react-query@5.100.14(react@19.2.5))(@tanstack/react-router@1.168.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@tanstack/router-core@1.168.16)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + version: 1.166.12(@tanstack/query-core@5.101.0)(@tanstack/react-query@5.100.14(react@19.2.5))(@tanstack/react-router@1.168.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@tanstack/router-core@1.168.16)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@tanstack/react-start': specifier: 1.167.49 - version: 1.167.49(@rsbuild/core@2.0.9)(@rspack/core@2.0.5(@swc/helpers@0.5.23))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) + version: 1.167.49(@rsbuild/core@2.0.7)(@rspack/core@2.0.4(@swc/helpers@0.5.21))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) '@tanstack/react-store': - specifier: latest + specifier: 0.11.0 version: 0.11.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@tanstack/react-table': specifier: ^8.21.2 version: 8.21.3(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@tanstack/router-plugin': specifier: 1.167.27 - version: 1.167.27(@rsbuild/core@2.0.9)(@tanstack/react-router@1.168.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) + version: 1.167.27(@rsbuild/core@2.0.7)(@tanstack/react-router@1.168.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) '@tanstack/store': - specifier: latest + specifier: 0.11.0 version: 0.11.0 '@tripwire/ai': specifier: workspace:* @@ -193,10 +198,10 @@ importers: version: 6.0.184(zod@4.3.6) autumn-js: specifier: ^1.2.12 - version: 1.2.12(a968eb16b13cb4e4c7f6dd9da175852c) + version: 1.2.12(c808154b541409adedb88d3b35bdb7c7) better-auth: specifier: ^1.5.3 - version: 1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.9)(@rspack/core@2.0.5(@swc/helpers@0.5.23))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) + version: 1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.7)(@rspack/core@2.0.4(@swc/helpers@0.5.21))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) class-variance-authority: specifier: ^0.7.1 version: 0.7.1 @@ -301,16 +306,16 @@ importers: specifier: 2.2.4 version: 2.2.4 '@rsbuild/core': - specifier: latest - version: 2.0.9 + specifier: 2.0.7 + version: 2.0.7 '@tailwindcss/typography': specifier: ^0.5.16 version: 0.5.19(tailwindcss@4.2.4) '@tanstack/devtools-event-client': - specifier: latest + specifier: 0.4.3 version: 0.4.3 '@tanstack/devtools-vite': - specifier: latest + specifier: 0.7.0 version: 0.7.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) '@testing-library/dom': specifier: ^10.4.1 @@ -383,7 +388,7 @@ importers: version: 6.0.184(zod@4.3.6) autumn-js: specifier: ^1.2.12 - version: 1.2.12(better-auth@1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.9)(@rspack/core@2.0.5(@swc/helpers@0.5.23))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(better-call@1.3.5(zod@4.3.6))(express@5.2.1)(hono@4.12.18)(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5) + version: 1.2.12(better-auth@1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.7)(@rspack/core@2.0.4(@swc/helpers@0.5.21))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(better-call@1.3.5(zod@4.3.6))(express@5.2.1)(hono@4.12.18)(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5) drizzle-orm: specifier: ^0.45.1 version: 0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0) @@ -417,7 +422,7 @@ importers: dependencies: '@better-auth/infra': specifier: ^0.2.8 - version: 0.2.8(2ebf2f797a034b1c7af44c1119889faf) + version: 0.2.8(edc5640e000683c325b3677d7b6efbc6) '@tanstack/react-router': specifier: 1.168.24 version: 1.168.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5) @@ -432,10 +437,10 @@ importers: version: link:../github autumn-js: specifier: ^1.2.12 - version: 1.2.12(better-auth@1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.9)(@rspack/core@2.0.5(@swc/helpers@0.5.23))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(better-call@1.3.5(zod@4.3.6))(express@5.2.1)(hono@4.12.18)(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5) + version: 1.2.12(better-auth@1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.7)(@rspack/core@2.0.4(@swc/helpers@0.5.21))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(better-call@1.3.5(zod@4.3.6))(express@5.2.1)(hono@4.12.18)(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5) better-auth: specifier: ^1.5.3 - version: 1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.9)(@rspack/core@2.0.5(@swc/helpers@0.5.23))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) + version: 1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.7)(@rspack/core@2.0.4(@swc/helpers@0.5.21))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) drizzle-orm: specifier: ^0.45.1 version: 0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0) @@ -3989,8 +3994,8 @@ packages: cpu: [x64] os: [win32] - '@rsbuild/core@2.0.9': - resolution: {integrity: sha512-lK2bMNuwh3TuLXLskS7nG3fnQk+6eaLeeZiquJWcna4JZx9iaI59JSd+iLcg5TeZLjEVygkwn/HcE+yuYDQRAw==} + '@rsbuild/core@2.0.7': + resolution: {integrity: sha512-LsBONEzsjzOAqO72ot39eI7g53zSfF9QuDXTu4ks8IUX+EZsxRSniQfc+1zVA6a6y3b9KUUtG96avoMLKbWklQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -3999,64 +4004,64 @@ packages: core-js: optional: true - '@rspack/binding-darwin-arm64@2.0.5': - resolution: {integrity: sha512-++wjLQjQ20GcR0DwbzQmVXg9qy4XCX5NlfSzkzj2icHoDxr3KkrXhyVrQkdWuNG6l/bQrGLPnvLEAqkroC2Y7A==} + '@rspack/binding-darwin-arm64@2.0.4': + resolution: {integrity: sha512-0Q1QXFEsZfDc4opiDnb8q50KlBbC2VovViDaYlMJZBzvjAo325mh3itXPfz7YZ31M+TxRE7TUiJXH3ltiV1Hdg==} cpu: [arm64] os: [darwin] - '@rspack/binding-darwin-x64@2.0.5': - resolution: {integrity: sha512-JBD5mCN3JKjV64Mh9nDYx8lLUrWDfEl5tLBuMkREUnqEKbo+z4nfwotyqHHM8/XgZwL+Gr7ps4GLWuQQrZB8+Q==} + '@rspack/binding-darwin-x64@2.0.4': + resolution: {integrity: sha512-oO5J2QYf7+H+aYRj85EiGrDOoDEE9EDDl7NgXv46iWvIF0wXowEHXqnjMFxHxRq2Vf6scT+0yYQX9blWcvMWAA==} cpu: [x64] os: [darwin] - '@rspack/binding-linux-arm64-gnu@2.0.5': - resolution: {integrity: sha512-JI8+//woanJPNsfL7iGjX39zyiWumnrKHznWQM/7lEtE5nPmk+j+X7TYXxczSWC9zfZegiqI74D3L5JPDC84Fw==} + '@rspack/binding-linux-arm64-gnu@2.0.4': + resolution: {integrity: sha512-BEk6mIYBK4BihW9qXXITJORrVXecTlkRjrqhgefili4xjXtLdcUnxAm9sN/2oJ8m378n2h33qDh4gr2orPBFWQ==} cpu: [arm64] os: [linux] - '@rspack/binding-linux-arm64-musl@2.0.5': - resolution: {integrity: sha512-5LujilxLtJFRiiPz5i5iWcWJriK9oy4gN7gZtTo8YRB7wwmwA8LMypTjjO0GLbkPS4/KeCfY4fDfTC29KmK+tA==} + '@rspack/binding-linux-arm64-musl@2.0.4': + resolution: {integrity: sha512-Hyt3z1RwNcSMIoaoWLN4Hb/696/O5JPukf8rXQASvf2UkC+X3ij7tr+8lMSYi3Zysi1QL375CnT4fNoABEW0JA==} cpu: [arm64] os: [linux] - '@rspack/binding-linux-x64-gnu@2.0.5': - resolution: {integrity: sha512-241wqE132jh+/U/pn97qUPV4KpIy4bSrTH0tqfzQCocgw+8hrUj02GqNG+3MXVC3qtwaQeJFYgEBy3TqFKsrIQ==} + '@rspack/binding-linux-x64-gnu@2.0.4': + resolution: {integrity: sha512-xHorBPBZAg0Pn9Q0k9dWZ9euowieDxcSOzQ9JhTCmhDY6wZH5M/kCBFlCs/OQeW5/NUArW3x3MwEdO/0QJHMxg==} cpu: [x64] os: [linux] - '@rspack/binding-linux-x64-musl@2.0.5': - resolution: {integrity: sha512-BhaXZD064Lci3Kia0kLDAb4TyxO2C+0UidMlj44e8+ctasxIfFZgnrhCJrhTFHAtOiAwqhU3FHun2UuxPqX0Eg==} + '@rspack/binding-linux-x64-musl@2.0.4': + resolution: {integrity: sha512-QLxEGUXofF0kVNU12Y2NT3Qi9lGs+WbnYpapVeb+2IXtrAXJfU7Rhy7lAp5GLMzYMQNrKKL9SVnTWKbODbNW9Q==} cpu: [x64] os: [linux] - '@rspack/binding-wasm32-wasi@2.0.5': - resolution: {integrity: sha512-duEkRoXrl9SW8uGHv7JURJ5lgKu87qFDQ4Exy6UQPvsUJVXhtRXTfvMHCb/CejVJuW2Bw2D632/axZq3qRSuBQ==} + '@rspack/binding-wasm32-wasi@2.0.4': + resolution: {integrity: sha512-YhN8HkiH46ONU9tm5dyoXDImDWGpU7E4SPqGI4OyAVF0445uIChurIUmTIOYcD6cg81GGeIjozWJOcb635Dcqw==} cpu: [wasm32] - '@rspack/binding-win32-arm64-msvc@2.0.5': - resolution: {integrity: sha512-q2WT3HFoWL+2g84l3s2kY7CiE1gEZ1bwB3txx3eZzQQ6YKP7bE82z6sl6S/pTOHGjHdAO4snQXpSaHwUt3LX5g==} + '@rspack/binding-win32-arm64-msvc@2.0.4': + resolution: {integrity: sha512-MUlYIz82xQRN0aoiXXyEBrNVUwiOSSFRi7nuCgUKduaSdlbPWzCY31IdtOygZ06LVp5JIGUEtyqSrjQq4FrMRw==} cpu: [arm64] os: [win32] - '@rspack/binding-win32-ia32-msvc@2.0.5': - resolution: {integrity: sha512-nMJGIY7kvgbyMolEE7tXDe+Z9jSItDshTIqMQQkkD3WTHdjlBQozHxk4kBtKLsunO+3NkCLe5Oa3hXg1yyStIg==} + '@rspack/binding-win32-ia32-msvc@2.0.4': + resolution: {integrity: sha512-D7UcIFMzlY2yhhyuW4Ej15gBWmTwUM5DxuObl3Kv31qRv/pmV3MsqUeG5m2dqLbUxzqPH87qnp0cArbkJQ1b+w==} cpu: [ia32] os: [win32] - '@rspack/binding-win32-x64-msvc@2.0.5': - resolution: {integrity: sha512-vP0BR6fxdPL9cb02HAuZATg/CjR07aecWel3s1vqRwW1aDffgXh9PVmqEKIHTgyaNsNR55kSKNJsB9AcQ8/QrA==} + '@rspack/binding-win32-x64-msvc@2.0.4': + resolution: {integrity: sha512-MnYKPfdrAEbtpKg/1SZ6cNtzreIRyQJK4APbxLLPXENdTH5QXQkaTjLMKEeJcJ51FRhI/+yNpOUm2oTHdCQ1Og==} cpu: [x64] os: [win32] - '@rspack/binding@2.0.5': - resolution: {integrity: sha512-Ta1y4WXJA87wM1OstqaMddoPsBGv7Cu779bYToKxEAqR/Yy9DxLkp7bdgBaAx2JH++BwVjV+toWts2V9AaiTFQ==} + '@rspack/binding@2.0.4': + resolution: {integrity: sha512-/QeJDPUw/lWkBJESG264KA9u6/rAjvoJhKncU4rkTi5Ap45kue5HTgOzr0ufxKdd2Xl72fjFBuqlKmtFDD5LiQ==} - '@rspack/core@2.0.5': - resolution: {integrity: sha512-9tv2HAnSiTote5WPH2tmz1hLZ1zKbzkiZc1eYp7LP/8jcsiJBuf40ihiWidAgbbuYtJo3kWET6q+qOm5UhNiGA==} + '@rspack/core@2.0.4': + resolution: {integrity: sha512-OuxdQeeKWQpNvFBRDOcnoSaQvp6E4APM/6JJMM/k0p6oL1TEFQVGdNu3VGY4mRAsebnNBXapMVMhj+v66Bn2pg==} engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: '@module-federation/runtime-tools': ^0.24.1 || ^2.0.0 - '@swc/helpers': ^0.5.23 + '@swc/helpers': '>=0.5.1' peerDependenciesMeta: '@module-federation/runtime-tools': optional: true @@ -4135,8 +4140,8 @@ packages: '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} - '@swc/helpers@0.5.23': - resolution: {integrity: sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==} + '@swc/helpers@0.5.21': + resolution: {integrity: sha512-jI/VAmtdjB/RnI8GTnokyX7Ug8c+g+ffD6QRLa6XQewtnGyukKkKSk3wLTM3b5cjt1jNh9x0jfVlagdN2gDKQg==} '@t3-oss/env-core@0.13.11': resolution: {integrity: sha512-sM7GYY+KL7H/Hl0BE0inWfk3nRHZOLhmVn7sHGxaZt9FAR6KqREXAE+6TqKfiavfXmpRxO/OZ2QgKRd+oiBYRQ==} @@ -4290,6 +4295,9 @@ packages: '@tanstack/query-core@5.100.14': resolution: {integrity: sha512-5X41dGpxgeaHISCRW2oYwcSycZeULZzAunaudXT9ov1KOTj9xwt0CH6hbwqP1/z74ZWF7rYFnDpyYH07XFcZew==} + '@tanstack/query-core@5.101.0': + resolution: {integrity: sha512-cQetA74EB+seWySv1TTKr828TnP0u39m6LykwDXIo84SNortpDkp30TMEjkqtYCNP9c40uT/iwl6MLiufEt0Ow==} + '@tanstack/query-devtools@5.100.14': resolution: {integrity: sha512-g96SmSSQecYTYcyuAMRXr895GplJv01UGt7qttQWPOUyZ5EGz5tbRc589bMc2m5BsPFD6O0PCEAHdbDYNP6UBw==} @@ -4353,7 +4361,7 @@ packages: resolution: {integrity: sha512-rSEXRHAyP1iKTyzawdm2N44m1y9lP+f4K/BnTTGv2R9jPALmWXQZHWYw3mevjzGiXw2TTzQEZ0tJFuXc64MywQ==} engines: {node: '>=22.12.0'} peerDependencies: - '@rspack/core': '>=2.0.0-0' + '@rspack/core': 2.0.4 '@vitejs/plugin-rsc': '>=0.5.20' react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' @@ -4378,7 +4386,7 @@ packages: engines: {node: '>=22.12.0'} hasBin: true peerDependencies: - '@rsbuild/core': ^2.0.0 + '@rsbuild/core': 2.0.7 '@vitejs/plugin-rsc': '*' react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' @@ -4434,7 +4442,7 @@ packages: engines: {node: '>=20.19'} hasBin: true peerDependencies: - '@rsbuild/core': '>=1.0.2 || ^2.0.0' + '@rsbuild/core': 2.0.7 '@tanstack/react-router': ^1.168.24 vite: '>=5.0.0 || >=6.0.0 || >=7.0.0 || >=8.0.0' vite-plugin-solid: ^2.11.10 || ^3.0.0-0 @@ -4475,7 +4483,7 @@ packages: resolution: {integrity: sha512-gbPmbelQI7aLWxJn5M5XPoGvFKMf3rRU7J3RXNB9WO5lfrNVTEltKV6zBsW7HuJGxIspJRhsrA1c0AtjTsJAvw==} engines: {node: '>=22.12.0'} peerDependencies: - '@rsbuild/core': ^2.0.0 + '@rsbuild/core': 2.0.7 vite: '>=7.0.0' peerDependenciesMeta: '@rsbuild/core': @@ -9483,23 +9491,23 @@ snapshots: optionalDependencies: drizzle-orm: 0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0) - '@better-auth/infra@0.2.8(2ebf2f797a034b1c7af44c1119889faf)': + '@better-auth/infra@0.2.8(ca635e65c532e154708b0fa02055fd51)': dependencies: - '@better-auth/core': 1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.3.0) - '@better-auth/sso': 1.6.9(fb2c15fc6809bac617b7311047950fc2) + '@better-auth/core': 1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@5.9.6)(kysely@0.28.16)(nanostores@1.3.0) + '@better-auth/sso': 1.6.9(4dfaf1bd1561cb4fcf091731981e9a6a) '@better-fetch/fetch': 1.1.21 - better-auth: 1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.9)(@rspack/core@2.0.5(@swc/helpers@0.5.23))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) + better-auth: 1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.7)(@rspack/core@2.0.4(@swc/helpers@0.5.21))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) better-call: 1.3.5(zod@4.3.6) jose: 6.2.2 libphonenumber-js: 1.13.2 zod: 4.3.6 - '@better-auth/infra@0.2.8(b5a6bffde14e21b2f12962e5bb0de136)': + '@better-auth/infra@0.2.8(edc5640e000683c325b3677d7b6efbc6)': dependencies: - '@better-auth/core': 1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@5.9.6)(kysely@0.28.16)(nanostores@1.3.0) - '@better-auth/sso': 1.6.9(a2e8d8df655b27341a95b2c8983e4e7a) + '@better-auth/core': 1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.3.0) + '@better-auth/sso': 1.6.9(0b553cb428c1c612ba323abd85ddf3ac) '@better-fetch/fetch': 1.1.21 - better-auth: 1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.9)(@rspack/core@2.0.5(@swc/helpers@0.5.23))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) + better-auth: 1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.7)(@rspack/core@2.0.4(@swc/helpers@0.5.21))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) better-call: 1.3.5(zod@4.3.6) jose: 6.2.2 libphonenumber-js: 1.13.2 @@ -9549,12 +9557,12 @@ snapshots: '@better-auth/core': 1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.3.0) '@better-auth/utils': 0.4.0 - '@better-auth/sso@1.6.9(a2e8d8df655b27341a95b2c8983e4e7a)': + '@better-auth/sso@1.6.9(0b553cb428c1c612ba323abd85ddf3ac)': dependencies: - '@better-auth/core': 1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@5.9.6)(kysely@0.28.16)(nanostores@1.3.0) + '@better-auth/core': 1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.3.0) '@better-auth/utils': 0.4.0 '@better-fetch/fetch': 1.1.21 - better-auth: 1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.9)(@rspack/core@2.0.5(@swc/helpers@0.5.23))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) + better-auth: 1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.7)(@rspack/core@2.0.4(@swc/helpers@0.5.21))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) better-call: 1.3.5(zod@4.3.6) fast-xml-parser: 5.7.2 jose: 6.2.2 @@ -9562,12 +9570,12 @@ snapshots: tldts: 6.1.86 zod: 4.3.6 - '@better-auth/sso@1.6.9(fb2c15fc6809bac617b7311047950fc2)': + '@better-auth/sso@1.6.9(4dfaf1bd1561cb4fcf091731981e9a6a)': dependencies: - '@better-auth/core': 1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.3.0) + '@better-auth/core': 1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@5.9.6)(kysely@0.28.16)(nanostores@1.3.0) '@better-auth/utils': 0.4.0 '@better-fetch/fetch': 1.1.21 - better-auth: 1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.9)(@rspack/core@2.0.5(@swc/helpers@0.5.23))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) + better-auth: 1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.7)(@rspack/core@2.0.4(@swc/helpers@0.5.21))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) better-call: 1.3.5(zod@4.3.6) fast-xml-parser: 5.7.2 jose: 6.2.2 @@ -12320,65 +12328,65 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.60.2': optional: true - '@rsbuild/core@2.0.9': + '@rsbuild/core@2.0.7': dependencies: - '@rspack/core': 2.0.5(@swc/helpers@0.5.23) - '@swc/helpers': 0.5.23 + '@rspack/core': 2.0.4(@swc/helpers@0.5.21) + '@swc/helpers': 0.5.21 transitivePeerDependencies: - '@module-federation/runtime-tools' - '@rspack/binding-darwin-arm64@2.0.5': + '@rspack/binding-darwin-arm64@2.0.4': optional: true - '@rspack/binding-darwin-x64@2.0.5': + '@rspack/binding-darwin-x64@2.0.4': optional: true - '@rspack/binding-linux-arm64-gnu@2.0.5': + '@rspack/binding-linux-arm64-gnu@2.0.4': optional: true - '@rspack/binding-linux-arm64-musl@2.0.5': + '@rspack/binding-linux-arm64-musl@2.0.4': optional: true - '@rspack/binding-linux-x64-gnu@2.0.5': + '@rspack/binding-linux-x64-gnu@2.0.4': optional: true - '@rspack/binding-linux-x64-musl@2.0.5': + '@rspack/binding-linux-x64-musl@2.0.4': optional: true - '@rspack/binding-wasm32-wasi@2.0.5': + '@rspack/binding-wasm32-wasi@2.0.4': dependencies: '@emnapi/core': 1.10.0 '@emnapi/runtime': 1.10.0 '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true - '@rspack/binding-win32-arm64-msvc@2.0.5': + '@rspack/binding-win32-arm64-msvc@2.0.4': optional: true - '@rspack/binding-win32-ia32-msvc@2.0.5': + '@rspack/binding-win32-ia32-msvc@2.0.4': optional: true - '@rspack/binding-win32-x64-msvc@2.0.5': + '@rspack/binding-win32-x64-msvc@2.0.4': optional: true - '@rspack/binding@2.0.5': + '@rspack/binding@2.0.4': optionalDependencies: - '@rspack/binding-darwin-arm64': 2.0.5 - '@rspack/binding-darwin-x64': 2.0.5 - '@rspack/binding-linux-arm64-gnu': 2.0.5 - '@rspack/binding-linux-arm64-musl': 2.0.5 - '@rspack/binding-linux-x64-gnu': 2.0.5 - '@rspack/binding-linux-x64-musl': 2.0.5 - '@rspack/binding-wasm32-wasi': 2.0.5 - '@rspack/binding-win32-arm64-msvc': 2.0.5 - '@rspack/binding-win32-ia32-msvc': 2.0.5 - '@rspack/binding-win32-x64-msvc': 2.0.5 - - '@rspack/core@2.0.5(@swc/helpers@0.5.23)': - dependencies: - '@rspack/binding': 2.0.5 + '@rspack/binding-darwin-arm64': 2.0.4 + '@rspack/binding-darwin-x64': 2.0.4 + '@rspack/binding-linux-arm64-gnu': 2.0.4 + '@rspack/binding-linux-arm64-musl': 2.0.4 + '@rspack/binding-linux-x64-gnu': 2.0.4 + '@rspack/binding-linux-x64-musl': 2.0.4 + '@rspack/binding-wasm32-wasi': 2.0.4 + '@rspack/binding-win32-arm64-msvc': 2.0.4 + '@rspack/binding-win32-ia32-msvc': 2.0.4 + '@rspack/binding-win32-x64-msvc': 2.0.4 + + '@rspack/core@2.0.4(@swc/helpers@0.5.21)': + dependencies: + '@rspack/binding': 2.0.4 optionalDependencies: - '@swc/helpers': 0.5.23 + '@swc/helpers': 0.5.21 '@sec-ant/readable-stream@0.4.1': {} @@ -12464,7 +12472,7 @@ snapshots: dependencies: tslib: 2.8.1 - '@swc/helpers@0.5.23': + '@swc/helpers@0.5.21': dependencies: tslib: 2.8.1 @@ -12604,6 +12612,8 @@ snapshots: '@tanstack/query-core@5.100.14': {} + '@tanstack/query-core@5.101.0': {} + '@tanstack/query-devtools@5.100.14': {} '@tanstack/react-devtools@0.10.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(csstype@3.2.3)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)': @@ -12641,12 +12651,12 @@ snapshots: transitivePeerDependencies: - csstype - '@tanstack/react-router-ssr-query@1.166.12(@tanstack/query-core@5.100.14)(@tanstack/react-query@5.100.14(react@19.2.5))(@tanstack/react-router@1.168.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@tanstack/router-core@1.168.16)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@tanstack/react-router-ssr-query@1.166.12(@tanstack/query-core@5.101.0)(@tanstack/react-query@5.100.14(react@19.2.5))(@tanstack/react-router@1.168.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@tanstack/router-core@1.168.16)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: - '@tanstack/query-core': 5.100.14 + '@tanstack/query-core': 5.101.0 '@tanstack/react-query': 5.100.14(react@19.2.5) '@tanstack/react-router': 1.168.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@tanstack/router-ssr-query-core': 1.168.0(@tanstack/query-core@5.100.14)(@tanstack/router-core@1.168.16) + '@tanstack/router-ssr-query-core': 1.168.0(@tanstack/query-core@5.101.0)(@tanstack/router-core@1.168.16) react: 19.2.5 react-dom: 19.2.5(react@19.2.5) transitivePeerDependencies: @@ -12669,7 +12679,7 @@ snapshots: react: 19.2.5 react-dom: 19.2.5(react@19.2.5) - '@tanstack/react-start-rsc@0.0.28(@rsbuild/core@2.0.9)(@rspack/core@2.0.5(@swc/helpers@0.5.23))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0))': + '@tanstack/react-start-rsc@0.0.28(@rsbuild/core@2.0.7)(@rspack/core@2.0.4(@swc/helpers@0.5.21))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0))': dependencies: '@tanstack/react-router': 1.168.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@tanstack/react-start-server': 1.166.43(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5) @@ -12677,14 +12687,14 @@ snapshots: '@tanstack/router-utils': 1.161.7 '@tanstack/start-client-core': 1.167.19 '@tanstack/start-fn-stubs': 1.161.6 - '@tanstack/start-plugin-core': 1.169.5(@rsbuild/core@2.0.9)(@tanstack/react-router@1.168.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(crossws@0.4.5(srvx@0.11.15))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) + '@tanstack/start-plugin-core': 1.169.5(@rsbuild/core@2.0.7)(@tanstack/react-router@1.168.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(crossws@0.4.5(srvx@0.11.15))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) '@tanstack/start-server-core': 1.167.21(crossws@0.4.5(srvx@0.11.15)) '@tanstack/start-storage-context': 1.166.30 pathe: 2.0.3 react: 19.2.5 react-dom: 19.2.5(react@19.2.5) optionalDependencies: - '@rspack/core': 2.0.5(@swc/helpers@0.5.23) + '@rspack/core': 2.0.4(@swc/helpers@0.5.21) transitivePeerDependencies: - '@rsbuild/core' - crossws @@ -12705,21 +12715,21 @@ snapshots: transitivePeerDependencies: - crossws - '@tanstack/react-start@1.167.49(@rsbuild/core@2.0.9)(@rspack/core@2.0.5(@swc/helpers@0.5.23))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0))': + '@tanstack/react-start@1.167.49(@rsbuild/core@2.0.7)(@rspack/core@2.0.4(@swc/helpers@0.5.21))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0))': dependencies: '@tanstack/react-router': 1.168.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@tanstack/react-start-client': 1.166.42(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@tanstack/react-start-rsc': 0.0.28(@rsbuild/core@2.0.9)(@rspack/core@2.0.5(@swc/helpers@0.5.23))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) + '@tanstack/react-start-rsc': 0.0.28(@rsbuild/core@2.0.7)(@rspack/core@2.0.4(@swc/helpers@0.5.21))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) '@tanstack/react-start-server': 1.166.43(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@tanstack/router-utils': 1.161.7 '@tanstack/start-client-core': 1.167.19 - '@tanstack/start-plugin-core': 1.169.5(@rsbuild/core@2.0.9)(@tanstack/react-router@1.168.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(crossws@0.4.5(srvx@0.11.15))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) + '@tanstack/start-plugin-core': 1.169.5(@rsbuild/core@2.0.7)(@tanstack/react-router@1.168.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(crossws@0.4.5(srvx@0.11.15))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) '@tanstack/start-server-core': 1.167.21(crossws@0.4.5(srvx@0.11.15)) pathe: 2.0.3 react: 19.2.5 react-dom: 19.2.5(react@19.2.5) optionalDependencies: - '@rsbuild/core': 2.0.9 + '@rsbuild/core': 2.0.7 vite: 7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0) transitivePeerDependencies: - '@rspack/core' @@ -12777,7 +12787,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.167.27(@rsbuild/core@2.0.9)(@tanstack/react-router@1.168.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0))': + '@tanstack/router-plugin@1.167.27(@rsbuild/core@2.0.7)(@tanstack/react-router@1.168.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) @@ -12793,15 +12803,15 @@ snapshots: unplugin: 3.0.0 zod: 3.25.76 optionalDependencies: - '@rsbuild/core': 2.0.9 + '@rsbuild/core': 2.0.7 '@tanstack/react-router': 1.168.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5) vite: 7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0) transitivePeerDependencies: - supports-color - '@tanstack/router-ssr-query-core@1.168.0(@tanstack/query-core@5.100.14)(@tanstack/router-core@1.168.16)': + '@tanstack/router-ssr-query-core@1.168.0(@tanstack/query-core@5.101.0)(@tanstack/router-core@1.168.16)': dependencies: - '@tanstack/query-core': 5.100.14 + '@tanstack/query-core': 5.101.0 '@tanstack/router-core': 1.168.16 '@tanstack/router-utils@1.161.7': @@ -12827,7 +12837,7 @@ snapshots: '@tanstack/start-fn-stubs@1.161.6': {} - '@tanstack/start-plugin-core@1.169.5(@rsbuild/core@2.0.9)(@tanstack/react-router@1.168.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(crossws@0.4.5(srvx@0.11.15))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0))': + '@tanstack/start-plugin-core@1.169.5(@rsbuild/core@2.0.7)(@tanstack/react-router@1.168.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(crossws@0.4.5(srvx@0.11.15))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0))': dependencies: '@babel/code-frame': 7.27.1 '@babel/core': 7.29.0 @@ -12835,7 +12845,7 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.40 '@tanstack/router-core': 1.168.16 '@tanstack/router-generator': 1.166.35 - '@tanstack/router-plugin': 1.167.27(@rsbuild/core@2.0.9)(@tanstack/react-router@1.168.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) + '@tanstack/router-plugin': 1.167.27(@rsbuild/core@2.0.7)(@tanstack/react-router@1.168.24(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) '@tanstack/router-utils': 1.161.7 '@tanstack/start-client-core': 1.167.19 '@tanstack/start-server-core': 1.167.21(crossws@0.4.5(srvx@0.11.15)) @@ -12853,7 +12863,7 @@ snapshots: xmlbuilder2: 4.0.3 zod: 3.25.76 optionalDependencies: - '@rsbuild/core': 2.0.9 + '@rsbuild/core': 2.0.7 vite: 7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0) transitivePeerDependencies: - '@tanstack/react-router' @@ -13597,26 +13607,26 @@ snapshots: auto-bind@5.0.1: {} - autumn-js@1.2.12(a968eb16b13cb4e4c7f6dd9da175852c): + autumn-js@1.2.12(better-auth@1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.7)(@rspack/core@2.0.4(@swc/helpers@0.5.21))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(better-call@1.3.5(zod@4.3.6))(express@5.2.1)(hono@4.12.18)(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5): dependencies: query-string: 9.3.1 rou3: 0.6.3 zod: 4.3.6 optionalDependencies: - better-auth: 1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.9)(@rspack/core@2.0.5(@swc/helpers@0.5.23))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) + better-auth: 1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.7)(@rspack/core@2.0.4(@swc/helpers@0.5.21))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) better-call: 1.3.5(zod@4.3.6) express: 5.2.1 hono: 4.12.18 next: 16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) react: 19.2.5 - autumn-js@1.2.12(better-auth@1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.9)(@rspack/core@2.0.5(@swc/helpers@0.5.23))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(better-call@1.3.5(zod@4.3.6))(express@5.2.1)(hono@4.12.18)(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5): + autumn-js@1.2.12(c808154b541409adedb88d3b35bdb7c7): dependencies: query-string: 9.3.1 rou3: 0.6.3 zod: 4.3.6 optionalDependencies: - better-auth: 1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.9)(@rspack/core@2.0.5(@swc/helpers@0.5.23))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) + better-auth: 1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.7)(@rspack/core@2.0.4(@swc/helpers@0.5.21))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) better-call: 1.3.5(zod@4.3.6) express: 5.2.1 hono: 4.12.18 @@ -13662,7 +13672,7 @@ snapshots: baseline-browser-mapping@2.10.21: {} - better-auth@1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.9)(@rspack/core@2.0.5(@swc/helpers@0.5.23))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)): + better-auth@1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.7)(@rspack/core@2.0.4(@swc/helpers@0.5.21))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)): dependencies: '@better-auth/core': 1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.3.0) '@better-auth/drizzle-adapter': 1.6.9(@better-auth/core@1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@5.9.6)(kysely@0.28.16)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0)) @@ -13682,7 +13692,7 @@ snapshots: nanostores: 1.3.0 zod: 4.3.6 optionalDependencies: - '@tanstack/react-start': 1.167.49(@rsbuild/core@2.0.9)(@rspack/core@2.0.5(@swc/helpers@0.5.23))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) + '@tanstack/react-start': 1.167.49(@rsbuild/core@2.0.7)(@rspack/core@2.0.4(@swc/helpers@0.5.21))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) drizzle-kit: 0.31.10 drizzle-orm: 0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0) next: 16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) @@ -13695,7 +13705,7 @@ snapshots: - '@cloudflare/workers-types' - '@opentelemetry/api' - better-auth@1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.9)(@rspack/core@2.0.5(@swc/helpers@0.5.23))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)): + better-auth@1.6.9(@opentelemetry/api@1.9.1)(@tanstack/react-start@1.167.49(@rsbuild/core@2.0.7)(@rspack/core@2.0.4(@swc/helpers@0.5.21))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)))(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.4(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(solid-js@1.9.12)(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.2.0))(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)): dependencies: '@better-auth/core': 1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.3.0) '@better-auth/drizzle-adapter': 1.6.9(@better-auth/core@1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0)) @@ -13715,7 +13725,7 @@ snapshots: nanostores: 1.3.0 zod: 4.3.6 optionalDependencies: - '@tanstack/react-start': 1.167.49(@rsbuild/core@2.0.9)(@rspack/core@2.0.5(@swc/helpers@0.5.23))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) + '@tanstack/react-start': 1.167.49(@rsbuild/core@2.0.7)(@rspack/core@2.0.4(@swc/helpers@0.5.21))(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)) drizzle-kit: 0.31.10 drizzle-orm: 0.45.2(@electric-sql/pglite@0.4.6)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0) next: 16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)