diff --git a/.github/workflows/zta-lint.yml b/.github/workflows/zta-lint.yml index bab20de77..c431df3b1 100644 --- a/.github/workflows/zta-lint.yml +++ b/.github/workflows/zta-lint.yml @@ -1,122 +1,89 @@ -name: ZTA Lint +name: ZTA Security Lint on: - push: - branches: [main] - paths: - - 'worker/**' - - 'frontend/src/**' - - 'wrangler.toml' - - 'frontend/wrangler.toml' - pull_request: - branches: [main] - paths: - - 'worker/**' - - 'frontend/src/**' - - 'wrangler.toml' - - 'frontend/wrangler.toml' - workflow_dispatch: + pull_request: + paths: + - 'worker/**' + - 'src/**' + - 'frontend/**' + push: + branches: [main] -concurrency: - group: zta-lint-${{ github.ref }} - cancel-in-progress: true +permissions: + contents: read jobs: - zta-lint: - name: Zero Trust Architecture Lint - runs-on: ubuntu-latest - timeout-minutes: 5 - permissions: - contents: read - steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - - name: Check for wildcard CORS on write/auth endpoints - run: | - echo "=== Checking for wildcard CORS in worker code ===" - # Allowlisted files that legitimately use wildcard CORS for public endpoints - ALLOW_FILES="worker/utils/cors.ts" - - VIOLATIONS=0 - while IFS= read -r file; do - # Skip test files — they legitimately assert on wildcard CORS values - if echo "$file" | grep -qE '\.(test|spec)\.ts$'; then continue; fi - - # Skip the CORS utility itself (it contains the public endpoint wildcard) - skip=false - for af in $ALLOW_FILES; do - if [ "$file" = "$af" ]; then - skip=true - break - fi - done - if $skip; then continue; fi - - echo "❌ Wildcard CORS found in: $file" - grep -nE "Access-Control-Allow-Origin.{0,5}\\*" "$file" || true - VIOLATIONS=$((VIOLATIONS + 1)) - done < <(grep -rlE "Access-Control-Allow-Origin.{0,5}\\*" worker/ --include="*.ts" 2>/dev/null || true) - - if [ "$VIOLATIONS" -gt 0 ]; then - echo "" - echo "::error::Found $VIOLATIONS file(s) with wildcard CORS outside cors.ts. Use getCorsHeaders() or getPublicCorsHeaders() from worker/utils/cors.ts instead." - exit 1 - fi - echo "✅ No wildcard CORS violations found" - - - name: Check for unparameterized D1 queries - run: | - echo "=== Checking for unparameterized D1 queries ===" - # Check 1: .prepare() calls with template literal interpolation - # Static backtick strings like prepare(`SELECT ...`) are safe - # migrate.ts is excluded — it validates table names against a fixed allowlist - V1=$(grep -rn 'prepare(`' worker/ --include="*.ts" \ - | grep -v '\.test\.' | grep -v '\.spec\.' \ - | grep -v 'migrate\.ts' \ - | grep '\${' || true) - - # Check 2: string concatenation in .prepare() — e.g. prepare("SELECT " + var) - V2=$(grep -rn 'prepare(.*+' worker/ --include="*.ts" \ - | grep -v '\.test\.' | grep -v '\.spec\.' \ - | grep -v 'migrate\.ts' || true) - - VIOLATIONS="${V1}${V2}" - - if [ -n "$VIOLATIONS" ]; then - echo "$VIOLATIONS" - echo "::error::Found D1 queries with string interpolation or concatenation. Use .prepare('SELECT ...').bind(param) instead." - exit 1 - fi - echo "✅ No unparameterized D1 query violations found" - - - name: Check for secrets in wrangler.toml [vars] - run: | - echo "=== Checking for secrets in wrangler.toml [vars] ===" - # Known secret patterns that must NOT appear in [vars] - SECRET_PATTERNS="SECRET_KEY|ADMIN_KEY|JWT_SECRET|WEBHOOK_SECRET|API_SECRET|PRIVATE_KEY|CF_ACCESS_AUD" - - # Extract [vars] section from wrangler.toml - VARS_SECTION=$(sed -n '/^\[vars\]/,/^\[/p' wrangler.toml 2>/dev/null || true) - - if [ -n "$VARS_SECTION" ]; then - # Filter out comment lines before checking for secret patterns - VIOLATIONS=$(echo "$VARS_SECTION" | grep -v '^\s*#' | grep -iE "$SECRET_PATTERNS" || true) - if [ -n "$VIOLATIONS" ]; then - echo "$VIOLATIONS" - echo "::error::Found secret values in wrangler.toml [vars]. Use 'wrangler secret put' instead." - exit 1 - fi - fi - echo "✅ No secrets in wrangler.toml [vars]" - - - name: Check for localStorage auth token storage - run: | - echo "=== Checking for localStorage auth token usage in frontend ===" - VIOLATIONS=$(grep -rn 'localStorage.*token\|localStorage.*jwt\|localStorage.*session\|localStorage.*auth' frontend/src/ --include="*.ts" || true) - - if [ -n "$VIOLATIONS" ]; then - echo "$VIOLATIONS" - echo "::error::Found auth token storage in localStorage. Use Clerk SDK for auth state management." - exit 1 - fi - echo "✅ No localStorage auth token usage found" + zta-security-lint: + name: ZTA Security Lint + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - name: Checkout + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + + - name: Check for eval() usage + run: | + if grep -rn 'eval(' worker/ src/ --include='*.ts' --include='*.js' 2>/dev/null | grep -vE 'test|spec|\.d\.ts|// ' | grep -q '.'; then + echo "::error::Found eval() usage in worker/src. Eval is prohibited per ZTA security policy." + exit 1 + fi + echo "✅ No eval() usage found" + + - name: Check for dangerous innerHTML usage + run: | + if grep -rn 'innerHTML' worker/ frontend/src/ --include='*.ts' --include='*.html' 2>/dev/null | grep -vE 'test|spec|\.d\.ts|// |DomSanitizer|sanitize|bypassSecurity|\[innerHTML\]|matTooltip|tooltipText' | grep -q '.'; then + echo "::error::Found unsafe innerHTML assignment. Use Angular's DomSanitizer or template binding." + exit 1 + fi + echo "✅ No unsafe innerHTML usage found" + + - name: Check for hardcoded secrets patterns + run: | + PATTERN='(password|secret|api.key|token)\s*=\s*["\x27][^"\x27]{8,}["\x27]' + if grep -rniP "${PATTERN}" worker/ src/ --include='*.ts' --include='*.js' 2>/dev/null | grep -vE 'test|spec|\.d\.ts|// |example|placeholder|\$\{|process\.env|env\.' | grep -q '.'; then + echo "::error::Potential hardcoded secret found. Use environment variables." + exit 1 + fi + echo "✅ No hardcoded secrets patterns found" + + - name: Check for localStorage auth token storage + run: | + if grep -rEn 'localStorage\.setItem.*[Tt]oken|localStorage\.setItem.*[Aa]uth|localStorage\.setItem.*[Jj]wt' worker/ frontend/src/ --include='*.ts' 2>/dev/null | grep -vE 'test|spec|\.d\.ts|// ' | grep -q '.'; then + echo "::error::Found auth token storage in localStorage. Use Better Auth / BetterAuthService for auth state management." + exit 1 + fi + echo "✅ No localStorage auth token usage found" + + - name: Check for SQL injection patterns + run: | + if grep -rEn 'query\s*\+|query\s*=.*\+\s*[a-zA-Z]|`SELECT.*\$\{|`INSERT.*\$\{|`UPDATE.*\$\{|`DELETE.*\$\{' worker/ src/ --include='*.ts' 2>/dev/null | grep -vE 'test|spec|\.d\.ts|// |\.prepare\(|\.join\(|\.log\(' | grep -q '.'; then + echo "::error::Potential SQL injection pattern found. Use parameterized queries." + exit 1 + fi + echo "✅ No SQL injection patterns found" + + - name: Check for missing input validation on API routes + run: | + if grep -rEn 'request\.json\(\)|req\.body' worker/ --include='*.ts' 2>/dev/null | grep -vE 'test|spec|\.d\.ts|// |zod|\.parse\(|\.safeParse\(' | grep -q '.'; then + echo "::warning::Found API routes potentially missing Zod input validation. Ensure all request bodies are validated." + fi + echo "✅ Input validation check complete" + + - name: Check for CORS wildcard origins + run: | + if grep -rEn "'\*'|\"\*\"" worker/ src/ --include='*.ts' 2>/dev/null | grep -iE 'cors|origin|allow' | grep -vE 'test|spec|\.d\.ts|// ' | grep -q '.'; then + echo "::error::Found CORS wildcard origin. Use specific allowed origins." + exit 1 + fi + echo "✅ No CORS wildcard origins found" + + - name: Check for console.log with sensitive data patterns + run: | + if grep -rEn 'console\.log.*(password|token|secret|key)' worker/ src/ --include='*.ts' 2>/dev/null | grep -vE 'test|spec|\.d\.ts|// |api\.key|apiKey|keyHash|keyPrefix' | grep -q '.'; then + echo "::warning::Found potential sensitive data logging. Review console.log statements." + fi + echo "✅ Sensitive data logging check complete" + + - name: Lint summary + run: echo "✅ ZTA security lint passed" diff --git a/.trivyignore b/.trivyignore new file mode 100644 index 000000000..563dc8515 --- /dev/null +++ b/.trivyignore @@ -0,0 +1,34 @@ +# Trivy v0.69.3 misreads range-based pnpm override *keys* in pnpm-lock.yaml as +# installed package versions (e.g. "undici@>=7.0.0 <7.24.0" is treated as an +# installed "undici" at a vulnerable version, even though the resolved/installed +# version in the packages section is already patched). The entries below suppress +# the resulting false-positive findings. The five safe overrides (vite, hono, +# @hono/node-server, lodash, serialize-javascript) were converted to plain keys +# so their patched versions appear directly, but undici, picomatch, and +# path-to-regexp require range-scoped keys to avoid accidentally overriding +# incompatible major-version sibling installs. + +# picomatch — range keys: "picomatch@<2.3.2" and "picomatch@>=4.0.0 <4.0.4" +# Patched to: picomatch@2.3.2 and picomatch@4.0.4 respectively. +CVE-2026-33671 +CVE-2026-33672 + +# undici — range key: "undici@>=7.0.0 <7.24.0" +# Patched to: undici@7.24.4. The range key is necessary to avoid overriding +# @sentry/cli's undici@6.24.1 (incompatible major version). +CVE-2026-1525 +CVE-2026-1526 +CVE-2026-1527 +CVE-2026-1528 +CVE-2026-2229 +CVE-2026-2581 + +# path-to-regexp — range key: "path-to-regexp@<0.1.13" +# Patched to: path-to-regexp@0.1.13. The range key is necessary to avoid +# downgrading the co-installed 6.x and 8.x versions to 0.1.13. +CVE-2026-4867 + +# brace-expansion — range key: "brace-expansion@>=2.0.0 <2.0.3" +# Patched to: brace-expansion@2.0.3. The range key is necessary to avoid +# overriding the co-installed 5.x version used by minimatch@10 (API-incompatible). +CVE-2026-33750 diff --git a/admin-migrations/0001_admin_schema.sql b/admin-migrations/0001_admin_schema.sql index 07888137d..d14d16438 100644 --- a/admin-migrations/0001_admin_schema.sql +++ b/admin-migrations/0001_admin_schema.sql @@ -23,13 +23,15 @@ CREATE TABLE IF NOT EXISTS admin_roles ( CREATE INDEX idx_admin_roles_active ON admin_roles(is_active); -- --------------------------------------------------------------------------- --- 2. Admin Role Assignments — maps Clerk user IDs → admin roles +-- 2. Admin Role Assignments — maps user IDs → admin roles +-- NOTE: column `clerk_user_id` is renamed to `user_id` by migration 0003. +-- This file is preserved as-is so the migration chain runs correctly. -- --------------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS admin_role_assignments ( id INTEGER PRIMARY KEY AUTOINCREMENT, clerk_user_id TEXT NOT NULL UNIQUE, -- one role per user; new assignment replaces old role_name TEXT NOT NULL, - assigned_by TEXT NOT NULL, -- clerk_user_id of the assigner + assigned_by TEXT NOT NULL, -- user_id of the assigner assigned_at TEXT NOT NULL DEFAULT (datetime('now')), expires_at TEXT, -- NULL = never expires FOREIGN KEY (role_name) REFERENCES admin_roles(role_name) ON DELETE CASCADE @@ -44,7 +46,7 @@ CREATE INDEX idx_role_assignments_expiry ON admin_role_assignments(expires_at); -- --------------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS admin_audit_logs ( id INTEGER PRIMARY KEY AUTOINCREMENT, - actor_id TEXT NOT NULL, -- clerk_user_id of the admin + actor_id TEXT NOT NULL, -- user_id of the admin actor_email TEXT, -- denormalized for readability action TEXT NOT NULL, -- e.g. 'tier.update', 'flag.create', 'user.suspend' resource_type TEXT NOT NULL, -- e.g. 'tier_config', 'feature_flag', 'user' @@ -130,10 +132,10 @@ CREATE TABLE IF NOT EXISTS feature_flags ( rollout_percentage INTEGER NOT NULL DEFAULT 100, -- 0-100 -- JSON array of UserTier values that this flag applies to target_tiers TEXT NOT NULL DEFAULT '[]', - -- JSON array of clerk_user_ids for user-level targeting + -- JSON array of user IDs for user-level targeting target_users TEXT NOT NULL DEFAULT '[]', description TEXT NOT NULL DEFAULT '', - created_by TEXT, -- clerk_user_id + created_by TEXT, -- user_id created_at TEXT NOT NULL DEFAULT (datetime('now')), updated_at TEXT NOT NULL DEFAULT (datetime('now')) ); @@ -152,7 +154,7 @@ CREATE TABLE IF NOT EXISTS admin_announcements ( active_from TEXT, -- NULL = immediately active active_until TEXT, -- NULL = no expiry is_active INTEGER NOT NULL DEFAULT 1, - created_by TEXT, -- clerk_user_id + created_by TEXT, -- user_id created_at TEXT NOT NULL DEFAULT (datetime('now')), updated_at TEXT NOT NULL DEFAULT (datetime('now')) ); diff --git a/admin-migrations/0003_rename_clerk_user_id.sql b/admin-migrations/0003_rename_clerk_user_id.sql new file mode 100644 index 000000000..0118ce7ff --- /dev/null +++ b/admin-migrations/0003_rename_clerk_user_id.sql @@ -0,0 +1,9 @@ +-- Rename clerk_user_id to user_id in admin_role_assignments +ALTER TABLE admin_role_assignments RENAME COLUMN clerk_user_id TO user_id; +-- Update the unique index +DROP INDEX IF EXISTS idx_role_assignments_user; +CREATE UNIQUE INDEX IF NOT EXISTS idx_admin_role_assignments_user_id ON admin_role_assignments(user_id); +-- Partial index for active (non-expired) role assignments +CREATE INDEX IF NOT EXISTS idx_admin_role_assignments_active + ON admin_role_assignments(user_id) + WHERE expires_at IS NULL OR datetime(expires_at) > datetime('now'); diff --git a/docs/auth/auth-chain-reference.md b/docs/auth/auth-chain-reference.md index 7b66687df..77d12a028 100644 --- a/docs/auth/auth-chain-reference.md +++ b/docs/auth/auth-chain-reference.md @@ -1,8 +1,7 @@ # Auth Chain Reference -> **Runtime authentication flow** — How the four-tier auth chain works, -> the Better Auth ↔ Clerk fallback mechanism, feature flags, and migration -> timeline. +> **Runtime authentication flow** — How the three-tier auth chain works, +> feature flags, and the completed Clerk → Better Auth migration. --- @@ -13,17 +12,14 @@ - [Sequence Diagram](#sequence-diagram) - [Token Disambiguation](#token-disambiguation) - [Better Auth (Primary Provider)](#better-auth-primary-provider) -- [Clerk JWT (Deprecated Fallback)](#clerk-jwt-deprecated-fallback) -- [Feature Flags](#feature-flags) - [Auth Guards](#auth-guards) -- [Migration Timeline](#migration-timeline) - [When to Use Which Provider](#when-to-use-which-provider) --- ## Overview -Every request to the Cloudflare Worker is authenticated through a **four-tier chain** +Every request to the Cloudflare Worker is authenticated through a **three-tier chain** implemented in `worker/middleware/auth.ts`. The chain evaluates providers in strict priority order and short-circuits on the first successful match: @@ -31,8 +27,7 @@ priority order and short-circuits on the first successful match: |---|---|---|---| | 1 | **API Key** | `abc_...` prefix | Direct PostgreSQL lookup via Hyperdrive | | 2 | **Better Auth** | Cookie or bearer session ID | `BetterAuthProvider` (primary) | -| 3 | **Clerk JWT** | `header.payload.signature` | `ClerkAuthProvider` (deprecated fallback) | -| 4 | **Anonymous** | No credentials | Falls through to anonymous context | +| 3 | **Anonymous** | No credentials | Falls through to anonymous context | The chain **never throws** — all failures are communicated via the `response` field on `IAuthMiddlewareResult`. @@ -89,7 +84,6 @@ sequenceDiagram participant W as Worker (Hono) participant AM as authenticateRequestUnified() participant BA as BetterAuthProvider - participant CK as ClerkAuthProvider participant HD as Hyperdrive participant DB as Neon PostgreSQL @@ -119,26 +113,6 @@ sequenceDiagram AM->>AM: runTokenValidators() → { valid: true } AM-->>W: { context: { authMethod: "better-auth", tier: "free" } } W-->>C: 200 OK (user profile) - - Note over C,W: --- Legacy client, Clerk JWT --- - - C->>W: GET /api/sources (Bearer eyJ...) - W->>AM: authenticate(request, env) - AM->>AM: extractBearerToken() → "eyJ..." - AM->>AM: isApiKeyToken() → false - AM->>BA: verifyToken(request) - BA-->>AM: { valid: false } (not BA token) - AM->>AM: fallbackProvider exists? → yes - AM->>AM: isJwtToken("eyJ...") → true - AM->>CK: verifyToken(request) - CK->>CK: Verify JWT via JWKS - CK-->>AM: { valid: true, providerUserId: "user_clerk_abc" } - AM->>AM: ⚠️ console.warn("DEPRECATED Clerk fallback") - AM->>HD: query users WHERE clerk_user_id = $1 - HD->>DB: SQL query - DB-->>HD: row { id: "internal-uuid" } - AM-->>W: { context: { authMethod: "clerk-jwt" } } - W-->>C: 200 OK (sources) ``` --- @@ -154,18 +128,11 @@ The auth middleware determines the token type by pattern matching: function isApiKeyToken(token: string): boolean { return token.startsWith('abc_'); } - -/** JWTs have three dot-separated base64 segments */ -function isJwtToken(token: string): boolean { - const parts = token.split('.'); - return parts.length === 3 && parts.every((p) => p.length > 0); -} ``` | Token | Pattern | Route | |---|---|---| | `abc_sk_live_xxxx...` | Starts with `abc_` | → API Key path | -| `eyJhbGci.eyJzdWI.xxxxx` | Three dot-separated segments | → JWT path (Clerk fallback) | | `sess_abc123xyz` | Better Auth session token | → Better Auth (via cookie or bearer plugin) | | *(none)* | No Authorization header | → Better Auth (checks cookies) → Anonymous | @@ -220,90 +187,6 @@ takes effect immediately without waiting for token expiry. --- -## Clerk JWT (Deprecated Fallback) - -**Implementation:** `worker/middleware/clerk-auth-provider.ts` - -The Clerk fallback is **only attempted** when all of these conditions are true: - -1. The primary provider (Better Auth) returned `{ valid: false }` **without** an error -2. A `fallbackProvider` was supplied to `authenticateRequestUnified()` -3. The Bearer token looks like a JWT (three dot-separated segments) -4. `DISABLE_CLERK_FALLBACK` is not `"true"` - -When the fallback authenticates a request, a deprecation warning is logged: - -``` -[auth] Request authenticated via DEPRECATED Clerk fallback. -Migrate this client to Better Auth. Set DISABLE_CLERK_FALLBACK=true to remove this path. -``` - ---- - -## Feature Flags - -### `DISABLE_CLERK_FALLBACK` - -| Value | Behavior | -|---|---| -| `undefined` or `"false"` | Clerk JWT fallback is **enabled** (default during migration) | -| `"true"` | Clerk JWT fallback is **skipped** — only API Key → Better Auth → Anonymous | - -**Where it's checked:** - -```typescript -// worker/hono-app.ts -const clerkFallbackEnabled = - c.env.CLERK_JWKS_URL && c.env.DISABLE_CLERK_FALLBACK !== 'true'; - -const fallbackProvider = clerkFallbackEnabled - ? new ClerkAuthProvider(c.env) - : undefined; -``` - -**When to enable:** Set `DISABLE_CLERK_FALLBACK=true` when all clients have been migrated -to Better Auth. This removes an unnecessary network call and simplifies the auth chain. - -### `DISABLE_CLERK_WEBHOOKS` - -| Value | Behavior | -|---|---| -| `undefined` or `"false"` | `/api/webhooks/clerk` endpoint is **active** | -| `"true"` | Endpoint returns `410 Gone` with `{ error: "Clerk webhooks are disabled" }` | - -**Where it's checked:** - -```typescript -// worker/hono-app.ts -routes.post('/webhooks/clerk', (c) => { - if (c.env.DISABLE_CLERK_WEBHOOKS === 'true') { - return c.json({ error: 'Clerk webhooks are disabled' }, { status: 410 }); - } - return handleClerkWebhook(c.env); -}); -``` - -**When to enable:** Set `DISABLE_CLERK_WEBHOOKS=true` after removing the Clerk webhook -from the Clerk dashboard. The `410 Gone` response signals to any remaining callers that -the endpoint is permanently retired. - -### Setting Feature Flags - -```bash -# Local development (.dev.vars) -DISABLE_CLERK_FALLBACK=true -DISABLE_CLERK_WEBHOOKS=true - -# Production (Cloudflare dashboard or wrangler) -npx wrangler secret put DISABLE_CLERK_FALLBACK -# Enter: true - -npx wrangler secret put DISABLE_CLERK_WEBHOOKS -# Enter: true -``` - ---- - ## Auth Guards The auth middleware provides helper functions for route-level access control: @@ -329,7 +212,6 @@ if (scopeCheck) return scopeCheck; // 403 | Auth Method | Scope Check | |---|---| | `better-auth` | **Bypassed** — session-authenticated users own the account | -| `clerk-jwt` | **Bypassed** — same reasoning | | `api-key` | **Enforced** — scopes from the `api_keys.scopes` array | | `anonymous` | **Rejected** — anonymous users have no scopes | @@ -386,9 +268,8 @@ When this message stops appearing, it's safe to proceed to Phase 3. | Scenario | Provider | Why | |---|---|---| | **New API integration** | API Key (`abc_` prefix) | Scoped, revocable, rate-limited per key | -| **Browser app (new)** | Better Auth (cookie) | Server-side sessions, no JWTs in localStorage | +| **Browser app** | Better Auth (cookie) | Server-side sessions, no JWTs in localStorage | | **Programmatic API calls** | Better Auth (bearer plugin) | Session-based auth without cookies | -| **Legacy integration** | Clerk JWT (temporary) | Only for clients not yet migrated | | **Public/unauthenticated** | Anonymous | 10 req/min rate limit, basic features only | ### Recommendation @@ -418,8 +299,9 @@ fetch('/api/compile', { ## Further Reading -- [Auth Provider Selection](./auth-provider-selection.md) — Environment variable-based provider switching +- [Better Auth User Guide](./better-auth-user-guide.md) — End-user sign-up, sign-in, and account management +- [Better Auth Developer Guide](./better-auth-developer-guide.md) — Integration reference for backend and frontend - [Better Auth + Prisma](./better-auth-prisma.md) — Prisma adapter configuration -- [Migration Guide](./migration-clerk-to-better-auth.md) — Step-by-step Clerk → Better Auth migration - [API Authentication](./api-authentication.md) — API key creation and management +- [Clerk → Better Auth Migration Guide](./migration-clerk-to-better-auth.md) — Historical reference for the completed migration - [Developer Guide](./developer-guide.md) — Full auth integration tutorial diff --git a/docs/auth/migration-clerk-to-better-auth.md b/docs/auth/migration-clerk-to-better-auth.md index 035118ccf..f8c12e64b 100644 --- a/docs/auth/migration-clerk-to-better-auth.md +++ b/docs/auth/migration-clerk-to-better-auth.md @@ -1,187 +1,4 @@ # Clerk → Better Auth Migration Guide -> **✅ MIGRATION COMPLETE.** -> Better Auth is now the sole authentication provider. Clerk has been fully removed. -> This document is preserved as a historical record of the migration process. -> See [Better Auth User Guide](better-auth-user-guide.md) for current documentation. +> **📁 HISTORICAL ARCHIVE** — This migration has been completed. This document is retained for reference only. - - -> **Status:** ~~In Progress (Phase 3 — Better Auth primary, Clerk fallback)~~ **COMPLETE** -> -> **Last updated:** 2025-01-01 - ---- - -## Table of Contents - -- [Overview](#overview) -- [Auth Priority Chain](#auth-priority-chain) -- [Environment Variables](#environment-variables) -- [Migration Phases](#migration-phases) -- [API Key Compatibility](#api-key-compatibility) -- [Webhook Deprecation](#webhook-deprecation) -- [Rollback Procedure](#rollback-procedure) -- [Post-Migration Cleanup](#post-migration-cleanup) - ---- - -## Overview - -The application is migrating its identity provider from **Clerk** (JWT-based) -to **Better Auth** (cookie / bearer-plugin sessions backed by Postgres). The -migration is designed to be **zero-downtime** with a phased rollout: - -1. Both providers coexist during the migration window. -2. Better Auth is promoted to the **primary** provider. -3. Clerk is retained as a **deprecated fallback** that can be disabled via - environment variables. -4. Once all users and integrations have migrated, Clerk code is removed. - -```mermaid -flowchart TD - REQ["Incoming Request"] --> API_KEY{"Has abc_ prefixed
API key?"} - API_KEY -- Yes --> API_AUTH["API Key Auth
(Hyperdrive / Postgres)"] - API_KEY -- No --> BA{"Better Auth
session cookie or
bearer token?"} - BA -- Valid --> BA_OK["✅ Authenticated
(provider: better-auth)"] - BA -- No session --> CLERK_CHECK{"DISABLE_CLERK_FALLBACK
= true?"} - CLERK_CHECK -- Yes --> ANON["Anonymous context"] - CLERK_CHECK -- No --> CLERK{"Clerk JWT
present?"} - CLERK -- Valid --> CLERK_OK["⚠️ Authenticated
(provider: clerk-jwt)
DEPRECATED"] - CLERK -- Invalid / absent --> ANON - API_AUTH -- Valid --> API_OK["✅ Authenticated
(provider: api-key)"] - API_AUTH -- Invalid --> ERR["401 Unauthorized"] -``` - -The auth hierarchy is implemented in `authenticateRequestUnified()` — see -[`worker/middleware/auth.ts`](../../worker/middleware/auth.ts). - ---- - -## Environment Variables - -All migration-related env vars are optional strings. Set them to `"true"` to -enable the described behaviour. - -| Variable | Default | Purpose | -|---|---|---| -| `DISABLE_CLERK_FALLBACK` | _unset_ | Skip the Clerk JWT fallback in the auth chain. When `"true"`, requests without a valid Better Auth session fall through to anonymous. | -| `DISABLE_CLERK_WEBHOOKS` | _unset_ | Return **410 Gone** from `POST /api/webhooks/clerk` without processing the payload. Use once all user sync is handled by Better Auth. | -| `CLERK_JWKS_URL` | _unset_ | Required for Clerk JWT verification. Remove this secret entirely in the final cleanup phase to fully decommission Clerk auth. | -| `CLERK_WEBHOOK_SECRET` | _unset_ | Svix HMAC secret for Clerk webhook signature verification. Remove in the final cleanup phase. | - -These are defined in the `Env` interface at -[`worker/types.ts`](../../worker/types.ts). - ---- - -## Migration Phases - -### Phase 1 — Better Auth Integration (Complete ✅) - -- Better Auth provider implemented (`worker/middleware/better-auth-provider.ts`). -- `authenticateRequestUnified()` updated to accept a `fallbackProvider`. -- Clerk remains primary; Better Auth is tested alongside. - -### Phase 2 — Auth Priority Inversion (Complete ✅) - -- Better Auth promoted to **primary** provider. -- Clerk demoted to **fallback** (tried only when Better Auth finds no session). -- `DISABLE_CLERK_FALLBACK` env var added. -- Frontend updated to create Better Auth sessions on login. - -### Phase 3 — Better Auth Primary + Clerk Conditional (Current 🔄) - -- API key management routes accept both Better Auth and Clerk sessions - (`INTERACTIVE_AUTH_METHODS` in `hono-app.ts`). -- Clerk webhook handler (`POST /api/webhooks/clerk`) made conditional via - `DISABLE_CLERK_WEBHOOKS`. -- Clerk auth provider and webhook handler marked `@deprecated`. -- Migration documentation created (this file). - -### Phase 4 — Clerk Disabled (Planned) - -- Set `DISABLE_CLERK_FALLBACK=true` in production. -- Set `DISABLE_CLERK_WEBHOOKS=true` in production. -- Monitor for any auth failures attributed to `clerk-jwt` provider. -- Verify zero traffic on Clerk webhook endpoint. - -### Phase 5 — Clerk Removal (Planned) - -- Remove `ClerkAuthProvider` class and `clerk-auth-provider.ts`. -- Remove `handleClerkWebhook` and `clerk-webhook.ts`. -- Remove Clerk-related Zod schemas (`ClerkWebhookEventBaseSchema`, etc.). -- Remove Clerk env vars from `Env` interface and Wrangler config. -- Remove `clerk-jwt` from `INTERACTIVE_AUTH_METHODS`. -- Remove Svix dependency if no other consumers. -- Update this document to mark migration as complete. - ---- - -## API Key Compatibility - -API key CRUD endpoints (`/api/keys`) are **provider-agnostic**. They accept -any interactive session (Better Auth or Clerk) and store the resolved -`authContext.userId` in the `api_keys.user_id` column. - -| Auth provider | `user_id` format | Example | -|---|---|---| -| Better Auth | UUID (from `users.id`) | `550e8400-e29b-41d4-a716-446655440000` | -| Clerk | Clerk user ID string | `user_2xAbCdEfGhIjKl` | - -During the migration window both formats coexist in the same table. The -`user_id` column is treated as an **opaque string** — no foreign key -constraint ties it to a specific provider's user table. - -Once Clerk is fully retired only Better Auth UUIDs will be present. A -one-time data migration script may be provided to normalise legacy Clerk IDs -if needed. - -See [`worker/handlers/api-keys.ts`](../../worker/handlers/api-keys.ts) for -handler implementation details. - ---- - -## Webhook Deprecation - -The Clerk webhook endpoint (`POST /api/webhooks/clerk`) syncs user records -from Clerk to D1 via Svix-signed payloads. During the migration: - -1. **While active** — The handler continues to process `user.created`, - `user.updated`, and `user.deleted` events. -2. **Disable** — Set `DISABLE_CLERK_WEBHOOKS=true`. The route returns - `410 Gone` with a JSON body explaining the deprecation. -3. **Remove** — Delete the handler, route registration, Zod schemas, and - Svix dependency. - -See [`worker/handlers/clerk-webhook.ts`](../../worker/handlers/clerk-webhook.ts). - ---- - -## Rollback Procedure - -If issues arise after promoting Better Auth: - -1. **Unset** `DISABLE_CLERK_FALLBACK` — re-enables Clerk as a fallback. -2. **Unset** `DISABLE_CLERK_WEBHOOKS` — re-enables webhook user sync. -3. Verify Clerk JWKS URL and webhook secret are still configured. -4. No code revert is necessary — the dual-provider architecture handles both - providers at runtime. - ---- - -## Post-Migration Cleanup - -After Phase 5 is complete: - -- [ ] Remove all `@deprecated` annotations referencing Clerk. -- [ ] Remove `clerk-jwt` from `INTERACTIVE_AUTH_METHODS`. -- [ ] Remove Clerk env vars from `worker/types.ts` and `wrangler.toml`. -- [ ] Delete `worker/middleware/clerk-auth-provider.ts`. -- [ ] Delete `worker/handlers/clerk-webhook.ts`. -- [ ] Remove Clerk-related Zod schemas from `worker/schemas.ts`. -- [ ] Remove `svix` dependency (if unused elsewhere). -- [ ] Archive this migration document or mark as complete. -- [ ] Update `docs/auth/README.md` to reflect Better Auth as sole provider. diff --git a/frontend/package.json b/frontend/package.json index 28293891e..31dc183ad 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -39,15 +39,13 @@ "@angular/router": "^21.2.7", "@angular/service-worker": "^21.2.7", "@angular/ssr": "^21.2.5", - "@clerk/clerk-js": "^6.3.0", - "@clerk/shared": "^4.3.2", "@fontsource/ibm-plex-sans": "^5.2.8", "@fontsource/jetbrains-mono": "^5.2.8", "@fontsource/syne": "^5.2.7", "@sentry/angular": "^10.43.0", "@sentry/cloudflare": "^10.43.0", "@trpc/client": "^11.15.1", - "hono": "^4.12.8", + "hono": "^4.12.12", "material-symbols": "^0.40.2", "rxjs": "~7.8.2", "tslib": "^2.8.1", diff --git a/frontend/server.ts b/frontend/server.ts index d46944fd1..25c83a328 100644 --- a/frontend/server.ts +++ b/frontend/server.ts @@ -134,12 +134,12 @@ const handler = { const apiUrl = env.URL_API ?? 'https://api.bloqr.jaysonknight.com'; const csp = [ "default-src 'self'", - "script-src 'self' https://challenges.cloudflare.com https://static.cloudflareinsights.com https://*.clerk.accounts.dev", - "style-src 'self' 'unsafe-inline' https://*.clerk.accounts.dev", - "img-src 'self' data: https://img.clerk.com https://*.clerk.com", + "script-src 'self' https://challenges.cloudflare.com https://static.cloudflareinsights.com", + "style-src 'self' 'unsafe-inline'", + "img-src 'self' data:", "font-src 'self'", - `connect-src 'self' ${apiUrl} https://*.clerk.accounts.dev https://o*.ingest.sentry.io https://o*.ingest.us.sentry.io`, - "frame-src https://challenges.cloudflare.com https://*.clerk.accounts.dev", + `connect-src 'self' ${apiUrl} https://o*.ingest.sentry.io https://o*.ingest.us.sentry.io`, + "frame-src https://challenges.cloudflare.com", "object-src 'none'", "base-uri 'self'", ].join('; '); diff --git a/frontend/src/app/admin/roles/roles.component.spec.ts b/frontend/src/app/admin/roles/roles.component.spec.ts index 449a84c96..88f11cd28 100644 --- a/frontend/src/app/admin/roles/roles.component.spec.ts +++ b/frontend/src/app/admin/roles/roles.component.spec.ts @@ -30,12 +30,12 @@ function makeRole(overrides: Partial<{ } function makeAssignment(overrides: Partial<{ - id: number; clerk_user_id: string; role_name: string; + id: number; user_id: string; role_name: string; assigned_by: string; assigned_at: string; expires_at: string | null; }> = {}) { return { id: 10, - clerk_user_id: 'clerk-abc', + user_id: 'clerk-abc', role_name: 'editor', assigned_by: 'admin@example.com', assigned_at: '2024-01-02T00:00:00Z', @@ -384,7 +384,7 @@ describe('RolesComponent', () => { r.url.includes('/admin/roles/assignments') && r.method === 'POST', ); expect(req.request.body).toEqual({ - clerk_user_id: 'clerk-xyz', + user_id: 'clerk-xyz', role_name: 'editor', }); req.flush({ success: true }); @@ -423,7 +423,7 @@ describe('RolesComponent', () => { it('DELETEs the assignment and reloads assignments on success', () => { const role = makeRole({ role_name: 'editor' }); component.selectedRole.set(role); - const assignment = makeAssignment({ clerk_user_id: 'clerk-del' }); + const assignment = makeAssignment({ user_id: 'clerk-del' }); component.revokeAssignment(assignment); expect(component.saving()).toBe(true); @@ -443,7 +443,7 @@ describe('RolesComponent', () => { it('resets saving flag on error', () => { const role = makeRole({ role_name: 'editor' }); component.selectedRole.set(role); - const assignment = makeAssignment({ clerk_user_id: 'clerk-del' }); + const assignment = makeAssignment({ user_id: 'clerk-del' }); component.revokeAssignment(assignment); httpTesting diff --git a/frontend/src/app/admin/roles/roles.component.ts b/frontend/src/app/admin/roles/roles.component.ts index ee12f74bb..2f2d70b60 100644 --- a/frontend/src/app/admin/roles/roles.component.ts +++ b/frontend/src/app/admin/roles/roles.component.ts @@ -50,7 +50,7 @@ interface RoleListResponse { interface RoleAssignment { readonly id: number; - readonly clerk_user_id: string; + readonly user_id: string; readonly role_name: string; readonly assigned_by: string; readonly assigned_at: string; @@ -182,10 +182,10 @@ interface RoleFormData {

