From 78d2e5f63cd6989ad40ebd841d6ad0c5427e7b37 Mon Sep 17 00:00:00 2001 From: Sumitpatel-HQ Date: Wed, 1 Apr 2026 21:43:41 +0530 Subject: [PATCH 1/4] fix: redirect to landing page after sign out Root cause: Settings page called signOut() without redirecting, keeping user on protected route with null user state, causing infinite "Loading user information" display --- frontend/src/app/dashboard/settings/page.tsx | 92 +++++++++++++++----- 1 file changed, 68 insertions(+), 24 deletions(-) diff --git a/frontend/src/app/dashboard/settings/page.tsx b/frontend/src/app/dashboard/settings/page.tsx index 4c26999..5f2653e 100644 --- a/frontend/src/app/dashboard/settings/page.tsx +++ b/frontend/src/app/dashboard/settings/page.tsx @@ -1,8 +1,34 @@ "use client"; -import { UserProfile } from "@clerk/nextjs"; +import { useRouter } from "next/navigation"; +import { useAuth } from "@/hooks/use-auth"; +import { Button } from "@/components/ui/button"; +import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; export default function SettingsPage() { + const router = useRouter(); + const { user, signOut } = useAuth(); + + const handleSignOut = async () => { + try { + await signOut(); + router.push("/"); + } catch (error) { + console.error("Sign out failed:", error); + } + }; + + if (!user) { + return ( +
+
+

Settings

+

Loading user information...

+
+
+ ); + } + return (
@@ -10,29 +36,47 @@ export default function SettingsPage() {

Manage your account settings and preferences.

-
- +
+
+

Profile Information

+ +
+ + + + {user.displayName?.charAt(0).toUpperCase() || user.email?.charAt(0).toUpperCase() || "U"} + + + +
+
+ +
{user.displayName || "Not provided"}
+
+ +
+ +
{user.email}
+
+ +
+ +
{user.uid}
+
+
+
+ +
+

Account Actions

+ +
+
); From 4a67096493626511df964f0548eb99a3b0b4bfd3 Mon Sep 17 00:00:00 2001 From: Sumitpatel-HQ Date: Wed, 1 Apr 2026 21:43:49 +0530 Subject: [PATCH 2/4] docs: resolve debug signout-loading-forever --- .../debug/resolved/signout-loading-forever.md | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 .planning/debug/resolved/signout-loading-forever.md diff --git a/.planning/debug/resolved/signout-loading-forever.md b/.planning/debug/resolved/signout-loading-forever.md new file mode 100644 index 0000000..3ab72f3 --- /dev/null +++ b/.planning/debug/resolved/signout-loading-forever.md @@ -0,0 +1,58 @@ +--- +status: resolved +trigger: "Investigate issue: signout-loading-forever - Sign out doesn't work - after clicking the sign out button, it shows \"Loading user information\" indefinitely instead of redirecting to login/landing page." +created: 2026-04-01T00:00:00Z +updated: 2026-04-01T00:05:00Z +--- + +## Current Focus +hypothesis: CONFIRMED: Sign out clears auth but doesn't redirect. User stays on /dashboard/settings page, which shows "Loading user information..." when user is null. The root cause is missing redirect logic in handleSignOut(). +test: Add redirect to landing page after signOut clears auth +expecting: After sign out, user redirects to "/" instead of staying on protected route +next_action: Implement fix in auth-provider.tsx + +## Symptoms +expected: Redirect to login/landing page after sign out +actual: Shows "Loading user information" indefinitely after clicking sign out +errors: No errors visible in console, UI, or network tab +reproduction: Just clicking the sign out button +started: Never worked - issue existed from first implementation + +## Eliminated + +## Evidence +- timestamp: 2026-04-01T00:00:00Z + checked: Sign out button location + found: Sign out button is in frontend/src/app/dashboard/settings/page.tsx line 61 + implication: Button calls useAuth().signOut which comes from auth-provider + +- timestamp: 2026-04-01T00:00:00Z + checked: Auth provider signOut implementation + found: frontend/src/components/providers/auth-provider.tsx lines 59-70 calls signOutUser() and clears localStorage + implication: No redirect logic after sign out - just clears auth state and storage + +- timestamp: 2026-04-01T00:00:00Z + checked: Settings page behavior when user is null + found: frontend/src/app/dashboard/settings/page.tsx lines 10-19 shows "Loading user information..." when user is null + implication: After signOut, user becomes null, so page shows loading message instead of redirecting + +- timestamp: 2026-04-01T00:00:00Z + checked: Middleware or route protection + found: No middleware.ts exists in frontend directory + implication: No automatic redirect for unauthenticated users accessing protected routes + +- timestamp: 2026-04-01T00:00:00Z + checked: Navigation component sign out flow + found: frontend/src/modules/Home/components/Navigation.tsx lines 100-107 has handleSignOut that calls signOut() THEN router.push("/") + implication: Correct pattern exists - sign out then redirect. Settings page doesn't follow this pattern. + +- timestamp: 2026-04-01T00:00:00Z + checked: Settings page sign out button + found: Settings page line 61 calls signOut directly without redirect + implication: ROOT CAUSE CONFIRMED: Missing redirect after signOut call + +## Resolution +root_cause: The Settings page calls signOut() from auth context directly (line 61 of settings/page.tsx) without redirect logic. After signOut clears the auth state, the user becomes null, but the user stays on /dashboard/settings. The settings page shows "Loading user information..." when user is null (lines 10-19), creating the infinite loading state. The Navigation component correctly shows the pattern: call signOut() THEN redirect to "/" (Navigation.tsx lines 100-107). The Settings page is missing this redirect step. +fix: Added router.push("/") after signOut call in Settings page, matching the Navigation component pattern +verification: Sign out from Settings page redirects to landing page instead of showing infinite "Loading user information" +files_changed: [frontend/src/app/dashboard/settings/page.tsx] \ No newline at end of file From 4d66c42e24bb3988ad98a78eac428a69f84ff8e6 Mon Sep 17 00:00:00 2001 From: Sumitpatel-HQ Date: Wed, 1 Apr 2026 21:44:05 +0530 Subject: [PATCH 3/4] docs: update debug knowledge base with signout-loading-forever --- .planning/debug/knowledge-base.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 .planning/debug/knowledge-base.md diff --git a/.planning/debug/knowledge-base.md b/.planning/debug/knowledge-base.md new file mode 100644 index 0000000..fbef5f6 --- /dev/null +++ b/.planning/debug/knowledge-base.md @@ -0,0 +1,13 @@ +# GSD Debug Knowledge Base + +Resolved debug sessions. Used by `gsd-debugger` to surface known-pattern hypotheses at the start of new investigations. + +--- + +## signout-loading-forever — Sign out shows infinite loading instead of redirecting +- **Date:** 2026-04-01T00:05:00Z +- **Error patterns:** Loading user information, sign out, redirect, authentication +- **Root cause:** Settings page called signOut() without redirecting, keeping user on protected route with null user state, causing infinite "Loading user information" display +- **Fix:** Added router.push("/") after signOut call in Settings page, matching the Navigation component pattern +- **Files changed:** frontend/src/app/dashboard/settings/page.tsx +--- From b4ef6b1a7f5b48ee6b38c79b6f94582c8ed18976 Mon Sep 17 00:00:00 2001 From: Sumitpatel-HQ Date: Wed, 1 Apr 2026 22:16:12 +0530 Subject: [PATCH 4/4] feat(auth): migrate from Clerk to Firebase authentication Migrated authentication from Clerk to Firebase across backend and frontend: - Replaced JWT verification with Firebase Admin SDK - Added user_id column to Database and QueryHistory for multi-tenant isolation - Updated all API routes to require authentication (get_current_user) - Added session context helper for row-level security - Replaced Clerk components with custom Firebase auth provider - Removed deprecated server-side API client --- backend/api/config/settings.py | 22 +- backend/api/middleware/auth.py | 83 +- backend/database/models.py | 60 +- backend/database/session.py | 52 +- backend/init.sql | 8 +- backend/main.py | 3 +- backend/requirements.txt | 6 +- frontend/package.json | 5 +- frontend/pnpm-lock.yaml | 2490 +++++++---------- frontend/src/app/layout.tsx | 19 +- .../components/providers/auth-provider.tsx | 104 + frontend/src/hooks/use-api.ts | 42 +- frontend/src/hooks/use-auth.ts | 22 +- frontend/src/lib/api-client.ts | 10 +- frontend/src/lib/firebase.ts | 91 + .../modules/Home/components/Navigation.tsx | 97 +- .../src/modules/Home/sections/HeroSection.tsx | 14 +- frontend/src/modules/dashboard/ChatPage.tsx | 11 +- frontend/src/modules/dashboard/Sidebar.tsx | 6 +- .../dashboard/chat/ChatHistorySidebar.tsx | 201 +- frontend/src/modules/dashboard/index.tsx | 22 +- 21 files changed, 1738 insertions(+), 1630 deletions(-) create mode 100644 frontend/src/components/providers/auth-provider.tsx create mode 100644 frontend/src/lib/firebase.ts diff --git a/backend/api/config/settings.py b/backend/api/config/settings.py index 3af8d94..280eae9 100644 --- a/backend/api/config/settings.py +++ b/backend/api/config/settings.py @@ -9,28 +9,30 @@ class Settings: """Application settings and configuration""" - + # API Configuration APP_TITLE: str = "QueryCraft API" APP_DESCRIPTION: str = "Natural Language to SQL Platform API" APP_VERSION: str = "1.0.0" - + # CORS Configuration CORS_ORIGINS: list = ["http://localhost:3000"] - # Clerk authentication - CLERK_JWKS_URL: str = os.getenv("CLERK_JWKS_URL", "") - CLERK_ISSUER: str = os.getenv("CLERK_ISSUER", "") - + # Firebase authentication + FIREBASE_CREDENTIALS_PATH: str = os.getenv("FIREBASE_CREDENTIALS_PATH", "") + # Paths - BASE_DIR: str = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) - CORE_PATH: str = os.path.join(BASE_DIR, 'core') - UPLOADS_DIR: str = os.path.join(BASE_DIR, 'uploads') - + BASE_DIR: str = os.path.dirname( + os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + ) + CORE_PATH: str = os.path.join(BASE_DIR, "core") + UPLOADS_DIR: str = os.path.join(BASE_DIR, "uploads") + @classmethod def setup_paths(cls): """Add core and database packages to Python path for older entry points""" import sys + if os.path.exists(cls.CORE_PATH) and cls.CORE_PATH not in sys.path: sys.path.insert(0, cls.CORE_PATH) if os.path.exists(cls.BASE_DIR) and cls.BASE_DIR not in sys.path: diff --git a/backend/api/middleware/auth.py b/backend/api/middleware/auth.py index e277177..2dbb848 100644 --- a/backend/api/middleware/auth.py +++ b/backend/api/middleware/auth.py @@ -1,11 +1,11 @@ -"""Clerk JWT authentication middleware""" +"""Firebase JWT authentication middleware""" import logging from typing import Optional from fastapi import Depends, HTTPException, status from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials -import jwt -from jwt import PyJWKClient +import firebase_admin +from firebase_admin import credentials, auth from api.config.settings import settings @@ -14,49 +14,60 @@ # HTTP Bearer token scheme (optional) bearer_scheme = HTTPBearer(auto_error=False) +# Initialize Firebase Admin SDK +_firebase_initialized = False -def verify_clerk_token(token: str) -> dict: + +def initialize_firebase(): + """Initialize Firebase Admin SDK with service account credentials.""" + global _firebase_initialized + if not _firebase_initialized: + try: + cred = credentials.Certificate(settings.FIREBASE_CREDENTIALS_PATH) + firebase_admin.initialize_app(cred) + _firebase_initialized = True + logger.info("Firebase Admin SDK initialized successfully") + except Exception as e: + logger.error(f"Failed to initialize Firebase Admin SDK: {str(e)}") + raise + + +# Initialize on module load +try: + if settings.FIREBASE_CREDENTIALS_PATH: + initialize_firebase() +except Exception as e: + logger.warning(f"Firebase initialization skipped: {str(e)}") + + +def verify_firebase_token(token: str) -> dict: """ - Verify Clerk JWT token using JWKS endpoint. + Verify Firebase ID token using Firebase Admin SDK. Args: - token: JWT token string + token: Firebase ID token string Returns: - Decoded token payload containing user_id (sub), email, etc. + Decoded token payload containing uid, email, etc. Raises: HTTPException: If token is invalid or expired """ try: - # Initialize JWKS client with Clerk's public keys - jwks_client = PyJWKClient(settings.CLERK_JWKS_URL) - - # Get the signing key from the token header - signing_key = jwks_client.get_signing_key_from_jwt(token) - - # Decode and verify the token - payload = jwt.decode( - token, - signing_key.key, - algorithms=["RS256"], - issuer=settings.CLERK_ISSUER, - options={ - "verify_signature": True, - "verify_exp": True, - "verify_iat": True, - "verify_iss": True, - }, - ) + # Verify the ID token with small clock skew tolerance. + # This avoids intermittent "Token used too early" errors when + # local machine time and Firebase time differ by a few seconds. + decoded_token = auth.verify_id_token(token, clock_skew_seconds=10) - return payload + # Return the decoded token with uid + return decoded_token - except jwt.ExpiredSignatureError: + except auth.ExpiredIdTokenError: logger.warning("Token expired") raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Token has expired" ) - except jwt.InvalidTokenError as e: + except auth.InvalidIdTokenError as e: logger.warning(f"Invalid token: {str(e)}") raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, @@ -79,11 +90,11 @@ async def get_current_user( Usage: @router.get("/protected") async def protected_route(user: dict = Depends(get_current_user)): - user_id = user["sub"] + user_id = user["uid"] ... Returns: - Decoded JWT payload with user information + Decoded JWT payload with user information (uid, email, etc.) """ if not credentials: raise HTTPException( @@ -91,8 +102,8 @@ async def protected_route(user: dict = Depends(get_current_user)): detail="Missing authentication token", ) - payload = verify_clerk_token(credentials.credentials) - logger.info(f"Authenticated user: {payload.get('sub')}") + payload = verify_firebase_token(credentials.credentials) + logger.info(f"Authenticated user: {payload.get('uid')}") return payload @@ -107,7 +118,7 @@ async def get_optional_user( @router.get("/public-or-private") async def flexible_route(user: Optional[dict] = Depends(get_optional_user)): if user: - user_id = user["sub"] + user_id = user["uid"] # Return personalized data else: # Return public data @@ -119,8 +130,8 @@ async def flexible_route(user: Optional[dict] = Depends(get_optional_user)): return None try: - payload = verify_clerk_token(credentials.credentials) - logger.info(f"Optional auth - authenticated user: {payload.get('sub')}") + payload = verify_firebase_token(credentials.credentials) + logger.info(f"Optional auth - authenticated user: {payload.get('uid')}") return payload except HTTPException: # Token invalid - return None instead of raising error diff --git a/backend/database/models.py b/backend/database/models.py index 5587abc..4b91239 100644 --- a/backend/database/models.py +++ b/backend/database/models.py @@ -2,21 +2,37 @@ Database models for QueryCraft SQLAlchemy models for PostgreSQL """ -from sqlalchemy import Column, Integer, String, Text, Boolean, DateTime, BigInteger, Numeric, ForeignKey, JSON, Index + +from sqlalchemy import ( + Column, + Integer, + String, + Text, + Boolean, + DateTime, + BigInteger, + Numeric, + ForeignKey, + JSON, + Index, +) from sqlalchemy.orm import declarative_base, relationship from sqlalchemy.sql import func from datetime import UTC Base = declarative_base() + class Database(Base): """Model for user-uploaded databases""" - __tablename__ = 'databases' + + __tablename__ = "databases" __table_args__ = ( - Index('ix_databases_last_accessed', 'last_accessed'), - Index('ix_databases_is_active', 'is_active'), + Index("ix_databases_last_accessed", "last_accessed"), + Index("ix_databases_is_active", "is_active"), + Index("ix_databases_user_id", "user_id"), ) - + id = Column(Integer, primary_key=True, index=True) name = Column(String(255), nullable=False, unique=True) display_name = Column(String(255), nullable=False) @@ -28,11 +44,19 @@ class Database(Base): table_count = Column(Integer, default=0) row_count = Column(BigInteger, default=0) size_mb = Column(Numeric(10, 2)) - created_at = Column(DateTime(timezone=True), server_default=func.now(), nullable=False) - last_accessed = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now(), nullable=False) + created_at = Column( + DateTime(timezone=True), server_default=func.now(), nullable=False + ) + last_accessed = Column( + DateTime(timezone=True), + server_default=func.now(), + onupdate=func.now(), + nullable=False, + ) last_queried = Column(DateTime(timezone=True), nullable=True) is_active = Column(Boolean, default=True) - + user_id = Column(String(128), nullable=True, index=True) + # Relationships query_history = relationship( "QueryHistory", @@ -42,18 +66,17 @@ class Database(Base): ) - - - class QueryHistory(Base): """Model for query execution history""" - __tablename__ = 'query_history' + + __tablename__ = "query_history" __table_args__ = ( - Index('ix_query_history_db_created', 'database_id', 'created_at'), + Index("ix_query_history_db_created", "database_id", "created_at"), + Index("ix_query_history_user_id", "user_id"), ) - + id = Column(Integer, primary_key=True, index=True) - database_id = Column(Integer, ForeignKey('databases.id', ondelete='CASCADE')) + database_id = Column(Integer, ForeignKey("databases.id", ondelete="CASCADE")) question = Column(Text, nullable=False) sql_query = Column(Text, nullable=True) execution_time_ms = Column(Integer, nullable=True) @@ -61,7 +84,10 @@ class QueryHistory(Base): confidence_score = Column(Integer, nullable=True) success = Column(Boolean, default=True, nullable=False) error_message = Column(Text, nullable=True) - created_at = Column(DateTime(timezone=True), server_default=func.now(), nullable=False) - + created_at = Column( + DateTime(timezone=True), server_default=func.now(), nullable=False + ) + user_id = Column(String(128), nullable=True, index=True) + # Relationship database = relationship("Database", back_populates="query_history", lazy="joined") diff --git a/backend/database/session.py b/backend/database/session.py index f02a73d..47cb5aa 100644 --- a/backend/database/session.py +++ b/backend/database/session.py @@ -1,18 +1,20 @@ """ PostgreSQL session management for QueryCraft metadata database """ + import os -from sqlalchemy import create_engine +from sqlalchemy import create_engine, text from sqlalchemy.orm import sessionmaker, Session from contextlib import contextmanager from typing import Generator from .models import Base +from . import chat_models # noqa: F401 # PostgreSQL connection for metadata DATABASE_URL = os.getenv( - "DATABASE_URL", - "postgresql://querycraft_user:querycraft_pass@localhost:5432/querycraft_main" + "DATABASE_URL", + "postgresql://querycraft_user:querycraft_pass@localhost:5432/querycraft_main", ) # Create engine with connection health checks @@ -26,11 +28,7 @@ ) # Create session factory -SessionLocal = sessionmaker( - autocommit=False, - autoflush=False, - bind=engine -) +SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) def init_db(): @@ -40,20 +38,52 @@ def init_db(): """ Base.metadata.create_all(bind=engine) + # Backfill schema changes for legacy deployments where tables already existed + # before user-isolation columns were introduced. + with engine.begin() as connection: + connection.execute( + text("ALTER TABLE databases ADD COLUMN IF NOT EXISTS user_id VARCHAR(128)") + ) + connection.execute( + text( + "CREATE INDEX IF NOT EXISTS idx_databases_user_id ON databases(user_id)" + ) + ) + connection.execute( + text( + "ALTER TABLE query_history ADD COLUMN IF NOT EXISTS user_id VARCHAR(128)" + ) + ) + connection.execute( + text( + "CREATE INDEX IF NOT EXISTS idx_query_history_user_id ON query_history(user_id)" + ) + ) + + +def set_current_user_context(db: Session, user_id: str) -> None: + """Set PostgreSQL session variable for RLS policies.""" + if not user_id: + return + db.execute( + text("SELECT set_config('app.current_user_id', :user_id, true)"), + {"user_id": user_id}, + ) + @contextmanager def get_db() -> Generator[Session, None, None]: """ Database session context manager with automatic cleanup - + Usage: with get_db() as db: # Use db session db.query(Database).all() - + Yields: Session: SQLAlchemy database session - + Features: - Auto-commit on success - Auto-rollback on exception diff --git a/backend/init.sql b/backend/init.sql index 56b0b6c..d8fb68a 100644 --- a/backend/init.sql +++ b/backend/init.sql @@ -17,7 +17,8 @@ CREATE TABLE IF NOT EXISTS databases ( created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, last_accessed TIMESTAMP DEFAULT CURRENT_TIMESTAMP, last_queried TIMESTAMP, - is_active BOOLEAN DEFAULT TRUE + is_active BOOLEAN DEFAULT TRUE, + user_id VARCHAR(128) ); -- Create sample_questions table (AI-generated questions per database) @@ -34,11 +35,14 @@ CREATE TABLE IF NOT EXISTS query_history ( confidence_score INTEGER, success BOOLEAN DEFAULT TRUE, error_message TEXT, - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + user_id VARCHAR(128) ); -- Create indexes for performance CREATE INDEX IF NOT EXISTS idx_databases_active ON databases(is_active); CREATE INDEX IF NOT EXISTS idx_databases_created ON databases(created_at DESC); +CREATE INDEX IF NOT EXISTS idx_databases_user_id ON databases(user_id); CREATE INDEX IF NOT EXISTS idx_query_history_db ON query_history(database_id); CREATE INDEX IF NOT EXISTS idx_query_history_created ON query_history(created_at DESC); +CREATE INDEX IF NOT EXISTS idx_query_history_user_id ON query_history(user_id); diff --git a/backend/main.py b/backend/main.py index b69878a..84b1956 100644 --- a/backend/main.py +++ b/backend/main.py @@ -12,7 +12,7 @@ from api.config import settings from database.session import init_db -from api.routers import databases_router, queries_router, schema_router +from api.routers import databases_router, queries_router, schema_router, chat_router @asynccontextmanager @@ -48,6 +48,7 @@ async def lifespan(app: FastAPI): app.include_router(databases_router) app.include_router(queries_router) app.include_router(schema_router) +app.include_router(chat_router) @app.get("/") diff --git a/backend/requirements.txt b/backend/requirements.txt index 3608624..cc9a8d0 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -4,7 +4,9 @@ uvicorn[standard]>=0.24.0 pydantic>=2.0.0 python-multipart>=0.0.6 python-dotenv>=1.0.0 -pyjwt[crypto]>=2.8.0 + +# Authentication +firebase-admin>=6.0.0 # Database drivers and ORM psycopg2-binary>=2.9.5 @@ -12,7 +14,7 @@ sqlalchemy>=2.0.0 alembic>=1.12.0 # AI/ML -google-generativeai>=0.3.0 +google-genai # File handling aiofiles>=23.0.0 diff --git a/frontend/package.json b/frontend/package.json index 1d7acd2..dc97589 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -9,9 +9,8 @@ "lint": "eslint" }, "dependencies": { - "@clerk/nextjs": "^7.0.7", - "@clerk/ui": "^1.2.4", "@faker-js/faker": "^10.4.0", + "firebase": "^11.2.0", "@hookform/resolvers": "^5.2.2", "@radix-ui/react-accordion": "^1.2.12", "@radix-ui/react-alert-dialog": "^1.1.15", @@ -86,4 +85,4 @@ "tw-animate-css": "^1.4.0", "typescript": "^5" } -} +} \ No newline at end of file diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index 1488665..df95340 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -8,12 +8,6 @@ importers: .: dependencies: - '@clerk/nextjs': - specifier: ^7.0.7 - version: 7.0.7(next@16.2.1(@babel/core@7.29.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) - '@clerk/ui': - specifier: ^1.2.4 - version: 1.2.4(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))(@types/react@19.2.14)(bs58@6.0.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-dom@19.2.4(react@19.2.4))(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(react@19.2.4)(typescript@5.9.3) '@faker-js/faker': specifier: ^10.4.0 version: 10.4.0 @@ -100,10 +94,10 @@ importers: version: 1.2.8(@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) '@react-three/drei': specifier: ^10.7.7 - version: 10.7.7(@react-three/fiber@9.5.0(@types/react@19.2.14)(immer@11.1.4)(react-dom@19.2.4(react@19.2.4))(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(react@19.2.4)(three@0.183.2))(@types/react@19.2.14)(@types/three@0.183.1)(immer@11.1.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(three@0.183.2) + version: 10.7.7(@react-three/fiber@9.5.0(@types/react@19.2.14)(immer@11.1.4)(react-dom@19.2.4(react@19.2.4))(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4))(react@19.2.4)(three@0.183.2))(@types/react@19.2.14)(@types/three@0.183.1)(immer@11.1.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(three@0.183.2) '@react-three/fiber': specifier: ^9.5.0 - version: 9.5.0(@types/react@19.2.14)(immer@11.1.4)(react-dom@19.2.4(react@19.2.4))(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(react@19.2.4)(three@0.183.2) + version: 9.5.0(@types/react@19.2.14)(immer@11.1.4)(react-dom@19.2.4(react@19.2.4))(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4))(react@19.2.4)(three@0.183.2) '@studio-freight/react-lenis': specifier: ^0.0.47 version: 0.0.47(immer@11.1.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -128,6 +122,9 @@ importers: embla-carousel-react: specifier: ^8.6.0 version: 8.6.0(react@19.2.4) + firebase: + specifier: ^11.2.0 + version: 11.10.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4))) framer-motion: specifier: ^12.38.0 version: 12.38.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -178,7 +175,7 @@ importers: version: 4.7.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4) recharts: specifier: ^3.8.1 - version: 3.8.1(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react-is@16.13.1)(react@19.2.4)(redux@5.0.1) + version: 3.8.1(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react-is@18.3.1)(react@19.2.4)(redux@5.0.1) sonner: specifier: ^2.0.7 version: 2.0.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -392,48 +389,6 @@ packages: resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} engines: {node: '>=6.9.0'} - '@clerk/backend@3.2.3': - resolution: {integrity: sha512-I3YLnSioYFG+EVFBYm0ilN28+FC8H+hkqMgB5Pdl7AcotQOn3JhiZMqLel2H0P390p8FEJKQNnrvXk3BemeKKQ==} - engines: {node: '>=20.9.0'} - - '@clerk/localizations@4.2.4': - resolution: {integrity: sha512-yDraD7BEcSFTvpoed8MWzSO+JrxwtS1pydM2uvm1nhnDz4gZNzhSt7gGs+mGIIjWeS8PQGMR0cq8DfvHUxCwwg==} - engines: {node: '>=20.9.0'} - - '@clerk/nextjs@7.0.7': - resolution: {integrity: sha512-Iqg4q0ns1LZZrAdC66r/QUFMY+Rs3HAJcAb/IR0uFBj7ZAZusxdVKMmNkZP9UP6sk3OOorCsJTdE0rTMoXD2YQ==} - engines: {node: '>=20.9.0'} - peerDependencies: - next: ^15.2.8 || ^15.3.8 || ^15.4.10 || ^15.5.9 || ^15.6.0-0 || ^16.0.10 || ^16.1.0-0 - react: ^18.0.0 || ~19.0.3 || ~19.1.4 || ~19.2.3 || ~19.3.0-0 - react-dom: ^18.0.0 || ~19.0.3 || ~19.1.4 || ~19.2.3 || ~19.3.0-0 - - '@clerk/react@6.1.3': - resolution: {integrity: sha512-9t5C8eM5cTmOmpBO5nb8FDA40biQqeQLUW+cVwAE0t5hnGRwiC6mSv83vqHg+9qQBqtliR013BGVjpCz53gVCA==} - engines: {node: '>=20.9.0'} - peerDependencies: - react: ^18.0.0 || ~19.0.3 || ~19.1.4 || ~19.2.3 || ~19.3.0-0 - react-dom: ^18.0.0 || ~19.0.3 || ~19.1.4 || ~19.2.3 || ~19.3.0-0 - - '@clerk/shared@4.3.2': - resolution: {integrity: sha512-tYYzdY4Fxb02TO4RHoLRFzEjXJn0iFDfoKhWtGyqf2AaIgkprTksunQtX0hnVssHMr3XD/E2S00Vrb+PzX3jCQ==} - engines: {node: '>=20.9.0'} - peerDependencies: - react: ^18.0.0 || ~19.0.3 || ~19.1.4 || ~19.2.3 || ~19.3.0-0 - react-dom: ^18.0.0 || ~19.0.3 || ~19.1.4 || ~19.2.3 || ~19.3.0-0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - - '@clerk/ui@1.2.4': - resolution: {integrity: sha512-xksDqDjmuks47qtkqUMVnslXS2yfzHZ8AscmPHnlvVb9lFFWz7fsXjmw5j72UCVO5AQenylRhB9pxp0tmHtrRw==} - engines: {node: '>=20.9.0'} - peerDependencies: - react: ^18.0.0 || ~19.0.3 || ~19.1.4 || ~19.2.3 || ~19.3.0-0 - react-dom: ^18.0.0 || ~19.0.3 || ~19.1.4 || ~19.2.3 || ~19.3.0-0 - '@date-fns/tz@1.4.1': resolution: {integrity: sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA==} @@ -455,50 +410,6 @@ packages: '@emnapi/wasi-threads@1.2.0': resolution: {integrity: sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==} - '@emotion/babel-plugin@11.13.5': - resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} - - '@emotion/cache@11.11.0': - resolution: {integrity: sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==} - - '@emotion/hash@0.9.2': - resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} - - '@emotion/memoize@0.8.1': - resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} - - '@emotion/memoize@0.9.0': - resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} - - '@emotion/react@11.11.1': - resolution: {integrity: sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==} - peerDependencies: - '@types/react': '*' - react: '>=16.8.0' - peerDependenciesMeta: - '@types/react': - optional: true - - '@emotion/serialize@1.3.3': - resolution: {integrity: sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==} - - '@emotion/sheet@1.4.0': - resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==} - - '@emotion/unitless@0.10.0': - resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==} - - '@emotion/use-insertion-effect-with-fallbacks@1.2.0': - resolution: {integrity: sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==} - peerDependencies: - react: '>=16.8.0' - - '@emotion/utils@1.4.2': - resolution: {integrity: sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==} - - '@emotion/weak-memoize@0.3.1': - resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==} - '@eslint-community/eslint-utils@4.9.1': resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -541,6 +452,216 @@ packages: resolution: {integrity: sha512-sDBWI3yLy8EcDzgobvJTWq1MJYzAkQdpjXuPukga9wXonhpMRvd1Izuo2Qgwey2OiEoRIBr35RMU9HJRoOHzpw==} engines: {node: ^20.19.0 || ^22.13.0 || ^23.5.0 || >=24.0.0, npm: '>=10'} + '@firebase/ai@1.4.1': + resolution: {integrity: sha512-bcusQfA/tHjUjBTnMx6jdoPMpDl3r8K15Z+snHz9wq0Foox0F/V+kNLXucEOHoTL2hTc9l+onZCyBJs2QoIC3g==} + engines: {node: '>=18.0.0'} + peerDependencies: + '@firebase/app': 0.x + '@firebase/app-types': 0.x + + '@firebase/analytics-compat@0.2.23': + resolution: {integrity: sha512-3AdO10RN18G5AzREPoFgYhW6vWXr3u+OYQv6pl3CX6Fky8QRk0AHurZlY3Q1xkXO0TDxIsdhO3y65HF7PBOJDw==} + peerDependencies: + '@firebase/app-compat': 0.x + + '@firebase/analytics-types@0.8.3': + resolution: {integrity: sha512-VrIp/d8iq2g501qO46uGz3hjbDb8xzYMrbu8Tp0ovzIzrvJZ2fvmj649gTjge/b7cCCcjT0H37g1gVtlNhnkbg==} + + '@firebase/analytics@0.10.17': + resolution: {integrity: sha512-n5vfBbvzduMou/2cqsnKrIes4auaBjdhg8QNA2ZQZ59QgtO2QiwBaXQZQE4O4sgB0Ds1tvLgUUkY+pwzu6/xEg==} + peerDependencies: + '@firebase/app': 0.x + + '@firebase/app-check-compat@0.3.26': + resolution: {integrity: sha512-PkX+XJMLDea6nmnopzFKlr+s2LMQGqdyT2DHdbx1v1dPSqOol2YzgpgymmhC67vitXVpNvS3m/AiWQWWhhRRPQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + '@firebase/app-compat': 0.x + + '@firebase/app-check-interop-types@0.3.3': + resolution: {integrity: sha512-gAlxfPLT2j8bTI/qfe3ahl2I2YcBQ8cFIBdhAQA4I2f3TndcO+22YizyGYuttLHPQEpWkhmpFW60VCFEPg4g5A==} + + '@firebase/app-check-types@0.5.3': + resolution: {integrity: sha512-hyl5rKSj0QmwPdsAxrI5x1otDlByQ7bvNvVt8G/XPO2CSwE++rmSVf3VEhaeOR4J8ZFaF0Z0NDSmLejPweZ3ng==} + + '@firebase/app-check@0.10.1': + resolution: {integrity: sha512-MgNdlms9Qb0oSny87pwpjKush9qUwCJhfmTJHDfrcKo4neLGiSeVE4qJkzP7EQTIUFKp84pbTxobSAXkiuQVYQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + '@firebase/app': 0.x + + '@firebase/app-compat@0.4.2': + resolution: {integrity: sha512-LssbyKHlwLeiV8GBATyOyjmHcMpX/tFjzRUCS1jnwGAew1VsBB4fJowyS5Ud5LdFbYpJeS+IQoC+RQxpK7eH3Q==} + engines: {node: '>=18.0.0'} + + '@firebase/app-types@0.9.3': + resolution: {integrity: sha512-kRVpIl4vVGJ4baogMDINbyrIOtOxqhkZQg4jTq3l8Lw6WSk0xfpEYzezFu+Kl4ve4fbPl79dvwRtaFqAC/ucCw==} + + '@firebase/app@0.13.2': + resolution: {integrity: sha512-jwtMmJa1BXXDCiDx1vC6SFN/+HfYG53UkfJa6qeN5ogvOunzbFDO3wISZy5n9xgYFUrEP6M7e8EG++riHNTv9w==} + engines: {node: '>=18.0.0'} + + '@firebase/auth-compat@0.5.28': + resolution: {integrity: sha512-HpMSo/cc6Y8IX7bkRIaPPqT//Jt83iWy5rmDWeThXQCAImstkdNo3giFLORJwrZw2ptiGkOij64EH1ztNJzc7Q==} + engines: {node: '>=18.0.0'} + peerDependencies: + '@firebase/app-compat': 0.x + + '@firebase/auth-interop-types@0.2.4': + resolution: {integrity: sha512-JPgcXKCuO+CWqGDnigBtvo09HeBs5u/Ktc2GaFj2m01hLarbxthLNm7Fk8iOP1aqAtXV+fnnGj7U28xmk7IwVA==} + + '@firebase/auth-types@0.13.0': + resolution: {integrity: sha512-S/PuIjni0AQRLF+l9ck0YpsMOdE8GO2KU6ubmBB7P+7TJUCQDa3R1dlgYm9UzGbbePMZsp0xzB93f2b/CgxMOg==} + peerDependencies: + '@firebase/app-types': 0.x + '@firebase/util': 1.x + + '@firebase/auth@1.10.8': + resolution: {integrity: sha512-GpuTz5ap8zumr/ocnPY57ZanX02COsXloY6Y/2LYPAuXYiaJRf6BAGDEdRq1BMjP93kqQnKNuKZUTMZbQ8MNYA==} + engines: {node: '>=18.0.0'} + peerDependencies: + '@firebase/app': 0.x + '@react-native-async-storage/async-storage': ^1.18.1 + peerDependenciesMeta: + '@react-native-async-storage/async-storage': + optional: true + + '@firebase/component@0.6.18': + resolution: {integrity: sha512-n28kPCkE2dL2U28fSxZJjzPPVpKsQminJ6NrzcKXAI0E/lYC8YhfwpyllScqVEvAI3J2QgJZWYgrX+1qGI+SQQ==} + engines: {node: '>=18.0.0'} + + '@firebase/data-connect@0.3.10': + resolution: {integrity: sha512-VMVk7zxIkgwlVQIWHOKFahmleIjiVFwFOjmakXPd/LDgaB/5vzwsB5DWIYo+3KhGxWpidQlR8geCIn39YflJIQ==} + peerDependencies: + '@firebase/app': 0.x + + '@firebase/database-compat@2.0.11': + resolution: {integrity: sha512-itEsHARSsYS95+udF/TtIzNeQ0Uhx4uIna0sk4E0wQJBUnLc/G1X6D7oRljoOuwwCezRLGvWBRyNrugv/esOEw==} + engines: {node: '>=18.0.0'} + + '@firebase/database-types@1.0.15': + resolution: {integrity: sha512-XWHJ0VUJ0k2E9HDMlKxlgy/ZuTa9EvHCGLjaKSUvrQnwhgZuRU5N3yX6SZ+ftf2hTzZmfRkv+b3QRvGg40bKNw==} + + '@firebase/database@1.0.20': + resolution: {integrity: sha512-H9Rpj1pQ1yc9+4HQOotFGLxqAXwOzCHsRSRjcQFNOr8lhUt6LeYjf0NSRL04sc4X0dWe8DsCvYKxMYvFG/iOJw==} + engines: {node: '>=18.0.0'} + + '@firebase/firestore-compat@0.3.53': + resolution: {integrity: sha512-qI3yZL8ljwAYWrTousWYbemay2YZa+udLWugjdjju2KODWtLG94DfO4NALJgPLv8CVGcDHNFXoyQexdRA0Cz8Q==} + engines: {node: '>=18.0.0'} + peerDependencies: + '@firebase/app-compat': 0.x + + '@firebase/firestore-types@3.0.3': + resolution: {integrity: sha512-hD2jGdiWRxB/eZWF89xcK9gF8wvENDJkzpVFb4aGkzfEaKxVRD1kjz1t1Wj8VZEp2LCB53Yx1zD8mrhQu87R6Q==} + peerDependencies: + '@firebase/app-types': 0.x + '@firebase/util': 1.x + + '@firebase/firestore@4.8.0': + resolution: {integrity: sha512-QSRk+Q1/CaabKyqn3C32KSFiOdZpSqI9rpLK5BHPcooElumOBooPFa6YkDdiT+/KhJtel36LdAacha9BptMj2A==} + engines: {node: '>=18.0.0'} + peerDependencies: + '@firebase/app': 0.x + + '@firebase/functions-compat@0.3.26': + resolution: {integrity: sha512-A798/6ff5LcG2LTWqaGazbFYnjBW8zc65YfID/en83ALmkhu2b0G8ykvQnLtakbV9ajrMYPn7Yc/XcYsZIUsjA==} + engines: {node: '>=18.0.0'} + peerDependencies: + '@firebase/app-compat': 0.x + + '@firebase/functions-types@0.6.3': + resolution: {integrity: sha512-EZoDKQLUHFKNx6VLipQwrSMh01A1SaL3Wg6Hpi//x6/fJ6Ee4hrAeswK99I5Ht8roiniKHw4iO0B1Oxj5I4plg==} + + '@firebase/functions@0.12.9': + resolution: {integrity: sha512-FG95w6vjbUXN84Ehezc2SDjGmGq225UYbHrb/ptkRT7OTuCiQRErOQuyt1jI1tvcDekdNog+anIObihNFz79Lg==} + engines: {node: '>=18.0.0'} + peerDependencies: + '@firebase/app': 0.x + + '@firebase/installations-compat@0.2.18': + resolution: {integrity: sha512-aLFohRpJO5kKBL/XYL4tN+GdwEB/Q6Vo9eZOM/6Kic7asSUgmSfGPpGUZO1OAaSRGwF4Lqnvi1f/f9VZnKzChw==} + peerDependencies: + '@firebase/app-compat': 0.x + + '@firebase/installations-types@0.5.3': + resolution: {integrity: sha512-2FJI7gkLqIE0iYsNQ1P751lO3hER+Umykel+TkLwHj6plzWVxqvfclPUZhcKFVQObqloEBTmpi2Ozn7EkCABAA==} + peerDependencies: + '@firebase/app-types': 0.x + + '@firebase/installations@0.6.18': + resolution: {integrity: sha512-NQ86uGAcvO8nBRwVltRL9QQ4Reidc/3whdAasgeWCPIcrhOKDuNpAALa6eCVryLnK14ua2DqekCOX5uC9XbU/A==} + peerDependencies: + '@firebase/app': 0.x + + '@firebase/logger@0.4.4': + resolution: {integrity: sha512-mH0PEh1zoXGnaR8gD1DeGeNZtWFKbnz9hDO91dIml3iou1gpOnLqXQ2dJfB71dj6dpmUjcQ6phY3ZZJbjErr9g==} + engines: {node: '>=18.0.0'} + + '@firebase/messaging-compat@0.2.22': + resolution: {integrity: sha512-5ZHtRnj6YO6f/QPa/KU6gryjmX4Kg33Kn4gRpNU6M1K47Gm8kcQwPkX7erRUYEH1mIWptfvjvXMHWoZaWjkU7A==} + peerDependencies: + '@firebase/app-compat': 0.x + + '@firebase/messaging-interop-types@0.2.3': + resolution: {integrity: sha512-xfzFaJpzcmtDjycpDeCUj0Ge10ATFi/VHVIvEEjDNc3hodVBQADZ7BWQU7CuFpjSHE+eLuBI13z5F/9xOoGX8Q==} + + '@firebase/messaging@0.12.22': + resolution: {integrity: sha512-GJcrPLc+Hu7nk+XQ70Okt3M1u1eRr2ZvpMbzbc54oTPJZySHcX9ccZGVFcsZbSZ6o1uqumm8Oc7OFkD3Rn1/og==} + peerDependencies: + '@firebase/app': 0.x + + '@firebase/performance-compat@0.2.20': + resolution: {integrity: sha512-XkFK5NmOKCBuqOKWeRgBUFZZGz9SzdTZp4OqeUg+5nyjapTiZ4XoiiUL8z7mB2q+63rPmBl7msv682J3rcDXIQ==} + peerDependencies: + '@firebase/app-compat': 0.x + + '@firebase/performance-types@0.2.3': + resolution: {integrity: sha512-IgkyTz6QZVPAq8GSkLYJvwSLr3LS9+V6vNPQr0x4YozZJiLF5jYixj0amDtATf1X0EtYHqoPO48a9ija8GocxQ==} + + '@firebase/performance@0.7.7': + resolution: {integrity: sha512-JTlTQNZKAd4+Q5sodpw6CN+6NmwbY72av3Lb6wUKTsL7rb3cuBIhQSrslWbVz0SwK3x0ZNcqX24qtRbwKiv+6w==} + peerDependencies: + '@firebase/app': 0.x + + '@firebase/remote-config-compat@0.2.18': + resolution: {integrity: sha512-YiETpldhDy7zUrnS8e+3l7cNs0sL7+tVAxvVYU0lu7O+qLHbmdtAxmgY+wJqWdW2c9nDvBFec7QiF58pEUu0qQ==} + peerDependencies: + '@firebase/app-compat': 0.x + + '@firebase/remote-config-types@0.4.0': + resolution: {integrity: sha512-7p3mRE/ldCNYt8fmWMQ/MSGRmXYlJ15Rvs9Rk17t8p0WwZDbeK7eRmoI1tvCPaDzn9Oqh+yD6Lw+sGLsLg4kKg==} + + '@firebase/remote-config@0.6.5': + resolution: {integrity: sha512-fU0c8HY0vrVHwC+zQ/fpXSqHyDMuuuglV94VF6Yonhz8Fg2J+KOowPGANM0SZkLvVOYpTeWp3ZmM+F6NjwWLnw==} + peerDependencies: + '@firebase/app': 0.x + + '@firebase/storage-compat@0.3.24': + resolution: {integrity: sha512-XHn2tLniiP7BFKJaPZ0P8YQXKiVJX+bMyE2j2YWjYfaddqiJnROJYqSomwW6L3Y+gZAga35ONXUJQju6MB6SOQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + '@firebase/app-compat': 0.x + + '@firebase/storage-types@0.8.3': + resolution: {integrity: sha512-+Muk7g9uwngTpd8xn9OdF/D48uiQ7I1Fae7ULsWPuKoCH3HU7bfFPhxtJYzyhjdniowhuDpQcfPmuNRAqZEfvg==} + peerDependencies: + '@firebase/app-types': 0.x + '@firebase/util': 1.x + + '@firebase/storage@0.13.14': + resolution: {integrity: sha512-xTq5ixxORzx+bfqCpsh+o3fxOsGoDjC1nO0Mq2+KsOcny3l7beyBhP/y1u5T6mgsFQwI1j6oAkbT5cWdDBx87g==} + engines: {node: '>=18.0.0'} + peerDependencies: + '@firebase/app': 0.x + + '@firebase/util@1.12.1': + resolution: {integrity: sha512-zGlBn/9Dnya5ta9bX/fgEoNC3Cp8s6h+uYPYaDieZsFOAdHP/ExzQ/eaDgxD3GOROdPkLKpvKY0iIzr9adle0w==} + engines: {node: '>=18.0.0'} + + '@firebase/webchannel-wrapper@1.0.3': + resolution: {integrity: sha512-2xCRM9q9FlzGZCdgDMJwc0gyUkWFtkosy7Xxr6sFgQwn+wMNIWd7xIvYNauU1r64B5L5rsGKy/n9TKJ0aAFeqQ==} + '@floating-ui/core@1.7.5': resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==} @@ -553,17 +674,17 @@ packages: react: '>=16.8.0' react-dom: '>=16.8.0' - '@floating-ui/react@0.27.12': - resolution: {integrity: sha512-kKlWNrpIQxF1B/a2MZvE0/uyKby4960yjO91W7nVyNKmmfNi62xU9HCjL1M1eWzx/LFj/VPSwJVbwQk9Pq/68A==} - peerDependencies: - react: '>=17.0.0' - react-dom: '>=17.0.0' - '@floating-ui/utils@0.2.11': resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} - '@formkit/auto-animate@0.8.4': - resolution: {integrity: sha512-DHHC01EJ1p70Q0z/ZFRBIY8NDnmfKccQoyoM84Tgb6omLMat6jivCdf272Y8k3nf4Lzdin/Y4R9q8uFtU0GbnA==} + '@grpc/grpc-js@1.9.15': + resolution: {integrity: sha512-nqE7Hc0AzI+euzUwDAy0aY5hCp10r734gMGRdU+qOPX0XSceI2ULrcXB5U2xSc5VkWwalCj4M7GzCAygZl2KoQ==} + engines: {node: ^8.13.0 || >=10.10.0} + + '@grpc/proto-loader@0.7.15': + resolution: {integrity: sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==} + engines: {node: '>=6'} + hasBin: true '@hookform/resolvers@5.2.2': resolution: {integrity: sha512-A/IxlMLShx3KjV/HeTcTfaMxdwy690+L/ZADoeaTltLx+CVuzkeVIPuybK3jrRfw7YZnmdKsVVHAlEPIAEUNlA==} @@ -863,14 +984,6 @@ packages: cpu: [x64] os: [win32] - '@noble/curves@1.9.7': - resolution: {integrity: sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==} - engines: {node: ^14.21.3 || >=16} - - '@noble/hashes@1.8.0': - resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} - engines: {node: ^14.21.3 || >=16} - '@node-rs/argon2-android-arm-eabi@1.7.0': resolution: {integrity: sha512-udDqkr5P9E+wYX1SZwAVPdyfYvaF4ry9Tm+R9LkfSHbzWH0uhU6zjIwNRp7m+n4gx691rk+lqqDAIP8RLKwbhg==} engines: {node: '>= 10'} @@ -1069,6 +1182,36 @@ packages: resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} engines: {node: '>=12.4.0'} + '@protobufjs/aspromise@1.1.2': + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + + '@protobufjs/base64@1.1.2': + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + + '@protobufjs/codegen@2.0.4': + resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + + '@protobufjs/eventemitter@1.1.0': + resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + + '@protobufjs/fetch@1.1.0': + resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + + '@protobufjs/float@1.0.2': + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + + '@protobufjs/inquire@1.1.0': + resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + + '@protobufjs/path@1.1.2': + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + + '@protobufjs/pool@1.1.0': + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + + '@protobufjs/utf8@1.1.0': + resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + '@radix-ui/number@1.1.1': resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} @@ -1832,131 +1975,6 @@ packages: '@sinonjs/fake-timers@10.3.0': resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} - '@solana-mobile/mobile-wallet-adapter-protocol-web3js@2.2.6': - resolution: {integrity: sha512-akbJgxlYR/BbcNPNQW5bwHv4Bf85iMu+YsUy3KJgfQympQzOQaK9/24monwCMZUG2IfQ3lBL4pi18Z1doq2BnA==} - peerDependencies: - '@solana/web3.js': ^1.58.0 - - '@solana-mobile/mobile-wallet-adapter-protocol@2.2.6': - resolution: {integrity: sha512-4mktUZRXdOcNHaMF6MrxN1yZpV32q616IpqsJLq/eI9Agz/+h31v5mzejIjtXCeorI7G0awfmI4ZtGIs+N/iYQ==} - peerDependencies: - react-native: '>0.74' - - '@solana-mobile/wallet-adapter-mobile@2.2.6': - resolution: {integrity: sha512-6m+h0pasnafcFfeJma+hhWKE6QSPFyIhR5QUwTAy495Y3M/aCNzmcKWRgQ6NrrfFcU7Vzuky19P13EOv2OBP2Q==} - peerDependencies: - '@solana/web3.js': ^1.98.0 - react-native: '>0.74' - - '@solana-mobile/wallet-standard-mobile@0.5.0': - resolution: {integrity: sha512-4eTrdw6hxMIBohJD+tGeNGv1MaXbyPHCtFxJ1Ru4olphiTrD6u6PvAYBL2WebQAMSWzZzDN3fCCTzludpYmwyg==} - - '@solana/buffer-layout@4.0.1': - resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} - engines: {node: '>=5.10'} - - '@solana/codecs-core@2.3.0': - resolution: {integrity: sha512-oG+VZzN6YhBHIoSKgS5ESM9VIGzhWjEHEGNPSibiDTxFhsFWxNaz8LbMDPjBUE69r9wmdGLkrQ+wVPbnJcZPvw==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - - '@solana/codecs-core@4.0.0': - resolution: {integrity: sha512-28kNUsyIlhU3MO3/7ZLDqeJf2YAm32B4tnTjl5A9HrbBqsTZ+upT/RzxZGP1MMm7jnPuIKCMwmTpsyqyR6IUpw==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - - '@solana/codecs-numbers@2.3.0': - resolution: {integrity: sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - - '@solana/codecs-numbers@4.0.0': - resolution: {integrity: sha512-z9zpjtcwzqT9rbkKVZpkWB5/0V7+6YRKs6BccHkGJlaDx8Pe/+XOvPi2rEdXPqrPd9QWb5Xp1iBfcgaDMyiOiA==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - - '@solana/codecs-strings@4.0.0': - resolution: {integrity: sha512-XvyD+sQ1zyA0amfxbpoFZsucLoe+yASQtDiLUGMDg5TZ82IHE3B7n82jE8d8cTAqi0HgqQiwU13snPhvg1O0Ow==} - engines: {node: '>=20.18.0'} - peerDependencies: - fastestsmallesttextencoderdecoder: ^1.0.22 - typescript: '>=5.3.3' - - '@solana/errors@2.3.0': - resolution: {integrity: sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ==} - engines: {node: '>=20.18.0'} - hasBin: true - peerDependencies: - typescript: '>=5.3.3' - - '@solana/errors@4.0.0': - resolution: {integrity: sha512-3YEtvcMvtcnTl4HahqLt0VnaGVf7vVWOnt6/uPky5e0qV6BlxDSbGkbBzttNjxLXHognV0AQi3pjvrtfUnZmbg==} - engines: {node: '>=20.18.0'} - hasBin: true - peerDependencies: - typescript: '>=5.3.3' - - '@solana/wallet-adapter-base@0.9.27': - resolution: {integrity: sha512-kXjeNfNFVs/NE9GPmysBRKQ/nf+foSaq3kfVSeMcO/iVgigyRmB551OjU3WyAolLG/1jeEfKLqF9fKwMCRkUqg==} - engines: {node: '>=20'} - peerDependencies: - '@solana/web3.js': ^1.98.0 - - '@solana/wallet-adapter-react@0.15.39': - resolution: {integrity: sha512-WXtlo88ith5m22qB+qiGw301/Zb9r5pYr4QdXWmlXnRNqwST5MGmJWhG+/RVrzc+OG7kSb3z1gkVNv+2X/Y0Gg==} - engines: {node: '>=20'} - peerDependencies: - '@solana/web3.js': ^1.98.0 - react: '*' - - '@solana/wallet-standard-chains@1.1.1': - resolution: {integrity: sha512-Us3TgL4eMVoVWhuC4UrePlYnpWN+lwteCBlhZDUhFZBJ5UMGh94mYPXno3Ho7+iHPYRtuCi/ePvPcYBqCGuBOw==} - engines: {node: '>=16'} - - '@solana/wallet-standard-core@1.1.2': - resolution: {integrity: sha512-FaSmnVsIHkHhYlH8XX0Y4TYS+ebM+scW7ZeDkdXo3GiKge61Z34MfBPinZSUMV08hCtzxxqH2ydeU9+q/KDrLA==} - engines: {node: '>=16'} - - '@solana/wallet-standard-features@1.3.0': - resolution: {integrity: sha512-ZhpZtD+4VArf6RPitsVExvgkF+nGghd1rzPjd97GmBximpnt1rsUxMOEyoIEuH3XBxPyNB6Us7ha7RHWQR+abg==} - engines: {node: '>=16'} - - '@solana/wallet-standard-util@1.1.2': - resolution: {integrity: sha512-rUXFNP4OY81Ddq7qOjQV4Kmkozx4wjYAxljvyrqPx8Ycz0FYChG/hQVWqvgpK3sPsEaO/7ABG1NOACsyAKWNOA==} - engines: {node: '>=16'} - - '@solana/wallet-standard-wallet-adapter-base@1.1.4': - resolution: {integrity: sha512-Q2Rie9YaidyFA4UxcUIxUsvynW+/gE2noj/Wmk+IOwDwlVrJUAXCvFaCNsPDSyKoiYEKxkSnlG13OA1v08G4iw==} - engines: {node: '>=16'} - peerDependencies: - '@solana/web3.js': ^1.98.0 - bs58: ^6.0.0 - - '@solana/wallet-standard-wallet-adapter-react@1.1.4': - resolution: {integrity: sha512-xa4KVmPgB7bTiWo4U7lg0N6dVUtt2I2WhEnKlIv0jdihNvtyhOjCKMjucWet6KAVhir6I/mSWrJk1U9SvVvhCg==} - engines: {node: '>=16'} - peerDependencies: - '@solana/wallet-adapter-base': '*' - react: '*' - - '@solana/wallet-standard-wallet-adapter@1.1.4': - resolution: {integrity: sha512-YSBrxwov4irg2hx9gcmM4VTew3ofNnkqsXQ42JwcS6ykF1P1ecVY8JCbrv75Nwe6UodnqeoZRbN7n/p3awtjNQ==} - engines: {node: '>=16'} - - '@solana/wallet-standard@1.1.4': - resolution: {integrity: sha512-NF+MI5tOxyvfTU4A+O5idh/gJFmjm52bMwsPpFGRSL79GECSN0XLmpVOO/jqTKJgac2uIeYDpQw/eMaQuWuUXw==} - engines: {node: '>=16'} - - '@solana/web3.js@1.98.4': - resolution: {integrity: sha512-vv9lfnvjUsRiq//+j5pBdXig0IQdtzA0BRZ3bXEP4KaIyF1CcaydWqgyzQgfZMNIsWNWmG+AUHwPy4AHOD6gpw==} - - '@stablelib/base64@1.0.1': - resolution: {integrity: sha512-1bnPQqSxSuc3Ii6MhBysoWCg58j97aUjuCSZrGSmDxNqtytIi0k8utUenAwTZN4V5mXXYGsVUI9zeBqy+jBOSQ==} - '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} @@ -1988,9 +2006,6 @@ packages: '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} - '@swc/helpers@0.5.17': - resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} - '@tabby_ai/hijri-converter@1.0.5': resolution: {integrity: sha512-r5bClKrcIusDoo049dSL8CawnHR6mRdDwhlQuIgZRNty68q0x8k3Lf1BtPAMxRf/GgnHBnIO4ujd3+GQdLWzxQ==} engines: {node: '>=16.0.0'} @@ -2087,9 +2102,6 @@ packages: '@tailwindcss/postcss@4.2.2': resolution: {integrity: sha512-n4goKQbW8RVXIbNKRB/45LzyUqN451deQK0nzIeauVEqjlI49slUlgKYJM2QyUzap/PcpnS7kzSUmPb1sCRvYQ==} - '@tanstack/query-core@5.90.16': - resolution: {integrity: sha512-MvtWckSVufs/ja463/K4PyJeqT+HMlJWtw6PrCpywznd2NSgO3m4KwO9RqbFqGg6iDE8vVMFWMeQI4Io3eEYww==} - '@tweenjs/tween.js@23.1.3': resolution: {integrity: sha512-vJmvvwFxYuGnF2axRtPYocag6Clbb5YS7kLL+SO/TeVFzHqDIWrNKYtcsPMibjDx9O+bu+psAy9NKfWklassUA==} @@ -2111,9 +2123,6 @@ packages: '@types/babel__traverse@7.28.0': resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} - '@types/connect@3.4.38': - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} - '@types/d3-array@3.2.2': resolution: {integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==} @@ -2165,18 +2174,12 @@ packages: '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - '@types/node@12.20.55': - resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - '@types/node@22.19.15': resolution: {integrity: sha512-F0R/h2+dsy5wJAUe3tAU6oqa2qbWY5TpNfL/RGmo1y38hiyO1w3x2jPtt76wmuaJI4DQnOBu21cNXQ2STIUUWg==} '@types/offscreencanvas@2019.7.3': resolution: {integrity: sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A==} - '@types/parse-json@4.0.2': - resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - '@types/prop-types@15.7.15': resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} @@ -2208,18 +2211,9 @@ packages: '@types/use-sync-external-store@0.0.6': resolution: {integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==} - '@types/uuid@10.0.0': - resolution: {integrity: sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==} - '@types/webxr@0.5.24': resolution: {integrity: sha512-h8fgEd/DpoS9CBrjEQXR+dIDraopAEfu4wYVNY2tEPwk60stPWhvZMf4Foo5FakuQ7HFZoa8WceaWFervK2Ovg==} - '@types/ws@7.4.7': - resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} - - '@types/ws@8.18.1': - resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} - '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} @@ -2396,31 +2390,6 @@ packages: peerDependencies: react: '>= 16.8.0' - '@wallet-standard/app@1.1.0': - resolution: {integrity: sha512-3CijvrO9utx598kjr45hTbbeeykQrQfKmSnxeWOgU25TOEpvcipD/bYDQWIqUv1Oc6KK4YStokSMu/FBNecGUQ==} - engines: {node: '>=16'} - - '@wallet-standard/base@1.1.0': - resolution: {integrity: sha512-DJDQhjKmSNVLKWItoKThJS+CsJQjR9AOBOirBVT1F9YpRyC9oYHE+ZnSf8y8bxUphtKqdQMPVQ2mHohYdRvDVQ==} - engines: {node: '>=16'} - - '@wallet-standard/core@1.1.1': - resolution: {integrity: sha512-5Xmjc6+Oe0hcPfVc5n8F77NVLwx1JVAoCVgQpLyv/43/bhtIif+Gx3WUrDlaSDoM8i2kA2xd6YoFbHCxs+e0zA==} - engines: {node: '>=16'} - - '@wallet-standard/errors@0.1.1': - resolution: {integrity: sha512-V8Ju1Wvol8i/VDyQOHhjhxmMVwmKiwyxUZBnHhtiPZJTWY0U/Shb2iEWyGngYEbAkp2sGTmEeNX1tVyGR7PqNw==} - engines: {node: '>=16'} - hasBin: true - - '@wallet-standard/features@1.1.0': - resolution: {integrity: sha512-hiEivWNztx73s+7iLxsuD1sOJ28xtRix58W7Xnz4XzzA/pF0+aicnWgjOdA10doVDEDZdUuZCIIqG96SFNlDUg==} - engines: {node: '>=16'} - - '@wallet-standard/wallet@1.1.0': - resolution: {integrity: sha512-Gt8TnSlDZpAl+RWOOAB/kuvC7RpcdWAlFbHNoi4gsXsfaWa1QCT6LBcfIYTPdOZC9OVZUDwqGuGAcqZejDmHjg==} - engines: {node: '>=16'} - '@webgpu/types@0.1.69': resolution: {integrity: sha512-RPmm6kgRbI8e98zSD3RVACvnuktIja5+yLgDAkTmxLr90BEwdTXRQWNLF3ETTTyH/8mKhznZuN5AveXYFEsMGQ==} @@ -2449,10 +2418,6 @@ packages: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} - agentkeepalive@4.6.0: - resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} - engines: {node: '>= 8.0.0'} - ajv@6.14.0: resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} @@ -2563,10 +2528,6 @@ packages: resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - babel-plugin-macros@3.1.0: - resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} - engines: {node: '>=10', npm: '>=6'} - babel-plugin-syntax-hermes-parser@0.32.0: resolution: {integrity: sha512-m5HthL++AbyeEA2FcdwOLfVFvWYECOBObLHNqdR8ceY4TsEdn4LdX2oTvbB2QJSSElE2AWA/b2MXZ/PF/CqLZg==} @@ -2588,12 +2549,6 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} - base-x@3.0.11: - resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==} - - base-x@5.0.1: - resolution: {integrity: sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg==} - base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -2605,12 +2560,6 @@ packages: bidi-js@1.0.3: resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} - bn.js@5.2.3: - resolution: {integrity: sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==} - - borsh@0.7.0: - resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} - brace-expansion@1.1.13: resolution: {integrity: sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==} @@ -2627,12 +2576,6 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - bs58@4.0.1: - resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} - - bs58@6.0.0: - resolution: {integrity: sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==} - bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} @@ -2683,10 +2626,6 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - chalk@5.6.2: - resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - chrome-launcher@0.15.2: resolution: {integrity: sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==} engines: {node: '>=12.13.0'} @@ -2708,9 +2647,6 @@ packages: client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} - cliui@6.0.0: - resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} - cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -2740,18 +2676,6 @@ packages: resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} - commander@13.1.0: - resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} - engines: {node: '>=18'} - - commander@14.0.1: - resolution: {integrity: sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==} - engines: {node: '>=20'} - - commander@14.0.3: - resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} - engines: {node: '>=20'} - commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -2762,22 +2686,9 @@ packages: resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==} engines: {node: '>= 0.10.0'} - convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - copy-to-clipboard@3.3.3: - resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} - - core-js@3.47.0: - resolution: {integrity: sha512-c3Q2VVkGAUyupsjRnaNX6u8Dq2vAdzm9iuPj5FW0fRxzlxgq9Q39MDq10IvmQSpLgHQNyQzQmOo6bgGHmH3NNg==} - - cosmiconfig@7.1.0: - resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} - engines: {node: '>=10'} - cross-env@7.0.3: resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} @@ -2787,9 +2698,6 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} - csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} @@ -2883,10 +2791,6 @@ packages: supports-color: optional: true - decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - decimal.js-light@2.5.1: resolution: {integrity: sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==} @@ -2901,10 +2805,6 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} - delay@5.0.0: - resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} - engines: {node: '>=10'} - delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -2913,10 +2813,6 @@ packages: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} - dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - destroy@1.2.0: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -2931,9 +2827,6 @@ packages: detect-node-es@1.1.0: resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} - dijkstrajs@1.0.3: - resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==} - doctrine@2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} @@ -2982,9 +2875,6 @@ packages: resolution: {integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==} engines: {node: '>=10.13.0'} - error-ex@1.3.4: - resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} - error-stack-parser@2.1.4: resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} @@ -3023,12 +2913,6 @@ packages: es-toolkit@1.45.1: resolution: {integrity: sha512-/jhoOj/Fx+A+IIyDNOvO3TItGmlMKhtX8ISAHKE90c4b/k1tqaqEZ+uUqfpU8DMnW5cgNJv606zS55jGvza0Xw==} - es6-promise@4.2.8: - resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} - - es6-promisify@5.0.0: - resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} - escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -3189,10 +3073,6 @@ packages: exponential-backoff@3.1.3: resolution: {integrity: sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==} - eyes@0.1.8: - resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} - engines: {node: '> 0.1.90'} - fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -3206,18 +3086,13 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fast-sha256@1.3.0: - resolution: {integrity: sha512-n11RGP/lrWEFI/bWdygLxhI+pVeo1ZYIVwvvPkW7azl/rOy+F3HYRZ2K5zeE9mmkhQppyv9sQFx0JM9UabnpPQ==} - - fast-stable-stringify@1.0.0: - resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} - - fastestsmallesttextencoderdecoder@1.0.22: - resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} - fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} + faye-websocket@0.11.4: + resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} + engines: {node: '>=0.8.0'} + fb-dotslash@0.5.8: resolution: {integrity: sha512-XHYLKk9J4BupDxi9bSEhkfss0m+Vr9ChTrjhf9l2iw3jB5C7BnY4GVPoMcqbrTutsKJso6yj2nAB6BI/F2oZaA==} engines: {node: '>=20'} @@ -3253,9 +3128,6 @@ packages: resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} engines: {node: '>= 0.8'} - find-root@1.1.0: - resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} - find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -3264,6 +3136,9 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} + firebase@11.10.0: + resolution: {integrity: sha512-nKBXoDzF0DrXTBQJlZa+sbC5By99ysYU1D6PkMRYknm0nCW7rJly47q492Ht7Ndz5MeYSBuboKuhS1e6mFC03w==} + flat-cache@4.0.1: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} @@ -3377,9 +3252,6 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me @@ -3460,9 +3332,6 @@ packages: hls.js@1.6.15: resolution: {integrity: sha512-E3a5VwgXimGHwpRGV+WxRTKeSp2DW5DI5MWv34ulL3t5UNmyJWCQ1KmLEHbYzcfThfXG8amBL+fCYPneGHC4VA==} - hoist-non-react-statics@3.3.2: - resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} - hono@4.12.9: resolution: {integrity: sha512-wy3T8Zm2bsEvxKZM5w21VdHDDcwVS1yUFFY6i8UobSsKfFceT7TOwhbhfKsDyx7tYQlmRM5FLpIuYvNFyjctiA==} engines: {node: '>=16.9.0'} @@ -3471,12 +3340,15 @@ packages: resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} engines: {node: '>= 0.8'} + http-parser-js@0.5.10: + resolution: {integrity: sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==} + https-proxy-agent@7.0.6: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} - humanize-ms@1.2.1: - resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + idb@7.1.1: + resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -3539,9 +3411,6 @@ packages: resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} engines: {node: '>= 0.4'} - is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - is-async-function@2.1.1: resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} engines: {node: '>= 0.4'} @@ -3667,11 +3536,6 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - isomorphic-ws@4.0.1: - resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} - peerDependencies: - ws: '*' - istanbul-lib-coverage@3.2.2: resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} @@ -3689,11 +3553,6 @@ packages: peerDependencies: react: ^19.0.0 - jayson@4.3.0: - resolution: {integrity: sha512-AauzHcUcqs8OBnCHOkJY280VaTiCm57AbuO7lqzcw7JapGj50BisE3xhksye4zlTSR1+1tAz67wLTl8tEH1obQ==} - engines: {node: '>=8'} - hasBin: true - jest-environment-node@29.7.0: resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -3734,13 +3593,6 @@ packages: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true - js-base64@3.7.8: - resolution: {integrity: sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==} - - js-cookie@3.0.5: - resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==} - engines: {node: '>=14'} - js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -3763,18 +3615,12 @@ packages: json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - json-stringify-safe@5.0.1: - resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - json5@1.0.2: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} hasBin: true @@ -3913,9 +3759,6 @@ packages: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -3924,12 +3767,18 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} lodash.throttle@4.1.1: resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} + long@5.3.2: + resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} + loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true @@ -4152,15 +4001,6 @@ packages: resolution: {integrity: sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==} engines: {node: '>= 0.4'} - node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - node-gyp-build@4.8.4: resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} hasBin: true @@ -4265,10 +4105,6 @@ packages: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} - parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} @@ -4288,10 +4124,6 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -4307,10 +4139,6 @@ packages: resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} engines: {node: '>= 6'} - pngjs@5.0.0: - resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} - engines: {node: '>=10.13.0'} - possible-typed-array-names@1.1.0: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} @@ -4348,6 +4176,10 @@ packages: prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + protobufjs@7.5.4: + resolution: {integrity: sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==} + engines: {node: '>=12.0.0'} + proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} @@ -4355,16 +4187,6 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - qrcode.react@4.2.0: - resolution: {integrity: sha512-QpgqWi8rD9DsS9EP3z7BT+5lY5SFhsqGjpgW5DY/i3mK4M9DTBNz3ErMi8BWYEfI3L0d8GIbGmcdFAS1uIRGjA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - qrcode@1.5.4: - resolution: {integrity: sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==} - engines: {node: '>=10.13.0'} - hasBin: true - queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -4521,9 +4343,6 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} - require-main-filename@2.0.0: - resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} - reselect@5.1.1: resolution: {integrity: sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==} @@ -4557,9 +4376,6 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true - rpc-websockets@9.3.7: - resolution: {integrity: sha512-dQal1U0yKH2umW0DgqSecP4G1jNxyPUGY60uUMB8bLoXabC2aWT3Cag9hOhZXsH/52QJEcggxNNWhF+Fp48ykw==} - run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -4602,12 +4418,6 @@ packages: resolution: {integrity: sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==} engines: {node: '>= 0.8.0'} - server-only@0.0.1: - resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==} - - set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} @@ -4700,9 +4510,6 @@ packages: resolution: {integrity: sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==} engines: {node: '>=6'} - standardwebhooks@1.0.0: - resolution: {integrity: sha512-BbHGOQK9olHPMvQNHWul6MYlrRTAOKn03rOe4A8O3CLWhNf4YHBqq2HJKKC+sfqpxiBY52pNeesD6jIiLDz8jg==} - stats-gl@2.4.2: resolution: {integrity: sha512-g5O9B0hm9CvnM36+v7SFl39T7hmAlv541tU81ME8YeSb3i1CIP5/QdDeSB3A0la0bKNHpxpwxOVRo2wFTYEosQ==} peerDependencies: @@ -4720,19 +4527,10 @@ packages: resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} - std-env@3.10.0: - resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} - stop-iteration-iterator@1.1.0: resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} engines: {node: '>= 0.4'} - stream-chain@2.2.5: - resolution: {integrity: sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==} - - stream-json@1.9.1: - resolution: {integrity: sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==} - string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -4785,13 +4583,6 @@ packages: babel-plugin-macros: optional: true - stylis@4.2.0: - resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} - - superstruct@2.0.2: - resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==} - engines: {node: '>=14.0.0'} - supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -4809,9 +4600,6 @@ packages: peerDependencies: react: '>=17.0' - tabbable@6.4.0: - resolution: {integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==} - tailwind-merge@2.6.1: resolution: {integrity: sha512-Oo6tHdpZsGpkKG88HJ8RR1rg/RdnEkQEfMoEk2x1XRI3F1AxeU+ijRXpiVUF4UbLfcxxRGw6TbUINKYdWVsQTQ==} @@ -4834,9 +4622,6 @@ packages: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} - text-encoding-utf-8@1.0.2: - resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} - three-mesh-bvh@0.8.3: resolution: {integrity: sha512-4G5lBaF+g2auKX3P0yqx+MJC6oVt6sB5k+CchS6Ob0qvH0YIhuUk1eYr7ktsIpY+albCqE80/FVQGV190PmiAg==} peerDependencies: @@ -4867,16 +4652,10 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - toggle-selection@1.0.6: - resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} - toidentifier@1.0.1: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} - tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - troika-three-text@0.52.4: resolution: {integrity: sha512-V50EwcYGruV5rUZ9F4aNsrytGdKcXKALjEtQXIOBfhVoZU9VAqZNIoGQ3TMiooVqFAbR1w15T+f+8gkzoFzawg==} peerDependencies: @@ -5000,10 +4779,6 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - utf-8-validate@6.0.6: - resolution: {integrity: sha512-q3l3P9UtEEiAHcsgsqTgf9PPjctrDWoIXW3NpOHFdRDbLvu4DLIcxHangJ4RLrWkBcKjmcs/6NkerI8T/rE4LA==} - engines: {node: '>=6.14.2'} - utility-types@3.11.0: resolution: {integrity: sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==} engines: {node: '>= 4'} @@ -5012,14 +4787,6 @@ packages: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} - uuid@11.1.0: - resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} - hasBin: true - - uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - vaul@1.1.2: resolution: {integrity: sha512-ZFkClGpWyI2WUQjdLJ/BaGuV6AVQiJ3uELGk3OYtP+B6yCO7Cmn9vPFXVJkRaGkOJu3m8bQMgtyzNHixULceQA==} peerDependencies: @@ -5035,21 +4802,26 @@ packages: walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + web-vitals@4.2.4: + resolution: {integrity: sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw==} + webgl-constants@1.1.1: resolution: {integrity: sha512-LkBXKjU5r9vAW7Gcu3T5u+5cvSvh5WwINdr0C+9jpzVB41cjQAP5ePArDtk/WHYdVj0GefCgM73BA7FlIiNtdg==} webgl-sdf-generator@1.1.1: resolution: {integrity: sha512-9Z0JcMTFxeE+b2x1LJTdnaT8rT8aEp7MVxkNwoycNmJWwPdzoXzMh0BjJSh/AEFP+KPYZUli814h8bJZFIZ2jA==} - webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + websocket-driver@0.7.4: + resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} + engines: {node: '>=0.8.0'} + + websocket-extensions@0.1.4: + resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} + engines: {node: '>=0.8.0'} whatwg-fetch@3.6.20: resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} - whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - which-boxed-primitive@1.1.1: resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} engines: {node: '>= 0.4'} @@ -5062,9 +4834,6 @@ packages: resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} engines: {node: '>= 0.4'} - which-module@2.0.1: - resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} - which-typed-array@1.1.20: resolution: {integrity: sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==} engines: {node: '>= 0.4'} @@ -5078,10 +4847,6 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} - wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} - wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -5105,21 +4870,6 @@ packages: utf-8-validate: optional: true - ws@8.20.0: - resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - y18n@4.0.3: - resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} - y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -5127,27 +4877,15 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - yaml@1.10.3: - resolution: {integrity: sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==} - engines: {node: '>= 6'} - yaml@2.8.3: resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==} engines: {node: '>= 14.6'} hasBin: true - yargs-parser@18.1.3: - resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} - engines: {node: '>=6'} - yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} - yargs@15.4.1: - resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} - engines: {node: '>=8'} - yargs@17.7.2: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} @@ -5264,7 +5002,8 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-plugin-utils@7.28.6': {} + '@babel/helper-plugin-utils@7.28.6': + optional: true '@babel/helper-string-parser@7.27.1': {} @@ -5285,76 +5024,91 @@ snapshots: dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + optional: true '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + optional: true '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + optional: true '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + optional: true '@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + optional: true '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + optional: true '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + optional: true '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + optional: true '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + optional: true '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + optional: true '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + optional: true '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + optional: true '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + optional: true '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + optional: true '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + optional: true '@babel/runtime@7.29.2': {} @@ -5381,80 +5135,6 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 - '@clerk/backend@3.2.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@clerk/shared': 4.3.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - standardwebhooks: 1.0.0 - tslib: 2.8.1 - transitivePeerDependencies: - - react - - react-dom - - '@clerk/localizations@4.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@clerk/shared': 4.3.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - transitivePeerDependencies: - - react - - react-dom - - '@clerk/nextjs@7.0.7(next@16.2.1(@babel/core@7.29.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)': - dependencies: - '@clerk/backend': 3.2.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@clerk/react': 6.1.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@clerk/shared': 4.3.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - next: 16.2.1(@babel/core@7.29.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) - server-only: 0.0.1 - tslib: 2.8.1 - - '@clerk/react@6.1.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@clerk/shared': 4.3.2(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) - tslib: 2.8.1 - - '@clerk/shared@4.3.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@tanstack/query-core': 5.90.16 - dequal: 2.0.3 - glob-to-regexp: 0.4.1 - js-cookie: 3.0.5 - std-env: 3.10.0 - optionalDependencies: - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@clerk/ui@1.2.4(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))(@types/react@19.2.14)(bs58@6.0.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-dom@19.2.4(react@19.2.4))(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(react@19.2.4)(typescript@5.9.3)': - dependencies: - '@clerk/localizations': 4.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@clerk/shared': 4.3.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@emotion/cache': 11.11.0 - '@emotion/react': 11.11.1(@types/react@19.2.14)(react@19.2.4) - '@floating-ui/react': 0.27.12(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@formkit/auto-animate': 0.8.4 - '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)) - '@solana/wallet-adapter-react': 0.15.39(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))(bs58@6.0.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(react@19.2.4)(typescript@5.9.3) - '@solana/wallet-standard': 1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))(bs58@6.0.0)(react@19.2.4) - '@swc/helpers': 0.5.17 - copy-to-clipboard: 3.3.3 - core-js: 3.47.0 - csstype: 3.1.3 - dequal: 2.0.3 - input-otp: 1.4.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - qrcode.react: 4.2.0(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - transitivePeerDependencies: - - '@solana/web3.js' - - '@types/react' - - bs58 - - fastestsmallesttextencoderdecoder - - react-native - - supports-color - - typescript - '@date-fns/tz@1.4.1': {} '@dimforge/rapier3d-compat@0.12.0': {} @@ -5485,72 +5165,6 @@ snapshots: tslib: 2.8.1 optional: true - '@emotion/babel-plugin@11.13.5': - dependencies: - '@babel/helper-module-imports': 7.28.6 - '@babel/runtime': 7.29.2 - '@emotion/hash': 0.9.2 - '@emotion/memoize': 0.9.0 - '@emotion/serialize': 1.3.3 - babel-plugin-macros: 3.1.0 - convert-source-map: 1.9.0 - escape-string-regexp: 4.0.0 - find-root: 1.1.0 - source-map: 0.5.7 - stylis: 4.2.0 - transitivePeerDependencies: - - supports-color - - '@emotion/cache@11.11.0': - dependencies: - '@emotion/memoize': 0.8.1 - '@emotion/sheet': 1.4.0 - '@emotion/utils': 1.4.2 - '@emotion/weak-memoize': 0.3.1 - stylis: 4.2.0 - - '@emotion/hash@0.9.2': {} - - '@emotion/memoize@0.8.1': {} - - '@emotion/memoize@0.9.0': {} - - '@emotion/react@11.11.1(@types/react@19.2.14)(react@19.2.4)': - dependencies: - '@babel/runtime': 7.29.2 - '@emotion/babel-plugin': 11.13.5 - '@emotion/cache': 11.11.0 - '@emotion/serialize': 1.3.3 - '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.2.4) - '@emotion/utils': 1.4.2 - '@emotion/weak-memoize': 0.3.1 - hoist-non-react-statics: 3.3.2 - react: 19.2.4 - optionalDependencies: - '@types/react': 19.2.14 - transitivePeerDependencies: - - supports-color - - '@emotion/serialize@1.3.3': - dependencies: - '@emotion/hash': 0.9.2 - '@emotion/memoize': 0.9.0 - '@emotion/unitless': 0.10.0 - '@emotion/utils': 1.4.2 - csstype: 3.2.3 - - '@emotion/sheet@1.4.0': {} - - '@emotion/unitless@0.10.0': {} - - '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@19.2.4)': - dependencies: - react: 19.2.4 - - '@emotion/utils@1.4.2': {} - - '@emotion/weak-memoize@0.3.1': {} - '@eslint-community/eslint-utils@4.9.1(eslint@9.39.4(jiti@2.6.1))': dependencies: eslint: 9.39.4(jiti@2.6.1) @@ -5599,96 +5213,418 @@ snapshots: '@faker-js/faker@10.4.0': {} - '@floating-ui/core@1.7.5': + '@firebase/ai@1.4.1(@firebase/app-types@0.9.3)(@firebase/app@0.13.2)': dependencies: - '@floating-ui/utils': 0.2.11 + '@firebase/app': 0.13.2 + '@firebase/app-check-interop-types': 0.3.3 + '@firebase/app-types': 0.9.3 + '@firebase/component': 0.6.18 + '@firebase/logger': 0.4.4 + '@firebase/util': 1.12.1 + tslib: 2.8.1 - '@floating-ui/dom@1.7.6': + '@firebase/analytics-compat@0.2.23(@firebase/app-compat@0.4.2)(@firebase/app@0.13.2)': dependencies: - '@floating-ui/core': 1.7.5 - '@floating-ui/utils': 0.2.11 + '@firebase/analytics': 0.10.17(@firebase/app@0.13.2) + '@firebase/analytics-types': 0.8.3 + '@firebase/app-compat': 0.4.2 + '@firebase/component': 0.6.18 + '@firebase/util': 1.12.1 + tslib: 2.8.1 + transitivePeerDependencies: + - '@firebase/app' - '@floating-ui/react-dom@2.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@firebase/analytics-types@0.8.3': {} + + '@firebase/analytics@0.10.17(@firebase/app@0.13.2)': dependencies: - '@floating-ui/dom': 1.7.6 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@firebase/app': 0.13.2 + '@firebase/component': 0.6.18 + '@firebase/installations': 0.6.18(@firebase/app@0.13.2) + '@firebase/logger': 0.4.4 + '@firebase/util': 1.12.1 + tslib: 2.8.1 - '@floating-ui/react@0.27.12(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@firebase/app-check-compat@0.3.26(@firebase/app-compat@0.4.2)(@firebase/app@0.13.2)': dependencies: - '@floating-ui/react-dom': 2.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@floating-ui/utils': 0.2.11 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - tabbable: 6.4.0 + '@firebase/app-check': 0.10.1(@firebase/app@0.13.2) + '@firebase/app-check-types': 0.5.3 + '@firebase/app-compat': 0.4.2 + '@firebase/component': 0.6.18 + '@firebase/logger': 0.4.4 + '@firebase/util': 1.12.1 + tslib: 2.8.1 + transitivePeerDependencies: + - '@firebase/app' - '@floating-ui/utils@0.2.11': {} + '@firebase/app-check-interop-types@0.3.3': {} - '@formkit/auto-animate@0.8.4': {} + '@firebase/app-check-types@0.5.3': {} - '@hookform/resolvers@5.2.2(react-hook-form@7.72.0(react@19.2.4))': + '@firebase/app-check@0.10.1(@firebase/app@0.13.2)': dependencies: - '@standard-schema/utils': 0.3.0 - react-hook-form: 7.72.0(react@19.2.4) - - '@humanfs/core@0.19.1': {} + '@firebase/app': 0.13.2 + '@firebase/component': 0.6.18 + '@firebase/logger': 0.4.4 + '@firebase/util': 1.12.1 + tslib: 2.8.1 - '@humanfs/node@0.16.7': + '@firebase/app-compat@0.4.2': dependencies: - '@humanfs/core': 0.19.1 - '@humanwhocodes/retry': 0.4.3 + '@firebase/app': 0.13.2 + '@firebase/component': 0.6.18 + '@firebase/logger': 0.4.4 + '@firebase/util': 1.12.1 + tslib: 2.8.1 - '@humanwhocodes/module-importer@1.0.1': {} + '@firebase/app-types@0.9.3': {} - '@humanwhocodes/retry@0.4.3': {} + '@firebase/app@0.13.2': + dependencies: + '@firebase/component': 0.6.18 + '@firebase/logger': 0.4.4 + '@firebase/util': 1.12.1 + idb: 7.1.1 + tslib: 2.8.1 - '@img/colour@1.1.0': - optional: true + '@firebase/auth-compat@0.5.28(@firebase/app-compat@0.4.2)(@firebase/app-types@0.9.3)(@firebase/app@0.13.2)(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)))': + dependencies: + '@firebase/app-compat': 0.4.2 + '@firebase/auth': 1.10.8(@firebase/app@0.13.2)(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4))) + '@firebase/auth-types': 0.13.0(@firebase/app-types@0.9.3)(@firebase/util@1.12.1) + '@firebase/component': 0.6.18 + '@firebase/util': 1.12.1 + tslib: 2.8.1 + transitivePeerDependencies: + - '@firebase/app' + - '@firebase/app-types' + - '@react-native-async-storage/async-storage' - '@img/sharp-darwin-arm64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.2.4 - optional: true + '@firebase/auth-interop-types@0.2.4': {} - '@img/sharp-darwin-x64@0.34.5': + '@firebase/auth-types@0.13.0(@firebase/app-types@0.9.3)(@firebase/util@1.12.1)': + dependencies: + '@firebase/app-types': 0.9.3 + '@firebase/util': 1.12.1 + + '@firebase/auth@1.10.8(@firebase/app@0.13.2)(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)))': + dependencies: + '@firebase/app': 0.13.2 + '@firebase/component': 0.6.18 + '@firebase/logger': 0.4.4 + '@firebase/util': 1.12.1 + tslib: 2.8.1 optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.2.4 - optional: true + '@react-native-async-storage/async-storage': 1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)) - '@img/sharp-libvips-darwin-arm64@1.2.4': - optional: true + '@firebase/component@0.6.18': + dependencies: + '@firebase/util': 1.12.1 + tslib: 2.8.1 - '@img/sharp-libvips-darwin-x64@1.2.4': - optional: true + '@firebase/data-connect@0.3.10(@firebase/app@0.13.2)': + dependencies: + '@firebase/app': 0.13.2 + '@firebase/auth-interop-types': 0.2.4 + '@firebase/component': 0.6.18 + '@firebase/logger': 0.4.4 + '@firebase/util': 1.12.1 + tslib: 2.8.1 - '@img/sharp-libvips-linux-arm64@1.2.4': - optional: true + '@firebase/database-compat@2.0.11': + dependencies: + '@firebase/component': 0.6.18 + '@firebase/database': 1.0.20 + '@firebase/database-types': 1.0.15 + '@firebase/logger': 0.4.4 + '@firebase/util': 1.12.1 + tslib: 2.8.1 - '@img/sharp-libvips-linux-arm@1.2.4': - optional: true + '@firebase/database-types@1.0.15': + dependencies: + '@firebase/app-types': 0.9.3 + '@firebase/util': 1.12.1 - '@img/sharp-libvips-linux-ppc64@1.2.4': - optional: true + '@firebase/database@1.0.20': + dependencies: + '@firebase/app-check-interop-types': 0.3.3 + '@firebase/auth-interop-types': 0.2.4 + '@firebase/component': 0.6.18 + '@firebase/logger': 0.4.4 + '@firebase/util': 1.12.1 + faye-websocket: 0.11.4 + tslib: 2.8.1 - '@img/sharp-libvips-linux-riscv64@1.2.4': - optional: true + '@firebase/firestore-compat@0.3.53(@firebase/app-compat@0.4.2)(@firebase/app-types@0.9.3)(@firebase/app@0.13.2)': + dependencies: + '@firebase/app-compat': 0.4.2 + '@firebase/component': 0.6.18 + '@firebase/firestore': 4.8.0(@firebase/app@0.13.2) + '@firebase/firestore-types': 3.0.3(@firebase/app-types@0.9.3)(@firebase/util@1.12.1) + '@firebase/util': 1.12.1 + tslib: 2.8.1 + transitivePeerDependencies: + - '@firebase/app' + - '@firebase/app-types' - '@img/sharp-libvips-linux-s390x@1.2.4': - optional: true + '@firebase/firestore-types@3.0.3(@firebase/app-types@0.9.3)(@firebase/util@1.12.1)': + dependencies: + '@firebase/app-types': 0.9.3 + '@firebase/util': 1.12.1 - '@img/sharp-libvips-linux-x64@1.2.4': - optional: true + '@firebase/firestore@4.8.0(@firebase/app@0.13.2)': + dependencies: + '@firebase/app': 0.13.2 + '@firebase/component': 0.6.18 + '@firebase/logger': 0.4.4 + '@firebase/util': 1.12.1 + '@firebase/webchannel-wrapper': 1.0.3 + '@grpc/grpc-js': 1.9.15 + '@grpc/proto-loader': 0.7.15 + tslib: 2.8.1 - '@img/sharp-libvips-linuxmusl-arm64@1.2.4': - optional: true + '@firebase/functions-compat@0.3.26(@firebase/app-compat@0.4.2)(@firebase/app@0.13.2)': + dependencies: + '@firebase/app-compat': 0.4.2 + '@firebase/component': 0.6.18 + '@firebase/functions': 0.12.9(@firebase/app@0.13.2) + '@firebase/functions-types': 0.6.3 + '@firebase/util': 1.12.1 + tslib: 2.8.1 + transitivePeerDependencies: + - '@firebase/app' - '@img/sharp-libvips-linuxmusl-x64@1.2.4': - optional: true + '@firebase/functions-types@0.6.3': {} - '@img/sharp-linux-arm64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.2.4 - optional: true + '@firebase/functions@0.12.9(@firebase/app@0.13.2)': + dependencies: + '@firebase/app': 0.13.2 + '@firebase/app-check-interop-types': 0.3.3 + '@firebase/auth-interop-types': 0.2.4 + '@firebase/component': 0.6.18 + '@firebase/messaging-interop-types': 0.2.3 + '@firebase/util': 1.12.1 + tslib: 2.8.1 + + '@firebase/installations-compat@0.2.18(@firebase/app-compat@0.4.2)(@firebase/app-types@0.9.3)(@firebase/app@0.13.2)': + dependencies: + '@firebase/app-compat': 0.4.2 + '@firebase/component': 0.6.18 + '@firebase/installations': 0.6.18(@firebase/app@0.13.2) + '@firebase/installations-types': 0.5.3(@firebase/app-types@0.9.3) + '@firebase/util': 1.12.1 + tslib: 2.8.1 + transitivePeerDependencies: + - '@firebase/app' + - '@firebase/app-types' + + '@firebase/installations-types@0.5.3(@firebase/app-types@0.9.3)': + dependencies: + '@firebase/app-types': 0.9.3 + + '@firebase/installations@0.6.18(@firebase/app@0.13.2)': + dependencies: + '@firebase/app': 0.13.2 + '@firebase/component': 0.6.18 + '@firebase/util': 1.12.1 + idb: 7.1.1 + tslib: 2.8.1 + + '@firebase/logger@0.4.4': + dependencies: + tslib: 2.8.1 + + '@firebase/messaging-compat@0.2.22(@firebase/app-compat@0.4.2)(@firebase/app@0.13.2)': + dependencies: + '@firebase/app-compat': 0.4.2 + '@firebase/component': 0.6.18 + '@firebase/messaging': 0.12.22(@firebase/app@0.13.2) + '@firebase/util': 1.12.1 + tslib: 2.8.1 + transitivePeerDependencies: + - '@firebase/app' + + '@firebase/messaging-interop-types@0.2.3': {} + + '@firebase/messaging@0.12.22(@firebase/app@0.13.2)': + dependencies: + '@firebase/app': 0.13.2 + '@firebase/component': 0.6.18 + '@firebase/installations': 0.6.18(@firebase/app@0.13.2) + '@firebase/messaging-interop-types': 0.2.3 + '@firebase/util': 1.12.1 + idb: 7.1.1 + tslib: 2.8.1 + + '@firebase/performance-compat@0.2.20(@firebase/app-compat@0.4.2)(@firebase/app@0.13.2)': + dependencies: + '@firebase/app-compat': 0.4.2 + '@firebase/component': 0.6.18 + '@firebase/logger': 0.4.4 + '@firebase/performance': 0.7.7(@firebase/app@0.13.2) + '@firebase/performance-types': 0.2.3 + '@firebase/util': 1.12.1 + tslib: 2.8.1 + transitivePeerDependencies: + - '@firebase/app' + + '@firebase/performance-types@0.2.3': {} + + '@firebase/performance@0.7.7(@firebase/app@0.13.2)': + dependencies: + '@firebase/app': 0.13.2 + '@firebase/component': 0.6.18 + '@firebase/installations': 0.6.18(@firebase/app@0.13.2) + '@firebase/logger': 0.4.4 + '@firebase/util': 1.12.1 + tslib: 2.8.1 + web-vitals: 4.2.4 + + '@firebase/remote-config-compat@0.2.18(@firebase/app-compat@0.4.2)(@firebase/app@0.13.2)': + dependencies: + '@firebase/app-compat': 0.4.2 + '@firebase/component': 0.6.18 + '@firebase/logger': 0.4.4 + '@firebase/remote-config': 0.6.5(@firebase/app@0.13.2) + '@firebase/remote-config-types': 0.4.0 + '@firebase/util': 1.12.1 + tslib: 2.8.1 + transitivePeerDependencies: + - '@firebase/app' + + '@firebase/remote-config-types@0.4.0': {} + + '@firebase/remote-config@0.6.5(@firebase/app@0.13.2)': + dependencies: + '@firebase/app': 0.13.2 + '@firebase/component': 0.6.18 + '@firebase/installations': 0.6.18(@firebase/app@0.13.2) + '@firebase/logger': 0.4.4 + '@firebase/util': 1.12.1 + tslib: 2.8.1 + + '@firebase/storage-compat@0.3.24(@firebase/app-compat@0.4.2)(@firebase/app-types@0.9.3)(@firebase/app@0.13.2)': + dependencies: + '@firebase/app-compat': 0.4.2 + '@firebase/component': 0.6.18 + '@firebase/storage': 0.13.14(@firebase/app@0.13.2) + '@firebase/storage-types': 0.8.3(@firebase/app-types@0.9.3)(@firebase/util@1.12.1) + '@firebase/util': 1.12.1 + tslib: 2.8.1 + transitivePeerDependencies: + - '@firebase/app' + - '@firebase/app-types' + + '@firebase/storage-types@0.8.3(@firebase/app-types@0.9.3)(@firebase/util@1.12.1)': + dependencies: + '@firebase/app-types': 0.9.3 + '@firebase/util': 1.12.1 + + '@firebase/storage@0.13.14(@firebase/app@0.13.2)': + dependencies: + '@firebase/app': 0.13.2 + '@firebase/component': 0.6.18 + '@firebase/util': 1.12.1 + tslib: 2.8.1 + + '@firebase/util@1.12.1': + dependencies: + tslib: 2.8.1 + + '@firebase/webchannel-wrapper@1.0.3': {} + + '@floating-ui/core@1.7.5': + dependencies: + '@floating-ui/utils': 0.2.11 + + '@floating-ui/dom@1.7.6': + dependencies: + '@floating-ui/core': 1.7.5 + '@floating-ui/utils': 0.2.11 + + '@floating-ui/react-dom@2.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@floating-ui/dom': 1.7.6 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + + '@floating-ui/utils@0.2.11': {} + + '@grpc/grpc-js@1.9.15': + dependencies: + '@grpc/proto-loader': 0.7.15 + '@types/node': 22.19.15 + + '@grpc/proto-loader@0.7.15': + dependencies: + lodash.camelcase: 4.3.0 + long: 5.3.2 + protobufjs: 7.5.4 + yargs: 17.7.2 + + '@hookform/resolvers@5.2.2(react-hook-form@7.72.0(react@19.2.4))': + dependencies: + '@standard-schema/utils': 0.3.0 + react-hook-form: 7.72.0(react@19.2.4) + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.7': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.4.3 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.4.3': {} + + '@img/colour@1.1.0': + optional: true + + '@img/sharp-darwin-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.2.4 + optional: true + + '@img/sharp-darwin-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.2.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.2.4': + optional: true + + '@img/sharp-libvips-linux-ppc64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-riscv64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-s390x@1.2.4': + optional: true + + '@img/sharp-libvips-linux-x64@1.2.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + optional: true + + '@img/sharp-linux-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.2.4 + optional: true '@img/sharp-linux-arm@0.34.5': optionalDependencies: @@ -5739,7 +5675,8 @@ snapshots: '@img/sharp-win32-x64@0.34.5': optional: true - '@isaacs/ttlcache@1.4.1': {} + '@isaacs/ttlcache@1.4.1': + optional: true '@istanbuljs/load-nyc-config@1.1.0': dependencies: @@ -5748,12 +5685,15 @@ snapshots: get-package-type: 0.1.0 js-yaml: 3.14.2 resolve-from: 5.0.0 + optional: true - '@istanbuljs/schema@0.1.3': {} + '@istanbuljs/schema@0.1.3': + optional: true '@jest/create-cache-key-function@29.7.0': dependencies: '@jest/types': 29.6.3 + optional: true '@jest/environment@29.7.0': dependencies: @@ -5761,6 +5701,7 @@ snapshots: '@jest/types': 29.6.3 '@types/node': 22.19.15 jest-mock: 29.7.0 + optional: true '@jest/fake-timers@29.7.0': dependencies: @@ -5770,10 +5711,12 @@ snapshots: jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 + optional: true '@jest/schemas@29.6.3': dependencies: '@sinclair/typebox': 0.27.10 + optional: true '@jest/transform@29.7.0': dependencies: @@ -5794,6 +5737,7 @@ snapshots: write-file-atomic: 4.0.2 transitivePeerDependencies: - supports-color + optional: true '@jest/types@29.6.3': dependencies: @@ -5803,6 +5747,7 @@ snapshots: '@types/node': 22.19.15 '@types/yargs': 17.0.35 chalk: 4.1.2 + optional: true '@jridgewell/gen-mapping@0.3.13': dependencies: @@ -5820,6 +5765,7 @@ snapshots: dependencies: '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 + optional: true '@jridgewell/sourcemap-codec@1.5.5': {} @@ -5872,12 +5818,6 @@ snapshots: '@next/swc-win32-x64-msvc@16.2.1': optional: true - '@noble/curves@1.9.7': - dependencies: - '@noble/hashes': 1.8.0 - - '@noble/hashes@1.8.0': {} - '@node-rs/argon2-android-arm-eabi@1.7.0': optional: true @@ -6020,6 +5960,29 @@ snapshots: '@nolyfill/is-core-module@1.0.39': {} + '@protobufjs/aspromise@1.1.2': {} + + '@protobufjs/base64@1.1.2': {} + + '@protobufjs/codegen@2.0.4': {} + + '@protobufjs/eventemitter@1.1.0': {} + + '@protobufjs/fetch@1.1.0': + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/inquire': 1.1.0 + + '@protobufjs/float@1.0.2': {} + + '@protobufjs/inquire@1.1.0': {} + + '@protobufjs/path@1.1.2': {} + + '@protobufjs/pool@1.1.0': {} + + '@protobufjs/utf8@1.1.0': {} + '@radix-ui/number@1.1.1': {} '@radix-ui/primitive@1.1.3': {} @@ -6695,13 +6658,14 @@ snapshots: '@radix-ui/rect@1.1.1': {} - '@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))': + '@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4))': dependencies: merge-options: 3.0.4 - react-native: 0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6) + react-native: 0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4) optional: true - '@react-native/assets-registry@0.84.1': {} + '@react-native/assets-registry@0.84.1': + optional: true '@react-native/codegen@0.84.1(@babel/core@7.29.0)': dependencies: @@ -6712,22 +6676,25 @@ snapshots: nullthrows: 1.1.1 tinyglobby: 0.2.15 yargs: 17.7.2 + optional: true - '@react-native/community-cli-plugin@0.84.1(bufferutil@4.1.0)(utf-8-validate@6.0.6)': + '@react-native/community-cli-plugin@0.84.1(bufferutil@4.1.0)': dependencies: - '@react-native/dev-middleware': 0.84.1(bufferutil@4.1.0)(utf-8-validate@6.0.6) + '@react-native/dev-middleware': 0.84.1(bufferutil@4.1.0) debug: 4.4.3 invariant: 2.2.4 - metro: 0.83.5(bufferutil@4.1.0)(utf-8-validate@6.0.6) - metro-config: 0.83.5(bufferutil@4.1.0)(utf-8-validate@6.0.6) + metro: 0.83.5(bufferutil@4.1.0) + metro-config: 0.83.5(bufferutil@4.1.0) metro-core: 0.83.5 semver: 7.7.4 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate + optional: true - '@react-native/debugger-frontend@0.84.1': {} + '@react-native/debugger-frontend@0.84.1': + optional: true '@react-native/debugger-shell@0.84.1': dependencies: @@ -6736,8 +6703,9 @@ snapshots: fb-dotslash: 0.5.8 transitivePeerDependencies: - supports-color + optional: true - '@react-native/dev-middleware@0.84.1(bufferutil@4.1.0)(utf-8-validate@6.0.6)': + '@react-native/dev-middleware@0.84.1(bufferutil@4.1.0)': dependencies: '@isaacs/ttlcache': 1.4.1 '@react-native/debugger-frontend': 0.84.1 @@ -6750,33 +6718,38 @@ snapshots: nullthrows: 1.1.1 open: 7.4.2 serve-static: 1.16.3 - ws: 7.5.10(bufferutil@4.1.0)(utf-8-validate@6.0.6) + ws: 7.5.10(bufferutil@4.1.0) transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate + optional: true - '@react-native/gradle-plugin@0.84.1': {} + '@react-native/gradle-plugin@0.84.1': + optional: true - '@react-native/js-polyfills@0.84.1': {} + '@react-native/js-polyfills@0.84.1': + optional: true - '@react-native/normalize-colors@0.84.1': {} + '@react-native/normalize-colors@0.84.1': + optional: true - '@react-native/virtualized-lists@0.84.1(@types/react@19.2.14)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(react@19.2.4)': + '@react-native/virtualized-lists@0.84.1(@types/react@19.2.14)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4))(react@19.2.4)': dependencies: invariant: 2.2.4 nullthrows: 1.1.1 react: 19.2.4 - react-native: 0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6) + react-native: 0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 + optional: true - '@react-three/drei@10.7.7(@react-three/fiber@9.5.0(@types/react@19.2.14)(immer@11.1.4)(react-dom@19.2.4(react@19.2.4))(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(react@19.2.4)(three@0.183.2))(@types/react@19.2.14)(@types/three@0.183.1)(immer@11.1.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(three@0.183.2)': + '@react-three/drei@10.7.7(@react-three/fiber@9.5.0(@types/react@19.2.14)(immer@11.1.4)(react-dom@19.2.4(react@19.2.4))(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4))(react@19.2.4)(three@0.183.2))(@types/react@19.2.14)(@types/three@0.183.1)(immer@11.1.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(three@0.183.2)': dependencies: '@babel/runtime': 7.29.2 '@mediapipe/tasks-vision': 0.10.17 '@monogrid/gainmap-js': 3.4.0(three@0.183.2) - '@react-three/fiber': 9.5.0(@types/react@19.2.14)(immer@11.1.4)(react-dom@19.2.4(react@19.2.4))(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(react@19.2.4)(three@0.183.2) + '@react-three/fiber': 9.5.0(@types/react@19.2.14)(immer@11.1.4)(react-dom@19.2.4(react@19.2.4))(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4))(react@19.2.4)(three@0.183.2) '@use-gesture/react': 10.3.1(react@19.2.4) camera-controls: 3.1.2(three@0.183.2) cross-env: 7.0.3 @@ -6804,7 +6777,7 @@ snapshots: - '@types/three' - immer - '@react-three/fiber@9.5.0(@types/react@19.2.14)(immer@11.1.4)(react-dom@19.2.4(react@19.2.4))(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(react@19.2.4)(three@0.183.2)': + '@react-three/fiber@9.5.0(@types/react@19.2.14)(immer@11.1.4)(react-dom@19.2.4(react@19.2.4))(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4))(react@19.2.4)(three@0.183.2)': dependencies: '@babel/runtime': 7.29.2 '@types/webxr': 0.5.24 @@ -6820,7 +6793,7 @@ snapshots: zustand: 5.0.12(@types/react@19.2.14)(immer@11.1.4)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)) optionalDependencies: react-dom: 19.2.4(react@19.2.4) - react-native: 0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6) + react-native: 0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4) transitivePeerDependencies: - '@types/react' - immer @@ -6839,233 +6812,18 @@ snapshots: '@rtsao/scc@1.1.0': {} - '@sinclair/typebox@0.27.10': {} + '@sinclair/typebox@0.27.10': + optional: true '@sinonjs/commons@3.0.1': dependencies: type-detect: 4.0.8 + optional: true '@sinonjs/fake-timers@10.3.0': dependencies: '@sinonjs/commons': 3.0.1 - - '@solana-mobile/mobile-wallet-adapter-protocol-web3js@2.2.6(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(typescript@5.9.3)': - dependencies: - '@solana-mobile/mobile-wallet-adapter-protocol': 2.2.6(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(typescript@5.9.3) - '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6) - bs58: 6.0.0 - js-base64: 3.7.8 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - - react-native - - typescript - - '@solana-mobile/mobile-wallet-adapter-protocol@2.2.6(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(typescript@5.9.3)': - dependencies: - '@solana/codecs-strings': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/wallet-standard-features': 1.3.0 - '@solana/wallet-standard-util': 1.1.2 - '@wallet-standard/core': 1.1.1 - js-base64: 3.7.8 - react-native: 0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6) - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - - typescript - - '@solana-mobile/wallet-adapter-mobile@2.2.6(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(typescript@5.9.3)': - dependencies: - '@solana-mobile/mobile-wallet-adapter-protocol': 2.2.6(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(typescript@5.9.3) - '@solana-mobile/mobile-wallet-adapter-protocol-web3js': 2.2.6(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(typescript@5.9.3) - '@solana-mobile/wallet-standard-mobile': 0.5.0(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(typescript@5.9.3) - '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)) - '@solana/wallet-standard-features': 1.3.0 - '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6) - '@wallet-standard/core': 1.1.1 - bs58: 6.0.0 - js-base64: 3.7.8 - react-native: 0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6) - tslib: 2.8.1 - optionalDependencies: - '@react-native-async-storage/async-storage': 1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6)) - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - - typescript - - '@solana-mobile/wallet-standard-mobile@0.5.0(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(typescript@5.9.3)': - dependencies: - '@solana-mobile/mobile-wallet-adapter-protocol': 2.2.6(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(typescript@5.9.3) - '@solana/wallet-standard-chains': 1.1.1 - '@solana/wallet-standard-features': 1.3.0 - '@wallet-standard/base': 1.1.0 - '@wallet-standard/features': 1.1.0 - '@wallet-standard/wallet': 1.1.0 - bs58: 6.0.0 - js-base64: 3.7.8 - qrcode: 1.5.4 - tslib: 2.8.1 - optionalDependencies: - '@react-native-async-storage/async-storage': 1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6)) - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - - react-native - - typescript - - '@solana/buffer-layout@4.0.1': - dependencies: - buffer: 6.0.3 - - '@solana/codecs-core@2.3.0(typescript@5.9.3)': - dependencies: - '@solana/errors': 2.3.0(typescript@5.9.3) - typescript: 5.9.3 - - '@solana/codecs-core@4.0.0(typescript@5.9.3)': - dependencies: - '@solana/errors': 4.0.0(typescript@5.9.3) - typescript: 5.9.3 - - '@solana/codecs-numbers@2.3.0(typescript@5.9.3)': - dependencies: - '@solana/codecs-core': 2.3.0(typescript@5.9.3) - '@solana/errors': 2.3.0(typescript@5.9.3) - typescript: 5.9.3 - - '@solana/codecs-numbers@4.0.0(typescript@5.9.3)': - dependencies: - '@solana/codecs-core': 4.0.0(typescript@5.9.3) - '@solana/errors': 4.0.0(typescript@5.9.3) - typescript: 5.9.3 - - '@solana/codecs-strings@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': - dependencies: - '@solana/codecs-core': 4.0.0(typescript@5.9.3) - '@solana/codecs-numbers': 4.0.0(typescript@5.9.3) - '@solana/errors': 4.0.0(typescript@5.9.3) - fastestsmallesttextencoderdecoder: 1.0.22 - typescript: 5.9.3 - - '@solana/errors@2.3.0(typescript@5.9.3)': - dependencies: - chalk: 5.6.2 - commander: 14.0.3 - typescript: 5.9.3 - - '@solana/errors@4.0.0(typescript@5.9.3)': - dependencies: - chalk: 5.6.2 - commander: 14.0.1 - typescript: 5.9.3 - - '@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))': - dependencies: - '@solana/wallet-standard-features': 1.3.0 - '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6) - '@wallet-standard/base': 1.1.0 - '@wallet-standard/features': 1.1.0 - eventemitter3: 5.0.4 - - '@solana/wallet-adapter-react@0.15.39(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))(bs58@6.0.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(react@19.2.4)(typescript@5.9.3)': - dependencies: - '@solana-mobile/wallet-adapter-mobile': 2.2.6(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(typescript@5.9.3) - '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)) - '@solana/wallet-standard-wallet-adapter-react': 1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))(bs58@6.0.0)(react@19.2.4) - '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6) - react: 19.2.4 - transitivePeerDependencies: - - bs58 - - fastestsmallesttextencoderdecoder - - react-native - - typescript - - '@solana/wallet-standard-chains@1.1.1': - dependencies: - '@wallet-standard/base': 1.1.0 - - '@solana/wallet-standard-core@1.1.2': - dependencies: - '@solana/wallet-standard-chains': 1.1.1 - '@solana/wallet-standard-features': 1.3.0 - '@solana/wallet-standard-util': 1.1.2 - - '@solana/wallet-standard-features@1.3.0': - dependencies: - '@wallet-standard/base': 1.1.0 - '@wallet-standard/features': 1.1.0 - - '@solana/wallet-standard-util@1.1.2': - dependencies: - '@noble/curves': 1.9.7 - '@solana/wallet-standard-chains': 1.1.1 - '@solana/wallet-standard-features': 1.3.0 - - '@solana/wallet-standard-wallet-adapter-base@1.1.4(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))(bs58@6.0.0)': - 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@6.0.6)) - '@solana/wallet-standard-chains': 1.1.1 - '@solana/wallet-standard-features': 1.3.0 - '@solana/wallet-standard-util': 1.1.2 - '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6) - '@wallet-standard/app': 1.1.0 - '@wallet-standard/base': 1.1.0 - '@wallet-standard/features': 1.1.0 - '@wallet-standard/wallet': 1.1.0 - bs58: 6.0.0 - - '@solana/wallet-standard-wallet-adapter-react@1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))(bs58@6.0.0)(react@19.2.4)': - dependencies: - '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)) - '@solana/wallet-standard-wallet-adapter-base': 1.1.4(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))(bs58@6.0.0) - '@wallet-standard/app': 1.1.0 - '@wallet-standard/base': 1.1.0 - react: 19.2.4 - transitivePeerDependencies: - - '@solana/web3.js' - - bs58 - - '@solana/wallet-standard-wallet-adapter@1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))(bs58@6.0.0)(react@19.2.4)': - dependencies: - '@solana/wallet-standard-wallet-adapter-base': 1.1.4(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))(bs58@6.0.0) - '@solana/wallet-standard-wallet-adapter-react': 1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))(bs58@6.0.0)(react@19.2.4) - transitivePeerDependencies: - - '@solana/wallet-adapter-base' - - '@solana/web3.js' - - bs58 - - react - - '@solana/wallet-standard@1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))(bs58@6.0.0)(react@19.2.4)': - dependencies: - '@solana/wallet-standard-core': 1.1.2 - '@solana/wallet-standard-wallet-adapter': 1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))(bs58@6.0.0)(react@19.2.4) - transitivePeerDependencies: - - '@solana/wallet-adapter-base' - - '@solana/web3.js' - - bs58 - - react - - '@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)': - dependencies: - '@babel/runtime': 7.29.2 - '@noble/curves': 1.9.7 - '@noble/hashes': 1.8.0 - '@solana/buffer-layout': 4.0.1 - '@solana/codecs-numbers': 2.3.0(typescript@5.9.3) - agentkeepalive: 4.6.0 - bn.js: 5.2.3 - borsh: 0.7.0 - bs58: 4.0.1 - buffer: 6.0.3 - fast-stable-stringify: 1.0.0 - jayson: 4.3.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) - node-fetch: 2.7.0 - rpc-websockets: 9.3.7 - superstruct: 2.0.2 - transitivePeerDependencies: - - bufferutil - - encoding - - typescript - - utf-8-validate - - '@stablelib/base64@1.0.1': {} + optional: true '@standard-schema/spec@1.1.0': {} @@ -7099,10 +6857,6 @@ snapshots: dependencies: tslib: 2.8.1 - '@swc/helpers@0.5.17': - dependencies: - tslib: 2.8.1 - '@tabby_ai/hijri-converter@1.0.5': {} '@tailwindcss/node@4.2.2': @@ -7174,8 +6928,6 @@ snapshots: postcss: 8.5.8 tailwindcss: 4.2.2 - '@tanstack/query-core@5.90.16': {} - '@tweenjs/tween.js@23.1.3': {} '@tybys/wasm-util@0.10.1': @@ -7195,23 +6947,23 @@ snapshots: '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.28.0 + optional: true '@types/babel__generator@7.27.0': dependencies: '@babel/types': 7.29.0 + optional: true '@types/babel__template@7.4.4': dependencies: '@babel/parser': 7.29.2 '@babel/types': 7.29.0 + optional: true '@types/babel__traverse@7.28.0': dependencies: '@babel/types': 7.29.0 - - '@types/connect@3.4.38': - dependencies: - '@types/node': 22.19.15 + optional: true '@types/d3-array@3.2.2': {} @@ -7244,31 +6996,31 @@ snapshots: '@types/graceful-fs@4.1.9': dependencies: '@types/node': 22.19.15 + optional: true - '@types/istanbul-lib-coverage@2.0.6': {} + '@types/istanbul-lib-coverage@2.0.6': + optional: true '@types/istanbul-lib-report@3.0.3': dependencies: '@types/istanbul-lib-coverage': 2.0.6 + optional: true '@types/istanbul-reports@3.0.4': dependencies: '@types/istanbul-lib-report': 3.0.3 + optional: true '@types/json-schema@7.0.15': {} '@types/json5@0.0.29': {} - '@types/node@12.20.55': {} - '@types/node@22.19.15': dependencies: undici-types: 6.21.0 '@types/offscreencanvas@2019.7.3': {} - '@types/parse-json@4.0.2': {} - '@types/prop-types@15.7.15': {} '@types/react-dom@19.2.3(@types/react@19.2.14)': @@ -7288,7 +7040,8 @@ snapshots: dependencies: csstype: 3.2.3 - '@types/stack-utils@2.0.3': {} + '@types/stack-utils@2.0.3': + optional: true '@types/stats.js@0.17.4': {} @@ -7304,23 +7057,15 @@ snapshots: '@types/use-sync-external-store@0.0.6': {} - '@types/uuid@10.0.0': {} - '@types/webxr@0.5.24': {} - '@types/ws@7.4.7': - dependencies: - '@types/node': 22.19.15 - - '@types/ws@8.18.1': - dependencies: - '@types/node': 22.19.15 - - '@types/yargs-parser@21.0.3': {} + '@types/yargs-parser@21.0.3': + optional: true '@types/yargs@17.0.35': dependencies: '@types/yargs-parser': 21.0.3 + optional: true '@typescript-eslint/eslint-plugin@8.57.2(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': dependencies: @@ -7479,33 +7224,6 @@ snapshots: '@use-gesture/core': 10.3.1 react: 19.2.4 - '@wallet-standard/app@1.1.0': - dependencies: - '@wallet-standard/base': 1.1.0 - - '@wallet-standard/base@1.1.0': {} - - '@wallet-standard/core@1.1.1': - dependencies: - '@wallet-standard/app': 1.1.0 - '@wallet-standard/base': 1.1.0 - '@wallet-standard/errors': 0.1.1 - '@wallet-standard/features': 1.1.0 - '@wallet-standard/wallet': 1.1.0 - - '@wallet-standard/errors@0.1.1': - dependencies: - chalk: 5.6.2 - commander: 13.1.0 - - '@wallet-standard/features@1.1.0': - dependencies: - '@wallet-standard/base': 1.1.0 - - '@wallet-standard/wallet@1.1.0': - dependencies: - '@wallet-standard/base': 1.1.0 - '@webgpu/types@0.1.69': {} '@zumer/snapdom@2.7.0': {} @@ -7513,11 +7231,13 @@ snapshots: abort-controller@3.0.0: dependencies: event-target-shim: 5.0.1 + optional: true accepts@2.0.0: dependencies: mime-types: 3.0.2 negotiator: 1.0.0 + optional: true acorn-jsx@5.3.2(acorn@8.16.0): dependencies: @@ -7525,11 +7245,8 @@ snapshots: acorn@8.16.0: {} - agent-base@7.1.4: {} - - agentkeepalive@4.6.0: - dependencies: - humanize-ms: 1.2.1 + agent-base@7.1.4: + optional: true ajv@6.14.0: dependencies: @@ -7538,7 +7255,8 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - anser@1.4.10: {} + anser@1.4.10: + optional: true ansi-regex@5.0.1: {} @@ -7546,16 +7264,19 @@ snapshots: dependencies: color-convert: 2.0.1 - ansi-styles@5.2.0: {} + ansi-styles@5.2.0: + optional: true anymatch@3.1.3: dependencies: normalize-path: 3.0.0 picomatch: 2.3.2 + optional: true argparse@1.0.10: dependencies: sprintf-js: 1.0.3 + optional: true argparse@2.0.1: {} @@ -7632,7 +7353,8 @@ snapshots: get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 - asap@2.0.6: {} + asap@2.0.6: + optional: true ast-types-flow@0.0.8: {} @@ -7668,6 +7390,7 @@ snapshots: slash: 3.0.0 transitivePeerDependencies: - supports-color + optional: true babel-plugin-istanbul@6.1.1: dependencies: @@ -7678,6 +7401,7 @@ snapshots: test-exclude: 6.0.0 transitivePeerDependencies: - supports-color + optional: true babel-plugin-jest-hoist@29.6.3: dependencies: @@ -7685,16 +7409,12 @@ snapshots: '@babel/types': 7.29.0 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.28.0 - - babel-plugin-macros@3.1.0: - dependencies: - '@babel/runtime': 7.29.2 - cosmiconfig: 7.1.0 - resolve: 1.22.11 + optional: true babel-plugin-syntax-hermes-parser@0.32.0: dependencies: hermes-parser: 0.32.0 + optional: true babel-preset-current-node-syntax@1.2.0(@babel/core@7.29.0): dependencies: @@ -7714,23 +7434,19 @@ snapshots: '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.29.0) '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.29.0) '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.29.0) + optional: true babel-preset-jest@29.6.3(@babel/core@7.29.0): dependencies: '@babel/core': 7.29.0 babel-plugin-jest-hoist: 29.6.3 babel-preset-current-node-syntax: 1.2.0(@babel/core@7.29.0) + optional: true balanced-match@1.0.2: {} balanced-match@4.0.4: {} - base-x@3.0.11: - dependencies: - safe-buffer: 5.2.1 - - base-x@5.0.1: {} - base64-js@1.5.1: {} baseline-browser-mapping@2.10.11: {} @@ -7739,14 +7455,6 @@ snapshots: dependencies: require-from-string: 2.0.2 - bn.js@5.2.3: {} - - borsh@0.7.0: - dependencies: - bn.js: 5.2.3 - bs58: 4.0.1 - text-encoding-utf-8: 1.0.2 - brace-expansion@1.1.13: dependencies: balanced-match: 1.0.2 @@ -7768,19 +7476,13 @@ snapshots: node-releases: 2.0.36 update-browserslist-db: 1.2.3(browserslist@4.28.1) - bs58@4.0.1: - dependencies: - base-x: 3.0.11 - - bs58@6.0.0: - dependencies: - base-x: 5.0.1 - bser@2.1.1: dependencies: node-int64: 0.4.0 + optional: true - buffer-from@1.1.2: {} + buffer-from@1.1.2: + optional: true buffer@6.0.3: dependencies: @@ -7811,9 +7513,11 @@ snapshots: callsites@3.1.0: {} - camelcase@5.3.1: {} + camelcase@5.3.1: + optional: true - camelcase@6.3.0: {} + camelcase@6.3.0: + optional: true camera-controls@3.1.2(three@0.183.2): dependencies: @@ -7826,8 +7530,6 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 - chalk@5.6.2: {} - chrome-launcher@0.15.2: dependencies: '@types/node': 22.19.15 @@ -7836,6 +7538,7 @@ snapshots: lighthouse-logger: 1.4.2 transitivePeerDependencies: - supports-color + optional: true chromium-edge-launcher@0.2.0: dependencies: @@ -7847,10 +7550,13 @@ snapshots: rimraf: 3.0.2 transitivePeerDependencies: - supports-color + optional: true - ci-info@2.0.0: {} + ci-info@2.0.0: + optional: true - ci-info@3.9.0: {} + ci-info@3.9.0: + optional: true class-variance-authority@0.7.1: dependencies: @@ -7858,12 +7564,6 @@ snapshots: client-only@0.0.1: {} - cliui@6.0.0: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 6.2.0 - cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -7894,15 +7594,11 @@ snapshots: dependencies: delayed-stream: 1.0.0 - commander@12.1.0: {} - - commander@13.1.0: {} - - commander@14.0.1: {} - - commander@14.0.3: {} + commander@12.1.0: + optional: true - commander@2.20.3: {} + commander@2.20.3: + optional: true concat-map@0.0.1: {} @@ -7914,25 +7610,10 @@ snapshots: utils-merge: 1.0.1 transitivePeerDependencies: - supports-color - - convert-source-map@1.9.0: {} + optional: true convert-source-map@2.0.0: {} - copy-to-clipboard@3.3.3: - dependencies: - toggle-selection: 1.0.6 - - core-js@3.47.0: {} - - cosmiconfig@7.1.0: - dependencies: - '@types/parse-json': 4.0.2 - import-fresh: 3.3.1 - parse-json: 5.2.0 - path-type: 4.0.0 - yaml: 1.10.3 - cross-env@7.0.3: dependencies: cross-spawn: 7.0.6 @@ -7943,8 +7624,6 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - csstype@3.1.3: {} - csstype@3.2.3: {} d3-array@3.2.4: @@ -8012,6 +7691,7 @@ snapshots: debug@2.6.9: dependencies: ms: 2.0.0 + optional: true debug@3.2.7: dependencies: @@ -8021,8 +7701,6 @@ snapshots: dependencies: ms: 2.1.3 - decamelize@1.2.0: {} - decimal.js-light@2.5.1: {} deep-is@0.1.4: {} @@ -8039,15 +7717,13 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 - delay@5.0.0: {} - delayed-stream@1.0.0: {} - depd@2.0.0: {} - - dequal@2.0.3: {} + depd@2.0.0: + optional: true - destroy@1.2.0: {} + destroy@1.2.0: + optional: true detect-gpu@5.0.70: dependencies: @@ -8057,8 +7733,6 @@ snapshots: detect-node-es@1.1.0: {} - dijkstrajs@1.0.3: {} - doctrine@2.1.0: dependencies: esutils: 2.0.3 @@ -8071,7 +7745,8 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 - ee-first@1.1.1: {} + ee-first@1.1.1: + optional: true electron-to-chromium@1.5.328: {} @@ -8091,22 +7766,21 @@ snapshots: emoji-regex@9.2.2: {} - encodeurl@1.0.2: {} + encodeurl@1.0.2: + optional: true - encodeurl@2.0.0: {} + encodeurl@2.0.0: + optional: true enhanced-resolve@5.20.1: dependencies: graceful-fs: 4.2.11 tapable: 2.3.2 - error-ex@1.3.4: - dependencies: - is-arrayish: 0.2.1 - error-stack-parser@2.1.4: dependencies: stackframe: 1.3.4 + optional: true es-abstract@1.24.1: dependencies: @@ -8212,17 +7886,13 @@ snapshots: es-toolkit@1.45.1: {} - es6-promise@4.2.8: {} - - es6-promisify@5.0.0: - dependencies: - es6-promise: 4.2.8 - escalade@3.2.0: {} - escape-html@1.0.3: {} + escape-html@1.0.3: + optional: true - escape-string-regexp@2.0.0: {} + escape-string-regexp@2.0.0: + optional: true escape-string-regexp@4.0.0: {} @@ -8423,7 +8093,8 @@ snapshots: acorn-jsx: 5.3.2(acorn@8.16.0) eslint-visitor-keys: 4.2.1 - esprima@4.0.1: {} + esprima@4.0.1: + optional: true esquery@1.7.0: dependencies: @@ -8437,15 +8108,16 @@ snapshots: esutils@2.0.3: {} - etag@1.8.1: {} + etag@1.8.1: + optional: true - event-target-shim@5.0.1: {} + event-target-shim@5.0.1: + optional: true eventemitter3@5.0.4: {} - exponential-backoff@3.1.3: {} - - eyes@0.1.8: {} + exponential-backoff@3.1.3: + optional: true fast-deep-equal@3.1.3: {} @@ -8461,21 +8133,21 @@ snapshots: fast-levenshtein@2.0.6: {} - fast-sha256@1.3.0: {} - - fast-stable-stringify@1.0.0: {} - - fastestsmallesttextencoderdecoder@1.0.22: {} - fastq@1.20.1: dependencies: reusify: 1.1.0 - fb-dotslash@0.5.8: {} + faye-websocket@0.11.4: + dependencies: + websocket-driver: 0.7.4 + + fb-dotslash@0.5.8: + optional: true fb-watchman@2.0.2: dependencies: bser: 2.1.1 + optional: true fdir@6.5.0(picomatch@4.0.4): optionalDependencies: @@ -8504,19 +8176,52 @@ snapshots: unpipe: 1.0.0 transitivePeerDependencies: - supports-color - - find-root@1.1.0: {} + optional: true find-up@4.1.0: dependencies: locate-path: 5.0.0 path-exists: 4.0.0 + optional: true find-up@5.0.0: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 + firebase@11.10.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4))): + dependencies: + '@firebase/ai': 1.4.1(@firebase/app-types@0.9.3)(@firebase/app@0.13.2) + '@firebase/analytics': 0.10.17(@firebase/app@0.13.2) + '@firebase/analytics-compat': 0.2.23(@firebase/app-compat@0.4.2)(@firebase/app@0.13.2) + '@firebase/app': 0.13.2 + '@firebase/app-check': 0.10.1(@firebase/app@0.13.2) + '@firebase/app-check-compat': 0.3.26(@firebase/app-compat@0.4.2)(@firebase/app@0.13.2) + '@firebase/app-compat': 0.4.2 + '@firebase/app-types': 0.9.3 + '@firebase/auth': 1.10.8(@firebase/app@0.13.2)(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4))) + '@firebase/auth-compat': 0.5.28(@firebase/app-compat@0.4.2)(@firebase/app-types@0.9.3)(@firebase/app@0.13.2)(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4))) + '@firebase/data-connect': 0.3.10(@firebase/app@0.13.2) + '@firebase/database': 1.0.20 + '@firebase/database-compat': 2.0.11 + '@firebase/firestore': 4.8.0(@firebase/app@0.13.2) + '@firebase/firestore-compat': 0.3.53(@firebase/app-compat@0.4.2)(@firebase/app-types@0.9.3)(@firebase/app@0.13.2) + '@firebase/functions': 0.12.9(@firebase/app@0.13.2) + '@firebase/functions-compat': 0.3.26(@firebase/app-compat@0.4.2)(@firebase/app@0.13.2) + '@firebase/installations': 0.6.18(@firebase/app@0.13.2) + '@firebase/installations-compat': 0.2.18(@firebase/app-compat@0.4.2)(@firebase/app-types@0.9.3)(@firebase/app@0.13.2) + '@firebase/messaging': 0.12.22(@firebase/app@0.13.2) + '@firebase/messaging-compat': 0.2.22(@firebase/app-compat@0.4.2)(@firebase/app@0.13.2) + '@firebase/performance': 0.7.7(@firebase/app@0.13.2) + '@firebase/performance-compat': 0.2.20(@firebase/app-compat@0.4.2)(@firebase/app@0.13.2) + '@firebase/remote-config': 0.6.5(@firebase/app@0.13.2) + '@firebase/remote-config-compat': 0.2.18(@firebase/app-compat@0.4.2)(@firebase/app@0.13.2) + '@firebase/storage': 0.13.14(@firebase/app@0.13.2) + '@firebase/storage-compat': 0.3.24(@firebase/app-compat@0.4.2)(@firebase/app-types@0.9.3)(@firebase/app@0.13.2) + '@firebase/util': 1.12.1 + transitivePeerDependencies: + - '@react-native-async-storage/async-storage' + flat-cache@4.0.1: dependencies: flatted: 3.4.2 @@ -8524,7 +8229,8 @@ snapshots: flatted@3.4.2: {} - flow-enums-runtime@0.0.6: {} + flow-enums-runtime@0.0.6: + optional: true follow-redirects@1.15.11: {} @@ -8549,7 +8255,8 @@ snapshots: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - fresh@0.5.2: {} + fresh@0.5.2: + optional: true fs-extra@11.3.4: dependencies: @@ -8560,7 +8267,8 @@ snapshots: fs-monkey@1.1.0: optional: true - fs.realpath@1.0.0: {} + fs.realpath@1.0.0: + optional: true fsevents@2.3.3: optional: true @@ -8599,7 +8307,8 @@ snapshots: get-nonce@1.0.1: {} - get-package-type@0.1.0: {} + get-package-type@0.1.0: + optional: true get-proto@1.0.1: dependencies: @@ -8624,8 +8333,6 @@ snapshots: dependencies: is-glob: 4.0.3 - glob-to-regexp@0.4.1: {} - glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -8634,6 +8341,7 @@ snapshots: minimatch: 3.1.5 once: 1.4.0 path-is-absolute: 1.0.1 + optional: true globals@14.0.0: {} @@ -8674,13 +8382,16 @@ snapshots: dependencies: function-bind: 1.1.2 - hermes-compiler@250829098.0.9: {} + hermes-compiler@250829098.0.9: + optional: true hermes-estree@0.25.1: {} - hermes-estree@0.32.0: {} + hermes-estree@0.32.0: + optional: true - hermes-estree@0.33.3: {} + hermes-estree@0.33.3: + optional: true hermes-parser@0.25.1: dependencies: @@ -8689,17 +8400,15 @@ snapshots: hermes-parser@0.32.0: dependencies: hermes-estree: 0.32.0 + optional: true hermes-parser@0.33.3: dependencies: hermes-estree: 0.33.3 + optional: true hls.js@1.6.15: {} - hoist-non-react-statics@3.3.2: - dependencies: - react-is: 16.13.1 - hono@4.12.9: {} http-errors@2.0.1: @@ -8709,6 +8418,9 @@ snapshots: setprototypeof: 1.2.0 statuses: 2.0.2 toidentifier: 1.0.1 + optional: true + + http-parser-js@0.5.10: {} https-proxy-agent@7.0.6: dependencies: @@ -8716,10 +8428,9 @@ snapshots: debug: 4.4.3 transitivePeerDependencies: - supports-color + optional: true - humanize-ms@1.2.1: - dependencies: - ms: 2.1.3 + idb@7.1.1: {} ieee754@1.2.1: {} @@ -8730,6 +8441,7 @@ snapshots: image-size@1.2.1: dependencies: queue: 6.0.2 + optional: true immediate@3.0.6: {} @@ -8748,8 +8460,10 @@ snapshots: dependencies: once: 1.4.0 wrappy: 1.0.2 + optional: true - inherits@2.0.4: {} + inherits@2.0.4: + optional: true input-otp@1.4.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: @@ -8767,6 +8481,7 @@ snapshots: invariant@2.2.4: dependencies: loose-envify: 1.4.0 + optional: true is-array-buffer@3.0.5: dependencies: @@ -8774,8 +8489,6 @@ snapshots: call-bound: 1.0.4 get-intrinsic: 1.3.0 - is-arrayish@0.2.1: {} - is-async-function@2.1.1: dependencies: async-function: 1.0.0 @@ -8814,7 +8527,8 @@ snapshots: call-bound: 1.0.4 has-tostringtag: 1.0.2 - is-docker@2.2.1: {} + is-docker@2.2.1: + optional: true is-extglob@2.1.1: {} @@ -8894,16 +8608,14 @@ snapshots: is-wsl@2.2.0: dependencies: is-docker: 2.2.1 + optional: true isarray@2.0.5: {} isexe@2.0.0: {} - isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.1.0)(utf-8-validate@6.0.6)): - dependencies: - ws: 7.5.10(bufferutil@4.1.0)(utf-8-validate@6.0.6) - - istanbul-lib-coverage@3.2.2: {} + istanbul-lib-coverage@3.2.2: + optional: true istanbul-lib-instrument@5.2.1: dependencies: @@ -8914,6 +8626,7 @@ snapshots: semver: 6.3.1 transitivePeerDependencies: - supports-color + optional: true iterator.prototype@1.1.5: dependencies: @@ -8931,24 +8644,6 @@ snapshots: transitivePeerDependencies: - '@types/react' - jayson@4.3.0(bufferutil@4.1.0)(utf-8-validate@6.0.6): - dependencies: - '@types/connect': 3.4.38 - '@types/node': 12.20.55 - '@types/ws': 7.4.7 - commander: 2.20.3 - delay: 5.0.0 - es6-promisify: 5.0.0 - eyes: 0.1.8 - isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.1.0)(utf-8-validate@6.0.6)) - json-stringify-safe: 5.0.1 - stream-json: 1.9.1 - uuid: 8.3.2 - ws: 7.5.10(bufferutil@4.1.0)(utf-8-validate@6.0.6) - transitivePeerDependencies: - - bufferutil - - utf-8-validate - jest-environment-node@29.7.0: dependencies: '@jest/environment': 29.7.0 @@ -8957,8 +8652,10 @@ snapshots: '@types/node': 22.19.15 jest-mock: 29.7.0 jest-util: 29.7.0 + optional: true - jest-get-type@29.6.3: {} + jest-get-type@29.6.3: + optional: true jest-haste-map@29.7.0: dependencies: @@ -8975,6 +8672,7 @@ snapshots: walker: 1.0.8 optionalDependencies: fsevents: 2.3.3 + optional: true jest-message-util@29.7.0: dependencies: @@ -8987,14 +8685,17 @@ snapshots: pretty-format: 29.7.0 slash: 3.0.0 stack-utils: 2.0.6 + optional: true jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 '@types/node': 22.19.15 jest-util: 29.7.0 + optional: true - jest-regex-util@29.6.3: {} + jest-regex-util@29.6.3: + optional: true jest-util@29.7.0: dependencies: @@ -9004,6 +8705,7 @@ snapshots: ci-info: 3.9.0 graceful-fs: 4.2.11 picomatch: 2.3.2 + optional: true jest-validate@29.7.0: dependencies: @@ -9013,6 +8715,7 @@ snapshots: jest-get-type: 29.6.3 leven: 3.1.0 pretty-format: 29.7.0 + optional: true jest-worker@29.7.0: dependencies: @@ -9020,38 +8723,33 @@ snapshots: jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 + optional: true jiti@2.6.1: {} - js-base64@3.7.8: {} - - js-cookie@3.0.5: {} - js-tokens@4.0.0: {} js-yaml@3.14.2: dependencies: argparse: 1.0.10 esprima: 4.0.1 + optional: true js-yaml@4.1.1: dependencies: argparse: 2.0.1 - jsc-safe-url@0.2.4: {} + jsc-safe-url@0.2.4: + optional: true jsesc@3.1.0: {} json-buffer@3.0.1: {} - json-parse-even-better-errors@2.3.1: {} - json-schema-traverse@0.4.1: {} json-stable-stringify-without-jsonify@1.0.1: {} - json-stringify-safe@5.0.1: {} - json5@1.0.2: dependencies: minimist: 1.2.8 @@ -9087,7 +8785,8 @@ snapshots: optionalDependencies: react: 19.2.4 - leven@3.1.0: {} + leven@3.1.0: + optional: true levn@0.4.1: dependencies: @@ -9104,6 +8803,7 @@ snapshots: marky: 1.3.0 transitivePeerDependencies: - supports-color + optional: true lightningcss-android-arm64@1.32.0: optional: true @@ -9163,19 +8863,23 @@ snapshots: react-dom: 19.2.4(react@19.2.4) tailwind-merge: 2.6.1 - lines-and-columns@1.2.4: {} - locate-path@5.0.0: dependencies: p-locate: 4.1.0 + optional: true locate-path@6.0.0: dependencies: p-locate: 5.0.0 + lodash.camelcase@4.3.0: {} + lodash.merge@4.6.2: {} - lodash.throttle@4.1.1: {} + lodash.throttle@4.1.1: + optional: true + + long@5.3.2: {} loose-envify@1.4.0: dependencies: @@ -9201,8 +8905,10 @@ snapshots: makeerror@1.0.12: dependencies: tmpl: 1.0.5 + optional: true - marky@1.3.0: {} + marky@1.3.0: + optional: true math-intrinsics@1.1.0: {} @@ -9216,14 +8922,16 @@ snapshots: fs-monkey: 1.1.0 optional: true - memoize-one@5.2.1: {} + memoize-one@5.2.1: + optional: true merge-options@3.0.4: dependencies: is-plain-obj: 2.1.0 optional: true - merge-stream@2.0.0: {} + merge-stream@2.0.0: + optional: true merge2@1.4.1: {} @@ -9241,10 +8949,12 @@ snapshots: nullthrows: 1.1.1 transitivePeerDependencies: - supports-color + optional: true metro-cache-key@0.83.5: dependencies: flow-enums-runtime: 0.0.6 + optional: true metro-cache@0.83.5: dependencies: @@ -9254,13 +8964,14 @@ snapshots: metro-core: 0.83.5 transitivePeerDependencies: - supports-color + optional: true - metro-config@0.83.5(bufferutil@4.1.0)(utf-8-validate@6.0.6): + metro-config@0.83.5(bufferutil@4.1.0): dependencies: connect: 3.7.0 flow-enums-runtime: 0.0.6 jest-validate: 29.7.0 - metro: 0.83.5(bufferutil@4.1.0)(utf-8-validate@6.0.6) + metro: 0.83.5(bufferutil@4.1.0) metro-cache: 0.83.5 metro-core: 0.83.5 metro-runtime: 0.83.5 @@ -9269,12 +8980,14 @@ snapshots: - bufferutil - supports-color - utf-8-validate + optional: true metro-core@0.83.5: dependencies: flow-enums-runtime: 0.0.6 lodash.throttle: 4.1.1 metro-resolver: 0.83.5 + optional: true metro-file-map@0.83.5: dependencies: @@ -9289,20 +9002,24 @@ snapshots: walker: 1.0.8 transitivePeerDependencies: - supports-color + optional: true metro-minify-terser@0.83.5: dependencies: flow-enums-runtime: 0.0.6 terser: 5.46.1 + optional: true metro-resolver@0.83.5: dependencies: flow-enums-runtime: 0.0.6 + optional: true metro-runtime@0.83.5: dependencies: '@babel/runtime': 7.29.2 flow-enums-runtime: 0.0.6 + optional: true metro-source-map@0.83.5: dependencies: @@ -9317,6 +9034,7 @@ snapshots: vlq: 1.0.1 transitivePeerDependencies: - supports-color + optional: true metro-symbolicate@0.83.5: dependencies: @@ -9328,6 +9046,7 @@ snapshots: vlq: 1.0.1 transitivePeerDependencies: - supports-color + optional: true metro-transform-plugins@0.83.5: dependencies: @@ -9339,15 +9058,16 @@ snapshots: nullthrows: 1.1.1 transitivePeerDependencies: - supports-color + optional: true - metro-transform-worker@0.83.5(bufferutil@4.1.0)(utf-8-validate@6.0.6): + metro-transform-worker@0.83.5(bufferutil@4.1.0): dependencies: '@babel/core': 7.29.0 '@babel/generator': 7.29.1 '@babel/parser': 7.29.2 '@babel/types': 7.29.0 flow-enums-runtime: 0.0.6 - metro: 0.83.5(bufferutil@4.1.0)(utf-8-validate@6.0.6) + metro: 0.83.5(bufferutil@4.1.0) metro-babel-transformer: 0.83.5 metro-cache: 0.83.5 metro-cache-key: 0.83.5 @@ -9359,8 +9079,9 @@ snapshots: - bufferutil - supports-color - utf-8-validate + optional: true - metro@0.83.5(bufferutil@4.1.0)(utf-8-validate@6.0.6): + metro@0.83.5(bufferutil@4.1.0): dependencies: '@babel/code-frame': 7.29.0 '@babel/core': 7.29.0 @@ -9386,7 +9107,7 @@ snapshots: metro-babel-transformer: 0.83.5 metro-cache: 0.83.5 metro-cache-key: 0.83.5 - metro-config: 0.83.5(bufferutil@4.1.0)(utf-8-validate@6.0.6) + metro-config: 0.83.5(bufferutil@4.1.0) metro-core: 0.83.5 metro-file-map: 0.83.5 metro-resolver: 0.83.5 @@ -9394,18 +9115,19 @@ snapshots: metro-source-map: 0.83.5 metro-symbolicate: 0.83.5 metro-transform-plugins: 0.83.5 - metro-transform-worker: 0.83.5(bufferutil@4.1.0)(utf-8-validate@6.0.6) + metro-transform-worker: 0.83.5(bufferutil@4.1.0) mime-types: 3.0.2 nullthrows: 1.1.1 serialize-error: 2.1.0 source-map: 0.5.7 throat: 5.0.0 - ws: 7.5.10(bufferutil@4.1.0)(utf-8-validate@6.0.6) + ws: 7.5.10(bufferutil@4.1.0) yargs: 17.7.2 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate + optional: true micromatch@4.0.8: dependencies: @@ -9414,7 +9136,8 @@ snapshots: mime-db@1.52.0: {} - mime-db@1.54.0: {} + mime-db@1.54.0: + optional: true mime-types@2.1.35: dependencies: @@ -9423,8 +9146,10 @@ snapshots: mime-types@3.0.2: dependencies: mime-db: 1.54.0 + optional: true - mime@1.6.0: {} + mime@1.6.0: + optional: true minimatch@10.2.4: dependencies: @@ -9436,7 +9161,8 @@ snapshots: minimist@1.2.8: {} - mkdirp@1.0.4: {} + mkdirp@1.0.4: + optional: true motion-dom@12.38.0: dependencies: @@ -9444,7 +9170,8 @@ snapshots: motion-utils@12.36.0: {} - ms@2.0.0: {} + ms@2.0.0: + optional: true ms@2.1.3: {} @@ -9456,7 +9183,8 @@ snapshots: natural-compare@1.4.0: {} - negotiator@1.0.0: {} + negotiator@1.0.0: + optional: true next-themes@0.4.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: @@ -9494,24 +9222,24 @@ snapshots: object.entries: 1.1.9 semver: 6.3.1 - node-fetch@2.7.0: - dependencies: - whatwg-url: 5.0.0 - node-gyp-build@4.8.4: optional: true - node-int64@0.4.0: {} + node-int64@0.4.0: + optional: true node-releases@2.0.36: {} - normalize-path@3.0.0: {} + normalize-path@3.0.0: + optional: true - nullthrows@1.1.1: {} + nullthrows@1.1.1: + optional: true ob1@0.83.5: dependencies: flow-enums-runtime: 0.0.6 + optional: true object-assign@4.1.1: {} @@ -9558,19 +9286,23 @@ snapshots: on-finished@2.3.0: dependencies: ee-first: 1.1.1 + optional: true on-finished@2.4.1: dependencies: ee-first: 1.1.1 + optional: true once@1.4.0: dependencies: wrappy: 1.0.2 + optional: true open@7.4.2: dependencies: is-docker: 2.2.1 is-wsl: 2.2.0 + optional: true optionator@0.9.4: dependencies: @@ -9595,6 +9327,7 @@ snapshots: p-limit@2.3.0: dependencies: p-try: 2.2.0 + optional: true p-limit@3.1.0: dependencies: @@ -9603,45 +9336,39 @@ snapshots: p-locate@4.1.0: dependencies: p-limit: 2.3.0 + optional: true p-locate@5.0.0: dependencies: p-limit: 3.1.0 - p-try@2.2.0: {} + p-try@2.2.0: + optional: true parent-module@1.0.1: dependencies: callsites: 3.1.0 - parse-json@5.2.0: - dependencies: - '@babel/code-frame': 7.29.0 - error-ex: 1.3.4 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 - - parseurl@1.3.3: {} + parseurl@1.3.3: + optional: true path-exists@4.0.0: {} - path-is-absolute@1.0.1: {} + path-is-absolute@1.0.1: + optional: true path-key@3.1.1: {} path-parse@1.0.7: {} - path-type@4.0.0: {} - picocolors@1.1.1: {} picomatch@2.3.2: {} picomatch@4.0.4: {} - pirates@4.0.7: {} - - pngjs@5.0.0: {} + pirates@4.0.7: + optional: true possible-typed-array-names@1.1.0: {} @@ -9668,6 +9395,7 @@ snapshots: '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 react-is: 18.3.1 + optional: true promise-worker-transferable@1.0.4: dependencies: @@ -9677,6 +9405,7 @@ snapshots: promise@8.3.0: dependencies: asap: 2.0.6 + optional: true prop-types@15.8.1: dependencies: @@ -9684,27 +9413,34 @@ snapshots: object-assign: 4.1.1 react-is: 16.13.1 + protobufjs@7.5.4: + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.4 + '@protobufjs/eventemitter': 1.1.0 + '@protobufjs/fetch': 1.1.0 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.0 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.0 + '@types/node': 22.19.15 + long: 5.3.2 + proxy-from-env@1.1.0: {} punycode@2.3.1: {} - qrcode.react@4.2.0(react@19.2.4): - dependencies: - react: 19.2.4 - - qrcode@1.5.4: - dependencies: - dijkstrajs: 1.0.3 - pngjs: 5.0.0 - yargs: 15.4.1 - queue-microtask@1.2.3: {} queue@6.0.2: dependencies: inherits: 2.0.4 + optional: true - range-parser@1.2.1: {} + range-parser@1.2.1: + optional: true react-day-picker@9.14.0(react@19.2.4): dependencies: @@ -9714,13 +9450,14 @@ snapshots: date-fns-jalali: 4.1.0-0 react: 19.2.4 - react-devtools-core@6.1.5(bufferutil@4.1.0)(utf-8-validate@6.0.6): + react-devtools-core@6.1.5(bufferutil@4.1.0): dependencies: shell-quote: 1.8.3 - ws: 7.5.10(bufferutil@4.1.0)(utf-8-validate@6.0.6) + ws: 7.5.10(bufferutil@4.1.0) transitivePeerDependencies: - bufferutil - utf-8-validate + optional: true react-dom@19.2.4(react@19.2.4): dependencies: @@ -9741,16 +9478,16 @@ snapshots: react-is@18.3.1: {} - react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6): + react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4): dependencies: '@jest/create-cache-key-function': 29.7.0 '@react-native/assets-registry': 0.84.1 '@react-native/codegen': 0.84.1(@babel/core@7.29.0) - '@react-native/community-cli-plugin': 0.84.1(bufferutil@4.1.0)(utf-8-validate@6.0.6) + '@react-native/community-cli-plugin': 0.84.1(bufferutil@4.1.0) '@react-native/gradle-plugin': 0.84.1 '@react-native/js-polyfills': 0.84.1 '@react-native/normalize-colors': 0.84.1 - '@react-native/virtualized-lists': 0.84.1(@types/react@19.2.14)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(react@19.2.4) + '@react-native/virtualized-lists': 0.84.1(@types/react@19.2.14)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4))(react@19.2.4) abort-controller: 3.0.0 anser: 1.4.10 ansi-regex: 5.0.1 @@ -9769,7 +9506,7 @@ snapshots: pretty-format: 29.7.0 promise: 8.3.0 react: 19.2.4 - react-devtools-core: 6.1.5(bufferutil@4.1.0)(utf-8-validate@6.0.6) + react-devtools-core: 6.1.5(bufferutil@4.1.0) react-refresh: 0.14.2 regenerator-runtime: 0.13.11 scheduler: 0.27.0 @@ -9777,7 +9514,7 @@ snapshots: stacktrace-parser: 0.1.11 tinyglobby: 0.2.15 whatwg-fetch: 3.6.20 - ws: 7.5.10(bufferutil@4.1.0)(utf-8-validate@6.0.6) + ws: 7.5.10(bufferutil@4.1.0) yargs: 17.7.2 optionalDependencies: '@types/react': 19.2.14 @@ -9788,6 +9525,7 @@ snapshots: - bufferutil - supports-color - utf-8-validate + optional: true react-redux@9.2.0(@types/react@19.2.14)(react@19.2.4)(redux@5.0.1): dependencies: @@ -9798,7 +9536,8 @@ snapshots: '@types/react': 19.2.14 redux: 5.0.1 - react-refresh@0.14.2: {} + react-refresh@0.14.2: + optional: true react-remove-scroll-bar@2.3.8(@types/react@19.2.14)(react@19.2.4): dependencies: @@ -9840,7 +9579,7 @@ snapshots: react@19.2.4: {} - recharts@3.8.1(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react-is@16.13.1)(react@19.2.4)(redux@5.0.1): + recharts@3.8.1(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react-is@18.3.1)(react@19.2.4)(redux@5.0.1): dependencies: '@reduxjs/toolkit': 2.11.2(react-redux@9.2.0(@types/react@19.2.14)(react@19.2.4)(redux@5.0.1))(react@19.2.4) clsx: 2.1.1 @@ -9850,7 +9589,7 @@ snapshots: immer: 10.2.0 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - react-is: 16.13.1 + react-is: 18.3.1 react-redux: 9.2.0(@types/react@19.2.14)(react@19.2.4)(redux@5.0.1) reselect: 5.1.1 tiny-invariant: 1.3.3 @@ -9877,7 +9616,8 @@ snapshots: get-proto: 1.0.1 which-builtin-type: 1.2.1 - regenerator-runtime@0.13.11: {} + regenerator-runtime@0.13.11: + optional: true regexp.prototype.flags@1.5.4: dependencies: @@ -9892,13 +9632,12 @@ snapshots: require-from-string@2.0.2: {} - require-main-filename@2.0.0: {} - reselect@5.1.1: {} resolve-from@4.0.0: {} - resolve-from@5.0.0: {} + resolve-from@5.0.0: + optional: true resolve-pkg-maps@1.0.0: {} @@ -9922,19 +9661,7 @@ snapshots: rimraf@3.0.2: dependencies: glob: 7.2.3 - - rpc-websockets@9.3.7: - dependencies: - '@swc/helpers': 0.5.15 - '@types/uuid': 10.0.0 - '@types/ws': 8.18.1 - buffer: 6.0.3 - eventemitter3: 5.0.4 - uuid: 11.1.0 - ws: 8.20.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) - optionalDependencies: - bufferutil: 4.1.0 - utf-8-validate: 6.0.6 + optional: true run-parallel@1.2.0: dependencies: @@ -9984,8 +9711,10 @@ snapshots: statuses: 2.0.2 transitivePeerDependencies: - supports-color + optional: true - serialize-error@2.1.0: {} + serialize-error@2.1.0: + optional: true serve-static@1.16.3: dependencies: @@ -9995,10 +9724,7 @@ snapshots: send: 0.19.2 transitivePeerDependencies: - supports-color - - server-only@0.0.1: {} - - set-blocking@2.0.0: {} + optional: true set-function-length@1.2.2: dependencies: @@ -10022,7 +9748,8 @@ snapshots: es-errors: 1.3.0 es-object-atoms: 1.1.1 - setprototypeof@1.2.0: {} + setprototypeof@1.2.0: + optional: true sharp@0.34.5: dependencies: @@ -10062,7 +9789,8 @@ snapshots: shebang-regex@3.0.0: {} - shell-quote@1.8.3: {} + shell-quote@1.8.3: + optional: true side-channel-list@1.0.0: dependencies: @@ -10092,9 +9820,11 @@ snapshots: side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 - signal-exit@3.0.7: {} + signal-exit@3.0.7: + optional: true - slash@3.0.0: {} + slash@3.0.0: + optional: true sonner@2.0.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: @@ -10107,29 +9837,31 @@ snapshots: dependencies: buffer-from: 1.1.2 source-map: 0.6.1 + optional: true - source-map@0.5.7: {} + source-map@0.5.7: + optional: true - source-map@0.6.1: {} + source-map@0.6.1: + optional: true - sprintf-js@1.0.3: {} + sprintf-js@1.0.3: + optional: true stable-hash@0.0.5: {} stack-utils@2.0.6: dependencies: escape-string-regexp: 2.0.0 + optional: true - stackframe@1.3.4: {} + stackframe@1.3.4: + optional: true stacktrace-parser@0.1.11: dependencies: type-fest: 0.7.1 - - standardwebhooks@1.0.0: - dependencies: - '@stablelib/base64': 1.0.1 - fast-sha256: 1.3.0 + optional: true stats-gl@2.4.2(@types/three@0.183.1)(three@0.183.2): dependencies: @@ -10138,23 +9870,17 @@ snapshots: stats.js@0.17.0: {} - statuses@1.5.0: {} - - statuses@2.0.2: {} + statuses@1.5.0: + optional: true - std-env@3.10.0: {} + statuses@2.0.2: + optional: true stop-iteration-iterator@1.1.0: dependencies: es-errors: 1.3.0 internal-slot: 1.1.0 - stream-chain@2.2.5: {} - - stream-json@1.9.1: - dependencies: - stream-chain: 2.2.5 - string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -10226,10 +9952,6 @@ snapshots: optionalDependencies: '@babel/core': 7.29.0 - stylis@4.2.0: {} - - superstruct@2.0.2: {} - supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -10237,6 +9959,7 @@ snapshots: supports-color@8.1.1: dependencies: has-flag: 4.0.0 + optional: true supports-preserve-symlinks-flag@1.0.0: {} @@ -10244,8 +9967,6 @@ snapshots: dependencies: react: 19.2.4 - tabbable@6.4.0: {} - tailwind-merge@2.6.1: {} tailwind-merge@3.5.0: {} @@ -10260,14 +9981,14 @@ snapshots: acorn: 8.16.0 commander: 2.20.3 source-map-support: 0.5.21 + optional: true test-exclude@6.0.0: dependencies: '@istanbuljs/schema': 0.1.3 glob: 7.2.3 minimatch: 3.1.5 - - text-encoding-utf-8@1.0.2: {} + optional: true three-mesh-bvh@0.8.3(three@0.183.2): dependencies: @@ -10285,7 +10006,8 @@ snapshots: three@0.183.2: {} - throat@5.0.0: {} + throat@5.0.0: + optional: true tiny-invariant@1.3.3: {} @@ -10294,17 +10016,15 @@ snapshots: fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 - tmpl@1.0.5: {} + tmpl@1.0.5: + optional: true to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - toggle-selection@1.0.6: {} - - toidentifier@1.0.1: {} - - tr46@0.0.3: {} + toidentifier@1.0.1: + optional: true troika-three-text@0.52.4(three@0.183.2): dependencies: @@ -10347,9 +10067,11 @@ snapshots: dependencies: prelude-ls: 1.2.1 - type-detect@4.0.8: {} + type-detect@4.0.8: + optional: true - type-fest@0.7.1: {} + type-fest@0.7.1: + optional: true typed-array-buffer@1.0.3: dependencies: @@ -10408,7 +10130,8 @@ snapshots: universalify@2.0.1: {} - unpipe@1.0.0: {} + unpipe@1.0.0: + optional: true unrs-resolver@1.11.1: dependencies: @@ -10463,18 +10186,10 @@ snapshots: dependencies: react: 19.2.4 - utf-8-validate@6.0.6: - dependencies: - node-gyp-build: 4.8.4 - optional: true - utility-types@3.11.0: {} - utils-merge@1.0.1: {} - - uuid@11.1.0: {} - - uuid@8.3.2: {} + utils-merge@1.0.1: + optional: true vaul@1.1.2(@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): dependencies: @@ -10502,24 +10217,30 @@ snapshots: d3-time: 3.1.0 d3-timer: 3.0.1 - vlq@1.0.1: {} + vlq@1.0.1: + optional: true walker@1.0.8: dependencies: makeerror: 1.0.12 + optional: true + + web-vitals@4.2.4: {} webgl-constants@1.1.1: {} webgl-sdf-generator@1.1.1: {} - webidl-conversions@3.0.1: {} + websocket-driver@0.7.4: + dependencies: + http-parser-js: 0.5.10 + safe-buffer: 5.2.1 + websocket-extensions: 0.1.4 - whatwg-fetch@3.6.20: {} + websocket-extensions@0.1.4: {} - whatwg-url@5.0.0: - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 + whatwg-fetch@3.6.20: + optional: true which-boxed-primitive@1.1.1: dependencies: @@ -10552,8 +10273,6 @@ snapshots: is-weakmap: 2.0.2 is-weakset: 2.0.4 - which-module@2.0.1: {} - which-typed-array@1.1.20: dependencies: available-typed-arrays: 1.0.7 @@ -10570,66 +10289,35 @@ snapshots: word-wrap@1.2.5: {} - wrap-ansi@6.2.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - wrappy@1.0.2: {} + wrappy@1.0.2: + optional: true write-file-atomic@4.0.2: dependencies: imurmurhash: 0.1.4 signal-exit: 3.0.7 + optional: true - ws@7.5.10(bufferutil@4.1.0)(utf-8-validate@6.0.6): - optionalDependencies: - bufferutil: 4.1.0 - utf-8-validate: 6.0.6 - - ws@8.20.0(bufferutil@4.1.0)(utf-8-validate@6.0.6): + ws@7.5.10(bufferutil@4.1.0): optionalDependencies: bufferutil: 4.1.0 - utf-8-validate: 6.0.6 - - y18n@4.0.3: {} + optional: true y18n@5.0.8: {} yallist@3.1.1: {} - yaml@1.10.3: {} - - yaml@2.8.3: {} - - yargs-parser@18.1.3: - dependencies: - camelcase: 5.3.1 - decamelize: 1.2.0 + yaml@2.8.3: + optional: true yargs-parser@21.1.1: {} - yargs@15.4.1: - dependencies: - cliui: 6.0.0 - decamelize: 1.2.0 - find-up: 4.1.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - require-main-filename: 2.0.0 - set-blocking: 2.0.0 - string-width: 4.2.3 - which-module: 2.0.1 - y18n: 4.0.3 - yargs-parser: 18.1.3 - yargs@17.7.2: dependencies: cliui: 8.0.1 diff --git a/frontend/src/app/layout.tsx b/frontend/src/app/layout.tsx index 8c3365f..7735671 100644 --- a/frontend/src/app/layout.tsx +++ b/frontend/src/app/layout.tsx @@ -1,9 +1,8 @@ import type { Metadata } from "next"; import { Geist, Geist_Mono } from "next/font/google"; -import { ClerkProvider } from "@clerk/nextjs"; -import { ui } from "@clerk/ui"; import { Toaster } from "@/components/ui/sonner"; import { RouteSyncer } from "@/components/route-syncer"; +import { AuthProvider } from "@/components/providers/auth-provider"; import "./globals.css"; const geist = Geist({ @@ -30,16 +29,16 @@ export default function RootLayout({ children: React.ReactNode; }) { return ( - - - + + + {children} - - - + + + ); } diff --git a/frontend/src/components/providers/auth-provider.tsx b/frontend/src/components/providers/auth-provider.tsx new file mode 100644 index 0000000..55a95d5 --- /dev/null +++ b/frontend/src/components/providers/auth-provider.tsx @@ -0,0 +1,104 @@ +"use client"; + +/** + * Firebase Authentication Provider + * Provides auth context with Firebase user state and token management + */ + +import React, { createContext, useContext, useEffect, useState } from "react"; +import { User, onAuthStateChanged } from "firebase/auth"; +import { auth, signInWithGoogle, signOutUser } from "@/lib/firebase"; + +interface AuthContextType { + user: User | null; + uid: string | null; + loading: boolean; + signIn: () => Promise; + signOut: () => Promise; + signInWithGoogle: () => Promise; + getToken: (forceRefresh?: boolean) => Promise; +} + +const AuthContext = createContext(undefined); + +export function AuthProvider({ children }: { children: React.ReactNode }) { + const [user, setUser] = useState(null); + const [loading, setLoading] = useState(true); + + useEffect(() => { + // Listen for auth state changes + const unsubscribe = onAuthStateChanged(auth, (firebaseUser) => { + setUser((previousUser) => { + // Clear local state when auth identity changes. + if (firebaseUser?.uid !== previousUser?.uid) { + if (typeof window !== "undefined") { + localStorage.removeItem("databases"); + localStorage.removeItem("queries"); + localStorage.removeItem("chat_history"); + localStorage.removeItem("active_session"); + } + } + + return firebaseUser; + }); + setLoading(false); + }); + + return () => unsubscribe(); + }, []); + + const handleSignIn = async () => { + try { + await signInWithGoogle(); + } catch (error) { + console.error("Sign in failed:", error); + throw error; + } + }; + + const handleSignOut = async () => { + try { + await signOutUser(); + // Clear all state on sign out + if (typeof window !== "undefined") { + localStorage.clear(); + } + } catch (error) { + console.error("Sign out failed:", error); + throw error; + } + }; + + const getToken = async (forceRefresh = true): Promise => { + const activeUser = auth.currentUser ?? user; + if (!activeUser) return null; + + try { + const token = await activeUser.getIdToken(forceRefresh); + return token; + } catch (error) { + console.error("Failed to get token:", error); + return null; + } + }; + + const value: AuthContextType = { + user, + uid: user?.uid || null, + loading, + signIn: handleSignIn, + signInWithGoogle: handleSignIn, + signOut: handleSignOut, + getToken, + }; + + return {children}; +} + +export function useAuthContext() { + const context = useContext(AuthContext); + if (context === undefined) { + throw new Error("useAuthContext must be used within an AuthProvider"); + } + return context; +} diff --git a/frontend/src/hooks/use-api.ts b/frontend/src/hooks/use-api.ts index 5ed3c60..1fc1901 100644 --- a/frontend/src/hooks/use-api.ts +++ b/frontend/src/hooks/use-api.ts @@ -1,13 +1,13 @@ /** * useApi Hook * Convenient React hook wrapping client-side API calls - * Automatically includes Clerk auth token + * Automatically includes Firebase auth token */ "use client"; -import { useAuth } from "@clerk/nextjs"; -import { useCallback } from "react"; +import { useAuthContext } from "@/components/providers/auth-provider"; +import { useCallback, useMemo } from "react"; import * as apiClient from "@/lib/api-client"; import type { DatabaseResponse, @@ -21,17 +21,31 @@ import type { } from "@/types/api"; export function useApi() { - const { getToken } = useAuth(); + const { getToken, loading, user } = useAuthContext(); // Helper to get token for each request const getAuthToken = useCallback(async () => { + if (loading) { + throw new Error("Authentication is still loading"); + } + + if (!user) { + throw new Error("Missing authentication token"); + } + try { - return await getToken(); + const token = await getToken(true); + + if (!token) { + throw new Error("Invalid authentication token"); + } + + return token; } catch (error) { console.warn("Failed to get auth token:", error); - return null; + throw error; } - }, [getToken]); + }, [getToken, loading, user]); // ============================================================================ // Database Operations @@ -112,7 +126,7 @@ export function useApi() { return apiClient.clearCache(token); }, [getAuthToken]); - return { + return useMemo(() => ({ // Database operations getDatabases, getDatabase, @@ -125,5 +139,15 @@ export function useApi() { // Cache operations getCacheStats, clearCache, - }; + }), [ + getDatabases, + getDatabase, + uploadDatabase, + deleteDatabase, + getDatabaseSchema, + getDatabaseTables, + queryDatabase, + getCacheStats, + clearCache, + ]); } diff --git a/frontend/src/hooks/use-auth.ts b/frontend/src/hooks/use-auth.ts index 61182a1..629ab9b 100644 --- a/frontend/src/hooks/use-auth.ts +++ b/frontend/src/hooks/use-auth.ts @@ -1,17 +1,19 @@ "use client"; -import { useAuth, useClerk, useUser } from "@clerk/nextjs"; +import { useAuthContext } from "@/components/providers/auth-provider"; -export function useAuthProvider() { - const { isLoaded, isSignedIn } = useAuth(); - const { user } = useUser(); - const { signOut } = useClerk(); +export function useAuth() { + const context = useAuthContext(); return { - isLoaded, - isLoading: !isLoaded, - isAuthenticated: !!isSignedIn, - user, - signOut: () => signOut({ redirectUrl: "/" }), + isLoaded: !context.loading, + isLoading: context.loading, + isAuthenticated: !!context.user, + user: context.user, + signOut: context.signOut, + signInWithGoogle: context.signInWithGoogle, }; } + +// Legacy export for backward compatibility +export const useAuthProvider = useAuth; diff --git a/frontend/src/lib/api-client.ts b/frontend/src/lib/api-client.ts index aebb8d5..b3b8be2 100644 --- a/frontend/src/lib/api-client.ts +++ b/frontend/src/lib/api-client.ts @@ -1,7 +1,7 @@ /** * Client-Side API Client * For use in Client Components (with "use client" directive) - * Uses fetch with browser runtime and Clerk's useAuth hook + * Uses fetch with browser runtime and Firebase auth tokens */ import type { @@ -25,6 +25,10 @@ async function clientFetch( token: string | null, options?: RequestInit ): Promise { + if (!token) { + throw new Error("Missing authentication token"); + } + const headers: Record = {}; if (options?.headers) { @@ -79,6 +83,10 @@ export async function uploadDatabase( description: string | undefined, token: string | null ): Promise { + if (!token) { + throw new Error("Missing authentication token"); + } + const formData = new FormData(); formData.append("file", file); formData.append("display_name", displayName); diff --git a/frontend/src/lib/firebase.ts b/frontend/src/lib/firebase.ts new file mode 100644 index 0000000..4155013 --- /dev/null +++ b/frontend/src/lib/firebase.ts @@ -0,0 +1,91 @@ +/** + * Firebase client SDK initialization + * Handles Firebase Auth configuration and Google Sign-In + */ + +import { initializeApp, getApps, FirebaseApp } from "firebase/app"; +import { + getAuth, + signInWithPopup, + GoogleAuthProvider, + signOut as firebaseSignOut, + Auth, + User, +} from "firebase/auth"; +import { FirebaseError } from "firebase/app"; + +// Firebase configuration from environment variables +const firebaseConfig = { + apiKey: process.env.NEXT_PUBLIC_FIREBASE_API_KEY, + authDomain: process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN, + projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID, + storageBucket: process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET, + messagingSenderId: process.env.NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID, + appId: process.env.NEXT_PUBLIC_FIREBASE_APP_ID, + measurementId: process.env.NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID, +}; + +// Initialize Firebase (singleton pattern) +let app: FirebaseApp; +if (!getApps().length) { + app = initializeApp(firebaseConfig); +} else { + app = getApps()[0]; +} + +// Initialize Auth +export const auth: Auth = getAuth(app); + +// Google Auth Provider +const googleProvider = new GoogleAuthProvider(); +googleProvider.setCustomParameters({ + prompt: "select_account", +}); + +// Reuse a single popup request to prevent auth/cancelled-popup-request. +let activeGoogleSignIn: Promise | null = null; + +/** + * Sign in with Google popup + */ +export const signInWithGoogle = async () => { + if (activeGoogleSignIn) { + return activeGoogleSignIn; + } + + activeGoogleSignIn = (async () => { + try { + const result = await signInWithPopup(auth, googleProvider); + return result.user; + } catch (error) { + // This can happen when another popup request interrupts the current one. + if ( + error instanceof FirebaseError && + error.code === "auth/cancelled-popup-request" + ) { + throw error; + } + + console.error("Error signing in with Google:", error); + throw error; + } finally { + activeGoogleSignIn = null; + } + })(); + + return await activeGoogleSignIn; +}; + +/** + * Sign out current user + */ +export const signOutUser = async () => { + try { + await firebaseSignOut(auth); + } catch (error) { + console.error("Error signing out:", error); + throw error; + } +}; + +export default app; diff --git a/frontend/src/modules/Home/components/Navigation.tsx b/frontend/src/modules/Home/components/Navigation.tsx index ee49d3a..4db9b8c 100644 --- a/frontend/src/modules/Home/components/Navigation.tsx +++ b/frontend/src/modules/Home/components/Navigation.tsx @@ -1,13 +1,21 @@ "use client"; import { useRouter } from "next/navigation"; -import { SignInButton, SignUpButton, UserButton } from "@clerk/nextjs"; import { Button } from "@/components/ui/button"; import { DynamicNavigation } from "@/components/lightswind/dynamic-navigation"; import ShinyText from "@/components/ui/ShinyText"; import { NAV_LINKS } from "../constants"; import { useState, useEffect } from "react"; import Image from "next/image"; +import { useAuthContext } from "@/components/providers/auth-provider"; +import { LogOut, User } from "lucide-react"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu"; +import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; import { useLenis } from "@studio-freight/react-lenis"; @@ -18,6 +26,7 @@ interface NavigationProps { export function Navigation({ isAuthenticated, isLoading }: NavigationProps) { const router = useRouter(); + const { user, signIn, signOut } = useAuthContext(); const [activeSection, setActiveSection] = useState("hero"); const [isVisible, setIsVisible] = useState(true); const [lastScrollY, setLastScrollY] = useState(0); @@ -79,6 +88,24 @@ export function Navigation({ isAuthenticated, isLoading }: NavigationProps) { } }; + const handleSignIn = async () => { + try { + await signIn(); + router.push("/dashboard"); + } catch (error) { + console.error("Sign in failed:", error); + } + }; + + const handleSignOut = async () => { + try { + await signOut(); + router.push("/"); + } catch (error) { + console.error("Sign out failed:", error); + } + }; + return (
)} - {databases.length === 0 ? ( -
-

No databases available

-

- Upload a database first to start querying with natural language. -

-
- ) : ( - - )} + ); } diff --git a/frontend/src/modules/dashboard/Sidebar.tsx b/frontend/src/modules/dashboard/Sidebar.tsx index f5a3384..0182797 100644 --- a/frontend/src/modules/dashboard/Sidebar.tsx +++ b/frontend/src/modules/dashboard/Sidebar.tsx @@ -8,13 +8,17 @@ import { Database, HelpCircle, Settings, - Plus + Plus, + Bookmark, + Search } from "lucide-react"; import { Button } from "@/components/ui/button"; const navItems = [ { to: "/dashboard", label: "Home", icon: Home }, { to: "/dashboard/chat", label: "Chat", icon: MessageSquare }, + { to: "/dashboard/search", label: "Search", icon: Search }, + { to: "/dashboard/bookmarks", label: "Bookmarks", icon: Bookmark }, { to: "/dashboard/databases", label: "Databases", icon: Database }, { to: "/dashboard/samples", label: "Sample Questions", icon: HelpCircle }, { to: "/dashboard/settings", label: "Settings", icon: Settings }, diff --git a/frontend/src/modules/dashboard/chat/ChatHistorySidebar.tsx b/frontend/src/modules/dashboard/chat/ChatHistorySidebar.tsx index 08612b4..8902240 100644 --- a/frontend/src/modules/dashboard/chat/ChatHistorySidebar.tsx +++ b/frontend/src/modules/dashboard/chat/ChatHistorySidebar.tsx @@ -1,13 +1,11 @@ "use client"; -import { - Plus, - Search, - MessageSquare, - PanelLeftClose, - MoreHorizontal, - PlusSquare -} from "lucide-react"; +import { useEffect, useMemo, useState } from "react"; +import { useRouter, useSearchParams } from "next/navigation"; +import { formatDistanceToNow } from "date-fns"; +import { MessageSquare, PanelLeftClose, PlusSquare, Search, Trash2 } from "lucide-react"; +import { useChat, type ChatSession } from "@/hooks/use-chat"; +import { useAuth } from "@/hooks/use-auth"; interface ChatHistorySidebarProps { isOpen: boolean; @@ -15,14 +13,84 @@ interface ChatHistorySidebarProps { } export default function ChatHistorySidebar({ isOpen, onToggle }: ChatHistorySidebarProps) { + const router = useRouter(); + const searchParams = useSearchParams(); + const selectedSession = Number(searchParams.get("session") || 0); + const { listSessions, createSession, deleteSession, search } = useChat(); + const { isLoading: authLoading, isAuthenticated } = useAuth(); + + const [sessions, setSessions] = useState([]); + const [query, setQuery] = useState(""); + const [results, setResults] = useState>([]); + const [loading, setLoading] = useState(true); + + useEffect(() => { + if (authLoading || !isAuthenticated) { + setLoading(authLoading); + return; + } + + async function loadSessions() { + try { + const data = await listSessions(); + setSessions(data); + } finally { + setLoading(false); + } + } + loadSessions(); + }, [listSessions, authLoading, isAuthenticated]); + + useEffect(() => { + if (authLoading || !isAuthenticated) { + return; + } + + async function runSearch() { + if (!query.trim()) { + setResults([]); + return; + } + const data = await search(query.trim()); + setResults(data); + } + runSearch(); + }, [query, search, authLoading, isAuthenticated]); + + const visibleSessions = useMemo(() => { + if (!query.trim()) { + return sessions; + } + const ids = new Set(results.map((r) => r.session_id)); + return sessions.filter((s) => ids.has(s.id)); + }, [query, results, sessions]); + + async function handleCreateSession() { + const session = await createSession(); + setSessions((prev) => [session, ...prev]); + router.push(`/dashboard/chat?session=${session.id}`); + } + + async function handleDeleteSession(sessionId: number) { + await deleteSession(sessionId); + setSessions((prev) => prev.filter((s) => s.id !== sessionId)); + if (selectedSession === sessionId) { + router.push("/dashboard/chat"); + } + } + if (!isOpen) return null; return ( -