diff --git a/website/.env.example b/website/.env.example
new file mode 100644
index 0000000..888818c
--- /dev/null
+++ b/website/.env.example
@@ -0,0 +1,2 @@
+VITE_INVEST_API_URL=http://localhost:8090
+VITE_HELIUS_API_KEY=your-helius-api-key
diff --git a/website/.gitignore b/website/.gitignore
new file mode 100644
index 0000000..5c84119
--- /dev/null
+++ b/website/.gitignore
@@ -0,0 +1,3 @@
+dist/
+node_modules/
+.env
\ No newline at end of file
diff --git a/website/index.html b/website/index.html
new file mode 100644
index 0000000..131307a
--- /dev/null
+++ b/website/index.html
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+ Orama — Decentralized Cloud Infrastructure
+
+
+
+
+
+
+
+
+
diff --git a/website/invest-api/.env.example b/website/invest-api/.env.example
new file mode 100644
index 0000000..790144e
--- /dev/null
+++ b/website/invest-api/.env.example
@@ -0,0 +1,5 @@
+PORT=8090
+DB_PATH=invest.db
+JWT_SECRET=change-me-to-a-random-32-byte-string
+HELIUS_API_KEY=your-helius-api-key
+HELIUS_RPC_URL=https://mainnet.helius-rpc.com/?api-key=your-helius-api-key
diff --git a/website/invest-api/.gitignore b/website/invest-api/.gitignore
new file mode 100644
index 0000000..8340dd2
--- /dev/null
+++ b/website/invest-api/.gitignore
@@ -0,0 +1,5 @@
+invest-api
+*.db
+*.db-shm
+*.db-wal
+.env
diff --git a/website/invest-api/auth/context.go b/website/invest-api/auth/context.go
new file mode 100644
index 0000000..06fae7a
--- /dev/null
+++ b/website/invest-api/auth/context.go
@@ -0,0 +1,25 @@
+package auth
+
+import "context"
+
+type contextKey string
+
+const (
+ walletKey contextKey = "wallet"
+ chainKey contextKey = "chain"
+)
+
+func WithWallet(ctx context.Context, wallet, chain string) context.Context {
+ ctx = context.WithValue(ctx, walletKey, wallet)
+ ctx = context.WithValue(ctx, chainKey, chain)
+ return ctx
+}
+
+func WalletFromContext(ctx context.Context) (wallet, chain string, ok bool) {
+ w, wOk := ctx.Value(walletKey).(string)
+ c, cOk := ctx.Value(chainKey).(string)
+ if !wOk || !cOk || w == "" || c == "" {
+ return "", "", false
+ }
+ return w, c, true
+}
diff --git a/website/invest-api/auth/handler.go b/website/invest-api/auth/handler.go
new file mode 100644
index 0000000..80be062
--- /dev/null
+++ b/website/invest-api/auth/handler.go
@@ -0,0 +1,120 @@
+package auth
+
+import (
+ "database/sql"
+ "encoding/json"
+ "fmt"
+ "net/http"
+ "strings"
+ "time"
+)
+
+type LoginRequest struct {
+ Wallet string `json:"wallet"`
+ Chain string `json:"chain"`
+ Message string `json:"message"`
+ Signature string `json:"signature"`
+}
+
+type LoginResponse struct {
+ Token string `json:"token"`
+ Wallet string `json:"wallet"`
+ Chain string `json:"chain"`
+ ExpiresAt string `json:"expires_at"`
+}
+
+func LoginHandler(database *sql.DB, jwtSecret string) http.HandlerFunc {
+ return func(w http.ResponseWriter, r *http.Request) {
+ var req LoginRequest
+ if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
+ jsonError(w, http.StatusBadRequest, "invalid request body")
+ return
+ }
+
+ req.Chain = strings.ToLower(req.Chain)
+ if req.Wallet == "" || req.Message == "" || req.Signature == "" {
+ jsonError(w, http.StatusBadRequest, "wallet, message, and signature are required")
+ return
+ }
+ if req.Chain != "sol" && req.Chain != "evm" {
+ jsonError(w, http.StatusBadRequest, "chain must be 'sol' or 'evm'")
+ return
+ }
+
+ // Validate message timestamp (anti-replay: within 5 minutes)
+ if err := validateMessageTimestamp(req.Message); err != nil {
+ jsonError(w, http.StatusBadRequest, fmt.Sprintf("message validation failed: %v", err))
+ return
+ }
+
+ // Verify signature
+ var verifyErr error
+ if req.Chain == "sol" {
+ verifyErr = VerifySolana(req.Wallet, req.Message, req.Signature)
+ } else {
+ verifyErr = VerifyEVM(req.Wallet, req.Message, req.Signature)
+ }
+ if verifyErr != nil {
+ jsonError(w, http.StatusUnauthorized, fmt.Sprintf("signature verification failed: %v", verifyErr))
+ return
+ }
+
+ // Upsert wallet
+ database.Exec(
+ `INSERT INTO wallets (wallet, chain) VALUES (?, ?)
+ ON CONFLICT(wallet) DO UPDATE SET last_seen = CURRENT_TIMESTAMP, chain = ?`,
+ req.Wallet, req.Chain, req.Chain,
+ )
+
+ // Generate JWT
+ token, expiresAt, err := GenerateToken(req.Wallet, req.Chain, jwtSecret)
+ if err != nil {
+ jsonError(w, http.StatusInternalServerError, "failed to generate token")
+ return
+ }
+
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(http.StatusOK)
+ json.NewEncoder(w).Encode(LoginResponse{
+ Token: token,
+ Wallet: req.Wallet,
+ Chain: req.Chain,
+ ExpiresAt: expiresAt.Format(time.RFC3339),
+ })
+ }
+}
+
+func validateMessageTimestamp(message string) error {
+ // Extract timestamp from message format:
+ // "...Timestamp: 2026-03-21T12:00:00.000Z"
+ idx := strings.Index(message, "Timestamp: ")
+ if idx == -1 {
+ return fmt.Errorf("message does not contain a timestamp")
+ }
+
+ tsStr := strings.TrimSpace(message[idx+len("Timestamp: "):])
+ // Handle potential trailing content
+ if newline := strings.Index(tsStr, "\n"); newline != -1 {
+ tsStr = tsStr[:newline]
+ }
+
+ ts, err := time.Parse(time.RFC3339Nano, tsStr)
+ if err != nil {
+ ts, err = time.Parse("2006-01-02T15:04:05.000Z", tsStr)
+ if err != nil {
+ return fmt.Errorf("invalid timestamp format: %s", tsStr)
+ }
+ }
+
+ if time.Since(ts) > 5*time.Minute {
+ return fmt.Errorf("message timestamp expired (older than 5 minutes)")
+ }
+
+ return nil
+}
+
+func jsonError(w http.ResponseWriter, status int, msg string) {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(status)
+ json.NewEncoder(w).Encode(map[string]string{"error": msg})
+}
diff --git a/website/invest-api/auth/jwt.go b/website/invest-api/auth/jwt.go
new file mode 100644
index 0000000..62b9c5a
--- /dev/null
+++ b/website/invest-api/auth/jwt.go
@@ -0,0 +1,57 @@
+package auth
+
+import (
+ "fmt"
+ "time"
+
+ "github.com/golang-jwt/jwt/v5"
+)
+
+const TokenExpiry = 24 * time.Hour
+
+type Claims struct {
+ Wallet string `json:"wallet"`
+ Chain string `json:"chain"`
+ jwt.RegisteredClaims
+}
+
+func GenerateToken(wallet, chain, secret string) (string, time.Time, error) {
+ expiresAt := time.Now().Add(TokenExpiry)
+
+ claims := Claims{
+ Wallet: wallet,
+ Chain: chain,
+ RegisteredClaims: jwt.RegisteredClaims{
+ ExpiresAt: jwt.NewNumericDate(expiresAt),
+ IssuedAt: jwt.NewNumericDate(time.Now()),
+ Issuer: "orama-invest",
+ },
+ }
+
+ token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
+ signed, err := token.SignedString([]byte(secret))
+ if err != nil {
+ return "", time.Time{}, fmt.Errorf("failed to sign JWT: %w", err)
+ }
+
+ return signed, expiresAt, nil
+}
+
+func ParseToken(tokenStr, secret string) (*Claims, error) {
+ token, err := jwt.ParseWithClaims(tokenStr, &Claims{}, func(t *jwt.Token) (interface{}, error) {
+ if _, ok := t.Method.(*jwt.SigningMethodHMAC); !ok {
+ return nil, fmt.Errorf("unexpected signing method: %v", t.Header["alg"])
+ }
+ return []byte(secret), nil
+ })
+ if err != nil {
+ return nil, fmt.Errorf("invalid token: %w", err)
+ }
+
+ claims, ok := token.Claims.(*Claims)
+ if !ok || !token.Valid {
+ return nil, fmt.Errorf("invalid token claims")
+ }
+
+ return claims, nil
+}
diff --git a/website/invest-api/auth/verify_evm.go b/website/invest-api/auth/verify_evm.go
new file mode 100644
index 0000000..78fef3c
--- /dev/null
+++ b/website/invest-api/auth/verify_evm.go
@@ -0,0 +1,52 @@
+package auth
+
+import (
+ "encoding/hex"
+ "fmt"
+ "strings"
+
+ "github.com/ethereum/go-ethereum/crypto"
+)
+
+// VerifyEVM verifies an Ethereum personal_sign signature.
+func VerifyEVM(wallet, message, signatureHex string) error {
+ // Remove 0x prefix if present
+ sigHex := strings.TrimPrefix(signatureHex, "0x")
+ sigBytes, err := hex.DecodeString(sigHex)
+ if err != nil {
+ return fmt.Errorf("failed to decode signature hex: %w", err)
+ }
+
+ if len(sigBytes) != 65 {
+ return fmt.Errorf("invalid signature length: got %d, want 65", len(sigBytes))
+ }
+
+ // Ethereum personal_sign prefix
+ prefixed := fmt.Sprintf("\x19Ethereum Signed Message:\n%d%s", len(message), message)
+ hash := crypto.Keccak256Hash([]byte(prefixed))
+
+ // Fix recovery ID: some wallets return v=27/28, need v=0/1
+ if sigBytes[64] >= 27 {
+ sigBytes[64] -= 27
+ }
+
+ pubKeyBytes, err := crypto.Ecrecover(hash.Bytes(), sigBytes)
+ if err != nil {
+ return fmt.Errorf("ecrecover failed: %w", err)
+ }
+
+ pubKey, err := crypto.UnmarshalPubkey(pubKeyBytes)
+ if err != nil {
+ return fmt.Errorf("failed to unmarshal public key: %w", err)
+ }
+
+ recoveredAddr := crypto.PubkeyToAddress(*pubKey)
+ expectedAddr := strings.ToLower(strings.TrimPrefix(wallet, "0x"))
+ recoveredHex := strings.ToLower(recoveredAddr.Hex()[2:])
+
+ if recoveredHex != expectedAddr {
+ return fmt.Errorf("signature verification failed: recovered %s, expected %s", recoveredHex, expectedAddr)
+ }
+
+ return nil
+}
diff --git a/website/invest-api/auth/verify_solana.go b/website/invest-api/auth/verify_solana.go
new file mode 100644
index 0000000..088163b
--- /dev/null
+++ b/website/invest-api/auth/verify_solana.go
@@ -0,0 +1,42 @@
+package auth
+
+import (
+ "crypto/ed25519"
+ "encoding/base64"
+ "fmt"
+
+ "github.com/mr-tron/base58"
+)
+
+// VerifySolana verifies a Solana wallet signature.
+// The signature should be base58 or base64 encoded.
+// The wallet is the base58-encoded public key.
+func VerifySolana(wallet, message, signature string) error {
+ pubKeyBytes, err := base58.Decode(wallet)
+ if err != nil {
+ return fmt.Errorf("invalid wallet address: %w", err)
+ }
+
+ if len(pubKeyBytes) != ed25519.PublicKeySize {
+ return fmt.Errorf("invalid public key length: got %d, want %d", len(pubKeyBytes), ed25519.PublicKeySize)
+ }
+
+ // Try base58 first (Phantom default), then base64
+ sigBytes, err := base58.Decode(signature)
+ if err != nil || len(sigBytes) != ed25519.SignatureSize {
+ sigBytes, err = base64.StdEncoding.DecodeString(signature)
+ if err != nil {
+ return fmt.Errorf("failed to decode signature: %w", err)
+ }
+ }
+
+ if len(sigBytes) != ed25519.SignatureSize {
+ return fmt.Errorf("invalid signature length: got %d, want %d", len(sigBytes), ed25519.SignatureSize)
+ }
+
+ if !ed25519.Verify(pubKeyBytes, []byte(message), sigBytes) {
+ return fmt.Errorf("signature verification failed")
+ }
+
+ return nil
+}
diff --git a/website/invest-api/config/config.go b/website/invest-api/config/config.go
new file mode 100644
index 0000000..4328a36
--- /dev/null
+++ b/website/invest-api/config/config.go
@@ -0,0 +1,50 @@
+package config
+
+import (
+ "fmt"
+ "os"
+
+ "github.com/joho/godotenv"
+)
+
+type Config struct {
+ Port string
+ DBPath string
+ JWTSecret string
+ HeliusAPIKey string
+ HeliusRPCURL string
+}
+
+func Load() (*Config, error) {
+ // Load .env file if it exists (ignore error if missing)
+ _ = godotenv.Load()
+
+ cfg := &Config{
+ Port: envOrDefault("PORT", "8090"),
+ DBPath: envOrDefault("DB_PATH", "invest.db"),
+ JWTSecret: os.Getenv("JWT_SECRET"),
+ HeliusAPIKey: os.Getenv("HELIUS_API_KEY"),
+ HeliusRPCURL: os.Getenv("HELIUS_RPC_URL"),
+ }
+
+ if cfg.JWTSecret == "" {
+ return nil, fmt.Errorf("JWT_SECRET environment variable is required")
+ }
+
+ if cfg.HeliusAPIKey == "" {
+ return nil, fmt.Errorf("HELIUS_API_KEY environment variable is required")
+ }
+
+ if cfg.HeliusRPCURL == "" {
+ cfg.HeliusRPCURL = "https://mainnet.helius-rpc.com/?api-key=" + cfg.HeliusAPIKey
+ }
+
+ return cfg, nil
+}
+
+func envOrDefault(key, fallback string) string {
+ if v := os.Getenv(key); v != "" {
+ return v
+ }
+ return fallback
+}
diff --git a/website/invest-api/db/db.go b/website/invest-api/db/db.go
new file mode 100644
index 0000000..ece0393
--- /dev/null
+++ b/website/invest-api/db/db.go
@@ -0,0 +1,21 @@
+package db
+
+import (
+ "database/sql"
+ "fmt"
+
+ _ "github.com/mattn/go-sqlite3"
+)
+
+func Open(path string) (*sql.DB, error) {
+ db, err := sql.Open("sqlite3", path+"?_journal_mode=WAL&_busy_timeout=5000")
+ if err != nil {
+ return nil, fmt.Errorf("failed to open database at %s: %w", path, err)
+ }
+
+ if err := db.Ping(); err != nil {
+ return nil, fmt.Errorf("failed to ping database: %w", err)
+ }
+
+ return db, nil
+}
diff --git a/website/invest-api/db/migrate.go b/website/invest-api/db/migrate.go
new file mode 100644
index 0000000..5fb363b
--- /dev/null
+++ b/website/invest-api/db/migrate.go
@@ -0,0 +1,164 @@
+package db
+
+import (
+ "database/sql"
+ "fmt"
+ "log"
+)
+
+func Migrate(db *sql.DB) error {
+ schema := `
+ CREATE TABLE IF NOT EXISTS wallets (
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ wallet TEXT NOT NULL UNIQUE,
+ chain TEXT NOT NULL CHECK(chain IN ('sol', 'evm')),
+ first_seen DATETIME DEFAULT CURRENT_TIMESTAMP,
+ last_seen DATETIME DEFAULT CURRENT_TIMESTAMP
+ );
+
+ CREATE TABLE IF NOT EXISTS token_purchases (
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ wallet TEXT NOT NULL,
+ chain TEXT NOT NULL CHECK(chain IN ('sol', 'evm')),
+ amount_paid REAL NOT NULL,
+ pay_currency TEXT NOT NULL,
+ tokens_allocated REAL NOT NULL,
+ tx_hash TEXT NOT NULL,
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP
+ );
+
+ CREATE TABLE IF NOT EXISTS license_purchases (
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ wallet TEXT NOT NULL,
+ chain TEXT NOT NULL CHECK(chain IN ('sol', 'evm')),
+ amount_paid REAL NOT NULL,
+ pay_currency TEXT NOT NULL,
+ tx_hash TEXT NOT NULL,
+ license_number INTEGER NOT NULL,
+ claimed_via_nft INTEGER DEFAULT 0,
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP
+ );
+
+ CREATE TABLE IF NOT EXISTS whitelist (
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ wallet TEXT NOT NULL UNIQUE,
+ chain TEXT NOT NULL CHECK(chain IN ('sol', 'evm')),
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP
+ );
+
+ CREATE TABLE IF NOT EXISTS activity_log (
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ event_type TEXT NOT NULL,
+ wallet TEXT NOT NULL,
+ detail TEXT,
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP
+ );
+
+ CREATE TABLE IF NOT EXISTS anchat_claims (
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ wallet TEXT NOT NULL UNIQUE,
+ anchat_balance_at_claim REAL NOT NULL,
+ orama_amount REAL NOT NULL,
+ status TEXT NOT NULL DEFAULT 'active' CHECK(status IN ('active', 'flagged', 'warned', 'revoked')),
+ flagged_at DATETIME,
+ warned_at DATETIME,
+ revoked_at DATETIME,
+ claimed_at DATETIME DEFAULT CURRENT_TIMESTAMP
+ );
+
+ CREATE TABLE IF NOT EXISTS nft_license_verification (
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ wallet TEXT NOT NULL UNIQUE,
+ license_id INTEGER NOT NULL,
+ status TEXT NOT NULL DEFAULT 'active' CHECK(status IN ('active', 'flagged', 'warned', 'revoked')),
+ flagged_at DATETIME,
+ warned_at DATETIME,
+ revoked_at DATETIME,
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP
+ );
+
+ CREATE INDEX IF NOT EXISTS idx_wallets_wallet ON wallets(wallet);
+ CREATE INDEX IF NOT EXISTS idx_token_purchases_wallet ON token_purchases(wallet);
+ CREATE INDEX IF NOT EXISTS idx_license_purchases_wallet ON license_purchases(wallet);
+ CREATE INDEX IF NOT EXISTS idx_whitelist_wallet ON whitelist(wallet);
+ CREATE INDEX IF NOT EXISTS idx_activity_log_created ON activity_log(created_at DESC);
+ CREATE INDEX IF NOT EXISTS idx_anchat_claims_wallet ON anchat_claims(wallet);
+ CREATE INDEX IF NOT EXISTS idx_anchat_claims_status ON anchat_claims(status);
+ CREATE INDEX IF NOT EXISTS idx_nft_license_verification_wallet ON nft_license_verification(wallet);
+ CREATE INDEX IF NOT EXISTS idx_nft_license_verification_status ON nft_license_verification(status);
+ `
+ _, err := db.Exec(schema)
+ if err != nil {
+ return err
+ }
+
+ // Add columns if migrating from old schema (SQLite doesn't support IF NOT EXISTS for ALTER)
+ for _, col := range []struct{ table, column, def string }{
+ {"anchat_claims", "status", "TEXT NOT NULL DEFAULT 'active'"},
+ {"anchat_claims", "flagged_at", "DATETIME"},
+ {"anchat_claims", "warned_at", "DATETIME"},
+ {"anchat_claims", "revoked_at", "DATETIME"},
+ } {
+ db.Exec(fmt.Sprintf("ALTER TABLE %s ADD COLUMN %s %s", col.table, col.column, col.def))
+ }
+
+ return nil
+}
+
+// Seed populates initial data if tables are empty (idempotent).
+func Seed(database *sql.DB) error {
+ var count int
+ database.QueryRow("SELECT COUNT(*) FROM token_purchases").Scan(&count)
+ if count > 0 {
+ return nil // Already seeded
+ }
+
+ log.Println("Seeding database with initial investor data...")
+
+ tx, err := database.Begin()
+ if err != nil {
+ return fmt.Errorf("failed to begin seed transaction: %w", err)
+ }
+ defer tx.Rollback()
+
+ // DeBros — 9JEsuEeRpxrJyFVkx1RRXBTG7V6zTeApr33nGrBpcYt3
+ debrosWallet := "9JEsuEeRpxrJyFVkx1RRXBTG7V6zTeApr33nGrBpcYt3"
+ tx.Exec("INSERT OR IGNORE INTO wallets (wallet, chain) VALUES (?, 'sol')", debrosWallet)
+ tx.Exec(
+ "INSERT INTO token_purchases (wallet, chain, amount_paid, pay_currency, tokens_allocated, tx_hash) VALUES (?, 'sol', 25000, 'SOL', 500000, 'seed-debros-token')",
+ debrosWallet,
+ )
+ tx.Exec(
+ "INSERT INTO activity_log (event_type, wallet, detail) VALUES ('token_purchase', '9JEs...pcYt3', '$25,000 — 500,000 $ORAMA')",
+ )
+
+ // ICXCNIKA — AXXGYMTVS7UGens718mKPvuWpRfX9zf4tGzsAqY5TgwZ
+ icxcWallet := "AXXGYMTVS7UGens718mKPvuWpRfX9zf4tGzsAqY5TgwZ"
+ tx.Exec("INSERT OR IGNORE INTO wallets (wallet, chain) VALUES (?, 'sol')", icxcWallet)
+
+ for i := 1; i <= 3; i++ {
+ tx.Exec(
+ "INSERT INTO license_purchases (wallet, chain, amount_paid, pay_currency, tx_hash, license_number, claimed_via_nft) VALUES (?, 'sol', 3000, 'SOL', ?, ?, 0)",
+ icxcWallet, fmt.Sprintf("seed-icxcnika-license-%d", i), i,
+ )
+ tx.Exec(
+ "INSERT INTO activity_log (event_type, wallet, detail) VALUES ('license_purchase', 'AXXG...TgwZ', ?)",
+ fmt.Sprintf("License #%d — $3,000", i),
+ )
+ }
+
+ tx.Exec(
+ "INSERT INTO token_purchases (wallet, chain, amount_paid, pay_currency, tokens_allocated, tx_hash) VALUES (?, 'sol', 1000, 'SOL', 20000, 'seed-icxcnika-token')",
+ icxcWallet,
+ )
+ tx.Exec(
+ "INSERT INTO activity_log (event_type, wallet, detail) VALUES ('token_purchase', 'AXXG...TgwZ', '$1,000 — 20,000 $ORAMA')",
+ )
+
+ if err := tx.Commit(); err != nil {
+ return fmt.Errorf("failed to commit seed data: %w", err)
+ }
+
+ log.Println("Seed data inserted: DeBros ($25K tokens) + ICXCNIKA (3 licenses + $1K tokens)")
+ return nil
+}
diff --git a/website/invest-api/db/models.go b/website/invest-api/db/models.go
new file mode 100644
index 0000000..1f580df
--- /dev/null
+++ b/website/invest-api/db/models.go
@@ -0,0 +1,75 @@
+package db
+
+// Constants shared across handlers.
+const (
+ TotalTokenAllocation = 10_000_000
+ TokenPrice = 0.05
+ MinTokenPurchaseUSD = 50.0
+ TotalLicenses = 500
+ LicensePrice = 3000.0
+
+ TeamNFTCollection = "4vd4ct4ohhSsjKdi2QKdRTcEPsgFHMTNwCUR27xNrA73"
+ CommunityNFTCollection = "DV8pjrqEKx7ET5FSFY2pCugnzyZmcDFrWFxzDLqdSzmp"
+ AnchatMint = "EZGb7aaSbCHbE6DcfynezKRc9Bkzxs8stP97H6WEpump"
+ AnchatClaimRate = 0.0025 // 0.25%
+ AnchatMinBalance = 10_000 // Minimum $ANCHAT to be eligible for claim
+
+ TreasurySOL = "CBRv5D69LKD8xmnjcNNcz1jgehEtKzhUdrxdFaBs14CP"
+ TreasuryETH = "0xA3b5Cba1dBD45951F718d1720bE19718159f5B0D"
+ TreasuryBTC = "bc1qzpkjguxh4pl9pdhj76zeztur42prhfed2hd22z"
+)
+
+type StatsResponse struct {
+ TokensSold float64 `json:"tokens_sold"`
+ TokensRemaining float64 `json:"tokens_remaining"`
+ TokenRaised float64 `json:"token_raised"`
+ LicensesSold int `json:"licenses_sold"`
+ LicensesLeft int `json:"licenses_left"`
+ LicenseRaised float64 `json:"license_raised"`
+ TotalRaised float64 `json:"total_raised"`
+ WhitelistCount int `json:"whitelist_count"`
+}
+
+type ActivityEntry struct {
+ EventType string `json:"event_type"`
+ Wallet string `json:"wallet"`
+ Detail string `json:"detail"`
+ CreatedAt string `json:"created_at"`
+}
+
+type MeResponse struct {
+ Wallet string `json:"wallet"`
+ Chain string `json:"chain"`
+ TokensPurchased float64 `json:"tokens_purchased"`
+ TokenSpent float64 `json:"tokens_spent"`
+ Licenses []LicenseInfo `json:"licenses"`
+ OnWhitelist bool `json:"on_whitelist"`
+ PurchaseHistory []PurchaseRecord `json:"purchase_history"`
+ AnchatClaimed bool `json:"anchat_claimed"`
+ AnchatOrama float64 `json:"anchat_orama_amount"`
+}
+
+type LicenseInfo struct {
+ LicenseNumber int `json:"license_number"`
+ ClaimedViaNFT bool `json:"claimed_via_nft"`
+ PurchasedAt string `json:"purchased_at"`
+}
+
+type PurchaseRecord struct {
+ Type string `json:"type"`
+ Amount float64 `json:"amount"`
+ Currency string `json:"currency"`
+ TxHash string `json:"tx_hash"`
+ CreatedAt string `json:"created_at"`
+}
+
+type NftStatusResponse struct {
+ HasTeamNFT bool `json:"has_team_nft"`
+ HasCommunityNFT bool `json:"has_community_nft"`
+ NFTCount int `json:"nft_count"`
+}
+
+type AnchatBalanceResponse struct {
+ Balance float64 `json:"balance"`
+ ClaimableOrama float64 `json:"claimable_orama"`
+}
diff --git a/website/invest-api/go.mod b/website/invest-api/go.mod
new file mode 100644
index 0000000..7f25bca
--- /dev/null
+++ b/website/invest-api/go.mod
@@ -0,0 +1,18 @@
+module github.com/debros/orama-website/invest-api
+
+go 1.24.4
+
+require (
+ github.com/ethereum/go-ethereum v1.15.11
+ github.com/golang-jwt/jwt/v5 v5.2.2
+ github.com/joho/godotenv v1.5.1
+ github.com/mattn/go-sqlite3 v1.14.37
+ github.com/mr-tron/base58 v1.2.0
+)
+
+require (
+ github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect
+ github.com/holiman/uint256 v1.3.2 // indirect
+ golang.org/x/crypto v0.35.0 // indirect
+ golang.org/x/sys v0.30.0 // indirect
+)
diff --git a/website/invest-api/go.sum b/website/invest-api/go.sum
new file mode 100644
index 0000000..3ffbf85
--- /dev/null
+++ b/website/invest-api/go.sum
@@ -0,0 +1,20 @@
+github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0=
+github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc=
+github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 h1:YLtO71vCjJRCBcrPMtQ9nqBsqpA1m5sE92cU+pd5Mcc=
+github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs=
+github.com/ethereum/go-ethereum v1.15.11 h1:JK73WKeu0WC0O1eyX+mdQAVHUV+UR1a9VB/domDngBU=
+github.com/ethereum/go-ethereum v1.15.11/go.mod h1:mf8YiHIb0GR4x4TipcvBUPxJLw1mFdmxzoDi11sDRoI=
+github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8=
+github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
+github.com/holiman/uint256 v1.3.2 h1:a9EgMPSC1AAaj1SZL5zIQD3WbwTuHrMGOerLjGmM/TA=
+github.com/holiman/uint256 v1.3.2/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E=
+github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
+github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
+github.com/mattn/go-sqlite3 v1.14.37 h1:3DOZp4cXis1cUIpCfXLtmlGolNLp2VEqhiB/PARNBIg=
+github.com/mattn/go-sqlite3 v1.14.37/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
+github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o=
+github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc=
+golang.org/x/crypto v0.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs=
+golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ=
+golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
+golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
diff --git a/website/invest-api/handler/activity.go b/website/invest-api/handler/activity.go
new file mode 100644
index 0000000..e76f6b1
--- /dev/null
+++ b/website/invest-api/handler/activity.go
@@ -0,0 +1,30 @@
+package handler
+
+import (
+ "database/sql"
+ "net/http"
+
+ "github.com/debros/orama-website/invest-api/db"
+)
+
+func ActivityHandler(database *sql.DB) http.HandlerFunc {
+ return func(w http.ResponseWriter, r *http.Request) {
+ rows, err := database.Query(
+ "SELECT event_type, wallet, COALESCE(detail, ''), created_at FROM activity_log ORDER BY created_at DESC LIMIT 50",
+ )
+ if err != nil {
+ jsonError(w, http.StatusInternalServerError, "failed to query activity log")
+ return
+ }
+ defer rows.Close()
+
+ entries := []db.ActivityEntry{}
+ for rows.Next() {
+ var e db.ActivityEntry
+ rows.Scan(&e.EventType, &e.Wallet, &e.Detail, &e.CreatedAt)
+ entries = append(entries, e)
+ }
+
+ jsonResponse(w, http.StatusOK, entries)
+ }
+}
diff --git a/website/invest-api/handler/anchat.go b/website/invest-api/handler/anchat.go
new file mode 100644
index 0000000..53bc09f
--- /dev/null
+++ b/website/invest-api/handler/anchat.go
@@ -0,0 +1,129 @@
+package handler
+
+import (
+ "database/sql"
+ "fmt"
+ "math"
+ "net/http"
+
+ "github.com/debros/orama-website/invest-api/auth"
+ dbpkg "github.com/debros/orama-website/invest-api/db"
+ "github.com/debros/orama-website/invest-api/helius"
+)
+
+func AnchatBalanceHandler(database *sql.DB, heliusClient *helius.Client) http.HandlerFunc {
+ return func(w http.ResponseWriter, r *http.Request) {
+ wallet, chain, ok := auth.WalletFromContext(r.Context())
+ if !ok {
+ jsonError(w, http.StatusUnauthorized, "wallet required")
+ return
+ }
+
+ if chain != "sol" {
+ jsonError(w, http.StatusBadRequest, "$ANCHAT is a Solana token — connect with a Solana wallet")
+ return
+ }
+
+ // Check current claim status
+ var status string
+ err := database.QueryRow("SELECT status FROM anchat_claims WHERE wallet = ?", wallet).Scan(&status)
+ hasActiveClaim := err == nil && status == "active"
+ hasRevokedClaim := err == nil && status == "revoked"
+
+ balance, err := heliusClient.GetTokenBalance(wallet, dbpkg.AnchatMint)
+ if err != nil {
+ jsonError(w, http.StatusInternalServerError, fmt.Sprintf("failed to check $ANCHAT balance: %v", err))
+ return
+ }
+
+ claimable := 0.0
+ canClaim := false
+ if balance >= dbpkg.AnchatMinBalance && !hasActiveClaim {
+ claimable = math.Floor(balance * dbpkg.AnchatClaimRate)
+ canClaim = true
+ }
+
+ jsonResponse(w, http.StatusOK, map[string]any{
+ "balance": balance,
+ "claimable_orama": claimable,
+ "already_claimed": hasActiveClaim,
+ "was_revoked": hasRevokedClaim,
+ "can_claim": canClaim,
+ "min_balance": dbpkg.AnchatMinBalance,
+ })
+ }
+}
+
+func AnchatClaimHandler(database *sql.DB, heliusClient *helius.Client) http.HandlerFunc {
+ return func(w http.ResponseWriter, r *http.Request) {
+ wallet, chain, ok := auth.WalletFromContext(r.Context())
+ if !ok {
+ jsonError(w, http.StatusUnauthorized, "wallet required")
+ return
+ }
+
+ if chain != "sol" {
+ jsonError(w, http.StatusBadRequest, "$ANCHAT is a Solana token — connect with a Solana wallet")
+ return
+ }
+
+ // Check if there's an active claim already
+ var status string
+ err := database.QueryRow("SELECT status FROM anchat_claims WHERE wallet = ?", wallet).Scan(&status)
+ if err == nil && status == "active" {
+ jsonError(w, http.StatusConflict, "you already have an active $ORAMA claim")
+ return
+ }
+
+ // Fresh balance (bypass cache)
+ balance, err := heliusClient.GetTokenBalanceFresh(wallet, dbpkg.AnchatMint)
+ if err != nil {
+ jsonError(w, http.StatusInternalServerError, fmt.Sprintf("failed to verify $ANCHAT balance: %v", err))
+ return
+ }
+
+ if balance < dbpkg.AnchatMinBalance {
+ jsonError(w, http.StatusBadRequest,
+ fmt.Sprintf("minimum %s $ANCHAT required (you have %.0f)",
+ formatInt(dbpkg.AnchatMinBalance), balance))
+ return
+ }
+
+ oramaAmount := math.Floor(balance * dbpkg.AnchatClaimRate)
+ if oramaAmount <= 0 {
+ jsonError(w, http.StatusBadRequest, "$ANCHAT balance too low to claim $ORAMA")
+ return
+ }
+
+ // Upsert: if previously revoked, update to active; otherwise insert
+ _, err = database.Exec(`
+ INSERT INTO anchat_claims (wallet, anchat_balance_at_claim, orama_amount, status, flagged_at, warned_at, revoked_at)
+ VALUES (?, ?, ?, 'active', NULL, NULL, NULL)
+ ON CONFLICT(wallet) DO UPDATE SET
+ anchat_balance_at_claim = ?,
+ orama_amount = ?,
+ status = 'active',
+ flagged_at = NULL,
+ warned_at = NULL,
+ revoked_at = NULL,
+ claimed_at = CURRENT_TIMESTAMP
+ `, wallet, balance, oramaAmount, balance, oramaAmount)
+ if err != nil {
+ jsonError(w, http.StatusInternalServerError, "failed to record claim")
+ return
+ }
+
+ logActivity(database, "anchat_claim", wallet, fmt.Sprintf("%.0f $ANCHAT → %.0f $ORAMA", balance, oramaAmount))
+
+ jsonResponse(w, http.StatusCreated, map[string]any{
+ "orama_amount": oramaAmount,
+ })
+ }
+}
+
+func formatInt(n float64) string {
+ if n >= 1000 {
+ return fmt.Sprintf("%.0fK", n/1000)
+ }
+ return fmt.Sprintf("%.0f", n)
+}
diff --git a/website/invest-api/handler/helpers.go b/website/invest-api/handler/helpers.go
new file mode 100644
index 0000000..76ac69c
--- /dev/null
+++ b/website/invest-api/handler/helpers.go
@@ -0,0 +1,28 @@
+package handler
+
+import (
+ "database/sql"
+ "encoding/json"
+ "net/http"
+)
+
+func jsonResponse(w http.ResponseWriter, status int, data any) {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(status)
+ json.NewEncoder(w).Encode(data)
+}
+
+func jsonError(w http.ResponseWriter, status int, msg string) {
+ jsonResponse(w, status, map[string]string{"error": msg})
+}
+
+func logActivity(database *sql.DB, eventType, wallet, detail string) {
+ truncated := wallet
+ if len(wallet) > 10 {
+ truncated = wallet[:6] + "..." + wallet[len(wallet)-4:]
+ }
+ database.Exec(
+ "INSERT INTO activity_log (event_type, wallet, detail) VALUES (?, ?, ?)",
+ eventType, truncated, detail,
+ )
+}
diff --git a/website/invest-api/handler/me.go b/website/invest-api/handler/me.go
new file mode 100644
index 0000000..1ad9cd6
--- /dev/null
+++ b/website/invest-api/handler/me.go
@@ -0,0 +1,79 @@
+package handler
+
+import (
+ "database/sql"
+ "net/http"
+
+ "github.com/debros/orama-website/invest-api/auth"
+ "github.com/debros/orama-website/invest-api/db"
+)
+
+func MeHandler(database *sql.DB) http.HandlerFunc {
+ return func(w http.ResponseWriter, r *http.Request) {
+ wallet, chain, ok := auth.WalletFromContext(r.Context())
+ if !ok {
+ jsonError(w, http.StatusUnauthorized, "wallet not found in context")
+ return
+ }
+
+ resp := db.MeResponse{
+ Wallet: wallet,
+ Chain: chain,
+ Licenses: []db.LicenseInfo{},
+ PurchaseHistory: []db.PurchaseRecord{},
+ }
+
+ // Token totals
+ database.QueryRow(
+ "SELECT COALESCE(SUM(tokens_allocated), 0), COALESCE(SUM(amount_paid), 0) FROM token_purchases WHERE wallet = ?",
+ wallet,
+ ).Scan(&resp.TokensPurchased, &resp.TokenSpent)
+
+ // Licenses
+ rows, _ := database.Query(
+ "SELECT license_number, claimed_via_nft, created_at FROM license_purchases WHERE wallet = ? ORDER BY created_at",
+ wallet,
+ )
+ if rows != nil {
+ defer rows.Close()
+ for rows.Next() {
+ var l db.LicenseInfo
+ var claimed int
+ rows.Scan(&l.LicenseNumber, &claimed, &l.PurchasedAt)
+ l.ClaimedViaNFT = claimed == 1
+ resp.Licenses = append(resp.Licenses, l)
+ }
+ }
+
+ // Whitelist
+ var count int
+ database.QueryRow("SELECT COUNT(*) FROM whitelist WHERE wallet = ?", wallet).Scan(&count)
+ resp.OnWhitelist = count > 0
+
+ // ANCHAT claim status
+ var claimCount int
+ database.QueryRow("SELECT COUNT(*) FROM anchat_claims WHERE wallet = ?", wallet).Scan(&claimCount)
+ resp.AnchatClaimed = claimCount > 0
+ if resp.AnchatClaimed {
+ database.QueryRow("SELECT orama_amount FROM anchat_claims WHERE wallet = ?", wallet).Scan(&resp.AnchatOrama)
+ }
+
+ // Purchase history (combined)
+ histRows, _ := database.Query(`
+ SELECT 'token' as type, amount_paid, pay_currency, tx_hash, created_at FROM token_purchases WHERE wallet = ?
+ UNION ALL
+ SELECT 'license' as type, amount_paid, pay_currency, tx_hash, created_at FROM license_purchases WHERE wallet = ?
+ ORDER BY created_at DESC
+ `, wallet, wallet)
+ if histRows != nil {
+ defer histRows.Close()
+ for histRows.Next() {
+ var p db.PurchaseRecord
+ histRows.Scan(&p.Type, &p.Amount, &p.Currency, &p.TxHash, &p.CreatedAt)
+ resp.PurchaseHistory = append(resp.PurchaseHistory, p)
+ }
+ }
+
+ jsonResponse(w, http.StatusOK, resp)
+ }
+}
diff --git a/website/invest-api/handler/nft.go b/website/invest-api/handler/nft.go
new file mode 100644
index 0000000..7091568
--- /dev/null
+++ b/website/invest-api/handler/nft.go
@@ -0,0 +1,32 @@
+package handler
+
+import (
+ "fmt"
+ "net/http"
+
+ "github.com/debros/orama-website/invest-api/auth"
+ "github.com/debros/orama-website/invest-api/db"
+ "github.com/debros/orama-website/invest-api/helius"
+)
+
+func NftStatusHandler(heliusClient *helius.Client) http.HandlerFunc {
+ return func(w http.ResponseWriter, r *http.Request) {
+ wallet, _, ok := auth.WalletFromContext(r.Context())
+ if !ok {
+ jsonError(w, http.StatusUnauthorized, "wallet required")
+ return
+ }
+
+ result, err := heliusClient.CheckNFTs(wallet, db.TeamNFTCollection, db.CommunityNFTCollection)
+ if err != nil {
+ jsonError(w, http.StatusInternalServerError, fmt.Sprintf("failed to check NFTs: %v", err))
+ return
+ }
+
+ jsonResponse(w, http.StatusOK, db.NftStatusResponse{
+ HasTeamNFT: result.HasTeamNFT,
+ HasCommunityNFT: result.HasCommunityNFT,
+ NFTCount: result.Count,
+ })
+ }
+}
diff --git a/website/invest-api/handler/price.go b/website/invest-api/handler/price.go
new file mode 100644
index 0000000..64e0525
--- /dev/null
+++ b/website/invest-api/handler/price.go
@@ -0,0 +1,95 @@
+package handler
+
+import (
+ "encoding/json"
+ "io"
+ "net/http"
+ "sync"
+ "time"
+)
+
+type PriceResponse struct {
+ SolUSD float64 `json:"sol_usd"`
+ EthUSD float64 `json:"eth_usd"`
+}
+
+var (
+ priceCache PriceResponse
+ priceCacheTime time.Time
+ priceMu sync.RWMutex
+ priceTTL = 60 * time.Second
+)
+
+func PriceHandler() http.HandlerFunc {
+ return func(w http.ResponseWriter, r *http.Request) {
+ prices, err := getCachedPrices()
+ if err != nil {
+ jsonError(w, http.StatusInternalServerError, "failed to fetch prices: "+err.Error())
+ return
+ }
+ jsonResponse(w, http.StatusOK, prices)
+ }
+}
+
+func getCachedPrices() (PriceResponse, error) {
+ priceMu.RLock()
+ if time.Since(priceCacheTime) < priceTTL && priceCache.SolUSD > 0 {
+ cached := priceCache
+ priceMu.RUnlock()
+ return cached, nil
+ }
+ priceMu.RUnlock()
+
+ prices, err := fetchCoinGeckoPrices()
+ if err != nil {
+ return PriceResponse{}, err
+ }
+
+ priceMu.Lock()
+ priceCache = prices
+ priceCacheTime = time.Now()
+ priceMu.Unlock()
+
+ return prices, nil
+}
+
+func fetchCoinGeckoPrices() (PriceResponse, error) {
+ client := &http.Client{Timeout: 10 * time.Second}
+ resp, err := client.Get("https://api.coingecko.com/api/v3/simple/price?ids=solana,ethereum&vs_currencies=usd")
+ if err != nil {
+ return PriceResponse{}, err
+ }
+ defer resp.Body.Close()
+
+ body, err := io.ReadAll(resp.Body)
+ if err != nil {
+ return PriceResponse{}, err
+ }
+
+ var data struct {
+ Solana struct{ USD float64 `json:"usd"` } `json:"solana"`
+ Ethereum struct{ USD float64 `json:"usd"` } `json:"ethereum"`
+ }
+ if err := json.Unmarshal(body, &data); err != nil {
+ return PriceResponse{}, err
+ }
+
+ return PriceResponse{
+ SolUSD: data.Solana.USD,
+ EthUSD: data.Ethereum.USD,
+ }, nil
+}
+
+// GetSOLPrice returns the cached SOL price (used by purchase verification).
+func GetSOLPrice() float64 {
+ priceMu.RLock()
+ defer priceMu.RUnlock()
+ return priceCache.SolUSD
+}
+
+// GetETHPrice returns the cached ETH price.
+func GetETHPrice() float64 {
+ priceMu.RLock()
+ defer priceMu.RUnlock()
+ return priceCache.EthUSD
+}
diff --git a/website/invest-api/handler/purchase.go b/website/invest-api/handler/purchase.go
new file mode 100644
index 0000000..aebb550
--- /dev/null
+++ b/website/invest-api/handler/purchase.go
@@ -0,0 +1,194 @@
+package handler
+
+import (
+ "database/sql"
+ "encoding/json"
+ "fmt"
+ "net/http"
+ "time"
+
+ "github.com/debros/orama-website/invest-api/auth"
+ "github.com/debros/orama-website/invest-api/db"
+ "github.com/debros/orama-website/invest-api/helius"
+)
+
+type TokenPurchaseRequest struct {
+ AmountPaid float64 `json:"amount_paid"`
+ PayCurrency string `json:"pay_currency"`
+ TxHash string `json:"tx_hash"`
+}
+
+type LicensePurchaseRequest struct {
+ AmountPaid float64 `json:"amount_paid"`
+ PayCurrency string `json:"pay_currency"`
+ TxHash string `json:"tx_hash"`
+ ClaimedViaNFT bool `json:"claimed_via_nft"`
+}
+
+func TokenPurchaseHandler(database *sql.DB) http.HandlerFunc {
+ return func(w http.ResponseWriter, r *http.Request) {
+ wallet, chain, ok := auth.WalletFromContext(r.Context())
+ if !ok {
+ jsonError(w, http.StatusUnauthorized, "wallet required")
+ return
+ }
+
+ var req TokenPurchaseRequest
+ if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
+ jsonError(w, http.StatusBadRequest, "invalid request body")
+ return
+ }
+
+ if req.TxHash == "" {
+ jsonError(w, http.StatusBadRequest, "tx_hash is required")
+ return
+ }
+ if req.AmountPaid < db.MinTokenPurchaseUSD {
+ jsonError(w, http.StatusBadRequest, fmt.Sprintf("minimum purchase is $%.0f", db.MinTokenPurchaseUSD))
+ return
+ }
+
+ tokensAllocated := req.AmountPaid / db.TokenPrice
+
+ var sold float64
+ database.QueryRow("SELECT COALESCE(SUM(tokens_allocated), 0) FROM token_purchases").Scan(&sold)
+ if sold+tokensAllocated > db.TotalTokenAllocation {
+ jsonError(w, http.StatusConflict, "not enough tokens remaining in pre-sale allocation")
+ return
+ }
+
+ var existing int
+ database.QueryRow("SELECT COUNT(*) FROM token_purchases WHERE tx_hash = ?", req.TxHash).Scan(&existing)
+ if existing > 0 {
+ jsonError(w, http.StatusConflict, "transaction already recorded")
+ return
+ }
+
+ _, err := database.Exec(
+ "INSERT INTO token_purchases (wallet, chain, amount_paid, pay_currency, tokens_allocated, tx_hash) VALUES (?, ?, ?, ?, ?, ?)",
+ wallet, chain, req.AmountPaid, req.PayCurrency, tokensAllocated, req.TxHash,
+ )
+ if err != nil {
+ jsonError(w, http.StatusInternalServerError, "failed to record purchase")
+ return
+ }
+
+ logActivity(database, "token_purchase", wallet, fmt.Sprintf("%.0f $ORAMA for $%.2f %s", tokensAllocated, req.AmountPaid, req.PayCurrency))
+
+ jsonResponse(w, http.StatusCreated, map[string]any{
+ "tokens_allocated": tokensAllocated,
+ "tx_hash": req.TxHash,
+ })
+ }
+}
+
+func LicensePurchaseHandler(database *sql.DB, heliusClient *helius.Client) http.HandlerFunc {
+ return func(w http.ResponseWriter, r *http.Request) {
+ wallet, chain, ok := auth.WalletFromContext(r.Context())
+ if !ok {
+ jsonError(w, http.StatusUnauthorized, "wallet required")
+ return
+ }
+
+ var req LicensePurchaseRequest
+ if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
+ jsonError(w, http.StatusBadRequest, "invalid request body")
+ return
+ }
+
+ // NFT claim: verify on-chain ownership
+ if req.ClaimedViaNFT {
+ if chain != "sol" {
+ jsonError(w, http.StatusBadRequest, "NFT claims require a Solana wallet")
+ return
+ }
+
+ // Check for existing active NFT claim (allow re-claim if revoked)
+ var nftClaimStatus string
+ claimErr := database.QueryRow(
+ "SELECT status FROM nft_license_verification WHERE wallet = ?", wallet,
+ ).Scan(&nftClaimStatus)
+ if claimErr == nil && nftClaimStatus == "active" {
+ jsonError(w, http.StatusConflict, "you already have an active free license claim")
+ return
+ }
+
+ // Server-side verification via Helius
+ nftResult, err := heliusClient.CheckNFTs(wallet, db.TeamNFTCollection, db.CommunityNFTCollection)
+ if err != nil {
+ jsonError(w, http.StatusInternalServerError, fmt.Sprintf("failed to verify NFT ownership: %v", err))
+ return
+ }
+ if !nftResult.HasTeamNFT {
+ jsonError(w, http.StatusForbidden, "wallet does not hold a DeBros Team NFT")
+ return
+ }
+ } else {
+ if req.TxHash == "" {
+ jsonError(w, http.StatusBadRequest, "tx_hash is required")
+ return
+ }
+ if req.AmountPaid < db.LicensePrice {
+ jsonError(w, http.StatusBadRequest, fmt.Sprintf("license costs $%.0f", db.LicensePrice))
+ return
+ }
+ }
+
+ var sold int
+ database.QueryRow("SELECT COUNT(*) FROM license_purchases").Scan(&sold)
+ if sold >= db.TotalLicenses {
+ jsonError(w, http.StatusConflict, "all licenses have been sold")
+ return
+ }
+
+ licenseNumber := sold + 1
+ claimedInt := 0
+ if req.ClaimedViaNFT {
+ claimedInt = 1
+ req.AmountPaid = 0
+ req.PayCurrency = "nft_claim"
+ req.TxHash = fmt.Sprintf("nft-claim-%s-%d", wallet[:8], time.Now().Unix())
+ }
+
+ if !req.ClaimedViaNFT {
+ var existing int
+ database.QueryRow("SELECT COUNT(*) FROM license_purchases WHERE tx_hash = ?", req.TxHash).Scan(&existing)
+ if existing > 0 {
+ jsonError(w, http.StatusConflict, "transaction already recorded")
+ return
+ }
+ }
+
+ _, err := database.Exec(
+ "INSERT INTO license_purchases (wallet, chain, amount_paid, pay_currency, tx_hash, license_number, claimed_via_nft) VALUES (?, ?, ?, ?, ?, ?, ?)",
+ wallet, chain, req.AmountPaid, req.PayCurrency, req.TxHash, licenseNumber, claimedInt,
+ )
+ if err != nil {
+ jsonError(w, http.StatusInternalServerError, "failed to record license purchase")
+ return
+ }
+
+ detail := fmt.Sprintf("License #%d", licenseNumber)
+ if req.ClaimedViaNFT {
+ detail += " (DeBros NFT claim)"
+
+ // Register in verification table for periodic checks
+ database.Exec(`
+ INSERT INTO nft_license_verification (wallet, license_id, status)
+ VALUES (?, ?, 'active')
+ ON CONFLICT(wallet) DO UPDATE SET
+ license_id = ?,
+ status = 'active',
+ flagged_at = NULL,
+ warned_at = NULL,
+ revoked_at = NULL
+ `, wallet, licenseNumber, licenseNumber)
+ }
+ logActivity(database, "license_purchase", wallet, detail)
+
+ jsonResponse(w, http.StatusCreated, map[string]any{
+ "license_number": licenseNumber,
+ "claimed_via_nft": req.ClaimedViaNFT,
+ })
+ }
+}
diff --git a/website/invest-api/handler/stats.go b/website/invest-api/handler/stats.go
new file mode 100644
index 0000000..c4c2511
--- /dev/null
+++ b/website/invest-api/handler/stats.go
@@ -0,0 +1,28 @@
+package handler
+
+import (
+ "database/sql"
+ "net/http"
+
+ "github.com/debros/orama-website/invest-api/db"
+)
+
+func StatsHandler(database *sql.DB) http.HandlerFunc {
+ return func(w http.ResponseWriter, r *http.Request) {
+ var stats db.StatsResponse
+
+ database.QueryRow("SELECT COALESCE(SUM(tokens_allocated), 0), COALESCE(SUM(amount_paid), 0) FROM token_purchases").
+ Scan(&stats.TokensSold, &stats.TokenRaised)
+
+ database.QueryRow("SELECT COUNT(*), COALESCE(SUM(amount_paid), 0) FROM license_purchases").
+ Scan(&stats.LicensesSold, &stats.LicenseRaised)
+
+ database.QueryRow("SELECT COUNT(*) FROM whitelist").Scan(&stats.WhitelistCount)
+
+ stats.TokensRemaining = db.TotalTokenAllocation - stats.TokensSold
+ stats.LicensesLeft = db.TotalLicenses - stats.LicensesSold
+ stats.TotalRaised = stats.TokenRaised + stats.LicenseRaised
+
+ jsonResponse(w, http.StatusOK, stats)
+ }
+}
diff --git a/website/invest-api/handler/whitelist.go b/website/invest-api/handler/whitelist.go
new file mode 100644
index 0000000..d703dad
--- /dev/null
+++ b/website/invest-api/handler/whitelist.go
@@ -0,0 +1,41 @@
+package handler
+
+import (
+ "database/sql"
+ "fmt"
+ "net/http"
+
+ "github.com/debros/orama-website/invest-api/auth"
+)
+
+func WhitelistJoinHandler(database *sql.DB) http.HandlerFunc {
+ return func(w http.ResponseWriter, r *http.Request) {
+ wallet, chain, ok := auth.WalletFromContext(r.Context())
+ if !ok {
+ jsonError(w, http.StatusUnauthorized, "wallet required")
+ return
+ }
+
+ var existing int
+ database.QueryRow("SELECT COUNT(*) FROM whitelist WHERE wallet = ?", wallet).Scan(&existing)
+ if existing > 0 {
+ jsonError(w, http.StatusConflict, "wallet already on whitelist")
+ return
+ }
+
+ _, err := database.Exec("INSERT INTO whitelist (wallet, chain) VALUES (?, ?)", wallet, chain)
+ if err != nil {
+ jsonError(w, http.StatusInternalServerError, "failed to join whitelist")
+ return
+ }
+
+ var position int
+ database.QueryRow("SELECT COUNT(*) FROM whitelist").Scan(&position)
+
+ logActivity(database, "whitelist_join", wallet, fmt.Sprintf("Position #%d", position))
+
+ jsonResponse(w, http.StatusCreated, map[string]any{
+ "position": position,
+ })
+ }
+}
diff --git a/website/invest-api/helius/cache.go b/website/invest-api/helius/cache.go
new file mode 100644
index 0000000..31efa70
--- /dev/null
+++ b/website/invest-api/helius/cache.go
@@ -0,0 +1,52 @@
+package helius
+
+import (
+ "sync"
+ "time"
+)
+
+type cacheEntry[T any] struct {
+ value T
+ expiresAt time.Time
+}
+
+type Cache[T any] struct {
+ mu sync.RWMutex
+ entries map[string]cacheEntry[T]
+ ttl time.Duration
+}
+
+func NewCache[T any](ttl time.Duration) *Cache[T] {
+ return &Cache[T]{
+ entries: make(map[string]cacheEntry[T]),
+ ttl: ttl,
+ }
+}
+
+func (c *Cache[T]) Get(key string) (T, bool) {
+ c.mu.RLock()
+ defer c.mu.RUnlock()
+
+ entry, ok := c.entries[key]
+ if !ok || time.Now().After(entry.expiresAt) {
+ var zero T
+ return zero, false
+ }
+ return entry.value, true
+}
+
+func (c *Cache[T]) Set(key string, value T) {
+ c.mu.Lock()
+ defer c.mu.Unlock()
+
+ c.entries[key] = cacheEntry[T]{
+ value: value,
+ expiresAt: time.Now().Add(c.ttl),
+ }
+}
+
+func (c *Cache[T]) Delete(key string) {
+ c.mu.Lock()
+ defer c.mu.Unlock()
+ delete(c.entries, key)
+}
diff --git a/website/invest-api/helius/client.go b/website/invest-api/helius/client.go
new file mode 100644
index 0000000..71cea88
--- /dev/null
+++ b/website/invest-api/helius/client.go
@@ -0,0 +1,208 @@
+package helius
+
+import (
+ "bytes"
+ "encoding/json"
+ "fmt"
+ "io"
+ "net/http"
+ "time"
+)
+
+type Client struct {
+ rpcURL string
+ apiKey string
+ http *http.Client
+ nftCache *Cache[NFTResult]
+ tokCache *Cache[float64]
+}
+
+type NFTResult struct {
+ HasTeamNFT bool
+ HasCommunityNFT bool
+ Count int
+}
+
+func NewClient(apiKey, rpcURL string) *Client {
+ return &Client{
+ rpcURL: rpcURL,
+ apiKey: apiKey,
+ http: &http.Client{Timeout: 15 * time.Second},
+ nftCache: NewCache[NFTResult](5 * time.Minute),
+ tokCache: NewCache[float64](5 * time.Minute),
+ }
+}
+
+// CheckNFTs checks if a wallet holds DeBros Team (100) or Community (700) NFTs.
+func (c *Client) CheckNFTs(wallet, teamCollection, communityCollection string) (NFTResult, error) {
+ cacheKey := "nft:" + wallet
+ if cached, ok := c.nftCache.Get(cacheKey); ok {
+ return cached, nil
+ }
+
+ result := NFTResult{}
+
+ // Check team NFTs
+ teamCount, err := c.searchAssetsByCollection(wallet, teamCollection)
+ if err != nil {
+ return result, fmt.Errorf("failed to check team NFTs: %w", err)
+ }
+
+ // Check community NFTs
+ commCount, err := c.searchAssetsByCollection(wallet, communityCollection)
+ if err != nil {
+ return result, fmt.Errorf("failed to check community NFTs: %w", err)
+ }
+
+ result.HasTeamNFT = teamCount > 0
+ result.HasCommunityNFT = commCount > 0
+ result.Count = teamCount + commCount
+
+ c.nftCache.Set(cacheKey, result)
+ return result, nil
+}
+
+// GetTokenBalance returns the token balance for a specific mint.
+func (c *Client) GetTokenBalance(wallet, mint string) (float64, error) {
+ cacheKey := "token:" + wallet + ":" + mint
+ if cached, ok := c.tokCache.Get(cacheKey); ok {
+ return cached, nil
+ }
+
+ body := map[string]any{
+ "jsonrpc": "2.0",
+ "id": "token-balance",
+ "method": "getTokenAccountsByOwner",
+ "params": []any{
+ wallet,
+ map[string]string{"mint": mint},
+ map[string]string{"encoding": "jsonParsed"},
+ },
+ }
+
+ resp, err := c.rpcCall(body)
+ if err != nil {
+ return 0, err
+ }
+
+ result, ok := resp["result"].(map[string]any)
+ if !ok {
+ return 0, nil
+ }
+
+ value, ok := result["value"].([]any)
+ if !ok || len(value) == 0 {
+ c.tokCache.Set(cacheKey, 0)
+ return 0, nil
+ }
+
+ // Parse the first token account
+ account, ok := value[0].(map[string]any)
+ if !ok {
+ return 0, nil
+ }
+
+ balance := extractUIAmount(account)
+ c.tokCache.Set(cacheKey, balance)
+ return balance, nil
+}
+
+// GetTokenBalanceFresh bypasses cache (used for claims).
+func (c *Client) GetTokenBalanceFresh(wallet, mint string) (float64, error) {
+ cacheKey := "token:" + wallet + ":" + mint
+ c.tokCache.Delete(cacheKey)
+ return c.GetTokenBalance(wallet, mint)
+}
+
+func (c *Client) searchAssetsByCollection(owner, collectionAddr string) (int, error) {
+ body := map[string]any{
+ "jsonrpc": "2.0",
+ "id": "search-assets",
+ "method": "searchAssets",
+ "params": map[string]any{
+ "ownerAddress": owner,
+ "grouping": []any{"collection", collectionAddr},
+ "page": 1,
+ "limit": 1000,
+ },
+ }
+
+ resp, err := c.rpcCall(body)
+ if err != nil {
+ return 0, err
+ }
+
+ result, ok := resp["result"].(map[string]any)
+ if !ok {
+ return 0, nil
+ }
+
+ total, ok := result["total"].(float64)
+ if ok {
+ return int(total), nil
+ }
+
+ items, ok := result["items"].([]any)
+ if !ok {
+ return 0, nil
+ }
+ return len(items), nil
+}
+
+func (c *Client) rpcCall(body map[string]any) (map[string]any, error) {
+ jsonBody, err := json.Marshal(body)
+ if err != nil {
+ return nil, fmt.Errorf("failed to marshal request: %w", err)
+ }
+
+ resp, err := c.http.Post(c.rpcURL, "application/json", bytes.NewReader(jsonBody))
+ if err != nil {
+ return nil, fmt.Errorf("helius request failed: %w", err)
+ }
+ defer resp.Body.Close()
+
+ respBody, err := io.ReadAll(resp.Body)
+ if err != nil {
+ return nil, fmt.Errorf("failed to read response: %w", err)
+ }
+
+ if resp.StatusCode != http.StatusOK {
+ return nil, fmt.Errorf("helius returned status %d: %s", resp.StatusCode, string(respBody))
+ }
+
+ var result map[string]any
+ if err := json.Unmarshal(respBody, &result); err != nil {
+ return nil, fmt.Errorf("failed to parse response: %w", err)
+ }
+
+ if errObj, ok := result["error"]; ok {
+ return nil, fmt.Errorf("helius RPC error: %v", errObj)
+ }
+
+ return result, nil
+}
+
+func extractUIAmount(account map[string]any) float64 {
+ data, _ := account["account"].(map[string]any)
+ if data == nil {
+ return 0
+ }
+ dataInner, _ := data["data"].(map[string]any)
+ if dataInner == nil {
+ return 0
+ }
+ parsed, _ := dataInner["parsed"].(map[string]any)
+ if parsed == nil {
+ return 0
+ }
+ info, _ := parsed["info"].(map[string]any)
+ if info == nil {
+ return 0
+ }
+ tokenAmount, _ := info["tokenAmount"].(map[string]any)
+ if tokenAmount == nil {
+ return 0
+ }
+ uiAmount, _ := tokenAmount["uiAmount"].(float64)
+ return uiAmount
+}
diff --git a/website/invest-api/main.go b/website/invest-api/main.go
new file mode 100644
index 0000000..f6fec37
--- /dev/null
+++ b/website/invest-api/main.go
@@ -0,0 +1,78 @@
+package main
+
+import (
+ "context"
+ "log"
+ "net/http"
+ "os"
+ "os/signal"
+ "syscall"
+ "time"
+
+ "github.com/debros/orama-website/invest-api/config"
+ "github.com/debros/orama-website/invest-api/db"
+ "github.com/debros/orama-website/invest-api/helius"
+ "github.com/debros/orama-website/invest-api/router"
+ "github.com/debros/orama-website/invest-api/verifier"
+)
+
+func main() {
+ cfg, err := config.Load()
+ if err != nil {
+ log.Fatalf("config error: %v", err)
+ }
+
+ database, err := db.Open(cfg.DBPath)
+ if err != nil {
+ log.Fatalf("database error: %v", err)
+ }
+ defer database.Close()
+
+ if err := db.Migrate(database); err != nil {
+ log.Fatalf("migration error: %v", err)
+ }
+
+ if err := db.Seed(database); err != nil {
+ log.Fatalf("seed error: %v", err)
+ }
+
+ heliusClient := helius.NewClient(cfg.HeliusAPIKey, cfg.HeliusRPCURL)
+ handler := router.New(database, cfg.JWTSecret, heliusClient)
+
+ // Start background verifier
+ ctx, cancel := context.WithCancel(context.Background())
+ defer cancel()
+
+ v := verifier.New(database, heliusClient)
+ go v.Run(ctx)
+
+ // HTTP server with graceful shutdown
+ srv := &http.Server{
+ Addr: ":" + cfg.Port,
+ Handler: handler,
+ }
+
+ go func() {
+ log.Printf("invest-api listening on :%s", cfg.Port)
+ if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
+ log.Fatalf("server error: %v", err)
+ }
+ }()
+
+ // Wait for shutdown signal
+ quit := make(chan os.Signal, 1)
+ signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
+ <-quit
+
+ log.Println("shutting down...")
+ cancel() // Stop verifier
+
+ shutdownCtx, shutdownCancel := context.WithTimeout(context.Background(), 10*time.Second)
+ defer shutdownCancel()
+
+ if err := srv.Shutdown(shutdownCtx); err != nil {
+ log.Fatalf("shutdown error: %v", err)
+ }
+
+ log.Println("invest-api stopped")
+}
diff --git a/website/invest-api/middleware/auth.go b/website/invest-api/middleware/auth.go
new file mode 100644
index 0000000..bfbb8c0
--- /dev/null
+++ b/website/invest-api/middleware/auth.go
@@ -0,0 +1,41 @@
+package middleware
+
+import (
+ "net/http"
+ "strings"
+
+ "github.com/debros/orama-website/invest-api/auth"
+)
+
+// RequireAuth validates JWT from Authorization header.
+// Falls back to X-Wallet-Address/X-Wallet-Chain headers for backward compatibility.
+func RequireAuth(jwtSecret string) func(http.Handler) http.Handler {
+ return func(next http.Handler) http.Handler {
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ // Try JWT first
+ authHeader := r.Header.Get("Authorization")
+ if strings.HasPrefix(authHeader, "Bearer ") {
+ tokenStr := strings.TrimPrefix(authHeader, "Bearer ")
+ claims, err := auth.ParseToken(tokenStr, jwtSecret)
+ if err != nil {
+ http.Error(w, `{"error":"invalid or expired token"}`, http.StatusUnauthorized)
+ return
+ }
+ ctx := auth.WithWallet(r.Context(), claims.Wallet, claims.Chain)
+ next.ServeHTTP(w, r.WithContext(ctx))
+ return
+ }
+
+ // Fallback: legacy header-based auth (remove after frontend migration)
+ wallet := strings.TrimSpace(r.Header.Get("X-Wallet-Address"))
+ chain := strings.ToLower(strings.TrimSpace(r.Header.Get("X-Wallet-Chain")))
+ if wallet != "" && (chain == "sol" || chain == "evm") {
+ ctx := auth.WithWallet(r.Context(), wallet, chain)
+ next.ServeHTTP(w, r.WithContext(ctx))
+ return
+ }
+
+ http.Error(w, `{"error":"authentication required"}`, http.StatusUnauthorized)
+ })
+ }
+}
diff --git a/website/invest-api/middleware/cors.go b/website/invest-api/middleware/cors.go
new file mode 100644
index 0000000..15a41d2
--- /dev/null
+++ b/website/invest-api/middleware/cors.go
@@ -0,0 +1,23 @@
+package middleware
+
+import "net/http"
+
+func CORS(next http.Handler) http.Handler {
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ origin := r.Header.Get("Origin")
+ if origin == "" {
+ origin = "*"
+ }
+ w.Header().Set("Access-Control-Allow-Origin", origin)
+ w.Header().Set("Access-Control-Allow-Methods", "GET, POST, OPTIONS")
+ w.Header().Set("Access-Control-Allow-Headers", "Content-Type, Authorization, X-Wallet-Address, X-Wallet-Chain")
+ w.Header().Set("Access-Control-Max-Age", "86400")
+
+ if r.Method == http.MethodOptions {
+ w.WriteHeader(http.StatusNoContent)
+ return
+ }
+
+ next.ServeHTTP(w, r)
+ })
+}
diff --git a/website/invest-api/router/router.go b/website/invest-api/router/router.go
new file mode 100644
index 0000000..59864ee
--- /dev/null
+++ b/website/invest-api/router/router.go
@@ -0,0 +1,44 @@
+package router
+
+import (
+ "database/sql"
+ "net/http"
+
+ "github.com/debros/orama-website/invest-api/auth"
+ "github.com/debros/orama-website/invest-api/handler"
+ "github.com/debros/orama-website/invest-api/helius"
+ mw "github.com/debros/orama-website/invest-api/middleware"
+)
+
+func New(database *sql.DB, jwtSecret string, heliusClient *helius.Client) http.Handler {
+ mux := http.NewServeMux()
+ requireAuth := mw.RequireAuth(jwtSecret)
+
+ // Public endpoints
+ mux.HandleFunc("GET /api/stats", handler.StatsHandler(database))
+ mux.HandleFunc("GET /api/activity", handler.ActivityHandler(database))
+ mux.HandleFunc("GET /api/price", handler.PriceHandler())
+
+ // Auth
+ mux.HandleFunc("POST /api/auth/login", auth.LoginHandler(database, jwtSecret))
+
+ // Authenticated endpoints
+ authed := http.NewServeMux()
+ authed.HandleFunc("GET /api/me", handler.MeHandler(database))
+ authed.HandleFunc("POST /api/purchase/token", handler.TokenPurchaseHandler(database))
+ authed.HandleFunc("POST /api/purchase/license", handler.LicensePurchaseHandler(database, heliusClient))
+ authed.HandleFunc("POST /api/whitelist/join", handler.WhitelistJoinHandler(database))
+ authed.HandleFunc("GET /api/nft/status", handler.NftStatusHandler(heliusClient))
+ authed.HandleFunc("GET /api/anchat/balance", handler.AnchatBalanceHandler(database, heliusClient))
+ authed.HandleFunc("POST /api/anchat/claim", handler.AnchatClaimHandler(database, heliusClient))
+
+ // Wire authenticated routes through auth middleware
+ mux.Handle("GET /api/me", requireAuth(authed))
+ mux.Handle("POST /api/purchase/", requireAuth(authed))
+ mux.Handle("POST /api/whitelist/", requireAuth(authed))
+ mux.Handle("GET /api/nft/", requireAuth(authed))
+ mux.Handle("GET /api/anchat/", requireAuth(authed))
+ mux.Handle("POST /api/anchat/", requireAuth(authed))
+
+ return mw.CORS(mux)
+}
diff --git a/website/invest-api/start.sh b/website/invest-api/start.sh
new file mode 100755
index 0000000..aca67ba
--- /dev/null
+++ b/website/invest-api/start.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+set -e
+
+cd "$(dirname "$0")"
+
+echo "Building invest-api..."
+go build -o invest-api .
+
+echo "Starting invest-api on port ${PORT:-8090}..."
+./invest-api
diff --git a/website/invest-api/verifier/verifier.go b/website/invest-api/verifier/verifier.go
new file mode 100644
index 0000000..95f7a88
--- /dev/null
+++ b/website/invest-api/verifier/verifier.go
@@ -0,0 +1,210 @@
+package verifier
+
+import (
+ "context"
+ "database/sql"
+ "log"
+ "time"
+
+ dbpkg "github.com/debros/orama-website/invest-api/db"
+ "github.com/debros/orama-website/invest-api/helius"
+)
+
+const (
+ SweepInterval = 30 * time.Minute
+ GracePeriod = 5 * time.Minute
+)
+
+// Verifier periodically checks that claim holders still hold their assets.
+// State machine: active → flagged → warned → revoked (each transition requires
+// the asset to still be missing after GracePeriod).
+type Verifier struct {
+ db *sql.DB
+ helius *helius.Client
+}
+
+func New(db *sql.DB, heliusClient *helius.Client) *Verifier {
+ return &Verifier{db: db, helius: heliusClient}
+}
+
+// Run starts the background sweep loop. Blocks until ctx is cancelled.
+func (v *Verifier) Run(ctx context.Context) {
+ log.Println("[verifier] starting background verification (interval:", SweepInterval, ")")
+
+ // Run once on startup to catch anything missed during downtime
+ v.sweep()
+
+ ticker := time.NewTicker(SweepInterval)
+ defer ticker.Stop()
+
+ for {
+ select {
+ case <-ctx.Done():
+ log.Println("[verifier] shutting down")
+ return
+ case <-ticker.C:
+ v.sweep()
+ }
+ }
+}
+
+func (v *Verifier) sweep() {
+ log.Println("[verifier] starting sweep...")
+ v.verifyAnchatClaims()
+ v.verifyNftLicenses()
+ log.Println("[verifier] sweep complete")
+}
+
+// ── $ANCHAT claim verification ──
+
+func (v *Verifier) verifyAnchatClaims() {
+ rows, err := v.db.Query(
+ "SELECT id, wallet, status, flagged_at, warned_at FROM anchat_claims WHERE status != 'revoked'",
+ )
+ if err != nil {
+ log.Printf("[verifier] failed to query anchat_claims: %v", err)
+ return
+ }
+ defer rows.Close()
+
+ for rows.Next() {
+ var id int
+ var wallet, status string
+ var flaggedAt, warnedAt sql.NullString
+
+ if err := rows.Scan(&id, &wallet, &status, &flaggedAt, &warnedAt); err != nil {
+ log.Printf("[verifier] scan error: %v", err)
+ continue
+ }
+
+ balance, err := v.helius.GetTokenBalanceFresh(wallet, dbpkg.AnchatMint)
+ if err != nil {
+ log.Printf("[verifier] helius error for %s: %v", truncate(wallet), err)
+ continue // Don't change state on RPC errors
+ }
+
+ holdsAsset := balance >= dbpkg.AnchatMinBalance
+ v.updateState(id, "anchat_claims", wallet, status, holdsAsset, flaggedAt, warnedAt, "anchat_claim")
+ }
+}
+
+// ── NFT license verification ──
+
+func (v *Verifier) verifyNftLicenses() {
+ rows, err := v.db.Query(
+ "SELECT id, wallet, status, flagged_at, warned_at FROM nft_license_verification WHERE status != 'revoked'",
+ )
+ if err != nil {
+ log.Printf("[verifier] failed to query nft_license_verification: %v", err)
+ return
+ }
+ defer rows.Close()
+
+ for rows.Next() {
+ var id int
+ var wallet, status string
+ var flaggedAt, warnedAt sql.NullString
+
+ if err := rows.Scan(&id, &wallet, &status, &flaggedAt, &warnedAt); err != nil {
+ log.Printf("[verifier] scan error: %v", err)
+ continue
+ }
+
+ nftResult, err := v.helius.CheckNFTs(wallet, dbpkg.TeamNFTCollection, dbpkg.CommunityNFTCollection)
+ if err != nil {
+ log.Printf("[verifier] helius NFT error for %s: %v", truncate(wallet), err)
+ continue
+ }
+
+ holdsAsset := nftResult.HasTeamNFT
+ v.updateState(id, "nft_license_verification", wallet, status, holdsAsset, flaggedAt, warnedAt, "nft_license")
+ }
+}
+
+// ── State machine logic ──
+
+func (v *Verifier) updateState(
+ id int,
+ table, wallet, currentStatus string,
+ holdsAsset bool,
+ flaggedAt, warnedAt sql.NullString,
+ claimType string,
+) {
+ now := time.Now()
+
+ if holdsAsset {
+ // Asset is back — reset to active
+ if currentStatus != "active" {
+ v.db.Exec(
+ "UPDATE "+table+" SET status = 'active', flagged_at = NULL, warned_at = NULL, revoked_at = NULL WHERE id = ?",
+ id,
+ )
+ log.Printf("[verifier] %s %s: RESTORED to active (asset found again)", table, truncate(wallet))
+ v.logActivity(claimType+"_restored", wallet, "Asset detected, claim restored")
+ }
+ return
+ }
+
+ // Asset NOT found — advance state machine
+ switch currentStatus {
+ case "active":
+ // First miss → flag
+ v.db.Exec("UPDATE "+table+" SET status = 'flagged', flagged_at = ? WHERE id = ?", now.Format(time.RFC3339), id)
+ log.Printf("[verifier] %s %s: FLAGGED (asset not found, check 1/3)", table, truncate(wallet))
+
+ case "flagged":
+ // Second miss — check grace period
+ if !flaggedAt.Valid {
+ return
+ }
+ flagTime, err := time.Parse(time.RFC3339, flaggedAt.String)
+ if err != nil {
+ return
+ }
+ if now.Sub(flagTime) < GracePeriod {
+ return // Too soon, wait
+ }
+ v.db.Exec("UPDATE "+table+" SET status = 'warned', warned_at = ? WHERE id = ?", now.Format(time.RFC3339), id)
+ log.Printf("[verifier] %s %s: WARNED (asset not found, check 2/3)", table, truncate(wallet))
+
+ case "warned":
+ // Third miss — check grace period from warned_at
+ if !warnedAt.Valid {
+ return
+ }
+ warnTime, err := time.Parse(time.RFC3339, warnedAt.String)
+ if err != nil {
+ return
+ }
+ if now.Sub(warnTime) < GracePeriod {
+ return
+ }
+ // REVOKE
+ v.db.Exec("UPDATE "+table+" SET status = 'revoked', revoked_at = ? WHERE id = ?", now.Format(time.RFC3339), id)
+ log.Printf("[verifier] %s %s: REVOKED (asset not found, check 3/3)", table, truncate(wallet))
+ v.logActivity(claimType+"_revoked", wallet, "Claim revoked — asset no longer held")
+
+ // For NFT licenses: also mark the license_purchase as revoked
+ if table == "nft_license_verification" {
+ v.db.Exec(
+ "UPDATE license_purchases SET claimed_via_nft = -1 WHERE wallet = ? AND claimed_via_nft = 1",
+ wallet,
+ )
+ }
+ }
+}
+
+func (v *Verifier) logActivity(eventType, wallet, detail string) {
+ truncated := truncate(wallet)
+ v.db.Exec(
+ "INSERT INTO activity_log (event_type, wallet, detail) VALUES (?, ?, ?)",
+ eventType, truncated, detail,
+ )
+}
+
+func truncate(wallet string) string {
+ if len(wallet) > 10 {
+ return wallet[:6] + "..." + wallet[len(wallet)-4:]
+ }
+ return wallet
+}
diff --git a/website/package.json b/website/package.json
new file mode 100644
index 0000000..04c3c59
--- /dev/null
+++ b/website/package.json
@@ -0,0 +1,56 @@
+{
+ "name": "orama-website",
+ "private": true,
+ "version": "0.1.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "tsc -b && vite build",
+ "preview": "vite preview"
+ },
+ "dependencies": {
+ "@gsap/react": "^2.1.2",
+ "@mdx-js/react": "^3.1.1",
+ "@radix-ui/react-accordion": "^1.2.12",
+ "@radix-ui/react-dialog": "^1.1.15",
+ "@radix-ui/react-dropdown-menu": "^2.1.16",
+ "@radix-ui/react-navigation-menu": "^1.2.14",
+ "@radix-ui/react-slot": "^1.2.4",
+ "@radix-ui/react-tabs": "^1.1.13",
+ "@radix-ui/react-tooltip": "^1.2.8",
+ "@react-three/drei": "^10.7.7",
+ "@react-three/fiber": "^9.5.0",
+ "@solana/wallet-adapter-base": "^0.9.27",
+ "@solana/wallet-adapter-react": "^0.15.39",
+ "@solana/wallet-adapter-react-ui": "^0.9.39",
+ "@solana/wallet-adapter-wallets": "^0.19.37",
+ "@solana/web3.js": "^1.98.4",
+ "class-variance-authority": "^0.7.0",
+ "clsx": "^2.1.0",
+ "ethers": "^6.16.0",
+ "gsap": "^3.14.2",
+ "lightweight-charts": "^5.1.0",
+ "lucide-react": "^0.511.0",
+ "mermaid": "^11.12.3",
+ "react": "^19.1.0",
+ "react-dom": "^19.1.0",
+ "react-router": "^7.6.1",
+ "rehype-slug": "^6.0.0",
+ "remark-gfm": "^4.0.1",
+ "shiki": "^4.0.0",
+ "tailwind-merge": "^3.3.0",
+ "three": "^0.183.2"
+ },
+ "devDependencies": {
+ "@mdx-js/rollup": "^3.1.1",
+ "@tailwindcss/vite": "^4.1.8",
+ "@types/mdx": "^2.0.13",
+ "@types/react": "^19.2.7",
+ "@types/react-dom": "^19.2.3",
+ "@types/three": "^0.183.1",
+ "@vitejs/plugin-react": "^4.5.2",
+ "tailwindcss": "^4.1.8",
+ "typescript": "^5.8.3",
+ "vite": "^7.0.0"
+ }
+}
diff --git a/website/pnpm-lock.yaml b/website/pnpm-lock.yaml
new file mode 100644
index 0000000..1bb8b1e
--- /dev/null
+++ b/website/pnpm-lock.yaml
@@ -0,0 +1,13940 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@gsap/react':
+ specifier: ^2.1.2
+ version: 2.1.2(gsap@3.14.2)(react@19.2.4)
+ '@mdx-js/react':
+ specifier: ^3.1.1
+ version: 3.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-accordion':
+ specifier: ^1.2.12
+ version: 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-dialog':
+ specifier: ^1.1.15
+ version: 1.1.15(@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)
+ '@radix-ui/react-dropdown-menu':
+ specifier: ^2.1.16
+ version: 2.1.16(@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)
+ '@radix-ui/react-navigation-menu':
+ specifier: ^1.2.14
+ version: 1.2.14(@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)
+ '@radix-ui/react-slot':
+ specifier: ^1.2.4
+ version: 1.2.4(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-tabs':
+ specifier: ^1.1.13
+ version: 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-tooltip':
+ specifier: ^1.2.8
+ 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)(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)(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)(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)
+ '@solana/wallet-adapter-base':
+ specifier: ^0.9.27
+ version: 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))
+ '@solana/wallet-adapter-react':
+ specifier: ^0.15.39
+ version: 0.15.39(@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))(react@19.2.4)(typescript@5.9.3)
+ '@solana/wallet-adapter-react-ui':
+ specifier: ^0.9.39
+ version: 0.9.39(@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-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)
+ '@solana/wallet-adapter-wallets':
+ specifier: ^0.19.37
+ version: 0.19.37(@babel/runtime@7.29.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)(utf-8-validate@6.0.6)))(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))(@types/react@19.2.14)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-dom@19.2.4(react@19.2.4))(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(react@19.2.4)(tslib@2.8.1)(typescript@5.9.3)(utf-8-validate@6.0.6)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))(zod@3.22.4)
+ '@solana/web3.js':
+ specifier: ^1.98.4
+ version: 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+ class-variance-authority:
+ specifier: ^0.7.0
+ version: 0.7.1
+ clsx:
+ specifier: ^2.1.0
+ version: 2.1.1
+ ethers:
+ specifier: ^6.16.0
+ version: 6.16.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ gsap:
+ specifier: ^3.14.2
+ version: 3.14.2
+ lightweight-charts:
+ specifier: ^5.1.0
+ version: 5.1.0
+ lucide-react:
+ specifier: ^0.511.0
+ version: 0.511.0(react@19.2.4)
+ mermaid:
+ specifier: ^11.12.3
+ version: 11.12.3
+ react:
+ specifier: ^19.1.0
+ version: 19.2.4
+ react-dom:
+ specifier: ^19.1.0
+ version: 19.2.4(react@19.2.4)
+ react-router:
+ specifier: ^7.6.1
+ version: 7.13.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ rehype-slug:
+ specifier: ^6.0.0
+ version: 6.0.0
+ remark-gfm:
+ specifier: ^4.0.1
+ version: 4.0.1
+ shiki:
+ specifier: ^4.0.0
+ version: 4.0.0
+ tailwind-merge:
+ specifier: ^3.3.0
+ version: 3.5.0
+ three:
+ specifier: ^0.183.2
+ version: 0.183.2
+ devDependencies:
+ '@mdx-js/rollup':
+ specifier: ^3.1.1
+ version: 3.1.1(rollup@4.59.0)
+ '@tailwindcss/vite':
+ specifier: ^4.1.8
+ version: 4.2.1(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.1)(yaml@2.8.2))
+ '@types/mdx':
+ specifier: ^2.0.13
+ version: 2.0.13
+ '@types/react':
+ specifier: ^19.2.7
+ version: 19.2.14
+ '@types/react-dom':
+ specifier: ^19.2.3
+ version: 19.2.3(@types/react@19.2.14)
+ '@types/three':
+ specifier: ^0.183.1
+ version: 0.183.1
+ '@vitejs/plugin-react':
+ specifier: ^4.5.2
+ version: 4.7.0(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.1)(yaml@2.8.2))
+ tailwindcss:
+ specifier: ^4.1.8
+ version: 4.2.1
+ typescript:
+ specifier: ^5.8.3
+ version: 5.9.3
+ vite:
+ specifier: ^7.0.0
+ version: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.1)(yaml@2.8.2)
+
+packages:
+
+ '@adraffy/ens-normalize@1.10.1':
+ resolution: {integrity: sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==}
+
+ '@adraffy/ens-normalize@1.11.1':
+ resolution: {integrity: sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ==}
+
+ '@antfu/install-pkg@1.1.0':
+ resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==}
+
+ '@babel/code-frame@7.29.0':
+ resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/compat-data@7.29.0':
+ resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/core@7.29.0':
+ resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/generator@7.29.1':
+ resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-compilation-targets@7.28.6':
+ resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-globals@7.28.0':
+ resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-imports@7.28.6':
+ resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-transforms@7.28.6':
+ resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-plugin-utils@7.28.6':
+ resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-string-parser@7.27.1':
+ resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-identifier@7.28.5':
+ resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-option@7.27.1':
+ resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helpers@7.28.6':
+ resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/parser@7.29.0':
+ resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ '@babel/plugin-syntax-async-generators@7.8.4':
+ resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-bigint@7.8.3':
+ resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-class-properties@7.12.13':
+ resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-class-static-block@7.14.5':
+ resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-import-attributes@7.28.6':
+ resolution: {integrity: sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-import-meta@7.10.4':
+ resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-json-strings@7.8.3':
+ resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-logical-assignment-operators@7.10.4':
+ resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3':
+ resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-numeric-separator@7.10.4':
+ resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-object-rest-spread@7.8.3':
+ resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-optional-catch-binding@7.8.3':
+ resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-optional-chaining@7.8.3':
+ resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-private-property-in-object@7.14.5':
+ resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-top-level-await@7.14.5':
+ resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-react-jsx-self@7.27.1':
+ resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-react-jsx-source@7.27.1':
+ resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/runtime@7.29.2':
+ resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/template@7.28.6':
+ resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/traverse@7.29.0':
+ resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/types@7.29.0':
+ resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==}
+ engines: {node: '>=6.9.0'}
+
+ '@braintree/sanitize-url@7.1.2':
+ resolution: {integrity: sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA==}
+
+ '@chevrotain/cst-dts-gen@11.1.1':
+ resolution: {integrity: sha512-fRHyv6/f542qQqiRGalrfJl/evD39mAvbJLCekPazhiextEatq1Jx1K/i9gSd5NNO0ds03ek0Cbo/4uVKmOBcw==}
+
+ '@chevrotain/gast@11.1.1':
+ resolution: {integrity: sha512-Ko/5vPEYy1vn5CbCjjvnSO4U7GgxyGm+dfUZZJIWTlQFkXkyym0jFYrWEU10hyCjrA7rQtiHtBr0EaZqvHFZvg==}
+
+ '@chevrotain/regexp-to-ast@11.1.1':
+ resolution: {integrity: sha512-ctRw1OKSXkOrR8VTvOxrQ5USEc4sNrfwXHa1NuTcR7wre4YbjPcKw+82C2uylg/TEwFRgwLmbhlln4qkmDyteg==}
+
+ '@chevrotain/types@11.1.1':
+ resolution: {integrity: sha512-wb2ToxG8LkgPYnKe9FH8oGn3TMCBdnwiuNC5l5y+CtlaVRbCytU0kbVsk6CGrqTL4ZN4ksJa0TXOYbxpbthtqw==}
+
+ '@chevrotain/utils@11.1.1':
+ resolution: {integrity: sha512-71eTYMzYXYSFPrbg/ZwftSaSDld7UYlS8OQa3lNnn9jzNtpFbaReRRyghzqS7rI3CDaorqpPJJcXGHK+FE1TVQ==}
+
+ '@dimforge/rapier3d-compat@0.12.0':
+ resolution: {integrity: sha512-uekIGetywIgopfD97oDL5PfeezkFpNhwlzlaEYNOA0N6ghdsOvh/HYjSMek5Q2O1PYvRSDFcqFVJl4r4ZBwOow==}
+
+ '@emurgo/cardano-serialization-lib-browser@13.2.1':
+ resolution: {integrity: sha512-7RfX1gI16Vj2DgCp/ZoXqyLAakWo6+X95ku/rYGbVzuS/1etrlSiJmdbmdm+eYmszMlGQjrtOJQeVLXoj4L/Ag==}
+
+ '@emurgo/cardano-serialization-lib-nodejs@13.2.0':
+ resolution: {integrity: sha512-Bz1zLGEqBQ0BVkqt1OgMxdBOE3BdUWUd7Ly9Ecr/aUwkA8AV1w1XzBMe4xblmJHnB1XXNlPH4SraXCvO+q0Mig==}
+
+ '@esbuild/aix-ppc64@0.27.3':
+ resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/android-arm64@0.27.3':
+ resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm@0.27.3':
+ resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-x64@0.27.3':
+ resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/darwin-arm64@0.27.3':
+ resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.27.3':
+ resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/freebsd-arm64@0.27.3':
+ resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.27.3':
+ resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/linux-arm64@0.27.3':
+ resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.27.3':
+ resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.27.3':
+ resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.27.3':
+ resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.27.3':
+ resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.27.3':
+ resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.27.3':
+ resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.27.3':
+ resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.27.3':
+ resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/netbsd-arm64@0.27.3':
+ resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.27.3':
+ resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/openbsd-arm64@0.27.3':
+ resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.27.3':
+ resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openharmony-arm64@0.27.3':
+ resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@esbuild/sunos-x64@0.27.3':
+ resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/win32-arm64@0.27.3':
+ resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.27.3':
+ resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.27.3':
+ resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
+ '@ethereumjs/common@10.1.1':
+ resolution: {integrity: sha512-NefPzPlrJ9w+NWVe06P+sHZQU98E1AEU9vhiHJEVT2wEcNBC1YX6hON9+smrfbn86C4U1pb2zbvjhkF+n/LKBw==}
+
+ '@ethereumjs/rlp@10.1.1':
+ resolution: {integrity: sha512-jbnWTEwcpoY+gE0r+wxfDG9zgiu54DcTcwnc9sX3DsqKR4l5K7x2V8mQL3Et6hURa4DuT9g7z6ukwpBLFchszg==}
+ engines: {node: '>=20'}
+ hasBin: true
+
+ '@ethereumjs/rlp@5.0.2':
+ resolution: {integrity: sha512-DziebCdg4JpGlEqEdGgXmjqcFoJi+JGulUXwEjsZGAscAQ7MyD/7LE/GVCP29vEQxKc7AAwjT3A2ywHp2xfoCA==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ '@ethereumjs/tx@10.1.1':
+ resolution: {integrity: sha512-Kz8GWIKQjEQB60ko9hsYDX3rZMHZZOTcmm6OFl855Lu3padVnf5ZactUKM6nmWPsumHED5bWDjO32novZd1zyw==}
+ engines: {node: '>=20'}
+
+ '@ethereumjs/util@10.1.1':
+ resolution: {integrity: sha512-r2EhaeEmLZXVs1dT2HJFQysAkr63ZWATu/9tgYSp1IlvjvwyC++DLg5kCDwMM49HBq3sOAhrPnXkoqf9DV2gbw==}
+ engines: {node: '>=20'}
+
+ '@ethereumjs/util@9.1.0':
+ resolution: {integrity: sha512-XBEKsYqLGXLah9PNJbgdkigthkG7TAGvlD/sH12beMXEyHDyigfcbdvHhmLyDWgDyOJn4QwiQUaF7yeuhnjdog==}
+ engines: {node: '>=18'}
+
+ '@fivebinaries/coin-selection@3.0.0':
+ resolution: {integrity: sha512-h25Pn1ZA7oqQBQDodGAgIsQt66T2wDge9onBKNqE66WNWL0KJiKJbpij8YOLo5AAlEIg5IS7EB1QjBgDOIg6DQ==}
+
+ '@floating-ui/core@1.7.4':
+ resolution: {integrity: sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg==}
+
+ '@floating-ui/dom@1.7.5':
+ resolution: {integrity: sha512-N0bD2kIPInNHUHehXhMke1rBGs1dwqvC9O9KYMyyjK7iXt7GAhnro7UlcuYcGdS/yYOlq0MAVgrow8IbWJwyqg==}
+
+ '@floating-ui/react-dom@2.1.7':
+ resolution: {integrity: sha512-0tLRojf/1Go2JgEVm+3Frg9A3IW8bJgKgdO0BN5RkF//ufuz2joZM63Npau2ff3J6lUVYgDSNzNkR+aH3IVfjg==}
+ peerDependencies:
+ react: '>=16.8.0'
+ react-dom: '>=16.8.0'
+
+ '@floating-ui/utils@0.2.10':
+ resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==}
+
+ '@fractalwagmi/popup-connection@1.1.1':
+ resolution: {integrity: sha512-hYL+45iYwNbwjvP2DxP3YzVsrAGtj/RV9LOgMpJyCxsfNoyyOoi2+YrnywKkiANingiG2kJ1nKsizbu1Bd4zZw==}
+ peerDependencies:
+ react: ^17.0.2 || ^18
+ react-dom: ^17.0.2 || ^18
+
+ '@fractalwagmi/solana-wallet-adapter@0.1.1':
+ resolution: {integrity: sha512-oTZLEuD+zLKXyhZC5tDRMPKPj8iaxKLxXiCjqRfOo4xmSbS2izGRWLJbKMYYsJysn/OI3UJ3P6CWP8WUWi0dZg==}
+
+ '@gsap/react@2.1.2':
+ resolution: {integrity: sha512-JqliybO1837UcgH2hVOM4VO+38APk3ECNrsuSM4MuXp+rbf+/2IG2K1YJiqfTcXQHH7XlA0m3ykniFYstfq0Iw==}
+ peerDependencies:
+ gsap: ^3.12.5
+ react: '>=17'
+
+ '@iconify/types@2.0.0':
+ resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
+
+ '@iconify/utils@3.1.0':
+ resolution: {integrity: sha512-Zlzem1ZXhI1iHeeERabLNzBHdOa4VhQbqAcOQaMKuTuyZCpwKbC2R4Dd0Zo3g9EAc+Y4fiarO8HIHRAth7+skw==}
+
+ '@isaacs/ttlcache@1.4.1':
+ resolution: {integrity: sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==}
+ engines: {node: '>=12'}
+
+ '@istanbuljs/load-nyc-config@1.1.0':
+ resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==}
+ engines: {node: '>=8'}
+
+ '@istanbuljs/schema@0.1.3':
+ resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==}
+ engines: {node: '>=8'}
+
+ '@jest/create-cache-key-function@29.7.0':
+ resolution: {integrity: sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/environment@29.7.0':
+ resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/fake-timers@29.7.0':
+ resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/schemas@29.6.3':
+ resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/transform@29.7.0':
+ resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/types@29.6.3':
+ resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jridgewell/gen-mapping@0.3.13':
+ resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
+
+ '@jridgewell/remapping@2.3.5':
+ resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
+
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/source-map@0.3.11':
+ resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==}
+
+ '@jridgewell/sourcemap-codec@1.5.5':
+ resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+
+ '@keystonehq/alias-sampling@0.1.2':
+ resolution: {integrity: sha512-5ukLB3bcgltgaFfQfYKYwHDUbwHicekYo53fSEa7xhVkAEqsA74kxdIwoBIURmGUtXe3EVIRm4SYlgcrt2Ri0w==}
+
+ '@keystonehq/bc-ur-registry-sol@0.9.5':
+ resolution: {integrity: sha512-HZeeph9297ZHjAziE9wL/u2W1dmV0p1H9Bu9g1bLJazP4F6W2fjCK9BAoCiKEsMBqadk6KI6r6VD67fmDzWyug==}
+
+ '@keystonehq/bc-ur-registry@0.5.4':
+ resolution: {integrity: sha512-z7bZe10I5k0zz9znmDTXh+o3Rzb5XsRVpwAzexubOaLxVdZ0F7aMbe2LoEsw766Hpox/7zARi7UGmLz5C8BAzA==}
+
+ '@keystonehq/bc-ur-registry@0.7.1':
+ resolution: {integrity: sha512-6eVIjNt/P+BmuwcYccbPYVS85473SFNplkqWF/Vb3ePCzLX00tn0WZBO1FGpS4X4nfXtceTfvUeNvQKoTGtXrw==}
+
+ '@keystonehq/sdk@0.19.2':
+ resolution: {integrity: sha512-ilA7xAhPKvpHWlxjzv3hjMehD6IKYda4C1TeG2/DhFgX9VSffzv77Eebf8kVwzPLdYV4LjX1KQ2ZDFoN1MsSFQ==}
+ peerDependencies:
+ react: '*'
+ react-dom: '*'
+
+ '@keystonehq/sol-keyring@0.20.0':
+ resolution: {integrity: sha512-UBeMlecybTDQaFMI951LBEVRyZarqKHOcwWqqvphV+x7WquYz0SZ/wf/PhizV0MWoGTQwt2m5aqROzksi6svqw==}
+
+ '@ledgerhq/devices@8.12.0':
+ resolution: {integrity: sha512-E6msvdhwHax6mseoOzuPp/z7+X41KE2PWBzmmmrrJ+pNNp7KIb/FZbGuwNu1Vjeg3ekbExVwQYJXdwQLuGwRKw==}
+
+ '@ledgerhq/errors@6.31.0':
+ resolution: {integrity: sha512-aGyE0HLzM8VwWikWEETfHdOzRyUsHuXHs9n+OCBNj11Tg0LeU05iuRvfL7SiXxYNN2fE45JzPfuMFsI5dp5G7w==}
+
+ '@ledgerhq/hw-transport-webhid@6.33.0':
+ resolution: {integrity: sha512-+7U3P/iipwLGgsDU/b2GEyv3m3Le4jE05qY7qkY+0C3yauSOHPp4jUvhlDZ0/XhXhAlM7giSaT9ObyrSds5EeQ==}
+
+ '@ledgerhq/hw-transport@6.34.0':
+ resolution: {integrity: sha512-BHpsf2n0/JnHsGSLGT3x3dEgOk7oLO3QYXYrzrn4RVDdiYAEyXbERYJeS1D4WbINN0/LBmTM0n4M8raRJBxxSg==}
+
+ '@ledgerhq/logs@6.16.0':
+ resolution: {integrity: sha512-v/PLfb1dq1En35kkpbfRWp8jLYgbPUXxGhmd4pmvPSIe0nRGkNTomsZASmWQAv6pRonVGqHIBVlte7j1MBbOww==}
+
+ '@lit-labs/ssr-dom-shim@1.5.1':
+ resolution: {integrity: sha512-Aou5UdlSpr5whQe8AA/bZG0jMj96CoJIWbGfZ91qieWu5AWUMKw8VR/pAkQkJYvBNhmCcWnZlyyk5oze8JIqYA==}
+
+ '@lit/reactive-element@2.1.2':
+ resolution: {integrity: sha512-pbCDiVMnne1lYUIaYNN5wrwQXDtHaYtg7YEFPeW+hws6U47WeFvISGUWekPGKWOP1ygrs0ef0o1VJMk1exos5A==}
+
+ '@mdx-js/mdx@3.1.1':
+ resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==}
+
+ '@mdx-js/react@3.1.1':
+ resolution: {integrity: sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==}
+ peerDependencies:
+ '@types/react': '>=16'
+ react: '>=16'
+
+ '@mdx-js/rollup@3.1.1':
+ resolution: {integrity: sha512-v8satFmBB+DqDzYohnm1u2JOvxx6Hl3pUvqzJvfs2Zk/ngZ1aRUhsWpXvwPkNeGN9c2NCm/38H29ZqXQUjf8dw==}
+ peerDependencies:
+ rollup: '>=2'
+
+ '@mediapipe/tasks-vision@0.10.17':
+ resolution: {integrity: sha512-CZWV/q6TTe8ta61cZXjfnnHsfWIdFhms03M9T7Cnd5y2mdpylJM0rF1qRq+wsQVRMLz1OYPVEBU9ph2Bx8cxrg==}
+
+ '@mermaid-js/parser@1.0.0':
+ resolution: {integrity: sha512-vvK0Hi/VWndxoh03Mmz6wa1KDriSPjS2XMZL/1l19HFwygiObEEoEwSDxOqyLzzAI6J2PU3261JjTMTO7x+BPw==}
+
+ '@mobily/ts-belt@3.13.1':
+ resolution: {integrity: sha512-K5KqIhPI/EoCTbA6CGbrenM9s41OouyK8A03fGJJcla/zKucsgLbz8HNbeseoLarRPgyWJsUyCYqFhI7t3Ra9Q==}
+ engines: {node: '>= 10.*'}
+
+ '@monogrid/gainmap-js@3.4.0':
+ resolution: {integrity: sha512-2Z0FATFHaoYJ8b+Y4y4Hgfn3FRFwuU5zRrk+9dFWp4uGAdHGqVEdP7HP+gLA3X469KXHmfupJaUbKo1b/aDKIg==}
+ peerDependencies:
+ three: '>= 0.159.0'
+
+ '@ngraveio/bc-ur@1.1.13':
+ resolution: {integrity: sha512-j73akJMV4+vLR2yQ4AphPIT5HZmxVjn/LxpL7YHoINnXoH6ccc90Zzck6/n6a3bCXOVZwBxq+YHwbAKRV+P8Zg==}
+
+ '@noble/ciphers@1.2.1':
+ resolution: {integrity: sha512-rONPWMC7PeExE077uLE4oqWrZ1IvAfz3oH9LibVAcVCopJiA9R62uavnbEzdkVmJYI6M6Zgkbeb07+tWjlq2XA==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@noble/ciphers@1.3.0':
+ resolution: {integrity: sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@noble/curves@1.2.0':
+ resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==}
+
+ '@noble/curves@1.4.2':
+ resolution: {integrity: sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==}
+
+ '@noble/curves@1.8.0':
+ resolution: {integrity: sha512-j84kjAbzEnQHaSIhRPUmB3/eVXu2k3dKPl2LOrR8fSOIL+89U+7lV117EWHtq/GHM3ReGHM46iRBdZfpc4HRUQ==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@noble/curves@1.8.1':
+ resolution: {integrity: sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@noble/curves@1.9.1':
+ resolution: {integrity: sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@noble/curves@1.9.7':
+ resolution: {integrity: sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@noble/curves@2.0.1':
+ resolution: {integrity: sha512-vs1Az2OOTBiP4q0pwjW5aF0xp9n4MxVrmkFBxc6EKZc6ddYx5gaZiAsZoq0uRRXWbi3AT/sBqn05eRPtn1JCPw==}
+ engines: {node: '>= 20.19.0'}
+
+ '@noble/hashes@1.3.2':
+ resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==}
+ engines: {node: '>= 16'}
+
+ '@noble/hashes@1.4.0':
+ resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
+ engines: {node: '>= 16'}
+
+ '@noble/hashes@1.7.0':
+ resolution: {integrity: sha512-HXydb0DgzTpDPwbVeDGCG1gIu7X6+AuU6Zl6av/E/KG8LMsvPntvq+w17CHRpKBmN6Ybdrt1eP3k4cj8DJa78w==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@noble/hashes@1.7.1':
+ resolution: {integrity: sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==}
+ 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}
+
+ '@noble/hashes@2.0.1':
+ resolution: {integrity: sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==}
+ engines: {node: '>= 20.19.0'}
+
+ '@particle-network/analytics@1.0.2':
+ resolution: {integrity: sha512-E4EpTRYcfNOkxj+bgNdQydBrvdLGo4HfVStZCuOr3967dYek30r6L7Nkaa9zJXRE2eGT4lPvcAXDV2WxDZl/Xg==}
+
+ '@particle-network/auth@1.3.1':
+ resolution: {integrity: sha512-hu6ie5RjjN4X+6y/vfjyCsSX3pQuS8k8ZoMb61QWwhWsnZXKzpBUVeAEk55aGfxxXY+KfBkSmZosyaZHGoHnfw==}
+
+ '@particle-network/chains@1.8.3':
+ resolution: {integrity: sha512-WgzY2Hp3tpQYBKXF0pOFdCyJ4yekTTOCzBvBt2tvt7Wbzti2bLyRlfGZAoP57TvIMiy1S1oUfasVfM0Dqd6k5w==}
+
+ '@particle-network/crypto@1.0.1':
+ resolution: {integrity: sha512-GgvHmHcFiNkCLZdcJOgctSbgvs251yp+EAdUydOE3gSoIxN6KEr/Snu9DebENhd/nFb7FDk5ap0Hg49P7pj1fg==}
+
+ '@particle-network/solana-wallet@1.3.2':
+ resolution: {integrity: sha512-KviKVP87OtWq813y8IumM3rIQMNkTjHBaQmCUbTWGebz3csFOv54JIoy1r+3J3NnA+mBxBdZeRedZ5g+07v75w==}
+ peerDependencies:
+ '@solana/web3.js': ^1.50.1
+ bs58: ^4.0.1
+
+ '@project-serum/sol-wallet-adapter@0.2.6':
+ resolution: {integrity: sha512-cpIb13aWPW8y4KzkZAPDgw+Kb+DXjCC6rZoH74MGm3I/6e/zKyGnfAuW5olb2zxonFqsYgnv7ev8MQnvSgJ3/g==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@solana/web3.js': ^1.5.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/primitive@1.1.3':
+ resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==}
+
+ '@radix-ui/react-accordion@1.2.12':
+ resolution: {integrity: sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-arrow@1.1.7':
+ resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-collapsible@1.1.12':
+ resolution: {integrity: sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-collection@1.1.7':
+ resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-compose-refs@1.1.2':
+ resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-context@1.1.2':
+ resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-dialog@1.1.15':
+ resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-direction@1.1.1':
+ resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-dismissable-layer@1.1.11':
+ resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-dropdown-menu@2.1.16':
+ resolution: {integrity: sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-focus-guards@1.1.3':
+ resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-focus-scope@1.1.7':
+ resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-id@1.1.1':
+ resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-menu@2.1.16':
+ resolution: {integrity: sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-navigation-menu@1.2.14':
+ resolution: {integrity: sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-popper@1.2.8':
+ resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-portal@1.1.9':
+ resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-presence@1.1.5':
+ resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-primitive@2.1.3':
+ resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-roving-focus@1.1.11':
+ resolution: {integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-slot@1.2.3':
+ resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-slot@1.2.4':
+ resolution: {integrity: sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-tabs@1.1.13':
+ resolution: {integrity: sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-tooltip@1.2.8':
+ resolution: {integrity: sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-use-callback-ref@1.1.1':
+ resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-controllable-state@1.2.2':
+ resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-effect-event@0.0.2':
+ resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-escape-keydown@1.1.1':
+ resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-layout-effect@1.1.1':
+ resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-previous@1.1.1':
+ resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-rect@1.1.1':
+ resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-size@1.1.1':
+ resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-visually-hidden@1.2.3':
+ resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/rect@1.1.1':
+ resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==}
+
+ '@react-native-async-storage/async-storage@1.24.0':
+ resolution: {integrity: sha512-W4/vbwUOYOjco0x3toB8QCr7EjIP6nE9G7o8PMguvvjYT5Awg09lyV4enACRx4s++PPulBiBSjL0KTFx2u0Z/g==}
+ peerDependencies:
+ react-native: ^0.0.0-0 || >=0.60 <1.0
+
+ '@react-native/assets-registry@0.84.1':
+ resolution: {integrity: sha512-lAJ6PDZv95FdT9s9uhc9ivhikW1Zwh4j9XdXM7J2l4oUA3t37qfoBmTSDLuPyE3Bi+Xtwa11hJm0BUTT2sc/gg==}
+ engines: {node: '>= 20.19.4'}
+
+ '@react-native/codegen@0.84.1':
+ resolution: {integrity: sha512-n1RIU0QAavgCg1uC5+s53arL7/mpM+16IBhJ3nCFSd/iK5tUmCwxQDcIDC703fuXfpub/ZygeSjVN8bcOWn0gA==}
+ engines: {node: '>= 20.19.4'}
+ peerDependencies:
+ '@babel/core': '*'
+
+ '@react-native/community-cli-plugin@0.84.1':
+ resolution: {integrity: sha512-f6a+mJEJ6Joxlt/050TqYUr7uRRbeKnz8lnpL7JajhpsgZLEbkJRjH8HY5QiLcRdUwWFtizml4V+vcO3P4RxoQ==}
+ engines: {node: '>= 20.19.4'}
+ peerDependencies:
+ '@react-native-community/cli': '*'
+ '@react-native/metro-config': '*'
+ peerDependenciesMeta:
+ '@react-native-community/cli':
+ optional: true
+ '@react-native/metro-config':
+ optional: true
+
+ '@react-native/debugger-frontend@0.84.1':
+ resolution: {integrity: sha512-rUU/Pyh3R5zT0WkVgB+yA6VwOp7HM5Hz4NYE97ajFS07OUIcv8JzBL3MXVdSSjLfldfqOuPEuKUaZcAOwPgabw==}
+ engines: {node: '>= 20.19.4'}
+
+ '@react-native/debugger-shell@0.84.1':
+ resolution: {integrity: sha512-LIGhh4q4ette3yW5OzmukNMYwmINYrRGDZqKyTYc/VZyNpblZPw72coXVHXdfpPT6+YlxHqXzn3UjFZpNODGCQ==}
+ engines: {node: '>= 20.19.4'}
+
+ '@react-native/dev-middleware@0.84.1':
+ resolution: {integrity: sha512-Z83ra+Gk6ElAhH3XRrv3vwbwCPTb04sPPlNpotxcFZb5LtRQZwT91ZQEXw3GOJCVIFp9EQ/gj8AQbVvtHKOUlQ==}
+ engines: {node: '>= 20.19.4'}
+
+ '@react-native/gradle-plugin@0.84.1':
+ resolution: {integrity: sha512-7uVlPBE3uluRNRX4MW7PUJIO1LDBTpAqStKHU7LHH+GRrdZbHsWtOEAX8PiY4GFfBEvG8hEjiuTOqAxMjV+hDg==}
+ engines: {node: '>= 20.19.4'}
+
+ '@react-native/js-polyfills@0.84.1':
+ resolution: {integrity: sha512-UsTe2AbUugsfyI7XIHMQq4E7xeC8a6GrYwuK+NohMMMJMxmyM3JkzIk+GB9e2il6ScEQNMJNaj+q+i5za8itxQ==}
+ engines: {node: '>= 20.19.4'}
+
+ '@react-native/normalize-colors@0.84.1':
+ resolution: {integrity: sha512-/UPaQ4jl95soXnLDEJ6Cs6lnRXhwbxtT4KbZz+AFDees7prMV2NOLcHfCnzmTabf5Y3oxENMVBL666n4GMLcTA==}
+
+ '@react-native/virtualized-lists@0.84.1':
+ resolution: {integrity: sha512-sJoDunzhci8ZsqxlUiKoLut4xQeQcmbIgvDHGQKeBz6uEq9HgU+hCWOijMRr6sLP0slQVfBAza34Rq7IbXZZOA==}
+ engines: {node: '>= 20.19.4'}
+ peerDependencies:
+ '@types/react': ^19.2.0
+ react: '*'
+ react-native: '*'
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@react-three/drei@10.7.7':
+ resolution: {integrity: sha512-ff+J5iloR0k4tC++QtD/j9u3w5fzfgFAWDtAGQah9pF2B1YgOq/5JxqY0/aVoQG5r3xSZz0cv5tk2YuBob4xEQ==}
+ peerDependencies:
+ '@react-three/fiber': ^9.0.0
+ react: ^19
+ react-dom: ^19
+ three: '>=0.159'
+ peerDependenciesMeta:
+ react-dom:
+ optional: true
+
+ '@react-three/fiber@9.5.0':
+ resolution: {integrity: sha512-FiUzfYW4wB1+PpmsE47UM+mCads7j2+giRBltfwH7SNhah95rqJs3ltEs9V3pP8rYdS0QlNne+9Aj8dS/SiaIA==}
+ peerDependencies:
+ expo: '>=43.0'
+ expo-asset: '>=8.4'
+ expo-file-system: '>=11.0'
+ expo-gl: '>=11.0'
+ react: '>=19 <19.3'
+ react-dom: '>=19 <19.3'
+ react-native: '>=0.78'
+ three: '>=0.156'
+ peerDependenciesMeta:
+ expo:
+ optional: true
+ expo-asset:
+ optional: true
+ expo-file-system:
+ optional: true
+ expo-gl:
+ optional: true
+ react-dom:
+ optional: true
+ react-native:
+ optional: true
+
+ '@reown/appkit-common@1.7.2':
+ resolution: {integrity: sha512-DZkl3P5+Iw3TmsitWmWxYbuSCox8iuzngNp/XhbNDJd7t4Cj4akaIUxSEeCajNDiGHlu4HZnfyM1swWsOJ0cOw==}
+
+ '@reown/appkit-controllers@1.7.2':
+ resolution: {integrity: sha512-KCN/VOg+bgwaX5kcxcdN8Xq8YXnchMeZOvmbCltPEFDzaLRUWmqk9tNu1OVml0434iGMNo6hcVimIiwz6oaL3Q==}
+
+ '@reown/appkit-polyfills@1.7.2':
+ resolution: {integrity: sha512-TxCVSh9dV2tf1u+OzjzLjAwj7WHhBFufHlJ36tDp5vjXeUUne8KvYUS85Zsyg4Y9Yeh+hdSIOdL2oDCqlRxCmw==}
+
+ '@reown/appkit-scaffold-ui@1.7.2':
+ resolution: {integrity: sha512-2Aifk5d23e40ijUipsN3qAMIB1Aphm2ZgsRQ+UvKRb838xR1oRs+MOsfDWgXhnccXWKbjPqyapZ25eDFyPYPNw==}
+
+ '@reown/appkit-ui@1.7.2':
+ resolution: {integrity: sha512-fZv8K7Df6A/TlTIWD/9ike1HwK56WfzYpHN1/yqnR/BnyOb3CKroNQxmRTmjeLlnwKWkltlOf3yx+Y6ucKMk6Q==}
+
+ '@reown/appkit-utils@1.7.2':
+ resolution: {integrity: sha512-Z3gQnMPQopBdf1XEuptbf+/xVl9Hy0+yoK3K9pBb2hDdYNqJgJ4dXComhlRT8LjXFCQe1ZW0pVZTXmGQvOZ/OQ==}
+ peerDependencies:
+ valtio: 1.13.2
+
+ '@reown/appkit-wallet@1.7.2':
+ resolution: {integrity: sha512-WQ0ykk5TwsjOcUL62ajT1bhZYdFZl0HjwwAH9LYvtKYdyZcF0Ps4+y2H4HHYOc03Q+LKOHEfrFztMBLXPTxwZA==}
+
+ '@reown/appkit@1.7.2':
+ resolution: {integrity: sha512-oo/evAyVxwc33i8ZNQ0+A/VE6vyTyzL3NBJmAe3I4vobgQeiobxMM0boKyLRMMbJggPn8DtoAAyG4GfpKaUPzQ==}
+
+ '@rolldown/pluginutils@1.0.0-beta.27':
+ resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==}
+
+ '@rollup/pluginutils@5.3.0':
+ resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/rollup-android-arm-eabi@4.59.0':
+ resolution: {integrity: sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==}
+ cpu: [arm]
+ os: [android]
+
+ '@rollup/rollup-android-arm64@4.59.0':
+ resolution: {integrity: sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==}
+ cpu: [arm64]
+ os: [android]
+
+ '@rollup/rollup-darwin-arm64@4.59.0':
+ resolution: {integrity: sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rollup/rollup-darwin-x64@4.59.0':
+ resolution: {integrity: sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rollup/rollup-freebsd-arm64@4.59.0':
+ resolution: {integrity: sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@rollup/rollup-freebsd-x64@4.59.0':
+ resolution: {integrity: sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.59.0':
+ resolution: {integrity: sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==}
+ cpu: [arm]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm-musleabihf@4.59.0':
+ resolution: {integrity: sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==}
+ cpu: [arm]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm64-gnu@4.59.0':
+ resolution: {integrity: sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm64-musl@4.59.0':
+ resolution: {integrity: sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rollup/rollup-linux-loong64-gnu@4.59.0':
+ resolution: {integrity: sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==}
+ cpu: [loong64]
+ os: [linux]
+
+ '@rollup/rollup-linux-loong64-musl@4.59.0':
+ resolution: {integrity: sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==}
+ cpu: [loong64]
+ os: [linux]
+
+ '@rollup/rollup-linux-ppc64-gnu@4.59.0':
+ resolution: {integrity: sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@rollup/rollup-linux-ppc64-musl@4.59.0':
+ resolution: {integrity: sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@rollup/rollup-linux-riscv64-gnu@4.59.0':
+ resolution: {integrity: sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@rollup/rollup-linux-riscv64-musl@4.59.0':
+ resolution: {integrity: sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@rollup/rollup-linux-s390x-gnu@4.59.0':
+ resolution: {integrity: sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==}
+ cpu: [s390x]
+ os: [linux]
+
+ '@rollup/rollup-linux-x64-gnu@4.59.0':
+ resolution: {integrity: sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rollup/rollup-linux-x64-musl@4.59.0':
+ resolution: {integrity: sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rollup/rollup-openbsd-x64@4.59.0':
+ resolution: {integrity: sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@rollup/rollup-openharmony-arm64@4.59.0':
+ resolution: {integrity: sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@rollup/rollup-win32-arm64-msvc@4.59.0':
+ resolution: {integrity: sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rollup/rollup-win32-ia32-msvc@4.59.0':
+ resolution: {integrity: sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==}
+ cpu: [ia32]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-gnu@4.59.0':
+ resolution: {integrity: sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==}
+ cpu: [x64]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-msvc@4.59.0':
+ resolution: {integrity: sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==}
+ cpu: [x64]
+ os: [win32]
+
+ '@scure/base@1.1.9':
+ resolution: {integrity: sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==}
+
+ '@scure/base@1.2.6':
+ resolution: {integrity: sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==}
+
+ '@scure/bip32@1.4.0':
+ resolution: {integrity: sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==}
+
+ '@scure/bip32@1.6.2':
+ resolution: {integrity: sha512-t96EPDMbtGgtb7onKKqxRLfE5g05k7uHnHRM2xdE6BP/ZmxaLtPek4J4KfVn/90IQNrU1IOAqMgiDtUdtbe3nw==}
+
+ '@scure/bip32@1.7.0':
+ resolution: {integrity: sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw==}
+
+ '@scure/bip39@1.3.0':
+ resolution: {integrity: sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==}
+
+ '@scure/bip39@1.5.4':
+ resolution: {integrity: sha512-TFM4ni0vKvCfBpohoh+/lY05i9gRbSwXWngAsF4CABQxoaOHijxuaZ2R6cStDQ5CHtHO9aGJTr4ksVJASRRyMA==}
+
+ '@scure/bip39@1.6.0':
+ resolution: {integrity: sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A==}
+
+ '@shikijs/core@4.0.0':
+ resolution: {integrity: sha512-tvV94Dwyz4qFZ8R0MUaFx5Yptgy8yrloa4dwynEJDGjKz+8vqO8Q6FmPZL9W1gSzFHOUMOGQzIHK62aGourFxA==}
+ engines: {node: '>=20'}
+
+ '@shikijs/engine-javascript@4.0.0':
+ resolution: {integrity: sha512-+PEyTS+JTz2lLy2C1Dwwx6hzoehIzqxQYh5MEjv9V4JtSabx+bIkRHfQT+6DnBmPAplGH0exBknWeiJSXC7w1w==}
+ engines: {node: '>=20'}
+
+ '@shikijs/engine-oniguruma@4.0.0':
+ resolution: {integrity: sha512-KXmq4b6Xw16+4+rz5M4NZMoe/tzs5kTOMSJz8+LCyxSrwmxwTBAM/ab85iSO2Gw79E47HkW4B9HPHUXhrNOivw==}
+ engines: {node: '>=20'}
+
+ '@shikijs/langs@4.0.0':
+ resolution: {integrity: sha512-dSAT6fBcnOcYZQMWZO8+OmzUKKm+OO0As/qZ3TXLiSy0JsCTEYz1TaX7TDupnYLz7dr0oF2DOTEgPocx1D3aFw==}
+ engines: {node: '>=20'}
+
+ '@shikijs/primitive@4.0.0':
+ resolution: {integrity: sha512-6K2zD7JTgsyFc2vM1rqy8eRGC8D5Hius3qzVONjq2lHMrqfTSn1HcGeJZiFPYSV9m3DQuBHncBbA5xe0hKSOkQ==}
+ engines: {node: '>=20'}
+
+ '@shikijs/themes@4.0.0':
+ resolution: {integrity: sha512-xe42kvxOXan5ouXxULez6qwDNUJkoP6kicfg0wKuJBkeIaHLxZBZa2gEGYutL1q27DQZ5+XoR6caVX+E/aNR5A==}
+ engines: {node: '>=20'}
+
+ '@shikijs/types@4.0.0':
+ resolution: {integrity: sha512-LCnfBTtQKNtJyc1qMShZr2dJt1uxNI6pI0/YTc2DSNET91aUvnMGHUHsucVCC5AJVcv5XyBqk2NgYRwd20EjbA==}
+ engines: {node: '>=20'}
+
+ '@shikijs/vscode-textmate@10.0.2':
+ resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==}
+
+ '@sinclair/typebox@0.27.10':
+ resolution: {integrity: sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==}
+
+ '@sinclair/typebox@0.33.22':
+ resolution: {integrity: sha512-auUj4k+f4pyrIVf4GW5UKquSZFHJWri06QgARy9C0t9ZTjJLIuNIrr1yl9bWcJWJ1Gz1vOvYN1D+QPaIlNMVkQ==}
+
+ '@sinonjs/commons@3.0.1':
+ resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==}
+
+ '@sinonjs/fake-timers@10.3.0':
+ resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==}
+
+ '@socket.io/component-emitter@3.1.2':
+ resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==}
+
+ '@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-program/compute-budget@0.8.0':
+ resolution: {integrity: sha512-qPKxdxaEsFxebZ4K5RPuy7VQIm/tfJLa1+Nlt3KNA8EYQkz9Xm8htdoEaXVrer9kpgzzp9R3I3Bh6omwCM06tQ==}
+ peerDependencies:
+ '@solana/kit': ^2.1.0
+
+ '@solana-program/stake@0.2.1':
+ resolution: {integrity: sha512-ssNPsJv9XHaA+L7ihzmWGYcm/+XYURQ8UA3wQMKf6ccEHyHOUgoglkkDU/BoA0+wul6HxZUN0tHFymC0qFw6sg==}
+ peerDependencies:
+ '@solana/kit': ^2.1.0
+
+ '@solana-program/system@0.7.0':
+ resolution: {integrity: sha512-FKTBsKHpvHHNc1ATRm7SlC5nF/VdJtOSjldhcyfMN9R7xo712Mo2jHIzvBgn8zQO5Kg0DcWuKB7268Kv1ocicw==}
+ peerDependencies:
+ '@solana/kit': ^2.1.0
+
+ '@solana-program/token-2022@0.4.2':
+ resolution: {integrity: sha512-zIpR5t4s9qEU3hZKupzIBxJ6nUV5/UVyIT400tu9vT1HMs5JHxaTTsb5GUhYjiiTvNwU0MQavbwc4Dl29L0Xvw==}
+ peerDependencies:
+ '@solana/kit': ^2.1.0
+ '@solana/sysvars': ^2.1.0
+
+ '@solana-program/token@0.5.1':
+ resolution: {integrity: sha512-bJvynW5q9SFuVOZ5vqGVkmaPGA0MCC+m9jgJj1nk5m20I389/ms69ASnhWGoOPNcie7S9OwBX0gTj2fiyWpfag==}
+ peerDependencies:
+ '@solana/kit': ^2.1.0
+
+ '@solana/accounts@2.3.0':
+ resolution: {integrity: sha512-QgQTj404Z6PXNOyzaOpSzjgMOuGwG8vC66jSDB+3zHaRcEPRVRd2sVSrd1U6sHtnV3aiaS6YyDuPQMheg4K2jw==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/addresses@2.3.0':
+ resolution: {integrity: sha512-ypTNkY2ZaRFpHLnHAgaW8a83N0/WoqdFvCqf4CQmnMdFsZSdC7qOwcbd7YzdaQn9dy+P2hybewzB+KP7LutxGA==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/assertions@2.3.0':
+ resolution: {integrity: sha512-Ekoet3khNg3XFLN7MIz8W31wPQISpKUGDGTylLptI+JjCDWx3PIa88xjEMqFo02WJ8sBj2NLV64Xg1sBcsHjZQ==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@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-data-structures@2.3.0':
+ resolution: {integrity: sha512-qvU5LE5DqEdYMYgELRHv+HMOx73sSoV1ZZkwIrclwUmwTbTaH8QAJURBj0RhQ/zCne7VuLLOZFFGv6jGigWhSw==}
+ 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@2.3.0':
+ resolution: {integrity: sha512-y5pSBYwzVziXu521hh+VxqUtp0hYGTl1eWGoc1W+8mdvBdC1kTqm/X7aYQw33J42hw03JjryvYOvmGgk3Qz/Ug==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ fastestsmallesttextencoderdecoder: ^1.0.22
+ 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/codecs@2.3.0':
+ resolution: {integrity: sha512-JVqGPkzoeyU262hJGdH64kNLH0M+Oew2CIPOa/9tR3++q2pEd4jU2Rxdfye9sd0Ce3XJrR5AIa8ZfbyQXzjh+g==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ 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/fast-stable-stringify@2.3.0':
+ resolution: {integrity: sha512-KfJPrMEieUg6D3hfQACoPy0ukrAV8Kio883llt/8chPEG3FVTX9z/Zuf4O01a15xZmBbmQ7toil2Dp0sxMJSxw==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/functional@2.3.0':
+ resolution: {integrity: sha512-AgsPh3W3tE+nK3eEw/W9qiSfTGwLYEvl0rWaxHht/lRcuDVwfKRzeSa5G79eioWFFqr+pTtoCr3D3OLkwKz02Q==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/instructions@2.3.0':
+ resolution: {integrity: sha512-PLMsmaIKu7hEAzyElrk2T7JJx4D+9eRwebhFZpy2PXziNSmFF929eRHKUsKqBFM3cYR1Yy3m6roBZfA+bGE/oQ==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/keys@2.3.0':
+ resolution: {integrity: sha512-ZVVdga79pNH+2pVcm6fr2sWz9HTwfopDVhYb0Lh3dh+WBmJjwkabXEIHey2rUES7NjFa/G7sV8lrUn/v8LDCCQ==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/kit@2.3.0':
+ resolution: {integrity: sha512-sb6PgwoW2LjE5oTFu4lhlS/cGt/NB3YrShEyx7JgWFWysfgLdJnhwWThgwy/4HjNsmtMrQGWVls0yVBHcMvlMQ==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/nominal-types@2.3.0':
+ resolution: {integrity: sha512-uKlMnlP4PWW5UTXlhKM8lcgIaNj8dvd8xO4Y9l+FVvh9RvW2TO0GwUO6JCo7JBzCB0PSqRJdWWaQ8pu1Ti/OkA==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/options@2.3.0':
+ resolution: {integrity: sha512-PPnnZBRCWWoZQ11exPxf//DRzN2C6AoFsDI/u2AsQfYih434/7Kp4XLpfOMT/XESi+gdBMFNNfbES5zg3wAIkw==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/programs@2.3.0':
+ resolution: {integrity: sha512-UXKujV71VCI5uPs+cFdwxybtHZAIZyQkqDiDnmK+DawtOO9mBn4Nimdb/6RjR2CXT78mzO9ZCZ3qfyX+ydcB7w==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/promises@2.3.0':
+ resolution: {integrity: sha512-GjVgutZKXVuojd9rWy1PuLnfcRfqsaCm7InCiZc8bqmJpoghlyluweNc7ml9Y5yQn1P2IOyzh9+p/77vIyNybQ==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/rpc-api@2.3.0':
+ resolution: {integrity: sha512-UUdiRfWoyYhJL9PPvFeJr4aJ554ob2jXcpn4vKmRVn9ire0sCbpQKYx6K8eEKHZWXKrDW8IDspgTl0gT/aJWVg==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/rpc-parsed-types@2.3.0':
+ resolution: {integrity: sha512-B5pHzyEIbBJf9KHej+zdr5ZNAdSvu7WLU2lOUPh81KHdHQs6dEb310LGxcpCc7HVE8IEdO20AbckewDiAN6OCg==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/rpc-spec-types@2.3.0':
+ resolution: {integrity: sha512-xQsb65lahjr8Wc9dMtP7xa0ZmDS8dOE2ncYjlvfyw/h4mpdXTUdrSMi6RtFwX33/rGuztQ7Hwaid5xLNSLvsFQ==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/rpc-spec@2.3.0':
+ resolution: {integrity: sha512-fA2LMX4BMixCrNB2n6T83AvjZ3oUQTu7qyPLyt8gHQaoEAXs8k6GZmu6iYcr+FboQCjUmRPgMaABbcr9j2J9Sw==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/rpc-subscriptions-api@2.3.0':
+ resolution: {integrity: sha512-9mCjVbum2Hg9KGX3LKsrI5Xs0KX390lS+Z8qB80bxhar6MJPugqIPH8uRgLhCW9GN3JprAfjRNl7our8CPvsPQ==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/rpc-subscriptions-channel-websocket@2.3.0':
+ resolution: {integrity: sha512-2oL6ceFwejIgeWzbNiUHI2tZZnaOxNTSerszcin7wYQwijxtpVgUHiuItM/Y70DQmH9sKhmikQp+dqeGalaJxw==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+ ws: ^8.18.0
+
+ '@solana/rpc-subscriptions-spec@2.3.0':
+ resolution: {integrity: sha512-rdmVcl4PvNKQeA2l8DorIeALCgJEMSu7U8AXJS1PICeb2lQuMeaR+6cs/iowjvIB0lMVjYN2sFf6Q3dJPu6wWg==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/rpc-subscriptions@2.3.0':
+ resolution: {integrity: sha512-Uyr10nZKGVzvCOqwCZgwYrzuoDyUdwtgQRefh13pXIrdo4wYjVmoLykH49Omt6abwStB0a4UL5gX9V4mFdDJZg==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/rpc-transformers@2.3.0':
+ resolution: {integrity: sha512-UuHYK3XEpo9nMXdjyGKkPCOr7WsZsxs7zLYDO1A5ELH3P3JoehvrDegYRAGzBS2VKsfApZ86ZpJToP0K3PhmMA==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/rpc-transport-http@2.3.0':
+ resolution: {integrity: sha512-HFKydmxGw8nAF5N+S0NLnPBDCe5oMDtI2RAmW8DMqP4U3Zxt2XWhvV1SNkAldT5tF0U1vP+is6fHxyhk4xqEvg==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/rpc-types@2.3.0':
+ resolution: {integrity: sha512-O09YX2hED2QUyGxrMOxQ9GzH1LlEwwZWu69QbL4oYmIf6P5dzEEHcqRY6L1LsDVqc/dzAdEs/E1FaPrcIaIIPw==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/rpc@2.3.0':
+ resolution: {integrity: sha512-ZWN76iNQAOCpYC7yKfb3UNLIMZf603JckLKOOLTHuy9MZnTN8XV6uwvDFhf42XvhglgUjGCEnbUqWtxQ9pa/pQ==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/signers@2.3.0':
+ resolution: {integrity: sha512-OSv6fGr/MFRx6J+ZChQMRqKNPGGmdjkqarKkRzkwmv7v8quWsIRnJT5EV8tBy3LI4DLO/A8vKiNSPzvm1TdaiQ==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/subscribable@2.3.0':
+ resolution: {integrity: sha512-DkgohEDbMkdTWiKAoatY02Njr56WXx9e/dKKfmne8/Ad6/2llUIrax78nCdlvZW9quXMaXPTxZvdQqo9N669Og==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/sysvars@2.3.0':
+ resolution: {integrity: sha512-LvjADZrpZ+CnhlHqfI5cmsRzX9Rpyb1Ox2dMHnbsRNzeKAMhu9w4ZBIaeTdO322zsTr509G1B+k2ABD3whvUBA==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/transaction-confirmation@2.3.0':
+ resolution: {integrity: sha512-UiEuiHCfAAZEKdfne/XljFNJbsKAe701UQHKXEInYzIgBjRbvaeYZlBmkkqtxwcasgBTOmEaEKT44J14N9VZDw==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/transaction-messages@2.3.0':
+ resolution: {integrity: sha512-bgqvWuy3MqKS5JdNLH649q+ngiyOu5rGS3DizSnWwYUd76RxZl1kN6CoqHSrrMzFMvis6sck/yPGG3wqrMlAww==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/transactions@2.3.0':
+ resolution: {integrity: sha512-LnTvdi8QnrQtuEZor5Msje61sDpPstTVwKg4y81tNxDhiyomjuvnSNLAq6QsB9gIxUqbNzPZgOG9IU4I4/Uaug==}
+ engines: {node: '>=20.18.0'}
+ peerDependencies:
+ typescript: '>=5.3.3'
+
+ '@solana/wallet-adapter-alpha@0.1.14':
+ resolution: {integrity: sha512-ZSEvQmTdkiXPeHWIHbvdU4yDC5PfyTqG/1ZKIf2Uo6c+HslMkYer7mf9HUqJJ80dU68XqBbzBlIv34LCDVWijw==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@solana/web3.js': ^1.98.0
+
+ '@solana/wallet-adapter-avana@0.1.17':
+ resolution: {integrity: sha512-I3h+dPWVTEylOWoY2qxyI7mhcn3QNL+tkYLrZLi3+PBaoz79CVIVFi3Yb4NTKYDP+hz7/Skm/ZsomSY5SJua5A==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@solana/web3.js': ^1.98.0
+
+ '@solana/wallet-adapter-base-ui@0.1.6':
+ resolution: {integrity: sha512-OuxLBOXA2z3dnmuGP0agEb7xhsT3+Nttd+gAkSLgJRX2vgNEAy3Fvw8IKPXv1EE2vRdw/U6Rq0Yjpp3McqVZhw==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@solana/web3.js': ^1.98.0
+ react: '*'
+
+ '@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-bitkeep@0.3.24':
+ resolution: {integrity: sha512-LQvS9pr/Qm95w8XFAvxqgYKVndgifwlQYV1+Exc0XMnbxpw40blMTMKxSfiiPq78e3Zi2XWRApQyqtFUafOK5g==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@solana/web3.js': ^1.98.0
+
+ '@solana/wallet-adapter-bitpie@0.5.22':
+ resolution: {integrity: sha512-S1dSg041f8CKqzy7HQy/BPhY56ZZiZeanmdx4S6fMDpf717sgkCa7jBjLFtx8ugZzO/VpYQJtRXtKEtHpx0X0A==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@solana/web3.js': ^1.98.0
+
+ '@solana/wallet-adapter-clover@0.4.23':
+ resolution: {integrity: sha512-0PIAP0g1CmSLyphwXLHjePpKiB1dg+veWIbkziIdLHwSsLq6aBr2FimC/ljrbtqrduL1bH7sphNZOGE0IF0JtQ==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@solana/web3.js': ^1.98.0
+
+ '@solana/wallet-adapter-coin98@0.5.24':
+ resolution: {integrity: sha512-lEHk2L00PitymreyACv5ShGyyeG/NLhryohcke4r/8yDL3m2XTOeyzkhd1/6mDWavMhno1WNivHxByNHDSQhEw==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@solana/web3.js': ^1.98.0
+
+ '@solana/wallet-adapter-coinbase@0.1.23':
+ resolution: {integrity: sha512-vCJi/clbq1VVgydPFnHGAc2jdEhDAClYmhEAR4RJp9UHBg+MEQUl1WW8PVIREY5uOzJHma0qEiyummIfyt0b4A==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@solana/web3.js': ^1.98.0
+
+ '@solana/wallet-adapter-coinhub@0.3.22':
+ resolution: {integrity: sha512-an/0FyUIY5xWfPYcOxjaVV11IbCCeErURbw+nHyWV89kw/CuiaYwaWXxATGdj8XJjg/UPsPbiLAGyKkdOMjjfw==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@solana/web3.js': ^1.98.0
+
+ '@solana/wallet-adapter-fractal@0.1.12':
+ resolution: {integrity: sha512-gu9deyHxwrRfBt6VqaCVIN7FmViZn47NwORuja4wc95OX2ZxsjGE6hEs1bJsfy7uf/CsUjwDe1V309r7PlKz8g==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@solana/web3.js': ^1.98.0
+
+ '@solana/wallet-adapter-huobi@0.1.19':
+ resolution: {integrity: sha512-wLv2E/VEYhgVot7qyRop2adalHyw0Y+Rb1BG9RkFUa3paZUZEsIozBK3dBScTwSCJpmLCjzTVWZEvtHOfVLLSw==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@solana/web3.js': ^1.98.0
+
+ '@solana/wallet-adapter-hyperpay@0.1.18':
+ resolution: {integrity: sha512-On95zV7Dq5UTqYAtLFvttwDgPVz0a2iWl1XZ467YYXbvXPWSxkQmvPD0jHPUvHepGw60Hf5p0qkylyYANIAgoQ==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@solana/web3.js': ^1.98.0
+
+ '@solana/wallet-adapter-keystone@0.1.19':
+ resolution: {integrity: sha512-u7YmrQCrdZHI2hwJpX3rAiYuUdK0UIFX6m8+LSDOlA2bijlPJuTeH416aqqjueJTpvuZHowOPmV/no46PBqG0Q==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@solana/web3.js': ^1.98.0
+
+ '@solana/wallet-adapter-krystal@0.1.16':
+ resolution: {integrity: sha512-crAVzzPzMo63zIH0GTHDqYjIrjGFhrAjCntOV2hMjebMGSAmaUPTJKRi+vgju2Ons2Ktva7tRwiVaJxD8370DA==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@solana/web3.js': ^1.98.0
+
+ '@solana/wallet-adapter-ledger@0.9.29':
+ resolution: {integrity: sha512-1feOHQGdMOPtXtXBCuUuHlsoco2iqDNcUTbHW+Bj+3ItXGJctwMicSSWgfATEAFNUanvOB+kKZ4N3B1MQrP/9w==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@solana/web3.js': ^1.98.0
+
+ '@solana/wallet-adapter-mathwallet@0.9.22':
+ resolution: {integrity: sha512-5ePUe4lyTbwHlXQJwNrXRXDfyouAeIbfBTkJxcAWVivlVQcxcnE7BOwsCjImVaGNh4MumMLblxd2ywoSVDNf/g==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@solana/web3.js': ^1.98.0
+
+ '@solana/wallet-adapter-neko@0.2.16':
+ resolution: {integrity: sha512-0l/s+NJUGkyVm24nHF0aPsTMo9lsdw21PO+obDszJziZZmiKrI1l1WmhCDwYwAllY0nQjaxQ0tJBYy066pmnVg==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@solana/web3.js': ^1.98.0
+
+ '@solana/wallet-adapter-nightly@0.1.20':
+ resolution: {integrity: sha512-37kRXzZ+54JhT21Cp3lC0O+hg9ZBC4epqkwNbev8piNnZUghKdsvsG5RjbsngVY6572jPlFGiuniDmb0vUSs3A==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@solana/web3.js': ^1.98.0
+
+ '@solana/wallet-adapter-nufi@0.1.21':
+ resolution: {integrity: sha512-up9V4BfWl/oR0rIDQio1JD2oic+isHPk5DI4sUUxBPmWF/BYlpDVxwEfL7Xjg+jBfeiYGn0sVjTvaHY4/qUZAw==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@solana/web3.js': ^1.98.0
+
+ '@solana/wallet-adapter-onto@0.1.11':
+ resolution: {integrity: sha512-fyTJ5xFaYD8/Izu8q+oGD9iXZvg7ljLxi/JkVwN/HznVdac95ee1fvthkF3PPRmWGZeA7O/kYAxdQMXxlwy+xw==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@solana/web3.js': ^1.98.0
+
+ '@solana/wallet-adapter-particle@0.1.16':
+ resolution: {integrity: sha512-uB2FFN2SqV0cJQTvQ+pyVL6OXwGMhbz5KuWU14pcZWqfrOxs+L4grksLwMCGw+yBw/+jydLGMTUWntuEm6r7ag==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@solana/web3.js': ^1.98.0
+
+ '@solana/wallet-adapter-phantom@0.9.28':
+ resolution: {integrity: sha512-g/hcuWwWjzo5l8I4vor9htniVhLxd/GhoVK52WSd0hy8IZ8/FBnV3u8ABVTheLqO13d0IVy+xTxoVBbDaMjLog==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@solana/web3.js': ^1.98.0
+
+ '@solana/wallet-adapter-react-ui@0.9.39':
+ resolution: {integrity: sha512-B6GdOobwVuIgEX1qjcbTQEeo+0UGs3WPuBeUlR0dDCzQh9J3IAWRRyL/47FYSHYRp26LAu4ImWy4+M2TFD5OJg==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@solana/web3.js': ^1.98.0
+ react: '*'
+ react-dom: '*'
+
+ '@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-adapter-safepal@0.5.22':
+ resolution: {integrity: sha512-K1LlQIPoKgg3rdDIVUtMV218+uUM1kCtmuVKq2N+e+ZC8zK05cW3w7++nakDtU97AOmg+y4nsSFRCFsWBWmhTw==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@solana/web3.js': ^1.98.0
+
+ '@solana/wallet-adapter-saifu@0.1.19':
+ resolution: {integrity: sha512-RWguxtKSXTZUNlc7XTUuMi78QBjy5rWcg7Fis3R8rfMtCBZIUZ/0nPb/wZbRfTk3OqpvnwRQl89TC9d2P7/SvA==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@solana/web3.js': ^1.98.0
+
+ '@solana/wallet-adapter-salmon@0.1.18':
+ resolution: {integrity: sha512-YN2/j5MsaurrlVIijlYA7SfyJU6IClxfmbUjQKEuygq0eP6S7mIAB/LK7qK2Ut3ll5vyTq/5q9Gejy6zQEaTMg==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@solana/web3.js': ^1.98.0
+
+ '@solana/wallet-adapter-sky@0.1.19':
+ resolution: {integrity: sha512-jJBAg5TQLyPUSFtjne3AGxUgGV8cxMicJCdDFG6HalNK6N9jAB9eWfPxwsGRKv2RijXVtzo3/ejzcKrGp3oAuQ==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@solana/web3.js': ^1.98.0
+
+ '@solana/wallet-adapter-solflare@0.6.32':
+ resolution: {integrity: sha512-FIqNyooif3yjPnw2gPNBZnsG6X9JYSrwCf1Oa0NN4/VxQcPjzGqvc+Tq1+js/nBOHju5roToeMFTbwNTdEOuZw==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@solana/web3.js': ^1.98.0
+
+ '@solana/wallet-adapter-solong@0.9.22':
+ resolution: {integrity: sha512-lGTwQmHQrSTQp3OkYUbfzeFCDGi60ScOpgfC0IOZNSfWl7jwG5tnRXAJ4A1RG9Val9XcVe5b2biur2hyEMJlSQ==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@solana/web3.js': ^1.98.0
+
+ '@solana/wallet-adapter-spot@0.1.19':
+ resolution: {integrity: sha512-p7UgT+4+2r82YIJ+NsniNrXKSaYNgrM43FHkjdVVmEw69ZGvSSXJ3x108bCE9pshy6ldl+sb7VhJGg+uQ/OF9g==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@solana/web3.js': ^1.98.0
+
+ '@solana/wallet-adapter-tokenary@0.1.16':
+ resolution: {integrity: sha512-7FrDcRrXogCn13Ni2vwA1K/74RMLq+n37+j5fW0KtU2AEA6QVPqPgl/o0rRRgwdaG1q6EM3BXfgscYkmMTlxQQ==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@solana/web3.js': ^1.98.0
+
+ '@solana/wallet-adapter-tokenpocket@0.4.23':
+ resolution: {integrity: sha512-5/sgNj+WK0I+0+pMB8CmTPhRbImXJ8ZcqfO8+i2uHbmKwU+zddPFDT4Fin/Gm9AX/n//M+5bxhhN4FpnA9oM8w==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@solana/web3.js': ^1.98.0
+
+ '@solana/wallet-adapter-torus@0.11.32':
+ resolution: {integrity: sha512-LHvCNIL3tvD3q3EVJ1VrcvqIz7JbLBJcvpi5+PwG6DQzrRLHJ7oxOHFwc1SUX41WwifQHKI+lXWlTrVpIOgDOA==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@solana/web3.js': ^1.98.0
+
+ '@solana/wallet-adapter-trezor@0.1.6':
+ resolution: {integrity: sha512-jItXhzaNq/UxSSPKVxgrUamx4mr2voMDjcEBHVUqOQhcujmzoPpBSahWKgpsDIegeX6zDCmuTAULnTpLs6YuzA==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@solana/web3.js': ^1.98.0
+
+ '@solana/wallet-adapter-trust@0.1.17':
+ resolution: {integrity: sha512-raVtYoemFxrmsq8xtxhp3mD1Hke7CJuPqZsYr20zODjM1H2N+ty6zQa7z9ApJtosYNHAGek5S1/+n4/gnrC4nQ==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@solana/web3.js': ^1.98.0
+
+ '@solana/wallet-adapter-unsafe-burner@0.1.11':
+ resolution: {integrity: sha512-VyRQ2xRbVcpRSPTv+qyxOYFtWHxrVlLiH2nIuqIRCZcmGkFmxr+egwMjCCIURS6KCX7Ye3AbHK8IWJX6p9yuFQ==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@solana/web3.js': ^1.98.0
+
+ '@solana/wallet-adapter-walletconnect@0.1.21':
+ resolution: {integrity: sha512-OE2ZZ60RbeobRsCa2gTD7IgXqofSa5B+jBLUu0DO8TVeRWro40JKYJuUedthALjO5oLelWSpcds+i7PRL+RQcQ==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@solana/web3.js': ^1.98.0
+
+ '@solana/wallet-adapter-wallets@0.19.37':
+ resolution: {integrity: sha512-LUHK2Zh6gELt0+kt+viIMxqc/bree65xZgTPXXBzjhbJNKJaV4D4wanYG2LM9O35/avehZ5BTLMHltbkibE+GA==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@solana/web3.js': ^1.98.0
+
+ '@solana/wallet-adapter-xdefi@0.1.11':
+ resolution: {integrity: sha512-WzhzhNtA4ECX9ZMyAyZV8TciuwvbW8VoJWwF+hdts5xHfnitRJDR/17Br6CQH0CFKkqymVHCMWOBIWEjmp+3Rw==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@solana/web3.js': ^1.98.0
+
+ '@solana/wallet-standard-chains@1.1.1':
+ resolution: {integrity: sha512-Us3TgL4eMVoVWhuC4UrePlYnpWN+lwteCBlhZDUhFZBJ5UMGh94mYPXno3Ho7+iHPYRtuCi/ePvPcYBqCGuBOw==}
+ 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/web3.js@1.98.4':
+ resolution: {integrity: sha512-vv9lfnvjUsRiq//+j5pBdXig0IQdtzA0BRZ3bXEP4KaIyF1CcaydWqgyzQgfZMNIsWNWmG+AUHwPy4AHOD6gpw==}
+
+ '@solflare-wallet/metamask-sdk@1.0.3':
+ resolution: {integrity: sha512-os5Px5PTMYKGS5tzOoyjDxtOtj0jZKnbI1Uwt8+Jsw1HHIA+Ib2UACCGNhQ/un2f8sIbTfLD1WuucNMOy8KZpQ==}
+ peerDependencies:
+ '@solana/web3.js': '*'
+
+ '@solflare-wallet/sdk@1.4.2':
+ resolution: {integrity: sha512-jrseNWipwl9xXZgrzwZF3hhL0eIVxuEtoZOSLmuPuef7FgHjstuTtNJAeT4icA7pzdDV4hZvu54pI2r2f7SmrQ==}
+ peerDependencies:
+ '@solana/web3.js': '*'
+
+ '@stellar/js-xdr@3.1.2':
+ resolution: {integrity: sha512-VVolPL5goVEIsvuGqDc5uiKxV03lzfWdvYg1KikvwheDmTBO68CKDji3bAZ/kppZrx5iTA8z3Ld5yuytcvhvOQ==}
+
+ '@stellar/stellar-base@14.1.0':
+ resolution: {integrity: sha512-A8kFli6QGy22SRF45IjgPAJfUNGjnI+R7g4DF5NZYVsD1kGf7B4ITyc4OPclLV9tqNI4/lXxafGEw0JEUbHixw==}
+ engines: {node: '>=20.0.0'}
+
+ '@stellar/stellar-sdk@14.2.0':
+ resolution: {integrity: sha512-7nh2ogzLRMhfkIC0fGjn1LHUzk3jqVw8tjAuTt5ADWfL9CSGBL18ILucE9igz2L/RU2AZgeAvhujAnW91Ut/oQ==}
+ engines: {node: '>=20.0.0'}
+
+ '@swc/helpers@0.5.19':
+ resolution: {integrity: sha512-QamiFeIK3txNjgUTNppE6MiG3p7TdninpZu0E0PbqVh1a9FNLT2FRhisaa4NcaX52XVhA5l7Pk58Ft7Sqi/2sA==}
+
+ '@tailwindcss/node@4.2.1':
+ resolution: {integrity: sha512-jlx6sLk4EOwO6hHe1oCGm1Q4AN/s0rSrTTPBGPM0/RQ6Uylwq17FuU8IeJJKEjtc6K6O07zsvP+gDO6MMWo7pg==}
+
+ '@tailwindcss/oxide-android-arm64@4.2.1':
+ resolution: {integrity: sha512-eZ7G1Zm5EC8OOKaesIKuw77jw++QJ2lL9N+dDpdQiAB/c/B2wDh0QPFHbkBVrXnwNugvrbJFk1gK2SsVjwWReg==}
+ engines: {node: '>= 20'}
+ cpu: [arm64]
+ os: [android]
+
+ '@tailwindcss/oxide-darwin-arm64@4.2.1':
+ resolution: {integrity: sha512-q/LHkOstoJ7pI1J0q6djesLzRvQSIfEto148ppAd+BVQK0JYjQIFSK3JgYZJa+Yzi0DDa52ZsQx2rqytBnf8Hw==}
+ engines: {node: '>= 20'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@tailwindcss/oxide-darwin-x64@4.2.1':
+ resolution: {integrity: sha512-/f/ozlaXGY6QLbpvd/kFTro2l18f7dHKpB+ieXz+Cijl4Mt9AI2rTrpq7V+t04nK+j9XBQHnSMdeQRhbGyt6fw==}
+ engines: {node: '>= 20'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@tailwindcss/oxide-freebsd-x64@4.2.1':
+ resolution: {integrity: sha512-5e/AkgYJT/cpbkys/OU2Ei2jdETCLlifwm7ogMC7/hksI2fC3iiq6OcXwjibcIjPung0kRtR3TxEITkqgn0TcA==}
+ engines: {node: '>= 20'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.1':
+ resolution: {integrity: sha512-Uny1EcVTTmerCKt/1ZuKTkb0x8ZaiuYucg2/kImO5A5Y/kBz41/+j0gxUZl+hTF3xkWpDmHX+TaWhOtba2Fyuw==}
+ engines: {node: '>= 20'}
+ cpu: [arm]
+ os: [linux]
+
+ '@tailwindcss/oxide-linux-arm64-gnu@4.2.1':
+ resolution: {integrity: sha512-CTrwomI+c7n6aSSQlsPL0roRiNMDQ/YzMD9EjcR+H4f0I1SQ8QqIuPnsVp7QgMkC1Qi8rtkekLkOFjo7OlEFRQ==}
+ engines: {node: '>= 20'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@tailwindcss/oxide-linux-arm64-musl@4.2.1':
+ resolution: {integrity: sha512-WZA0CHRL/SP1TRbA5mp9htsppSEkWuQ4KsSUumYQnyl8ZdT39ntwqmz4IUHGN6p4XdSlYfJwM4rRzZLShHsGAQ==}
+ engines: {node: '>= 20'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@tailwindcss/oxide-linux-x64-gnu@4.2.1':
+ resolution: {integrity: sha512-qMFzxI2YlBOLW5PhblzuSWlWfwLHaneBE0xHzLrBgNtqN6mWfs+qYbhryGSXQjFYB1Dzf5w+LN5qbUTPhW7Y5g==}
+ engines: {node: '>= 20'}
+ cpu: [x64]
+ os: [linux]
+
+ '@tailwindcss/oxide-linux-x64-musl@4.2.1':
+ resolution: {integrity: sha512-5r1X2FKnCMUPlXTWRYpHdPYUY6a1Ar/t7P24OuiEdEOmms5lyqjDRvVY1yy9Rmioh+AunQ0rWiOTPE8F9A3v5g==}
+ engines: {node: '>= 20'}
+ cpu: [x64]
+ os: [linux]
+
+ '@tailwindcss/oxide-wasm32-wasi@4.2.1':
+ resolution: {integrity: sha512-MGFB5cVPvshR85MTJkEvqDUnuNoysrsRxd6vnk1Lf2tbiqNlXpHYZqkqOQalydienEWOHHFyyuTSYRsLfxFJ2Q==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+ bundledDependencies:
+ - '@napi-rs/wasm-runtime'
+ - '@emnapi/core'
+ - '@emnapi/runtime'
+ - '@tybys/wasm-util'
+ - '@emnapi/wasi-threads'
+ - tslib
+
+ '@tailwindcss/oxide-win32-arm64-msvc@4.2.1':
+ resolution: {integrity: sha512-YlUEHRHBGnCMh4Nj4GnqQyBtsshUPdiNroZj8VPkvTZSoHsilRCwXcVKnG9kyi0ZFAS/3u+qKHBdDc81SADTRA==}
+ engines: {node: '>= 20'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@tailwindcss/oxide-win32-x64-msvc@4.2.1':
+ resolution: {integrity: sha512-rbO34G5sMWWyrN/idLeVxAZgAKWrn5LiR3/I90Q9MkA67s6T1oB0xtTe+0heoBvHSpbU9Mk7i6uwJnpo4u21XQ==}
+ engines: {node: '>= 20'}
+ cpu: [x64]
+ os: [win32]
+
+ '@tailwindcss/oxide@4.2.1':
+ resolution: {integrity: sha512-yv9jeEFWnjKCI6/T3Oq50yQEOqmpmpfzG1hcZsAOaXFQPfzWprWrlHSdGPEF3WQTi8zu8ohC9Mh9J470nT5pUw==}
+ engines: {node: '>= 20'}
+
+ '@tailwindcss/vite@4.2.1':
+ resolution: {integrity: sha512-TBf2sJjYeb28jD2U/OhwdW0bbOsxkWPwQ7SrqGf9sVcoYwZj7rkXljroBO9wKBut9XnmQLXanuDUeqQK0lGg/w==}
+ peerDependencies:
+ vite: ^5.2.0 || ^6 || ^7
+
+ '@toruslabs/base-controllers@5.11.0':
+ resolution: {integrity: sha512-5AsGOlpf3DRIsd6PzEemBoRq+o2OhgSFXj5LZD6gXcBlfe0OpF+ydJb7Q8rIt5wwpQLNJCs8psBUbqIv7ukD2w==}
+ engines: {node: '>=18.x', npm: '>=9.x'}
+ peerDependencies:
+ '@babel/runtime': 7.x
+
+ '@toruslabs/broadcast-channel@10.0.2':
+ resolution: {integrity: sha512-aZbKNgV/OhiTKSdxBTGO86xRdeR7Ct1vkB8yeyXRX32moARhZ69uJQL49jKh4cWKV3VeijrL9XvKdn5bzgHQZg==}
+ engines: {node: '>=18.x', npm: '>=9.x'}
+
+ '@toruslabs/constants@13.4.0':
+ resolution: {integrity: sha512-CjmnMQ5Oj0bqSBGkhv7Xm3LciGJDHwe4AJ1LF6mijlP+QcCnUM5I6kVp60j7zZ/r0DT7nIEiuHHHczGpCZor0A==}
+ engines: {node: '>=18.x', npm: '>=9.x'}
+ peerDependencies:
+ '@babel/runtime': 7.x
+
+ '@toruslabs/eccrypto@4.0.0':
+ resolution: {integrity: sha512-Z3EINkbsgJx1t6jCDVIJjLSUEGUtNIeDjhMWmeDGOWcP/+v/yQ1hEvd1wfxEz4q5WqIHhevacmPiVxiJ4DljGQ==}
+ engines: {node: '>=18.x', npm: '>=9.x'}
+
+ '@toruslabs/http-helpers@6.1.1':
+ resolution: {integrity: sha512-bJYOaltRzklzObhRdutT1wau17vXyrCCBKJOeN46F1t99MUXi5udQNeErFOcr9qBsvrq2q67eVBkU5XOeBMX5A==}
+ engines: {node: '>=18.x', npm: '>=9.x'}
+ peerDependencies:
+ '@babel/runtime': ^7.x
+ '@sentry/types': ^7.x
+ peerDependenciesMeta:
+ '@sentry/types':
+ optional: true
+
+ '@toruslabs/metadata-helpers@5.1.0':
+ resolution: {integrity: sha512-7fdqKuWUaJT/ng+PlqrA4XKkn8Dij4JJozfv/4gHTi0f/6JFncpzIces09jTV70hCf0JIsTCvIDlzKOdJ+aeZg==}
+ engines: {node: '>=18.x', npm: '>=9.x'}
+ peerDependencies:
+ '@babel/runtime': 7.x
+
+ '@toruslabs/openlogin-jrpc@8.3.0':
+ resolution: {integrity: sha512-1OdSkUXGXJobkkMIJHuf+XzwmUB4ROy6uQfPEJ3NXvNj84+N4hNpvC4JPg7VoWBHdfCba9cv6QnQsVArlwai4A==}
+ engines: {node: '>=18.x', npm: '>=9.x'}
+ peerDependencies:
+ '@babel/runtime': 7.x
+
+ '@toruslabs/openlogin-utils@8.2.1':
+ resolution: {integrity: sha512-NSOtj61NZe7w9qbd92cYwMlE/1UwPGtDH02NfUjoEEc3p1yD5U2cLZjdSwsnAgjGNgRqVomXpND4hii12lI/ew==}
+ engines: {node: '>=18.x', npm: '>=9.x'}
+ peerDependencies:
+ '@babel/runtime': 7.x
+
+ '@toruslabs/solana-embed@2.1.0':
+ resolution: {integrity: sha512-rgZniKy+yuqJp8/Z/RcqzhTL4iCH+4nP55XD5T2nEIajAClsmonsGp24AUqYwEqu+7x2hjumZEh+12rUv+Ippw==}
+ engines: {node: '>=18.x', npm: '>=9.x'}
+ deprecated: This sdk is now deprecated. Please use @web3auth/ws-embed instead
+ peerDependencies:
+ '@babel/runtime': 7.x
+
+ '@trezor/analytics@1.5.0':
+ resolution: {integrity: sha512-evILW5XJEmfPlf0TY1duOLtGJ47pdGeSKVE3P75ODEUsRNxtPVqlkOUBPmYpCxPnzS8XDmkatT8lf9/DF0G6nA==}
+ peerDependencies:
+ tslib: ^2.6.2
+
+ '@trezor/blockchain-link-types@1.5.0':
+ resolution: {integrity: sha512-wD6FKKxNr89MTWYL+NikRkBcWXhiWNFR0AuDHW6GHmlCEHhKu/hAvQtcER8X5jt/Wd0hSKNZqtHBXJ1ZkpJ6rg==}
+ peerDependencies:
+ tslib: ^2.6.2
+
+ '@trezor/blockchain-link-types@1.5.1':
+ resolution: {integrity: sha512-Idavz6LwLBW8sXc69fh5AJEnl666EDl2Nt3io7updvBgOR0/P12I900DgjNhCKtiWuv66A33/5RE7zLcj3lfnw==}
+ peerDependencies:
+ tslib: ^2.6.2
+
+ '@trezor/blockchain-link-utils@1.5.1':
+ resolution: {integrity: sha512-2tDGLEj5jzydjsJQONGTWVmCDDy6FTZ4ytr1/2gE6anyYEJU8MbaR+liTt3UvcP5jwZTNutwYLvZixRfrb8JpA==}
+ peerDependencies:
+ tslib: ^2.6.2
+
+ '@trezor/blockchain-link-utils@1.5.2':
+ resolution: {integrity: sha512-OSS5OEE98FMnYfjoEALPjBt7ebjC/FKnq3HOolHdEWXBpVlXZNN2+Vo1R9J6WbZUU087sHuUTJJy/GJYWY13Tg==}
+ peerDependencies:
+ tslib: ^2.6.2
+
+ '@trezor/blockchain-link@2.6.1':
+ resolution: {integrity: sha512-SPwxkihOMI0o79BOy0RkfgVL2meuJhIe1yWHCeR8uoqf5KGblUyeXxvNCy6w8ckJ9LRpM1+bZhsUODuNs3083Q==}
+ peerDependencies:
+ tslib: ^2.6.2
+
+ '@trezor/connect-analytics@1.4.0':
+ resolution: {integrity: sha512-hy2J2oeIhRC/e1bOWXo5dsVMVnDwO2UKnxhR6FD8PINR3jgM6PWAXc6k33WJsBcyiTzwMP7/xPysLcgNJH5o4w==}
+ peerDependencies:
+ tslib: ^2.6.2
+
+ '@trezor/connect-common@0.5.1':
+ resolution: {integrity: sha512-wdpVCwdylBh4SBO5Ys40tB/d59UlfjmxgBHDkkLgaR+JcqkthCfiw5VlUrV9wu65lquejAZhA5KQL4mUUUhCow==}
+ peerDependencies:
+ tslib: ^2.6.2
+
+ '@trezor/connect-web@9.7.2':
+ resolution: {integrity: sha512-r4wMnQ51KO1EaMpO8HLB95E+4s+aaZE9Vjx1dHYaD+Xj40LR7OJmR6DyDKuF0Ioji3Jxx1MwZCaFfvA+0JW+Sg==}
+ peerDependencies:
+ tslib: ^2.6.2
+
+ '@trezor/connect@9.7.2':
+ resolution: {integrity: sha512-Sn6F4mNH+yi2vAHy29kwhs50bRLn92drg3znm3pkY+8yEBxI4MmuP8sKYjdgUEJnQflWh80KlcvEDeVa4olVRA==}
+ peerDependencies:
+ tslib: ^2.6.2
+
+ '@trezor/crypto-utils@1.2.0':
+ resolution: {integrity: sha512-9i1NrfW1IE6JO910ut7xrx4u5LxE++GETbpJhWLj4P5xpuGDDSDLEn/MXaYisls2DpE897aOrGPaa1qyt8V6tw==}
+ peerDependencies:
+ tslib: ^2.6.2
+
+ '@trezor/device-authenticity@1.1.2':
+ resolution: {integrity: sha512-313uSXYR4XKDv3CjtCpgHA+yEe9xxqN7EFl/D68FEn70SPsuWI0+2zUvjPPh6TIOh/EcLv7hCO/QTHUAGd7ZWQ==}
+
+ '@trezor/device-utils@1.2.0':
+ resolution: {integrity: sha512-Aqp7pIooFTx21zRUtTI6i1AS4d9Lrx7cclvksh2nJQF9WJvbzuCXshEGkLoOsHwhQrCl3IXfbGuMdA12yDenPA==}
+
+ '@trezor/env-utils@1.5.0':
+ resolution: {integrity: sha512-u1TN7dMQ5Qhpbae08Z4JJmI9fQrbbJ4yj8eIAsuzMQn6vb+Sg9vbntl+IDsZ1G9WeI73uHTLu1wWMmAgiujH8w==}
+ peerDependencies:
+ expo-constants: '*'
+ expo-localization: '*'
+ react-native: '*'
+ tslib: ^2.6.2
+ peerDependenciesMeta:
+ expo-constants:
+ optional: true
+ expo-localization:
+ optional: true
+ react-native:
+ optional: true
+
+ '@trezor/protobuf@1.5.1':
+ resolution: {integrity: sha512-nAkaCCAqLpErBd+IuKeG5MpbyLR/2RMgCw18TWc80m1Ws/XgQirhHY9Jbk6gLImTXb9GTrxP0+MDSahzd94rSA==}
+ peerDependencies:
+ tslib: ^2.6.2
+
+ '@trezor/protobuf@1.5.2':
+ resolution: {integrity: sha512-zViaL1jKue8DUTVEDg0C/lMipqNMd/Z3kr29/+MeZOoupjaXIQ2Lqp3WAMe8hvNTKKX8aNQH9JrbapJ6w9FMXw==}
+ peerDependencies:
+ tslib: ^2.6.2
+
+ '@trezor/protocol@1.3.0':
+ resolution: {integrity: sha512-rmrxbDrdgxTouBPbZcSeqU7ba/e5WVT1dxvxxEntHqRdTiDl7d3VK+BErCrlyol8EH5YCqEF3/rXt0crSOfoFw==}
+ peerDependencies:
+ tslib: ^2.6.2
+
+ '@trezor/schema-utils@1.4.0':
+ resolution: {integrity: sha512-K7upSeh7VDrORaIC4KAxYVW93XNlohmUnH5if/5GKYmTdQSRp1nBkO6Jm+Z4hzIthdnz/1aLgnbeN3bDxWLRxA==}
+ peerDependencies:
+ tslib: ^2.6.2
+
+ '@trezor/transport@1.6.2':
+ resolution: {integrity: sha512-w0HlD1fU+qTGO3tefBGHF/YS/ts/TWFja9FGIJ4+7+Z9NphvIG06HGvy2HzcD9AhJy9pvDeIsyoM2TTZTiyjkQ==}
+ peerDependencies:
+ tslib: ^2.6.2
+
+ '@trezor/type-utils@1.2.0':
+ resolution: {integrity: sha512-+E2QntxkyQuYfQQyl8RvT01tq2i5Dp/LFUOXuizF+KVOqsZBjBY43j5hewcCO3+MokD7deDiPyekbUEN5/iVlw==}
+
+ '@trezor/utils@9.5.0':
+ resolution: {integrity: sha512-kdyMyDbxzvOZmwBNvTjAK+C/kzyOz8T4oUbFvq+KaXn5mBFf1uf8rq5X2HkxgdYRPArtHS3PxLKsfkNCdhCYtQ==}
+ peerDependencies:
+ tslib: ^2.6.2
+
+ '@trezor/utxo-lib@2.5.0':
+ resolution: {integrity: sha512-Fa2cZh0037oX6AHNLfpFIj65UR/OoX0ZJTocFuQASe77/1PjZHysf6BvvGfmzuFToKfrAQ+DM/1Sx+P/vnyNmA==}
+ peerDependencies:
+ tslib: ^2.6.2
+
+ '@trezor/websocket-client@1.3.0':
+ resolution: {integrity: sha512-9KQSaVc3NtmM6rFFj1e+9bM0C5mVKVidbnxlfzuBJu7G2YMRdIdLPcAXhvmRZjs40uzDuBeApK+p547kODz2ug==}
+ peerDependencies:
+ tslib: ^2.6.2
+
+ '@tweenjs/tween.js@23.1.3':
+ resolution: {integrity: sha512-vJmvvwFxYuGnF2axRtPYocag6Clbb5YS7kLL+SO/TeVFzHqDIWrNKYtcsPMibjDx9O+bu+psAy9NKfWklassUA==}
+
+ '@types/babel__core@7.20.5':
+ resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
+
+ '@types/babel__generator@7.27.0':
+ resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==}
+
+ '@types/babel__template@7.4.4':
+ resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
+
+ '@types/babel__traverse@7.28.0':
+ resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/d3-array@3.2.2':
+ resolution: {integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==}
+
+ '@types/d3-axis@3.0.6':
+ resolution: {integrity: sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==}
+
+ '@types/d3-brush@3.0.6':
+ resolution: {integrity: sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==}
+
+ '@types/d3-chord@3.0.6':
+ resolution: {integrity: sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==}
+
+ '@types/d3-color@3.1.3':
+ resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==}
+
+ '@types/d3-contour@3.0.6':
+ resolution: {integrity: sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==}
+
+ '@types/d3-delaunay@6.0.4':
+ resolution: {integrity: sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==}
+
+ '@types/d3-dispatch@3.0.7':
+ resolution: {integrity: sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA==}
+
+ '@types/d3-drag@3.0.7':
+ resolution: {integrity: sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==}
+
+ '@types/d3-dsv@3.0.7':
+ resolution: {integrity: sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==}
+
+ '@types/d3-ease@3.0.2':
+ resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==}
+
+ '@types/d3-fetch@3.0.7':
+ resolution: {integrity: sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==}
+
+ '@types/d3-force@3.0.10':
+ resolution: {integrity: sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==}
+
+ '@types/d3-format@3.0.4':
+ resolution: {integrity: sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==}
+
+ '@types/d3-geo@3.1.0':
+ resolution: {integrity: sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==}
+
+ '@types/d3-hierarchy@3.1.7':
+ resolution: {integrity: sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==}
+
+ '@types/d3-interpolate@3.0.4':
+ resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==}
+
+ '@types/d3-path@3.1.1':
+ resolution: {integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==}
+
+ '@types/d3-polygon@3.0.2':
+ resolution: {integrity: sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==}
+
+ '@types/d3-quadtree@3.0.6':
+ resolution: {integrity: sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==}
+
+ '@types/d3-random@3.0.3':
+ resolution: {integrity: sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==}
+
+ '@types/d3-scale-chromatic@3.1.0':
+ resolution: {integrity: sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==}
+
+ '@types/d3-scale@4.0.9':
+ resolution: {integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==}
+
+ '@types/d3-selection@3.0.11':
+ resolution: {integrity: sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==}
+
+ '@types/d3-shape@3.1.8':
+ resolution: {integrity: sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==}
+
+ '@types/d3-time-format@4.0.3':
+ resolution: {integrity: sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==}
+
+ '@types/d3-time@3.0.4':
+ resolution: {integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==}
+
+ '@types/d3-timer@3.0.2':
+ resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==}
+
+ '@types/d3-transition@3.0.9':
+ resolution: {integrity: sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==}
+
+ '@types/d3-zoom@3.0.8':
+ resolution: {integrity: sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==}
+
+ '@types/d3@7.4.3':
+ resolution: {integrity: sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==}
+
+ '@types/debug@4.1.12':
+ resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
+
+ '@types/draco3d@1.4.10':
+ resolution: {integrity: sha512-AX22jp8Y7wwaBgAixaSvkoG4M/+PlAcm3Qs4OW8yT9DM4xUpWKeFhLueTAyZF39pviAdcDdeJoACapiAceqNcw==}
+
+ '@types/estree-jsx@1.0.5':
+ resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==}
+
+ '@types/estree@1.0.8':
+ resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+
+ '@types/geojson@7946.0.16':
+ resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==}
+
+ '@types/graceful-fs@4.1.9':
+ resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==}
+
+ '@types/hast@3.0.4':
+ resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}
+
+ '@types/istanbul-lib-coverage@2.0.6':
+ resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==}
+
+ '@types/istanbul-lib-report@3.0.3':
+ resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==}
+
+ '@types/istanbul-reports@3.0.4':
+ resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==}
+
+ '@types/mdast@4.0.4':
+ resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==}
+
+ '@types/mdx@2.0.13':
+ resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==}
+
+ '@types/ms@2.1.0':
+ resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@22.7.5':
+ resolution: {integrity: sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==}
+
+ '@types/node@25.5.0':
+ resolution: {integrity: sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==}
+
+ '@types/offscreencanvas@2019.7.3':
+ resolution: {integrity: sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A==}
+
+ '@types/react-dom@19.2.3':
+ resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==}
+ peerDependencies:
+ '@types/react': ^19.2.0
+
+ '@types/react-reconciler@0.28.9':
+ resolution: {integrity: sha512-HHM3nxyUZ3zAylX8ZEyrDNd2XZOnQ0D5XfunJF5FLQnZbHHYq4UWvW1QfelQNXv1ICNkwYhfxjwfnqivYB6bFg==}
+ peerDependencies:
+ '@types/react': '*'
+
+ '@types/react@19.2.14':
+ resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==}
+
+ '@types/stack-utils@2.0.3':
+ resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==}
+
+ '@types/stats.js@0.17.4':
+ resolution: {integrity: sha512-jIBvWWShCvlBqBNIZt0KAshWpvSjhkwkEu4ZUcASoAvhmrgAUI2t1dXrjSL4xXVLB4FznPrIsX3nKXFl/Dt4vA==}
+
+ '@types/three@0.183.1':
+ resolution: {integrity: sha512-f2Pu5Hrepfgavttdye3PsH5RWyY/AvdZQwIVhrc4uNtvF7nOWJacQKcoVJn0S4f0yYbmAE6AR+ve7xDcuYtMGw==}
+
+ '@types/trusted-types@2.0.7':
+ resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==}
+
+ '@types/unist@2.0.11':
+ resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==}
+
+ '@types/unist@3.0.3':
+ resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
+
+ '@types/uuid@10.0.0':
+ resolution: {integrity: sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==}
+
+ '@types/uuid@8.3.4':
+ resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==}
+
+ '@types/w3c-web-usb@1.0.13':
+ resolution: {integrity: sha512-N2nSl3Xsx8mRHZBvMSdNGtzMyeleTvtlEw+ujujgXalPqOjIA6UtrqcB6OzyUjkTbDm3J7P1RNK1lgoO7jxtsw==}
+
+ '@types/web@0.0.197':
+ resolution: {integrity: sha512-V4sOroWDADFx9dLodWpKm298NOJ1VJ6zoDVgaP+WBb/utWxqQ6gnMzd9lvVDAr/F3ibiKaxH9i45eS0gQPSTaQ==}
+
+ '@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==}
+
+ '@types/yargs@17.0.35':
+ resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==}
+
+ '@ungap/structured-clone@1.3.0':
+ resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
+
+ '@use-gesture/core@10.3.1':
+ resolution: {integrity: sha512-WcINiDt8WjqBdUXye25anHiNxPc0VOrlT8F6LLkU6cycrOGUDyY/yyFmsg3k8i5OLvv25llc0QC45GhR/C8llw==}
+
+ '@use-gesture/react@10.3.1':
+ resolution: {integrity: sha512-Yy19y6O2GJq8f7CHf7L0nxL8bf4PZCPaVOCgJrusOeFHY1LvHgYXnmnXg6N5iwAnbgbZCDjo60SiM6IPJi9C5g==}
+ peerDependencies:
+ react: '>= 16.8.0'
+
+ '@vitejs/plugin-react@4.7.0':
+ resolution: {integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ peerDependencies:
+ vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.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'}
+
+ '@walletconnect/core@2.19.0':
+ resolution: {integrity: sha512-AEoyICLHQEnjijZr9XsL4xtFhC5Cmu0RsEGxAxmwxbfGvAcYcSCNp1fYq0Q6nHc8jyoPOALpwySTle300Y1vxw==}
+ engines: {node: '>=18'}
+
+ '@walletconnect/core@2.19.1':
+ resolution: {integrity: sha512-rMvpZS0tQXR/ivzOxN1GkHvw3jRRMlI/jRX5g7ZteLgg2L0ZcANsFvAU5IxILxIKcIkTCloF9TcfloKVbK3qmw==}
+ engines: {node: '>=18'}
+
+ '@walletconnect/environment@1.0.1':
+ resolution: {integrity: sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg==}
+
+ '@walletconnect/events@1.0.1':
+ resolution: {integrity: sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ==}
+
+ '@walletconnect/heartbeat@1.2.2':
+ resolution: {integrity: sha512-uASiRmC5MwhuRuf05vq4AT48Pq8RMi876zV8rr8cV969uTOzWdB/k+Lj5yI2PBtB1bGQisGen7MM1GcZlQTBXw==}
+
+ '@walletconnect/jsonrpc-http-connection@1.0.8':
+ resolution: {integrity: sha512-+B7cRuaxijLeFDJUq5hAzNyef3e3tBDIxyaCNmFtjwnod5AGis3RToNqzFU33vpVcxFhofkpE7Cx+5MYejbMGw==}
+
+ '@walletconnect/jsonrpc-provider@1.0.14':
+ resolution: {integrity: sha512-rtsNY1XqHvWj0EtITNeuf8PHMvlCLiS3EjQL+WOkxEOA4KPxsohFnBDeyPYiNm4ZvkQdLnece36opYidmtbmow==}
+
+ '@walletconnect/jsonrpc-types@1.0.4':
+ resolution: {integrity: sha512-P6679fG/M+wuWg9TY8mh6xFSdYnFyFjwFelxyISxMDrlbXokorEVXYOxiqEbrU3x1BmBoCAJJ+vtEaEoMlpCBQ==}
+
+ '@walletconnect/jsonrpc-utils@1.0.8':
+ resolution: {integrity: sha512-vdeb03bD8VzJUL6ZtzRYsFMq1eZQcM3EAzT0a3st59dyLfJ0wq+tKMpmGH7HlB7waD858UWgfIcudbPFsbzVdw==}
+
+ '@walletconnect/jsonrpc-ws-connection@1.0.16':
+ resolution: {integrity: sha512-G81JmsMqh5nJheE1mPst1W0WfVv0SG3N7JggwLLGnI7iuDZJq8cRJvQwLGKHn5H1WTW7DEPCo00zz5w62AbL3Q==}
+
+ '@walletconnect/keyvaluestorage@1.1.1':
+ resolution: {integrity: sha512-V7ZQq2+mSxAq7MrRqDxanTzu2RcElfK1PfNYiaVnJgJ7Q7G7hTVwF8voIBx92qsRyGHZihrwNPHuZd1aKkd0rA==}
+ peerDependencies:
+ '@react-native-async-storage/async-storage': 1.x
+ peerDependenciesMeta:
+ '@react-native-async-storage/async-storage':
+ optional: true
+
+ '@walletconnect/logger@2.1.2':
+ resolution: {integrity: sha512-aAb28I3S6pYXZHQm5ESB+V6rDqIYfsnHaQyzFbwUUBFY4H0OXx/YtTl8lvhUNhMMfb9UxbwEBS253TlXUYJWSw==}
+
+ '@walletconnect/relay-api@1.0.11':
+ resolution: {integrity: sha512-tLPErkze/HmC9aCmdZOhtVmYZq1wKfWTJtygQHoWtgg722Jd4homo54Cs4ak2RUFUZIGO2RsOpIcWipaua5D5Q==}
+
+ '@walletconnect/relay-auth@1.1.0':
+ resolution: {integrity: sha512-qFw+a9uRz26jRCDgL7Q5TA9qYIgcNY8jpJzI1zAWNZ8i7mQjaijRnWFKsCHAU9CyGjvt6RKrRXyFtFOpWTVmCQ==}
+
+ '@walletconnect/safe-json@1.0.2':
+ resolution: {integrity: sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA==}
+
+ '@walletconnect/sign-client@2.19.0':
+ resolution: {integrity: sha512-+GkuJzPK9SPq+RZgdKHNOvgRagxh/hhYWFHOeSiGh3DyAQofWuFTq4UrN/MPjKOYswSSBKfIa+iqKYsi4t8zLQ==}
+ deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases'
+
+ '@walletconnect/sign-client@2.19.1':
+ resolution: {integrity: sha512-OgBHRPo423S02ceN3lAzcZ3MYb1XuLyTTkKqLmKp/icYZCyRzm3/ynqJDKndiBLJ5LTic0y07LiZilnliYqlvw==}
+ deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases'
+
+ '@walletconnect/solana-adapter@0.0.8':
+ resolution: {integrity: sha512-Qb7MT8SdkeBldfUCmF+rYW6vL98mxPuT1yAwww5X2vpx7xEPZvFCoAKnyT5fXu0v56rMxhW3MGejnHyyYdDY7Q==}
+ peerDependencies:
+ '@solana/wallet-adapter-base': 0.x
+ '@solana/web3.js': 1.x
+
+ '@walletconnect/time@1.0.2':
+ resolution: {integrity: sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g==}
+
+ '@walletconnect/types@2.19.0':
+ resolution: {integrity: sha512-Ttse3p3DCdFQ/TRQrsPMQJzFr7cb/2AF5ltLPzXRNMmapmGydc6WO8QU7g/tGEB3RT9nHcLY2aqlwsND9sXMxA==}
+
+ '@walletconnect/types@2.19.1':
+ resolution: {integrity: sha512-XWWGLioddH7MjxhyGhylL7VVariVON2XatJq/hy0kSGJ1hdp31z194nHN5ly9M495J9Hw8lcYjGXpsgeKvgxzw==}
+
+ '@walletconnect/universal-provider@2.19.0':
+ resolution: {integrity: sha512-e9JvadT5F8QwdLmd7qBrmACq04MT7LQEe1m3X2Fzvs3DWo8dzY8QbacnJy4XSv5PCdxMWnua+2EavBk8nrI9QA==}
+ deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases'
+
+ '@walletconnect/universal-provider@2.19.1':
+ resolution: {integrity: sha512-4rdLvJ2TGDIieNWW3sZw2MXlX65iHpTuKb5vyvUHQtjIVNLj+7X/09iUAI/poswhtspBK0ytwbH+AIT/nbGpjg==}
+ deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases'
+
+ '@walletconnect/utils@2.19.0':
+ resolution: {integrity: sha512-LZ0D8kevknKfrfA0Sq3Hf3PpmM8oWyNfsyWwFR51t//2LBgtN2Amz5xyoDDJcjLibIbKAxpuo/i0JYAQxz+aPA==}
+
+ '@walletconnect/utils@2.19.1':
+ resolution: {integrity: sha512-aOwcg+Hpph8niJSXLqkU25pmLR49B8ECXp5gFQDW5IeVgXHoOoK7w8a79GBhIBheMLlIt1322sTKQ7Rq5KzzFg==}
+
+ '@walletconnect/window-getters@1.0.1':
+ resolution: {integrity: sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q==}
+
+ '@walletconnect/window-metadata@1.0.1':
+ resolution: {integrity: sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA==}
+
+ '@webgpu/types@0.1.69':
+ resolution: {integrity: sha512-RPmm6kgRbI8e98zSD3RVACvnuktIja5+yLgDAkTmxLr90BEwdTXRQWNLF3ETTTyH/8mKhznZuN5AveXYFEsMGQ==}
+
+ '@xrplf/isomorphic@1.0.1':
+ resolution: {integrity: sha512-0bIpgx8PDjYdrLFeC3csF305QQ1L7sxaWnL5y71mCvhenZzJgku9QsA+9QCXBC1eNYtxWO/xR91zrXJy2T/ixg==}
+ engines: {node: '>=16.0.0'}
+
+ '@xrplf/secret-numbers@2.0.0':
+ resolution: {integrity: sha512-z3AOibRTE9E8MbjgzxqMpG1RNaBhQ1jnfhNCa1cGf2reZUJzPMYs4TggQTc7j8+0WyV3cr7y/U8Oz99SXIkN5Q==}
+
+ abitype@1.0.8:
+ resolution: {integrity: sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg==}
+ peerDependencies:
+ typescript: '>=5.0.4'
+ zod: ^3 >=3.22.0
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ zod:
+ optional: true
+
+ abitype@1.2.3:
+ resolution: {integrity: sha512-Ofer5QUnuUdTFsBRwARMoWKOH1ND5ehwYhJ3OJ/BQO+StkwQjHw0XyVh4vDttzHB7QOFhPHa/o413PJ82gU/Tg==}
+ peerDependencies:
+ typescript: '>=5.0.4'
+ zod: ^3.22.0 || ^4.0.0
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ zod:
+ optional: true
+
+ abort-controller@3.0.0:
+ resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
+ engines: {node: '>=6.5'}
+
+ accepts@2.0.0:
+ resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==}
+ engines: {node: '>= 0.6'}
+
+ acorn-jsx@5.3.2:
+ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+
+ acorn@8.16.0:
+ resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
+ aes-js@4.0.0-beta.5:
+ resolution: {integrity: sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==}
+
+ agent-base@7.1.4:
+ resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==}
+ engines: {node: '>= 14'}
+
+ agentkeepalive@4.6.0:
+ resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==}
+ engines: {node: '>= 8.0.0'}
+
+ anser@1.4.10:
+ resolution: {integrity: sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ ansi-styles@5.2.0:
+ resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
+ engines: {node: '>=10'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@1.0.10:
+ resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
+
+ aria-hidden@1.2.6:
+ resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==}
+ engines: {node: '>=10'}
+
+ asap@2.0.6:
+ resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==}
+
+ asn1.js@4.10.1:
+ resolution: {integrity: sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==}
+
+ assert@2.1.0:
+ resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==}
+
+ astring@1.9.0:
+ resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==}
+ hasBin: true
+
+ async-mutex@0.5.0:
+ resolution: {integrity: sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA==}
+
+ asynckit@0.4.0:
+ resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
+
+ atomic-sleep@1.0.0:
+ resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==}
+ engines: {node: '>=8.0.0'}
+
+ available-typed-arrays@1.0.7:
+ resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
+ engines: {node: '>= 0.4'}
+
+ axios@1.13.6:
+ resolution: {integrity: sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ==}
+
+ babel-jest@29.7.0:
+ resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ peerDependencies:
+ '@babel/core': ^7.8.0
+
+ babel-plugin-istanbul@6.1.1:
+ resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==}
+ engines: {node: '>=8'}
+
+ babel-plugin-jest-hoist@29.6.3:
+ resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ babel-plugin-syntax-hermes-parser@0.32.0:
+ resolution: {integrity: sha512-m5HthL++AbyeEA2FcdwOLfVFvWYECOBObLHNqdR8ceY4TsEdn4LdX2oTvbB2QJSSElE2AWA/b2MXZ/PF/CqLZg==}
+
+ babel-preset-current-node-syntax@1.2.0:
+ resolution: {integrity: sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==}
+ peerDependencies:
+ '@babel/core': ^7.0.0 || ^8.0.0-0
+
+ babel-preset-jest@29.6.3:
+ resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ bail@2.0.2:
+ resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-x@3.0.11:
+ resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==}
+
+ base-x@4.0.1:
+ resolution: {integrity: sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==}
+
+ base-x@5.0.1:
+ resolution: {integrity: sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg==}
+
+ base32.js@0.1.0:
+ resolution: {integrity: sha512-n3TkB02ixgBOhTvANakDb4xaMXnYUVkNoRFJjQflcqMQhyEKxEHdj3E6N8t8sUQ0mjH/3/JxzlXuz3ul/J90pQ==}
+ engines: {node: '>=0.12.0'}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ base64url@3.0.1:
+ resolution: {integrity: sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==}
+ engines: {node: '>=6.0.0'}
+
+ baseline-browser-mapping@2.10.0:
+ resolution: {integrity: sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ bech32@2.0.0:
+ resolution: {integrity: sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==}
+
+ bidi-js@1.0.3:
+ resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==}
+
+ big-integer@1.6.36:
+ resolution: {integrity: sha512-t70bfa7HYEA1D9idDbmuv7YbsbVkQ+Hp+8KFSul4aE5e/i1bjCNIRYJZlA8Q8p0r9T8cF/RVvwUgRA//FydEyg==}
+ engines: {node: '>=0.6'}
+
+ big.js@6.2.2:
+ resolution: {integrity: sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ==}
+
+ bignumber.js@9.3.1:
+ resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bip66@2.0.0:
+ resolution: {integrity: sha512-kBG+hSpgvZBrkIm9dt5T1Hd/7xGCPEX2npoxAWZfsK1FvjgaxySEh2WizjyIstWXriKo9K9uJ4u0OnsyLDUPXQ==}
+
+ bitcoin-ops@1.4.1:
+ resolution: {integrity: sha512-pef6gxZFztEhaE9RY9HmWVmiIHqCb2OyS4HPKkpc6CIiiOa3Qmuoylxc5P2EkU3w+5eTSifI9SEZC88idAIGow==}
+
+ blake-hash@2.0.0:
+ resolution: {integrity: sha512-Igj8YowDu1PRkRsxZA7NVkdFNxH5rKv5cpLxQ0CVXSIA77pVYwCPRQJ2sMew/oneUpfuYRyjG6r8SmmmnbZb1w==}
+ engines: {node: '>= 10'}
+
+ blakejs@1.2.1:
+ resolution: {integrity: sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==}
+
+ bn.js@4.12.3:
+ resolution: {integrity: sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==}
+
+ bn.js@5.2.3:
+ resolution: {integrity: sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==}
+
+ borsh@0.7.0:
+ resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==}
+
+ bowser@2.14.1:
+ resolution: {integrity: sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==}
+
+ brace-expansion@1.1.12:
+ resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ brorand@1.1.0:
+ resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==}
+
+ browserify-aes@1.2.0:
+ resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==}
+
+ browserify-cipher@1.0.1:
+ resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==}
+
+ browserify-des@1.0.2:
+ resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==}
+
+ browserify-rsa@4.1.1:
+ resolution: {integrity: sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==}
+ engines: {node: '>= 0.10'}
+
+ browserify-sign@4.2.5:
+ resolution: {integrity: sha512-C2AUdAJg6rlM2W5QMp2Q4KGQMVBwR1lIimTsUnutJ8bMpW5B52pGpR2gEnNBNwijumDo5FojQ0L9JrXA8m4YEw==}
+ engines: {node: '>= 0.10'}
+
+ browserslist@4.28.1:
+ resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+
+ bs58@4.0.1:
+ resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==}
+
+ bs58@5.0.0:
+ resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==}
+
+ bs58@6.0.0:
+ resolution: {integrity: sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==}
+
+ bs58check@2.1.2:
+ resolution: {integrity: sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==}
+
+ bs58check@4.0.0:
+ resolution: {integrity: sha512-FsGDOnFg9aVI9erdriULkd/JjEWONV/lQE5aYziB5PoBsXRind56lh8doIZIc9X4HoxT5x4bLjMWN1/NB8Zp5g==}
+
+ bser@2.1.1:
+ resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==}
+
+ buffer-equal-constant-time@1.0.1:
+ resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer-xor@1.0.3:
+ resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==}
+
+ buffer@5.7.1:
+ resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bufferutil@4.1.0:
+ resolution: {integrity: sha512-ZMANVnAixE6AWWnPzlW2KpUrxhm9woycYvPOo67jWHyFowASTEd9s+QN1EIMsSDtwhIxN4sWE1jotpuDUIgyIw==}
+ engines: {node: '>=6.14.2'}
+
+ call-bind-apply-helpers@1.0.2:
+ resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
+ engines: {node: '>= 0.4'}
+
+ call-bind@1.0.8:
+ resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==}
+ engines: {node: '>= 0.4'}
+
+ call-bound@1.0.4:
+ resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==}
+ engines: {node: '>= 0.4'}
+
+ camelcase@5.3.1:
+ resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
+ engines: {node: '>=6'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ camera-controls@3.1.2:
+ resolution: {integrity: sha512-xkxfpG2ECZ6Ww5/9+kf4mfg1VEYAoe9aDSY+IwF0UEs7qEzwy0aVRfs2grImIECs/PoBtWFrh7RXsQkwG922JA==}
+ engines: {node: '>=22.0.0', npm: '>=10.5.1'}
+ peerDependencies:
+ three: '>=0.126.1'
+
+ caniuse-lite@1.0.30001774:
+ resolution: {integrity: sha512-DDdwPGz99nmIEv216hKSgLD+D4ikHQHjBC/seF98N9CPqRX4M5mSxT9eTV6oyisnJcuzxtZy4n17yKKQYmYQOA==}
+
+ cashaddrjs@0.4.4:
+ resolution: {integrity: sha512-xZkuWdNOh0uq/mxJIng6vYWfTowZLd9F4GMAlp2DwFHlcCqCm91NtuAc47RuV4L7r4PYcY5p6Cr2OKNb4hnkWA==}
+
+ cbor-sync@1.0.4:
+ resolution: {integrity: sha512-GWlXN4wiz0vdWWXBU71Dvc1q3aBo0HytqwAZnXF1wOwjqNnDWA1vZ1gDMFLlqohak31VQzmhiYfiCX5QSSfagA==}
+
+ cbor@10.0.12:
+ resolution: {integrity: sha512-exQDevYd7ZQLP4moMQcZkKCVZsXLAtUSflObr3xTh4xzFIv/xBCdvCd6L259kQOUP2kcTC0jvC6PpZIf/WmRXA==}
+ engines: {node: '>=20'}
+
+ ccount@2.0.1:
+ resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ chalk@5.6.2:
+ resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ character-entities-html4@2.1.0:
+ resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==}
+
+ character-entities-legacy@3.0.0:
+ resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==}
+
+ character-entities@2.0.2:
+ resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==}
+
+ character-reference-invalid@2.0.1:
+ resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==}
+
+ chevrotain-allstar@0.3.1:
+ resolution: {integrity: sha512-b7g+y9A0v4mxCW1qUhf3BSVPg+/NvGErk/dOkrDaHA0nQIQGAtrOjlX//9OQtRlSCy+x9rfB5N8yC71lH1nvMw==}
+ peerDependencies:
+ chevrotain: ^11.0.0
+
+ chevrotain@11.1.1:
+ resolution: {integrity: sha512-f0yv5CPKaFxfsPTBzX7vGuim4oIC1/gcS7LUGdBSwl2dU6+FON6LVUksdOo1qJjoUvXNn45urgh8C+0a24pACQ==}
+
+ chokidar@5.0.0:
+ resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==}
+ engines: {node: '>= 20.19.0'}
+
+ chrome-launcher@0.15.2:
+ resolution: {integrity: sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==}
+ engines: {node: '>=12.13.0'}
+ hasBin: true
+
+ chromium-edge-launcher@0.2.0:
+ resolution: {integrity: sha512-JfJjUnq25y9yg4FABRRVPmBGWPZZi+AQXT4mxupb67766/0UlhG8PAZCz6xzEMXTbW3CsSoE8PcCWA49n35mKg==}
+
+ ci-info@2.0.0:
+ resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==}
+
+ ci-info@3.9.0:
+ resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
+ engines: {node: '>=8'}
+
+ cipher-base@1.0.7:
+ resolution: {integrity: sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==}
+ engines: {node: '>= 0.10'}
+
+ class-variance-authority@0.7.1:
+ resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==}
+
+ 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'}
+
+ clsx@2.1.1:
+ resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
+ engines: {node: '>=6'}
+
+ collapse-white-space@2.1.0:
+ resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ color-string@1.9.1:
+ resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==}
+
+ color@4.2.3:
+ resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==}
+ engines: {node: '>=12.5.0'}
+
+ combined-stream@1.0.8:
+ resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
+ engines: {node: '>= 0.8'}
+
+ comma-separated-tokens@2.0.3:
+ resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
+
+ commander@12.1.0:
+ resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==}
+ engines: {node: '>=18'}
+
+ commander@13.1.0:
+ resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==}
+ engines: {node: '>=18'}
+
+ commander@14.0.1:
+ resolution: {integrity: sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==}
+ engines: {node: '>=20'}
+
+ commander@14.0.3:
+ resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==}
+ engines: {node: '>=20'}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ commander@7.2.0:
+ resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
+ engines: {node: '>= 10'}
+
+ commander@8.3.0:
+ resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==}
+ engines: {node: '>= 12'}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
+ confbox@0.1.8:
+ resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
+
+ connect@3.7.0:
+ resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==}
+ engines: {node: '>= 0.10.0'}
+
+ convert-source-map@2.0.0:
+ resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+
+ cookie-es@1.2.2:
+ resolution: {integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==}
+
+ cookie@1.1.1:
+ resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==}
+ engines: {node: '>=18'}
+
+ core-util-is@1.0.3:
+ resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
+
+ cose-base@1.0.3:
+ resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==}
+
+ cose-base@2.2.0:
+ resolution: {integrity: sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==}
+
+ crc@3.8.0:
+ resolution: {integrity: sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==}
+
+ create-ecdh@4.0.4:
+ resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==}
+
+ create-hash@1.2.0:
+ resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==}
+
+ create-hmac@1.1.7:
+ resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==}
+
+ cross-env@7.0.3:
+ resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==}
+ engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'}
+ hasBin: true
+
+ cross-fetch@3.2.0:
+ resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==}
+
+ cross-fetch@4.1.0:
+ resolution: {integrity: sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==}
+
+ cross-spawn@7.0.6:
+ resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
+ engines: {node: '>= 8'}
+
+ crossws@0.3.5:
+ resolution: {integrity: sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==}
+
+ crypto-browserify@3.12.0:
+ resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==}
+
+ crypto-browserify@3.12.1:
+ resolution: {integrity: sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==}
+ engines: {node: '>= 0.10'}
+
+ crypto-js@4.2.0:
+ resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==}
+
+ csstype@3.2.3:
+ resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
+
+ cytoscape-cose-bilkent@4.1.0:
+ resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==}
+ peerDependencies:
+ cytoscape: ^3.2.0
+
+ cytoscape-fcose@2.2.0:
+ resolution: {integrity: sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==}
+ peerDependencies:
+ cytoscape: ^3.2.0
+
+ cytoscape@3.33.1:
+ resolution: {integrity: sha512-iJc4TwyANnOGR1OmWhsS9ayRS3s+XQ185FmuHObThD+5AeJCakAAbWv8KimMTt08xCCLNgneQwFp+JRJOr9qGQ==}
+ engines: {node: '>=0.10'}
+
+ d3-array@2.12.1:
+ resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==}
+
+ d3-array@3.2.4:
+ resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==}
+ engines: {node: '>=12'}
+
+ d3-axis@3.0.0:
+ resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==}
+ engines: {node: '>=12'}
+
+ d3-brush@3.0.0:
+ resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==}
+ engines: {node: '>=12'}
+
+ d3-chord@3.0.1:
+ resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==}
+ engines: {node: '>=12'}
+
+ d3-color@3.1.0:
+ resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==}
+ engines: {node: '>=12'}
+
+ d3-contour@4.0.2:
+ resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==}
+ engines: {node: '>=12'}
+
+ d3-delaunay@6.0.4:
+ resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==}
+ engines: {node: '>=12'}
+
+ d3-dispatch@3.0.1:
+ resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==}
+ engines: {node: '>=12'}
+
+ d3-drag@3.0.0:
+ resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==}
+ engines: {node: '>=12'}
+
+ d3-dsv@3.0.1:
+ resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==}
+ engines: {node: '>=12'}
+ hasBin: true
+
+ d3-ease@3.0.1:
+ resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==}
+ engines: {node: '>=12'}
+
+ d3-fetch@3.0.1:
+ resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==}
+ engines: {node: '>=12'}
+
+ d3-force@3.0.0:
+ resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==}
+ engines: {node: '>=12'}
+
+ d3-format@3.1.2:
+ resolution: {integrity: sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==}
+ engines: {node: '>=12'}
+
+ d3-geo@3.1.1:
+ resolution: {integrity: sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==}
+ engines: {node: '>=12'}
+
+ d3-hierarchy@3.1.2:
+ resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==}
+ engines: {node: '>=12'}
+
+ d3-interpolate@3.0.1:
+ resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==}
+ engines: {node: '>=12'}
+
+ d3-path@1.0.9:
+ resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==}
+
+ d3-path@3.1.0:
+ resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==}
+ engines: {node: '>=12'}
+
+ d3-polygon@3.0.1:
+ resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==}
+ engines: {node: '>=12'}
+
+ d3-quadtree@3.0.1:
+ resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==}
+ engines: {node: '>=12'}
+
+ d3-random@3.0.1:
+ resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==}
+ engines: {node: '>=12'}
+
+ d3-sankey@0.12.3:
+ resolution: {integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==}
+
+ d3-scale-chromatic@3.1.0:
+ resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==}
+ engines: {node: '>=12'}
+
+ d3-scale@4.0.2:
+ resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==}
+ engines: {node: '>=12'}
+
+ d3-selection@3.0.0:
+ resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==}
+ engines: {node: '>=12'}
+
+ d3-shape@1.3.7:
+ resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==}
+
+ d3-shape@3.2.0:
+ resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==}
+ engines: {node: '>=12'}
+
+ d3-time-format@4.1.0:
+ resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==}
+ engines: {node: '>=12'}
+
+ d3-time@3.1.0:
+ resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==}
+ engines: {node: '>=12'}
+
+ d3-timer@3.0.1:
+ resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==}
+ engines: {node: '>=12'}
+
+ d3-transition@3.0.1:
+ resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==}
+ engines: {node: '>=12'}
+ peerDependencies:
+ d3-selection: 2 - 3
+
+ d3-zoom@3.0.0:
+ resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==}
+ engines: {node: '>=12'}
+
+ d3@7.9.0:
+ resolution: {integrity: sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==}
+ engines: {node: '>=12'}
+
+ dagre-d3-es@7.0.13:
+ resolution: {integrity: sha512-efEhnxpSuwpYOKRm/L5KbqoZmNNukHa/Flty4Wp62JRvgH2ojwVgPgdYyr4twpieZnyRDdIH7PY2mopX26+j2Q==}
+
+ dayjs@1.11.13:
+ resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==}
+
+ dayjs@1.11.19:
+ resolution: {integrity: sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==}
+
+ debug@2.6.9:
+ resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ debug@4.4.3:
+ resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@1.2.0:
+ resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
+ engines: {node: '>=0.10.0'}
+
+ decode-named-character-reference@1.3.0:
+ resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==}
+
+ decode-uri-component@0.2.2:
+ resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==}
+ engines: {node: '>=0.10'}
+
+ define-data-property@1.1.4:
+ resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
+ engines: {node: '>= 0.4'}
+
+ define-properties@1.2.1:
+ resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
+ engines: {node: '>= 0.4'}
+
+ defu@6.1.4:
+ resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}
+
+ delaunator@5.0.1:
+ resolution: {integrity: sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==}
+
+ 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'}
+
+ depd@2.0.0:
+ resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
+ engines: {node: '>= 0.8'}
+
+ dequal@2.0.3:
+ resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
+ engines: {node: '>=6'}
+
+ derive-valtio@0.1.0:
+ resolution: {integrity: sha512-OCg2UsLbXK7GmmpzMXhYkdO64vhJ1ROUUGaTFyHjVwEdMEcTTRj7W1TxLbSBxdY8QLBPCcp66MTyaSy0RpO17A==}
+ peerDependencies:
+ valtio: '*'
+
+ des.js@1.1.0:
+ resolution: {integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==}
+
+ destr@2.0.5:
+ resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==}
+
+ destroy@1.2.0:
+ resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
+ engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
+
+ detect-browser@5.3.0:
+ resolution: {integrity: sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==}
+
+ detect-europe-js@0.1.2:
+ resolution: {integrity: sha512-lgdERlL3u0aUdHocoouzT10d9I89VVhk0qNRmll7mXdGfJT1/wqZ2ZLA4oJAjeACPY5fT1wsbq2AT+GkuInsow==}
+
+ detect-gpu@5.0.70:
+ resolution: {integrity: sha512-bqerEP1Ese6nt3rFkwPnGbsUF9a4q+gMmpTVVOEzoCyeCc+y7/RvJnQZJx1JwhgQI5Ntg0Kgat8Uu7XpBqnz1w==}
+
+ detect-libc@2.1.2:
+ resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
+ engines: {node: '>=8'}
+
+ detect-node-es@1.1.0:
+ resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==}
+
+ devlop@1.1.0:
+ resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
+
+ diffie-hellman@5.0.3:
+ resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==}
+
+ dijkstrajs@1.0.3:
+ resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==}
+
+ dompurify@3.3.1:
+ resolution: {integrity: sha512-qkdCKzLNtrgPFP1Vo+98FRzJnBRGe4ffyCea9IwHB1fyxPOeNTHpLKYGd4Uk9xvNoH0ZoOjwZxNptyMwqrId1Q==}
+
+ draco3d@1.5.7:
+ resolution: {integrity: sha512-m6WCKt/erDXcw+70IJXnG7M3awwQPAsZvJGX5zY7beBqpELw6RDGkYVU0W43AFxye4pDZ5i2Lbyc/NNGqwjUVQ==}
+
+ draggabilly@3.0.0:
+ resolution: {integrity: sha512-aEs+B6prbMZQMxc9lgTpCBfyCUhRur/VFucHhIOvlvvdARTj7TcDmX/cdOUtqbjJJUh7+agyJXR5Z6IFe1MxwQ==}
+
+ dunder-proto@1.0.1:
+ resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
+ engines: {node: '>= 0.4'}
+
+ duplexify@4.1.3:
+ resolution: {integrity: sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==}
+
+ ecdsa-sig-formatter@1.0.11:
+ resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==}
+
+ ee-first@1.1.1:
+ resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
+
+ electron-to-chromium@1.5.302:
+ resolution: {integrity: sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==}
+
+ elliptic@6.6.1:
+ resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ encode-utf8@1.0.3:
+ resolution: {integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==}
+
+ encodeurl@1.0.2:
+ resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
+ engines: {node: '>= 0.8'}
+
+ encodeurl@2.0.0:
+ resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==}
+ engines: {node: '>= 0.8'}
+
+ end-of-stream@1.4.5:
+ resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==}
+
+ engine.io-client@6.6.4:
+ resolution: {integrity: sha512-+kjUJnZGwzewFDw951CDWcwj35vMNf2fcj7xQWOctq1F2i1jkDdVvdFG9kM/BEChymCH36KgjnW0NsL58JYRxw==}
+
+ engine.io-parser@5.2.3:
+ resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==}
+ engines: {node: '>=10.0.0'}
+
+ enhanced-resolve@5.19.0:
+ resolution: {integrity: sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==}
+ engines: {node: '>=10.13.0'}
+
+ error-stack-parser@2.1.4:
+ resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==}
+
+ es-define-property@1.0.1:
+ resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
+ engines: {node: '>= 0.4'}
+
+ es-errors@1.3.0:
+ resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
+ engines: {node: '>= 0.4'}
+
+ es-object-atoms@1.1.1:
+ resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
+ engines: {node: '>= 0.4'}
+
+ es-set-tostringtag@2.1.0:
+ resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
+ engines: {node: '>= 0.4'}
+
+ es-toolkit@1.33.0:
+ resolution: {integrity: sha512-X13Q/ZSc+vsO1q600bvNK4bxgXMkHcf//RxCmYDaRY5DAcT+eoXjY5hoAPGMdRnWQjvyLEcyauG3b6hz76LNqg==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ es6-promisify@5.0.0:
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
+
+ esast-util-from-estree@2.0.0:
+ resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==}
+
+ esast-util-from-js@2.0.1:
+ resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==}
+
+ esbuild@0.27.3:
+ resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-html@1.0.3:
+ resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
+
+ escape-string-regexp@2.0.0:
+ resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==}
+ engines: {node: '>=8'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ escape-string-regexp@5.0.0:
+ resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
+ engines: {node: '>=12'}
+
+ esprima@4.0.1:
+ resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ estree-util-attach-comments@3.0.0:
+ resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==}
+
+ estree-util-build-jsx@3.0.1:
+ resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==}
+
+ estree-util-is-identifier-name@3.0.0:
+ resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==}
+
+ estree-util-scope@1.0.0:
+ resolution: {integrity: sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==}
+
+ estree-util-to-js@2.0.0:
+ resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==}
+
+ estree-util-visit@2.0.0:
+ resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==}
+
+ estree-walker@2.0.2:
+ resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+
+ estree-walker@3.0.3:
+ resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
+
+ etag@1.8.1:
+ resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
+ engines: {node: '>= 0.6'}
+
+ eth-rpc-errors@4.0.3:
+ resolution: {integrity: sha512-Z3ymjopaoft7JDoxZcEb3pwdGh7yiYMhOwm2doUt6ASXlMavpNlK6Cre0+IMl2VSGyEU9rkiperQhp5iRxn5Pg==}
+
+ ethereum-cryptography@2.2.1:
+ resolution: {integrity: sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==}
+
+ ethers@6.16.0:
+ resolution: {integrity: sha512-U1wulmetNymijEhpSEQ7Ct/P/Jw9/e7R1j5XIbPRydgV2DjLVMsULDlNksq3RQnFgKoLlZf88ijYtWEXcPa07A==}
+ engines: {node: '>=14.0.0'}
+
+ ev-emitter@2.1.2:
+ resolution: {integrity: sha512-jQ5Ql18hdCQ4qS+RCrbLfz1n+Pags27q5TwMKvZyhp5hh2UULUYZUy1keqj6k6SYsdqIYjnmz7xyyEY0V67B8Q==}
+
+ event-target-shim@5.0.1:
+ resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
+ engines: {node: '>=6'}
+
+ eventemitter3@4.0.7:
+ resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ eventemitter3@5.0.4:
+ resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==}
+
+ events@3.3.0:
+ resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
+ engines: {node: '>=0.8.x'}
+
+ eventsource@2.0.2:
+ resolution: {integrity: sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==}
+ engines: {node: '>=12.0.0'}
+
+ evp_bytestokey@1.0.3:
+ resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==}
+
+ exenv@1.2.2:
+ resolution: {integrity: sha512-Z+ktTxTwv9ILfgKCk32OX3n/doe+OcLTRtqK9pcL+JsP3J1/VW8Uvl4ZjLlKqeW4rzK4oesDOGMEMRIZqtP4Iw==}
+
+ exponential-backoff@3.1.3:
+ resolution: {integrity: sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==}
+
+ extend@3.0.2:
+ resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
+
+ eyes@0.1.8:
+ resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
+ engines: {node: '> 0.1.90'}
+
+ fancy-canvas@2.1.0:
+ resolution: {integrity: sha512-nifxXJ95JNLFR2NgRV4/MxVP45G9909wJTEKz5fg/TZS20JJZA6hfgRVh/bC9bwl2zBtBNcYPjiBE4njQHVBwQ==}
+
+ fast-deep-equal@3.1.3:
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+
+ fast-json-stable-stringify@2.1.0:
+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+
+ fast-redact@3.5.0:
+ resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==}
+ engines: {node: '>=6'}
+
+ fast-safe-stringify@2.1.1:
+ resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==}
+
+ fast-stable-stringify@1.0.0:
+ resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+
+ fastestsmallesttextencoderdecoder@1.0.22:
+ resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==}
+
+ fb-dotslash@0.5.8:
+ resolution: {integrity: sha512-XHYLKk9J4BupDxi9bSEhkfss0m+Vr9ChTrjhf9l2iw3jB5C7BnY4GVPoMcqbrTutsKJso6yj2nAB6BI/F2oZaA==}
+ engines: {node: '>=20'}
+ hasBin: true
+
+ fb-watchman@2.0.2:
+ resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==}
+
+ fdir@6.5.0:
+ resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ picomatch: ^3 || ^4
+ peerDependenciesMeta:
+ picomatch:
+ optional: true
+
+ feaxios@0.0.23:
+ resolution: {integrity: sha512-eghR0A21fvbkcQBgZuMfQhrXxJzC0GNUGC9fXhBge33D+mFDTwl0aJ35zoQQn575BhyjQitRc5N4f+L4cP708g==}
+
+ fflate@0.6.10:
+ resolution: {integrity: sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg==}
+
+ fflate@0.8.2:
+ resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ filter-obj@1.1.0:
+ resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==}
+ engines: {node: '>=0.10.0'}
+
+ finalhandler@1.1.2:
+ resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==}
+ engines: {node: '>= 0.8'}
+
+ find-up@4.1.0:
+ resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
+ engines: {node: '>=8'}
+
+ flow-enums-runtime@0.0.6:
+ resolution: {integrity: sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==}
+
+ follow-redirects@1.15.11:
+ resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==}
+ engines: {node: '>=4.0'}
+ peerDependencies:
+ debug: '*'
+ peerDependenciesMeta:
+ debug:
+ optional: true
+
+ for-each@0.3.5:
+ resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==}
+ engines: {node: '>= 0.4'}
+
+ form-data@4.0.5:
+ resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==}
+ engines: {node: '>= 6'}
+
+ fresh@0.5.2:
+ resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
+ engines: {node: '>= 0.6'}
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+ generator-function@2.0.1:
+ resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==}
+ engines: {node: '>= 0.4'}
+
+ gensync@1.0.0-beta.2:
+ resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
+ engines: {node: '>=6.9.0'}
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-intrinsic@1.3.0:
+ resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
+ engines: {node: '>= 0.4'}
+
+ get-nonce@1.0.1:
+ resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==}
+ engines: {node: '>=6'}
+
+ get-package-type@0.1.0:
+ resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==}
+ engines: {node: '>=8.0.0'}
+
+ get-proto@1.0.1:
+ resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
+ engines: {node: '>= 0.4'}
+
+ get-size@3.0.0:
+ resolution: {integrity: sha512-Y8aiXLq4leR7807UY0yuKEwif5s3kbVp1nTv+i4jBeoUzByTLKkLWu/HorS6/pB+7gsB0o7OTogC8AoOOeT0Hw==}
+
+ github-slugger@2.0.0:
+ resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==}
+
+ 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
+
+ glsl-noise@0.0.0:
+ resolution: {integrity: sha512-b/ZCF6amfAUb7dJM/MxRs7AetQEahYzJ8PtgfrmEdtw6uyGOr+ZSGtgjFm6mfsBkxJ4d2W7kg+Nlqzqvn3Bc0w==}
+
+ gopd@1.2.0:
+ resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
+ engines: {node: '>= 0.4'}
+
+ graceful-fs@4.2.11:
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+
+ gsap@3.14.2:
+ resolution: {integrity: sha512-P8/mMxVLU7o4+55+1TCnQrPmgjPKnwkzkXOK1asnR9Jg2lna4tEY5qBJjMmAaOBDDZWtlRjBXjLa0w53G/uBLA==}
+
+ h3@1.15.9:
+ resolution: {integrity: sha512-H7UPnyIupUOYUQu7f2x7ABVeMyF/IbJjqn20WSXpMdnQB260luADUkSgJU7QTWLutq8h3tUayMQ1DdbSYX5LkA==}
+
+ hachure-fill@0.5.2:
+ resolution: {integrity: sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ has-property-descriptors@1.0.2:
+ resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
+
+ has-symbols@1.1.0:
+ resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
+ engines: {node: '>= 0.4'}
+
+ has-tostringtag@1.0.2:
+ resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
+ engines: {node: '>= 0.4'}
+
+ hash-base@3.0.5:
+ resolution: {integrity: sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==}
+ engines: {node: '>= 0.10'}
+
+ hash-base@3.1.2:
+ resolution: {integrity: sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg==}
+ engines: {node: '>= 0.8'}
+
+ hash.js@1.1.7:
+ resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==}
+
+ hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+ engines: {node: '>= 0.4'}
+
+ hast-util-heading-rank@3.0.0:
+ resolution: {integrity: sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==}
+
+ hast-util-to-estree@3.1.3:
+ resolution: {integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==}
+
+ hast-util-to-html@9.0.5:
+ resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==}
+
+ hast-util-to-jsx-runtime@2.3.6:
+ resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==}
+
+ hast-util-to-string@3.0.1:
+ resolution: {integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==}
+
+ hast-util-whitespace@3.0.0:
+ resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==}
+
+ hermes-compiler@250829098.0.9:
+ resolution: {integrity: sha512-hZ5O7PDz1vQ99TS7HD3FJ9zVynfU1y+VWId6U1Pldvd8hmAYrNec/XLPYJKD3dLOW6NXak6aAQAuMuSo3ji0tQ==}
+
+ hermes-estree@0.32.0:
+ resolution: {integrity: sha512-KWn3BqnlDOl97Xe1Yviur6NbgIZ+IP+UVSpshlZWkq+EtoHg6/cwiDj/osP9PCEgFE15KBm1O55JRwbMEm5ejQ==}
+
+ hermes-estree@0.33.3:
+ resolution: {integrity: sha512-6kzYZHCk8Fy1Uc+t3HGYyJn3OL4aeqKLTyina4UFtWl8I0kSL7OmKThaiX+Uh2f8nGw3mo4Ifxg0M5Zk3/Oeqg==}
+
+ hermes-parser@0.32.0:
+ resolution: {integrity: sha512-g4nBOWFpuiTqjR3LZdRxKUkij9iyveWeuks7INEsMX741f3r9xxrOe8TeQfUxtda0eXmiIFiMQzoeSQEno33Hw==}
+
+ hermes-parser@0.33.3:
+ resolution: {integrity: sha512-Yg3HgaG4CqgyowtYjX/FsnPAuZdHOqSMtnbpylbptsQ9nwwSKsy6uRWcGO5RK0EqiX12q8HvDWKgeAVajRO5DA==}
+
+ hls.js@1.6.15:
+ resolution: {integrity: sha512-E3a5VwgXimGHwpRGV+WxRTKeSp2DW5DI5MWv34ulL3t5UNmyJWCQ1KmLEHbYzcfThfXG8amBL+fCYPneGHC4VA==}
+
+ hmac-drbg@1.0.1:
+ resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==}
+
+ html-void-elements@3.0.0:
+ resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
+
+ http-errors@2.0.1:
+ resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==}
+ engines: {node: '>= 0.8'}
+
+ 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==}
+
+ iconv-lite@0.6.3:
+ resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
+ engines: {node: '>=0.10.0'}
+
+ idb-keyval@6.2.2:
+ resolution: {integrity: sha512-yjD9nARJ/jb1g+CvD0tlhUHOrJ9Sy0P8T9MF3YaLlHnSRpwPfpTX0XIvpmw3gAJUmEu3FiICLBDPXVwyEvrleg==}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ image-size@1.2.1:
+ resolution: {integrity: sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==}
+ engines: {node: '>=16.x'}
+ hasBin: true
+
+ immediate@3.0.6:
+ resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==}
+
+ imurmurhash@0.1.4:
+ resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
+ engines: {node: '>=0.8.19'}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ inline-style-parser@0.2.7:
+ resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==}
+
+ int64-buffer@1.1.0:
+ resolution: {integrity: sha512-94smTCQOvigN4d/2R/YDjz8YVG0Sufvv2aAh8P5m42gwhCsDAJqnbNOrxJsrADuAFAA69Q/ptGzxvNcNuIJcvw==}
+
+ internmap@1.0.1:
+ resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==}
+
+ internmap@2.0.3:
+ resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==}
+ engines: {node: '>=12'}
+
+ invariant@2.2.4:
+ resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==}
+
+ ip-address@10.1.0:
+ resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==}
+ engines: {node: '>= 12'}
+
+ iron-webcrypto@1.2.1:
+ resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==}
+
+ is-alphabetical@2.0.1:
+ resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==}
+
+ is-alphanumerical@2.0.1:
+ resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==}
+
+ is-arguments@1.2.0:
+ resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==}
+ engines: {node: '>= 0.4'}
+
+ is-arrayish@0.3.4:
+ resolution: {integrity: sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==}
+
+ is-callable@1.2.7:
+ resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
+ engines: {node: '>= 0.4'}
+
+ is-decimal@2.0.1:
+ resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==}
+
+ is-docker@2.2.1:
+ resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-generator-function@1.1.2:
+ resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==}
+ engines: {node: '>= 0.4'}
+
+ is-hexadecimal@2.0.1:
+ resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==}
+
+ is-nan@1.3.2:
+ resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==}
+ engines: {node: '>= 0.4'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
+ is-plain-obj@4.1.0:
+ resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
+ engines: {node: '>=12'}
+
+ is-promise@2.2.2:
+ resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==}
+
+ is-regex@1.2.1:
+ resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
+ engines: {node: '>= 0.4'}
+
+ is-retry-allowed@3.0.0:
+ resolution: {integrity: sha512-9xH0xvoggby+u0uGF7cZXdrutWiBiaFG8ZT4YFPXL8NzkyAwX3AKGLeFQLvzDpM430+nDFBZ1LHkie/8ocL06A==}
+ engines: {node: '>=12'}
+
+ is-standalone-pwa@0.1.1:
+ resolution: {integrity: sha512-9Cbovsa52vNQCjdXOzeQq5CnCbAcRk05aU62K20WO372NrTv0NxibLFCK6lQ4/iZEFdEA3p3t2VNOn8AJ53F5g==}
+
+ is-typed-array@1.1.15:
+ resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==}
+ engines: {node: '>= 0.4'}
+
+ is-wsl@2.2.0:
+ resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
+ engines: {node: '>=8'}
+
+ isarray@1.0.0:
+ resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
+
+ isarray@2.0.5:
+ resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isomorphic-ws@4.0.1:
+ resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
+ peerDependencies:
+ ws: '*'
+
+ isows@1.0.6:
+ resolution: {integrity: sha512-lPHCayd40oW98/I0uvgaHKWCSvkzY27LjWLbtzOm64yQ+G3Q5npjjbdppU65iZXkK1Zt+kH9pfegli0AYfwYYw==}
+ peerDependencies:
+ ws: '*'
+
+ isows@1.0.7:
+ resolution: {integrity: sha512-I1fSfDCZL5P0v33sVqeTDSpcstAg/N+wF5HS033mogOVIp4B+oHC7oOCsA3axAbBSGTJ8QubbNmnIRN/h8U7hg==}
+ peerDependencies:
+ ws: '*'
+
+ istanbul-lib-coverage@3.2.2:
+ resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==}
+ engines: {node: '>=8'}
+
+ istanbul-lib-instrument@5.2.1:
+ resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==}
+ engines: {node: '>=8'}
+
+ its-fine@2.0.0:
+ resolution: {integrity: sha512-KLViCmWx94zOvpLwSlsx6yOCeMhZYaxrJV87Po5k/FoZzcPSahvK5qJ7fYhS61sZi5ikmh2S3Hz55A2l3U69ng==}
+ 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}
+
+ jest-get-type@29.6.3:
+ resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-haste-map@29.7.0:
+ resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-message-util@29.7.0:
+ resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-mock@29.7.0:
+ resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-regex-util@29.6.3:
+ resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-util@29.7.0:
+ resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-validate@29.7.0:
+ resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-worker@29.7.0:
+ resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jiti@2.6.1:
+ resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
+ hasBin: true
+
+ js-base64@3.7.8:
+ resolution: {integrity: sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==}
+
+ js-tokens@4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+
+ js-yaml@3.14.2:
+ resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==}
+ hasBin: true
+
+ jsbi@3.2.5:
+ resolution: {integrity: sha512-aBE4n43IPvjaddScbvWRA2YlTzKEynHzu7MqOyTipdHucf/VxS63ViCjxYRg86M8Rxwbt/GfzHl1kKERkt45fQ==}
+
+ jsc-safe-url@0.2.4:
+ resolution: {integrity: sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==}
+
+ jsesc@3.1.0:
+ resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ json-stable-stringify@1.3.0:
+ resolution: {integrity: sha512-qtYiSSFlwot9XHtF9bD9c7rwKjr+RecWT//ZnPvSmEjpV5mmPOCN4j8UjY5hbjNkOwZ/jQv3J6R1/pL7RwgMsg==}
+ engines: {node: '>= 0.4'}
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@2.2.3:
+ resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ jsonify@0.0.1:
+ resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==}
+
+ jsqr@1.4.0:
+ resolution: {integrity: sha512-dxLob7q65Xg2DvstYkRpkYtmKm2sPJ9oFhrhmudT1dZvNFFTlroai3AWSpLey/w5vMcLBXRgOJsbXpdN9HzU/A==}
+
+ jwa@2.0.1:
+ resolution: {integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==}
+
+ jws@4.0.1:
+ resolution: {integrity: sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==}
+
+ jwt-decode@4.0.0:
+ resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==}
+ engines: {node: '>=18'}
+
+ katex@0.16.33:
+ resolution: {integrity: sha512-q3N5u+1sY9Bu7T4nlXoiRBXWfwSefNGoKeOwekV+gw0cAXQlz2Ww6BLcmBxVDeXBMUDQv6fK5bcNaJLxob3ZQA==}
+ hasBin: true
+
+ keyvaluestorage-interface@1.0.0:
+ resolution: {integrity: sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g==}
+
+ khroma@2.1.0:
+ resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==}
+
+ langium@4.2.1:
+ resolution: {integrity: sha512-zu9QWmjpzJcomzdJQAHgDVhLGq5bLosVak1KVa40NzQHXfqr4eAHupvnPOVXEoLkg6Ocefvf/93d//SB7du4YQ==}
+ engines: {node: '>=20.10.0', npm: '>=10.2.3'}
+
+ layout-base@1.0.2:
+ resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==}
+
+ layout-base@2.0.1:
+ resolution: {integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==}
+
+ leven@3.1.0:
+ resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==}
+ engines: {node: '>=6'}
+
+ lie@3.3.0:
+ resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==}
+
+ lighthouse-logger@1.4.2:
+ resolution: {integrity: sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==}
+
+ lightningcss-android-arm64@1.31.1:
+ resolution: {integrity: sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [android]
+
+ lightningcss-darwin-arm64@1.31.1:
+ resolution: {integrity: sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ lightningcss-darwin-x64@1.31.1:
+ resolution: {integrity: sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ lightningcss-freebsd-x64@1.31.1:
+ resolution: {integrity: sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [freebsd]
+
+ lightningcss-linux-arm-gnueabihf@1.31.1:
+ resolution: {integrity: sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm]
+ os: [linux]
+
+ lightningcss-linux-arm64-gnu@1.31.1:
+ resolution: {integrity: sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ lightningcss-linux-arm64-musl@1.31.1:
+ resolution: {integrity: sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ lightningcss-linux-x64-gnu@1.31.1:
+ resolution: {integrity: sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+
+ lightningcss-linux-x64-musl@1.31.1:
+ resolution: {integrity: sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+
+ lightningcss-win32-arm64-msvc@1.31.1:
+ resolution: {integrity: sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ lightningcss-win32-x64-msvc@1.31.1:
+ resolution: {integrity: sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [win32]
+
+ lightningcss@1.31.1:
+ resolution: {integrity: sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==}
+ engines: {node: '>= 12.0.0'}
+
+ lightweight-charts@5.1.0:
+ resolution: {integrity: sha512-jEAYR4ODYeyNZcWUigsoLTl52rbPmgXnvd5FLIv/ZoA/2sSDw63YKnef8n4yhzum7W926yHeFwlm7ididKb7YQ==}
+
+ lit-element@4.2.2:
+ resolution: {integrity: sha512-aFKhNToWxoyhkNDmWZwEva2SlQia+jfG0fjIWV//YeTaWrVnOxD89dPKfigCUspXFmjzOEUQpOkejH5Ly6sG0w==}
+
+ lit-html@3.3.2:
+ resolution: {integrity: sha512-Qy9hU88zcmaxBXcc10ZpdK7cOLXvXpRoBxERdtqV9QOrfpMZZ6pSYP91LhpPtap3sFMUiL7Tw2RImbe0Al2/kw==}
+
+ lit@3.1.0:
+ resolution: {integrity: sha512-rzo/hmUqX8zmOdamDAeydfjsGXbbdtAFqMhmocnh2j9aDYqbu0fjXygjCa0T99Od9VQ/2itwaGrjZz/ZELVl7w==}
+
+ locate-path@5.0.0:
+ resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
+ engines: {node: '>=8'}
+
+ lodash-es@4.17.23:
+ resolution: {integrity: sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==}
+
+ lodash.isequal@4.5.0:
+ resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==}
+ deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead.
+
+ 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==}
+
+ lodash@4.17.21:
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+
+ loglevel@1.9.2:
+ resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==}
+ engines: {node: '>= 0.6.0'}
+
+ long@5.2.5:
+ resolution: {integrity: sha512-e0r9YBBgNCq1D1o5Dp8FMH0N5hsFtXDBiVa0qoJPHpakvZkmDKPRoGffZJII/XsHvj9An9blm+cRJ01yQqU+Dw==}
+
+ longest-streak@3.1.0:
+ resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
+
+ loose-envify@1.4.0:
+ resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
+ hasBin: true
+
+ lru-cache@11.2.7:
+ resolution: {integrity: sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==}
+ engines: {node: 20 || >=22}
+
+ lru-cache@5.1.1:
+ resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+
+ lucide-react@0.511.0:
+ resolution: {integrity: sha512-VK5a2ydJ7xm8GvBeKLS9mu1pVK6ucef9780JVUjw6bAjJL/QXnd4Y0p7SPeOUMC27YhzNCZvm5d/QX0Tp3rc0w==}
+ peerDependencies:
+ react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0
+
+ maath@0.10.8:
+ resolution: {integrity: sha512-tRvbDF0Pgqz+9XUa4jjfgAQ8/aPKmQdWXilFu2tMy4GWj4NOsx99HlULO4IeREfbO3a0sA145DZYyvXPkybm0g==}
+ peerDependencies:
+ '@types/three': '>=0.134.0'
+ three: '>=0.134.0'
+
+ magic-string@0.30.21:
+ resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
+
+ makeerror@1.0.12:
+ resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==}
+
+ markdown-extensions@2.0.0:
+ resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==}
+ engines: {node: '>=16'}
+
+ markdown-table@3.0.4:
+ resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==}
+
+ marked@16.4.2:
+ resolution: {integrity: sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA==}
+ engines: {node: '>= 20'}
+ hasBin: true
+
+ marky@1.3.0:
+ resolution: {integrity: sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==}
+
+ math-intrinsics@1.1.0:
+ resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
+ engines: {node: '>= 0.4'}
+
+ md5.js@1.3.5:
+ resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==}
+
+ mdast-util-find-and-replace@3.0.2:
+ resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==}
+
+ mdast-util-from-markdown@2.0.3:
+ resolution: {integrity: sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==}
+
+ mdast-util-gfm-autolink-literal@2.0.1:
+ resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==}
+
+ mdast-util-gfm-footnote@2.1.0:
+ resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==}
+
+ mdast-util-gfm-strikethrough@2.0.0:
+ resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==}
+
+ mdast-util-gfm-table@2.0.0:
+ resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==}
+
+ mdast-util-gfm-task-list-item@2.0.0:
+ resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==}
+
+ mdast-util-gfm@3.1.0:
+ resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==}
+
+ mdast-util-mdx-expression@2.0.1:
+ resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==}
+
+ mdast-util-mdx-jsx@3.2.0:
+ resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==}
+
+ mdast-util-mdx@3.0.0:
+ resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==}
+
+ mdast-util-mdxjs-esm@2.0.1:
+ resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==}
+
+ mdast-util-phrasing@4.1.0:
+ resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==}
+
+ mdast-util-to-hast@13.2.1:
+ resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==}
+
+ mdast-util-to-markdown@2.1.2:
+ resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==}
+
+ mdast-util-to-string@4.0.0:
+ resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==}
+
+ memoize-one@5.2.1:
+ resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==}
+
+ merge-options@3.0.4:
+ resolution: {integrity: sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==}
+ engines: {node: '>=10'}
+
+ merge-stream@2.0.0:
+ resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
+
+ mermaid@11.12.3:
+ resolution: {integrity: sha512-wN5ZSgJQIC+CHJut9xaKWsknLxaFBwCPwPkGTSUYrTiHORWvpT8RxGk849HPnpUAQ+/9BPRqYb80jTpearrHzQ==}
+
+ meshline@3.3.1:
+ resolution: {integrity: sha512-/TQj+JdZkeSUOl5Mk2J7eLcYTLiQm2IDzmlSvYm7ov15anEcDJ92GHqqazxTSreeNgfnYu24kiEvvv0WlbCdFQ==}
+ peerDependencies:
+ three: '>=0.137'
+
+ meshoptimizer@1.0.1:
+ resolution: {integrity: sha512-Vix+QlA1YYT3FwmBBZ+49cE5y/b+pRrcXKqGpS5ouh33d3lSp2PoTpCw19E0cKDFWalembrHnIaZetf27a+W2g==}
+
+ metro-babel-transformer@0.83.5:
+ resolution: {integrity: sha512-d9FfmgUEVejTiSb7bkQeLRGl6aeno2UpuPm3bo3rCYwxewj03ymvOn8s8vnS4fBqAPQ+cE9iQM40wh7nGXR+eA==}
+ engines: {node: '>=20.19.4'}
+
+ metro-cache-key@0.83.5:
+ resolution: {integrity: sha512-Ycl8PBajB7bhbAI7Rt0xEyiF8oJ0RWX8EKkolV1KfCUlC++V/GStMSGpPLwnnBZXZWkCC5edBPzv1Hz1Yi0Euw==}
+ engines: {node: '>=20.19.4'}
+
+ metro-cache@0.83.5:
+ resolution: {integrity: sha512-oH+s4U+IfZyg8J42bne2Skc90rcuESIYf86dYittcdWQtPfcaFXWpByPyTuWk3rR1Zz3Eh5HOrcVImfEhhJLng==}
+ engines: {node: '>=20.19.4'}
+
+ metro-config@0.83.5:
+ resolution: {integrity: sha512-JQ/PAASXH7yczgV6OCUSRhZYME+NU8NYjI2RcaG5ga4QfQ3T/XdiLzpSb3awWZYlDCcQb36l4Vl7i0Zw7/Tf9w==}
+ engines: {node: '>=20.19.4'}
+
+ metro-core@0.83.5:
+ resolution: {integrity: sha512-YcVcLCrf0ed4mdLa82Qob0VxYqfhmlRxUS8+TO4gosZo/gLwSvtdeOjc/Vt0pe/lvMNrBap9LlmvZM8FIsMgJQ==}
+ engines: {node: '>=20.19.4'}
+
+ metro-file-map@0.83.5:
+ resolution: {integrity: sha512-ZEt8s3a1cnYbn40nyCD+CsZdYSlwtFh2kFym4lo+uvfM+UMMH+r/BsrC6rbNClSrt+B7rU9T+Te/sh/NL8ZZKQ==}
+ engines: {node: '>=20.19.4'}
+
+ metro-minify-terser@0.83.5:
+ resolution: {integrity: sha512-Toe4Md1wS1PBqbvB0cFxBzKEVyyuYTUb0sgifAZh/mSvLH84qA1NAWik9sISWatzvfWf3rOGoUoO5E3f193a3Q==}
+ engines: {node: '>=20.19.4'}
+
+ metro-resolver@0.83.5:
+ resolution: {integrity: sha512-7p3GtzVUpbAweJeCcUJihJeOQl1bDuimO5ueo1K0BUpUtR41q5EilbQ3klt16UTPPMpA+tISWBtsrqU556mY1A==}
+ engines: {node: '>=20.19.4'}
+
+ metro-runtime@0.83.5:
+ resolution: {integrity: sha512-f+b3ue9AWTVlZe2Xrki6TAoFtKIqw30jwfk7GQ1rDUBQaE0ZQ+NkiMEtb9uwH7uAjJ87U7Tdx1Jg1OJqUfEVlA==}
+ engines: {node: '>=20.19.4'}
+
+ metro-source-map@0.83.5:
+ resolution: {integrity: sha512-VT9bb2KO2/4tWY9Z2yeZqTUao7CicKAOps9LUg2aQzsz+04QyuXL3qgf1cLUVRjA/D6G5u1RJAlN1w9VNHtODQ==}
+ engines: {node: '>=20.19.4'}
+
+ metro-symbolicate@0.83.5:
+ resolution: {integrity: sha512-EMIkrjNRz/hF+p0RDdxoE60+dkaTLPN3vaaGkFmX5lvFdO6HPfHA/Ywznzkev+za0VhPQ5KSdz49/MALBRteHA==}
+ engines: {node: '>=20.19.4'}
+ hasBin: true
+
+ metro-transform-plugins@0.83.5:
+ resolution: {integrity: sha512-KxYKzZL+lt3Os5H2nx7YkbkWVduLZL5kPrE/Yq+Prm/DE1VLhpfnO6HtPs8vimYFKOa58ncl60GpoX0h7Wm0Vw==}
+ engines: {node: '>=20.19.4'}
+
+ metro-transform-worker@0.83.5:
+ resolution: {integrity: sha512-8N4pjkNXc6ytlP9oAM6MwqkvUepNSW39LKYl9NjUMpRDazBQ7oBpQDc8Sz4aI8jnH6AGhF7s1m/ayxkN1t04yA==}
+ engines: {node: '>=20.19.4'}
+
+ metro@0.83.5:
+ resolution: {integrity: sha512-BgsXevY1MBac/3ZYv/RfNFf/4iuW9X7f4H8ZNkiH+r667HD9sVujxcmu4jvEzGCAm4/WyKdZCuyhAcyhTHOucQ==}
+ engines: {node: '>=20.19.4'}
+ hasBin: true
+
+ micromark-core-commonmark@2.0.3:
+ resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==}
+
+ micromark-extension-gfm-autolink-literal@2.1.0:
+ resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==}
+
+ micromark-extension-gfm-footnote@2.1.0:
+ resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==}
+
+ micromark-extension-gfm-strikethrough@2.1.0:
+ resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==}
+
+ micromark-extension-gfm-table@2.1.1:
+ resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==}
+
+ micromark-extension-gfm-tagfilter@2.0.0:
+ resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==}
+
+ micromark-extension-gfm-task-list-item@2.1.0:
+ resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==}
+
+ micromark-extension-gfm@3.0.0:
+ resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==}
+
+ micromark-extension-mdx-expression@3.0.1:
+ resolution: {integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==}
+
+ micromark-extension-mdx-jsx@3.0.2:
+ resolution: {integrity: sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==}
+
+ micromark-extension-mdx-md@2.0.0:
+ resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==}
+
+ micromark-extension-mdxjs-esm@3.0.0:
+ resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==}
+
+ micromark-extension-mdxjs@3.0.0:
+ resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==}
+
+ micromark-factory-destination@2.0.1:
+ resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==}
+
+ micromark-factory-label@2.0.1:
+ resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==}
+
+ micromark-factory-mdx-expression@2.0.3:
+ resolution: {integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==}
+
+ micromark-factory-space@2.0.1:
+ resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==}
+
+ micromark-factory-title@2.0.1:
+ resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==}
+
+ micromark-factory-whitespace@2.0.1:
+ resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==}
+
+ micromark-util-character@2.1.1:
+ resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==}
+
+ micromark-util-chunked@2.0.1:
+ resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==}
+
+ micromark-util-classify-character@2.0.1:
+ resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==}
+
+ micromark-util-combine-extensions@2.0.1:
+ resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==}
+
+ micromark-util-decode-numeric-character-reference@2.0.2:
+ resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==}
+
+ micromark-util-decode-string@2.0.1:
+ resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==}
+
+ micromark-util-encode@2.0.1:
+ resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==}
+
+ micromark-util-events-to-acorn@2.0.3:
+ resolution: {integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==}
+
+ micromark-util-html-tag-name@2.0.1:
+ resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==}
+
+ micromark-util-normalize-identifier@2.0.1:
+ resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==}
+
+ micromark-util-resolve-all@2.0.1:
+ resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==}
+
+ micromark-util-sanitize-uri@2.0.1:
+ resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==}
+
+ micromark-util-subtokenize@2.1.0:
+ resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==}
+
+ micromark-util-symbol@2.0.1:
+ resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==}
+
+ micromark-util-types@2.0.2:
+ resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==}
+
+ micromark@4.0.2:
+ resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==}
+
+ micromatch@4.0.8:
+ resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
+ engines: {node: '>=8.6'}
+
+ miller-rabin@4.0.1:
+ resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==}
+ hasBin: true
+
+ mime-db@1.52.0:
+ resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
+ engines: {node: '>= 0.6'}
+
+ mime-db@1.54.0:
+ resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==}
+ engines: {node: '>= 0.6'}
+
+ mime-types@2.1.35:
+ resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
+ engines: {node: '>= 0.6'}
+
+ mime-types@3.0.2:
+ resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==}
+ engines: {node: '>=18'}
+
+ mime@1.6.0:
+ resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ minimalistic-assert@1.0.1:
+ resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==}
+
+ minimalistic-crypto-utils@1.0.1:
+ resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==}
+
+ minimatch@3.1.5:
+ resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==}
+
+ mkdirp@1.0.4:
+ resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ mlly@1.8.0:
+ resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==}
+
+ ms@2.0.0:
+ resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ multiformats@9.9.0:
+ resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==}
+
+ nan@2.26.2:
+ resolution: {integrity: sha512-0tTvBTYkt3tdGw22nrAy50x7gpbGCCFH3AFcyS5WiUu7Eu4vWlri1woE6qHBSfy11vksDqkiwjOnlR7WV8G1Hw==}
+
+ nanoid@3.3.11:
+ resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ negotiator@1.0.0:
+ resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==}
+ engines: {node: '>= 0.6'}
+
+ node-addon-api@3.2.1:
+ resolution: {integrity: sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==}
+
+ node-addon-api@8.6.0:
+ resolution: {integrity: sha512-gBVjCaqDlRUk0EwoPNKzIr9KkS9041G/q31IBShPs1Xz6UTA+EXdZADbzqAJQrpDRq71CIMnOP5VMut3SL0z5Q==}
+ engines: {node: ^18 || ^20 || >= 21}
+
+ node-fetch-native@1.6.7:
+ resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==}
+
+ 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
+
+ node-int64@0.4.0:
+ resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==}
+
+ node-mock-http@1.0.4:
+ resolution: {integrity: sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==}
+
+ node-releases@2.0.27:
+ resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==}
+
+ nofilter@3.1.0:
+ resolution: {integrity: sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==}
+ engines: {node: '>=12.19'}
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ nullthrows@1.1.1:
+ resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==}
+
+ ob1@0.83.5:
+ resolution: {integrity: sha512-vNKPYC8L5ycVANANpF/S+WZHpfnRWKx/F3AYP4QMn6ZJTh+l2HOrId0clNkEmua58NB9vmI9Qh7YOoV/4folYg==}
+ engines: {node: '>=20.19.4'}
+
+ object-assign@4.1.1:
+ resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
+ engines: {node: '>=0.10.0'}
+
+ object-is@1.1.6:
+ resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==}
+ engines: {node: '>= 0.4'}
+
+ object-keys@1.1.1:
+ resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
+ engines: {node: '>= 0.4'}
+
+ object.assign@4.1.7:
+ resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==}
+ engines: {node: '>= 0.4'}
+
+ oblivious-set@1.4.0:
+ resolution: {integrity: sha512-szyd0ou0T8nsAqHtprRcP3WidfsN1TnAR5yWXf2mFCEr5ek3LEOkT6EZ/92Xfs74HIdyhG5WkGxIssMU0jBaeg==}
+ engines: {node: '>=16'}
+
+ ofetch@1.5.1:
+ resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==}
+
+ on-exit-leak-free@0.2.0:
+ resolution: {integrity: sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==}
+
+ on-finished@2.3.0:
+ resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==}
+ engines: {node: '>= 0.8'}
+
+ on-finished@2.4.1:
+ resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
+ engines: {node: '>= 0.8'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ oniguruma-parser@0.12.1:
+ resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==}
+
+ oniguruma-to-es@4.3.4:
+ resolution: {integrity: sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==}
+
+ open@7.4.2:
+ resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==}
+ engines: {node: '>=8'}
+
+ ox@0.14.5:
+ resolution: {integrity: sha512-HgmHmBveYO40H/R3K6TMrwYtHsx/u6TAB+GpZlgJCoW0Sq5Ttpjih0IZZiwGQw7T6vdW4IAyobYrE2mdAvyF8Q==}
+ peerDependencies:
+ typescript: '>=5.4.0'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ ox@0.6.7:
+ resolution: {integrity: sha512-17Gk/eFsFRAZ80p5eKqv89a57uXjd3NgIf1CaXojATPBuujVc/fQSVhBeAU9JCRB+k7J50WQAyWTxK19T9GgbA==}
+ peerDependencies:
+ typescript: '>=5.4.0'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ p-limit@2.3.0:
+ resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
+ engines: {node: '>=6'}
+
+ p-locate@4.1.0:
+ resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
+ engines: {node: '>=8'}
+
+ p-try@2.2.0:
+ resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
+ engines: {node: '>=6'}
+
+ package-manager-detector@1.6.0:
+ resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==}
+
+ parse-asn1@5.1.9:
+ resolution: {integrity: sha512-fIYNuZ/HastSb80baGOuPRo1O9cf4baWw5WsAp7dBuUzeTD/BoaG8sVTdlPFksBE2lF21dN+A1AnrpIjSWqHHg==}
+ engines: {node: '>= 0.10'}
+
+ parse-entities@4.0.2:
+ resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==}
+
+ parseurl@1.3.3:
+ resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
+ engines: {node: '>= 0.8'}
+
+ path-data-parser@0.1.0:
+ resolution: {integrity: sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ path-key@3.1.1:
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+ engines: {node: '>=8'}
+
+ pathe@2.0.3:
+ resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
+
+ pbkdf2@3.1.5:
+ resolution: {integrity: sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ==}
+ engines: {node: '>= 0.10'}
+
+ picocolors@1.1.1:
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ picomatch@4.0.3:
+ resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
+ engines: {node: '>=12'}
+
+ pino-abstract-transport@0.5.0:
+ resolution: {integrity: sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==}
+
+ pino-std-serializers@4.0.0:
+ resolution: {integrity: sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==}
+
+ pino@7.11.0:
+ resolution: {integrity: sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg==}
+ hasBin: true
+
+ pirates@4.0.7:
+ resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==}
+ engines: {node: '>= 6'}
+
+ pkg-types@1.3.1:
+ resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
+
+ pngjs@5.0.0:
+ resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==}
+ engines: {node: '>=10.13.0'}
+
+ points-on-curve@0.2.0:
+ resolution: {integrity: sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==}
+
+ points-on-path@0.2.1:
+ resolution: {integrity: sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==}
+
+ possible-typed-array-names@1.1.0:
+ resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
+ engines: {node: '>= 0.4'}
+
+ postcss@8.5.6:
+ resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
+ engines: {node: ^10 || ^12 || >=14}
+
+ potpack@1.0.2:
+ resolution: {integrity: sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==}
+
+ pretty-format@29.7.0:
+ resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ process-nextick-args@2.0.1:
+ resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
+
+ process-warning@1.0.0:
+ resolution: {integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==}
+
+ process@0.11.10:
+ resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
+ engines: {node: '>= 0.6.0'}
+
+ promise-worker-transferable@1.0.4:
+ resolution: {integrity: sha512-bN+0ehEnrXfxV2ZQvU2PetO0n4gqBD4ulq3MI1WOPLgr7/Mg9yRQkX5+0v1vagr74ZTsl7XtzlaYDo2EuCeYJw==}
+
+ promise@8.3.0:
+ resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==}
+
+ prop-types@15.8.1:
+ resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
+
+ property-information@7.1.0:
+ resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==}
+
+ protobufjs@7.4.0:
+ resolution: {integrity: sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==}
+ engines: {node: '>=12.0.0'}
+
+ proxy-compare@2.6.0:
+ resolution: {integrity: sha512-8xuCeM3l8yqdmbPoYeLbrAXCBWu19XEYc5/F28f5qOaoAIMyfmBUkl5axiK+x9olUvRlcekvnm98AP9RDngOIw==}
+
+ proxy-from-env@1.1.0:
+ resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
+
+ public-encrypt@4.0.3:
+ resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==}
+
+ pump@3.0.4:
+ resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==}
+
+ pushdata-bitcoin@1.0.1:
+ resolution: {integrity: sha512-hw7rcYTJRAl4olM8Owe8x0fBuJJ+WGbMhQuLWOXEMN3PxPCKQHRkhfL+XG0+iXUmSHjkMmb3Ba55Mt21cZc9kQ==}
+
+ qr.js@0.0.0:
+ resolution: {integrity: sha512-c4iYnWb+k2E+vYpRimHqSu575b1/wKl4XFeJGpFmrJQz5I88v9aY2czh7s0w36srfCM1sXgC/xpoJz5dJfq+OQ==}
+
+ qrcode.react@1.0.1:
+ resolution: {integrity: sha512-8d3Tackk8IRLXTo67Y+c1rpaiXjoz/Dd2HpcMdW//62/x8J1Nbho14Kh8x974t9prsLHN6XqVgcnRiBGFptQmg==}
+ peerDependencies:
+ react: ^15.5.3 || ^16.0.0 || ^17.0.0
+
+ qrcode@1.5.3:
+ resolution: {integrity: sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+
+ qrcode@1.5.4:
+ resolution: {integrity: sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+
+ query-string@7.1.3:
+ resolution: {integrity: sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==}
+ engines: {node: '>=6'}
+
+ queue@6.0.2:
+ resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==}
+
+ quick-format-unescaped@4.0.4:
+ resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==}
+
+ radix3@1.1.2:
+ resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ randomfill@1.0.4:
+ resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==}
+
+ range-parser@1.2.1:
+ resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
+ engines: {node: '>= 0.6'}
+
+ react-devtools-core@6.1.5:
+ resolution: {integrity: sha512-ePrwPfxAnB+7hgnEr8vpKxL9cmnp7F322t8oqcPshbIQQhDKgFDW4tjhF2wjVbdXF9O/nyuy3sQWd9JGpiLPvA==}
+
+ react-dom@19.2.4:
+ resolution: {integrity: sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==}
+ peerDependencies:
+ react: ^19.2.4
+
+ react-is@16.13.1:
+ resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
+
+ react-is@18.3.1:
+ resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
+
+ react-lifecycles-compat@3.0.4:
+ resolution: {integrity: sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==}
+
+ react-modal@3.16.3:
+ resolution: {integrity: sha512-yCYRJB5YkeQDQlTt17WGAgFJ7jr2QYcWa1SHqZ3PluDmnKJ/7+tVU+E6uKyZ0nODaeEj+xCpK4LcSnKXLMC0Nw==}
+ peerDependencies:
+ react: ^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18 || ^19
+ react-dom: ^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18 || ^19
+
+ react-native@0.84.1:
+ resolution: {integrity: sha512-0PjxOyXRu3tZ8EobabxSukvhKje2HJbsZikR0U+pvS0pYZza2hXKjcSBiBdFN4h9D0S3v6a8kkrDK6WTRKMwzg==}
+ engines: {node: '>= 20.19.4'}
+ hasBin: true
+ peerDependencies:
+ '@types/react': ^19.1.1
+ react: ^19.2.3
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ react-qr-reader@2.2.1:
+ resolution: {integrity: sha512-EL5JEj53u2yAOgtpAKAVBzD/SiKWn0Bl7AZy6ZrSf1lub7xHwtaXe6XSx36Wbhl1VMGmvmrwYMRwO1aSCT2fwA==}
+ peerDependencies:
+ react: ~16
+ react-dom: ~16
+
+ react-refresh@0.14.2:
+ resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==}
+ engines: {node: '>=0.10.0'}
+
+ react-refresh@0.17.0:
+ resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==}
+ engines: {node: '>=0.10.0'}
+
+ react-remove-scroll-bar@2.3.8:
+ resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ react-remove-scroll@2.7.2:
+ resolution: {integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ react-router@7.13.1:
+ resolution: {integrity: sha512-td+xP4X2/6BJvZoX6xw++A2DdEi++YypA69bJUV5oVvqf6/9/9nNlD70YO1e9d3MyamJEBQFEzk6mbfDYbqrSA==}
+ engines: {node: '>=20.0.0'}
+ peerDependencies:
+ react: '>=18'
+ react-dom: '>=18'
+ peerDependenciesMeta:
+ react-dom:
+ optional: true
+
+ react-style-singleton@2.2.3:
+ resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ react-use-measure@2.1.7:
+ resolution: {integrity: sha512-KrvcAo13I/60HpwGO5jpW7E9DfusKyLPLvuHlUyP5zqnmAPhNc6qTRjUQrdTADl0lpPpDVU2/Gg51UlOGHXbdg==}
+ peerDependencies:
+ react: '>=16.13'
+ react-dom: '>=16.13'
+ peerDependenciesMeta:
+ react-dom:
+ optional: true
+
+ react@19.2.4:
+ resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==}
+ engines: {node: '>=0.10.0'}
+
+ readable-stream@2.3.8:
+ resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
+
+ readable-stream@3.6.2:
+ resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
+ engines: {node: '>= 6'}
+
+ readable-stream@4.7.0:
+ resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ readdirp@5.0.0:
+ resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==}
+ engines: {node: '>= 20.19.0'}
+
+ real-require@0.1.0:
+ resolution: {integrity: sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==}
+ engines: {node: '>= 12.13.0'}
+
+ recma-build-jsx@1.0.0:
+ resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==}
+
+ recma-jsx@1.0.1:
+ resolution: {integrity: sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+
+ recma-parse@1.0.0:
+ resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==}
+
+ recma-stringify@1.0.0:
+ resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==}
+
+ regenerator-runtime@0.13.11:
+ resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==}
+
+ regex-recursion@6.0.2:
+ resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==}
+
+ regex-utilities@2.3.0:
+ resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==}
+
+ regex@6.1.0:
+ resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==}
+
+ rehype-recma@1.0.0:
+ resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==}
+
+ rehype-slug@6.0.0:
+ resolution: {integrity: sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==}
+
+ remark-gfm@4.0.1:
+ resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==}
+
+ remark-mdx@3.1.1:
+ resolution: {integrity: sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==}
+
+ remark-parse@11.0.0:
+ resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==}
+
+ remark-rehype@11.1.2:
+ resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==}
+
+ remark-stringify@11.0.0:
+ resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ require-from-string@2.0.2:
+ resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
+ engines: {node: '>=0.10.0'}
+
+ require-main-filename@2.0.0:
+ resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==}
+
+ resolve-from@5.0.0:
+ resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
+ engines: {node: '>=8'}
+
+ rimraf@3.0.2:
+ resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
+ deprecated: Rimraf versions prior to v4 are no longer supported
+ hasBin: true
+
+ ripemd160@2.0.3:
+ resolution: {integrity: sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==}
+ engines: {node: '>= 0.8'}
+
+ ripple-address-codec@5.0.0:
+ resolution: {integrity: sha512-de7osLRH/pt5HX2xw2TRJtbdLLWHu0RXirpQaEeCnWKY5DYHykh3ETSkofvm0aX0LJiV7kwkegJxQkmbO94gWw==}
+ engines: {node: '>= 16'}
+
+ ripple-binary-codec@2.7.0:
+ resolution: {integrity: sha512-gEBqan5muVp+q7jgZ6aUniSyN+e4FKRzn9uFAeFSIW7IgvkezP1cUolNtpahQ+jvaSK/33hxZA7wNmn1mc330g==}
+ engines: {node: '>= 18'}
+
+ ripple-keypairs@2.0.0:
+ resolution: {integrity: sha512-b5rfL2EZiffmklqZk1W+dvSy97v3V/C7936WxCCgDynaGPp7GE6R2XO7EU9O2LlM/z95rj870IylYnOQs+1Rag==}
+ engines: {node: '>= 16'}
+
+ robust-predicates@3.0.2:
+ resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==}
+
+ rollup@4.59.0:
+ resolution: {integrity: sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==}
+ engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+ hasBin: true
+
+ roughjs@4.6.6:
+ resolution: {integrity: sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==}
+
+ rpc-websockets@9.3.6:
+ resolution: {integrity: sha512-RzuOQDGd+EtR/cBYQAH/0jjaBzhyvXXGROhxigGJPf+q3XKyvtelZCucylzxiq5MaGlfBx1075djTsxFsFDgrA==}
+
+ rtcpeerconnection-shim@1.2.15:
+ resolution: {integrity: sha512-C6DxhXt7bssQ1nHb154lqeL0SXz5Dx4RczXZu2Aa/L1NJFnEVDxFwCBo3fqtuljhHIGceg5JKBV4XJ0gW5JKyw==}
+ engines: {node: '>=6.0.0', npm: '>=3.10.0'}
+
+ rw@1.3.3:
+ resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==}
+
+ rxjs@6.6.7:
+ resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==}
+ engines: {npm: '>=2.0.0'}
+
+ rxjs@7.8.2:
+ resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==}
+
+ safe-buffer@5.1.2:
+ resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ safe-regex-test@1.1.0:
+ resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
+ engines: {node: '>= 0.4'}
+
+ safe-stable-stringify@2.5.0:
+ resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==}
+ engines: {node: '>=10'}
+
+ safer-buffer@2.1.2:
+ resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+
+ salmon-adapter-sdk@1.1.1:
+ resolution: {integrity: sha512-28ysSzmDjx2AbotxSggqdclh9MCwlPJUldKkCph48oS5Xtwu0QOg8T9ZRHS2Mben4Y8sTq6VvxXznKssCYFBJA==}
+ peerDependencies:
+ '@solana/web3.js': ^1.44.3
+
+ scheduler@0.27.0:
+ resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==}
+
+ sdp@2.12.0:
+ resolution: {integrity: sha512-jhXqQAQVM+8Xj5EjJGVweuEzgtGWb3tmEEpl3CLP3cStInSbVHSg0QWOGQzNq8pSID4JkpeV2mPqlMDLrm0/Vw==}
+
+ semver@6.3.1:
+ resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
+ hasBin: true
+
+ semver@7.7.3:
+ resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ semver@7.7.4:
+ resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ send@0.19.2:
+ resolution: {integrity: sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==}
+ engines: {node: '>= 0.8.0'}
+
+ serialize-error@2.1.0:
+ resolution: {integrity: sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==}
+ engines: {node: '>=0.10.0'}
+
+ serve-static@1.16.3:
+ resolution: {integrity: sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==}
+ engines: {node: '>= 0.8.0'}
+
+ set-blocking@2.0.0:
+ resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
+
+ set-cookie-parser@2.7.2:
+ resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==}
+
+ set-function-length@1.2.2:
+ resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
+ engines: {node: '>= 0.4'}
+
+ setprototypeof@1.2.0:
+ resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
+
+ sha.js@2.4.12:
+ resolution: {integrity: sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==}
+ engines: {node: '>= 0.10'}
+ hasBin: true
+
+ shebang-command@2.0.0:
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+ engines: {node: '>=8'}
+
+ shebang-regex@3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+ engines: {node: '>=8'}
+
+ shell-quote@1.8.3:
+ resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==}
+ engines: {node: '>= 0.4'}
+
+ shiki@4.0.0:
+ resolution: {integrity: sha512-rjKoiw30ZaFsM0xnPPwxco/Jftz/XXqZkcQZBTX4LGheDw8gCDEH87jdgaKDEG3FZO2bFOK27+sR/sDHhbBXfg==}
+ engines: {node: '>=20'}
+
+ signal-exit@3.0.7:
+ resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
+
+ simple-swizzle@0.2.4:
+ resolution: {integrity: sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==}
+
+ slash@3.0.0:
+ resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
+ engines: {node: '>=8'}
+
+ smart-buffer@4.2.0:
+ resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
+ engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
+
+ socket.io-client@4.8.3:
+ resolution: {integrity: sha512-uP0bpjWrjQmUt5DTHq9RuoCBdFJF10cdX9X+a368j/Ft0wmaVgxlrjvK3kjvgCODOMMOz9lcaRzxmso0bTWZ/g==}
+ engines: {node: '>=10.0.0'}
+
+ socket.io-parser@4.2.6:
+ resolution: {integrity: sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg==}
+ engines: {node: '>=10.0.0'}
+
+ socks-proxy-agent@8.0.5:
+ resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==}
+ engines: {node: '>= 14'}
+
+ socks@2.8.7:
+ resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==}
+ engines: {node: '>= 10.0.0', npm: '>= 3.0.0'}
+
+ sonic-boom@2.8.0:
+ resolution: {integrity: sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==}
+
+ source-map-js@1.2.1:
+ resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
+ engines: {node: '>=0.10.0'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.5.7:
+ resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==}
+ engines: {node: '>=0.10.0'}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ source-map@0.7.6:
+ resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==}
+ engines: {node: '>= 12'}
+
+ space-separated-tokens@2.0.2:
+ resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
+
+ split-on-first@1.1.0:
+ resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==}
+ engines: {node: '>=6'}
+
+ split2@4.2.0:
+ resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
+ engines: {node: '>= 10.x'}
+
+ sprintf-js@1.0.3:
+ resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
+
+ stack-utils@2.0.6:
+ resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==}
+ engines: {node: '>=10'}
+
+ stackframe@1.3.4:
+ resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==}
+
+ stacktrace-parser@0.1.11:
+ resolution: {integrity: sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==}
+ engines: {node: '>=6'}
+
+ stats-gl@2.4.2:
+ resolution: {integrity: sha512-g5O9B0hm9CvnM36+v7SFl39T7hmAlv541tU81ME8YeSb3i1CIP5/QdDeSB3A0la0bKNHpxpwxOVRo2wFTYEosQ==}
+ peerDependencies:
+ '@types/three': '*'
+ three: '*'
+
+ stats.js@0.17.0:
+ resolution: {integrity: sha512-hNKz8phvYLPEcRkeG1rsGmV5ChMjKDAWU7/OJJdDErPBNChQXxCo3WZurGpnWc6gZhAzEPFad1aVgyOANH1sMw==}
+
+ statuses@1.5.0:
+ resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==}
+ engines: {node: '>= 0.6'}
+
+ statuses@2.0.2:
+ resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==}
+ engines: {node: '>= 0.8'}
+
+ stream-browserify@3.0.0:
+ resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==}
+
+ 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==}
+
+ stream-shift@1.0.3:
+ resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==}
+
+ strict-uri-encode@2.0.0:
+ resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==}
+ engines: {node: '>=4'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ string_decoder@1.1.1:
+ resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
+
+ string_decoder@1.3.0:
+ resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
+
+ stringify-entities@4.0.4:
+ resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ style-to-js@1.1.21:
+ resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==}
+
+ style-to-object@1.0.14:
+ resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==}
+
+ stylis@4.3.6:
+ resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==}
+
+ 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'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ suspend-react@0.1.3:
+ resolution: {integrity: sha512-aqldKgX9aZqpoDp3e8/BZ8Dm7x1pJl+qI3ZKxDN0i/IQTWUwBx/ManmlVJ3wowqbno6c2bmiIfs+Um6LbsjJyQ==}
+ peerDependencies:
+ react: '>=17.0'
+
+ tailwind-merge@3.5.0:
+ resolution: {integrity: sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==}
+
+ tailwindcss@4.2.1:
+ resolution: {integrity: sha512-/tBrSQ36vCleJkAOsy9kbNTgaxvGbyOamC30PRePTQe/o1MFwEKHQk4Cn7BNGaPtjp+PuUrByJehM1hgxfq4sw==}
+
+ tapable@2.3.0:
+ resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==}
+ engines: {node: '>=6'}
+
+ terser@5.46.1:
+ resolution: {integrity: sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ test-exclude@6.0.0:
+ resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==}
+ engines: {node: '>=8'}
+
+ text-encoding-utf-8@1.0.2:
+ resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
+
+ thread-stream@0.15.2:
+ resolution: {integrity: sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==}
+
+ three-mesh-bvh@0.8.3:
+ resolution: {integrity: sha512-4G5lBaF+g2auKX3P0yqx+MJC6oVt6sB5k+CchS6Ob0qvH0YIhuUk1eYr7ktsIpY+albCqE80/FVQGV190PmiAg==}
+ peerDependencies:
+ three: '>= 0.159.0'
+
+ three-stdlib@2.36.1:
+ resolution: {integrity: sha512-XyGQrFmNQ5O/IoKm556ftwKsBg11TIb301MB5dWNicziQBEs2g3gtOYIf7pFiLa0zI2gUwhtCjv9fmjnxKZ1Cg==}
+ peerDependencies:
+ three: '>=0.128.0'
+
+ three@0.183.2:
+ resolution: {integrity: sha512-di3BsL2FEQ1PA7Hcvn4fyJOlxRRgFYBpMTcyOgkwJIaDOdJMebEFPA+t98EvjuljDx4hNulAGwF6KIjtwI5jgQ==}
+
+ throat@5.0.0:
+ resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==}
+
+ tiny-secp256k1@1.1.7:
+ resolution: {integrity: sha512-eb+F6NabSnjbLwNoC+2o5ItbmP1kg7HliWue71JgLegQt6A5mTN8YbvTLCazdlg6e5SV6A+r8OGvZYskdlmhqQ==}
+ engines: {node: '>=6.0.0'}
+
+ tinyexec@1.0.2:
+ resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==}
+ engines: {node: '>=18'}
+
+ tinyglobby@0.2.15:
+ resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
+ engines: {node: '>=12.0.0'}
+
+ tmpl@1.0.5:
+ resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==}
+
+ to-buffer@1.2.2:
+ resolution: {integrity: sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==}
+ engines: {node: '>= 0.4'}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ toidentifier@1.0.1:
+ resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
+ engines: {node: '>=0.6'}
+
+ toml@3.0.0:
+ resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ trim-lines@3.0.1:
+ resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
+
+ troika-three-text@0.52.4:
+ resolution: {integrity: sha512-V50EwcYGruV5rUZ9F4aNsrytGdKcXKALjEtQXIOBfhVoZU9VAqZNIoGQ3TMiooVqFAbR1w15T+f+8gkzoFzawg==}
+ peerDependencies:
+ three: '>=0.125.0'
+
+ troika-three-utils@0.52.4:
+ resolution: {integrity: sha512-NORAStSVa/BDiG52Mfudk4j1FG4jC4ILutB3foPnfGbOeIs9+G5vZLa0pnmnaftZUGm4UwSoqEpWdqvC7zms3A==}
+ peerDependencies:
+ three: '>=0.125.0'
+
+ troika-worker-utils@0.52.0:
+ resolution: {integrity: sha512-W1CpvTHykaPH5brv5VHLfQo9D1OYuo0cSBEUQFFT/nBUzM8iD6Lq2/tgG/f1OelbAS1WtaTPQzE5uM49egnngw==}
+
+ trough@2.2.0:
+ resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==}
+
+ ts-dedent@2.2.0:
+ resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==}
+ engines: {node: '>=6.10'}
+
+ ts-mixer@6.0.4:
+ resolution: {integrity: sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==}
+
+ tslib@1.14.1:
+ resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
+
+ tslib@2.7.0:
+ resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==}
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+ tunnel-rat@0.1.2:
+ resolution: {integrity: sha512-lR5VHmkPhzdhrM092lI2nACsLO4QubF0/yoOhzX7c+wIpbN1GjHNzCc91QlpxBi+cnx8vVJ+Ur6vL5cEoQPFpQ==}
+
+ type-detect@4.0.8:
+ resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
+ engines: {node: '>=4'}
+
+ type-fest@0.7.1:
+ resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==}
+ engines: {node: '>=8'}
+
+ typed-array-buffer@1.0.3:
+ resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==}
+ engines: {node: '>= 0.4'}
+
+ typeforce@1.18.0:
+ resolution: {integrity: sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==}
+
+ typescript@5.9.3:
+ resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ ua-is-frozen@0.1.2:
+ resolution: {integrity: sha512-RwKDW2p3iyWn4UbaxpP2+VxwqXh0jpvdxsYpZ5j/MLLiQOfbsV5shpgQiw93+KMYQPcteeMQ289MaAFzs3G9pw==}
+
+ ua-parser-js@2.0.9:
+ resolution: {integrity: sha512-OsqGhxyo/wGdLSXMSJxuMGN6H4gDnKz6Fb3IBm4bxZFMnyy0sdf6MN96Ie8tC6z/btdO+Bsy8guxlvLdwT076w==}
+ hasBin: true
+
+ ufo@1.6.3:
+ resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==}
+
+ uint8array-tools@0.0.8:
+ resolution: {integrity: sha512-xS6+s8e0Xbx++5/0L+yyexukU7pz//Yg6IHg3BKhXotg1JcYtgxVcUctQ0HxLByiJzpAkNFawz1Nz5Xadzo82g==}
+ engines: {node: '>=14.0.0'}
+
+ uint8arrays@3.1.0:
+ resolution: {integrity: sha512-ei5rfKtoRO8OyOIor2Rz5fhzjThwIHJZ3uyDPnDHTXbP0aMQ1RN/6AI5B5d9dBxJOU+BvOAk7ZQ1xphsX8Lrog==}
+
+ uncrypto@0.1.3:
+ resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==}
+
+ undici-types@6.19.8:
+ resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
+
+ undici-types@7.18.2:
+ resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==}
+
+ undici-types@7.24.5:
+ resolution: {integrity: sha512-kNh333UBSbgK35OIW7FwJTr9tTfVIG51Fm1tSVT7m8foPHfDVjsb7OIee/q/rs3bB2aV/3qOPgG5mHNWl1odiA==}
+
+ unidragger@3.0.1:
+ resolution: {integrity: sha512-RngbGSwBFmqGBWjkaH+yB677uzR95blSQyxq6hYbrQCejH3Mx1nm8DVOuh3M9k2fQyTstWUG5qlgCnNqV/9jVw==}
+
+ unified@11.0.5:
+ resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==}
+
+ unist-util-is@6.0.1:
+ resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==}
+
+ unist-util-position-from-estree@2.0.0:
+ resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==}
+
+ unist-util-position@5.0.0:
+ resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==}
+
+ unist-util-stringify-position@4.0.0:
+ resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==}
+
+ unist-util-visit-parents@6.0.2:
+ resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==}
+
+ unist-util-visit@5.1.0:
+ resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==}
+
+ unload@2.4.1:
+ resolution: {integrity: sha512-IViSAm8Z3sRBYA+9wc0fLQmU9Nrxb16rcDmIiR6Y9LJSZzI7QY5QsDhqPpKOjAn0O9/kfK1TfNEMMAGPTIraPw==}
+
+ unpipe@1.0.0:
+ resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
+ engines: {node: '>= 0.8'}
+
+ unstorage@1.17.4:
+ resolution: {integrity: sha512-fHK0yNg38tBiJKp/Vgsq4j0JEsCmgqH58HAn707S7zGkArbZsVr/CwINoi+nh3h98BRCwKvx1K3Xg9u3VV83sw==}
+ peerDependencies:
+ '@azure/app-configuration': ^1.8.0
+ '@azure/cosmos': ^4.2.0
+ '@azure/data-tables': ^13.3.0
+ '@azure/identity': ^4.6.0
+ '@azure/keyvault-secrets': ^4.9.0
+ '@azure/storage-blob': ^12.26.0
+ '@capacitor/preferences': ^6 || ^7 || ^8
+ '@deno/kv': '>=0.9.0'
+ '@netlify/blobs': ^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0
+ '@planetscale/database': ^1.19.0
+ '@upstash/redis': ^1.34.3
+ '@vercel/blob': '>=0.27.1'
+ '@vercel/functions': ^2.2.12 || ^3.0.0
+ '@vercel/kv': ^1 || ^2 || ^3
+ aws4fetch: ^1.0.20
+ db0: '>=0.2.1'
+ idb-keyval: ^6.2.1
+ ioredis: ^5.4.2
+ uploadthing: ^7.4.4
+ peerDependenciesMeta:
+ '@azure/app-configuration':
+ optional: true
+ '@azure/cosmos':
+ optional: true
+ '@azure/data-tables':
+ optional: true
+ '@azure/identity':
+ optional: true
+ '@azure/keyvault-secrets':
+ optional: true
+ '@azure/storage-blob':
+ optional: true
+ '@capacitor/preferences':
+ optional: true
+ '@deno/kv':
+ optional: true
+ '@netlify/blobs':
+ optional: true
+ '@planetscale/database':
+ optional: true
+ '@upstash/redis':
+ optional: true
+ '@vercel/blob':
+ optional: true
+ '@vercel/functions':
+ optional: true
+ '@vercel/kv':
+ optional: true
+ aws4fetch:
+ optional: true
+ db0:
+ optional: true
+ idb-keyval:
+ optional: true
+ ioredis:
+ optional: true
+ uploadthing:
+ optional: true
+
+ update-browserslist-db@1.2.3:
+ resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+
+ urijs@1.19.11:
+ resolution: {integrity: sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==}
+
+ usb@2.17.0:
+ resolution: {integrity: sha512-UuFgrlglgDn5ll6d5l7kl3nDb2Yx43qLUGcDq+7UNLZLtbNug0HZBb2Xodhgx2JZB1LqvU+dOGqLEeYUeZqsHg==}
+ engines: {node: '>=12.22.0 <13.0 || >=14.17.0'}
+
+ use-callback-ref@1.3.3:
+ resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ use-sidecar@1.1.3:
+ resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ use-sync-external-store@1.2.0:
+ resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+
+ use-sync-external-store@1.6.0:
+ resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==}
+ 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'}
+
+ util-deprecate@1.0.2:
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+
+ util@0.12.5:
+ resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==}
+
+ utility-types@3.11.0:
+ resolution: {integrity: sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==}
+ engines: {node: '>= 4'}
+
+ utils-merge@1.0.1:
+ 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
+
+ uuid@9.0.1:
+ resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==}
+ hasBin: true
+
+ uuidv4@6.2.13:
+ resolution: {integrity: sha512-AXyzMjazYB3ovL3q051VLH06Ixj//Knx7QnUSi1T//Ie3io6CpsPu9nVMOx5MoLWh6xV0B9J0hIaxungxXUbPQ==}
+ deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
+
+ valtio@1.13.2:
+ resolution: {integrity: sha512-Qik0o+DSy741TmkqmRfjq+0xpZBXi/Y6+fXZLn0xNF1z/waFMbE3rkivv5Zcf9RrMUp6zswf2J7sbh2KBlba5A==}
+ engines: {node: '>=12.20.0'}
+ peerDependencies:
+ '@types/react': '>=16.8'
+ react: '>=16.8'
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ react:
+ optional: true
+
+ varuint-bitcoin@2.0.0:
+ resolution: {integrity: sha512-6QZbU/rHO2ZQYpWFDALCDSRsXbAs1VOEmXAxtbtjLtKuMJ/FQ8YbhfxlaiKv5nklci0M6lZtlZyxo9Q+qNnyog==}
+
+ vfile-message@4.0.3:
+ resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==}
+
+ vfile@6.0.3:
+ resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
+
+ viem@2.23.2:
+ resolution: {integrity: sha512-NVmW/E0c5crMOtbEAqMF0e3NmvQykFXhLOc/CkLIXOlzHSA6KXVz3CYVmaKqBF8/xtjsjHAGjdJN3Ru1kFJLaA==}
+ peerDependencies:
+ typescript: '>=5.0.4'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ viem@2.47.5:
+ resolution: {integrity: sha512-nVrJEQ8GL4JoVIrMBF3wwpTUZun0cpojfnOZ+96GtDWhqxZkVdy6vOEgu+jwfXqfTA/+wrR+YsN9TBQmhDUk0g==}
+ peerDependencies:
+ typescript: '>=5.0.4'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ vite@7.3.1:
+ resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^20.19.0 || >=22.12.0
+ jiti: '>=1.21.0'
+ less: ^4.0.0
+ lightningcss: ^1.21.0
+ sass: ^1.70.0
+ sass-embedded: ^1.70.0
+ stylus: '>=0.54.8'
+ sugarss: ^5.0.0
+ terser: ^5.16.0
+ tsx: ^4.8.1
+ yaml: ^2.4.2
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ jiti:
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+ tsx:
+ optional: true
+ yaml:
+ optional: true
+
+ vlq@1.0.1:
+ resolution: {integrity: sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==}
+
+ vscode-jsonrpc@8.2.0:
+ resolution: {integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==}
+ engines: {node: '>=14.0.0'}
+
+ vscode-languageserver-protocol@3.17.5:
+ resolution: {integrity: sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==}
+
+ vscode-languageserver-textdocument@1.0.12:
+ resolution: {integrity: sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==}
+
+ vscode-languageserver-types@3.17.5:
+ resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==}
+
+ vscode-languageserver@9.0.1:
+ resolution: {integrity: sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==}
+ hasBin: true
+
+ vscode-uri@3.1.0:
+ resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==}
+
+ walker@1.0.8:
+ resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==}
+
+ warning@4.0.3:
+ resolution: {integrity: sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==}
+
+ 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==}
+
+ webrtc-adapter@7.7.1:
+ resolution: {integrity: sha512-TbrbBmiQBL9n0/5bvDdORc6ZfRY/Z7JnEj+EYOD1ghseZdpJ+nF2yx14k3LgQKc7JZnG7HAcL+zHnY25So9d7A==}
+ engines: {node: '>=6.0.0', npm: '>=3.10.0'}
+
+ whatwg-fetch@3.6.20:
+ resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which-module@2.0.1:
+ resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==}
+
+ which-typed-array@1.1.20:
+ resolution: {integrity: sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==}
+ engines: {node: '>= 0.4'}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ wif@5.0.0:
+ resolution: {integrity: sha512-iFzrC/9ne740qFbNjTZ2FciSRJlHIXoxqk/Y5EnE08QOXu1WjJyCCswwDTYbohAOEnlCtLaAAQBhyaLRFh2hMA==}
+
+ 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'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ write-file-atomic@4.0.2:
+ resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==}
+ engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.17.1:
+ resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==}
+ 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
+
+ ws@8.18.0:
+ resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==}
+ 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
+
+ ws@8.18.3:
+ resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==}
+ 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
+
+ ws@8.19.0:
+ resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==}
+ 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
+
+ xmlhttprequest-ssl@2.1.2:
+ resolution: {integrity: sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==}
+ engines: {node: '>=0.4.0'}
+
+ xrpl@4.4.3:
+ resolution: {integrity: sha512-vi2OjuNkiaP8nv1j+nqHp8GZwwEjO6Y8+j/OuVMg6M4LwXEwyHdIj33dlg7cyY1Lw5+jb9HqFOQvABhaywVbTQ==}
+ engines: {node: '>=18.0.0'}
+
+ 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'}
+
+ yallist@3.1.1:
+ resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+
+ yaml@2.8.2:
+ resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==}
+ 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'}
+
+ zod@3.22.4:
+ resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==}
+
+ zustand@4.5.7:
+ resolution: {integrity: sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw==}
+ engines: {node: '>=12.7.0'}
+ peerDependencies:
+ '@types/react': '>=16.8'
+ immer: '>=9.0.6'
+ react: '>=16.8'
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ immer:
+ optional: true
+ react:
+ optional: true
+
+ zustand@5.0.12:
+ resolution: {integrity: sha512-i77ae3aZq4dhMlRhJVCYgMLKuSiZAaUPAct2AksxQ+gOtimhGMdXljRT21P5BNpeT4kXlLIckvkPM029OljD7g==}
+ engines: {node: '>=12.20.0'}
+ peerDependencies:
+ '@types/react': '>=18.0.0'
+ immer: '>=9.0.6'
+ react: '>=18.0.0'
+ use-sync-external-store: '>=1.2.0'
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ immer:
+ optional: true
+ react:
+ optional: true
+ use-sync-external-store:
+ optional: true
+
+ zwitch@2.0.4:
+ resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
+
+snapshots:
+
+ '@adraffy/ens-normalize@1.10.1': {}
+
+ '@adraffy/ens-normalize@1.11.1': {}
+
+ '@antfu/install-pkg@1.1.0':
+ dependencies:
+ package-manager-detector: 1.6.0
+ tinyexec: 1.0.2
+
+ '@babel/code-frame@7.29.0':
+ dependencies:
+ '@babel/helper-validator-identifier': 7.28.5
+ js-tokens: 4.0.0
+ picocolors: 1.1.1
+
+ '@babel/compat-data@7.29.0': {}
+
+ '@babel/core@7.29.0':
+ dependencies:
+ '@babel/code-frame': 7.29.0
+ '@babel/generator': 7.29.1
+ '@babel/helper-compilation-targets': 7.28.6
+ '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0)
+ '@babel/helpers': 7.28.6
+ '@babel/parser': 7.29.0
+ '@babel/template': 7.28.6
+ '@babel/traverse': 7.29.0
+ '@babel/types': 7.29.0
+ '@jridgewell/remapping': 2.3.5
+ convert-source-map: 2.0.0
+ debug: 4.4.3
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/generator@7.29.1':
+ dependencies:
+ '@babel/parser': 7.29.0
+ '@babel/types': 7.29.0
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+ jsesc: 3.1.0
+
+ '@babel/helper-compilation-targets@7.28.6':
+ dependencies:
+ '@babel/compat-data': 7.29.0
+ '@babel/helper-validator-option': 7.27.1
+ browserslist: 4.28.1
+ lru-cache: 5.1.1
+ semver: 6.3.1
+
+ '@babel/helper-globals@7.28.0': {}
+
+ '@babel/helper-module-imports@7.28.6':
+ dependencies:
+ '@babel/traverse': 7.29.0
+ '@babel/types': 7.29.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-module-imports': 7.28.6
+ '@babel/helper-validator-identifier': 7.28.5
+ '@babel/traverse': 7.29.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-plugin-utils@7.28.6': {}
+
+ '@babel/helper-string-parser@7.27.1': {}
+
+ '@babel/helper-validator-identifier@7.28.5': {}
+
+ '@babel/helper-validator-option@7.27.1': {}
+
+ '@babel/helpers@7.28.6':
+ dependencies:
+ '@babel/template': 7.28.6
+ '@babel/types': 7.29.0
+
+ '@babel/parser@7.29.0':
+ dependencies:
+ '@babel/types': 7.29.0
+
+ '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/runtime@7.29.2': {}
+
+ '@babel/template@7.28.6':
+ dependencies:
+ '@babel/code-frame': 7.29.0
+ '@babel/parser': 7.29.0
+ '@babel/types': 7.29.0
+
+ '@babel/traverse@7.29.0':
+ dependencies:
+ '@babel/code-frame': 7.29.0
+ '@babel/generator': 7.29.1
+ '@babel/helper-globals': 7.28.0
+ '@babel/parser': 7.29.0
+ '@babel/template': 7.28.6
+ '@babel/types': 7.29.0
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/types@7.29.0':
+ dependencies:
+ '@babel/helper-string-parser': 7.27.1
+ '@babel/helper-validator-identifier': 7.28.5
+
+ '@braintree/sanitize-url@7.1.2': {}
+
+ '@chevrotain/cst-dts-gen@11.1.1':
+ dependencies:
+ '@chevrotain/gast': 11.1.1
+ '@chevrotain/types': 11.1.1
+ lodash-es: 4.17.23
+
+ '@chevrotain/gast@11.1.1':
+ dependencies:
+ '@chevrotain/types': 11.1.1
+ lodash-es: 4.17.23
+
+ '@chevrotain/regexp-to-ast@11.1.1': {}
+
+ '@chevrotain/types@11.1.1': {}
+
+ '@chevrotain/utils@11.1.1': {}
+
+ '@dimforge/rapier3d-compat@0.12.0': {}
+
+ '@emurgo/cardano-serialization-lib-browser@13.2.1': {}
+
+ '@emurgo/cardano-serialization-lib-nodejs@13.2.0': {}
+
+ '@esbuild/aix-ppc64@0.27.3':
+ optional: true
+
+ '@esbuild/android-arm64@0.27.3':
+ optional: true
+
+ '@esbuild/android-arm@0.27.3':
+ optional: true
+
+ '@esbuild/android-x64@0.27.3':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.27.3':
+ optional: true
+
+ '@esbuild/darwin-x64@0.27.3':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.27.3':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.27.3':
+ optional: true
+
+ '@esbuild/linux-arm64@0.27.3':
+ optional: true
+
+ '@esbuild/linux-arm@0.27.3':
+ optional: true
+
+ '@esbuild/linux-ia32@0.27.3':
+ optional: true
+
+ '@esbuild/linux-loong64@0.27.3':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.27.3':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.27.3':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.27.3':
+ optional: true
+
+ '@esbuild/linux-s390x@0.27.3':
+ optional: true
+
+ '@esbuild/linux-x64@0.27.3':
+ optional: true
+
+ '@esbuild/netbsd-arm64@0.27.3':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.27.3':
+ optional: true
+
+ '@esbuild/openbsd-arm64@0.27.3':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.27.3':
+ optional: true
+
+ '@esbuild/openharmony-arm64@0.27.3':
+ optional: true
+
+ '@esbuild/sunos-x64@0.27.3':
+ optional: true
+
+ '@esbuild/win32-arm64@0.27.3':
+ optional: true
+
+ '@esbuild/win32-ia32@0.27.3':
+ optional: true
+
+ '@esbuild/win32-x64@0.27.3':
+ optional: true
+
+ '@ethereumjs/common@10.1.1':
+ dependencies:
+ '@ethereumjs/util': 10.1.1
+ eventemitter3: 5.0.4
+
+ '@ethereumjs/rlp@10.1.1': {}
+
+ '@ethereumjs/rlp@5.0.2': {}
+
+ '@ethereumjs/tx@10.1.1':
+ dependencies:
+ '@ethereumjs/common': 10.1.1
+ '@ethereumjs/rlp': 10.1.1
+ '@ethereumjs/util': 10.1.1
+ '@noble/curves': 2.0.1
+ '@noble/hashes': 2.0.1
+
+ '@ethereumjs/util@10.1.1':
+ dependencies:
+ '@ethereumjs/rlp': 10.1.1
+ '@noble/curves': 2.0.1
+ '@noble/hashes': 2.0.1
+
+ '@ethereumjs/util@9.1.0':
+ dependencies:
+ '@ethereumjs/rlp': 5.0.2
+ ethereum-cryptography: 2.2.1
+
+ '@fivebinaries/coin-selection@3.0.0':
+ dependencies:
+ '@emurgo/cardano-serialization-lib-browser': 13.2.1
+ '@emurgo/cardano-serialization-lib-nodejs': 13.2.0
+
+ '@floating-ui/core@1.7.4':
+ dependencies:
+ '@floating-ui/utils': 0.2.10
+
+ '@floating-ui/dom@1.7.5':
+ dependencies:
+ '@floating-ui/core': 1.7.4
+ '@floating-ui/utils': 0.2.10
+
+ '@floating-ui/react-dom@2.1.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@floating-ui/dom': 1.7.5
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+
+ '@floating-ui/utils@0.2.10': {}
+
+ '@fractalwagmi/popup-connection@1.1.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+
+ '@fractalwagmi/solana-wallet-adapter@0.1.1(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@fractalwagmi/popup-connection': 1.1.1(react-dom@19.2.4(react@19.2.4))(react@19.2.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))
+ bs58: 5.0.0
+ transitivePeerDependencies:
+ - '@solana/web3.js'
+ - react
+ - react-dom
+
+ '@gsap/react@2.1.2(gsap@3.14.2)(react@19.2.4)':
+ dependencies:
+ gsap: 3.14.2
+ react: 19.2.4
+
+ '@iconify/types@2.0.0': {}
+
+ '@iconify/utils@3.1.0':
+ dependencies:
+ '@antfu/install-pkg': 1.1.0
+ '@iconify/types': 2.0.0
+ mlly: 1.8.0
+
+ '@isaacs/ttlcache@1.4.1': {}
+
+ '@istanbuljs/load-nyc-config@1.1.0':
+ dependencies:
+ camelcase: 5.3.1
+ find-up: 4.1.0
+ get-package-type: 0.1.0
+ js-yaml: 3.14.2
+ resolve-from: 5.0.0
+
+ '@istanbuljs/schema@0.1.3': {}
+
+ '@jest/create-cache-key-function@29.7.0':
+ dependencies:
+ '@jest/types': 29.6.3
+
+ '@jest/environment@29.7.0':
+ dependencies:
+ '@jest/fake-timers': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/node': 25.5.0
+ jest-mock: 29.7.0
+
+ '@jest/fake-timers@29.7.0':
+ dependencies:
+ '@jest/types': 29.6.3
+ '@sinonjs/fake-timers': 10.3.0
+ '@types/node': 25.5.0
+ jest-message-util: 29.7.0
+ jest-mock: 29.7.0
+ jest-util: 29.7.0
+
+ '@jest/schemas@29.6.3':
+ dependencies:
+ '@sinclair/typebox': 0.27.10
+
+ '@jest/transform@29.7.0':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@jest/types': 29.6.3
+ '@jridgewell/trace-mapping': 0.3.31
+ babel-plugin-istanbul: 6.1.1
+ chalk: 4.1.2
+ convert-source-map: 2.0.0
+ fast-json-stable-stringify: 2.1.0
+ graceful-fs: 4.2.11
+ jest-haste-map: 29.7.0
+ jest-regex-util: 29.6.3
+ jest-util: 29.7.0
+ micromatch: 4.0.8
+ pirates: 4.0.7
+ slash: 3.0.0
+ write-file-atomic: 4.0.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@jest/types@29.6.3':
+ dependencies:
+ '@jest/schemas': 29.6.3
+ '@types/istanbul-lib-coverage': 2.0.6
+ '@types/istanbul-reports': 3.0.4
+ '@types/node': 25.5.0
+ '@types/yargs': 17.0.35
+ chalk: 4.1.2
+
+ '@jridgewell/gen-mapping@0.3.13':
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/remapping@2.3.5':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/source-map@0.3.11':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/sourcemap-codec@1.5.5': {}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ '@keystonehq/alias-sampling@0.1.2': {}
+
+ '@keystonehq/bc-ur-registry-sol@0.9.5':
+ dependencies:
+ '@keystonehq/bc-ur-registry': 0.7.1
+ bs58check: 2.1.2
+ uuid: 8.3.2
+
+ '@keystonehq/bc-ur-registry@0.5.4':
+ dependencies:
+ '@ngraveio/bc-ur': 1.1.13
+ bs58check: 2.1.2
+ tslib: 2.8.1
+
+ '@keystonehq/bc-ur-registry@0.7.1':
+ dependencies:
+ '@ngraveio/bc-ur': 1.1.13
+ bs58check: 2.1.2
+ tslib: 2.8.1
+
+ '@keystonehq/sdk@0.19.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@ngraveio/bc-ur': 1.1.13
+ qrcode.react: 1.0.1(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ react-modal: 3.16.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ react-qr-reader: 2.2.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ rxjs: 6.6.7
+
+ '@keystonehq/sol-keyring@0.20.0(bufferutil@4.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)(utf-8-validate@6.0.6)':
+ dependencies:
+ '@keystonehq/bc-ur-registry': 0.5.4
+ '@keystonehq/bc-ur-registry-sol': 0.9.5
+ '@keystonehq/sdk': 0.19.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+ bs58: 5.0.0
+ uuid: 8.3.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - react
+ - react-dom
+ - typescript
+ - utf-8-validate
+
+ '@ledgerhq/devices@8.12.0':
+ dependencies:
+ '@ledgerhq/errors': 6.31.0
+ '@ledgerhq/logs': 6.16.0
+ rxjs: 7.8.2
+ semver: 7.7.3
+
+ '@ledgerhq/errors@6.31.0': {}
+
+ '@ledgerhq/hw-transport-webhid@6.33.0':
+ dependencies:
+ '@ledgerhq/devices': 8.12.0
+ '@ledgerhq/errors': 6.31.0
+ '@ledgerhq/hw-transport': 6.34.0
+ '@ledgerhq/logs': 6.16.0
+
+ '@ledgerhq/hw-transport@6.34.0':
+ dependencies:
+ '@ledgerhq/devices': 8.12.0
+ '@ledgerhq/errors': 6.31.0
+ '@ledgerhq/logs': 6.16.0
+ events: 3.3.0
+
+ '@ledgerhq/logs@6.16.0': {}
+
+ '@lit-labs/ssr-dom-shim@1.5.1': {}
+
+ '@lit/reactive-element@2.1.2':
+ dependencies:
+ '@lit-labs/ssr-dom-shim': 1.5.1
+
+ '@mdx-js/mdx@3.1.1':
+ dependencies:
+ '@types/estree': 1.0.8
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.4
+ '@types/mdx': 2.0.13
+ acorn: 8.16.0
+ collapse-white-space: 2.1.0
+ devlop: 1.1.0
+ estree-util-is-identifier-name: 3.0.0
+ estree-util-scope: 1.0.0
+ estree-walker: 3.0.3
+ hast-util-to-jsx-runtime: 2.3.6
+ markdown-extensions: 2.0.0
+ recma-build-jsx: 1.0.0
+ recma-jsx: 1.0.1(acorn@8.16.0)
+ recma-stringify: 1.0.0
+ rehype-recma: 1.0.0
+ remark-mdx: 3.1.1
+ remark-parse: 11.0.0
+ remark-rehype: 11.1.2
+ source-map: 0.7.6
+ unified: 11.0.5
+ unist-util-position-from-estree: 2.0.0
+ unist-util-stringify-position: 4.0.0
+ unist-util-visit: 5.1.0
+ vfile: 6.0.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4)':
+ dependencies:
+ '@types/mdx': 2.0.13
+ '@types/react': 19.2.14
+ react: 19.2.4
+
+ '@mdx-js/rollup@3.1.1(rollup@4.59.0)':
+ dependencies:
+ '@mdx-js/mdx': 3.1.1
+ '@rollup/pluginutils': 5.3.0(rollup@4.59.0)
+ rollup: 4.59.0
+ source-map: 0.7.6
+ vfile: 6.0.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@mediapipe/tasks-vision@0.10.17': {}
+
+ '@mermaid-js/parser@1.0.0':
+ dependencies:
+ langium: 4.2.1
+
+ '@mobily/ts-belt@3.13.1': {}
+
+ '@monogrid/gainmap-js@3.4.0(three@0.183.2)':
+ dependencies:
+ promise-worker-transferable: 1.0.4
+ three: 0.183.2
+
+ '@ngraveio/bc-ur@1.1.13':
+ dependencies:
+ '@keystonehq/alias-sampling': 0.1.2
+ assert: 2.1.0
+ bignumber.js: 9.3.1
+ cbor-sync: 1.0.4
+ crc: 3.8.0
+ jsbi: 3.2.5
+ sha.js: 2.4.12
+
+ '@noble/ciphers@1.2.1': {}
+
+ '@noble/ciphers@1.3.0': {}
+
+ '@noble/curves@1.2.0':
+ dependencies:
+ '@noble/hashes': 1.3.2
+
+ '@noble/curves@1.4.2':
+ dependencies:
+ '@noble/hashes': 1.4.0
+
+ '@noble/curves@1.8.0':
+ dependencies:
+ '@noble/hashes': 1.7.0
+
+ '@noble/curves@1.8.1':
+ dependencies:
+ '@noble/hashes': 1.7.1
+
+ '@noble/curves@1.9.1':
+ dependencies:
+ '@noble/hashes': 1.8.0
+
+ '@noble/curves@1.9.7':
+ dependencies:
+ '@noble/hashes': 1.8.0
+
+ '@noble/curves@2.0.1':
+ dependencies:
+ '@noble/hashes': 2.0.1
+
+ '@noble/hashes@1.3.2': {}
+
+ '@noble/hashes@1.4.0': {}
+
+ '@noble/hashes@1.7.0': {}
+
+ '@noble/hashes@1.7.1': {}
+
+ '@noble/hashes@1.8.0': {}
+
+ '@noble/hashes@2.0.1': {}
+
+ '@particle-network/analytics@1.0.2':
+ dependencies:
+ hash.js: 1.1.7
+ uuidv4: 6.2.13
+
+ '@particle-network/auth@1.3.1':
+ dependencies:
+ '@particle-network/analytics': 1.0.2
+ '@particle-network/chains': 1.8.3
+ '@particle-network/crypto': 1.0.1
+ buffer: 6.0.3
+ draggabilly: 3.0.0
+
+ '@particle-network/chains@1.8.3': {}
+
+ '@particle-network/crypto@1.0.1':
+ dependencies:
+ crypto-js: 4.2.0
+ uuidv4: 6.2.13
+
+ '@particle-network/solana-wallet@1.3.2(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))':
+ dependencies:
+ '@particle-network/auth': 1.3.1
+ '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+
+ '@project-serum/sol-wallet-adapter@0.2.6(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))':
+ dependencies:
+ '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+ bs58: 4.0.1
+ eventemitter3: 4.0.7
+
+ '@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/primitive@1.1.3': {}
+
+ '@radix-ui/react-accordion@1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-collection': 1.1.7(@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)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-primitive': 2.1.3(@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)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-arrow@1.1.7(@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:
+ '@radix-ui/react-primitive': 2.1.3(@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: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-presence': 1.1.5(@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)
+ '@radix-ui/react-primitive': 2.1.3(@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)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-collection@1.1.7(@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:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-primitive': 2.1.3(@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)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.14)(react@19.2.4)':
+ dependencies:
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-context@1.1.2(@types/react@19.2.14)(react@19.2.4)':
+ dependencies:
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-dialog@1.1.15(@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:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@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)
+ '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-focus-scope': 1.1.7(@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)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-portal': 1.1.9(@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)
+ '@radix-ui/react-presence': 1.1.5(@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)
+ '@radix-ui/react-primitive': 2.1.3(@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)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4)
+ aria-hidden: 1.2.6
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-direction@1.1.1(@types/react@19.2.14)(react@19.2.4)':
+ dependencies:
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-dismissable-layer@1.1.11(@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:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-primitive': 2.1.3(@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)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-dropdown-menu@2.1.16(@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:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-menu': 2.1.16(@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)
+ '@radix-ui/react-primitive': 2.1.3(@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)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.14)(react@19.2.4)':
+ dependencies:
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-focus-scope@1.1.7(@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:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-primitive': 2.1.3(@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)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-id@1.1.1(@types/react@19.2.14)(react@19.2.4)':
+ dependencies:
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-menu@2.1.16(@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:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-collection': 1.1.7(@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)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@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)
+ '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-focus-scope': 1.1.7(@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)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-popper': 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)
+ '@radix-ui/react-portal': 1.1.9(@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)
+ '@radix-ui/react-presence': 1.1.5(@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)
+ '@radix-ui/react-primitive': 2.1.3(@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)
+ '@radix-ui/react-roving-focus': 1.1.11(@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)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ aria-hidden: 1.2.6
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-navigation-menu@1.2.14(@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:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-collection': 1.1.7(@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)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@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)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-presence': 1.1.5(@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)
+ '@radix-ui/react-primitive': 2.1.3(@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)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-visually-hidden': 1.2.3(@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: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-popper@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)':
+ dependencies:
+ '@floating-ui/react-dom': 2.1.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-arrow': 1.1.7(@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)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-primitive': 2.1.3(@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)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/rect': 1.1.1
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-portal@1.1.9(@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:
+ '@radix-ui/react-primitive': 2.1.3(@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)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-presence@1.1.5(@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:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-primitive@2.1.3(@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:
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-roving-focus@1.1.11(@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:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-collection': 1.1.7(@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)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-primitive': 2.1.3(@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)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-slot@1.2.3(@types/react@19.2.14)(react@19.2.4)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-slot@1.2.4(@types/react@19.2.14)(react@19.2.4)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-presence': 1.1.5(@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)
+ '@radix-ui/react-primitive': 2.1.3(@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)
+ '@radix-ui/react-roving-focus': 1.1.11(@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)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-tooltip@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)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@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)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-popper': 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)
+ '@radix-ui/react-portal': 1.1.9(@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)
+ '@radix-ui/react-presence': 1.1.5(@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)
+ '@radix-ui/react-primitive': 2.1.3(@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)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-visually-hidden': 1.2.3(@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: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.14)(react@19.2.4)':
+ dependencies:
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.14)(react@19.2.4)':
+ dependencies:
+ '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.14)(react@19.2.4)':
+ dependencies:
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.14)(react@19.2.4)':
+ dependencies:
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.14)(react@19.2.4)':
+ dependencies:
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.14)(react@19.2.4)':
+ dependencies:
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.14)(react@19.2.4)':
+ dependencies:
+ '@radix-ui/rect': 1.1.1
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-use-size@1.1.1(@types/react@19.2.14)(react@19.2.4)':
+ dependencies:
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@radix-ui/react-visually-hidden@1.2.3(@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:
+ '@radix-ui/react-primitive': 2.1.3(@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: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ '@types/react-dom': 19.2.3(@types/react@19.2.14)
+
+ '@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))':
+ dependencies:
+ merge-options: 3.0.4
+ react-native: 0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6)
+ optional: true
+
+ '@react-native/assets-registry@0.84.1': {}
+
+ '@react-native/codegen@0.84.1(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/parser': 7.29.0
+ hermes-parser: 0.32.0
+ invariant: 2.2.4
+ nullthrows: 1.1.1
+ tinyglobby: 0.2.15
+ yargs: 17.7.2
+
+ '@react-native/community-cli-plugin@0.84.1(bufferutil@4.1.0)(utf-8-validate@6.0.6)':
+ dependencies:
+ '@react-native/dev-middleware': 0.84.1(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ debug: 4.4.3
+ invariant: 2.2.4
+ metro: 0.83.5(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ metro-config: 0.83.5(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ metro-core: 0.83.5
+ semver: 7.7.4
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ '@react-native/debugger-frontend@0.84.1': {}
+
+ '@react-native/debugger-shell@0.84.1':
+ dependencies:
+ cross-spawn: 7.0.6
+ debug: 4.4.3
+ fb-dotslash: 0.5.8
+ transitivePeerDependencies:
+ - supports-color
+
+ '@react-native/dev-middleware@0.84.1(bufferutil@4.1.0)(utf-8-validate@6.0.6)':
+ dependencies:
+ '@isaacs/ttlcache': 1.4.1
+ '@react-native/debugger-frontend': 0.84.1
+ '@react-native/debugger-shell': 0.84.1
+ chrome-launcher: 0.15.2
+ chromium-edge-launcher: 0.2.0
+ connect: 3.7.0
+ debug: 4.4.3
+ invariant: 2.2.4
+ nullthrows: 1.1.1
+ open: 7.4.2
+ serve-static: 1.16.3
+ ws: 7.5.10(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ '@react-native/gradle-plugin@0.84.1': {}
+
+ '@react-native/js-polyfills@0.84.1': {}
+
+ '@react-native/normalize-colors@0.84.1': {}
+
+ '@react-native/virtualized-lists@0.84.1(@types/react@19.2.14)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(react@19.2.4)':
+ dependencies:
+ invariant: 2.2.4
+ nullthrows: 1.1.1
+ react: 19.2.4
+ react-native: 0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6)
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ '@react-three/drei@10.7.7(@react-three/fiber@9.5.0(@types/react@19.2.14)(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)(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)(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)
+ '@use-gesture/react': 10.3.1(react@19.2.4)
+ camera-controls: 3.1.2(three@0.183.2)
+ cross-env: 7.0.3
+ detect-gpu: 5.0.70
+ glsl-noise: 0.0.0
+ hls.js: 1.6.15
+ maath: 0.10.8(@types/three@0.183.1)(three@0.183.2)
+ meshline: 3.3.1(three@0.183.2)
+ react: 19.2.4
+ stats-gl: 2.4.2(@types/three@0.183.1)(three@0.183.2)
+ stats.js: 0.17.0
+ suspend-react: 0.1.3(react@19.2.4)
+ three: 0.183.2
+ three-mesh-bvh: 0.8.3(three@0.183.2)
+ three-stdlib: 2.36.1(three@0.183.2)
+ troika-three-text: 0.52.4(three@0.183.2)
+ tunnel-rat: 0.1.2(@types/react@19.2.14)(react@19.2.4)
+ use-sync-external-store: 1.6.0(react@19.2.4)
+ utility-types: 3.11.0
+ zustand: 5.0.12(@types/react@19.2.14)(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)
+ transitivePeerDependencies:
+ - '@types/react'
+ - '@types/three'
+ - immer
+
+ '@react-three/fiber@9.5.0(@types/react@19.2.14)(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)':
+ dependencies:
+ '@babel/runtime': 7.29.2
+ '@types/webxr': 0.5.24
+ base64-js: 1.5.1
+ buffer: 6.0.3
+ its-fine: 2.0.0(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.4
+ react-use-measure: 2.1.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ scheduler: 0.27.0
+ suspend-react: 0.1.3(react@19.2.4)
+ three: 0.183.2
+ use-sync-external-store: 1.6.0(react@19.2.4)
+ zustand: 5.0.12(@types/react@19.2.14)(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)
+ transitivePeerDependencies:
+ - '@types/react'
+ - immer
+
+ '@reown/appkit-common@1.7.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)':
+ dependencies:
+ big.js: 6.2.2
+ dayjs: 1.11.13
+ viem: 2.47.5(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)
+ transitivePeerDependencies:
+ - bufferutil
+ - typescript
+ - utf-8-validate
+ - zod
+
+ '@reown/appkit-controllers@1.7.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)(utf-8-validate@6.0.6)))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)':
+ dependencies:
+ '@reown/appkit-common': 1.7.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)
+ '@reown/appkit-wallet': 1.7.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+ '@walletconnect/universal-provider': 2.19.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)))(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)
+ valtio: 1.13.2(@types/react@19.2.14)(react@19.2.4)
+ viem: 2.47.5(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@netlify/blobs'
+ - '@planetscale/database'
+ - '@react-native-async-storage/async-storage'
+ - '@types/react'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - aws4fetch
+ - bufferutil
+ - db0
+ - encoding
+ - ioredis
+ - react
+ - typescript
+ - uploadthing
+ - utf-8-validate
+ - zod
+
+ '@reown/appkit-polyfills@1.7.2':
+ dependencies:
+ buffer: 6.0.3
+
+ '@reown/appkit-scaffold-ui@1.7.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)(utf-8-validate@6.0.6)))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@5.9.3)(utf-8-validate@6.0.6)(valtio@1.13.2(@types/react@19.2.14)(react@19.2.4))(zod@3.22.4)':
+ dependencies:
+ '@reown/appkit-common': 1.7.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)
+ '@reown/appkit-controllers': 1.7.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)(utf-8-validate@6.0.6)))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)
+ '@reown/appkit-ui': 1.7.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)(utf-8-validate@6.0.6)))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)
+ '@reown/appkit-utils': 1.7.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)(utf-8-validate@6.0.6)))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@5.9.3)(utf-8-validate@6.0.6)(valtio@1.13.2(@types/react@19.2.14)(react@19.2.4))(zod@3.22.4)
+ '@reown/appkit-wallet': 1.7.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+ lit: 3.1.0
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@netlify/blobs'
+ - '@planetscale/database'
+ - '@react-native-async-storage/async-storage'
+ - '@types/react'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - aws4fetch
+ - bufferutil
+ - db0
+ - encoding
+ - ioredis
+ - react
+ - typescript
+ - uploadthing
+ - utf-8-validate
+ - valtio
+ - zod
+
+ '@reown/appkit-ui@1.7.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)(utf-8-validate@6.0.6)))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)':
+ dependencies:
+ '@reown/appkit-common': 1.7.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)
+ '@reown/appkit-controllers': 1.7.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)(utf-8-validate@6.0.6)))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)
+ '@reown/appkit-wallet': 1.7.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+ lit: 3.1.0
+ qrcode: 1.5.3
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@netlify/blobs'
+ - '@planetscale/database'
+ - '@react-native-async-storage/async-storage'
+ - '@types/react'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - aws4fetch
+ - bufferutil
+ - db0
+ - encoding
+ - ioredis
+ - react
+ - typescript
+ - uploadthing
+ - utf-8-validate
+ - zod
+
+ '@reown/appkit-utils@1.7.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)(utf-8-validate@6.0.6)))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@5.9.3)(utf-8-validate@6.0.6)(valtio@1.13.2(@types/react@19.2.14)(react@19.2.4))(zod@3.22.4)':
+ dependencies:
+ '@reown/appkit-common': 1.7.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)
+ '@reown/appkit-controllers': 1.7.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)(utf-8-validate@6.0.6)))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)
+ '@reown/appkit-polyfills': 1.7.2
+ '@reown/appkit-wallet': 1.7.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+ '@walletconnect/logger': 2.1.2
+ '@walletconnect/universal-provider': 2.19.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)))(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)
+ valtio: 1.13.2(@types/react@19.2.14)(react@19.2.4)
+ viem: 2.47.5(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@netlify/blobs'
+ - '@planetscale/database'
+ - '@react-native-async-storage/async-storage'
+ - '@types/react'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - aws4fetch
+ - bufferutil
+ - db0
+ - encoding
+ - ioredis
+ - react
+ - typescript
+ - uploadthing
+ - utf-8-validate
+ - zod
+
+ '@reown/appkit-wallet@1.7.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)':
+ dependencies:
+ '@reown/appkit-common': 1.7.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)
+ '@reown/appkit-polyfills': 1.7.2
+ '@walletconnect/logger': 2.1.2
+ zod: 3.22.4
+ transitivePeerDependencies:
+ - bufferutil
+ - typescript
+ - utf-8-validate
+
+ '@reown/appkit@1.7.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)(utf-8-validate@6.0.6)))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)':
+ dependencies:
+ '@reown/appkit-common': 1.7.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)
+ '@reown/appkit-controllers': 1.7.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)(utf-8-validate@6.0.6)))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)
+ '@reown/appkit-polyfills': 1.7.2
+ '@reown/appkit-scaffold-ui': 1.7.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)(utf-8-validate@6.0.6)))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@5.9.3)(utf-8-validate@6.0.6)(valtio@1.13.2(@types/react@19.2.14)(react@19.2.4))(zod@3.22.4)
+ '@reown/appkit-ui': 1.7.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)(utf-8-validate@6.0.6)))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)
+ '@reown/appkit-utils': 1.7.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)(utf-8-validate@6.0.6)))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@5.9.3)(utf-8-validate@6.0.6)(valtio@1.13.2(@types/react@19.2.14)(react@19.2.4))(zod@3.22.4)
+ '@reown/appkit-wallet': 1.7.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+ '@walletconnect/types': 2.19.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)))
+ '@walletconnect/universal-provider': 2.19.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)))(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)
+ bs58: 6.0.0
+ valtio: 1.13.2(@types/react@19.2.14)(react@19.2.4)
+ viem: 2.47.5(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@netlify/blobs'
+ - '@planetscale/database'
+ - '@react-native-async-storage/async-storage'
+ - '@types/react'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - aws4fetch
+ - bufferutil
+ - db0
+ - encoding
+ - ioredis
+ - react
+ - typescript
+ - uploadthing
+ - utf-8-validate
+ - zod
+
+ '@rolldown/pluginutils@1.0.0-beta.27': {}
+
+ '@rollup/pluginutils@5.3.0(rollup@4.59.0)':
+ dependencies:
+ '@types/estree': 1.0.8
+ estree-walker: 2.0.2
+ picomatch: 4.0.3
+ optionalDependencies:
+ rollup: 4.59.0
+
+ '@rollup/rollup-android-arm-eabi@4.59.0':
+ optional: true
+
+ '@rollup/rollup-android-arm64@4.59.0':
+ optional: true
+
+ '@rollup/rollup-darwin-arm64@4.59.0':
+ optional: true
+
+ '@rollup/rollup-darwin-x64@4.59.0':
+ optional: true
+
+ '@rollup/rollup-freebsd-arm64@4.59.0':
+ optional: true
+
+ '@rollup/rollup-freebsd-x64@4.59.0':
+ optional: true
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.59.0':
+ optional: true
+
+ '@rollup/rollup-linux-arm-musleabihf@4.59.0':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-gnu@4.59.0':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-musl@4.59.0':
+ optional: true
+
+ '@rollup/rollup-linux-loong64-gnu@4.59.0':
+ optional: true
+
+ '@rollup/rollup-linux-loong64-musl@4.59.0':
+ optional: true
+
+ '@rollup/rollup-linux-ppc64-gnu@4.59.0':
+ optional: true
+
+ '@rollup/rollup-linux-ppc64-musl@4.59.0':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-gnu@4.59.0':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-musl@4.59.0':
+ optional: true
+
+ '@rollup/rollup-linux-s390x-gnu@4.59.0':
+ optional: true
+
+ '@rollup/rollup-linux-x64-gnu@4.59.0':
+ optional: true
+
+ '@rollup/rollup-linux-x64-musl@4.59.0':
+ optional: true
+
+ '@rollup/rollup-openbsd-x64@4.59.0':
+ optional: true
+
+ '@rollup/rollup-openharmony-arm64@4.59.0':
+ optional: true
+
+ '@rollup/rollup-win32-arm64-msvc@4.59.0':
+ optional: true
+
+ '@rollup/rollup-win32-ia32-msvc@4.59.0':
+ optional: true
+
+ '@rollup/rollup-win32-x64-gnu@4.59.0':
+ optional: true
+
+ '@rollup/rollup-win32-x64-msvc@4.59.0':
+ optional: true
+
+ '@scure/base@1.1.9': {}
+
+ '@scure/base@1.2.6': {}
+
+ '@scure/bip32@1.4.0':
+ dependencies:
+ '@noble/curves': 1.4.2
+ '@noble/hashes': 1.4.0
+ '@scure/base': 1.1.9
+
+ '@scure/bip32@1.6.2':
+ dependencies:
+ '@noble/curves': 1.8.1
+ '@noble/hashes': 1.7.1
+ '@scure/base': 1.2.6
+
+ '@scure/bip32@1.7.0':
+ dependencies:
+ '@noble/curves': 1.9.1
+ '@noble/hashes': 1.8.0
+ '@scure/base': 1.2.6
+
+ '@scure/bip39@1.3.0':
+ dependencies:
+ '@noble/hashes': 1.4.0
+ '@scure/base': 1.1.9
+
+ '@scure/bip39@1.5.4':
+ dependencies:
+ '@noble/hashes': 1.7.1
+ '@scure/base': 1.2.6
+
+ '@scure/bip39@1.6.0':
+ dependencies:
+ '@noble/hashes': 1.8.0
+ '@scure/base': 1.2.6
+
+ '@shikijs/core@4.0.0':
+ dependencies:
+ '@shikijs/primitive': 4.0.0
+ '@shikijs/types': 4.0.0
+ '@shikijs/vscode-textmate': 10.0.2
+ '@types/hast': 3.0.4
+ hast-util-to-html: 9.0.5
+
+ '@shikijs/engine-javascript@4.0.0':
+ dependencies:
+ '@shikijs/types': 4.0.0
+ '@shikijs/vscode-textmate': 10.0.2
+ oniguruma-to-es: 4.3.4
+
+ '@shikijs/engine-oniguruma@4.0.0':
+ dependencies:
+ '@shikijs/types': 4.0.0
+ '@shikijs/vscode-textmate': 10.0.2
+
+ '@shikijs/langs@4.0.0':
+ dependencies:
+ '@shikijs/types': 4.0.0
+
+ '@shikijs/primitive@4.0.0':
+ dependencies:
+ '@shikijs/types': 4.0.0
+ '@shikijs/vscode-textmate': 10.0.2
+ '@types/hast': 3.0.4
+
+ '@shikijs/themes@4.0.0':
+ dependencies:
+ '@shikijs/types': 4.0.0
+
+ '@shikijs/types@4.0.0':
+ dependencies:
+ '@shikijs/vscode-textmate': 10.0.2
+ '@types/hast': 3.0.4
+
+ '@shikijs/vscode-textmate@10.0.2': {}
+
+ '@sinclair/typebox@0.27.10': {}
+
+ '@sinclair/typebox@0.33.22': {}
+
+ '@sinonjs/commons@3.0.1':
+ dependencies:
+ type-detect: 4.0.8
+
+ '@sinonjs/fake-timers@10.3.0':
+ dependencies:
+ '@sinonjs/commons': 3.0.1
+
+ '@socket.io/component-emitter@3.1.2': {}
+
+ '@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-program/compute-budget@0.8.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)))':
+ dependencies:
+ '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))
+
+ '@solana-program/stake@0.2.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)))':
+ dependencies:
+ '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))
+
+ '@solana-program/system@0.7.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)))':
+ dependencies:
+ '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))
+
+ '@solana-program/token-2022@0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)))(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3))':
+ dependencies:
+ '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))
+ '@solana/sysvars': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+
+ '@solana-program/token@0.5.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)))':
+ dependencies:
+ '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))
+
+ '@solana/accounts@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)':
+ dependencies:
+ '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/codecs-core': 2.3.0(typescript@5.9.3)
+ '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/errors': 2.3.0(typescript@5.9.3)
+ '@solana/rpc-spec': 2.3.0(typescript@5.9.3)
+ '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/addresses@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)':
+ dependencies:
+ '@solana/assertions': 2.3.0(typescript@5.9.3)
+ '@solana/codecs-core': 2.3.0(typescript@5.9.3)
+ '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/errors': 2.3.0(typescript@5.9.3)
+ '@solana/nominal-types': 2.3.0(typescript@5.9.3)
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/assertions@2.3.0(typescript@5.9.3)':
+ dependencies:
+ '@solana/errors': 2.3.0(typescript@5.9.3)
+ typescript: 5.9.3
+
+ '@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-data-structures@2.3.0(typescript@5.9.3)':
+ dependencies:
+ '@solana/codecs-core': 2.3.0(typescript@5.9.3)
+ '@solana/codecs-numbers': 2.3.0(typescript@5.9.3)
+ '@solana/errors': 2.3.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@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)':
+ dependencies:
+ '@solana/codecs-core': 2.3.0(typescript@5.9.3)
+ '@solana/codecs-numbers': 2.3.0(typescript@5.9.3)
+ '@solana/errors': 2.3.0(typescript@5.9.3)
+ fastestsmallesttextencoderdecoder: 1.0.22
+ 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/codecs@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)':
+ dependencies:
+ '@solana/codecs-core': 2.3.0(typescript@5.9.3)
+ '@solana/codecs-data-structures': 2.3.0(typescript@5.9.3)
+ '@solana/codecs-numbers': 2.3.0(typescript@5.9.3)
+ '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/options': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@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/fast-stable-stringify@2.3.0(typescript@5.9.3)':
+ dependencies:
+ typescript: 5.9.3
+
+ '@solana/functional@2.3.0(typescript@5.9.3)':
+ dependencies:
+ typescript: 5.9.3
+
+ '@solana/instructions@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/keys@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)':
+ dependencies:
+ '@solana/assertions': 2.3.0(typescript@5.9.3)
+ '@solana/codecs-core': 2.3.0(typescript@5.9.3)
+ '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/errors': 2.3.0(typescript@5.9.3)
+ '@solana/nominal-types': 2.3.0(typescript@5.9.3)
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))':
+ dependencies:
+ '@solana/accounts': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/codecs': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/errors': 2.3.0(typescript@5.9.3)
+ '@solana/functional': 2.3.0(typescript@5.9.3)
+ '@solana/instructions': 2.3.0(typescript@5.9.3)
+ '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/programs': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/rpc': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/rpc-parsed-types': 2.3.0(typescript@5.9.3)
+ '@solana/rpc-spec-types': 2.3.0(typescript@5.9.3)
+ '@solana/rpc-subscriptions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))
+ '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/signers': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/sysvars': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/transaction-confirmation': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))
+ '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+ - ws
+
+ '@solana/nominal-types@2.3.0(typescript@5.9.3)':
+ dependencies:
+ typescript: 5.9.3
+
+ '@solana/options@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)':
+ dependencies:
+ '@solana/codecs-core': 2.3.0(typescript@5.9.3)
+ '@solana/codecs-data-structures': 2.3.0(typescript@5.9.3)
+ '@solana/codecs-numbers': 2.3.0(typescript@5.9.3)
+ '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/errors': 2.3.0(typescript@5.9.3)
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/programs@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)':
+ dependencies:
+ '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/errors': 2.3.0(typescript@5.9.3)
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/promises@2.3.0(typescript@5.9.3)':
+ dependencies:
+ typescript: 5.9.3
+
+ '@solana/rpc-api@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)':
+ dependencies:
+ '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/codecs-core': 2.3.0(typescript@5.9.3)
+ '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/errors': 2.3.0(typescript@5.9.3)
+ '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/rpc-parsed-types': 2.3.0(typescript@5.9.3)
+ '@solana/rpc-spec': 2.3.0(typescript@5.9.3)
+ '@solana/rpc-transformers': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/rpc-parsed-types@2.3.0(typescript@5.9.3)':
+ dependencies:
+ typescript: 5.9.3
+
+ '@solana/rpc-spec-types@2.3.0(typescript@5.9.3)':
+ dependencies:
+ typescript: 5.9.3
+
+ '@solana/rpc-spec@2.3.0(typescript@5.9.3)':
+ dependencies:
+ '@solana/errors': 2.3.0(typescript@5.9.3)
+ '@solana/rpc-spec-types': 2.3.0(typescript@5.9.3)
+ typescript: 5.9.3
+
+ '@solana/rpc-subscriptions-api@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)':
+ dependencies:
+ '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/rpc-subscriptions-spec': 2.3.0(typescript@5.9.3)
+ '@solana/rpc-transformers': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/rpc-subscriptions-channel-websocket@2.3.0(typescript@5.9.3)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))':
+ dependencies:
+ '@solana/errors': 2.3.0(typescript@5.9.3)
+ '@solana/functional': 2.3.0(typescript@5.9.3)
+ '@solana/rpc-subscriptions-spec': 2.3.0(typescript@5.9.3)
+ '@solana/subscribable': 2.3.0(typescript@5.9.3)
+ typescript: 5.9.3
+ ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+
+ '@solana/rpc-subscriptions-spec@2.3.0(typescript@5.9.3)':
+ dependencies:
+ '@solana/errors': 2.3.0(typescript@5.9.3)
+ '@solana/promises': 2.3.0(typescript@5.9.3)
+ '@solana/rpc-spec-types': 2.3.0(typescript@5.9.3)
+ '@solana/subscribable': 2.3.0(typescript@5.9.3)
+ typescript: 5.9.3
+
+ '@solana/rpc-subscriptions@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))':
+ dependencies:
+ '@solana/errors': 2.3.0(typescript@5.9.3)
+ '@solana/fast-stable-stringify': 2.3.0(typescript@5.9.3)
+ '@solana/functional': 2.3.0(typescript@5.9.3)
+ '@solana/promises': 2.3.0(typescript@5.9.3)
+ '@solana/rpc-spec-types': 2.3.0(typescript@5.9.3)
+ '@solana/rpc-subscriptions-api': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/rpc-subscriptions-channel-websocket': 2.3.0(typescript@5.9.3)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))
+ '@solana/rpc-subscriptions-spec': 2.3.0(typescript@5.9.3)
+ '@solana/rpc-transformers': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/subscribable': 2.3.0(typescript@5.9.3)
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+ - ws
+
+ '@solana/rpc-transformers@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)':
+ dependencies:
+ '@solana/errors': 2.3.0(typescript@5.9.3)
+ '@solana/functional': 2.3.0(typescript@5.9.3)
+ '@solana/nominal-types': 2.3.0(typescript@5.9.3)
+ '@solana/rpc-spec-types': 2.3.0(typescript@5.9.3)
+ '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/rpc-transport-http@2.3.0(typescript@5.9.3)':
+ dependencies:
+ '@solana/errors': 2.3.0(typescript@5.9.3)
+ '@solana/rpc-spec': 2.3.0(typescript@5.9.3)
+ '@solana/rpc-spec-types': 2.3.0(typescript@5.9.3)
+ typescript: 5.9.3
+ undici-types: 7.24.5
+
+ '@solana/rpc-types@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)':
+ dependencies:
+ '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/codecs-core': 2.3.0(typescript@5.9.3)
+ '@solana/codecs-numbers': 2.3.0(typescript@5.9.3)
+ '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/errors': 2.3.0(typescript@5.9.3)
+ '@solana/nominal-types': 2.3.0(typescript@5.9.3)
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/rpc@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)':
+ dependencies:
+ '@solana/errors': 2.3.0(typescript@5.9.3)
+ '@solana/fast-stable-stringify': 2.3.0(typescript@5.9.3)
+ '@solana/functional': 2.3.0(typescript@5.9.3)
+ '@solana/rpc-api': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/rpc-spec': 2.3.0(typescript@5.9.3)
+ '@solana/rpc-spec-types': 2.3.0(typescript@5.9.3)
+ '@solana/rpc-transformers': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/rpc-transport-http': 2.3.0(typescript@5.9.3)
+ '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/signers@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)':
+ dependencies:
+ '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/codecs-core': 2.3.0(typescript@5.9.3)
+ '@solana/errors': 2.3.0(typescript@5.9.3)
+ '@solana/instructions': 2.3.0(typescript@5.9.3)
+ '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/nominal-types': 2.3.0(typescript@5.9.3)
+ '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/subscribable@2.3.0(typescript@5.9.3)':
+ dependencies:
+ '@solana/errors': 2.3.0(typescript@5.9.3)
+ typescript: 5.9.3
+
+ '@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)':
+ dependencies:
+ '@solana/accounts': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/codecs': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/errors': 2.3.0(typescript@5.9.3)
+ '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/transaction-confirmation@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))':
+ dependencies:
+ '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/errors': 2.3.0(typescript@5.9.3)
+ '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/promises': 2.3.0(typescript@5.9.3)
+ '@solana/rpc': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/rpc-subscriptions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))
+ '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+ - ws
+
+ '@solana/transaction-messages@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)':
+ dependencies:
+ '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/codecs-core': 2.3.0(typescript@5.9.3)
+ '@solana/codecs-data-structures': 2.3.0(typescript@5.9.3)
+ '@solana/codecs-numbers': 2.3.0(typescript@5.9.3)
+ '@solana/errors': 2.3.0(typescript@5.9.3)
+ '@solana/functional': 2.3.0(typescript@5.9.3)
+ '@solana/instructions': 2.3.0(typescript@5.9.3)
+ '@solana/nominal-types': 2.3.0(typescript@5.9.3)
+ '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/transactions@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)':
+ dependencies:
+ '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/codecs-core': 2.3.0(typescript@5.9.3)
+ '@solana/codecs-data-structures': 2.3.0(typescript@5.9.3)
+ '@solana/codecs-numbers': 2.3.0(typescript@5.9.3)
+ '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/errors': 2.3.0(typescript@5.9.3)
+ '@solana/functional': 2.3.0(typescript@5.9.3)
+ '@solana/instructions': 2.3.0(typescript@5.9.3)
+ '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/nominal-types': 2.3.0(typescript@5.9.3)
+ '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - fastestsmallesttextencoderdecoder
+
+ '@solana/wallet-adapter-alpha@0.1.14(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))':
+ 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/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+
+ '@solana/wallet-adapter-avana@0.1.17(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))':
+ 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/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+
+ '@solana/wallet-adapter-base-ui@0.1.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))(react@19.2.4)(typescript@5.9.3)':
+ dependencies:
+ '@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))(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/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-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-bitkeep@0.3.24(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))':
+ 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/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+
+ '@solana/wallet-adapter-bitpie@0.5.22(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))':
+ 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/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+
+ '@solana/wallet-adapter-clover@0.4.23(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))':
+ 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/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+
+ '@solana/wallet-adapter-coin98@0.5.24(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))':
+ 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/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+ bs58: 6.0.0
+ buffer: 6.0.3
+
+ '@solana/wallet-adapter-coinbase@0.1.23(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))':
+ 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/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+
+ '@solana/wallet-adapter-coinhub@0.3.22(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))':
+ 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/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+
+ '@solana/wallet-adapter-fractal@0.1.12(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@fractalwagmi/solana-wallet-adapter': 0.1.1(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))(react-dom@19.2.4(react@19.2.4))(react@19.2.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)
+ transitivePeerDependencies:
+ - react
+ - react-dom
+
+ '@solana/wallet-adapter-huobi@0.1.19(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))':
+ 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/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+
+ '@solana/wallet-adapter-hyperpay@0.1.18(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))':
+ 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/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+
+ '@solana/wallet-adapter-keystone@0.1.19(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))(bufferutil@4.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)(utf-8-validate@6.0.6)':
+ dependencies:
+ '@keystonehq/sol-keyring': 0.20.0(bufferutil@4.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)(utf-8-validate@6.0.6)
+ '@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)
+ buffer: 6.0.3
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - react
+ - react-dom
+ - typescript
+ - utf-8-validate
+
+ '@solana/wallet-adapter-krystal@0.1.16(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))':
+ 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/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+
+ '@solana/wallet-adapter-ledger@0.9.29(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))':
+ dependencies:
+ '@ledgerhq/devices': 8.12.0
+ '@ledgerhq/hw-transport': 6.34.0
+ '@ledgerhq/hw-transport-webhid': 6.33.0
+ '@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)
+ buffer: 6.0.3
+
+ '@solana/wallet-adapter-mathwallet@0.9.22(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))':
+ 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/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+
+ '@solana/wallet-adapter-neko@0.2.16(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))':
+ 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/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+
+ '@solana/wallet-adapter-nightly@0.1.20(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))':
+ 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/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+
+ '@solana/wallet-adapter-nufi@0.1.21(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))':
+ 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/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+
+ '@solana/wallet-adapter-onto@0.1.11(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))':
+ 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/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+
+ '@solana/wallet-adapter-particle@0.1.16(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))':
+ dependencies:
+ '@particle-network/solana-wallet': 1.3.2(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))
+ '@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)
+ transitivePeerDependencies:
+ - bs58
+
+ '@solana/wallet-adapter-phantom@0.9.28(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))':
+ 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/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+
+ '@solana/wallet-adapter-react-ui@0.9.39(@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-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:
+ '@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-base-ui': 0.1.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))(react@19.2.4)(typescript@5.9.3)
+ '@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))(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/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ transitivePeerDependencies:
+ - bs58
+ - fastestsmallesttextencoderdecoder
+ - react-native
+ - typescript
+
+ '@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))(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))(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-adapter-safepal@0.5.22(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))':
+ 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/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+
+ '@solana/wallet-adapter-saifu@0.1.19(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))':
+ 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/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+
+ '@solana/wallet-adapter-salmon@0.1.18(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))':
+ 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/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+ salmon-adapter-sdk: 1.1.1(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))
+
+ '@solana/wallet-adapter-sky@0.1.19(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))':
+ 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/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+
+ '@solana/wallet-adapter-solflare@0.6.32(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))':
+ 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/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+ '@solflare-wallet/metamask-sdk': 1.0.3(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))
+ '@solflare-wallet/sdk': 1.4.2(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))
+ '@wallet-standard/wallet': 1.1.0
+
+ '@solana/wallet-adapter-solong@0.9.22(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))':
+ 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/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+
+ '@solana/wallet-adapter-spot@0.1.19(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))':
+ 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/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+
+ '@solana/wallet-adapter-tokenary@0.1.16(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))':
+ 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/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+
+ '@solana/wallet-adapter-tokenpocket@0.4.23(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))':
+ 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/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+
+ '@solana/wallet-adapter-torus@0.11.32(@babel/runtime@7.29.2)(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)':
+ 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/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+ '@toruslabs/solana-embed': 2.1.0(@babel/runtime@7.29.2)(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+ assert: 2.1.0
+ crypto-browserify: 3.12.1
+ process: 0.11.10
+ stream-browserify: 3.0.0
+ transitivePeerDependencies:
+ - '@babel/runtime'
+ - '@sentry/types'
+ - bufferutil
+ - encoding
+ - supports-color
+ - typescript
+ - utf-8-validate
+
+ '@solana/wallet-adapter-trezor@0.1.6(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))(bufferutil@4.1.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))(tslib@2.8.1)(typescript@5.9.3)(utf-8-validate@6.0.6)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))':
+ 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/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+ '@trezor/connect-web': 9.7.2(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3))(bufferutil@4.1.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))(tslib@2.8.1)(typescript@5.9.3)(utf-8-validate@6.0.6)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))
+ buffer: 6.0.3
+ transitivePeerDependencies:
+ - '@solana/sysvars'
+ - bufferutil
+ - debug
+ - encoding
+ - expo-constants
+ - expo-localization
+ - fastestsmallesttextencoderdecoder
+ - react-native
+ - supports-color
+ - tslib
+ - typescript
+ - utf-8-validate
+ - ws
+
+ '@solana/wallet-adapter-trust@0.1.17(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))':
+ 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/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+
+ '@solana/wallet-adapter-unsafe-burner@0.1.11(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))':
+ dependencies:
+ '@noble/curves': 1.9.7
+ '@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/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)
+
+ '@solana/wallet-adapter-walletconnect@0.1.21(@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)))(@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)(bufferutil@4.1.0)(react@19.2.4)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.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/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+ '@walletconnect/solana-adapter': 0.0.8(@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)))(@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))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@netlify/blobs'
+ - '@planetscale/database'
+ - '@react-native-async-storage/async-storage'
+ - '@types/react'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - aws4fetch
+ - bufferutil
+ - db0
+ - encoding
+ - ioredis
+ - react
+ - typescript
+ - uploadthing
+ - utf-8-validate
+ - zod
+
+ '@solana/wallet-adapter-wallets@0.19.37(@babel/runtime@7.29.2)(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.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)))(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))(@types/react@19.2.14)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-dom@19.2.4(react@19.2.4))(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(react@19.2.4)(tslib@2.8.1)(typescript@5.9.3)(utf-8-validate@6.0.6)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))(zod@3.22.4)':
+ dependencies:
+ '@solana/wallet-adapter-alpha': 0.1.14(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))
+ '@solana/wallet-adapter-avana': 0.1.17(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))
+ '@solana/wallet-adapter-bitkeep': 0.3.24(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))
+ '@solana/wallet-adapter-bitpie': 0.5.22(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))
+ '@solana/wallet-adapter-clover': 0.4.23(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))
+ '@solana/wallet-adapter-coin98': 0.5.24(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))
+ '@solana/wallet-adapter-coinbase': 0.1.23(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))
+ '@solana/wallet-adapter-coinhub': 0.3.22(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))
+ '@solana/wallet-adapter-fractal': 0.1.12(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@solana/wallet-adapter-huobi': 0.1.19(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))
+ '@solana/wallet-adapter-hyperpay': 0.1.18(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))
+ '@solana/wallet-adapter-keystone': 0.1.19(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))(bufferutil@4.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)(utf-8-validate@6.0.6)
+ '@solana/wallet-adapter-krystal': 0.1.16(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))
+ '@solana/wallet-adapter-ledger': 0.9.29(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))
+ '@solana/wallet-adapter-mathwallet': 0.9.22(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))
+ '@solana/wallet-adapter-neko': 0.2.16(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))
+ '@solana/wallet-adapter-nightly': 0.1.20(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))
+ '@solana/wallet-adapter-nufi': 0.1.21(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))
+ '@solana/wallet-adapter-onto': 0.1.11(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))
+ '@solana/wallet-adapter-particle': 0.1.16(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))
+ '@solana/wallet-adapter-phantom': 0.9.28(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))
+ '@solana/wallet-adapter-safepal': 0.5.22(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))
+ '@solana/wallet-adapter-saifu': 0.1.19(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))
+ '@solana/wallet-adapter-salmon': 0.1.18(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))
+ '@solana/wallet-adapter-sky': 0.1.19(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))
+ '@solana/wallet-adapter-solflare': 0.6.32(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))
+ '@solana/wallet-adapter-solong': 0.9.22(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))
+ '@solana/wallet-adapter-spot': 0.1.19(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))
+ '@solana/wallet-adapter-tokenary': 0.1.16(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))
+ '@solana/wallet-adapter-tokenpocket': 0.4.23(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))
+ '@solana/wallet-adapter-torus': 0.11.32(@babel/runtime@7.29.2)(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+ '@solana/wallet-adapter-trezor': 0.1.6(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))(bufferutil@4.1.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))(tslib@2.8.1)(typescript@5.9.3)(utf-8-validate@6.0.6)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))
+ '@solana/wallet-adapter-trust': 0.1.17(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))
+ '@solana/wallet-adapter-unsafe-burner': 0.1.11(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))
+ '@solana/wallet-adapter-walletconnect': 0.1.21(@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)))(@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)(bufferutil@4.1.0)(react@19.2.4)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)
+ '@solana/wallet-adapter-xdefi': 0.1.11(@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)
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@babel/runtime'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@netlify/blobs'
+ - '@planetscale/database'
+ - '@react-native-async-storage/async-storage'
+ - '@sentry/types'
+ - '@solana/sysvars'
+ - '@types/react'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - aws4fetch
+ - bs58
+ - bufferutil
+ - db0
+ - debug
+ - encoding
+ - expo-constants
+ - expo-localization
+ - fastestsmallesttextencoderdecoder
+ - ioredis
+ - react
+ - react-dom
+ - react-native
+ - supports-color
+ - tslib
+ - typescript
+ - uploadthing
+ - utf-8-validate
+ - ws
+ - zod
+
+ '@solana/wallet-adapter-xdefi@0.1.11(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))':
+ 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/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':
+ dependencies:
+ '@wallet-standard/base': 1.1.0
+
+ '@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))':
+ 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
+
+ '@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))(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))
+ '@wallet-standard/app': 1.1.0
+ '@wallet-standard/base': 1.1.0
+ react: 19.2.4
+ transitivePeerDependencies:
+ - '@solana/web3.js'
+ - bs58
+
+ '@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.6
+ superstruct: 2.0.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - typescript
+ - utf-8-validate
+
+ '@solflare-wallet/metamask-sdk@1.0.3(@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
+ bs58: 5.0.0
+ eventemitter3: 5.0.4
+ uuid: 9.0.1
+
+ '@solflare-wallet/sdk@1.4.2(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))':
+ dependencies:
+ '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+ bs58: 5.0.0
+ eventemitter3: 5.0.4
+ uuid: 9.0.1
+
+ '@stellar/js-xdr@3.1.2': {}
+
+ '@stellar/stellar-base@14.1.0':
+ dependencies:
+ '@noble/curves': 1.9.7
+ '@stellar/js-xdr': 3.1.2
+ base32.js: 0.1.0
+ bignumber.js: 9.3.1
+ buffer: 6.0.3
+ sha.js: 2.4.12
+
+ '@stellar/stellar-sdk@14.2.0':
+ dependencies:
+ '@stellar/stellar-base': 14.1.0
+ axios: 1.13.6
+ bignumber.js: 9.3.1
+ eventsource: 2.0.2
+ feaxios: 0.0.23
+ randombytes: 2.1.0
+ toml: 3.0.0
+ urijs: 1.19.11
+ transitivePeerDependencies:
+ - debug
+
+ '@swc/helpers@0.5.19':
+ dependencies:
+ tslib: 2.8.1
+
+ '@tailwindcss/node@4.2.1':
+ dependencies:
+ '@jridgewell/remapping': 2.3.5
+ enhanced-resolve: 5.19.0
+ jiti: 2.6.1
+ lightningcss: 1.31.1
+ magic-string: 0.30.21
+ source-map-js: 1.2.1
+ tailwindcss: 4.2.1
+
+ '@tailwindcss/oxide-android-arm64@4.2.1':
+ optional: true
+
+ '@tailwindcss/oxide-darwin-arm64@4.2.1':
+ optional: true
+
+ '@tailwindcss/oxide-darwin-x64@4.2.1':
+ optional: true
+
+ '@tailwindcss/oxide-freebsd-x64@4.2.1':
+ optional: true
+
+ '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.1':
+ optional: true
+
+ '@tailwindcss/oxide-linux-arm64-gnu@4.2.1':
+ optional: true
+
+ '@tailwindcss/oxide-linux-arm64-musl@4.2.1':
+ optional: true
+
+ '@tailwindcss/oxide-linux-x64-gnu@4.2.1':
+ optional: true
+
+ '@tailwindcss/oxide-linux-x64-musl@4.2.1':
+ optional: true
+
+ '@tailwindcss/oxide-wasm32-wasi@4.2.1':
+ optional: true
+
+ '@tailwindcss/oxide-win32-arm64-msvc@4.2.1':
+ optional: true
+
+ '@tailwindcss/oxide-win32-x64-msvc@4.2.1':
+ optional: true
+
+ '@tailwindcss/oxide@4.2.1':
+ optionalDependencies:
+ '@tailwindcss/oxide-android-arm64': 4.2.1
+ '@tailwindcss/oxide-darwin-arm64': 4.2.1
+ '@tailwindcss/oxide-darwin-x64': 4.2.1
+ '@tailwindcss/oxide-freebsd-x64': 4.2.1
+ '@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.1
+ '@tailwindcss/oxide-linux-arm64-gnu': 4.2.1
+ '@tailwindcss/oxide-linux-arm64-musl': 4.2.1
+ '@tailwindcss/oxide-linux-x64-gnu': 4.2.1
+ '@tailwindcss/oxide-linux-x64-musl': 4.2.1
+ '@tailwindcss/oxide-wasm32-wasi': 4.2.1
+ '@tailwindcss/oxide-win32-arm64-msvc': 4.2.1
+ '@tailwindcss/oxide-win32-x64-msvc': 4.2.1
+
+ '@tailwindcss/vite@4.2.1(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.1)(yaml@2.8.2))':
+ dependencies:
+ '@tailwindcss/node': 4.2.1
+ '@tailwindcss/oxide': 4.2.1
+ tailwindcss: 4.2.1
+ vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.1)(yaml@2.8.2)
+
+ '@toruslabs/base-controllers@5.11.0(@babel/runtime@7.29.2)(bufferutil@4.1.0)(utf-8-validate@6.0.6)':
+ dependencies:
+ '@babel/runtime': 7.29.2
+ '@ethereumjs/util': 9.1.0
+ '@toruslabs/broadcast-channel': 10.0.2(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ '@toruslabs/http-helpers': 6.1.1(@babel/runtime@7.29.2)
+ '@toruslabs/openlogin-jrpc': 8.3.0(@babel/runtime@7.29.2)
+ '@toruslabs/openlogin-utils': 8.2.1(@babel/runtime@7.29.2)
+ async-mutex: 0.5.0
+ bignumber.js: 9.3.1
+ bowser: 2.14.1
+ jwt-decode: 4.0.0
+ loglevel: 1.9.2
+ transitivePeerDependencies:
+ - '@sentry/types'
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ '@toruslabs/broadcast-channel@10.0.2(bufferutil@4.1.0)(utf-8-validate@6.0.6)':
+ dependencies:
+ '@babel/runtime': 7.29.2
+ '@toruslabs/eccrypto': 4.0.0
+ '@toruslabs/metadata-helpers': 5.1.0(@babel/runtime@7.29.2)
+ loglevel: 1.9.2
+ oblivious-set: 1.4.0
+ socket.io-client: 4.8.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ unload: 2.4.1
+ transitivePeerDependencies:
+ - '@sentry/types'
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ '@toruslabs/constants@13.4.0(@babel/runtime@7.29.2)':
+ dependencies:
+ '@babel/runtime': 7.29.2
+
+ '@toruslabs/eccrypto@4.0.0':
+ dependencies:
+ elliptic: 6.6.1
+
+ '@toruslabs/http-helpers@6.1.1(@babel/runtime@7.29.2)':
+ dependencies:
+ '@babel/runtime': 7.29.2
+ lodash.merge: 4.6.2
+ loglevel: 1.9.2
+
+ '@toruslabs/metadata-helpers@5.1.0(@babel/runtime@7.29.2)':
+ dependencies:
+ '@babel/runtime': 7.29.2
+ '@toruslabs/eccrypto': 4.0.0
+ '@toruslabs/http-helpers': 6.1.1(@babel/runtime@7.29.2)
+ elliptic: 6.6.1
+ ethereum-cryptography: 2.2.1
+ json-stable-stringify: 1.3.0
+ transitivePeerDependencies:
+ - '@sentry/types'
+
+ '@toruslabs/openlogin-jrpc@8.3.0(@babel/runtime@7.29.2)':
+ dependencies:
+ '@babel/runtime': 7.29.2
+ end-of-stream: 1.4.5
+ events: 3.3.0
+ fast-safe-stringify: 2.1.1
+ once: 1.4.0
+ pump: 3.0.4
+ readable-stream: 4.7.0
+
+ '@toruslabs/openlogin-utils@8.2.1(@babel/runtime@7.29.2)':
+ dependencies:
+ '@babel/runtime': 7.29.2
+ '@toruslabs/constants': 13.4.0(@babel/runtime@7.29.2)
+ base64url: 3.0.1
+ color: 4.2.3
+
+ '@toruslabs/solana-embed@2.1.0(@babel/runtime@7.29.2)(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)':
+ dependencies:
+ '@babel/runtime': 7.29.2
+ '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)
+ '@toruslabs/base-controllers': 5.11.0(@babel/runtime@7.29.2)(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ '@toruslabs/http-helpers': 6.1.1(@babel/runtime@7.29.2)
+ '@toruslabs/openlogin-jrpc': 8.3.0(@babel/runtime@7.29.2)
+ eth-rpc-errors: 4.0.3
+ fast-deep-equal: 3.1.3
+ lodash-es: 4.17.23
+ loglevel: 1.9.2
+ pump: 3.0.4
+ transitivePeerDependencies:
+ - '@sentry/types'
+ - bufferutil
+ - encoding
+ - supports-color
+ - typescript
+ - utf-8-validate
+
+ '@trezor/analytics@1.5.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))(tslib@2.8.1)':
+ dependencies:
+ '@trezor/env-utils': 1.5.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))(tslib@2.8.1)
+ '@trezor/utils': 9.5.0(tslib@2.8.1)
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - expo-constants
+ - expo-localization
+ - react-native
+
+ '@trezor/blockchain-link-types@1.5.0(tslib@2.8.1)':
+ dependencies:
+ '@trezor/utils': 9.5.0(tslib@2.8.1)
+ '@trezor/utxo-lib': 2.5.0(tslib@2.8.1)
+ tslib: 2.8.1
+
+ '@trezor/blockchain-link-types@1.5.1(tslib@2.8.1)':
+ dependencies:
+ '@trezor/utils': 9.5.0(tslib@2.8.1)
+ '@trezor/utxo-lib': 2.5.0(tslib@2.8.1)
+ tslib: 2.8.1
+
+ '@trezor/blockchain-link-utils@1.5.1(bufferutil@4.1.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))(tslib@2.8.1)(utf-8-validate@6.0.6)':
+ dependencies:
+ '@mobily/ts-belt': 3.13.1
+ '@stellar/stellar-sdk': 14.2.0
+ '@trezor/env-utils': 1.5.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))(tslib@2.8.1)
+ '@trezor/protobuf': 1.5.1(tslib@2.8.1)
+ '@trezor/utils': 9.5.0(tslib@2.8.1)
+ tslib: 2.8.1
+ xrpl: 4.4.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ transitivePeerDependencies:
+ - bufferutil
+ - debug
+ - expo-constants
+ - expo-localization
+ - react-native
+ - utf-8-validate
+
+ '@trezor/blockchain-link-utils@1.5.2(bufferutil@4.1.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))(tslib@2.8.1)(utf-8-validate@6.0.6)':
+ dependencies:
+ '@mobily/ts-belt': 3.13.1
+ '@stellar/stellar-sdk': 14.2.0
+ '@trezor/env-utils': 1.5.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))(tslib@2.8.1)
+ '@trezor/protobuf': 1.5.2(tslib@2.8.1)
+ '@trezor/utils': 9.5.0(tslib@2.8.1)
+ tslib: 2.8.1
+ xrpl: 4.4.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ transitivePeerDependencies:
+ - bufferutil
+ - debug
+ - expo-constants
+ - expo-localization
+ - react-native
+ - utf-8-validate
+
+ '@trezor/blockchain-link@2.6.1(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3))(bufferutil@4.1.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))(tslib@2.8.1)(typescript@5.9.3)(utf-8-validate@6.0.6)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))':
+ dependencies:
+ '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)))
+ '@solana-program/stake': 0.2.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)))
+ '@solana-program/token': 0.5.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)))
+ '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)))(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3))
+ '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))
+ '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)
+ '@stellar/stellar-sdk': 14.2.0
+ '@trezor/blockchain-link-types': 1.5.0(tslib@2.8.1)
+ '@trezor/blockchain-link-utils': 1.5.1(bufferutil@4.1.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))(tslib@2.8.1)(utf-8-validate@6.0.6)
+ '@trezor/env-utils': 1.5.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))(tslib@2.8.1)
+ '@trezor/utils': 9.5.0(tslib@2.8.1)
+ '@trezor/utxo-lib': 2.5.0(tslib@2.8.1)
+ '@trezor/websocket-client': 1.3.0(bufferutil@4.1.0)(tslib@2.8.1)(utf-8-validate@6.0.6)
+ '@types/web': 0.0.197
+ crypto-browserify: 3.12.0
+ socks-proxy-agent: 8.0.5
+ stream-browserify: 3.0.0
+ tslib: 2.8.1
+ xrpl: 4.4.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ transitivePeerDependencies:
+ - '@solana/sysvars'
+ - bufferutil
+ - debug
+ - expo-constants
+ - expo-localization
+ - fastestsmallesttextencoderdecoder
+ - react-native
+ - supports-color
+ - typescript
+ - utf-8-validate
+ - ws
+
+ '@trezor/connect-analytics@1.4.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))(tslib@2.8.1)':
+ dependencies:
+ '@trezor/analytics': 1.5.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))(tslib@2.8.1)
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - expo-constants
+ - expo-localization
+ - react-native
+
+ '@trezor/connect-common@0.5.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))(tslib@2.8.1)':
+ dependencies:
+ '@trezor/env-utils': 1.5.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))(tslib@2.8.1)
+ '@trezor/type-utils': 1.2.0
+ '@trezor/utils': 9.5.0(tslib@2.8.1)
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - expo-constants
+ - expo-localization
+ - react-native
+
+ '@trezor/connect-web@9.7.2(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3))(bufferutil@4.1.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))(tslib@2.8.1)(typescript@5.9.3)(utf-8-validate@6.0.6)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))':
+ dependencies:
+ '@trezor/connect': 9.7.2(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3))(bufferutil@4.1.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))(tslib@2.8.1)(typescript@5.9.3)(utf-8-validate@6.0.6)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))
+ '@trezor/connect-common': 0.5.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))(tslib@2.8.1)
+ '@trezor/utils': 9.5.0(tslib@2.8.1)
+ '@trezor/websocket-client': 1.3.0(bufferutil@4.1.0)(tslib@2.8.1)(utf-8-validate@6.0.6)
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - '@solana/sysvars'
+ - bufferutil
+ - debug
+ - encoding
+ - expo-constants
+ - expo-localization
+ - fastestsmallesttextencoderdecoder
+ - react-native
+ - supports-color
+ - typescript
+ - utf-8-validate
+ - ws
+
+ '@trezor/connect@9.7.2(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3))(bufferutil@4.1.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))(tslib@2.8.1)(typescript@5.9.3)(utf-8-validate@6.0.6)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))':
+ dependencies:
+ '@ethereumjs/common': 10.1.1
+ '@ethereumjs/tx': 10.1.1
+ '@fivebinaries/coin-selection': 3.0.0
+ '@mobily/ts-belt': 3.13.1
+ '@noble/hashes': 1.8.0
+ '@scure/bip39': 1.6.0
+ '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)))
+ '@solana-program/system': 0.7.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)))
+ '@solana-program/token': 0.5.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)))
+ '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)))(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3))
+ '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))
+ '@trezor/blockchain-link': 2.6.1(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3))(bufferutil@4.1.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))(tslib@2.8.1)(typescript@5.9.3)(utf-8-validate@6.0.6)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))
+ '@trezor/blockchain-link-types': 1.5.1(tslib@2.8.1)
+ '@trezor/blockchain-link-utils': 1.5.2(bufferutil@4.1.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))(tslib@2.8.1)(utf-8-validate@6.0.6)
+ '@trezor/connect-analytics': 1.4.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))(tslib@2.8.1)
+ '@trezor/connect-common': 0.5.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))(tslib@2.8.1)
+ '@trezor/crypto-utils': 1.2.0(tslib@2.8.1)
+ '@trezor/device-authenticity': 1.1.2(tslib@2.8.1)
+ '@trezor/device-utils': 1.2.0
+ '@trezor/env-utils': 1.5.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))(tslib@2.8.1)
+ '@trezor/protobuf': 1.5.2(tslib@2.8.1)
+ '@trezor/protocol': 1.3.0(tslib@2.8.1)
+ '@trezor/schema-utils': 1.4.0(tslib@2.8.1)
+ '@trezor/transport': 1.6.2(tslib@2.8.1)
+ '@trezor/type-utils': 1.2.0
+ '@trezor/utils': 9.5.0(tslib@2.8.1)
+ '@trezor/utxo-lib': 2.5.0(tslib@2.8.1)
+ blakejs: 1.2.1
+ bs58: 6.0.0
+ bs58check: 4.0.0
+ cbor: 10.0.12
+ cross-fetch: 4.1.0
+ jws: 4.0.1
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - '@solana/sysvars'
+ - bufferutil
+ - debug
+ - encoding
+ - expo-constants
+ - expo-localization
+ - fastestsmallesttextencoderdecoder
+ - react-native
+ - supports-color
+ - typescript
+ - utf-8-validate
+ - ws
+
+ '@trezor/crypto-utils@1.2.0(tslib@2.8.1)':
+ dependencies:
+ tslib: 2.8.1
+
+ '@trezor/device-authenticity@1.1.2(tslib@2.8.1)':
+ dependencies:
+ '@noble/curves': 2.0.1
+ '@trezor/crypto-utils': 1.2.0(tslib@2.8.1)
+ '@trezor/protobuf': 1.5.2(tslib@2.8.1)
+ '@trezor/schema-utils': 1.4.0(tslib@2.8.1)
+ '@trezor/utils': 9.5.0(tslib@2.8.1)
+ transitivePeerDependencies:
+ - tslib
+
+ '@trezor/device-utils@1.2.0': {}
+
+ '@trezor/env-utils@1.5.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))(tslib@2.8.1)':
+ dependencies:
+ tslib: 2.8.1
+ ua-parser-js: 2.0.9
+ optionalDependencies:
+ 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)
+
+ '@trezor/protobuf@1.5.1(tslib@2.8.1)':
+ dependencies:
+ '@trezor/schema-utils': 1.4.0(tslib@2.8.1)
+ long: 5.2.5
+ protobufjs: 7.4.0
+ tslib: 2.8.1
+
+ '@trezor/protobuf@1.5.2(tslib@2.8.1)':
+ dependencies:
+ '@trezor/schema-utils': 1.4.0(tslib@2.8.1)
+ long: 5.2.5
+ protobufjs: 7.4.0
+ tslib: 2.8.1
+
+ '@trezor/protocol@1.3.0(tslib@2.8.1)':
+ dependencies:
+ tslib: 2.8.1
+
+ '@trezor/schema-utils@1.4.0(tslib@2.8.1)':
+ dependencies:
+ '@sinclair/typebox': 0.33.22
+ ts-mixer: 6.0.4
+ tslib: 2.8.1
+
+ '@trezor/transport@1.6.2(tslib@2.8.1)':
+ dependencies:
+ '@trezor/protobuf': 1.5.2(tslib@2.8.1)
+ '@trezor/protocol': 1.3.0(tslib@2.8.1)
+ '@trezor/type-utils': 1.2.0
+ '@trezor/utils': 9.5.0(tslib@2.8.1)
+ cross-fetch: 4.1.0
+ tslib: 2.8.1
+ usb: 2.17.0
+ transitivePeerDependencies:
+ - encoding
+
+ '@trezor/type-utils@1.2.0': {}
+
+ '@trezor/utils@9.5.0(tslib@2.8.1)':
+ dependencies:
+ bignumber.js: 9.3.1
+ tslib: 2.8.1
+
+ '@trezor/utxo-lib@2.5.0(tslib@2.8.1)':
+ dependencies:
+ '@trezor/utils': 9.5.0(tslib@2.8.1)
+ bech32: 2.0.0
+ bip66: 2.0.0
+ bitcoin-ops: 1.4.1
+ blake-hash: 2.0.0
+ blakejs: 1.2.1
+ bn.js: 5.2.3
+ bs58: 6.0.0
+ bs58check: 4.0.0
+ cashaddrjs: 0.4.4
+ create-hmac: 1.1.7
+ int64-buffer: 1.1.0
+ pushdata-bitcoin: 1.0.1
+ tiny-secp256k1: 1.1.7
+ tslib: 2.8.1
+ typeforce: 1.18.0
+ varuint-bitcoin: 2.0.0
+ wif: 5.0.0
+
+ '@trezor/websocket-client@1.3.0(bufferutil@4.1.0)(tslib@2.8.1)(utf-8-validate@6.0.6)':
+ dependencies:
+ '@trezor/utils': 9.5.0(tslib@2.8.1)
+ tslib: 2.8.1
+ ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ '@tweenjs/tween.js@23.1.3': {}
+
+ '@types/babel__core@7.20.5':
+ dependencies:
+ '@babel/parser': 7.29.0
+ '@babel/types': 7.29.0
+ '@types/babel__generator': 7.27.0
+ '@types/babel__template': 7.4.4
+ '@types/babel__traverse': 7.28.0
+
+ '@types/babel__generator@7.27.0':
+ dependencies:
+ '@babel/types': 7.29.0
+
+ '@types/babel__template@7.4.4':
+ dependencies:
+ '@babel/parser': 7.29.0
+ '@babel/types': 7.29.0
+
+ '@types/babel__traverse@7.28.0':
+ dependencies:
+ '@babel/types': 7.29.0
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/d3-array@3.2.2': {}
+
+ '@types/d3-axis@3.0.6':
+ dependencies:
+ '@types/d3-selection': 3.0.11
+
+ '@types/d3-brush@3.0.6':
+ dependencies:
+ '@types/d3-selection': 3.0.11
+
+ '@types/d3-chord@3.0.6': {}
+
+ '@types/d3-color@3.1.3': {}
+
+ '@types/d3-contour@3.0.6':
+ dependencies:
+ '@types/d3-array': 3.2.2
+ '@types/geojson': 7946.0.16
+
+ '@types/d3-delaunay@6.0.4': {}
+
+ '@types/d3-dispatch@3.0.7': {}
+
+ '@types/d3-drag@3.0.7':
+ dependencies:
+ '@types/d3-selection': 3.0.11
+
+ '@types/d3-dsv@3.0.7': {}
+
+ '@types/d3-ease@3.0.2': {}
+
+ '@types/d3-fetch@3.0.7':
+ dependencies:
+ '@types/d3-dsv': 3.0.7
+
+ '@types/d3-force@3.0.10': {}
+
+ '@types/d3-format@3.0.4': {}
+
+ '@types/d3-geo@3.1.0':
+ dependencies:
+ '@types/geojson': 7946.0.16
+
+ '@types/d3-hierarchy@3.1.7': {}
+
+ '@types/d3-interpolate@3.0.4':
+ dependencies:
+ '@types/d3-color': 3.1.3
+
+ '@types/d3-path@3.1.1': {}
+
+ '@types/d3-polygon@3.0.2': {}
+
+ '@types/d3-quadtree@3.0.6': {}
+
+ '@types/d3-random@3.0.3': {}
+
+ '@types/d3-scale-chromatic@3.1.0': {}
+
+ '@types/d3-scale@4.0.9':
+ dependencies:
+ '@types/d3-time': 3.0.4
+
+ '@types/d3-selection@3.0.11': {}
+
+ '@types/d3-shape@3.1.8':
+ dependencies:
+ '@types/d3-path': 3.1.1
+
+ '@types/d3-time-format@4.0.3': {}
+
+ '@types/d3-time@3.0.4': {}
+
+ '@types/d3-timer@3.0.2': {}
+
+ '@types/d3-transition@3.0.9':
+ dependencies:
+ '@types/d3-selection': 3.0.11
+
+ '@types/d3-zoom@3.0.8':
+ dependencies:
+ '@types/d3-interpolate': 3.0.4
+ '@types/d3-selection': 3.0.11
+
+ '@types/d3@7.4.3':
+ dependencies:
+ '@types/d3-array': 3.2.2
+ '@types/d3-axis': 3.0.6
+ '@types/d3-brush': 3.0.6
+ '@types/d3-chord': 3.0.6
+ '@types/d3-color': 3.1.3
+ '@types/d3-contour': 3.0.6
+ '@types/d3-delaunay': 6.0.4
+ '@types/d3-dispatch': 3.0.7
+ '@types/d3-drag': 3.0.7
+ '@types/d3-dsv': 3.0.7
+ '@types/d3-ease': 3.0.2
+ '@types/d3-fetch': 3.0.7
+ '@types/d3-force': 3.0.10
+ '@types/d3-format': 3.0.4
+ '@types/d3-geo': 3.1.0
+ '@types/d3-hierarchy': 3.1.7
+ '@types/d3-interpolate': 3.0.4
+ '@types/d3-path': 3.1.1
+ '@types/d3-polygon': 3.0.2
+ '@types/d3-quadtree': 3.0.6
+ '@types/d3-random': 3.0.3
+ '@types/d3-scale': 4.0.9
+ '@types/d3-scale-chromatic': 3.1.0
+ '@types/d3-selection': 3.0.11
+ '@types/d3-shape': 3.1.8
+ '@types/d3-time': 3.0.4
+ '@types/d3-time-format': 4.0.3
+ '@types/d3-timer': 3.0.2
+ '@types/d3-transition': 3.0.9
+ '@types/d3-zoom': 3.0.8
+
+ '@types/debug@4.1.12':
+ dependencies:
+ '@types/ms': 2.1.0
+
+ '@types/draco3d@1.4.10': {}
+
+ '@types/estree-jsx@1.0.5':
+ dependencies:
+ '@types/estree': 1.0.8
+
+ '@types/estree@1.0.8': {}
+
+ '@types/geojson@7946.0.16': {}
+
+ '@types/graceful-fs@4.1.9':
+ dependencies:
+ '@types/node': 25.5.0
+
+ '@types/hast@3.0.4':
+ dependencies:
+ '@types/unist': 3.0.3
+
+ '@types/istanbul-lib-coverage@2.0.6': {}
+
+ '@types/istanbul-lib-report@3.0.3':
+ dependencies:
+ '@types/istanbul-lib-coverage': 2.0.6
+
+ '@types/istanbul-reports@3.0.4':
+ dependencies:
+ '@types/istanbul-lib-report': 3.0.3
+
+ '@types/mdast@4.0.4':
+ dependencies:
+ '@types/unist': 3.0.3
+
+ '@types/mdx@2.0.13': {}
+
+ '@types/ms@2.1.0': {}
+
+ '@types/node@12.20.55': {}
+
+ '@types/node@22.7.5':
+ dependencies:
+ undici-types: 6.19.8
+
+ '@types/node@25.5.0':
+ dependencies:
+ undici-types: 7.18.2
+
+ '@types/offscreencanvas@2019.7.3': {}
+
+ '@types/react-dom@19.2.3(@types/react@19.2.14)':
+ dependencies:
+ '@types/react': 19.2.14
+
+ '@types/react-reconciler@0.28.9(@types/react@19.2.14)':
+ dependencies:
+ '@types/react': 19.2.14
+
+ '@types/react@19.2.14':
+ dependencies:
+ csstype: 3.2.3
+
+ '@types/stack-utils@2.0.3': {}
+
+ '@types/stats.js@0.17.4': {}
+
+ '@types/three@0.183.1':
+ dependencies:
+ '@dimforge/rapier3d-compat': 0.12.0
+ '@tweenjs/tween.js': 23.1.3
+ '@types/stats.js': 0.17.4
+ '@types/webxr': 0.5.24
+ '@webgpu/types': 0.1.69
+ fflate: 0.8.2
+ meshoptimizer: 1.0.1
+
+ '@types/trusted-types@2.0.7': {}
+
+ '@types/unist@2.0.11': {}
+
+ '@types/unist@3.0.3': {}
+
+ '@types/uuid@10.0.0': {}
+
+ '@types/uuid@8.3.4': {}
+
+ '@types/w3c-web-usb@1.0.13': {}
+
+ '@types/web@0.0.197': {}
+
+ '@types/webxr@0.5.24': {}
+
+ '@types/ws@7.4.7':
+ dependencies:
+ '@types/node': 12.20.55
+
+ '@types/ws@8.18.1':
+ dependencies:
+ '@types/node': 25.5.0
+
+ '@types/yargs-parser@21.0.3': {}
+
+ '@types/yargs@17.0.35':
+ dependencies:
+ '@types/yargs-parser': 21.0.3
+
+ '@ungap/structured-clone@1.3.0': {}
+
+ '@use-gesture/core@10.3.1': {}
+
+ '@use-gesture/react@10.3.1(react@19.2.4)':
+ dependencies:
+ '@use-gesture/core': 10.3.1
+ react: 19.2.4
+
+ '@vitejs/plugin-react@4.7.0(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.1)(yaml@2.8.2))':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.0)
+ '@rolldown/pluginutils': 1.0.0-beta.27
+ '@types/babel__core': 7.20.5
+ react-refresh: 0.17.0
+ vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.1)(yaml@2.8.2)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@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
+
+ '@walletconnect/core@2.19.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)(utf-8-validate@6.0.6)))(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)':
+ dependencies:
+ '@walletconnect/heartbeat': 1.2.2
+ '@walletconnect/jsonrpc-provider': 1.0.14
+ '@walletconnect/jsonrpc-types': 1.0.4
+ '@walletconnect/jsonrpc-utils': 1.0.8
+ '@walletconnect/jsonrpc-ws-connection': 1.0.16(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ '@walletconnect/keyvaluestorage': 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)))
+ '@walletconnect/logger': 2.1.2
+ '@walletconnect/relay-api': 1.0.11
+ '@walletconnect/relay-auth': 1.1.0
+ '@walletconnect/safe-json': 1.0.2
+ '@walletconnect/time': 1.0.2
+ '@walletconnect/types': 2.19.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)(utf-8-validate@6.0.6)))
+ '@walletconnect/utils': 2.19.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)(utf-8-validate@6.0.6)))(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)
+ '@walletconnect/window-getters': 1.0.1
+ events: 3.3.0
+ lodash.isequal: 4.5.0
+ uint8arrays: 3.1.0
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@netlify/blobs'
+ - '@planetscale/database'
+ - '@react-native-async-storage/async-storage'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - aws4fetch
+ - bufferutil
+ - db0
+ - ioredis
+ - typescript
+ - uploadthing
+ - utf-8-validate
+ - zod
+
+ '@walletconnect/core@2.19.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)))(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)':
+ dependencies:
+ '@walletconnect/heartbeat': 1.2.2
+ '@walletconnect/jsonrpc-provider': 1.0.14
+ '@walletconnect/jsonrpc-types': 1.0.4
+ '@walletconnect/jsonrpc-utils': 1.0.8
+ '@walletconnect/jsonrpc-ws-connection': 1.0.16(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ '@walletconnect/keyvaluestorage': 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)))
+ '@walletconnect/logger': 2.1.2
+ '@walletconnect/relay-api': 1.0.11
+ '@walletconnect/relay-auth': 1.1.0
+ '@walletconnect/safe-json': 1.0.2
+ '@walletconnect/time': 1.0.2
+ '@walletconnect/types': 2.19.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)))
+ '@walletconnect/utils': 2.19.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)))(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)
+ '@walletconnect/window-getters': 1.0.1
+ es-toolkit: 1.33.0
+ events: 3.3.0
+ uint8arrays: 3.1.0
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@netlify/blobs'
+ - '@planetscale/database'
+ - '@react-native-async-storage/async-storage'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - aws4fetch
+ - bufferutil
+ - db0
+ - ioredis
+ - typescript
+ - uploadthing
+ - utf-8-validate
+ - zod
+
+ '@walletconnect/environment@1.0.1':
+ dependencies:
+ tslib: 1.14.1
+
+ '@walletconnect/events@1.0.1':
+ dependencies:
+ keyvaluestorage-interface: 1.0.0
+ tslib: 1.14.1
+
+ '@walletconnect/heartbeat@1.2.2':
+ dependencies:
+ '@walletconnect/events': 1.0.1
+ '@walletconnect/time': 1.0.2
+ events: 3.3.0
+
+ '@walletconnect/jsonrpc-http-connection@1.0.8':
+ dependencies:
+ '@walletconnect/jsonrpc-utils': 1.0.8
+ '@walletconnect/safe-json': 1.0.2
+ cross-fetch: 3.2.0
+ events: 3.3.0
+ transitivePeerDependencies:
+ - encoding
+
+ '@walletconnect/jsonrpc-provider@1.0.14':
+ dependencies:
+ '@walletconnect/jsonrpc-utils': 1.0.8
+ '@walletconnect/safe-json': 1.0.2
+ events: 3.3.0
+
+ '@walletconnect/jsonrpc-types@1.0.4':
+ dependencies:
+ events: 3.3.0
+ keyvaluestorage-interface: 1.0.0
+
+ '@walletconnect/jsonrpc-utils@1.0.8':
+ dependencies:
+ '@walletconnect/environment': 1.0.1
+ '@walletconnect/jsonrpc-types': 1.0.4
+ tslib: 1.14.1
+
+ '@walletconnect/jsonrpc-ws-connection@1.0.16(bufferutil@4.1.0)(utf-8-validate@6.0.6)':
+ dependencies:
+ '@walletconnect/jsonrpc-utils': 1.0.8
+ '@walletconnect/safe-json': 1.0.2
+ events: 3.3.0
+ ws: 7.5.10(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ '@walletconnect/keyvaluestorage@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)))':
+ dependencies:
+ '@walletconnect/safe-json': 1.0.2
+ idb-keyval: 6.2.2
+ unstorage: 1.17.4(idb-keyval@6.2.2)
+ 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:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@netlify/blobs'
+ - '@planetscale/database'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - aws4fetch
+ - db0
+ - ioredis
+ - uploadthing
+
+ '@walletconnect/logger@2.1.2':
+ dependencies:
+ '@walletconnect/safe-json': 1.0.2
+ pino: 7.11.0
+
+ '@walletconnect/relay-api@1.0.11':
+ dependencies:
+ '@walletconnect/jsonrpc-types': 1.0.4
+
+ '@walletconnect/relay-auth@1.1.0':
+ dependencies:
+ '@noble/curves': 1.8.0
+ '@noble/hashes': 1.7.0
+ '@walletconnect/safe-json': 1.0.2
+ '@walletconnect/time': 1.0.2
+ uint8arrays: 3.1.0
+
+ '@walletconnect/safe-json@1.0.2':
+ dependencies:
+ tslib: 1.14.1
+
+ '@walletconnect/sign-client@2.19.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)(utf-8-validate@6.0.6)))(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)':
+ dependencies:
+ '@walletconnect/core': 2.19.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)(utf-8-validate@6.0.6)))(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)
+ '@walletconnect/events': 1.0.1
+ '@walletconnect/heartbeat': 1.2.2
+ '@walletconnect/jsonrpc-utils': 1.0.8
+ '@walletconnect/logger': 2.1.2
+ '@walletconnect/time': 1.0.2
+ '@walletconnect/types': 2.19.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)(utf-8-validate@6.0.6)))
+ '@walletconnect/utils': 2.19.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)(utf-8-validate@6.0.6)))(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)
+ events: 3.3.0
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@netlify/blobs'
+ - '@planetscale/database'
+ - '@react-native-async-storage/async-storage'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - aws4fetch
+ - bufferutil
+ - db0
+ - ioredis
+ - typescript
+ - uploadthing
+ - utf-8-validate
+ - zod
+
+ '@walletconnect/sign-client@2.19.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)))(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)':
+ dependencies:
+ '@walletconnect/core': 2.19.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)))(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)
+ '@walletconnect/events': 1.0.1
+ '@walletconnect/heartbeat': 1.2.2
+ '@walletconnect/jsonrpc-utils': 1.0.8
+ '@walletconnect/logger': 2.1.2
+ '@walletconnect/time': 1.0.2
+ '@walletconnect/types': 2.19.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)))
+ '@walletconnect/utils': 2.19.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)))(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)
+ events: 3.3.0
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@netlify/blobs'
+ - '@planetscale/database'
+ - '@react-native-async-storage/async-storage'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - aws4fetch
+ - bufferutil
+ - db0
+ - ioredis
+ - typescript
+ - uploadthing
+ - utf-8-validate
+ - zod
+
+ '@walletconnect/solana-adapter@0.0.8(@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)))(@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))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)':
+ dependencies:
+ '@reown/appkit': 1.7.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)(utf-8-validate@6.0.6)))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.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)
+ '@walletconnect/universal-provider': 2.19.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)(utf-8-validate@6.0.6)))(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)
+ '@walletconnect/utils': 2.19.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)(utf-8-validate@6.0.6)))(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)
+ bs58: 6.0.0
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@netlify/blobs'
+ - '@planetscale/database'
+ - '@react-native-async-storage/async-storage'
+ - '@types/react'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - aws4fetch
+ - bufferutil
+ - db0
+ - encoding
+ - ioredis
+ - react
+ - typescript
+ - uploadthing
+ - utf-8-validate
+ - zod
+
+ '@walletconnect/time@1.0.2':
+ dependencies:
+ tslib: 1.14.1
+
+ '@walletconnect/types@2.19.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)(utf-8-validate@6.0.6)))':
+ dependencies:
+ '@walletconnect/events': 1.0.1
+ '@walletconnect/heartbeat': 1.2.2
+ '@walletconnect/jsonrpc-types': 1.0.4
+ '@walletconnect/keyvaluestorage': 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)))
+ '@walletconnect/logger': 2.1.2
+ events: 3.3.0
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@netlify/blobs'
+ - '@planetscale/database'
+ - '@react-native-async-storage/async-storage'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - aws4fetch
+ - db0
+ - ioredis
+ - uploadthing
+
+ '@walletconnect/types@2.19.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)))':
+ dependencies:
+ '@walletconnect/events': 1.0.1
+ '@walletconnect/heartbeat': 1.2.2
+ '@walletconnect/jsonrpc-types': 1.0.4
+ '@walletconnect/keyvaluestorage': 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)))
+ '@walletconnect/logger': 2.1.2
+ events: 3.3.0
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@netlify/blobs'
+ - '@planetscale/database'
+ - '@react-native-async-storage/async-storage'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - aws4fetch
+ - db0
+ - ioredis
+ - uploadthing
+
+ '@walletconnect/universal-provider@2.19.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)(utf-8-validate@6.0.6)))(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)':
+ dependencies:
+ '@walletconnect/events': 1.0.1
+ '@walletconnect/jsonrpc-http-connection': 1.0.8
+ '@walletconnect/jsonrpc-provider': 1.0.14
+ '@walletconnect/jsonrpc-types': 1.0.4
+ '@walletconnect/jsonrpc-utils': 1.0.8
+ '@walletconnect/keyvaluestorage': 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)))
+ '@walletconnect/logger': 2.1.2
+ '@walletconnect/sign-client': 2.19.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)(utf-8-validate@6.0.6)))(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)
+ '@walletconnect/types': 2.19.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)(utf-8-validate@6.0.6)))
+ '@walletconnect/utils': 2.19.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)(utf-8-validate@6.0.6)))(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)
+ events: 3.3.0
+ lodash: 4.17.21
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@netlify/blobs'
+ - '@planetscale/database'
+ - '@react-native-async-storage/async-storage'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - aws4fetch
+ - bufferutil
+ - db0
+ - encoding
+ - ioredis
+ - typescript
+ - uploadthing
+ - utf-8-validate
+ - zod
+
+ '@walletconnect/universal-provider@2.19.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)))(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)':
+ dependencies:
+ '@walletconnect/events': 1.0.1
+ '@walletconnect/jsonrpc-http-connection': 1.0.8
+ '@walletconnect/jsonrpc-provider': 1.0.14
+ '@walletconnect/jsonrpc-types': 1.0.4
+ '@walletconnect/jsonrpc-utils': 1.0.8
+ '@walletconnect/keyvaluestorage': 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)))
+ '@walletconnect/logger': 2.1.2
+ '@walletconnect/sign-client': 2.19.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)))(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)
+ '@walletconnect/types': 2.19.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)))
+ '@walletconnect/utils': 2.19.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)))(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)
+ es-toolkit: 1.33.0
+ events: 3.3.0
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@netlify/blobs'
+ - '@planetscale/database'
+ - '@react-native-async-storage/async-storage'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - aws4fetch
+ - bufferutil
+ - db0
+ - encoding
+ - ioredis
+ - typescript
+ - uploadthing
+ - utf-8-validate
+ - zod
+
+ '@walletconnect/utils@2.19.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)(utf-8-validate@6.0.6)))(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)':
+ dependencies:
+ '@noble/ciphers': 1.2.1
+ '@noble/curves': 1.8.1
+ '@noble/hashes': 1.7.1
+ '@walletconnect/jsonrpc-utils': 1.0.8
+ '@walletconnect/keyvaluestorage': 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)))
+ '@walletconnect/relay-api': 1.0.11
+ '@walletconnect/relay-auth': 1.1.0
+ '@walletconnect/safe-json': 1.0.2
+ '@walletconnect/time': 1.0.2
+ '@walletconnect/types': 2.19.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)(utf-8-validate@6.0.6)))
+ '@walletconnect/window-getters': 1.0.1
+ '@walletconnect/window-metadata': 1.0.1
+ detect-browser: 5.3.0
+ elliptic: 6.6.1
+ query-string: 7.1.3
+ uint8arrays: 3.1.0
+ viem: 2.23.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@netlify/blobs'
+ - '@planetscale/database'
+ - '@react-native-async-storage/async-storage'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - aws4fetch
+ - bufferutil
+ - db0
+ - ioredis
+ - typescript
+ - uploadthing
+ - utf-8-validate
+ - zod
+
+ '@walletconnect/utils@2.19.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)))(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)':
+ dependencies:
+ '@noble/ciphers': 1.2.1
+ '@noble/curves': 1.8.1
+ '@noble/hashes': 1.7.1
+ '@walletconnect/jsonrpc-utils': 1.0.8
+ '@walletconnect/keyvaluestorage': 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)))
+ '@walletconnect/relay-api': 1.0.11
+ '@walletconnect/relay-auth': 1.1.0
+ '@walletconnect/safe-json': 1.0.2
+ '@walletconnect/time': 1.0.2
+ '@walletconnect/types': 2.19.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)))
+ '@walletconnect/window-getters': 1.0.1
+ '@walletconnect/window-metadata': 1.0.1
+ bs58: 6.0.0
+ detect-browser: 5.3.0
+ elliptic: 6.6.1
+ query-string: 7.1.3
+ uint8arrays: 3.1.0
+ viem: 2.23.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4)
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@netlify/blobs'
+ - '@planetscale/database'
+ - '@react-native-async-storage/async-storage'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - aws4fetch
+ - bufferutil
+ - db0
+ - ioredis
+ - typescript
+ - uploadthing
+ - utf-8-validate
+ - zod
+
+ '@walletconnect/window-getters@1.0.1':
+ dependencies:
+ tslib: 1.14.1
+
+ '@walletconnect/window-metadata@1.0.1':
+ dependencies:
+ '@walletconnect/window-getters': 1.0.1
+ tslib: 1.14.1
+
+ '@webgpu/types@0.1.69': {}
+
+ '@xrplf/isomorphic@1.0.1(bufferutil@4.1.0)(utf-8-validate@6.0.6)':
+ dependencies:
+ '@noble/hashes': 1.8.0
+ eventemitter3: 5.0.1
+ ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ '@xrplf/secret-numbers@2.0.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)':
+ dependencies:
+ '@xrplf/isomorphic': 1.0.1(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ ripple-keypairs: 2.0.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ abitype@1.0.8(typescript@5.9.3)(zod@3.22.4):
+ optionalDependencies:
+ typescript: 5.9.3
+ zod: 3.22.4
+
+ abitype@1.2.3(typescript@5.9.3)(zod@3.22.4):
+ optionalDependencies:
+ typescript: 5.9.3
+ zod: 3.22.4
+
+ abort-controller@3.0.0:
+ dependencies:
+ event-target-shim: 5.0.1
+
+ accepts@2.0.0:
+ dependencies:
+ mime-types: 3.0.2
+ negotiator: 1.0.0
+
+ acorn-jsx@5.3.2(acorn@8.16.0):
+ dependencies:
+ acorn: 8.16.0
+
+ acorn@8.16.0: {}
+
+ aes-js@4.0.0-beta.5: {}
+
+ agent-base@7.1.4: {}
+
+ agentkeepalive@4.6.0:
+ dependencies:
+ humanize-ms: 1.2.1
+
+ anser@1.4.10: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ ansi-styles@5.2.0: {}
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@1.0.10:
+ dependencies:
+ sprintf-js: 1.0.3
+
+ aria-hidden@1.2.6:
+ dependencies:
+ tslib: 2.8.1
+
+ asap@2.0.6: {}
+
+ asn1.js@4.10.1:
+ dependencies:
+ bn.js: 4.12.3
+ inherits: 2.0.4
+ minimalistic-assert: 1.0.1
+
+ assert@2.1.0:
+ dependencies:
+ call-bind: 1.0.8
+ is-nan: 1.3.2
+ object-is: 1.1.6
+ object.assign: 4.1.7
+ util: 0.12.5
+
+ astring@1.9.0: {}
+
+ async-mutex@0.5.0:
+ dependencies:
+ tslib: 2.8.1
+
+ asynckit@0.4.0: {}
+
+ atomic-sleep@1.0.0: {}
+
+ available-typed-arrays@1.0.7:
+ dependencies:
+ possible-typed-array-names: 1.1.0
+
+ axios@1.13.6:
+ dependencies:
+ follow-redirects: 1.15.11
+ form-data: 4.0.5
+ proxy-from-env: 1.1.0
+ transitivePeerDependencies:
+ - debug
+
+ babel-jest@29.7.0(@babel/core@7.29.0):
+ dependencies:
+ '@babel/core': 7.29.0
+ '@jest/transform': 29.7.0
+ '@types/babel__core': 7.20.5
+ babel-plugin-istanbul: 6.1.1
+ babel-preset-jest: 29.6.3(@babel/core@7.29.0)
+ chalk: 4.1.2
+ graceful-fs: 4.2.11
+ slash: 3.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-plugin-istanbul@6.1.1:
+ dependencies:
+ '@babel/helper-plugin-utils': 7.28.6
+ '@istanbuljs/load-nyc-config': 1.1.0
+ '@istanbuljs/schema': 0.1.3
+ istanbul-lib-instrument: 5.2.1
+ test-exclude: 6.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-plugin-jest-hoist@29.6.3:
+ dependencies:
+ '@babel/template': 7.28.6
+ '@babel/types': 7.29.0
+ '@types/babel__core': 7.20.5
+ '@types/babel__traverse': 7.28.0
+
+ babel-plugin-syntax-hermes-parser@0.32.0:
+ dependencies:
+ hermes-parser: 0.32.0
+
+ babel-preset-current-node-syntax@1.2.0(@babel/core@7.29.0):
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.29.0)
+ '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.29.0)
+ '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.29.0)
+ '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.29.0)
+ '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.29.0)
+ '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.29.0)
+ '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.29.0)
+ '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.29.0)
+ '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.29.0)
+ '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.29.0)
+ '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.29.0)
+ '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.29.0)
+ '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.29.0)
+ '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.29.0)
+
+ babel-preset-jest@29.6.3(@babel/core@7.29.0):
+ dependencies:
+ '@babel/core': 7.29.0
+ babel-plugin-jest-hoist: 29.6.3
+ babel-preset-current-node-syntax: 1.2.0(@babel/core@7.29.0)
+
+ bail@2.0.2: {}
+
+ balanced-match@1.0.2: {}
+
+ base-x@3.0.11:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ base-x@4.0.1: {}
+
+ base-x@5.0.1: {}
+
+ base32.js@0.1.0: {}
+
+ base64-js@1.5.1: {}
+
+ base64url@3.0.1: {}
+
+ baseline-browser-mapping@2.10.0: {}
+
+ bech32@2.0.0: {}
+
+ bidi-js@1.0.3:
+ dependencies:
+ require-from-string: 2.0.2
+
+ big-integer@1.6.36: {}
+
+ big.js@6.2.2: {}
+
+ bignumber.js@9.3.1: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bip66@2.0.0: {}
+
+ bitcoin-ops@1.4.1: {}
+
+ blake-hash@2.0.0:
+ dependencies:
+ node-addon-api: 3.2.1
+ node-gyp-build: 4.8.4
+ readable-stream: 3.6.2
+
+ blakejs@1.2.1: {}
+
+ bn.js@4.12.3: {}
+
+ 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
+
+ bowser@2.14.1: {}
+
+ brace-expansion@1.1.12:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ brorand@1.1.0: {}
+
+ browserify-aes@1.2.0:
+ dependencies:
+ buffer-xor: 1.0.3
+ cipher-base: 1.0.7
+ create-hash: 1.2.0
+ evp_bytestokey: 1.0.3
+ inherits: 2.0.4
+ safe-buffer: 5.2.1
+
+ browserify-cipher@1.0.1:
+ dependencies:
+ browserify-aes: 1.2.0
+ browserify-des: 1.0.2
+ evp_bytestokey: 1.0.3
+
+ browserify-des@1.0.2:
+ dependencies:
+ cipher-base: 1.0.7
+ des.js: 1.1.0
+ inherits: 2.0.4
+ safe-buffer: 5.2.1
+
+ browserify-rsa@4.1.1:
+ dependencies:
+ bn.js: 5.2.3
+ randombytes: 2.1.0
+ safe-buffer: 5.2.1
+
+ browserify-sign@4.2.5:
+ dependencies:
+ bn.js: 5.2.3
+ browserify-rsa: 4.1.1
+ create-hash: 1.2.0
+ create-hmac: 1.1.7
+ elliptic: 6.6.1
+ inherits: 2.0.4
+ parse-asn1: 5.1.9
+ readable-stream: 2.3.8
+ safe-buffer: 5.2.1
+
+ browserslist@4.28.1:
+ dependencies:
+ baseline-browser-mapping: 2.10.0
+ caniuse-lite: 1.0.30001774
+ electron-to-chromium: 1.5.302
+ node-releases: 2.0.27
+ update-browserslist-db: 1.2.3(browserslist@4.28.1)
+
+ bs58@4.0.1:
+ dependencies:
+ base-x: 3.0.11
+
+ bs58@5.0.0:
+ dependencies:
+ base-x: 4.0.1
+
+ bs58@6.0.0:
+ dependencies:
+ base-x: 5.0.1
+
+ bs58check@2.1.2:
+ dependencies:
+ bs58: 4.0.1
+ create-hash: 1.2.0
+ safe-buffer: 5.2.1
+
+ bs58check@4.0.0:
+ dependencies:
+ '@noble/hashes': 1.8.0
+ bs58: 6.0.0
+
+ bser@2.1.1:
+ dependencies:
+ node-int64: 0.4.0
+
+ buffer-equal-constant-time@1.0.1: {}
+
+ buffer-from@1.1.2: {}
+
+ buffer-xor@1.0.3: {}
+
+ buffer@5.7.1:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.1.0:
+ dependencies:
+ node-gyp-build: 4.8.4
+ optional: true
+
+ call-bind-apply-helpers@1.0.2:
+ dependencies:
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+
+ call-bind@1.0.8:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-define-property: 1.0.1
+ get-intrinsic: 1.3.0
+ set-function-length: 1.2.2
+
+ call-bound@1.0.4:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ get-intrinsic: 1.3.0
+
+ camelcase@5.3.1: {}
+
+ camelcase@6.3.0: {}
+
+ camera-controls@3.1.2(three@0.183.2):
+ dependencies:
+ three: 0.183.2
+
+ caniuse-lite@1.0.30001774: {}
+
+ cashaddrjs@0.4.4:
+ dependencies:
+ big-integer: 1.6.36
+
+ cbor-sync@1.0.4: {}
+
+ cbor@10.0.12:
+ dependencies:
+ nofilter: 3.1.0
+
+ ccount@2.0.1: {}
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chalk@5.6.2: {}
+
+ character-entities-html4@2.1.0: {}
+
+ character-entities-legacy@3.0.0: {}
+
+ character-entities@2.0.2: {}
+
+ character-reference-invalid@2.0.1: {}
+
+ chevrotain-allstar@0.3.1(chevrotain@11.1.1):
+ dependencies:
+ chevrotain: 11.1.1
+ lodash-es: 4.17.23
+
+ chevrotain@11.1.1:
+ dependencies:
+ '@chevrotain/cst-dts-gen': 11.1.1
+ '@chevrotain/gast': 11.1.1
+ '@chevrotain/regexp-to-ast': 11.1.1
+ '@chevrotain/types': 11.1.1
+ '@chevrotain/utils': 11.1.1
+ lodash-es: 4.17.23
+
+ chokidar@5.0.0:
+ dependencies:
+ readdirp: 5.0.0
+
+ chrome-launcher@0.15.2:
+ dependencies:
+ '@types/node': 25.5.0
+ escape-string-regexp: 4.0.0
+ is-wsl: 2.2.0
+ lighthouse-logger: 1.4.2
+ transitivePeerDependencies:
+ - supports-color
+
+ chromium-edge-launcher@0.2.0:
+ dependencies:
+ '@types/node': 25.5.0
+ escape-string-regexp: 4.0.0
+ is-wsl: 2.2.0
+ lighthouse-logger: 1.4.2
+ mkdirp: 1.0.4
+ rimraf: 3.0.2
+ transitivePeerDependencies:
+ - supports-color
+
+ ci-info@2.0.0: {}
+
+ ci-info@3.9.0: {}
+
+ cipher-base@1.0.7:
+ dependencies:
+ inherits: 2.0.4
+ safe-buffer: 5.2.1
+ to-buffer: 1.2.2
+
+ class-variance-authority@0.7.1:
+ dependencies:
+ clsx: 2.1.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
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ clsx@2.1.1: {}
+
+ collapse-white-space@2.1.0: {}
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ color-string@1.9.1:
+ dependencies:
+ color-name: 1.1.4
+ simple-swizzle: 0.2.4
+
+ color@4.2.3:
+ dependencies:
+ color-convert: 2.0.1
+ color-string: 1.9.1
+
+ combined-stream@1.0.8:
+ dependencies:
+ delayed-stream: 1.0.0
+
+ comma-separated-tokens@2.0.3: {}
+
+ commander@12.1.0: {}
+
+ commander@13.1.0: {}
+
+ commander@14.0.1: {}
+
+ commander@14.0.3: {}
+
+ commander@2.20.3: {}
+
+ commander@7.2.0: {}
+
+ commander@8.3.0: {}
+
+ concat-map@0.0.1: {}
+
+ confbox@0.1.8: {}
+
+ connect@3.7.0:
+ dependencies:
+ debug: 2.6.9
+ finalhandler: 1.1.2
+ parseurl: 1.3.3
+ utils-merge: 1.0.1
+ transitivePeerDependencies:
+ - supports-color
+
+ convert-source-map@2.0.0: {}
+
+ cookie-es@1.2.2: {}
+
+ cookie@1.1.1: {}
+
+ core-util-is@1.0.3: {}
+
+ cose-base@1.0.3:
+ dependencies:
+ layout-base: 1.0.2
+
+ cose-base@2.2.0:
+ dependencies:
+ layout-base: 2.0.1
+
+ crc@3.8.0:
+ dependencies:
+ buffer: 5.7.1
+
+ create-ecdh@4.0.4:
+ dependencies:
+ bn.js: 4.12.3
+ elliptic: 6.6.1
+
+ create-hash@1.2.0:
+ dependencies:
+ cipher-base: 1.0.7
+ inherits: 2.0.4
+ md5.js: 1.3.5
+ ripemd160: 2.0.3
+ sha.js: 2.4.12
+
+ create-hmac@1.1.7:
+ dependencies:
+ cipher-base: 1.0.7
+ create-hash: 1.2.0
+ inherits: 2.0.4
+ ripemd160: 2.0.3
+ safe-buffer: 5.2.1
+ sha.js: 2.4.12
+
+ cross-env@7.0.3:
+ dependencies:
+ cross-spawn: 7.0.6
+
+ cross-fetch@3.2.0:
+ dependencies:
+ node-fetch: 2.7.0
+ transitivePeerDependencies:
+ - encoding
+
+ cross-fetch@4.1.0:
+ dependencies:
+ node-fetch: 2.7.0
+ transitivePeerDependencies:
+ - encoding
+
+ cross-spawn@7.0.6:
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+
+ crossws@0.3.5:
+ dependencies:
+ uncrypto: 0.1.3
+
+ crypto-browserify@3.12.0:
+ dependencies:
+ browserify-cipher: 1.0.1
+ browserify-sign: 4.2.5
+ create-ecdh: 4.0.4
+ create-hash: 1.2.0
+ create-hmac: 1.1.7
+ diffie-hellman: 5.0.3
+ inherits: 2.0.4
+ pbkdf2: 3.1.5
+ public-encrypt: 4.0.3
+ randombytes: 2.1.0
+ randomfill: 1.0.4
+
+ crypto-browserify@3.12.1:
+ dependencies:
+ browserify-cipher: 1.0.1
+ browserify-sign: 4.2.5
+ create-ecdh: 4.0.4
+ create-hash: 1.2.0
+ create-hmac: 1.1.7
+ diffie-hellman: 5.0.3
+ hash-base: 3.0.5
+ inherits: 2.0.4
+ pbkdf2: 3.1.5
+ public-encrypt: 4.0.3
+ randombytes: 2.1.0
+ randomfill: 1.0.4
+
+ crypto-js@4.2.0: {}
+
+ csstype@3.2.3: {}
+
+ cytoscape-cose-bilkent@4.1.0(cytoscape@3.33.1):
+ dependencies:
+ cose-base: 1.0.3
+ cytoscape: 3.33.1
+
+ cytoscape-fcose@2.2.0(cytoscape@3.33.1):
+ dependencies:
+ cose-base: 2.2.0
+ cytoscape: 3.33.1
+
+ cytoscape@3.33.1: {}
+
+ d3-array@2.12.1:
+ dependencies:
+ internmap: 1.0.1
+
+ d3-array@3.2.4:
+ dependencies:
+ internmap: 2.0.3
+
+ d3-axis@3.0.0: {}
+
+ d3-brush@3.0.0:
+ dependencies:
+ d3-dispatch: 3.0.1
+ d3-drag: 3.0.0
+ d3-interpolate: 3.0.1
+ d3-selection: 3.0.0
+ d3-transition: 3.0.1(d3-selection@3.0.0)
+
+ d3-chord@3.0.1:
+ dependencies:
+ d3-path: 3.1.0
+
+ d3-color@3.1.0: {}
+
+ d3-contour@4.0.2:
+ dependencies:
+ d3-array: 3.2.4
+
+ d3-delaunay@6.0.4:
+ dependencies:
+ delaunator: 5.0.1
+
+ d3-dispatch@3.0.1: {}
+
+ d3-drag@3.0.0:
+ dependencies:
+ d3-dispatch: 3.0.1
+ d3-selection: 3.0.0
+
+ d3-dsv@3.0.1:
+ dependencies:
+ commander: 7.2.0
+ iconv-lite: 0.6.3
+ rw: 1.3.3
+
+ d3-ease@3.0.1: {}
+
+ d3-fetch@3.0.1:
+ dependencies:
+ d3-dsv: 3.0.1
+
+ d3-force@3.0.0:
+ dependencies:
+ d3-dispatch: 3.0.1
+ d3-quadtree: 3.0.1
+ d3-timer: 3.0.1
+
+ d3-format@3.1.2: {}
+
+ d3-geo@3.1.1:
+ dependencies:
+ d3-array: 3.2.4
+
+ d3-hierarchy@3.1.2: {}
+
+ d3-interpolate@3.0.1:
+ dependencies:
+ d3-color: 3.1.0
+
+ d3-path@1.0.9: {}
+
+ d3-path@3.1.0: {}
+
+ d3-polygon@3.0.1: {}
+
+ d3-quadtree@3.0.1: {}
+
+ d3-random@3.0.1: {}
+
+ d3-sankey@0.12.3:
+ dependencies:
+ d3-array: 2.12.1
+ d3-shape: 1.3.7
+
+ d3-scale-chromatic@3.1.0:
+ dependencies:
+ d3-color: 3.1.0
+ d3-interpolate: 3.0.1
+
+ d3-scale@4.0.2:
+ dependencies:
+ d3-array: 3.2.4
+ d3-format: 3.1.2
+ d3-interpolate: 3.0.1
+ d3-time: 3.1.0
+ d3-time-format: 4.1.0
+
+ d3-selection@3.0.0: {}
+
+ d3-shape@1.3.7:
+ dependencies:
+ d3-path: 1.0.9
+
+ d3-shape@3.2.0:
+ dependencies:
+ d3-path: 3.1.0
+
+ d3-time-format@4.1.0:
+ dependencies:
+ d3-time: 3.1.0
+
+ d3-time@3.1.0:
+ dependencies:
+ d3-array: 3.2.4
+
+ d3-timer@3.0.1: {}
+
+ d3-transition@3.0.1(d3-selection@3.0.0):
+ dependencies:
+ d3-color: 3.1.0
+ d3-dispatch: 3.0.1
+ d3-ease: 3.0.1
+ d3-interpolate: 3.0.1
+ d3-selection: 3.0.0
+ d3-timer: 3.0.1
+
+ d3-zoom@3.0.0:
+ dependencies:
+ d3-dispatch: 3.0.1
+ d3-drag: 3.0.0
+ d3-interpolate: 3.0.1
+ d3-selection: 3.0.0
+ d3-transition: 3.0.1(d3-selection@3.0.0)
+
+ d3@7.9.0:
+ dependencies:
+ d3-array: 3.2.4
+ d3-axis: 3.0.0
+ d3-brush: 3.0.0
+ d3-chord: 3.0.1
+ d3-color: 3.1.0
+ d3-contour: 4.0.2
+ d3-delaunay: 6.0.4
+ d3-dispatch: 3.0.1
+ d3-drag: 3.0.0
+ d3-dsv: 3.0.1
+ d3-ease: 3.0.1
+ d3-fetch: 3.0.1
+ d3-force: 3.0.0
+ d3-format: 3.1.2
+ d3-geo: 3.1.1
+ d3-hierarchy: 3.1.2
+ d3-interpolate: 3.0.1
+ d3-path: 3.1.0
+ d3-polygon: 3.0.1
+ d3-quadtree: 3.0.1
+ d3-random: 3.0.1
+ d3-scale: 4.0.2
+ d3-scale-chromatic: 3.1.0
+ d3-selection: 3.0.0
+ d3-shape: 3.2.0
+ d3-time: 3.1.0
+ d3-time-format: 4.1.0
+ d3-timer: 3.0.1
+ d3-transition: 3.0.1(d3-selection@3.0.0)
+ d3-zoom: 3.0.0
+
+ dagre-d3-es@7.0.13:
+ dependencies:
+ d3: 7.9.0
+ lodash-es: 4.17.23
+
+ dayjs@1.11.13: {}
+
+ dayjs@1.11.19: {}
+
+ debug@2.6.9:
+ dependencies:
+ ms: 2.0.0
+
+ debug@4.4.3:
+ dependencies:
+ ms: 2.1.3
+
+ decamelize@1.2.0: {}
+
+ decode-named-character-reference@1.3.0:
+ dependencies:
+ character-entities: 2.0.2
+
+ decode-uri-component@0.2.2: {}
+
+ define-data-property@1.1.4:
+ dependencies:
+ es-define-property: 1.0.1
+ es-errors: 1.3.0
+ gopd: 1.2.0
+
+ define-properties@1.2.1:
+ dependencies:
+ define-data-property: 1.1.4
+ has-property-descriptors: 1.0.2
+ object-keys: 1.1.1
+
+ defu@6.1.4: {}
+
+ delaunator@5.0.1:
+ dependencies:
+ robust-predicates: 3.0.2
+
+ delay@5.0.0: {}
+
+ delayed-stream@1.0.0: {}
+
+ depd@2.0.0: {}
+
+ dequal@2.0.3: {}
+
+ derive-valtio@0.1.0(valtio@1.13.2(@types/react@19.2.14)(react@19.2.4)):
+ dependencies:
+ valtio: 1.13.2(@types/react@19.2.14)(react@19.2.4)
+
+ des.js@1.1.0:
+ dependencies:
+ inherits: 2.0.4
+ minimalistic-assert: 1.0.1
+
+ destr@2.0.5: {}
+
+ destroy@1.2.0: {}
+
+ detect-browser@5.3.0: {}
+
+ detect-europe-js@0.1.2: {}
+
+ detect-gpu@5.0.70:
+ dependencies:
+ webgl-constants: 1.1.1
+
+ detect-libc@2.1.2: {}
+
+ detect-node-es@1.1.0: {}
+
+ devlop@1.1.0:
+ dependencies:
+ dequal: 2.0.3
+
+ diffie-hellman@5.0.3:
+ dependencies:
+ bn.js: 4.12.3
+ miller-rabin: 4.0.1
+ randombytes: 2.1.0
+
+ dijkstrajs@1.0.3: {}
+
+ dompurify@3.3.1:
+ optionalDependencies:
+ '@types/trusted-types': 2.0.7
+
+ draco3d@1.5.7: {}
+
+ draggabilly@3.0.0:
+ dependencies:
+ get-size: 3.0.0
+ unidragger: 3.0.1
+
+ dunder-proto@1.0.1:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-errors: 1.3.0
+ gopd: 1.2.0
+
+ duplexify@4.1.3:
+ dependencies:
+ end-of-stream: 1.4.5
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+ stream-shift: 1.0.3
+
+ ecdsa-sig-formatter@1.0.11:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ ee-first@1.1.1: {}
+
+ electron-to-chromium@1.5.302: {}
+
+ elliptic@6.6.1:
+ dependencies:
+ bn.js: 4.12.3
+ brorand: 1.1.0
+ hash.js: 1.1.7
+ hmac-drbg: 1.0.1
+ inherits: 2.0.4
+ minimalistic-assert: 1.0.1
+ minimalistic-crypto-utils: 1.0.1
+
+ emoji-regex@8.0.0: {}
+
+ encode-utf8@1.0.3: {}
+
+ encodeurl@1.0.2: {}
+
+ encodeurl@2.0.0: {}
+
+ end-of-stream@1.4.5:
+ dependencies:
+ once: 1.4.0
+
+ engine.io-client@6.6.4(bufferutil@4.1.0)(utf-8-validate@6.0.6):
+ dependencies:
+ '@socket.io/component-emitter': 3.1.2
+ debug: 4.4.3
+ engine.io-parser: 5.2.3
+ ws: 8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ xmlhttprequest-ssl: 2.1.2
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ engine.io-parser@5.2.3: {}
+
+ enhanced-resolve@5.19.0:
+ dependencies:
+ graceful-fs: 4.2.11
+ tapable: 2.3.0
+
+ error-stack-parser@2.1.4:
+ dependencies:
+ stackframe: 1.3.4
+
+ es-define-property@1.0.1: {}
+
+ es-errors@1.3.0: {}
+
+ es-object-atoms@1.1.1:
+ dependencies:
+ es-errors: 1.3.0
+
+ es-set-tostringtag@2.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ has-tostringtag: 1.0.2
+ hasown: 2.0.2
+
+ es-toolkit@1.33.0: {}
+
+ es6-promise@4.2.8: {}
+
+ es6-promisify@5.0.0:
+ dependencies:
+ es6-promise: 4.2.8
+
+ esast-util-from-estree@2.0.0:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ devlop: 1.1.0
+ estree-util-visit: 2.0.0
+ unist-util-position-from-estree: 2.0.0
+
+ esast-util-from-js@2.0.1:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ acorn: 8.16.0
+ esast-util-from-estree: 2.0.0
+ vfile-message: 4.0.3
+
+ esbuild@0.27.3:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.27.3
+ '@esbuild/android-arm': 0.27.3
+ '@esbuild/android-arm64': 0.27.3
+ '@esbuild/android-x64': 0.27.3
+ '@esbuild/darwin-arm64': 0.27.3
+ '@esbuild/darwin-x64': 0.27.3
+ '@esbuild/freebsd-arm64': 0.27.3
+ '@esbuild/freebsd-x64': 0.27.3
+ '@esbuild/linux-arm': 0.27.3
+ '@esbuild/linux-arm64': 0.27.3
+ '@esbuild/linux-ia32': 0.27.3
+ '@esbuild/linux-loong64': 0.27.3
+ '@esbuild/linux-mips64el': 0.27.3
+ '@esbuild/linux-ppc64': 0.27.3
+ '@esbuild/linux-riscv64': 0.27.3
+ '@esbuild/linux-s390x': 0.27.3
+ '@esbuild/linux-x64': 0.27.3
+ '@esbuild/netbsd-arm64': 0.27.3
+ '@esbuild/netbsd-x64': 0.27.3
+ '@esbuild/openbsd-arm64': 0.27.3
+ '@esbuild/openbsd-x64': 0.27.3
+ '@esbuild/openharmony-arm64': 0.27.3
+ '@esbuild/sunos-x64': 0.27.3
+ '@esbuild/win32-arm64': 0.27.3
+ '@esbuild/win32-ia32': 0.27.3
+ '@esbuild/win32-x64': 0.27.3
+
+ escalade@3.2.0: {}
+
+ escape-html@1.0.3: {}
+
+ escape-string-regexp@2.0.0: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ escape-string-regexp@5.0.0: {}
+
+ esprima@4.0.1: {}
+
+ estree-util-attach-comments@3.0.0:
+ dependencies:
+ '@types/estree': 1.0.8
+
+ estree-util-build-jsx@3.0.1:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ devlop: 1.1.0
+ estree-util-is-identifier-name: 3.0.0
+ estree-walker: 3.0.3
+
+ estree-util-is-identifier-name@3.0.0: {}
+
+ estree-util-scope@1.0.0:
+ dependencies:
+ '@types/estree': 1.0.8
+ devlop: 1.1.0
+
+ estree-util-to-js@2.0.0:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ astring: 1.9.0
+ source-map: 0.7.6
+
+ estree-util-visit@2.0.0:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/unist': 3.0.3
+
+ estree-walker@2.0.2: {}
+
+ estree-walker@3.0.3:
+ dependencies:
+ '@types/estree': 1.0.8
+
+ etag@1.8.1: {}
+
+ eth-rpc-errors@4.0.3:
+ dependencies:
+ fast-safe-stringify: 2.1.1
+
+ ethereum-cryptography@2.2.1:
+ dependencies:
+ '@noble/curves': 1.4.2
+ '@noble/hashes': 1.4.0
+ '@scure/bip32': 1.4.0
+ '@scure/bip39': 1.3.0
+
+ ethers@6.16.0(bufferutil@4.1.0)(utf-8-validate@6.0.6):
+ dependencies:
+ '@adraffy/ens-normalize': 1.10.1
+ '@noble/curves': 1.2.0
+ '@noble/hashes': 1.3.2
+ '@types/node': 22.7.5
+ aes-js: 4.0.0-beta.5
+ tslib: 2.7.0
+ ws: 8.17.1(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ ev-emitter@2.1.2: {}
+
+ event-target-shim@5.0.1: {}
+
+ eventemitter3@4.0.7: {}
+
+ eventemitter3@5.0.1: {}
+
+ eventemitter3@5.0.4: {}
+
+ events@3.3.0: {}
+
+ eventsource@2.0.2: {}
+
+ evp_bytestokey@1.0.3:
+ dependencies:
+ md5.js: 1.3.5
+ safe-buffer: 5.2.1
+
+ exenv@1.2.2: {}
+
+ exponential-backoff@3.1.3: {}
+
+ extend@3.0.2: {}
+
+ eyes@0.1.8: {}
+
+ fancy-canvas@2.1.0: {}
+
+ fast-deep-equal@3.1.3: {}
+
+ fast-json-stable-stringify@2.1.0: {}
+
+ fast-redact@3.5.0: {}
+
+ fast-safe-stringify@2.1.1: {}
+
+ fast-stable-stringify@1.0.0: {}
+
+ fastestsmallesttextencoderdecoder@1.0.22: {}
+
+ fb-dotslash@0.5.8: {}
+
+ fb-watchman@2.0.2:
+ dependencies:
+ bser: 2.1.1
+
+ fdir@6.5.0(picomatch@4.0.3):
+ optionalDependencies:
+ picomatch: 4.0.3
+
+ feaxios@0.0.23:
+ dependencies:
+ is-retry-allowed: 3.0.0
+
+ fflate@0.6.10: {}
+
+ fflate@0.8.2: {}
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ filter-obj@1.1.0: {}
+
+ finalhandler@1.1.2:
+ dependencies:
+ debug: 2.6.9
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ on-finished: 2.3.0
+ parseurl: 1.3.3
+ statuses: 1.5.0
+ unpipe: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ find-up@4.1.0:
+ dependencies:
+ locate-path: 5.0.0
+ path-exists: 4.0.0
+
+ flow-enums-runtime@0.0.6: {}
+
+ follow-redirects@1.15.11: {}
+
+ for-each@0.3.5:
+ dependencies:
+ is-callable: 1.2.7
+
+ form-data@4.0.5:
+ dependencies:
+ asynckit: 0.4.0
+ combined-stream: 1.0.8
+ es-set-tostringtag: 2.1.0
+ hasown: 2.0.2
+ mime-types: 2.1.35
+
+ fresh@0.5.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ function-bind@1.1.2: {}
+
+ generator-function@2.0.1: {}
+
+ gensync@1.0.0-beta.2: {}
+
+ get-caller-file@2.0.5: {}
+
+ get-intrinsic@1.3.0:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-define-property: 1.0.1
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.1
+ function-bind: 1.1.2
+ get-proto: 1.0.1
+ gopd: 1.2.0
+ has-symbols: 1.1.0
+ hasown: 2.0.2
+ math-intrinsics: 1.1.0
+
+ get-nonce@1.0.1: {}
+
+ get-package-type@0.1.0: {}
+
+ get-proto@1.0.1:
+ dependencies:
+ dunder-proto: 1.0.1
+ es-object-atoms: 1.1.1
+
+ get-size@3.0.0: {}
+
+ github-slugger@2.0.0: {}
+
+ glob@7.2.3:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.5
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ glsl-noise@0.0.0: {}
+
+ gopd@1.2.0: {}
+
+ graceful-fs@4.2.11: {}
+
+ gsap@3.14.2: {}
+
+ h3@1.15.9:
+ dependencies:
+ cookie-es: 1.2.2
+ crossws: 0.3.5
+ defu: 6.1.4
+ destr: 2.0.5
+ iron-webcrypto: 1.2.1
+ node-mock-http: 1.0.4
+ radix3: 1.1.2
+ ufo: 1.6.3
+ uncrypto: 0.1.3
+
+ hachure-fill@0.5.2: {}
+
+ has-flag@4.0.0: {}
+
+ has-property-descriptors@1.0.2:
+ dependencies:
+ es-define-property: 1.0.1
+
+ has-symbols@1.1.0: {}
+
+ has-tostringtag@1.0.2:
+ dependencies:
+ has-symbols: 1.1.0
+
+ hash-base@3.0.5:
+ dependencies:
+ inherits: 2.0.4
+ safe-buffer: 5.2.1
+
+ hash-base@3.1.2:
+ dependencies:
+ inherits: 2.0.4
+ readable-stream: 2.3.8
+ safe-buffer: 5.2.1
+ to-buffer: 1.2.2
+
+ hash.js@1.1.7:
+ dependencies:
+ inherits: 2.0.4
+ minimalistic-assert: 1.0.1
+
+ hasown@2.0.2:
+ dependencies:
+ function-bind: 1.1.2
+
+ hast-util-heading-rank@3.0.0:
+ dependencies:
+ '@types/hast': 3.0.4
+
+ hast-util-to-estree@3.1.3:
+ dependencies:
+ '@types/estree': 1.0.8
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.4
+ comma-separated-tokens: 2.0.3
+ devlop: 1.1.0
+ estree-util-attach-comments: 3.0.0
+ estree-util-is-identifier-name: 3.0.0
+ hast-util-whitespace: 3.0.0
+ mdast-util-mdx-expression: 2.0.1
+ mdast-util-mdx-jsx: 3.2.0
+ mdast-util-mdxjs-esm: 2.0.1
+ property-information: 7.1.0
+ space-separated-tokens: 2.0.2
+ style-to-js: 1.1.21
+ unist-util-position: 5.0.0
+ zwitch: 2.0.4
+ transitivePeerDependencies:
+ - supports-color
+
+ hast-util-to-html@9.0.5:
+ dependencies:
+ '@types/hast': 3.0.4
+ '@types/unist': 3.0.3
+ ccount: 2.0.1
+ comma-separated-tokens: 2.0.3
+ hast-util-whitespace: 3.0.0
+ html-void-elements: 3.0.0
+ mdast-util-to-hast: 13.2.1
+ property-information: 7.1.0
+ space-separated-tokens: 2.0.2
+ stringify-entities: 4.0.4
+ zwitch: 2.0.4
+
+ hast-util-to-jsx-runtime@2.3.6:
+ dependencies:
+ '@types/estree': 1.0.8
+ '@types/hast': 3.0.4
+ '@types/unist': 3.0.3
+ comma-separated-tokens: 2.0.3
+ devlop: 1.1.0
+ estree-util-is-identifier-name: 3.0.0
+ hast-util-whitespace: 3.0.0
+ mdast-util-mdx-expression: 2.0.1
+ mdast-util-mdx-jsx: 3.2.0
+ mdast-util-mdxjs-esm: 2.0.1
+ property-information: 7.1.0
+ space-separated-tokens: 2.0.2
+ style-to-js: 1.1.21
+ unist-util-position: 5.0.0
+ vfile-message: 4.0.3
+ transitivePeerDependencies:
+ - supports-color
+
+ hast-util-to-string@3.0.1:
+ dependencies:
+ '@types/hast': 3.0.4
+
+ hast-util-whitespace@3.0.0:
+ dependencies:
+ '@types/hast': 3.0.4
+
+ hermes-compiler@250829098.0.9: {}
+
+ hermes-estree@0.32.0: {}
+
+ hermes-estree@0.33.3: {}
+
+ hermes-parser@0.32.0:
+ dependencies:
+ hermes-estree: 0.32.0
+
+ hermes-parser@0.33.3:
+ dependencies:
+ hermes-estree: 0.33.3
+
+ hls.js@1.6.15: {}
+
+ hmac-drbg@1.0.1:
+ dependencies:
+ hash.js: 1.1.7
+ minimalistic-assert: 1.0.1
+ minimalistic-crypto-utils: 1.0.1
+
+ html-void-elements@3.0.0: {}
+
+ http-errors@2.0.1:
+ dependencies:
+ depd: 2.0.0
+ inherits: 2.0.4
+ setprototypeof: 1.2.0
+ statuses: 2.0.2
+ toidentifier: 1.0.1
+
+ https-proxy-agent@7.0.6:
+ dependencies:
+ agent-base: 7.1.4
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
+ humanize-ms@1.2.1:
+ dependencies:
+ ms: 2.1.3
+
+ iconv-lite@0.6.3:
+ dependencies:
+ safer-buffer: 2.1.2
+
+ idb-keyval@6.2.2: {}
+
+ ieee754@1.2.1: {}
+
+ image-size@1.2.1:
+ dependencies:
+ queue: 6.0.2
+
+ immediate@3.0.6: {}
+
+ imurmurhash@0.1.4: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ inline-style-parser@0.2.7: {}
+
+ int64-buffer@1.1.0: {}
+
+ internmap@1.0.1: {}
+
+ internmap@2.0.3: {}
+
+ invariant@2.2.4:
+ dependencies:
+ loose-envify: 1.4.0
+
+ ip-address@10.1.0: {}
+
+ iron-webcrypto@1.2.1: {}
+
+ is-alphabetical@2.0.1: {}
+
+ is-alphanumerical@2.0.1:
+ dependencies:
+ is-alphabetical: 2.0.1
+ is-decimal: 2.0.1
+
+ is-arguments@1.2.0:
+ dependencies:
+ call-bound: 1.0.4
+ has-tostringtag: 1.0.2
+
+ is-arrayish@0.3.4: {}
+
+ is-callable@1.2.7: {}
+
+ is-decimal@2.0.1: {}
+
+ is-docker@2.2.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-generator-function@1.1.2:
+ dependencies:
+ call-bound: 1.0.4
+ generator-function: 2.0.1
+ get-proto: 1.0.1
+ has-tostringtag: 1.0.2
+ safe-regex-test: 1.1.0
+
+ is-hexadecimal@2.0.1: {}
+
+ is-nan@1.3.2:
+ dependencies:
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0:
+ optional: true
+
+ is-plain-obj@4.1.0: {}
+
+ is-promise@2.2.2: {}
+
+ is-regex@1.2.1:
+ dependencies:
+ call-bound: 1.0.4
+ gopd: 1.2.0
+ has-tostringtag: 1.0.2
+ hasown: 2.0.2
+
+ is-retry-allowed@3.0.0: {}
+
+ is-standalone-pwa@0.1.1: {}
+
+ is-typed-array@1.1.15:
+ dependencies:
+ which-typed-array: 1.1.20
+
+ is-wsl@2.2.0:
+ dependencies:
+ is-docker: 2.2.1
+
+ isarray@1.0.0: {}
+
+ 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)
+
+ isows@1.0.6(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)):
+ dependencies:
+ ws: 8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+
+ isows@1.0.7(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)):
+ dependencies:
+ ws: 8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+
+ istanbul-lib-coverage@3.2.2: {}
+
+ istanbul-lib-instrument@5.2.1:
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/parser': 7.29.0
+ '@istanbuljs/schema': 0.1.3
+ istanbul-lib-coverage: 3.2.2
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ its-fine@2.0.0(@types/react@19.2.14)(react@19.2.4):
+ dependencies:
+ '@types/react-reconciler': 0.28.9(@types/react@19.2.14)
+ react: 19.2.4
+ 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
+ '@jest/fake-timers': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/node': 25.5.0
+ jest-mock: 29.7.0
+ jest-util: 29.7.0
+
+ jest-get-type@29.6.3: {}
+
+ jest-haste-map@29.7.0:
+ dependencies:
+ '@jest/types': 29.6.3
+ '@types/graceful-fs': 4.1.9
+ '@types/node': 25.5.0
+ anymatch: 3.1.3
+ fb-watchman: 2.0.2
+ graceful-fs: 4.2.11
+ jest-regex-util: 29.6.3
+ jest-util: 29.7.0
+ jest-worker: 29.7.0
+ micromatch: 4.0.8
+ walker: 1.0.8
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ jest-message-util@29.7.0:
+ dependencies:
+ '@babel/code-frame': 7.29.0
+ '@jest/types': 29.6.3
+ '@types/stack-utils': 2.0.3
+ chalk: 4.1.2
+ graceful-fs: 4.2.11
+ micromatch: 4.0.8
+ pretty-format: 29.7.0
+ slash: 3.0.0
+ stack-utils: 2.0.6
+
+ jest-mock@29.7.0:
+ dependencies:
+ '@jest/types': 29.6.3
+ '@types/node': 25.5.0
+ jest-util: 29.7.0
+
+ jest-regex-util@29.6.3: {}
+
+ jest-util@29.7.0:
+ dependencies:
+ '@jest/types': 29.6.3
+ '@types/node': 25.5.0
+ chalk: 4.1.2
+ ci-info: 3.9.0
+ graceful-fs: 4.2.11
+ picomatch: 2.3.1
+
+ jest-validate@29.7.0:
+ dependencies:
+ '@jest/types': 29.6.3
+ camelcase: 6.3.0
+ chalk: 4.1.2
+ jest-get-type: 29.6.3
+ leven: 3.1.0
+ pretty-format: 29.7.0
+
+ jest-worker@29.7.0:
+ dependencies:
+ '@types/node': 25.5.0
+ jest-util: 29.7.0
+ merge-stream: 2.0.0
+ supports-color: 8.1.1
+
+ jiti@2.6.1: {}
+
+ js-base64@3.7.8: {}
+
+ js-tokens@4.0.0: {}
+
+ js-yaml@3.14.2:
+ dependencies:
+ argparse: 1.0.10
+ esprima: 4.0.1
+
+ jsbi@3.2.5: {}
+
+ jsc-safe-url@0.2.4: {}
+
+ jsesc@3.1.0: {}
+
+ json-stable-stringify@1.3.0:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ isarray: 2.0.5
+ jsonify: 0.0.1
+ object-keys: 1.1.1
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@2.2.3: {}
+
+ jsonify@0.0.1: {}
+
+ jsqr@1.4.0: {}
+
+ jwa@2.0.1:
+ dependencies:
+ buffer-equal-constant-time: 1.0.1
+ ecdsa-sig-formatter: 1.0.11
+ safe-buffer: 5.2.1
+
+ jws@4.0.1:
+ dependencies:
+ jwa: 2.0.1
+ safe-buffer: 5.2.1
+
+ jwt-decode@4.0.0: {}
+
+ katex@0.16.33:
+ dependencies:
+ commander: 8.3.0
+
+ keyvaluestorage-interface@1.0.0: {}
+
+ khroma@2.1.0: {}
+
+ langium@4.2.1:
+ dependencies:
+ chevrotain: 11.1.1
+ chevrotain-allstar: 0.3.1(chevrotain@11.1.1)
+ vscode-languageserver: 9.0.1
+ vscode-languageserver-textdocument: 1.0.12
+ vscode-uri: 3.1.0
+
+ layout-base@1.0.2: {}
+
+ layout-base@2.0.1: {}
+
+ leven@3.1.0: {}
+
+ lie@3.3.0:
+ dependencies:
+ immediate: 3.0.6
+
+ lighthouse-logger@1.4.2:
+ dependencies:
+ debug: 2.6.9
+ marky: 1.3.0
+ transitivePeerDependencies:
+ - supports-color
+
+ lightningcss-android-arm64@1.31.1:
+ optional: true
+
+ lightningcss-darwin-arm64@1.31.1:
+ optional: true
+
+ lightningcss-darwin-x64@1.31.1:
+ optional: true
+
+ lightningcss-freebsd-x64@1.31.1:
+ optional: true
+
+ lightningcss-linux-arm-gnueabihf@1.31.1:
+ optional: true
+
+ lightningcss-linux-arm64-gnu@1.31.1:
+ optional: true
+
+ lightningcss-linux-arm64-musl@1.31.1:
+ optional: true
+
+ lightningcss-linux-x64-gnu@1.31.1:
+ optional: true
+
+ lightningcss-linux-x64-musl@1.31.1:
+ optional: true
+
+ lightningcss-win32-arm64-msvc@1.31.1:
+ optional: true
+
+ lightningcss-win32-x64-msvc@1.31.1:
+ optional: true
+
+ lightningcss@1.31.1:
+ dependencies:
+ detect-libc: 2.1.2
+ optionalDependencies:
+ lightningcss-android-arm64: 1.31.1
+ lightningcss-darwin-arm64: 1.31.1
+ lightningcss-darwin-x64: 1.31.1
+ lightningcss-freebsd-x64: 1.31.1
+ lightningcss-linux-arm-gnueabihf: 1.31.1
+ lightningcss-linux-arm64-gnu: 1.31.1
+ lightningcss-linux-arm64-musl: 1.31.1
+ lightningcss-linux-x64-gnu: 1.31.1
+ lightningcss-linux-x64-musl: 1.31.1
+ lightningcss-win32-arm64-msvc: 1.31.1
+ lightningcss-win32-x64-msvc: 1.31.1
+
+ lightweight-charts@5.1.0:
+ dependencies:
+ fancy-canvas: 2.1.0
+
+ lit-element@4.2.2:
+ dependencies:
+ '@lit-labs/ssr-dom-shim': 1.5.1
+ '@lit/reactive-element': 2.1.2
+ lit-html: 3.3.2
+
+ lit-html@3.3.2:
+ dependencies:
+ '@types/trusted-types': 2.0.7
+
+ lit@3.1.0:
+ dependencies:
+ '@lit/reactive-element': 2.1.2
+ lit-element: 4.2.2
+ lit-html: 3.3.2
+
+ locate-path@5.0.0:
+ dependencies:
+ p-locate: 4.1.0
+
+ lodash-es@4.17.23: {}
+
+ lodash.isequal@4.5.0: {}
+
+ lodash.merge@4.6.2: {}
+
+ lodash.throttle@4.1.1: {}
+
+ lodash@4.17.21: {}
+
+ loglevel@1.9.2: {}
+
+ long@5.2.5: {}
+
+ longest-streak@3.1.0: {}
+
+ loose-envify@1.4.0:
+ dependencies:
+ js-tokens: 4.0.0
+
+ lru-cache@11.2.7: {}
+
+ lru-cache@5.1.1:
+ dependencies:
+ yallist: 3.1.1
+
+ lucide-react@0.511.0(react@19.2.4):
+ dependencies:
+ react: 19.2.4
+
+ maath@0.10.8(@types/three@0.183.1)(three@0.183.2):
+ dependencies:
+ '@types/three': 0.183.1
+ three: 0.183.2
+
+ magic-string@0.30.21:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ makeerror@1.0.12:
+ dependencies:
+ tmpl: 1.0.5
+
+ markdown-extensions@2.0.0: {}
+
+ markdown-table@3.0.4: {}
+
+ marked@16.4.2: {}
+
+ marky@1.3.0: {}
+
+ math-intrinsics@1.1.0: {}
+
+ md5.js@1.3.5:
+ dependencies:
+ hash-base: 3.0.5
+ inherits: 2.0.4
+ safe-buffer: 5.2.1
+
+ mdast-util-find-and-replace@3.0.2:
+ dependencies:
+ '@types/mdast': 4.0.4
+ escape-string-regexp: 5.0.0
+ unist-util-is: 6.0.1
+ unist-util-visit-parents: 6.0.2
+
+ mdast-util-from-markdown@2.0.3:
+ dependencies:
+ '@types/mdast': 4.0.4
+ '@types/unist': 3.0.3
+ decode-named-character-reference: 1.3.0
+ devlop: 1.1.0
+ mdast-util-to-string: 4.0.0
+ micromark: 4.0.2
+ micromark-util-decode-numeric-character-reference: 2.0.2
+ micromark-util-decode-string: 2.0.1
+ micromark-util-normalize-identifier: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+ unist-util-stringify-position: 4.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-gfm-autolink-literal@2.0.1:
+ dependencies:
+ '@types/mdast': 4.0.4
+ ccount: 2.0.1
+ devlop: 1.1.0
+ mdast-util-find-and-replace: 3.0.2
+ micromark-util-character: 2.1.1
+
+ mdast-util-gfm-footnote@2.1.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.0.3
+ mdast-util-to-markdown: 2.1.2
+ micromark-util-normalize-identifier: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-gfm-strikethrough@2.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ mdast-util-from-markdown: 2.0.3
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-gfm-table@2.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ markdown-table: 3.0.4
+ mdast-util-from-markdown: 2.0.3
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-gfm-task-list-item@2.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.0.3
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-gfm@3.1.0:
+ dependencies:
+ mdast-util-from-markdown: 2.0.3
+ mdast-util-gfm-autolink-literal: 2.0.1
+ mdast-util-gfm-footnote: 2.1.0
+ mdast-util-gfm-strikethrough: 2.0.0
+ mdast-util-gfm-table: 2.0.0
+ mdast-util-gfm-task-list-item: 2.0.0
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-mdx-expression@2.0.1:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.0.3
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-mdx-jsx@3.2.0:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.4
+ '@types/unist': 3.0.3
+ ccount: 2.0.1
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.0.3
+ mdast-util-to-markdown: 2.1.2
+ parse-entities: 4.0.2
+ stringify-entities: 4.0.4
+ unist-util-stringify-position: 4.0.0
+ vfile-message: 4.0.3
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-mdx@3.0.0:
+ dependencies:
+ mdast-util-from-markdown: 2.0.3
+ mdast-util-mdx-expression: 2.0.1
+ mdast-util-mdx-jsx: 3.2.0
+ mdast-util-mdxjs-esm: 2.0.1
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-mdxjs-esm@2.0.1:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.0.3
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-phrasing@4.1.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ unist-util-is: 6.0.1
+
+ mdast-util-to-hast@13.2.1:
+ dependencies:
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.4
+ '@ungap/structured-clone': 1.3.0
+ devlop: 1.1.0
+ micromark-util-sanitize-uri: 2.0.1
+ trim-lines: 3.0.1
+ unist-util-position: 5.0.0
+ unist-util-visit: 5.1.0
+ vfile: 6.0.3
+
+ mdast-util-to-markdown@2.1.2:
+ dependencies:
+ '@types/mdast': 4.0.4
+ '@types/unist': 3.0.3
+ longest-streak: 3.1.0
+ mdast-util-phrasing: 4.1.0
+ mdast-util-to-string: 4.0.0
+ micromark-util-classify-character: 2.0.1
+ micromark-util-decode-string: 2.0.1
+ unist-util-visit: 5.1.0
+ zwitch: 2.0.4
+
+ mdast-util-to-string@4.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+
+ memoize-one@5.2.1: {}
+
+ merge-options@3.0.4:
+ dependencies:
+ is-plain-obj: 2.1.0
+ optional: true
+
+ merge-stream@2.0.0: {}
+
+ mermaid@11.12.3:
+ dependencies:
+ '@braintree/sanitize-url': 7.1.2
+ '@iconify/utils': 3.1.0
+ '@mermaid-js/parser': 1.0.0
+ '@types/d3': 7.4.3
+ cytoscape: 3.33.1
+ cytoscape-cose-bilkent: 4.1.0(cytoscape@3.33.1)
+ cytoscape-fcose: 2.2.0(cytoscape@3.33.1)
+ d3: 7.9.0
+ d3-sankey: 0.12.3
+ dagre-d3-es: 7.0.13
+ dayjs: 1.11.19
+ dompurify: 3.3.1
+ katex: 0.16.33
+ khroma: 2.1.0
+ lodash-es: 4.17.23
+ marked: 16.4.2
+ roughjs: 4.6.6
+ stylis: 4.3.6
+ ts-dedent: 2.2.0
+ uuid: 11.1.0
+
+ meshline@3.3.1(three@0.183.2):
+ dependencies:
+ three: 0.183.2
+
+ meshoptimizer@1.0.1: {}
+
+ metro-babel-transformer@0.83.5:
+ dependencies:
+ '@babel/core': 7.29.0
+ flow-enums-runtime: 0.0.6
+ hermes-parser: 0.33.3
+ nullthrows: 1.1.1
+ transitivePeerDependencies:
+ - supports-color
+
+ metro-cache-key@0.83.5:
+ dependencies:
+ flow-enums-runtime: 0.0.6
+
+ metro-cache@0.83.5:
+ dependencies:
+ exponential-backoff: 3.1.3
+ flow-enums-runtime: 0.0.6
+ https-proxy-agent: 7.0.6
+ metro-core: 0.83.5
+ transitivePeerDependencies:
+ - supports-color
+
+ metro-config@0.83.5(bufferutil@4.1.0)(utf-8-validate@6.0.6):
+ dependencies:
+ connect: 3.7.0
+ flow-enums-runtime: 0.0.6
+ jest-validate: 29.7.0
+ metro: 0.83.5(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ metro-cache: 0.83.5
+ metro-core: 0.83.5
+ metro-runtime: 0.83.5
+ yaml: 2.8.2
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ metro-core@0.83.5:
+ dependencies:
+ flow-enums-runtime: 0.0.6
+ lodash.throttle: 4.1.1
+ metro-resolver: 0.83.5
+
+ metro-file-map@0.83.5:
+ dependencies:
+ debug: 4.4.3
+ fb-watchman: 2.0.2
+ flow-enums-runtime: 0.0.6
+ graceful-fs: 4.2.11
+ invariant: 2.2.4
+ jest-worker: 29.7.0
+ micromatch: 4.0.8
+ nullthrows: 1.1.1
+ walker: 1.0.8
+ transitivePeerDependencies:
+ - supports-color
+
+ metro-minify-terser@0.83.5:
+ dependencies:
+ flow-enums-runtime: 0.0.6
+ terser: 5.46.1
+
+ metro-resolver@0.83.5:
+ dependencies:
+ flow-enums-runtime: 0.0.6
+
+ metro-runtime@0.83.5:
+ dependencies:
+ '@babel/runtime': 7.29.2
+ flow-enums-runtime: 0.0.6
+
+ metro-source-map@0.83.5:
+ dependencies:
+ '@babel/traverse': 7.29.0
+ '@babel/types': 7.29.0
+ flow-enums-runtime: 0.0.6
+ invariant: 2.2.4
+ metro-symbolicate: 0.83.5
+ nullthrows: 1.1.1
+ ob1: 0.83.5
+ source-map: 0.5.7
+ vlq: 1.0.1
+ transitivePeerDependencies:
+ - supports-color
+
+ metro-symbolicate@0.83.5:
+ dependencies:
+ flow-enums-runtime: 0.0.6
+ invariant: 2.2.4
+ metro-source-map: 0.83.5
+ nullthrows: 1.1.1
+ source-map: 0.5.7
+ vlq: 1.0.1
+ transitivePeerDependencies:
+ - supports-color
+
+ metro-transform-plugins@0.83.5:
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/generator': 7.29.1
+ '@babel/template': 7.28.6
+ '@babel/traverse': 7.29.0
+ flow-enums-runtime: 0.0.6
+ nullthrows: 1.1.1
+ transitivePeerDependencies:
+ - supports-color
+
+ metro-transform-worker@0.83.5(bufferutil@4.1.0)(utf-8-validate@6.0.6):
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/generator': 7.29.1
+ '@babel/parser': 7.29.0
+ '@babel/types': 7.29.0
+ flow-enums-runtime: 0.0.6
+ metro: 0.83.5(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ metro-babel-transformer: 0.83.5
+ metro-cache: 0.83.5
+ metro-cache-key: 0.83.5
+ metro-minify-terser: 0.83.5
+ metro-source-map: 0.83.5
+ metro-transform-plugins: 0.83.5
+ nullthrows: 1.1.1
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ metro@0.83.5(bufferutil@4.1.0)(utf-8-validate@6.0.6):
+ dependencies:
+ '@babel/code-frame': 7.29.0
+ '@babel/core': 7.29.0
+ '@babel/generator': 7.29.1
+ '@babel/parser': 7.29.0
+ '@babel/template': 7.28.6
+ '@babel/traverse': 7.29.0
+ '@babel/types': 7.29.0
+ accepts: 2.0.0
+ chalk: 4.1.2
+ ci-info: 2.0.0
+ connect: 3.7.0
+ debug: 4.4.3
+ error-stack-parser: 2.1.4
+ flow-enums-runtime: 0.0.6
+ graceful-fs: 4.2.11
+ hermes-parser: 0.33.3
+ image-size: 1.2.1
+ invariant: 2.2.4
+ jest-worker: 29.7.0
+ jsc-safe-url: 0.2.4
+ lodash.throttle: 4.1.1
+ metro-babel-transformer: 0.83.5
+ metro-cache: 0.83.5
+ metro-cache-key: 0.83.5
+ metro-config: 0.83.5(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ metro-core: 0.83.5
+ metro-file-map: 0.83.5
+ metro-resolver: 0.83.5
+ metro-runtime: 0.83.5
+ metro-source-map: 0.83.5
+ metro-symbolicate: 0.83.5
+ metro-transform-plugins: 0.83.5
+ metro-transform-worker: 0.83.5(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ mime-types: 3.0.2
+ nullthrows: 1.1.1
+ serialize-error: 2.1.0
+ source-map: 0.5.7
+ throat: 5.0.0
+ ws: 7.5.10(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ yargs: 17.7.2
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ micromark-core-commonmark@2.0.3:
+ dependencies:
+ decode-named-character-reference: 1.3.0
+ devlop: 1.1.0
+ micromark-factory-destination: 2.0.1
+ micromark-factory-label: 2.0.1
+ micromark-factory-space: 2.0.1
+ micromark-factory-title: 2.0.1
+ micromark-factory-whitespace: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-chunked: 2.0.1
+ micromark-util-classify-character: 2.0.1
+ micromark-util-html-tag-name: 2.0.1
+ micromark-util-normalize-identifier: 2.0.1
+ micromark-util-resolve-all: 2.0.1
+ micromark-util-subtokenize: 2.1.0
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-extension-gfm-autolink-literal@2.1.0:
+ dependencies:
+ micromark-util-character: 2.1.1
+ micromark-util-sanitize-uri: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-extension-gfm-footnote@2.1.0:
+ dependencies:
+ devlop: 1.1.0
+ micromark-core-commonmark: 2.0.3
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-normalize-identifier: 2.0.1
+ micromark-util-sanitize-uri: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-extension-gfm-strikethrough@2.1.0:
+ dependencies:
+ devlop: 1.1.0
+ micromark-util-chunked: 2.0.1
+ micromark-util-classify-character: 2.0.1
+ micromark-util-resolve-all: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-extension-gfm-table@2.1.1:
+ dependencies:
+ devlop: 1.1.0
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-extension-gfm-tagfilter@2.0.0:
+ dependencies:
+ micromark-util-types: 2.0.2
+
+ micromark-extension-gfm-task-list-item@2.1.0:
+ dependencies:
+ devlop: 1.1.0
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-extension-gfm@3.0.0:
+ dependencies:
+ micromark-extension-gfm-autolink-literal: 2.1.0
+ micromark-extension-gfm-footnote: 2.1.0
+ micromark-extension-gfm-strikethrough: 2.1.0
+ micromark-extension-gfm-table: 2.1.1
+ micromark-extension-gfm-tagfilter: 2.0.0
+ micromark-extension-gfm-task-list-item: 2.1.0
+ micromark-util-combine-extensions: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-extension-mdx-expression@3.0.1:
+ dependencies:
+ '@types/estree': 1.0.8
+ devlop: 1.1.0
+ micromark-factory-mdx-expression: 2.0.3
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-events-to-acorn: 2.0.3
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-extension-mdx-jsx@3.0.2:
+ dependencies:
+ '@types/estree': 1.0.8
+ devlop: 1.1.0
+ estree-util-is-identifier-name: 3.0.0
+ micromark-factory-mdx-expression: 2.0.3
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-events-to-acorn: 2.0.3
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+ vfile-message: 4.0.3
+
+ micromark-extension-mdx-md@2.0.0:
+ dependencies:
+ micromark-util-types: 2.0.2
+
+ micromark-extension-mdxjs-esm@3.0.0:
+ dependencies:
+ '@types/estree': 1.0.8
+ devlop: 1.1.0
+ micromark-core-commonmark: 2.0.3
+ micromark-util-character: 2.1.1
+ micromark-util-events-to-acorn: 2.0.3
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+ unist-util-position-from-estree: 2.0.0
+ vfile-message: 4.0.3
+
+ micromark-extension-mdxjs@3.0.0:
+ dependencies:
+ acorn: 8.16.0
+ acorn-jsx: 5.3.2(acorn@8.16.0)
+ micromark-extension-mdx-expression: 3.0.1
+ micromark-extension-mdx-jsx: 3.0.2
+ micromark-extension-mdx-md: 2.0.0
+ micromark-extension-mdxjs-esm: 3.0.0
+ micromark-util-combine-extensions: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-factory-destination@2.0.1:
+ dependencies:
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-factory-label@2.0.1:
+ dependencies:
+ devlop: 1.1.0
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-factory-mdx-expression@2.0.3:
+ dependencies:
+ '@types/estree': 1.0.8
+ devlop: 1.1.0
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-events-to-acorn: 2.0.3
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+ unist-util-position-from-estree: 2.0.0
+ vfile-message: 4.0.3
+
+ micromark-factory-space@2.0.1:
+ dependencies:
+ micromark-util-character: 2.1.1
+ micromark-util-types: 2.0.2
+
+ micromark-factory-title@2.0.1:
+ dependencies:
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-factory-whitespace@2.0.1:
+ dependencies:
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-util-character@2.1.1:
+ dependencies:
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-util-chunked@2.0.1:
+ dependencies:
+ micromark-util-symbol: 2.0.1
+
+ micromark-util-classify-character@2.0.1:
+ dependencies:
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-util-combine-extensions@2.0.1:
+ dependencies:
+ micromark-util-chunked: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-util-decode-numeric-character-reference@2.0.2:
+ dependencies:
+ micromark-util-symbol: 2.0.1
+
+ micromark-util-decode-string@2.0.1:
+ dependencies:
+ decode-named-character-reference: 1.3.0
+ micromark-util-character: 2.1.1
+ micromark-util-decode-numeric-character-reference: 2.0.2
+ micromark-util-symbol: 2.0.1
+
+ micromark-util-encode@2.0.1: {}
+
+ micromark-util-events-to-acorn@2.0.3:
+ dependencies:
+ '@types/estree': 1.0.8
+ '@types/unist': 3.0.3
+ devlop: 1.1.0
+ estree-util-visit: 2.0.0
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+ vfile-message: 4.0.3
+
+ micromark-util-html-tag-name@2.0.1: {}
+
+ micromark-util-normalize-identifier@2.0.1:
+ dependencies:
+ micromark-util-symbol: 2.0.1
+
+ micromark-util-resolve-all@2.0.1:
+ dependencies:
+ micromark-util-types: 2.0.2
+
+ micromark-util-sanitize-uri@2.0.1:
+ dependencies:
+ micromark-util-character: 2.1.1
+ micromark-util-encode: 2.0.1
+ micromark-util-symbol: 2.0.1
+
+ micromark-util-subtokenize@2.1.0:
+ dependencies:
+ devlop: 1.1.0
+ micromark-util-chunked: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-util-symbol@2.0.1: {}
+
+ micromark-util-types@2.0.2: {}
+
+ micromark@4.0.2:
+ dependencies:
+ '@types/debug': 4.1.12
+ debug: 4.4.3
+ decode-named-character-reference: 1.3.0
+ devlop: 1.1.0
+ micromark-core-commonmark: 2.0.3
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-chunked: 2.0.1
+ micromark-util-combine-extensions: 2.0.1
+ micromark-util-decode-numeric-character-reference: 2.0.2
+ micromark-util-encode: 2.0.1
+ micromark-util-normalize-identifier: 2.0.1
+ micromark-util-resolve-all: 2.0.1
+ micromark-util-sanitize-uri: 2.0.1
+ micromark-util-subtokenize: 2.1.0
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+ transitivePeerDependencies:
+ - supports-color
+
+ micromatch@4.0.8:
+ dependencies:
+ braces: 3.0.3
+ picomatch: 2.3.1
+
+ miller-rabin@4.0.1:
+ dependencies:
+ bn.js: 4.12.3
+ brorand: 1.1.0
+
+ mime-db@1.52.0: {}
+
+ mime-db@1.54.0: {}
+
+ mime-types@2.1.35:
+ dependencies:
+ mime-db: 1.52.0
+
+ mime-types@3.0.2:
+ dependencies:
+ mime-db: 1.54.0
+
+ mime@1.6.0: {}
+
+ minimalistic-assert@1.0.1: {}
+
+ minimalistic-crypto-utils@1.0.1: {}
+
+ minimatch@3.1.5:
+ dependencies:
+ brace-expansion: 1.1.12
+
+ mkdirp@1.0.4: {}
+
+ mlly@1.8.0:
+ dependencies:
+ acorn: 8.16.0
+ pathe: 2.0.3
+ pkg-types: 1.3.1
+ ufo: 1.6.3
+
+ ms@2.0.0: {}
+
+ ms@2.1.3: {}
+
+ multiformats@9.9.0: {}
+
+ nan@2.26.2: {}
+
+ nanoid@3.3.11: {}
+
+ negotiator@1.0.0: {}
+
+ node-addon-api@3.2.1: {}
+
+ node-addon-api@8.6.0: {}
+
+ node-fetch-native@1.6.7: {}
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-gyp-build@4.8.4: {}
+
+ node-int64@0.4.0: {}
+
+ node-mock-http@1.0.4: {}
+
+ node-releases@2.0.27: {}
+
+ nofilter@3.1.0: {}
+
+ normalize-path@3.0.0: {}
+
+ nullthrows@1.1.1: {}
+
+ ob1@0.83.5:
+ dependencies:
+ flow-enums-runtime: 0.0.6
+
+ object-assign@4.1.1: {}
+
+ object-is@1.1.6:
+ dependencies:
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+
+ object-keys@1.1.1: {}
+
+ object.assign@4.1.7:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-properties: 1.2.1
+ es-object-atoms: 1.1.1
+ has-symbols: 1.1.0
+ object-keys: 1.1.1
+
+ oblivious-set@1.4.0: {}
+
+ ofetch@1.5.1:
+ dependencies:
+ destr: 2.0.5
+ node-fetch-native: 1.6.7
+ ufo: 1.6.3
+
+ on-exit-leak-free@0.2.0: {}
+
+ on-finished@2.3.0:
+ dependencies:
+ ee-first: 1.1.1
+
+ on-finished@2.4.1:
+ dependencies:
+ ee-first: 1.1.1
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ oniguruma-parser@0.12.1: {}
+
+ oniguruma-to-es@4.3.4:
+ dependencies:
+ oniguruma-parser: 0.12.1
+ regex: 6.1.0
+ regex-recursion: 6.0.2
+
+ open@7.4.2:
+ dependencies:
+ is-docker: 2.2.1
+ is-wsl: 2.2.0
+
+ ox@0.14.5(typescript@5.9.3)(zod@3.22.4):
+ dependencies:
+ '@adraffy/ens-normalize': 1.11.1
+ '@noble/ciphers': 1.3.0
+ '@noble/curves': 1.9.1
+ '@noble/hashes': 1.8.0
+ '@scure/bip32': 1.7.0
+ '@scure/bip39': 1.6.0
+ abitype: 1.2.3(typescript@5.9.3)(zod@3.22.4)
+ eventemitter3: 5.0.1
+ optionalDependencies:
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - zod
+
+ ox@0.6.7(typescript@5.9.3)(zod@3.22.4):
+ dependencies:
+ '@adraffy/ens-normalize': 1.11.1
+ '@noble/curves': 1.8.1
+ '@noble/hashes': 1.7.1
+ '@scure/bip32': 1.6.2
+ '@scure/bip39': 1.5.4
+ abitype: 1.0.8(typescript@5.9.3)(zod@3.22.4)
+ eventemitter3: 5.0.1
+ optionalDependencies:
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - zod
+
+ p-limit@2.3.0:
+ dependencies:
+ p-try: 2.2.0
+
+ p-locate@4.1.0:
+ dependencies:
+ p-limit: 2.3.0
+
+ p-try@2.2.0: {}
+
+ package-manager-detector@1.6.0: {}
+
+ parse-asn1@5.1.9:
+ dependencies:
+ asn1.js: 4.10.1
+ browserify-aes: 1.2.0
+ evp_bytestokey: 1.0.3
+ pbkdf2: 3.1.5
+ safe-buffer: 5.2.1
+
+ parse-entities@4.0.2:
+ dependencies:
+ '@types/unist': 2.0.11
+ character-entities-legacy: 3.0.0
+ character-reference-invalid: 2.0.1
+ decode-named-character-reference: 1.3.0
+ is-alphanumerical: 2.0.1
+ is-decimal: 2.0.1
+ is-hexadecimal: 2.0.1
+
+ parseurl@1.3.3: {}
+
+ path-data-parser@0.1.0: {}
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ path-key@3.1.1: {}
+
+ pathe@2.0.3: {}
+
+ pbkdf2@3.1.5:
+ dependencies:
+ create-hash: 1.2.0
+ create-hmac: 1.1.7
+ ripemd160: 2.0.3
+ safe-buffer: 5.2.1
+ sha.js: 2.4.12
+ to-buffer: 1.2.2
+
+ picocolors@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ picomatch@4.0.3: {}
+
+ pino-abstract-transport@0.5.0:
+ dependencies:
+ duplexify: 4.1.3
+ split2: 4.2.0
+
+ pino-std-serializers@4.0.0: {}
+
+ pino@7.11.0:
+ dependencies:
+ atomic-sleep: 1.0.0
+ fast-redact: 3.5.0
+ on-exit-leak-free: 0.2.0
+ pino-abstract-transport: 0.5.0
+ pino-std-serializers: 4.0.0
+ process-warning: 1.0.0
+ quick-format-unescaped: 4.0.4
+ real-require: 0.1.0
+ safe-stable-stringify: 2.5.0
+ sonic-boom: 2.8.0
+ thread-stream: 0.15.2
+
+ pirates@4.0.7: {}
+
+ pkg-types@1.3.1:
+ dependencies:
+ confbox: 0.1.8
+ mlly: 1.8.0
+ pathe: 2.0.3
+
+ pngjs@5.0.0: {}
+
+ points-on-curve@0.2.0: {}
+
+ points-on-path@0.2.1:
+ dependencies:
+ path-data-parser: 0.1.0
+ points-on-curve: 0.2.0
+
+ possible-typed-array-names@1.1.0: {}
+
+ postcss@8.5.6:
+ dependencies:
+ nanoid: 3.3.11
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+
+ potpack@1.0.2: {}
+
+ pretty-format@29.7.0:
+ dependencies:
+ '@jest/schemas': 29.6.3
+ ansi-styles: 5.2.0
+ react-is: 18.3.1
+
+ process-nextick-args@2.0.1: {}
+
+ process-warning@1.0.0: {}
+
+ process@0.11.10: {}
+
+ promise-worker-transferable@1.0.4:
+ dependencies:
+ is-promise: 2.2.2
+ lie: 3.3.0
+
+ promise@8.3.0:
+ dependencies:
+ asap: 2.0.6
+
+ prop-types@15.8.1:
+ dependencies:
+ loose-envify: 1.4.0
+ object-assign: 4.1.1
+ react-is: 16.13.1
+
+ property-information@7.1.0: {}
+
+ protobufjs@7.4.0:
+ 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': 25.5.0
+ long: 5.2.5
+
+ proxy-compare@2.6.0: {}
+
+ proxy-from-env@1.1.0: {}
+
+ public-encrypt@4.0.3:
+ dependencies:
+ bn.js: 4.12.3
+ browserify-rsa: 4.1.1
+ create-hash: 1.2.0
+ parse-asn1: 5.1.9
+ randombytes: 2.1.0
+ safe-buffer: 5.2.1
+
+ pump@3.0.4:
+ dependencies:
+ end-of-stream: 1.4.5
+ once: 1.4.0
+
+ pushdata-bitcoin@1.0.1:
+ dependencies:
+ bitcoin-ops: 1.4.1
+
+ qr.js@0.0.0: {}
+
+ qrcode.react@1.0.1(react@19.2.4):
+ dependencies:
+ loose-envify: 1.4.0
+ prop-types: 15.8.1
+ qr.js: 0.0.0
+ react: 19.2.4
+
+ qrcode@1.5.3:
+ dependencies:
+ dijkstrajs: 1.0.3
+ encode-utf8: 1.0.3
+ pngjs: 5.0.0
+ yargs: 15.4.1
+
+ qrcode@1.5.4:
+ dependencies:
+ dijkstrajs: 1.0.3
+ pngjs: 5.0.0
+ yargs: 15.4.1
+
+ query-string@7.1.3:
+ dependencies:
+ decode-uri-component: 0.2.2
+ filter-obj: 1.1.0
+ split-on-first: 1.1.0
+ strict-uri-encode: 2.0.0
+
+ queue@6.0.2:
+ dependencies:
+ inherits: 2.0.4
+
+ quick-format-unescaped@4.0.4: {}
+
+ radix3@1.1.2: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ randomfill@1.0.4:
+ dependencies:
+ randombytes: 2.1.0
+ safe-buffer: 5.2.1
+
+ range-parser@1.2.1: {}
+
+ react-devtools-core@6.1.5(bufferutil@4.1.0)(utf-8-validate@6.0.6):
+ dependencies:
+ shell-quote: 1.8.3
+ ws: 7.5.10(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ react-dom@19.2.4(react@19.2.4):
+ dependencies:
+ react: 19.2.4
+ scheduler: 0.27.0
+
+ react-is@16.13.1: {}
+
+ react-is@18.3.1: {}
+
+ react-lifecycles-compat@3.0.4: {}
+
+ react-modal@3.16.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4):
+ dependencies:
+ exenv: 1.2.2
+ prop-types: 15.8.1
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ react-lifecycles-compat: 3.0.4
+ warning: 4.0.3
+
+ react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6):
+ dependencies:
+ '@jest/create-cache-key-function': 29.7.0
+ '@react-native/assets-registry': 0.84.1
+ '@react-native/codegen': 0.84.1(@babel/core@7.29.0)
+ '@react-native/community-cli-plugin': 0.84.1(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ '@react-native/gradle-plugin': 0.84.1
+ '@react-native/js-polyfills': 0.84.1
+ '@react-native/normalize-colors': 0.84.1
+ '@react-native/virtualized-lists': 0.84.1(@types/react@19.2.14)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(react@19.2.4)
+ abort-controller: 3.0.0
+ anser: 1.4.10
+ ansi-regex: 5.0.1
+ babel-jest: 29.7.0(@babel/core@7.29.0)
+ babel-plugin-syntax-hermes-parser: 0.32.0
+ base64-js: 1.5.1
+ commander: 12.1.0
+ flow-enums-runtime: 0.0.6
+ hermes-compiler: 250829098.0.9
+ invariant: 2.2.4
+ jest-environment-node: 29.7.0
+ memoize-one: 5.2.1
+ metro-runtime: 0.83.5
+ metro-source-map: 0.83.5
+ nullthrows: 1.1.1
+ pretty-format: 29.7.0
+ promise: 8.3.0
+ react: 19.2.4
+ react-devtools-core: 6.1.5(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ react-refresh: 0.14.2
+ regenerator-runtime: 0.13.11
+ scheduler: 0.27.0
+ semver: 7.7.4
+ stacktrace-parser: 0.1.11
+ tinyglobby: 0.2.15
+ whatwg-fetch: 3.6.20
+ ws: 7.5.10(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ yargs: 17.7.2
+ optionalDependencies:
+ '@types/react': 19.2.14
+ transitivePeerDependencies:
+ - '@babel/core'
+ - '@react-native-community/cli'
+ - '@react-native/metro-config'
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ react-qr-reader@2.2.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4):
+ dependencies:
+ jsqr: 1.4.0
+ prop-types: 15.8.1
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ webrtc-adapter: 7.7.1
+
+ react-refresh@0.14.2: {}
+
+ react-refresh@0.17.0: {}
+
+ react-remove-scroll-bar@2.3.8(@types/react@19.2.14)(react@19.2.4):
+ dependencies:
+ react: 19.2.4
+ react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.4)
+ tslib: 2.8.1
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ react-remove-scroll@2.7.2(@types/react@19.2.14)(react@19.2.4):
+ dependencies:
+ react: 19.2.4
+ react-remove-scroll-bar: 2.3.8(@types/react@19.2.14)(react@19.2.4)
+ react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.4)
+ tslib: 2.8.1
+ use-callback-ref: 1.3.3(@types/react@19.2.14)(react@19.2.4)
+ use-sidecar: 1.1.3(@types/react@19.2.14)(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ react-router@7.13.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4):
+ dependencies:
+ cookie: 1.1.1
+ react: 19.2.4
+ set-cookie-parser: 2.7.2
+ optionalDependencies:
+ react-dom: 19.2.4(react@19.2.4)
+
+ react-style-singleton@2.2.3(@types/react@19.2.14)(react@19.2.4):
+ dependencies:
+ get-nonce: 1.0.1
+ react: 19.2.4
+ tslib: 2.8.1
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ react-use-measure@2.1.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4):
+ dependencies:
+ react: 19.2.4
+ optionalDependencies:
+ react-dom: 19.2.4(react@19.2.4)
+
+ react@19.2.4: {}
+
+ readable-stream@2.3.8:
+ dependencies:
+ core-util-is: 1.0.3
+ inherits: 2.0.4
+ isarray: 1.0.0
+ process-nextick-args: 2.0.1
+ safe-buffer: 5.1.2
+ string_decoder: 1.1.1
+ util-deprecate: 1.0.2
+
+ readable-stream@3.6.2:
+ dependencies:
+ inherits: 2.0.4
+ string_decoder: 1.3.0
+ util-deprecate: 1.0.2
+
+ readable-stream@4.7.0:
+ dependencies:
+ abort-controller: 3.0.0
+ buffer: 6.0.3
+ events: 3.3.0
+ process: 0.11.10
+ string_decoder: 1.3.0
+
+ readdirp@5.0.0: {}
+
+ real-require@0.1.0: {}
+
+ recma-build-jsx@1.0.0:
+ dependencies:
+ '@types/estree': 1.0.8
+ estree-util-build-jsx: 3.0.1
+ vfile: 6.0.3
+
+ recma-jsx@1.0.1(acorn@8.16.0):
+ dependencies:
+ acorn: 8.16.0
+ acorn-jsx: 5.3.2(acorn@8.16.0)
+ estree-util-to-js: 2.0.0
+ recma-parse: 1.0.0
+ recma-stringify: 1.0.0
+ unified: 11.0.5
+
+ recma-parse@1.0.0:
+ dependencies:
+ '@types/estree': 1.0.8
+ esast-util-from-js: 2.0.1
+ unified: 11.0.5
+ vfile: 6.0.3
+
+ recma-stringify@1.0.0:
+ dependencies:
+ '@types/estree': 1.0.8
+ estree-util-to-js: 2.0.0
+ unified: 11.0.5
+ vfile: 6.0.3
+
+ regenerator-runtime@0.13.11: {}
+
+ regex-recursion@6.0.2:
+ dependencies:
+ regex-utilities: 2.3.0
+
+ regex-utilities@2.3.0: {}
+
+ regex@6.1.0:
+ dependencies:
+ regex-utilities: 2.3.0
+
+ rehype-recma@1.0.0:
+ dependencies:
+ '@types/estree': 1.0.8
+ '@types/hast': 3.0.4
+ hast-util-to-estree: 3.1.3
+ transitivePeerDependencies:
+ - supports-color
+
+ rehype-slug@6.0.0:
+ dependencies:
+ '@types/hast': 3.0.4
+ github-slugger: 2.0.0
+ hast-util-heading-rank: 3.0.0
+ hast-util-to-string: 3.0.1
+ unist-util-visit: 5.1.0
+
+ remark-gfm@4.0.1:
+ dependencies:
+ '@types/mdast': 4.0.4
+ mdast-util-gfm: 3.1.0
+ micromark-extension-gfm: 3.0.0
+ remark-parse: 11.0.0
+ remark-stringify: 11.0.0
+ unified: 11.0.5
+ transitivePeerDependencies:
+ - supports-color
+
+ remark-mdx@3.1.1:
+ dependencies:
+ mdast-util-mdx: 3.0.0
+ micromark-extension-mdxjs: 3.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ remark-parse@11.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ mdast-util-from-markdown: 2.0.3
+ micromark-util-types: 2.0.2
+ unified: 11.0.5
+ transitivePeerDependencies:
+ - supports-color
+
+ remark-rehype@11.1.2:
+ dependencies:
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.4
+ mdast-util-to-hast: 13.2.1
+ unified: 11.0.5
+ vfile: 6.0.3
+
+ remark-stringify@11.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ mdast-util-to-markdown: 2.1.2
+ unified: 11.0.5
+
+ require-directory@2.1.1: {}
+
+ require-from-string@2.0.2: {}
+
+ require-main-filename@2.0.0: {}
+
+ resolve-from@5.0.0: {}
+
+ rimraf@3.0.2:
+ dependencies:
+ glob: 7.2.3
+
+ ripemd160@2.0.3:
+ dependencies:
+ hash-base: 3.1.2
+ inherits: 2.0.4
+
+ ripple-address-codec@5.0.0(bufferutil@4.1.0)(utf-8-validate@6.0.6):
+ dependencies:
+ '@scure/base': 1.2.6
+ '@xrplf/isomorphic': 1.0.1(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ ripple-binary-codec@2.7.0(bufferutil@4.1.0)(utf-8-validate@6.0.6):
+ dependencies:
+ '@xrplf/isomorphic': 1.0.1(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ bignumber.js: 9.3.1
+ ripple-address-codec: 5.0.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ ripple-keypairs@2.0.0(bufferutil@4.1.0)(utf-8-validate@6.0.6):
+ dependencies:
+ '@noble/curves': 1.9.7
+ '@xrplf/isomorphic': 1.0.1(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ ripple-address-codec: 5.0.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ robust-predicates@3.0.2: {}
+
+ rollup@4.59.0:
+ dependencies:
+ '@types/estree': 1.0.8
+ optionalDependencies:
+ '@rollup/rollup-android-arm-eabi': 4.59.0
+ '@rollup/rollup-android-arm64': 4.59.0
+ '@rollup/rollup-darwin-arm64': 4.59.0
+ '@rollup/rollup-darwin-x64': 4.59.0
+ '@rollup/rollup-freebsd-arm64': 4.59.0
+ '@rollup/rollup-freebsd-x64': 4.59.0
+ '@rollup/rollup-linux-arm-gnueabihf': 4.59.0
+ '@rollup/rollup-linux-arm-musleabihf': 4.59.0
+ '@rollup/rollup-linux-arm64-gnu': 4.59.0
+ '@rollup/rollup-linux-arm64-musl': 4.59.0
+ '@rollup/rollup-linux-loong64-gnu': 4.59.0
+ '@rollup/rollup-linux-loong64-musl': 4.59.0
+ '@rollup/rollup-linux-ppc64-gnu': 4.59.0
+ '@rollup/rollup-linux-ppc64-musl': 4.59.0
+ '@rollup/rollup-linux-riscv64-gnu': 4.59.0
+ '@rollup/rollup-linux-riscv64-musl': 4.59.0
+ '@rollup/rollup-linux-s390x-gnu': 4.59.0
+ '@rollup/rollup-linux-x64-gnu': 4.59.0
+ '@rollup/rollup-linux-x64-musl': 4.59.0
+ '@rollup/rollup-openbsd-x64': 4.59.0
+ '@rollup/rollup-openharmony-arm64': 4.59.0
+ '@rollup/rollup-win32-arm64-msvc': 4.59.0
+ '@rollup/rollup-win32-ia32-msvc': 4.59.0
+ '@rollup/rollup-win32-x64-gnu': 4.59.0
+ '@rollup/rollup-win32-x64-msvc': 4.59.0
+ fsevents: 2.3.3
+
+ roughjs@4.6.6:
+ dependencies:
+ hachure-fill: 0.5.2
+ path-data-parser: 0.1.0
+ points-on-curve: 0.2.0
+ points-on-path: 0.2.1
+
+ rpc-websockets@9.3.6:
+ dependencies:
+ '@swc/helpers': 0.5.19
+ '@types/uuid': 10.0.0
+ '@types/ws': 8.18.1
+ buffer: 6.0.3
+ eventemitter3: 5.0.4
+ uuid: 11.1.0
+ ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ optionalDependencies:
+ bufferutil: 4.1.0
+ utf-8-validate: 6.0.6
+
+ rtcpeerconnection-shim@1.2.15:
+ dependencies:
+ sdp: 2.12.0
+
+ rw@1.3.3: {}
+
+ rxjs@6.6.7:
+ dependencies:
+ tslib: 1.14.1
+
+ rxjs@7.8.2:
+ dependencies:
+ tslib: 2.8.1
+
+ safe-buffer@5.1.2: {}
+
+ safe-buffer@5.2.1: {}
+
+ safe-regex-test@1.1.0:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-regex: 1.2.1
+
+ safe-stable-stringify@2.5.0: {}
+
+ safer-buffer@2.1.2: {}
+
+ salmon-adapter-sdk@1.1.1(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)):
+ dependencies:
+ '@project-serum/sol-wallet-adapter': 0.2.6(@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)
+ eventemitter3: 4.0.7
+
+ scheduler@0.27.0: {}
+
+ sdp@2.12.0: {}
+
+ semver@6.3.1: {}
+
+ semver@7.7.3: {}
+
+ semver@7.7.4: {}
+
+ send@0.19.2:
+ dependencies:
+ debug: 2.6.9
+ depd: 2.0.0
+ destroy: 1.2.0
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ etag: 1.8.1
+ fresh: 0.5.2
+ http-errors: 2.0.1
+ mime: 1.6.0
+ ms: 2.1.3
+ on-finished: 2.4.1
+ range-parser: 1.2.1
+ statuses: 2.0.2
+ transitivePeerDependencies:
+ - supports-color
+
+ serialize-error@2.1.0: {}
+
+ serve-static@1.16.3:
+ dependencies:
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ parseurl: 1.3.3
+ send: 0.19.2
+ transitivePeerDependencies:
+ - supports-color
+
+ set-blocking@2.0.0: {}
+
+ set-cookie-parser@2.7.2: {}
+
+ set-function-length@1.2.2:
+ dependencies:
+ define-data-property: 1.1.4
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.3.0
+ gopd: 1.2.0
+ has-property-descriptors: 1.0.2
+
+ setprototypeof@1.2.0: {}
+
+ sha.js@2.4.12:
+ dependencies:
+ inherits: 2.0.4
+ safe-buffer: 5.2.1
+ to-buffer: 1.2.2
+
+ shebang-command@2.0.0:
+ dependencies:
+ shebang-regex: 3.0.0
+
+ shebang-regex@3.0.0: {}
+
+ shell-quote@1.8.3: {}
+
+ shiki@4.0.0:
+ dependencies:
+ '@shikijs/core': 4.0.0
+ '@shikijs/engine-javascript': 4.0.0
+ '@shikijs/engine-oniguruma': 4.0.0
+ '@shikijs/langs': 4.0.0
+ '@shikijs/themes': 4.0.0
+ '@shikijs/types': 4.0.0
+ '@shikijs/vscode-textmate': 10.0.2
+ '@types/hast': 3.0.4
+
+ signal-exit@3.0.7: {}
+
+ simple-swizzle@0.2.4:
+ dependencies:
+ is-arrayish: 0.3.4
+
+ slash@3.0.0: {}
+
+ smart-buffer@4.2.0: {}
+
+ socket.io-client@4.8.3(bufferutil@4.1.0)(utf-8-validate@6.0.6):
+ dependencies:
+ '@socket.io/component-emitter': 3.1.2
+ debug: 4.4.3
+ engine.io-client: 6.6.4(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ socket.io-parser: 4.2.6
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ socket.io-parser@4.2.6:
+ dependencies:
+ '@socket.io/component-emitter': 3.1.2
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
+ socks-proxy-agent@8.0.5:
+ dependencies:
+ agent-base: 7.1.4
+ debug: 4.4.3
+ socks: 2.8.7
+ transitivePeerDependencies:
+ - supports-color
+
+ socks@2.8.7:
+ dependencies:
+ ip-address: 10.1.0
+ smart-buffer: 4.2.0
+
+ sonic-boom@2.8.0:
+ dependencies:
+ atomic-sleep: 1.0.0
+
+ source-map-js@1.2.1: {}
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.5.7: {}
+
+ source-map@0.6.1: {}
+
+ source-map@0.7.6: {}
+
+ space-separated-tokens@2.0.2: {}
+
+ split-on-first@1.1.0: {}
+
+ split2@4.2.0: {}
+
+ sprintf-js@1.0.3: {}
+
+ stack-utils@2.0.6:
+ dependencies:
+ escape-string-regexp: 2.0.0
+
+ stackframe@1.3.4: {}
+
+ stacktrace-parser@0.1.11:
+ dependencies:
+ type-fest: 0.7.1
+
+ stats-gl@2.4.2(@types/three@0.183.1)(three@0.183.2):
+ dependencies:
+ '@types/three': 0.183.1
+ three: 0.183.2
+
+ stats.js@0.17.0: {}
+
+ statuses@1.5.0: {}
+
+ statuses@2.0.2: {}
+
+ stream-browserify@3.0.0:
+ dependencies:
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+
+ stream-chain@2.2.5: {}
+
+ stream-json@1.9.1:
+ dependencies:
+ stream-chain: 2.2.5
+
+ stream-shift@1.0.3: {}
+
+ strict-uri-encode@2.0.0: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ string_decoder@1.1.1:
+ dependencies:
+ safe-buffer: 5.1.2
+
+ string_decoder@1.3.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ stringify-entities@4.0.4:
+ dependencies:
+ character-entities-html4: 2.1.0
+ character-entities-legacy: 3.0.0
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ style-to-js@1.1.21:
+ dependencies:
+ style-to-object: 1.0.14
+
+ style-to-object@1.0.14:
+ dependencies:
+ inline-style-parser: 0.2.7
+
+ stylis@4.3.6: {}
+
+ superstruct@2.0.2: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ suspend-react@0.1.3(react@19.2.4):
+ dependencies:
+ react: 19.2.4
+
+ tailwind-merge@3.5.0: {}
+
+ tailwindcss@4.2.1: {}
+
+ tapable@2.3.0: {}
+
+ terser@5.46.1:
+ dependencies:
+ '@jridgewell/source-map': 0.3.11
+ acorn: 8.16.0
+ commander: 2.20.3
+ source-map-support: 0.5.21
+
+ test-exclude@6.0.0:
+ dependencies:
+ '@istanbuljs/schema': 0.1.3
+ glob: 7.2.3
+ minimatch: 3.1.5
+
+ text-encoding-utf-8@1.0.2: {}
+
+ thread-stream@0.15.2:
+ dependencies:
+ real-require: 0.1.0
+
+ three-mesh-bvh@0.8.3(three@0.183.2):
+ dependencies:
+ three: 0.183.2
+
+ three-stdlib@2.36.1(three@0.183.2):
+ dependencies:
+ '@types/draco3d': 1.4.10
+ '@types/offscreencanvas': 2019.7.3
+ '@types/webxr': 0.5.24
+ draco3d: 1.5.7
+ fflate: 0.6.10
+ potpack: 1.0.2
+ three: 0.183.2
+
+ three@0.183.2: {}
+
+ throat@5.0.0: {}
+
+ tiny-secp256k1@1.1.7:
+ dependencies:
+ bindings: 1.5.0
+ bn.js: 4.12.3
+ create-hmac: 1.1.7
+ elliptic: 6.6.1
+ nan: 2.26.2
+
+ tinyexec@1.0.2: {}
+
+ tinyglobby@0.2.15:
+ dependencies:
+ fdir: 6.5.0(picomatch@4.0.3)
+ picomatch: 4.0.3
+
+ tmpl@1.0.5: {}
+
+ to-buffer@1.2.2:
+ dependencies:
+ isarray: 2.0.5
+ safe-buffer: 5.2.1
+ typed-array-buffer: 1.0.3
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ toidentifier@1.0.1: {}
+
+ toml@3.0.0: {}
+
+ tr46@0.0.3: {}
+
+ trim-lines@3.0.1: {}
+
+ troika-three-text@0.52.4(three@0.183.2):
+ dependencies:
+ bidi-js: 1.0.3
+ three: 0.183.2
+ troika-three-utils: 0.52.4(three@0.183.2)
+ troika-worker-utils: 0.52.0
+ webgl-sdf-generator: 1.1.1
+
+ troika-three-utils@0.52.4(three@0.183.2):
+ dependencies:
+ three: 0.183.2
+
+ troika-worker-utils@0.52.0: {}
+
+ trough@2.2.0: {}
+
+ ts-dedent@2.2.0: {}
+
+ ts-mixer@6.0.4: {}
+
+ tslib@1.14.1: {}
+
+ tslib@2.7.0: {}
+
+ tslib@2.8.1: {}
+
+ tunnel-rat@0.1.2(@types/react@19.2.14)(react@19.2.4):
+ dependencies:
+ zustand: 4.5.7(@types/react@19.2.14)(react@19.2.4)
+ transitivePeerDependencies:
+ - '@types/react'
+ - immer
+ - react
+
+ type-detect@4.0.8: {}
+
+ type-fest@0.7.1: {}
+
+ typed-array-buffer@1.0.3:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-typed-array: 1.1.15
+
+ typeforce@1.18.0: {}
+
+ typescript@5.9.3: {}
+
+ ua-is-frozen@0.1.2: {}
+
+ ua-parser-js@2.0.9:
+ dependencies:
+ detect-europe-js: 0.1.2
+ is-standalone-pwa: 0.1.1
+ ua-is-frozen: 0.1.2
+
+ ufo@1.6.3: {}
+
+ uint8array-tools@0.0.8: {}
+
+ uint8arrays@3.1.0:
+ dependencies:
+ multiformats: 9.9.0
+
+ uncrypto@0.1.3: {}
+
+ undici-types@6.19.8: {}
+
+ undici-types@7.18.2: {}
+
+ undici-types@7.24.5: {}
+
+ unidragger@3.0.1:
+ dependencies:
+ ev-emitter: 2.1.2
+
+ unified@11.0.5:
+ dependencies:
+ '@types/unist': 3.0.3
+ bail: 2.0.2
+ devlop: 1.1.0
+ extend: 3.0.2
+ is-plain-obj: 4.1.0
+ trough: 2.2.0
+ vfile: 6.0.3
+
+ unist-util-is@6.0.1:
+ dependencies:
+ '@types/unist': 3.0.3
+
+ unist-util-position-from-estree@2.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+
+ unist-util-position@5.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+
+ unist-util-stringify-position@4.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+
+ unist-util-visit-parents@6.0.2:
+ dependencies:
+ '@types/unist': 3.0.3
+ unist-util-is: 6.0.1
+
+ unist-util-visit@5.1.0:
+ dependencies:
+ '@types/unist': 3.0.3
+ unist-util-is: 6.0.1
+ unist-util-visit-parents: 6.0.2
+
+ unload@2.4.1: {}
+
+ unpipe@1.0.0: {}
+
+ unstorage@1.17.4(idb-keyval@6.2.2):
+ dependencies:
+ anymatch: 3.1.3
+ chokidar: 5.0.0
+ destr: 2.0.5
+ h3: 1.15.9
+ lru-cache: 11.2.7
+ node-fetch-native: 1.6.7
+ ofetch: 1.5.1
+ ufo: 1.6.3
+ optionalDependencies:
+ idb-keyval: 6.2.2
+
+ update-browserslist-db@1.2.3(browserslist@4.28.1):
+ dependencies:
+ browserslist: 4.28.1
+ escalade: 3.2.0
+ picocolors: 1.1.1
+
+ urijs@1.19.11: {}
+
+ usb@2.17.0:
+ dependencies:
+ '@types/w3c-web-usb': 1.0.13
+ node-addon-api: 8.6.0
+ node-gyp-build: 4.8.4
+
+ use-callback-ref@1.3.3(@types/react@19.2.14)(react@19.2.4):
+ dependencies:
+ react: 19.2.4
+ tslib: 2.8.1
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ use-sidecar@1.1.3(@types/react@19.2.14)(react@19.2.4):
+ dependencies:
+ detect-node-es: 1.1.0
+ react: 19.2.4
+ tslib: 2.8.1
+ optionalDependencies:
+ '@types/react': 19.2.14
+
+ use-sync-external-store@1.2.0(react@19.2.4):
+ dependencies:
+ react: 19.2.4
+
+ use-sync-external-store@1.6.0(react@19.2.4):
+ dependencies:
+ react: 19.2.4
+
+ utf-8-validate@6.0.6:
+ dependencies:
+ node-gyp-build: 4.8.4
+ optional: true
+
+ util-deprecate@1.0.2: {}
+
+ util@0.12.5:
+ dependencies:
+ inherits: 2.0.4
+ is-arguments: 1.2.0
+ is-generator-function: 1.1.2
+ is-typed-array: 1.1.15
+ which-typed-array: 1.1.20
+
+ utility-types@3.11.0: {}
+
+ utils-merge@1.0.1: {}
+
+ uuid@11.1.0: {}
+
+ uuid@8.3.2: {}
+
+ uuid@9.0.1: {}
+
+ uuidv4@6.2.13:
+ dependencies:
+ '@types/uuid': 8.3.4
+ uuid: 8.3.2
+
+ valtio@1.13.2(@types/react@19.2.14)(react@19.2.4):
+ dependencies:
+ derive-valtio: 0.1.0(valtio@1.13.2(@types/react@19.2.14)(react@19.2.4))
+ proxy-compare: 2.6.0
+ use-sync-external-store: 1.2.0(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ react: 19.2.4
+
+ varuint-bitcoin@2.0.0:
+ dependencies:
+ uint8array-tools: 0.0.8
+
+ vfile-message@4.0.3:
+ dependencies:
+ '@types/unist': 3.0.3
+ unist-util-stringify-position: 4.0.0
+
+ vfile@6.0.3:
+ dependencies:
+ '@types/unist': 3.0.3
+ vfile-message: 4.0.3
+
+ viem@2.23.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4):
+ dependencies:
+ '@noble/curves': 1.8.1
+ '@noble/hashes': 1.7.1
+ '@scure/bip32': 1.6.2
+ '@scure/bip39': 1.5.4
+ abitype: 1.0.8(typescript@5.9.3)(zod@3.22.4)
+ isows: 1.0.6(ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))
+ ox: 0.6.7(typescript@5.9.3)(zod@3.22.4)
+ ws: 8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ optionalDependencies:
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+ - zod
+
+ viem@2.47.5(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.22.4):
+ dependencies:
+ '@noble/curves': 1.9.1
+ '@noble/hashes': 1.8.0
+ '@scure/bip32': 1.7.0
+ '@scure/bip39': 1.6.0
+ abitype: 1.2.3(typescript@5.9.3)(zod@3.22.4)
+ isows: 1.0.7(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6))
+ ox: 0.14.5(typescript@5.9.3)(zod@3.22.4)
+ ws: 8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ optionalDependencies:
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+ - zod
+
+ vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.1)(yaml@2.8.2):
+ dependencies:
+ esbuild: 0.27.3
+ fdir: 6.5.0(picomatch@4.0.3)
+ picomatch: 4.0.3
+ postcss: 8.5.6
+ rollup: 4.59.0
+ tinyglobby: 0.2.15
+ optionalDependencies:
+ '@types/node': 25.5.0
+ fsevents: 2.3.3
+ jiti: 2.6.1
+ lightningcss: 1.31.1
+ terser: 5.46.1
+ yaml: 2.8.2
+
+ vlq@1.0.1: {}
+
+ vscode-jsonrpc@8.2.0: {}
+
+ vscode-languageserver-protocol@3.17.5:
+ dependencies:
+ vscode-jsonrpc: 8.2.0
+ vscode-languageserver-types: 3.17.5
+
+ vscode-languageserver-textdocument@1.0.12: {}
+
+ vscode-languageserver-types@3.17.5: {}
+
+ vscode-languageserver@9.0.1:
+ dependencies:
+ vscode-languageserver-protocol: 3.17.5
+
+ vscode-uri@3.1.0: {}
+
+ walker@1.0.8:
+ dependencies:
+ makeerror: 1.0.12
+
+ warning@4.0.3:
+ dependencies:
+ loose-envify: 1.4.0
+
+ webgl-constants@1.1.1: {}
+
+ webgl-sdf-generator@1.1.1: {}
+
+ webidl-conversions@3.0.1: {}
+
+ webrtc-adapter@7.7.1:
+ dependencies:
+ rtcpeerconnection-shim: 1.2.15
+ sdp: 2.12.0
+
+ whatwg-fetch@3.6.20: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which-module@2.0.1: {}
+
+ which-typed-array@1.1.20:
+ dependencies:
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ for-each: 0.3.5
+ get-proto: 1.0.1
+ gopd: 1.2.0
+ has-tostringtag: 1.0.2
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ wif@5.0.0:
+ dependencies:
+ bs58check: 4.0.0
+
+ 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: {}
+
+ write-file-atomic@4.0.2:
+ dependencies:
+ imurmurhash: 0.1.4
+ signal-exit: 3.0.7
+
+ ws@7.5.10(bufferutil@4.1.0)(utf-8-validate@6.0.6):
+ optionalDependencies:
+ bufferutil: 4.1.0
+ utf-8-validate: 6.0.6
+
+ ws@8.17.1(bufferutil@4.1.0)(utf-8-validate@6.0.6):
+ optionalDependencies:
+ bufferutil: 4.1.0
+ utf-8-validate: 6.0.6
+
+ ws@8.18.0(bufferutil@4.1.0)(utf-8-validate@6.0.6):
+ optionalDependencies:
+ bufferutil: 4.1.0
+ utf-8-validate: 6.0.6
+
+ ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6):
+ optionalDependencies:
+ bufferutil: 4.1.0
+ utf-8-validate: 6.0.6
+
+ ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6):
+ optionalDependencies:
+ bufferutil: 4.1.0
+ utf-8-validate: 6.0.6
+
+ xmlhttprequest-ssl@2.1.2: {}
+
+ xrpl@4.4.3(bufferutil@4.1.0)(utf-8-validate@6.0.6):
+ dependencies:
+ '@scure/bip32': 1.7.0
+ '@scure/bip39': 1.6.0
+ '@xrplf/isomorphic': 1.0.1(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ '@xrplf/secret-numbers': 2.0.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ bignumber.js: 9.3.1
+ eventemitter3: 5.0.4
+ fast-json-stable-stringify: 2.1.0
+ ripple-address-codec: 5.0.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ ripple-binary-codec: 2.7.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ ripple-keypairs: 2.0.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ y18n@4.0.3: {}
+
+ y18n@5.0.8: {}
+
+ yallist@3.1.1: {}
+
+ yaml@2.8.2: {}
+
+ yargs-parser@18.1.3:
+ dependencies:
+ camelcase: 5.3.1
+ decamelize: 1.2.0
+
+ 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
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 21.1.1
+
+ zod@3.22.4: {}
+
+ zustand@4.5.7(@types/react@19.2.14)(react@19.2.4):
+ dependencies:
+ use-sync-external-store: 1.6.0(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.14
+ react: 19.2.4
+
+ zustand@5.0.12(@types/react@19.2.14)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)):
+ optionalDependencies:
+ '@types/react': 19.2.14
+ react: 19.2.4
+ use-sync-external-store: 1.6.0(react@19.2.4)
+
+ zwitch@2.0.4: {}
diff --git a/website/pnpm-workspace.yaml b/website/pnpm-workspace.yaml
new file mode 100644
index 0000000..efc037a
--- /dev/null
+++ b/website/pnpm-workspace.yaml
@@ -0,0 +1,2 @@
+onlyBuiltDependencies:
+ - esbuild
diff --git a/website/public/favicon.ico b/website/public/favicon.ico
new file mode 100644
index 0000000..f3e49f3
Binary files /dev/null and b/website/public/favicon.ico differ
diff --git a/website/public/fonts/inter-bold.ttf b/website/public/fonts/inter-bold.ttf
new file mode 100644
index 0000000..14db994
Binary files /dev/null and b/website/public/fonts/inter-bold.ttf differ
diff --git a/website/public/fonts/inter-bold.woff b/website/public/fonts/inter-bold.woff
new file mode 100644
index 0000000..6478400
--- /dev/null
+++ b/website/public/fonts/inter-bold.woff
@@ -0,0 +1,11 @@
+
+
+
+
+ Error 404 (Not Found)!!1
+
+
+ 404. That’s an error.
+
The requested URL /s/inter/v13/UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMw2boKoduKmMEVuFuYAZ9hiA.woff was not found on this server. That’s all we know.
diff --git a/website/public/icons/aerodrome.png b/website/public/icons/aerodrome.png
new file mode 100644
index 0000000..a5be58c
Binary files /dev/null and b/website/public/icons/aerodrome.png differ
diff --git a/website/public/icons/email.png b/website/public/icons/email.png
new file mode 100644
index 0000000..2eefe8a
Binary files /dev/null and b/website/public/icons/email.png differ
diff --git a/website/public/icons/gitbros.png b/website/public/icons/gitbros.png
new file mode 100644
index 0000000..1b886d5
Binary files /dev/null and b/website/public/icons/gitbros.png differ
diff --git a/website/public/icons/github.png b/website/public/icons/github.png
new file mode 100644
index 0000000..7e1fe85
Binary files /dev/null and b/website/public/icons/github.png differ
diff --git a/website/public/icons/linktree.png b/website/public/icons/linktree.png
new file mode 100644
index 0000000..98a9acf
Binary files /dev/null and b/website/public/icons/linktree.png differ
diff --git a/website/public/icons/orama-icon.png b/website/public/icons/orama-icon.png
new file mode 100644
index 0000000..9148306
Binary files /dev/null and b/website/public/icons/orama-icon.png differ
diff --git a/website/public/icons/pancakeswap.png b/website/public/icons/pancakeswap.png
new file mode 100644
index 0000000..0aac47e
Binary files /dev/null and b/website/public/icons/pancakeswap.png differ
diff --git a/website/public/icons/telegram.png b/website/public/icons/telegram.png
new file mode 100644
index 0000000..06fc11f
Binary files /dev/null and b/website/public/icons/telegram.png differ
diff --git a/website/public/icons/uniswap.png b/website/public/icons/uniswap.png
new file mode 100644
index 0000000..6619149
Binary files /dev/null and b/website/public/icons/uniswap.png differ
diff --git a/website/public/icons/x.png b/website/public/icons/x.png
new file mode 100644
index 0000000..b8a9ff4
Binary files /dev/null and b/website/public/icons/x.png differ
diff --git a/website/public/icons/youtube.png b/website/public/icons/youtube.png
new file mode 100644
index 0000000..e589b8d
Binary files /dev/null and b/website/public/icons/youtube.png differ
diff --git a/website/public/images/anchat-screens/1.png b/website/public/images/anchat-screens/1.png
new file mode 100644
index 0000000..69e6f91
Binary files /dev/null and b/website/public/images/anchat-screens/1.png differ
diff --git a/website/public/images/anchat-screens/10.png b/website/public/images/anchat-screens/10.png
new file mode 100644
index 0000000..ec3b3a8
Binary files /dev/null and b/website/public/images/anchat-screens/10.png differ
diff --git a/website/public/images/anchat-screens/11.png b/website/public/images/anchat-screens/11.png
new file mode 100644
index 0000000..d65a422
Binary files /dev/null and b/website/public/images/anchat-screens/11.png differ
diff --git a/website/public/images/anchat-screens/2.png b/website/public/images/anchat-screens/2.png
new file mode 100644
index 0000000..661ec58
Binary files /dev/null and b/website/public/images/anchat-screens/2.png differ
diff --git a/website/public/images/anchat-screens/3.png b/website/public/images/anchat-screens/3.png
new file mode 100644
index 0000000..3468fc2
Binary files /dev/null and b/website/public/images/anchat-screens/3.png differ
diff --git a/website/public/images/anchat-screens/4.png b/website/public/images/anchat-screens/4.png
new file mode 100644
index 0000000..18ad4fe
Binary files /dev/null and b/website/public/images/anchat-screens/4.png differ
diff --git a/website/public/images/anchat-screens/5.png b/website/public/images/anchat-screens/5.png
new file mode 100644
index 0000000..cc41ff6
Binary files /dev/null and b/website/public/images/anchat-screens/5.png differ
diff --git a/website/public/images/anchat-screens/6.png b/website/public/images/anchat-screens/6.png
new file mode 100644
index 0000000..a9aed04
Binary files /dev/null and b/website/public/images/anchat-screens/6.png differ
diff --git a/website/public/images/anchat-screens/7.png b/website/public/images/anchat-screens/7.png
new file mode 100644
index 0000000..0d55dde
Binary files /dev/null and b/website/public/images/anchat-screens/7.png differ
diff --git a/website/public/images/anchat-screens/8.png b/website/public/images/anchat-screens/8.png
new file mode 100644
index 0000000..a2dc75d
Binary files /dev/null and b/website/public/images/anchat-screens/8.png differ
diff --git a/website/public/images/anchat-screens/9.png b/website/public/images/anchat-screens/9.png
new file mode 100644
index 0000000..2d7fa1d
Binary files /dev/null and b/website/public/images/anchat-screens/9.png differ
diff --git a/website/public/images/anchat.png b/website/public/images/anchat.png
new file mode 100755
index 0000000..10ea6f2
Binary files /dev/null and b/website/public/images/anchat.png differ
diff --git a/website/public/images/anyone-protocol.png b/website/public/images/anyone-protocol.png
new file mode 100644
index 0000000..8620f3f
Binary files /dev/null and b/website/public/images/anyone-protocol.png differ
diff --git a/website/public/images/debros-logo.png b/website/public/images/debros-logo.png
new file mode 100644
index 0000000..f68c542
Binary files /dev/null and b/website/public/images/debros-logo.png differ
diff --git a/website/public/images/debrosnet.png b/website/public/images/debrosnet.png
new file mode 100644
index 0000000..8118da5
Binary files /dev/null and b/website/public/images/debrosnet.png differ
diff --git a/website/public/images/icxcnika.webp b/website/public/images/icxcnika.webp
new file mode 100644
index 0000000..f73ec87
Binary files /dev/null and b/website/public/images/icxcnika.webp differ
diff --git a/website/public/images/js.jpg b/website/public/images/js.jpg
new file mode 100644
index 0000000..3b447ed
Binary files /dev/null and b/website/public/images/js.jpg differ
diff --git a/website/public/images/km.jpg b/website/public/images/km.jpg
new file mode 100644
index 0000000..6ed4181
Binary files /dev/null and b/website/public/images/km.jpg differ
diff --git a/website/public/images/nik.jpg b/website/public/images/nik.jpg
new file mode 100644
index 0000000..be0b4e2
Binary files /dev/null and b/website/public/images/nik.jpg differ
diff --git a/website/public/images/pen.jpg b/website/public/images/pen.jpg
new file mode 100644
index 0000000..5a2c6bc
Binary files /dev/null and b/website/public/images/pen.jpg differ
diff --git a/website/public/orama-whitepaper-v1.pdf b/website/public/orama-whitepaper-v1.pdf
new file mode 100644
index 0000000..0390c4b
Binary files /dev/null and b/website/public/orama-whitepaper-v1.pdf differ
diff --git a/website/public/orama-whitepaper-v2.pdf b/website/public/orama-whitepaper-v2.pdf
new file mode 100644
index 0000000..437bcde
Binary files /dev/null and b/website/public/orama-whitepaper-v2.pdf differ
diff --git a/website/src/assets/667aeae9202ea23ed1108895_anyone-logo-ext-mono-512.png b/website/src/assets/667aeae9202ea23ed1108895_anyone-logo-ext-mono-512.png
new file mode 100644
index 0000000..34b7c52
Binary files /dev/null and b/website/src/assets/667aeae9202ea23ed1108895_anyone-logo-ext-mono-512.png differ
diff --git a/website/src/assets/debrosnet.png b/website/src/assets/debrosnet.png
new file mode 100644
index 0000000..8118da5
Binary files /dev/null and b/website/src/assets/debrosnet.png differ
diff --git a/website/src/assets/network-logo.png b/website/src/assets/network-logo.png
new file mode 100644
index 0000000..8a51b99
Binary files /dev/null and b/website/src/assets/network-logo.png differ
diff --git a/website/src/assets/orama-icon.png b/website/src/assets/orama-icon.png
new file mode 100644
index 0000000..9148306
Binary files /dev/null and b/website/src/assets/orama-icon.png differ
diff --git a/website/src/components/icons/tech-logos.tsx b/website/src/components/icons/tech-logos.tsx
new file mode 100644
index 0000000..63bc783
--- /dev/null
+++ b/website/src/components/icons/tech-logos.tsx
@@ -0,0 +1,103 @@
+import type { SVGProps } from "react";
+
+export function ReactLogo(props: SVGProps) {
+ return (
+
+ {/* Center dot */}
+
+ {/* Orbit 1 — horizontal */}
+
+ {/* Orbit 2 — tilted right */}
+
+ {/* Orbit 3 — tilted left */}
+
+
+ );
+}
+
+export function NextjsLogo(props: SVGProps) {
+ return (
+
+ {/* "N" lettermark */}
+
+
+ );
+}
+
+export function GoLogo(props: SVGProps) {
+ return (
+
+ {/* Stylized "Go" text */}
+
+ Go
+
+
+ );
+}
+
+export function NodejsLogo(props: SVGProps) {
+ return (
+
+ {/* Hexagon shape */}
+
+ {/* Inner "N" mark */}
+
+
+ );
+}
+
+export function WasmLogo(props: SVGProps) {
+ return (
+
+ {/* WASM diamond/gear shape */}
+
+ {/* "W" inside */}
+
+ {/* Small dot accent */}
+
+
+ );
+}
diff --git a/website/src/components/landing/about-hero-scene.tsx b/website/src/components/landing/about-hero-scene.tsx
new file mode 100644
index 0000000..7d2d754
--- /dev/null
+++ b/website/src/components/landing/about-hero-scene.tsx
@@ -0,0 +1,269 @@
+import { useRef, useMemo } from "react";
+import { Canvas, useFrame } from "@react-three/fiber";
+import { Float } from "@react-three/drei";
+import * as THREE from "three";
+
+const NODE_COUNT = 24;
+const INNER_RADIUS = 0.6;
+const OUTER_RADIUS = 1.6;
+const PARTICLE_COUNT = 80;
+
+/* ─── Dot ring (reusable) ─── */
+function DotRing({ radius, count, color, opacity, dotSize }: {
+ radius: number; count: number; color: string; opacity: number; dotSize: number;
+}) {
+ const dots = useMemo(() =>
+ Array.from({ length: count }, (_, i) => {
+ const angle = (i / count) * Math.PI * 2;
+ return [Math.cos(angle) * radius, Math.sin(angle) * radius] as [number, number];
+ }), [radius, count]);
+
+ return (
+
+ {dots.map(([x, y], i) => (
+
+
+
+
+ ))}
+
+ );
+}
+
+/* ─── Core nodes — pulsing spheres in a scattered cluster ─── */
+function CoreNodes() {
+ const meshRefs = useRef<(THREE.Mesh | null)[]>([]);
+
+ const nodes = useMemo(() =>
+ Array.from({ length: NODE_COUNT }, (_, i) => {
+ const angle = (i / NODE_COUNT) * Math.PI * 2 + (Math.random() - 0.5) * 0.3;
+ const r = INNER_RADIUS + Math.random() * (OUTER_RADIUS - INNER_RADIUS);
+ const y = (Math.random() - 0.5) * 0.6;
+ return {
+ x: Math.cos(angle) * r,
+ y,
+ z: Math.sin(angle) * r,
+ phase: i * 0.4 + Math.random() * 2,
+ size: 0.015 + Math.random() * 0.02,
+ };
+ }), []);
+
+ useFrame(({ clock }) => {
+ const t = clock.getElapsedTime();
+ meshRefs.current.forEach((mesh, i) => {
+ if (!mesh) return;
+ const node = nodes[i];
+ const wave = Math.sin(t * 1.2 + node.phase);
+ const mat = mesh.material as THREE.MeshBasicMaterial;
+ mat.opacity = 0.2 + 0.5 * Math.max(0, wave);
+ const s = 1 + 0.4 * Math.max(0, wave);
+ mesh.scale.setScalar(s);
+ });
+ });
+
+ return (
+
+ {nodes.map((node, i) => (
+ { meshRefs.current[i] = el; }}
+ position={[node.x, node.y, node.z]}
+ >
+
+
+
+ ))}
+
+ );
+}
+
+/* ─── Connection lines between nearby nodes ─── */
+function Connections() {
+ const lineRefs = useRef<(THREE.Line | null)[]>([]);
+
+ const { nodes, pairs } = useMemo(() => {
+ const ns = Array.from({ length: NODE_COUNT }, (_, i) => {
+ const angle = (i / NODE_COUNT) * Math.PI * 2 + (Math.random() - 0.5) * 0.3;
+ const r = INNER_RADIUS + Math.random() * (OUTER_RADIUS - INNER_RADIUS);
+ const y = (Math.random() - 0.5) * 0.6;
+ return new THREE.Vector3(Math.cos(angle) * r, y, Math.sin(angle) * r);
+ });
+ const ps: [number, number][] = [];
+ for (let i = 0; i < ns.length; i++) {
+ for (let j = i + 1; j < ns.length; j++) {
+ if (ns[i].distanceTo(ns[j]) < 0.9) {
+ ps.push([i, j]);
+ }
+ }
+ }
+ return { nodes: ns, pairs: ps };
+ }, []);
+
+ useFrame(({ clock }) => {
+ const t = clock.getElapsedTime();
+ lineRefs.current.forEach((line, idx) => {
+ if (!line) return;
+ const mat = line.material as THREE.LineBasicMaterial;
+ const wave = Math.sin(t * 0.8 + idx * 0.3);
+ mat.opacity = 0.03 + 0.06 * Math.max(0, wave);
+ });
+ });
+
+ return (
+
+ {pairs.map(([a, b], i) => {
+ const geo = new THREE.BufferGeometry().setFromPoints([nodes[a], nodes[b]]);
+ return (
+ { lineRefs.current[i] = el; }}
+ object={new THREE.Line(geo, new THREE.LineBasicMaterial({ color: "#a1a1aa", transparent: true, opacity: 0.05 }))}
+ />
+ );
+ })}
+
+ );
+}
+
+/* ─── Expanding pulse rings from center ─── */
+function PulseRings() {
+ const meshRefs = useRef<(THREE.Mesh | null)[]>([]);
+ const RING_COUNT = 3;
+
+ useFrame(({ clock }) => {
+ const t = clock.getElapsedTime();
+ meshRefs.current.forEach((mesh, i) => {
+ if (!mesh) return;
+ const phase = (t * 0.3 + i * (1 / RING_COUNT)) % 1;
+ const scale = 0.2 + phase * 2;
+ mesh.scale.set(scale, scale, 1);
+ const mat = mesh.material as THREE.MeshBasicMaterial;
+ mat.opacity = 0.08 * (1 - phase);
+ });
+ });
+
+ return (
+
+ {Array.from({ length: RING_COUNT }, (_, i) => (
+ { meshRefs.current[i] = el; }}>
+
+
+
+ ))}
+
+ );
+}
+
+/* ─── Floating ambient particles ─── */
+function AmbientParticles() {
+ const ref = useRef(null);
+
+ const positions = useMemo(() => {
+ const arr = new Float32Array(PARTICLE_COUNT * 3);
+ for (let i = 0; i < PARTICLE_COUNT; i++) {
+ const angle = Math.random() * Math.PI * 2;
+ const r = 0.3 + Math.random() * 2.2;
+ arr[i * 3] = Math.cos(angle) * r;
+ arr[i * 3 + 1] = (Math.random() - 0.5) * 1.5;
+ arr[i * 3 + 2] = Math.sin(angle) * r;
+ }
+ return arr;
+ }, []);
+
+ useFrame(({ clock }) => {
+ if (!ref.current) return;
+ const arr = ref.current.geometry.attributes.position.array as Float32Array;
+ const t = clock.getElapsedTime();
+ for (let i = 0; i < PARTICLE_COUNT; i++) {
+ arr[i * 3 + 1] += Math.sin(t * 0.5 + i) * 0.0003;
+ }
+ ref.current.geometry.attributes.position.needsUpdate = true;
+ ref.current.rotation.y = t * 0.02;
+ });
+
+ return (
+
+
+
+
+
+
+ );
+}
+
+/* ─── Center shield icon (icosahedron wireframe) ─── */
+function CenterShield() {
+ const meshRef = useRef(null);
+ const glowRef = useRef(null);
+
+ useFrame(({ clock }) => {
+ const t = clock.getElapsedTime();
+ if (meshRef.current) {
+ meshRef.current.rotation.y = t * 0.15;
+ meshRef.current.rotation.x = Math.sin(t * 0.1) * 0.1;
+ }
+ if (glowRef.current) {
+ const mat = glowRef.current.material as THREE.MeshBasicMaterial;
+ mat.opacity = 0.03 + 0.02 * Math.sin(t * 1.5);
+ const s = 1 + 0.05 * Math.sin(t * 1.5);
+ glowRef.current.scale.setScalar(s);
+ }
+ });
+
+ return (
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+/* ─── Full scene ─── */
+function AboutNetwork() {
+ const groupRef = useRef(null);
+
+ useFrame(({ clock }) => {
+ if (groupRef.current) {
+ groupRef.current.rotation.y = clock.getElapsedTime() * 0.03;
+ }
+ });
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+export function AboutHeroScene() {
+ return (
+
+ );
+}
diff --git a/website/src/components/landing/cli-install.tsx b/website/src/components/landing/cli-install.tsx
new file mode 100644
index 0000000..649b70b
--- /dev/null
+++ b/website/src/components/landing/cli-install.tsx
@@ -0,0 +1,69 @@
+import { Section } from "../layout/section";
+import { SectionHeader } from "../ui/section-header";
+import { Terminal } from "../ui/terminal";
+import { CrosshairDivider } from "../ui/crosshair-divider";
+import { AnimateIn } from "../ui/animate-in";
+import { Tabs, TabsList, TabsTrigger, TabsContent } from "../ui/tabs";
+
+export function CliInstall() {
+ return (
+ <>
+
+
+
+
+
+
+
+ macOS (Homebrew)
+ Linux (Debian/Ubuntu)
+ From Source
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/website/src/components/landing/compute-mesh-scene.tsx b/website/src/components/landing/compute-mesh-scene.tsx
new file mode 100644
index 0000000..bcb3c66
--- /dev/null
+++ b/website/src/components/landing/compute-mesh-scene.tsx
@@ -0,0 +1,361 @@
+import { useRef, useMemo } from "react";
+import { Canvas, useFrame } from "@react-three/fiber";
+import { Float } from "@react-three/drei";
+import * as THREE from "three";
+
+const NODE_COUNT = 32;
+const GRID_SPACING = 1.1;
+const EDGE_MAX_DIST = 1.6;
+const PACKET_COUNT = 8;
+
+interface GridNode {
+ position: THREE.Vector3;
+ phase: number;
+ baseScale: number;
+}
+
+interface Edge {
+ from: number;
+ to: number;
+}
+
+interface Packet {
+ edgeIndex: number;
+ progress: number;
+ speed: number;
+ direction: 1 | -1;
+}
+
+/* Generate nodes on a gently curved grid */
+function generateGridNodes(): GridNode[] {
+ const nodes: GridNode[] = [];
+ const cols = 6;
+ const rows = 5;
+
+ for (let row = 0; row < rows; row++) {
+ // Offset every other row for a hex-like feel
+ const colsInRow = row % 2 === 0 ? cols : cols - 1;
+ const offsetX = row % 2 === 0 ? 0 : GRID_SPACING * 0.5;
+
+ for (let col = 0; col < colsInRow; col++) {
+ if (nodes.length >= NODE_COUNT) break;
+
+ const x =
+ (col - (colsInRow - 1) / 2) * GRID_SPACING + offsetX;
+ const z = (row - (rows - 1) / 2) * (GRID_SPACING * 0.85);
+
+ // Gentle curve — bowl shape
+ const dist = Math.sqrt(x * x + z * z);
+ const y = dist * dist * 0.03;
+
+ // Slight random jitter
+ const jx = (Math.random() - 0.5) * 0.15;
+ const jz = (Math.random() - 0.5) * 0.15;
+
+ nodes.push({
+ position: new THREE.Vector3(x + jx, y, z + jz),
+ phase: Math.random() * Math.PI * 2,
+ baseScale: 0.03 + Math.random() * 0.015,
+ });
+ }
+ }
+
+ return nodes;
+}
+
+/* Generate edges between nearby nodes */
+function generateEdges(nodes: GridNode[]): Edge[] {
+ const edges: Edge[] = [];
+ for (let i = 0; i < nodes.length; i++) {
+ for (let j = i + 1; j < nodes.length; j++) {
+ if (
+ nodes[i].position.distanceTo(nodes[j].position) < EDGE_MAX_DIST
+ ) {
+ edges.push({ from: i, to: j });
+ }
+ }
+ }
+ return edges;
+}
+
+/* ─── Grid node (sphere with pulse) ─── */
+function GridNodes({ nodes }: { nodes: GridNode[] }) {
+ const meshRefs = useRef<(THREE.Mesh | null)[]>([]);
+
+ useFrame(({ clock }) => {
+ const t = clock.getElapsedTime();
+ meshRefs.current.forEach((mesh, i) => {
+ if (!mesh) return;
+ const node = nodes[i];
+ const pulse = Math.sin(t * 1.5 + node.phase);
+ const mat = mesh.material as THREE.MeshBasicMaterial;
+ mat.opacity = 0.25 + 0.35 * Math.max(0, pulse);
+ const s =
+ node.baseScale * (1 + 0.4 * Math.max(0, pulse));
+ mesh.scale.setScalar(s / node.baseScale);
+ });
+ });
+
+ return (
+
+ {nodes.map((node, i) => (
+ {
+ meshRefs.current[i] = el;
+ }}
+ position={node.position}
+ >
+
+
+
+ ))}
+
+ );
+}
+
+/* ─── Connection lines between nodes ─── */
+function ConnectionLines({
+ nodes,
+ edges,
+}: {
+ nodes: GridNode[];
+ edges: Edge[];
+}) {
+ const lines = useMemo(() => {
+ return edges.map((edge) => {
+ const geo = new THREE.BufferGeometry().setFromPoints([
+ nodes[edge.from].position,
+ nodes[edge.to].position,
+ ]);
+ const mat = new THREE.LineBasicMaterial({
+ color: "#a1a1aa",
+ transparent: true,
+ opacity: 0.06,
+ });
+ return new THREE.Line(geo, mat);
+ });
+ }, [nodes, edges]);
+
+ return (
+
+ {lines.map((line, i) => (
+
+ ))}
+
+ );
+}
+
+/* ─── Light packets traveling along edges ─── */
+function Packets({
+ nodes,
+ edges,
+}: {
+ nodes: GridNode[];
+ edges: Edge[];
+}) {
+ const meshRefs = useRef<(THREE.Mesh | null)[]>([]);
+ const glowRefs = useRef<(THREE.Mesh | null)[]>([]);
+ const packetsRef = useRef([]);
+
+ // Initialize packets
+ if (packetsRef.current.length === 0 && edges.length > 0) {
+ packetsRef.current = Array.from(
+ { length: PACKET_COUNT },
+ () => ({
+ edgeIndex: Math.floor(Math.random() * edges.length),
+ progress: Math.random(),
+ speed: 0.003 + Math.random() * 0.004,
+ direction: (Math.random() > 0.5 ? 1 : -1) as 1 | -1,
+ }),
+ );
+ }
+
+ useFrame(() => {
+ packetsRef.current.forEach((packet, i) => {
+ const mesh = meshRefs.current[i];
+ const glow = glowRefs.current[i];
+ if (!mesh || !glow) return;
+
+ // Advance
+ packet.progress += packet.speed * packet.direction;
+
+ // When reaching end, jump to a connected edge
+ if (packet.progress > 1 || packet.progress < 0) {
+ const currentEdge = edges[packet.edgeIndex];
+ const endNode =
+ packet.direction === 1
+ ? currentEdge.to
+ : currentEdge.from;
+
+ // Find edges connected to end node
+ const connected = edges
+ .map((e, idx) => ({ e, idx }))
+ .filter(
+ ({ e, idx }) =>
+ idx !== packet.edgeIndex &&
+ (e.from === endNode || e.to === endNode),
+ );
+
+ if (connected.length > 0) {
+ const next =
+ connected[Math.floor(Math.random() * connected.length)];
+ packet.edgeIndex = next.idx;
+ packet.direction =
+ next.e.from === endNode ? 1 : -1;
+ packet.progress = packet.direction === 1 ? 0 : 1;
+ } else {
+ packet.direction *= -1 as 1 | -1;
+ packet.progress = THREE.MathUtils.clamp(
+ packet.progress,
+ 0,
+ 1,
+ );
+ }
+ }
+
+ // Position along edge
+ const edge = edges[packet.edgeIndex];
+ const from = nodes[edge.from].position;
+ const to = nodes[edge.to].position;
+ const pos = new THREE.Vector3().lerpVectors(
+ from,
+ to,
+ packet.progress,
+ );
+
+ mesh.position.copy(pos);
+ glow.position.copy(pos);
+ });
+ });
+
+ return (
+
+ {Array.from({ length: PACKET_COUNT }, (_, i) => (
+
+ {/* Core */}
+ {
+ meshRefs.current[i] = el;
+ }}
+ >
+
+
+
+ {/* Glow */}
+ {
+ glowRefs.current[i] = el;
+ }}
+ >
+
+
+
+
+ ))}
+
+ );
+}
+
+/* ─── Deploy burst — periodic flare on a random node ─── */
+function DeployBursts({ nodes }: { nodes: GridNode[] }) {
+ const ringRef = useRef(null);
+ const burstNodeRef = useRef(0);
+ const lastBurstRef = useRef(0);
+
+ useFrame(({ clock }) => {
+ const t = clock.getElapsedTime();
+
+ // Trigger a burst every ~5 seconds
+ if (t - lastBurstRef.current > 5) {
+ burstNodeRef.current = Math.floor(
+ Math.random() * nodes.length,
+ );
+ lastBurstRef.current = t;
+ }
+
+ if (ringRef.current) {
+ const elapsed = t - lastBurstRef.current;
+ const node = nodes[burstNodeRef.current];
+ ringRef.current.position.copy(node.position);
+
+ if (elapsed < 1.5) {
+ const scale = 1 + elapsed * 2;
+ ringRef.current.scale.setScalar(scale);
+ const mat = ringRef.current
+ .material as THREE.MeshBasicMaterial;
+ mat.opacity = 0.12 * (1 - elapsed / 1.5);
+ } else {
+ const mat = ringRef.current
+ .material as THREE.MeshBasicMaterial;
+ mat.opacity = 0;
+ }
+ }
+ });
+
+ return (
+
+
+
+
+ );
+}
+
+/* ─── Full scene ─── */
+function ComputeMesh() {
+ const groupRef = useRef(null);
+
+ const nodes = useMemo(() => generateGridNodes(), []);
+ const edges = useMemo(() => generateEdges(nodes), [nodes]);
+
+ // Static orientation — no spinning
+
+ return (
+
+
+
+
+
+
+
+
+ );
+}
+
+export function ComputeMeshScene() {
+ return (
+
+ );
+}
diff --git a/website/src/components/landing/consensus-scene.tsx b/website/src/components/landing/consensus-scene.tsx
new file mode 100644
index 0000000..5a4d3ba
--- /dev/null
+++ b/website/src/components/landing/consensus-scene.tsx
@@ -0,0 +1,245 @@
+import { useRef, useMemo } from "react";
+import { Canvas, useFrame } from "@react-three/fiber";
+import { Float } from "@react-three/drei";
+import * as THREE from "three";
+
+const VALIDATOR_COUNT = 12;
+const ANGEL_COUNT = 8;
+const RING_RADIUS = 1.4;
+const ANGEL_RADIUS = 0.9;
+
+/* ─── Thin ring made of dots ─── */
+function DotRing({ radius, count, color, opacity, dotSize }: {
+ radius: number; count: number; color: string; opacity: number; dotSize: number;
+}) {
+ const dots = useMemo(() => {
+ return Array.from({ length: count }, (_, i) => {
+ const angle = (i / count) * Math.PI * 2;
+ return [Math.cos(angle) * radius, Math.sin(angle) * radius] as [number, number];
+ });
+ }, [radius, count]);
+
+ return (
+
+ {dots.map(([x, y], i) => (
+
+
+
+
+ ))}
+
+ );
+}
+
+/* ─── Validator nodes — small glowing dots on the outer ring ─── */
+function Validators() {
+ const groupRef = useRef(null);
+ const meshRefs = useRef<(THREE.Mesh | null)[]>([]);
+
+ const positions = useMemo(() => {
+ return Array.from({ length: VALIDATOR_COUNT }, (_, i) => {
+ const angle = (i / VALIDATOR_COUNT) * Math.PI * 2;
+ return {
+ x: Math.cos(angle) * RING_RADIUS,
+ z: Math.sin(angle) * RING_RADIUS,
+ phase: i * 0.5,
+ };
+ });
+ }, []);
+
+ useFrame(({ clock }) => {
+ const t = clock.getElapsedTime();
+ meshRefs.current.forEach((mesh, i) => {
+ if (!mesh) return;
+ const mat = mesh.material as THREE.MeshBasicMaterial;
+ // Staggered pulse wave around the ring
+ const wave = Math.sin(t * 1.5 - positions[i].phase);
+ mat.opacity = 0.3 + 0.4 * Math.max(0, wave);
+ const s = 1 + 0.3 * Math.max(0, wave);
+ mesh.scale.setScalar(s);
+ });
+ });
+
+ return (
+
+ {positions.map((pos, i) => (
+ { meshRefs.current[i] = el; }}
+ position={[pos.x, 0, pos.z]}
+ >
+
+
+
+ ))}
+
+ );
+}
+
+/* ─── Angel nodes — teal particles orbiting inner ring ─── */
+function Angels() {
+ const groupRef = useRef(null);
+ const meshRefs = useRef<(THREE.Mesh | null)[]>([]);
+ const glowRefs = useRef<(THREE.Mesh | null)[]>([]);
+
+ useFrame(({ clock }) => {
+ const t = clock.getElapsedTime();
+
+ meshRefs.current.forEach((mesh, i) => {
+ if (!mesh) return;
+ const angle = (i / ANGEL_COUNT) * Math.PI * 2 + t * 0.4;
+ const wobbleY = Math.sin(t * 2.5 + i * 1.2) * 0.08;
+
+ mesh.position.x = Math.cos(angle) * ANGEL_RADIUS;
+ mesh.position.z = Math.sin(angle) * ANGEL_RADIUS;
+ mesh.position.y = wobbleY;
+
+ const mat = mesh.material as THREE.MeshBasicMaterial;
+ const pulse = Math.sin(t * 2 + i * 0.8);
+ mat.opacity = 0.5 + 0.3 * Math.max(0, pulse);
+ });
+
+ glowRefs.current.forEach((mesh, i) => {
+ if (!mesh) return;
+ const angle = (i / ANGEL_COUNT) * Math.PI * 2 + t * 0.4;
+ const wobbleY = Math.sin(t * 2.5 + i * 1.2) * 0.08;
+
+ mesh.position.x = Math.cos(angle) * ANGEL_RADIUS;
+ mesh.position.z = Math.sin(angle) * ANGEL_RADIUS;
+ mesh.position.y = wobbleY;
+
+ const mat = mesh.material as THREE.MeshBasicMaterial;
+ const pulse = Math.sin(t * 2 + i * 0.8);
+ mat.opacity = 0.06 + 0.08 * Math.max(0, pulse);
+ });
+ });
+
+ return (
+
+ {Array.from({ length: ANGEL_COUNT }, (_, i) => (
+
+ { meshRefs.current[i] = el; }}>
+
+
+
+ { glowRefs.current[i] = el; }}>
+
+
+
+
+ ))}
+
+ );
+}
+
+/* ─── Center block — small, elegant, rotating ─── */
+function CenterBlock() {
+ const meshRef = useRef(null);
+ const pulseRef = useRef(null);
+
+ useFrame(({ clock }) => {
+ const t = clock.getElapsedTime();
+
+ if (meshRef.current) {
+ meshRef.current.rotation.y = t * 0.6;
+ meshRef.current.rotation.z = t * 0.3;
+ }
+
+ // Pulse ring expands outward periodically
+ if (pulseRef.current) {
+ const cycle = t % 3;
+ const expanding = cycle < 1;
+ const scale = expanding ? 1 + cycle * 2 : 3;
+ pulseRef.current.scale.setScalar(scale);
+ const mat = pulseRef.current.material as THREE.MeshBasicMaterial;
+ mat.opacity = expanding ? 0.08 * (1 - cycle) : 0;
+ }
+ });
+
+ return (
+
+
+
+
+
+ {/* Inner solid */}
+
+
+
+
+ {/* Expanding pulse ring */}
+
+
+
+
+
+ );
+}
+
+/* ─── Connection lines from validators to center ─── */
+function ConnectionLines() {
+ const lines = useMemo(() => {
+ return Array.from({ length: VALIDATOR_COUNT }, (_, i) => {
+ const angle = (i / VALIDATOR_COUNT) * Math.PI * 2;
+ const x = Math.cos(angle) * RING_RADIUS;
+ const z = Math.sin(angle) * RING_RADIUS;
+ const geo = new THREE.BufferGeometry().setFromPoints([
+ new THREE.Vector3(0, 0, 0),
+ new THREE.Vector3(x, 0, z),
+ ]);
+ const mat = new THREE.LineBasicMaterial({ color: "#a1a1aa", transparent: true, opacity: 0.04 });
+ return new THREE.Line(geo, mat);
+ });
+ }, []);
+
+ return (
+
+ {lines.map((line, i) => (
+
+ ))}
+
+ );
+}
+
+/* ─── Full Scene ─── */
+function ConsensusNetwork() {
+ const groupRef = useRef(null);
+
+ useFrame(({ clock }) => {
+ if (groupRef.current) {
+ groupRef.current.rotation.y = clock.getElapsedTime() * 0.05;
+ }
+ });
+
+ return (
+
+
+ {/* Outer validator ring (dots) */}
+
+ {/* Inner angel ring (dots) */}
+
+
+
+
+
+
+
+
+ );
+}
+
+export function ConsensusScene() {
+ return (
+
+ );
+}
diff --git a/website/src/components/landing/contrib-open-source.tsx b/website/src/components/landing/contrib-open-source.tsx
new file mode 100644
index 0000000..22e5883
--- /dev/null
+++ b/website/src/components/landing/contrib-open-source.tsx
@@ -0,0 +1,89 @@
+import { ExternalLink } from "lucide-react";
+import { Link } from "react-router";
+import { Section } from "../layout/section";
+import { SectionHeader } from "../ui/section-header";
+import { DashedPanel } from "../ui/dashed-panel";
+import { Button } from "../ui/button";
+import { CrosshairDivider } from "../ui/crosshair-divider";
+import { AnimateIn } from "../ui/animate-in";
+
+const repos = [
+ {
+ name: "Core Network",
+ url: "https://github.com/DeBrosOfficial/network",
+ },
+ {
+ name: "TypeScript SDK",
+ url: "https://github.com/DeBrosOfficial/network-ts-sdk",
+ },
+ {
+ name: "RootWallet",
+ url: "https://github.com/DeBrosOfficial/rootwallet",
+ },
+ {
+ name: "Orama Vault",
+ url: "https://github.com/DeBrosOfficial/orama-vault",
+ },
+];
+
+export function ContribOpenSource() {
+ return (
+ <>
+
+
+
+
+
+
+
+
+ We pair-program with new contributors. Every PR gets reviewed.
+ No question is too basic. The codebase has comprehensive
+ documentation, strict code style guides, and a test suite with
+ CI/CD.
+
+
+
+
+
+
+
+ Development Setup Guide
+
+
+
+
+ Code Style Guide
+
+
+
+
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/website/src/components/landing/contrib-services.tsx b/website/src/components/landing/contrib-services.tsx
new file mode 100644
index 0000000..ce88e67
--- /dev/null
+++ b/website/src/components/landing/contrib-services.tsx
@@ -0,0 +1,80 @@
+import {
+ Terminal,
+ Globe,
+ Database,
+ Zap,
+ Globe2,
+ HardDrive,
+ Lock,
+ KeyRound,
+ Code,
+ Cpu,
+ Shield,
+ Network,
+} from "lucide-react";
+import { Section } from "../layout/section";
+import { SectionHeader } from "../ui/section-header";
+import { DashedPanel } from "../ui/dashed-panel";
+import { Badge } from "../ui/badge";
+import { CrosshairDivider } from "../ui/crosshair-divider";
+import { AnimateIn } from "../ui/animate-in";
+
+const services = [
+ { icon: Terminal, title: "CLI", description: "Node management, deployment, monitoring", tech: "Go" },
+ { icon: Globe, title: "Gateway", description: "API gateway, routing, auth, rate limiting", tech: "Go" },
+ { icon: Database, title: "RQLite", description: "Distributed SQL with Raft consensus", tech: "Go" },
+ { icon: Zap, title: "Olric", description: "In-memory distributed cache", tech: "Go" },
+ { icon: Globe2, title: "CoreDNS", description: "Distributed DNS, custom domains", tech: "Go" },
+ { icon: HardDrive, title: "IPFS", description: "Content-addressed file storage", tech: "Go" },
+ { icon: Lock, title: "Vault", description: "Secrets management, Shamir's SSS", tech: "Zig" },
+ { icon: KeyRound, title: "RootWallet", description: "Multi-chain wallet authentication", tech: "TypeScript" },
+ { icon: Code, title: "TypeScript SDK", description: "Client library for all services", tech: "TypeScript" },
+ { icon: Cpu, title: "WASM Runtime", description: "Serverless function execution", tech: "Go" },
+ { icon: Shield, title: "WireGuard", description: "Encrypted overlay network mesh", tech: "Go" },
+ { icon: Network, title: "Cluster", description: "Node discovery, health, Hetzner API", tech: "Go" },
+];
+
+export function ContribServices() {
+ return (
+ <>
+
+
+
+
+
+
+ {services.map((service) => {
+ const Icon = service.icon;
+ return (
+
+
+
+
+
+ {service.title}
+
+
+
+ {service.description}
+
+
+ {service.tech}
+
+
+
+ );
+ })}
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/website/src/components/landing/contrib-stack.tsx b/website/src/components/landing/contrib-stack.tsx
new file mode 100644
index 0000000..45d698d
--- /dev/null
+++ b/website/src/components/landing/contrib-stack.tsx
@@ -0,0 +1,92 @@
+import { Section } from "../layout/section";
+import { SectionHeader } from "../ui/section-header";
+import { DashedPanel } from "../ui/dashed-panel";
+import { CrosshairDivider } from "../ui/crosshair-divider";
+import { AnimateIn } from "../ui/animate-in";
+
+const stacks = [
+ {
+ language: "Go",
+ reason: "Performance, concurrency, and a rich systems ecosystem. Powers the gateway, CLI, and all core services.",
+ items: [
+ "API Gateway (net/http)",
+ "RQLite integration (Raft)",
+ "Olric cache (consistent hashing)",
+ "WireGuard mesh controller",
+ "CLI tooling (cobra)",
+ "WASM runtime (wazero)",
+ ],
+ },
+ {
+ language: "Zig",
+ reason: "Manual memory control and zero-overhead cryptography. Powers the Vault guardian daemon.",
+ items: [
+ "Vault guardian daemon",
+ "Shamir's SSS (GF(2^8))",
+ "AES-256-GCM encryption",
+ "HMAC-SHA256 authentication",
+ "Binary TCP protocol",
+ "File-per-user storage",
+ ],
+ },
+ {
+ language: "TypeScript",
+ reason: "Isomorphic code for browser and Node.js. Powers the SDK, RootWallet, and all frontend tooling.",
+ items: [
+ "Network SDK (browser + Node)",
+ "RootWallet SDK",
+ "Website (React + Vite)",
+ "React hooks library",
+ "CLI companion tools",
+ ],
+ },
+];
+
+export function ContribStack() {
+ return (
+ <>
+
+
+
+
+
+
+ {stacks.map((stack) => (
+
+
+
+ {stack.language}
+
+
+
+ {stack.reason}
+
+
+
+ {stack.items.map((item) => (
+
+ →
+ {item}
+
+ ))}
+
+
+
+ ))}
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/website/src/components/landing/cta-section.tsx b/website/src/components/landing/cta-section.tsx
new file mode 100644
index 0000000..267b943
--- /dev/null
+++ b/website/src/components/landing/cta-section.tsx
@@ -0,0 +1,88 @@
+import { Link } from "react-router";
+import { ExternalLink } from "lucide-react";
+import type { ReactNode } from "react";
+import type { Persona } from "../../types/persona";
+import { Section } from "../layout/section";
+import { DashedPanel } from "../ui/dashed-panel";
+import { Button } from "../ui/button";
+import { AnimateIn } from "../ui/animate-in";
+import { StatusDot } from "../ui/status-dot";
+import { Redacted } from "../ui/redacted";
+
+const ctaContent: Record<
+ Persona,
+ {
+ heading: string;
+ description: ReactNode;
+ buttonText: string;
+ to: string;
+ external?: boolean;
+ }
+> = {
+ developer: {
+ heading: "Start building in 60 seconds.",
+ description:
+ "Free tier. No credit card. No email. Connect your wallet and deploy.",
+ buttonText: "Start Building",
+ to: "/dashboard",
+ },
+ operator: {
+ heading: "Start your node today.",
+ description:
+ <>Minimal hardware. Maximum rewards. Join operators powering the decentralized cloud.>,
+ buttonText: "Read Setup Guide",
+ to: "/docs/operator/getting-started",
+ },
+ contributor: {
+ heading: "Your first PR is waiting.",
+ description:
+ "Open source. Active development. Real impact. Pick an issue and start contributing.",
+ buttonText: "View on GitHub",
+ to: "https://github.com/DeBrosOfficial",
+ external: true,
+ },
+};
+
+export function CtaSection({ persona }: { persona: Persona }) {
+ const content = ctaContent[persona];
+
+ return (
+
+
+
+
+
+
+ 50+ Nodes Online
+
+
+
+ {content.heading}
+
+
+
+ {content.description}
+
+
+ {content.external ? (
+
+
+ {content.buttonText}
+
+
+
+ ) : (
+
+ {content.buttonText}
+
+ )}
+
+
+
+
+ );
+}
diff --git a/website/src/components/landing/dev-comparison.tsx b/website/src/components/landing/dev-comparison.tsx
new file mode 100644
index 0000000..a378911
--- /dev/null
+++ b/website/src/components/landing/dev-comparison.tsx
@@ -0,0 +1,131 @@
+import { cn } from "../../lib/utils";
+import { Section } from "../layout/section";
+import { SectionHeader } from "../ui/section-header";
+import { DashedPanel } from "../ui/dashed-panel";
+import { CrosshairDivider } from "../ui/crosshair-divider";
+import { AnimateIn } from "../ui/animate-in";
+
+const comparisons = [
+ {
+ aspect: "Data ownership",
+ legacy: "Stored on their servers",
+ orama: "Encrypted on distributed nodes you choose",
+ },
+ {
+ aspect: "Vendor lock-in",
+ legacy: "Deep. Migration is painful.",
+ orama: "None. Fully open source. Self-hostable.",
+ },
+ {
+ aspect: "Billing",
+ legacy: "Complex. Surprise charges.",
+ orama: "Free tier + Pay in $ORAMA. Pay in crypto.",
+ },
+ {
+ aspect: "Privacy",
+ legacy: "They can read your data.",
+ orama: "E2E encrypted. Orama Proxy routing.",
+ },
+ {
+ aspect: "Setup time",
+ legacy: "Hours — VPCs, IAM, YAML configs",
+ orama: "Minutes. One SDK. One CLI command.",
+ },
+ {
+ aspect: "Authentication",
+ legacy: "Email, password, OAuth, IAM roles",
+ orama: "Wallet-based. No passwords. No PII.",
+ },
+];
+
+export function DevComparison() {
+ return (
+ <>
+
+
+
+
+
+ {/* Desktop table layout */}
+
+ {/* Header row */}
+
+
+
+
+ Traditional Cloud
+
+
+
+
+ Orama Network
+
+
+
+
+ {/* Data rows */}
+ {comparisons.map((row, i) => (
+
+
+
+ {row.aspect}
+
+
+
+
+ {row.legacy}
+
+
+
+ {row.orama}
+
+
+ ))}
+
+
+ {/* Mobile card layout */}
+
+ {comparisons.map((row) => (
+
+
+ {row.aspect}
+
+
+
+
+ Traditional
+
+
+ {row.legacy}
+
+
+
+
+ Orama
+
+ {row.orama}
+
+
+
+ ))}
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/website/src/components/landing/dev-deploy.tsx b/website/src/components/landing/dev-deploy.tsx
new file mode 100644
index 0000000..608234e
--- /dev/null
+++ b/website/src/components/landing/dev-deploy.tsx
@@ -0,0 +1,133 @@
+import { Section } from "../layout/section";
+import { SectionHeader } from "../ui/section-header";
+import { Terminal } from "../ui/terminal";
+import { CrosshairDivider } from "../ui/crosshair-divider";
+import { Tabs, TabsList, TabsTrigger, TabsContent } from "../ui/tabs";
+import { AnimateIn } from "../ui/animate-in";
+import {
+ ReactLogo,
+ NextjsLogo,
+ GoLogo,
+ NodejsLogo,
+ WasmLogo,
+} from "../icons/tech-logos";
+import type { TerminalLine } from "../ui/terminal";
+
+interface DeployTab {
+ id: string;
+ label: string;
+ lines: TerminalLine[];
+}
+
+const deployTabs: DeployTab[] = [
+ {
+ id: "static",
+ label: "React / Static",
+ lines: [
+ { prefix: "$", text: "orama deploy static ./dist --name my-app" },
+ { prefix: "\u2192", text: "Uploading to IPFS... done" },
+ { prefix: "\u2192", text: "Pinned to 3 nodes" },
+ { prefix: "\u2713", text: "Live at https://my-app.orama.network" },
+ ],
+ },
+ {
+ id: "nextjs",
+ label: "Next.js SSR",
+ lines: [
+ { prefix: "$", text: "orama deploy nextjs . --name my-next --ssr" },
+ { prefix: "\u2192", text: "Building standalone output..." },
+ { prefix: "\u2192", text: "Deploying to 3 nodes" },
+ { prefix: "\u2713", text: "SSR running at https://my-next.orama.network" },
+ ],
+ },
+ {
+ id: "go",
+ label: "Go API",
+ lines: [
+ { prefix: "$", text: "orama deploy go ./cmd/api --name my-api" },
+ { prefix: "\u2192", text: "Cross-compiling linux/amd64..." },
+ { prefix: "\u2192", text: "Health check /health verified" },
+ { prefix: "\u2713", text: "API live at https://api.orama.network" },
+ ],
+ },
+ {
+ id: "node",
+ label: "Node.js",
+ lines: [
+ { prefix: "$", text: "orama deploy nodejs . --name my-server" },
+ { prefix: "\u2192", text: "Detecting start command..." },
+ { prefix: "\u2192", text: "Deploying to 3 nodes" },
+ { prefix: "\u2713", text: "Server running at https://srv.orama.network" },
+ ],
+ },
+ {
+ id: "wasm",
+ label: "WASM Function",
+ lines: [
+ { prefix: "$", text: "orama function deploy --name resize" },
+ { prefix: "\u2192", text: "Compiled to WebAssembly" },
+ { prefix: "\u2192", text: "Deployed network-wide" },
+ { prefix: "\u2713", text: "Invoke via SDK or HTTP trigger" },
+ ],
+ },
+];
+
+export function DevDeploy() {
+ return (
+ <>
+
+
+
+
+
+
+ {[
+ { Logo: ReactLogo, name: "React" },
+ { Logo: NextjsLogo, name: "Next.js" },
+ { Logo: GoLogo, name: "Go" },
+ { Logo: NodejsLogo, name: "Node.js" },
+ { Logo: WasmLogo, name: "WASM" },
+ ].map(({ Logo, name }) => (
+
+
+ {name}
+
+ ))}
+
+
+
+ Static sites, Next.js with SSR, Go APIs, Node.js servers, WASM
+ functions. Deploy from your terminal. No infrastructure to manage. No
+ YAML to write.
+
+
+
+
+ {deployTabs.map((tab) => (
+
+ {tab.label}
+
+ ))}
+
+
+ {deployTabs.map((tab) => (
+
+
+
+ ))}
+
+
+
+ Every deploy lands on distributed nodes. Automatic TLS. Health
+ checks. Custom domains. Zero downtime.
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/website/src/components/landing/dev-dns.tsx b/website/src/components/landing/dev-dns.tsx
new file mode 100644
index 0000000..5be78bf
--- /dev/null
+++ b/website/src/components/landing/dev-dns.tsx
@@ -0,0 +1,70 @@
+import { Globe, Lock, Link2 } from "lucide-react";
+import { Section } from "../layout/section";
+import { SectionHeader } from "../ui/section-header";
+import { Terminal } from "../ui/terminal";
+import { CrosshairDivider } from "../ui/crosshair-divider";
+import { AnimateIn } from "../ui/animate-in";
+
+export function DevDns() {
+ return (
+ <>
+
+
+
+
+
+
+ {/* Left — features */}
+
+
+
+
+
Orama Nameservers
+
+ Point to ns1.orama.network and ns2.orama.network. Your app gets a subdomain instantly.
+
+
+
+
+
+
+
Automatic TLS
+
+ Every domain gets a valid certificate. No manual cert management. No renewal headaches.
+
+
+
+
+
+
+
Custom Domains
+
+ Add any domain via CLI or SDK. CNAME to your Orama app and it just works.
+
+
+
+
+
+ {/* Right — terminal */}
+
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/website/src/components/landing/dev-features.tsx b/website/src/components/landing/dev-features.tsx
new file mode 100644
index 0000000..1c07cf0
--- /dev/null
+++ b/website/src/components/landing/dev-features.tsx
@@ -0,0 +1,107 @@
+import {
+ Database,
+ HardDrive,
+ Cpu,
+ Archive,
+ Radio,
+ Video,
+ Globe,
+ Lock,
+} from "lucide-react";
+import { Section } from "../layout/section";
+import { SectionHeader } from "../ui/section-header";
+import { FeatureCard } from "../ui/feature-card";
+import { CrosshairDivider } from "../ui/crosshair-divider";
+import { AnimateIn } from "../ui/animate-in";
+
+const features = [
+ {
+ icon: ,
+ title: "Network SQL",
+ subtitle: "replaces RDS / Aurora",
+ description:
+ "Distributed SQL with Raft consensus. ACID transactions. Automatic failover across nodes.",
+ },
+ {
+ icon: ,
+ title: "Network Cache",
+ subtitle: "replaces ElastiCache",
+ description:
+ "In-memory key-value store with TTL, replication, and namespace isolation via Olric.",
+ },
+ {
+ icon: ,
+ title: "Network Functions",
+ subtitle: "replaces Lambda",
+ description:
+ "Serverless WebAssembly. Write in Go, compile to WASM, deploy network-wide.",
+ },
+ {
+ icon: ,
+ title: "Network Storage",
+ subtitle: "replaces S3 / R2",
+ description:
+ "Content-addressed storage on IPFS. Upload, pin, and retrieve from any node.",
+ },
+ {
+ icon: ,
+ title: "Network PubSub",
+ subtitle: "replaces SNS / SQS",
+ description:
+ "Real-time topic-based messaging with WebSocket native support.",
+ },
+ {
+ icon: ,
+ title: "Network WebRTC",
+ subtitle: "replaces Twilio / Daily",
+ description:
+ "SFU + TURN servers for video, audio, and data channels.",
+ },
+ {
+ icon: ,
+ title: "Network DNS",
+ subtitle: "replaces Route53",
+ description:
+ "CoreDNS distributed across the mesh. Custom domains built in.",
+ },
+ {
+ icon: ,
+ title: "Network Vault",
+ subtitle: "replaces Secrets Manager",
+ description:
+ "Shamir's Secret Sharing. Secrets split across nodes. No single point of compromise.",
+ },
+];
+
+export function DevFeatures() {
+ return (
+ <>
+
+
+
+
+
+
+ {features.map((feature) => (
+
+ ))}
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/website/src/components/landing/dev-quickstart.tsx b/website/src/components/landing/dev-quickstart.tsx
new file mode 100644
index 0000000..10b84e3
--- /dev/null
+++ b/website/src/components/landing/dev-quickstart.tsx
@@ -0,0 +1,108 @@
+import { Link } from "react-router";
+import { Section } from "../layout/section";
+import { SectionHeader } from "../ui/section-header";
+import { SyntaxCodeBlock } from "../ui/syntax-code-block";
+import { Badge } from "../ui/badge";
+import { DashedPanel } from "../ui/dashed-panel";
+import { CrosshairDivider } from "../ui/crosshair-divider";
+import { Button } from "../ui/button";
+import { ExternalLink } from "lucide-react";
+import { AnimateIn } from "../ui/animate-in";
+
+const sdkCode = `import { OramaClient } from '@debros/network-ts-sdk'
+
+const client = new OramaClient({
+ gateway: 'https://orama-testnet.network',
+ apiKey: process.env.ORAMA_API_KEY
+})
+
+// SQL Database (like MySQL, powered by RQLite)
+const users = await client.db.query(
+ 'SELECT * FROM users WHERE active = true'
+)
+
+// Key-Value Cache (like Redis, powered by Olric)
+await client.kv.set('session:abc', { theme: 'dark' }, { ttl: 3600 })
+
+// Real-Time Messaging
+client.pubsub.subscribe('chat:lobby', (msg) => {
+ console.log(msg)
+})
+
+// File Storage (IPFS)
+const cid = await client.storage.upload(myFile)
+
+// Serverless Functions (WASM)
+await client.functions.invoke('resize-image', { cid, width: 800 })`;
+
+const setupSteps = [
+ "Connect with Root Wallet",
+ "Get your API key from the dashboard",
+ "Import the SDK and start building",
+];
+
+export function DevQuickstart() {
+ return (
+ <>
+
+
+
+
+
+ {/* Setup steps */}
+
+
+ {setupSteps.map((step, i) => (
+
+ ))}
+
+
+
+ {/* Code block */}
+
+
+ {/* Explainer */}
+
+ RQLite is our distributed SQL database — like MySQL but with Raft consensus and automatic failover.
+ Olric is our distributed cache — like Redis but built into every node. They're already running on the network. You just use them.
+
+
+ {/* Links */}
+
+
+ Works with React, Next.js, Node.js, and any JavaScript runtime.
+
+
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/website/src/components/landing/docs-section.tsx b/website/src/components/landing/docs-section.tsx
new file mode 100644
index 0000000..6499591
--- /dev/null
+++ b/website/src/components/landing/docs-section.tsx
@@ -0,0 +1,127 @@
+import { Link } from "react-router";
+import { BookOpen, ArrowRight, FileText, Terminal, Code } from "lucide-react";
+import type { Persona } from "../../types/persona";
+import { Section } from "../layout/section";
+import { SectionHeader } from "../ui/section-header";
+import { CrosshairDivider } from "../ui/crosshair-divider";
+import { AnimateIn } from "../ui/animate-in";
+
+interface DocLink {
+ title: string;
+ description: string;
+ href: string;
+ icon: React.ReactNode;
+}
+
+const docsContent: Record = {
+ developer: {
+ subtitle: "Guides and references to help you deploy, manage, and scale on Orama.",
+ links: [
+ {
+ title: "Getting Started",
+ description: "Deploy your first app in under a minute",
+ href: "/docs",
+ icon: ,
+ },
+ {
+ title: "CLI Reference",
+ description: "Full command reference for the Orama CLI",
+ href: "/docs",
+ icon: ,
+ },
+ {
+ title: "SDK & APIs",
+ description: "Integrate Orama services into your application",
+ href: "/docs",
+ icon: ,
+ },
+ ],
+ },
+ operator: {
+ subtitle: "Everything you need to set up, configure, and maintain your Orama node.",
+ links: [
+ {
+ title: "Operator Setup Guide",
+ description: "Install prerequisites and connect your node",
+ href: "/docs/operator/getting-started",
+ icon: ,
+ },
+ {
+ title: "Node Configuration",
+ description: "Hardware requirements, ports, and environment setup",
+ href: "/docs/operator/getting-started",
+ icon: ,
+ },
+ {
+ title: "Monitoring & Rewards",
+ description: "Track uptime, performance, and earnings",
+ href: "/docs/operator/getting-started",
+ icon: ,
+ },
+ ],
+ },
+ contributor: {
+ subtitle: "Architecture docs, contribution guidelines, and the full technical stack.",
+ links: [
+ {
+ title: "Architecture Overview",
+ description: "How the gateway, services, and mesh work together",
+ href: "/docs",
+ icon: ,
+ },
+ {
+ title: "Contributing Guide",
+ description: "Setup your dev environment and submit your first PR",
+ href: "/docs",
+ icon: ,
+ },
+ {
+ title: "API Reference",
+ description: "Internal APIs, endpoints, and data models",
+ href: "/docs",
+ icon: ,
+ },
+ ],
+ },
+};
+
+export function DocsSection({ persona }: { persona: Persona }) {
+ const content = docsContent[persona];
+
+ return (
+ <>
+
+
+
+
+
+
+ {content.links.map((doc) => (
+
+
+ {doc.icon}
+
+
+
+ ))}
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/website/src/components/landing/email-capture.tsx b/website/src/components/landing/email-capture.tsx
new file mode 100644
index 0000000..90251e4
--- /dev/null
+++ b/website/src/components/landing/email-capture.tsx
@@ -0,0 +1,81 @@
+import { useState } from "react";
+import { Section } from "../layout/section";
+import { DashedPanel } from "../ui/dashed-panel";
+import { Button } from "../ui/button";
+import { AnimateIn } from "../ui/animate-in";
+import { ArrowRight } from "lucide-react";
+
+export function EmailCapture({
+ heading = "Get early access & updates.",
+ description = "Be the first to know when public node onboarding, the token launch, and mainnet go live.",
+}: {
+ heading?: string;
+ description?: string;
+}) {
+ const [email, setEmail] = useState("");
+ const [submitted, setSubmitted] = useState(false);
+ const [error, setError] = useState("");
+
+ function handleSubmit(e: React.FormEvent) {
+ e.preventDefault();
+ setError("");
+
+ if (!email || !email.includes("@") || !email.includes(".")) {
+ setError("Please enter a valid email address.");
+ return;
+ }
+
+ // TODO: Replace with actual API endpoint
+ console.log("Email captured:", email);
+ setSubmitted(true);
+ }
+
+ return (
+
+
+
+
+
+ {heading}
+
+
+ {description}
+
+
+ {submitted ? (
+
+
+ You're on the list
+
+ ) : (
+
+ )}
+
+ {error && (
+
{error}
+ )}
+
+
+ No spam. Unsubscribe anytime.
+
+
+
+
+
+ );
+}
diff --git a/website/src/components/landing/growth-vault-scene.tsx b/website/src/components/landing/growth-vault-scene.tsx
new file mode 100644
index 0000000..2633f37
--- /dev/null
+++ b/website/src/components/landing/growth-vault-scene.tsx
@@ -0,0 +1,354 @@
+import { useRef, useMemo } from "react";
+import { Canvas, useFrame } from "@react-three/fiber";
+import { Float } from "@react-three/drei";
+import * as THREE from "three";
+
+const PARTICLE_COUNT = 60;
+const ORAMA_RING_RADIUS = 1.6;
+const PROXY_RING_RADIUS = 1.2;
+
+/* ─── Wireframe vault (dodecahedron) ─── */
+function Vault() {
+ const meshRef = useRef(null);
+ const innerRef = useRef(null);
+ const pulseRef = useRef(null);
+
+ useFrame(({ clock }) => {
+ const t = clock.getElapsedTime();
+
+ if (meshRef.current) {
+ meshRef.current.rotation.y = t * 0.15;
+ meshRef.current.rotation.x = Math.sin(t * 0.1) * 0.1;
+ }
+
+ // Inner core pulses
+ if (innerRef.current) {
+ const pulse = 0.4 + 0.15 * Math.sin(t * 1.5);
+ const mat = innerRef.current.material as THREE.MeshBasicMaterial;
+ mat.opacity = pulse;
+ const s = 1 + 0.08 * Math.sin(t * 1.5);
+ innerRef.current.scale.setScalar(s);
+ }
+
+ // Expanding pulse ring
+ if (pulseRef.current) {
+ const cycle = t % 4;
+ const expanding = cycle < 1.5;
+ const scale = expanding ? 1 + cycle * 1.5 : 3.25;
+ pulseRef.current.scale.setScalar(scale);
+ const mat = pulseRef.current.material as THREE.MeshBasicMaterial;
+ mat.opacity = expanding ? 0.06 * (1 - cycle / 1.5) : 0;
+ }
+ });
+
+ return (
+
+ {/* Outer wireframe vault */}
+
+
+
+
+
+ {/* Inner glowing core */}
+
+
+
+
+
+ {/* Pulse ring */}
+
+
+
+
+
+ );
+}
+
+/* ─── Orbital ring made of dots ─── */
+function OrbitalRing({
+ radius,
+ count,
+ color,
+ opacity,
+ dotSize,
+ tilt,
+}: {
+ radius: number;
+ count: number;
+ color: string;
+ opacity: number;
+ dotSize: number;
+ tilt: [number, number, number];
+}) {
+ const dots = useMemo(() => {
+ return Array.from({ length: count }, (_, i) => {
+ const angle = (i / count) * Math.PI * 2;
+ return [
+ Math.cos(angle) * radius,
+ Math.sin(angle) * radius,
+ ] as [number, number];
+ });
+ }, [radius, count]);
+
+ return (
+
+ {dots.map(([x, y], i) => (
+
+
+
+
+ ))}
+
+ );
+}
+
+/* ─── Orbiting token particles ($ORAMA ring) ─── */
+function OramaOrbit() {
+ const groupRef = useRef(null);
+ const meshRefs = useRef<(THREE.Mesh | null)[]>([]);
+ const count = 10;
+
+ useFrame(({ clock }) => {
+ const t = clock.getElapsedTime();
+ meshRefs.current.forEach((mesh, i) => {
+ if (!mesh) return;
+ const angle = (i / count) * Math.PI * 2 + t * 0.3;
+ mesh.position.x = Math.cos(angle) * ORAMA_RING_RADIUS;
+ mesh.position.z = Math.sin(angle) * ORAMA_RING_RADIUS;
+ mesh.position.y = Math.sin(t * 2 + i * 0.8) * 0.05;
+
+ const mat = mesh.material as THREE.MeshBasicMaterial;
+ const pulse = Math.sin(t * 1.5 - i * 0.6);
+ mat.opacity = 0.3 + 0.4 * Math.max(0, pulse);
+ const s = 1 + 0.3 * Math.max(0, pulse);
+ mesh.scale.setScalar(s);
+ });
+ });
+
+ return (
+
+ {Array.from({ length: count }, (_, i) => (
+ {
+ meshRefs.current[i] = el;
+ }}
+ >
+
+
+
+ ))}
+
+ );
+}
+
+/* ─── Orbiting token particles (Proxy ring — teal) ─── */
+function ProxyOrbit() {
+ const groupRef = useRef(null);
+ const meshRefs = useRef<(THREE.Mesh | null)[]>([]);
+ const count = 7;
+
+ useFrame(({ clock }) => {
+ const t = clock.getElapsedTime();
+ meshRefs.current.forEach((mesh, i) => {
+ if (!mesh) return;
+ // Counter-rotate for visual contrast
+ const angle = (i / count) * Math.PI * 2 - t * 0.4;
+ mesh.position.x = Math.cos(angle) * PROXY_RING_RADIUS;
+ mesh.position.z = Math.sin(angle) * PROXY_RING_RADIUS;
+ mesh.position.y = Math.sin(t * 2.5 + i * 1.2) * 0.06;
+
+ const mat = mesh.material as THREE.MeshBasicMaterial;
+ const pulse = Math.sin(t * 2 + i * 0.9);
+ mat.opacity = 0.4 + 0.3 * Math.max(0, pulse);
+ });
+ });
+
+ return (
+
+ {Array.from({ length: count }, (_, i) => (
+ {
+ meshRefs.current[i] = el;
+ }}
+ >
+
+
+
+ ))}
+
+ );
+}
+
+/* ─── Inflowing capital particles ─── */
+function InflowParticles() {
+ const ref = useRef(null);
+
+ const { positions, velocities } = useMemo(() => {
+ const pos = new Float32Array(PARTICLE_COUNT * 3);
+ const vel = new Float32Array(PARTICLE_COUNT * 3);
+
+ for (let i = 0; i < PARTICLE_COUNT; i++) {
+ // Start at random positions on a large sphere
+ const theta = Math.random() * Math.PI * 2;
+ const phi = Math.acos(2 * Math.random() - 1);
+ const r = 3 + Math.random() * 2;
+
+ pos[i * 3] = r * Math.sin(phi) * Math.cos(theta);
+ pos[i * 3 + 1] = r * Math.sin(phi) * Math.sin(theta);
+ pos[i * 3 + 2] = r * Math.cos(phi);
+
+ // Velocity toward center
+ vel[i * 3] = -pos[i * 3] * 0.008;
+ vel[i * 3 + 1] = -pos[i * 3 + 1] * 0.008;
+ vel[i * 3 + 2] = -pos[i * 3 + 2] * 0.008;
+
+ }
+
+ return { positions: pos, velocities: vel };
+ }, []);
+
+ useFrame(({ clock }) => {
+ if (!ref.current) return;
+ const posAttr = ref.current.geometry.attributes
+ .position as THREE.BufferAttribute;
+ const arr = posAttr.array as Float32Array;
+ const t = clock.getElapsedTime();
+
+ for (let i = 0; i < PARTICLE_COUNT; i++) {
+ const ix = i * 3;
+ arr[ix] += velocities[ix];
+ arr[ix + 1] += velocities[ix + 1];
+ arr[ix + 2] += velocities[ix + 2];
+
+ // Reset when close to center
+ const dist = Math.sqrt(
+ arr[ix] ** 2 + arr[ix + 1] ** 2 + arr[ix + 2] ** 2,
+ );
+ if (dist < 0.3) {
+ const theta = Math.random() * Math.PI * 2;
+ const phi = Math.acos(2 * Math.random() - 1);
+ const r = 3 + Math.random() * 2;
+ arr[ix] = r * Math.sin(phi) * Math.cos(theta);
+ arr[ix + 1] = r * Math.sin(phi) * Math.sin(theta);
+ arr[ix + 2] = r * Math.cos(phi);
+ velocities[ix] = -arr[ix] * (0.006 + Math.random() * 0.004);
+ velocities[ix + 1] = -arr[ix + 1] * (0.006 + Math.random() * 0.004);
+ velocities[ix + 2] = -arr[ix + 2] * (0.006 + Math.random() * 0.004);
+ }
+
+ // Add slight spiral motion
+ const spiral = 0.002;
+ const cx = arr[ix];
+ const cz = arr[ix + 2];
+ arr[ix] += -cz * spiral;
+ arr[ix + 2] += cx * spiral;
+ }
+
+ posAttr.needsUpdate = true;
+
+ // Slow overall rotation
+ ref.current.rotation.y = t * 0.02;
+ });
+
+ return (
+
+
+
+
+
+
+ );
+}
+
+/* ─── Full scene composition ─── */
+function GrowthVaultNetwork() {
+ const groupRef = useRef(null);
+
+ useFrame(({ clock }) => {
+ if (groupRef.current) {
+ groupRef.current.rotation.y = clock.getElapsedTime() * 0.03;
+ }
+ });
+
+ return (
+
+
+ {/* Dot rings for orbit paths */}
+
+
+
+ {/* Vault core */}
+
+
+ {/* Orbiting tokens */}
+
+
+
+
+
+ {/* Capital flowing in */}
+
+
+
+ );
+}
+
+export function GrowthVaultScene() {
+ return (
+
+ );
+}
diff --git a/website/src/components/landing/hero.tsx b/website/src/components/landing/hero.tsx
new file mode 100644
index 0000000..6469d94
--- /dev/null
+++ b/website/src/components/landing/hero.tsx
@@ -0,0 +1,204 @@
+import { Link } from "react-router";
+import type { Persona } from "../../types/persona";
+import { Section } from "../layout/section";
+import { Badge } from "../ui/badge";
+import { Button } from "../ui/button";
+import { CrosshairDivider } from "../ui/crosshair-divider";
+import { ExternalLink } from "lucide-react";
+
+const heroContent: Record<
+ Persona,
+ {
+ label: string;
+ titleLine1: string;
+ titleLine2: string;
+ description: string;
+ primaryCta: { text: string; to: string; external?: boolean };
+ secondaryCta: { text: string; to: string };
+ comingSoon?: boolean;
+ badges: string[];
+ }
+> = {
+ developer: {
+ label: "",
+ titleLine1: "Ship faster. Pay less.",
+ titleLine2: "Own everything.",
+ description:
+ "Deploy your React app, API, or database in one command. No AWS console. No YAML. No surprise bills. Just push and ship.",
+ primaryCta: { text: "Start Building", to: "/dashboard" },
+ secondaryCta: { text: "See Documentation", to: "/docs" },
+ badges: ["Free Tier (No Credit Card)", "Zero Telemetry", "Decentralized Infrastructure"],
+ },
+ operator: {
+ label: "",
+ titleLine1: "Earn by powering",
+ titleLine2: "the decentralized cloud.",
+ description:
+ "Run an Orama node on any VPS. Earn $ORAMA tokens for every request you serve. Join the infrastructure that replaces AWS.",
+ primaryCta: { text: "Become an Operator", to: "/dashboard" },
+ secondaryCta: { text: "See Documentation", to: "/docs" },
+ comingSoon: true,
+ badges: ["$ORAMA Rewards", "Deploy on Any VPS", "100+ Operators"],
+ },
+ contributor: {
+ label: "",
+ titleLine1: "Become a Contributor",
+ titleLine2: "on Orama Network.",
+ description:
+ "Help build the decentralized cloud. From the gateway to the CLI, every service is open source and needs sharp engineers.",
+ primaryCta: {
+ text: "View on GitHub",
+ to: "https://github.com/DeBrosOfficial",
+ external: true,
+ },
+ secondaryCta: { text: "See Documentation", to: "/docs" },
+ badges: ["Open Source", "Go + TypeScript", "Active Community"],
+ },
+};
+
+function HeroCrosshairGrid() {
+ return (
+
+
+ {/* Vertical center line */}
+
+ {/* Horizontal center line */}
+
+ {/* Center crosshair circle */}
+
+ {/* Outer ring */}
+
+
+
+ {/* Corner crosshairs */}
+
+
+
+
+
+ );
+}
+
+export function LandingHero({ persona }: { persona: Persona }) {
+ const content = heroContent[persona];
+
+ return (
+ <>
+
+
+
+
+ {content.label}
+
+
+ {content.comingSoon && (
+
+ COMING SOON
+
+ )}
+
+
+ {content.titleLine1}
+
+ {content.titleLine2}
+
+
+
+ {content.badges.map((badge) => (
+
+ {badge}
+
+ ))}
+
+
+
+ {content.description}
+
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/website/src/components/landing/investor-form.tsx b/website/src/components/landing/investor-form.tsx
new file mode 100644
index 0000000..834ed6e
--- /dev/null
+++ b/website/src/components/landing/investor-form.tsx
@@ -0,0 +1,114 @@
+import { useState } from "react";
+import { Section } from "../layout/section";
+import { SectionHeader } from "../ui/section-header";
+import { DashedPanel } from "../ui/dashed-panel";
+import { Button } from "../ui/button";
+import { AnimateIn } from "../ui/animate-in";
+import { ArrowRight } from "lucide-react";
+
+const WEB3FORMS_ACCESS_KEY = "YOUR_ACCESS_KEY_HERE";
+
+const inputClass =
+ "w-full px-4 py-3 bg-surface-2 border border-border text-fg text-sm font-mono placeholder:text-muted/50 focus:outline-none focus:border-accent/50 transition-colors rounded-sm";
+
+export function InvestorForm() {
+ const [submitted, setSubmitted] = useState(false);
+ const [error, setError] = useState("");
+ const [loading, setLoading] = useState(false);
+
+ async function handleSubmit(e: React.FormEvent) {
+ e.preventDefault();
+ setError("");
+ setLoading(true);
+
+ const formData = new FormData(e.currentTarget);
+ formData.append("access_key", WEB3FORMS_ACCESS_KEY);
+ formData.append("subject", "New Investor Inquiry — Orama Network");
+ formData.append("from_name", "Orama Network Website");
+
+ try {
+ const res = await fetch("https://api.web3forms.com/submit", {
+ method: "POST",
+ body: formData,
+ });
+ const data = await res.json();
+ if (data.success) {
+ setSubmitted(true);
+ } else {
+ setError("Something went wrong. Please try again.");
+ }
+ } catch {
+ setError("Network error. Please try again.");
+ } finally {
+ setLoading(false);
+ }
+ }
+
+ return (
+
+
+
+
+
+
+ {submitted ? (
+
+
+
+ Message Received
+
+
+ Thanks for reaching out. We'll get back to you shortly.
+
+
+ ) : (
+
+ )}
+
+
+
+
+ );
+}
diff --git a/website/src/components/landing/network-visualization.tsx b/website/src/components/landing/network-visualization.tsx
new file mode 100644
index 0000000..7752248
--- /dev/null
+++ b/website/src/components/landing/network-visualization.tsx
@@ -0,0 +1,303 @@
+import { useRef, useMemo, useState, useEffect } from "react";
+import { Canvas, useFrame } from "@react-three/fiber";
+import { Float } from "@react-three/drei";
+import * as THREE from "three";
+
+/* ─────────────────────────────────────────────
+ Step 0/1: Nodes appear and connect
+ Step 1/2: Deploy packets flow through the network
+ Step 2/3: User device connects, app loads
+ ───────────────────────────────────────────── */
+
+interface NodeData {
+ position: THREE.Vector3;
+ baseScale: number;
+ phase: number;
+}
+
+interface EdgeData {
+ from: number;
+ to: number;
+}
+
+/* Generate deterministic node positions on a sphere */
+function generateNodes(count: number, radius: number): NodeData[] {
+ const nodes: NodeData[] = [];
+ const goldenRatio = (1 + Math.sqrt(5)) / 2;
+
+ for (let i = 0; i < count; i++) {
+ const theta = (2 * Math.PI * i) / goldenRatio;
+ const phi = Math.acos(1 - (2 * (i + 0.5)) / count);
+ const x = radius * Math.sin(phi) * Math.cos(theta);
+ const y = radius * Math.sin(phi) * Math.sin(theta);
+ const z = radius * Math.cos(phi);
+
+ nodes.push({
+ position: new THREE.Vector3(x, y, z),
+ baseScale: 0.03 + Math.random() * 0.03,
+ phase: Math.random() * Math.PI * 2,
+ });
+ }
+ return nodes;
+}
+
+/* Generate edges between nearby nodes */
+function generateEdges(nodes: NodeData[], maxDist: number): EdgeData[] {
+ const edges: EdgeData[] = [];
+ for (let i = 0; i < nodes.length; i++) {
+ for (let j = i + 1; j < nodes.length; j++) {
+ if (nodes[i].position.distanceTo(nodes[j].position) < maxDist) {
+ edges.push({ from: i, to: j });
+ }
+ }
+ }
+ return edges;
+}
+
+const NODE_COUNT = 40;
+const SPHERE_RADIUS = 2.8;
+const EDGE_MAX_DIST = 2.2;
+
+/* ─── Glowing Node ─── */
+function GlowNode({
+ node,
+ active,
+ highlight,
+}: {
+ node: NodeData;
+ active: boolean;
+ highlight: boolean;
+}) {
+ const meshRef = useRef(null);
+
+ useFrame(({ clock }) => {
+ if (!meshRef.current) return;
+ const t = clock.getElapsedTime();
+ const pulse = 1 + 0.3 * Math.sin(t * 2 + node.phase);
+ const targetScale = active ? node.baseScale * pulse : 0;
+ const current = meshRef.current.scale.x;
+ const next = THREE.MathUtils.lerp(current, targetScale, 0.05);
+ meshRef.current.scale.setScalar(next);
+ });
+
+ return (
+
+
+
+
+ );
+}
+
+/* ─── Network Edges ─── */
+function NetworkEdges({
+ nodes,
+ edges,
+ active,
+}: {
+ nodes: NodeData[];
+ edges: EdgeData[];
+ active: boolean;
+}) {
+ const linesRef = useRef(null);
+ const opacityRef = useRef(0);
+
+ useFrame(() => {
+ const target = active ? 0.15 : 0;
+ opacityRef.current = THREE.MathUtils.lerp(opacityRef.current, target, 0.03);
+
+ if (!linesRef.current) return;
+ linesRef.current.children.forEach((child) => {
+ const line = child as THREE.Line;
+ const mat = line.material as THREE.LineBasicMaterial;
+ mat.opacity = opacityRef.current;
+ });
+ });
+
+ const lineObjects = useMemo(() => {
+ return edges.map((edge) => {
+ const geo = new THREE.BufferGeometry().setFromPoints([
+ nodes[edge.from].position,
+ nodes[edge.to].position,
+ ]);
+ const mat = new THREE.LineBasicMaterial({
+ color: "#4169E1",
+ transparent: true,
+ opacity: 0,
+ });
+ return new THREE.Line(geo, mat);
+ });
+ }, [nodes, edges]);
+
+ return (
+
+ {lineObjects.map((lineObj, i) => (
+
+ ))}
+
+ );
+}
+
+/* ─── Deploy Packets (Step 2) ─── */
+function DeployPackets({
+ nodes,
+ edges,
+ active,
+}: {
+ nodes: NodeData[];
+ edges: EdgeData[];
+ active: boolean;
+}) {
+ const groupRef = useRef(null);
+ const packetCount = 12;
+
+ // Each packet travels along a random edge
+ const packetData = useMemo(() => {
+ return Array.from({ length: packetCount }, (_, i) => {
+ const edge = edges[i % edges.length];
+ return {
+ from: nodes[edge.from].position,
+ to: nodes[edge.to].position,
+ speed: 0.3 + Math.random() * 0.4,
+ offset: Math.random(),
+ };
+ });
+ }, [nodes, edges]);
+
+ useFrame(({ clock }) => {
+ if (!groupRef.current) return;
+ const t = clock.getElapsedTime();
+
+ groupRef.current.children.forEach((child, i) => {
+ const mesh = child as THREE.Mesh;
+ const data = packetData[i];
+ const progress = ((t * data.speed + data.offset) % 1);
+
+ mesh.position.lerpVectors(data.from, data.to, progress);
+ const targetScale = active ? 0.035 : 0;
+ const current = mesh.scale.x;
+ mesh.scale.setScalar(THREE.MathUtils.lerp(current, targetScale, 0.05));
+ });
+ });
+
+ return (
+
+ {packetData.map((_, i) => (
+
+
+
+
+ ))}
+
+ );
+}
+
+/* ─── User Device (Step 3) ─── */
+function UserDevice({ active }: { active: boolean }) {
+ const groupRef = useRef(null);
+ const beamRef = useRef(null);
+
+ useFrame(({ clock }) => {
+ if (!groupRef.current) return;
+ const targetScale = active ? 1 : 0;
+ const current = groupRef.current.scale.x;
+ const next = THREE.MathUtils.lerp(current, targetScale, 0.04);
+ groupRef.current.scale.setScalar(next);
+
+ if (beamRef.current) {
+ const t = clock.getElapsedTime();
+ const mat = beamRef.current.material as THREE.MeshBasicMaterial;
+ mat.opacity = active ? 0.1 + 0.05 * Math.sin(t * 3) : 0;
+ }
+ });
+
+ return (
+
+
+ {/* Phone shape */}
+
+
+
+
+ {/* Screen */}
+
+
+
+
+
+ {/* Connection beam to network */}
+
+
+
+
+
+ );
+}
+
+/* ─── Scene ─── */
+function NetworkScene({ step }: { step: number }) {
+ const groupRef = useRef(null);
+
+ const nodes = useMemo(() => generateNodes(NODE_COUNT, SPHERE_RADIUS), []);
+ const edges = useMemo(() => generateEdges(nodes, EDGE_MAX_DIST), [nodes]);
+
+ useFrame(({ clock }) => {
+ if (!groupRef.current) return;
+ groupRef.current.rotation.y = clock.getElapsedTime() * 0.05;
+ });
+
+ return (
+
+ {/* Edges */}
+ = 0} />
+
+ {/* Nodes */}
+ {nodes.map((node, i) => (
+ = 0}
+ highlight={step >= 2 && i % 5 === 0}
+ />
+ ))}
+
+ {/* Deploy packets (step 2) */}
+ = 1} />
+
+ {/* User device (step 3) */}
+ = 2} />
+
+ );
+}
+
+/* ─── Exported Component ─── */
+export function NetworkVisualization({ step }: { step: number }) {
+ const [mounted, setMounted] = useState(false);
+
+ useEffect(() => {
+ setMounted(true);
+ }, []);
+
+ if (!mounted) {
+ return (
+
+ );
+ }
+
+ return (
+
+ );
+}
diff --git a/website/src/components/landing/ops-anyone.tsx b/website/src/components/landing/ops-anyone.tsx
new file mode 100644
index 0000000..65e8f69
--- /dev/null
+++ b/website/src/components/landing/ops-anyone.tsx
@@ -0,0 +1,62 @@
+import { Section } from "../layout/section";
+import { SectionHeader } from "../ui/section-header";
+import { SpecTable } from "../ui/spec-table";
+import { DashedPanel } from "../ui/dashed-panel";
+import { CrosshairDivider } from "../ui/crosshair-divider";
+import { Badge } from "../ui/badge";
+import { AnimateIn } from "../ui/animate-in";
+const rewardSpec = [
+ { label: "Reward token", value: "$ORAMA — uptime, bandwidth, compute" },
+ { label: "Privacy relay", value: "Orama Proxy on every node" },
+ { label: "Routing", value: "Onion-routed traffic for all requests" },
+ { label: "Payout", value: "Continuous, based on contribution metrics" },
+];
+
+export function OpsAnyone() {
+ return (
+ <>
+
+
+
+
+
+
+ {/* Left — text */}
+
+
Privacy Layer
+
+ Every Orama node runs the Orama Proxy privacy relay. As an operator,
+ you earn $ORAMA rewards while providing onion-routed privacy for all network traffic.
+
+
+
+
+ {/* Right — visual */}
+
+
+
+ OP
+
+
+
+
$ORAMA
+
Network rewards
+
+
+
+
+ One node. Privacy built in. Earn $ORAMA from privacy infrastructure.
+
+
+
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/website/src/components/landing/ops-orama-one.tsx b/website/src/components/landing/ops-orama-one.tsx
new file mode 100644
index 0000000..56c5f65
--- /dev/null
+++ b/website/src/components/landing/ops-orama-one.tsx
@@ -0,0 +1,113 @@
+import { Section } from "../layout/section";
+import { DashedPanel } from "../ui/dashed-panel";
+import { Badge } from "../ui/badge";
+import { Button } from "../ui/button";
+import { CrosshairDivider } from "../ui/crosshair-divider";
+import { AnimateIn } from "../ui/animate-in";
+
+export function OpsOramaOne() {
+ return (
+ <>
+
+
+
+ {/* Header */}
+
+
COMING SOON
+
+ Orama One
+
+
+ Plug in. Connect. Earn.
+
+
+
+ {/* Device showcase */}
+
+
+ {/* Ambient glow */}
+
+
+ {/* Device silhouette */}
+
+ {/* Main body */}
+
+
+ {/* Top edge highlight */}
+
+
+ {/* LED indicators */}
+
+
+ {/* Ventilation lines */}
+
+
+ {/* Center wordmark */}
+
+
+ Orama One
+
+
+
+ {/* Bottom ports */}
+
+
+ {/* Base stand */}
+
+
+
+
+
+ {/* Specs */}
+
+
+ FORM FACTOR
+ Compact. Silent. Always-on.
+
+
+ CONNECTIVITY
+ Ethernet + WiFi + WireGuard
+
+
+ SETUP
+ Plug in and start earning
+
+
+
+ {/* Description + CTA */}
+
+
+ A pre-built hardware node. No VPS. No terminal. No configuration.
+ Just plug it in, connect to the network, and start earning $ORAMA.
+
+
+ Notify Me When Available
+
+
+ Expected Q2 2026
+
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/website/src/components/landing/ops-setup.tsx b/website/src/components/landing/ops-setup.tsx
new file mode 100644
index 0000000..85d0778
--- /dev/null
+++ b/website/src/components/landing/ops-setup.tsx
@@ -0,0 +1,86 @@
+import { Link } from "react-router";
+import { Section } from "../layout/section";
+import { SectionHeader } from "../ui/section-header";
+import { Terminal } from "../ui/terminal";
+import { Badge } from "../ui/badge";
+import { Button } from "../ui/button";
+import { CrosshairDivider } from "../ui/crosshair-divider";
+import { AnimateIn } from "../ui/animate-in";
+
+export function OpsSetup() {
+ return (
+ <>
+
+
+
+
+
+
+ {/* Step 1 */}
+
+
1
+
+
Get a VPS
+
+ Any Linux VPS with 4GB RAM, 2 cores, 40GB disk. Hetzner, DigitalOcean, Vultr — any provider works.
+
+
+
+
+ {/* Step 2 */}
+
+
2
+
+
Install the Orama node
+ --domain --token " },
+ { prefix: "\u2192", text: "Downloading services... done" },
+ { prefix: "\u2192", text: "Configuring WireGuard mesh..." },
+ { prefix: "\u2192", text: "Starting RQLite, Olric, Gateway..." },
+ { prefix: "\u2713", text: "Node is live and connected to the mesh" },
+ ]}
+ />
+
+
+
+ {/* Step 3 */}
+
+
3
+
+
Verify and start earning
+
+
+
+
+
+
+
+
+ Read the full setup guide →
+
+
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/website/src/components/landing/ops-tokenomics.tsx b/website/src/components/landing/ops-tokenomics.tsx
new file mode 100644
index 0000000..bebb3be
--- /dev/null
+++ b/website/src/components/landing/ops-tokenomics.tsx
@@ -0,0 +1,156 @@
+import { Link } from "react-router";
+import { Coins, Vote, CreditCard, Server, ArrowRight } from "lucide-react";
+import { Section } from "../layout/section";
+import { SectionHeader } from "../ui/section-header";
+import { MetricCard } from "../ui/metric-card";
+import { DashedPanel } from "../ui/dashed-panel";
+import { CrosshairDivider } from "../ui/crosshair-divider";
+import { AnimateIn } from "../ui/animate-in";
+import { Button } from "../ui/button";
+import { Badge } from "../ui/badge";
+
+const TIER_ACCENT: Record = {
+ Base: "#888",
+ Enhanced: "#4169E1",
+ Governor: "#a855f7",
+};
+
+const rewardTiers = [
+ {
+ icon: ,
+ tier: "Base",
+ stake: "***",
+ multiplier: "***",
+ description: "Standard rewards for running a node with minimum stake",
+ },
+ {
+ icon: ,
+ tier: "Enhanced",
+ stake: "***",
+ multiplier: "***",
+ description: "Higher stake unlocks enhanced reward multiplier",
+ },
+ {
+ icon: ,
+ tier: "Governor",
+ stake: "***",
+ multiplier: "***",
+ description: "Top-tier rewards plus governance voting power",
+ },
+];
+
+export function OpsTokenomics() {
+ return (
+ <>
+
+
+
+
+
+ {/* Key metrics */}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {/* Reward tiers */}
+
+ {rewardTiers.map((tier) => {
+ const accent = TIER_ACCENT[tier.tier] ?? "#888";
+ return (
+
+ {/* Subtle gradient hover overlay */}
+
+
+
+
+
{tier.icon}
+
+
+ {tier.tier}
+
+ Tier
+
+
+
{tier.tier}
+
+
+ {/* Multiplier — large and prominent */}
+
+
+ {tier.multiplier}
+
+
+ Multiplier
+
+
+
+
+
+ {tier.stake}
+
+ $ORAMA staked
+
+
+
+ {tier.description}
+
+
+ );
+ })}
+
+
+ {/* Utility summary + CTA */}
+
+
+
+
+ Pay in BTC or $ORAMA
+
+
+
+ Governance voting with stake
+
+
+
+
+ Full Tokenomics
+
+
+
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/website/src/components/landing/orama-one-scene.tsx b/website/src/components/landing/orama-one-scene.tsx
new file mode 100644
index 0000000..4a40105
--- /dev/null
+++ b/website/src/components/landing/orama-one-scene.tsx
@@ -0,0 +1,220 @@
+import { useRef, useMemo } from "react";
+import { Canvas, useFrame } from "@react-three/fiber";
+import { Float, Environment, Text } from "@react-three/drei";
+import * as THREE from "three";
+
+/* ─── Orama logo as 3D dots ─── */
+function OramaLogoDots({ x: offsetX }: { x: number }) {
+ const groupRef = useRef(null);
+
+ // Orama icon: outer broken circle with a gap at top-right
+ const dots = useMemo(() => {
+ const points: [number, number][] = [];
+ const r = 0.07;
+
+ // 14 dots evenly spaced along a 330° arc (leaving a small 30° gap at top-right)
+ const dotCount = 13;
+ const gapSize = Math.PI / 100; // 30° gap
+ const arcSize = Math.PI * 2 - gapSize; // 330° arc
+ const gapStart = -gapSize / 4; // gap centered around 0° (right side)
+
+ for (let i = 0; i < dotCount; i++) {
+ const angle = gapStart + gapSize + (i / dotCount) * arcSize;
+ points.push([Math.cos(angle) * r, Math.sin(angle) * r]);
+ }
+
+ return points;
+ }, []);
+
+ // No animation — static dots, no blinking
+
+
+ return (
+
+ {dots.map(([dx, dy], i) => (
+
+
+
+
+ ))}
+
+ );
+}
+
+/* ─── "ne" text next to the logo ─── */
+function PuckLabel() {
+ // Logo replaces the "O", then "ne" follows — static, no animation
+ return (
+
+ {/* Orama logo dots as the "O" */}
+
+
+ {/* "ne" text */}
+
+ ne
+
+
+
+ );
+}
+
+/* ─── Orama One Node ─── */
+function OramaOneNode() {
+ const groupRef = useRef(null);
+ const glowRef = useRef(null);
+ const ledRef = useRef(null);
+
+ const particles = useMemo(() => {
+ const count = 20;
+ const positions = new Float32Array(count * 3);
+ for (let i = 0; i < count; i++) {
+ const angle = Math.random() * Math.PI * 2;
+ const radius = 2 + Math.random() * 2;
+ positions[i * 3] = Math.cos(angle) * radius;
+ positions[i * 3 + 1] = (Math.random() - 0.5) * 1;
+ positions[i * 3 + 2] = Math.sin(angle) * radius;
+ }
+ return positions;
+ }, []);
+
+ const particlesRef = useRef(null);
+
+ const puckGeometry = useMemo(() => {
+ const w = 1.8, d = 1.8, r = 0.25;
+ const shape = new THREE.Shape();
+ const hw = w / 2, hd = d / 2;
+ shape.moveTo(-hw + r, -hd);
+ shape.lineTo(hw - r, -hd);
+ shape.quadraticCurveTo(hw, -hd, hw, -hd + r);
+ shape.lineTo(hw, hd - r);
+ shape.quadraticCurveTo(hw, hd, hw - r, hd);
+ shape.lineTo(-hw + r, hd);
+ shape.quadraticCurveTo(-hw, hd, -hw, hd - r);
+ shape.lineTo(-hw, -hd + r);
+ shape.quadraticCurveTo(-hw, -hd, -hw + r, -hd);
+ const geo = new THREE.ExtrudeGeometry(shape, {
+ depth: 0.14,
+ bevelEnabled: true,
+ bevelThickness: 0.04,
+ bevelSize: 0.04,
+ bevelSegments: 8,
+ });
+ geo.rotateX(-Math.PI / 2);
+ geo.translate(0, 0.05, 0);
+ return geo;
+ }, []);
+
+ useFrame(({ clock }) => {
+ const t = clock.getElapsedTime();
+ if (groupRef.current) groupRef.current.rotation.y = Math.sin(t * 0.2) * 0.12;
+ if (particlesRef.current) particlesRef.current.rotation.y = t * 0.02;
+ if (glowRef.current) {
+ const mat = glowRef.current.material as THREE.MeshBasicMaterial;
+ mat.opacity = 0.04 + 0.02 * Math.sin(t * 1.5);
+ }
+ if (ledRef.current) {
+ const mat = ledRef.current.material as THREE.MeshBasicMaterial;
+ mat.opacity = 0.3 + 0.5 * Math.sin(t * 3);
+ }
+ });
+
+ return (
+ <>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {/* Power LED — front-left, slow white blink with shine */}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ >
+ );
+}
+
+export function OramaOneScene() {
+ return (
+
+ );
+}
+
+/* ─── Inline version for the Orama One section ─── */
+export function OramaOneInline() {
+ return (
+
+ );
+}
diff --git a/website/src/components/landing/sponsors-showcase.tsx b/website/src/components/landing/sponsors-showcase.tsx
new file mode 100644
index 0000000..356c2eb
--- /dev/null
+++ b/website/src/components/landing/sponsors-showcase.tsx
@@ -0,0 +1,100 @@
+import { Link } from "react-router";
+import { ArrowRight, ExternalLink } from "lucide-react";
+import { Section } from "../layout/section";
+import { SectionHeader } from "../ui/section-header";
+import { DashedPanel } from "../ui/dashed-panel";
+import { AnimateIn } from "../ui/animate-in";
+
+const SPONSORS = [
+ {
+ name: "DeBros",
+ tier: "Platinum",
+ logo: "/images/debrosnet.png",
+ desc: "Core team and founding sponsor of the Orama Network.",
+ url: "https://debros.io",
+ color: "#5CE0D8",
+ },
+ {
+ name: "ICXCNIKA",
+ tier: "Gold",
+ logo: "/images/icxcnika.webp",
+ desc: "Early supporter and partner driving ecosystem growth.",
+ url: "https://icxcnika.io/",
+ color: "#FFD700",
+ },
+];
+
+export function SponsorsShowcase() {
+ return (
+
+
+
+
+
+
+
+
+
+
+ Become a Sponsor
+
+
+
+
+
+ );
+}
diff --git a/website/src/components/layout/container.tsx b/website/src/components/layout/container.tsx
new file mode 100644
index 0000000..2e81102
--- /dev/null
+++ b/website/src/components/layout/container.tsx
@@ -0,0 +1,15 @@
+import type { ReactNode } from "react";
+import { cn } from "../../lib/utils";
+
+export interface ContainerProps {
+ className?: string;
+ children: ReactNode;
+}
+
+export function Container({ className, children }: ContainerProps) {
+ return (
+
+ {children}
+
+ );
+}
diff --git a/website/src/components/layout/page.tsx b/website/src/components/layout/page.tsx
new file mode 100644
index 0000000..b2008ed
--- /dev/null
+++ b/website/src/components/layout/page.tsx
@@ -0,0 +1,19 @@
+import { useEffect } from "react";
+import type { ReactNode } from "react";
+
+export interface PageProps {
+ title: string;
+ children: ReactNode;
+}
+
+export function Page({ title, children }: PageProps) {
+ useEffect(() => {
+ document.title = `${title} — Orama`;
+ }, [title]);
+
+ useEffect(() => {
+ window.scrollTo(0, 0);
+ }, []);
+
+ return <>{children}>;
+}
diff --git a/website/src/components/layout/section.tsx b/website/src/components/layout/section.tsx
new file mode 100644
index 0000000..0386eea
--- /dev/null
+++ b/website/src/components/layout/section.tsx
@@ -0,0 +1,36 @@
+import type { ReactNode } from "react";
+import { cn } from "../../lib/utils";
+
+const paddingVariants = {
+ default: "py-16 sm:py-24",
+ narrow: "py-8 sm:py-12",
+ wide: "py-24 sm:py-32",
+ none: "py-0",
+} as const;
+
+export interface SectionProps {
+ id?: string;
+ className?: string;
+ children: ReactNode;
+ padding?: keyof typeof paddingVariants;
+}
+
+export function Section({
+ id,
+ className,
+ children,
+ padding = "default",
+}: SectionProps) {
+ return (
+
+ );
+}
diff --git a/website/src/components/layout/shell.tsx b/website/src/components/layout/shell.tsx
new file mode 100644
index 0000000..484b223
--- /dev/null
+++ b/website/src/components/layout/shell.tsx
@@ -0,0 +1,38 @@
+import { Outlet } from "react-router";
+import { Suspense } from "react";
+import { LoadingSpinner } from "../ui/loading-spinner";
+import { WhitelistBanner } from "../navigation/whitelist-banner";
+import { Navbar } from "../navigation/navbar";
+import { Footer } from "../navigation/footer";
+import { ScrollToTop } from "../ui/scroll-to-top";
+import { FloatingCTA } from "../navigation/floating-cta";
+
+export function Shell() {
+ return (
+
+
+
+
+
+
+ }
+ >
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/website/src/components/mdx-components.tsx b/website/src/components/mdx-components.tsx
new file mode 100644
index 0000000..59f1aa5
--- /dev/null
+++ b/website/src/components/mdx-components.tsx
@@ -0,0 +1,168 @@
+import { type ComponentPropsWithoutRef, Children } from "react";
+import type { MDXComponents } from "mdx/types";
+import { cn } from "../lib/utils";
+import { MdxPre } from "./ui/code-block-mdx";
+
+function slugify(text: string): string {
+ return text
+ .toLowerCase()
+ .replace(/[^a-z0-9]+/g, "-")
+ .replace(/(^-|-$)/g, "");
+}
+
+function extractText(children: React.ReactNode): string {
+ let text = "";
+ Children.forEach(children, (child) => {
+ if (typeof child === "string") text += child;
+ else if (typeof child === "number") text += String(child);
+ else if (child && typeof child === "object" && "props" in child) {
+ const props = child.props as { children?: React.ReactNode };
+ text += extractText(props.children);
+ }
+ });
+ return text;
+}
+
+export const mdxComponents: MDXComponents = {
+ h1: (props: ComponentPropsWithoutRef<"h1">) => (
+
+ ),
+
+ h2: ({ children, ...props }: ComponentPropsWithoutRef<"h2">) => {
+ const id = slugify(extractText(children));
+ return (
+
+ {children}
+
+ );
+ },
+
+ h3: ({ children, ...props }: ComponentPropsWithoutRef<"h3">) => {
+ const id = slugify(extractText(children));
+ return (
+
+ {children}
+
+ );
+ },
+
+ h4: (props: ComponentPropsWithoutRef<"h4">) => (
+
+ ),
+
+ p: (props: ComponentPropsWithoutRef<"p">) => (
+
+ ),
+
+ a: (props: ComponentPropsWithoutRef<"a">) => (
+
+ ),
+
+ code: (props: ComponentPropsWithoutRef<"code">) => {
+ const isInline = !props.className?.includes("language-");
+ if (isInline) {
+ return (
+
+ );
+ }
+ return ;
+ },
+
+ pre: MdxPre,
+
+ ul: ({ className, ...props }: ComponentPropsWithoutRef<"ul">) => (
+
+ ),
+
+ li: ({ children, ...props }: ComponentPropsWithoutRef<"li">) => (
+
+
+ +
+
+ {children}
+
+ ),
+
+ ol: ({ className, ...props }: ComponentPropsWithoutRef<"ol">) => (
+
+ ),
+
+ blockquote: (props: ComponentPropsWithoutRef<"blockquote">) => (
+
+ ),
+
+ table: (props: ComponentPropsWithoutRef<"table">) => (
+
+ ),
+
+ thead: (props: ComponentPropsWithoutRef<"thead">) => (
+
+ ),
+
+ th: (props: ComponentPropsWithoutRef<"th">) => (
+
+ ),
+
+ td: (props: ComponentPropsWithoutRef<"td">) => (
+
+ ),
+
+ tr: (props: ComponentPropsWithoutRef<"tr">) => (
+
+ ),
+
+ hr: () => ,
+
+ strong: (props: ComponentPropsWithoutRef<"strong">) => (
+
+ ),
+
+ em: (props: ComponentPropsWithoutRef<"em">) => (
+
+ ),
+
+ img: (props: ComponentPropsWithoutRef<"img">) => (
+
+ ),
+};
diff --git a/website/src/components/navigation/docs-sidebar.tsx b/website/src/components/navigation/docs-sidebar.tsx
new file mode 100644
index 0000000..44fb50d
--- /dev/null
+++ b/website/src/components/navigation/docs-sidebar.tsx
@@ -0,0 +1,285 @@
+import { useState, useCallback } from "react";
+import { Link, useLocation, useNavigate } from "react-router";
+import * as DropdownMenu from "@radix-ui/react-dropdown-menu";
+import { Search, Menu, X, ChevronDown, Code2, Server, GitBranch, Check } from "lucide-react";
+import {
+ PERSONA_DOCS,
+ PERSONA_FIRST_SLUG,
+} from "../../data/docs-navigation";
+import type { DocLink } from "../../data/docs-navigation";
+import type { Persona } from "../../types/persona";
+import { cn } from "../../lib/utils";
+import { SearchDialog } from "../ui/search-dialog";
+
+/* -------------------------------------------------------------------------- */
+/* Helpers */
+/* -------------------------------------------------------------------------- */
+
+const PERSONAS: {
+ key: Persona;
+ label: string;
+ icon: typeof Code2;
+ desc: string;
+}[] = [
+ { key: "developer", label: "Developers", icon: Code2, desc: "SDK, CLI, and API docs" },
+ { key: "operator", label: "Operators", icon: Server, desc: "Node setup and monitoring" },
+ { key: "contributor", label: "Contributors", icon: GitBranch, desc: "Source code and tooling" },
+];
+
+function getPersonaFromPath(pathname: string): Persona {
+ if (pathname.startsWith("/docs/operator")) return "operator";
+ if (pathname.startsWith("/docs/contributor")) return "contributor";
+ return "developer";
+}
+
+/* -------------------------------------------------------------------------- */
+/* Persona select */
+/* -------------------------------------------------------------------------- */
+
+function PersonaSelect({
+ persona,
+ onSwitch,
+}: {
+ persona: Persona;
+ onSwitch: (p: Persona) => void;
+}) {
+ const current = PERSONAS.find((p) => p.key === persona)!;
+ const CurrentIcon = current.icon;
+
+ return (
+
+
+
+
+
+
+ {current.label}
+
+
+ {current.desc}
+
+
+
+
+
+
+
+
+ {PERSONAS.map((p) => {
+ const Icon = p.icon;
+ const isActive = p.key === persona;
+ return (
+ onSwitch(p.key)}
+ className={cn(
+ "flex items-center gap-2.5 px-3 py-2.5 rounded-sm cursor-pointer outline-none transition-colors",
+ isActive
+ ? "bg-accent/8"
+ : "hover:bg-surface-2",
+ )}
+ >
+
+
+
+ {p.label}
+
+
+ {p.desc}
+
+
+ {isActive && (
+
+ )}
+
+ );
+ })}
+
+
+
+ );
+}
+
+/* -------------------------------------------------------------------------- */
+/* Nav link */
+/* -------------------------------------------------------------------------- */
+
+function NavLink({
+ link,
+ isActive,
+ onClick,
+}: {
+ link: DocLink;
+ isActive: boolean;
+ onClick?: () => void;
+}) {
+ const Icon = link.icon;
+
+ return (
+
+
+
+ {link.title}
+
+
+ );
+}
+
+/* -------------------------------------------------------------------------- */
+/* Sidebar content (shared between desktop and mobile) */
+/* -------------------------------------------------------------------------- */
+
+function SidebarContent({ onLinkClick }: { onLinkClick?: () => void }) {
+ const { pathname } = useLocation();
+ const navigate = useNavigate();
+ const persona = getPersonaFromPath(pathname);
+ const [searchOpen, setSearchOpen] = useState(false);
+
+ const links = PERSONA_DOCS[persona];
+
+ const handlePersonaSwitch = useCallback(
+ (p: Persona) => {
+ navigate(`/docs/${PERSONA_FIRST_SLUG[p]}`);
+ },
+ [navigate],
+ );
+
+ return (
+ <>
+ {/* Push below floating navbar */}
+
+ {/* Search trigger */}
+
+ setSearchOpen(true)}
+ className="w-full flex items-center gap-2 py-2 px-3 text-xs text-muted hover:text-fg bg-surface-2/50 hover:bg-surface-2 border border-border/60 rounded-md transition-colors font-mono"
+ >
+
+ Search docs...
+
+ ⌘K
+
+
+
+
+ {/* Persona select */}
+
+
+ {/* Divider */}
+
+
+ {/* Links */}
+
+
+ {links.map((link) => (
+
+ ))}
+
+
+
+
+ {/* Search dialog */}
+
+ >
+ );
+}
+
+/* -------------------------------------------------------------------------- */
+/* Exported sidebar */
+/* -------------------------------------------------------------------------- */
+
+export function DocsSidebar() {
+ const [mobileOpen, setMobileOpen] = useState(false);
+
+ const handleLinkClick = useCallback(() => {
+ setMobileOpen(false);
+ }, []);
+
+ return (
+ <>
+ {/* Mobile toggle button */}
+ setMobileOpen((prev) => !prev)}
+ className="lg:hidden fixed bottom-4 right-4 z-50 flex items-center justify-center w-12 h-12 bg-surface border border-dashed border-border rounded-full text-muted hover:text-fg transition-colors shadow-lg"
+ aria-label={mobileOpen ? "Close sidebar" : "Open sidebar"}
+ >
+ {mobileOpen ? : }
+
+
+ {/* Mobile overlay */}
+ {mobileOpen && (
+ setMobileOpen(false)}
+ onKeyDown={(e) => {
+ if (e.key === "Escape") setMobileOpen(false);
+ }}
+ role="button"
+ tabIndex={-1}
+ aria-label="Close sidebar"
+ />
+ )}
+
+ {/* Mobile drawer */}
+
+
+ {/* Desktop sidebar — fixed, full height */}
+
+ >
+ );
+}
diff --git a/website/src/components/navigation/floating-cta.tsx b/website/src/components/navigation/floating-cta.tsx
new file mode 100644
index 0000000..bc51f45
--- /dev/null
+++ b/website/src/components/navigation/floating-cta.tsx
@@ -0,0 +1,54 @@
+import { useState, useEffect, useCallback } from "react";
+import { useLocation } from "react-router";
+import { cn } from "../../lib/utils";
+
+export function FloatingCTA() {
+ const [visible, setVisible] = useState(false);
+ const [footerVisible, setFooterVisible] = useState(false);
+ const location = useLocation();
+ const hasPlayer = location.pathname === "/about";
+
+ const handleScroll = useCallback(() => {
+ const scrolled = window.scrollY > window.innerHeight * 0.8;
+ setVisible(scrolled);
+ }, []);
+
+ useEffect(() => {
+ window.addEventListener("scroll", handleScroll, { passive: true });
+ return () => window.removeEventListener("scroll", handleScroll);
+ }, [handleScroll]);
+
+ // Detect footer to avoid overlap
+ useEffect(() => {
+ const footer = document.querySelector("footer");
+ if (!footer) return;
+
+ const observer = new IntersectionObserver(
+ ([entry]) => setFooterVisible(entry.isIntersecting),
+ { threshold: 0 },
+ );
+ observer.observe(footer);
+ return () => observer.disconnect();
+ }, []);
+
+ return (
+
+ );
+}
diff --git a/website/src/components/navigation/footer.tsx b/website/src/components/navigation/footer.tsx
new file mode 100644
index 0000000..5c7bea6
--- /dev/null
+++ b/website/src/components/navigation/footer.tsx
@@ -0,0 +1,218 @@
+import { useState } from "react";
+import { Link } from "react-router";
+import { Github, Twitter, Send as SendIcon, Youtube, Copy, Check, ArrowRight } from "lucide-react";
+import type { ReactNode } from "react";
+import { FOOTER_COLUMNS, SOCIAL_LINKS } from "../../data/navigation";
+import { CrosshairDivider } from "../ui/crosshair-divider";
+import oramaIcon from "../../assets/orama-icon.png";
+
+const DONATE_WALLETS = [
+ { chain: "BTC", address: "bc1qzpkjguxh4pl9pdhj76zeztur42prhfed2hd22z" },
+];
+
+const SOCIAL_ICON_MAP: Record
= {
+ github: ,
+ twitter: ,
+ send: ,
+ youtube: ,
+};
+
+function FooterContact() {
+ const [submitted, setSubmitted] = useState(false);
+ const [email, setEmail] = useState("");
+ const [message, setMessage] = useState("");
+
+ const handleSubmit = async (e: React.FormEvent) => {
+ e.preventDefault();
+ if (!email.trim() || !message.trim()) return;
+
+ try {
+ await fetch("https://api.web3forms.com/submit", {
+ method: "POST",
+ headers: { "Content-Type": "application/json" },
+ body: JSON.stringify({
+ access_key: "YOUR_WEB3FORMS_KEY", // TODO: Replace with actual key
+ to: "dev@debros.io",
+ subject: "Orama Network — Contact Form",
+ email,
+ message,
+ }),
+ });
+ setSubmitted(true);
+ } catch {
+ // Silently fail — user sees no change
+ }
+ };
+
+ return (
+
+
+
+
Contact Us
+
Partnership inquiries, questions, or feedback.
+
+ {submitted ? (
+
Message sent. We'll get back to you soon.
+ ) : (
+
+ setEmail(e.target.value)}
+ placeholder="Your email"
+ required
+ className="w-full px-3 py-2 bg-transparent border border-dashed border-border text-fg text-xs font-mono placeholder:text-muted/40 focus:outline-none focus:border-fg/30 transition-colors"
+ />
+ setMessage(e.target.value)}
+ placeholder="Your message..."
+ rows={3}
+ required
+ className="w-full px-3 py-2 bg-transparent border border-dashed border-border text-fg text-xs font-mono placeholder:text-muted/40 focus:outline-none focus:border-fg/30 transition-colors resize-none"
+ />
+
+ Send
+
+
+
+ )}
+
+
+
+ );
+}
+
+function FooterDonate() {
+ const [copiedIdx, setCopiedIdx] = useState(null);
+
+ const handleCopy = (address: string, idx: number) => {
+ navigator.clipboard.writeText(address);
+ setCopiedIdx(idx);
+ setTimeout(() => setCopiedIdx(null), 2000);
+ };
+
+ return (
+
+
+
+ Support the Cause
+
+
+ Donate directly to support Orama Network development.
+
+
+ {DONATE_WALLETS.map((w, i) => (
+
+
+ {w.chain}
+ {w.address}
+
+
handleCopy(w.address, i)}
+ className="text-muted hover:text-fg transition-colors cursor-pointer shrink-0"
+ >
+ {copiedIdx === i ? : }
+
+
+ ))}
+
+
+
+ );
+}
+
+export function Footer() {
+ return (
+
+
+
+ {/* Main footer content */}
+
+
+ {/* Brand column */}
+
+
+
+
+ ORAMA
+
+
+
+ Decentralized cloud infrastructure. Deploy, store, and compute
+ without centralized providers.
+
+
+
+ {/* Link columns */}
+ {FOOTER_COLUMNS.map((column) => (
+
+
+ {column.title}
+
+
+ {column.links.map((link) => (
+
+ {link.external ? (
+
+ {link.label}
+
+ ) : (
+
+ {link.label}
+
+ )}
+
+ ))}
+
+
+ ))}
+
+
+
+ {/* Contact form */}
+
+
+ {/* Donate section */}
+
+
+ {/* Bottom bar */}
+
+
+
+ © {new Date().getFullYear()} Orama Network — DeBros DAO
+
+
+
+
+
+ );
+}
diff --git a/website/src/components/navigation/mobile-menu.tsx b/website/src/components/navigation/mobile-menu.tsx
new file mode 100644
index 0000000..904ee29
--- /dev/null
+++ b/website/src/components/navigation/mobile-menu.tsx
@@ -0,0 +1,95 @@
+import { useEffect } from "react";
+import { Link, useLocation } from "react-router";
+import { ExternalLink } from "lucide-react";
+import { NAV_LINKS, MORE_LINKS } from "../../data/navigation";
+import { Button } from "../ui/button";
+import { cn } from "../../lib/utils";
+
+const menuLinkClass = "py-3 text-2xl font-display font-semibold tracking-tight transition-colors duration-150";
+
+export interface MobileMenuProps {
+ open: boolean;
+ onClose: () => void;
+}
+
+export function MobileMenu({ open, onClose }: MobileMenuProps) {
+ const location = useLocation();
+
+ useEffect(() => {
+ onClose();
+ }, [location.pathname, onClose]);
+
+ useEffect(() => {
+ if (open) {
+ document.body.style.overflow = "hidden";
+ } else {
+ document.body.style.overflow = "";
+ }
+ return () => {
+ document.body.style.overflow = "";
+ };
+ }, [open]);
+
+ return (
+
+
+
+
+ {NAV_LINKS.map((link) => {
+ if (link.external) {
+ return (
+
+ {link.label}
+
+
+ );
+ }
+ const isActive = location.pathname === link.href;
+ return (
+
+ {link.label}
+
+ );
+ })}
+
+
+ {MORE_LINKS.map((link) => {
+ const isActive = location.pathname === link.href;
+ return (
+
+ {link.label}
+
+ );
+ })}
+
+
+
+
+
+ Investors Dashboard
+
+
+
+ );
+}
diff --git a/website/src/components/navigation/navbar.tsx b/website/src/components/navigation/navbar.tsx
new file mode 100644
index 0000000..0be0408
--- /dev/null
+++ b/website/src/components/navigation/navbar.tsx
@@ -0,0 +1,132 @@
+import { useState, useEffect } from "react";
+import { Link, useLocation } from "react-router";
+import { Menu, X, ExternalLink, ChevronDown } from "lucide-react";
+import { cn } from "../../lib/utils";
+import { NAV_LINKS, MORE_LINKS } from "../../data/navigation";
+import { MobileMenu } from "./mobile-menu";
+import { Button } from "../ui/button";
+import oramaIcon from "../../assets/orama-icon.png";
+
+const linkClass = "px-3 py-1.5 text-xs tracking-wider uppercase font-mono rounded-full transition-colors duration-150";
+const activeClass = "text-fg bg-white/[0.06]";
+const inactiveClass = "text-muted hover:text-fg hover:bg-white/[0.04]";
+
+export function Navbar() {
+ const [mobileOpen, setMobileOpen] = useState(false);
+ const [moreOpen, setMoreOpen] = useState(false);
+ const { pathname } = useLocation();
+
+ useEffect(() => {
+ setMoreOpen(false);
+ }, [pathname]);
+
+ return (
+ <>
+
+
+
+
+
+
+
+ {NAV_LINKS.map((link) => {
+ if (link.external) {
+ return (
+
+ {link.label}
+
+
+ );
+ }
+ const isActive = pathname === link.href;
+ return (
+
+ {link.label}
+
+ );
+ })}
+
+ {/* More dropdown */}
+
+
setMoreOpen((prev) => !prev)}
+ className={cn(
+ linkClass,
+ "flex items-center gap-1 cursor-pointer",
+ moreOpen || MORE_LINKS.some((l) => pathname === l.href)
+ ? activeClass
+ : inactiveClass,
+ )}
+ >
+ More
+
+
+
+ {moreOpen && (
+ <>
+
setMoreOpen(false)}
+ />
+
+ {MORE_LINKS.map((link) => (
+ setMoreOpen(false)}
+ className={cn(
+ "block px-4 py-2.5 text-xs font-mono tracking-wider uppercase transition-colors",
+ pathname === link.href
+ ? "text-fg bg-white/[0.06]"
+ : "text-muted hover:text-fg hover:bg-white/[0.04]",
+ )}
+ >
+ {link.label}
+
+ ))}
+
+ >
+ )}
+
+
+
+
+
+ Join the Waitlist
+
+
+
+
setMobileOpen((prev) => !prev)}
+ className="md:hidden flex items-center justify-center w-9 h-9 text-muted hover:text-fg transition-colors"
+ aria-label={mobileOpen ? "Close menu" : "Open menu"}
+ >
+ {mobileOpen ? : }
+
+
+
+
+
setMobileOpen(false)}
+ />
+ >
+ );
+}
diff --git a/website/src/components/navigation/table-of-contents.tsx b/website/src/components/navigation/table-of-contents.tsx
new file mode 100644
index 0000000..f7fe4eb
--- /dev/null
+++ b/website/src/components/navigation/table-of-contents.tsx
@@ -0,0 +1,70 @@
+import { useCallback } from "react";
+import { useActiveHeading } from "../../hooks/useActiveHeading";
+import { cn } from "../../lib/utils";
+
+export function TableOfContents() {
+ const { headings, activeId } = useActiveHeading();
+
+ // Only show h2 (main sections), not h3 subtitles
+ const sections = headings.filter((h) => h.level === 2);
+
+ const scrollTo = useCallback((id: string) => {
+ document.getElementById(id)?.scrollIntoView({ behavior: "smooth" });
+ }, []);
+
+ if (sections.length === 0) return null;
+
+ return (
+
+ {sections.map((h, i) => {
+ const isActive = h.id === activeId;
+
+ return (
+
+ {/* Connecting line */}
+ {i > 0 && (
+
+ )}
+
+ {/* Dot + tooltip */}
+
+
scrollTo(h.id)}
+ aria-label={h.text}
+ className={cn(
+ "rounded-full transition-all duration-200 shrink-0 cursor-pointer",
+ isActive
+ ? "w-3.5 h-3.5 bg-accent shadow-[0_0_10px_rgba(65,105,225,0.5)]"
+ : "w-2.5 h-2.5 bg-muted/25 group-hover:bg-accent/50 group-hover:w-3.5 group-hover:h-3.5",
+ )}
+ />
+
+ {/* Tooltip */}
+
+
+ {h.text}
+
+
+
+
+ );
+ })}
+
+ );
+}
diff --git a/website/src/components/navigation/whitelist-banner.tsx b/website/src/components/navigation/whitelist-banner.tsx
new file mode 100644
index 0000000..d942b45
--- /dev/null
+++ b/website/src/components/navigation/whitelist-banner.tsx
@@ -0,0 +1,45 @@
+import { useState } from "react";
+import { X, ArrowRight } from "lucide-react";
+import { cn } from "../../lib/utils";
+
+export function WhitelistBanner() {
+ const [dismissed, setDismissed] = useState(false);
+
+ if (dismissed) return null;
+
+ return (
+
+ );
+}
diff --git a/website/src/components/ui/animate-in.tsx b/website/src/components/ui/animate-in.tsx
new file mode 100644
index 0000000..6f936c4
--- /dev/null
+++ b/website/src/components/ui/animate-in.tsx
@@ -0,0 +1,19 @@
+import type { ReactNode } from "react";
+import { useInView } from "../../hooks/useInView";
+import { cn } from "../../lib/utils";
+
+export function AnimateIn({ children, className }: { children: ReactNode; className?: string }) {
+ const { ref, isInView } = useInView(0.1);
+ return (
+
+ {children}
+
+ );
+}
diff --git a/website/src/components/ui/badge.tsx b/website/src/components/ui/badge.tsx
new file mode 100644
index 0000000..98c6abb
--- /dev/null
+++ b/website/src/components/ui/badge.tsx
@@ -0,0 +1,31 @@
+import { cva } from "class-variance-authority";
+import type { VariantProps } from "class-variance-authority";
+import type { HTMLAttributes } from "react";
+import { cn } from "../../lib/utils";
+
+export const badgeVariants = cva(
+ "inline-flex items-center px-2.5 py-0.5 text-xs font-mono tracking-wider",
+ {
+ variants: {
+ variant: {
+ default: "border border-dashed border-border text-muted",
+ outline: "border border-dashed border-accent text-accent",
+ accent: "text-accent tracking-widest",
+ status: "border border-dashed border-accent-2 text-accent-2",
+ },
+ },
+ defaultVariants: {
+ variant: "default",
+ },
+ },
+);
+
+export interface BadgeProps
+ extends HTMLAttributes,
+ VariantProps {}
+
+export function Badge({ className, variant, ...props }: BadgeProps) {
+ return (
+
+ );
+}
diff --git a/website/src/components/ui/btc-price.tsx b/website/src/components/ui/btc-price.tsx
new file mode 100644
index 0000000..f9edc69
--- /dev/null
+++ b/website/src/components/ui/btc-price.tsx
@@ -0,0 +1,151 @@
+import { createContext, useContext, useEffect, useState, type ReactNode } from "react";
+import { formatBTC } from "../../data/fundraise";
+
+/* ── BTC/USD Price Context (single source of truth) ── */
+
+interface BTCPriceContextValue {
+ btcUsd: number | null;
+ loading: boolean;
+}
+
+const BTCPriceContext = createContext({ btcUsd: null, loading: true });
+
+const CACHE_KEY = "orama_btc_usd";
+const CACHE_TTL = 10 * 60 * 1000; // 10 minutes
+
+function getCached(): number | null {
+ try {
+ const raw = localStorage.getItem(CACHE_KEY);
+ if (!raw) return null;
+ const { price, ts } = JSON.parse(raw);
+ if (Date.now() - ts < CACHE_TTL) return price;
+ } catch { /* ignore */ }
+ return null;
+}
+
+function setCache(price: number) {
+ localStorage.setItem(CACHE_KEY, JSON.stringify({ price, ts: Date.now() }));
+}
+
+export function BTCPriceProvider({ children }: { children: ReactNode }) {
+ const [btcUsd, setBtcUsd] = useState(getCached);
+ const [loading, setLoading] = useState(btcUsd === null);
+
+ useEffect(() => {
+ const fetchPrice = async () => {
+ const cached = getCached();
+ if (cached) {
+ setBtcUsd(cached);
+ setLoading(false);
+ return;
+ }
+ try {
+ const res = await fetch("https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=usd");
+ const data = await res.json();
+ const price = data.bitcoin?.usd;
+ if (price) {
+ setBtcUsd(price);
+ setCache(price);
+ }
+ } catch { /* silent fail */ }
+ setLoading(false);
+ };
+
+ fetchPrice();
+ const interval = setInterval(fetchPrice, CACHE_TTL);
+ return () => clearInterval(interval);
+ }, []);
+
+ return (
+
+ {children}
+
+ );
+}
+
+export function useBTCPrice() {
+ return useContext(BTCPriceContext);
+}
+
+/* ── Helper: format USD ── */
+function fmtUsd(usd: number): string {
+ if (usd >= 1_000_000) return `$${(usd / 1_000_000).toFixed(1)}M`;
+ if (usd >= 1_000) return `$${usd.toLocaleString(undefined, { maximumFractionDigits: 0 })}`;
+ if (usd >= 1) return `$${usd.toFixed(2)}`;
+ return `$${usd.toFixed(4)}`;
+}
+
+/* ── BTC orange color ── */
+const BTC_COLOR = "#F7931A";
+
+/* ── Reusable BTC Price Display Component ── */
+
+interface BTCPriceProps {
+ btc: number;
+ size?: "sm" | "md" | "lg" | "xl";
+ hideUsd?: boolean;
+ className?: string;
+}
+
+const sizeClasses = {
+ sm: { btc: "text-xs font-mono font-bold", usd: "text-[10px]" },
+ md: { btc: "text-sm font-mono font-bold", usd: "text-[10px]" },
+ lg: { btc: "text-lg font-mono font-bold", usd: "text-xs" },
+ xl: { btc: "text-3xl font-display font-bold", usd: "text-xs" },
+};
+
+export function BTCPrice({ btc, size = "md", hideUsd = false, className = "" }: BTCPriceProps) {
+ const { btcUsd } = useBTCPrice();
+ const classes = sizeClasses[size];
+ const usdValue = btcUsd ? btc * btcUsd : null;
+
+ return (
+
+
+ {formatBTC(btc)} {" "}
+ BTC
+
+ {!hideUsd && usdValue !== null && (
+
+ ≈ {fmtUsd(usdValue)}
+
+ )}
+
+ );
+}
+
+/**
+ * Inline version — BTC with USD on the same line.
+ */
+export function BTCPriceInline({ btc, className = "" }: { btc: number; className?: string }) {
+ const { btcUsd } = useBTCPrice();
+ const usdValue = btcUsd ? btc * btcUsd : null;
+
+ return (
+
+
+ {formatBTC(btc)} {" "}
+ BTC
+
+ {usdValue !== null && (
+
+ ≈ {fmtUsd(usdValue)}
+
+ )}
+
+ );
+}
+
+/**
+ * Just the USD equivalent text for a BTC amount (for fundraise bars etc).
+ */
+export function BTCtoUSD({ btc, className = "" }: { btc: number; className?: string }) {
+ const { btcUsd } = useBTCPrice();
+ if (!btcUsd) return null;
+ const usdValue = btc * btcUsd;
+ return (
+
+ ≈ {fmtUsd(usdValue)}
+
+ );
+}
diff --git a/website/src/components/ui/button.tsx b/website/src/components/ui/button.tsx
new file mode 100644
index 0000000..6ff0cee
--- /dev/null
+++ b/website/src/components/ui/button.tsx
@@ -0,0 +1,54 @@
+import { forwardRef } from "react";
+import type { ButtonHTMLAttributes } from "react";
+import { Slot } from "@radix-ui/react-slot";
+import { cva } from "class-variance-authority";
+import type { VariantProps } from "class-variance-authority";
+import { cn } from "../../lib/utils";
+
+export const buttonVariants = cva(
+ "inline-flex items-center justify-center font-mono font-semibold tracking-wider uppercase transition-all duration-200 ease-out focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/50 focus-visible:ring-offset-2 focus-visible:ring-offset-bg disabled:pointer-events-none disabled:opacity-50 cursor-pointer",
+ {
+ variants: {
+ variant: {
+ primary:
+ "bg-accent text-black relative border border-white/[0.08] border-t-white/20 shadow-[0_1px_2px_rgba(0,0,0,0.4),inset_0_1px_0_rgba(255,255,255,0.08)] hover:shadow-[0_0_20px_rgba(161,161,170,0.35),0_1px_3px_rgba(0,0,0,0.4),inset_0_1px_0_rgba(255,255,255,0.1)] hover:bg-accent/95 active:shadow-[inset_0_1px_3px_rgba(0,0,0,0.3)] active:translate-y-px",
+ ghost:
+ "border border-border/60 text-muted hover:border-fg/30 hover:text-fg hover:bg-white/[0.03] active:bg-white/[0.05]",
+ dashed:
+ "border border-dashed border-accent/60 text-accent hover:border-accent hover:bg-accent/[0.08] hover:shadow-[0_0_12px_rgba(161,161,170,0.15)] active:bg-accent/[0.12]",
+ link: "text-accent hover:text-accent/80 underline-offset-4 hover:underline",
+ },
+ size: {
+ sm: "px-3.5 py-1.5 text-xs rounded-sm",
+ default: "px-5 py-2.5 text-xs rounded-sm",
+ lg: "px-8 py-3 text-sm rounded-sm",
+ },
+ },
+ defaultVariants: {
+ variant: "primary",
+ size: "default",
+ },
+ },
+);
+
+export interface ButtonProps
+ extends ButtonHTMLAttributes,
+ VariantProps {
+ asChild?: boolean;
+}
+
+export const Button = forwardRef(
+ ({ className, variant, size, asChild = false, ...props }, ref) => {
+ const Comp = asChild ? Slot : "button";
+
+ return (
+
+ );
+ },
+);
+
+Button.displayName = "Button";
diff --git a/website/src/components/ui/code-block-mdx.tsx b/website/src/components/ui/code-block-mdx.tsx
new file mode 100644
index 0000000..4873deb
--- /dev/null
+++ b/website/src/components/ui/code-block-mdx.tsx
@@ -0,0 +1,100 @@
+import { useEffect, useState, useCallback, type ReactElement } from "react";
+import { createHighlighter } from "shiki";
+import type { Highlighter } from "shiki";
+import { Mermaid } from "./mermaid";
+
+let highlighterPromise: Promise | null = null;
+
+function getHighlighter() {
+ if (!highlighterPromise) {
+ highlighterPromise = createHighlighter({
+ themes: ["vitesse-dark"],
+ langs: ["typescript", "javascript", "bash", "json", "go", "yaml", "html", "css", "sql", "toml", "ini"],
+ });
+ }
+ return highlighterPromise;
+}
+
+function CopyButton({ text }: { text: string }) {
+ const [copied, setCopied] = useState(false);
+
+ const handleCopy = useCallback(() => {
+ navigator.clipboard.writeText(text);
+ setCopied(true);
+ setTimeout(() => setCopied(false), 2000);
+ }, [text]);
+
+ return (
+
+ {copied ? "copied" : "copy"}
+
+ );
+}
+
+function extractTextContent(children: unknown): string {
+ if (typeof children === "string") return children;
+ if (Array.isArray(children)) return children.map(extractTextContent).join("");
+ if (children && typeof children === "object" && "props" in (children as object)) {
+ const el = children as ReactElement<{ children?: unknown }>;
+ return extractTextContent(el.props.children);
+ }
+ return "";
+}
+
+export function MdxPre({ children, ...props }: React.ComponentPropsWithoutRef<"pre">) {
+ const codeElement = children as ReactElement<{
+ className?: string;
+ children?: unknown;
+ }>;
+
+ const className = codeElement?.props?.className || "";
+ const lang = className.replace("language-", "") || "";
+ const rawCode = extractTextContent(codeElement?.props?.children).replace(/\n$/, "");
+
+ if (lang === "mermaid") {
+ return ;
+ }
+
+ return ;
+}
+
+function HighlightedBlock({ code, lang }: { code: string; lang: string }) {
+ const [html, setHtml] = useState("");
+
+ useEffect(() => {
+ getHighlighter().then((h) => {
+ const loadedLangs = h.getLoadedLanguages();
+ const effectiveLang = loadedLangs.includes(lang) ? lang : "text";
+ setHtml(
+ h.codeToHtml(code, { lang: effectiveLang, theme: "vitesse-dark" }),
+ );
+ });
+ }, [code, lang]);
+
+ return (
+
+ {lang && (
+
+
+ {lang}
+
+
+ )}
+
+ {html ? (
+
+ ) : (
+
+ {code}
+
+ )}
+
+ );
+}
diff --git a/website/src/components/ui/code-block.tsx b/website/src/components/ui/code-block.tsx
new file mode 100644
index 0000000..00c34c0
--- /dev/null
+++ b/website/src/components/ui/code-block.tsx
@@ -0,0 +1,51 @@
+import type { ReactNode } from "react";
+import { cn } from "../../lib/utils";
+
+function CornerMarker({
+ position,
+}: {
+ position: "top-left" | "top-right" | "bottom-left" | "bottom-right";
+}) {
+ const positionClasses = {
+ "top-left": "-top-1 -left-1",
+ "top-right": "-top-1 -right-1",
+ "bottom-left": "-bottom-1 -left-1",
+ "bottom-right": "-bottom-1 -right-1",
+ };
+
+ return (
+
+ );
+}
+
+export interface CodeBlockProps {
+ children: ReactNode;
+ label?: string;
+ className?: string;
+}
+
+export function CodeBlock({ children, label, className }: CodeBlockProps) {
+ return (
+
+
+
+
+
+
+
+
+ {children}
+
+
+
+ {label && (
+
+ {label}
+
+ )}
+
+ );
+}
diff --git a/website/src/components/ui/crosshair-divider.tsx b/website/src/components/ui/crosshair-divider.tsx
new file mode 100644
index 0000000..b219dce
--- /dev/null
+++ b/website/src/components/ui/crosshair-divider.tsx
@@ -0,0 +1,41 @@
+import { cn } from "../../lib/utils";
+
+export interface CrosshairDividerProps {
+ className?: string;
+}
+
+export function CrosshairDivider({ className }: CrosshairDividerProps) {
+ return (
+
+ );
+}
diff --git a/website/src/components/ui/dashed-panel.tsx b/website/src/components/ui/dashed-panel.tsx
new file mode 100644
index 0000000..eb8e753
--- /dev/null
+++ b/website/src/components/ui/dashed-panel.tsx
@@ -0,0 +1,56 @@
+import type { ReactNode } from "react";
+import { cn } from "../../lib/utils";
+
+interface CornerMarkerProps {
+ position: "top-left" | "top-right" | "bottom-left" | "bottom-right";
+}
+
+function CornerMarker({ position }: CornerMarkerProps) {
+ const positionClasses = {
+ "top-left": "-top-px -left-px",
+ "top-right": "-top-px -right-px",
+ "bottom-left": "-bottom-px -left-px",
+ "bottom-right": "-bottom-px -right-px",
+ };
+
+ return (
+
+ );
+}
+
+export interface DashedPanelProps {
+ className?: string;
+ children: ReactNode;
+ withBackground?: boolean;
+ withCorners?: boolean;
+}
+
+export function DashedPanel({
+ className,
+ children,
+ withBackground = false,
+ withCorners = false,
+}: DashedPanelProps) {
+ return (
+
+ {withCorners && (
+ <>
+
+
+
+
+ >
+ )}
+ {children}
+
+ );
+}
diff --git a/website/src/components/ui/feature-card.tsx b/website/src/components/ui/feature-card.tsx
new file mode 100644
index 0000000..83b8eae
--- /dev/null
+++ b/website/src/components/ui/feature-card.tsx
@@ -0,0 +1,47 @@
+import type { ReactNode } from "react";
+import { cn } from "../../lib/utils";
+
+export interface FeatureCardProps {
+ icon: ReactNode;
+ title: string;
+ description: string;
+ subtitle?: string;
+ href?: string;
+ className?: string;
+}
+
+export function FeatureCard({
+ icon,
+ title,
+ description,
+ subtitle,
+ href,
+ className,
+}: FeatureCardProps) {
+ const content = (
+ <>
+ {icon}
+ {title}
+ {subtitle && (
+ {subtitle}
+ )}
+ {description}
+ >
+ );
+
+ const sharedClasses = cn(
+ "block border border-dashed border-border p-4 sm:p-6 transition-all duration-200",
+ "hover:bg-surface-2/50 hover:border-border/80 hover:shadow-[0_4px_16px_rgba(0,0,0,0.3)] hover:-translate-y-0.5",
+ className,
+ );
+
+ if (href) {
+ return (
+
+ {content}
+
+ );
+ }
+
+ return {content}
;
+}
diff --git a/website/src/components/ui/loading-spinner.tsx b/website/src/components/ui/loading-spinner.tsx
new file mode 100644
index 0000000..b338207
--- /dev/null
+++ b/website/src/components/ui/loading-spinner.tsx
@@ -0,0 +1,55 @@
+import { cn } from "../../lib/utils";
+
+export interface LoadingSpinnerProps {
+ className?: string;
+}
+
+export function LoadingSpinner({ className }: LoadingSpinnerProps) {
+ return (
+
+
+ {/* Vertical crosshair line */}
+
+ {/* Horizontal crosshair line */}
+
+ {/* Center circle */}
+
+ {/* Inner dot */}
+
+
+
+ );
+}
diff --git a/website/src/components/ui/mermaid.tsx b/website/src/components/ui/mermaid.tsx
new file mode 100644
index 0000000..7e09261
--- /dev/null
+++ b/website/src/components/ui/mermaid.tsx
@@ -0,0 +1,46 @@
+import { useEffect, useRef, useState } from "react";
+import mermaid from "mermaid";
+
+mermaid.initialize({
+ startOnLoad: false,
+ theme: "dark",
+ themeVariables: {
+ darkMode: true,
+ background: "#000000",
+ primaryColor: "#1a1a2e",
+ primaryTextColor: "#ffffff",
+ primaryBorderColor: "#333333",
+ lineColor: "#4169E1",
+ secondaryColor: "#111111",
+ tertiaryColor: "#0a0a0a",
+ fontFamily: "DM Mono, monospace",
+ fontSize: "14px",
+ nodeBorder: "#333333",
+ clusterBkg: "#111111",
+ clusterBorder: "#333333",
+ edgeLabelBackground: "#000000",
+ nodeTextColor: "#ffffff",
+ },
+});
+
+let mermaidCounter = 0;
+
+export function Mermaid({ chart }: { chart: string }) {
+ const containerRef = useRef(null);
+ const [svg, setSvg] = useState("");
+
+ useEffect(() => {
+ const id = `mermaid-${++mermaidCounter}`;
+ mermaid.render(id, chart).then(({ svg: rendered }) => {
+ setSvg(rendered);
+ });
+ }, [chart]);
+
+ return (
+
+ );
+}
diff --git a/website/src/components/ui/metric-card.tsx b/website/src/components/ui/metric-card.tsx
new file mode 100644
index 0000000..af2c890
--- /dev/null
+++ b/website/src/components/ui/metric-card.tsx
@@ -0,0 +1,18 @@
+import { cn } from "../../lib/utils";
+
+export interface MetricCardProps {
+ label: string;
+ value: string;
+ className?: string;
+}
+
+export function MetricCard({ label, value, className }: MetricCardProps) {
+ return (
+
+
+ {label}
+
+ {value}
+
+ );
+}
diff --git a/website/src/components/ui/redacted.tsx b/website/src/components/ui/redacted.tsx
new file mode 100644
index 0000000..d3d9a1e
--- /dev/null
+++ b/website/src/components/ui/redacted.tsx
@@ -0,0 +1,55 @@
+/**
+ * Redacted / "Coming Soon" component for hiding sensitive tokenomics data.
+ * Renders asterisks with a blur effect that cannot be defeated by CSS overrides,
+ * because the actual text content is replaced — there's nothing to unblur.
+ */
+
+interface RedactedProps {
+ /** Optional label shown on hover */
+ label?: string;
+ /** How many asterisks to show (default 3) */
+ length?: number;
+ /** Display as block-level "Coming Soon" banner instead of inline */
+ block?: boolean;
+ className?: string;
+}
+
+export function Redacted({ label = "Coming Soon", length = 3, block, className = "" }: RedactedProps) {
+ const stars = "***".repeat(Math.max(1, Math.ceil(length / 3)));
+
+ if (block) {
+ return (
+
+ {stars}
+ {label}
+
+ );
+ }
+
+ return (
+
+ {stars}
+
+ );
+}
+
+/**
+ * Wraps a section with a "Coming Soon" overlay.
+ * The children are blurred and a centered label is shown on top.
+ */
+export function ComingSoonOverlay({ children, label = "Coming Soon", className = "" }: {
+ children: React.ReactNode;
+ label?: string;
+ className?: string;
+}) {
+ return (
+
+
+ {children}
+
+
+ {label}
+
+
+ );
+}
diff --git a/website/src/components/ui/scroll-to-top.tsx b/website/src/components/ui/scroll-to-top.tsx
new file mode 100644
index 0000000..54f9feb
--- /dev/null
+++ b/website/src/components/ui/scroll-to-top.tsx
@@ -0,0 +1,36 @@
+import { useState, useEffect } from "react";
+import { useLocation } from "react-router";
+import { ArrowUp } from "lucide-react";
+import { cn } from "../../lib/utils";
+
+export function ScrollToTop() {
+ const [visible, setVisible] = useState(false);
+ const location = useLocation();
+ const hasPlayer = location.pathname === "/about";
+
+ useEffect(() => {
+ const handleScroll = () => {
+ setVisible(window.scrollY > 400);
+ };
+ window.addEventListener("scroll", handleScroll);
+ return () => window.removeEventListener("scroll", handleScroll);
+ }, []);
+
+ return (
+ window.scrollTo({ top: 0, behavior: "smooth" })}
+ className={cn(
+ "fixed right-3 sm:right-6 z-40 w-10 h-10 flex items-center justify-center",
+ "bg-surface-2/90 backdrop-blur-sm border border-border/60 rounded-full",
+ "text-muted hover:text-fg hover:border-border transition-all duration-200",
+ "shadow-[0_4px_12px_rgba(0,0,0,0.4)]",
+ hasPlayer ? "bottom-20 sm:bottom-16" : "bottom-6",
+ visible ? "opacity-100 translate-y-0" : "opacity-0 translate-y-4 pointer-events-none",
+ )}
+ aria-label="Scroll to top"
+ >
+
+
+ );
+}
diff --git a/website/src/components/ui/search-dialog.tsx b/website/src/components/ui/search-dialog.tsx
new file mode 100644
index 0000000..ea8a5ba
--- /dev/null
+++ b/website/src/components/ui/search-dialog.tsx
@@ -0,0 +1,312 @@
+import { useState, useCallback, useEffect, useRef, useMemo } from "react";
+import { useNavigate, useLocation } from "react-router";
+import * as Dialog from "@radix-ui/react-dialog";
+import { Search, Hash } from "lucide-react";
+import { ALL_DOCS } from "../../data/docs-navigation";
+import { SECTION_INDEX } from "virtual:docs-search-index";
+import type { DocLink } from "../../data/docs-navigation";
+import type { Persona } from "../../types/persona";
+import { cn } from "../../lib/utils";
+
+const PERSONA_LABELS: Record = {
+ developer: "Dev",
+ operator: "Ops",
+ contributor: "Contrib",
+};
+
+const PERSONA_COLORS: Record = {
+ developer: "text-accent bg-accent/10",
+ operator: "text-accent-2 bg-accent-2/10",
+ contributor: "text-muted bg-surface-2",
+};
+
+type SearchResult =
+ | { kind: "page"; link: DocLink; persona: Persona }
+ | {
+ kind: "section";
+ pageTitle: string;
+ pageSlug: string;
+ sectionTitle: string;
+ sectionId: string;
+ persona: Persona;
+ };
+
+export function SearchDialog({
+ open,
+ onOpenChange,
+}: {
+ open: boolean;
+ onOpenChange: (open: boolean) => void;
+}) {
+ const navigate = useNavigate();
+ const { pathname } = useLocation();
+ const inputRef = useRef(null);
+ const [query, setQuery] = useState("");
+ const [selectedIndex, setSelectedIndex] = useState(0);
+
+ const results: SearchResult[] = useMemo(() => {
+ if (!query.trim()) {
+ // No query — show pages only
+ return ALL_DOCS.map(({ link, persona }) => ({
+ kind: "page" as const,
+ link,
+ persona,
+ }));
+ }
+
+ const q = query.trim().toLowerCase();
+ const items: SearchResult[] = [];
+
+ // Match pages
+ for (const { link, persona } of ALL_DOCS) {
+ if (
+ link.title.toLowerCase().includes(q) ||
+ link.description.toLowerCase().includes(q)
+ ) {
+ items.push({ kind: "page", link, persona });
+ }
+ }
+
+ // Match sections
+ for (const s of SECTION_INDEX) {
+ if (s.sectionTitle.toLowerCase().includes(q)) {
+ items.push({
+ kind: "section",
+ pageTitle: s.pageTitle,
+ pageSlug: s.pageSlug,
+ sectionTitle: s.sectionTitle,
+ sectionId: s.sectionId,
+ persona: s.persona,
+ });
+ }
+ }
+
+ return items;
+ }, [query]);
+
+ // Reset on open
+ useEffect(() => {
+ if (open) {
+ setQuery("");
+ setSelectedIndex(0);
+ requestAnimationFrame(() => inputRef.current?.focus());
+ }
+ }, [open]);
+
+ // Clamp selected index
+ useEffect(() => {
+ if (selectedIndex >= results.length) {
+ setSelectedIndex(Math.max(0, results.length - 1));
+ }
+ }, [results.length, selectedIndex]);
+
+ // Global Cmd+K listener
+ useEffect(() => {
+ function handleKeyDown(e: KeyboardEvent) {
+ if ((e.metaKey || e.ctrlKey) && e.key === "k") {
+ e.preventDefault();
+ onOpenChange(!open);
+ }
+ }
+ document.addEventListener("keydown", handleKeyDown);
+ return () => document.removeEventListener("keydown", handleKeyDown);
+ }, [open, onOpenChange]);
+
+ const goTo = useCallback(
+ (result: SearchResult) => {
+ onOpenChange(false);
+
+ if (result.kind === "page") {
+ navigate(`/docs/${result.link.slug}`);
+ } else {
+ const targetPath = `/docs/${result.pageSlug}`;
+ if (pathname === targetPath) {
+ // Same page — just scroll to section
+ document
+ .getElementById(result.sectionId)
+ ?.scrollIntoView({ behavior: "smooth" });
+ } else {
+ // Navigate then scroll after render
+ navigate(targetPath);
+ setTimeout(() => {
+ document
+ .getElementById(result.sectionId)
+ ?.scrollIntoView({ behavior: "smooth" });
+ }, 300);
+ }
+ }
+ },
+ [navigate, onOpenChange, pathname],
+ );
+
+ const handleKeyDown = useCallback(
+ (e: React.KeyboardEvent) => {
+ if (e.key === "ArrowDown") {
+ e.preventDefault();
+ setSelectedIndex((i) => Math.min(i + 1, results.length - 1));
+ } else if (e.key === "ArrowUp") {
+ e.preventDefault();
+ setSelectedIndex((i) => Math.max(i - 1, 0));
+ } else if (e.key === "Enter" && results[selectedIndex]) {
+ e.preventDefault();
+ goTo(results[selectedIndex]);
+ }
+ },
+ [results, selectedIndex, goTo],
+ );
+
+ return (
+
+
+
+
+ {/* Search input */}
+
+
+
+ Search documentation
+
+
+ Type to search across all documentation pages and sections
+
+ {
+ setQuery(e.target.value);
+ setSelectedIndex(0);
+ }}
+ placeholder="Search all docs..."
+ className="flex-1 bg-transparent text-sm text-fg placeholder:text-muted/50 outline-none font-mono"
+ />
+
+ ESC
+
+
+
+ {/* Results */}
+
+ {results.length === 0 ? (
+
+
+ No docs matching "{query}"
+
+
+ ) : (
+
+ {results.map((result, index) => {
+ const isSelected = index === selectedIndex;
+
+ if (result.kind === "page") {
+ const Icon = result.link.icon;
+ return (
+
+ goTo(result)}
+ onMouseEnter={() => setSelectedIndex(index)}
+ className={cn(
+ "w-full flex items-center gap-3 px-4 py-2.5 text-left transition-colors",
+ isSelected
+ ? "bg-surface-2"
+ : "hover:bg-surface-2/50",
+ )}
+ >
+
+
+
+ {result.link.title}
+
+
+ {result.link.description}
+
+
+
+ {PERSONA_LABELS[result.persona]}
+
+
+
+ );
+ }
+
+ // Section result
+ return (
+
+ goTo(result)}
+ onMouseEnter={() => setSelectedIndex(index)}
+ className={cn(
+ "w-full flex items-center gap-3 px-4 py-2.5 text-left transition-colors",
+ isSelected
+ ? "bg-surface-2"
+ : "hover:bg-surface-2/50",
+ )}
+ >
+
+
+
+ {result.sectionTitle}
+
+
+ in {result.pageTitle}
+
+
+
+ {PERSONA_LABELS[result.persona]}
+
+
+
+ );
+ })}
+
+ )}
+
+
+ {/* Footer hint */}
+
+ ↑↓ navigate
+ ↵ select
+ esc close
+
+
+
+
+ );
+}
diff --git a/website/src/components/ui/section-header.tsx b/website/src/components/ui/section-header.tsx
new file mode 100644
index 0000000..24feef8
--- /dev/null
+++ b/website/src/components/ui/section-header.tsx
@@ -0,0 +1,29 @@
+import type { ReactNode } from "react";
+import { cn } from "../../lib/utils";
+
+export interface SectionHeaderProps {
+ title: string;
+ subtitle?: ReactNode;
+ className?: string;
+}
+
+export function SectionHeader({
+ title,
+ subtitle,
+ className,
+}: SectionHeaderProps) {
+ return (
+
+
+
+ {subtitle && (
+
{subtitle}
+ )}
+
+ );
+}
diff --git a/website/src/components/ui/silver-theme.tsx b/website/src/components/ui/silver-theme.tsx
new file mode 100644
index 0000000..c08d175
--- /dev/null
+++ b/website/src/components/ui/silver-theme.tsx
@@ -0,0 +1,115 @@
+import type { ReactNode, ButtonHTMLAttributes } from "react";
+import { cn } from "../../lib/utils";
+
+export const SILVER = {
+ light: "#d4d4d8",
+ mid: "#a1a1aa",
+ dark: "#71717a",
+ shine: "#e4e4e7",
+ bg: "rgba(161, 161, 170, 0.06)",
+ border: "rgba(161, 161, 170, 0.2)",
+ gradient: "linear-gradient(135deg, #d4d4d8 0%, #a1a1aa 40%, #71717a 100%)",
+} as const;
+
+export function SilverBadge({
+ children,
+ variant = "default",
+ className,
+}: {
+ children: ReactNode;
+ variant?: "default" | "outline" | "status";
+ className?: string;
+}) {
+ const base =
+ "inline-flex items-center px-2.5 py-0.5 text-xs font-mono tracking-wider";
+ const variants = {
+ default: "border border-dashed text-zinc-400",
+ outline: "border border-dashed text-zinc-300",
+ status: "border border-dashed text-zinc-200",
+ };
+ return (
+
+ {children}
+
+ );
+}
+
+export function SilverButton({
+ children,
+ variant = "primary",
+ size = "lg",
+ className,
+ ...props
+}: {
+ children: ReactNode;
+ variant?: "primary" | "ghost";
+ size?: "default" | "lg";
+ className?: string;
+} & ButtonHTMLAttributes) {
+ const sizeClasses =
+ size === "lg" ? "px-8 py-3 text-sm" : "px-5 py-2.5 text-xs";
+ if (variant === "ghost") {
+ return (
+ )}
+ >
+ {children}
+
+ );
+ }
+ return (
+ )}
+ >
+ {children}
+
+ );
+}
+
+export function SilverMetric({
+ label,
+ value,
+}: {
+ label: string;
+ value: ReactNode;
+}) {
+ return (
+
+
+ {label}
+
+
+ {value}
+
+
+ );
+}
diff --git a/website/src/components/ui/spec-table.tsx b/website/src/components/ui/spec-table.tsx
new file mode 100644
index 0000000..d0504dd
--- /dev/null
+++ b/website/src/components/ui/spec-table.tsx
@@ -0,0 +1,30 @@
+import { cn } from "../../lib/utils";
+
+export interface SpecTableRow {
+ label: string;
+ value: React.ReactNode;
+}
+
+export interface SpecTableProps {
+ rows: SpecTableRow[];
+ className?: string;
+}
+
+export function SpecTable({ rows, className }: SpecTableProps) {
+ return (
+
+ {rows.map((row, i) => (
+
+ {row.label}
+ {row.value}
+
+ ))}
+
+ );
+}
diff --git a/website/src/components/ui/split-text.tsx b/website/src/components/ui/split-text.tsx
new file mode 100644
index 0000000..0360286
--- /dev/null
+++ b/website/src/components/ui/split-text.tsx
@@ -0,0 +1,109 @@
+import { useRef, useEffect, useCallback } from "react";
+import gsap from "gsap";
+
+export interface SplitTextProps {
+ text: string;
+ className?: string;
+ delay?: number;
+ duration?: number;
+ ease?: string;
+ splitType?: "chars" | "words";
+ from?: gsap.TweenVars;
+ to?: gsap.TweenVars;
+ threshold?: number;
+ rootMargin?: string;
+}
+
+export function SplitText({
+ text,
+ className = "",
+ delay = 50,
+ duration = 0.8,
+ ease = "power3.out",
+ splitType = "chars",
+ from = { opacity: 0, y: 40 },
+ to = { opacity: 1, y: 0 },
+ threshold = 0.1,
+ rootMargin = "-50px",
+}: SplitTextProps) {
+ const containerRef = useRef(null);
+ const hasAnimated = useRef(false);
+
+ const getElements = useCallback(() => {
+ if (!containerRef.current) return [];
+ return Array.from(
+ containerRef.current.querySelectorAll(
+ splitType === "chars" ? ".split-char" : ".split-word",
+ ),
+ );
+ }, [splitType]);
+
+ useEffect(() => {
+ const elements = getElements();
+ if (elements.length === 0) return;
+
+ // Set initial state
+ gsap.set(elements, from);
+
+ const observer = new IntersectionObserver(
+ ([entry]) => {
+ if (entry.isIntersecting && !hasAnimated.current) {
+ hasAnimated.current = true;
+
+ gsap.to(elements, {
+ ...to,
+ duration,
+ ease,
+ stagger: delay / 1000,
+ });
+
+ observer.disconnect();
+ }
+ },
+ { threshold, rootMargin },
+ );
+
+ if (containerRef.current) {
+ observer.observe(containerRef.current);
+ }
+
+ return () => observer.disconnect();
+ }, [getElements, from, to, duration, ease, delay, threshold, rootMargin]);
+
+ const renderContent = () => {
+ if (splitType === "words") {
+ return text.split(" ").map((word, i) => (
+
+ {word}
+ {i < text.split(" ").length - 1 ? "\u00A0" : ""}
+
+ ));
+ }
+
+ // chars — split by words first, then chars within each word
+ return text.split(" ").map((word, wi) => (
+
+ {word.split("").map((char, ci) => (
+
+ {char}
+
+ ))}
+ {wi < text.split(" ").length - 1 && (
+
+ {"\u00A0"}
+
+ )}
+
+ ));
+ };
+
+ return (
+
+ {renderContent()}
+
+ );
+}
diff --git a/website/src/components/ui/status-dot.tsx b/website/src/components/ui/status-dot.tsx
new file mode 100644
index 0000000..ff806ba
--- /dev/null
+++ b/website/src/components/ui/status-dot.tsx
@@ -0,0 +1,37 @@
+import { cva } from "class-variance-authority";
+import type { VariantProps } from "class-variance-authority";
+import { cn } from "../../lib/utils";
+
+export const statusDotVariants = cva("w-2 h-2 rounded-full shrink-0", {
+ variants: {
+ status: {
+ active: "bg-accent-2 animate-pulse-dot",
+ warning: "bg-amber-500",
+ error: "bg-red-500",
+ neutral: "bg-muted",
+ },
+ },
+ defaultVariants: {
+ status: "neutral",
+ },
+});
+
+export interface StatusDotProps extends VariantProps {
+ label?: string;
+ className?: string;
+}
+
+export function StatusDot({ status, label, className }: StatusDotProps) {
+ if (label) {
+ return (
+
+
+ {label}
+
+ );
+ }
+
+ return (
+
+ );
+}
diff --git a/website/src/components/ui/status-row.tsx b/website/src/components/ui/status-row.tsx
new file mode 100644
index 0000000..0a1f23b
--- /dev/null
+++ b/website/src/components/ui/status-row.tsx
@@ -0,0 +1,37 @@
+import { cn } from "../../lib/utils";
+import { StatusDot } from "./status-dot";
+import { Badge } from "./badge";
+
+export interface StatusRowProps {
+ name: string;
+ type: string;
+ description: string;
+ status?: "active" | "warning" | "error" | "neutral";
+ className?: string;
+}
+
+export function StatusRow({
+ name,
+ type,
+ description,
+ status = "neutral",
+ className,
+}: StatusRowProps) {
+ return (
+
+
+
+ {name}
+
+
+
{type}
+
+
{description}
+
+ );
+}
diff --git a/website/src/components/ui/syntax-code-block.tsx b/website/src/components/ui/syntax-code-block.tsx
new file mode 100644
index 0000000..7de8207
--- /dev/null
+++ b/website/src/components/ui/syntax-code-block.tsx
@@ -0,0 +1,79 @@
+import { useEffect, useState } from "react";
+import { createHighlighter } from "shiki";
+import type { Highlighter } from "shiki";
+import { cn } from "../../lib/utils";
+
+let highlighterPromise: Promise | null = null;
+
+function getHighlighter() {
+ if (!highlighterPromise) {
+ highlighterPromise = createHighlighter({
+ themes: ["vitesse-dark"],
+ langs: ["typescript"],
+ });
+ }
+ return highlighterPromise;
+}
+
+export interface SyntaxCodeBlockProps {
+ code: string;
+ language?: string;
+ label?: string;
+ className?: string;
+}
+
+export function SyntaxCodeBlock({
+ code,
+ language = "typescript",
+ label,
+ className,
+}: SyntaxCodeBlockProps) {
+ const [html, setHtml] = useState("");
+
+ useEffect(() => {
+ getHighlighter().then((h) => {
+ setHtml(h.codeToHtml(code, { lang: language, theme: "vitesse-dark" }));
+ });
+ }, [code, language]);
+
+ return (
+
+
+ {/* Corner markers */}
+
+
+
+
+
+ {html ? (
+
+ ) : (
+
+ {code}
+
+ )}
+
+
+ {label && (
+
+ {label}
+
+ )}
+
+ );
+}
diff --git a/website/src/components/ui/tabs.tsx b/website/src/components/ui/tabs.tsx
new file mode 100644
index 0000000..8e052d6
--- /dev/null
+++ b/website/src/components/ui/tabs.tsx
@@ -0,0 +1,53 @@
+import { forwardRef } from "react";
+import type { ComponentPropsWithoutRef, ElementRef } from "react";
+import * as TabsPrimitive from "@radix-ui/react-tabs";
+import { cn } from "../../lib/utils";
+
+export const Tabs = TabsPrimitive.Root;
+
+export const TabsList = forwardRef<
+ ElementRef,
+ ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+));
+
+TabsList.displayName = "TabsList";
+
+export const TabsTrigger = forwardRef<
+ ElementRef,
+ ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+));
+
+TabsTrigger.displayName = "TabsTrigger";
+
+export const TabsContent = forwardRef<
+ ElementRef,
+ ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+));
+
+TabsContent.displayName = "TabsContent";
diff --git a/website/src/components/ui/terminal.tsx b/website/src/components/ui/terminal.tsx
new file mode 100644
index 0000000..5712c54
--- /dev/null
+++ b/website/src/components/ui/terminal.tsx
@@ -0,0 +1,53 @@
+import { cn } from "../../lib/utils";
+
+export interface TerminalLine {
+ prefix?: string;
+ text: string;
+ className?: string;
+}
+
+export interface TerminalProps {
+ lines: TerminalLine[];
+ className?: string;
+}
+
+export function Terminal({ lines, className }: TerminalProps) {
+ return (
+
+ {/* Title bar */}
+
+
+ {/* Body */}
+
+ {lines.map((line, i) => (
+
+ {line.prefix && (
+
+ {line.prefix}
+
+ )}
+ {line.text}
+
+ ))}
+
+
+ );
+}
diff --git a/website/src/data/changelog.ts b/website/src/data/changelog.ts
new file mode 100644
index 0000000..f5a9b80
--- /dev/null
+++ b/website/src/data/changelog.ts
@@ -0,0 +1,49 @@
+export interface ChangelogEntry {
+ version: string;
+ date: string;
+ summary: string;
+ changes: Array<{
+ type: "added" | "changed" | "fixed" | "removed";
+ text: string;
+ }>;
+}
+
+export const CHANGELOG: ChangelogEntry[] = [
+ {
+ version: "2.0.0",
+ date: "2026-02-15",
+ summary: "Major release with Vault integration and serverless WASM",
+ changes: [
+ { type: "added", text: "Orama Vault integration with Shamir's Secret Sharing" },
+ { type: "added", text: "Serverless WASM function execution" },
+ { type: "added", text: "TypeScript SDK v0.7 with vault and functions modules" },
+ { type: "changed", text: "Gateway architecture refactored for modular service loading" },
+ { type: "changed", text: "RQLite upgraded to latest version with improved Raft performance" },
+ { type: "fixed", text: "WebSocket reconnection stability in pub/sub subscriptions" },
+ ],
+ },
+ {
+ version: "1.5.0",
+ date: "2026-01-20",
+ summary: "Distributed cache and improved pub/sub",
+ changes: [
+ { type: "added", text: "Olric distributed cache integration" },
+ { type: "added", text: "Presence tracking for pub/sub topics" },
+ { type: "changed", text: "Pub/sub message routing optimized for large clusters" },
+ { type: "fixed", text: "Namespace isolation edge case in multi-tenant deployments" },
+ ],
+ },
+ {
+ version: "1.0.0",
+ date: "2025-11-01",
+ summary: "Initial stable release",
+ changes: [
+ { type: "added", text: "Gateway with RQLite backend" },
+ { type: "added", text: "LibP2P peer discovery and mesh networking" },
+ { type: "added", text: "WireGuard overlay network" },
+ { type: "added", text: "API key and JWT authentication" },
+ { type: "added", text: "TypeScript SDK v0.5" },
+ { type: "added", text: "IPFS storage integration" },
+ ],
+ },
+];
diff --git a/website/src/data/docs-navigation.ts b/website/src/data/docs-navigation.ts
new file mode 100644
index 0000000..0456e37
--- /dev/null
+++ b/website/src/data/docs-navigation.ts
@@ -0,0 +1,257 @@
+import type { Persona } from "../types/persona";
+import type { LucideIcon } from "lucide-react";
+import {
+ BookOpen,
+ Rocket,
+ Database,
+ Lock,
+ MessageSquare,
+ Zap,
+ HardDrive,
+ Code,
+ Globe,
+ Video,
+ FileCode,
+ Terminal,
+ Play,
+ Server,
+ Activity,
+ ArrowUpCircle,
+ Shield,
+ Wrench,
+ LayoutDashboard,
+ Laptop,
+ FileText,
+ FlaskConical,
+ Upload,
+ MonitorPlay,
+} from "lucide-react";
+
+export interface DocLink {
+ title: string;
+ slug: string;
+ icon: LucideIcon;
+ description: string;
+}
+
+/* Flat doc list per persona — no sections, no accordion */
+
+export const DEVELOPER_DOCS: DocLink[] = [
+ {
+ title: "Introduction",
+ slug: "developer/getting-started",
+ icon: BookOpen,
+ description: "Get started with the Orama SDK",
+ },
+ {
+ title: "Deployments",
+ slug: "developer/deployments",
+ icon: Rocket,
+ description: "Deploy static, Next.js, Go, Node.js apps",
+ },
+ {
+ title: "Databases",
+ slug: "developer/databases",
+ icon: Database,
+ description: "Distributed SQL with RQLite",
+ },
+ {
+ title: "Vault",
+ slug: "developer/vault",
+ icon: Lock,
+ description: "Encrypted secrets with Shamir sharing",
+ },
+ {
+ title: "PubSub",
+ slug: "developer/pubsub",
+ icon: MessageSquare,
+ description: "Real-time messaging and presence",
+ },
+ {
+ title: "Cache",
+ slug: "developer/cache",
+ icon: Zap,
+ description: "Distributed key-value with Olric",
+ },
+ {
+ title: "Storage",
+ slug: "developer/storage",
+ icon: HardDrive,
+ description: "Decentralized files on IPFS",
+ },
+ {
+ title: "Functions",
+ slug: "developer/functions",
+ icon: Code,
+ description: "Serverless WASM at the edge",
+ },
+ {
+ title: "Domains",
+ slug: "developer/domains",
+ icon: Globe,
+ description: "Automatic DNS and SSL",
+ },
+ {
+ title: "WebRTC",
+ slug: "developer/webrtc",
+ icon: Video,
+ description: "Video, voice, and data channels",
+ },
+ {
+ title: "SDK Reference",
+ slug: "developer/sdk-reference",
+ icon: FileCode,
+ description: "TypeScript SDK API surface",
+ },
+ {
+ title: "CLI Reference",
+ slug: "developer/cli-reference",
+ icon: Terminal,
+ description: "All CLI commands and flags",
+ },
+ {
+ title: "Video Tutorials",
+ slug: "developer/video-tutorials",
+ icon: MonitorPlay,
+ description: "Step-by-step video guides",
+ },
+];
+
+export const OPERATOR_DOCS: DocLink[] = [
+ {
+ title: "Getting Started",
+ slug: "operator/getting-started",
+ icon: Play,
+ description: "Operator onboarding guide",
+ },
+ {
+ title: "Node Setup",
+ slug: "operator/node-setup",
+ icon: Server,
+ description: "Install and configure a node",
+ },
+ {
+ title: "Monitoring",
+ slug: "operator/monitoring",
+ icon: Activity,
+ description: "Cluster health and alerts",
+ },
+ {
+ title: "Upgrades",
+ slug: "operator/upgrades",
+ icon: ArrowUpCircle,
+ description: "Rolling upgrade protocol",
+ },
+ {
+ title: "WireGuard",
+ slug: "operator/wireguard",
+ icon: Shield,
+ description: "Mesh network configuration",
+ },
+ {
+ title: "Security",
+ slug: "operator/security",
+ icon: Shield,
+ description: "Network security and hardening",
+ },
+ {
+ title: "OramaOS",
+ slug: "operator/orama-os",
+ icon: HardDrive,
+ description: "Locked-down node operating system",
+ },
+ {
+ title: "Troubleshooting",
+ slug: "operator/troubleshooting",
+ icon: Wrench,
+ description: "Common issues and fixes",
+ },
+ {
+ title: "Nameserver",
+ slug: "operator/nameserver",
+ icon: Globe,
+ description: "DNS and nameserver config",
+ },
+ {
+ title: "Video Tutorials",
+ slug: "operator/video-tutorials",
+ icon: MonitorPlay,
+ description: "Step-by-step video guides",
+ },
+];
+
+export const CONTRIBUTOR_DOCS: DocLink[] = [
+ {
+ title: "Architecture",
+ slug: "contributor/architecture",
+ icon: LayoutDashboard,
+ description: "System design overview",
+ },
+ {
+ title: "Dev Setup",
+ slug: "contributor/dev-setup",
+ icon: Laptop,
+ description: "Local development environment",
+ },
+ {
+ title: "Code Style",
+ slug: "contributor/code-style",
+ icon: FileText,
+ description: "Coding conventions",
+ },
+ {
+ title: "Testing",
+ slug: "contributor/testing",
+ icon: FlaskConical,
+ description: "Test strategy and tooling",
+ },
+ {
+ title: "Deployment",
+ slug: "contributor/deployment",
+ icon: Upload,
+ description: "CI/CD and release process",
+ },
+ {
+ title: "Video Tutorials",
+ slug: "contributor/video-tutorials",
+ icon: MonitorPlay,
+ description: "Step-by-step video guides",
+ },
+];
+
+/** Lookup table: persona → flat doc list */
+export const PERSONA_DOCS: Record = {
+ developer: DEVELOPER_DOCS,
+ operator: OPERATOR_DOCS,
+ contributor: CONTRIBUTOR_DOCS,
+};
+
+/** All docs across all personas (for search) */
+export const ALL_DOCS: { link: DocLink; persona: Persona }[] = [
+ ...DEVELOPER_DOCS.map((link) => ({ link, persona: "developer" as Persona })),
+ ...OPERATOR_DOCS.map((link) => ({ link, persona: "operator" as Persona })),
+ ...CONTRIBUTOR_DOCS.map((link) => ({
+ link,
+ persona: "contributor" as Persona,
+ })),
+];
+
+/** First slug for each persona — used for persona switching navigation */
+export const PERSONA_FIRST_SLUG: Record = {
+ developer: "developer/getting-started",
+ operator: "operator/getting-started",
+ contributor: "contributor/architecture",
+};
+
+/* Compat: DOCS_SECTIONS still used by docs.tsx for SLUG_TITLE_MAP */
+export interface DocSection {
+ title: string;
+ persona: Persona;
+ links: DocLink[];
+}
+
+export const DOCS_SECTIONS: DocSection[] = [
+ { title: "Developer", persona: "developer", links: DEVELOPER_DOCS },
+ { title: "Operator", persona: "operator", links: OPERATOR_DOCS },
+ { title: "Contributor", persona: "contributor", links: CONTRIBUTOR_DOCS },
+];
diff --git a/website/src/data/fundraise.ts b/website/src/data/fundraise.ts
new file mode 100644
index 0000000..7ef87ca
--- /dev/null
+++ b/website/src/data/fundraise.ts
@@ -0,0 +1,41 @@
+/**
+ * Centralized fundraise constants — ALL prices in BTC.
+ * Update numbers HERE — all pages pull from this single source.
+ */
+
+/* ── Token ── */
+export const TOKEN_PRICE_BTC = 0;
+export const TOKEN_LAUNCH_PRICE_BTC = 0;
+export const TOTAL_TOKENS = 0;
+
+/* ── Licenses ── */
+export const TOTAL_LICENSES = 0;
+export const LICENSE_PRICE_BTC = 0;
+
+/* ── Fundraise ── */
+export const FUNDRAISE_TARGET_BTC = 0;
+
+/* ── Treasury ── */
+export const TREASURY_BTC = "";
+
+/* ── Current stats ── */
+export const CURRENT_STATS = {
+ tokens_sold: 0,
+ tokens_remaining: 0,
+ token_raised_btc: 0,
+ licenses_sold: 0,
+ licenses_left: 0,
+ license_raised_btc: 0,
+ total_raised_btc: 0,
+ whitelist_count: 0,
+} as const;
+
+/**
+ * Format BTC amount for display.
+ * Shows up to 6 decimal places, trims trailing zeros.
+ */
+export function formatBTC(btc: number): string {
+ if (btc >= 1) return btc.toFixed(2);
+ if (btc >= 0.01) return btc.toFixed(4);
+ return btc.toFixed(6).replace(/0+$/, "").replace(/\.$/, "");
+}
diff --git a/website/src/data/navigation.ts b/website/src/data/navigation.ts
new file mode 100644
index 0000000..c05d964
--- /dev/null
+++ b/website/src/data/navigation.ts
@@ -0,0 +1,64 @@
+export interface NavItem {
+ label: string;
+ href: string;
+ external?: boolean;
+}
+
+export interface FooterColumn {
+ title: string;
+ links: NavItem[];
+}
+
+export interface SocialLink {
+ label: string;
+ href: string;
+ icon: string;
+}
+
+export const NAV_LINKS: NavItem[] = [
+ { label: "Blockchain", href: "/blockchain" },
+ { label: "Compute", href: "/compute" },
+ { label: "Investors", href: "/investors" },
+ { label: "Waitlist", href: "/whitelist" },
+ { label: "Whitepaper", href: "/whitepaper" },
+];
+
+export const MORE_LINKS: NavItem[] = [
+ { label: "Contributors", href: "/contributors" },
+ { label: "Documentation", href: "/docs" },
+];
+
+export const FOOTER_COLUMNS: FooterColumn[] = [
+ {
+ title: "Platform",
+ links: [
+ { label: "Compute", href: "/compute" },
+ { label: "Blockchain", href: "/blockchain" },
+ { label: "Investors", href: "/investors" },
+ { label: "Contributors", href: "/contributors" },
+ ],
+ },
+ {
+ title: "Resources",
+ links: [
+ { label: "Documentation", href: "/docs" },
+ { label: "Whitepaper", href: "/whitepaper" },
+ ],
+ },
+ {
+ title: "Community",
+ links: [
+ { label: "GitHub", href: "https://github.com/DeBrosDAO", external: true },
+ { label: "X", href: "https://x.com/debrosofficial", external: true },
+ { label: "Telegram", href: "https://t.me/debrosportal", external: true },
+ { label: "AnChat", href: "https://anchat.io", external: true },
+ ],
+ },
+];
+
+export const SOCIAL_LINKS: SocialLink[] = [
+ { label: "GitHub", href: "https://github.com/DeBrosDAO", icon: "github" },
+ { label: "X", href: "https://x.com/debrosofficial", icon: "twitter" },
+ { label: "Telegram", href: "https://t.me/debrosportal", icon: "send" },
+ { label: "YouTube", href: "https://www.youtube.com/@DeBrosOfficial", icon: "youtube" },
+];
diff --git a/website/src/data/products.ts b/website/src/data/products.ts
new file mode 100644
index 0000000..0824bdb
--- /dev/null
+++ b/website/src/data/products.ts
@@ -0,0 +1,58 @@
+export type ProductStatus = "active" | "coming-soon" | "beta";
+
+export interface Product {
+ name: string;
+ slug: string;
+ tagline: string;
+ description: string;
+ tech: string;
+ status: ProductStatus;
+}
+
+export const PRODUCTS: Product[] = [
+ {
+ name: "Orama Network",
+ slug: "network",
+ tagline: "Decentralized Cloud Infrastructure",
+ description:
+ "Edge proxy and API gateway with distributed SQL, caching, pub/sub, and serverless WASM execution across a global mesh of nodes.",
+ tech: "core / go",
+ status: "active",
+ },
+ {
+ name: "Orama Vault",
+ slug: "vault",
+ tagline: "Zero-Knowledge Secret Storage",
+ description:
+ "Distributed secrets engine using Shamir's Secret Sharing. Splits secrets across nodes with information-theoretic security.",
+ tech: "engine / zig",
+ status: "active",
+ },
+ {
+ name: "Network SDK",
+ slug: "sdk",
+ tagline: "One SDK, Every Service",
+ description:
+ "Isomorphic TypeScript SDK for all gateway operations — databases, pub/sub, vault, cache, storage, and serverless functions.",
+ tech: "sdk / typescript",
+ status: "active",
+ },
+ {
+ name: "Playground",
+ slug: "playground",
+ tagline: "Interactive Service Demos",
+ description:
+ "Visual, hands-on learning environment for exploring Orama Network services with live code examples.",
+ tech: "app / react",
+ status: "active",
+ },
+ {
+ name: "RootWallet",
+ slug: "rootwallet",
+ tagline: "Hybrid Hardware Wallet",
+ description:
+ "Multi-chain self-custody wallet for EVM and Solana. CLI, SDK, and mobile app with BIP-39 HD derivation and AES-256 encryption.",
+ tech: "wallet / typescript",
+ status: "active",
+ },
+];
diff --git a/website/src/docs/contributor/architecture.mdx b/website/src/docs/contributor/architecture.mdx
new file mode 100644
index 0000000..7a3c6dc
--- /dev/null
+++ b/website/src/docs/contributor/architecture.mdx
@@ -0,0 +1,217 @@
+# Architecture
+
+This document provides a high-level overview of the Orama Network system architecture. Understanding these components and their interactions is essential before contributing to the codebase.
+
+## System Overview
+
+```mermaid
+graph TD
+ Clients["External Clients (SDK, CLI, Browsers, Apps)"]
+ Gateway["API Gateway (Go) Auth · Routing · Rate Limit"]
+ RQLite["RQLite (DB)"]
+ Olric["Olric (Cache)"]
+ IPFS["IPFS + Cluster"]
+ WASM["WASM Functions"]
+ PubSub["PubSub (LibP2P)"]
+ Vault["Vault (Zig)"]
+ WebRTC["WebRTC (SFU + TURN)"]
+ Anyone["Anyone Relay"]
+ WG["WireGuard Mesh (10.0.0.0/24) Encrypted node-to-node tunnels"]
+
+ Clients -->|"HTTPS (port 443)"| Gateway
+ Gateway --> RQLite
+ Gateway --> Olric
+ Gateway --> IPFS
+ Gateway --> WASM
+ Gateway --> PubSub
+ Gateway --> Vault
+ Gateway --> WebRTC
+ Gateway --> Anyone
+ RQLite --> WG
+ Olric --> WG
+ IPFS --> WG
+ WASM --> WG
+ PubSub --> WG
+ WebRTC --> WG
+```
+
+## Core Components
+
+### API Gateway
+
+The gateway is the single entry point for all external traffic. Written in Go, it handles:
+
+- **Wallet-based authentication** — Cryptographic signature verification (EVM via RootWallet, Solana via Phantom)
+- **JWT lifecycle** — Token issuance, refresh, and revocation
+- **API key management** — Per-namespace API keys stored in credentials
+- **Request routing** — Dispatches to the appropriate backend service
+- **Rate limiting** — Per-wallet and per-endpoint limits
+- **Middleware stack** — Logger, CORS, Auth, Authorization, Rate Limiting, Error Handling
+- **Health monitoring** — Exposes health endpoints for each service
+
+### RQLite (Distributed Database)
+
+RQLite provides distributed SQL storage using SQLite + Raft consensus:
+
+- **Raft consensus** — Strong consistency with automatic leader election
+- **Voter/non-voter nodes** — Voters participate in consensus; non-voters replicate data
+- **Quorum requirement** — Majority of voters must be available for writes
+- **Leader forwarding** — All writes go through the leader, reads can go to any node
+- **ORM layer** — Fluent query builder, generic repository pattern, transaction support
+
+### Olric (Distributed Cache)
+
+Olric is an in-memory distributed cache and data structure store:
+
+- **Consistent hashing** — Data is partitioned across nodes
+- **DMap** — Distributed maps with TTL support
+- **Pub/Sub** — Internal event propagation between cache nodes
+- **Peer discovery** — Nodes discover each other over the WireGuard mesh
+
+### LibP2P PubSub
+
+Real-time messaging uses LibP2P's gossipsub protocol:
+
+- **Gossip-based propagation** — Messages spread through the mesh efficiently
+- **Topic-based routing** — Messages are delivered to all subscribers of a topic
+- **Decentralized** — No central broker; any node can publish or subscribe
+
+### IPFS Storage
+
+File storage uses IPFS with IPFS Cluster for content-addressed, decentralized storage:
+
+- **Content addressing** — Files identified by CID (content hash)
+- **Deduplication** — Identical files stored once
+- **Pinning** — IPFS Cluster ensures files remain available across the network
+
+### WASM Runtime
+
+Serverless functions execute in a wazero WebAssembly sandbox:
+
+- **Go + TinyGo** — Functions written in Go, compiled to WASI via TinyGo
+- **Sandboxed execution** — Strong isolation between functions
+- **Host functions** — Access to cache, database, storage, HTTP, PubSub from within WASM
+- **Fast cold starts** — WASM modules initialize in milliseconds
+
+### Orama Vault
+
+Zero-knowledge secret storage with a Zig guardian binary:
+
+- **Shamir's Secret Sharing** — Secrets split into shares distributed across guardian nodes
+- **Threshold reconstruction** — Adaptive threshold based on guardian count
+- **Zero-knowledge** — No single node ever has the full secret
+- **Guardian service** — Zig binary on port 7500 (HTTP) and 7501 (TCP peer protocol)
+
+### WebRTC (SFU + TURN)
+
+Real-time video, voice, and data channels:
+
+- **SFU** — Selective Forwarding Unit on all nodes (signaling ports 30000-30099, media ports 20000-29999, WireGuard only)
+- **TURN** — Relay server on 2 of 3 nodes (public ports 3478/5349, relay ports 49152-65535)
+- **Forced relay** — All client traffic goes through TURN (`iceTransportPolicy: "relay"`)
+- **Per-namespace** — Opt-in via `orama namespace enable webrtc`
+
+### Anyone Protocol
+
+Privacy relay integration on every node:
+
+- **Client mode** — SOCKS5 proxy for anonymized outbound requests (`/v1/proxy/anon`)
+- **Relay mode** — Participates in the Anyone relay network for rewards
+- **Dual rewards** — Node operators earn both $ORAMA and $ANYONE tokens
+
+## Network Layer
+
+### WireGuard Mesh
+
+All inter-node communication uses a full-mesh WireGuard topology:
+
+- Each node has a private IP on the `10.0.0.0/24` subnet
+- All internal service ports are only accessible over the mesh
+- Public internet exposure is limited to SSH, HTTPS, and WireGuard UDP
+
+### Service Ports
+
+| Service | Port | Network |
+|---------|------|---------|
+| Gateway | 6001 | Public (via Caddy on 443) |
+| RQLite | 5001 | WireGuard only |
+| Olric | 3320 | WireGuard only |
+| IPFS | 4501 | WireGuard only |
+| IPFS Cluster | 9094 | WireGuard only |
+| SFU Signaling | 30000-30099 | WireGuard only |
+| SFU Media | 20000-29999 | WireGuard only |
+| TURN | 3478, 5349 | Public |
+| Anyone | 9050 | Public |
+
+### Service Dependency Chain
+
+Services on each node must start in a specific order due to hard dependencies:
+
+```mermaid
+graph LR
+ WG["WireGuard"] --> RQ["RQLite"] --> OL["Olric"] --> GW["Gateway"]
+```
+
+The Gateway depends on Olric being fully initialized. Olric depends on RQLite for coordination. RQLite depends on WireGuard for inter-node communication.
+
+## Binaries
+
+The project builds these binaries from `cmd/`:
+
+| Binary | Entry Point | Purpose |
+|--------|-------------|---------|
+| `orama` | `cmd/cli/` | CLI tool (deploy, manage, monitor) |
+| `gateway` | `cmd/gateway/` | API gateway / reverse proxy |
+| `orama-node` | `cmd/node/` | P2P node (RQLite + libp2p) |
+| `sfu` | `cmd/sfu/` | WebRTC Selective Forwarding Unit |
+| `turn` | `cmd/turn/` | TURN relay server |
+| `identity` | `cmd/identity/` | P2P identity key generator |
+| `orama-inspector` | `cmd/inspector/` | SSH-based health inspector |
+
+## Security Architecture
+
+### Service Authentication
+
+All internal services require authentication:
+
+- **RQLite** — HTTP basic auth on all queries and writes
+- **Olric** — Memberlist gossip encrypted with a shared 32-byte key
+- **IPFS Cluster** — TrustedPeers restricted to known peer IDs
+- **Vault** — Session token required for push/pull operations
+- **WebSockets** — Origin header validated against the node's domain
+
+### Token & Key Storage
+
+- **Refresh tokens** stored as SHA-256 hashes
+- **API keys** stored as HMAC-SHA256 hashes (server-side secret)
+- **TURN secrets** encrypted at rest with AES-256-GCM
+- **Build archives** cryptographically signed with rootwallet
+
+### Process Isolation
+
+All services run as a dedicated `orama` user (not root) with systemd hardening (`ProtectSystem=strict`, `NoNewPrivileges=yes`, etc.). On OramaOS, services get additional Linux namespace and seccomp sandboxing.
+
+## OramaOS
+
+For mainnet, devnet, and testnet, nodes run **OramaOS** — a custom minimal Linux image built with Buildroot:
+
+- **No SSH, no shell** — operators cannot access the filesystem or read data
+- **LUKS full-disk encryption** — key split via Shamir's Secret Sharing across peers
+- **Read-only rootfs** — SquashFS with dm-verity integrity verification
+- **A/B partition updates** — signed images applied atomically with automatic rollback
+- **Service sandboxing** — Linux namespaces + seccomp per service
+- **Single root process** — the orama-agent manages boot, WireGuard, services, and updates
+
+Nodes join via `orama node enroll` (not `orama node install`). The enrollment uses a registration code + invite token + wallet verification to push cluster config to the node.
+
+Sandbox clusters remain on Ubuntu for development convenience.
+
+## Ecosystem Components
+
+| Component | Language | Purpose |
+|-----------|----------|---------|
+| Orama Network | Go | Core infrastructure (gateway, node, CLI, SFU, TURN) |
+| OramaOS | Go + Buildroot | Locked-down node OS with agent |
+| Orama Vault | Zig | Zero-knowledge secret storage guardian |
+| Network TS SDK | TypeScript | Client SDK for all services |
+| RootWallet | TypeScript | Hybrid hardware/software wallet (EVM) |
diff --git a/website/src/docs/contributor/code-style.mdx b/website/src/docs/contributor/code-style.mdx
new file mode 100644
index 0000000..e714b27
--- /dev/null
+++ b/website/src/docs/contributor/code-style.mdx
@@ -0,0 +1,117 @@
+# Code Style Guide
+
+Consistent code style makes the codebase easier to read, review, and maintain. This guide covers the conventions, patterns, and requirements for contributing to the Orama ecosystem.
+
+## Go Conventions
+
+The network codebase follows standard Go conventions with a few project-specific rules.
+
+### Formatting
+
+All Go code must be formatted with `gofmt`. This is non-negotiable.
+
+```bash
+# Format all files
+gofmt -w .
+
+# Or use go fmt
+go fmt ./...
+```
+
+### Naming
+
+- **Packages** — Short, lowercase, single-word names. No underscores or camelCase.
+- **Exported functions** — PascalCase, descriptive verbs: `CreateDeployment`, `GetCacheEntry`
+- **Unexported functions** — camelCase: `validateToken`, `buildResponse`
+- **Constants** — PascalCase for exported, camelCase for unexported. No `ALL_CAPS`.
+- **Interfaces** — Named by behavior, not by "I" prefix: `Reader`, `Deployer`, `CacheStore`
+
+### Error Handling
+
+Errors are first-class citizens. Follow these patterns:
+
+```go
+// Always check errors. Never use _ for error returns.
+result, err := doSomething()
+if err != nil {
+ return fmt.Errorf("failed to do something: %w", err)
+}
+
+// Wrap errors with context using %w for unwrapping support
+conn, err := db.Connect(config)
+if err != nil {
+ return fmt.Errorf("connect to database %q: %w", config.Name, err)
+}
+```
+
+**Actionable error messages** — Every error should tell the reader what went wrong and provide enough context to diagnose the issue. Not just `"connection failed"` but `"failed to connect to Olric on 10.0.0.3:3320, verify the service is running"`.
+
+### File Organization
+
+- **One responsibility per file** — A file should do one thing well
+- **Keep files under 300 lines** — If a file grows larger, split it
+- **Group handlers by domain** — `handlers/auth/`, `handlers/storage/`, `handlers/cache/` etc.
+- **No magic values** — Use named constants at the top of the file or in a shared constants package
+
+```go
+// Good: named constants
+const (
+ DefaultCacheTTL = 300 * time.Second
+ MaxDeploymentSize = 100 * 1024 * 1024 // 100 MB
+ HealthCheckTimeout = 10 * time.Second
+)
+```
+
+## TypeScript Conventions
+
+For the SDK, website, and playground:
+
+- **Strict mode** — `strict: true` in tsconfig, no exceptions
+- **Type imports** — Use `import type { Foo }` for type-only imports (required by `verbatimModuleSyntax`)
+- **No unused locals** — All imports and variables must be used
+- **Formatting** — Prettier with project defaults
+- **Naming** — camelCase for variables/functions, PascalCase for types/classes/components
+
+## PR Requirements
+
+All pull requests must:
+
+1. **Pass CI** — All tests pass, linting passes, build succeeds
+2. **Include tests** — Logic changes require unit tests; bug fixes require a regression test
+3. **Be focused** — One concern per PR. Don't mix refactoring with feature work
+4. **Have a clear description** — Explain what changed, why, and how to test it
+
+## Commit Message Format
+
+Write clear, imperative commit messages:
+
+```
+:
+
+
+```
+
+Types: `feat`, `fix`, `refactor`, `test`, `docs`, `chore`
+
+Examples:
+
+```
+feat: add PubSub topic filtering by prefix
+
+fix: prevent Olric client initialization before service is ready
+
+refactor: extract JWT validation into middleware package
+
+test: add coverage for database transaction rollback
+```
+
+Keep the first line under 72 characters. Use the body to explain "why" when the change isn't self-evident.
+
+## Distributed System Rules
+
+When working on the network codebase, follow these rules:
+
+- **Health checks over sleeps** — Never use `time.Sleep()` to wait for a service. Poll the readiness indicator (TCP port, HTTP endpoint, file existence) with a timeout.
+- **Fail fast, fail loud** — If something is wrong, return an error immediately. Never swallow errors or log a warning and continue.
+- **Fix root causes** — Never add fallbacks that mask problems. If something fails, fix why it fails.
+- **Validate at boundaries** — Validate user input and external API responses. Trust internal code.
diff --git a/website/src/docs/contributor/deployment.mdx b/website/src/docs/contributor/deployment.mdx
new file mode 100644
index 0000000..d95b689
--- /dev/null
+++ b/website/src/docs/contributor/deployment.mdx
@@ -0,0 +1,195 @@
+# Deployment Guide for Contributors
+
+How Orama releases are built, tested, and deployed to the network. Understanding this process is important for contributors who need to test changes against live infrastructure or participate in the release cycle.
+
+## Release Process Overview
+
+1. **Feature development** on feature branches
+2. **Code review and merge** to the main branch
+3. **Binary building** — Cross-compile for target architectures
+4. **Rolling deployment** — One node at a time across the environment
+
+## Building Binaries
+
+The `orama build` command cross-compiles all Go binaries into a deployment archive:
+
+```bash
+# Build for Linux amd64 (default, target platform for VPS nodes)
+orama build
+
+# Build for a specific architecture
+orama build --arch arm64
+
+# Custom output path
+orama build --output ./release/orama-v1.0.0.tar.gz
+
+# Verbose output
+orama build --verbose
+```
+
+| Flag | Default | Description |
+|------|---------|-------------|
+| `--arch` | `amd64` | Target architecture (`amd64`, `arm64`) |
+| `--output` | `/tmp/orama--linux-.tar.gz` | Output archive path |
+| `--verbose` | `false` | Verbose output |
+
+The build pipeline:
+1. Cross-compiles all Go binaries for `linux/` (CLI, gateway, node, SFU, TURN, identity)
+2. Bundles third-party dependencies (RQLite, Olric, IPFS, CoreDNS, Caddy)
+3. Includes systemd service templates
+4. Packages everything into a tar.gz archive with a `manifest.json` (checksums)
+
+## Deploying to Nodes
+
+### Push (Upload Only)
+
+Upload the binary archive to nodes without restarting services:
+
+```bash
+# Push to all nodes in an environment
+orama node push --env devnet
+
+# Push to a single node
+orama node push --env devnet --node 1.2.3.4
+
+# Direct upload (no hub fanout)
+orama node push --env devnet --direct
+```
+
+### Rollout (Build + Deploy)
+
+Build and deploy in one step with automatic rolling restart:
+
+```bash
+# Build and deploy to all nodes
+orama node rollout --env devnet
+
+# Skip the build step (use existing archive)
+orama node rollout --env devnet --no-build
+
+# Skip confirmation
+orama node rollout --env devnet --yes
+```
+
+### Upgrade (Restart Only)
+
+When the binary is already on the node, restart services with the new code:
+
+```bash
+# Rolling upgrade of all nodes in an environment
+orama node upgrade --env devnet
+
+# Upgrade a single node
+orama node upgrade --env devnet --node 1.2.3.4
+
+# Also restart services after upgrade
+orama node upgrade --env devnet --restart
+```
+
+## Other Node Management Commands
+
+```bash
+# Diagnose common node issues (8 automated checks)
+orama node doctor
+
+# Generate invite tokens for new nodes to join the cluster
+orama node invite --expiry 24h
+
+# Wipe a node for reinstallation
+orama node clean --env devnet --node 1.2.3.4
+orama node clean --env devnet --nuclear # Also removes shared binaries
+
+# Recover RQLite from a cluster split
+orama node recover-raft --env devnet --leader 1.2.3.4
+
+# Service management (on-node)
+orama node start
+orama node stop
+orama node restart
+orama node status
+```
+
+## Cluster Inspection and Monitoring
+
+Two tools for verifying cluster health:
+
+```bash
+# Deep SSH-based health inspection (runs checks on each node)
+orama inspect --env devnet
+orama inspect --env devnet --subsystem rqlite # Specific subsystem
+orama inspect --env devnet --format json # JSON output
+
+# Real-time cluster monitoring (interactive TUI)
+orama monitor --env devnet
+
+# One-shot reports
+orama monitor cluster --env devnet # Cluster overview
+orama monitor node --env devnet # Per-node health
+orama monitor service --env devnet # Service status
+orama monitor mesh --env devnet # WireGuard mesh
+orama monitor dns --env devnet # DNS health
+orama monitor namespaces --env devnet # Namespace usage
+orama monitor alerts --env devnet # Active alerts
+orama monitor report --env devnet # Full JSON report
+```
+
+## Rolling Upgrade Process
+
+Deploying to the network follows a strict rolling upgrade process to maintain cluster availability:
+
+1. Verify cluster health (all nodes, quorum OK)
+2. Upload new binary to the node
+3. Stop services (reverse dependency order: Gateway -> Olric -> RQLite)
+4. Replace binary
+5. Start services (correct dependency order: WireGuard -> RQLite -> Olric -> Gateway)
+6. Verify node health
+7. Verify cluster health
+8. Proceed to next node
+
+### Deployment Order
+
+1. **Followers first** — Upgrade RQLite follower nodes before the leader
+2. **Leader last** — Upgrading the leader triggers a leader election; do this last
+3. **One at a time** — Never upgrade multiple nodes simultaneously
+
+## Health Verification Between Nodes
+
+After each node upgrade, both node-level and cluster-level health must be confirmed:
+
+```bash
+# Node health
+orama monitor report --env --node
+
+# Cluster health
+orama monitor report --env
+```
+
+Do not proceed to the next node until:
+
+- All services on the upgraded node are `active`
+- RQLite shows `Leader` or `Follower` state
+- Raft log indices are in sync across the cluster
+- WireGuard peers are all connected
+
+## Environment Promotion
+
+Changes flow through environments in this order:
+
+```
+devnet → testnet → production
+```
+
+- **devnet** — First deployment target, used for active development and testing
+- **testnet** — Staging environment, mirrors production configuration
+- **production** — Production (`dbrs.space`), requires extra verification and approval
+
+## CI/CD Pipeline
+
+The CI pipeline runs on every push and PR:
+
+| Stage | What It Does |
+|-------|-------------|
+| Lint | Code style and static analysis (`go vet`, `go fmt`) |
+| Test | Unit tests via `make test` |
+| Build | Compile all 6 binaries for target platforms |
+| E2E | Run against a test environment |
diff --git a/website/src/docs/contributor/dev-setup.mdx b/website/src/docs/contributor/dev-setup.mdx
new file mode 100644
index 0000000..f098f2b
--- /dev/null
+++ b/website/src/docs/contributor/dev-setup.mdx
@@ -0,0 +1,179 @@
+# Development Environment Setup
+
+This guide walks you through setting up a local development environment for contributing to the Orama ecosystem.
+
+## Prerequisites
+
+| Tool | Version | Purpose |
+|------|---------|---------|
+| Go | 1.24+ | Core network services (go.mod requires 1.24.6) |
+| Node.js | 18+ | SDK, website, tooling |
+| pnpm | Latest | Node.js package management |
+| Git | Latest | Version control |
+| Make | Latest | Build automation |
+
+Zig and WireGuard tools are only needed if you're working on the Vault guardian binary or deploying to production nodes — they are not required for general development.
+
+### Installing Prerequisites
+
+```bash
+# macOS (via Homebrew)
+brew install go node pnpm git make
+
+# Ubuntu/Debian
+sudo apt install -y golang-go nodejs npm git make
+npm install -g pnpm
+
+# Verify installations
+go version # must be 1.24+
+node --version
+pnpm --version
+```
+
+## Cloning the Repository
+
+The Orama codebase lives in a single repository that includes the network services, CLI, Go SDK, and TypeScript SDK:
+
+```bash
+git clone https://github.com/DeBrosOfficial/network.git
+cd network
+```
+
+## Building from Source
+
+### Network (Go)
+
+```bash
+# Install dependencies
+go mod download
+
+# Build all binaries (CLI, gateway, node, SFU, TURN, identity)
+make build
+
+# Run tests
+make test
+
+# The main CLI binary is built from cmd/cli/
+# After make build, binaries are in ./bin/
+./bin/orama version
+```
+
+`make build` produces these binaries in `./bin/`:
+
+| Binary | Entry Point | Purpose |
+|--------|-------------|---------|
+| `orama` | `cmd/cli/` | CLI tool for all operations |
+| `gateway` | `cmd/gateway/` | API gateway / reverse proxy |
+| `orama-node` | `cmd/node/` | P2P node (RQLite + libp2p) |
+| `sfu` | `cmd/sfu/` | WebRTC Selective Forwarding Unit |
+| `turn` | `cmd/turn/` | TURN relay server for WebRTC |
+| `identity` | `cmd/identity/` | P2P identity key generator |
+
+### SDK (TypeScript)
+
+The TypeScript SDK is inside the same repo at `sdk/`:
+
+```bash
+cd sdk
+pnpm install
+pnpm build
+pnpm test
+```
+
+## Connecting to Devnet
+
+For testing against a live network, connect to the devnet environment:
+
+```bash
+# Set active environment to devnet (this is the default)
+./bin/orama env use devnet
+
+# Verify current environment
+./bin/orama env current
+
+# Login to the network (opens browser for wallet authentication)
+./bin/orama auth login
+```
+
+Available environments:
+
+| Name | Gateway URL | Description |
+|------|-------------|-------------|
+| `devnet` | `https://orama-devnet.network` | Development (default) |
+| `testnet` | `https://orama-testnet.network` | Staging |
+| `production` | `https://dbrs.space` | Production |
+
+## IDE Setup
+
+### VS Code (Recommended)
+
+Install the following extensions:
+
+- **Go** — Go language support
+- **ESLint** — TypeScript linting
+- **Prettier** — Code formatting
+
+### GoLand / IntelliJ
+
+Import the `network` directory as a Go module project. The Go module configuration is in `go.mod` at the repository root.
+
+## Project Structure
+
+```
+network/
+ cmd/ # Binary entry points
+ cli/ # CLI (orama command)
+ gateway/ # API gateway
+ node/ # P2P node
+ sfu/ # WebRTC SFU
+ turn/ # TURN relay
+ identity/ # Key generator
+ inspector/ # SSH health inspector
+ pkg/ # All Go packages
+ gateway/ # Gateway core + handlers
+ cli/ # CLI command implementations
+ auth/ # Authentication (wallet, JWT)
+ rqlite/ # RQLite ORM layer
+ serverless/ # WASM runtime + host functions
+ config/ # Configuration management
+ anyoneproxy/ # Anyone Protocol integration
+ sdk/ # TypeScript SDK + Go function SDK
+ e2e/ # End-to-end tests
+ systemd/ # Service templates
+ scripts/ # Build and deployment scripts
+ docs/ # Internal documentation
+ Makefile # Build targets
+ go.mod # Go module definition
+```
+
+## Sandbox Clusters
+
+For testing against a full multi-node cluster without production infrastructure, use the sandbox system. Sandboxes create 5-node Hetzner Cloud clusters:
+
+```bash
+# One-time setup (Hetzner API key, domain, SSH key)
+orama sandbox setup
+
+# Create a 5-node ephemeral cluster
+orama sandbox create --name my-test
+
+# List running sandbox clusters
+orama sandbox list
+
+# Check sandbox status
+orama sandbox status --name my-test
+
+# SSH into a sandbox node (1-5)
+orama sandbox ssh 1 --name my-test
+
+# Deploy code to sandbox
+orama sandbox rollout --name my-test
+
+# Destroy when done
+orama sandbox destroy --name my-test
+
+# Nuclear reset (delete all infra and config)
+orama sandbox reset
+```
+
+Sandboxes are disposable — create one for testing, destroy it when done.
diff --git a/website/src/docs/contributor/testing.mdx b/website/src/docs/contributor/testing.mdx
new file mode 100644
index 0000000..56d2132
--- /dev/null
+++ b/website/src/docs/contributor/testing.mdx
@@ -0,0 +1,222 @@
+# Testing Guide
+
+Testing is a critical part of contributing to Orama. All logic changes require tests, and all bug fixes require a test that reproduces the bug before the fix. This guide covers the testing tools, patterns, and CI pipeline.
+
+## Running Tests
+
+### Go (Network)
+
+```bash
+# Run all tests
+make test
+
+# Run tests for a specific package
+go test ./pkg/gateway/...
+
+# Run a specific test
+go test ./pkg/gateway/... -run TestHandleDeployment
+
+# Run with verbose output
+go test -v ./pkg/...
+
+# Run with race detection
+go test -race ./pkg/...
+
+# Run with coverage
+go test -cover ./pkg/...
+go test -coverprofile=coverage.out ./pkg/...
+go tool cover -html=coverage.out
+```
+
+### TypeScript (SDK)
+
+```bash
+cd sdk
+
+# Run all tests
+pnpm test
+
+# Run in watch mode
+pnpm test --watch
+
+# Run with coverage
+pnpm test --coverage
+```
+
+## Test Structure
+
+### Go Test Files
+
+Test files live alongside the code they test, following Go conventions:
+
+```
+pkg/
+ gateway/
+ handler.go # Implementation
+ handler_test.go # Tests for handler.go
+ middleware.go
+ middleware_test.go
+ handlers/
+ auth/
+ auth.go
+ auth_test.go
+ storage/
+ storage.go
+ storage_test.go
+```
+
+### Test Naming
+
+Name tests descriptively using the pattern `Test_`:
+
+```go
+func TestCreateDeployment_ValidInput(t *testing.T) {
+ // Test that a deployment is created successfully with valid input
+}
+
+func TestCreateDeployment_MissingName(t *testing.T) {
+ // Test that an error is returned when the name is missing
+}
+
+func TestCreateDeployment_DuplicateName(t *testing.T) {
+ // Test that a conflict error is returned for duplicate names
+}
+```
+
+### Table-Driven Tests
+
+Use table-driven tests for testing multiple input/output scenarios:
+
+```go
+func TestValidateConfig(t *testing.T) {
+ tests := []struct {
+ name string
+ config Config
+ wantErr bool
+ }{
+ {
+ name: "valid config",
+ config: Config{Name: "app", Env: "devnet"},
+ wantErr: false,
+ },
+ {
+ name: "missing name",
+ config: Config{Env: "devnet"},
+ wantErr: true,
+ },
+ {
+ name: "invalid environment",
+ config: Config{Name: "app", Env: "invalid"},
+ wantErr: true,
+ },
+ }
+
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ err := ValidateConfig(tt.config)
+ if (err != nil) != tt.wantErr {
+ t.Errorf("ValidateConfig() error = %v, wantErr %v", err, tt.wantErr)
+ }
+ })
+ }
+}
+```
+
+## Mocking Patterns
+
+### Interfaces for Dependencies
+
+Design code with interface dependencies to make testing straightforward:
+
+```go
+// Define an interface for the dependency
+type CacheStore interface {
+ Get(key string) ([]byte, error)
+ Set(key string, value []byte, ttl time.Duration) error
+}
+
+// In tests, use a mock implementation
+type mockCache struct {
+ data map[string][]byte
+}
+
+func (m *mockCache) Get(key string) ([]byte, error) {
+ v, ok := m.data[key]
+ if !ok {
+ return nil, ErrNotFound
+ }
+ return v, nil
+}
+
+func (m *mockCache) Set(key string, value []byte, ttl time.Duration) error {
+ m.data[key] = value
+ return nil
+}
+```
+
+### Test Helpers
+
+Create reusable test helpers for common setup patterns:
+
+```go
+func newTestServer(t *testing.T) *httptest.Server {
+ t.Helper()
+ handler := setupRoutes(newMockServices())
+ return httptest.NewServer(handler)
+}
+```
+
+## End-to-End Tests
+
+E2E tests verify that components work together against a real cluster. They are organized by scope:
+
+```bash
+# Run all E2E tests (auto-discovers config)
+make test-e2e
+
+# Quick smoke tests (static deploys, health checks)
+make test-e2e-quick
+
+# Specific scopes
+make test-e2e-deployments # Deployment lifecycle
+make test-e2e-fullstack # Full-stack (frontend + backend + DB)
+make test-e2e-https # HTTPS and external access
+make test-e2e-shared # Shared services (cache, storage, pubsub, auth)
+make test-e2e-cluster # Cluster operations (libp2p, olric, rqlite, namespace)
+make test-e2e-integration # Integration (fullstack, persistence, concurrency)
+
+# Production-only tests (requires ORAMA_GATEWAY_URL env var)
+make test-e2e-production # DNS, HTTPS, cross-node routing
+make test-e2e-prod # All E2E including production-only
+```
+
+E2E tests are slower and require a running cluster (sandbox or real environment). They are run in CI but can be skipped locally if you are only working on unit-tested logic.
+
+## CI/CD Pipeline
+
+Every pull request triggers the CI pipeline, which runs:
+
+1. **Lint** — `go vet` and `go fmt` for Go, ESLint for TypeScript
+2. **Unit tests** — Full test suite via `make test`
+3. **Build** — Verify all binaries compile successfully
+4. **E2E tests** — Run against a test environment
+
+All checks must pass before a PR can be merged. If CI fails, fix the issue locally and push the fix — do not ask to skip checks.
+
+## Sandbox Testing
+
+For full E2E testing against a real multi-node cluster:
+
+```bash
+# Create a 5-node sandbox cluster
+orama sandbox create --name my-test
+
+# Deploy your changes to the sandbox
+orama sandbox rollout --name my-test
+
+# Run E2E tests against the sandbox
+make test-e2e
+
+# Tear down when done
+orama sandbox destroy --name my-test
+```
diff --git a/website/src/docs/contributor/video-tutorials.mdx b/website/src/docs/contributor/video-tutorials.mdx
new file mode 100644
index 0000000..d4f9b48
--- /dev/null
+++ b/website/src/docs/contributor/video-tutorials.mdx
@@ -0,0 +1,127 @@
+# Video Tutorials
+
+Step-by-step video guides for contributing to the Orama Network codebase. New tutorials are added regularly.
+
+---
+
+## Getting Started
+
+
+
+
+
+ Coming Soon
+
+
+
Dev Environment Setup
+
Clone the repo, install Go and dependencies, build all binaries, and run your first test.
+
+
+
+
+
+ Coming Soon
+
+
+
Project Architecture Walkthrough
+
Understand the monorepo layout: cmd/, pkg/, sdk/, e2e/, and how all components connect.
+
+
+
+
+
+---
+
+## Development Workflow
+
+
+
+
+
+ Coming Soon
+
+
+
Writing and Running Tests
+
Unit tests with make test, E2E tests with sandbox clusters, and the full test matrix.
+
+
+
+
+
+ Coming Soon
+
+
+
Sandbox Clusters
+
Create ephemeral 5-node Hetzner clusters for testing. Setup, deploy, SSH, and teardown.
+
+
+
+
+
+ Coming Soon
+
+
+
Rolling Deployments
+
Build, push, and upgrade nodes. Raft-safe rolling restart with health verification.
+
+
+
+
+
+ Coming Soon
+
+
+
Debugging with orama inspect
+
SSH-based cluster health inspection, monitor TUI, and diagnosing node issues.
+
+
+
+
+
+---
+
+## Deep Dives
+
+
+
+
+
+ Coming Soon
+
+
+
Gateway Internals
+
Request lifecycle: auth middleware, routing, rate limiting, and cross-node proxy.
+
+
+
+
+
+ Coming Soon
+
+
+
Adding a New Service
+
End-to-end guide: handler, routes, middleware, SDK client, and E2E tests.
+
+
+
+
+
+ Coming Soon
+
+
+
WASM Function Runtime
+
How wazero executes functions: host bindings, sandbox isolation, and the build pipeline.
+
+
+
+
+
+ Coming Soon
+
+
+
TypeScript SDK Development
+
Contributing to the SDK: project structure, adding a client module, and publishing.
+
+
+
+
diff --git a/website/src/docs/developer/cache.mdx b/website/src/docs/developer/cache.mdx
new file mode 100644
index 0000000..0f559ea
--- /dev/null
+++ b/website/src/docs/developer/cache.mdx
@@ -0,0 +1,300 @@
+# Cache
+
+Distributed caching powered by [Olric](https://github.com/buraksezer/olric) -- an in-memory key-value store designed for distributed systems. Cache data across the network with automatic partitioning, replication, and sub-millisecond access times.
+
+## Overview
+
+Olric distributes cache entries across nodes in the cluster using consistent hashing. Data is automatically partitioned and replicated, so cache lookups are fast and survive individual node failures.
+
+Cache data is organized into **distributed maps** (dmaps). A dmap is a named keyspace -- think of it as a namespace or a bucket. Every cache operation takes the dmap name as its first parameter, followed by the key.
+
+## SDK Setup
+
+```typescript
+import { createClient } from "@debros/network-ts-sdk";
+
+const client = createClient({
+ baseURL: "https://gateway.example.com",
+ apiKey: "ak_your_key:namespace",
+});
+```
+
+## Basic Operations
+
+### Put
+
+Store a value in a distributed map. Values can be any JSON-serializable type.
+
+```typescript
+await client.cache.put("sessions", "user:alice", {
+ role: "admin",
+ loginAt: Date.now(),
+});
+```
+
+### Get
+
+Retrieve a value from a distributed map. Returns `null` on a cache miss -- this is normal behavior, not an error.
+
+```typescript
+const result = await client.cache.get("sessions", "user:alice");
+
+if (result) {
+ console.log(result.value); // { role: "admin", loginAt: 1709000000000 }
+ console.log(result.key); // "user:alice"
+ console.log(result.dmap); // "sessions"
+}
+```
+
+### Delete
+
+Remove a value from a distributed map.
+
+```typescript
+await client.cache.delete("sessions", "user:alice");
+```
+
+## TTL (Time-To-Live)
+
+Set expiration times on cache entries to automatically evict stale data. TTL is specified as a **duration string** -- for example `"1h"`, `"30m"`, `"5s"`, or `"24h"`.
+
+Pass the TTL as the fourth argument to `put`:
+
+```typescript
+// Cache for 1 hour
+await client.cache.put("sessions", "user:alice", { role: "admin" }, "1h");
+
+// Cache for 30 minutes
+await client.cache.put("rate-limits", "ip:203.0.113.1", { count: 1 }, "30m");
+
+// Cache for 5 seconds (useful for hot-path deduplication)
+await client.cache.put("dedup", "request:abc123", true, "5s");
+```
+
+When TTL is omitted, the entry does not expire automatically.
+
+## Batch Operations
+
+### Multi-Get
+
+Fetch multiple keys from the same dmap in a single request. Returns a `Map` where missing keys have a value of `null`.
+
+```typescript
+const results = await client.cache.multiGet("sessions", [
+ "user:alice",
+ "user:bob",
+ "user:charlie",
+]);
+
+for (const [key, value] of results) {
+ if (value !== null) {
+ console.log(`${key} is cached:`, value);
+ } else {
+ console.log(`${key} is a cache miss`);
+ }
+}
+```
+
+### Scan
+
+List keys in a distributed map, optionally filtering with a regex pattern.
+
+```typescript
+// Scan all keys in the dmap
+const all = await client.cache.scan("sessions");
+console.log(all.keys); // ["user:alice", "user:bob", ...]
+console.log(all.count); // 2
+
+// Scan with a regex pattern
+const admins = await client.cache.scan("sessions", "admin:.*");
+console.log(admins.keys); // ["admin:alice", "admin:eve"]
+```
+
+## Health Check
+
+Verify that the cache service is reachable and healthy:
+
+```typescript
+const health = await client.cache.health();
+console.log(health.status); // "ok"
+console.log(health.service); // "cache"
+```
+
+## REST API
+
+All cache operations use POST with a JSON body (except health which is GET).
+
+### Put
+
+```bash
+curl -X POST https://gateway.example.com/v1/cache/put \
+ -H "Authorization: Bearer " \
+ -H "Content-Type: application/json" \
+ -d '{"dmap": "sessions", "key": "user:alice", "value": {"role": "admin"}, "ttl": "1h"}'
+```
+
+### Get
+
+```bash
+curl -X POST https://gateway.example.com/v1/cache/get \
+ -H "Authorization: Bearer " \
+ -H "Content-Type: application/json" \
+ -d '{"dmap": "sessions", "key": "user:alice"}'
+```
+
+### Delete
+
+```bash
+curl -X POST https://gateway.example.com/v1/cache/delete \
+ -H "Authorization: Bearer " \
+ -H "Content-Type: application/json" \
+ -d '{"dmap": "sessions", "key": "user:alice"}'
+```
+
+### Multi-Get
+
+```bash
+curl -X POST https://gateway.example.com/v1/cache/mget \
+ -H "Authorization: Bearer " \
+ -H "Content-Type: application/json" \
+ -d '{"dmap": "sessions", "keys": ["user:alice", "user:bob"]}'
+```
+
+### Scan
+
+```bash
+curl -X POST https://gateway.example.com/v1/cache/scan \
+ -H "Authorization: Bearer " \
+ -H "Content-Type: application/json" \
+ -d '{"dmap": "sessions", "match": "user:.*"}'
+```
+
+### Health
+
+```bash
+curl https://gateway.example.com/v1/cache/health \
+ -H "Authorization: Bearer "
+```
+
+## CLI
+
+There are no dedicated CLI commands for cache operations. Use the SDK or REST API.
+
+## Patterns
+
+### Cache-Aside
+
+The most common caching pattern. Check the cache first; on a miss, fetch from the source and populate the cache.
+
+```typescript
+async function getUser(id: string) {
+ // Check cache first
+ const cached = await client.cache.get("users", `user:${id}`);
+ if (cached) {
+ return cached.value;
+ }
+
+ // Cache miss -- fetch from database
+ const user = await client.db.query(
+ "SELECT * FROM users WHERE id = ?", [id]
+ );
+
+ // Populate cache with a 1-hour TTL
+ await client.cache.put("users", `user:${id}`, user[0], "1h");
+
+ return user[0];
+}
+```
+
+### Write-Through
+
+Update the cache whenever you update the source data, so the cache stays fresh.
+
+```typescript
+async function updateUser(id: string, data: UserData) {
+ // Update the database
+ await client.db.exec(
+ "UPDATE users SET name = ? WHERE id = ?", [data.name, id]
+ );
+
+ // Update the cache
+ await client.cache.put("users", `user:${id}`, data, "1h");
+}
+```
+
+### Session Store
+
+Use a dmap as a lightweight session store with automatic expiration.
+
+```typescript
+async function createSession(userId: string, token: string) {
+ await client.cache.put("sessions", `session:${token}`, {
+ userId,
+ createdAt: Date.now(),
+ }, "24h");
+}
+
+async function validateSession(token: string) {
+ const session = await client.cache.get("sessions", `session:${token}`);
+ return session?.value ?? null;
+}
+
+async function destroySession(token: string) {
+ await client.cache.delete("sessions", `session:${token}`);
+}
+```
+
+## REST API Reference
+
+| Method | Endpoint | Description |
+|--------|----------|-------------|
+| `POST` | `/v1/cache/put` | Store a value. Body: `{dmap, key, value, ttl?}` |
+| `POST` | `/v1/cache/get` | Retrieve a value. Body: `{dmap, key}` |
+| `POST` | `/v1/cache/delete` | Remove a value. Body: `{dmap, key}` |
+| `POST` | `/v1/cache/mget` | Fetch multiple keys. Body: `{dmap, keys}` |
+| `POST` | `/v1/cache/scan` | List keys in a dmap. Body: `{dmap, match?}` |
+| `GET` | `/v1/cache/health` | Check cache service health |
+
+## SDK Method Reference
+
+| Method | Signature | Description |
+|--------|-----------|-------------|
+| `put` | `put(dmap, key, value, ttl?)` | Store a value. TTL is a duration string (`"1h"`, `"30m"`, `"5s"`). |
+| `get` | `get(dmap, key)` | Retrieve a value. Returns `null` on cache miss. |
+| `delete` | `delete(dmap, key)` | Remove a value. |
+| `multiGet` | `multiGet(dmap, keys)` | Fetch multiple keys. Returns `Map`. |
+| `scan` | `scan(dmap, match?)` | List keys in a dmap, optionally filtered by regex. |
+| `health` | `health()` | Check cache service health. |
+
+## Types
+
+```typescript
+interface CacheGetResponse {
+ key: string;
+ value: any;
+ dmap: string;
+}
+
+interface CachePutResponse {
+ status: string;
+ key: string;
+ dmap: string;
+}
+
+interface CacheDeleteResponse {
+ status: string;
+ key: string;
+ dmap: string;
+}
+
+interface CacheScanResponse {
+ keys: string[];
+ count: number;
+ dmap: string;
+}
+
+interface CacheHealthResponse {
+ status: string;
+ service: string;
+}
+```
diff --git a/website/src/docs/developer/cli-reference.mdx b/website/src/docs/developer/cli-reference.mdx
new file mode 100644
index 0000000..5af25e9
--- /dev/null
+++ b/website/src/docs/developer/cli-reference.mdx
@@ -0,0 +1,524 @@
+# CLI Reference
+
+The Orama CLI is the command-line tool for deploying applications, managing databases, running serverless functions, and interacting with the Orama network. This page covers every developer-facing command.
+
+## Installation
+
+The CLI is a Go binary built from source:
+
+```bash
+git clone https://github.com/DeBrosOfficial/network.git
+cd network
+make build
+./bin/orama version
+```
+
+You can also add `./bin` to your `PATH` or copy the binary to `/usr/local/bin`.
+
+## Global Flags
+
+| Flag | Description |
+|------|-------------|
+| `--help` | Show help for any command |
+
+---
+
+## Authentication
+
+Manage wallet-based authentication and credentials. Credentials are stored at `~/.orama/credentials.json`.
+
+```bash
+orama auth
+```
+
+| Subcommand | Description |
+|------------|-------------|
+| `login` | Authenticate with your wallet (opens browser) |
+| `logout` | Clear stored credentials |
+| `whoami` | Show current authentication status |
+| `status` | Show detailed authentication info |
+| `list` | List all stored credentials |
+| `switch` | Switch between stored credentials |
+
+### Login Flags
+
+| Flag | Description |
+|------|-------------|
+| `--wallet <0x...>` | Specify wallet address |
+| `--namespace ` | Target a specific namespace |
+| `--simple` | Use simple auth without signature (dev only) |
+
+### Examples
+
+```bash
+# Authenticate with your wallet
+orama auth login
+
+# Login to a specific namespace
+orama auth login --namespace my-namespace
+
+# Check who you're logged in as
+orama auth whoami
+
+# View detailed auth info (token expiry, environment, etc.)
+orama auth status
+
+# Switch to a different stored credential
+orama auth switch
+
+# Clear credentials and log out
+orama auth logout
+```
+
+---
+
+## Environment
+
+Manage which Orama environment the CLI targets.
+
+```bash
+orama env
+```
+
+| Subcommand | Description |
+|------------|-------------|
+| `list` | List all available environments |
+| `current` | Show the active environment |
+| `use ` | Switch to a different environment (alias: `switch`) |
+| `add [description]` | Add a custom environment |
+| `remove ` | Remove an environment |
+
+Default environments:
+
+| Name | Gateway URL | Description |
+|------|-------------|-------------|
+| `devnet` | `https://orama-devnet.network` | Development (default) |
+| `testnet` | `https://orama-testnet.network` | Staging |
+| `production` | `https://dbrs.space` | Production |
+
+### Examples
+
+```bash
+# See all environments
+orama env list
+
+# Check which environment is active
+orama env current
+
+# Switch to testnet
+orama env use testnet
+
+# Add a custom environment pointing to a local gateway
+orama env add local http://localhost:8080 "Local development"
+
+# Remove a custom environment
+orama env remove local
+```
+
+---
+
+## Deploy
+
+Deploy applications to the Orama network. Each deployment type has its own subcommand.
+
+```bash
+orama deploy --name [flags]
+```
+
+### Deployment Types
+
+#### Static Sites
+
+```bash
+orama deploy static --name [flags]
+```
+
+Deploy a directory of static files (HTML, CSS, JS, images).
+
+#### Next.js Applications
+
+```bash
+orama deploy nextjs --name [flags]
+```
+
+Deploy a Next.js application. Supports both static export and server-side rendering.
+
+#### Go Applications
+
+```bash
+orama deploy go --name [flags]
+```
+
+Deploy a compiled Go application.
+
+#### Node.js Applications
+
+```bash
+orama deploy nodejs --name [flags]
+```
+
+Deploy a Node.js application.
+
+### Deploy Flags
+
+| Flag | Type | Default | Description |
+|------|------|---------|-------------|
+| `--name ` | string | required | Application name |
+| `--subdomain ` | string | — | Custom subdomain for the deployment |
+| `--update` | boolean | `false` | Update an existing deployment instead of creating new |
+| `--ssr` | boolean | `false` | Enable server-side rendering (Next.js only) |
+
+### Examples
+
+```bash
+# Deploy a static site
+orama deploy static ./dist --name my-website
+
+# Deploy a static site with a custom subdomain
+orama deploy static ./build --name my-site --subdomain my-site
+
+# Deploy a Next.js app with SSR
+orama deploy nextjs ./my-next-app --name my-next-app --ssr
+
+# Update an existing deployment
+orama deploy static ./dist --name my-website --update
+
+# Deploy a Go application
+orama deploy go ./my-go-app --name my-api
+
+# Deploy a Node.js application
+orama deploy nodejs ./my-node-app --name my-service
+```
+
+---
+
+## App Management
+
+Manage deployed applications: inspect, delete, rollback, view logs, and check resource usage. Also accessible as `orama apps`.
+
+```bash
+orama app
+```
+
+| Subcommand | Description |
+|------------|-------------|
+| `list` | List all your deployments |
+| `get ` | Get details about a specific deployment |
+| `delete ` | Delete a deployment (prompts for confirmation) |
+| `rollback --version ` | Rollback to a previous version |
+| `logs ` | Stream deployment logs |
+| `stats ` | Show resource usage (CPU, RAM, disk) |
+
+### App Logs Flags
+
+| Flag | Type | Default | Description |
+|------|------|---------|-------------|
+| `-f`, `--follow` | boolean | `false` | Stream logs in real-time |
+| `-n`, `--lines ` | integer | `100` | Number of log lines to show |
+
+### Examples
+
+```bash
+# List all deployments
+orama app list
+
+# Get details about a specific app
+orama app get my-website
+
+# View the last 50 log lines
+orama app logs my-website --lines 50
+
+# Stream logs in real-time
+orama app logs my-website --follow
+
+# Check resource usage
+orama app stats my-website
+
+# Rollback to version 3
+orama app rollback my-website --version 3
+
+# Delete an app (will prompt for confirmation)
+orama app delete my-website
+```
+
+---
+
+## Database
+
+Create and manage per-namespace SQLite databases.
+
+```bash
+orama db
+```
+
+| Subcommand | Description |
+|------------|-------------|
+| `create ` | Create a new SQLite database |
+| `list` | List all databases |
+| `query ""` | Execute a SQL query |
+| `backup ` | Backup database to IPFS |
+| `backups ` | List available backups |
+
+### Examples
+
+```bash
+# Create a new database
+orama db create my-database
+
+# List all databases
+orama db list
+
+# Execute a SQL query
+orama db query my-database "CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, email TEXT)"
+
+# Insert data
+orama db query my-database "INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com')"
+
+# Query data
+orama db query my-database "SELECT * FROM users"
+
+# Backup database to IPFS
+orama db backup my-database
+
+# List all backups
+orama db backups my-database
+```
+
+---
+
+## Functions
+
+Create, build, deploy, and manage serverless WebAssembly (WASM) functions.
+
+```bash
+orama function
+```
+
+| Subcommand | Description |
+|------------|-------------|
+| `init ` | Initialize a new function project |
+| `build [directory]` | Build the function into a WASM binary |
+| `deploy [directory]` | Deploy the built function to the network |
+| `invoke ` | Invoke a deployed function |
+| `list` | List all deployed functions |
+| `get ` | Get details about a specific function |
+| `delete ` | Delete a function |
+| `logs ` | Get execution logs |
+| `versions ` | Show version history |
+
+### Function Flags
+
+| Flag | Command | Default | Description |
+|------|---------|---------|-------------|
+| `--data ` | `invoke` | `"{}"` | JSON payload to pass to the function |
+| `--limit ` | `logs` | `50` | Number of log entries to show |
+| `-f`, `--force` | `delete` | `false` | Skip confirmation prompt |
+
+### Function Secrets
+
+Manage encrypted secrets (AES-256-GCM) accessible from within functions:
+
+```bash
+orama function secrets
+```
+
+| Subcommand | Description |
+|------------|-------------|
+| `set [value]` | Set a secret (or use `--from-file`) |
+| `list` | List all secret names (values are never shown) |
+| `delete ` | Delete a secret (`-f` to skip confirmation) |
+
+```bash
+# Set a secret value directly
+orama function secrets set MY_API_KEY sk-abc123
+
+# Set a secret from a file
+orama function secrets set TLS_CERT --from-file ./cert.pem
+
+# List all secrets
+orama function secrets list
+
+# Delete a secret
+orama function secrets delete MY_API_KEY
+```
+
+### Function Triggers
+
+Configure PubSub triggers that invoke functions when messages arrive on a topic:
+
+```bash
+orama function triggers
+```
+
+| Subcommand | Description |
+|------------|-------------|
+| `add --topic ` | Add a PubSub trigger |
+| `list ` | List triggers for a function |
+| `delete ` | Delete a trigger |
+
+```bash
+# Add a PubSub trigger
+orama function triggers add my-function --topic user-events
+
+# List triggers
+orama function triggers list my-function
+
+# Delete a trigger
+orama function triggers delete my-function trigger-abc123
+```
+
+### Examples
+
+```bash
+# Initialize a new function project
+orama function init my-function
+
+# Build the WASM binary (from current directory or specified directory)
+orama function build
+orama function build ./my-function
+
+# Deploy to the network (auto-builds if no .wasm exists)
+orama function deploy
+orama function deploy ./my-function
+
+# Invoke a function with data
+orama function invoke my-function --data '{"key": "value"}'
+
+# Invoke a function without data (sends empty JSON object)
+orama function invoke my-function
+
+# List all functions
+orama function list
+
+# Get function details
+orama function get my-function
+
+# View execution logs
+orama function logs my-function
+orama function logs my-function --limit 100
+
+# Check version history
+orama function versions my-function
+
+# Delete a function (with confirmation)
+orama function delete my-function
+orama function delete my-function --force
+```
+
+---
+
+## Namespace
+
+Manage namespaces and their features.
+
+```bash
+orama namespace
+```
+
+The `ns` alias is also available: `orama ns `.
+
+| Subcommand | Description |
+|------------|-------------|
+| `list` | List all namespaces (alias: `ls`) |
+| `delete` | Delete a namespace |
+| `repair ` | Repair an under-provisioned namespace |
+| `enable --namespace ` | Enable a feature on a namespace |
+| `disable --namespace ` | Disable a feature on a namespace |
+| `webrtc-status --namespace ` | Check WebRTC status for a namespace |
+
+### Namespace Delete Flags
+
+| Flag | Type | Default | Description |
+|------|------|---------|-------------|
+| `--force` | boolean | `false` | Skip confirmation prompt |
+
+### Examples
+
+```bash
+# List all namespaces
+orama namespace list
+orama ns ls
+
+# Delete a namespace (prompts for confirmation)
+orama namespace delete
+
+# Force delete without confirmation
+orama namespace delete --force
+
+# Repair an under-provisioned namespace
+orama namespace repair my-namespace
+
+# Enable WebRTC
+orama namespace enable webrtc --namespace my-namespace
+
+# Disable WebRTC
+orama namespace disable webrtc --namespace my-namespace
+
+# Check WebRTC status
+orama namespace webrtc-status --namespace my-namespace
+```
+
+---
+
+## Sandbox
+
+Spin up ephemeral test clusters for development and testing. Sandbox clusters run on Hetzner Cloud and provide a fully functional 5-node Orama environment.
+
+```bash
+orama sandbox
+```
+
+| Subcommand | Description |
+|------------|-------------|
+| `setup` | Interactive setup (configure Hetzner API credentials) |
+| `create` | Create a new 5-node sandbox cluster |
+| `destroy` | Tear down a sandbox cluster |
+| `list` | List all sandbox clusters |
+| `status` | Show cluster health report |
+| `rollout` | Build, push, and upgrade all nodes |
+| `ssh ` | SSH into a specific node (1-5) |
+| `reset` | Delete all sandbox infrastructure and config to start fresh |
+
+### Sandbox Flags
+
+| Flag | Commands | Default | Description |
+|------|----------|---------|-------------|
+| `--name ` | `create`, `destroy`, `status`, `rollout`, `ssh` | — | Target a specific sandbox cluster by name |
+| `--force` | `destroy` | `false` | Skip confirmation on destroy |
+
+### Examples
+
+```bash
+# One-time setup (configures Hetzner credentials)
+orama sandbox setup
+
+# Create a new sandbox cluster
+orama sandbox create
+orama sandbox create --name my-test-cluster
+
+# Check cluster health
+orama sandbox status
+orama sandbox status --name my-test-cluster
+
+# Build, push, and upgrade all nodes
+orama sandbox rollout
+orama sandbox rollout --name my-test-cluster
+
+# SSH into node 2
+orama sandbox ssh 2
+orama sandbox ssh 3 --name my-test-cluster
+
+# List all sandbox clusters
+orama sandbox list
+
+# Tear down a cluster
+orama sandbox destroy
+orama sandbox destroy --name my-test-cluster --force
+
+# Nuclear reset (delete all Hetzner infra and local config)
+orama sandbox reset
+```
+
+---
+
+Run `orama --help` or `orama --help` for the latest available commands and flags.
diff --git a/website/src/docs/developer/databases.mdx b/website/src/docs/developer/databases.mdx
new file mode 100644
index 0000000..767629c
--- /dev/null
+++ b/website/src/docs/developer/databases.mdx
@@ -0,0 +1,359 @@
+# Databases
+
+Orama provides two database systems for your applications: **per-namespace SQLite databases** for isolated, node-local storage, and a **distributed RQLite ORM** for replicated relational data. Both are accessible via the CLI, SDK, and REST API.
+
+## SQLite Databases
+
+Per-namespace isolated SQLite databases stored on the node's local filesystem. Each database is created on a specific node (the "home node") and queries are routed to that node. Databases use WAL mode for concurrent read/write access.
+
+### Creating a Database
+
+#### CLI
+
+```bash
+orama db create my-database
+```
+
+#### REST API
+
+```bash
+curl -X POST https://gateway.example.com/v1/db/sqlite/create \
+ -H "Authorization: Bearer " \
+ -H "Content-Type: application/json" \
+ -d '{"database_name": "my-database"}'
+```
+
+Database names must contain only alphanumeric characters, underscores, and hyphens (max 64 characters).
+
+### Querying a Database
+
+The SQLite endpoint accepts any SQL statement. It automatically detects whether a query is a read (SELECT) or write (INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, TRUNCATE, REPLACE) and returns the appropriate response format.
+
+#### CLI
+
+```bash
+# Read query
+orama db query my-database "SELECT * FROM users"
+
+# Write query
+orama db query my-database "INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com')"
+
+# DDL query
+orama db query my-database "CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, email TEXT)"
+```
+
+#### REST API
+
+```bash
+curl -X POST https://gateway.example.com/v1/db/sqlite/query \
+ -H "Authorization: Bearer " \
+ -H "Content-Type: application/json" \
+ -d '{
+ "database_name": "my-database",
+ "query": "SELECT * FROM users WHERE email = ?",
+ "params": ["alice@example.com"]
+ }'
+```
+
+**Read response:**
+
+```json
+{
+ "columns": ["id", "name", "email"],
+ "rows": [[1, "Alice", "alice@example.com"]]
+}
+```
+
+**Write response:**
+
+```json
+{
+ "rows_affected": 1,
+ "last_insert_id": 1
+}
+```
+
+### Listing Databases
+
+#### CLI
+
+```bash
+orama db list
+```
+
+Outputs a table with columns: NAME, SIZE, BACKUP CID, CREATED.
+
+#### REST API
+
+```bash
+curl https://gateway.example.com/v1/db/sqlite/list \
+ -H "Authorization: Bearer "
+```
+
+### Backups
+
+Databases can be backed up to IPFS for disaster recovery. Backups are content-addressed and immutable.
+
+#### CLI
+
+```bash
+# Create a backup
+orama db backup my-database
+
+# List all backups for a database
+orama db backups my-database
+```
+
+#### REST API
+
+```bash
+# Create a backup
+curl -X POST https://gateway.example.com/v1/db/sqlite/backup \
+ -H "Authorization: Bearer " \
+ -H "Content-Type: application/json" \
+ -d '{"database_name": "my-database"}'
+
+# List backups
+curl "https://gateway.example.com/v1/db/sqlite/backups?database_name=my-database" \
+ -H "Authorization: Bearer "
+```
+
+### SQLite CLI Reference
+
+| Command | Description |
+|---------|-------------|
+| `orama db create ` | Create a new SQLite database |
+| `orama db query ` | Execute a SQL query |
+| `orama db list` | List all databases |
+| `orama db backup ` | Backup database to IPFS |
+| `orama db backups ` | List backups for a database |
+
+### SQLite REST API Reference
+
+| Method | Endpoint | Description |
+|--------|----------|-------------|
+| `POST` | `/v1/db/sqlite/create` | Create a new database |
+| `POST` | `/v1/db/sqlite/query` | Execute a SQL query |
+| `GET` | `/v1/db/sqlite/list` | List all databases |
+| `POST` | `/v1/db/sqlite/backup` | Backup database to IPFS |
+| `GET` | `/v1/db/sqlite/backups` | List backups for a database |
+
+---
+
+## RQLite ORM
+
+The distributed RQLite database is the cluster-wide database powering Orama's internal state. It is also exposed to applications through an ORM-style HTTP gateway and the TypeScript SDK. RQLite uses the Raft consensus protocol for replication -- writes go through the elected leader and are replicated to followers.
+
+The RQLite ORM supports raw SQL (`exec`/`query`), a fluent query builder, a repository pattern, transactions, and schema management.
+
+### SDK Setup
+
+```typescript
+import { createClient } from "@debros/network-ts-sdk";
+
+const client = createClient({
+ baseURL: "https://gateway.example.com",
+ apiKey: "ak_your_key:namespace",
+});
+```
+
+### Creating Tables
+
+```typescript
+await client.db.createTable(
+ "CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, email TEXT)"
+);
+```
+
+### Writes with `exec`
+
+Use `exec` for INSERT, UPDATE, DELETE, and DDL statements:
+
+```typescript
+const result = await client.db.exec(
+ "INSERT INTO users (name, email) VALUES (?, ?)",
+ ["Alice", "alice@example.com"]
+);
+
+console.log(result.rows_affected);
+console.log(result.last_insert_id);
+```
+
+### Reads with `query`
+
+Use `query` for SELECT statements:
+
+```typescript
+const users = await client.db.query(
+ "SELECT * FROM users WHERE email = ?",
+ ["alice@example.com"]
+);
+```
+
+### Find
+
+Map-based criteria search without writing raw SQL:
+
+```typescript
+// Find multiple records
+const users = await client.db.find("users", { active: 1 });
+
+// Find a single record (returns null if not found)
+const user = await client.db.findOne("users", { email: "alice@example.com" });
+```
+
+`find` supports options for ordering, grouping, pagination, and joins:
+
+```typescript
+const users = await client.db.find(
+ "users",
+ { active: 1 },
+ { order_by: ["name ASC"], limit: 10, offset: 0 }
+);
+```
+
+### Transactions
+
+Group multiple operations into a sequence. Each statement specifies its `kind` (`exec` or `query`) along with the SQL and arguments:
+
+```typescript
+const results = await client.db.transaction([
+ {
+ kind: "exec",
+ sql: "INSERT INTO logs (msg) VALUES (?)",
+ args: ["Event A"],
+ },
+ {
+ kind: "query",
+ sql: "SELECT COUNT(*) AS count FROM logs",
+ args: [],
+ },
+]);
+```
+
+### QueryBuilder
+
+The SDK includes a fluent query builder for constructing SELECT queries:
+
+```typescript
+const activeUsers = await client.db
+ .createQueryBuilder("users")
+ .select("id", "name", "email")
+ .where("active = ?", [1])
+ .andWhere("age > ?", [18])
+ .orderBy("name DESC")
+ .limit(10)
+ .offset(0)
+ .getMany();
+
+const singleUser = await client.db
+ .createQueryBuilder("users")
+ .where("id = ?", [1])
+ .getOne();
+
+const count = await client.db
+ .createQueryBuilder("users")
+ .where("active = ?", [1])
+ .count();
+```
+
+The query builder supports:
+
+| Method | Description |
+|--------|-------------|
+| `select(...columns)` | Specify columns to select |
+| `where(expr, args?)` | Add a WHERE clause (AND) |
+| `andWhere(expr, args?)` | Add an AND WHERE clause |
+| `orWhere(expr, args?)` | Add an OR WHERE clause |
+| `innerJoin(table, on)` | Add an INNER JOIN |
+| `leftJoin(table, on)` | Add a LEFT JOIN |
+| `rightJoin(table, on)` | Add a RIGHT JOIN |
+| `groupBy(...columns)` | Group results |
+| `orderBy(...columns)` | Order results (e.g., `"name DESC"`) |
+| `limit(n)` | Limit result count |
+| `offset(n)` | Skip first N results |
+| `getMany()` | Execute and return all matching rows |
+| `getOne()` | Execute and return the first matching row (or null) |
+| `count()` | Execute and return the count of matching rows |
+
+### Repository Pattern
+
+For entity-oriented CRUD operations:
+
+```typescript
+interface User {
+ id?: number;
+ name: string;
+ email: string;
+}
+
+const repo = client.db.repository("users");
+
+// Find multiple records
+const users = await repo.find({ active: 1 });
+
+// Find a single record (returns null if not found)
+const user = await repo.findOne({ email: "alice@example.com" });
+
+// Save a record (INSERT if no primary key, UPDATE if primary key exists)
+await repo.save({ name: "Bob", email: "bob@example.com" });
+
+// Remove a record (requires primary key)
+await repo.remove({ id: 1 });
+```
+
+By default, the primary key is `"id"`. You can specify a different primary key:
+
+```typescript
+const repo = client.db.repository("sessions", "session_id");
+```
+
+### Schema Management
+
+```typescript
+// Get the full schema for all tables and views
+const schema = await client.db.getSchema();
+
+// Drop a table
+await client.db.dropTable("old_table");
+```
+
+### RQLite ORM REST API Reference
+
+All endpoints are under `/v1/rqlite` and accept POST with JSON body (except `schema` which is GET).
+
+| Method | Endpoint | Description |
+|--------|----------|-------------|
+| `POST` | `/v1/rqlite/query` | Execute a SELECT query. Body: `{sql, args}` |
+| `POST` | `/v1/rqlite/exec` | Execute a write/DDL statement. Body: `{sql, args}` |
+| `POST` | `/v1/rqlite/find` | Find rows by criteria. Body: `{table, criteria, options?}` |
+| `POST` | `/v1/rqlite/find-one` | Find one row by criteria. Body: `{table, criteria}` |
+| `POST` | `/v1/rqlite/select` | Fluent SELECT builder. Body: `{table, select?, where?, joins?, order_by?, group_by?, limit?, offset?, one?}` |
+| `POST` | `/v1/rqlite/transaction` | Execute multiple ops atomically. Body: `{ops: [{kind, sql, args}], return_results?}` |
+| `GET` | `/v1/rqlite/schema` | Get database schema (tables, views, CREATE SQL) |
+| `POST` | `/v1/rqlite/create-table` | Create a table. Body: `{schema: "CREATE TABLE ..."}` |
+| `POST` | `/v1/rqlite/drop-table` | Drop a table. Body: `{table: "name"}` |
+
+### RQLite Native Backup/Restore
+
+For full cluster-level backup and restore of the RQLite database:
+
+| Method | Endpoint | Description |
+|--------|----------|-------------|
+| `GET` | `/v1/rqlite/export` | Export a raw RQLite backup |
+| `POST` | `/v1/rqlite/import` | Import a RQLite backup |
+
+### SDK Method Reference
+
+| Method | Signature | Description |
+|--------|-----------|-------------|
+| `exec` | `exec(sql, args?)` | Execute a write/DDL SQL statement |
+| `query` | `query(sql, args?)` | Execute a SELECT query |
+| `find` | `find(table, criteria?, options?)` | Find rows by criteria map |
+| `findOne` | `findOne(table, criteria)` | Find a single row by criteria |
+| `createQueryBuilder` | `createQueryBuilder(table)` | Create a fluent query builder |
+| `repository` | `repository(table, primaryKey?)` | Create an entity repository |
+| `transaction` | `transaction(ops, returnResults?)` | Execute multiple operations |
+| `createTable` | `createTable(schema)` | Create a table from DDL SQL |
+| `dropTable` | `dropTable(table)` | Drop a table |
+| `getSchema` | `getSchema()` | Get the database schema |
diff --git a/website/src/docs/developer/deployments.mdx b/website/src/docs/developer/deployments.mdx
new file mode 100644
index 0000000..ef37ca1
--- /dev/null
+++ b/website/src/docs/developer/deployments.mdx
@@ -0,0 +1,442 @@
+# Deployments
+
+Deploy applications to the Orama decentralized network. The CLI supports four deployment types: static sites, Next.js SSR, Go backends, and Node.js backends. Each deployment is distributed across nodes, served via Caddy, and assigned a domain automatically.
+
+## Deployment Types
+
+| Type | Command | Use Case |
+|------|---------|----------|
+| **Static** | `orama deploy static` | React, Vue, Svelte, any pre-built SPA or static site |
+| **Next.js** | `orama deploy nextjs` | Server-rendered Next.js with `output: 'standalone'` |
+| **Go** | `orama deploy go` | Go binaries with HTTP server |
+| **Node.js** | `orama deploy nodejs` | Express, Fastify, any Node.js HTTP server |
+
+Static sites are uploaded to IPFS and served via Caddy. Server-side deployments (Next.js, Go, Node.js) run as managed processes on the node.
+
+### Deploy Flags
+
+All deploy commands share these flags:
+
+| Flag | Required | Description |
+|------|----------|-------------|
+| `--name` | Yes | Deployment name. Used in the domain: `-.` |
+| `--subdomain` | No | Custom subdomain override (default: uses `--name`) |
+| `--update` | No | Update an existing deployment instead of creating a new one |
+
+Next.js has one additional flag:
+
+| Flag | Required | Description |
+|------|----------|-------------|
+| `--ssr` | No | Deploy with server-side rendering (standalone mode) |
+
+---
+
+## Static Sites
+
+For React, Vue, Svelte, or any framework that compiles to static HTML/JS/CSS. Build your project first, then deploy the output directory.
+
+**React (Vite)**
+
+```bash
+npm run build
+orama deploy static ./dist --name my-app
+```
+
+**Vue**
+
+```bash
+npm run build
+orama deploy static ./dist --name my-vue-app
+```
+
+**Plain HTML**
+
+```bash
+orama deploy static ./public --name my-site
+```
+
+The CLI tarballs the directory, uploads it to IPFS, and configures Caddy to serve it. SPA routing (history mode) is handled automatically — all paths resolve to `index.html`.
+
+### Example: React + Vite
+
+```bash
+npx create-vite my-app --template react-ts
+cd my-app
+npm install
+npm run build
+orama deploy static ./dist --name my-app
+```
+
+Your app is live at a URL like `my-app-f3o4if.orama-devnet.network`.
+
+To update an existing deployment:
+
+```bash
+npm run build
+orama deploy static ./dist --name my-app --update
+```
+
+---
+
+## Next.js SSR
+
+Next.js deployments require standalone output mode. The CLI uploads the `.next/standalone` directory and runs the Next.js server process on the node.
+
+### Configuration
+
+Set `output: 'standalone'` in `next.config.js`:
+
+```javascript
+/** @type {import('next').NextConfig} */
+const nextConfig = {
+ output: 'standalone',
+};
+
+module.exports = nextConfig;
+```
+
+This tells Next.js to bundle everything into a self-contained directory that can run without `node_modules`.
+
+### Deploy
+
+```bash
+npm run build
+orama deploy nextjs . --name my-nextjs --ssr
+```
+
+The `--ssr` flag tells the CLI to look for the standalone output in `.next/standalone` and deploy it as a server process. The process runs on the node and Caddy reverse-proxies requests to it.
+
+Update an existing Next.js deployment:
+
+```bash
+npm run build
+orama deploy nextjs . --name my-nextjs --ssr --update
+```
+
+### Requirements
+
+- `output: 'standalone'` in `next.config.js` (mandatory)
+- The `--ssr` flag on the deploy command
+- A `/health` endpoint or Next.js API route that returns 200
+
+---
+
+## Go Backends
+
+Deploy compiled Go binaries. The binary must implement an HTTP server that listens on the port specified by the `PORT` environment variable and exposes a `/health` endpoint.
+
+### Requirements
+
+- Binary must listen on `PORT` env var (the node assigns the port)
+- Must implement `GET /health` returning HTTP 200
+- Name the binary `app` for auto-detection, or specify the path explicitly
+
+### Example
+
+```go
+package main
+
+import (
+ "fmt"
+ "log"
+ "net/http"
+ "os"
+)
+
+func main() {
+ port := os.Getenv("PORT")
+ if port == "" {
+ port = "8080"
+ }
+
+ http.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {
+ w.WriteHeader(http.StatusOK)
+ fmt.Fprint(w, "ok")
+ })
+
+ http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
+ fmt.Fprint(w, "Hello from Orama Network")
+ })
+
+ log.Printf("listening on :%s", port)
+ log.Fatal(http.ListenAndServe(":"+port, nil))
+}
+```
+
+Build and deploy:
+
+```bash
+GOOS=linux GOARCH=amd64 go build -o app .
+orama deploy go ./app --name my-api
+```
+
+Cross-compile for Linux/amd64 — Orama nodes run Linux.
+
+---
+
+## Node.js Backends
+
+Deploy Node.js applications. The project must have a `start` script in `package.json` and a `/health` endpoint.
+
+### Requirements
+
+- `package.json` with a `start` script
+- Must listen on `PORT` env var
+- Must implement `GET /health` returning HTTP 200
+
+### Example
+
+```json
+{
+ "name": "my-api",
+ "scripts": {
+ "start": "node server.js"
+ },
+ "dependencies": {
+ "express": "^4.18.0"
+ }
+}
+```
+
+```javascript
+const express = require("express");
+const app = express();
+const port = process.env.PORT || 3000;
+
+app.get("/health", (req, res) => res.send("ok"));
+
+app.get("/api/items", (req, res) => {
+ res.json([{ id: 1, name: "Item 1" }]);
+});
+
+app.listen(port, () => {
+ console.log(`listening on :${port}`);
+});
+```
+
+Deploy:
+
+```bash
+orama deploy nodejs . --name my-api
+```
+
+The CLI uploads the project directory and runs `npm start` on the node.
+
+---
+
+## Domains and Routing
+
+Every deployment is assigned a domain automatically:
+
+```
+-.
+```
+
+For example, deploying `my-app` on devnet:
+
+```
+my-app-f3o4if.orama-devnet.network
+```
+
+The random suffix ensures uniqueness. You can also specify a custom subdomain with `--subdomain`.
+
+### Cross-Node Routing
+
+The Orama gateway runs on every node. When a request arrives at a node that doesn't host the target app, the gateway proxies the request to the correct node transparently. From the client's perspective, any node can serve any app.
+
+```mermaid
+graph LR
+ C["Client"] --> A["Node A (gateway)"]
+ A -->|"app is on Node C"| P["proxy over WireGuard"]
+ P --> N["Node C"]
+ N -->|"response"| A
+ A -->|"response"| C
+```
+
+This means DNS can round-robin across all nodes. The gateway mesh handles routing internally over the WireGuard overlay network.
+
+---
+
+## Deployment Lifecycle
+
+### List Deployments
+
+```bash
+orama app list
+```
+
+### Get Deployment Details
+
+```bash
+orama app get my-app
+```
+
+Returns status, version, assigned node, domain, and resource usage.
+
+### Logs
+
+```bash
+# Tail logs in real-time
+orama app logs my-app --follow
+
+# View recent logs
+orama app logs my-app
+```
+
+### Rollback
+
+Every deploy creates a new version. Rollback to any previous version:
+
+```bash
+# Rollback to version 1
+orama app rollback my-app --version 1
+```
+
+The previous version's artifacts are retained on IPFS (static) or in the deployment store (server-side), so rollbacks are near-instant.
+
+### Delete
+
+```bash
+orama app delete my-app
+```
+
+Removes the deployment, frees the domain, and cleans up resources on the node.
+
+---
+
+## Environment Variables
+
+Server-side deployments (Next.js, Go, Node.js) receive the following environment variables automatically:
+
+| Variable | Description |
+|----------|-------------|
+| `PORT` | Port the app must listen on. Assigned by the node. |
+| `NODE_ENV` | Set to `production` for Node.js and Next.js deployments. |
+| `ORAMA_APP_NAME` | The deployment name. |
+| `ORAMA_NAMESPACE` | Your namespace. |
+
+---
+
+## SQLite Databases
+
+Orama provides per-namespace SQLite databases. Use them alongside your deployments for persistent storage.
+
+```bash
+# Create a database
+orama db create my-database
+
+# Run queries
+orama db query my-database "CREATE TABLE items (id INTEGER PRIMARY KEY, name TEXT)"
+orama db query my-database "INSERT INTO items (name) VALUES ('Widget')"
+orama db query my-database "SELECT * FROM items"
+
+# Backup
+orama db backup my-database
+```
+
+See [Databases](/docs/developer/databases) for full documentation.
+
+---
+
+## Full-Stack Example: React + Go + SQLite
+
+A complete example: React frontend, Go API, and a SQLite database.
+
+### 1. Create the Database
+
+```bash
+orama db create todo-db
+orama db query todo-db "CREATE TABLE todos (id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL, done BOOLEAN DEFAULT 0)"
+```
+
+### 2. Deploy the Go API
+
+```go
+package main
+
+import (
+ "encoding/json"
+ "fmt"
+ "log"
+ "net/http"
+ "os"
+)
+
+type Todo struct {
+ ID int `json:"id"`
+ Title string `json:"title"`
+ Done bool `json:"done"`
+}
+
+func main() {
+ port := os.Getenv("PORT")
+ if port == "" {
+ port = "8080"
+ }
+
+ http.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {
+ w.WriteHeader(http.StatusOK)
+ })
+
+ http.HandleFunc("/api/todos", func(w http.ResponseWriter, r *http.Request) {
+ w.Header().Set("Content-Type", "application/json")
+ todos := []Todo{
+ {ID: 1, Title: "Deploy to Orama", Done: true},
+ }
+ json.NewEncoder(w).Encode(todos)
+ })
+
+ log.Printf("listening on :%s", port)
+ log.Fatal(http.ListenAndServe(":"+port, nil))
+}
+```
+
+```bash
+GOOS=linux GOARCH=amd64 go build -o app .
+orama deploy go ./app --name todo-api
+```
+
+### 3. Deploy the React Frontend
+
+Configure the API URL to point at your Go deployment:
+
+```typescript
+const API_URL = "https://todo-api-k8x2mq.orama-devnet.network"; // URL from orama app get
+
+async function fetchTodos() {
+ const res = await fetch(`${API_URL}/api/todos`);
+ return res.json();
+}
+```
+
+```bash
+npm run build
+orama deploy static ./dist --name todo-app
+```
+
+### 4. Verify
+
+```bash
+orama app list
+orama app get todo-api
+orama app get todo-app
+orama app logs todo-api --follow
+```
+
+Your full-stack app is live. Check the URLs with `orama app get todo-api` and `orama app get todo-app`.
+
+---
+
+## Programmatic Deployments
+
+For CI/CD pipelines, use the CLI directly. Deployments are managed via the REST API:
+
+```bash
+# In CI/CD, set credentials via environment variable
+export ORAMA_TOKEN=your-api-key
+
+# Deploy
+orama deploy static ./dist --name my-app --update
+```
+
+The gateway exposes deployment REST endpoints at `/v1/deployments/{type}/upload` and `/v1/deployments/{type}/update` that accept multipart file uploads with authentication.
diff --git a/website/src/docs/developer/domains.mdx b/website/src/docs/developer/domains.mdx
new file mode 100644
index 0000000..9d7a7b8
--- /dev/null
+++ b/website/src/docs/developer/domains.mdx
@@ -0,0 +1,179 @@
+# Domains and Routing
+
+Every deployment on the Orama Network is assigned a domain automatically. You do not need to configure DNS, provision certificates, or set up reverse proxies -- the network handles all of it.
+
+## Automatic Domain Assignment
+
+When you deploy an application, it receives a unique subdomain on the environment's base domain:
+
+```
+-.
+```
+
+For example, deploying an app named `myapp` on devnet:
+
+```
+myapp-f3o4if.orama-devnet.network
+```
+
+The random suffix ensures uniqueness across all namespaces. You can also specify a custom subdomain with `--subdomain`.
+
+The three environments each have their own base domain:
+
+| Environment | Base Domain |
+|-------------|-------------|
+| **Devnet** | `orama-devnet.network` |
+| **Testnet** | `orama-testnet.network` |
+| **Production** | `dbrs.space` |
+
+The domain is live as soon as the deployment completes. No additional configuration is required.
+
+---
+
+## Cross-Node Routing
+
+Every app has a **home node** -- the node it was deployed to and where its process runs (or where its static files are served from). However, clients can reach the app through **any node** in the cluster. The gateway mesh handles routing transparently.
+
+From the client's perspective, there is no difference between hitting the home node directly or hitting a different node that proxies the request. The response is identical.
+
+### How Routing Works
+
+1. The client resolves the app's domain via DNS (round-robin across nameservers)
+2. The request arrives at whichever node the DNS resolved to
+3. The gateway on that node extracts the app name from the subdomain
+4. It looks up which node hosts the app
+5. If the app's home node is **this node**, the gateway serves the request directly
+6. If the app's home node is a **different node**, the gateway proxies the request over the WireGuard mesh to the home node
+
+```mermaid
+sequenceDiagram
+ participant C as Client
+ participant A as Node A (gateway)
+ participant W as WireGuard Mesh
+ participant H as Node C (home node)
+
+ C->>A: HTTPS request
+ A->>A: app not here
+ A->>W: forward over WireGuard
+ W->>H: route to home node
+ H->>H: static: Caddy / server: app process
+ H-->>W: response
+ W-->>A: response
+ A-->>C: HTTPS response
+```
+
+The proxy hop adds minimal latency because all inter-node traffic travels over WireGuard tunnels on the private `10.0.0.0/24` subnet. These are persistent, encrypted UDP tunnels -- no TCP handshake or TLS negotiation is required for the internal hop.
+
+### Why This Matters
+
+- **High availability.** If DNS resolves to any healthy node, the request succeeds regardless of where the app is hosted.
+- **Simple DNS.** All nodes share the same set of domains. DNS can round-robin across all nameservers without knowing which node hosts which app.
+- **Transparent to clients.** The client always talks HTTPS to a single endpoint. The internal routing is invisible.
+
+---
+
+## DNS Resolution Flow
+
+Understanding how a request travels from a client's browser to your app:
+
+```mermaid
+sequenceDiagram
+ participant C as Client
+ participant DNS as DNS Root/TLD
+ participant NS as Orama Nameserver (CoreDNS)
+ participant GW as Gateway
+
+ C->>DNS: query myapp-f3o4if.orama-devnet.network
+ DNS-->>C: NS records for orama-devnet.network
+ C->>NS: query (routed via glue records)
+ NS-->>C: node public IP (round-robin)
+ C->>GW: HTTPS connection
+ GW->>GW: TLS termination + route to app
+ GW-->>C: response
+```
+
+Each Orama node runs **CoreDNS** as its authoritative nameserver. The domain registrar's NS records point to the Orama nodes themselves, and glue records provide the IP addresses so resolvers can reach them without a circular dependency.
+
+### DNS record chain
+
+```
+orama-devnet.network. NS ns1.orama-devnet.network.
+ NS ns2.orama-devnet.network.
+ NS ns3.orama-devnet.network.
+
+ns1.orama-devnet.network. A (glue record)
+ns2.orama-devnet.network. A (glue record)
+ns3.orama-devnet.network. A (glue record)
+
+myapp-f3o4if.orama-devnet.network. A
+```
+
+Because multiple NS records exist, DNS resolvers distribute queries across nodes. This provides both load balancing and redundancy at the DNS layer.
+
+---
+
+## SSL/TLS Certificates
+
+All deployments are served over HTTPS with certificates provisioned automatically via **Let's Encrypt**. You do not need to generate, upload, or renew certificates.
+
+### How It Works
+
+1. When a new domain is created (on deploy), the gateway requests a certificate from Let's Encrypt
+2. Let's Encrypt issues an **ACME DNS-01 challenge** to verify domain ownership
+3. CoreDNS (running on the same node) serves the challenge response
+4. The certificate is issued and installed in the gateway (Caddy)
+5. Caddy handles automatic renewal before expiration
+
+The DNS-01 challenge method is used instead of HTTP-01 because it does not require the ACME server to reach a specific node -- CoreDNS can serve the challenge response from any nameserver, which works well with the round-robin DNS setup.
+
+### Certificate Details
+
+| Property | Value |
+|----------|-------|
+| **CA** | Let's Encrypt |
+| **Challenge type** | DNS-01 via CoreDNS |
+| **Key type** | ECDSA P-256 |
+| **Renewal** | Automatic (handled by Caddy) |
+| **Wildcard** | Per-app certificates, not wildcard |
+
+---
+
+## Custom Domains
+
+You can map your own domain (like `api.example.com`) to an Orama deployment using the custom domains API.
+
+### REST API
+
+| Method | Endpoint | Description |
+|--------|----------|-------------|
+| `POST` | `/v1/deployments/domains/add` | Add a custom domain to a deployment |
+| `POST` | `/v1/deployments/domains/verify` | Verify domain ownership via DNS |
+| `GET` | `/v1/deployments/domains/list` | List all custom domains |
+| `DELETE` | `/v1/deployments/domains/remove` | Remove a custom domain |
+
+### Flow
+
+1. Add a CNAME record on your domain pointing to your app's Orama domain
+2. Call the add endpoint with your domain and deployment name
+3. Verify ownership via DNS (the API will check for the CNAME)
+4. A certificate is automatically provisioned for the custom domain
+
+---
+
+## Troubleshooting
+
+### Domain not resolving
+
+If your app's domain does not resolve after deployment:
+
+1. **Check deployment status.** Run `orama app get ` and verify the app is in a healthy state.
+2. **Wait for DNS propagation.** New DNS records can take up to a few minutes to propagate, though it is usually instant.
+3. **Check from multiple locations.** DNS round-robin means different resolvers may get different node IPs. Try `dig myapp-f3o4if.orama-devnet.network` to see what DNS returns.
+
+### Certificate errors
+
+If you see a TLS certificate error in the browser:
+
+1. **Wait a moment.** Certificate provisioning via ACME takes a few seconds after the first request to a new domain.
+2. **Check the domain name.** Ensure you are using the exact domain from `orama app get `.
+3. **Hard refresh.** Browsers cache certificate errors aggressively. Try an incognito window or `curl -v https://your-domain`.
diff --git a/website/src/docs/developer/functions.mdx b/website/src/docs/developer/functions.mdx
new file mode 100644
index 0000000..8405f28
--- /dev/null
+++ b/website/src/docs/developer/functions.mdx
@@ -0,0 +1,504 @@
+# Functions
+
+Orama Functions lets you run serverless code on the decentralized network using WebAssembly (WASM). Write functions in Go, compile to WASM with TinyGo, and deploy them to execute on Orama nodes in a sandboxed wazero runtime with configurable memory limits and timeouts.
+
+## Overview
+
+Functions are written in Go, compiled to WASM using [TinyGo](https://tinygo.org/), and executed in an isolated wazero sandbox on Orama nodes. Each function receives JSON input via **stdin** and returns JSON output via **stdout**. Functions can access Orama platform services -- database, cache, storage, HTTP, secrets, PubSub, WebSocket, and logging -- through **host functions** injected by the runtime.
+
+Key characteristics:
+
+- **Go + TinyGo** -- Write standard Go, compile to a portable WASM binary
+- **Sandboxed execution** -- Each invocation runs in an isolated wazero instance with memory and timeout limits
+- **Platform integration** -- Host functions provide direct access to RQLite, Olric, IPFS, PubSub, WebSocket, secrets, and outbound HTTP
+- **Event-driven** -- Functions can be invoked via HTTP, WebSocket, or triggered automatically by PubSub messages
+
+## Writing Functions
+
+### Project Structure
+
+A function consists of two files:
+
+```
+my-function/
+├── function.go # Handler code (Go)
+└── function.yaml # Configuration
+```
+
+### function.yaml
+
+The configuration file defines the function's name, resource limits, and environment variables.
+
+```yaml
+name: my-function # Required. Letters, digits, hyphens, underscores.
+public: false # Allow unauthenticated invocation (default: false)
+memory: 64 # Memory limit in MB (1-256, default: 64)
+timeout: 30 # Execution timeout in seconds (1-300, default: 30)
+retry:
+ count: 0 # Retry attempts on failure (default: 0)
+ delay: 5 # Seconds between retries (default: 5)
+env: # Environment variables (accessible via get_env)
+ MY_VAR: "value"
+```
+
+### function.go
+
+The SDK provides a helper package that handles stdin/stdout boilerplate. When you scaffold a new function with `orama function init`, this is the generated template:
+
+```go
+package main
+
+import "github.com/DeBrosOfficial/network/sdk/fn"
+
+func main() {
+ fn.Run(func(input []byte) ([]byte, error) {
+ var req struct {
+ Name string `json:"name"`
+ }
+ fn.ParseJSON(input, &req)
+ if req.Name == "" {
+ req.Name = "World"
+ }
+ return fn.JSON(map[string]string{
+ "greeting": "Hello, " + req.Name + "!",
+ })
+ })
+}
+```
+
+The `fn` package provides:
+
+| Function | Description |
+|----------|-------------|
+| `fn.Run(handler)` | Reads input from stdin, calls the handler, writes output to stdout |
+| `fn.JSON(v)` | Marshals a value to JSON bytes |
+| `fn.ParseJSON(data, v)` | Unmarshals JSON bytes into a value |
+
+You can also write functions without the SDK, reading from `os.Stdin` and writing to `os.Stdout` directly:
+
+```go
+package main
+
+import (
+ "encoding/json"
+ "io"
+ "os"
+)
+
+func main() {
+ input, _ := io.ReadAll(os.Stdin)
+
+ var payload struct {
+ Name string `json:"name"`
+ }
+ json.Unmarshal(input, &payload)
+
+ response := map[string]string{
+ "message": "Hello, " + payload.Name + "!",
+ }
+ output, _ := json.Marshal(response)
+ os.Stdout.Write(output)
+}
+```
+
+### Building
+
+Functions are compiled to WASM using TinyGo:
+
+```bash
+# Using the CLI (recommended -- validates the output)
+orama function build
+
+# Build from a specific directory
+orama function build ./my-function
+
+# Or manually
+tinygo build -o function.wasm -target wasi function.go
+```
+
+## Deployment
+
+### CLI
+
+```bash
+# Scaffold a new function
+orama function init my-function
+
+# Build and deploy from the function directory
+cd my-function
+orama function build
+orama function deploy
+
+# Deploy from a specific directory
+orama function deploy ./my-function
+```
+
+If no `function.wasm` file exists when you run `deploy`, it is built automatically.
+
+Each deploy creates a new version. The WASM binary is stored on IPFS (content-addressed) and metadata is stored in RQLite.
+
+### REST API
+
+Deploy by uploading a multipart form with the compiled WASM binary and configuration:
+
+```bash
+curl -X POST https://gateway.example.com/v1/functions \
+ -H "Authorization: Bearer " \
+ -F "name=hello-world" \
+ -F "is_public=false" \
+ -F "memory_limit_mb=64" \
+ -F "timeout_seconds=30" \
+ -F "retry_count=0" \
+ -F "retry_delay_seconds=5" \
+ -F "wasm=@./function.wasm"
+```
+
+## Invocation
+
+### SDK
+
+The TypeScript SDK invokes functions via the `/v1/invoke/{namespace}/{name}` endpoint:
+
+```typescript
+import { createClient } from "@debros/network-ts-sdk";
+
+const client = createClient({
+ baseURL: "https://gateway.example.com",
+ apiKey: "ak_your_key:namespace",
+ functionsConfig: {
+ namespace: "my-namespace",
+ },
+});
+
+interface GreetInput {
+ name: string;
+}
+
+interface GreetOutput {
+ greeting: string;
+}
+
+const result = await client.functions.invoke(
+ "hello-world",
+ { name: "World" }
+);
+
+console.log(result.greeting); // "Hello, World!"
+```
+
+### CLI
+
+```bash
+orama function invoke hello-world --data '{"name": "World"}'
+```
+
+The `--data` flag accepts a JSON string (defaults to `"{}"`).
+
+### REST API
+
+```bash
+# Via the function-specific invoke endpoint
+curl -X POST https://gateway.example.com/v1/functions/hello-world/invoke \
+ -H "Authorization: Bearer " \
+ -H "Content-Type: application/json" \
+ -d '{"name": "World"}'
+
+# Via the direct invoke endpoint (used by the SDK)
+curl -X POST https://gateway.example.com/v1/invoke/my-namespace/hello-world \
+ -H "Authorization: Bearer " \
+ -H "Content-Type: application/json" \
+ -d '{"name": "World"}'
+```
+
+### WebSocket Invoke
+
+Functions can also be invoked over WebSocket for streaming use cases:
+
+```
+WS /v1/functions/{name}/ws
+```
+
+You can also invoke a specific version by appending `@version` to the name (e.g., `hello-world@2`).
+
+## Host Functions API
+
+Host functions let your WASM code interact with Orama platform services. They are available to every function without additional configuration.
+
+### Context
+
+| Function | Description |
+|----------|-------------|
+| `get_caller_wallet()` | Returns the wallet address of the caller (from JWT). |
+| `get_request_id()` | Returns the unique invocation ID. |
+| `get_env(key)` | Returns an environment variable from function.yaml. |
+| `get_secret(name)` | Returns a decrypted secret value. See [Secrets Management](#secrets-management). |
+
+### Database (RQLite)
+
+Read and write to the distributed RQLite database.
+
+| Function | Description |
+|----------|-------------|
+| `db_query(sql, argsJSON)` | Execute a SELECT query. Args as JSON array. Returns JSON array of row objects. |
+| `db_execute(sql, argsJSON)` | Execute INSERT/UPDATE/DELETE. Returns affected row count. |
+
+### Cache (Olric)
+
+Read and write to the distributed Olric cache. Cache operations use a fixed dmap (`serverless_cache`).
+
+| Function | Description |
+|----------|-------------|
+| `cache_get(key)` | Get cached value by key. Returns empty on miss. |
+| `cache_set(key, value, ttlSeconds)` | Store value with TTL in seconds. |
+| `cache_delete(key)` | Delete a cached value. |
+| `cache_incr(key)` | Atomically increment by 1 (initializes to 0 if missing). |
+| `cache_incr_by(key, delta)` | Atomically increment by delta. |
+
+### Storage (IPFS)
+
+Upload and retrieve data from IPFS.
+
+| Function | Description |
+|----------|-------------|
+| `storage_put(data)` | Upload data to IPFS. Returns the CID. |
+| `storage_get(cid)` | Retrieve data from IPFS by CID. |
+
+### HTTP
+
+Make outbound HTTP requests from within your function.
+
+| Function | Description |
+|----------|-------------|
+| `http_fetch(method, url, headersJSON, body)` | Make an outbound HTTP request. Headers as JSON object. Returns `{"status": 200, "headers": {...}, "body": "..."}`. |
+
+### PubSub
+
+Publish messages to PubSub topics.
+
+| Function | Description |
+|----------|-------------|
+| `pubsub_publish(topic, data)` | Publish a message to a PubSub topic. |
+
+### WebSocket
+
+Send messages to WebSocket clients (only available when the function is invoked via WebSocket).
+
+| Function | Description |
+|----------|-------------|
+| `ws_send(clientID, data)` | Send data to a specific WebSocket client. |
+| `ws_broadcast(topic, data)` | Broadcast data to all WebSocket clients on a topic. |
+
+### Logging
+
+Structured logging captured in invocation logs.
+
+| Function | Description |
+|----------|-------------|
+| `log_info(message)` | Log an info-level message. |
+| `log_error(message)` | Log an error-level message. |
+
+## Secrets Management
+
+Secrets are encrypted at rest (AES-256-GCM) and scoped to your namespace. Functions read them at runtime via `get_secret("name")`.
+
+### Setting Secrets
+
+```bash
+# Set a secret (inline value)
+orama function secrets set APNS_KEY_ID "ABC123DEF"
+
+# Set a secret from a file (useful for PEM keys, certificates)
+orama function secrets set APNS_AUTH_KEY --from-file ./AuthKey_ABC123.p8
+
+# List all secret names (values are never shown)
+orama function secrets list
+
+# Delete a secret
+orama function secrets delete APNS_KEY_ID
+
+# Delete without confirmation
+orama function secrets delete APNS_KEY_ID --force
+```
+
+### Secrets via REST API
+
+```bash
+# Set a secret
+curl -X PUT https://gateway.example.com/v1/functions/secrets \
+ -H "Authorization: Bearer " \
+ -H "Content-Type: application/json" \
+ -d '{"name": "MY_SECRET", "value": "secret-value"}'
+
+# List secret names
+curl https://gateway.example.com/v1/functions/secrets \
+ -H "Authorization: Bearer "
+
+# Delete a secret
+curl -X DELETE https://gateway.example.com/v1/functions/secrets/MY_SECRET \
+ -H "Authorization: Bearer "
+```
+
+### How It Works
+
+1. **You set secrets** via the CLI or API -- they are encrypted and stored in the database
+2. **Functions read secrets** at runtime via `get_secret("name")` -- decrypted on demand
+3. **Namespace isolation** -- each namespace has its own secret store; functions in namespace A cannot read secrets from namespace B
+
+## PubSub Triggers
+
+Triggers let functions react to events automatically. When a message is published to a PubSub topic, all functions with a trigger on that topic are invoked asynchronously.
+
+### Managing Triggers
+
+```bash
+# Add a trigger: invoke "my-function" when messages hit "events:incoming"
+orama function triggers add my-function --topic events:incoming
+
+# List triggers for a function
+orama function triggers list my-function
+
+# Delete a trigger
+orama function triggers delete my-function
+```
+
+### Triggers via REST API
+
+```bash
+# Add a trigger
+curl -X POST https://gateway.example.com/v1/functions/my-function/triggers \
+ -H "Authorization: Bearer " \
+ -H "Content-Type: application/json" \
+ -d '{"topic": "events:incoming"}'
+
+# List triggers
+curl https://gateway.example.com/v1/functions/my-function/triggers \
+ -H "Authorization: Bearer "
+
+# Delete a trigger
+curl -X DELETE https://gateway.example.com/v1/functions/my-function/triggers/ \
+ -H "Authorization: Bearer "
+```
+
+### Trigger Event Payload
+
+When triggered via PubSub, the function receives this JSON via stdin:
+
+```json
+{
+ "topic": "events:incoming",
+ "data": { "key": "value" },
+ "namespace": "my-namespace",
+ "trigger_depth": 1,
+ "timestamp": 1708972800
+}
+```
+
+### Depth Limiting
+
+To prevent infinite loops (function A publishes to a topic that triggers function A again), trigger depth is tracked. The maximum depth is **5**. If a function's output triggers another function, `trigger_depth` increments. At depth 5, no further triggers fire.
+
+## Managing Functions
+
+### List Functions
+
+```bash
+# CLI
+orama function list
+
+# REST API
+curl https://gateway.example.com/v1/functions \
+ -H "Authorization: Bearer "
+```
+
+### Get Function Details
+
+```bash
+# CLI
+orama function get my-function
+
+# REST API
+curl https://gateway.example.com/v1/functions/my-function \
+ -H "Authorization: Bearer "
+```
+
+### Delete a Function
+
+```bash
+# CLI (prompts for confirmation)
+orama function delete my-function
+
+# CLI (skip confirmation)
+orama function delete my-function --force
+
+# REST API
+curl -X DELETE https://gateway.example.com/v1/functions/my-function \
+ -H "Authorization: Bearer "
+```
+
+### List Versions
+
+Each deploy creates a new version. You can list all versions of a function.
+
+```bash
+# CLI
+orama function versions my-function
+
+# REST API
+curl https://gateway.example.com/v1/functions/my-function/versions \
+ -H "Authorization: Bearer "
+```
+
+### Invocation Logs
+
+```bash
+# CLI (default: last 50 entries)
+orama function logs my-function
+
+# CLI (custom limit)
+orama function logs my-function --limit 100
+
+# REST API
+curl "https://gateway.example.com/v1/functions/my-function/logs?limit=50" \
+ -H "Authorization: Bearer "
+```
+
+## REST API Reference
+
+| Method | Endpoint | Description |
+|--------|----------|-------------|
+| `POST` | `/v1/functions` | Deploy function (multipart/form-data) |
+| `GET` | `/v1/functions` | List functions |
+| `GET` | `/v1/functions/{name}` | Get function info |
+| `DELETE` | `/v1/functions/{name}` | Delete function |
+| `POST` | `/v1/functions/{name}/invoke` | Invoke function |
+| `GET` | `/v1/functions/{name}/versions` | List versions |
+| `GET` | `/v1/functions/{name}/logs` | Get invocation logs |
+| `WS` | `/v1/functions/{name}/ws` | WebSocket invoke (streaming) |
+| `PUT` | `/v1/functions/secrets` | Set a secret |
+| `GET` | `/v1/functions/secrets` | List secret names |
+| `DELETE` | `/v1/functions/secrets/{name}` | Delete a secret |
+| `POST` | `/v1/functions/{name}/triggers` | Add PubSub trigger |
+| `GET` | `/v1/functions/{name}/triggers` | List triggers |
+| `DELETE` | `/v1/functions/{name}/triggers/{id}` | Delete trigger |
+| `POST` | `/v1/invoke/{namespace}/{name}` | Direct invoke (used by SDK) |
+
+## CLI Reference
+
+| Command | Description |
+|---------|-------------|
+| `orama function init ` | Scaffold a new function project |
+| `orama function build [directory]` | Compile Go to WASM via TinyGo |
+| `orama function deploy [directory]` | Deploy WASM to the network |
+| `orama function invoke --data ` | Invoke a function |
+| `orama function list` | List deployed functions |
+| `orama function get ` | Get function details |
+| `orama function delete [--force]` | Delete a function |
+| `orama function logs [--limit N]` | View invocation logs (default: 50) |
+| `orama function versions ` | List function versions |
+| `orama function secrets set [value]` | Set an encrypted secret |
+| `orama function secrets set --from-file ` | Set a secret from file |
+| `orama function secrets list` | List secret names |
+| `orama function secrets delete [--force]` | Delete a secret |
+| `orama function triggers add --topic ` | Add PubSub trigger |
+| `orama function triggers list ` | List triggers |
+| `orama function triggers delete ` | Delete a trigger |
diff --git a/website/src/docs/developer/getting-started.mdx b/website/src/docs/developer/getting-started.mdx
new file mode 100644
index 0000000..a5512af
--- /dev/null
+++ b/website/src/docs/developer/getting-started.mdx
@@ -0,0 +1,236 @@
+# Getting Started
+
+Welcome to the **Orama Network** developer documentation. Orama is a decentralized infrastructure platform that provides distributed databases, caching, file storage, real-time messaging, serverless functions, encrypted vault storage, and application deployments -- all accessible through a unified SDK and CLI.
+
+## Core Services
+
+| Service | Description |
+|---------|-------------|
+| **Deployments** | Deploy static sites, Next.js apps, Go backends, and Node.js backends |
+| **Databases** | Distributed SQL databases (RQLite) with replication across nodes |
+| **SQLite** | Per-namespace SQLite databases with IPFS-backed backups |
+| **Cache** | Distributed key-value caching powered by Olric |
+| **Storage** | Decentralized file storage on IPFS with automatic pinning |
+| **PubSub** | Real-time messaging over WebSockets with presence tracking |
+| **Functions** | Serverless WebAssembly function execution |
+| **Vault** | Encrypted secret storage distributed across guardian nodes via Shamir splitting |
+| **Proxy** | Anonymous HTTP proxying through the Anyone privacy relay network |
+
+## Architecture Overview
+
+The Orama Network is a mesh of VPS nodes connected via WireGuard tunnels. Each node runs a gateway that handles request routing, authentication, and service orchestration.
+
+| Component | Purpose |
+|-----------|---------|
+| Gateway | API routing, authentication, rate limiting |
+| RQLite | Distributed SQL database (Raft consensus) |
+| Olric | Distributed cache and DMap |
+| IPFS + IPFS Cluster | Decentralized file storage with replication |
+| CoreDNS | Authoritative DNS for deployment subdomains |
+| Caddy | TLS termination and reverse proxy |
+| WASM Runtime | Serverless function execution |
+| Anyone Relay | Privacy proxy network |
+
+## Install the SDK
+
+```bash
+npm install @debros/network-ts-sdk
+# or
+pnpm add @debros/network-ts-sdk
+```
+
+## Initialize the Client
+
+```typescript
+import { createClient } from "@debros/network-ts-sdk";
+
+const client = createClient({
+ baseURL: "https://your-node.orama-devnet.network",
+ apiKey: "your-api-key",
+});
+```
+
+The `baseURL` is the HTTPS URL of any Orama gateway node. API keys are obtained through wallet-based authentication (see below).
+
+## Authentication
+
+Orama uses wallet-based cryptographic authentication. The flow is:
+
+1. Request a challenge nonce from the gateway
+2. Sign the nonce with your wallet (EVM or Solana)
+3. Submit the signature to receive a JWT and API key
+4. Use the API key for subsequent requests
+
+### SDK Authentication Flow
+
+```typescript
+const client = createClient({
+ baseURL: "https://your-node.orama-devnet.network",
+});
+
+// Step 1: Request challenge
+const challenge = await client.auth.challenge({
+ wallet: "0xYourWalletAddress",
+ namespace: "my-namespace",
+});
+
+// Step 2: Sign the nonce with your wallet (app-specific signing logic)
+const signature = await signMessage(challenge.nonce);
+
+// Step 3: Verify and get tokens
+const session = await client.auth.verify({
+ wallet: "0xYourWalletAddress",
+ nonce: challenge.nonce,
+ signature,
+ namespace: "my-namespace",
+ chain_type: "ETH", // or "SOL" for Solana
+});
+
+// session.access_token — JWT for authenticated requests
+// session.api_key — persistent API key for your namespace
+```
+
+After verification, the SDK automatically stores the JWT and API key for subsequent requests.
+
+### CLI Authentication
+
+The Orama CLI (`orama`) supports interactive authentication with RootWallet (EVM) or Phantom (Solana):
+
+```bash
+# Set your target environment
+orama env use devnet
+
+# Authenticate (interactive wallet selection)
+orama auth login
+
+# Check who you are logged in as
+orama auth whoami
+
+# View detailed auth status
+orama auth status
+
+# List all stored credentials for the current environment
+orama auth list
+
+# Switch between stored credentials
+orama auth switch
+
+# Clear all credentials
+orama auth logout
+```
+
+#### Login Flags
+
+| Flag | Description |
+|------|-------------|
+| `--namespace ` | Target namespace |
+| `--simple` | Use simple auth without signature (dev only) |
+| `--wallet <0x...>` | Wallet address (implies `--simple`) |
+
+## Environment Management
+
+The CLI supports multiple environments. Each environment points to a different gateway cluster.
+
+```bash
+# List all environments
+orama env list
+
+# Show current active environment
+orama env current
+
+# Switch environment
+orama env use devnet
+orama env use testnet
+
+# Add a custom environment
+orama env add my-env https://my-gateway.example.com "My custom environment"
+
+# Remove a custom environment
+orama env remove my-env
+```
+
+Default environments:
+
+| Environment | Gateway URL |
+|-------------|-------------|
+| `production` | `https://dbrs.space` |
+| `devnet` | `https://orama-devnet.network` |
+| `testnet` | `https://orama-testnet.network` |
+
+The default active environment is `devnet`. You can override the gateway URL for any command by setting the `ORAMA_GATEWAY_URL` environment variable.
+
+## Quick Example: Deploy a Static Site
+
+```bash
+# Authenticate
+orama auth login
+
+# Deploy a built React/Vue/static site
+orama deploy static ./dist --name my-app
+
+# Check deployment status
+orama app get my-app
+
+# List all deployments
+orama app list
+```
+
+Your app will be available at a URL like `https://my-app-f3o4if.orama-devnet.network`.
+
+## Quick Example: Use the Database
+
+```typescript
+const client = createClient({
+ baseURL: "https://your-node.orama-devnet.network",
+ apiKey: "your-api-key",
+});
+
+// Create a table
+await client.db.createTable(
+ "CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, email TEXT)"
+);
+
+// Insert data
+await client.db.exec(
+ "INSERT INTO users (name, email) VALUES (?, ?)",
+ ["Alice", "alice@example.com"]
+);
+
+// Query data
+const users = await client.db.query("SELECT * FROM users WHERE name = ?", ["Alice"]);
+```
+
+## CLI Command Overview
+
+The `orama` CLI provides these top-level commands:
+
+| Command | Description |
+|---------|-------------|
+| `orama auth` | Authentication management (login, logout, whoami, status, list, switch) |
+| `orama env` | Environment management (list, current, use, add, remove) |
+| `orama deploy` | Deploy applications (static, nextjs, go, nodejs) |
+| `orama app` | Manage deployed applications (list, get, delete, rollback, logs, stats) |
+| `orama db` | Manage SQLite databases (create, query, list, backup, backups) |
+| `orama function` | Manage serverless functions (init, build, deploy, invoke, list, get, delete, logs, versions, secrets, triggers) |
+| `orama namespace` | Manage namespaces (list, delete, repair, enable, disable, webrtc-status) |
+| `orama inspect` | SSH-based cluster health inspection (operator tool) |
+| `orama monitor` | Real-time cluster monitoring (operator tool) |
+| `orama build` | Cross-compile binary archive for deployment (operator tool) |
+| `orama sandbox` | Manage ephemeral Hetzner Cloud clusters for testing (operator tool) |
+| `orama version` | Show CLI version |
+
+## Next Steps
+
+- [SDK Reference](/docs/developer/sdk-reference) -- Full API reference for the TypeScript SDK
+- [Deployments](/docs/developer/deployments) -- Deploy static sites, Next.js apps, Go and Node.js backends
+- [Databases](/docs/developer/databases) -- Distributed SQL with RQLite
+- [Cache](/docs/developer/cache) -- Distributed caching with Olric
+- [Storage](/docs/developer/storage) -- Decentralized file storage on IPFS
+- [PubSub](/docs/developer/pubsub) -- Real-time messaging with WebSockets
+- [Functions](/docs/developer/functions) -- Serverless WebAssembly execution
+- [Vault](/docs/developer/vault) -- Encrypted distributed secret storage
+- [CLI Reference](/docs/developer/cli-reference) -- Full CLI command reference
+
+---
+
+> **Note:** For node operator documentation (installation, monitoring, upgrades), switch to the **OPS** persona using the toggle in the sidebar.
diff --git a/website/src/docs/developer/pubsub.mdx b/website/src/docs/developer/pubsub.mdx
new file mode 100644
index 0000000..ebc1924
--- /dev/null
+++ b/website/src/docs/developer/pubsub.mdx
@@ -0,0 +1,291 @@
+# PubSub
+
+Real-time, WebSocket-based messaging for the Orama Network. Publish and subscribe to topics for live event streaming, notifications, inter-service communication, and collaborative features. Built on LibP2P gossipsub internally, messages propagate through the mesh of connected nodes with no single point of failure.
+
+## SDK Setup
+
+```typescript
+import { createClient } from "@debros/network-ts-sdk";
+
+const client = createClient({
+ baseURL: "https://gateway.example.com",
+ apiKey: "ak_your_key:namespace",
+});
+```
+
+All topics are scoped to your namespace automatically.
+
+## Publishing Messages
+
+Publish string or binary payloads to any topic. Messages are base64-encoded on the wire and decoded transparently by the SDK.
+
+### SDK
+
+```typescript
+// Publish a string message
+await client.pubsub.publish("notifications", "Hello, Network!");
+
+// Publish binary data
+const binaryData = new Uint8Array([1, 2, 3, 4]);
+await client.pubsub.publish("binary-topic", binaryData);
+```
+
+### REST API
+
+```bash
+# Publish a message (data must be base64-encoded)
+curl -X POST https://gateway.example.com/v1/pubsub/publish \
+ -H "Authorization: Bearer " \
+ -H "Content-Type: application/json" \
+ -d '{"topic": "notifications", "data_base64": "SGVsbG8sIE5ldHdvcmsh"}'
+```
+
+## Subscribing to Topics
+
+Subscribe to a topic via WebSocket to receive messages in real time. Each call to `subscribe` opens a dedicated WebSocket connection and returns a `Subscription` object you can close when done.
+
+```typescript
+const subscription = await client.pubsub.subscribe("notifications", {
+ onMessage: (msg) => {
+ console.log("Topic:", msg.topic);
+ console.log("Data:", msg.data);
+ console.log("Server timestamp:", new Date(msg.timestamp));
+ },
+ onError: (err) => console.error("Subscription error:", err),
+ onClose: (code, reason) => console.log("Subscription closed:", code, reason),
+});
+
+// Close when done
+subscription.close();
+```
+
+### Multiple Subscribers
+
+Each subscriber gets its own WebSocket connection and its own copy of every message. You can attach as many subscribers to the same topic as you need.
+
+```typescript
+const sub1 = await client.pubsub.subscribe("events", {
+ onMessage: (msg) => console.log("Sub1:", msg.data),
+});
+
+const sub2 = await client.pubsub.subscribe("events", {
+ onMessage: (msg) => console.log("Sub2:", msg.data),
+});
+```
+
+### Subscription Methods
+
+| Method | Description |
+|--------|-------------|
+| `close()` | Close the subscription and underlying WebSocket |
+| `isConnected()` | Check if the subscription is still active |
+| `hasPresence()` | Check if presence is enabled for this subscription |
+| `getPresence()` | Get current presence members (requires presence enabled) |
+| `onMessage(handler)` | Register an additional message handler. Returns unsubscribe function. |
+| `onError(handler)` | Register an additional error handler. Returns unsubscribe function. |
+| `onClose(handler)` | Register an additional close handler. Returns unsubscribe function. |
+
+## Message Format
+
+Every message delivered to subscribers has the following shape:
+
+```typescript
+interface PubSubMessage {
+ data: string; // The decoded message payload
+ topic: string; // The topic the message was published to
+ timestamp: number; // Server-assigned Unix timestamp in milliseconds
+}
+```
+
+Server-side timestamps are applied to all messages, so you never need to rely on client clocks for ordering.
+
+## Listing Active Topics
+
+Retrieve all topics that currently have active subscribers in your namespace.
+
+### SDK
+
+```typescript
+const topics = await client.pubsub.topics();
+```
+
+### REST API
+
+```bash
+curl https://gateway.example.com/v1/pubsub/topics \
+ -H "Authorization: Bearer "
+```
+
+## Presence Tracking
+
+Track who is online in a topic. Presence gives you real-time join/leave notifications and the ability to query current members at any time.
+
+### Subscribe with Presence
+
+Enable presence when subscribing to a topic. Each member provides a `memberId` and optional `meta` object.
+
+```typescript
+const subscription = await client.pubsub.subscribe("room.123", {
+ onMessage: (msg) => console.log("Message:", msg.data),
+ presence: {
+ enabled: true,
+ memberId: "user-alice",
+ meta: { displayName: "Alice", avatar: "https://..." },
+ onJoin: (member) => console.log(`${member.memberId} joined`),
+ onLeave: (member) => console.log(`${member.memberId} left`),
+ },
+});
+```
+
+When presence is enabled, `member_id` and optional `member_meta` are sent as WebSocket query parameters. The server broadcasts `presence.join` and `presence.leave` events to other subscribers with presence enabled.
+
+### Query Presence from a Subscription
+
+If the subscription has presence enabled, you can query the current member list at any time:
+
+```typescript
+if (subscription.hasPresence()) {
+ const members = await subscription.getPresence();
+ members.forEach((m) => console.log(`- ${m.memberId}`));
+}
+```
+
+### Query Presence Without Subscribing
+
+You do not need an active subscription to check who is present on a topic.
+
+#### SDK
+
+```typescript
+const presence = await client.pubsub.getPresence("room.123");
+console.log(`Total members: ${presence.count}`);
+presence.members.forEach((m) => console.log(`- ${m.memberId}`));
+```
+
+#### REST API
+
+```bash
+curl "https://gateway.example.com/v1/pubsub/presence?topic=room.123" \
+ -H "Authorization: Bearer "
+```
+
+### Presence Types
+
+```typescript
+interface PresenceMember {
+ memberId: string;
+ joinedAt: number;
+ meta?: Record;
+}
+
+interface PresenceResponse {
+ topic: string;
+ members: PresenceMember[];
+ count: number;
+}
+
+interface PresenceOptions {
+ enabled: boolean;
+ memberId: string;
+ meta?: Record;
+ onJoin?: (member: PresenceMember) => void;
+ onLeave?: (member: PresenceMember) => void;
+}
+```
+
+## CLI
+
+There are no dedicated CLI commands for PubSub. Use the SDK or REST API.
+
+## Patterns
+
+### Fan-Out Broadcast
+
+Broadcast a message to all subscribers of a topic. Every subscriber receives its own copy.
+
+```typescript
+await client.pubsub.publish("announcements", "Scheduled maintenance in 1 hour");
+```
+
+### Request-Reply
+
+Implement request-reply by using a unique reply topic per request.
+
+```typescript
+// Requester
+const replyTopic = `reply:${crypto.randomUUID()}`;
+const replySub = await client.pubsub.subscribe(replyTopic, {
+ onMessage: (msg) => {
+ console.log("Got reply:", msg.data);
+ replySub.close();
+ },
+});
+
+await client.pubsub.publish("service:lookup", JSON.stringify({
+ query: "user-123",
+ replyTo: replyTopic,
+}));
+```
+
+### Live Collaboration
+
+Combine PubSub with presence to build collaborative features like shared cursors, typing indicators, or live editing.
+
+```typescript
+const collab = await client.pubsub.subscribe("doc.abc", {
+ onMessage: (msg) => {
+ const update = JSON.parse(msg.data);
+ applyRemoteChange(update);
+ },
+ presence: {
+ enabled: true,
+ memberId: currentUserId,
+ meta: { displayName: currentUser.name, color: "#3b82f6" },
+ onJoin: (member) => showCursor(member),
+ onLeave: (member) => removeCursor(member),
+ },
+});
+
+// Broadcast local changes
+function onLocalEdit(change: object) {
+ client.pubsub.publish("doc.abc", JSON.stringify(change));
+}
+```
+
+## REST API Reference
+
+| Method | Endpoint | Description |
+|--------|----------|-------------|
+| `POST` | `/v1/pubsub/publish` | Publish a message. Body: `{topic, data_base64}` |
+| `GET` | `/v1/pubsub/topics` | List active topics in the current namespace |
+| `GET` | `/v1/pubsub/presence?topic={topic}` | Get presence members for a topic |
+| `WS` | `/v1/pubsub/ws?topic={topic}` | Subscribe to a topic via WebSocket |
+
+WebSocket query parameters for presence:
+
+| Parameter | Description |
+|-----------|-------------|
+| `topic` | Topic to subscribe to (required) |
+| `presence` | Set to `"true"` to enable presence |
+| `member_id` | Your member ID (required when presence is enabled) |
+| `member_meta` | JSON-encoded metadata object (optional) |
+
+## SDK Method Reference
+
+| Method | Signature | Description |
+|--------|-----------|-------------|
+| `publish` | `publish(topic, data)` | Publish a string or binary message to a topic |
+| `subscribe` | `subscribe(topic, options?)` | Subscribe to a topic via WebSocket. Returns a `Subscription`. |
+| `topics` | `topics()` | List active topics in the current namespace |
+| `getPresence` | `getPresence(topic)` | Get current presence members for a topic |
+
+### SubscribeOptions
+
+```typescript
+interface SubscribeOptions {
+ onMessage?: (message: PubSubMessage) => void;
+ onError?: (error: Error) => void;
+ onClose?: (code: number, reason: string) => void;
+ presence?: PresenceOptions;
+}
+```
diff --git a/website/src/docs/developer/sdk-reference.mdx b/website/src/docs/developer/sdk-reference.mdx
new file mode 100644
index 0000000..67195ee
--- /dev/null
+++ b/website/src/docs/developer/sdk-reference.mdx
@@ -0,0 +1,911 @@
+# SDK Reference
+
+The Orama TypeScript SDK (`@debros/network-ts-sdk`) provides a unified interface for interacting with all Orama Network services. This reference covers client initialization, all service modules, and their methods.
+
+## Installation
+
+```bash
+npm install @debros/network-ts-sdk
+# or
+pnpm add @debros/network-ts-sdk
+```
+
+## Client Initialization
+
+All interactions with Orama start by calling `createClient()`:
+
+```typescript
+import { createClient } from "@debros/network-ts-sdk";
+
+const client = createClient({
+ baseURL: "https://orama-devnet.network",
+ apiKey: "your-api-key",
+});
+```
+
+### ClientConfig
+
+| Option | Type | Required | Default | Description |
+|--------|------|----------|---------|-------------|
+| `baseURL` | `string` | Yes | -- | Gateway HTTPS URL |
+| `apiKey` | `string` | No | -- | API key for authentication (sent as `X-API-Key` header) |
+| `jwt` | `string` | No | -- | Pre-existing JWT token (sent as `Authorization: Bearer` header) |
+| `timeout` | `number` | No | `60000` | Request timeout in milliseconds |
+| `maxRetries` | `number` | No | `3` | Maximum retry attempts for retryable errors (408, 429, 500, 502, 503, 504) |
+| `retryDelayMs` | `number` | No | `1000` | Base delay between retries (multiplied by attempt number) |
+| `debug` | `boolean` | No | `false` | Enable debug logging (includes SQL queries and args) |
+| `storage` | `StorageAdapter` | No | `MemoryStorage` | Token storage adapter for persisting auth state |
+| `fetch` | `typeof fetch` | No | `globalThis.fetch` | Custom fetch implementation |
+| `wsConfig` | `Partial` | No | -- | WebSocket configuration for PubSub |
+| `functionsConfig` | `FunctionsClientConfig` | No | -- | Functions module configuration (requires `namespace`) |
+| `vaultConfig` | `VaultConfig` | No | -- | Vault module configuration (required for vault access) |
+| `onNetworkError` | `NetworkErrorCallback` | No | -- | Callback invoked on network errors after all retries are exhausted |
+
+### Return Value
+
+`createClient()` returns a `Client` object with service modules:
+
+```typescript
+interface Client {
+ auth: AuthClient;
+ db: DBClient;
+ pubsub: PubSubClient;
+ network: NetworkClient;
+ cache: CacheClient;
+ storage: StorageClient;
+ functions: FunctionsClient;
+ vault: VaultClient | null; // null if no vaultConfig provided
+}
+```
+
+---
+
+## auth
+
+Authentication and token lifecycle management.
+
+### `auth.setApiKey(apiKey: string): void`
+
+Set the API key for all subsequent requests.
+
+### `auth.setJwt(jwt: string): void`
+
+Set the JWT for all subsequent requests.
+
+### `auth.getToken(): string | undefined`
+
+Get the current active auth token (JWT or API key).
+
+### `auth.challenge(params): Promise`
+
+Request a challenge nonce for wallet-based authentication.
+
+```typescript
+const challenge = await client.auth.challenge({
+ wallet: "0x1234...",
+ purpose: "authentication", // optional, default: "authentication"
+ namespace: "my-namespace", // optional, default: "default"
+});
+// Returns: { nonce, wallet, namespace, expires_at }
+```
+
+### `auth.verify(params): Promise`
+
+Verify a wallet signature and receive JWT + API key.
+
+```typescript
+const session = await client.auth.verify({
+ wallet: "0x1234...",
+ nonce: challenge.nonce,
+ signature: "0xsigned...",
+ namespace: "my-namespace", // optional, default: "default"
+ chain_type: "ETH", // "ETH" or "SOL", default: "ETH"
+});
+// Returns: { access_token, refresh_token?, subject, namespace, api_key?, expires_in?, token_type? }
+```
+
+The SDK automatically stores the JWT and API key after verification.
+
+### `auth.getApiKey(params): Promise`
+
+Get or create an API key for a wallet/namespace. Requires a signed challenge.
+
+```typescript
+const result = await client.auth.getApiKey({
+ wallet: "0x1234...",
+ nonce: challenge.nonce,
+ signature: "0xsigned...",
+ namespace: "my-namespace",
+ chain_type: "ETH",
+});
+// Returns: { api_key, namespace, wallet }
+```
+
+### `auth.whoami(): Promise`
+
+Get the currently authenticated user info. Returns `{ authenticated: false }` on failure.
+
+### `auth.refresh(): Promise`
+
+Refresh the current JWT token. Returns the new token.
+
+### `auth.logoutUser(): Promise`
+
+Logout the current user (clears JWT but preserves API key). Use this for user-level logout in apps where the API key is an app-level credential.
+
+### `auth.logout(): Promise`
+
+Full logout -- clears both JWT and API key.
+
+### `auth.clear(): Promise`
+
+Clear all local auth state without making server calls.
+
+---
+
+## db
+
+Interact with distributed RQLite databases.
+
+### `db.exec(sql, args?): Promise`
+
+Execute a write or DDL SQL statement.
+
+```typescript
+await client.db.exec(
+ "INSERT INTO users (name, email) VALUES (?, ?)",
+ ["Alice", "alice@example.com"]
+);
+// Returns: { rows_affected: number, last_insert_id?: number }
+```
+
+### `db.query(sql, args?): Promise`
+
+Execute a SELECT query and return rows.
+
+```typescript
+const users = await client.db.query(
+ "SELECT * FROM users WHERE name = ?",
+ ["Alice"]
+);
+```
+
+### `db.find(table, criteria?, options?): Promise`
+
+Find rows using map-based criteria.
+
+```typescript
+const users = await client.db.find("users", { name: "Alice" }, { limit: 10 });
+```
+
+### `db.findOne(table, criteria): Promise`
+
+Find a single row. Returns `null` if not found.
+
+```typescript
+const user = await client.db.findOne("users", { id: 1 });
+```
+
+### `db.createTable(schema): Promise`
+
+Create a table from a DDL SQL string.
+
+```typescript
+await client.db.createTable(
+ "CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, email TEXT)"
+);
+```
+
+### `db.dropTable(table): Promise`
+
+Drop a table.
+
+```typescript
+await client.db.dropTable("users");
+```
+
+### `db.getSchema(): Promise`
+
+Get the current database schema.
+
+### `db.transaction(ops, returnResults?): Promise`
+
+Execute multiple operations atomically.
+
+```typescript
+const results = await client.db.transaction([
+ { kind: "exec", sql: "INSERT INTO logs (msg) VALUES (?)", args: ["entry"] },
+ { kind: "exec", sql: "UPDATE counters SET count = count + 1 WHERE id = ?", args: [1] },
+]);
+```
+
+Each operation requires a `kind` field: `"exec"` for writes (INSERT, UPDATE, DELETE) or `"query"` for reads (SELECT).
+
+### `db.createQueryBuilder(table): QueryBuilder`
+
+Create a fluent query builder for complex SELECT queries.
+
+```typescript
+const qb = client.db.createQueryBuilder("users");
+const results = await qb
+ .select("id", "name", "email")
+ .where("name = ?", ["Alice"])
+ .leftJoin("orders", "orders.user_id = users.id")
+ .orderBy("name ASC")
+ .limit(10)
+ .offset(0)
+ .getMany();
+```
+
+**QueryBuilder methods:**
+
+| Method | Description |
+|--------|-------------|
+| `.select(...columns)` | Select specific columns |
+| `.where(expr, args?)` | Add a WHERE clause (AND) |
+| `.andWhere(expr, args?)` | Alias for `.where()` |
+| `.orWhere(expr, args?)` | Add a WHERE clause (OR) |
+| `.innerJoin(table, on)` | Add an INNER JOIN |
+| `.leftJoin(table, on)` | Add a LEFT JOIN |
+| `.rightJoin(table, on)` | Add a RIGHT JOIN |
+| `.groupBy(...columns)` | Group by columns |
+| `.orderBy(...columns)` | Order by columns |
+| `.limit(n)` | Limit results |
+| `.offset(n)` | Offset results |
+| `.getMany()` | Execute and return all matching rows |
+| `.getOne()` | Execute and return the first row or `null` |
+| `.count()` | Return the count of matching rows |
+
+### `db.repository(tableName, primaryKey?): Repository`
+
+Create a Repository for entity-based CRUD operations.
+
+```typescript
+const repo = client.db.repository("users", "id");
+
+// Find all
+const users = await repo.find({ name: "Alice" });
+
+// Find one
+const user = await repo.findOne({ id: 1 });
+
+// Save (insert or update based on primary key)
+await repo.save({ name: "Alice", email: "alice@example.com" });
+
+// Remove
+await repo.remove({ id: 1 });
+
+// Use query builder
+const qb = repo.createQueryBuilder();
+```
+
+---
+
+## pubsub
+
+Real-time messaging over WebSockets.
+
+### `pubsub.publish(topic, data): Promise`
+
+Publish a message to a topic via HTTP. Data can be a `string` or `Uint8Array`.
+
+```typescript
+await client.pubsub.publish("chat:room1", JSON.stringify({ text: "Hello!" }));
+```
+
+### `pubsub.topics(): Promise`
+
+List active topics in the current namespace.
+
+```typescript
+const topicList = await client.pubsub.topics();
+```
+
+### `pubsub.getPresence(topic): Promise`
+
+Get current presence members for a topic without subscribing.
+
+```typescript
+const presence = await client.pubsub.getPresence("chat:room1");
+// Returns: { members: PresenceMember[] }
+```
+
+### `pubsub.subscribe(topic, options?): Promise`
+
+Subscribe to a topic via WebSocket. Creates one WebSocket connection per topic.
+
+```typescript
+const sub = await client.pubsub.subscribe("chat:room1", {
+ onMessage: (msg) => {
+ console.log(msg.topic, msg.data, msg.timestamp);
+ },
+ onError: (err) => console.error(err),
+ onClose: (code, reason) => console.log("Closed:", code, reason),
+ presence: {
+ enabled: true,
+ memberId: "user-123",
+ meta: { name: "Alice" },
+ onJoin: (member) => console.log("Joined:", member.memberId),
+ onLeave: (member) => console.log("Left:", member.memberId),
+ },
+});
+
+// Later:
+sub.close();
+```
+
+**Subscription methods:**
+
+| Method | Description |
+|--------|-------------|
+| `.onMessage(handler)` | Register a message handler (returns unsubscribe function) |
+| `.onError(handler)` | Register an error handler |
+| `.onClose(handler)` | Register a close handler |
+| `.getPresence()` | Get current presence members (requires `presence.enabled`) |
+| `.hasPresence()` | Check if presence is enabled |
+| `.isConnected()` | Check if the WebSocket is still connected |
+| `.close()` | Close the subscription and WebSocket |
+
+---
+
+## network
+
+Network health and connectivity.
+
+### `network.health(): Promise