{"version":3,"sources":["../src/errors/base.ts","../src/errors/errors.ts","../src/actions/connection.ts","../src/storage/persistence.ts","../src/config.ts","../src/actions/accounts.ts","../src/actions/messages.ts","../src/actions/transactions.ts","../src/actions/wallets.ts","../src/bridge/WalletEventBridge.ts","../src/registry/WalletRegistry.ts"],"names":["createRialoClient","store","Store","getWallets"],"mappings":"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","file":"index.cjs","sourcesContent":["// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/** biome-ignore-all lint/complexity/noBannedTypes: V8-specific code */\n\n/**\n * Base error class for all frost errors.\n * All errors thrown by frost extend this class.\n */\nexport abstract class FrostError extends Error {\n  public abstract readonly code: string;\n  public readonly walletName?: string;\n\n  public constructor(message: string, walletName?: string, options?: ErrorOptions) {\n    super(message, options);\n    this.name = this.constructor.name;\n    this.walletName = walletName;\n\n    // Maintains proper stack trace in V8 environments (V8-specific, not in standard ES types)\n    const ErrorWithCapture = Error as typeof Error & {\n      captureStackTrace?: (target: object, constructorOpt?: Function) => void;\n    };\n    if (ErrorWithCapture.captureStackTrace) {\n      ErrorWithCapture.captureStackTrace(this, this.constructor);\n    }\n  }\n}\n\n/** Type guard to check if an error is a FrostError */\nexport function isFrostError(error: unknown): error is FrostError {\n  return error instanceof FrostError;\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { FrostError } from \"./base\";\n\n/**\n * Thrown when attempting to use a wallet that hasn't been discovered.\n */\nexport class WalletNotFoundError extends FrostError {\n  public readonly code = \"WALLET_NOT_FOUND\" as const;\n\n  public constructor(walletName: string) {\n    super(`Wallet \"${walletName}\" not found`, walletName);\n  }\n}\n\n/**\n * Thrown when attempting an operation that requires a connected wallet.\n */\nexport class WalletDisconnectedError extends FrostError {\n  public readonly code = \"WALLET_DISCONNECTED\" as const;\n\n  public constructor() {\n    super(\"No wallet connected\");\n  }\n}\n\n/**\n * Thrown when a wallet doesn't support the configured chain.\n */\nexport class UnsupportedChainError extends FrostError {\n  public readonly code = \"UNSUPPORTED_CHAIN\" as const;\n  public readonly chainId: string;\n  public readonly supportedChains: readonly string[];\n\n  public constructor(chainId: string, supportedChains: readonly string[], walletName: string) {\n    super(\n      `Wallet \"${walletName}\" does not support chain \"${chainId}\". ` +\n        `Supported: ${supportedChains.join(\", \")}`,\n      walletName\n    );\n    this.chainId = chainId;\n    this.supportedChains = supportedChains;\n  }\n}\n\n/**\n * Thrown when a wallet doesn't support a required feature.\n */\nexport class UnsupportedFeatureError extends FrostError {\n  public readonly code = \"UNSUPPORTED_FEATURE\" as const;\n  public readonly feature: string;\n\n  public constructor(feature: string, walletName: string) {\n    super(`Wallet \"${walletName}\" does not support feature \"${feature}\"`, walletName);\n    this.feature = feature;\n  }\n}\n\n/**\n * Thrown when wallet connection fails.\n */\nexport class ConnectionFailedError extends FrostError {\n  public readonly code = \"CONNECTION_FAILED\" as const;\n  public readonly reason?: string;\n\n  public constructor(reason: string, walletName: string, cause?: Error) {\n    super(`Failed to connect to \"${walletName}\": ${reason}`, walletName, { cause });\n    this.reason = reason;\n  }\n}\n\n/**\n * Thrown when the persisted session has expired.\n */\nexport class SessionExpiredError extends FrostError {\n  public readonly code = \"SESSION_EXPIRED\" as const;\n  public readonly expiredAt: number;\n\n  public constructor(expiredAt: number) {\n    super(\"Session has expired\");\n    this.expiredAt = expiredAt;\n  }\n}\n\n/**\n * Wrapper for errors thrown by the wallet itself.\n * We don't try to interpret these - just preserve the original error.\n */\nexport class WalletError extends FrostError {\n  public readonly code = \"WALLET_ERROR\" as const;\n  public readonly originalError: unknown;\n\n  public constructor(originalError: unknown, walletName?: string) {\n    const message =\n      originalError instanceof Error ? originalError.message : \"Wallet operation failed\";\n\n    super(message, walletName, {\n      cause: originalError instanceof Error ? originalError : undefined,\n    });\n    this.originalError = originalError;\n  }\n}\n\n/**\n * Thrown when a transaction is confirmed but execution failed on-chain.\n */\nexport class TransactionFailedError extends FrostError {\n  public readonly code = \"TRANSACTION_FAILED\" as const;\n  public readonly signature: string;\n  public readonly reason?: string;\n\n  public constructor(signature: string, reason?: string, walletName?: string) {\n    super(reason ?? \"Transaction execution failed on-chain\", walletName);\n    this.signature = signature;\n    this.reason = reason;\n  }\n}\n\n/** Union of all error codes */\nexport type FrostErrorCode =\n  | \"WALLET_NOT_FOUND\"\n  | \"WALLET_DISCONNECTED\"\n  | \"UNSUPPORTED_CHAIN\"\n  | \"UNSUPPORTED_FEATURE\"\n  | \"CONNECTION_FAILED\"\n  | \"SESSION_EXPIRED\"\n  | \"WALLET_ERROR\"\n  | \"TRANSACTION_FAILED\";\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { Wallet, WalletAccount } from \"@wallet-standard/base\";\nimport type { StandardConnectFeature, StandardDisconnectFeature } from \"@wallet-standard/features\";\nimport type { FrostConfig } from \"../config\";\nimport {\n  ConnectionFailedError,\n  isFrostError,\n  UnsupportedFeatureError,\n  WalletError,\n  WalletNotFoundError,\n} from \"../errors\";\nimport type { ConnectionStatus } from \"../types\";\n\ntype WalletWithConnect = Wallet & {\n  features: {\n    \"standard:connect\"?: StandardConnectFeature[\"standard:connect\"];\n    \"standard:disconnect\"?: StandardDisconnectFeature[\"standard:disconnect\"];\n  };\n};\n\nexport interface ActiveConnection {\n  /** Current connection status */\n  status: ConnectionStatus;\n  /** Target chain ID */\n  chainId: string;\n  /** Connected wallet name (null when disconnected) */\n  walletName: string | null;\n  /** Connected account address (null when disconnected) */\n  accountAddress: string | null;\n  /** Timestamp (epoch Date.now()) when connection was established */\n  connectedAt: number | null;\n  /** Timestamp (epoch Date.now()) of last user activity */\n  lastUsedAt: number;\n}\n\n/**\n * Gets the current connection state synchronously.\n *\n * @param config - Frost configuration\n * @returns Current connection status, wallet, and account info\n */\nexport function getActiveConnection(config: FrostConfig): ActiveConnection {\n  const state = config.store.state;\n  return {\n    status: state.status,\n    chainId: state.chainId,\n    walletName: state.walletName,\n    accountAddress: state.accountAddress,\n    connectedAt: state.connectedAt,\n    lastUsedAt: state.lastUsedAt,\n  };\n}\n\nexport interface ConnectOptions {\n  /** Name of the wallet to connect */\n  walletName: string;\n  /** Attempt silent connection (no popup) - for reconnection */\n  silent?: boolean;\n}\n\nexport interface ConnectResult {\n  /** Name of the connected wallet */\n  walletName: string;\n  /** Address of the connected account */\n  accountAddress: string;\n}\n\n/**\n * Connection mutex to prevent race conditions when connect() is called multiple times.\n * Maps config -> pending connection promise.\n * Uses WeakMap to avoid memory leaks.\n */\nconst pendingConnections: WeakMap<FrostConfig, Map<string, Promise<ConnectResult>>> = new WeakMap();\n\n/**\n * Connects to a wallet.\n *\n * @param config - Frost configuration\n * @param options - Connection options including wallet name\n * @returns Connected wallet name and account address\n * @throws {WalletNotFoundError} If wallet is not registered\n * @throws {UnsupportedFeatureError} If wallet doesn't support connect\n * @throws {ConnectionFailedError} If connection fails or no accounts returned\n */\nexport async function connect(\n  config: FrostConfig,\n  options: ConnectOptions\n): Promise<ConnectResult> {\n  let walletConnections = pendingConnections.get(config);\n  if (!walletConnections) {\n    walletConnections = new Map();\n    pendingConnections.set(config, walletConnections);\n  }\n\n  // Check if there's already a pending connection for THIS wallet\n  const existingConnection = walletConnections.get(options.walletName);\n  if (existingConnection) {\n    return existingConnection; // Return same promise for deduplication\n  }\n\n  const connectionPromise = connectInternal(config, options);\n  walletConnections.set(options.walletName, connectionPromise);\n\n  try {\n    return await connectionPromise;\n  } finally {\n    walletConnections.delete(options.walletName);\n  }\n}\n\n/** Internal connect implementation */\nasync function connectInternal(\n  config: FrostConfig,\n  options: ConnectOptions\n): Promise<ConnectResult> {\n  const { walletName, silent = false } = options;\n  const { store, options: configOpts } = config;\n\n  // Get wallet reference\n  const wallet = store.state._walletRefs.get(walletName) as WalletWithConnect | undefined;\n  if (!wallet) {\n    throw new WalletNotFoundError(walletName);\n  }\n\n  // Update status to connecting\n  store.setState(state => ({\n    ...state,\n    status: \"connecting\",\n    walletName,\n  }));\n\n  try {\n    // Connect via wallet-standard\n    const connectFeature = wallet.features[\"standard:connect\"];\n    if (!connectFeature) {\n      throw new UnsupportedFeatureError(\"standard:connect\", walletName);\n    }\n\n    const result = await connectFeature.connect({ silent });\n\n    if (!result.accounts.length) {\n      throw new ConnectionFailedError(\"No accounts returned\", walletName);\n    }\n\n    const account: WalletAccount = result.accounts[0];\n    const now = Date.now();\n\n    // Update state with connection\n    store.setState(state => {\n      const accounts = new Map(state.accounts);\n      // Store the raw WalletAccount reference inside AccountEntity for wallet-standard operations\n      accounts.set(account.address, {\n        address: account.address,\n        publicKey: new Uint8Array(account.publicKey),\n        walletName,\n        chains: [...account.chains],\n        _raw: account,\n      });\n\n      const wallets = new Map(state.wallets);\n      const existingWallet = wallets.get(walletName);\n      if (existingWallet) {\n        wallets.set(walletName, {\n          ...existingWallet,\n          lastConnectedAt: now,\n        });\n      }\n\n      return {\n        ...state,\n        status: \"connected\",\n        walletName,\n        accountAddress: account.address,\n        connectedAt: now,\n        sessionExpiresAt: now + configOpts.sessionTTL,\n        lastUsedAt: now,\n        userDisconnected: false, // Clear the flag on successful connect\n        accounts,\n        wallets,\n      };\n    });\n\n    // Subscribe to wallet events\n    config._bridge?.subscribeToWallet(wallet);\n\n    return {\n      walletName,\n      accountAddress: account.address,\n    };\n  } catch (error) {\n    // Reset state on failure\n    store.setState(state => ({\n      ...state,\n      status: \"disconnected\",\n      walletName: null,\n      accountAddress: null,\n      connectedAt: null,\n      sessionExpiresAt: null,\n    }));\n\n    // Re-throw FrostErrors as-is, wrap others\n    if (isFrostError(error)) {\n      throw error;\n    }\n    throw new WalletError(error, walletName);\n  }\n}\n\n/**\n * Disconnects from the current wallet.\n *\n * Clears connection state and sets `userDisconnected` to prevent auto-reconnect.\n *\n * @param config - Frost configuration\n */\nexport async function disconnect(config: FrostConfig): Promise<void> {\n  const { store } = config;\n  const { walletName } = store.state;\n\n  if (!walletName) return;\n\n  const wallet = store.state._walletRefs.get(walletName) as WalletWithConnect | undefined;\n\n  // Unsubscribe from wallet events\n  config._bridge?.unsubscribeFromWallet(walletName);\n\n  // Try to disconnect via wallet-standard\n  try {\n    const disconnectFeature = wallet?.features[\"standard:disconnect\"];\n    if (disconnectFeature) {\n      await disconnectFeature.disconnect();\n    }\n  } catch (error) {\n    // Log but don't throw - wallet might already be disconnected\n    console.warn(\"[frost] Wallet disconnect failed:\", error);\n  }\n\n  // Clear connection state (keep wallets for quick reconnect)\n  // Clear accounts as their _raw references are no longer valid after disconnect\n  // Set userDisconnected to prevent auto-reconnect\n  store.setState(state => ({\n    ...state,\n    status: \"disconnected\",\n    walletName: null,\n    accountAddress: null,\n    connectedAt: null,\n    sessionExpiresAt: null,\n    userDisconnected: true,\n    accounts: new Map(),\n  }));\n}\n\n/**\n * Clears any pending connection promises for the given config.\n * Called during config.destroy() to clean up resources.\n *\n * @param config - Frost configuration\n * @internal\n */\nexport function clearPendingConnections(config: FrostConfig): void {\n  const walletConnections = pendingConnections.get(config);\n  if (walletConnections) {\n    walletConnections.clear();\n    pendingConnections.delete(config);\n  }\n}\n\n/**\n * Attempts silent reconnection to previously connected wallet.\n *\n * @param config - Frost configuration\n * @returns Connection result if successful, null if reconnection not possible\n */\nexport async function reconnect(config: FrostConfig): Promise<ConnectResult | null> {\n  const { store } = config;\n  const { walletName, sessionExpiresAt, userDisconnected } = store.state;\n\n  // No previous connection\n  if (!walletName) return null;\n\n  // User explicitly disconnected - don't auto-reconnect\n  if (userDisconnected) return null;\n\n  // Session expired\n  if (sessionExpiresAt && sessionExpiresAt < Date.now()) {\n    store.setState(state => ({\n      ...state,\n      status: \"disconnected\",\n      walletName: null,\n      accountAddress: null,\n      connectedAt: null,\n      sessionExpiresAt: null,\n    }));\n    return null;\n  }\n\n  // Update status\n  store.setState(state => ({ ...state, status: \"reconnecting\" }));\n\n  try {\n    // Wait for wallet to be discovered\n    const wallet = await config._registry?.waitForWallet(walletName, { timeout: 5000 });\n\n    if (!wallet) {\n      throw new Error(\"Wallet not found\");\n    }\n\n    return await connect(config, { walletName, silent: true });\n  } catch {\n    // Silent reconnect failed - reset to disconnected\n    store.setState(state => ({\n      ...state,\n      status: \"disconnected\",\n      walletName: null,\n      accountAddress: null,\n      connectedAt: null,\n      sessionExpiresAt: null,\n    }));\n    return null;\n  }\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { IdentifierString } from \"@wallet-standard/base\";\nimport type { FrostAppState } from \"../types\";\n\n/**\n * Storage version - increment when schema changes.\n */\nconst STORAGE_VERSION = 1;\n\ninterface StorageSchema {\n  version: number;\n  state: SerializedState;\n}\n\n/**\n * Serialized state for persistence.\n *\n * Design decisions:\n * - status is NOT persisted: Always loads as \"disconnected\", reconnect() handles re-establishing\n * - chainId is NOT persisted: Derived from client.getChainIdentifier() at runtime\n * - wallet icons are NOT persisted: Reduces storage size, loaded fresh from wallet-standard\n */\ninterface SerializedState {\n  walletName: string | null;\n  accountAddress: string | null;\n  connectedAt: number | null;\n  sessionExpiresAt: number | null;\n  lastUsedAt: number;\n  userDisconnected: boolean;\n  wallets: [string, SerializedWallet][];\n  accounts: [string, SerializedAccount][];\n}\n\ninterface SerializedWallet {\n  name: string;\n  // icon intentionally excluded - loaded fresh from wallet-standard on discovery\n  chains: string[];\n  features: string[];\n  installedVersion?: string;\n  priority?: number;\n  lastConnectedAt?: number;\n}\n\ninterface SerializedAccount {\n  address: string;\n  publicKey: number[];\n  walletName: string;\n  chains: string[];\n  label?: string;\n}\n\n/**\n * Creates a persistence manager for a specific config instance.\n * This encapsulates the debounce timeout per-config to avoid shared state issues.\n */\nexport interface PersistenceManager {\n  persist(state: FrostAppState): void;\n  clear(): void;\n  destroy(): void;\n}\n\nexport function createPersistenceManager(key: string, storage: Storage): PersistenceManager {\n  let persistTimeout: ReturnType<typeof setTimeout> | null = null;\n\n  return {\n    persist(state: FrostAppState): void {\n      if (persistTimeout) {\n        clearTimeout(persistTimeout);\n      }\n\n      persistTimeout = setTimeout(() => {\n        try {\n          const serialized: SerializedState = {\n            walletName: state.walletName,\n            accountAddress: state.accountAddress,\n            connectedAt: state.connectedAt,\n            sessionExpiresAt: state.sessionExpiresAt,\n            lastUsedAt: state.lastUsedAt,\n            userDisconnected: state.userDisconnected,\n            wallets: Array.from(state.wallets.entries()).map(([k, v]) => [\n              k,\n              {\n                name: v.name,\n                // icon intentionally excluded\n                chains: [...v.chains],\n                features: [...v.features],\n                installedVersion: v.installedVersion,\n                priority: v.priority,\n                lastConnectedAt: v.lastConnectedAt,\n              },\n            ]),\n            accounts: Array.from(state.accounts.entries()).map(([k, v]) => [\n              k,\n              {\n                address: v.address,\n                publicKey: Array.from(v.publicKey),\n                walletName: v.walletName,\n                chains: [...v.chains],\n                label: v.label,\n              },\n            ]),\n          };\n\n          const schema: StorageSchema = {\n            version: STORAGE_VERSION,\n            state: serialized,\n          };\n\n          storage.setItem(key, JSON.stringify(schema));\n        } catch (error) {\n          // Storage might be full or unavailable\n          console.error(\"[Frost] Failed to persist state:\", error);\n        }\n      }, 250); // 250ms debounce\n    },\n\n    clear(): void {\n      storage.removeItem(key);\n    },\n\n    destroy(): void {\n      if (persistTimeout) {\n        clearTimeout(persistTimeout);\n        persistTimeout = null;\n      }\n    },\n  };\n}\n\n/**\n * Load persisted state from storage.\n *\n * Important behaviors:\n * - Always returns status as \"disconnected\" - reconnect() handles re-establishing connection\n * - Validates session expiry - returns null if session has expired\n * - chainId is not loaded - must be provided separately from client\n */\nexport function loadPersistedState(\n  key: string,\n  storage: Storage,\n  chainId: string\n): Omit<FrostAppState, \"_walletRefs\"> | null {\n  try {\n    const raw = storage.getItem(key);\n    if (!raw) return null;\n\n    const parsed: StorageSchema = JSON.parse(raw);\n\n    // Version check - clear storage on version mismatch\n    if (parsed.version !== STORAGE_VERSION) {\n      storage.removeItem(key);\n      return null;\n    }\n\n    const { state } = parsed;\n\n    // Validate session expiry - if expired, don't restore connection state\n    const now = Date.now();\n    const sessionExpired = state.sessionExpiresAt && state.sessionExpiresAt < now;\n\n    if (sessionExpired) {\n      // Session expired - return state but clear connection-related fields\n      return {\n        status: \"disconnected\",\n        chainId,\n        walletName: null,\n        accountAddress: null,\n        connectedAt: null,\n        sessionExpiresAt: null,\n        lastUsedAt: state.lastUsedAt,\n        userDisconnected: false,\n        wallets: new Map(\n          state.wallets.map(([k, v]) => [\n            k,\n            {\n              ...v,\n              // icon will be populated when wallet is rediscovered\n              chains: (v.chains ?? []) as IdentifierString[],\n              features: v.features ?? [],\n            },\n          ])\n        ),\n        accounts: new Map(), // Clear accounts on session expiry\n      };\n    }\n\n    return {\n      // Always load as disconnected - reconnect() will re-establish if appropriate\n      status: \"disconnected\",\n      // chainId comes from client, not persistence\n      chainId,\n      walletName: state.walletName,\n      accountAddress: state.accountAddress,\n      connectedAt: state.connectedAt,\n      sessionExpiresAt: state.sessionExpiresAt,\n      lastUsedAt: state.lastUsedAt,\n      userDisconnected: state.userDisconnected ?? false,\n      wallets: new Map(\n        state.wallets.map(([k, v]) => [\n          k,\n          {\n            ...v,\n            // icon will be populated when wallet is rediscovered\n            chains: (v.chains ?? []) as IdentifierString[],\n            features: v.features ?? [],\n          },\n        ])\n      ),\n      accounts: new Map(\n        state.accounts.map(([k, v]) => [\n          k,\n          {\n            ...v,\n            publicKey: new Uint8Array(v.publicKey),\n            chains: (v.chains ?? []) as IdentifierString[],\n            // Note: _raw is not persisted - will be populated on reconnect\n          },\n        ])\n      ),\n    };\n  } catch {\n    return null;\n  }\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { createRialoClient, type RialoClient, type RialoClientConfig } from \"@rialo/ts-cdk\";\nimport { Store } from \"@tanstack/store\";\nimport type { Wallet } from \"@wallet-standard/base\";\nimport { clearPendingConnections } from \"./actions/connection\";\nimport type { WalletEventBridge } from \"./bridge/WalletEventBridge\";\nimport type { WalletRegistry } from \"./registry/WalletRegistry\";\nimport {\n  createPersistenceManager,\n  loadPersistedState,\n  type PersistenceManager,\n} from \"./storage/persistence\";\nimport type { FrostAppState } from \"./types\";\n\nexport interface CreateConfigOptions {\n  /**\n   * Client configuration for the RPC client.\n   *\n   * Use one of the preset chains with `getDefaultRialoClientConfig()` or create\n   * a custom config with your own chain definition and transport settings.\n   *\n   * @example\n   * ```ts\n   * import { getDefaultRialoClientConfig } from '@rialo/ts-cdk';\n   *\n   * // Using preset config\n   * createConfig({ clientConfig: getDefaultRialoClientConfig('devnet') })\n   *\n   * // Using custom RPC URL\n   * createConfig({\n   *   clientConfig: {\n   *     chain: {\n   *       id: 'rialo:mainnet',\n   *       name: 'Mainnet',\n   *       rpcUrl: 'https://my-quicknode-endpoint.com',\n   *     },\n   *     transport: { timeout: 30000 }\n   *   }\n   * })\n   * ```\n   */\n  clientConfig: RialoClientConfig;\n  /** Auto-reconnect on page load (default: true) */\n  autoConnect?: boolean;\n  /** Session TTL in milliseconds (default: 7 days) */\n  sessionTTL?: number;\n  /** Storage key prefix (default: 'rialo-frost') */\n  storageKey?: string;\n  /** Custom storage implementation (default: localStorage) */\n  storage?: Storage | null;\n}\n\n/** Required config options after defaults are applied */\nexport type ResolvedConfigOptions = Readonly<Required<CreateConfigOptions>>;\n\nexport interface FrostConfig {\n  /** Core reactive store */\n  readonly store: Store<FrostAppState>;\n\n  /**\n   * RPC client for blockchain queries and transactions.\n   * Use `switchChain()` to switch to a different chain.\n   */\n  readonly client: RialoClient;\n\n  /**\n   * Get the current chain identifier from the client.\n   * This is the single source of truth for chain ID.\n   */\n  getChainId(): string;\n\n  /**\n   * Switch to a different chain/network.\n   * Creates a new RPC client and updates the store's chainId.\n   *\n   * @param clientConfig - New client configuration (chain, endpoint, transport)\n   */\n  switchChain(clientConfig: RialoClientConfig): void;\n\n  /** Internal: Wallet discovery service */\n  _registry: WalletRegistry | null;\n\n  /** Internal: Wallet event handler */\n  _bridge: WalletEventBridge | null;\n\n  /** Internal: Persistence manager */\n  _persistence: PersistenceManager | null;\n\n  /** Resolved configuration options */\n  readonly options: ResolvedConfigOptions;\n\n  /** Cleanup all subscriptions and resources */\n  destroy(): void;\n}\n\nconst DEFAULT_OPTIONS: Omit<Required<CreateConfigOptions>, \"clientConfig\"> = {\n  autoConnect: true,\n  sessionTTL: 7 * 24 * 60 * 60 * 1000, // 7 days\n  storageKey: \"rialo-frost\",\n  storage: typeof window !== \"undefined\" ? localStorage : null,\n};\n\n/**\n * Creates a Frost configuration object.\n *\n * **Important:** Create the config outside of React components to ensure\n * it's only created once and remains stable across re-renders.\n *\n * @param options - Configuration options including client config and optional settings\n * @returns A Frost configuration object to be passed to `FrostProvider`\n *\n * @example\n * ```ts\n * import { createConfig, getDefaultRialoClientConfig } from '@rialo/frost';\n *\n * export const config = createConfig({\n *   clientConfig: getDefaultRialoClientConfig('devnet'),\n *   autoConnect: true,\n * });\n * ```\n */\nexport function createConfig(options: CreateConfigOptions): FrostConfig {\n  const opts: ResolvedConfigOptions = { ...DEFAULT_OPTIONS, ...options };\n\n  // Create initial RialoClient for blockchain queries and transactions\n  let client = createRialoClient(opts.clientConfig);\n\n  // Get chain ID from client config (single source of truth)\n  const chainId = opts.clientConfig.chain.id;\n\n  // Create persistence manager (encapsulates debounce per-config)\n  const persistence = opts.storage ? createPersistenceManager(opts.storageKey, opts.storage) : null;\n\n  // Load persisted state or create initial state\n  const persisted = opts.storage\n    ? loadPersistedState(opts.storageKey, opts.storage, chainId)\n    : null;\n\n  const initialState: FrostAppState = persisted\n    ? { ...persisted, _walletRefs: new Map<string, Wallet>() }\n    : {\n        status: \"disconnected\",\n        chainId,\n        walletName: null,\n        accountAddress: null,\n        connectedAt: null,\n        sessionExpiresAt: null,\n        lastUsedAt: Date.now(),\n        userDisconnected: false,\n        wallets: new Map(),\n        accounts: new Map(),\n        _walletRefs: new Map<string, Wallet>(),\n      };\n\n  // Create main store with persistence\n  const store = new Store<FrostAppState>(initialState, {\n    onUpdate: (): void => {\n      persistence?.persist(store.state);\n    },\n  });\n\n  const config: FrostConfig = {\n    store,\n    get client(): RialoClient {\n      return client;\n    },\n    getChainId(): string {\n      return store.state.chainId;\n    },\n    switchChain(clientConfig: RialoClientConfig): void {\n      // Create new client with the new config\n      client = createRialoClient(clientConfig);\n\n      // Update chainId in state (derived from client config)\n      store.setState(state => ({\n        ...state,\n        chainId: clientConfig.chain.id,\n      }));\n    },\n    _registry: null, // Will be initialized by initializeConfig\n    _bridge: null, // Will be initialized by initializeConfig\n    _persistence: persistence,\n    options: opts,\n    destroy(): void {\n      // Clear any pending connection promises\n      clearPendingConnections(config);\n\n      // Cleanup internal services\n      config._registry?.destroy();\n      config._bridge?.destroy();\n      config._persistence?.destroy();\n    },\n  };\n\n  return config;\n}\n\n/**\n * Initializes wallet discovery and event handling for the config.\n *\n * Called internally by `FrostProvider`. You typically don't need to call this directly.\n *\n * @param config - The Frost configuration object\n * @param registry - Wallet registry for discovering available wallets\n * @param bridge - Event bridge for handling wallet events\n * @internal\n */\nexport function initializeConfig(\n  config: FrostConfig,\n  registry: WalletRegistry,\n  bridge: WalletEventBridge\n): void {\n  config._registry = registry;\n  config._bridge = bridge;\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { FrostConfig } from \"../config\";\nimport type { AccountEntity } from \"../types\";\n\n/**\n * Gets all known accounts.\n *\n * @param config - Frost configuration\n * @returns Array of account entities\n */\nexport function getAccounts(config: FrostConfig): AccountEntity[] {\n  return Array.from(config.store.state.accounts.values());\n}\n\n/**\n * Gets the currently active (connected) account.\n *\n * @param config - Frost configuration\n * @returns Active account or null if not connected\n */\nexport function getActiveAccount(config: FrostConfig): AccountEntity | null {\n  const { accountAddress, accounts } = config.store.state;\n  if (!accountAddress) return null;\n  return accounts.get(accountAddress) ?? null;\n}\n\n/**\n * Gets a specific account by address.\n *\n * @param config - Frost configuration\n * @param address - Account address to retrieve\n * @returns Account entity or undefined if not found\n */\nexport function getAccount(config: FrostConfig, address: string): AccountEntity | undefined {\n  return config.store.state.accounts.get(address);\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { RialoSignMessageFeature } from \"@rialo/wallet-standard\";\nimport type { Wallet } from \"@wallet-standard/base\";\nimport type { FrostConfig } from \"../config\";\nimport {\n  isFrostError,\n  UnsupportedFeatureError,\n  WalletDisconnectedError,\n  WalletError,\n  WalletNotFoundError,\n} from \"../errors\";\n\ntype WalletWithMessageFeatures = Wallet & {\n  features: {\n    \"rialo:signMessage\"?: RialoSignMessageFeature[\"rialo:signMessage\"];\n  };\n};\n\nexport interface SignMessageOptions {\n  /** Message to sign (string will be UTF-8 encoded) */\n  message: string | Uint8Array;\n}\n\nexport interface SignMessageResult {\n  /** Message signature */\n  signature: Uint8Array;\n  /** Signed message bytes */\n  signedMessage: Uint8Array;\n}\n\n/**\n * Signs an arbitrary message.\n *\n * @param config - Frost configuration\n * @param options - Message to sign (string or bytes)\n * @returns Signature and signed message bytes\n * @throws {WalletDisconnectedError} If no wallet connected\n * @throws {UnsupportedFeatureError} If wallet doesn't support signing\n */\nexport async function signMessage(\n  config: FrostConfig,\n  options: SignMessageOptions\n): Promise<SignMessageResult> {\n  const { store } = config;\n  const { walletName, accountAddress } = store.state;\n\n  if (!walletName || !accountAddress) {\n    throw new WalletDisconnectedError();\n  }\n\n  const wallet = store.state._walletRefs.get(walletName) as WalletWithMessageFeatures | undefined;\n  if (!wallet) {\n    throw new WalletNotFoundError(walletName);\n  }\n\n  const signFeature = wallet.features[\"rialo:signMessage\"];\n  if (!signFeature) {\n    throw new UnsupportedFeatureError(\"rialo:signMessage\", walletName);\n  }\n\n  const messageBytes =\n    typeof options.message === \"string\"\n      ? new TextEncoder().encode(options.message)\n      : options.message;\n\n  // Get the account entity with raw wallet-standard reference\n  const account = store.state.accounts.get(accountAddress);\n  if (!account?._raw) {\n    throw new WalletDisconnectedError();\n  }\n\n  try {\n    const results = await signFeature.signMessage({\n      account: account._raw,\n      message: messageBytes,\n    });\n\n    store.setState(state => ({\n      ...state,\n      lastUsedAt: Date.now(),\n    }));\n\n    return {\n      signature: results[0].signature,\n      signedMessage: results[0].signedMessage,\n    };\n  } catch (error) {\n    if (isFrostError(error)) {\n      throw error;\n    }\n    throw new WalletError(error, walletName);\n  }\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { SendAndConfirmOptions as RpcSendAndConfirmOptions } from \"@rialo/ts-cdk\";\nimport type {\n  RialoSignAndSendTransactionFeature,\n  RialoSignTransactionFeature,\n} from \"@rialo/wallet-standard\";\nimport type { IdentifierString, Wallet } from \"@wallet-standard/base\";\nimport type { FrostConfig } from \"../config\";\nimport {\n  isFrostError,\n  TransactionFailedError,\n  UnsupportedFeatureError,\n  WalletDisconnectedError,\n  WalletError,\n  WalletNotFoundError,\n} from \"../errors\";\n\ntype WalletWithTransactionFeatures = Wallet & {\n  features: {\n    \"rialo:signTransaction\"?: RialoSignTransactionFeature[\"rialo:signTransaction\"];\n    \"rialo:signAndSendTransaction\"?: RialoSignAndSendTransactionFeature[\"rialo:signAndSendTransaction\"];\n  };\n};\n\nexport interface SignTransactionOptions {\n  /** Transaction bytes or object with serialize method */\n  transaction: Uint8Array | { serialize(): Uint8Array };\n}\n\nexport interface SignTransactionResult {\n  /** Fully signed transaction bytes */\n  signedTransaction: Uint8Array;\n}\n\n/**\n * Signs a transaction without submitting it.\n *\n * @param config - Frost configuration\n * @param options - Transaction to sign\n * @returns Signed transaction bytes\n * @throws {WalletDisconnectedError} If no wallet connected\n * @throws {UnsupportedFeatureError} If wallet doesn't support signing\n */\nexport async function signTransaction(\n  config: FrostConfig,\n  options: SignTransactionOptions\n): Promise<SignTransactionResult> {\n  const { store } = config;\n  const { walletName, accountAddress, chainId } = store.state;\n\n  if (!walletName || !accountAddress) {\n    throw new WalletDisconnectedError();\n  }\n\n  const wallet = store.state._walletRefs.get(walletName) as\n    | WalletWithTransactionFeatures\n    | undefined;\n  if (!wallet) {\n    throw new WalletNotFoundError(walletName);\n  }\n\n  const signFeature = wallet.features[\"rialo:signTransaction\"];\n  if (!signFeature) {\n    throw new UnsupportedFeatureError(\"rialo:signTransaction\", walletName);\n  }\n\n  const txBytes =\n    \"serialize\" in options.transaction ? options.transaction.serialize() : options.transaction;\n\n  // Get the account entity with raw wallet-standard reference\n  const account = store.state.accounts.get(accountAddress);\n  if (!account?._raw) {\n    throw new WalletDisconnectedError();\n  }\n\n  try {\n    const results = await signFeature.signTransaction({\n      account: account._raw,\n      transaction: txBytes,\n      chain: chainId as IdentifierString,\n    });\n\n    // Update last used timestamp\n    store.setState(state => ({\n      ...state,\n      lastUsedAt: Date.now(),\n    }));\n\n    return {\n      signedTransaction: results[0].signedTransaction,\n    };\n  } catch (error) {\n    if (isFrostError(error)) {\n      throw error;\n    }\n    throw new WalletError(error, walletName);\n  }\n}\n\nexport interface SendTransactionType {\n  /** Transaction bytes or object with serialize method */\n  transaction: Uint8Array | { serialize(): Uint8Array };\n}\n\nexport interface SendTransactionResult {\n  /** Transaction signature */\n  signature: Uint8Array;\n}\n\n/**\n * Signs and sends a transaction using the wallet's built-in send feature.\n *\n * @param config - Frost configuration\n * @param options - Transaction to sign and send\n * @returns Transaction signature\n * @throws {WalletDisconnectedError} If no wallet connected\n * @throws {UnsupportedFeatureError} If wallet doesn't support signAndSend\n */\nexport async function sendTransaction(\n  config: FrostConfig,\n  options: SendTransactionType\n): Promise<SendTransactionResult> {\n  const { store } = config;\n  const { walletName, accountAddress, chainId } = store.state;\n\n  if (!walletName || !accountAddress) {\n    throw new WalletDisconnectedError();\n  }\n\n  const wallet = store.state._walletRefs.get(walletName) as\n    | WalletWithTransactionFeatures\n    | undefined;\n  if (!wallet) {\n    throw new WalletNotFoundError(walletName);\n  }\n\n  const sendFeature = wallet.features[\"rialo:signAndSendTransaction\"];\n  if (!sendFeature) {\n    throw new UnsupportedFeatureError(\"rialo:signAndSendTransaction\", walletName);\n  }\n\n  const txBytes =\n    \"serialize\" in options.transaction ? options.transaction.serialize() : options.transaction;\n\n  // Get the account entity with raw wallet-standard reference\n  const account = store.state.accounts.get(accountAddress);\n  if (!account?._raw) {\n    throw new WalletDisconnectedError();\n  }\n\n  try {\n    const results = await sendFeature.signAndSendTransaction({\n      account: account._raw,\n      transaction: txBytes,\n      chain: chainId as IdentifierString,\n    });\n\n    // Update last used timestamp\n    store.setState(state => ({\n      ...state,\n      lastUsedAt: Date.now(),\n    }));\n\n    return {\n      signature: results[0].signature,\n    };\n  } catch (error) {\n    if (isFrostError(error)) {\n      throw error;\n    }\n    throw new WalletError(error, walletName);\n  }\n}\n\nexport interface SignAndSendTransactionOptions {\n  /** Transaction bytes or object with serialize method */\n  transaction: Uint8Array | { serialize(): Uint8Array };\n  /** RPC send and confirm options (skipPreflight, maxRetries, confirmMaxRetries, confirmRetryDelayMs) */\n  sendOptions?: RpcSendAndConfirmOptions;\n}\n\nexport interface SignAndSendTransactionResult {\n  /** Transaction signature (base58 string) */\n  signature: string;\n}\n\n/**\n * Sign a transaction with the wallet, send it via Frost's RPC client, and wait for confirmation.\n *\n * This provides more control over transaction submission compared to sendTransaction,\n * as it uses Frost's own RPC client instead of the wallet's built-in send.\n * This is useful when you want to:\n * - Use a custom RPC URL (configured via ChainDefinition.rpcUrl)\n * - Have more control over retry logic and confirmation\n * - Not trust the wallet's send implementation\n *\n * @returns Confirmed transaction details including signature and execution status\n */\nexport async function signAndSendTransaction(\n  config: FrostConfig,\n  options: SignAndSendTransactionOptions\n): Promise<SignAndSendTransactionResult> {\n  // First, sign the transaction using the wallet\n  const { signedTransaction } = await signTransaction(config, {\n    transaction: options.transaction,\n  });\n\n  // Then send and confirm via Frost's RPC client\n  try {\n    const result = await config.client.sendAndConfirmTransaction(\n      signedTransaction,\n      options.sendOptions\n    );\n\n    // Update last used timestamp\n    config.store.setState(state => ({\n      ...state,\n      lastUsedAt: Date.now(),\n    }));\n\n    // Check if transaction execution failed on-chain\n    if (!result.executed) {\n      throw new TransactionFailedError(\n        result.signature,\n        result.err,\n        config.store.state.walletName ?? undefined\n      );\n    }\n\n    return { signature: result.signature };\n  } catch (error) {\n    if (isFrostError(error)) {\n      throw error;\n    }\n    throw new WalletError(error, config.store.state.walletName ?? \"unknown\");\n  }\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { IdentifierString } from \"@wallet-standard/base\";\nimport type { FrostConfig } from \"../config\";\nimport type { WalletEntity } from \"../types\";\n\n/**\n * Gets all discovered wallets.\n *\n * @param config - Frost configuration\n * @returns Array of wallet entities\n */\nexport function getWallets(config: FrostConfig): WalletEntity[] {\n  return Array.from(config.store.state.wallets.values());\n}\n\n/**\n * Gets wallets sorted by priority (higher first), then by last connected time.\n *\n * @param config - Frost configuration\n * @returns Sorted array of wallet entities\n */\nexport function getSortedWallets(config: FrostConfig): WalletEntity[] {\n  return Array.from(config.store.state.wallets.values()).sort((a, b) => {\n    const priorityDiff = (b.priority ?? 0) - (a.priority ?? 0);\n    if (priorityDiff !== 0) return priorityDiff;\n    return (b.lastConnectedAt ?? 0) - (a.lastConnectedAt ?? 0);\n  });\n}\n\n/**\n * Gets a specific wallet by name.\n *\n * @param config - Frost configuration\n * @param walletName - Name of the wallet to retrieve\n * @returns Wallet entity or undefined if not found\n */\nexport function getWallet(config: FrostConfig, walletName: string): WalletEntity | undefined {\n  return config.store.state.wallets.get(walletName);\n}\n\n/**\n * Checks if a wallet supports a specific feature.\n *\n * @param config - Frost configuration\n * @param walletName - Name of the wallet\n * @param feature - Feature identifier (e.g., \"rialo:signTransaction\")\n * @returns True if the wallet supports the feature\n */\nexport function hasFeature(config: FrostConfig, walletName: string, feature: string): boolean {\n  const wallet = config.store.state.wallets.get(walletName);\n  return wallet?.features.includes(feature) ?? false;\n}\n\n/**\n * Checks if a wallet supports the currently configured chain.\n *\n * @param config - Frost configuration\n * @param walletName - Name of the wallet\n * @returns True if the wallet supports the current chain\n */\nexport function supportsChain(config: FrostConfig, walletName: string): boolean {\n  const wallet = config.store.state.wallets.get(walletName);\n  const chainId = config.store.state.chainId as IdentifierString;\n  return wallet?.chains.includes(chainId) ?? false;\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { Wallet, WalletAccount } from \"@wallet-standard/base\";\nimport type { StandardEventsFeature } from \"@wallet-standard/features\";\nimport type { FrostConfig } from \"../config\";\n\ntype WalletWithEvents = Wallet & {\n  features: {\n    \"standard:events\"?: StandardEventsFeature[\"standard:events\"];\n  };\n};\n\ninterface WalletChangeEvent {\n  accounts?: readonly WalletAccount[];\n}\n\nexport class WalletEventBridge {\n  private readonly config: FrostConfig;\n  private readonly subscriptions = new Map<string, () => void>();\n\n  public constructor(config: FrostConfig) {\n    this.config = config;\n  }\n\n  public subscribeToWallet(wallet: Wallet): void {\n    const walletWithEvents = wallet as WalletWithEvents;\n    const eventsFeature = walletWithEvents.features[\"standard:events\"];\n    if (!eventsFeature) return;\n\n    const unsubscribe = eventsFeature.on(\"change\", (event: WalletChangeEvent) => {\n      // Handle account changes\n      if (event.accounts) {\n        this.handleAccountChange(wallet.name, event.accounts);\n      }\n    });\n\n    this.subscriptions.set(wallet.name, unsubscribe);\n  }\n\n  public unsubscribeFromWallet(walletName: string): void {\n    const unsubscribe = this.subscriptions.get(walletName);\n    if (unsubscribe) {\n      unsubscribe();\n      this.subscriptions.delete(walletName);\n    }\n  }\n\n  private handleAccountChange(walletName: string, accounts: readonly WalletAccount[]): void {\n    const state = this.config.store.state;\n\n    // Only process if this is our connected wallet\n    if (state.walletName !== walletName) return;\n\n    if (accounts.length === 0) {\n      // All accounts removed - disconnect\n      this.config.store.setState(s => ({\n        ...s,\n        status: \"disconnected\",\n        walletName: null,\n        accountAddress: null,\n        connectedAt: null,\n        sessionExpiresAt: null,\n      }));\n      return;\n    }\n\n    // Update to new account (single account model)\n    const newAccount = accounts[0];\n\n    this.config.store.setState(s => {\n      const accountsMap = new Map(s.accounts);\n      // Include the raw WalletAccount reference for wallet-standard operations\n      accountsMap.set(newAccount.address, {\n        address: newAccount.address,\n        publicKey: new Uint8Array(newAccount.publicKey),\n        walletName,\n        chains: [...newAccount.chains],\n        _raw: newAccount,\n      });\n\n      return {\n        ...s,\n        accountAddress: newAccount.address,\n        lastUsedAt: Date.now(),\n        accounts: accountsMap,\n      };\n    });\n  }\n\n  public destroy(): void {\n    for (const unsubscribe of this.subscriptions.values()) {\n      unsubscribe();\n    }\n    this.subscriptions.clear();\n  }\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { getWallets } from \"@wallet-standard/app\";\nimport type { Wallet } from \"@wallet-standard/base\";\nimport type { FrostConfig } from \"../config\";\nimport type { WalletEntity } from \"../types\";\n\nconst RIALO_CHAIN_PREFIX = \"rialo:\";\n\nexport class WalletRegistry {\n  private readonly config: FrostConfig;\n  private unsubscribe?: () => void;\n  private readyPromise: Promise<void>;\n  private readyResolve!: () => void;\n\n  public constructor(config: FrostConfig) {\n    this.config = config;\n    this.readyPromise = new Promise(resolve => {\n      this.readyResolve = resolve;\n    });\n    this.initialize();\n  }\n\n  private initialize(): void {\n    // SSR guard\n    if (typeof window === \"undefined\") {\n      this.readyResolve();\n      return;\n    }\n    const { get, on } = getWallets();\n\n    // Register existing wallets\n    const existing = get();\n    if (existing.length > 0) {\n      let hasRialoWallet = false;\n      for (const wallet of existing) {\n        if (this.registerWallet(wallet)) {\n          hasRialoWallet = true;\n        }\n      }\n      if (hasRialoWallet) {\n        this.readyResolve();\n      }\n    }\n\n    // Listen for wallet registration/unregistration events\n    const unsubscribeRegister = on(\"register\", wallet => {\n      if (this.registerWallet(wallet)) {\n        this.readyResolve();\n      }\n    });\n\n    const unsubscribeUnregister = on(\"unregister\", wallet => {\n      this.unregisterWallet(wallet.name);\n    });\n\n    this.unsubscribe = (): void => {\n      unsubscribeRegister();\n      unsubscribeUnregister();\n    };\n\n    // Resolve ready after timeout if no wallets found (allows app to proceed)\n    setTimeout(() => this.readyResolve(), 1000);\n  }\n\n  /**\n   * Register a wallet if it supports Rialo chains\n   * @returns true if wallet was registered (supports Rialo)\n   */\n  private registerWallet(wallet: Wallet): boolean {\n    // Only register Rialo-compatible wallets\n    if (!wallet.chains.some(c => c.startsWith(RIALO_CHAIN_PREFIX))) {\n      return false;\n    }\n\n    const entity: WalletEntity = {\n      name: wallet.name,\n      icon: wallet.icon,\n      chains: [...wallet.chains],\n      features: Object.keys(wallet.features),\n      installedVersion: wallet.version,\n    };\n\n    this.config.store.setState(state => {\n      const wallets = new Map(state.wallets);\n      const existing = wallets.get(wallet.name);\n\n      // Preserve user data like lastConnectedAt and priority\n      wallets.set(wallet.name, {\n        ...entity,\n        lastConnectedAt: existing?.lastConnectedAt,\n        priority: existing?.priority,\n      });\n\n      const _walletRefs = new Map(state._walletRefs);\n      _walletRefs.set(wallet.name, wallet);\n\n      return { ...state, wallets, _walletRefs };\n    });\n\n    return true;\n  }\n\n  private unregisterWallet(walletName: string): void {\n    this.config.store.setState(state => {\n      const wallets = new Map(state.wallets);\n      wallets.delete(walletName);\n\n      const _walletRefs = new Map(state._walletRefs);\n      _walletRefs.delete(walletName);\n\n      // If this was the connected wallet, disconnect\n      const shouldDisconnect = state.walletName === walletName;\n\n      return {\n        ...state,\n        wallets,\n        _walletRefs,\n        ...(shouldDisconnect && {\n          status: \"disconnected\" as const,\n          walletName: null,\n          accountAddress: null,\n          connectedAt: null,\n          sessionExpiresAt: null,\n        }),\n      };\n    });\n  }\n\n  /** Wait for a specific wallet to be discovered */\n  public waitForWallet(name: string, options?: { timeout?: number }): Promise<Wallet | null> {\n    const timeout = options?.timeout ?? 5000;\n\n    // Check if already discovered\n    const existing = this.config.store.state._walletRefs.get(name);\n    if (existing) return Promise.resolve(existing);\n\n    return new Promise(resolve => {\n      const timeoutId = setTimeout(() => {\n        unsubscribe();\n        resolve(null);\n      }, timeout);\n\n      const unsubscribe = this.config.store.subscribe(({ currentVal }) => {\n        const wallet = currentVal._walletRefs.get(name);\n        if (wallet) {\n          clearTimeout(timeoutId);\n          unsubscribe();\n          resolve(wallet);\n        }\n      });\n    });\n  }\n\n  /** Promise that resolves when at least one Rialo wallet is discovered */\n  public get ready(): Promise<void> {\n    return this.readyPromise;\n  }\n\n  /** Check if any wallets have been discovered */\n  public get isReady(): boolean {\n    return this.config.store.state.wallets.size > 0;\n  }\n\n  public destroy(): void {\n    this.unsubscribe?.();\n  }\n}\n"]}