No users assigned to this role.

} @else { - + @@ -367,7 +367,7 @@ export class RolesComponent { readonly dialogMode = signal<'create' | 'edit' | null>(null); readonly showAssignDialog = signal(false); - readonly assignmentColumns = ['clerk_user_id', 'assigned_by', 'assigned_at', 'actions']; + readonly assignmentColumns = ['user_id', 'assigned_by', 'assigned_at', 'actions']; readonly allPermissions = [ 'admin:users:read', 'admin:users:write', @@ -498,7 +498,7 @@ export class RolesComponent { this.saving.set(true); this.http.post('/admin/roles/assignments', { - clerk_user_id: this.assignUserId.trim(), + user_id: this.assignUserId.trim(), role_name: role.role_name, }).pipe(takeUntilDestroyed(this.destroyRef)).subscribe({ next: () => { @@ -516,7 +516,7 @@ export class RolesComponent { revokeAssignment(assignment: RoleAssignment): void { this.saving.set(true); - this.http.delete(`/admin/roles/assignments/${assignment.clerk_user_id}`).pipe(takeUntilDestroyed(this.destroyRef)).subscribe({ + this.http.delete(`/admin/roles/assignments/${assignment.user_id}`).pipe(takeUntilDestroyed(this.destroyRef)).subscribe({ next: () => { this.snackBar.open('Assignment revoked', 'OK', { duration: 3000 }); this.saving.set(false); diff --git a/frontend/src/app/guards/auth.guard.ts b/frontend/src/app/guards/auth.guard.ts index 3ccc00313..10eee5548 100644 --- a/frontend/src/app/guards/auth.guard.ts +++ b/frontend/src/app/guards/auth.guard.ts @@ -2,11 +2,11 @@ * Functional route guard for authenticated routes. * * Provider-aware via AuthFacadeService: - * - Waits for the active auth provider to finish loading (Clerk or local JWT) + * Waits for the active auth provider to finish loading * - If signed in → allows navigation * - If not signed in → redirects to /sign-in with a returnUrl query param * - * SSR/prerender: Clerk is browser-only and never initialises on the server, + * SSR/prerender: auth is browser-only and never initialises on the server, * so waitForAuth() would stall for the full timeout. On a non-browser platform * we skip the polling entirely and return an immediate redirect so the client * router re-evaluates with real auth state after hydration. @@ -24,8 +24,8 @@ export const authGuard: CanActivateFn = async (_route, state) => { const auth = inject(AuthFacadeService); const router = inject(Router); - // On the server (SSR or build-time prerender), Clerk never initialises, - // so waiting for auth would stall for the full 10 s timeout. Return an + // On the server (SSR or build-time prerender), auth never initialises, + // so waiting would stall for the full 10 s timeout. Return an // immediate redirect; the client will re-evaluate the guard after hydration. if (!isPlatformBrowser(platformId)) { return router.createUrlTree(['/sign-in'], { diff --git a/frontend/src/app/interceptors/auth.interceptor.ts b/frontend/src/app/interceptors/auth.interceptor.ts index 63adafc1b..35eabdfe2 100644 --- a/frontend/src/app/interceptors/auth.interceptor.ts +++ b/frontend/src/app/interceptors/auth.interceptor.ts @@ -1,15 +1,13 @@ /** * Functional HTTP interceptor for Bearer token authentication. * - * Provider-aware via AuthFacadeService — works with both Better Auth (primary) - * and Clerk (deprecated legacy fallback). + * Provider-aware via AuthFacadeService. * * **Auth model:** * - Better Auth uses cookie-based session auth by default. The bearer() plugin * on the server *also* accepts `Authorization: Bearer ` headers. This * interceptor attaches the bearer token when available, giving the Worker two * ways to authenticate the request (cookie OR header). - * - Clerk uses JWT-based auth exclusively via `Authorization: Bearer `. * * Skips public/health endpoints and `/api/auth/` paths to avoid circular * validation calls during the auth flow. diff --git a/frontend/src/app/schemas/api-responses.ts b/frontend/src/app/schemas/api-responses.ts index be4d240d7..a664783c5 100644 --- a/frontend/src/app/schemas/api-responses.ts +++ b/frontend/src/app/schemas/api-responses.ts @@ -287,7 +287,7 @@ export type AdminRoleValidated = z.infer; /** Admin role assignment */ export const AdminRoleAssignmentSchema = z.object({ id: z.number(), - clerk_user_id: z.string(), + user_id: z.string(), role_name: z.string(), assigned_by: z.string(), assigned_at: z.string(), @@ -385,7 +385,7 @@ export type AdminAuditLogValidated = z.infer; /** Resolved admin context (current user's role + permissions) */ export const ResolvedAdminContextSchema = z.object({ - clerk_user_id: z.string(), + user_id: z.string(), role_name: z.string(), permissions: z.array(z.string()), expires_at: z.string().nullable(), diff --git a/frontend/src/app/tokens.ts b/frontend/src/app/tokens.ts index a080ecc40..56665950b 100644 --- a/frontend/src/app/tokens.ts +++ b/frontend/src/app/tokens.ts @@ -49,18 +49,3 @@ export const TURNSTILE_SITE_KEY = new InjectionToken('TURNSTILE_SITE_KEY providedIn: 'root', factory: () => '', }); - -/** - * @deprecated Clerk is a legacy auth provider. Better Auth is now primary and - * does not require a publishable key. This token will be removed when Clerk - * support is fully dropped. - * - * Clerk publishable key for frontend Clerk SDK initialization. - * Not a secret — safe to include in client-side bundles. - * In production, provide via `{ provide: CLERK_PUBLISHABLE_KEY, useValue: 'pk_live_...' }` - * in app.config.ts, or fetch from `/api/clerk-config` at runtime. - */ -export const CLERK_PUBLISHABLE_KEY = new InjectionToken('CLERK_PUBLISHABLE_KEY', { - providedIn: 'root', - factory: () => '', -}); diff --git a/frontend/src/assets/endpoint-registry.json b/frontend/src/assets/endpoint-registry.json index 5e166eb68..26d0cf06f 100644 --- a/frontend/src/assets/endpoint-registry.json +++ b/frontend/src/assets/endpoint-registry.json @@ -376,12 +376,12 @@ "method": "GET", "operationId": "userListApiKeys", "summary": "List user's API keys", - "description": "Lists all API keys belonging to the authenticated user. Returns metadata only — never the key hash or plaintext. Requires Clerk JWT authentication.", + "description": "Lists all API keys belonging to the authenticated user. Returns metadata only — never the key hash or plaintext. Requires Better Auth authentication.", "tags": [ "Authentication" ], "security": [ - "ClerkJWT" + "BetterAuth" ], "parameterCount": 0, "hasRequestBody": false @@ -391,12 +391,12 @@ "method": "POST", "operationId": "userCreateApiKey", "summary": "Create API key", - "description": "Creates a new API key for the authenticated user. The raw API key (with `abc_` prefix) is returned **only once** — store it securely. Requires Clerk JWT authentication.", + "description": "Creates a new API key for the authenticated user. The raw API key (with `abc_` prefix) is returned **only once** — store it securely. Requires Better Auth authentication.", "tags": [ "Authentication" ], "security": [ - "ClerkJWT" + "BetterAuth" ], "parameterCount": 0, "hasRequestBody": true @@ -411,7 +411,7 @@ "Authentication" ], "security": [ - "ClerkJWT" + "BetterAuth" ], "parameterCount": 1, "hasRequestBody": false @@ -421,12 +421,12 @@ "method": "PATCH", "operationId": "userUpdateApiKey", "summary": "Update API key", - "description": "Updates an API key's name or scopes. Only the key owner can update their own keys. Requires Clerk JWT authentication.", + "description": "Updates an API key's name or scopes. Only the key owner can update their own keys. Requires Better Auth authentication.", "tags": [ "Authentication" ], "security": [ - "ClerkJWT" + "BetterAuth" ], "parameterCount": 1, "hasRequestBody": true diff --git a/package.json b/package.json index 48114ce81..59c4eec70 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "@trpc/server": "^11.15.1", "better-auth": "^1.5.6", "cloudflare": "^5.2.0", - "hono": "^4.12.8", + "hono": "^4.12.12", "jose": "^6.2.1", "svix": "^1.89.0", "zod": "^4.3.6" @@ -49,7 +49,19 @@ }, "pnpm": { "overrides": { - "@opentelemetry/api": "^1.9.1" + "@opentelemetry/api": "^1.9.1", + "vite": "7.3.2", + "undici@>=7.0.0 <7.24.0": "7.24.4", + "picomatch@<2.3.2": "2.3.2", + "picomatch@>=4.0.0 <4.0.4": "4.0.4", + "path-to-regexp@<0.1.13": "0.1.13", + "brace-expansion@>=2.0.0 <2.0.3": "2.0.3", + "hono": "4.12.12", + "@hono/node-server": "1.19.13", + "lodash": "4.18.1", + "serialize-javascript": "7.0.5", + "defu": "6.1.5", + "effect": "3.20.0" } } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0d4125180..099153da5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,6 +6,18 @@ settings: overrides: '@opentelemetry/api': ^1.9.1 + vite: 7.3.2 + undici@>=7.0.0 <7.24.0: 7.24.4 + picomatch@<2.3.2: 2.3.2 + picomatch@>=4.0.0 <4.0.4: 4.0.4 + path-to-regexp@<0.1.13: 0.1.13 + brace-expansion@>=2.0.0 <2.0.3: 2.0.3 + hono: 4.12.12 + '@hono/node-server': 1.19.13 + lodash: 4.18.1 + serialize-javascript: 7.0.5 + defu: 6.1.5 + effect: 3.20.0 importers: @@ -16,10 +28,10 @@ importers: version: 4.0.4 '@hono/zod-openapi': specifier: ^1.2.2 - version: 1.2.2(hono@4.12.8)(zod@4.3.6) + version: 1.2.2(hono@4.12.12)(zod@4.3.6) '@hono/zod-validator': specifier: ^0.4.3 - version: 0.4.3(hono@4.12.8)(zod@4.3.6) + version: 0.4.3(hono@4.12.12)(zod@4.3.6) '@neondatabase/serverless': specifier: ^0.10.0 version: 0.10.4 @@ -46,13 +58,13 @@ importers: version: 11.15.1(typescript@6.0.2) better-auth: specifier: ^1.5.6 - version: 1.5.6(@cloudflare/workers-types@4.20260317.1)(@opentelemetry/api@1.9.1)(@prisma/client@7.5.0(prisma@7.5.0(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2))(typescript@6.0.2))(mongodb@7.1.0(socks@2.8.7))(mysql2@3.15.3)(pg@8.20.0)(prisma@7.5.0(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vitest@4.1.0(@opentelemetry/api@1.9.1)(@types/node@25.5.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3))) + version: 1.5.6(@cloudflare/workers-types@4.20260317.1)(@opentelemetry/api@1.9.1)(@prisma/client@7.5.0(prisma@7.5.0(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2))(typescript@6.0.2))(mongodb@7.1.0(socks@2.8.7))(mysql2@3.15.3)(pg@8.20.0)(prisma@7.5.0(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vitest@4.1.0(@opentelemetry/api@1.9.1)(@types/node@25.5.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@7.3.2(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3))) cloudflare: specifier: ^5.2.0 version: 5.2.0 hono: - specifier: ^4.12.8 - version: 4.12.8 + specifier: 4.12.12 + version: 4.12.12 jose: specifier: ^6.2.1 version: 6.2.1 @@ -74,7 +86,7 @@ importers: version: 0.0.5(@cfworker/json-schema@4.1.1)(@cloudflare/workers-types@4.20260317.1)(react@19.2.4)(zod@4.3.6) '@cloudflare/vitest-pool-workers': specifier: ^0.14.2 - version: 0.14.2(@cloudflare/workers-types@4.20260317.1)(@vitest/runner@4.1.0)(@vitest/snapshot@4.1.0)(bufferutil@4.1.0)(utf-8-validate@6.0.6)(vitest@4.1.0(@opentelemetry/api@1.9.1)(@types/node@25.5.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3))) + version: 0.14.2(@cloudflare/workers-types@4.20260317.1)(@vitest/runner@4.1.0)(@vitest/snapshot@4.1.0)(bufferutil@4.1.0)(utf-8-validate@6.0.6)(vitest@4.1.0(@opentelemetry/api@1.9.1)(@types/node@25.5.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@7.3.2(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3))) '@cloudflare/workers-types': specifier: ^4.20260317.1 version: 4.20260317.1 @@ -86,7 +98,7 @@ importers: version: 7.5.0(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) vitest: specifier: ^4.1.0 - version: 4.1.0(@opentelemetry/api@1.9.1)(@types/node@25.5.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)) + version: 4.1.0(@opentelemetry/api@1.9.1)(@types/node@25.5.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@7.3.2(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)) wrangler: specifier: ^4.81.1 version: 4.81.1(@cloudflare/workers-types@4.20260317.1)(bufferutil@4.1.0)(utf-8-validate@6.0.6) @@ -110,7 +122,7 @@ importers: dependencies: '@analogjs/vite-plugin-angular': specifier: ^2.3.1 - version: 2.3.1(@angular-devkit/build-angular@21.2.2(7be6a489bbb391d0a6ab02651015a939))(@angular/build@21.2.2(16a6bc83b7bda0d780370f903e1c8c0c)) + version: 2.3.1(@angular-devkit/build-angular@21.2.2(245143a37067391f22ce325c79ecab3d))(@angular/build@21.2.2(9c769108c8e053241f2b6d3d1c79d9f5)) '@angular/animations': specifier: ^21.2.7 version: 21.2.7(@angular/core@21.2.7(@angular/compiler@21.2.7)(rxjs@7.8.2)) @@ -150,12 +162,6 @@ importers: '@angular/ssr': specifier: ^21.2.5 version: 21.2.6(d050f5c40447e71fe5e64ade07d36b9f) - '@clerk/clerk-js': - specifier: ^6.3.0 - version: 6.3.0(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6))(@types/react@19.2.14)(bs58@5.0.0)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-dom@19.2.4(react@19.2.4))(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.6.0(react@19.2.4))(utf-8-validate@6.0.6)(zod@4.3.6) - '@clerk/shared': - specifier: ^4.3.2 - version: 4.3.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@fontsource/ibm-plex-sans': specifier: ^5.2.8 version: 5.2.8 @@ -175,8 +181,8 @@ importers: specifier: ^11.15.1 version: 11.15.1(@trpc/server@11.15.1(typescript@6.0.2))(typescript@6.0.2) hono: - specifier: ^4.12.8 - version: 4.12.8 + specifier: 4.12.12 + version: 4.12.12 material-symbols: specifier: ^0.40.2 version: 0.40.2 @@ -195,10 +201,10 @@ importers: devDependencies: '@analogjs/vitest-angular': specifier: ^2.3.1 - version: 2.3.1(@analogjs/vite-plugin-angular@2.3.1(@angular-devkit/build-angular@21.2.2(7be6a489bbb391d0a6ab02651015a939))(@angular/build@21.2.2(16a6bc83b7bda0d780370f903e1c8c0c)))(@angular-devkit/architect@0.2102.2(chokidar@5.0.0))(@angular-devkit/schematics@21.2.2(chokidar@5.0.0))(vitest@4.1.0(@opentelemetry/api@1.9.1)(@types/node@25.5.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3))) + version: 2.3.1(@analogjs/vite-plugin-angular@2.3.1(@angular-devkit/build-angular@21.2.2(245143a37067391f22ce325c79ecab3d))(@angular/build@21.2.2(9c769108c8e053241f2b6d3d1c79d9f5)))(@angular-devkit/architect@0.2102.2(chokidar@5.0.0))(@angular-devkit/schematics@21.2.2(chokidar@5.0.0))(vitest@4.1.0(@opentelemetry/api@1.9.1)(@types/node@25.5.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@7.3.2(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3))) '@angular-devkit/build-angular': specifier: ^21.2.2 - version: 21.2.2(7be6a489bbb391d0a6ab02651015a939) + version: 21.2.2(245143a37067391f22ce325c79ecab3d) '@angular-eslint/builder': specifier: ^21.3.0 version: 21.3.0(@angular/cli@21.2.2(@cfworker/json-schema@4.1.1)(@types/node@25.5.0)(chokidar@5.0.0))(chokidar@5.0.0)(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.2) @@ -225,7 +231,7 @@ importers: version: 4.2.1 '@vitest/coverage-v8': specifier: ^4.1.0 - version: 4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.1)(@types/node@25.5.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3))) + version: 4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.1)(@types/node@25.5.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@7.3.2(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3))) angular-eslint: specifier: ^21.3.0 version: 21.3.0(@angular/cli@21.2.2(@cfworker/json-schema@4.1.1)(@types/node@25.5.0)(chokidar@5.0.0))(chokidar@5.0.0)(eslint@10.0.3(jiti@2.6.1))(typescript-eslint@8.57.2(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.2))(typescript@6.0.2) @@ -249,7 +255,7 @@ importers: version: 8.57.2(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.2) vitest: specifier: ^4.1.0 - version: 4.1.0(@opentelemetry/api@1.9.1)(@types/node@25.5.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)) + version: 4.1.0(@opentelemetry/api@1.9.1)(@types/node@25.5.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@7.3.2(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)) packages: @@ -847,27 +853,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-async-generators@7.8.4': - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-bigint@7.8.3': - resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-class-properties@7.12.13': - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-class-static-block@7.14.5': - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-import-assertions@7.28.6': resolution: {integrity: sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==} engines: {node: '>=6.9.0'} @@ -880,58 +865,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-import-meta@7.10.4': - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-json-strings@7.8.3': - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-logical-assignment-operators@7.10.4': - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-numeric-separator@7.10.4': - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-object-rest-spread@7.8.3': - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-optional-catch-binding@7.8.3': - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-optional-chaining@7.8.3': - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-private-property-in-object@7.14.5': - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-top-level-await@7.14.5': - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-unicode-sets-regex@7.18.6': resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} @@ -1285,9 +1218,6 @@ packages: resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} engines: {node: '>=6.9.0'} - '@base-org/account@2.0.1': - resolution: {integrity: sha512-tySVNx+vd6XEynZL0uvB10uKiwnAfThr8AbKTwILVG86mPbLAhEOInQIk+uDnvpTvfdUhC1Bi5T/46JvFoLZQQ==} - '@bcoe/v8-coverage@1.0.2': resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} @@ -1386,22 +1316,6 @@ packages: '@chevrotain/utils@10.5.0': resolution: {integrity: sha512-hBzuU5+JjB2cqNZyszkDHZgOSrUUT8V3dhgRl8Q9Gp6dAj/H5+KILGjbhDpc3Iy9qmqlm/akuOI2ut9VUtzJxQ==} - '@clerk/clerk-js@6.3.0': - resolution: {integrity: sha512-TKEUCWHVSeTTXnjONr4Vw81nn5hljgXivNb3hgvFOyuMfVdnpPIjghLzcKYCjEmBBi5i4jDq/U5cadx9WSwrvg==} - engines: {node: '>=20.9.0'} - - '@clerk/shared@4.3.2': - resolution: {integrity: sha512-tYYzdY4Fxb02TO4RHoLRFzEjXJn0iFDfoKhWtGyqf2AaIgkprTksunQtX0hnVssHMr3XD/E2S00Vrb+PzX3jCQ==} - engines: {node: '>=20.9.0'} - peerDependencies: - react: ^18.0.0 || ~19.0.3 || ~19.1.4 || ~19.2.3 || ~19.3.0-0 - react-dom: ^18.0.0 || ~19.0.3 || ~19.1.4 || ~19.2.3 || ~19.3.0-0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - '@cloudflare/containers@0.1.1': resolution: {integrity: sha512-YTdobRTnTlUOUPMFemufH367A9Z8pDfZ+UboYMLbGpO0VlvEXZDiioSmXPQMHld2vRtkL31mcRii3bcbQU6fdw==} @@ -1498,9 +1412,6 @@ packages: '@cloudflare/workers-types@4.20260317.1': resolution: {integrity: sha512-+G4eVwyCpm8Au1ex8vQBCuA9wnwqetz4tPNRoB/53qvktERWBRMQnrtvC1k584yRE3emMThtuY0gWshvSJ++PQ==} - '@coinbase/wallet-sdk@4.3.0': - resolution: {integrity: sha512-T3+SNmiCw4HzDm4we9wCHCxlP0pqCiwKe4sOwPH3YAK2KSKjxPRydKu6UQJrdONFVLG7ujXvbd/6ZqmvJb8rkw==} - '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} @@ -1788,35 +1699,29 @@ packages: '@harperfast/extended-iterable@1.0.3': resolution: {integrity: sha512-sSAYhQca3rDWtQUHSAPeO7axFIUJOI6hn1gjRC5APVE1a90tuyT8f5WIgRsFhhWA7htNkju2veB9eWL6YHi/Lw==} - '@hono/node-server@1.19.11': - resolution: {integrity: sha512-dr8/3zEaB+p0D2n/IUrlPF1HZm586qgJNXK1a9fhg/PzdtkK7Ksd5l312tJX2yBuALqDYBlG20QEbayqPyxn+g==} - engines: {node: '>=18.14.1'} - peerDependencies: - hono: ^4 - - '@hono/node-server@1.19.9': - resolution: {integrity: sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==} + '@hono/node-server@1.19.13': + resolution: {integrity: sha512-TsQLe4i2gvoTtrHje625ngThGBySOgSK3Xo2XRYOdqGN1teR8+I7vchQC46uLJi8OF62YTYA3AhSpumtkhsaKQ==} engines: {node: '>=18.14.1'} peerDependencies: - hono: ^4 + hono: 4.12.12 '@hono/zod-openapi@1.2.2': resolution: {integrity: sha512-va6vsL23wCJ1d0Vd+vGL1XOt+wPwItxirYafuhlW9iC2MstYr2FvsI7mctb45eBTjZfkqB/3LYDJEppPjOEiHw==} engines: {node: '>=16.0.0'} peerDependencies: - hono: '>=4.3.6' + hono: 4.12.12 zod: ^4.0.0 '@hono/zod-validator@0.4.3': resolution: {integrity: sha512-xIgMYXDyJ4Hj6ekm9T9Y27s080Nl9NXHcJkOvkXPhubOLj8hZkOL8pDnnXfvCf5xEE8Q4oMFenQUZZREUY2gqQ==} peerDependencies: - hono: '>=3.9.0' + hono: 4.12.12 zod: ^3.19.1 '@hono/zod-validator@0.7.6': resolution: {integrity: sha512-Io1B6d011Gj1KknV4rXYz4le5+5EubcWEU/speUjuw9XMMIaP3n78yXLhjd2A3PXaXaUwEAluOiAyLqhBEJgsw==} peerDependencies: - hono: '>=3.9.0' + hono: 4.12.12 zod: ^3.25.0 || ^4.0.0 '@humanfs/core@0.19.1': @@ -2126,42 +2031,10 @@ packages: resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} engines: {node: '>=18.0.0'} - '@isaacs/ttlcache@1.4.1': - resolution: {integrity: sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==} - engines: {node: '>=12'} - - '@istanbuljs/load-nyc-config@1.1.0': - resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} - engines: {node: '>=8'} - '@istanbuljs/schema@0.1.3': resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} - '@jest/create-cache-key-function@29.7.0': - resolution: {integrity: sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/environment@29.7.0': - resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/fake-timers@29.7.0': - resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/schemas@29.6.3': - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/transform@29.7.0': - resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/types@29.6.3': - resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -2822,67 +2695,6 @@ packages: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@react-native-async-storage/async-storage@1.24.0': - resolution: {integrity: sha512-W4/vbwUOYOjco0x3toB8QCr7EjIP6nE9G7o8PMguvvjYT5Awg09lyV4enACRx4s++PPulBiBSjL0KTFx2u0Z/g==} - peerDependencies: - react-native: ^0.0.0-0 || >=0.60 <1.0 - - '@react-native/assets-registry@0.84.1': - resolution: {integrity: sha512-lAJ6PDZv95FdT9s9uhc9ivhikW1Zwh4j9XdXM7J2l4oUA3t37qfoBmTSDLuPyE3Bi+Xtwa11hJm0BUTT2sc/gg==} - engines: {node: '>= 20.19.4'} - - '@react-native/codegen@0.84.1': - resolution: {integrity: sha512-n1RIU0QAavgCg1uC5+s53arL7/mpM+16IBhJ3nCFSd/iK5tUmCwxQDcIDC703fuXfpub/ZygeSjVN8bcOWn0gA==} - engines: {node: '>= 20.19.4'} - peerDependencies: - '@babel/core': '*' - - '@react-native/community-cli-plugin@0.84.1': - resolution: {integrity: sha512-f6a+mJEJ6Joxlt/050TqYUr7uRRbeKnz8lnpL7JajhpsgZLEbkJRjH8HY5QiLcRdUwWFtizml4V+vcO3P4RxoQ==} - engines: {node: '>= 20.19.4'} - peerDependencies: - '@react-native-community/cli': '*' - '@react-native/metro-config': '*' - peerDependenciesMeta: - '@react-native-community/cli': - optional: true - '@react-native/metro-config': - optional: true - - '@react-native/debugger-frontend@0.84.1': - resolution: {integrity: sha512-rUU/Pyh3R5zT0WkVgB+yA6VwOp7HM5Hz4NYE97ajFS07OUIcv8JzBL3MXVdSSjLfldfqOuPEuKUaZcAOwPgabw==} - engines: {node: '>= 20.19.4'} - - '@react-native/debugger-shell@0.84.1': - resolution: {integrity: sha512-LIGhh4q4ette3yW5OzmukNMYwmINYrRGDZqKyTYc/VZyNpblZPw72coXVHXdfpPT6+YlxHqXzn3UjFZpNODGCQ==} - engines: {node: '>= 20.19.4'} - - '@react-native/dev-middleware@0.84.1': - resolution: {integrity: sha512-Z83ra+Gk6ElAhH3XRrv3vwbwCPTb04sPPlNpotxcFZb5LtRQZwT91ZQEXw3GOJCVIFp9EQ/gj8AQbVvtHKOUlQ==} - engines: {node: '>= 20.19.4'} - - '@react-native/gradle-plugin@0.84.1': - resolution: {integrity: sha512-7uVlPBE3uluRNRX4MW7PUJIO1LDBTpAqStKHU7LHH+GRrdZbHsWtOEAX8PiY4GFfBEvG8hEjiuTOqAxMjV+hDg==} - engines: {node: '>= 20.19.4'} - - '@react-native/js-polyfills@0.84.1': - resolution: {integrity: sha512-UsTe2AbUugsfyI7XIHMQq4E7xeC8a6GrYwuK+NohMMMJMxmyM3JkzIk+GB9e2il6ScEQNMJNaj+q+i5za8itxQ==} - engines: {node: '>= 20.19.4'} - - '@react-native/normalize-colors@0.84.1': - resolution: {integrity: sha512-/UPaQ4jl95soXnLDEJ6Cs6lnRXhwbxtT4KbZz+AFDees7prMV2NOLcHfCnzmTabf5Y3oxENMVBL666n4GMLcTA==} - - '@react-native/virtualized-lists@0.84.1': - resolution: {integrity: sha512-sJoDunzhci8ZsqxlUiKoLut4xQeQcmbIgvDHGQKeBz6uEq9HgU+hCWOijMRr6sLP0slQVfBAza34Rq7IbXZZOA==} - engines: {node: '>= 20.19.4'} - peerDependencies: - '@types/react': ^19.2.0 - react: '*' - react-native: '*' - peerDependenciesMeta: - '@types/react': - optional: true - '@rolldown/binding-android-arm64@1.0.0-rc.4': resolution: {integrity: sha512-vRq9f4NzvbdZavhQbjkJBx7rRebDKYR9zHfO/Wg486+I7bSecdUapzCm5cyXoK+LHokTxgSq7A5baAXUZkIz0w==} engines: {node: ^20.19.0 || >=22.12.0} @@ -3236,140 +3048,10 @@ packages: resolution: {integrity: sha512-mNe0Iigql08YupSOGv197YdHpPPr+EzDZmfCgMc7RPNaZTw5aLN01nBl6CHJOh3BGtnMIj83EeN4butBchc8Ag==} engines: {node: ^20.17.0 || >=22.9.0} - '@sinclair/typebox@0.27.10': - resolution: {integrity: sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==} - '@sindresorhus/is@7.2.0': resolution: {integrity: sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==} engines: {node: '>=18'} - '@sinonjs/commons@3.0.1': - resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} - - '@sinonjs/fake-timers@10.3.0': - resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} - - '@solana-mobile/mobile-wallet-adapter-protocol-web3js@2.2.5': - resolution: {integrity: sha512-xfQl6Kee0ZXagUG5mpy+bMhQTNf2LAzF65m5SSgNJp47y/nP9GdXWi9blVH8IPP+QjF/+DnCtURaXS14bk3WJw==} - peerDependencies: - '@solana/web3.js': ^1.58.0 - - '@solana-mobile/mobile-wallet-adapter-protocol@2.2.5': - resolution: {integrity: sha512-kCI+0/umWm98M9g12ndpS56U6wBzq4XdhobCkDPF8qRDYX/iTU8CD+QMcalh7VgRT7GWEmySQvQdaugM0Chf0g==} - peerDependencies: - react-native: '>0.69' - - '@solana-mobile/wallet-adapter-mobile@2.2.5': - resolution: {integrity: sha512-Zpzfwm3N4FfI63ZMs2qZChQ1j0z+p2prkZbSU51NyTnE+K9l9sDAl8RmRCOWnE29y+/AN10WuQZQoIAccHVOFg==} - peerDependencies: - '@solana/web3.js': ^1.58.0 - - '@solana-mobile/wallet-standard-mobile@0.4.4': - resolution: {integrity: sha512-LMvqkS5/aEH+EiDje9Dk351go6wO3POysgmobM4qm8RsG5s6rDAW3U0zA+5f2coGCTyRx8BKE1I/9nHlwtBuow==} - - '@solana/buffer-layout@4.0.1': - resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} - engines: {node: '>=5.10'} - - '@solana/codecs-core@2.3.0': - resolution: {integrity: sha512-oG+VZzN6YhBHIoSKgS5ESM9VIGzhWjEHEGNPSibiDTxFhsFWxNaz8LbMDPjBUE69r9wmdGLkrQ+wVPbnJcZPvw==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - - '@solana/codecs-core@4.0.0': - resolution: {integrity: sha512-28kNUsyIlhU3MO3/7ZLDqeJf2YAm32B4tnTjl5A9HrbBqsTZ+upT/RzxZGP1MMm7jnPuIKCMwmTpsyqyR6IUpw==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - - '@solana/codecs-numbers@2.3.0': - resolution: {integrity: sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - - '@solana/codecs-numbers@4.0.0': - resolution: {integrity: sha512-z9zpjtcwzqT9rbkKVZpkWB5/0V7+6YRKs6BccHkGJlaDx8Pe/+XOvPi2rEdXPqrPd9QWb5Xp1iBfcgaDMyiOiA==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - - '@solana/codecs-strings@4.0.0': - resolution: {integrity: sha512-XvyD+sQ1zyA0amfxbpoFZsucLoe+yASQtDiLUGMDg5TZ82IHE3B7n82jE8d8cTAqi0HgqQiwU13snPhvg1O0Ow==} - engines: {node: '>=20.18.0'} - peerDependencies: - fastestsmallesttextencoderdecoder: ^1.0.22 - typescript: '>=5.3.3' - - '@solana/errors@2.3.0': - resolution: {integrity: sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ==} - engines: {node: '>=20.18.0'} - hasBin: true - peerDependencies: - typescript: '>=5.3.3' - - '@solana/errors@4.0.0': - resolution: {integrity: sha512-3YEtvcMvtcnTl4HahqLt0VnaGVf7vVWOnt6/uPky5e0qV6BlxDSbGkbBzttNjxLXHognV0AQi3pjvrtfUnZmbg==} - engines: {node: '>=20.18.0'} - hasBin: true - peerDependencies: - typescript: '>=5.3.3' - - '@solana/wallet-adapter-base@0.9.27': - resolution: {integrity: sha512-kXjeNfNFVs/NE9GPmysBRKQ/nf+foSaq3kfVSeMcO/iVgigyRmB551OjU3WyAolLG/1jeEfKLqF9fKwMCRkUqg==} - engines: {node: '>=20'} - peerDependencies: - '@solana/web3.js': ^1.98.0 - - '@solana/wallet-adapter-react@0.15.39': - resolution: {integrity: sha512-WXtlo88ith5m22qB+qiGw301/Zb9r5pYr4QdXWmlXnRNqwST5MGmJWhG+/RVrzc+OG7kSb3z1gkVNv+2X/Y0Gg==} - engines: {node: '>=20'} - peerDependencies: - '@solana/web3.js': ^1.98.0 - react: '*' - - '@solana/wallet-standard-chains@1.1.1': - resolution: {integrity: sha512-Us3TgL4eMVoVWhuC4UrePlYnpWN+lwteCBlhZDUhFZBJ5UMGh94mYPXno3Ho7+iHPYRtuCi/ePvPcYBqCGuBOw==} - engines: {node: '>=16'} - - '@solana/wallet-standard-core@1.1.2': - resolution: {integrity: sha512-FaSmnVsIHkHhYlH8XX0Y4TYS+ebM+scW7ZeDkdXo3GiKge61Z34MfBPinZSUMV08hCtzxxqH2ydeU9+q/KDrLA==} - engines: {node: '>=16'} - - '@solana/wallet-standard-features@1.3.0': - resolution: {integrity: sha512-ZhpZtD+4VArf6RPitsVExvgkF+nGghd1rzPjd97GmBximpnt1rsUxMOEyoIEuH3XBxPyNB6Us7ha7RHWQR+abg==} - engines: {node: '>=16'} - - '@solana/wallet-standard-util@1.1.2': - resolution: {integrity: sha512-rUXFNP4OY81Ddq7qOjQV4Kmkozx4wjYAxljvyrqPx8Ycz0FYChG/hQVWqvgpK3sPsEaO/7ABG1NOACsyAKWNOA==} - engines: {node: '>=16'} - - '@solana/wallet-standard-wallet-adapter-base@1.1.4': - resolution: {integrity: sha512-Q2Rie9YaidyFA4UxcUIxUsvynW+/gE2noj/Wmk+IOwDwlVrJUAXCvFaCNsPDSyKoiYEKxkSnlG13OA1v08G4iw==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.98.0 - bs58: ^6.0.0 - - '@solana/wallet-standard-wallet-adapter-react@1.1.4': - resolution: {integrity: sha512-xa4KVmPgB7bTiWo4U7lg0N6dVUtt2I2WhEnKlIv0jdihNvtyhOjCKMjucWet6KAVhir6I/mSWrJk1U9SvVvhCg==} - engines: {node: '>=16'} - peerDependencies: - '@solana/wallet-adapter-base': '*' - react: '*' - - '@solana/wallet-standard-wallet-adapter@1.1.4': - resolution: {integrity: sha512-YSBrxwov4irg2hx9gcmM4VTew3ofNnkqsXQ42JwcS6ykF1P1ecVY8JCbrv75Nwe6UodnqeoZRbN7n/p3awtjNQ==} - engines: {node: '>=16'} - - '@solana/wallet-standard@1.1.4': - resolution: {integrity: sha512-NF+MI5tOxyvfTU4A+O5idh/gJFmjm52bMwsPpFGRSL79GECSN0XLmpVOO/jqTKJgac2uIeYDpQw/eMaQuWuUXw==} - engines: {node: '>=16'} - - '@solana/web3.js@1.98.4': - resolution: {integrity: sha512-vv9lfnvjUsRiq//+j5pBdXig0IQdtzA0BRZ3bXEP4KaIyF1CcaydWqgyzQgfZMNIsWNWmG+AUHwPy4AHOD6gpw==} - '@speed-highlight/core@1.2.14': resolution: {integrity: sha512-G4ewlBNhUtlLvrJTb88d2mdy2KRijzs4UhnlrOSRT4bmjh/IqNElZa3zkrZ+TC47TwtlDWzVLFADljF1Ijp5hA==} @@ -3379,16 +3061,6 @@ packages: '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - '@stripe/stripe-js@5.6.0': - resolution: {integrity: sha512-w8CEY73X/7tw2KKlL3iOk679V9bWseE4GzNz3zlaYxcTjmcmWOathRb0emgo/QQ3eoNzmq68+2Y2gxluAv3xGw==} - engines: {node: '>=12.16'} - - '@swc/helpers@0.5.17': - resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} - - '@swc/helpers@0.5.20': - resolution: {integrity: sha512-2egEBHUMasdypIzrprsu8g+OEVd7Vp2MM3a2eVlM/cyFYto0nGz5BX5BTgh/ShZZI9ed+ozEq+Ngt+rgmUs8tw==} - '@tailwindcss/node@4.2.1': resolution: {integrity: sha512-jlx6sLk4EOwO6hHe1oCGm1Q4AN/s0rSrTTPBGPM0/RQ6Uylwq17FuU8IeJJKEjtc6K6O07zsvP+gDO6MMWo7pg==} @@ -3481,9 +3153,6 @@ packages: '@tailwindcss/postcss@4.2.1': resolution: {integrity: sha512-OEwGIBnXnj7zJeonOh6ZG9woofIjGrd2BORfvE5p9USYKDCZoQmfqLcfNiRWoJlRWLdNPn2IgVZuWAOM4iTYMw==} - '@tanstack/query-core@5.90.16': - resolution: {integrity: sha512-MvtWckSVufs/ja463/K4PyJeqT+HMlJWtw6PrCpywznd2NSgO3m4KwO9RqbFqGg6iDE8vVMFWMeQI4Io3eEYww==} - '@trpc/client@11.15.1': resolution: {integrity: sha512-Zav9uPSEM7zBlEbttKep1kCfxHumB7P/e/zVFspzfyeB6XYGVeILFeZVL6cnODkgUIFSzgO9X4fXRnn0BP/BhQ==} hasBin: true @@ -3511,18 +3180,6 @@ packages: '@tybys/wasm-util@0.10.1': resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} - '@types/babel__core@7.20.5': - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} - - '@types/babel__generator@7.27.0': - resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} - - '@types/babel__template@7.4.4': - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - - '@types/babel__traverse@7.28.0': - resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} - '@types/body-parser@1.19.6': resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==} @@ -3562,24 +3219,12 @@ packages: '@types/express@4.17.25': resolution: {integrity: sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==} - '@types/graceful-fs@4.1.9': - resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} - '@types/http-errors@2.0.5': resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==} '@types/http-proxy@1.17.17': resolution: {integrity: sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw==} - '@types/istanbul-lib-coverage@2.0.6': - resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} - - '@types/istanbul-lib-report@3.0.3': - resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} - - '@types/istanbul-reports@3.0.4': - resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} - '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -3592,9 +3237,6 @@ packages: '@types/node-fetch@2.6.13': resolution: {integrity: sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw==} - '@types/node@12.20.55': - resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - '@types/node@18.19.130': resolution: {integrity: sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==} @@ -3634,30 +3276,15 @@ packages: '@types/sockjs@0.3.36': resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} - '@types/stack-utils@2.0.3': - resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} - - '@types/uuid@10.0.0': - resolution: {integrity: sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==} - '@types/webidl-conversions@7.0.3': resolution: {integrity: sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==} '@types/whatwg-url@13.0.0': resolution: {integrity: sha512-N8WXpbE6Wgri7KUSvrmQcqrMllKZ9uxkYWMt+mCSGwNc0Hsw9VQTW7ApqI4XNrx6/SaM2QQJCzMPDEXE058s+Q==} - '@types/ws@7.4.7': - resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} - '@types/ws@8.18.1': resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} - '@types/yargs-parser@21.0.3': - resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - - '@types/yargs@17.0.35': - resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==} - '@typescript-eslint/eslint-plugin@8.57.2': resolution: {integrity: sha512-NZZgp0Fm2IkD+La5PR81sd+g+8oS6JwJje+aRWsDocxHkjyRw0J5L5ZTlN3LI1LlOcGL7ph3eaIUmTXMIjLk0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3768,7 +3395,7 @@ packages: resolution: {integrity: sha512-HXciTXN/sDBYWgeAD4V4s0DN0g72x5mlxQhHxtYu3Tt8BLa6MzcJZUyDVFCdtjNs3bfENVHVzOsmooTVuNgAAw==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} peerDependencies: - vite: ^6.0.0 || ^7.0.0 + vite: 7.3.2 '@vitest/coverage-v8@4.1.0': resolution: {integrity: sha512-nDWulKeik2bL2Va/Wl4x7DLuTKAXa906iRFooIRPR+huHkcvp9QDkPQ2RJdmjOFrqOqvNfoSQLF68deE3xC3CQ==} @@ -3786,7 +3413,7 @@ packages: resolution: {integrity: sha512-evxREh+Hork43+Y4IOhTo+h5lGmVRyjqI739Rz4RlUPqwrkFFDF6EMvOOYjTx4E8Tl6gyCLRL8Mu7Ry12a13Tw==} peerDependencies: msw: ^2.4.9 - vite: ^6.0.0 || ^7.0.0 || ^8.0.0-0 + vite: 7.3.2 peerDependenciesMeta: msw: optional: true @@ -3808,31 +3435,6 @@ packages: '@vitest/utils@4.1.0': resolution: {integrity: sha512-XfPXT6a8TZY3dcGY8EdwsBulFCIw+BeeX0RZn2x/BtiY/75YGh8FeWGG8QISN/WhaqSrE2OrlDgtF8q5uhOTmw==} - '@wallet-standard/app@1.1.0': - resolution: {integrity: sha512-3CijvrO9utx598kjr45hTbbeeykQrQfKmSnxeWOgU25TOEpvcipD/bYDQWIqUv1Oc6KK4YStokSMu/FBNecGUQ==} - engines: {node: '>=16'} - - '@wallet-standard/base@1.1.0': - resolution: {integrity: sha512-DJDQhjKmSNVLKWItoKThJS+CsJQjR9AOBOirBVT1F9YpRyC9oYHE+ZnSf8y8bxUphtKqdQMPVQ2mHohYdRvDVQ==} - engines: {node: '>=16'} - - '@wallet-standard/core@1.1.1': - resolution: {integrity: sha512-5Xmjc6+Oe0hcPfVc5n8F77NVLwx1JVAoCVgQpLyv/43/bhtIif+Gx3WUrDlaSDoM8i2kA2xd6YoFbHCxs+e0zA==} - engines: {node: '>=16'} - - '@wallet-standard/errors@0.1.1': - resolution: {integrity: sha512-V8Ju1Wvol8i/VDyQOHhjhxmMVwmKiwyxUZBnHhtiPZJTWY0U/Shb2iEWyGngYEbAkp2sGTmEeNX1tVyGR7PqNw==} - engines: {node: '>=16'} - hasBin: true - - '@wallet-standard/features@1.1.0': - resolution: {integrity: sha512-hiEivWNztx73s+7iLxsuD1sOJ28xtRix58W7Xnz4XzzA/pF0+aicnWgjOdA10doVDEDZdUuZCIIqG96SFNlDUg==} - engines: {node: '>=16'} - - '@wallet-standard/wallet@1.1.0': - resolution: {integrity: sha512-Gt8TnSlDZpAl+RWOOAB/kuvC7RpcdWAlFbHNoi4gsXsfaWa1QCT6LBcfIYTPdOZC9OVZUDwqGuGAcqZejDmHjg==} - engines: {node: '>=16'} - '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} @@ -3887,12 +3489,6 @@ packages: '@yarnpkg/lockfile@1.1.0': resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==} - '@zxcvbn-ts/core@3.0.4': - resolution: {integrity: sha512-aQeiT0F09FuJaAqNrxynlAwZ2mW/1MdXakKWNmGM1Qp/VaY6CnB/GfnMS2T8gB2231Esp1/maCWd8vTG4OuShw==} - - '@zxcvbn-ts/language-common@3.0.4': - resolution: {integrity: sha512-viSNNnRYtc7ULXzxrQIVUNwHAPSXRtoIwy/Tq4XQQdIknBzw4vz36lQLF6mvhMlTIlpjoN/Z1GFu/fwiAlUSsw==} - abbrev@4.0.0: resolution: {integrity: sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA==} engines: {node: ^20.17.0 || >=22.9.0} @@ -4024,9 +3620,6 @@ packages: resolution: {integrity: sha512-Rf7xmeuIo7nb6S4mp4abW2faW8DauZyE2faBIKFaUfP3wnpOvNSbiI5AwVhqBNj0jPgBWEvhyCu0sLjN2q77Rg==} engines: {node: '>= 14.0.0'} - alien-signals@2.0.6: - resolution: {integrity: sha512-P3TxJSe31bUHBiblg59oU1PpaWPtmxF9GhJ/cB7OkgJ0qN/ifFSKUI25/v8ZhsT+lIG6ac8DpTOplXxORX6F3Q==} - angular-eslint@21.3.0: resolution: {integrity: sha512-K4+I41fSxzOavbv87EOnG5rdXiscs31j5pIAQG0aX21OHdSSjFCKOAQNmj8zv5OxUuYj5uYRToR3PuKQSN6i/A==} peerDependencies: @@ -4035,9 +3628,6 @@ packages: typescript: '*' typescript-eslint: ^8.0.0 - anser@1.4.10: - resolution: {integrity: sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==} - ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} @@ -4063,10 +3653,6 @@ packages: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} - ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - ansi-styles@6.2.3: resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} @@ -4075,9 +3661,6 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} - argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -4088,9 +3671,6 @@ packages: array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - asap@2.0.6: - resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - asn1js@3.0.7: resolution: {integrity: sha512-uLvq6KJu04qoQM6gvBfKFjlh6Gl0vOKQuR5cJMDHQkmwfMOQeN3F3SHCv9SNYSL+CRoHvOGFfllDlVz03GQjvQ==} engines: {node: '>=12.0.0'} @@ -4120,12 +3700,6 @@ packages: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} engines: {node: '>= 0.4'} - babel-jest@29.7.0: - resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.8.0 - babel-loader@10.0.0: resolution: {integrity: sha512-z8jt+EdS61AMw22nSfoNJAZ0vrtmhPRVi6ghL3rCeRZI8cdNYFiV5xeV3HbE7rlZZNmGH8BVccwWt8/ED0QOHA==} engines: {node: ^18.20.0 || ^20.10.0 || >=22.0.0} @@ -4133,14 +3707,6 @@ packages: '@babel/core': ^7.12.0 webpack: '>=5.61.0' - babel-plugin-istanbul@6.1.1: - resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} - engines: {node: '>=8'} - - babel-plugin-jest-hoist@29.6.3: - resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - babel-plugin-polyfill-corejs2@0.4.16: resolution: {integrity: sha512-xaVwwSfebXf0ooE11BJovZYKhFjIvQo7TsyVpETuIeH2JHv0k/T6Y5j22pPTvqYqmpkxdlPAJlyJ0tfOJAoMxw==} peerDependencies: @@ -4161,20 +3727,6 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-plugin-syntax-hermes-parser@0.32.0: - resolution: {integrity: sha512-m5HthL++AbyeEA2FcdwOLfVFvWYECOBObLHNqdR8ceY4TsEdn4LdX2oTvbB2QJSSElE2AWA/b2MXZ/PF/CqLZg==} - - babel-preset-current-node-syntax@1.2.0: - resolution: {integrity: sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==} - peerDependencies: - '@babel/core': ^7.0.0 || ^8.0.0-0 - - babel-preset-jest@29.6.3: - resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.0.0 - balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -4182,15 +3734,6 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} - base-x@3.0.11: - resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==} - - base-x@4.0.1: - resolution: {integrity: sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==} - - base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - baseline-browser-mapping@2.10.8: resolution: {integrity: sha512-PCLz/LXGBsNTErbtB6i5u4eLpHeMfi93aUv5duMmj6caNu6IphS4q6UevDnL36sZQv9lrP11dbPKGMaXPwMKfQ==} engines: {node: '>=6.0.0'} @@ -4286,9 +3829,6 @@ packages: blake3-wasm@2.1.5: resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} - bn.js@5.2.3: - resolution: {integrity: sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==} - body-parser@1.20.4: resolution: {integrity: sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -4303,14 +3843,8 @@ packages: boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - borsh@0.7.0: - resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} - - brace-expansion@1.1.13: - resolution: {integrity: sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==} - - brace-expansion@2.0.2: - resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + brace-expansion@2.0.3: + resolution: {integrity: sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==} brace-expansion@5.0.4: resolution: {integrity: sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==} @@ -4320,23 +3854,11 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browser-tabs-lock@1.3.0: - resolution: {integrity: sha512-g6nHaobTiT0eMZ7jh16YpD2kcjAp+PInbiVq3M1x6KKaEIVhT4v9oURNIpZLOZ3LQbQ3XYfNhMAb/9hzNLIWrw==} - browserslist@4.28.1: resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - bs58@4.0.1: - resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} - - bs58@5.0.0: - resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} - - bser@2.1.1: - resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} - bson@7.2.0: resolution: {integrity: sha512-YCEo7KjMlbNlyHhz7zAZNDpIpQbd+wOEHJYezv0nMYTn4x31eIUM2yomNNubclAt63dObUzKHWsBLJ9QcZNSnQ==} engines: {node: '>=20.19.0'} @@ -4344,9 +3866,6 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - buffer@6.0.3: - resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} - bufferutil@4.1.0: resolution: {integrity: sha512-ZMANVnAixE6AWWnPzlW2KpUrxhm9woycYvPOo67jWHyFowASTEd9s+QN1EIMsSDtwhIxN4sWE1jotpuDUIgyIw==} engines: {node: '>=6.14.2'} @@ -4391,10 +3910,6 @@ packages: resolution: {integrity: sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==} engines: {node: '>=12'} - camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - camelcase@6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} @@ -4406,10 +3921,6 @@ packages: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - chalk@5.6.2: resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} @@ -4436,25 +3947,10 @@ packages: resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} engines: {node: '>=18'} - chrome-launcher@0.15.2: - resolution: {integrity: sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==} - engines: {node: '>=12.13.0'} - hasBin: true - chrome-trace-event@1.0.4: resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} engines: {node: '>=6.0'} - chromium-edge-launcher@0.2.0: - resolution: {integrity: sha512-JfJjUnq25y9yg4FABRRVPmBGWPZZi+AQXT4mxupb67766/0UlhG8PAZCz6xzEMXTbW3CsSoE8PcCWA49n35mKg==} - - ci-info@2.0.0: - resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} - - ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} - engines: {node: '>=8'} - citty@0.1.6: resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} @@ -4480,13 +3976,6 @@ packages: resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} engines: {node: '>= 12'} - cliui@6.0.0: - resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} - - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - cliui@9.0.1: resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==} engines: {node: '>=20'} @@ -4498,10 +3987,6 @@ packages: cloudflare@5.2.0: resolution: {integrity: sha512-dVzqDpPFYR9ApEC9e+JJshFJZXcw4HzM8W+3DHzO5oy9+8rLC53G7x6fEf9A7/gSuSCxuvndzui5qJKftfIM9A==} - clsx@1.2.1: - resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} - engines: {node: '>=6'} - code-block-writer@12.0.0: resolution: {integrity: sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==} @@ -4519,22 +4004,6 @@ packages: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} - commander@12.1.0: - resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} - engines: {node: '>=18'} - - commander@13.1.0: - resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} - engines: {node: '>=18'} - - commander@14.0.1: - resolution: {integrity: sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==} - engines: {node: '>=20'} - - commander@14.0.3: - resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} - engines: {node: '>=20'} - commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -4546,9 +4015,6 @@ packages: resolution: {integrity: sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==} engines: {node: '>= 0.8.0'} - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - confbox@0.2.4: resolution: {integrity: sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==} @@ -4556,10 +4022,6 @@ packages: resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} engines: {node: '>=0.8'} - connect@3.7.0: - resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==} - engines: {node: '>= 0.10.0'} - consola@3.4.2: resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} engines: {node: ^14.18.0 || >=16.10.0} @@ -4612,9 +4074,6 @@ packages: core-js-pure@3.48.0: resolution: {integrity: sha512-1slJgk89tWC51HQ1AEqG+s2VuwpTRr8ocu4n20QUcH1v9lAN0RXen0Q0AABa/DK1I7RrNWLucplOHMx8hfTGTw==} - core-js@3.47.0: - resolution: {integrity: sha512-c3Q2VVkGAUyupsjRnaNX6u8Dq2vAdzm9iuPj5FW0fRxzlxgq9Q39MDq10IvmQSpLgHQNyQzQmOo6bgGHmH3NNg==} - core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -4643,9 +4102,6 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} - crypto-js@4.2.0: - resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} - css-loader@7.1.3: resolution: {integrity: sha512-frbERmjT0UC5lMheWpJmMilnt9GEhbZJN/heUb7/zaJYeIzj5St9HvDcfshzzOqbsS+rYpMk++2SD3vGETDSyA==} engines: {node: '>= 18.12.0'} @@ -4702,10 +4158,6 @@ packages: supports-color: optional: true - decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - decimal.js@10.6.0: resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} @@ -4728,12 +4180,8 @@ packages: resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} engines: {node: '>=12'} - defu@6.1.4: - resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} - - delay@5.0.0: - resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} - engines: {node: '>=10'} + defu@6.1.5: + resolution: {integrity: sha512-pwdBJxJuJXmqrLO6s0VBmfbRz+G7FUzkjldAsdi9Yrv86mPyzq0ll1o8+8gB4Gsr6GJHbK1Lh3ngllgTInDCjA==} delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} @@ -4772,9 +4220,6 @@ packages: diff-match-patch@1.0.5: resolution: {integrity: sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==} - dijkstrajs@1.0.3: - resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==} - dns-packet@5.6.1: resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} engines: {node: '>=6'} @@ -4803,8 +4248,8 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - effect@3.18.4: - resolution: {integrity: sha512-b1LXQJLe9D11wfnOKAk3PKxuqYshQ0Heez+y5pnkd3jLj1yx9QhM72zZ9uUrOQyNvrs2GZZd/3maL0ZV18YuDA==} + effect@3.20.0: + resolution: {integrity: sha512-qMLfDJscrNG8p/aw+IkT9W7fgj50Z4wG5bLBy0Txsxz8iUHjDIkOgO3SV0WZfnQbNG2VJYb0b+rDLMrhM4+Krw==} electron-to-chromium@1.5.313: resolution: {integrity: sha512-QBMrTWEf00GXZmJyx2lbYD45jpI3TUFnNIzJ5BBc8piGUDwMPa1GV6HJWTZVvY/eiN3fSopl7NRbgGp9sZ9LTA==} @@ -4823,10 +4268,6 @@ packages: resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} engines: {node: '>=14'} - encodeurl@1.0.2: - resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} - engines: {node: '>= 0.8'} - encodeurl@2.0.0: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} @@ -4868,9 +4309,6 @@ packages: error-stack-parser-es@1.0.5: resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==} - error-stack-parser@2.1.4: - resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} - es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -4890,12 +4328,6 @@ packages: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} - es6-promise@4.2.8: - resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} - - es6-promisify@5.0.0: - resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} - esbuild-wasm@0.27.3: resolution: {integrity: sha512-AUXuOxZ145/5Az+lIqk6TdJbxKTyDGkXMJpTExmBdbnHR6n6qAFx+F4oG9ORpVYJ9dQYeQAqzv51TO4DFKsbXw==} engines: {node: '>=18'} @@ -4913,10 +4345,6 @@ packages: escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} - escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} @@ -4951,11 +4379,6 @@ packages: resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - esquery@1.7.0: resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} engines: {node: '>=0.10'} @@ -5035,10 +4458,6 @@ packages: exsolve@1.0.8: resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} - eyes@0.1.8: - resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} - engines: {node: '> 0.1.90'} - fast-check@3.23.2: resolution: {integrity: sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==} engines: {node: '>=8.0.0'} @@ -5059,19 +4478,9 @@ packages: fast-sha256@1.3.0: resolution: {integrity: sha512-n11RGP/lrWEFI/bWdygLxhI+pVeo1ZYIVwvvPkW7azl/rOy+F3HYRZ2K5zeE9mmkhQppyv9sQFx0JM9UabnpPQ==} - fast-stable-stringify@1.0.0: - resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} - fast-uri@3.1.0: resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} - fastest-levenshtein@1.0.16: - resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} - engines: {node: '>= 4.9.1'} - - fastestsmallesttextencoderdecoder@1.0.22: - resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} - fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} @@ -5079,19 +4488,11 @@ packages: resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} engines: {node: '>=0.8.0'} - fb-dotslash@0.5.8: - resolution: {integrity: sha512-XHYLKk9J4BupDxi9bSEhkfss0m+Vr9ChTrjhf9l2iw3jB5C7BnY4GVPoMcqbrTutsKJso6yj2nAB6BI/F2oZaA==} - engines: {node: '>=20'} - hasBin: true - - fb-watchman@2.0.2: - resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} - fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} engines: {node: '>=12.0.0'} peerDependencies: - picomatch: ^3 || ^4 + picomatch: 4.0.4 peerDependenciesMeta: picomatch: optional: true @@ -5104,10 +4505,6 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} - finalhandler@1.1.2: - resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} - engines: {node: '>= 0.8'} - finalhandler@1.3.2: resolution: {integrity: sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==} engines: {node: '>= 0.8'} @@ -5116,10 +4513,6 @@ packages: resolution: {integrity: sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==} engines: {node: '>= 18.0.0'} - find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} - find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} @@ -5135,9 +4528,6 @@ packages: flatted@3.4.1: resolution: {integrity: sha512-IxfVbRFVlV8V/yRaGzk0UVIcsKKHMSfYw66T/u4nTwlWteQePsxe//LjudR1AMX4tZW3WFCh3Zqa/sjlqpbURQ==} - flow-enums-runtime@0.0.6: - resolution: {integrity: sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==} - follow-redirects@1.15.11: resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} engines: {node: '>=4.0'} @@ -5181,9 +4571,6 @@ packages: resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - fsevents@2.3.2: resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -5216,10 +4603,6 @@ packages: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} - get-package-type@0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} - get-port-please@3.2.0: resolution: {integrity: sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A==} @@ -5252,10 +4635,6 @@ packages: resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==} engines: {node: 18 || 20 || >=22} - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me - gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -5288,27 +4667,8 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - hermes-compiler@250829098.0.9: - resolution: {integrity: sha512-hZ5O7PDz1vQ99TS7HD3FJ9zVynfU1y+VWId6U1Pldvd8hmAYrNec/XLPYJKD3dLOW6NXak6aAQAuMuSo3ji0tQ==} - - hermes-estree@0.32.0: - resolution: {integrity: sha512-KWn3BqnlDOl97Xe1Yviur6NbgIZ+IP+UVSpshlZWkq+EtoHg6/cwiDj/osP9PCEgFE15KBm1O55JRwbMEm5ejQ==} - - hermes-estree@0.33.3: - resolution: {integrity: sha512-6kzYZHCk8Fy1Uc+t3HGYyJn3OL4aeqKLTyina4UFtWl8I0kSL7OmKThaiX+Uh2f8nGw3mo4Ifxg0M5Zk3/Oeqg==} - - hermes-parser@0.32.0: - resolution: {integrity: sha512-g4nBOWFpuiTqjR3LZdRxKUkij9iyveWeuks7INEsMX741f3r9xxrOe8TeQfUxtda0eXmiIFiMQzoeSQEno33Hw==} - - hermes-parser@0.33.3: - resolution: {integrity: sha512-Yg3HgaG4CqgyowtYjX/FsnPAuZdHOqSMtnbpylbptsQ9nwwSKsy6uRWcGO5RK0EqiX12q8HvDWKgeAVajRO5DA==} - - hono@4.11.4: - resolution: {integrity: sha512-U7tt8JsyrxSRKspfhtLET79pU8K+tInj5QZXs1jSugO1Vq5dFj3kmZsRldo29mTBfcjDRVRXrEZ6LS63Cog9ZA==} - engines: {node: '>=16.9.0'} - - hono@4.12.8: - resolution: {integrity: sha512-VJCEvtrezO1IAR+kqEYnxUOoStaQPGrCmX3j4wDTNOcD1uRPFpGlwQUIW8niPuvHXaTUxeOUl5MMDGrl+tmO9A==} + hono@4.12.12: + resolution: {integrity: sha512-p1JfQMKaceuCbpJKAPKVqyqviZdS0eUxH9v82oWo1kb9xjQ5wA6iP3FNVAPDFlz5/p7d45lO+BpSk1tuSZMF4Q==} engines: {node: '>=16.9.0'} hosted-git-info@9.0.2: @@ -5398,12 +4758,6 @@ packages: peerDependencies: postcss: ^8.1.0 - idb-keyval@6.2.1: - resolution: {integrity: sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==} - - ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - ignore-walk@8.0.0: resolution: {integrity: sha512-FCeMZT4NiRQGh+YkeKMtWrOmBgWjHjMJ26WQWrRQyoyzqevdaGSakUaJW5xQYmjLlUVk2qUnCjYVBax9EKKg8A==} engines: {node: ^20.17.0 || >=22.9.0} @@ -5421,11 +4775,6 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - image-size@1.2.1: - resolution: {integrity: sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==} - engines: {node: '>=16.x'} - hasBin: true - immutable@5.1.5: resolution: {integrity: sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==} @@ -5437,10 +4786,6 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -5448,9 +4793,6 @@ packages: resolution: {integrity: sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==} engines: {node: ^20.17.0 || >=22.9.0} - invariant@2.2.4: - resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} - ip-address@10.1.0: resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==} engines: {node: '>= 12'} @@ -5478,11 +4820,6 @@ packages: resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} - is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - is-docker@3.0.0: resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -5529,10 +4866,6 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - is-plain-obj@2.1.0: - resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} - engines: {node: '>=8'} - is-plain-obj@3.0.0: resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} engines: {node: '>=10'} @@ -5561,10 +4894,6 @@ packages: is-what@3.14.1: resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==} - is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} - is-wsl@3.1.1: resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} engines: {node: '>=16'} @@ -5583,11 +4912,6 @@ packages: resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} engines: {node: '>=0.10.0'} - isomorphic-ws@4.0.1: - resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} - peerDependencies: - ws: '*' - isows@1.0.7: resolution: {integrity: sha512-I1fSfDCZL5P0v33sVqeTDSpcstAg/N+wF5HS033mogOVIp4B+oHC7oOCsA3axAbBSGTJ8QubbNmnIRN/h8U7hg==} peerDependencies: @@ -5597,10 +4921,6 @@ packages: resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} - istanbul-lib-instrument@5.2.1: - resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} - engines: {node: '>=8'} - istanbul-lib-instrument@6.0.3: resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} engines: {node: '>=10'} @@ -5613,51 +4933,10 @@ packages: resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} engines: {node: '>=8'} - jayson@4.3.0: - resolution: {integrity: sha512-AauzHcUcqs8OBnCHOkJY280VaTiCm57AbuO7lqzcw7JapGj50BisE3xhksye4zlTSR1+1tAz67wLTl8tEH1obQ==} - engines: {node: '>=8'} - hasBin: true - - jest-environment-node@29.7.0: - resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-get-type@29.6.3: - resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-haste-map@29.7.0: - resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-message-util@29.7.0: - resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-mock@29.7.0: - resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-regex-util@29.6.3: - resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-util@29.7.0: - resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-validate@29.7.0: - resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-worker@27.5.1: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} - jest-worker@29.7.0: - resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jiti@2.6.1: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true @@ -5671,27 +4950,16 @@ packages: js-base64@3.7.8: resolution: {integrity: sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==} - js-cookie@3.0.5: - resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==} - engines: {node: '>=14'} - js-tokens@10.0.0: resolution: {integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==} js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-yaml@3.14.2: - resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==} - hasBin: true - js-yaml@4.1.1: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true - jsc-safe-url@0.2.4: - resolution: {integrity: sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==} - jsdom@28.1.0: resolution: {integrity: sha512-0+MoQNYyr2rBHqO1xilltfDjV9G7ymYGlAUazgcDLQaUf8JDHbuGwsxN6U9qWaElZ4w1B2r7yEGIL3GdeW3Rug==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} @@ -5736,9 +5004,6 @@ packages: json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - json-stringify-safe@5.0.1: - resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} @@ -5799,10 +5064,6 @@ packages: engines: {node: '>=14'} hasBin: true - leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -5815,9 +5076,6 @@ packages: webpack: optional: true - lighthouse-logger@1.4.2: - resolution: {integrity: sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==} - lightningcss-android-arm64@1.31.1: resolution: {integrity: sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==} engines: {node: '>= 12.0.0'} @@ -5919,10 +5177,6 @@ packages: resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==} engines: {node: '>= 12.13.0'} - locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} - locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} @@ -5930,14 +5184,8 @@ packages: lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} - lodash.throttle@4.1.1: - resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} - - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - - lodash@4.17.23: - resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==} + lodash@4.18.1: + resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} log-symbols@7.0.1: resolution: {integrity: sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==} @@ -5950,10 +5198,6 @@ packages: long@5.3.2: resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - lru-cache@11.2.7: resolution: {integrity: sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==} engines: {node: 20 || >=22} @@ -5983,16 +5227,10 @@ packages: resolution: {integrity: sha512-vM2sG+wbVeVGYcCm16mM3d5fuem9oC28n436HjsGO3LcxoTI8LNVa4rwZDn3f76+cWyT4GGJDxjTYU1I2nr6zw==} engines: {node: ^20.17.0 || >=22.9.0} - makeerror@1.0.12: - resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} - map-obj@4.3.0: resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} engines: {node: '>=8'} - marky@1.3.0: - resolution: {integrity: sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==} - material-symbols@0.40.2: resolution: {integrity: sha512-QUJF1HztvcpP8pXHPPNESK05Thq/Zy8ub17T2xBDf4+gqx4KBs353lKHuVzE/eCYOtiB9JBlFOU7cjAI6vVMTQ==} @@ -6016,9 +5254,6 @@ packages: peerDependencies: tslib: '2' - memoize-one@5.2.1: - resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} - memory-pager@1.5.0: resolution: {integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==} @@ -6029,10 +5264,6 @@ packages: resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} engines: {node: '>=18'} - merge-options@3.0.4: - resolution: {integrity: sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==} - engines: {node: '>=10'} - merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -6044,64 +5275,6 @@ packages: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} - metro-babel-transformer@0.83.5: - resolution: {integrity: sha512-d9FfmgUEVejTiSb7bkQeLRGl6aeno2UpuPm3bo3rCYwxewj03ymvOn8s8vnS4fBqAPQ+cE9iQM40wh7nGXR+eA==} - engines: {node: '>=20.19.4'} - - metro-cache-key@0.83.5: - resolution: {integrity: sha512-Ycl8PBajB7bhbAI7Rt0xEyiF8oJ0RWX8EKkolV1KfCUlC++V/GStMSGpPLwnnBZXZWkCC5edBPzv1Hz1Yi0Euw==} - engines: {node: '>=20.19.4'} - - metro-cache@0.83.5: - resolution: {integrity: sha512-oH+s4U+IfZyg8J42bne2Skc90rcuESIYf86dYittcdWQtPfcaFXWpByPyTuWk3rR1Zz3Eh5HOrcVImfEhhJLng==} - engines: {node: '>=20.19.4'} - - metro-config@0.83.5: - resolution: {integrity: sha512-JQ/PAASXH7yczgV6OCUSRhZYME+NU8NYjI2RcaG5ga4QfQ3T/XdiLzpSb3awWZYlDCcQb36l4Vl7i0Zw7/Tf9w==} - engines: {node: '>=20.19.4'} - - metro-core@0.83.5: - resolution: {integrity: sha512-YcVcLCrf0ed4mdLa82Qob0VxYqfhmlRxUS8+TO4gosZo/gLwSvtdeOjc/Vt0pe/lvMNrBap9LlmvZM8FIsMgJQ==} - engines: {node: '>=20.19.4'} - - metro-file-map@0.83.5: - resolution: {integrity: sha512-ZEt8s3a1cnYbn40nyCD+CsZdYSlwtFh2kFym4lo+uvfM+UMMH+r/BsrC6rbNClSrt+B7rU9T+Te/sh/NL8ZZKQ==} - engines: {node: '>=20.19.4'} - - metro-minify-terser@0.83.5: - resolution: {integrity: sha512-Toe4Md1wS1PBqbvB0cFxBzKEVyyuYTUb0sgifAZh/mSvLH84qA1NAWik9sISWatzvfWf3rOGoUoO5E3f193a3Q==} - engines: {node: '>=20.19.4'} - - metro-resolver@0.83.5: - resolution: {integrity: sha512-7p3GtzVUpbAweJeCcUJihJeOQl1bDuimO5ueo1K0BUpUtR41q5EilbQ3klt16UTPPMpA+tISWBtsrqU556mY1A==} - engines: {node: '>=20.19.4'} - - metro-runtime@0.83.5: - resolution: {integrity: sha512-f+b3ue9AWTVlZe2Xrki6TAoFtKIqw30jwfk7GQ1rDUBQaE0ZQ+NkiMEtb9uwH7uAjJ87U7Tdx1Jg1OJqUfEVlA==} - engines: {node: '>=20.19.4'} - - metro-source-map@0.83.5: - resolution: {integrity: sha512-VT9bb2KO2/4tWY9Z2yeZqTUao7CicKAOps9LUg2aQzsz+04QyuXL3qgf1cLUVRjA/D6G5u1RJAlN1w9VNHtODQ==} - engines: {node: '>=20.19.4'} - - metro-symbolicate@0.83.5: - resolution: {integrity: sha512-EMIkrjNRz/hF+p0RDdxoE60+dkaTLPN3vaaGkFmX5lvFdO6HPfHA/Ywznzkev+za0VhPQ5KSdz49/MALBRteHA==} - engines: {node: '>=20.19.4'} - hasBin: true - - metro-transform-plugins@0.83.5: - resolution: {integrity: sha512-KxYKzZL+lt3Os5H2nx7YkbkWVduLZL5kPrE/Yq+Prm/DE1VLhpfnO6HtPs8vimYFKOa58ncl60GpoX0h7Wm0Vw==} - engines: {node: '>=20.19.4'} - - metro-transform-worker@0.83.5: - resolution: {integrity: sha512-8N4pjkNXc6ytlP9oAM6MwqkvUepNSW39LKYl9NjUMpRDazBQ7oBpQDc8Sz4aI8jnH6AGhF7s1m/ayxkN1t04yA==} - engines: {node: '>=20.19.4'} - - metro@0.83.5: - resolution: {integrity: sha512-BgsXevY1MBac/3ZYv/RfNFf/4iuW9X7f4H8ZNkiH+r667HD9sVujxcmu4jvEzGCAm4/WyKdZCuyhAcyhTHOucQ==} - engines: {node: '>=20.19.4'} - hasBin: true - micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} @@ -6157,9 +5330,6 @@ packages: resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==} engines: {node: 18 || 20 || >=22} - minimatch@3.1.5: - resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} - minimatch@9.0.9: resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} engines: {node: '>=16 || 14 >=14.17'} @@ -6199,11 +5369,6 @@ packages: resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} engines: {node: '>= 18'} - mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true - mkdirp@3.0.1: resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} engines: {node: '>=10'} @@ -6351,9 +5516,6 @@ packages: engines: {node: ^20.17.0 || >=22.9.0} hasBin: true - node-int64@0.4.0: - resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - node-releases@2.0.36: resolution: {integrity: sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==} @@ -6397,18 +5559,11 @@ packages: nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - nullthrows@1.1.1: - resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} - nypm@0.6.5: resolution: {integrity: sha512-K6AJy1GMVyfyMXRVB88700BJqNUkByijGJM8kEHpLdcAt+vSQAVfkWWHYzuRXHSY6xA2sNc5RjTj0p9rE2izVQ==} engines: {node: '>=18'} hasBin: true - ob1@0.83.5: - resolution: {integrity: sha512-vNKPYC8L5ycVANANpF/S+WZHpfnRWKx/F3AYP4QMn6ZJTh+l2HOrId0clNkEmua58NB9vmI9Qh7YOoV/4folYg==} - engines: {node: '>=20.19.4'} - object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -6426,10 +5581,6 @@ packages: ohash@2.0.11: resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} - on-finished@2.3.0: - resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} - engines: {node: '>= 0.8'} - on-finished@2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} @@ -6453,10 +5604,6 @@ packages: resolution: {integrity: sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==} engines: {node: '>=20'} - open@7.4.2: - resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} - engines: {node: '>=8'} - openapi3-ts@4.5.0: resolution: {integrity: sha512-jaL+HgTq2Gj5jRcfdutgRGLosCy/hT8sQf6VOy+P+g36cZOjI1iukdPnijC+4CmeRzg/jEllJUboEic2FhxhtQ==} @@ -6479,26 +5626,10 @@ packages: typescript: optional: true - ox@0.6.9: - resolution: {integrity: sha512-wi5ShvzE4eOcTwQVsIPdFr+8ycyX+5le/96iAJutaZAvCes1J0+RvpEPg5QDPDiaR0XQQAvZVl7AwqQcINuUug==} - peerDependencies: - typescript: '>=5.4.0' - peerDependenciesMeta: - typescript: - optional: true - - p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} - p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} - p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} - p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} @@ -6511,10 +5642,6 @@ packages: resolution: {integrity: sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==} engines: {node: '>=16.17'} - p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - pacote@21.3.1: resolution: {integrity: sha512-O0EDXi85LF4AzdjG74GUwEArhdvawi/YOHcsW6IijKNj7wm8IvEWNF5GnfuxNpQ/ZpO3L37+v8hqdVh8GgWYhg==} engines: {node: ^20.17.0 || >=22.9.0} @@ -6573,10 +5700,6 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -6588,8 +5711,8 @@ packages: resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} engines: {node: 18 || 20 || >=22} - path-to-regexp@0.1.12: - resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} + path-to-regexp@0.1.13: + resolution: {integrity: sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==} path-to-regexp@6.3.0: resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} @@ -6648,18 +5771,10 @@ packages: picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - picomatch@2.3.2: resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} engines: {node: '>=8.6'} - picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} - engines: {node: '>=12'} - picomatch@4.0.4: resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} @@ -6668,10 +5783,6 @@ packages: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} - pirates@4.0.7: - resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} - engines: {node: '>= 6'} - piscina@5.1.4: resolution: {integrity: sha512-7uU4ZnKeQq22t9AsmHGD2w4OYQGonwFnTypDypaWi7Qr2EvQIFVtG8J5D/3bE7W123Wdc9+v4CZDu5hJXVCtBg==} engines: {node: '>=20.x'} @@ -6697,10 +5808,6 @@ packages: engines: {node: '>=18'} hasBin: true - pngjs@5.0.0: - resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} - engines: {node: '>=10.13.0'} - postcss-loader@8.2.0: resolution: {integrity: sha512-tHX+RkpsXVcc7st4dSdDGliI+r4aAQDuv+v3vFYHixb6YgjreG5AG4SEB0kDK8u2s6htqEEpKlkhSBUTvWKYnA==} engines: {node: '>= 18.12.0'} @@ -6805,12 +5912,6 @@ packages: resolution: {integrity: sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==} engines: {node: '>=20'} - preact@10.24.2: - resolution: {integrity: sha512-1cSoF0aCC8uaARATfrlz4VCBqE8LwZwRfLgkxJOQwAlQt6ayTmi0D9OF7nXid1POI5SZidFuG9CnlXbDfLqY/Q==} - - preact@10.29.0: - resolution: {integrity: sha512-wSAGyk2bYR1c7t3SZ3jHcM6xy0lcBcDel6lODcs9ME6Th++Dx2KU+6D3HD8wMMKGA8Wpw7OMd3/4RGzYRpzwRg==} - prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -6820,10 +5921,6 @@ packages: engines: {node: '>=14'} hasBin: true - pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - prisma@7.5.0: resolution: {integrity: sha512-n30qZpWehaYQzigLjmuPisyEsvOzHt7bZeRyg8gZ5DvJo9FGjD+gNaY59Ns3hlLD5/jZH5GBeftIss0jDbUoLg==} engines: {node: ^20.19 || ^22.12 || >=24.0} @@ -6852,9 +5949,6 @@ packages: resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} engines: {node: '>=10'} - promise@8.3.0: - resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} - proper-lockfile@4.1.2: resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} @@ -6882,11 +5976,6 @@ packages: resolution: {integrity: sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==} engines: {node: '>=16.0.0'} - qrcode@1.5.4: - resolution: {integrity: sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==} - engines: {node: '>=10.13.0'} - hasBin: true - qs@6.14.2: resolution: {integrity: sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==} engines: {node: '>=0.6'} @@ -6898,9 +5987,6 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - queue@6.0.2: - resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==} - quick-lru@5.1.1: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} engines: {node: '>=10'} @@ -6920,32 +6006,11 @@ packages: rc9@2.1.2: resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} - react-devtools-core@6.1.5: - resolution: {integrity: sha512-ePrwPfxAnB+7hgnEr8vpKxL9cmnp7F322t8oqcPshbIQQhDKgFDW4tjhF2wjVbdXF9O/nyuy3sQWd9JGpiLPvA==} - react-dom@19.2.4: resolution: {integrity: sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==} peerDependencies: react: ^19.2.4 - react-is@18.3.1: - resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - - react-native@0.84.1: - resolution: {integrity: sha512-0PjxOyXRu3tZ8EobabxSukvhKje2HJbsZikR0U+pvS0pYZza2hXKjcSBiBdFN4h9D0S3v6a8kkrDK6WTRKMwzg==} - engines: {node: '>= 20.19.4'} - hasBin: true - peerDependencies: - '@types/react': ^19.1.1 - react: ^19.2.3 - peerDependenciesMeta: - '@types/react': - optional: true - - react-refresh@0.14.2: - resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} - engines: {node: '>=0.10.0'} - react@19.2.4: resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==} engines: {node: '>=0.10.0'} @@ -6979,9 +6044,6 @@ packages: regenerate@1.4.2: resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} - regenerator-runtime@0.13.11: - resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} - regex-parser@2.3.1: resolution: {integrity: sha512-yXLRqatcCuKtVHsWrNg0JL3l1zGfdXeEvDa0bdu4tCDQw0RpMDZsqbkyRTUnKMR0tXF627V2oEWjBEaEdqTwtQ==} @@ -7002,17 +6064,10 @@ packages: remeda@2.33.4: resolution: {integrity: sha512-ygHswjlc/opg2VrtiYvUOPLjxjtdKvjGz1/plDhkG66hjNjFr1xmfrs2ClNFo/E6TyUFiwYNh53bKV26oBoMGQ==} - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} - require-main-filename@2.0.0: - resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} - requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} @@ -7020,10 +6075,6 @@ packages: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} - resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - resolve-url-loader@5.0.0: resolution: {integrity: sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==} engines: {node: '>=12'} @@ -7052,11 +6103,6 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - rolldown@1.0.0-rc.4: resolution: {integrity: sha512-V2tPDUrY3WSevrvU2E41ijZlpF+5PbZu4giH+VpNraaadsJGHa4fR6IFwsocVwEXDoAdIv5qgPPxgrvKAOIPtA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -7074,9 +6120,6 @@ packages: resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} engines: {node: '>= 18'} - rpc-websockets@9.3.7: - resolution: {integrity: sha512-dQal1U0yKH2umW0DgqSecP4G1jNxyPUGY60uUMB8bLoXabC2aWT3Cag9hOhZXsH/52QJEcggxNNWhF+Fp48ykw==} - run-applescript@7.1.0: resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} engines: {node: '>=18'} @@ -7171,12 +6214,8 @@ packages: seq-queue@0.0.5: resolution: {integrity: sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==} - serialize-error@2.1.0: - resolution: {integrity: sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==} - engines: {node: '>=0.10.0'} - - serialize-javascript@7.0.4: - resolution: {integrity: sha512-DuGdB+Po43Q5Jxwpzt1lhyFSYKryqoNjQSA9M92tyw0lyHIOur+XCalOUe0KTJpyqzT8+fQ5A0Jf7vCx/NKmIg==} + serialize-javascript@7.0.5: + resolution: {integrity: sha512-F4LcB0UqUl1zErq+1nYEEzSHJnIwb3AF2XWB94b+afhrekOUijwooAYqFyRbjYkm2PAKBabx6oYv/xDxNi8IBw==} engines: {node: '>=20.0.0'} serve-index@1.9.2: @@ -7191,9 +6230,6 @@ packages: resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==} engines: {node: '>= 18'} - set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - set-cookie-parser@3.1.0: resolution: {integrity: sha512-kjnC1DXBHcxaOaOXBHBeRtltsDG2nUiUni+jP92M9gYdW12rsmx92UsfpH7o5tDRs7I1ZZPSQJQGv3UaRfCiuw==} @@ -7250,10 +6286,6 @@ packages: resolution: {integrity: sha512-/fUgUhYghuLzVT/gaJoeVehLCgZiUxPCPMcyVNY0lIf/cTCz58K/WTI7PefDarXxp9nUKpEwg1yyz3eSBMTtgA==} engines: {node: ^20.17.0 || >=22.9.0} - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - slice-ansi@7.1.2: resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} engines: {node: '>=18'} @@ -7290,10 +6322,6 @@ packages: source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - source-map@0.5.7: - resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} - engines: {node: '>=0.10.0'} - source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} @@ -7325,9 +6353,6 @@ packages: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} - sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - sprintf-js@1.1.3: resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} @@ -7339,20 +6364,9 @@ packages: resolution: {integrity: sha512-QUiRf1+u9wPTL/76GTYlKttDEBWV1ga9ZXW8BG6kfdeyyM8LGPix9gROyg9V2+P0xNyF3X2Go526xKFdMZrHSQ==} engines: {node: ^20.17.0 || >=22.9.0} - stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} - stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - stackframe@1.3.4: - resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} - - stacktrace-parser@0.1.11: - resolution: {integrity: sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==} - engines: {node: '>=6'} - standardwebhooks@1.0.0: resolution: {integrity: sha512-BbHGOQK9olHPMvQNHWul6MYlrRTAOKn03rOe4A8O3CLWhNf4YHBqq2HJKKC+sfqpxiBY52pNeesD6jIiLDz8jg==} @@ -7374,12 +6388,6 @@ packages: resolution: {integrity: sha512-reExS1kSGoElkextOcPkel4NE99S0BWxjUHQeDFnR8S993JxpPX7KU4MNmO19NXhlJp+8dmdCbKQVNgLJh2teA==} engines: {node: '>=18'} - stream-chain@2.2.5: - resolution: {integrity: sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==} - - stream-json@1.9.1: - resolution: {integrity: sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==} - string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -7410,10 +6418,6 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - superstruct@2.0.2: - resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==} - engines: {node: '>=14.0.0'} - supports-color@10.2.2: resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} engines: {node: '>=18'} @@ -7478,22 +6482,12 @@ packages: engines: {node: '>=10'} hasBin: true - test-exclude@6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} - - text-encoding-utf-8@1.0.2: - resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} - thingies@2.5.0: resolution: {integrity: sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw==} engines: {node: '>=10.18'} peerDependencies: tslib: ^2 - throat@5.0.0: - resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==} - throttleit@2.1.0: resolution: {integrity: sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==} engines: {node: '>=18'} @@ -7530,9 +6524,6 @@ packages: resolution: {integrity: sha512-I4FZcVFcqCRuT0ph6dCDpPuO4Xgzvh+spkcTr1gK7peIvxWauoloVO0vuy1FQnijT63ss6AsHB6+OIM4aXHbPg==} hasBin: true - tmpl@1.0.5: - resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -7593,14 +6584,6 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} - - type-fest@0.7.1: - resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==} - engines: {node: '>=8'} - type-fest@1.4.0: resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} engines: {node: '>=10'} @@ -7638,14 +6621,6 @@ packages: resolution: {integrity: sha512-sC+b0tB1whOCzbtlx20fx3WgCXwkW627p4EA9uM+/tNNPkSS+eSEld6pAs9nDv7WbY1UUljBMYPtu9BCOrCWKA==} engines: {node: '>=18.17'} - undici@7.22.0: - resolution: {integrity: sha512-RqslV2Us5BrllB+JeiZnK4peryVTndy9Dnqq62S3yYRRTj0tFQCwEniUy2167skdGOy3vqRzEvl1Dm4sV2ReDg==} - engines: {node: '>=20.18.1'} - - undici@7.24.3: - resolution: {integrity: sha512-eJdUmK/Wrx2d+mnWWmwwLRyA7OQCkLap60sk3dOK4ViZR7DKwwptwuIvFBg2HaiP9ESaEdhtpSymQPvytpmkCA==} - engines: {node: '>=20.18.1'} - undici@7.24.4: resolution: {integrity: sha512-BM/JzwwaRXxrLdElV2Uo6cTLEjhSb3WXboncJamZ15NgUURmvlXvxa6xkwIOILIjPNo9i8ku136ZvWV0Uly8+w==} engines: {node: '>=20.18.1'} @@ -7710,10 +6685,6 @@ packages: resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} hasBin: true - uuid@11.1.0: - resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} - hasBin: true - uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true @@ -7742,8 +6713,8 @@ packages: typescript: optional: true - vite@7.3.1: - resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} + vite@7.3.2: + resolution: {integrity: sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -7796,7 +6767,7 @@ packages: '@vitest/ui': 4.1.0 happy-dom: '*' jsdom: '*' - vite: ^6.0.0 || ^7.0.0 || ^8.0.0-0 + vite: 7.3.2 peerDependenciesMeta: '@edge-runtime/vm': optional: true @@ -7817,16 +6788,10 @@ packages: jsdom: optional: true - vlq@1.0.1: - resolution: {integrity: sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==} - w3c-xmlserializer@5.0.0: resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} engines: {node: '>=18'} - walker@1.0.8: - resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} - watchpack@2.5.1: resolution: {integrity: sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==} engines: {node: '>=10.13.0'} @@ -7910,9 +6875,6 @@ packages: resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} engines: {node: '>=0.8.0'} - whatwg-fetch@3.6.20: - resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} - whatwg-mimetype@5.0.0: resolution: {integrity: sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==} engines: {node: '>=20'} @@ -7928,9 +6890,6 @@ packages: whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - which-module@2.0.1: - resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} - which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -7987,10 +6946,6 @@ packages: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - wrap-ansi@9.0.2: resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} engines: {node: '>=18'} @@ -7998,22 +6953,6 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - write-file-atomic@4.0.2: - resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - - ws@7.5.10: - resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - ws@8.18.0: resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} engines: {node: '>=10.0.0'} @@ -8073,9 +7012,6 @@ packages: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} - y18n@4.0.3: - resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} - y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -8095,26 +7031,10 @@ packages: engines: {node: '>= 14.6'} hasBin: true - yargs-parser@18.1.3: - resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} - engines: {node: '>=6'} - - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - yargs-parser@22.0.0: resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==} engines: {node: ^20.19.0 || ^22.12.0 || >=23} - yargs@15.4.1: - resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} - engines: {node: '>=8'} - - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} - yargs@18.0.0: resolution: {integrity: sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==} engines: {node: ^20.19.0 || ^22.12.0 || >=23} @@ -8154,24 +7074,6 @@ packages: zod@4.3.6: resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} - zustand@5.0.3: - resolution: {integrity: sha512-14fwWQtU3pH4dE0dOpdMiWjddcH+QzKIgk1cl8epwSE7yag43k/AD/m4L6+K7DytAOr9gGBe3/EXj9g7cdostg==} - engines: {node: '>=12.20.0'} - peerDependencies: - '@types/react': '>=18.0.0' - immer: '>=9.0.6' - react: '>=18.0.0' - use-sync-external-store: '>=1.2.0' - peerDependenciesMeta: - '@types/react': - optional: true - immer: - optional: true - react: - optional: true - use-sync-external-store: - optional: true - snapshots: '@acemir/cssom@0.9.31': {} @@ -8190,7 +7092,8 @@ snapshots: '@adguard/css-tokenizer@1.2.0': {} - '@adraffy/ens-normalize@1.11.1': {} + '@adraffy/ens-normalize@1.11.1': + optional: true '@ai-sdk/provider-utils@2.2.8(zod@3.25.76)': dependencies: @@ -8335,20 +7238,20 @@ snapshots: '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 - '@analogjs/vite-plugin-angular@2.3.1(@angular-devkit/build-angular@21.2.2(7be6a489bbb391d0a6ab02651015a939))(@angular/build@21.2.2(16a6bc83b7bda0d780370f903e1c8c0c))': + '@analogjs/vite-plugin-angular@2.3.1(@angular-devkit/build-angular@21.2.2(245143a37067391f22ce325c79ecab3d))(@angular/build@21.2.2(9c769108c8e053241f2b6d3d1c79d9f5))': dependencies: tinyglobby: 0.2.15 ts-morph: 21.0.1 optionalDependencies: - '@angular-devkit/build-angular': 21.2.2(7be6a489bbb391d0a6ab02651015a939) - '@angular/build': 21.2.2(16a6bc83b7bda0d780370f903e1c8c0c) + '@angular-devkit/build-angular': 21.2.2(245143a37067391f22ce325c79ecab3d) + '@angular/build': 21.2.2(9c769108c8e053241f2b6d3d1c79d9f5) - '@analogjs/vitest-angular@2.3.1(@analogjs/vite-plugin-angular@2.3.1(@angular-devkit/build-angular@21.2.2(7be6a489bbb391d0a6ab02651015a939))(@angular/build@21.2.2(16a6bc83b7bda0d780370f903e1c8c0c)))(@angular-devkit/architect@0.2102.2(chokidar@5.0.0))(@angular-devkit/schematics@21.2.2(chokidar@5.0.0))(vitest@4.1.0(@opentelemetry/api@1.9.1)(@types/node@25.5.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)))': + '@analogjs/vitest-angular@2.3.1(@analogjs/vite-plugin-angular@2.3.1(@angular-devkit/build-angular@21.2.2(245143a37067391f22ce325c79ecab3d))(@angular/build@21.2.2(9c769108c8e053241f2b6d3d1c79d9f5)))(@angular-devkit/architect@0.2102.2(chokidar@5.0.0))(@angular-devkit/schematics@21.2.2(chokidar@5.0.0))(vitest@4.1.0(@opentelemetry/api@1.9.1)(@types/node@25.5.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@7.3.2(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)))': dependencies: - '@analogjs/vite-plugin-angular': 2.3.1(@angular-devkit/build-angular@21.2.2(7be6a489bbb391d0a6ab02651015a939))(@angular/build@21.2.2(16a6bc83b7bda0d780370f903e1c8c0c)) + '@analogjs/vite-plugin-angular': 2.3.1(@angular-devkit/build-angular@21.2.2(245143a37067391f22ce325c79ecab3d))(@angular/build@21.2.2(9c769108c8e053241f2b6d3d1c79d9f5)) '@angular-devkit/architect': 0.2102.2(chokidar@5.0.0) '@angular-devkit/schematics': 21.2.2(chokidar@5.0.0) - vitest: 4.1.0(@opentelemetry/api@1.9.1)(@types/node@25.5.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)) + vitest: 4.1.0(@opentelemetry/api@1.9.1)(@types/node@25.5.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@7.3.2(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)) '@angular-devkit/architect@0.2102.2(chokidar@5.0.0)': dependencies: @@ -8357,13 +7260,13 @@ snapshots: transitivePeerDependencies: - chokidar - '@angular-devkit/build-angular@21.2.2(7be6a489bbb391d0a6ab02651015a939)': + '@angular-devkit/build-angular@21.2.2(245143a37067391f22ce325c79ecab3d)': dependencies: '@ampproject/remapping': 2.3.0 '@angular-devkit/architect': 0.2102.2(chokidar@5.0.0) '@angular-devkit/build-webpack': 0.2102.2(chokidar@5.0.0)(webpack-dev-server@5.2.3(bufferutil@4.1.0)(tslib@2.8.1)(utf-8-validate@6.0.6)(webpack@5.105.2(esbuild@0.27.3)))(webpack@5.105.2(esbuild@0.27.3)) '@angular-devkit/core': 21.2.2(chokidar@5.0.0) - '@angular/build': 21.2.2(dc90963ec9efa68613901ca3982cf632) + '@angular/build': 21.2.2(fee26a3da759271203c7253fd8d8948f) '@angular/compiler-cli': 21.2.7(@angular/compiler@21.2.7)(typescript@6.0.2) '@babel/core': 7.29.0 '@babel/generator': 7.29.1 @@ -8394,7 +7297,7 @@ snapshots: mini-css-extract-plugin: 2.10.0(webpack@5.105.2(esbuild@0.27.3)) open: 11.0.0 ora: 9.3.0 - picomatch: 4.0.3 + picomatch: 4.0.4 piscina: 5.1.4 postcss: 8.5.6 postcss-loader: 8.2.0(postcss@8.5.6)(typescript@6.0.2)(webpack@5.105.2(esbuild@0.27.3)) @@ -8460,7 +7363,7 @@ snapshots: ajv: 8.18.0 ajv-formats: 3.0.1(ajv@8.18.0) jsonc-parser: 3.3.1 - picomatch: 4.0.3 + picomatch: 4.0.4 rxjs: 7.8.2 source-map: 0.7.6 optionalDependencies: @@ -8546,7 +7449,7 @@ snapshots: '@angular/core': 21.2.7(@angular/compiler@21.2.7)(rxjs@7.8.2) tslib: 2.8.1 - '@angular/build@21.2.2(16a6bc83b7bda0d780370f903e1c8c0c)': + '@angular/build@21.2.2(9c769108c8e053241f2b6d3d1c79d9f5)': dependencies: '@ampproject/remapping': 2.3.0 '@angular-devkit/architect': 0.2102.2(chokidar@5.0.0) @@ -8556,7 +7459,7 @@ snapshots: '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-split-export-declaration': 7.24.7 '@inquirer/confirm': 5.1.21(@types/node@25.5.0) - '@vitejs/plugin-basic-ssl': 2.1.4(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)) + '@vitejs/plugin-basic-ssl': 2.1.4(vite@7.3.2(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)) beasties: 0.4.1 browserslist: 4.28.1 esbuild: 0.27.3 @@ -8567,7 +7470,7 @@ snapshots: magic-string: 0.30.21 mrmime: 2.0.1 parse5-html-rewriting-stream: 8.0.0 - picomatch: 4.0.3 + picomatch: 4.0.4 piscina: 5.1.4 rolldown: 1.0.0-rc.4 sass: 1.97.3 @@ -8576,8 +7479,8 @@ snapshots: tinyglobby: 0.2.15 tslib: 2.8.1 typescript: 6.0.2 - undici: 7.22.0 - vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) + undici: 7.24.4 + vite: 7.3.2(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) watchpack: 2.5.1 optionalDependencies: '@angular/core': 21.2.7(@angular/compiler@21.2.7)(rxjs@7.8.2) @@ -8589,7 +7492,7 @@ snapshots: lmdb: 3.5.1 postcss: 8.5.8 tailwindcss: 4.2.1 - vitest: 4.1.0(@opentelemetry/api@1.9.1)(@types/node@25.5.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)) + vitest: 4.1.0(@opentelemetry/api@1.9.1)(@types/node@25.5.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@7.3.2(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)) transitivePeerDependencies: - '@types/node' - chokidar @@ -8604,7 +7507,7 @@ snapshots: - yaml optional: true - '@angular/build@21.2.2(dc90963ec9efa68613901ca3982cf632)': + '@angular/build@21.2.2(fee26a3da759271203c7253fd8d8948f)': dependencies: '@ampproject/remapping': 2.3.0 '@angular-devkit/architect': 0.2102.2(chokidar@5.0.0) @@ -8614,7 +7517,7 @@ snapshots: '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-split-export-declaration': 7.24.7 '@inquirer/confirm': 5.1.21(@types/node@25.5.0) - '@vitejs/plugin-basic-ssl': 2.1.4(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)) + '@vitejs/plugin-basic-ssl': 2.1.4(vite@7.3.2(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)) beasties: 0.4.1 browserslist: 4.28.1 esbuild: 0.27.3 @@ -8625,7 +7528,7 @@ snapshots: magic-string: 0.30.21 mrmime: 2.0.1 parse5-html-rewriting-stream: 8.0.0 - picomatch: 4.0.3 + picomatch: 4.0.4 piscina: 5.1.4 rolldown: 1.0.0-rc.4 sass: 1.97.3 @@ -8634,8 +7537,8 @@ snapshots: tinyglobby: 0.2.15 tslib: 2.8.1 typescript: 6.0.2 - undici: 7.22.0 - vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) + undici: 7.24.4 + vite: 7.3.2(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) watchpack: 2.5.1 optionalDependencies: '@angular/core': 21.2.7(@angular/compiler@21.2.7)(rxjs@7.8.2) @@ -8647,7 +7550,7 @@ snapshots: lmdb: 3.5.1 postcss: 8.5.6 tailwindcss: 4.2.1 - vitest: 4.1.0(@opentelemetry/api@1.9.1)(@types/node@25.5.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)) + vitest: 4.1.0(@opentelemetry/api@1.9.1)(@types/node@25.5.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@7.3.2(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)) transitivePeerDependencies: - '@types/node' - chokidar @@ -9031,134 +7934,64 @@ snapshots: dependencies: '@babel/core': 7.29.0 - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.29.0)': + '@babel/plugin-syntax-import-assertions@7.28.6(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.29.0)': + '@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.29.0)': + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.29.0)': + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-import-assertions@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-async-generator-functions@7.29.0(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0) + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color - '@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-async-to-generator@7.28.6(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 + '@babel/helper-module-imports': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.29.0)': + '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.29.0)': + '@babel/plugin-transform-block-scoping@7.28.6(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.29.0)': + '@babel/plugin-transform-class-properties@7.28.6(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-async-generator-functions@7.29.0(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0) - '@babel/traverse': 7.29.0 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-async-to-generator@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-module-imports': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-block-scoping@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-class-properties@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) - '@babel/helper-plugin-utils': 7.28.6 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-class-static-block@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-class-static-block@7.28.6(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) @@ -9576,29 +8409,9 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 - '@base-org/account@2.0.1(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.6.0(react@19.2.4))(utf-8-validate@6.0.6)(zod@4.3.6)': - dependencies: - '@noble/hashes': 1.4.0 - clsx: 1.2.1 - eventemitter3: 5.0.1 - idb-keyval: 6.2.1 - ox: 0.6.9(typescript@6.0.2)(zod@4.3.6) - preact: 10.24.2 - viem: 2.47.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6)(zod@4.3.6) - zustand: 5.0.3(@types/react@19.2.14)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)) - transitivePeerDependencies: - - '@types/react' - - bufferutil - - immer - - react - - typescript - - use-sync-external-store - - utf-8-validate - - zod - '@bcoe/v8-coverage@1.0.2': {} - '@better-auth/core@1.5.6(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260317.1)(@opentelemetry/api@1.9.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.2)(kysely@0.28.14)(nanostores@1.2.0)': + '@better-auth/core@1.5.6(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260317.1)(@opentelemetry/api@1.9.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.1)(kysely@0.28.14)(nanostores@1.2.0)': dependencies: '@better-auth/utils': 0.3.1 '@better-fetch/fetch': 1.1.21 @@ -9606,7 +8419,7 @@ snapshots: '@opentelemetry/semantic-conventions': 1.40.0 '@standard-schema/spec': 1.1.0 better-call: 1.3.2(zod@4.3.6) - jose: 6.2.2 + jose: 6.2.1 kysely: 0.28.14 nanostores: 1.2.0 zod: 4.3.6 @@ -9615,31 +8428,31 @@ snapshots: '@better-auth/drizzle-adapter@1.5.6(@better-auth/core@1.5.6(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260317.1)(@opentelemetry/api@1.9.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.2)(kysely@0.28.14)(nanostores@1.2.0))(@better-auth/utils@0.3.1)': dependencies: - '@better-auth/core': 1.5.6(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260317.1)(@opentelemetry/api@1.9.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.2)(kysely@0.28.14)(nanostores@1.2.0) + '@better-auth/core': 1.5.6(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260317.1)(@opentelemetry/api@1.9.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.1)(kysely@0.28.14)(nanostores@1.2.0) '@better-auth/utils': 0.3.1 '@better-auth/kysely-adapter@1.5.6(@better-auth/core@1.5.6(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260317.1)(@opentelemetry/api@1.9.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.2)(kysely@0.28.14)(nanostores@1.2.0))(@better-auth/utils@0.3.1)(kysely@0.28.14)': dependencies: - '@better-auth/core': 1.5.6(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260317.1)(@opentelemetry/api@1.9.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.2)(kysely@0.28.14)(nanostores@1.2.0) + '@better-auth/core': 1.5.6(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260317.1)(@opentelemetry/api@1.9.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.1)(kysely@0.28.14)(nanostores@1.2.0) '@better-auth/utils': 0.3.1 optionalDependencies: kysely: 0.28.14 '@better-auth/memory-adapter@1.5.6(@better-auth/core@1.5.6(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260317.1)(@opentelemetry/api@1.9.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.2)(kysely@0.28.14)(nanostores@1.2.0))(@better-auth/utils@0.3.1)': dependencies: - '@better-auth/core': 1.5.6(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260317.1)(@opentelemetry/api@1.9.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.2)(kysely@0.28.14)(nanostores@1.2.0) + '@better-auth/core': 1.5.6(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260317.1)(@opentelemetry/api@1.9.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.1)(kysely@0.28.14)(nanostores@1.2.0) '@better-auth/utils': 0.3.1 '@better-auth/mongo-adapter@1.5.6(@better-auth/core@1.5.6(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260317.1)(@opentelemetry/api@1.9.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.2)(kysely@0.28.14)(nanostores@1.2.0))(@better-auth/utils@0.3.1)(mongodb@7.1.0(socks@2.8.7))': dependencies: - '@better-auth/core': 1.5.6(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260317.1)(@opentelemetry/api@1.9.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.2)(kysely@0.28.14)(nanostores@1.2.0) + '@better-auth/core': 1.5.6(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260317.1)(@opentelemetry/api@1.9.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.1)(kysely@0.28.14)(nanostores@1.2.0) '@better-auth/utils': 0.3.1 optionalDependencies: mongodb: 7.1.0(socks@2.8.7) '@better-auth/prisma-adapter@1.5.6(@better-auth/core@1.5.6(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260317.1)(@opentelemetry/api@1.9.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.2)(kysely@0.28.14)(nanostores@1.2.0))(@better-auth/utils@0.3.1)(@prisma/client@7.5.0(prisma@7.5.0(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2))(typescript@6.0.2))(prisma@7.5.0(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2))': dependencies: - '@better-auth/core': 1.5.6(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260317.1)(@opentelemetry/api@1.9.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.2)(kysely@0.28.14)(nanostores@1.2.0) + '@better-auth/core': 1.5.6(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260317.1)(@opentelemetry/api@1.9.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.1)(kysely@0.28.14)(nanostores@1.2.0) '@better-auth/utils': 0.3.1 optionalDependencies: '@prisma/client': 7.5.0(prisma@7.5.0(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2))(typescript@6.0.2) @@ -9647,7 +8460,7 @@ snapshots: '@better-auth/telemetry@1.5.6(@better-auth/core@1.5.6(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260317.1)(@opentelemetry/api@1.9.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.2)(kysely@0.28.14)(nanostores@1.2.0))': dependencies: - '@better-auth/core': 1.5.6(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260317.1)(@opentelemetry/api@1.9.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.2)(kysely@0.28.14)(nanostores@1.2.0) + '@better-auth/core': 1.5.6(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260317.1)(@opentelemetry/api@1.9.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.1)(kysely@0.28.14)(nanostores@1.2.0) '@better-auth/utils': 0.3.1 '@better-fetch/fetch': 1.1.21 @@ -9665,62 +8478,17 @@ snapshots: dependencies: '@chevrotain/gast': 10.5.0 '@chevrotain/types': 10.5.0 - lodash: 4.17.21 + lodash: 4.18.1 '@chevrotain/gast@10.5.0': dependencies: '@chevrotain/types': 10.5.0 - lodash: 4.17.21 + lodash: 4.18.1 '@chevrotain/types@10.5.0': {} '@chevrotain/utils@10.5.0': {} - '@clerk/clerk-js@6.3.0(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6))(@types/react@19.2.14)(bs58@5.0.0)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-dom@19.2.4(react@19.2.4))(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.6.0(react@19.2.4))(utf-8-validate@6.0.6)(zod@4.3.6)': - dependencies: - '@base-org/account': 2.0.1(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@6.0.2)(use-sync-external-store@1.6.0(react@19.2.4))(utf-8-validate@6.0.6)(zod@4.3.6) - '@clerk/shared': 4.3.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@coinbase/wallet-sdk': 4.3.0 - '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6)) - '@solana/wallet-adapter-react': 0.15.39(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6))(bs58@5.0.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(react@19.2.4)(typescript@6.0.2) - '@solana/wallet-standard': 1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6))(bs58@5.0.0)(react@19.2.4) - '@stripe/stripe-js': 5.6.0 - '@swc/helpers': 0.5.17 - '@tanstack/query-core': 5.90.16 - '@wallet-standard/core': 1.1.1 - '@zxcvbn-ts/core': 3.0.4 - '@zxcvbn-ts/language-common': 3.0.4 - alien-signals: 2.0.6 - browser-tabs-lock: 1.3.0 - core-js: 3.47.0 - crypto-js: 4.2.0 - dequal: 2.0.3 - transitivePeerDependencies: - - '@solana/web3.js' - - '@types/react' - - bs58 - - bufferutil - - fastestsmallesttextencoderdecoder - - immer - - react - - react-dom - - react-native - - typescript - - use-sync-external-store - - utf-8-validate - - zod - - '@clerk/shared@4.3.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@tanstack/query-core': 5.90.16 - dequal: 2.0.3 - glob-to-regexp: 0.4.1 - js-cookie: 3.0.5 - std-env: 3.10.0 - optionalDependencies: - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - '@cloudflare/containers@0.1.1': {} '@cloudflare/kv-asset-handler@0.4.2': {} @@ -9755,14 +8523,14 @@ snapshots: optionalDependencies: workerd: 1.20260409.1 - '@cloudflare/vitest-pool-workers@0.14.2(@cloudflare/workers-types@4.20260317.1)(@vitest/runner@4.1.0)(@vitest/snapshot@4.1.0)(bufferutil@4.1.0)(utf-8-validate@6.0.6)(vitest@4.1.0(@opentelemetry/api@1.9.1)(@types/node@25.5.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)))': + '@cloudflare/vitest-pool-workers@0.14.2(@cloudflare/workers-types@4.20260317.1)(@vitest/runner@4.1.0)(@vitest/snapshot@4.1.0)(bufferutil@4.1.0)(utf-8-validate@6.0.6)(vitest@4.1.0(@opentelemetry/api@1.9.1)(@types/node@25.5.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@7.3.2(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)))': dependencies: '@vitest/runner': 4.1.0 '@vitest/snapshot': 4.1.0 cjs-module-lexer: 1.4.3 esbuild: 0.27.3 miniflare: 4.20260405.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) - vitest: 4.1.0(@opentelemetry/api@1.9.1)(@types/node@25.5.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)) + vitest: 4.1.0(@opentelemetry/api@1.9.1)(@types/node@25.5.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@7.3.2(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)) wrangler: 4.81.0(@cloudflare/workers-types@4.20260317.1)(bufferutil@4.1.0)(utf-8-validate@6.0.6) zod: 3.25.76 transitivePeerDependencies: @@ -9802,13 +8570,6 @@ snapshots: '@cloudflare/workers-types@4.20260317.1': {} - '@coinbase/wallet-sdk@4.3.0': - dependencies: - '@noble/hashes': 1.8.0 - clsx: 1.2.1 - eventemitter3: 5.0.4 - preact: 10.29.0 - '@cspotcode/source-map-support@0.8.1': dependencies: '@jridgewell/trace-mapping': 0.3.9 @@ -9994,30 +8755,26 @@ snapshots: '@harperfast/extended-iterable@1.0.3': optional: true - '@hono/node-server@1.19.11(hono@4.12.8)': + '@hono/node-server@1.19.13(hono@4.12.12)': dependencies: - hono: 4.12.8 + hono: 4.12.12 - '@hono/node-server@1.19.9(hono@4.11.4)': - dependencies: - hono: 4.11.4 - - '@hono/zod-openapi@1.2.2(hono@4.12.8)(zod@4.3.6)': + '@hono/zod-openapi@1.2.2(hono@4.12.12)(zod@4.3.6)': dependencies: '@asteasolutions/zod-to-openapi': 8.5.0(zod@4.3.6) - '@hono/zod-validator': 0.7.6(hono@4.12.8)(zod@4.3.6) - hono: 4.12.8 + '@hono/zod-validator': 0.7.6(hono@4.12.12)(zod@4.3.6) + hono: 4.12.12 openapi3-ts: 4.5.0 zod: 4.3.6 - '@hono/zod-validator@0.4.3(hono@4.12.8)(zod@4.3.6)': + '@hono/zod-validator@0.4.3(hono@4.12.12)(zod@4.3.6)': dependencies: - hono: 4.12.8 + hono: 4.12.12 zod: 4.3.6 - '@hono/zod-validator@0.7.6(hono@4.12.8)(zod@4.3.6)': + '@hono/zod-validator@0.7.6(hono@4.12.12)(zod@4.3.6)': dependencies: - hono: 4.12.8 + hono: 4.12.12 zod: 4.3.6 '@humanfs/core@0.19.1': {} @@ -10256,71 +9013,8 @@ snapshots: dependencies: minipass: 7.1.3 - '@isaacs/ttlcache@1.4.1': {} - - '@istanbuljs/load-nyc-config@1.1.0': - dependencies: - camelcase: 5.3.1 - find-up: 4.1.0 - get-package-type: 0.1.0 - js-yaml: 3.14.2 - resolve-from: 5.0.0 - '@istanbuljs/schema@0.1.3': {} - '@jest/create-cache-key-function@29.7.0': - dependencies: - '@jest/types': 29.6.3 - - '@jest/environment@29.7.0': - dependencies: - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 25.5.0 - jest-mock: 29.7.0 - - '@jest/fake-timers@29.7.0': - dependencies: - '@jest/types': 29.6.3 - '@sinonjs/fake-timers': 10.3.0 - '@types/node': 25.5.0 - jest-message-util: 29.7.0 - jest-mock: 29.7.0 - jest-util: 29.7.0 - - '@jest/schemas@29.6.3': - dependencies: - '@sinclair/typebox': 0.27.10 - - '@jest/transform@29.7.0': - dependencies: - '@babel/core': 7.29.0 - '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.31 - babel-plugin-istanbul: 6.1.1 - chalk: 4.1.2 - convert-source-map: 2.0.0 - fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - micromatch: 4.0.8 - pirates: 4.0.7 - slash: 3.0.0 - write-file-atomic: 4.0.2 - transitivePeerDependencies: - - supports-color - - '@jest/types@29.6.3': - dependencies: - '@jest/schemas': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 25.5.0 - '@types/yargs': 17.0.35 - chalk: 4.1.2 - '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -10512,7 +9206,7 @@ snapshots: '@modelcontextprotocol/sdk@1.26.0(@cfworker/json-schema@4.1.1)(zod@4.3.6)': dependencies: - '@hono/node-server': 1.19.11(hono@4.12.8) + '@hono/node-server': 1.19.13(hono@4.12.12) ajv: 8.18.0 ajv-formats: 3.0.1(ajv@8.18.0) content-type: 1.0.5 @@ -10522,7 +9216,7 @@ snapshots: eventsource-parser: 3.0.6 express: 5.2.1 express-rate-limit: 8.3.1(express@5.2.1) - hono: 4.12.8 + hono: 4.12.12 jose: 6.2.2 json-schema-typed: 8.0.2 pkce-challenge: 5.0.1 @@ -10536,7 +9230,7 @@ snapshots: '@modelcontextprotocol/sdk@1.27.1(@cfworker/json-schema@4.1.1)(zod@3.25.76)': dependencies: - '@hono/node-server': 1.19.11(hono@4.12.8) + '@hono/node-server': 1.19.13(hono@4.12.12) ajv: 8.18.0 ajv-formats: 3.0.1(ajv@8.18.0) content-type: 1.0.5 @@ -10546,7 +9240,7 @@ snapshots: eventsource-parser: 3.0.6 express: 5.2.1 express-rate-limit: 8.3.1(express@5.2.1) - hono: 4.12.8 + hono: 4.12.12 jose: 6.2.1 json-schema-typed: 8.0.2 pkce-challenge: 5.0.1 @@ -10560,7 +9254,7 @@ snapshots: '@modelcontextprotocol/sdk@1.27.1(@cfworker/json-schema@4.1.1)(zod@4.3.6)': dependencies: - '@hono/node-server': 1.19.11(hono@4.12.8) + '@hono/node-server': 1.19.13(hono@4.12.12) ajv: 8.18.0 ajv-formats: 3.0.1(ajv@8.18.0) content-type: 1.0.5 @@ -10570,7 +9264,7 @@ snapshots: eventsource-parser: 3.0.6 express: 5.2.1 express-rate-limit: 8.3.1(express@5.2.1) - hono: 4.12.8 + hono: 4.12.12 jose: 6.2.1 json-schema-typed: 8.0.2 pkce-challenge: 5.0.1 @@ -10699,21 +9393,25 @@ snapshots: typescript: 6.0.2 webpack: 5.105.2(esbuild@0.27.3) - '@noble/ciphers@1.3.0': {} + '@noble/ciphers@1.3.0': + optional: true '@noble/ciphers@2.1.1': {} '@noble/curves@1.9.1': dependencies: '@noble/hashes': 1.8.0 + optional: true '@noble/curves@1.9.7': dependencies: '@noble/hashes': 1.8.0 + optional: true '@noble/hashes@1.4.0': {} - '@noble/hashes@1.8.0': {} + '@noble/hashes@1.8.0': + optional: true '@noble/hashes@2.0.1': {} @@ -10837,7 +9535,7 @@ snapshots: detect-libc: 2.1.2 is-glob: 4.0.3 node-addon-api: 7.1.1 - picomatch: 4.0.3 + picomatch: 4.0.4 optionalDependencies: '@parcel/watcher-android-arm64': 2.5.6 '@parcel/watcher-darwin-arm64': 2.5.6 @@ -10988,7 +9686,7 @@ snapshots: dependencies: c12: 3.1.0 deepmerge-ts: 7.1.5 - effect: 3.18.4 + effect: 3.20.0 empathic: 2.0.0 transitivePeerDependencies: - magicast @@ -11002,13 +9700,13 @@ snapshots: '@electric-sql/pglite': 0.3.15 '@electric-sql/pglite-socket': 0.0.20(@electric-sql/pglite@0.3.15) '@electric-sql/pglite-tools': 0.2.20(@electric-sql/pglite@0.3.15) - '@hono/node-server': 1.19.9(hono@4.11.4) + '@hono/node-server': 1.19.13(hono@4.12.12) '@mrleebo/prisma-ast': 0.13.1 '@prisma/get-platform': 7.2.0 '@prisma/query-plan-executor': 7.2.0 foreground-child: 3.3.1 get-port-please: 3.2.0 - hono: 4.11.4 + hono: 4.12.12 http-status-codes: 2.3.0 pathe: 2.0.3 proper-lockfile: 4.1.2 @@ -11054,82 +9752,6 @@ snapshots: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - '@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))': - dependencies: - merge-options: 3.0.4 - react-native: 0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6) - optional: true - - '@react-native/assets-registry@0.84.1': {} - - '@react-native/codegen@0.84.1(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/parser': 7.29.2 - hermes-parser: 0.32.0 - invariant: 2.2.4 - nullthrows: 1.1.1 - tinyglobby: 0.2.15 - yargs: 17.7.2 - - '@react-native/community-cli-plugin@0.84.1(bufferutil@4.1.0)(utf-8-validate@6.0.6)': - dependencies: - '@react-native/dev-middleware': 0.84.1(bufferutil@4.1.0)(utf-8-validate@6.0.6) - debug: 4.4.3 - invariant: 2.2.4 - metro: 0.83.5(bufferutil@4.1.0)(utf-8-validate@6.0.6) - metro-config: 0.83.5(bufferutil@4.1.0)(utf-8-validate@6.0.6) - metro-core: 0.83.5 - semver: 7.7.4 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - '@react-native/debugger-frontend@0.84.1': {} - - '@react-native/debugger-shell@0.84.1': - dependencies: - cross-spawn: 7.0.6 - debug: 4.4.3 - fb-dotslash: 0.5.8 - transitivePeerDependencies: - - supports-color - - '@react-native/dev-middleware@0.84.1(bufferutil@4.1.0)(utf-8-validate@6.0.6)': - dependencies: - '@isaacs/ttlcache': 1.4.1 - '@react-native/debugger-frontend': 0.84.1 - '@react-native/debugger-shell': 0.84.1 - chrome-launcher: 0.15.2 - chromium-edge-launcher: 0.2.0 - connect: 3.7.0 - debug: 4.4.3 - invariant: 2.2.4 - nullthrows: 1.1.1 - open: 7.4.2 - serve-static: 1.16.3 - ws: 7.5.10(bufferutil@4.1.0)(utf-8-validate@6.0.6) - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - '@react-native/gradle-plugin@0.84.1': {} - - '@react-native/js-polyfills@0.84.1': {} - - '@react-native/normalize-colors@0.84.1': {} - - '@react-native/virtualized-lists@0.84.1(@types/react@19.2.14)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(react@19.2.4)': - dependencies: - invariant: 2.2.4 - nullthrows: 1.1.1 - react: 19.2.4 - react-native: 0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6) - optionalDependencies: - '@types/react': 19.2.14 - '@rolldown/binding-android-arm64@1.0.0-rc.4': optional: true @@ -11256,18 +9878,21 @@ snapshots: transitivePeerDependencies: - chokidar - '@scure/base@1.2.6': {} + '@scure/base@1.2.6': + optional: true '@scure/bip32@1.7.0': dependencies: - '@noble/curves': 1.9.1 + '@noble/curves': 1.9.7 '@noble/hashes': 1.8.0 '@scure/base': 1.2.6 + optional: true '@scure/bip39@1.6.0': dependencies: '@noble/hashes': 1.8.0 '@scure/base': 1.2.6 + optional: true '@sentry-internal/browser-utils@10.43.0': dependencies: @@ -11386,252 +10011,14 @@ snapshots: '@sigstore/core': 3.1.0 '@sigstore/protobuf-specs': 0.5.0 - '@sinclair/typebox@0.27.10': {} - '@sindresorhus/is@7.2.0': {} - '@sinonjs/commons@3.0.1': - dependencies: - type-detect: 4.0.8 - - '@sinonjs/fake-timers@10.3.0': - dependencies: - '@sinonjs/commons': 3.0.1 - - '@solana-mobile/mobile-wallet-adapter-protocol-web3js@2.2.5(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6))(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(react@19.2.4)(typescript@6.0.2)': - dependencies: - '@solana-mobile/mobile-wallet-adapter-protocol': 2.2.5(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6))(bs58@5.0.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(react@19.2.4)(typescript@6.0.2) - '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6) - bs58: 5.0.0 - js-base64: 3.7.8 - transitivePeerDependencies: - - '@solana/wallet-adapter-base' - - fastestsmallesttextencoderdecoder - - react - - react-native - - typescript - - '@solana-mobile/mobile-wallet-adapter-protocol@2.2.5(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6))(bs58@5.0.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(react@19.2.4)(typescript@6.0.2)': - dependencies: - '@solana/codecs-strings': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@6.0.2) - '@solana/wallet-standard': 1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6))(bs58@5.0.0)(react@19.2.4) - '@solana/wallet-standard-util': 1.1.2 - '@wallet-standard/core': 1.1.1 - js-base64: 3.7.8 - react-native: 0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6) - transitivePeerDependencies: - - '@solana/wallet-adapter-base' - - '@solana/web3.js' - - bs58 - - fastestsmallesttextencoderdecoder - - react - - typescript - - '@solana-mobile/wallet-adapter-mobile@2.2.5(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6))(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(react@19.2.4)(typescript@6.0.2)': - dependencies: - '@solana-mobile/mobile-wallet-adapter-protocol-web3js': 2.2.5(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6))(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(react@19.2.4)(typescript@6.0.2) - '@solana-mobile/wallet-standard-mobile': 0.4.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6))(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(react@19.2.4)(typescript@6.0.2) - '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6)) - '@solana/wallet-standard-features': 1.3.0 - '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6) - js-base64: 3.7.8 - optionalDependencies: - '@react-native-async-storage/async-storage': 1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6)) - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - - react - - react-native - - typescript - - '@solana-mobile/wallet-standard-mobile@0.4.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6))(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(react@19.2.4)(typescript@6.0.2)': - dependencies: - '@solana-mobile/mobile-wallet-adapter-protocol': 2.2.5(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6))(bs58@5.0.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(react@19.2.4)(typescript@6.0.2) - '@solana/wallet-standard-chains': 1.1.1 - '@solana/wallet-standard-features': 1.3.0 - '@wallet-standard/base': 1.1.0 - '@wallet-standard/features': 1.1.0 - bs58: 5.0.0 - js-base64: 3.7.8 - qrcode: 1.5.4 - transitivePeerDependencies: - - '@solana/wallet-adapter-base' - - '@solana/web3.js' - - fastestsmallesttextencoderdecoder - - react - - react-native - - typescript - - '@solana/buffer-layout@4.0.1': - dependencies: - buffer: 6.0.3 - - '@solana/codecs-core@2.3.0(typescript@6.0.2)': - dependencies: - '@solana/errors': 2.3.0(typescript@6.0.2) - typescript: 6.0.2 - - '@solana/codecs-core@4.0.0(typescript@6.0.2)': - dependencies: - '@solana/errors': 4.0.0(typescript@6.0.2) - typescript: 6.0.2 - - '@solana/codecs-numbers@2.3.0(typescript@6.0.2)': - dependencies: - '@solana/codecs-core': 2.3.0(typescript@6.0.2) - '@solana/errors': 2.3.0(typescript@6.0.2) - typescript: 6.0.2 - - '@solana/codecs-numbers@4.0.0(typescript@6.0.2)': - dependencies: - '@solana/codecs-core': 4.0.0(typescript@6.0.2) - '@solana/errors': 4.0.0(typescript@6.0.2) - typescript: 6.0.2 - - '@solana/codecs-strings@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@6.0.2)': - dependencies: - '@solana/codecs-core': 4.0.0(typescript@6.0.2) - '@solana/codecs-numbers': 4.0.0(typescript@6.0.2) - '@solana/errors': 4.0.0(typescript@6.0.2) - fastestsmallesttextencoderdecoder: 1.0.22 - typescript: 6.0.2 - - '@solana/errors@2.3.0(typescript@6.0.2)': - dependencies: - chalk: 5.6.2 - commander: 14.0.3 - typescript: 6.0.2 - - '@solana/errors@4.0.0(typescript@6.0.2)': - dependencies: - chalk: 5.6.2 - commander: 14.0.1 - typescript: 6.0.2 - - '@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6))': - dependencies: - '@solana/wallet-standard-features': 1.3.0 - '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6) - '@wallet-standard/base': 1.1.0 - '@wallet-standard/features': 1.1.0 - eventemitter3: 5.0.4 - - '@solana/wallet-adapter-react@0.15.39(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6))(bs58@5.0.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(react@19.2.4)(typescript@6.0.2)': - dependencies: - '@solana-mobile/wallet-adapter-mobile': 2.2.5(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6))(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(react@19.2.4)(typescript@6.0.2) - '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6)) - '@solana/wallet-standard-wallet-adapter-react': 1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6))(bs58@5.0.0)(react@19.2.4) - '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6) - react: 19.2.4 - transitivePeerDependencies: - - bs58 - - fastestsmallesttextencoderdecoder - - react-native - - typescript - - '@solana/wallet-standard-chains@1.1.1': - dependencies: - '@wallet-standard/base': 1.1.0 - - '@solana/wallet-standard-core@1.1.2': - dependencies: - '@solana/wallet-standard-chains': 1.1.1 - '@solana/wallet-standard-features': 1.3.0 - '@solana/wallet-standard-util': 1.1.2 - - '@solana/wallet-standard-features@1.3.0': - dependencies: - '@wallet-standard/base': 1.1.0 - '@wallet-standard/features': 1.1.0 - - '@solana/wallet-standard-util@1.1.2': - dependencies: - '@noble/curves': 1.9.7 - '@solana/wallet-standard-chains': 1.1.1 - '@solana/wallet-standard-features': 1.3.0 - - '@solana/wallet-standard-wallet-adapter-base@1.1.4(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6))(bs58@5.0.0)': - dependencies: - '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6)) - '@solana/wallet-standard-chains': 1.1.1 - '@solana/wallet-standard-features': 1.3.0 - '@solana/wallet-standard-util': 1.1.2 - '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6) - '@wallet-standard/app': 1.1.0 - '@wallet-standard/base': 1.1.0 - '@wallet-standard/features': 1.1.0 - '@wallet-standard/wallet': 1.1.0 - bs58: 5.0.0 - - '@solana/wallet-standard-wallet-adapter-react@1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6))(bs58@5.0.0)(react@19.2.4)': - dependencies: - '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6)) - '@solana/wallet-standard-wallet-adapter-base': 1.1.4(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6))(bs58@5.0.0) - '@wallet-standard/app': 1.1.0 - '@wallet-standard/base': 1.1.0 - react: 19.2.4 - transitivePeerDependencies: - - '@solana/web3.js' - - bs58 - - '@solana/wallet-standard-wallet-adapter@1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6))(bs58@5.0.0)(react@19.2.4)': - dependencies: - '@solana/wallet-standard-wallet-adapter-base': 1.1.4(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6))(bs58@5.0.0) - '@solana/wallet-standard-wallet-adapter-react': 1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6))(bs58@5.0.0)(react@19.2.4) - transitivePeerDependencies: - - '@solana/wallet-adapter-base' - - '@solana/web3.js' - - bs58 - - react - - '@solana/wallet-standard@1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6))(bs58@5.0.0)(react@19.2.4)': - dependencies: - '@solana/wallet-standard-core': 1.1.2 - '@solana/wallet-standard-wallet-adapter': 1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6))(bs58@5.0.0)(react@19.2.4) - transitivePeerDependencies: - - '@solana/wallet-adapter-base' - - '@solana/web3.js' - - bs58 - - react - - '@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6)': - dependencies: - '@babel/runtime': 7.29.2 - '@noble/curves': 1.9.7 - '@noble/hashes': 1.8.0 - '@solana/buffer-layout': 4.0.1 - '@solana/codecs-numbers': 2.3.0(typescript@6.0.2) - agentkeepalive: 4.6.0 - bn.js: 5.2.3 - borsh: 0.7.0 - bs58: 4.0.1 - buffer: 6.0.3 - fast-stable-stringify: 1.0.0 - jayson: 4.3.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) - node-fetch: 2.7.0 - rpc-websockets: 9.3.7 - superstruct: 2.0.2 - transitivePeerDependencies: - - bufferutil - - encoding - - typescript - - utf-8-validate - '@speed-highlight/core@1.2.14': {} '@stablelib/base64@1.0.1': {} '@standard-schema/spec@1.1.0': {} - '@stripe/stripe-js@5.6.0': {} - - '@swc/helpers@0.5.17': - dependencies: - tslib: 2.8.1 - - '@swc/helpers@0.5.20': - dependencies: - tslib: 2.8.1 - '@tailwindcss/node@4.2.1': dependencies: '@jridgewell/remapping': 2.3.5 @@ -11701,8 +10088,6 @@ snapshots: postcss: 8.5.8 tailwindcss: 4.2.1 - '@tanstack/query-core@5.90.16': {} - '@trpc/client@11.15.1(@trpc/server@11.15.1(typescript@6.0.2))(typescript@6.0.2)': dependencies: '@trpc/server': 11.15.1(typescript@6.0.2) @@ -11726,31 +10111,10 @@ snapshots: '@tufjs/canonical-json': 2.0.0 minimatch: 10.2.4 - '@tybys/wasm-util@0.10.1': - dependencies: - tslib: 2.8.1 - optional: true - - '@types/babel__core@7.20.5': - dependencies: - '@babel/parser': 7.29.2 - '@babel/types': 7.29.0 - '@types/babel__generator': 7.27.0 - '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.28.0 - - '@types/babel__generator@7.27.0': - dependencies: - '@babel/types': 7.29.0 - - '@types/babel__template@7.4.4': - dependencies: - '@babel/parser': 7.29.2 - '@babel/types': 7.29.0 - - '@types/babel__traverse@7.28.0': + '@tybys/wasm-util@0.10.1': dependencies: - '@babel/types': 7.29.0 + tslib: 2.8.1 + optional: true '@types/body-parser@1.19.6': dependencies: @@ -11807,26 +10171,12 @@ snapshots: '@types/qs': 6.15.0 '@types/serve-static': 1.15.10 - '@types/graceful-fs@4.1.9': - dependencies: - '@types/node': 25.5.0 - '@types/http-errors@2.0.5': {} '@types/http-proxy@1.17.17': dependencies: '@types/node': 25.5.0 - '@types/istanbul-lib-coverage@2.0.6': {} - - '@types/istanbul-lib-report@3.0.3': - dependencies: - '@types/istanbul-lib-coverage': 2.0.6 - - '@types/istanbul-reports@3.0.4': - dependencies: - '@types/istanbul-lib-report': 3.0.3 - '@types/json-schema@7.0.15': {} '@types/lodash@4.17.24': {} @@ -11838,8 +10188,6 @@ snapshots: '@types/node': 25.5.0 form-data: 4.0.5 - '@types/node@12.20.55': {} - '@types/node@18.19.130': dependencies: undici-types: 5.26.5 @@ -11893,10 +10241,6 @@ snapshots: dependencies: '@types/node': 25.5.0 - '@types/stack-utils@2.0.3': {} - - '@types/uuid@10.0.0': {} - '@types/webidl-conversions@7.0.3': optional: true @@ -11905,20 +10249,10 @@ snapshots: '@types/webidl-conversions': 7.0.3 optional: true - '@types/ws@7.4.7': - dependencies: - '@types/node': 25.5.0 - '@types/ws@8.18.1': dependencies: '@types/node': 25.5.0 - '@types/yargs-parser@21.0.3': {} - - '@types/yargs@17.0.35': - dependencies: - '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@8.57.2(@typescript-eslint/parser@8.57.2(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.2))(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.2)': dependencies: '@eslint-community/regexpp': 4.12.2 @@ -12067,11 +10401,11 @@ snapshots: '@typescript-eslint/types': 8.57.2 eslint-visitor-keys: 5.0.1 - '@vitejs/plugin-basic-ssl@2.1.4(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3))': + '@vitejs/plugin-basic-ssl@2.1.4(vite@7.3.2(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3))': dependencies: - vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) - '@vitest/coverage-v8@4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.1)(@types/node@25.5.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)))': + '@vitest/coverage-v8@4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.1)(@types/node@25.5.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@7.3.2(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)))': dependencies: '@bcoe/v8-coverage': 1.0.2 '@vitest/utils': 4.1.0 @@ -12083,7 +10417,7 @@ snapshots: obug: 2.1.1 std-env: 4.0.0 tinyrainbow: 3.1.0 - vitest: 4.1.0(@opentelemetry/api@1.9.1)(@types/node@25.5.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)) + vitest: 4.1.0(@opentelemetry/api@1.9.1)(@types/node@25.5.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@7.3.2(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)) '@vitest/expect@4.1.0': dependencies: @@ -12094,21 +10428,21 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.0(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3))': + '@vitest/mocker@4.1.0(vite@7.3.2(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3))': dependencies: '@vitest/spy': 4.1.0 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) - '@vitest/mocker@4.1.0(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3))': + '@vitest/mocker@4.1.0(vite@7.3.2(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3))': dependencies: '@vitest/spy': 4.1.0 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3) + vite: 7.3.2(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3) '@vitest/pretty-format@4.1.0': dependencies: @@ -12134,33 +10468,6 @@ snapshots: convert-source-map: 2.0.0 tinyrainbow: 3.1.0 - '@wallet-standard/app@1.1.0': - dependencies: - '@wallet-standard/base': 1.1.0 - - '@wallet-standard/base@1.1.0': {} - - '@wallet-standard/core@1.1.1': - dependencies: - '@wallet-standard/app': 1.1.0 - '@wallet-standard/base': 1.1.0 - '@wallet-standard/errors': 0.1.1 - '@wallet-standard/features': 1.1.0 - '@wallet-standard/wallet': 1.1.0 - - '@wallet-standard/errors@0.1.1': - dependencies: - chalk: 5.6.2 - commander: 13.1.0 - - '@wallet-standard/features@1.1.0': - dependencies: - '@wallet-standard/base': 1.1.0 - - '@wallet-standard/wallet@1.1.0': - dependencies: - '@wallet-standard/base': 1.1.0 - '@webassemblyjs/ast@1.14.1': dependencies: '@webassemblyjs/helper-numbers': 1.13.2 @@ -12243,18 +10550,13 @@ snapshots: '@yarnpkg/lockfile@1.1.0': {} - '@zxcvbn-ts/core@3.0.4': - dependencies: - fastest-levenshtein: 1.0.16 - - '@zxcvbn-ts/language-common@3.0.4': {} - abbrev@4.0.0: {} abitype@1.2.3(typescript@6.0.2)(zod@4.3.6): optionalDependencies: typescript: 6.0.2 zod: 4.3.6 + optional: true abort-controller@3.0.0: dependencies: @@ -12397,8 +10699,6 @@ snapshots: '@algolia/requester-fetch': 5.48.1 '@algolia/requester-node-http': 5.48.1 - alien-signals@2.0.6: {} - angular-eslint@21.3.0(@angular/cli@21.2.2(@cfworker/json-schema@4.1.1)(@types/node@25.5.0)(chokidar@5.0.0))(chokidar@5.0.0)(eslint@10.0.3(jiti@2.6.1))(typescript-eslint@8.57.2(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.2))(typescript@6.0.2): dependencies: '@angular-devkit/core': 21.2.2(chokidar@5.0.0) @@ -12418,8 +10718,6 @@ snapshots: - chokidar - supports-color - anser@1.4.10: {} - ansi-colors@4.1.3: {} ansi-escapes@7.3.0: @@ -12436,18 +10734,12 @@ snapshots: dependencies: color-convert: 2.0.1 - ansi-styles@5.2.0: {} - ansi-styles@6.2.3: {} anymatch@3.1.3: dependencies: normalize-path: 3.0.0 - picomatch: 2.3.1 - - argparse@1.0.10: - dependencies: - sprintf-js: 1.0.3 + picomatch: 2.3.2 argparse@2.0.1: {} @@ -12455,8 +10747,6 @@ snapshots: array-flatten@1.1.1: {} - asap@2.0.6: {} - asn1js@3.0.7: dependencies: pvtsutils: 1.3.6 @@ -12486,42 +10776,12 @@ snapshots: axobject-query@4.1.0: {} - babel-jest@29.7.0(@babel/core@7.29.0): - dependencies: - '@babel/core': 7.29.0 - '@jest/transform': 29.7.0 - '@types/babel__core': 7.20.5 - babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.29.0) - chalk: 4.1.2 - graceful-fs: 4.2.11 - slash: 3.0.0 - transitivePeerDependencies: - - supports-color - babel-loader@10.0.0(@babel/core@7.29.0)(webpack@5.105.2(esbuild@0.27.3)): dependencies: '@babel/core': 7.29.0 find-up: 5.0.0 webpack: 5.105.2(esbuild@0.27.3) - babel-plugin-istanbul@6.1.1: - dependencies: - '@babel/helper-plugin-utils': 7.28.6 - '@istanbuljs/load-nyc-config': 1.1.0 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-instrument: 5.2.1 - test-exclude: 6.0.0 - transitivePeerDependencies: - - supports-color - - babel-plugin-jest-hoist@29.6.3: - dependencies: - '@babel/template': 7.28.6 - '@babel/types': 7.29.0 - '@types/babel__core': 7.20.5 - '@types/babel__traverse': 7.28.0 - babel-plugin-polyfill-corejs2@0.4.16(@babel/core@7.29.0): dependencies: '@babel/compat-data': 7.29.0 @@ -12554,47 +10814,10 @@ snapshots: transitivePeerDependencies: - supports-color - babel-plugin-syntax-hermes-parser@0.32.0: - dependencies: - hermes-parser: 0.32.0 - - babel-preset-current-node-syntax@1.2.0(@babel/core@7.29.0): - dependencies: - '@babel/core': 7.29.0 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.29.0) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.29.0) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.29.0) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.29.0) - '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.29.0) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.29.0) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.29.0) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.29.0) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.29.0) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.29.0) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.29.0) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.29.0) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.29.0) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.29.0) - - babel-preset-jest@29.6.3(@babel/core@7.29.0): - dependencies: - '@babel/core': 7.29.0 - babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.2.0(@babel/core@7.29.0) - balanced-match@1.0.2: {} balanced-match@4.0.4: {} - base-x@3.0.11: - dependencies: - safe-buffer: 5.2.1 - - base-x@4.0.1: {} - - base64-js@1.5.1: {} - baseline-browser-mapping@2.10.8: {} batch@0.6.1: {} @@ -12611,9 +10834,9 @@ snapshots: postcss-media-query-parser: 0.2.3 postcss-safe-parser: 7.0.1(postcss@8.5.8) - better-auth@1.5.6(@cloudflare/workers-types@4.20260317.1)(@opentelemetry/api@1.9.1)(@prisma/client@7.5.0(prisma@7.5.0(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2))(typescript@6.0.2))(mongodb@7.1.0(socks@2.8.7))(mysql2@3.15.3)(pg@8.20.0)(prisma@7.5.0(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vitest@4.1.0(@opentelemetry/api@1.9.1)(@types/node@25.5.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3))): + better-auth@1.5.6(@cloudflare/workers-types@4.20260317.1)(@opentelemetry/api@1.9.1)(@prisma/client@7.5.0(prisma@7.5.0(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2))(typescript@6.0.2))(mongodb@7.1.0(socks@2.8.7))(mysql2@3.15.3)(pg@8.20.0)(prisma@7.5.0(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vitest@4.1.0(@opentelemetry/api@1.9.1)(@types/node@25.5.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@7.3.2(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3))): dependencies: - '@better-auth/core': 1.5.6(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260317.1)(@opentelemetry/api@1.9.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.2)(kysely@0.28.14)(nanostores@1.2.0) + '@better-auth/core': 1.5.6(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260317.1)(@opentelemetry/api@1.9.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.1)(kysely@0.28.14)(nanostores@1.2.0) '@better-auth/drizzle-adapter': 1.5.6(@better-auth/core@1.5.6(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260317.1)(@opentelemetry/api@1.9.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.2)(kysely@0.28.14)(nanostores@1.2.0))(@better-auth/utils@0.3.1) '@better-auth/kysely-adapter': 1.5.6(@better-auth/core@1.5.6(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260317.1)(@opentelemetry/api@1.9.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.2)(kysely@0.28.14)(nanostores@1.2.0))(@better-auth/utils@0.3.1)(kysely@0.28.14) '@better-auth/memory-adapter': 1.5.6(@better-auth/core@1.5.6(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260317.1)(@opentelemetry/api@1.9.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.2)(kysely@0.28.14)(nanostores@1.2.0))(@better-auth/utils@0.3.1) @@ -12625,7 +10848,7 @@ snapshots: '@noble/ciphers': 2.1.1 '@noble/hashes': 2.0.1 better-call: 1.3.2(zod@4.3.6) - defu: 6.1.4 + defu: 6.1.5 jose: 6.2.2 kysely: 0.28.14 nanostores: 1.2.0 @@ -12638,7 +10861,7 @@ snapshots: prisma: 7.5.0(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - vitest: 4.1.0(@opentelemetry/api@1.9.1)(@types/node@25.5.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)) + vitest: 4.1.0(@opentelemetry/api@1.9.1)(@types/node@25.5.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@7.3.2(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)) transitivePeerDependencies: - '@cloudflare/workers-types' - '@opentelemetry/api' @@ -12662,8 +10885,6 @@ snapshots: blake3-wasm@2.1.5: {} - bn.js@5.2.3: {} - body-parser@1.20.4: dependencies: bytes: 3.1.2 @@ -12702,18 +10923,7 @@ snapshots: boolbase@1.0.0: {} - borsh@0.7.0: - dependencies: - bn.js: 5.2.3 - bs58: 4.0.1 - text-encoding-utf-8: 1.0.2 - - brace-expansion@1.1.13: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - brace-expansion@2.0.2: + brace-expansion@2.0.3: dependencies: balanced-match: 1.0.2 @@ -12725,10 +10935,6 @@ snapshots: dependencies: fill-range: 7.1.1 - browser-tabs-lock@1.3.0: - dependencies: - lodash: 4.17.23 - browserslist@4.28.1: dependencies: baseline-browser-mapping: 2.10.8 @@ -12737,28 +10943,11 @@ snapshots: node-releases: 2.0.36 update-browserslist-db: 1.2.3(browserslist@4.28.1) - bs58@4.0.1: - dependencies: - base-x: 3.0.11 - - bs58@5.0.0: - dependencies: - base-x: 4.0.1 - - bser@2.1.1: - dependencies: - node-int64: 0.4.0 - bson@7.2.0: optional: true buffer-from@1.1.2: {} - buffer@6.0.3: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - bufferutil@4.1.0: dependencies: node-gyp-build: 4.8.4 @@ -12776,7 +10965,7 @@ snapshots: dependencies: chokidar: 4.0.3 confbox: 0.2.4 - defu: 6.1.4 + defu: 6.1.5 dotenv: 16.6.1 exsolve: 1.0.8 giget: 2.0.0 @@ -12820,19 +11009,12 @@ snapshots: quick-lru: 5.1.1 type-fest: 1.4.0 - camelcase@5.3.1: {} - camelcase@6.3.0: {} caniuse-lite@1.0.30001779: {} chai@6.2.2: {} - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - chalk@5.6.2: {} chardet@2.1.1: {} @@ -12843,7 +11025,7 @@ snapshots: '@chevrotain/gast': 10.5.0 '@chevrotain/types': 10.5.0 '@chevrotain/utils': 10.5.0 - lodash: 4.17.21 + lodash: 4.18.1 regexp-to-ast: 0.5.0 chokidar@3.6.0: @@ -12868,32 +11050,8 @@ snapshots: chownr@3.0.0: {} - chrome-launcher@0.15.2: - dependencies: - '@types/node': 25.5.0 - escape-string-regexp: 4.0.0 - is-wsl: 2.2.0 - lighthouse-logger: 1.4.2 - transitivePeerDependencies: - - supports-color - chrome-trace-event@1.0.4: {} - chromium-edge-launcher@0.2.0: - dependencies: - '@types/node': 25.5.0 - escape-string-regexp: 4.0.0 - is-wsl: 2.2.0 - lighthouse-logger: 1.4.2 - mkdirp: 1.0.4 - rimraf: 3.0.2 - transitivePeerDependencies: - - supports-color - - ci-info@2.0.0: {} - - ci-info@3.9.0: {} - citty@0.1.6: dependencies: consola: 3.4.2 @@ -12915,18 +11073,6 @@ snapshots: cli-width@4.1.0: {} - cliui@6.0.0: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 6.2.0 - - cliui@8.0.1: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - cliui@9.0.1: dependencies: string-width: 7.2.0 @@ -12951,8 +11097,6 @@ snapshots: transitivePeerDependencies: - encoding - clsx@1.2.1: {} - code-block-writer@12.0.0: {} color-convert@2.0.1: @@ -12967,14 +11111,6 @@ snapshots: dependencies: delayed-stream: 1.0.0 - commander@12.1.0: {} - - commander@13.1.0: {} - - commander@14.0.1: {} - - commander@14.0.3: {} - commander@2.20.3: {} compressible@2.0.18: @@ -12993,21 +11129,10 @@ snapshots: transitivePeerDependencies: - supports-color - concat-map@0.0.1: {} - confbox@0.2.4: {} connect-history-api-fallback@2.0.0: {} - connect@3.7.0: - dependencies: - debug: 2.6.9 - finalhandler: 1.1.2 - parseurl: 1.3.3 - utils-merge: 1.0.1 - transitivePeerDependencies: - - supports-color - consola@3.4.2: {} content-disposition@0.5.4: @@ -13039,7 +11164,7 @@ snapshots: glob-parent: 6.0.2 normalize-path: 3.0.0 schema-utils: 4.3.3 - serialize-javascript: 7.0.4 + serialize-javascript: 7.0.5 tinyglobby: 0.2.15 webpack: 5.105.2(esbuild@0.27.3) @@ -13049,8 +11174,6 @@ snapshots: core-js-pure@3.48.0: {} - core-js@3.47.0: {} - core-util-is@1.0.3: {} cors@2.8.6: @@ -13077,8 +11200,6 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - crypto-js@4.2.0: {} - css-loader@7.1.3(webpack@5.105.2(esbuild@0.27.3)): dependencies: icss-utils: 5.1.0(postcss@8.5.8) @@ -13133,8 +11254,6 @@ snapshots: dependencies: ms: 2.1.3 - decamelize@1.2.0: {} - decimal.js@10.6.0: {} deep-is@0.1.4: {} @@ -13150,9 +11269,7 @@ snapshots: define-lazy-prop@3.0.0: {} - defu@6.1.4: {} - - delay@5.0.0: {} + defu@6.1.5: {} delayed-stream@1.0.0: {} @@ -13174,8 +11291,6 @@ snapshots: diff-match-patch@1.0.5: {} - dijkstrajs@1.0.3: {} - dns-packet@5.6.1: dependencies: '@leichtgewicht/ip-codec': 2.0.5 @@ -13208,7 +11323,7 @@ snapshots: ee-first@1.1.1: {} - effect@3.18.4: + effect@3.20.0: dependencies: '@standard-schema/spec': 1.1.0 fast-check: 3.23.2 @@ -13223,8 +11338,6 @@ snapshots: empathic@2.0.0: {} - encodeurl@1.0.2: {} - encodeurl@2.0.0: {} enhanced-resolve@5.20.0: @@ -13255,10 +11368,6 @@ snapshots: error-stack-parser-es@1.0.5: {} - error-stack-parser@2.1.4: - dependencies: - stackframe: 1.3.4 - es-define-property@1.0.1: {} es-errors@1.3.0: {} @@ -13276,12 +11385,6 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.2 - es6-promise@4.2.8: {} - - es6-promisify@5.0.0: - dependencies: - es6-promise: 4.2.8 - esbuild-wasm@0.27.3: {} esbuild@0.27.3: @@ -13317,8 +11420,6 @@ snapshots: escape-html@1.0.3: {} - escape-string-regexp@2.0.0: {} - escape-string-regexp@4.0.0: {} eslint-scope@5.1.1: @@ -13380,8 +11481,6 @@ snapshots: acorn-jsx: 5.3.2(acorn@8.16.0) eslint-visitor-keys: 5.0.1 - esprima@4.0.1: {} - esquery@1.7.0: dependencies: estraverse: 5.3.0 @@ -13408,7 +11507,8 @@ snapshots: eventemitter3@4.0.7: {} - eventemitter3@5.0.1: {} + eventemitter3@5.0.1: + optional: true eventemitter3@5.0.4: {} @@ -13450,7 +11550,7 @@ snapshots: methods: 1.1.2 on-finished: 2.4.1 parseurl: 1.3.3 - path-to-regexp: 0.1.12 + path-to-regexp: 0.1.13 proxy-addr: 2.0.7 qs: 6.14.2 range-parser: 1.2.1 @@ -13500,8 +11600,6 @@ snapshots: exsolve@1.0.8: {} - eyes@0.1.8: {} - fast-check@3.23.2: dependencies: pure-rand: 6.1.0 @@ -13522,14 +11620,8 @@ snapshots: fast-sha256@1.3.0: {} - fast-stable-stringify@1.0.0: {} - fast-uri@3.1.0: {} - fastest-levenshtein@1.0.16: {} - - fastestsmallesttextencoderdecoder@1.0.22: {} - fastq@1.20.1: dependencies: reusify: 1.1.0 @@ -13538,15 +11630,9 @@ snapshots: dependencies: websocket-driver: 0.7.4 - fb-dotslash@0.5.8: {} - - fb-watchman@2.0.2: - dependencies: - bser: 2.1.1 - - fdir@6.5.0(picomatch@4.0.3): + fdir@6.5.0(picomatch@4.0.4): optionalDependencies: - picomatch: 4.0.3 + picomatch: 4.0.4 file-entry-cache@8.0.0: dependencies: @@ -13556,18 +11642,6 @@ snapshots: dependencies: to-regex-range: 5.0.1 - finalhandler@1.1.2: - dependencies: - debug: 2.6.9 - encodeurl: 1.0.2 - escape-html: 1.0.3 - on-finished: 2.3.0 - parseurl: 1.3.3 - statuses: 1.5.0 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - finalhandler@1.3.2: dependencies: debug: 2.6.9 @@ -13591,11 +11665,6 @@ snapshots: transitivePeerDependencies: - supports-color - find-up@4.1.0: - dependencies: - locate-path: 5.0.0 - path-exists: 4.0.0 - find-up@5.0.0: dependencies: locate-path: 6.0.0 @@ -13610,8 +11679,6 @@ snapshots: flatted@3.4.1: {} - flow-enums-runtime@0.0.6: {} - follow-redirects@1.15.11(debug@4.4.3): optionalDependencies: debug: 4.4.3 @@ -13648,8 +11715,6 @@ snapshots: dependencies: minipass: 7.1.3 - fs.realpath@1.0.0: {} - fsevents@2.3.2: optional: true @@ -13681,8 +11746,6 @@ snapshots: hasown: 2.0.2 math-intrinsics: 1.1.0 - get-package-type@0.1.0: {} - get-port-please@3.2.0: {} get-proto@1.0.1: @@ -13694,7 +11757,7 @@ snapshots: dependencies: citty: 0.1.6 consola: 3.4.2 - defu: 6.1.4 + defu: 6.1.5 node-fetch-native: 1.6.7 nypm: 0.6.5 pathe: 2.0.3 @@ -13719,15 +11782,6 @@ snapshots: minipass: 7.1.3 path-scurry: 2.0.2 - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.5 - once: 1.4.0 - path-is-absolute: 1.0.1 - gopd@1.2.0: {} graceful-fs@4.2.11: {} @@ -13750,23 +11804,7 @@ snapshots: dependencies: function-bind: 1.1.2 - hermes-compiler@250829098.0.9: {} - - hermes-estree@0.32.0: {} - - hermes-estree@0.33.3: {} - - hermes-parser@0.32.0: - dependencies: - hermes-estree: 0.32.0 - - hermes-parser@0.33.3: - dependencies: - hermes-estree: 0.33.3 - - hono@4.11.4: {} - - hono@4.12.8: {} + hono@4.12.12: {} hosted-git-info@9.0.2: dependencies: @@ -13885,10 +11923,6 @@ snapshots: dependencies: postcss: 8.5.8 - idb-keyval@6.2.1: {} - - ieee754@1.2.1: {} - ignore-walk@8.0.0: dependencies: minimatch: 10.2.4 @@ -13900,10 +11934,6 @@ snapshots: image-size@0.5.5: optional: true - image-size@1.2.1: - dependencies: - queue: 6.0.2 - immutable@5.1.5: {} import-fresh@3.3.1: @@ -13913,19 +11943,10 @@ snapshots: imurmurhash@0.1.4: {} - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - inherits@2.0.4: {} ini@6.0.0: {} - invariant@2.2.4: - dependencies: - loose-envify: 1.4.0 - ip-address@10.1.0: {} ip-regex@4.3.0: {} @@ -13944,8 +11965,6 @@ snapshots: dependencies: hasown: 2.0.2 - is-docker@2.2.1: {} - is-docker@3.0.0: {} is-extglob@2.1.1: {} @@ -13976,9 +11995,6 @@ snapshots: is-number@7.0.0: {} - is-plain-obj@2.1.0: - optional: true - is-plain-obj@3.0.0: {} is-plain-object@2.0.4: @@ -13997,10 +12013,6 @@ snapshots: is-what@3.14.1: {} - is-wsl@2.2.0: - dependencies: - is-docker: 2.2.1 - is-wsl@3.1.1: dependencies: is-inside-container: 1.0.0 @@ -14013,26 +12025,13 @@ snapshots: isobject@3.0.1: {} - isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.1.0)(utf-8-validate@6.0.6)): - dependencies: - ws: 7.5.10(bufferutil@4.1.0)(utf-8-validate@6.0.6) - isows@1.0.7(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)): dependencies: ws: 8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6) + optional: true istanbul-lib-coverage@3.2.2: {} - istanbul-lib-instrument@5.2.1: - dependencies: - '@babel/core': 7.29.0 - '@babel/parser': 7.29.2 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.2 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - istanbul-lib-instrument@6.0.3: dependencies: '@babel/core': 7.29.0 @@ -14054,102 +12053,12 @@ snapshots: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 - jayson@4.3.0(bufferutil@4.1.0)(utf-8-validate@6.0.6): - dependencies: - '@types/connect': 3.4.38 - '@types/node': 12.20.55 - '@types/ws': 7.4.7 - commander: 2.20.3 - delay: 5.0.0 - es6-promisify: 5.0.0 - eyes: 0.1.8 - isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.1.0)(utf-8-validate@6.0.6)) - json-stringify-safe: 5.0.1 - stream-json: 1.9.1 - uuid: 8.3.2 - ws: 7.5.10(bufferutil@4.1.0)(utf-8-validate@6.0.6) - transitivePeerDependencies: - - bufferutil - - utf-8-validate - - jest-environment-node@29.7.0: - dependencies: - '@jest/environment': 29.7.0 - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 25.5.0 - jest-mock: 29.7.0 - jest-util: 29.7.0 - - jest-get-type@29.6.3: {} - - jest-haste-map@29.7.0: - dependencies: - '@jest/types': 29.6.3 - '@types/graceful-fs': 4.1.9 - '@types/node': 25.5.0 - anymatch: 3.1.3 - fb-watchman: 2.0.2 - graceful-fs: 4.2.11 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - jest-worker: 29.7.0 - micromatch: 4.0.8 - walker: 1.0.8 - optionalDependencies: - fsevents: 2.3.3 - - jest-message-util@29.7.0: - dependencies: - '@babel/code-frame': 7.29.0 - '@jest/types': 29.6.3 - '@types/stack-utils': 2.0.3 - chalk: 4.1.2 - graceful-fs: 4.2.11 - micromatch: 4.0.8 - pretty-format: 29.7.0 - slash: 3.0.0 - stack-utils: 2.0.6 - - jest-mock@29.7.0: - dependencies: - '@jest/types': 29.6.3 - '@types/node': 25.5.0 - jest-util: 29.7.0 - - jest-regex-util@29.6.3: {} - - jest-util@29.7.0: - dependencies: - '@jest/types': 29.6.3 - '@types/node': 25.5.0 - chalk: 4.1.2 - ci-info: 3.9.0 - graceful-fs: 4.2.11 - picomatch: 2.3.2 - - jest-validate@29.7.0: - dependencies: - '@jest/types': 29.6.3 - camelcase: 6.3.0 - chalk: 4.1.2 - jest-get-type: 29.6.3 - leven: 3.1.0 - pretty-format: 29.7.0 - jest-worker@27.5.1: dependencies: '@types/node': 25.5.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest-worker@29.7.0: - dependencies: - '@types/node': 25.5.0 - jest-util: 29.7.0 - merge-stream: 2.0.0 - supports-color: 8.1.1 - jiti@2.6.1: {} jose@6.2.1: {} @@ -14158,23 +12067,14 @@ snapshots: js-base64@3.7.8: {} - js-cookie@3.0.5: {} - js-tokens@10.0.0: {} js-tokens@4.0.0: {} - js-yaml@3.14.2: - dependencies: - argparse: 1.0.10 - esprima: 4.0.1 - js-yaml@4.1.1: dependencies: argparse: 2.0.1 - jsc-safe-url@0.2.4: {} - jsdom@28.1.0(@noble/hashes@2.0.1): dependencies: '@acemir/cssom': 0.9.31 @@ -14192,7 +12092,7 @@ snapshots: saxes: 6.0.0 symbol-tree: 3.2.4 tough-cookie: 6.0.1 - undici: 7.24.3 + undici: 7.24.4 w3c-xmlserializer: 5.0.0 webidl-conversions: 8.0.1 whatwg-mimetype: 5.0.0 @@ -14217,7 +12117,7 @@ snapshots: '@types/lodash': 4.17.24 is-glob: 4.0.3 js-yaml: 4.1.1 - lodash: 4.17.23 + lodash: 4.18.1 minimist: 1.2.8 prettier: 3.8.1 tinyglobby: 0.2.15 @@ -14232,8 +12132,6 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} - json-stringify-safe@5.0.1: {} - json5@2.2.3: {} jsonc-parser@3.3.1: {} @@ -14287,8 +12185,6 @@ snapshots: needle: 3.5.0 source-map: 0.6.1 - leven@3.1.0: {} - levn@0.4.1: dependencies: prelude-ls: 1.2.1 @@ -14300,13 +12196,6 @@ snapshots: optionalDependencies: webpack: 5.105.2(esbuild@0.27.3) - lighthouse-logger@1.4.2: - dependencies: - debug: 2.6.9 - marky: 1.3.0 - transitivePeerDependencies: - - supports-color - lightningcss-android-arm64@1.31.1: optional: true @@ -14397,21 +12286,13 @@ snapshots: loader-utils@3.3.1: {} - locate-path@5.0.0: - dependencies: - p-locate: 4.1.0 - locate-path@6.0.0: dependencies: p-locate: 5.0.0 lodash.debounce@4.0.8: {} - lodash.throttle@4.1.1: {} - - lodash@4.17.21: {} - - lodash@4.17.23: {} + lodash@4.18.1: {} log-symbols@7.0.1: dependencies: @@ -14428,10 +12309,6 @@ snapshots: long@5.3.2: {} - loose-envify@1.4.0: - dependencies: - js-tokens: 4.0.0 - lru-cache@11.2.7: {} lru-cache@5.1.1: @@ -14476,14 +12353,8 @@ snapshots: transitivePeerDependencies: - supports-color - makeerror@1.0.12: - dependencies: - tmpl: 1.0.5 - map-obj@4.3.0: {} - marky@1.3.0: {} - material-symbols@0.40.2: {} math-intrinsics@1.1.0: {} @@ -14511,8 +12382,6 @@ snapshots: tree-dump: 1.1.0(tslib@2.8.1) tslib: 2.8.1 - memoize-one@5.2.1: {} - memory-pager@1.5.0: optional: true @@ -14520,195 +12389,16 @@ snapshots: merge-descriptors@2.0.0: {} - merge-options@3.0.4: - dependencies: - is-plain-obj: 2.1.0 - optional: true - merge-stream@2.0.0: {} merge2@1.4.1: {} methods@1.1.2: {} - metro-babel-transformer@0.83.5: - dependencies: - '@babel/core': 7.29.0 - flow-enums-runtime: 0.0.6 - hermes-parser: 0.33.3 - nullthrows: 1.1.1 - transitivePeerDependencies: - - supports-color - - metro-cache-key@0.83.5: - dependencies: - flow-enums-runtime: 0.0.6 - - metro-cache@0.83.5: - dependencies: - exponential-backoff: 3.1.3 - flow-enums-runtime: 0.0.6 - https-proxy-agent: 7.0.6 - metro-core: 0.83.5 - transitivePeerDependencies: - - supports-color - - metro-config@0.83.5(bufferutil@4.1.0)(utf-8-validate@6.0.6): - dependencies: - connect: 3.7.0 - flow-enums-runtime: 0.0.6 - jest-validate: 29.7.0 - metro: 0.83.5(bufferutil@4.1.0)(utf-8-validate@6.0.6) - metro-cache: 0.83.5 - metro-core: 0.83.5 - metro-runtime: 0.83.5 - yaml: 2.8.3 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - metro-core@0.83.5: - dependencies: - flow-enums-runtime: 0.0.6 - lodash.throttle: 4.1.1 - metro-resolver: 0.83.5 - - metro-file-map@0.83.5: - dependencies: - debug: 4.4.3 - fb-watchman: 2.0.2 - flow-enums-runtime: 0.0.6 - graceful-fs: 4.2.11 - invariant: 2.2.4 - jest-worker: 29.7.0 - micromatch: 4.0.8 - nullthrows: 1.1.1 - walker: 1.0.8 - transitivePeerDependencies: - - supports-color - - metro-minify-terser@0.83.5: - dependencies: - flow-enums-runtime: 0.0.6 - terser: 5.46.1 - - metro-resolver@0.83.5: - dependencies: - flow-enums-runtime: 0.0.6 - - metro-runtime@0.83.5: - dependencies: - '@babel/runtime': 7.29.2 - flow-enums-runtime: 0.0.6 - - metro-source-map@0.83.5: - dependencies: - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 - flow-enums-runtime: 0.0.6 - invariant: 2.2.4 - metro-symbolicate: 0.83.5 - nullthrows: 1.1.1 - ob1: 0.83.5 - source-map: 0.5.7 - vlq: 1.0.1 - transitivePeerDependencies: - - supports-color - - metro-symbolicate@0.83.5: - dependencies: - flow-enums-runtime: 0.0.6 - invariant: 2.2.4 - metro-source-map: 0.83.5 - nullthrows: 1.1.1 - source-map: 0.5.7 - vlq: 1.0.1 - transitivePeerDependencies: - - supports-color - - metro-transform-plugins@0.83.5: - dependencies: - '@babel/core': 7.29.0 - '@babel/generator': 7.29.1 - '@babel/template': 7.28.6 - '@babel/traverse': 7.29.0 - flow-enums-runtime: 0.0.6 - nullthrows: 1.1.1 - transitivePeerDependencies: - - supports-color - - metro-transform-worker@0.83.5(bufferutil@4.1.0)(utf-8-validate@6.0.6): - dependencies: - '@babel/core': 7.29.0 - '@babel/generator': 7.29.1 - '@babel/parser': 7.29.2 - '@babel/types': 7.29.0 - flow-enums-runtime: 0.0.6 - metro: 0.83.5(bufferutil@4.1.0)(utf-8-validate@6.0.6) - metro-babel-transformer: 0.83.5 - metro-cache: 0.83.5 - metro-cache-key: 0.83.5 - metro-minify-terser: 0.83.5 - metro-source-map: 0.83.5 - metro-transform-plugins: 0.83.5 - nullthrows: 1.1.1 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - metro@0.83.5(bufferutil@4.1.0)(utf-8-validate@6.0.6): - dependencies: - '@babel/code-frame': 7.29.0 - '@babel/core': 7.29.0 - '@babel/generator': 7.29.1 - '@babel/parser': 7.29.2 - '@babel/template': 7.28.6 - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 - accepts: 2.0.0 - chalk: 4.1.2 - ci-info: 2.0.0 - connect: 3.7.0 - debug: 4.4.3 - error-stack-parser: 2.1.4 - flow-enums-runtime: 0.0.6 - graceful-fs: 4.2.11 - hermes-parser: 0.33.3 - image-size: 1.2.1 - invariant: 2.2.4 - jest-worker: 29.7.0 - jsc-safe-url: 0.2.4 - lodash.throttle: 4.1.1 - metro-babel-transformer: 0.83.5 - metro-cache: 0.83.5 - metro-cache-key: 0.83.5 - metro-config: 0.83.5(bufferutil@4.1.0)(utf-8-validate@6.0.6) - metro-core: 0.83.5 - metro-file-map: 0.83.5 - metro-resolver: 0.83.5 - metro-runtime: 0.83.5 - metro-source-map: 0.83.5 - metro-symbolicate: 0.83.5 - metro-transform-plugins: 0.83.5 - metro-transform-worker: 0.83.5(bufferutil@4.1.0)(utf-8-validate@6.0.6) - mime-types: 3.0.2 - nullthrows: 1.1.1 - serialize-error: 2.1.0 - source-map: 0.5.7 - throat: 5.0.0 - ws: 7.5.10(bufferutil@4.1.0)(utf-8-validate@6.0.6) - yargs: 17.7.2 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - micromatch@4.0.8: dependencies: braces: 3.0.3 - picomatch: 2.3.1 + picomatch: 2.3.2 mime-db@1.52.0: {} @@ -14769,13 +12459,9 @@ snapshots: dependencies: brace-expansion: 5.0.4 - minimatch@3.1.5: - dependencies: - brace-expansion: 1.1.13 - minimatch@9.0.9: dependencies: - brace-expansion: 2.0.2 + brace-expansion: 2.0.3 minimist@1.2.8: {} @@ -14813,8 +12499,6 @@ snapshots: dependencies: minipass: 7.1.3 - mkdirp@1.0.4: {} - mkdirp@3.0.1: {} mongodb-connection-string-url@7.0.1: @@ -14939,8 +12623,6 @@ snapshots: transitivePeerDependencies: - supports-color - node-int64@0.4.0: {} - node-releases@2.0.36: {} nopt@9.0.0: @@ -14995,18 +12677,12 @@ snapshots: dependencies: boolbase: 1.0.0 - nullthrows@1.1.1: {} - nypm@0.6.5: dependencies: citty: 0.2.1 pathe: 2.0.3 tinyexec: 1.0.4 - ob1@0.83.5: - dependencies: - flow-enums-runtime: 0.0.6 - object-assign@4.1.1: {} object-inspect@1.13.4: {} @@ -15017,10 +12693,6 @@ snapshots: ohash@2.0.11: {} - on-finished@2.3.0: - dependencies: - ee-first: 1.1.1 - on-finished@2.4.1: dependencies: ee-first: 1.1.1 @@ -15051,11 +12723,6 @@ snapshots: powershell-utils: 0.1.0 wsl-utils: 0.3.1 - open@7.4.2: - dependencies: - is-docker: 2.2.1 - is-wsl: 2.2.0 - openapi3-ts@4.5.0: dependencies: yaml: 2.8.3 @@ -15097,33 +12764,12 @@ snapshots: typescript: 6.0.2 transitivePeerDependencies: - zod - - ox@0.6.9(typescript@6.0.2)(zod@4.3.6): - dependencies: - '@adraffy/ens-normalize': 1.11.1 - '@noble/curves': 1.9.7 - '@noble/hashes': 1.8.0 - '@scure/bip32': 1.7.0 - '@scure/bip39': 1.6.0 - abitype: 1.2.3(typescript@6.0.2)(zod@4.3.6) - eventemitter3: 5.0.1 - optionalDependencies: - typescript: 6.0.2 - transitivePeerDependencies: - - zod - - p-limit@2.3.0: - dependencies: - p-try: 2.2.0 + optional: true p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 - p-locate@4.1.0: - dependencies: - p-limit: 2.3.0 - p-locate@5.0.0: dependencies: p-limit: 3.1.0 @@ -15136,8 +12782,6 @@ snapshots: is-network-error: 1.3.1 retry: 0.13.1 - p-try@2.2.0: {} - pacote@21.3.1: dependencies: '@npmcli/git': 7.0.2 @@ -15213,8 +12857,6 @@ snapshots: path-exists@4.0.0: {} - path-is-absolute@1.0.1: {} - path-key@3.1.1: {} path-parse@1.0.7: {} @@ -15224,7 +12866,7 @@ snapshots: lru-cache: 11.2.7 minipass: 7.1.3 - path-to-regexp@0.1.12: {} + path-to-regexp@0.1.13: {} path-to-regexp@6.3.0: {} @@ -15283,19 +12925,13 @@ snapshots: picocolors@1.1.1: {} - picomatch@2.3.1: {} - picomatch@2.3.2: {} - picomatch@4.0.3: {} - picomatch@4.0.4: {} pify@4.0.1: optional: true - pirates@4.0.7: {} - piscina@5.1.4: optionalDependencies: '@napi-rs/nice': 1.1.1 @@ -15325,8 +12961,6 @@ snapshots: optionalDependencies: fsevents: 2.3.2 - pngjs@5.0.0: {} - postcss-loader@8.2.0(postcss@8.5.6)(typescript@6.0.2)(webpack@5.105.2(esbuild@0.27.3)): dependencies: cosmiconfig: 9.0.1(typescript@6.0.2) @@ -15410,20 +13044,10 @@ snapshots: powershell-utils@0.1.0: {} - preact@10.24.2: {} - - preact@10.29.0: {} - prelude-ls@1.2.1: {} prettier@3.8.1: {} - pretty-format@29.7.0: - dependencies: - '@jest/schemas': 29.6.3 - ansi-styles: 5.2.0 - react-is: 18.3.1 - prisma@7.5.0(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2): dependencies: '@prisma/config': 7.5.0 @@ -15451,10 +13075,6 @@ snapshots: err-code: 2.0.3 retry: 0.12.0 - promise@8.3.0: - dependencies: - asap: 2.0.6 - proper-lockfile@4.1.2: dependencies: graceful-fs: 4.2.11 @@ -15481,12 +13101,6 @@ snapshots: pvutils@1.1.5: {} - qrcode@1.5.4: - dependencies: - dijkstrajs: 1.0.3 - pngjs: 5.0.0 - yargs: 15.4.1 - qs@6.14.2: dependencies: side-channel: 1.1.0 @@ -15497,10 +13111,6 @@ snapshots: queue-microtask@1.2.3: {} - queue@6.0.2: - dependencies: - inherits: 2.0.4 - quick-lru@5.1.1: {} range-parser@1.2.1: {} @@ -15521,74 +13131,14 @@ snapshots: rc9@2.1.2: dependencies: - defu: 6.1.4 + defu: 6.1.5 destr: 2.0.5 - react-devtools-core@6.1.5(bufferutil@4.1.0)(utf-8-validate@6.0.6): - dependencies: - shell-quote: 1.8.3 - ws: 7.5.10(bufferutil@4.1.0)(utf-8-validate@6.0.6) - transitivePeerDependencies: - - bufferutil - - utf-8-validate - react-dom@19.2.4(react@19.2.4): dependencies: react: 19.2.4 scheduler: 0.27.0 - react-is@18.3.1: {} - - react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6): - dependencies: - '@jest/create-cache-key-function': 29.7.0 - '@react-native/assets-registry': 0.84.1 - '@react-native/codegen': 0.84.1(@babel/core@7.29.0) - '@react-native/community-cli-plugin': 0.84.1(bufferutil@4.1.0)(utf-8-validate@6.0.6) - '@react-native/gradle-plugin': 0.84.1 - '@react-native/js-polyfills': 0.84.1 - '@react-native/normalize-colors': 0.84.1 - '@react-native/virtualized-lists': 0.84.1(@types/react@19.2.14)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(react@19.2.4) - abort-controller: 3.0.0 - anser: 1.4.10 - ansi-regex: 5.0.1 - babel-jest: 29.7.0(@babel/core@7.29.0) - babel-plugin-syntax-hermes-parser: 0.32.0 - base64-js: 1.5.1 - commander: 12.1.0 - flow-enums-runtime: 0.0.6 - hermes-compiler: 250829098.0.9 - invariant: 2.2.4 - jest-environment-node: 29.7.0 - memoize-one: 5.2.1 - metro-runtime: 0.83.5 - metro-source-map: 0.83.5 - nullthrows: 1.1.1 - pretty-format: 29.7.0 - promise: 8.3.0 - react: 19.2.4 - react-devtools-core: 6.1.5(bufferutil@4.1.0)(utf-8-validate@6.0.6) - react-refresh: 0.14.2 - regenerator-runtime: 0.13.11 - scheduler: 0.27.0 - semver: 7.7.4 - stacktrace-parser: 0.1.11 - tinyglobby: 0.2.15 - whatwg-fetch: 3.6.20 - ws: 7.5.10(bufferutil@4.1.0)(utf-8-validate@6.0.6) - yargs: 17.7.2 - optionalDependencies: - '@types/react': 19.2.14 - transitivePeerDependencies: - - '@babel/core' - - '@react-native-community/cli' - - '@react-native/metro-config' - - bufferutil - - supports-color - - utf-8-validate - - react-refresh@0.14.2: {} - react@19.2.4: {} readable-stream@2.3.8: @@ -15609,7 +13159,7 @@ snapshots: readdirp@3.6.0: dependencies: - picomatch: 2.3.1 + picomatch: 2.3.2 readdirp@4.1.2: {} @@ -15623,8 +13173,6 @@ snapshots: regenerate@1.4.2: {} - regenerator-runtime@0.13.11: {} - regex-parser@2.3.1: {} regexp-to-ast@0.5.0: {} @@ -15646,18 +13194,12 @@ snapshots: remeda@2.33.4: {} - require-directory@2.1.1: {} - require-from-string@2.0.2: {} - require-main-filename@2.0.0: {} - requires-port@1.0.0: {} resolve-from@4.0.0: {} - resolve-from@5.0.0: {} - resolve-url-loader@5.0.0: dependencies: adjust-sourcemap-loader: 4.0.0 @@ -15685,10 +13227,6 @@ snapshots: rfdc@1.4.1: {} - rimraf@3.0.2: - dependencies: - glob: 7.2.3 - rolldown@1.0.0-rc.4: dependencies: '@oxc-project/types': 0.113.0 @@ -15751,19 +13289,6 @@ snapshots: transitivePeerDependencies: - supports-color - rpc-websockets@9.3.7: - dependencies: - '@swc/helpers': 0.5.20 - '@types/uuid': 10.0.0 - '@types/ws': 8.18.1 - buffer: 6.0.3 - eventemitter3: 5.0.4 - uuid: 11.1.0 - ws: 8.20.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) - optionalDependencies: - bufferutil: 4.1.0 - utf-8-validate: 6.0.6 - run-applescript@7.1.0: {} run-parallel@1.2.0: @@ -15863,9 +13388,7 @@ snapshots: seq-queue@0.0.5: {} - serialize-error@2.1.0: {} - - serialize-javascript@7.0.4: {} + serialize-javascript@7.0.5: {} serve-index@1.9.2: dependencies: @@ -15897,8 +13420,6 @@ snapshots: transitivePeerDependencies: - supports-color - set-blocking@2.0.0: {} - set-cookie-parser@3.1.0: {} setprototypeof@1.2.0: {} @@ -15991,8 +13512,6 @@ snapshots: transitivePeerDependencies: - supports-color - slash@3.0.0: {} - slice-ansi@7.1.2: dependencies: ansi-styles: 6.2.3 @@ -16037,8 +13556,6 @@ snapshots: buffer-from: 1.1.2 source-map: 0.6.1 - source-map@0.5.7: {} - source-map@0.6.1: {} source-map@0.7.6: {} @@ -16080,8 +13597,6 @@ snapshots: split2@4.2.0: {} - sprintf-js@1.0.3: {} - sprintf-js@1.1.3: {} sqlstring@2.3.3: {} @@ -16090,18 +13605,8 @@ snapshots: dependencies: minipass: 7.1.3 - stack-utils@2.0.6: - dependencies: - escape-string-regexp: 2.0.0 - stackback@0.0.2: {} - stackframe@1.3.4: {} - - stacktrace-parser@0.1.11: - dependencies: - type-fest: 0.7.1 - standardwebhooks@1.0.0: dependencies: '@stablelib/base64': 1.0.1 @@ -16117,12 +13622,6 @@ snapshots: stdin-discarder@0.3.1: {} - stream-chain@2.2.5: {} - - stream-json@1.9.1: - dependencies: - stream-chain: 2.2.5 - string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -16158,8 +13657,6 @@ snapshots: strip-json-comments@3.1.1: {} - superstruct@2.0.2: {} - supports-color@10.2.2: {} supports-color@7.2.0: @@ -16220,21 +13717,12 @@ snapshots: acorn: 8.16.0 commander: 2.20.3 source-map-support: 0.5.21 - - test-exclude@6.0.0: - dependencies: - '@istanbuljs/schema': 0.1.3 - glob: 7.2.3 - minimatch: 3.1.5 - - text-encoding-utf-8@1.0.2: {} + optional: true thingies@2.5.0(tslib@2.8.1): dependencies: tslib: 2.8.1 - throat@5.0.0: {} - throttleit@2.1.0: {} thunky@1.1.0: {} @@ -16245,8 +13733,8 @@ snapshots: tinyglobby@0.2.15: dependencies: - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 tinyrainbow@3.1.0: {} @@ -16262,8 +13750,6 @@ snapshots: dependencies: tldts-core: 7.0.27 - tmpl@1.0.5: {} - to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -16320,10 +13806,6 @@ snapshots: dependencies: prelude-ls: 1.2.1 - type-detect@4.0.8: {} - - type-fest@0.7.1: {} - type-fest@1.4.0: {} type-is@1.6.18: @@ -16358,10 +13840,6 @@ snapshots: undici@6.24.1: {} - undici@7.22.0: {} - - undici@7.24.3: {} - undici@7.24.4: {} unenv@2.0.0-rc.24: @@ -16414,8 +13892,6 @@ snapshots: uuid@10.0.0: {} - uuid@11.1.0: {} - uuid@8.3.2: {} valibot@1.2.0(typescript@6.0.2): @@ -16442,12 +13918,13 @@ snapshots: - bufferutil - utf-8-validate - zod + optional: true - vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3): + vite@7.3.2(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3): dependencies: esbuild: 0.27.3 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 postcss: 8.5.8 rollup: 4.59.0 tinyglobby: 0.2.15 @@ -16461,11 +13938,11 @@ snapshots: terser: 5.46.0 yaml: 2.8.3 - vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3): + vite@7.3.2(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3): dependencies: esbuild: 0.27.3 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 postcss: 8.5.8 rollup: 4.59.0 tinyglobby: 0.2.15 @@ -16479,10 +13956,10 @@ snapshots: terser: 5.46.1 yaml: 2.8.3 - vitest@4.1.0(@opentelemetry/api@1.9.1)(@types/node@25.5.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)): + vitest@4.1.0(@opentelemetry/api@1.9.1)(@types/node@25.5.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@7.3.2(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)): dependencies: '@vitest/expect': 4.1.0 - '@vitest/mocker': 4.1.0(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)) + '@vitest/mocker': 4.1.0(vite@7.3.2(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)) '@vitest/pretty-format': 4.1.0 '@vitest/runner': 4.1.0 '@vitest/snapshot': 4.1.0 @@ -16493,13 +13970,13 @@ snapshots: magic-string: 0.30.21 obug: 2.1.1 pathe: 2.0.3 - picomatch: 4.0.3 + picomatch: 4.0.4 std-env: 4.0.0 tinybench: 2.9.0 tinyexec: 1.0.4 tinyglobby: 0.2.15 tinyrainbow: 3.1.0 - vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.1 @@ -16508,10 +13985,10 @@ snapshots: transitivePeerDependencies: - msw - vitest@4.1.0(@opentelemetry/api@1.9.1)(@types/node@25.5.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)): + vitest@4.1.0(@opentelemetry/api@1.9.1)(@types/node@25.5.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@7.3.2(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)): dependencies: '@vitest/expect': 4.1.0 - '@vitest/mocker': 4.1.0(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)) + '@vitest/mocker': 4.1.0(vite@7.3.2(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)) '@vitest/pretty-format': 4.1.0 '@vitest/runner': 4.1.0 '@vitest/snapshot': 4.1.0 @@ -16522,13 +13999,13 @@ snapshots: magic-string: 0.30.21 obug: 2.1.1 pathe: 2.0.3 - picomatch: 4.0.3 + picomatch: 4.0.4 std-env: 4.0.0 tinybench: 2.9.0 tinyexec: 1.0.4 tinyglobby: 0.2.15 tinyrainbow: 3.1.0 - vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3) + vite: 7.3.2(@types/node@25.5.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.1 @@ -16537,16 +14014,10 @@ snapshots: transitivePeerDependencies: - msw - vlq@1.0.1: {} - w3c-xmlserializer@5.0.0: dependencies: xml-name-validator: 5.0.0 - walker@1.0.8: - dependencies: - makeerror: 1.0.12 - watchpack@2.5.1: dependencies: glob-to-regexp: 0.4.1 @@ -16673,8 +14144,6 @@ snapshots: websocket-extensions@0.1.4: {} - whatwg-fetch@3.6.20: {} - whatwg-mimetype@5.0.0: {} whatwg-url@14.2.0: @@ -16696,8 +14165,6 @@ snapshots: tr46: 0.0.3 webidl-conversions: 3.0.1 - which-module@2.0.1: {} - which@2.0.2: dependencies: isexe: 2.0.0 @@ -16771,12 +14238,6 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi@9.0.2: dependencies: ansi-styles: 6.2.3 @@ -16785,16 +14246,6 @@ snapshots: wrappy@1.0.2: {} - write-file-atomic@4.0.2: - dependencies: - imurmurhash: 0.1.4 - signal-exit: 3.0.7 - - ws@7.5.10(bufferutil@4.1.0)(utf-8-validate@6.0.6): - optionalDependencies: - bufferutil: 4.1.0 - utf-8-validate: 6.0.6 - ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6): optionalDependencies: bufferutil: 4.1.0 @@ -16804,6 +14255,7 @@ snapshots: optionalDependencies: bufferutil: 4.1.0 utf-8-validate: 6.0.6 + optional: true ws@8.20.0(bufferutil@4.1.0)(utf-8-validate@6.0.6): optionalDependencies: @@ -16827,8 +14279,6 @@ snapshots: xtend@4.0.2: {} - y18n@4.0.3: {} - y18n@5.0.8: {} yallist@3.1.1: {} @@ -16839,39 +14289,8 @@ snapshots: yaml@2.8.3: {} - yargs-parser@18.1.3: - dependencies: - camelcase: 5.3.1 - decamelize: 1.2.0 - - yargs-parser@21.1.1: {} - yargs-parser@22.0.0: {} - yargs@15.4.1: - dependencies: - cliui: 6.0.0 - decamelize: 1.2.0 - find-up: 4.1.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - require-main-filename: 2.0.0 - set-blocking: 2.0.0 - string-width: 4.2.3 - which-module: 2.0.1 - y18n: 4.0.3 - yargs-parser: 18.1.3 - - yargs@17.7.2: - dependencies: - cliui: 8.0.1 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - yargs@18.0.0: dependencies: cliui: 9.0.1 @@ -16918,9 +14337,3 @@ snapshots: zod@3.25.76: {} zod@4.3.6: {} - - zustand@5.0.3(@types/react@19.2.14)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)): - optionalDependencies: - '@types/react': 19.2.14 - react: 19.2.4 - use-sync-external-store: 1.6.0(react@19.2.4) diff --git a/prisma/migrations/20260413000000_remove_clerk_fields/migration.sql b/prisma/migrations/20260413000000_remove_clerk_fields/migration.sql new file mode 100644 index 000000000..4b5d611d6 --- /dev/null +++ b/prisma/migrations/20260413000000_remove_clerk_fields/migration.sql @@ -0,0 +1,25 @@ +-- Migration: remove_clerk_fields +-- Purpose: Remove legacy Clerk integration fields from the PostgreSQL schema. +-- These columns were populated by the Clerk authentication provider +-- which has been replaced by Better Auth. All active sessions are +-- now Better Auth sessions; no Clerk sessions remain. + +-- DropIndex: remove unique constraint on users.clerk_user_id +-- (column is now a legacy historical field, and uniqueness is no longer +-- required for retained rows that may share the same non-NULL Clerk ID) +DROP INDEX IF EXISTS "users_clerk_user_id_key"; + +-- DropColumn: sessions.token_hash (legacy Clerk session token hash) +-- Better Auth sessions use the `token` column only; token_hash is never set. +ALTER TABLE "sessions" DROP COLUMN IF EXISTS "token_hash"; + +-- CreateIndex: sessions.expires_at (enables efficient expired-session cleanup) +CREATE INDEX IF NOT EXISTS "sessions_expires_at_idx" ON "sessions"("expires_at"); + +-- DropIndex + DropColumn: agent_sessions.clerk_user_id +DROP INDEX IF EXISTS "agent_sessions_clerk_user_id_idx"; +ALTER TABLE "agent_sessions" DROP COLUMN IF EXISTS "clerk_user_id"; + +-- CreateIndex: api_keys composite index for active-key lookups +-- "list active keys for user" queries filter by (user_id, revoked_at IS NULL) +CREATE INDEX IF NOT EXISTS "api_keys_user_id_revoked_at_idx" ON "api_keys"("user_id", "revoked_at"); diff --git a/prisma/schema.d1.prisma b/prisma/schema.d1.prisma index 5756c4f1b..eed75462e 100644 --- a/prisma/schema.d1.prisma +++ b/prisma/schema.d1.prisma @@ -35,7 +35,7 @@ model User { updatedAt DateTime @updatedAt @map("updated_at") // Clerk integration fields - clerkUserId String? @unique @map("clerk_user_id") + clerkUserId String? @unique @map("clerk_user_id") // Legacy Clerk field — safe to drop once all rows migrated to Better Auth tier String @default("free") firstName String? @map("first_name") lastName String? @map("last_name") diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 8148af9f3..acd75fcff 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -39,8 +39,13 @@ model User { createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz updatedAt DateTime @updatedAt @map("updated_at") @db.Timestamptz - // Clerk integration fields - clerkUserId String? @unique @map("clerk_user_id") + // Legacy Clerk integration field — kept for historical rows; no longer populated. + // @unique constraint removed: Clerk is no longer the auth provider, so this column + // is no longer a canonical unique identifier. Existing non-NULL Clerk IDs are preserved + // as-is for historical reference; new Better Auth users have NULL here. Duplicates are + // not expected in practice but are now structurally allowed. + // Can be dropped in a follow-up migration once confirmed no code reads this column. + clerkUserId String? @map("clerk_user_id") tier String @default("free") // anonymous | free | pro | admin firstName String? @map("first_name") lastName String? @map("last_name") @@ -84,6 +89,7 @@ model ApiKey { user User @relation(fields: [userId], references: [id], onDelete: Cascade) @@index([userId]) + @@index([userId, revokedAt]) @@map("api_keys") } @@ -91,7 +97,6 @@ model Session { id String @id @default(uuid()) @db.Uuid userId String @map("user_id") @db.Uuid token String @unique // Better Auth session token - tokenHash String? @unique @map("token_hash") // Legacy (Clerk); nullable for Better Auth sessions ipAddress String? @map("ip_address") userAgent String? @map("user_agent") expiresAt DateTime @map("expires_at") @db.Timestamptz @@ -101,6 +106,7 @@ model Session { user User @relation(fields: [userId], references: [id], onDelete: Cascade) @@index([userId]) + @@index([expiresAt]) @@map("sessions") } @@ -332,7 +338,6 @@ model AgentSession { agentSlug String @map("agent_slug") // from AGENT_REGISTRY slug instanceId String @map("instance_id") // Durable Object instance name userId String? @map("user_id") @db.Uuid - clerkUserId String? @map("clerk_user_id") startedAt DateTime @default(now()) @map("started_at") @db.Timestamptz endedAt DateTime? @map("ended_at") @db.Timestamptz // NULL = still active endReason String? @map("end_reason") // 'client_disconnect' | 'server_error' | 'admin_terminate' | 'timeout' @@ -346,7 +351,6 @@ model AgentSession { invocations AgentInvocation[] @@index([userId]) - @@index([clerkUserId]) @@index([agentSlug]) @@index([startedAt]) @@index([userId, endedAt], name: "agent_sessions_user_active_idx") // "active sessions per user" diff --git a/src/deployment/version.ts b/src/deployment/version.ts index 18079c0eb..bb9b2fcab 100644 --- a/src/deployment/version.ts +++ b/src/deployment/version.ts @@ -196,34 +196,36 @@ export async function getDeploymentHistory( ): Promise { const { limit = 50, version, status, branch } = options; - let query = ` - SELECT - version, build_number, full_version, git_commit, git_branch, - deployed_at, deployed_by, status, metadata - FROM deployment_history - WHERE 1=1 - `; - + const conditions: string[] = []; const params: unknown[] = []; if (version) { - query += ' AND version = ?'; + conditions.push('version = ?'); params.push(version); } if (status) { - query += ' AND status = ?'; + conditions.push('status = ?'); params.push(status); } if (branch) { - query += ' AND git_branch = ?'; + conditions.push('git_branch = ?'); params.push(branch); } - query += ' ORDER BY deployed_at DESC LIMIT ?'; params.push(limit); + const where = conditions.length > 0 ? ` AND ${conditions.join(' AND ')}` : ''; + const query = ` + SELECT + version, build_number, full_version, git_commit, git_branch, + deployed_at, deployed_by, status, metadata + FROM deployment_history + WHERE 1=1${where} + ORDER BY deployed_at DESC LIMIT ? + `; + const result = await db.prepare(query).bind(...params).all<{ version: string; build_number: number; diff --git a/worker/handlers/admin-handlers.ts b/worker/handlers/admin-handlers.ts index 4571f6853..4dd81668f 100644 --- a/worker/handlers/admin-handlers.ts +++ b/worker/handlers/admin-handlers.ts @@ -146,7 +146,7 @@ export async function handleAdminListRoles( if (dbGuard) return dbGuard; const reqId = createRequestId(); - const logger = createAdminLogger(reqId).withOperation('role.list').withActor(guard.adminContext.clerk_user_id); + const logger = createAdminLogger(reqId).withOperation('role.list').withActor(guard.adminContext.user_id); return withAdminTracing(logger, 'role.list', async () => { const roles = await listRoles(asCfDb(env.ADMIN_DB)); @@ -176,7 +176,7 @@ export async function handleAdminCreateRole( if (!parsed.success) return JsonResponse.badRequest(parsed.error.issues[0]?.message ?? 'Invalid request body'); const reqId = createRequestId(); - const logger = createAdminLogger(reqId).withOperation('role.create').withActor(guard.adminContext.clerk_user_id); + const logger = createAdminLogger(reqId).withOperation('role.create').withActor(guard.adminContext.user_id); return withAdminTracing(logger, 'role.create', async () => { const role = await createRole(asCfDb(env.ADMIN_DB), parsed.data); @@ -195,7 +195,7 @@ export async function handleAdminCreateRole( action: 'role.create', resourceType: 'admin_role', resourceId: role.role_name, - actorId: guard.adminContext.clerk_user_id, + actorId: guard.adminContext.user_id, ip: getIp(request), success: true, }); @@ -230,7 +230,7 @@ export async function handleAdminUpdateRole( if (!parsed.success) return JsonResponse.badRequest(parsed.error.issues[0]?.message ?? 'Invalid request body'); const reqId = createRequestId(); - const logger = createAdminLogger(reqId).withOperation('role.update').withActor(guard.adminContext.clerk_user_id); + const logger = createAdminLogger(reqId).withOperation('role.update').withActor(guard.adminContext.user_id); return withAdminTracing(logger, 'role.update', async () => { const oldRole = await listRoles(asCfDb(env.ADMIN_DB)).then((r) => r.find((x) => x.role_name === roleName)); @@ -251,7 +251,7 @@ export async function handleAdminUpdateRole( action: 'role.update', resourceType: 'admin_role', resourceId: roleName, - actorId: guard.adminContext.clerk_user_id, + actorId: guard.adminContext.user_id, ip: getIp(request), success: true, }); @@ -276,13 +276,14 @@ export async function handleAdminListAssignments( if (dbGuard) return dbGuard; const reqId = createRequestId(); - const logger = createAdminLogger(reqId).withOperation('role.listAssignments').withActor(guard.adminContext.clerk_user_id); + const logger = createAdminLogger(reqId).withOperation('role.listAssignments').withActor(guard.adminContext.user_id); return withAdminTracing(logger, 'role.listAssignments', async () => { - const filters: { clerk_user_id?: string; role_name?: string } = {}; - const userId = params.searchParams.get('clerk_user_id'); + const filters: { user_id?: string; role_name?: string } = {}; + // Accept both `user_id` and legacy `clerk_user_id` for backward compatibility. + const userId = params.searchParams.get('user_id') ?? params.searchParams.get('clerk_user_id'); const roleName = params.searchParams.get('role_name'); - if (userId) filters.clerk_user_id = userId; + if (userId) filters.user_id = userId; if (roleName) filters.role_name = roleName; const assignments = await listRoleAssignments(asCfDb(env.ADMIN_DB), filters); @@ -312,10 +313,10 @@ export async function handleAdminAssignRole( if (!parsed.success) return JsonResponse.badRequest(parsed.error.issues[0]?.message ?? 'Invalid request body'); const reqId = createRequestId(); - const logger = createAdminLogger(reqId).withOperation('role.assign').withActor(guard.adminContext.clerk_user_id); + const logger = createAdminLogger(reqId).withOperation('role.assign').withActor(guard.adminContext.user_id); return withAdminTracing(logger, 'role.assign', async () => { - const assignment = await assignRole(asCfDb(env.ADMIN_DB), parsed.data, guard.adminContext.clerk_user_id); + const assignment = await assignRole(asCfDb(env.ADMIN_DB), parsed.data, guard.adminContext.user_id); if (!assignment) return JsonResponse.error('Failed to assign role', 500); // Invalidate the target user's role cache so next request fetches fresh context. @@ -334,7 +335,7 @@ export async function handleAdminAssignRole( action: 'role.assign', resourceType: 'admin_role_assignment', resourceId: parsed.data.user_id, - actorId: guard.adminContext.clerk_user_id, + actorId: guard.adminContext.user_id, ip: getIp(request), success: true, }); @@ -367,7 +368,7 @@ export async function handleAdminRevokeRole( if (!parsed.success) return JsonResponse.badRequest(parsed.error.issues[0]?.message ?? 'Invalid request body'); const reqId = createRequestId(); - const logger = createAdminLogger(reqId).withOperation('role.revoke').withActor(guard.adminContext.clerk_user_id); + const logger = createAdminLogger(reqId).withOperation('role.revoke').withActor(guard.adminContext.user_id); return withAdminTracing(logger, 'role.revoke', async () => { const deleted = await revokeRole(asCfDb(env.ADMIN_DB), parsed.data.user_id, parsed.data.role_name); @@ -389,7 +390,7 @@ export async function handleAdminRevokeRole( action: 'role.revoke', resourceType: 'admin_role_assignment', resourceId: parsed.data.user_id, - actorId: guard.adminContext.clerk_user_id, + actorId: guard.adminContext.user_id, ip: getIp(request), success: true, }); @@ -410,7 +411,7 @@ export async function handleAdminGetMyPermissions( if (!guard.authorized) return JsonResponse.error(guard.error, guard.statusCode); return JsonResponse.success({ - clerk_user_id: guard.adminContext.clerk_user_id, + user_id: guard.adminContext.user_id, role_name: guard.adminContext.role_name, permissions: guard.adminContext.permissions, expires_at: guard.adminContext.expires_at, @@ -437,7 +438,7 @@ export async function handleAdminListTiers( if (dbGuard) return dbGuard; const reqId = createRequestId(); - const logger = createAdminLogger(reqId).withOperation('tier.list').withActor(guard.adminContext.clerk_user_id); + const logger = createAdminLogger(reqId).withOperation('tier.list').withActor(guard.adminContext.user_id); return withAdminTracing(logger, 'tier.list', async () => { const tiers = await listTierConfigs(env.ADMIN_DB!); @@ -473,7 +474,7 @@ export async function handleAdminUpdateTier( if (!parsed.success) return JsonResponse.badRequest(parsed.error.issues[0]?.message ?? 'Invalid request body'); const reqId = createRequestId(); - const logger = createAdminLogger(reqId).withOperation('tier.update').withActor(guard.adminContext.clerk_user_id); + const logger = createAdminLogger(reqId).withOperation('tier.update').withActor(guard.adminContext.user_id); return withAdminTracing(logger, 'tier.update', async () => { const oldTier = await getTierConfig(env.ADMIN_DB!, tierName); @@ -497,7 +498,7 @@ export async function handleAdminUpdateTier( configType: 'tier', action: 'update', configId: tierName, - actorId: guard.adminContext.clerk_user_id, + actorId: guard.adminContext.user_id, }); return JsonResponse.success({ tier: updated }); @@ -524,7 +525,7 @@ export async function handleAdminDeleteTier( if (!tierName) return JsonResponse.badRequest('Missing tier name in URL'); const reqId = createRequestId(); - const logger = createAdminLogger(reqId).withOperation('tier.delete').withActor(guard.adminContext.clerk_user_id); + const logger = createAdminLogger(reqId).withOperation('tier.delete').withActor(guard.adminContext.user_id); return withAdminTracing(logger, 'tier.delete', async () => { const oldTier = await getTierConfig(env.ADMIN_DB!, tierName); @@ -549,7 +550,7 @@ export async function handleAdminDeleteTier( configType: 'tier', action: 'delete', configId: tierName, - actorId: guard.adminContext.clerk_user_id, + actorId: guard.adminContext.user_id, }); return JsonResponse.success({ message: 'Tier deactivated' }); @@ -576,7 +577,7 @@ export async function handleAdminListScopes( if (dbGuard) return dbGuard; const reqId = createRequestId(); - const logger = createAdminLogger(reqId).withOperation('scope.list').withActor(guard.adminContext.clerk_user_id); + const logger = createAdminLogger(reqId).withOperation('scope.list').withActor(guard.adminContext.user_id); return withAdminTracing(logger, 'scope.list', async () => { const scopes = await listScopeConfigs(env.ADMIN_DB!); @@ -611,7 +612,7 @@ export async function handleAdminUpdateScope( if (!parsed.success) return JsonResponse.badRequest(parsed.error.issues[0]?.message ?? 'Invalid request body'); const reqId = createRequestId(); - const logger = createAdminLogger(reqId).withOperation('scope.update').withActor(guard.adminContext.clerk_user_id); + const logger = createAdminLogger(reqId).withOperation('scope.update').withActor(guard.adminContext.user_id); return withAdminTracing(logger, 'scope.update', async () => { const oldScope = await getScopeConfig(env.ADMIN_DB!, scopeName); @@ -634,7 +635,7 @@ export async function handleAdminUpdateScope( configType: 'scope', action: 'update', configId: scopeName, - actorId: guard.adminContext.clerk_user_id, + actorId: guard.adminContext.user_id, }); return JsonResponse.success({ scope: updated }); @@ -661,7 +662,7 @@ export async function handleAdminDeleteScope( if (!scopeName) return JsonResponse.badRequest('Missing scope name in URL'); const reqId = createRequestId(); - const logger = createAdminLogger(reqId).withOperation('scope.delete').withActor(guard.adminContext.clerk_user_id); + const logger = createAdminLogger(reqId).withOperation('scope.delete').withActor(guard.adminContext.user_id); return withAdminTracing(logger, 'scope.delete', async () => { const oldScope = await getScopeConfig(env.ADMIN_DB!, scopeName); @@ -685,7 +686,7 @@ export async function handleAdminDeleteScope( configType: 'scope', action: 'delete', configId: scopeName, - actorId: guard.adminContext.clerk_user_id, + actorId: guard.adminContext.user_id, }); return JsonResponse.success({ message: 'Scope deactivated' }); @@ -712,7 +713,7 @@ export async function handleAdminListEndpointOverrides( if (dbGuard) return dbGuard; const reqId = createRequestId(); - const logger = createAdminLogger(reqId).withOperation('endpoint.list').withActor(guard.adminContext.clerk_user_id); + const logger = createAdminLogger(reqId).withOperation('endpoint.list').withActor(guard.adminContext.user_id); return withAdminTracing(logger, 'endpoint.list', async () => { const overrides = await listEndpointOverrides(env.ADMIN_DB!); @@ -742,7 +743,7 @@ export async function handleAdminCreateEndpointOverride( if (!parsed.success) return JsonResponse.badRequest(parsed.error.issues[0]?.message ?? 'Invalid request body'); const reqId = createRequestId(); - const logger = createAdminLogger(reqId).withOperation('endpoint.create').withActor(guard.adminContext.clerk_user_id); + const logger = createAdminLogger(reqId).withOperation('endpoint.create').withActor(guard.adminContext.user_id); return withAdminTracing(logger, 'endpoint.create', async () => { const override = await createEndpointOverride(env.ADMIN_DB!, parsed.data); @@ -760,7 +761,7 @@ export async function handleAdminCreateEndpointOverride( configType: 'endpoint', action: 'create', configId: String(override.id), - actorId: guard.adminContext.clerk_user_id, + actorId: guard.adminContext.user_id, }); return JsonResponse.success({ override }, { status: 201 }); @@ -793,7 +794,7 @@ export async function handleAdminUpdateEndpointOverride( if (!parsed.success) return JsonResponse.badRequest(parsed.error.issues[0]?.message ?? 'Invalid request body'); const reqId = createRequestId(); - const logger = createAdminLogger(reqId).withOperation('endpoint.update').withActor(guard.adminContext.clerk_user_id); + const logger = createAdminLogger(reqId).withOperation('endpoint.update').withActor(guard.adminContext.user_id); return withAdminTracing(logger, 'endpoint.update', async () => { const oldOverride = await getEndpointOverride(env.ADMIN_DB!, id); @@ -814,7 +815,7 @@ export async function handleAdminUpdateEndpointOverride( configType: 'endpoint', action: 'update', configId: String(id), - actorId: guard.adminContext.clerk_user_id, + actorId: guard.adminContext.user_id, }); return JsonResponse.success({ override: updated }); @@ -841,7 +842,7 @@ export async function handleAdminDeleteEndpointOverride( if (!Number.isFinite(id)) return JsonResponse.badRequest('Invalid endpoint override ID'); const reqId = createRequestId(); - const logger = createAdminLogger(reqId).withOperation('endpoint.delete').withActor(guard.adminContext.clerk_user_id); + const logger = createAdminLogger(reqId).withOperation('endpoint.delete').withActor(guard.adminContext.user_id); return withAdminTracing(logger, 'endpoint.delete', async () => { const oldOverride = await getEndpointOverride(env.ADMIN_DB!, id); @@ -863,7 +864,7 @@ export async function handleAdminDeleteEndpointOverride( configType: 'endpoint', action: 'delete', configId: String(id), - actorId: guard.adminContext.clerk_user_id, + actorId: guard.adminContext.user_id, }); return JsonResponse.success({ message: 'Endpoint override deactivated' }); @@ -890,7 +891,7 @@ export async function handleAdminListFlags( if (dbGuard) return dbGuard; const reqId = createRequestId(); - const logger = createAdminLogger(reqId).withOperation('flag.list').withActor(guard.adminContext.clerk_user_id); + const logger = createAdminLogger(reqId).withOperation('flag.list').withActor(guard.adminContext.user_id); return withAdminTracing(logger, 'flag.list', async () => { const flags = await listFeatureFlags(env.ADMIN_DB!); @@ -920,10 +921,10 @@ export async function handleAdminCreateFlag( if (!parsed.success) return JsonResponse.badRequest(parsed.error.issues[0]?.message ?? 'Invalid request body'); const reqId = createRequestId(); - const logger = createAdminLogger(reqId).withOperation('flag.create').withActor(guard.adminContext.clerk_user_id); + const logger = createAdminLogger(reqId).withOperation('flag.create').withActor(guard.adminContext.user_id); return withAdminTracing(logger, 'flag.create', async () => { - const flag = await createFeatureFlag(env.ADMIN_DB!, parsed.data, guard.adminContext.clerk_user_id); + const flag = await createFeatureFlag(env.ADMIN_DB!, parsed.data, guard.adminContext.user_id); await writeAuditLog(env.ADMIN_DB!, { ...createAuditContext(request, guard.adminContext), @@ -938,7 +939,7 @@ export async function handleAdminCreateFlag( configType: 'flag', action: 'create', configId: flag.flag_name, - actorId: guard.adminContext.clerk_user_id, + actorId: guard.adminContext.user_id, }); return JsonResponse.success({ flag }, { status: 201 }); @@ -971,7 +972,7 @@ export async function handleAdminUpdateFlag( if (!parsed.success) return JsonResponse.badRequest(parsed.error.issues[0]?.message ?? 'Invalid request body'); const reqId = createRequestId(); - const logger = createAdminLogger(reqId).withOperation('flag.update').withActor(guard.adminContext.clerk_user_id); + const logger = createAdminLogger(reqId).withOperation('flag.update').withActor(guard.adminContext.user_id); return withAdminTracing(logger, 'flag.update', async () => { const oldFlag = await getFeatureFlag(env.ADMIN_DB!, flagName); @@ -992,7 +993,7 @@ export async function handleAdminUpdateFlag( configType: 'flag', action: 'update', configId: flagName, - actorId: guard.adminContext.clerk_user_id, + actorId: guard.adminContext.user_id, }); return JsonResponse.success({ flag: updated }); @@ -1019,7 +1020,7 @@ export async function handleAdminDeleteFlag( if (!flagName) return JsonResponse.badRequest('Missing flag name in URL'); const reqId = createRequestId(); - const logger = createAdminLogger(reqId).withOperation('flag.delete').withActor(guard.adminContext.clerk_user_id); + const logger = createAdminLogger(reqId).withOperation('flag.delete').withActor(guard.adminContext.user_id); return withAdminTracing(logger, 'flag.delete', async () => { const oldFlag = await getFeatureFlag(env.ADMIN_DB!, flagName); @@ -1041,7 +1042,7 @@ export async function handleAdminDeleteFlag( configType: 'flag', action: 'delete', configId: flagName, - actorId: guard.adminContext.clerk_user_id, + actorId: guard.adminContext.user_id, }); return JsonResponse.success({ message: 'Feature flag deleted' }); @@ -1086,7 +1087,7 @@ export async function handleAdminQueryAuditLogs( if (!parsed.success) return JsonResponse.badRequest(parsed.error.issues[0]?.message ?? 'Invalid query parameters'); const reqId = createRequestId(); - const logger = createAdminLogger(reqId).withOperation('audit.query').withActor(guard.adminContext.clerk_user_id); + const logger = createAdminLogger(reqId).withOperation('audit.query').withActor(guard.adminContext.user_id); return withAdminTracing(logger, 'audit.query', async () => { const result = await queryAuditLogs(env.ADMIN_DB!, parsed.data); @@ -1119,7 +1120,7 @@ export async function handleAdminListAnnouncements( if (dbGuard) return dbGuard; const reqId = createRequestId(); - const logger = createAdminLogger(reqId).withOperation('announcement.list').withActor(guard.adminContext.clerk_user_id); + const logger = createAdminLogger(reqId).withOperation('announcement.list').withActor(guard.adminContext.user_id); return withAdminTracing(logger, 'announcement.list', async () => { const announcements = await listAnnouncements(env.ADMIN_DB!); @@ -1149,10 +1150,10 @@ export async function handleAdminCreateAnnouncement( if (!parsed.success) return JsonResponse.badRequest(parsed.error.issues[0]?.message ?? 'Invalid request body'); const reqId = createRequestId(); - const logger = createAdminLogger(reqId).withOperation('announcement.create').withActor(guard.adminContext.clerk_user_id); + const logger = createAdminLogger(reqId).withOperation('announcement.create').withActor(guard.adminContext.user_id); return withAdminTracing(logger, 'announcement.create', async () => { - const announcement = await createAnnouncement(env.ADMIN_DB!, parsed.data, guard.adminContext.clerk_user_id); + const announcement = await createAnnouncement(env.ADMIN_DB!, parsed.data, guard.adminContext.user_id); await writeAuditLog(env.ADMIN_DB!, { ...createAuditContext(request, guard.adminContext), @@ -1167,7 +1168,7 @@ export async function handleAdminCreateAnnouncement( configType: 'announcement', action: 'create', configId: String(announcement.id), - actorId: guard.adminContext.clerk_user_id, + actorId: guard.adminContext.user_id, }); return JsonResponse.success({ announcement }, { status: 201 }); @@ -1200,7 +1201,7 @@ export async function handleAdminUpdateAnnouncement( if (!parsed.success) return JsonResponse.badRequest(parsed.error.issues[0]?.message ?? 'Invalid request body'); const reqId = createRequestId(); - const logger = createAdminLogger(reqId).withOperation('announcement.update').withActor(guard.adminContext.clerk_user_id); + const logger = createAdminLogger(reqId).withOperation('announcement.update').withActor(guard.adminContext.user_id); return withAdminTracing(logger, 'announcement.update', async () => { // Fetch old state for audit diff. @@ -1224,7 +1225,7 @@ export async function handleAdminUpdateAnnouncement( configType: 'announcement', action: 'update', configId: String(id), - actorId: guard.adminContext.clerk_user_id, + actorId: guard.adminContext.user_id, }); return JsonResponse.success({ announcement: updated }); @@ -1251,7 +1252,7 @@ export async function handleAdminDeleteAnnouncement( if (!Number.isFinite(id)) return JsonResponse.badRequest('Invalid announcement ID'); const reqId = createRequestId(); - const logger = createAdminLogger(reqId).withOperation('announcement.delete').withActor(guard.adminContext.clerk_user_id); + const logger = createAdminLogger(reqId).withOperation('announcement.delete').withActor(guard.adminContext.user_id); return withAdminTracing(logger, 'announcement.delete', async () => { const allAnnouncements = await listAnnouncements(env.ADMIN_DB!); @@ -1274,7 +1275,7 @@ export async function handleAdminDeleteAnnouncement( configType: 'announcement', action: 'delete', configId: String(id), - actorId: guard.adminContext.clerk_user_id, + actorId: guard.adminContext.user_id, }); return JsonResponse.success({ message: 'Announcement deactivated' }); @@ -1303,7 +1304,7 @@ export async function handleAdminGetMyContext( if (dbGuard) return dbGuard; const reqId = createRequestId(); - const logger = createAdminLogger(reqId).withOperation('context.my').withActor(guard.adminContext.clerk_user_id); + const logger = createAdminLogger(reqId).withOperation('context.my').withActor(guard.adminContext.user_id); return withAdminTracing(logger, 'context.my', async () => { // Fetch supplementary context in parallel. @@ -1314,7 +1315,7 @@ export async function handleAdminGetMyContext( return JsonResponse.success({ admin: { - clerk_user_id: guard.adminContext.clerk_user_id, + user_id: guard.adminContext.user_id, role_name: guard.adminContext.role_name, permissions: guard.adminContext.permissions, expires_at: guard.adminContext.expires_at, diff --git a/worker/middleware/admin-role-middleware.ts b/worker/middleware/admin-role-middleware.ts index bad743972..bf633cf41 100644 --- a/worker/middleware/admin-role-middleware.ts +++ b/worker/middleware/admin-role-middleware.ts @@ -147,7 +147,7 @@ export function requireAdminPermission(permission: AdminPermission): AdminGuardF if (!adminContext.permissions.includes(permission)) { console.warn( - `[admin-role-middleware] Permission denied: userId=${adminContext.clerk_user_id}, ` + + `[admin-role-middleware] Permission denied: userId=${adminContext.user_id}, ` + `role=${adminContext.role_name}, required=${permission}`, ); return { authorized: false, error: `Missing required permission: ${permission}`, statusCode: 403 }; @@ -187,7 +187,7 @@ export function requireAnyAdminPermission(permissions: AdminPermission[]): Admin const hasAny = permissions.some((p) => adminContext.permissions.includes(p)); if (!hasAny) { console.warn( - `[admin-role-middleware] Permission denied (any-of): userId=${adminContext.clerk_user_id}, ` + + `[admin-role-middleware] Permission denied (any-of): userId=${adminContext.user_id}, ` + `role=${adminContext.role_name}, required=[${permissions.join(', ')}]`, ); return { @@ -231,7 +231,7 @@ export function requireAllAdminPermissions(permissions: AdminPermission[]): Admi const missing = permissions.filter((p) => !adminContext.permissions.includes(p)); if (missing.length > 0) { console.warn( - `[admin-role-middleware] Permission denied (all-of): userId=${adminContext.clerk_user_id}, ` + + `[admin-role-middleware] Permission denied (all-of): userId=${adminContext.user_id}, ` + `role=${adminContext.role_name}, missing=[${missing.join(', ')}]`, ); return { @@ -256,7 +256,7 @@ export function requireAllAdminPermissions(permissions: AdminPermission[]): Admi * ```ts * const result = await extractAdminContext(request, env); * if (result.authorized) { - * auditLog.userId = result.adminContext.clerk_user_id; + * auditLog.userId = result.adminContext.user_id; * } * ``` * diff --git a/worker/schemas.ts b/worker/schemas.ts index 69fd249bc..4c501a22f 100644 --- a/worker/schemas.ts +++ b/worker/schemas.ts @@ -965,7 +965,6 @@ export const AgentSessionRowSchema = z.object({ agent_slug: z.string(), instance_id: z.string(), user_id: z.string().uuid().nullable().optional(), - clerk_user_id: z.string().nullable().optional(), started_at: z.string(), ended_at: z.string().nullable().optional(), end_reason: z.string().nullable().optional(), @@ -1099,8 +1098,7 @@ export type AdminRoleRow = z.infer; /** Row from `admin_role_assignments` table */ export const AdminRoleAssignmentRowSchema = z.object({ id: z.number(), - /** @deprecated DB column still named `clerk_user_id` — will be renamed to `user_id` in a future migration */ - clerk_user_id: z.string(), + user_id: z.string(), role_name: AdminRoleNameSchema, assigned_by: z.string(), assigned_at: z.string(), @@ -1334,8 +1332,7 @@ export const AdminListResponseSchema = (itemSchema: T) = /** Resolved admin user context (from KV cache or D1 lookup) */ export const ResolvedAdminContextSchema = z.object({ - /** @deprecated DB column still named `clerk_user_id` — will be renamed to `user_id` in a future migration */ - clerk_user_id: z.string(), + user_id: z.string(), role_name: AdminRoleNameSchema, permissions: z.array(AdminPermissionSchema), expires_at: z.string().nullable(), diff --git a/worker/services/admin-audit-service.test.ts b/worker/services/admin-audit-service.test.ts index 40c12ac61..677a372e1 100644 --- a/worker/services/admin-audit-service.test.ts +++ b/worker/services/admin-audit-service.test.ts @@ -319,7 +319,7 @@ Deno.test('createAuditContext - extracts correct fields from request and admin c }); const adminContext = { - clerk_user_id: 'user_admin', + user_id: 'user_admin', role_name: 'super-admin', }; diff --git a/worker/services/admin-audit-service.ts b/worker/services/admin-audit-service.ts index 5ee7dbf80..4844969cc 100644 --- a/worker/services/admin-audit-service.ts +++ b/worker/services/admin-audit-service.ts @@ -366,14 +366,14 @@ export async function countAuditLogs( */ export function createAuditContext( request: Request, - adminContext: { clerk_user_id: string; role_name: string } | null, + adminContext: { user_id: string; role_name: string } | null, ): { actor_id: string; actor_email: string | null; ip_address: string | null; user_agent: string | null; } { - const actorId = adminContext?.clerk_user_id ?? 'unknown'; + const actorId = adminContext?.user_id ?? 'unknown'; const ipAddress = request.headers.get('cf-connecting-ip') ?? request.headers.get('x-forwarded-for') ?? null; diff --git a/worker/services/admin-feature-flag-service.test.ts b/worker/services/admin-feature-flag-service.test.ts index 51f4cef27..407d8c00f 100644 --- a/worker/services/admin-feature-flag-service.test.ts +++ b/worker/services/admin-feature-flag-service.test.ts @@ -232,7 +232,7 @@ Deno.test('evaluateFlag - 100% rollout returns true', async () => { const db = createMockD1({ first: () => makeFlagRow({ rollout_percentage: 100 }), }); - const result = await evaluateFlag(db, 'dark-mode', { clerkUserId: 'user_1' }); + const result = await evaluateFlag(db, 'dark-mode', { userId: 'user_1' }); assertEquals(result, true); }); @@ -240,7 +240,7 @@ Deno.test('evaluateFlag - 0% rollout returns false', async () => { const db = createMockD1({ first: () => makeFlagRow({ rollout_percentage: 0 }), }); - const result = await evaluateFlag(db, 'dark-mode', { clerkUserId: 'user_1' }); + const result = await evaluateFlag(db, 'dark-mode', { userId: 'user_1' }); assertEquals(result, false); }); @@ -249,8 +249,8 @@ Deno.test('evaluateFlag - deterministic hash for same user produces consistent r first: () => makeFlagRow({ rollout_percentage: 50 }), }); - const result1 = await evaluateFlag(db, 'dark-mode', { clerkUserId: 'user_stable' }); - const result2 = await evaluateFlag(db, 'dark-mode', { clerkUserId: 'user_stable' }); + const result1 = await evaluateFlag(db, 'dark-mode', { userId: 'user_stable' }); + const result2 = await evaluateFlag(db, 'dark-mode', { userId: 'user_stable' }); assertEquals(result1, result2); }); @@ -306,7 +306,7 @@ Deno.test('evaluateFlag - user targeting: included user always passes', async () rollout_percentage: 0, // 0% rollout but user override should win }), }); - const result = await evaluateFlag(db, 'dark-mode', { clerkUserId: 'user_vip' }); + const result = await evaluateFlag(db, 'dark-mode', { userId: 'user_vip' }); assertEquals(result, true); }); @@ -318,7 +318,7 @@ Deno.test('evaluateFlag - user targeting: non-targeted user falls through to rol rollout_percentage: 0, }), }); - const result = await evaluateFlag(db, 'dark-mode', { clerkUserId: 'user_regular' }); + const result = await evaluateFlag(db, 'dark-mode', { userId: 'user_regular' }); assertEquals(result, false); }); diff --git a/worker/services/admin-feature-flag-service.ts b/worker/services/admin-feature-flag-service.ts index b46695a35..1f35742f8 100644 --- a/worker/services/admin-feature-flag-service.ts +++ b/worker/services/admin-feature-flag-service.ts @@ -18,8 +18,8 @@ import { type CreateFeatureFlagRequest, type FeatureFlagRow, FeatureFlagRowSchem export interface FlagEvaluationContext { /** User tier, e.g. 'free', 'pro', 'admin'. */ userTier?: string; - /** Clerk user ID for user-level targeting. */ - clerkUserId?: string; + /** User ID for user-level targeting. */ + userId?: string; } // --------------------------------------------------------------------------- @@ -238,9 +238,9 @@ export async function deleteFeatureFlag( * * Evaluation order: * 1. If the flag does not exist or is disabled → `false`. - * 2. If `target_users` is non-empty and includes `clerkUserId` → `true` (user override). + * 2. If `target_users` is non-empty and includes `userId` → `true` (user override). * 3. If `target_tiers` is non-empty and does NOT include `userTier` → `false`. - * 4. Rollout percentage: deterministically hash `flagName + clerkUserId` (or a random + * 4. Rollout percentage: deterministically hash `flagName + userId` (or a random * seed when no user ID is available) and check if the bucket < rollout_percentage. * * @param db - D1 database binding (ADMIN_DB). @@ -259,8 +259,8 @@ export async function evaluateFlag( if (!flag || !flag.enabled) return false; // Step 2: explicit user-level override - if (flag.target_users.length > 0 && context.clerkUserId) { - if (flag.target_users.includes(context.clerkUserId)) return true; + if (flag.target_users.length > 0 && context.userId) { + if (flag.target_users.includes(context.userId)) return true; } // Step 3: tier targeting @@ -276,8 +276,8 @@ export async function evaluateFlag( // Anonymous users without a stable identity are not eligible for percentage rollout // to ensure deterministic behavior (no random flicker between requests). - if (!context.clerkUserId) return false; - const seed = `${flagName}${context.clerkUserId}`; + if (!context.userId) return false; + const seed = `${flagName}${context.userId}`; const bucket = simpleHash(seed); return bucket < flag.rollout_percentage; } diff --git a/worker/services/admin-role-service.test.ts b/worker/services/admin-role-service.test.ts index adcb87bc0..7696a2150 100644 --- a/worker/services/admin-role-service.test.ts +++ b/worker/services/admin-role-service.test.ts @@ -90,7 +90,7 @@ function makeRoleRow(overrides: Partial> = {}) { function makeAssignmentRow(overrides: Partial> = {}) { return { id: 1, - clerk_user_id: 'user_abc', + user_id: 'user_abc', role_name: 'editor', assigned_by: 'user_admin', assigned_at: '2025-01-01T00:00:00.000Z', @@ -239,7 +239,7 @@ Deno.test('updateRole - handles multiple fields', async () => { Deno.test('resolveAdminContext - returns cached context from KV on hit', async () => { const kv = createMockKV(); const cached = { - clerk_user_id: 'user_abc', + user_id: 'user_abc', role_name: 'editor', permissions: ['config:read', 'config:write'], expires_at: null, @@ -248,7 +248,7 @@ Deno.test('resolveAdminContext - returns cached context from KV on hit', async ( const result = await resolveAdminContext({ RATE_LIMIT: kv as unknown as KVNamespace }, 'user_abc'); assertExists(result); - assertEquals(result!.clerk_user_id, 'user_abc'); + assertEquals(result!.user_id, 'user_abc'); assertEquals(result!.role_name, 'editor'); assertEquals(result!.permissions.length, 2); }); @@ -261,7 +261,7 @@ Deno.test('resolveAdminContext - falls through to D1 on KV miss and caches resul const kv = createMockKV(); const db = createMockD1({ first: () => ({ - clerk_user_id: 'user_abc', + user_id: 'user_abc', role_name: 'editor', expires_at: null, permissions: JSON.stringify(['config:read', 'config:write']), @@ -296,7 +296,7 @@ Deno.test('resolveAdminContext - returns null when db is undefined', async () => Deno.test('resolveAdminContext - returns null for expired assignment', async () => { const db = createMockD1({ first: () => ({ - clerk_user_id: 'user_abc', + user_id: 'user_abc', role_name: 'editor', expires_at: '2020-01-01T00:00:00.000Z', // In the past permissions: JSON.stringify(['config:read']), @@ -310,7 +310,7 @@ Deno.test('resolveAdminContext - returns null for expired assignment', async () Deno.test('resolveAdminContext - returns null for corrupt permissions JSON', async () => { const db = createMockD1({ first: () => ({ - clerk_user_id: 'user_abc', + user_id: 'user_abc', role_name: 'editor', expires_at: null, permissions: 'NOT_JSON{{{', @@ -327,7 +327,7 @@ Deno.test('resolveAdminContext - falls through on corrupt KV cache', async () => const db = createMockD1({ first: () => ({ - clerk_user_id: 'user_abc', + user_id: 'user_abc', role_name: 'editor', expires_at: null, permissions: JSON.stringify(['config:read']), @@ -354,7 +354,7 @@ Deno.test('assignRole - creates assignment and returns row', async () => { 'user_admin', ); assertExists(result); - assertEquals(result!.clerk_user_id, 'user_abc'); + assertEquals(result!.user_id, 'user_abc'); assertEquals(result!.role_name, 'editor'); assertEquals(result!.assigned_by, 'user_admin'); }); @@ -421,7 +421,7 @@ Deno.test('listRoleAssignments - returns all assignments', async () => { all: () => ({ results: [ makeAssignmentRow({ id: 1 }), - makeAssignmentRow({ id: 2, clerk_user_id: 'user_def' }), + makeAssignmentRow({ id: 2, user_id: 'user_def' }), ], }), }); diff --git a/worker/services/admin-role-service.ts b/worker/services/admin-role-service.ts index 78480cf0c..4f611e3d5 100644 --- a/worker/services/admin-role-service.ts +++ b/worker/services/admin-role-service.ts @@ -4,7 +4,7 @@ * All queries use parameterized `.prepare().bind()` (ZTA requirement — no string interpolation). * All D1 row results are validated through Zod schemas before returning. * - * KV cache key format: `admin:role:{clerkUserId}` + * KV cache key format: `admin:role:{userId}` * KV cache TTL: 5 minutes (300 seconds) */ @@ -43,9 +43,9 @@ export interface AdminEnv { // --------------------------------------------------------------------------- /** - * Resolve a Clerk user ID to their admin role and permissions. + * Resolve a user ID to their admin role and permissions. * - * 1. Checks KV cache (`admin:role:{clerkUserId}`) first. + * 1. Checks KV cache (`admin:role:{userId}`) first. * 2. On cache miss, queries ADMIN_DB for the role assignment + role permissions. * 3. Expired assignments (past `expires_at`) are treated as no-role. * 4. Valid contexts are cached in KV for {@link CACHE_TTL_SECONDS} seconds. @@ -54,14 +54,14 @@ export interface AdminEnv { */ export async function resolveAdminContext( env: AdminEnv, - clerkUserId: string, + userId: string, ): Promise { const kv = env.RATE_LIMIT; const db = env.ADMIN_DB; // ── KV cache check ──────────────────────────────────────────────────── if (kv) { - const cached = await kv.get(`${KV_PREFIX}${clerkUserId}`); + const cached = await kv.get(`${KV_PREFIX}${userId}`); if (cached !== null) { try { return ResolvedAdminContextSchema.parse(JSON.parse(cached)); @@ -82,19 +82,19 @@ export async function resolveAdminContext( const row = await db .prepare( `SELECT - a.clerk_user_id, + a.user_id, a.role_name, a.expires_at, r.permissions FROM admin_role_assignments a JOIN admin_roles r ON r.role_name = a.role_name AND r.is_active = 1 - WHERE a.clerk_user_id = ? + WHERE a.user_id = ? ORDER BY a.assigned_at DESC LIMIT 1`, ) - .bind(clerkUserId) + .bind(userId) .first<{ - clerk_user_id: string; + user_id: string; role_name: string; expires_at: string | null; permissions: string; @@ -118,7 +118,7 @@ export async function resolveAdminContext( } const context = ResolvedAdminContextSchema.parse({ - clerk_user_id: row.clerk_user_id, + user_id: row.user_id, role_name: row.role_name, permissions, expires_at: row.expires_at, @@ -126,7 +126,7 @@ export async function resolveAdminContext( // ── Write-through to KV cache ───────────────────────────────────────── if (kv) { - await kv.put(`${KV_PREFIX}${clerkUserId}`, JSON.stringify(context), { + await kv.put(`${KV_PREFIX}${userId}`, JSON.stringify(context), { expirationTtl: CACHE_TTL_SECONDS, }); } @@ -286,7 +286,7 @@ export async function updateRole( // --------------------------------------------------------------------------- /** - * Assign an admin role to a Clerk user (upsert on conflict). + * Assign an admin role to a user (upsert on conflict). * * If the user already has the same role, the assignment metadata is updated. * @@ -304,9 +304,9 @@ export async function assignRole( const now = new Date().toISOString(); const row = await db .prepare( - `INSERT INTO admin_role_assignments (clerk_user_id, role_name, assigned_by, assigned_at, expires_at) + `INSERT INTO admin_role_assignments (user_id, role_name, assigned_by, assigned_at, expires_at) VALUES (?, ?, ?, ?, ?) - ON CONFLICT(clerk_user_id) DO UPDATE SET + ON CONFLICT(user_id) DO UPDATE SET role_name = excluded.role_name, assigned_by = excluded.assigned_by, assigned_at = excluded.assigned_at, @@ -314,7 +314,7 @@ export async function assignRole( RETURNING *`, ) .bind( - data.user_id, // maps to `clerk_user_id` DB column — to be renamed in a future DB migration + data.user_id, data.role_name, assignedBy, now, @@ -336,7 +336,7 @@ export async function assignRole( */ export async function revokeRole( db: D1Database | undefined, - clerkUserId: string, + userId: string, roleName: string, ): Promise { if (!db) { @@ -344,8 +344,8 @@ export async function revokeRole( } const result = await db - .prepare('DELETE FROM admin_role_assignments WHERE clerk_user_id = ? AND role_name = ?') - .bind(clerkUserId, roleName) + .prepare('DELETE FROM admin_role_assignments WHERE user_id = ? AND role_name = ?') + .bind(userId, roleName) .run(); return (result.meta?.changes ?? 0) > 0; @@ -353,14 +353,14 @@ export async function revokeRole( /** Optional filters for listing role assignments. */ export interface ListAssignmentsFilter { - readonly clerk_user_id?: string; + readonly user_id?: string; readonly role_name?: string; } /** * List role assignments with optional filters. * - * @param filters — Narrow by `clerk_user_id` and/or `role_name`. + * @param filters — Narrow by `user_id` and/or `role_name`. * @returns Array of validated assignment rows. */ export async function listRoleAssignments( @@ -374,9 +374,9 @@ export async function listRoleAssignments( const conditions: string[] = []; const values: unknown[] = []; - if (filters?.clerk_user_id) { - conditions.push('clerk_user_id = ?'); - values.push(filters.clerk_user_id); + if (filters?.user_id) { + conditions.push('user_id = ?'); + values.push(filters.user_id); } if (filters?.role_name) { conditions.push('role_name = ?'); @@ -406,11 +406,11 @@ export async function listRoleAssignments( */ export async function invalidateRoleCache( kv: KVNamespace | undefined, - clerkUserId: string, + userId: string, ): Promise { if (!kv) { return; } - await kv.delete(`${KV_PREFIX}${clerkUserId}`); + await kv.delete(`${KV_PREFIX}${userId}`); } diff --git a/worker/utils/cors.ts b/worker/utils/cors.ts index 7f068dea8..aa16d01d0 100644 --- a/worker/utils/cors.ts +++ b/worker/utils/cors.ts @@ -92,7 +92,7 @@ export function getCorsHeaders(request: Request, env?: Env): Record { return { - 'Access-Control-Allow-Origin': '*', + 'Access-Control-Allow-Origin': '*', // zta-ok: intentional wildcard for unauthenticated public endpoints }; } diff --git a/wrangler.toml b/wrangler.toml index 92f4235bf..2e2f1b6ec 100644 --- a/wrangler.toml +++ b/wrangler.toml @@ -23,8 +23,6 @@ # # SECRETS — never put in this file; use `wrangler secret put` for production # and .dev.vars for local dev: -# wrangler secret put CLERK_SECRET_KEY -# wrangler secret put CLERK_WEBHOOK_SECRET # wrangler secret put TURNSTILE_SECRET_KEY # wrangler secret put BETTER_AUTH_SECRET # wrangler secret put CF_ACCESS_AUD @@ -112,10 +110,6 @@ destinations = [ "sentry-traces" ] # Keep in sync with VERSION in src/version.ts. Run `deno task version:sync` to propagate. COMPILER_VERSION = "0.84.0" ENVIRONMENT = "production" -# Clerk publishable key — uncomment and set to pk_live_... when Clerk is production-ready. -# To activate Clerk: uncomment both lines below and also set CLERK_JWKS_URL. -# CLERK_PUBLISHABLE_KEY = "pk_test_bWF0dXJlLWxhbXByZXktNzMuY2xlcmsuYWNjb3VudHMuZGV2JA" -# CLERK_JWKS_URL = "https://mature-lamprey-73.accounts.dev/.well-known/jwks.json" # Public Turnstile site key — not a secret; safe to commit. # For local dev, .dev.vars overrides this with the always-pass test key (1x000...AA). TURNSTILE_SITE_KEY = "0x4AAAAAACMKiPZdJh8I8IEM"
User ID - {{ row.clerk_user_id }} + {{ row.user_id }}