diff --git a/.cursor/rules/base/env-files.mdc b/.cursor/rules/base/env-files.mdc new file mode 100644 index 00000000..8f240d55 --- /dev/null +++ b/.cursor/rules/base/env-files.mdc @@ -0,0 +1,48 @@ +--- +description: Environment files — templates, naming, alignment with t3 createEnv +glob: "**/.env.*.example" +alwaysApply: false +--- + +## Source of truth + +- Runtime vars: each app’s `createEnv` in `lib/env.ts` or `src/lib/env.ts` (t3-oss + Zod). Adding/removing a var **requires** updating that schema and the committed template(s) for that app. +- Do not document env vars only in README without a template line. + +## Secrets and commits + +- **Never** put real API keys, tokens, or production secrets in committed `.env..example` templates, nor in `.env.development`, `.env.staging`, or `.env.production`. Use obvious placeholders (`sk-ant-xxx`, `your_dynamic_environment_id`). +- `.env`, `.env.local`, and secret-bearing `.env.test` stay gitignored per app; ship `.env.test.example` where tests need a template. + +## Naming (templates) — pattern `.env..example` + +- **Canonical glob**: `**/.env.*.example` (Cursor: `@**/.env.*.example`). Filenames must be `.env.` + one qualifier + `.example` (e.g. `defaults`, `local`, `test`). Do **not** add `.env.sample`, `.env-example`, or bare `.env.example`. +- **Fastify API** (`apps/api`): `.env.defaults.example` (copy to `.env`); `.env.test.example` → `.env.test`. +- **Next.js** (`apps/web`, `apps/mathler`): `.env.local.example` (copy to `.env.local`); committed `.env.development` / `.env.staging` / `.env.production` only for non-sensitive defaults (`NEXT_PUBLIC_*`, etc.). +- **Expo** (`apps/mobile`): `.env.defaults.example` with `EXPO_PUBLIC_*`. +- **Docu**: committed `.env.development`; optional `.env.defaults.example` aligned with `lib/env.ts`. +- **Legacy**: `.env.schema` may remain; update `block-secret-files` / gitleaks when renaming templates. + +## Next.js section order (web + mathler) + +Use the same header order in `.env.local.example` and committed `.env.*`: + +1. Short header (what is committed vs local-only). +2. Client / `NEXT_PUBLIC_*` (API URL, auth, logging, legal). +3. Server-only / local secrets (`JWT_SECRET`, etc.) — template only where applicable. +4. E2E / Playwright (`PLAYWRIGHT_APP_URL`, `PLAYWRIGHT_API_URL` on web; unify mathler on the same names; avoid duplicate `BASE_URL` / `PLAYWRIGHT_TEST_BASE_URL` without documented precedence). +5. Optional integrations (Sentry, …). + +## Prefix discipline + +- Browser-exposed: `NEXT_PUBLIC_*` (Next), `EXPO_PUBLIC_*` (Expo). Do not use unprefixed names for client-only config. +- If `createEnv` expects `NEXT_PUBLIC_LOG_*`, do not use `LOG_*` alone in Next env files. + +## API template completeness + +- `apps/api/.env.defaults.example` and `.env.test.example` share **the same section headings**; defaults template documents the full `env.ts` surface (optional blocks commented). Tests override a subset via `.env.test`. + +## When editing + +- After changing any template, verify `pnpm` dev/test for that app still loads `createEnv` without missing/empty required vars. +- Update docs under `apps/docu/` if canonical filenames or copy instructions change. diff --git a/.gitleaks.toml b/.gitleaks.toml index 91991728..e6865c74 100644 --- a/.gitleaks.toml +++ b/.gitleaks.toml @@ -11,12 +11,7 @@ useDefault = true description = "Allowlist for test fixtures and example files" paths = [ '''apps/web/e2e/wallet-setup/.*\.(ts|js|mjs)$''', - '''\.env-example$''', - '''\.env\.example$''', - '''\.env\.test\.example$''', - '''\.env-sample$''', - '''^apps/web/\.env\.local\.example$''', - '''\.env\.sample$''', + '''\.env\.[^/]+\.example$''', '''\.env\.schema$''', '''\.env\.test$''', '''\.github/workflows/.*\.yml$''', diff --git a/.trufflehogignore b/.trufflehogignore index 17d1dac8..174d05a7 100644 --- a/.trufflehogignore +++ b/.trufflehogignore @@ -7,13 +7,10 @@ ^\.cursor/skills/.* ^packages/.*/README\.md$ -# Example and sample files -.*\.example$ -.*\.sample$ -.*\.env-example$ -.*\.env\.example$ +# Committed env templates and defaults (match scripts/block-secret-files.mjs allowlist) +.*\.env\.[^/]+\.example$ .*\.env\.schema$ -.*\.env\.test$ +.*\.env\.(development|staging|production|test)$ # Test files .*\.test\.(ts|tsx|js|jsx|mjs)$ diff --git a/apps/api/.env-sample b/apps/api/.env-sample deleted file mode 100644 index 983cfa38..00000000 --- a/apps/api/.env-sample +++ /dev/null @@ -1,63 +0,0 @@ -# AI provider: Anthropic (default), Open Router, or Ollama. At least one must be configured. -# Anthropic (direct, default): Claude Sonnet 4 via Anthropic API. Preferred when set. -ANTHROPIC_API_KEY=sk-ant-xxx - -# Open Router (alternative): use when no Anthropic key; Claude Sonnet 4 or AI_DEFAULT_MODEL=openrouter/free -# OPEN_ROUTER_API_KEY=sk-or-v1-xxxxxxxxxxxxxxxxxx - -# Ollama (optional): for data privacy—prompts stay on your infra. See self-hosted-llm docs. -# OLLAMA_BASE_URL=http://localhost:11434 - -# Optional: Force provider (anthropic | openrouter | ollama). Inferred from env if unset. -# AI_PROVIDER=openrouter - -# Optional: Override default model. Anthropic/OpenRouter: Claude Sonnet 4. Ollama: qwen3:8b. Use AI_DEFAULT_MODEL=openrouter/free for OpenRouter free tier. -# AI_DEFAULT_MODEL=openrouter/free - -# Optional: Upstream AI timeout (ms). Default 120000 (2 min). -# AI_UPSTREAM_TIMEOUT_MS=120000 - -# Optional: Brave Search API (enables web search tool in chat) -# BRAVE_SEARCH_API_KEY=BSA... - -# JWT signing secret. Must match Next.js. Min 32 chars. -JWT_SECRET=default-jwt-secret-min-32-chars-for-dev - -# Database (PGLITE=true uses in-memory PGLite; when false, DATABASE_URL is required) -PGLITE=false -DATABASE_URL=postgresql://postgres:postgres@127.0.0.1:54322/postgres - -# Optional: GitHub OAuth (Sign in with GitHub) -# GITHUB_CLIENT_ID= -# GITHUB_CLIENT_SECRET= -# Single callback URL (backward compat): -# OAUTH_GITHUB_CALLBACK_URL=http://localhost:3000/auth/callback/oauth/github -# Multiple callbacks for web + mobile (comma-separated): -# OAUTH_GITHUB_CALLBACK_URLS=http://localhost:3000/auth/callback/oauth/github,yourapp://auth/callback - -# Optional: Google OAuth (One Tap popup + redirect fallback) -# GOOGLE_CLIENT_ID=xxx.apps.googleusercontent.com -# GOOGLE_CLIENT_SECRET=xxx -# Single callback URL (backward compat): -# OAUTH_GOOGLE_CALLBACK_URL=http://localhost:3000/auth/callback/oauth/google -# Multiple callbacks for web + mobile (comma-separated; client sends redirect_uri to choose): -# OAUTH_GOOGLE_CALLBACK_URLS=http://localhost:3000/auth/callback/oauth/google,yourapp://auth/callback - -# Optional: Facebook OAuth -# FACEBOOK_CLIENT_ID= -# FACEBOOK_CLIENT_SECRET= -# Single callback URL (backward compat): -# OAUTH_FACEBOOK_CALLBACK_URL=http://localhost:3000/auth/callback/oauth/facebook -# Multiple callbacks (comma-separated): -# OAUTH_FACEBOOK_CALLBACK_URLS=http://localhost:3000/auth/callback/oauth/facebook,yourapp://auth/callback - -# Optional: Twitter (X) OAuth -# TWITTER_CLIENT_ID= -# TWITTER_CLIENT_SECRET= -# Single callback URL (backward compat): -# OAUTH_TWITTER_CALLBACK_URL=http://localhost:3000/auth/callback/oauth/twitter -# Multiple callbacks (comma-separated): -# OAUTH_TWITTER_CALLBACK_URLS=http://localhost:3000/auth/callback/oauth/twitter,yourapp://auth/callback - -# CORS + URL allowlist. Default: * (any). Comma-separated origins to restrict. -# ALLOWED_ORIGINS=https://app.example.com,https://localhost:3000 diff --git a/apps/api/.env.defaults.example b/apps/api/.env.defaults.example new file mode 100644 index 00000000..e596c739 --- /dev/null +++ b/apps/api/.env.defaults.example @@ -0,0 +1,98 @@ +# Copy to .env and adjust. Placeholders only — never commit real secrets. +# Schema: apps/api/src/lib/env.ts (t3 createEnv) + +# ----------------------------------------------------------------------------- +# Core +# ----------------------------------------------------------------------------- +PORT=3001 +HOST=0.0.0.0 +# NODE_ENV=development +# CI=false + +# ----------------------------------------------------------------------------- +# Database (PGLITE=true uses in-memory DB; else DATABASE_URL required) +# ----------------------------------------------------------------------------- +PGLITE=false +DATABASE_URL=postgresql://postgres:postgres@127.0.0.1:54322/postgres + +# ----------------------------------------------------------------------------- +# Ops / limits / logging +# ----------------------------------------------------------------------------- +# RATE_LIMIT_MAX=100 +# RATE_LIMIT_TIME_WINDOW=60000 +# TRUST_PROXY=true +# SECURITY_HEADERS_ENABLED=true +# BODY_LIMIT=1048576 +# REQUEST_TIMEOUT=30000 +# LOG_LEVEL=info + +# ----------------------------------------------------------------------------- +# Sentry (optional) +# ----------------------------------------------------------------------------- +# SENTRY_DSN= +# SENTRY_ENVIRONMENT= + +# ----------------------------------------------------------------------------- +# AI (at least one provider path for chat features) +# ----------------------------------------------------------------------------- +ANTHROPIC_API_KEY=sk-ant-xxx +# OPEN_ROUTER_API_KEY=sk-or-v1-xxxxxxxxxxxxxxxxxx +# OLLAMA_BASE_URL=http://localhost:11434 +# AI_PROVIDER=anthropic +# AI_DEFAULT_MODEL= +# AI_UPSTREAM_TIMEOUT_MS=120000 +# BRAVE_SEARCH_API_KEY= + +# ----------------------------------------------------------------------------- +# JWT / encryption (JWT_SECRET must match Next.js web app) +# ----------------------------------------------------------------------------- +JWT_SECRET=default-jwt-secret-min-32-chars-for-dev +# 64 hex chars dev default; must not be all-zero in production +ENCRYPTION_KEY=0000000000000000000000000000000000000000000000000000000000000000 +# ACCESS_JWT_EXPIRES_IN_SECONDS=900 +# REFRESH_JWT_EXPIRES_IN_SECONDS=604800 +# JWT_ISSUER=api.yourapp.com +# JWT_AUDIENCE=api.yourapp.com + +# ----------------------------------------------------------------------------- +# Email / app identity +# ----------------------------------------------------------------------------- +# RESEND_API_KEY=re_placeholder +# EMAIL_FROM=noreply@localhost +# EMAIL_FROM_NAME=App +# APP_NAME=Your App + +# ----------------------------------------------------------------------------- +# Testing / features +# ----------------------------------------------------------------------------- +# ALLOW_TEST=false + +# ----------------------------------------------------------------------------- +# OAuth — optional (routes return 503 when unset) +# ----------------------------------------------------------------------------- +# GITHUB_CLIENT_ID= +# GITHUB_CLIENT_SECRET= +# OAUTH_GITHUB_CALLBACK_URL=http://localhost:3000/auth/callback/oauth/github +# OAUTH_GITHUB_CALLBACK_URLS=http://localhost:3000/auth/callback/oauth/github,yourapp://auth/callback + +# GOOGLE_CLIENT_ID= +# GOOGLE_CLIENT_SECRET= +# OAUTH_GOOGLE_CALLBACK_URL=http://localhost:3000/auth/callback/oauth/google +# OAUTH_GOOGLE_CALLBACK_URLS=http://localhost:3000/auth/callback/oauth/google,yourapp://auth/callback + +# FACEBOOK_CLIENT_ID= +# FACEBOOK_CLIENT_SECRET= +# OAUTH_FACEBOOK_CALLBACK_URL=http://localhost:3000/auth/callback/oauth/facebook +# OAUTH_FACEBOOK_CALLBACK_URLS=http://localhost:3000/auth/callback/oauth/facebook,yourapp://auth/callback + +# TWITTER_CLIENT_ID= +# TWITTER_CLIENT_SECRET= +# OAUTH_TWITTER_CALLBACK_URL=http://localhost:3000/auth/callback/oauth/twitter +# OAUTH_TWITTER_CALLBACK_URLS=http://localhost:3000/auth/callback/oauth/twitter,yourapp://auth/callback + +# ----------------------------------------------------------------------------- +# CORS / app URLs / auth metadata +# ----------------------------------------------------------------------------- +# ALLOWED_ORIGINS=* +# TOTP_ISSUER= +# WEBAUTHN_RP_NAME= diff --git a/apps/api/.env.test.example b/apps/api/.env.test.example index ef380da1..5372e24d 100644 --- a/apps/api/.env.test.example +++ b/apps/api/.env.test.example @@ -1,29 +1,65 @@ -# Test env - copy to .env.test (gitignored) +# Test env — copy to .env.test (gitignored under apps/api). Placeholders only. +# Section headers match apps/api/.env.defaults.example + +# ----------------------------------------------------------------------------- +# Core +# ----------------------------------------------------------------------------- NODE_ENV=test +# CI=false + +# ----------------------------------------------------------------------------- +# Database +# ----------------------------------------------------------------------------- PGLITE=true DATABASE_URL=postgresql://localhost/test -JWT_SECRET=e2e-jwt-secret-min-32-chars-for-tests -# AI provider: Anthropic (default), Open Router, or Ollama (use .env.test, not committed) -# Unit/E2E tests use Anthropic Sonnet. Set ANTHROPIC_API_KEY for local and CI. +# ----------------------------------------------------------------------------- +# Ops / limits / logging +# ----------------------------------------------------------------------------- +# RATE_LIMIT_MAX=10000 + +# ----------------------------------------------------------------------------- +# Sentry (optional) +# ----------------------------------------------------------------------------- +# SENTRY_DSN= +# SENTRY_ENVIRONMENT= + +# ----------------------------------------------------------------------------- +# AI +# ----------------------------------------------------------------------------- ANTHROPIC_API_KEY=sk-ant-xxx -# OPEN_ROUTER_API_KEY=sk-or-v1-xxxxxxxxxxxxxxxxxx +# OPEN_ROUTER_API_KEY= # OLLAMA_BASE_URL=http://localhost:11434 - -# Optional: Override default AI model (Claude Sonnet 4) # AI_DEFAULT_MODEL=claude-sonnet-4-20250514 -# Optional: GitHub OAuth (for OAuth route tests) +# ----------------------------------------------------------------------------- +# JWT / encryption +# ----------------------------------------------------------------------------- +JWT_SECRET=e2e-jwt-secret-min-32-chars-for-tests +# ENCRYPTION_KEY=0000000000000000000000000000000000000000000000000000000000000000 + +# ----------------------------------------------------------------------------- +# Email / app identity +# ----------------------------------------------------------------------------- +# RESEND_API_KEY= +# EMAIL_FROM= +# APP_NAME= + +# ----------------------------------------------------------------------------- +# Testing / features +# ----------------------------------------------------------------------------- +# ALLOW_TEST=false + +# ----------------------------------------------------------------------------- +# OAuth (optional — for OAuth route tests) +# ----------------------------------------------------------------------------- # GITHUB_CLIENT_ID= # GITHUB_CLIENT_SECRET= # OAUTH_GITHUB_CALLBACK_URL=http://localhost:3000/auth/callback/oauth/github -# CORS + URL allowlist. Default: * (any). Comma-separated origins to restrict. +# ----------------------------------------------------------------------------- +# CORS / app URLs / auth metadata +# ----------------------------------------------------------------------------- # ALLOWED_ORIGINS=https://app.example.com,https://localhost:3000 - -# Passkey and TOTP tests (unit tests) WEBAUTHN_RP_NAME=Test App TOTP_ISSUER=Test App - -# Rate limit (unit tests make many requests; default 100 is too low) -# RATE_LIMIT_MAX=10000 diff --git a/apps/api/README.md b/apps/api/README.md index 222c8dc4..4ac4ec82 100644 --- a/apps/api/README.md +++ b/apps/api/README.md @@ -4,7 +4,7 @@ Type-safe REST API built with Fastify & OpenAPI. Routes in `src/routes/` are the ## Development -Start database first (`pnpm db:start`), then `pnpm dev`. Uses Supabase CLI for PostgreSQL, or `PGLITE=true` for in-memory. Dev server at [http://localhost:3000](http://localhost:3000). +Copy [`.env.defaults.example`](.env.defaults.example) to `.env` and set values (gitignored). Start database first (`pnpm db:start`), then `pnpm dev`. Uses Supabase CLI for PostgreSQL, or `PGLITE=true` for in-memory. Dev server at [http://localhost:3000](http://localhost:3000). ## Vercel diff --git a/apps/docu/.env.defaults.example b/apps/docu/.env.defaults.example new file mode 100644 index 00000000..9f79f7ef --- /dev/null +++ b/apps/docu/.env.defaults.example @@ -0,0 +1,11 @@ +# Copy to .env.local if needed. Schema: apps/docu/lib/env.ts + +# ----------------------------------------------------------------------------- +# Client (NEXT_PUBLIC_*) +# ----------------------------------------------------------------------------- +NEXT_PUBLIC_SITE_URL=https://docs.basilic.dev + +# ----------------------------------------------------------------------------- +# Server (local dev) +# ----------------------------------------------------------------------------- +PORT=3002 diff --git a/apps/docu/.env.development b/apps/docu/.env.development index 3c65c870..154bf00f 100644 --- a/apps/docu/.env.development +++ b/apps/docu/.env.development @@ -1 +1,3 @@ -PORT=3002 \ No newline at end of file +# Docu dev server — committed, non-sensitive. Schema: apps/docu/lib/env.ts +PORT=3002 +NEXT_PUBLIC_SITE_URL=https://docs.basilic.dev diff --git a/apps/docu/content/docs/architecture/security.mdx b/apps/docu/content/docs/architecture/security.mdx index 1b6cda9c..dabfb5f0 100644 --- a/apps/docu/content/docs/architecture/security.mdx +++ b/apps/docu/content/docs/architecture/security.mdx @@ -24,7 +24,7 @@ Pre-commit hooks run automatically via `simple-git-hooks` when you attempt to co The following file patterns are blocked from being committed: -- `.env` (but `.env-example`, `.env.schema`, `.env.development`, `.env.staging`, `.env.production`, `.env.test` are allowed) +- `.env` (but `.env..example` templates such as `.env.defaults.example` / `.env.local.example`, `.env.schema`, `.env.development`, `.env.staging`, `.env.production`, `.env.test` are allowed) - `*.pem`, `*.key`, `*.p12`, `*.pfx`, `*.jks`, `*.keystore` - `id_rsa*` (SSH private keys) - Certificate files: `*.crt`, `*.cer`, `*.der`, `*.p7b`, `*.p7c`, `*.p7m`, `*.p7s` @@ -199,7 +199,7 @@ git reset HEAD~1 ### 3. Prevent Future Incidents - Use `.env` files for secrets (never commit them) -- Use `.env-example` or `.env.schema` for templates +- Use `.env..example` (e.g. `.env.defaults.example`, `.env.local.example`) or `.env.schema` for templates - Review staged files before committing: `git diff --cached` - Run `pnpm security:secrets` before committing @@ -268,7 +268,7 @@ If CI detects secrets: ## Best Practices 1. **Never commit secrets** - Use `.env` files and environment variables -2. **Use `.env-example`** - Provide templates for required environment variables +2. **Use `.env..example`** - Provide templates for required environment variables (see `apps/api/.env.defaults.example`, `apps/web/.env.local.example`) 3. **Review before committing** - Check `git diff --cached` before committing 4. **Rotate secrets regularly** - Even if not exposed, rotate secrets periodically 5. **Use secret management** - Consider using tools like HashiCorp Vault, AWS Secrets Manager, etc. for production diff --git a/apps/docu/content/docs/development/index.mdx b/apps/docu/content/docs/development/index.mdx index d028deda..adeeb8ff 100644 --- a/apps/docu/content/docs/development/index.mdx +++ b/apps/docu/content/docs/development/index.mdx @@ -56,7 +56,7 @@ Setup runs install, git hooks, security tools, and database. See the root README ### 2. Environment variables -- copy fastify/.env-sample over to fastify/.env and update the values +- copy `apps/api/.env.defaults.example` to `apps/api/.env` and update the values ### 3. Explore the Running Apps diff --git a/apps/docu/package.json b/apps/docu/package.json index 99a87ac7..93c38b7f 100644 --- a/apps/docu/package.json +++ b/apps/docu/package.json @@ -22,7 +22,7 @@ "fumadocs-ui": "16.6.0", "lucide-react": "^0.564.0", "mermaid": "^11.12.2", - "next": "16.1.6", + "next": "16.1.7", "next-themes": "^0.4.6", "react": "^19.2.4", "react-dom": "^19.2.4", diff --git a/apps/mobile/.env.defaults.example b/apps/mobile/.env.defaults.example new file mode 100644 index 00000000..91f2a965 --- /dev/null +++ b/apps/mobile/.env.defaults.example @@ -0,0 +1,8 @@ +# Copy to .env — see apps/mobile README. Placeholders only. +# Expo public vars (EXPO_PUBLIC_*) are exposed to the client bundle. + +# ----------------------------------------------------------------------------- +# Client (EXPO_PUBLIC_*) +# ----------------------------------------------------------------------------- +# API URL reachable from simulator/device (port forward / LAN) +EXPO_PUBLIC_API_URL= diff --git a/apps/mobile/.env.example b/apps/mobile/.env.example deleted file mode 100644 index fe36c68d..00000000 --- a/apps/mobile/.env.example +++ /dev/null @@ -1,4 +0,0 @@ -# API URL reachable from simulator/device -# When using port forwarding (e.g. Cursor remote): http://localhost:3001 -# When on VPN/same LAN: http://:3001 -EXPO_PUBLIC_API_URL= diff --git a/apps/mobile/README.md b/apps/mobile/README.md index 2e5f8494..5abb29e3 100644 --- a/apps/mobile/README.md +++ b/apps/mobile/README.md @@ -59,7 +59,7 @@ Global styles live in `src/global.css`. Use StyleSheet for complex cases. See `. ## API / Environment -Configure `EXPO_PUBLIC_API_URL` in `apps/mobile/.env` for API reachability. When Fastify runs on a remote VPC and Cursor forwards port 3001, use `EXPO_PUBLIC_API_URL=http://localhost:3001` so the simulator hits the tunneled API. +Configure `EXPO_PUBLIC_API_URL` in `apps/mobile/.env` for API reachability (see `.env.defaults.example`). When Fastify runs on a remote VPC and Cursor forwards port 3001, use `EXPO_PUBLIC_API_URL=http://localhost:3001` so the simulator hits the tunneled API. ## EAS Builds & PR Preview diff --git a/apps/web/.env.development b/apps/web/.env.development index 8f455280..af7d10ac 100644 --- a/apps/web/.env.development +++ b/apps/web/.env.development @@ -1,12 +1,19 @@ -# Development Environment Configuration -# This file is committed - contains non-sensitive configuration only +# Development — committed, non-sensitive defaults only. +# Secrets: use .env.local (see .env.local.example). -# Required: API base URL +# ----------------------------------------------------------------------------- +# Client (NEXT_PUBLIC_*) +# ----------------------------------------------------------------------------- NEXT_PUBLIC_API_URL=http://localhost:3001 -# Logging configuration for development -LOG_ENABLED=true -LOG_LEVEL=debug - # Google One Tap (client-side). Same value as Fastify GOOGLE_CLIENT_ID. -NEXT_PUBLIC_GOOGLE_CLIENT_ID=767744818103-5vme8soap4h1p6hmactlv4gr54n0qvbd.apps.googleusercontent.com \ No newline at end of file +NEXT_PUBLIC_GOOGLE_CLIENT_ID=767744818103-5vme8soap4h1p6hmactlv4gr54n0qvbd.apps.googleusercontent.com + +NEXT_PUBLIC_LOG_ENABLED=true +NEXT_PUBLIC_LOG_LEVEL=debug + +# ----------------------------------------------------------------------------- +# Optional integrations +# ----------------------------------------------------------------------------- +# NEXT_PUBLIC_SENTRY_DSN= +# NEXT_PUBLIC_SENTRY_ENVIRONMENT=development diff --git a/apps/web/.env.local.example b/apps/web/.env.local.example index 751bd53b..8407aea2 100644 --- a/apps/web/.env.local.example +++ b/apps/web/.env.local.example @@ -1,7 +1,33 @@ -# JWT secret for token verification. Must match Fastify JWT_SECRET. -JWT_SECRET=default-jwt-secret-min-32-chars-for-dev +# Local secrets and overrides — copy to .env.local (gitignored). +# Committed defaults live in .env.development / .env.staging / .env.production. +# Schema: apps/web/lib/env.ts -# Optional: Google One Tap (client-side). Same value as Fastify GOOGLE_CLIENT_ID. +# ----------------------------------------------------------------------------- +# Client (NEXT_PUBLIC_* — exposed to the browser) +# ----------------------------------------------------------------------------- +NEXT_PUBLIC_API_URL=http://localhost:3001 # NEXT_PUBLIC_GOOGLE_CLIENT_ID=xxx.apps.googleusercontent.com +# NEXT_PUBLIC_AUTH_COOKIE_NAME=api.session +# NEXT_PUBLIC_SENTRY_DSN= +# NEXT_PUBLIC_SENTRY_ENVIRONMENT= +# NEXT_PUBLIC_LOG_ENABLED=true +# NEXT_PUBLIC_LOG_LEVEL=debug +# NEXT_PUBLIC_LEGAL_EMAIL=legal@example.com + +# ----------------------------------------------------------------------------- +# Server-only (Next server; not prefixed — never expose to client code) +# ----------------------------------------------------------------------------- +JWT_SECRET=default-jwt-secret-min-32-chars-for-dev +# AUTH_COOKIE_NAME=api.session +# ALLOW_TEST=false +# NEWSAPI_KEY= +# SENTRY_DSN= +# SENTRY_ENVIRONMENT= -NEWSAPI_KEY=xxxxxxx \ No newline at end of file +# ----------------------------------------------------------------------------- +# E2E / Playwright only (not in createEnv — scripts read process.env directly) +# ----------------------------------------------------------------------------- +# PLAYWRIGHT_APP_URL=http://localhost:3000 +# PLAYWRIGHT_API_URL=http://localhost:3001 +# NEXT_PUBLIC_APP_URL=http://localhost:3000 +# VERCEL_AUTOMATION_BYPASS_SECRET= diff --git a/apps/web/.env.production b/apps/web/.env.production index 507a0fd2..aac7c31e 100644 --- a/apps/web/.env.production +++ b/apps/web/.env.production @@ -1,13 +1,15 @@ -# Production Environment Configuration -# This file is committed - contains non-sensitive configuration only +# Production — committed, non-sensitive defaults only. +# JWT_SECRET and other secrets: Vercel / deployment env or .env.local for local prod builds. -# API URL - required for production builds -# NOTE: This uses a unified/staging URL across environments -# CI/CD validation will fail if this matches the placeholder +# ----------------------------------------------------------------------------- +# Client (NEXT_PUBLIC_*) +# ----------------------------------------------------------------------------- +# CI/CD validation fails if this stays a placeholder — set real API origin. NEXT_PUBLIC_API_URL=https://basilic-fastify.vercel.app +NEXT_PUBLIC_GOOGLE_CLIENT_ID=767744818103-5vme8soap4h1p6hmactlv4gr54n0qvbd.apps.googleusercontent.com -# JWT_SECRET must be set via env (Vercel/deployment) - not committed. Use same value as Fastify. -# For local prod build: export JWT_SECRET='your-32-char-secret' or add to .env.local - - -NEXT_PUBLIC_GOOGLE_CLIENT_ID=767744818103-5vme8soap4h1p6hmactlv4gr54n0qvbd.apps.googleusercontent.com \ No newline at end of file +# ----------------------------------------------------------------------------- +# Optional integrations +# ----------------------------------------------------------------------------- +# NEXT_PUBLIC_SENTRY_DSN= +# NEXT_PUBLIC_SENTRY_ENVIRONMENT=production diff --git a/apps/web/.env.staging b/apps/web/.env.staging index b0d03db5..d1a90496 100644 --- a/apps/web/.env.staging +++ b/apps/web/.env.staging @@ -1,6 +1,13 @@ -# Staging Environment Configuration -# This file is committed - contains non-sensitive configuration only +# Staging — committed, non-sensitive defaults only. -# Required: API base URL +# ----------------------------------------------------------------------------- +# Client (NEXT_PUBLIC_*) +# ----------------------------------------------------------------------------- NEXT_PUBLIC_API_URL=https://basilic-fastify.vercel.app -NEXT_PUBLIC_GOOGLE_CLIENT_ID=767744818103-5vme8soap4h1p6hmactlv4gr54n0qvbd.apps.googleusercontent.com \ No newline at end of file +NEXT_PUBLIC_GOOGLE_CLIENT_ID=767744818103-5vme8soap4h1p6hmactlv4gr54n0qvbd.apps.googleusercontent.com + +# ----------------------------------------------------------------------------- +# Optional integrations +# ----------------------------------------------------------------------------- +# NEXT_PUBLIC_SENTRY_DSN= +# NEXT_PUBLIC_SENTRY_ENVIRONMENT=staging diff --git a/apps/web/README.md b/apps/web/README.md index 93349daf..accf5c4d 100644 --- a/apps/web/README.md +++ b/apps/web/README.md @@ -95,7 +95,7 @@ See [E2E Testing](@apps/docu/content/docs/testing/e2e-testing.mdx) for full deta ### Environment Variables -Optional environment variables (see `.env-example`): +Optional environment variables — see `.env.local.example` (copy to `.env.local`) and `lib/env.ts` for the validated schema: ## Project Structure diff --git a/apps/web/package.json b/apps/web/package.json index b14d605b..f0ffa36d 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -56,7 +56,7 @@ "import-in-the-middle": "^3.0.0", "jose": "^6.1.3", "lucide-react": "^0.564.0", - "next": "16.1.6", + "next": "16.1.7", "next-themes": "^0.4.6", "nuqs": "^2.8.8", "react": "^19.2.4", diff --git a/package.json b/package.json index f15a91db..11c2d907 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,12 @@ "minimatch@3.1.2": "3.1.4", "minimatch@9.0.5": "9.0.7", "rollup@<4.59.0": "4.59.0", - "@tootallnate/once@<3.0.1": "3.0.1" + "@tootallnate/once@<3.0.1": "3.0.1", + "flatted": "3.4.2", + "h3": "1.15.9", + "socket.io-parser": "4.2.6", + "undici": "7.24.0", + "next@<16.1.7": ">=16.1.7" } }, "overrides": { @@ -83,7 +88,7 @@ "@isaacs/brace-expansion@5.0.0": "5.0.1", "esbuild@<0.25.0": ">=0.25.0", "path-to-regexp@<6.3.0": ">=6.3.0", - "next@<16.1.5": ">=16.1.5", + "next@<16.1.7": ">=16.1.7", "lodash@<4.17.23": ">=4.17.23", "lodash-es@<4.17.23": ">=4.17.23", "@tootallnate/once@<3.0.1": "3.0.1" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d1f05cd4..d829dea5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,6 +15,11 @@ overrides: minimatch@9.0.5: 9.0.7 rollup@<4.59.0: 4.59.0 '@tootallnate/once@<3.0.1': 3.0.1 + flatted: 3.4.2 + h3: 1.15.9 + socket.io-parser: 4.2.6 + undici: 7.24.0 + next@<16.1.7: '>=16.1.7' importers: @@ -61,7 +66,7 @@ importers: version: 50.18.0(rollup@4.59.0)(typescript@5.9.3) vitest: specifier: ^4.0.18 - version: 4.0.18(@edge-runtime/vm@3.2.0)(@opentelemetry/api@1.9.0)(@types/node@25.2.3)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.0.1))(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 4.0.18(@edge-runtime/vm@3.2.0)(@opentelemetry/api@1.9.0)(@types/node@25.2.3)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.0.1))(lightningcss@1.30.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) apps/api: dependencies: @@ -248,10 +253,10 @@ importers: version: 7.22.0 vite-tsconfig-paths: specifier: ^6.1.1 - version: 6.1.1(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 6.1.1(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) vitest: specifier: ^4.0.18 - version: 4.0.18(@edge-runtime/vm@3.2.0)(@opentelemetry/api@1.9.0)(@types/node@25.2.3)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.0.1))(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 4.0.18(@edge-runtime/vm@3.2.0)(@opentelemetry/api@1.9.0)(@types/node@25.2.3)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.0.1))(lightningcss@1.30.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) apps/docu: dependencies: @@ -263,13 +268,13 @@ importers: version: 0.13.10(typescript@5.9.3)(zod@4.3.6) fumadocs-core: specifier: 16.6.0 - version: 16.6.0(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.564.0(react@19.2.4))(next@16.1.6(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6) + version: 16.6.0(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.564.0(react@19.2.4))(next@16.1.7(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6) fumadocs-mdx: specifier: 14.2.7 - version: 14.2.7(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.14)(fumadocs-core@16.6.0(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.564.0(react@19.2.4))(next@16.1.6(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(mdast-util-mdx-jsx@3.2.0)(next@16.1.6(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 14.2.7(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.14)(fumadocs-core@16.6.0(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.564.0(react@19.2.4))(next@16.1.7(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(mdast-util-mdx-jsx@3.2.0)(next@16.1.7(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) fumadocs-ui: specifier: 16.6.0 - version: 16.6.0(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(fumadocs-core@16.6.0(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.564.0(react@19.2.4))(next@16.1.6(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.1.6(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.1.18) + version: 16.6.0(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(fumadocs-core@16.6.0(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.564.0(react@19.2.4))(next@16.1.7(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.1.7(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.1.18) lucide-react: specifier: ^0.564.0 version: 0.564.0(react@19.2.4) @@ -277,8 +282,8 @@ importers: specifier: ^11.12.2 version: 11.12.2 next: - specifier: 16.1.6 - version: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: 16.1.7 + version: 16.1.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) next-themes: specifier: ^0.4.6 version: 0.4.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -478,7 +483,7 @@ importers: version: link:../../packages/utils '@sentry/nextjs': specifier: ^10.38.0 - version: 10.39.0(@opentelemetry/context-async-hooks@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.5.1(@opentelemetry/api@1.9.0))(next@16.1.6(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)(webpack@5.105.2) + version: 10.39.0(@opentelemetry/context-async-hooks@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.5.1(@opentelemetry/api@1.9.0))(next@16.1.7(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)(webpack@5.105.2) '@solana/wallet-adapter-base': specifier: ^0.9.27 version: 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)) @@ -490,7 +495,7 @@ importers: version: 0.9.39(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10))(bs58@6.0.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-dom@19.2.4(react@19.2.4))(react-native@0.84.0(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.9.3) '@solana/wallet-adapter-wallets': specifier: ^0.19.37 - version: 0.19.37(@babel/runtime@7.28.6)(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.0(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10))(@types/react@19.2.14)(@vercel/blob@2.2.0)(bs58@6.0.0)(bufferutil@4.1.0)(expo-constants@55.0.7)(fastestsmallesttextencoderdecoder@1.0.22)(react-dom@19.2.4(react@19.2.4))(react-native@0.84.0(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(tslib@2.8.1)(typescript@5.9.3)(utf-8-validate@5.0.10)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@4.3.6) + version: 0.19.37(@babel/runtime@7.29.2)(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.0(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10))(@types/react@19.2.14)(@vercel/blob@2.2.0)(bs58@6.0.0)(bufferutil@4.1.0)(expo-constants@55.0.7)(fastestsmallesttextencoderdecoder@1.0.22)(react-dom@19.2.4(react@19.2.4))(react-native@0.84.0(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(tslib@2.8.1)(typescript@5.9.3)(utf-8-validate@5.0.10)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@4.3.6) '@solana/web3.js': specifier: ^1.98.4 version: 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) @@ -502,7 +507,7 @@ importers: version: 5.90.21(react@19.2.4) '@vercel/analytics': specifier: 1.6.1 - version: 1.6.1(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4) + version: 1.6.1(next@16.1.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4) ahooks: specifier: ^3.9.6 version: 3.9.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -525,14 +530,14 @@ importers: specifier: ^0.564.0 version: 0.564.0(react@19.2.4) next: - specifier: 16.1.6 - version: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: 16.1.7 + version: 16.1.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) next-themes: specifier: ^0.4.6 version: 0.4.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4) nuqs: specifier: ^2.8.8 - version: 2.8.8(next@16.1.6(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4) + version: 2.8.8(next@16.1.7(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4) react: specifier: ^19.2.4 version: 19.2.4 @@ -654,7 +659,7 @@ importers: version: 4.21.0 vitest: specifier: ^4.0.18 - version: 4.0.18(@edge-runtime/vm@3.2.0)(@opentelemetry/api@1.9.0)(@types/node@25.3.5)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.0.1))(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 4.0.18(@edge-runtime/vm@3.2.0)(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.0.1))(lightningcss@1.30.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) packages/email: dependencies: @@ -725,7 +730,7 @@ importers: version: 10.39.0 '@sentry/nextjs': specifier: ^10.38.0 - version: 10.39.0(@opentelemetry/context-async-hooks@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.5.1(@opentelemetry/api@1.9.0))(next@16.1.6(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)(webpack@5.105.2) + version: 10.39.0(@opentelemetry/context-async-hooks@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.5.1(@opentelemetry/api@1.9.0))(next@16.1.7(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)(webpack@5.105.2) '@sentry/node': specifier: ^10.38.0 version: 10.39.0 @@ -749,7 +754,7 @@ importers: version: 8.5.1(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) vitest: specifier: ^4.0.18 - version: 4.0.18(@edge-runtime/vm@3.2.0)(@opentelemetry/api@1.9.0)(@types/node@25.2.3)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.0.1))(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 4.0.18(@edge-runtime/vm@3.2.0)(@opentelemetry/api@1.9.0)(@types/node@25.2.3)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.0.1))(lightningcss@1.30.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) packages/notif: dependencies: @@ -862,7 +867,7 @@ importers: version: 8.5.1(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) vitest: specifier: ^4.0.18 - version: 4.0.18(@edge-runtime/vm@3.2.0)(@opentelemetry/api@1.9.0)(@types/node@25.3.5)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.0.1))(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 4.0.18(@edge-runtime/vm@3.2.0)(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.0.1))(lightningcss@1.30.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) packages/ui: dependencies: @@ -1098,7 +1103,7 @@ importers: version: 9.39.2(jiti@2.6.1) nuqs: specifier: ^2.8.8 - version: 2.8.8(next@16.1.6(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4) + version: 2.8.8(next@16.1.7(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4) react: specifier: ^19.2.4 version: 19.2.4 @@ -1124,8 +1129,8 @@ importers: specifier: ^9.39.0 version: 9.39.2 '@next/eslint-plugin-next': - specifier: ^16.1.6 - version: 16.1.6 + specifier: ^16.1.7 + version: 16.2.1 '@typescript-eslint/eslint-plugin': specifier: ^8.55.0 version: 8.56.0(@typescript-eslint/parser@8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) @@ -1349,6 +1354,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.29.2': + resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-proposal-decorators@7.29.0': resolution: {integrity: sha512-CVBVv3VY/XRMxRYq5dwr2DS7/MvqPm23cOCjbwNnVrfOqcWlnefua1uUs0sjdKOGjvPUG633o07uWzJq4oI6dA==} engines: {node: '>=6.9.0'} @@ -1755,6 +1765,10 @@ packages: resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==} engines: {node: '>=6.9.0'} + '@babel/runtime@7.29.2': + resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==} + engines: {node: '>=6.9.0'} + '@babel/template@7.28.6': resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} engines: {node: '>=6.9.0'} @@ -2887,10 +2901,6 @@ packages: '@fastify/autoload@6.3.1': resolution: {integrity: sha512-0fsG+lO3m5yEZVjXKpltCe+2eHhM6rfAPQhvlGUgLUFTw/N2wA9WqPTObMtrF3oUCUrxbSDv60HlUIoh+aFM1A==} - '@fastify/busboy@2.1.1': - resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} - engines: {node: '>=14'} - '@fastify/cors@11.2.0': resolution: {integrity: sha512-LbLHBuSAdGdSFZYTLVA3+Ch2t+sA6nq3Ejc6XLAKiQ6ViS2qFnvicpj0htsx03FyYeLs04HfRNBsz/a8SvbcUw==} @@ -3478,60 +3488,60 @@ packages: '@napi-rs/wasm-runtime@1.1.1': resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==} - '@next/env@16.1.6': - resolution: {integrity: sha512-N1ySLuZjnAtN3kFnwhAwPvZah8RJxKasD7x1f8shFqhncnWZn4JMfg37diLNuoHsLAlrDfM3g4mawVdtAG8XLQ==} + '@next/env@16.1.7': + resolution: {integrity: sha512-rJJbIdJB/RQr2F1nylZr/PJzamvNNhfr3brdKP6s/GW850jbtR70QlSfFselvIBbcPUOlQwBakexjFzqLzF6pg==} - '@next/eslint-plugin-next@16.1.6': - resolution: {integrity: sha512-/Qq3PTagA6+nYVfryAtQ7/9FEr/6YVyvOtl6rZnGsbReGLf0jZU6gkpr1FuChAQpvV46a78p4cmHOVP8mbfSMQ==} + '@next/eslint-plugin-next@16.2.1': + resolution: {integrity: sha512-r0epZGo24eT4g08jJlg2OEryBphXqO8aL18oajoTKLzHJ6jVr6P6FI58DLMug04MwD3j8Fj0YK0slyzneKVyzA==} - '@next/swc-darwin-arm64@16.1.6': - resolution: {integrity: sha512-wTzYulosJr/6nFnqGW7FrG3jfUUlEf8UjGA0/pyypJl42ExdVgC6xJgcXQ+V8QFn6niSG2Pb8+MIG1mZr2vczw==} + '@next/swc-darwin-arm64@16.1.7': + resolution: {integrity: sha512-b2wWIE8sABdyafc4IM8r5Y/dS6kD80JRtOGrUiKTsACFQfWWgUQ2NwoUX1yjFMXVsAwcQeNpnucF2ZrujsBBPg==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@16.1.6': - resolution: {integrity: sha512-BLFPYPDO+MNJsiDWbeVzqvYd4NyuRrEYVB5k2N3JfWncuHAy2IVwMAOlVQDFjj+krkWzhY2apvmekMkfQR0CUQ==} + '@next/swc-darwin-x64@16.1.7': + resolution: {integrity: sha512-zcnVaaZulS1WL0Ss38R5Q6D2gz7MtBu8GZLPfK+73D/hp4GFMrC2sudLky1QibfV7h6RJBJs/gOFvYP0X7UVlQ==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@16.1.6': - resolution: {integrity: sha512-OJYkCd5pj/QloBvoEcJ2XiMnlJkRv9idWA/j0ugSuA34gMT6f5b7vOiCQHVRpvStoZUknhl6/UxOXL4OwtdaBw==} + '@next/swc-linux-arm64-gnu@16.1.7': + resolution: {integrity: sha512-2ant89Lux/Q3VyC8vNVg7uBaFVP9SwoK2jJOOR0L8TQnX8CAYnh4uctAScy2Hwj2dgjVHqHLORQZJ2wH6VxhSQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [glibc] - '@next/swc-linux-arm64-musl@16.1.6': - resolution: {integrity: sha512-S4J2v+8tT3NIO9u2q+S0G5KdvNDjXfAv06OhfOzNDaBn5rw84DGXWndOEB7d5/x852A20sW1M56vhC/tRVbccQ==} + '@next/swc-linux-arm64-musl@16.1.7': + resolution: {integrity: sha512-uufcze7LYv0FQg9GnNeZ3/whYfo+1Q3HnQpm16o6Uyi0OVzLlk2ZWoY7j07KADZFY8qwDbsmFnMQP3p3+Ftprw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [musl] - '@next/swc-linux-x64-gnu@16.1.6': - resolution: {integrity: sha512-2eEBDkFlMMNQnkTyPBhQOAyn2qMxyG2eE7GPH2WIDGEpEILcBPI/jdSv4t6xupSP+ot/jkfrCShLAa7+ZUPcJQ==} + '@next/swc-linux-x64-gnu@16.1.7': + resolution: {integrity: sha512-KWVf2gxYvHtvuT+c4MBOGxuse5TD7DsMFYSxVxRBnOzok/xryNeQSjXgxSv9QpIVlaGzEn/pIuI6Koosx8CGWA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [glibc] - '@next/swc-linux-x64-musl@16.1.6': - resolution: {integrity: sha512-oicJwRlyOoZXVlxmIMaTq7f8pN9QNbdes0q2FXfRsPhfCi8n8JmOZJm5oo1pwDaFbnnD421rVU409M3evFbIqg==} + '@next/swc-linux-x64-musl@16.1.7': + resolution: {integrity: sha512-HguhaGwsGr1YAGs68uRKc4aGWxLET+NevJskOcCAwXbwj0fYX0RgZW2gsOCzr9S11CSQPIkxmoSbuVaBp4Z3dA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [musl] - '@next/swc-win32-arm64-msvc@16.1.6': - resolution: {integrity: sha512-gQmm8izDTPgs+DCWH22kcDmuUp7NyiJgEl18bcr8irXA5N2m2O+JQIr6f3ct42GOs9c0h8QF3L5SzIxcYAAXXw==} + '@next/swc-win32-arm64-msvc@16.1.7': + resolution: {integrity: sha512-S0n3KrDJokKTeFyM/vGGGR8+pCmXYrjNTk2ZozOL1C/JFdfUIL9O1ATaJOl5r2POe56iRChbsszrjMAdWSv7kQ==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@16.1.6': - resolution: {integrity: sha512-NRfO39AIrzBnixKbjuo2YiYhB6o9d8v/ymU9m/Xk8cyVk+k7XylniXkHwjs4s70wedVffc6bQNbufk5v0xEm0A==} + '@next/swc-win32-x64-msvc@16.1.7': + resolution: {integrity: sha512-mwgtg8CNZGYm06LeEd+bNnOUfwOyNem/rOiP14Lsz+AnUY92Zq/LXwtebtUiaeVkhbroRCQ0c8GlR4UT1U+0yg==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -5628,7 +5638,7 @@ packages: resolution: {integrity: sha512-u8Wp8V5zA2OTREmBXNm1UNtdQv3oJOH/ZC83tQH8wV8GCJfkSw7qDp89T1fbyMvYKOdQuhT4pxeriHCq8S5L0g==} engines: {node: '>=18'} peerDependencies: - next: ^13.2.0 || ^14.0 || ^15.0.0-rc.0 || ^16.0.0-0 + next: '>=16.1.7' '@sentry/node-core@10.39.0': resolution: {integrity: sha512-xdeBG00TmtAcGvXnZNbqOCvnZ5kY3s5aT/L8wUQ0w0TT2KmrC9XL/7UHUfJ45TLbjl10kZOtaMQXgUjpwSJW+g==} @@ -6971,8 +6981,8 @@ packages: '@types/node@25.2.3': resolution: {integrity: sha512-m0jEgYlYz+mDJZ2+F4v8D1AyQb+QzsNqRuI7xg1VQX/KlKS0qT9r1Mo16yo5F/MtifXFgaofIFsdFMox2SxIbQ==} - '@types/node@25.3.5': - resolution: {integrity: sha512-oX8xrhvpiyRCQkG1MFchB09f+cXftgIXb3a7UUa4Y3wpmZPw5tyZGTLWhlESOLq1Rq6oDlc8npVU2/9xiCuXMA==} + '@types/node@25.5.0': + resolution: {integrity: sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==} '@types/pg-pool@2.0.7': resolution: {integrity: sha512-U4CwmGVQcbEuqpyju8/ptOKg6gEC+Tqsvj2xS9o1g71bUh8twxnC6ZL5rZKCsGN0iyH0CwgUyc9VR5owNQF9Ng==} @@ -7139,7 +7149,7 @@ packages: peerDependencies: '@remix-run/react': ^2 '@sveltejs/kit': ^1 || ^2 - next: '>= 13' + next: '>=16.1.7' react: ^18 || ^19 || ^19.0.0-rc svelte: '>= 4' vue: ^3 @@ -7990,6 +8000,11 @@ packages: resolution: {integrity: sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==} engines: {node: '>=6.0.0'} + baseline-browser-mapping@2.10.10: + resolution: {integrity: sha512-sUoJ3IMxx4AyRqO4MLeHlnGDkyXRoUG0/AI9fjK+vS72ekpV0yWVY7O0BVjmBcRtkNcsAO2QDZ4tdKKGoI6YaQ==} + engines: {node: '>=6.0.0'} + hasBin: true + baseline-browser-mapping@2.9.19: resolution: {integrity: sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==} hasBin: true @@ -8207,6 +8222,9 @@ packages: caniuse-lite@1.0.30001770: resolution: {integrity: sha512-x/2CLQ1jHENRbHg5PSId2sXq1CIO1CISvwWAj027ltMVG2UNgW+w9oH2+HzgEIRFembL8bUlXtfbBHR1fCg2xw==} + caniuse-lite@1.0.30001781: + resolution: {integrity: sha512-RdwNCyMsNBftLjW6w01z8bKEvT6e/5tpPVEgtn22TiLGlstHOVecsX2KHFkD5e/vRnIE4EGzpuIODb3mtswtkw==} + cashaddrjs@0.4.4: resolution: {integrity: sha512-xZkuWdNOh0uq/mxJIng6vYWfTowZLd9F4GMAlp2DwFHlcCqCm91NtuAc47RuV4L7r4PYcY5p6Cr2OKNb4hnkWA==} @@ -9201,6 +9219,10 @@ packages: resolution: {integrity: sha512-/ce7+jQ1PQ6rVXwe+jKEg5hW5ciicHwIQUagZkp6IufBoY3YDgdTTY1azVs0qoRgVmvsNB+rbjLJxDAeHHtwsQ==} engines: {node: '>=10.13.0'} + enhanced-resolve@5.20.1: + resolution: {integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==} + engines: {node: '>=10.13.0'} + entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -9879,11 +9901,8 @@ packages: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} - flatted@3.3.3: - resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} - - flatted@3.3.4: - resolution: {integrity: sha512-3+mMldrTAPdta5kjX2G2J7iX4zxtnwpdA8Tr2ZSjkyPSanvbZAcy6flmtnXbEybHrDcU9641lxrMfFuUxVz9vA==} + flatted@3.4.2: + resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} flow-enums-runtime@0.0.6: resolution: {integrity: sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==} @@ -9975,7 +9994,7 @@ packages: '@types/react': '*' algoliasearch: 5.x.x lucide-react: '*' - next: 16.x.x + next: '>=16.1.7' react: ^19.2.0 react-dom: ^19.2.0 react-router: 7.x.x @@ -10028,7 +10047,7 @@ packages: fumadocs-core: ^15.0.0 || ^16.0.0 mdast-util-directive: '*' mdast-util-mdx-jsx: '*' - next: ^15.3.0 || ^16.0.0 + next: '>=16.1.7' react: '*' vite: 6.x.x || 7.x.x peerDependenciesMeta: @@ -10056,7 +10075,7 @@ packages: peerDependencies: '@types/react': '*' fumadocs-core: 16.6.0 - next: 16.x.x + next: '>=16.1.7' react: ^19.2.0 react-dom: ^19.2.0 peerDependenciesMeta: @@ -10224,8 +10243,8 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - h3@1.15.5: - resolution: {integrity: sha512-xEyq3rSl+dhGX2Lm0+eFQIAzlDN6Fs0EcC4f7BNUmzaRX/PTzeuM+Tr2lHB8FoXggsQIeXLj8EDVgs5ywxyxmg==} + h3@1.15.9: + resolution: {integrity: sha512-H7UPnyIupUOYUQu7f2x7ABVeMyF/IbJjqn20WSXpMdnQB260luADUkSgJU7QTWLutq8h3tUayMQ1DdbSYX5LkA==} hachure-fill@0.5.2: resolution: {integrity: sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==} @@ -11775,6 +11794,11 @@ packages: engines: {node: ^18 || >=20} hasBin: true + nanoid@5.1.7: + resolution: {integrity: sha512-ua3NDgISf6jdwezAheMOk4mbE1LXjm1DfMUDMuJf4AqxLFK3ccGpgWizwa5YV7Yz9EpXwEaWoRXSb/BnV0t5dQ==} + engines: {node: ^18 || >=20} + hasBin: true + nativewind@5.0.0-preview.2: resolution: {integrity: sha512-rTNrwFIwl/n2VH7KPvsZj/NdvKf+uGHF4NYtPamr5qG2eTYGT8B8VeyCPfYf/xUskpWOLJVqVEXaFO/vuIDEdw==} engines: {node: '>=20'} @@ -11810,8 +11834,8 @@ packages: react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc - next@16.1.6: - resolution: {integrity: sha512-hkyRkcu5x/41KoqnROkfTm2pZVbKxvbZRuNvKXLRXxs3VfyO0WhY50TQS40EuKO9SW3rBj/sF3WbVwDACeMZyw==} + next@16.1.7: + resolution: {integrity: sha512-WM0L7WrSvKwoLegLYr6V+mz+RIofqQgVAfHhMp9a88ms0cFX8iX9ew+snpWlSBwpkURJOUdvCEt3uLl3NNzvWg==} engines: {node: '>=20.9.0'} hasBin: true peerDependencies: @@ -11927,7 +11951,7 @@ packages: peerDependencies: '@remix-run/react': '>=2' '@tanstack/react-router': ^1 - next: '>=14.2.0' + next: '>=16.1.7' react: '>=18.2.0 || ^19.0.0-0' react-router: ^5 || ^6 || ^7 react-router-dom: ^5 || ^6 || ^7 @@ -13388,8 +13412,8 @@ packages: resolution: {integrity: sha512-uP0bpjWrjQmUt5DTHq9RuoCBdFJF10cdX9X+a368j/Ft0wmaVgxlrjvK3kjvgCODOMMOz9lcaRzxmso0bTWZ/g==} engines: {node: '>=10.0.0'} - socket.io-parser@4.2.5: - resolution: {integrity: sha512-bPMmpy/5WWKHea5Y/jYAP6k74A+hvmRCQaJuJB6I/ML5JZq/KfNieUVo/3Mh7SAqn7TyFdIo6wqYHInG1MU1bQ==} + socket.io-parser@4.2.6: + resolution: {integrity: sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg==} engines: {node: '>=10.0.0'} socket.io@4.8.3: @@ -13700,6 +13724,10 @@ packages: resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} engines: {node: '>=6'} + tapable@2.3.1: + resolution: {integrity: sha512-b+u3CEM6FjDHru+nhUSjDofpWSBp2rINziJWgApm72wwGasQ/wKXftZe4tI2Y5HPv6OpzXSZHOFq87H4vfsgsw==} + engines: {node: '>=6'} + tar@7.5.11: resolution: {integrity: sha512-ChjMH33/KetonMTAtpYdgUFr0tbz69Fp2v7zWxQfYZX4g5ZN2nOBXm1R2xyA+lMIKrLKIoKAwFj93jE/avX9cQ==} engines: {node: '>=18'} @@ -13708,8 +13736,8 @@ packages: resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} engines: {node: '>=8'} - terser-webpack-plugin@5.3.17: - resolution: {integrity: sha512-YR7PtUp6GMU91BgSJmlaX/rS2lGDbAF7D+Wtq7hRO+MiljNmodYvqslzCFiYVAgW+Qoaaia/QUIP4lGXufjdZw==} + terser-webpack-plugin@5.4.0: + resolution: {integrity: sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g==} engines: {node: '>= 10.13.0'} peerDependencies: '@swc/core': '*' @@ -13729,6 +13757,11 @@ packages: engines: {node: '>=10'} hasBin: true + terser@5.46.1: + resolution: {integrity: sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ==} + engines: {node: '>=10'} + hasBin: true + test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} @@ -13790,6 +13823,10 @@ packages: resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} engines: {node: '>=14.0.0'} + tinyrainbow@3.1.0: + resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} + engines: {node: '>=14.0.0'} + tldts-core@7.0.23: resolution: {integrity: sha512-0g9vrtDQLrNIiCj22HSe9d4mLVG3g5ph5DZ8zCKBr4OtrspmNB6ss7hVyzArAeE88ceZocIEGkyW1Ime7fxPtQ==} @@ -14092,16 +14129,8 @@ packages: undici-types@7.22.0: resolution: {integrity: sha512-RKZvifiL60xdsIuC80UY0dq8Z7DbJUV8/l2hOVbyZAxBzEeQU4Z58+4ZzJ6WN2Lidi9KzT5EbiGX+PI/UGYuRw==} - undici@5.28.4: - resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} - engines: {node: '>=14.0'} - - undici@6.23.0: - resolution: {integrity: sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g==} - engines: {node: '>=18.17'} - - undici@7.22.0: - resolution: {integrity: sha512-RqslV2Us5BrllB+JeiZnK4peryVTndy9Dnqq62S3yYRRTj0tFQCwEniUy2167skdGOy3vqRzEvl1Dm4sV2ReDg==} + undici@7.24.0: + resolution: {integrity: sha512-jxytwMHhsbdpBXxLAcuu0fzlQeXCNnWdDyRHpvWsUl8vd98UwYdl9YTyn8/HcpcJPC3pwUveefsa3zTxyD/ERg==} engines: {node: '>=20.18.1'} unicode-canonical-property-names-ecmascript@2.0.1: @@ -15107,6 +15136,10 @@ snapshots: dependencies: '@babel/types': 7.29.0 + '@babel/parser@7.29.2': + dependencies: + '@babel/types': 7.29.0 + '@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -15569,6 +15602,8 @@ snapshots: '@babel/runtime@7.28.6': {} + '@babel/runtime@7.29.2': {} + '@babel/template@7.28.6': dependencies: '@babel/code-frame': 7.29.0 @@ -16863,8 +16898,6 @@ snapshots: '@fastify/autoload@6.3.1': {} - '@fastify/busboy@2.1.1': {} - '@fastify/cors@11.2.0': dependencies: fastify-plugin: 5.1.0 @@ -17546,34 +17579,34 @@ snapshots: '@tybys/wasm-util': 0.10.1 optional: true - '@next/env@16.1.6': {} + '@next/env@16.1.7': {} - '@next/eslint-plugin-next@16.1.6': + '@next/eslint-plugin-next@16.2.1': dependencies: fast-glob: 3.3.1 - '@next/swc-darwin-arm64@16.1.6': + '@next/swc-darwin-arm64@16.1.7': optional: true - '@next/swc-darwin-x64@16.1.6': + '@next/swc-darwin-x64@16.1.7': optional: true - '@next/swc-linux-arm64-gnu@16.1.6': + '@next/swc-linux-arm64-gnu@16.1.7': optional: true - '@next/swc-linux-arm64-musl@16.1.6': + '@next/swc-linux-arm64-musl@16.1.7': optional: true - '@next/swc-linux-x64-gnu@16.1.6': + '@next/swc-linux-x64-gnu@16.1.7': optional: true - '@next/swc-linux-x64-musl@16.1.6': + '@next/swc-linux-x64-musl@16.1.7': optional: true - '@next/swc-win32-arm64-msvc@16.1.6': + '@next/swc-win32-arm64-msvc@16.1.7': optional: true - '@next/swc-win32-x64-msvc@16.1.6': + '@next/swc-win32-x64-msvc@16.1.7': optional: true '@ngraveio/bc-ur@1.1.13': @@ -19264,7 +19297,7 @@ snapshots: '@react-email/preview-server@5.2.8(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: esbuild: 0.25.10 - next: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + next: 16.1.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) transitivePeerDependencies: - '@babel/core' - '@opentelemetry/api' @@ -19396,7 +19429,7 @@ snapshots: '@react-native/codegen@0.84.0(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 hermes-parser: 0.32.0 invariant: 2.2.4 nullthrows: 1.1.1 @@ -20066,7 +20099,7 @@ snapshots: '@scalar/types@0.6.3': dependencies: '@scalar/helpers': 0.2.12 - nanoid: 5.1.6 + nanoid: 5.1.7 type-fest: 5.4.4 zod: 4.3.6 @@ -20202,7 +20235,7 @@ snapshots: '@sentry/core@10.39.0': {} - '@sentry/nextjs@10.39.0(@opentelemetry/context-async-hooks@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.5.1(@opentelemetry/api@1.9.0))(next@16.1.6(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)(webpack@5.105.2)': + '@sentry/nextjs@10.39.0(@opentelemetry/context-async-hooks@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.5.1(@opentelemetry/api@1.9.0))(next@16.1.7(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)(webpack@5.105.2)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.39.0 @@ -20215,7 +20248,7 @@ snapshots: '@sentry/react': 10.39.0(react@19.2.4) '@sentry/vercel-edge': 10.39.0 '@sentry/webpack-plugin': 4.9.1(webpack@5.105.2) - next: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + next: 16.1.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) rollup: 4.59.0 stacktrace-parser: 0.1.11 transitivePeerDependencies: @@ -21081,11 +21114,11 @@ snapshots: '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)) '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) - '@solana/wallet-adapter-torus@0.11.32(@babel/runtime@7.28.6)(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10))(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)': + '@solana/wallet-adapter-torus@0.11.32(@babel/runtime@7.29.2)(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10))(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)': dependencies: '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)) '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) - '@toruslabs/solana-embed': 2.1.0(@babel/runtime@7.28.6)(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@toruslabs/solana-embed': 2.1.0(@babel/runtime@7.29.2)(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) assert: 2.1.0 crypto-browserify: 3.12.1 process: 0.11.10 @@ -21166,7 +21199,7 @@ snapshots: - utf-8-validate - zod - '@solana/wallet-adapter-wallets@0.19.37(@babel/runtime@7.28.6)(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.0(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10))(@types/react@19.2.14)(@vercel/blob@2.2.0)(bs58@6.0.0)(bufferutil@4.1.0)(expo-constants@55.0.7)(fastestsmallesttextencoderdecoder@1.0.22)(react-dom@19.2.4(react@19.2.4))(react-native@0.84.0(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(tslib@2.8.1)(typescript@5.9.3)(utf-8-validate@5.0.10)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@4.3.6)': + '@solana/wallet-adapter-wallets@0.19.37(@babel/runtime@7.29.2)(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.0(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10))(@types/react@19.2.14)(@vercel/blob@2.2.0)(bs58@6.0.0)(bufferutil@4.1.0)(expo-constants@55.0.7)(fastestsmallesttextencoderdecoder@1.0.22)(react-dom@19.2.4(react@19.2.4))(react-native@0.84.0(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(tslib@2.8.1)(typescript@5.9.3)(utf-8-validate@5.0.10)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@4.3.6)': dependencies: '@solana/wallet-adapter-alpha': 0.1.14(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-avana': 0.1.17(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)) @@ -21198,7 +21231,7 @@ snapshots: '@solana/wallet-adapter-spot': 0.1.19(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-tokenary': 0.1.16(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-tokenpocket': 0.4.23(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-torus': 0.11.32(@babel/runtime@7.28.6)(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10))(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@solana/wallet-adapter-torus': 0.11.32(@babel/runtime@7.29.2)(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10))(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) '@solana/wallet-adapter-trezor': 0.1.6(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10))(bufferutil@4.1.0)(expo-constants@55.0.7)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.0(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(tslib@2.8.1)(typescript@5.9.3)(utf-8-validate@5.0.10)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-trust': 0.1.17(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-unsafe-burner': 0.1.11(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)) @@ -21559,7 +21592,7 @@ snapshots: '@testing-library/dom@10.4.1': dependencies: '@babel/code-frame': 7.29.0 - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 '@types/aria-query': 5.0.4 aria-query: 5.3.0 dom-accessibility-api: 0.5.16 @@ -21594,14 +21627,14 @@ snapshots: '@tootallnate/quickjs-emscripten@0.23.0': {} - '@toruslabs/base-controllers@5.11.0(@babel/runtime@7.28.6)(bufferutil@4.1.0)(utf-8-validate@5.0.10)': + '@toruslabs/base-controllers@5.11.0(@babel/runtime@7.29.2)(bufferutil@4.1.0)(utf-8-validate@5.0.10)': dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 '@ethereumjs/util': 9.1.0 '@toruslabs/broadcast-channel': 10.0.2(bufferutil@4.1.0)(utf-8-validate@5.0.10) - '@toruslabs/http-helpers': 6.1.1(@babel/runtime@7.28.6) - '@toruslabs/openlogin-jrpc': 8.3.0(@babel/runtime@7.28.6) - '@toruslabs/openlogin-utils': 8.2.1(@babel/runtime@7.28.6) + '@toruslabs/http-helpers': 6.1.1(@babel/runtime@7.29.2) + '@toruslabs/openlogin-jrpc': 8.3.0(@babel/runtime@7.29.2) + '@toruslabs/openlogin-utils': 8.2.1(@babel/runtime@7.29.2) async-mutex: 0.5.0 bignumber.js: 9.3.1 bowser: 2.14.1 @@ -21628,9 +21661,9 @@ snapshots: - supports-color - utf-8-validate - '@toruslabs/constants@13.4.0(@babel/runtime@7.28.6)': + '@toruslabs/constants@13.4.0(@babel/runtime@7.29.2)': dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 '@toruslabs/eccrypto@4.0.0': dependencies: @@ -21642,6 +21675,12 @@ snapshots: lodash.merge: 4.6.2 loglevel: 1.9.2 + '@toruslabs/http-helpers@6.1.1(@babel/runtime@7.29.2)': + dependencies: + '@babel/runtime': 7.29.2 + lodash.merge: 4.6.2 + loglevel: 1.9.2 + '@toruslabs/metadata-helpers@5.1.0(@babel/runtime@7.28.6)': dependencies: '@babel/runtime': 7.28.6 @@ -21653,9 +21692,9 @@ snapshots: transitivePeerDependencies: - '@sentry/types' - '@toruslabs/openlogin-jrpc@8.3.0(@babel/runtime@7.28.6)': + '@toruslabs/openlogin-jrpc@8.3.0(@babel/runtime@7.29.2)': dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 end-of-stream: 1.4.5 events: 3.3.0 fast-safe-stringify: 2.1.1 @@ -21663,20 +21702,20 @@ snapshots: pump: 3.0.3 readable-stream: 4.7.0 - '@toruslabs/openlogin-utils@8.2.1(@babel/runtime@7.28.6)': + '@toruslabs/openlogin-utils@8.2.1(@babel/runtime@7.29.2)': dependencies: - '@babel/runtime': 7.28.6 - '@toruslabs/constants': 13.4.0(@babel/runtime@7.28.6) + '@babel/runtime': 7.29.2 + '@toruslabs/constants': 13.4.0(@babel/runtime@7.29.2) base64url: 3.0.1 color: 4.2.3 - '@toruslabs/solana-embed@2.1.0(@babel/runtime@7.28.6)(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)': + '@toruslabs/solana-embed@2.1.0(@babel/runtime@7.29.2)(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)': dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) - '@toruslabs/base-controllers': 5.11.0(@babel/runtime@7.28.6)(bufferutil@4.1.0)(utf-8-validate@5.0.10) - '@toruslabs/http-helpers': 6.1.1(@babel/runtime@7.28.6) - '@toruslabs/openlogin-jrpc': 8.3.0(@babel/runtime@7.28.6) + '@toruslabs/base-controllers': 5.11.0(@babel/runtime@7.29.2)(bufferutil@4.1.0)(utf-8-validate@5.0.10) + '@toruslabs/http-helpers': 6.1.1(@babel/runtime@7.29.2) + '@toruslabs/openlogin-jrpc': 8.3.0(@babel/runtime@7.29.2) eth-rpc-errors: 4.0.3 fast-deep-equal: 3.1.3 lodash-es: 4.17.23 @@ -22218,7 +22257,7 @@ snapshots: dependencies: undici-types: 7.16.0 - '@types/node@25.3.5': + '@types/node@25.5.0': dependencies: undici-types: 7.18.2 optional: true @@ -22409,9 +22448,9 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@vercel/analytics@1.6.1(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)': + '@vercel/analytics@1.6.1(next@16.1.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)': optionalDependencies: - next: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + next: 16.1.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 '@vercel/backends@0.0.33(rollup@4.59.0)(typescript@5.9.3)': @@ -22439,7 +22478,7 @@ snapshots: is-buffer: 2.0.5 is-node-process: 1.2.0 throttleit: 2.1.0 - undici: 5.28.4 + undici: 7.24.0 '@vercel/blob@2.2.0': dependencies: @@ -22447,7 +22486,7 @@ snapshots: is-buffer: 2.0.5 is-node-process: 1.2.0 throttleit: 2.1.0 - undici: 6.23.0 + undici: 7.24.0 optional: true '@vercel/build-utils@13.4.0': @@ -22654,7 +22693,7 @@ snapshots: ts-morph: 12.0.0 tsx: 4.21.0 typescript: 5.9.3 - undici: 5.28.4 + undici: 7.24.0 transitivePeerDependencies: - encoding - rollup @@ -22731,7 +22770,7 @@ snapshots: obug: 2.1.1 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.0.18(@edge-runtime/vm@3.2.0)(@opentelemetry/api@1.9.0)(@types/node@25.2.3)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.0.1))(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.0.18(@edge-runtime/vm@3.2.0)(@opentelemetry/api@1.9.0)(@types/node@25.2.3)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.0.1))(lightningcss@1.30.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) '@vitest/expect@4.0.18': dependencies: @@ -22742,21 +22781,21 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.0.3 - '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@vitest/spy': 4.0.18 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) - '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@vitest/spy': 4.0.18 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) '@vitest/pretty-format@4.0.18': dependencies: @@ -22779,12 +22818,12 @@ snapshots: dependencies: '@vitest/utils': 4.0.18 fflate: 0.8.2 - flatted: 3.3.4 + flatted: 3.4.2 pathe: 2.0.3 sirv: 3.0.2 tinyglobby: 0.2.15 - tinyrainbow: 3.0.3 - vitest: 4.0.18(@edge-runtime/vm@3.2.0)(@opentelemetry/api@1.9.0)(@types/node@25.2.3)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.0.1))(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + tinyrainbow: 3.1.0 + vitest: 4.0.18(@edge-runtime/vm@3.2.0)(@opentelemetry/api@1.9.0)(@types/node@25.2.3)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.0.1))(lightningcss@1.30.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) optional: true '@vitest/utils@4.0.18': @@ -24004,6 +24043,8 @@ snapshots: base64url@3.0.1: {} + baseline-browser-mapping@2.10.10: {} + baseline-browser-mapping@2.9.19: {} basic-ftp@5.2.0: {} @@ -24252,6 +24293,8 @@ snapshots: caniuse-lite@1.0.30001770: {} + caniuse-lite@1.0.30001781: {} + cashaddrjs@0.4.4: dependencies: big-integer: 1.6.36 @@ -25225,6 +25268,11 @@ snapshots: graceful-fs: 4.2.11 tapable: 2.3.0 + enhanced-resolve@5.20.1: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.1 + entities@4.5.0: {} entities@6.0.1: {} @@ -26441,13 +26489,10 @@ snapshots: flat-cache@4.0.1: dependencies: - flatted: 3.3.3 + flatted: 3.4.2 keyv: 4.5.4 - flatted@3.3.3: {} - - flatted@3.3.4: - optional: true + flatted@3.4.2: {} flow-enums-runtime@0.0.6: {} @@ -26511,7 +26556,7 @@ snapshots: fsevents@2.3.3: optional: true - fumadocs-core@16.6.0(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.564.0(react@19.2.4))(next@16.1.6(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6): + fumadocs-core@16.6.0(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.564.0(react@19.2.4))(next@16.1.7(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6): dependencies: '@formatjs/intl-localematcher': 0.8.1 '@orama/orama': 3.1.18 @@ -26543,21 +26588,21 @@ snapshots: '@types/mdast': 4.0.4 '@types/react': 19.2.14 lucide-react: 0.564.0(react@19.2.4) - next: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + next: 16.1.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) zod: 4.3.6 transitivePeerDependencies: - supports-color - fumadocs-mdx@14.2.7(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.14)(fumadocs-core@16.6.0(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.564.0(react@19.2.4))(next@16.1.6(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(mdast-util-mdx-jsx@3.2.0)(next@16.1.6(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)): + fumadocs-mdx@14.2.7(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.14)(fumadocs-core@16.6.0(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.564.0(react@19.2.4))(next@16.1.7(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(mdast-util-mdx-jsx@3.2.0)(next@16.1.7(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)): dependencies: '@mdx-js/mdx': 3.1.1 '@standard-schema/spec': 1.1.0 chokidar: 5.0.0 esbuild: 0.27.3 estree-util-value-to-estree: 3.5.0 - fumadocs-core: 16.6.0(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.564.0(react@19.2.4))(next@16.1.6(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6) + fumadocs-core: 16.6.0(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.564.0(react@19.2.4))(next@16.1.7(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6) js-yaml: 4.1.1 mdast-util-to-markdown: 2.1.2 picocolors: 1.1.1 @@ -26575,13 +26620,13 @@ snapshots: '@types/mdx': 2.0.13 '@types/react': 19.2.14 mdast-util-mdx-jsx: 3.2.0 - next: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + next: 16.1.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 - vite: 7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color - fumadocs-ui@16.6.0(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(fumadocs-core@16.6.0(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.564.0(react@19.2.4))(next@16.1.6(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.1.6(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.1.18): + fumadocs-ui@16.6.0(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(fumadocs-core@16.6.0(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.564.0(react@19.2.4))(next@16.1.7(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.1.7(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.1.18): dependencies: '@fumadocs/tailwind': 0.0.2(tailwindcss@4.1.18) '@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -26595,7 +26640,7 @@ snapshots: '@radix-ui/react-slot': 1.2.4(@types/react@19.2.14)(react@19.2.4) '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) class-variance-authority: 0.7.1 - fumadocs-core: 16.6.0(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.564.0(react@19.2.4))(next@16.1.6(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6) + fumadocs-core: 16.6.0(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.564.0(react@19.2.4))(next@16.1.7(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6) lucide-react: 0.563.0(react@19.2.4) motion: 12.34.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) next-themes: 0.4.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -26609,7 +26654,7 @@ snapshots: unist-util-visit: 5.1.0 optionalDependencies: '@types/react': 19.2.14 - next: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + next: 16.1.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) transitivePeerDependencies: - '@emotion/is-prop-valid' - '@types/react-dom' @@ -26807,7 +26852,7 @@ snapshots: graceful-fs@4.2.11: {} - h3@1.15.5: + h3@1.15.9: dependencies: cookie-es: 1.2.2 crossws: 0.3.5 @@ -27614,7 +27659,7 @@ snapshots: saxes: 6.0.0 symbol-tree: 3.2.4 tough-cookie: 6.0.0 - undici: 7.22.0 + undici: 7.24.0 w3c-xmlserializer: 5.0.0 webidl-conversions: 8.0.1 whatwg-mimetype: 5.0.0 @@ -28955,6 +29000,8 @@ snapshots: nanoid@5.1.6: {} + nanoid@5.1.7: {} + nativewind@5.0.0-preview.2(react-native-css@3.0.4(@expo/metro-config@55.0.9(bufferutil@4.1.0)(expo@55.0.6)(typescript@5.9.3)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0))(tailwindcss@4.1.18): dependencies: react-native-css: 3.0.4(@expo/metro-config@55.0.9(bufferutil@4.1.0)(expo@55.0.6)(typescript@5.9.3)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0) @@ -28978,25 +29025,25 @@ snapshots: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + next@16.1.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: - '@next/env': 16.1.6 + '@next/env': 16.1.7 '@swc/helpers': 0.5.15 - baseline-browser-mapping: 2.9.19 - caniuse-lite: 1.0.30001770 + baseline-browser-mapping: 2.10.10 + caniuse-lite: 1.0.30001781 postcss: 8.4.31 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) styled-jsx: 5.1.6(@babel/core@7.29.0)(react@19.2.4) optionalDependencies: - '@next/swc-darwin-arm64': 16.1.6 - '@next/swc-darwin-x64': 16.1.6 - '@next/swc-linux-arm64-gnu': 16.1.6 - '@next/swc-linux-arm64-musl': 16.1.6 - '@next/swc-linux-x64-gnu': 16.1.6 - '@next/swc-linux-x64-musl': 16.1.6 - '@next/swc-win32-arm64-msvc': 16.1.6 - '@next/swc-win32-x64-msvc': 16.1.6 + '@next/swc-darwin-arm64': 16.1.7 + '@next/swc-darwin-x64': 16.1.7 + '@next/swc-linux-arm64-gnu': 16.1.7 + '@next/swc-linux-arm64-musl': 16.1.7 + '@next/swc-linux-x64-gnu': 16.1.7 + '@next/swc-linux-x64-musl': 16.1.7 + '@next/swc-win32-arm64-msvc': 16.1.7 + '@next/swc-win32-x64-msvc': 16.1.7 '@opentelemetry/api': 1.9.0 '@playwright/test': 1.58.2 babel-plugin-react-compiler: 1.0.0 @@ -29064,12 +29111,12 @@ snapshots: nullthrows@1.1.1: {} - nuqs@2.8.8(next@16.1.6(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4): + nuqs@2.8.8(next@16.1.7(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4): dependencies: '@standard-schema/spec': 1.0.0 react: 19.2.4 optionalDependencies: - next: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + next: 16.1.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) nypm@0.6.2: dependencies: @@ -31125,13 +31172,13 @@ snapshots: '@socket.io/component-emitter': 3.1.2 debug: 4.4.3 engine.io-client: 6.6.4(bufferutil@4.1.0)(utf-8-validate@5.0.10) - socket.io-parser: 4.2.5 + socket.io-parser: 4.2.6 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - socket.io-parser@4.2.5: + socket.io-parser@4.2.6: dependencies: '@socket.io/component-emitter': 3.1.2 debug: 4.4.3 @@ -31146,7 +31193,7 @@ snapshots: debug: 4.4.3 engine.io: 6.6.5(bufferutil@4.1.0)(utf-8-validate@5.0.10) socket.io-adapter: 2.5.6(bufferutil@4.1.0)(utf-8-validate@5.0.10) - socket.io-parser: 4.2.5 + socket.io-parser: 4.2.6 transitivePeerDependencies: - bufferutil - supports-color @@ -31483,6 +31530,8 @@ snapshots: tapable@2.3.0: {} + tapable@2.3.1: {} + tar@7.5.11: dependencies: '@isaacs/fs-minipass': 4.0.1 @@ -31496,12 +31545,12 @@ snapshots: ansi-escapes: 4.3.2 supports-hyperlinks: 2.3.0 - terser-webpack-plugin@5.3.17(webpack@5.105.2): + terser-webpack-plugin@5.4.0(webpack@5.105.2): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 - terser: 5.46.0 + terser: 5.46.1 webpack: 5.105.2 terser@5.46.0: @@ -31511,6 +31560,13 @@ snapshots: commander: 2.20.3 source-map-support: 0.5.21 + terser@5.46.1: + dependencies: + '@jridgewell/source-map': 0.3.11 + 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 @@ -31572,6 +31628,9 @@ snapshots: tinyrainbow@3.0.3: {} + tinyrainbow@3.1.0: + optional: true + tldts-core@7.0.23: {} tldts@7.0.23: @@ -31863,14 +31922,7 @@ snapshots: undici-types@7.22.0: {} - undici@5.28.4: - dependencies: - '@fastify/busboy': 2.1.1 - - undici@6.23.0: - optional: true - - undici@7.22.0: {} + undici@7.24.0: {} unicode-canonical-property-names-ecmascript@2.0.1: {} @@ -31952,7 +32004,7 @@ snapshots: anymatch: 3.1.3 chokidar: 5.0.0 destr: 2.0.5 - h3: 1.15.5 + h3: 1.15.9 lru-cache: 11.2.6 node-fetch-native: 1.6.7 ofetch: 1.5.1 @@ -32239,17 +32291,17 @@ snapshots: - utf-8-validate - zod - vite-tsconfig-paths@6.1.1(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)): + vite-tsconfig-paths@6.1.1(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)): dependencies: debug: 4.4.3 globrex: 0.1.2 tsconfck: 3.1.6(typescript@5.9.3) - vite: 7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color - typescript - vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): + vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: esbuild: 0.27.3 fdir: 6.5.0(picomatch@4.0.3) @@ -32262,11 +32314,11 @@ snapshots: fsevents: 2.3.3 jiti: 2.6.1 lightningcss: 1.30.1 - terser: 5.46.0 + terser: 5.46.1 tsx: 4.21.0 yaml: 2.8.2 - vite@7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): + vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: esbuild: 0.27.3 fdir: 6.5.0(picomatch@4.0.3) @@ -32275,18 +32327,18 @@ snapshots: rollup: 4.59.0 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 25.3.5 + '@types/node': 25.5.0 fsevents: 2.3.3 jiti: 2.6.1 lightningcss: 1.30.1 - terser: 5.46.0 + terser: 5.46.1 tsx: 4.21.0 yaml: 2.8.2 - vitest@4.0.18(@edge-runtime/vm@3.2.0)(@opentelemetry/api@1.9.0)(@types/node@25.2.3)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.0.1))(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): + vitest@4.0.18(@edge-runtime/vm@3.2.0)(@opentelemetry/api@1.9.0)(@types/node@25.2.3)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.0.1))(lightningcss@1.30.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: '@vitest/expect': 4.0.18 - '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/pretty-format': 4.0.18 '@vitest/runner': 4.0.18 '@vitest/snapshot': 4.0.18 @@ -32303,7 +32355,7 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: '@edge-runtime/vm': 3.2.0 @@ -32324,10 +32376,10 @@ snapshots: - tsx - yaml - vitest@4.0.18(@edge-runtime/vm@3.2.0)(@opentelemetry/api@1.9.0)(@types/node@25.3.5)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.0.1))(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): + vitest@4.0.18(@edge-runtime/vm@3.2.0)(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@2.0.1))(lightningcss@1.30.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: '@vitest/expect': 4.0.18 - '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/pretty-format': 4.0.18 '@vitest/runner': 4.0.18 '@vitest/snapshot': 4.0.18 @@ -32344,12 +32396,12 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.3.1(@types/node@25.3.5)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: '@edge-runtime/vm': 3.2.0 '@opentelemetry/api': 1.9.0 - '@types/node': 25.3.5 + '@types/node': 25.5.0 '@vitest/ui': 4.0.18(vitest@4.0.18) jsdom: 28.1.0(@noble/hashes@2.0.1) transitivePeerDependencies: @@ -32456,7 +32508,7 @@ snapshots: acorn-import-phases: 1.0.4(acorn@8.16.0) browserslist: 4.28.1 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.20.0 + enhanced-resolve: 5.20.1 es-module-lexer: 2.0.0 eslint-scope: 5.1.1 events: 3.3.0 @@ -32467,8 +32519,8 @@ snapshots: mime-types: 2.1.35 neo-async: 2.6.2 schema-utils: 4.3.3 - tapable: 2.3.0 - terser-webpack-plugin: 5.3.17(webpack@5.105.2) + tapable: 2.3.1 + terser-webpack-plugin: 5.4.0(webpack@5.105.2) watchpack: 2.5.1 webpack-sources: 3.3.4 transitivePeerDependencies: diff --git a/scripts/README.md b/scripts/README.md index a6d43222..313db74e 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -69,7 +69,7 @@ All security-related pnpm scripts are organized under the `security:` namespace: Prevents committing sensitive file types in pre-commit hooks. **What gets blocked**: -- `.env` (but `.env-example`, `.env.schema`, `.env.*` variants are allowed) +- `.env` and related sensitive paths (see `block-secret-files.mjs`); allowed committed templates — `.env..example`, `.env.schema`, `.env.{development,staging,production,test}` — use the same patterns in `.trufflehogignore` for TruffleHog - `*.pem`, `*.key`, `*.p12`, `*.pfx`, `*.jks`, `*.keystore` - `id_rsa*` (SSH private keys) - Certificate files: `*.crt`, `*.cer`, `*.der`, `*.p7b`, `*.p7c`, `*.p7m`, `*.p7s` diff --git a/scripts/block-secret-files.mjs b/scripts/block-secret-files.mjs index c566547a..e812e8c0 100644 --- a/scripts/block-secret-files.mjs +++ b/scripts/block-secret-files.mjs @@ -27,8 +27,7 @@ const blockedPatterns = [ ] const allowedPatterns = [ - /\.env-example$/, - /\.env\.example$/, + /\.env\.[^/]+\.example$/, /\.env\.schema$/, /\.env\.development$/, /\.env\.staging$/, @@ -79,10 +78,10 @@ if (blockedFiles.length > 0) { }) console.error('\nThese file types contain sensitive data and should not be committed.') console.error( - 'Allowed exceptions: .env-example, .env.example, .env.schema, .env.{development,staging,production,test}', + 'Allowed exceptions: .env..example (e.g. .env.defaults.example), .env.schema, .env.{development,staging,production,test}', ) console.error( - '\nIf you need to commit a configuration template, use .env-example or .env.schema instead.\n', + '\nIf you need to commit a configuration template, use .env.defaults.example (or .env.local.example) or .env.schema.\n', ) exit(1) } diff --git a/tools/eslint/package.json b/tools/eslint/package.json index 0cb7a29d..37a0cf8e 100644 --- a/tools/eslint/package.json +++ b/tools/eslint/package.json @@ -12,7 +12,7 @@ }, "devDependencies": { "@eslint/js": "^9.39.0", - "@next/eslint-plugin-next": "^16.1.6", + "@next/eslint-plugin-next": "^16.1.7", "@typescript-eslint/eslint-plugin": "^8.55.0", "@typescript-eslint/parser": "^8.55.0", "@typescript/native-preview": "7.0.0-dev.20260213.1",