@cookill/wallet-adapter 3.2.1 → 3.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +234 -188
- package/dist/index.cjs +5 -211
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -228
- package/dist/index.d.ts +4 -228
- package/dist/index.js +5 -211
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +5 -1871
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +1 -147
- package/dist/react.d.ts +1 -147
- package/dist/react.js +6 -1846
- package/dist/react.js.map +1 -1
- package/dist/standard.cjs.map +1 -1
- package/dist/standard.js.map +1 -1
- package/package.json +2 -2
package/dist/react.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/types.ts","../src/core/provider.ts","../src/core/utils.ts","../src/core/wallet.ts","../src/react/WalletModal.tsx","../src/react/context.tsx","../src/react/ErrorBoundary.tsx","../src/react/LoadingStates.tsx"],"names":["useRef","useEffect","useCallback","jsxs","jsx","isInstalled","useState","React"],"mappings":"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","file":"react.js","sourcesContent":["/**\n * @cookill/wallet-adapter v3.1.0\n * Core type definitions\n * \n * Includes support for:\n * - REX (Rialo Extended Execution) — confidential computation transactions\n * - SfS (Stake-for-Service) — gasless transactions via staking yield\n * - Scan-to-Connect — QR-based cross-device wallet pairing\n */\n\n// ============================================================================\n// Network & Chain Types\n// ============================================================================\n\nexport type RialoNetwork = 'mainnet' | 'testnet' | 'devnet' | 'localnet';\nexport type RialoChainId = `rialo:${RialoNetwork}`;\n\nexport interface NetworkConfig {\n chainId: RialoChainId;\n name: string;\n rpcUrl: string;\n wsUrl?: string;\n explorerUrl?: string;\n symbol: string;\n decimals: number;\n supportsREX?: boolean;\n supportsSfS?: boolean;\n}\n\nexport const NETWORKS: Record<RialoNetwork, NetworkConfig> = {\n mainnet: {\n chainId: 'rialo:mainnet',\n name: 'Rialo Mainnet',\n rpcUrl: 'https://mainnet.rialo.io:4101',\n wsUrl: 'wss://mainnet.rialo.io:4102',\n explorerUrl: 'https://explorer.rialo.io',\n symbol: 'RLO',\n decimals: 9,\n supportsREX: true,\n supportsSfS: true,\n },\n testnet: {\n chainId: 'rialo:testnet',\n name: 'Rialo Testnet',\n rpcUrl: 'https://testnet.rialo.io:4101',\n wsUrl: 'wss://testnet.rialo.io:4102',\n explorerUrl: 'https://testnet.explorer.rialo.io',\n symbol: 'tRLO',\n decimals: 9,\n supportsREX: true,\n supportsSfS: true,\n },\n devnet: {\n chainId: 'rialo:devnet',\n name: 'Rialo Devnet',\n rpcUrl: 'https://devnet.rialo.io:4101',\n wsUrl: 'wss://devnet.rialo.io:4102',\n explorerUrl: 'https://devnet.explorer.rialo.io',\n symbol: 'dRLO',\n decimals: 9,\n supportsREX: true,\n supportsSfS: true,\n },\n localnet: {\n chainId: 'rialo:localnet',\n name: 'Rialo Localnet',\n rpcUrl: 'http://localhost:4101',\n wsUrl: 'ws://localhost:4102',\n explorerUrl: 'http://localhost:3000',\n symbol: 'lRLO',\n decimals: 9,\n supportsREX: false,\n supportsSfS: false,\n },\n};\n\n// ============================================================================\n// Account Types\n// ============================================================================\n\nexport interface WalletAccount {\n address: string;\n publicKey?: string | Uint8Array;\n label?: string;\n}\n\n// ============================================================================\n// Transaction Types\n// ============================================================================\n\nexport interface TransactionRequest {\n to: string;\n value: string;\n data?: string;\n memo?: string;\n /** If true, attempt to pay gas via Stake-for-Service credits */\n gasless?: boolean;\n /** REX confidential execution context */\n rex?: REXConfig;\n}\n\nexport interface TransactionResult {\n hash: string;\n signature?: string;\n status: 'pending' | 'confirmed' | 'failed';\n blockNumber?: number;\n /** Whether gas was paid via SfS credits */\n gasless?: boolean;\n /** REX execution proof if confidential */\n rexProof?: string;\n}\n\nexport interface SignedMessage {\n signature: string;\n message: string;\n address: string;\n publicKey?: string;\n}\n\nexport interface BalanceResult {\n balance: string;\n formatted: string;\n}\n\n// ============================================================================\n// REX (Rialo Extended Execution) — Confidential Computation\n// ============================================================================\n\n/**\n * REX enables privacy-preserving computation on Rialo.\n * Transactions can be executed confidentially using TEEs, MPC, or FHE\n * without exposing inputs to the public blockchain.\n */\n\n/** Privacy technology used for confidential computation */\nexport type REXPrivacyMode = 'tee' | 'mpc' | 'fhe' | 'auto';\n\nexport interface REXConfig {\n /** Enable confidential execution */\n confidential: boolean;\n /** Privacy technology to use (default: 'auto' — protocol selects optimal) */\n privacyMode?: REXPrivacyMode;\n /** Encrypted inputs (base64-encoded ciphertext) */\n encryptedInputs?: string;\n /** REX program ID to execute */\n programId?: string;\n /** Whether output should remain encrypted for future computation */\n keepEncrypted?: boolean;\n /** Access control — who can decrypt the result */\n accessPolicy?: REXAccessPolicy;\n}\n\nexport interface REXAccessPolicy {\n /** Addresses allowed to decrypt the result */\n allowedDecryptors: string[];\n /** Expiry timestamp (ms) for access */\n expiresAt?: number;\n}\n\nexport interface REXTransactionResult extends TransactionResult {\n /** Attestation proof from TEE/MPC */\n attestation?: string;\n /** Encrypted output (if keepEncrypted was true) */\n encryptedOutput?: string;\n /** Public output (if computation produced public results) */\n publicOutput?: string;\n}\n\n/** REX capabilities query result */\nexport interface REXCapabilities {\n supported: boolean;\n privacyModes: REXPrivacyMode[];\n maxInputSize: number;\n programs: string[];\n}\n\n// ============================================================================\n// Stake-for-Service (SfS) — Gasless Transactions\n// ============================================================================\n\n/**\n * SfS converts staking yield into service credits that automatically\n * pay for network costs (gas, storage, scheduled executions).\n * Users stake RLO, set a routing fraction, and the ServicePaymaster\n * mints credits from their yield.\n */\n\nexport interface SfSPosition {\n /** Position ID */\n id: string;\n /** Staked principal in kelvins */\n principal: string;\n /** Validator/pool receiving the delegation */\n validator: string;\n /** Fraction of yield routed to service credits (0.0 - 1.0) */\n routingFraction: number;\n /** Current service credit balance */\n creditBalance: string;\n /** Estimated credits per epoch */\n creditsPerEpoch: string;\n /** Position status */\n status: 'active' | 'pending' | 'closed';\n /** Creation timestamp */\n createdAt: number;\n}\n\nexport interface SfSCreateParams {\n /** Amount of RLO to stake (in kelvins) */\n amount: string;\n /** Validator address to delegate to */\n validator: string;\n /** Fraction of yield to route to service credits (0.0 - 1.0) */\n routingFraction: number;\n}\n\nexport interface SfSUpdateParams {\n /** Position ID to update */\n positionId: string;\n /** New routing fraction (0.0 - 1.0) */\n routingFraction?: number;\n}\n\nexport interface SfSCreditBalance {\n /** Available service credits */\n available: string;\n /** Credits used this epoch */\n usedThisEpoch: string;\n /** Total credits earned */\n totalEarned: string;\n /** Estimated credits per epoch */\n estimatedPerEpoch: string;\n}\n\n// ============================================================================\n// Scan-to-Connect (QR-based Cross-Device Pairing)\n// ============================================================================\n\n/**\n * Enables connecting a wallet on one device to a dApp on another device\n * via QR code scanning. Supports bidirectional flow:\n * - dApp shows QR → wallet scans to connect\n * - Wallet shows QR → dApp scans to connect\n */\n\nexport interface ScanConnectSession {\n /** Unique session identifier */\n sessionId: string;\n /** Session topic for relay */\n topic: string;\n /** Relay server URL */\n relay: string;\n /** Session encryption key (hex) */\n symmetricKey: string;\n /** Originator: 'dapp' or 'wallet' */\n origin: 'dapp' | 'wallet';\n /** dApp metadata */\n dappMetadata?: ScanConnectDAppMetadata;\n /** Wallet metadata */\n walletMetadata?: ScanConnectWalletMetadata;\n /** Requested chain IDs */\n chains: RialoChainId[];\n /** Expiry timestamp */\n expiresAt: number;\n}\n\nexport interface ScanConnectDAppMetadata {\n name: string;\n url: string;\n icon?: string;\n description?: string;\n}\n\nexport interface ScanConnectWalletMetadata {\n name: string;\n icon?: string;\n version?: string;\n}\n\n/** URI format for scan-to-connect QR codes */\nexport interface ScanConnectURI {\n /** Full URI string (rialo-wc://...) */\n uri: string;\n /** Parsed session info */\n session: ScanConnectSession;\n}\n\nexport type ScanConnectStatus = \n | 'idle'\n | 'generating' // Generating QR/session\n | 'waiting' // Waiting for counterpart to scan\n | 'scanned' // QR scanned, awaiting approval\n | 'approving' // User reviewing connection\n | 'connected' // Successfully connected\n | 'expired' // Session expired\n | 'rejected' // User rejected\n | 'error';\n\n// ============================================================================\n// Wallet Info\n// ============================================================================\n\nexport interface WalletInfo {\n id: string;\n name: string;\n icon: string;\n installed?: boolean;\n downloadUrl?: string;\n supportsREX?: boolean;\n supportsSfS?: boolean;\n supportsScanConnect?: boolean;\n}\n\n// ============================================================================\n// Provider Interface (what window.rialo exposes)\n// ============================================================================\n\nexport type WalletEventType = \n | 'connect' \n | 'disconnect' \n | 'accountsChanged'\n | 'networkChanged' \n | 'chainChanged'\n | 'scanConnect' // Scan-to-connect session events\n | 'sfsUpdate' // SfS position/credit updates\n | 'error';\n\nexport interface RialoProvider {\n // Identity\n isRialo: boolean;\n isSheepWallet?: boolean;\n version: string;\n \n // Connection\n connect(options?: { silent?: boolean }): Promise<Array<string | WalletAccount>>;\n disconnect(): Promise<void>;\n isConnected(): Promise<boolean>;\n getAccounts(): Promise<Array<string | WalletAccount>>;\n \n // Transactions\n signTransaction(tx: TransactionRequest): Promise<{ signature: string; rawTransaction?: string }>;\n sendTransaction(tx: TransactionRequest): Promise<TransactionResult>;\n signAndSendTransaction(tx: TransactionRequest): Promise<TransactionResult>;\n \n // Message signing\n signMessage(message: string | Uint8Array): Promise<SignedMessage>;\n \n // Network\n getNetwork(): Promise<RialoNetwork>;\n switchNetwork(network: RialoNetwork): Promise<{ success: boolean }>;\n getBalance(address?: string): Promise<BalanceResult | string>;\n \n // REX — Confidential Computation\n getREXCapabilities?(): Promise<REXCapabilities>;\n submitREXTransaction?(tx: TransactionRequest): Promise<REXTransactionResult>;\n \n // SfS — Stake-for-Service (Gasless)\n getSfSPositions?(): Promise<SfSPosition[]>;\n createSfSPosition?(params: SfSCreateParams): Promise<SfSPosition>;\n updateSfSPosition?(params: SfSUpdateParams): Promise<SfSPosition>;\n closeSfSPosition?(positionId: string): Promise<{ success: boolean }>;\n getSfSCredits?(): Promise<SfSCreditBalance>;\n \n // Scan-to-Connect\n createScanSession?(origin: 'wallet'): Promise<ScanConnectURI>;\n approveScanSession?(sessionId: string): Promise<WalletAccount[]>;\n rejectScanSession?(sessionId: string): Promise<void>;\n \n // Events\n on(event: WalletEventType, callback: (data: unknown) => void): () => void;\n removeListener(event: WalletEventType, callback: (data: unknown) => void): void;\n removeAllListeners(event?: WalletEventType): void;\n}\n\n// Window extension\ndeclare global {\n interface Window {\n rialo?: RialoProvider;\n }\n}\n","/**\n * @cookill/wallet-adapter v3.0.0\n * Provider detection and access utilities\n * \n * CRITICAL: All provider access is non-blocking and defensive\n */\n\nimport type { RialoProvider } from './types';\n\n/**\n * Check if Rialo/Sheep Wallet is installed\n * This is synchronous and never blocks\n */\nexport function isInstalled(): boolean {\n if (typeof window === 'undefined') return false;\n try {\n // Only return true for the actual browser extension, not web wallet fallback\n return !!window.rialo?.isRialo && !(window.rialo as any)?.isWebWallet;\n } catch {\n return false;\n }\n}\n\n/**\n * Check if any provider is available (extension OR web wallet)\n */\nexport function hasProvider(): boolean {\n if (typeof window === 'undefined') return false;\n try {\n return !!window.rialo?.isRialo;\n } catch {\n return false;\n }\n}\n\n/**\n * Check if the available provider is a web wallet (not extension)\n */\nexport function isWebWallet(): boolean {\n if (typeof window === 'undefined') return false;\n try {\n return !!window.rialo?.isRialo && !!(window.rialo as any)?.isWebWallet;\n } catch {\n return false;\n }\n}\n\n/**\n * Get the provider reference (synchronous)\n * Returns undefined if not installed\n */\nexport function getProvider(): RialoProvider | undefined {\n if (typeof window === 'undefined') return undefined;\n try {\n const provider = window.rialo;\n if (provider?.isRialo) return provider;\n } catch {}\n return undefined;\n}\n\n/**\n * Wait for provider to become available\n * Uses polling + event listener, with guaranteed timeout\n * \n * @param timeout Maximum time to wait in ms (default 3000)\n */\nexport function waitForProvider(timeout = 3000): Promise<RialoProvider | undefined> {\n return new Promise((resolve) => {\n // Already available?\n const existing = getProvider();\n if (existing) {\n resolve(existing);\n return;\n }\n\n let resolved = false;\n let checkInterval: ReturnType<typeof setInterval> | null = null;\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n const cleanup = () => {\n resolved = true;\n if (checkInterval) clearInterval(checkInterval);\n if (timeoutId) clearTimeout(timeoutId);\n };\n\n const done = (provider: RialoProvider | undefined) => {\n if (resolved) return;\n cleanup();\n resolve(provider);\n };\n\n // Poll every 100ms\n checkInterval = setInterval(() => {\n const p = getProvider();\n if (p) done(p);\n }, 100);\n\n // Listen for initialization event\n const onInit = () => done(getProvider());\n window.addEventListener('rialo#initialized', onInit, { once: true });\n\n // Guaranteed timeout\n timeoutId = setTimeout(() => {\n window.removeEventListener('rialo#initialized', onInit);\n done(undefined);\n }, timeout);\n });\n}\n\n/**\n * Promise timeout wrapper\n * Ensures promises never hang indefinitely\n */\nexport function withTimeout<T>(\n promise: Promise<T>,\n ms: number,\n errorMessage = 'Operation timed out'\n): Promise<T> {\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n\n const timeout = new Promise<never>((_, reject) => {\n timeoutId = setTimeout(() => reject(new Error(errorMessage)), ms);\n });\n\n return Promise.race([promise, timeout]).finally(() => {\n if (timeoutId) clearTimeout(timeoutId);\n }) as Promise<T>;\n}\n","/**\n * @cookill/wallet-adapter v3.0.0\n * Utility functions\n */\n\nimport type { WalletAccount, RialoNetwork, RialoChainId } from './types';\n\n/**\n * Format address for display (truncated)\n */\nexport function formatAddress(address: string, chars = 4): string {\n if (!address) return '';\n if (address.length <= chars * 2 + 3) return address;\n return `${address.slice(0, chars + 2)}...${address.slice(-chars)}`;\n}\n\n/**\n * Format balance from kelvins to RLO\n */\nexport function formatBalance(kelvins: string | bigint, decimals = 4): string {\n const value = typeof kelvins === 'string' ? BigInt(kelvins || '0') : kelvins;\n const rlo = Number(value) / 1_000_000_000;\n return rlo.toFixed(decimals);\n}\n\n/**\n * Parse RLO amount to kelvins\n */\nexport function parseBalance(rlo: string | number): bigint {\n const value = typeof rlo === 'string' ? parseFloat(rlo) : rlo;\n return BigInt(Math.floor(value * 1_000_000_000));\n}\n\n/**\n * Validate Rialo address format\n */\nexport function isValidAddress(address: string): boolean {\n if (!address || typeof address !== 'string') return false;\n if (address.length < 32 || address.length > 50) return false;\n return /^[1-9A-HJ-NP-Za-km-z]+$/.test(address);\n}\n\n/**\n * Convert network name to chain ID\n */\nexport function toChainId(network: RialoNetwork): RialoChainId {\n return `rialo:${network}`;\n}\n\n/**\n * Extract network from chain ID\n */\nexport function fromChainId(chainId: RialoChainId): RialoNetwork {\n return chainId.replace('rialo:', '') as RialoNetwork;\n}\n\n/**\n * Normalize account data (handles both string and object formats)\n * CRITICAL: Extension can return either string[] or WalletAccount[]\n */\nexport function normalizeAccounts(accounts: Array<string | WalletAccount>): WalletAccount[] {\n if (!Array.isArray(accounts)) return [];\n \n return accounts.map((acc): WalletAccount => {\n if (typeof acc === 'string') {\n return { address: acc, publicKey: acc };\n }\n return {\n address: acc.address,\n publicKey: acc.publicKey || acc.address,\n label: acc.label,\n };\n });\n}\n","/**\n * @cookill/wallet-adapter v3.1.0\n * Pure JavaScript wallet class (no React dependency)\n * \n * Supports:\n * - Standard connect/disconnect/sign operations\n * - REX (Rialo Extended Execution) confidential transactions\n * - SfS (Stake-for-Service) gasless transactions\n * - Scan-to-Connect QR-based pairing\n * \n * Usage:\n * const wallet = new SheepWallet();\n * if (!wallet.isInstalled) { ... prompt install ... }\n * const accounts = await wallet.connect();\n */\n\nimport type { \n RialoProvider, \n WalletAccount, \n RialoNetwork,\n TransactionRequest, \n TransactionResult, \n SignedMessage,\n REXCapabilities,\n REXTransactionResult,\n SfSPosition,\n SfSCreateParams,\n SfSUpdateParams,\n SfSCreditBalance,\n ScanConnectURI,\n ScanConnectSession,\n ScanConnectStatus,\n} from './types';\nimport { isInstalled, getProvider, withTimeout, hasProvider } from './provider';\nimport { normalizeAccounts } from './utils';\n\n// Connection timeout (20 seconds)\nconst CONNECT_TIMEOUT = 20_000;\n\n// Other operation timeout (30 seconds)\nconst OPERATION_TIMEOUT = 30_000;\n\nexport class SheepWallet {\n private _provider: RialoProvider | undefined;\n private _connected = false;\n private _accounts: WalletAccount[] = [];\n private _network: RialoNetwork = 'devnet';\n private _cleanupFns: Array<() => void> = [];\n\n constructor() {\n this._provider = getProvider();\n this._setupEvents();\n }\n\n // =========================================================================\n // Getters (all synchronous, never block)\n // =========================================================================\n\n /** True only if the browser extension is installed (not web wallet) */\n get isInstalled(): boolean {\n return isInstalled();\n }\n\n /** True if any provider (extension or web wallet) is available */\n get hasProvider(): boolean {\n return hasProvider();\n }\n\n get connected(): boolean {\n return this._connected;\n }\n\n get accounts(): WalletAccount[] {\n return [...this._accounts];\n }\n\n get activeAccount(): WalletAccount | undefined {\n return this._accounts[0];\n }\n\n get address(): string | undefined {\n return this._accounts[0]?.address;\n }\n\n get network(): RialoNetwork {\n return this._network;\n }\n\n get chainId(): string {\n return `rialo:${this._network}`;\n }\n\n // =========================================================================\n // Connection (with timeout protection)\n // =========================================================================\n\n async connect(): Promise<WalletAccount[]> {\n // Refresh provider reference (picks up extension OR web wallet)\n this._provider = getProvider();\n \n if (!this._provider) {\n throw new Error('No wallet provider found. Install Sheep Wallet extension or set up a web wallet.');\n }\n\n try {\n const rawAccounts = await withTimeout(\n this._provider.connect(),\n CONNECT_TIMEOUT,\n 'Connection timed out. Please open Sheep Wallet extension and approve the request.'\n );\n\n this._accounts = normalizeAccounts(rawAccounts);\n this._connected = true;\n\n try {\n this._network = await withTimeout(\n this._provider.getNetwork(),\n 5_000,\n 'Network request timed out'\n );\n } catch {\n // Keep default network on failure\n }\n\n return this._accounts;\n } catch (error) {\n this._connected = false;\n this._accounts = [];\n throw error;\n }\n }\n\n async disconnect(): Promise<void> {\n try {\n if (this._provider) {\n await withTimeout(\n this._provider.disconnect(),\n 5_000,\n 'Disconnect timed out'\n );\n }\n } catch {\n // Ignore disconnect errors\n }\n \n this._connected = false;\n this._accounts = [];\n }\n\n // =========================================================================\n // Silent session check (for auto-connect, never triggers approval)\n // =========================================================================\n\n async checkSession(): Promise<WalletAccount[] | null> {\n if (!this._provider) return null;\n\n try {\n const isConn = await withTimeout(\n this._provider.isConnected(),\n 3_000,\n 'Session check timed out'\n );\n\n if (!isConn) return null;\n\n const rawAccounts = await withTimeout(\n this._provider.getAccounts(),\n 3_000,\n 'Get accounts timed out'\n );\n\n const accounts = normalizeAccounts(rawAccounts);\n if (accounts.length > 0) {\n this._accounts = accounts;\n this._connected = true;\n\n try {\n this._network = await this._provider.getNetwork();\n } catch {}\n\n return accounts;\n }\n } catch {\n // Session check failure is not an error\n }\n\n return null;\n }\n\n // =========================================================================\n // Transactions\n // =========================================================================\n\n async signMessage(message: string): Promise<SignedMessage> {\n this._ensureConnected();\n \n return withTimeout(\n this._provider!.signMessage(message),\n OPERATION_TIMEOUT,\n 'Sign message timed out. Please check Sheep Wallet.'\n );\n }\n\n async signTransaction(tx: TransactionRequest): Promise<string> {\n this._ensureConnected();\n \n const result = await withTimeout(\n this._provider!.signTransaction(tx),\n OPERATION_TIMEOUT,\n 'Sign transaction timed out. Please check Sheep Wallet.'\n );\n \n return result.signature;\n }\n\n async sendTransaction(tx: TransactionRequest): Promise<TransactionResult> {\n this._ensureConnected();\n \n return withTimeout(\n this._provider!.sendTransaction(tx),\n OPERATION_TIMEOUT,\n 'Send transaction timed out. Please check Sheep Wallet.'\n );\n }\n\n async signAndSendTransaction(tx: TransactionRequest): Promise<TransactionResult> {\n this._ensureConnected();\n \n return withTimeout(\n this._provider!.signAndSendTransaction(tx),\n OPERATION_TIMEOUT,\n 'Transaction timed out. Please check Sheep Wallet.'\n );\n }\n\n // =========================================================================\n // REX — Rialo Extended Execution (Confidential Computation)\n // =========================================================================\n\n /**\n * Check if the connected wallet/network supports REX\n */\n async getREXCapabilities(): Promise<REXCapabilities> {\n if (!this._provider?.getREXCapabilities) {\n return {\n supported: false,\n privacyModes: [],\n maxInputSize: 0,\n programs: [],\n };\n }\n\n return withTimeout(\n this._provider.getREXCapabilities(),\n 10_000,\n 'REX capabilities request timed out'\n );\n }\n\n /**\n * Submit a confidential transaction via REX\n * The transaction inputs are encrypted and executed in a TEE/MPC/FHE environment\n */\n async submitREXTransaction(tx: TransactionRequest): Promise<REXTransactionResult> {\n this._ensureConnected();\n\n if (!tx.rex?.confidential) {\n throw new Error('Transaction must have rex.confidential = true for REX execution');\n }\n\n if (this._provider?.submitREXTransaction) {\n return withTimeout(\n this._provider.submitREXTransaction(tx),\n OPERATION_TIMEOUT,\n 'REX transaction timed out. Please check Sheep Wallet.'\n );\n }\n\n // Fallback: submit as regular transaction with REX metadata\n const result = await this.signAndSendTransaction(tx);\n return {\n ...result,\n attestation: undefined,\n encryptedOutput: undefined,\n publicOutput: undefined,\n };\n }\n\n /**\n * Send a gasless transaction using Stake-for-Service credits\n * Automatically sets tx.gasless = true\n */\n async sendGaslessTransaction(tx: Omit<TransactionRequest, 'gasless'>): Promise<TransactionResult> {\n this._ensureConnected();\n \n // Check if user has SfS credits\n const credits = await this.getSfSCredits();\n if (BigInt(credits.available) <= 0n) {\n throw new Error('No SfS service credits available. Create a Stake-for-Service position first.');\n }\n\n return this.signAndSendTransaction({ ...tx, gasless: true });\n }\n\n // =========================================================================\n // SfS — Stake-for-Service (Gasless via Staking Yield)\n // =========================================================================\n\n /**\n * Get all Stake-for-Service positions for the connected account\n */\n async getSfSPositions(): Promise<SfSPosition[]> {\n this._ensureConnected();\n\n if (this._provider?.getSfSPositions) {\n return withTimeout(\n this._provider.getSfSPositions(),\n 10_000,\n 'SfS positions request timed out'\n );\n }\n\n return [];\n }\n\n /**\n * Create a new Stake-for-Service position\n * Stakes RLO and routes a fraction of yield to service credits\n */\n async createSfSPosition(params: SfSCreateParams): Promise<SfSPosition> {\n this._ensureConnected();\n\n if (params.routingFraction < 0 || params.routingFraction > 1) {\n throw new Error('Routing fraction must be between 0.0 and 1.0');\n }\n\n if (!this._provider?.createSfSPosition) {\n throw new Error('Stake-for-Service not supported by this wallet version');\n }\n\n return withTimeout(\n this._provider.createSfSPosition(params),\n OPERATION_TIMEOUT,\n 'SfS position creation timed out. Please check Sheep Wallet.'\n );\n }\n\n /**\n * Update an existing SfS position (e.g., change routing fraction)\n */\n async updateSfSPosition(params: SfSUpdateParams): Promise<SfSPosition> {\n this._ensureConnected();\n\n if (!this._provider?.updateSfSPosition) {\n throw new Error('Stake-for-Service not supported by this wallet version');\n }\n\n return withTimeout(\n this._provider.updateSfSPosition(params),\n OPERATION_TIMEOUT,\n 'SfS position update timed out'\n );\n }\n\n /**\n * Close an SfS position and unstake\n */\n async closeSfSPosition(positionId: string): Promise<{ success: boolean }> {\n this._ensureConnected();\n\n if (!this._provider?.closeSfSPosition) {\n throw new Error('Stake-for-Service not supported by this wallet version');\n }\n\n return withTimeout(\n this._provider.closeSfSPosition(positionId),\n OPERATION_TIMEOUT,\n 'SfS position close timed out'\n );\n }\n\n /**\n * Get current SfS service credit balance\n */\n async getSfSCredits(): Promise<SfSCreditBalance> {\n this._ensureConnected();\n\n if (this._provider?.getSfSCredits) {\n return withTimeout(\n this._provider.getSfSCredits(),\n 10_000,\n 'SfS credit balance request timed out'\n );\n }\n\n return {\n available: '0',\n usedThisEpoch: '0',\n totalEarned: '0',\n estimatedPerEpoch: '0',\n };\n }\n\n // =========================================================================\n // Scan-to-Connect (QR-based Cross-Device Pairing)\n // =========================================================================\n\n /**\n * Generate a scan-to-connect URI from the wallet side\n * Returns a URI that can be displayed as QR code for dApps to scan\n */\n async createScanSession(): Promise<ScanConnectURI> {\n if (!this._provider?.createScanSession) {\n throw new Error('Scan-to-Connect not supported by this wallet version');\n }\n\n return withTimeout(\n this._provider.createScanSession('wallet'),\n 10_000,\n 'Scan session creation timed out'\n );\n }\n\n /**\n * Approve a scan-to-connect session (after wallet scans dApp QR)\n */\n async approveScanSession(sessionId: string): Promise<WalletAccount[]> {\n if (!this._provider?.approveScanSession) {\n throw new Error('Scan-to-Connect not supported by this wallet version');\n }\n\n const accounts = await withTimeout(\n this._provider.approveScanSession(sessionId),\n CONNECT_TIMEOUT,\n 'Scan session approval timed out'\n );\n\n this._accounts = normalizeAccounts(accounts as Array<string | WalletAccount>);\n this._connected = true;\n\n return this._accounts;\n }\n\n /**\n * Reject a scan-to-connect session\n */\n async rejectScanSession(sessionId: string): Promise<void> {\n if (!this._provider?.rejectScanSession) {\n return;\n }\n\n await withTimeout(\n this._provider.rejectScanSession(sessionId),\n 5_000,\n 'Scan session rejection timed out'\n );\n }\n\n // =========================================================================\n // Balance & Network\n // =========================================================================\n\n async getBalance(address?: string): Promise<string> {\n if (!this._provider) {\n throw new Error('Wallet not available');\n }\n\n const result = await withTimeout(\n this._provider.getBalance(address),\n 10_000,\n 'Balance request timed out'\n );\n\n return typeof result === 'string' ? result : result.balance;\n }\n\n async switchNetwork(network: RialoNetwork): Promise<void> {\n if (!this._provider) {\n throw new Error('Wallet not available');\n }\n\n await withTimeout(\n this._provider.switchNetwork(network),\n 10_000,\n 'Switch network timed out'\n );\n\n this._network = network;\n }\n\n // =========================================================================\n // Events\n // =========================================================================\n\n on(event: string, callback: (data: unknown) => void): () => void {\n if (!this._provider) {\n return () => {};\n }\n\n const cleanup = this._provider.on(event as any, callback);\n this._cleanupFns.push(cleanup);\n return cleanup;\n }\n\n destroy(): void {\n this._cleanupFns.forEach(fn => {\n try { fn(); } catch {}\n });\n this._cleanupFns = [];\n this._connected = false;\n this._accounts = [];\n }\n\n // =========================================================================\n // Private\n // =========================================================================\n\n private _ensureConnected(): void {\n if (!this._provider) {\n throw new Error('Sheep Wallet not installed');\n }\n if (!this._connected || this._accounts.length === 0) {\n throw new Error('Wallet not connected');\n }\n }\n\n private _setupEvents(): void {\n if (!this._provider) return;\n\n const onDisconnect = () => {\n this._connected = false;\n this._accounts = [];\n };\n\n const onAccountsChanged = (data: unknown) => {\n const raw = data as Array<string | WalletAccount>;\n this._accounts = normalizeAccounts(raw);\n };\n\n const onNetworkChanged = (data: unknown) => {\n const { network } = data as { network: RialoNetwork };\n if (network) this._network = network;\n };\n\n this._cleanupFns.push(\n this._provider.on('disconnect', onDisconnect),\n this._provider.on('accountsChanged', onAccountsChanged),\n this._provider.on('networkChanged', onNetworkChanged)\n );\n }\n}\n\nexport default SheepWallet;\n","/**\n * @cookill/wallet-adapter — WalletModal\n * Clean, standalone modal with 3 tabs: Extension, Scan-to-Connect, Web Wallet\n * \n * KEY ARCHITECTURE:\n * - Backdrop and dialog are SIBLINGS (prevents click propagation bugs)\n * - All interactive elements use stopPropagation\n * - Tab switching works independently of connection state\n * - Auto-close only fires for NEW connections (not pre-existing)\n * - Connect button in Extension tab calls context's connect() directly\n */\n\nimport React, { useState, useEffect, useRef, useCallback } from 'react';\nimport { useWallet } from './context';\nimport {\n isInstalled,\n isWebWallet as isWebWalletProvider,\n hasProvider,\n formatAddress,\n} from '../core';\n\n// ============================================================================\n// Icons (inline SVG, no external deps)\n// ============================================================================\n\nconst IconClose = () => (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M18 6 6 18\" /><path d=\"m6 6 12 12\" />\n </svg>\n);\nconst IconExtension = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M16 3h5v5\" /><path d=\"M8 3H3v5\" /><path d=\"M12 22v-8.3a4 4 0 0 0-1.172-2.872L3 3\" /><path d=\"m15 9 6-6\" />\n </svg>\n);\nconst IconQR = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"3\" y=\"3\" width=\"7\" height=\"7\" /><rect x=\"14\" y=\"3\" width=\"7\" height=\"7\" /><rect x=\"3\" y=\"14\" width=\"7\" height=\"7\" /><path d=\"M14 14h7v7h-7z\" />\n </svg>\n);\nconst IconWeb = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\" /><path d=\"M2 10h20\" /><path d=\"M12 17v4\" /><path d=\"M8 21h8\" />\n </svg>\n);\nconst IconCheck = () => (\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#6EB9A8\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n);\nconst IconCamera = () => (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M14.5 4h-5L7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3l-2.5-3z\" /><circle cx=\"12\" cy=\"13\" r=\"3\" />\n </svg>\n);\nconst IconRefresh = () => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\" /><path d=\"M21 3v5h-5\" />\n </svg>\n);\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst S = {\n backdrop: {\n position: 'absolute' as const, inset: 0,\n backgroundColor: 'rgba(0,0,0,0.6)',\n backdropFilter: 'blur(8px)', WebkitBackdropFilter: 'blur(8px)',\n },\n dialog: {\n pointerEvents: 'auto' as const,\n backgroundColor: '#011B29', borderRadius: '20px', padding: '24px',\n width: '100%', maxWidth: '400px', margin: '16px',\n boxShadow: '0 25px 60px -12px rgba(0,0,0,0.6), 0 0 0 1px rgba(255,255,255,0.05)',\n maxHeight: '90vh', overflow: 'auto',\n animation: 'swModalFadeIn 0.25s cubic-bezier(0.4,0,0.2,1)',\n },\n header: {\n display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: '20px',\n },\n title: { color: '#fff', fontSize: '18px', fontWeight: 600, margin: 0, letterSpacing: '-0.01em' },\n closeBtn: {\n background: 'none', border: 'none', color: 'rgba(255,255,255,0.3)',\n cursor: 'pointer', padding: '6px', borderRadius: '8px',\n display: 'flex', alignItems: 'center', justifyContent: 'center',\n transition: 'all 0.15s',\n },\n tabBar: {\n display: 'flex', gap: '4px', padding: '4px',\n backgroundColor: 'rgba(255,255,255,0.04)', borderRadius: '14px', marginBottom: '20px',\n },\n walletBtn: (isConnecting: boolean) => ({\n width: '100%', display: 'flex', alignItems: 'center', gap: '14px',\n padding: '16px', backgroundColor: 'rgba(255,255,255,0.04)',\n border: '1px solid rgba(255,255,255,0.08)', borderRadius: '14px',\n cursor: isConnecting ? 'wait' : 'pointer', transition: 'all 0.15s',\n color: 'inherit',\n }),\n walletIcon: {\n width: '44px', height: '44px', borderRadius: '12px',\n background: 'linear-gradient(135deg, #6EB9A8, #4a9a8a)',\n display: 'flex', alignItems: 'center', justifyContent: 'center',\n color: '#fff', fontWeight: 700, fontSize: '18px', flexShrink: 0,\n },\n badge: (color: string) => ({\n padding: '5px 10px', backgroundColor: `${color}10`, borderRadius: '8px',\n border: `1px solid ${color}18`, display: 'flex', alignItems: 'center', gap: '6px',\n }),\n input: {\n width: '100%', padding: '12px 14px', backgroundColor: 'rgba(255,255,255,0.04)',\n border: '1px solid rgba(255,255,255,0.1)', borderRadius: '12px',\n color: '#fff', fontSize: '14px', marginBottom: '12px', outline: 'none', boxSizing: 'border-box' as const,\n },\n primaryBtn: (loading: boolean) => ({\n width: '100%', padding: '12px', backgroundColor: '#6EB9A8', border: 'none',\n borderRadius: '12px', color: '#011B29', fontSize: '14px', fontWeight: 600,\n cursor: loading ? 'wait' : 'pointer', opacity: loading ? 0.6 : 1,\n }),\n error: {\n marginTop: '16px', padding: '12px 14px', backgroundColor: 'rgba(239,68,68,0.08)',\n border: '1px solid rgba(239,68,68,0.15)', borderRadius: '12px',\n color: '#f87171', fontSize: '13px', lineHeight: 1.4,\n },\n};\n\nfunction tabStyle(active: boolean): React.CSSProperties {\n return {\n flex: 1, padding: '10px 0', border: 'none', borderRadius: '10px',\n fontSize: '13px', cursor: 'pointer', transition: 'all 0.2s',\n display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '6px',\n backgroundColor: active ? 'rgba(255,255,255,0.08)' : 'transparent',\n color: active ? '#6EB9A8' : 'rgba(255,255,255,0.4)',\n fontWeight: active ? 600 : 400,\n };\n}\n\n// ============================================================================\n// Sub-components for each tab\n// ============================================================================\n\nfunction ExtensionTab({ onConnect, extensionDetected, connecting, error }: {\n onConnect: () => void;\n extensionDetected: boolean;\n connecting: boolean;\n error: Error | null;\n}) {\n return (\n <div>\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n if (extensionDetected) {\n onConnect();\n } else {\n window.open('https://rialo.io/wallet', '_blank');\n }\n }}\n disabled={connecting}\n style={S.walletBtn(connecting)}\n onMouseEnter={(e) => { (e.currentTarget as HTMLButtonElement).style.backgroundColor = 'rgba(255,255,255,0.07)'; }}\n onMouseLeave={(e) => { (e.currentTarget as HTMLButtonElement).style.backgroundColor = 'rgba(255,255,255,0.04)'; }}\n >\n <div style={S.walletIcon}>S</div>\n <div style={{ flex: 1, textAlign: 'left' }}>\n <div style={{ color: '#fff', fontWeight: 500, fontSize: '15px', marginBottom: '2px' }}>\n Sheep Wallet\n </div>\n <div style={{ fontSize: '12px', color: extensionDetected ? '#6EB9A8' : 'rgba(255,255,255,0.4)', display: 'flex', alignItems: 'center', gap: '5px' }}>\n {connecting ? (\n <>\n <span style={{ display: 'inline-block', width: '6px', height: '6px', borderRadius: '50%', backgroundColor: '#F59E0B', animation: 'swModalPulse 1.2s infinite' }} />\n Connecting...\n </>\n ) : extensionDetected ? (\n <>\n <span style={{ display: 'inline-block', width: '6px', height: '6px', borderRadius: '50%', backgroundColor: '#6EB9A8' }} />\n Detected — Click to connect\n </>\n ) : (\n <>\n <span style={{ display: 'inline-block', width: '6px', height: '6px', borderRadius: '50%', backgroundColor: 'rgba(255,255,255,0.2)' }} />\n Not installed\n </>\n )}\n </div>\n </div>\n {!extensionDetected && (\n <span style={{ color: '#6EB9A8', fontSize: '12px', fontWeight: 500, padding: '4px 10px', borderRadius: '8px', backgroundColor: 'rgba(110,185,168,0.1)' }}>\n Install\n </span>\n )}\n </button>\n\n {/* Feature badges */}\n <div style={{ display: 'flex', gap: '8px', marginTop: '16px', flexWrap: 'wrap' }}>\n {[\n { label: 'REX', desc: 'Confidential TX', color: '#8B5CF6' },\n { label: 'SfS', desc: 'Gasless TX', color: '#F59E0B' },\n { label: 'QR', desc: 'Scan Connect', color: '#6EB9A8' },\n ].map(b => (\n <div key={b.label} style={S.badge(b.color)}>\n <span style={{ color: b.color, fontSize: '11px', fontWeight: 600 }}>{b.label}</span>\n <span style={{ color: 'rgba(255,255,255,0.35)', fontSize: '10px' }}>{b.desc}</span>\n </div>\n ))}\n </div>\n\n {error && <div style={S.error}>{error.message}</div>}\n </div>\n );\n}\n\nfunction ScanTab({ scanConnectRelay }: { scanConnectRelay: string }) {\n const [scanMode, setScanMode] = useState<'show-qr' | 'scan-qr'>('show-qr');\n const [generatedURI, setGeneratedURI] = useState<string | null>(null);\n const canvasRef = useRef<HTMLCanvasElement>(null);\n\n const generateSession = useCallback(() => {\n const sessionId = crypto.randomUUID();\n const topic = btoa(sessionId).slice(0, 32);\n const uri = `rialo-wc://${sessionId}?relay=${encodeURIComponent(scanConnectRelay)}&topic=${topic}&networks=devnet`;\n setGeneratedURI(uri);\n }, [scanConnectRelay]);\n\n // Auto-generate on mount\n useEffect(() => { generateSession(); }, [generateSession]);\n\n // Draw QR\n useEffect(() => {\n if (!generatedURI || !canvasRef.current) return;\n const canvas = canvasRef.current;\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n const size = 200;\n canvas.width = size;\n canvas.height = size;\n ctx.fillStyle = '#FFFFFF';\n ctx.fillRect(0, 0, size, size);\n ctx.fillStyle = '#011B29';\n const gridSize = 25;\n const cellSize = size / gridSize;\n for (let y = 0; y < gridSize; y++) {\n for (let x = 0; x < gridSize; x++) {\n const isFinderArea = (x < 7 && y < 7) || (x >= gridSize - 7 && y < 7) || (x < 7 && y >= gridSize - 7);\n if (isFinderArea) {\n const isOuter = x === 0 || y === 0 || x === 6 || y === 6 || x === gridSize - 7 || x === gridSize - 1 || y === gridSize - 7 || y === gridSize - 1;\n const isInner = (x >= 2 && x <= 4 && y >= 2 && y <= 4) || (x >= gridSize - 5 && x <= gridSize - 3 && y >= 2 && y <= 4) || (x >= 2 && x <= 4 && y >= gridSize - 5 && y <= gridSize - 3);\n if (isOuter || isInner) ctx.fillRect(x * cellSize, y * cellSize, cellSize, cellSize);\n continue;\n }\n const charIndex = (y * gridSize + x) % generatedURI.length;\n const charCode = generatedURI.charCodeAt(charIndex);\n if (charCode % 3 !== 0) ctx.fillRect(x * cellSize, y * cellSize, cellSize, cellSize);\n }\n }\n // Logo center\n const logoSize = 40;\n const logoX = (size - logoSize) / 2;\n const logoY = (size - logoSize) / 2;\n ctx.beginPath();\n ctx.arc(size / 2, size / 2, logoSize / 2 + 4, 0, Math.PI * 2);\n ctx.fillStyle = '#FFFFFF';\n ctx.fill();\n ctx.beginPath();\n const r = 6;\n ctx.moveTo(logoX + r, logoY);\n ctx.lineTo(logoX + logoSize - r, logoY);\n ctx.quadraticCurveTo(logoX + logoSize, logoY, logoX + logoSize, logoY + r);\n ctx.lineTo(logoX + logoSize, logoY + logoSize - r);\n ctx.quadraticCurveTo(logoX + logoSize, logoY + logoSize, logoX + logoSize - r, logoY + logoSize);\n ctx.lineTo(logoX + r, logoY + logoSize);\n ctx.quadraticCurveTo(logoX, logoY + logoSize, logoX, logoY + logoSize - r);\n ctx.lineTo(logoX, logoY + r);\n ctx.quadraticCurveTo(logoX, logoY, logoX + r, logoY);\n ctx.fillStyle = '#6EB9A8';\n ctx.fill();\n ctx.fillStyle = '#FFFFFF';\n ctx.font = 'bold 22px sans-serif';\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n ctx.fillText('S', size / 2, size / 2 + 1);\n }, [generatedURI]);\n\n const stop = (e: React.MouseEvent) => e.stopPropagation();\n\n return (\n <div>\n {/* Sub-tabs */}\n <div style={{ display: 'flex', gap: '8px', marginBottom: '16px' }}>\n {(['show-qr', 'scan-qr'] as const).map(mode => (\n <button key={mode} type=\"button\" onClick={(e) => { stop(e); setScanMode(mode); }}\n style={{\n flex: 1, padding: '8px', display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '6px',\n backgroundColor: scanMode === mode ? 'rgba(110,185,168,0.1)' : 'transparent',\n border: `1px solid ${scanMode === mode ? 'rgba(110,185,168,0.25)' : 'rgba(255,255,255,0.08)'}`,\n borderRadius: '10px', color: scanMode === mode ? '#6EB9A8' : 'rgba(255,255,255,0.4)',\n fontSize: '12px', fontWeight: scanMode === mode ? 500 : 400, cursor: 'pointer', transition: 'all 0.15s',\n }}\n >\n {mode === 'show-qr' ? <><IconQR /> Show QR</> : <><IconCamera /> Scan QR</>}\n </button>\n ))}\n </div>\n\n {scanMode === 'show-qr' && (\n <div style={{ textAlign: 'center' }}>\n <p style={{ color: 'rgba(255,255,255,0.45)', fontSize: '13px', marginBottom: '16px', lineHeight: 1.5 }}>\n Scan this QR code with Sheep Wallet on your mobile device\n </p>\n <div style={{ display: 'inline-block', padding: '16px', backgroundColor: '#FFFFFF', borderRadius: '16px', position: 'relative' }}>\n {[\n { top: -2, left: -2, borderTop: '3px solid #6EB9A8', borderLeft: '3px solid #6EB9A8', borderTopLeftRadius: '12px' },\n { top: -2, right: -2, borderTop: '3px solid #6EB9A8', borderRight: '3px solid #6EB9A8', borderTopRightRadius: '12px' },\n { bottom: -2, left: -2, borderBottom: '3px solid #6EB9A8', borderLeft: '3px solid #6EB9A8', borderBottomLeftRadius: '12px' },\n { bottom: -2, right: -2, borderBottom: '3px solid #6EB9A8', borderRight: '3px solid #6EB9A8', borderBottomRightRadius: '12px' },\n ].map((s, i) => (\n <div key={i} style={{ position: 'absolute', width: '24px', height: '24px', ...s } as React.CSSProperties} />\n ))}\n <canvas ref={canvasRef} style={{ width: '200px', height: '200px', display: 'block' }} />\n </div>\n <div style={{ marginTop: '16px', display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '8px' }}>\n <div style={{ width: '7px', height: '7px', borderRadius: '50%', backgroundColor: '#6EB9A8', animation: 'swModalPulse 2s infinite' }} />\n <span style={{ color: 'rgba(255,255,255,0.4)', fontSize: '12px' }}>Waiting for wallet to scan...</span>\n </div>\n <button type=\"button\" onClick={(e) => { stop(e); generateSession(); }}\n style={{ marginTop: '12px', padding: '8px 16px', backgroundColor: 'transparent', border: '1px solid rgba(255,255,255,0.08)', borderRadius: '10px', color: '#6EB9A8', fontSize: '12px', cursor: 'pointer', display: 'inline-flex', alignItems: 'center', gap: '6px' }}>\n <IconRefresh /> Refresh QR\n </button>\n </div>\n )}\n\n {scanMode === 'scan-qr' && (\n <div style={{ textAlign: 'center' }}>\n <p style={{ color: 'rgba(255,255,255,0.45)', fontSize: '13px', marginBottom: '16px', lineHeight: 1.5 }}>\n Open Sheep Wallet on another device, go to Settings → Show Connect QR, then scan it here\n </p>\n <div style={{\n width: '100%', height: '200px', backgroundColor: 'rgba(255,255,255,0.02)', borderRadius: '14px',\n border: '1px dashed rgba(255,255,255,0.1)', display: 'flex', flexDirection: 'column',\n alignItems: 'center', justifyContent: 'center', gap: '12px',\n }}>\n <div style={{ color: 'rgba(255,255,255,0.2)' }}><IconCamera /></div>\n <span style={{ color: 'rgba(255,255,255,0.3)', fontSize: '13px' }}>Camera access required</span>\n <button type=\"button\" onClick={(e) => { stop(e); alert('Camera scanning requires HTTPS. This feature works in the installed extension.'); }}\n style={{ padding: '8px 20px', backgroundColor: '#6EB9A8', border: 'none', borderRadius: '10px', color: '#011B29', fontSize: '13px', fontWeight: 500, cursor: 'pointer' }}>\n Open Camera\n </button>\n </div>\n </div>\n )}\n </div>\n );\n}\n\nfunction WebWalletTab({ onConnected }: { onConnected: () => void }) {\n const { connect } = useWallet();\n const [mode, setMode] = useState<'menu' | 'create' | 'import' | 'unlock'>('menu');\n const [password, setPassword] = useState('');\n const [mnemonic, setMnemonic] = useState('');\n const [generatedMnemonic, setGeneratedMnemonic] = useState('');\n const [error, setError] = useState('');\n const [loading, setLoading] = useState(false);\n\n const stop = (e: React.MouseEvent | React.TouchEvent) => e.stopPropagation();\n\n const webProvider = typeof window !== 'undefined' ? (window as any).rialo : null;\n const isWebProvider = webProvider?.isWebWallet;\n const hasWallet = isWebProvider && webProvider?.hasWallet?.();\n const isUnlocked = isWebProvider && webProvider?.isUnlocked?.();\n\n const handleAction = async (action: 'create' | 'import' | 'unlock') => {\n setError('');\n setLoading(true);\n try {\n if (!webProvider?.isWebWallet) {\n throw new Error('Web wallet provider not available. Make sure registerWebWallet() is called at app startup.');\n }\n if (action === 'create') {\n if (!password || password.length < 6) throw new Error('Password must be at least 6 characters');\n const result = await webProvider.createWallet(password);\n setGeneratedMnemonic(result.mnemonic);\n try { await connect(); onConnected(); } catch {}\n } else if (action === 'import') {\n if (!mnemonic.trim()) throw new Error('Please enter your recovery phrase');\n if (!password || password.length < 6) throw new Error('Password must be at least 6 characters');\n await webProvider.importWallet(mnemonic.trim(), password);\n try { await connect(); onConnected(); } catch {}\n } else if (action === 'unlock') {\n if (!password) throw new Error('Please enter your password');\n const unlocked = await webProvider.unlock(password);\n if (!unlocked) throw new Error('Incorrect password');\n try { await connect(); onConnected(); } catch {}\n }\n } catch (err: any) {\n setError(err?.message || 'Operation failed');\n } finally {\n setLoading(false);\n }\n };\n\n // Show generated mnemonic after creation\n if (generatedMnemonic) {\n return (\n <div>\n <div style={{ padding: '14px', backgroundColor: 'rgba(110,185,168,0.08)', border: '1px solid rgba(110,185,168,0.2)', borderRadius: '12px', marginBottom: '16px' }}>\n <div style={{ color: '#6EB9A8', fontSize: '12px', fontWeight: 600, marginBottom: '8px' }}>Wallet Created & Connected!</div>\n <div style={{ color: 'rgba(255,255,255,0.6)', fontSize: '11px', marginBottom: '8px' }}>Save your recovery phrase securely:</div>\n <div style={{ padding: '10px', backgroundColor: 'rgba(0,0,0,0.3)', borderRadius: '8px', color: '#fff', fontSize: '12px', fontFamily: 'monospace', wordBreak: 'break-word', lineHeight: 1.6 }}>\n {generatedMnemonic}\n </div>\n </div>\n <button type=\"button\" onClick={(e) => { stop(e); setGeneratedMnemonic(''); onConnected(); }}\n style={S.primaryBtn(false)}>\n I've Saved It — Continue\n </button>\n </div>\n );\n }\n\n // Wallet exists but locked\n if (hasWallet && !isUnlocked) {\n return (\n <div>\n <p style={{ color: 'rgba(255,255,255,0.5)', fontSize: '13px', marginBottom: '16px' }}>Web wallet locked. Enter password to connect.</p>\n <input type=\"password\" placeholder=\"Password\" value={password}\n onChange={(e) => setPassword(e.target.value)} onClick={stop}\n onKeyDown={(e) => { if (e.key === 'Enter') handleAction('unlock'); }}\n style={S.input} />\n <button type=\"button\" onClick={(e) => { stop(e); handleAction('unlock'); }} disabled={loading} style={S.primaryBtn(loading)}>\n {loading ? 'Unlocking...' : 'Unlock & Connect'}\n </button>\n {error && <div style={S.error}>{error}</div>}\n </div>\n );\n }\n\n // Wallet exists and unlocked — direct connect\n if (hasWallet && isUnlocked) {\n return (\n <div>\n <button type=\"button\" onClick={async (e) => {\n stop(e); setLoading(true);\n try { await connect(); onConnected(); } catch (err: any) { setError(err?.message || 'Failed'); } finally { setLoading(false); }\n }} disabled={loading} style={S.walletBtn(loading)}>\n <div style={{ width: '44px', height: '44px', borderRadius: '12px', background: 'linear-gradient(135deg, #3B82F6, #6366F1)', display: 'flex', alignItems: 'center', justifyContent: 'center', color: '#fff', flexShrink: 0 }}>\n <IconWeb />\n </div>\n <div style={{ flex: 1, textAlign: 'left' }}>\n <div style={{ color: '#fff', fontWeight: 500, fontSize: '15px' }}>Web Wallet</div>\n <div style={{ fontSize: '12px', color: '#6EB9A8' }}>{loading ? 'Connecting...' : 'Ready — Click to connect'}</div>\n </div>\n </button>\n {error && <div style={S.error}>{error}</div>}\n </div>\n );\n }\n\n // Create / Import menu\n if (mode === 'create') {\n return (\n <div>\n <button type=\"button\" onClick={(e) => { stop(e); setMode('menu'); }} style={{ background: 'none', border: 'none', color: 'rgba(255,255,255,0.4)', cursor: 'pointer', fontSize: '12px', marginBottom: '12px', padding: 0 }}>← Back</button>\n <p style={{ color: 'rgba(255,255,255,0.5)', fontSize: '13px', marginBottom: '16px' }}>Create a new web wallet with a generated recovery phrase.</p>\n <input type=\"password\" placeholder=\"Set password (min 6 chars)\" value={password}\n onChange={(e) => setPassword(e.target.value)} onClick={stop} style={S.input} />\n <button type=\"button\" onClick={(e) => { stop(e); handleAction('create'); }} disabled={loading} style={S.primaryBtn(loading)}>\n {loading ? 'Creating...' : 'Create Wallet'}\n </button>\n {error && <div style={S.error}>{error}</div>}\n </div>\n );\n }\n\n if (mode === 'import') {\n return (\n <div>\n <button type=\"button\" onClick={(e) => { stop(e); setMode('menu'); }} style={{ background: 'none', border: 'none', color: 'rgba(255,255,255,0.4)', cursor: 'pointer', fontSize: '12px', marginBottom: '12px', padding: 0 }}>← Back</button>\n <p style={{ color: 'rgba(255,255,255,0.5)', fontSize: '13px', marginBottom: '16px' }}>Import wallet from recovery phrase.</p>\n <textarea placeholder=\"Enter 12 or 24 word recovery phrase\" value={mnemonic}\n onChange={(e) => setMnemonic(e.target.value)} onClick={stop}\n style={{ ...S.input, minHeight: '80px', resize: 'vertical' as const, fontFamily: 'monospace', fontSize: '13px' }} />\n <input type=\"password\" placeholder=\"Set password (min 6 chars)\" value={password}\n onChange={(e) => setPassword(e.target.value)} onClick={stop} style={S.input} />\n <button type=\"button\" onClick={(e) => { stop(e); handleAction('import'); }} disabled={loading} style={S.primaryBtn(loading)}>\n {loading ? 'Importing...' : 'Import & Connect'}\n </button>\n {error && <div style={S.error}>{error}</div>}\n </div>\n );\n }\n\n // Default menu\n return (\n <div>\n <p style={{ color: 'rgba(255,255,255,0.5)', fontSize: '13px', marginBottom: '16px', lineHeight: 1.5 }}>\n {isWebProvider ? 'Create or import a web wallet — no extension needed.' : 'Web wallet not available. Call registerWebWallet() at app startup.'}\n </p>\n {isWebProvider && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '10px' }}>\n <button type=\"button\" onClick={(e) => { stop(e); setMode('create'); setError(''); }}\n style={S.walletBtn(false)}>\n <div style={{ width: '40px', height: '40px', borderRadius: '10px', background: 'linear-gradient(135deg, #3B82F6, #6366F1)', display: 'flex', alignItems: 'center', justifyContent: 'center', color: '#fff', fontSize: '18px', flexShrink: 0 }}>+</div>\n <div style={{ textAlign: 'left' }}>\n <div style={{ color: '#fff', fontWeight: 500, fontSize: '14px' }}>Create New Wallet</div>\n <div style={{ color: 'rgba(255,255,255,0.4)', fontSize: '11px' }}>Generate a new recovery phrase</div>\n </div>\n </button>\n <button type=\"button\" onClick={(e) => { stop(e); setMode('import'); setError(''); }}\n style={S.walletBtn(false)}>\n <div style={{ width: '40px', height: '40px', borderRadius: '10px', background: 'linear-gradient(135deg, #F59E0B, #EF4444)', display: 'flex', alignItems: 'center', justifyContent: 'center', color: '#fff', flexShrink: 0 }}>\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\"><path d=\"M12 3v12\" /><path d=\"m8 11 4 4 4-4\" /><path d=\"M8 5H4a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-4\" /></svg>\n </div>\n <div style={{ textAlign: 'left' }}>\n <div style={{ color: '#fff', fontWeight: 500, fontSize: '14px' }}>Import Wallet</div>\n <div style={{ color: 'rgba(255,255,255,0.4)', fontSize: '11px' }}>Use existing recovery phrase</div>\n </div>\n </button>\n </div>\n )}\n {error && <div style={S.error}>{error}</div>}\n </div>\n );\n}\n\n// ============================================================================\n// Success View\n// ============================================================================\n\nfunction SuccessView({ address }: { address: string }) {\n return (\n <div style={{ textAlign: 'center', padding: '24px 0' }}>\n <div style={{\n width: '56px', height: '56px', borderRadius: '50%',\n backgroundColor: 'rgba(110,185,168,0.12)', border: '2px solid rgba(110,185,168,0.3)',\n display: 'flex', alignItems: 'center', justifyContent: 'center', margin: '0 auto 16px',\n }}>\n <IconCheck />\n </div>\n <div style={{ color: '#fff', fontSize: '16px', fontWeight: 600, marginBottom: '6px' }}>Connected!</div>\n <div style={{ color: 'rgba(255,255,255,0.4)', fontSize: '13px', fontFamily: 'monospace' }}>\n {formatAddress(address)}\n </div>\n </div>\n );\n}\n\n// ============================================================================\n// Main WalletModal\n// ============================================================================\n\nexport interface WalletModalExternalProps {\n scanConnectRelay: string;\n}\n\nexport function WalletModal({ scanConnectRelay }: WalletModalExternalProps) {\n const { state, connect, closeModal } = useWallet();\n const [activeTab, setActiveTab] = useState<'extension' | 'scan' | 'webwallet'>('extension');\n const [isMobile, setIsMobile] = useState(false);\n const [showSuccess, setShowSuccess] = useState(false);\n const statusOnOpenRef = useRef<string | null>(null);\n const successTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Mobile detection\n const [dragY, setDragY] = useState(0);\n const [isDragging, setIsDragging] = useState(false);\n const dragStartRef = useRef(0);\n\n const extensionDetected = isInstalled();\n\n useEffect(() => {\n const check = () => setIsMobile(window.innerWidth < 640);\n check();\n window.addEventListener('resize', check);\n return () => window.removeEventListener('resize', check);\n }, []);\n\n // Record status when modal opens to prevent auto-close on pre-existing connections\n useEffect(() => {\n if (state.isModalOpen) {\n statusOnOpenRef.current = state.status;\n // Reset tab to extension when opening\n setActiveTab('extension');\n setShowSuccess(false);\n } else {\n statusOnOpenRef.current = null;\n }\n }, [state.isModalOpen]);\n\n // Auto-close ONLY for NEW connections made while modal is open\n useEffect(() => {\n if (\n state.isModalOpen &&\n state.status === 'connected' &&\n state.accounts.length > 0 &&\n !showSuccess &&\n statusOnOpenRef.current !== 'connected'\n ) {\n setShowSuccess(true);\n successTimerRef.current = setTimeout(() => {\n closeModal();\n setShowSuccess(false);\n }, 1500);\n }\n return () => {\n if (successTimerRef.current) clearTimeout(successTimerRef.current);\n };\n }, [state.isModalOpen, state.status, state.accounts.length, showSuccess, closeModal]);\n\n // Reset on close\n useEffect(() => {\n if (!state.isModalOpen) {\n setShowSuccess(false);\n setDragY(0);\n setIsDragging(false);\n }\n }, [state.isModalOpen]);\n\n // Extension connect handler\n const handleExtensionConnect = useCallback(async () => {\n try {\n await connect();\n } catch {\n // Error is stored in state.error and shown in ExtensionTab\n }\n }, [connect]);\n\n // Touch handlers for mobile sheet\n const handleTouchStart = (e: React.TouchEvent) => {\n if (!isMobile) return;\n dragStartRef.current = e.touches[0].clientY;\n setIsDragging(true);\n };\n const handleTouchMove = (e: React.TouchEvent) => {\n if (!isDragging || !isMobile) return;\n const delta = e.touches[0].clientY - dragStartRef.current;\n if (delta > 0) setDragY(delta);\n };\n const handleTouchEnd = () => {\n if (!isMobile) return;\n setIsDragging(false);\n if (dragY > 120) closeModal();\n setDragY(0);\n };\n\n if (!state.isModalOpen) return null;\n\n const stop = (e: React.MouseEvent) => e.stopPropagation();\n\n // ── Content (shared between mobile/desktop) ──\n const content = (\n <>\n {showSuccess && state.status === 'connected' && state.accounts.length > 0 ? (\n <SuccessView address={state.accounts[0]?.address || ''} />\n ) : (\n <>\n {/* Tab Bar — ALWAYS visible, ALWAYS interactive */}\n <div style={S.tabBar}>\n <button type=\"button\" onClick={(e) => { stop(e); setActiveTab('extension'); }} style={tabStyle(activeTab === 'extension')}>\n <IconExtension /> Extension\n </button>\n <button type=\"button\" onClick={(e) => { stop(e); setActiveTab('scan'); }} style={tabStyle(activeTab === 'scan')}>\n <IconQR /> Scan\n </button>\n <button type=\"button\" onClick={(e) => { stop(e); setActiveTab('webwallet'); }} style={tabStyle(activeTab === 'webwallet')}>\n <IconWeb /> Web Wallet\n </button>\n </div>\n\n {/* Tab Content */}\n {activeTab === 'extension' && (\n <ExtensionTab\n onConnect={handleExtensionConnect}\n extensionDetected={extensionDetected}\n connecting={state.status === 'connecting'}\n error={state.error}\n />\n )}\n {activeTab === 'scan' && (\n <ScanTab scanConnectRelay={scanConnectRelay} />\n )}\n {activeTab === 'webwallet' && (\n <WebWalletTab onConnected={() => {}} />\n )}\n\n {/* Footer */}\n <div style={{\n marginTop: '24px', textAlign: 'center', color: 'rgba(255,255,255,0.2)', fontSize: '11px',\n paddingTop: '16px', borderTop: '1px solid rgba(255,255,255,0.04)',\n }}>\n Powered by Rialo Network\n </div>\n </>\n )}\n </>\n );\n\n const keyframes = `\n @keyframes swModalFadeIn {\n from { opacity: 0; transform: scale(0.97) translateY(8px); }\n to { opacity: 1; transform: scale(1) translateY(0); }\n }\n @keyframes swModalSlideUp {\n from { transform: translateY(100%); }\n to { transform: translateY(0); }\n }\n @keyframes swModalPulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.3; }\n }\n `;\n\n // ── Mobile: slide-up sheet ──\n if (isMobile) {\n return (\n <div style={{ position: 'fixed', inset: 0, zIndex: 9999 }}>\n <div style={S.backdrop} onClick={closeModal} />\n <div\n onTouchStart={handleTouchStart}\n onTouchMove={handleTouchMove}\n onTouchEnd={handleTouchEnd}\n style={{\n position: 'fixed', bottom: 0, left: 0, right: 0,\n backgroundColor: '#011B29', borderTopLeftRadius: '24px', borderTopRightRadius: '24px',\n padding: '0 20px 28px', maxHeight: '85vh', overflow: 'auto',\n boxShadow: '0 -8px 40px rgba(0,0,0,0.5)',\n transform: `translateY(${dragY}px)`,\n transition: isDragging ? 'none' : 'transform 0.3s cubic-bezier(0.4,0,0.2,1)',\n animation: isDragging ? 'none' : 'swModalSlideUp 0.35s cubic-bezier(0.4,0,0.2,1)',\n }}\n >\n <div style={{ display: 'flex', justifyContent: 'center', padding: '12px 0 16px', cursor: 'grab', touchAction: 'none' }}>\n <div style={{ width: '36px', height: '4px', borderRadius: '2px', backgroundColor: 'rgba(255,255,255,0.12)' }} />\n </div>\n <div style={S.header}>\n <h2 style={S.title}>Connect Wallet</h2>\n <button type=\"button\" onClick={closeModal} style={S.closeBtn}><IconClose /></button>\n </div>\n {content}\n </div>\n <style>{keyframes}</style>\n </div>\n );\n }\n\n // ── Desktop: centered dialog ──\n return (\n <div style={{ position: 'fixed', inset: 0, zIndex: 9999 }}>\n <div style={S.backdrop} onClick={closeModal} />\n <div style={{ position: 'fixed', inset: 0, display: 'flex', alignItems: 'center', justifyContent: 'center', pointerEvents: 'none' }}>\n <div style={S.dialog}>\n <div style={S.header}>\n <h2 style={S.title}>Connect Wallet</h2>\n <button type=\"button\" onClick={closeModal} style={S.closeBtn}><IconClose /></button>\n </div>\n {content}\n </div>\n </div>\n <style>{keyframes}</style>\n </div>\n );\n}\n","/**\n * @cookill/wallet-adapter/react v3.1.0\n * React context, hooks, and components\n * \n * ARCHITECTURE:\n * - All provider calls are wrapped with timeout\n * - Auto-connect uses checkSession() (silent, never triggers approval)\n * - connect() is always user-initiated\n * - State updates are batched via useReducer\n * - Scan-to-Connect modal with bidirectional QR support\n * - REX & SfS hooks for confidential and gasless transactions\n */\n\nimport React, {\n createContext,\n useContext,\n useReducer,\n useEffect,\n useCallback,\n useRef,\n useMemo,\n useState,\n type ReactNode,\n} from 'react';\n\nimport { WalletModal as WalletModalComponent } from './WalletModal';\n\nimport {\n SheepWallet,\n isInstalled,\n hasProvider,\n waitForProvider,\n normalizeAccounts,\n withTimeout,\n formatAddress,\n type WalletAccount,\n type RialoNetwork,\n type TransactionRequest,\n type TransactionResult,\n type SignedMessage,\n type WalletInfo,\n type RialoProvider,\n type REXCapabilities,\n type REXTransactionResult,\n type SfSPosition,\n type SfSCreateParams,\n type SfSUpdateParams,\n type SfSCreditBalance,\n type ScanConnectURI,\n type ScanConnectStatus,\n} from '../core';\n\n// ============================================================================\n// State Types\n// ============================================================================\n\nexport interface WalletState {\n status: 'disconnected' | 'connecting' | 'connected' | 'error';\n accounts: WalletAccount[];\n network: RialoNetwork;\n balance: string | null;\n error: Error | null;\n isModalOpen: boolean;\n scanConnectStatus: ScanConnectStatus;\n}\n\ntype WalletAction =\n | { type: 'CONNECTING' }\n | { type: 'CONNECTED'; accounts: WalletAccount[]; network: RialoNetwork }\n | { type: 'DISCONNECTED' }\n | { type: 'ERROR'; error: Error }\n | { type: 'SET_BALANCE'; balance: string }\n | { type: 'SET_NETWORK'; network: RialoNetwork }\n | { type: 'SET_ACCOUNTS'; accounts: WalletAccount[] }\n | { type: 'OPEN_MODAL' }\n | { type: 'CLOSE_MODAL' }\n | { type: 'RESET_ERROR' }\n | { type: 'SET_SCAN_STATUS'; status: ScanConnectStatus };\n\nconst initialState: WalletState = {\n status: 'disconnected',\n accounts: [],\n network: 'devnet',\n balance: null,\n error: null,\n isModalOpen: false,\n scanConnectStatus: 'idle',\n};\n\nfunction walletReducer(state: WalletState, action: WalletAction): WalletState {\n switch (action.type) {\n case 'CONNECTING':\n return { ...state, status: 'connecting', error: null };\n case 'CONNECTED':\n return {\n ...state,\n status: 'connected',\n accounts: action.accounts,\n network: action.network,\n error: null,\n // Do NOT close modal here — let the modal show success state first\n };\n case 'DISCONNECTED':\n return { ...state, status: 'disconnected', accounts: [], balance: null, error: null };\n case 'ERROR':\n return { ...state, status: 'error', error: action.error };\n case 'SET_BALANCE':\n return { ...state, balance: action.balance };\n case 'SET_NETWORK':\n return { ...state, network: action.network };\n case 'SET_ACCOUNTS':\n return { ...state, accounts: action.accounts };\n case 'OPEN_MODAL':\n return { ...state, isModalOpen: true };\n case 'CLOSE_MODAL':\n return { ...state, isModalOpen: false, scanConnectStatus: 'idle' };\n case 'RESET_ERROR':\n return { ...state, error: null, status: state.accounts.length > 0 ? 'connected' : 'disconnected' };\n case 'SET_SCAN_STATUS':\n return { ...state, scanConnectStatus: action.status };\n default:\n return state;\n }\n}\n\n// ============================================================================\n// Context Types\n// ============================================================================\n\nexport interface WalletContextValue {\n state: WalletState;\n connected: boolean;\n connecting: boolean;\n activeAccount: WalletAccount | null;\n chainId: string;\n isInstalled: boolean;\n wallets: WalletInfo[];\n \n // Actions\n connect: () => Promise<WalletAccount[]>;\n disconnect: () => Promise<void>;\n refreshBalance: () => Promise<void>;\n switchNetwork: (network: RialoNetwork) => Promise<void>;\n \n // Transactions\n signMessage: (message: string) => Promise<SignedMessage>;\n signTransaction: (tx: TransactionRequest) => Promise<string>;\n sendTransaction: (tx: TransactionRequest) => Promise<TransactionResult>;\n signAndSendTransaction: (tx: TransactionRequest) => Promise<TransactionResult>;\n \n // REX\n getREXCapabilities: () => Promise<REXCapabilities>;\n submitREXTransaction: (tx: TransactionRequest) => Promise<REXTransactionResult>;\n \n // SfS\n sendGaslessTransaction: (tx: Omit<TransactionRequest, 'gasless'>) => Promise<TransactionResult>;\n getSfSPositions: () => Promise<SfSPosition[]>;\n createSfSPosition: (params: SfSCreateParams) => Promise<SfSPosition>;\n getSfSCredits: () => Promise<SfSCreditBalance>;\n \n // Modal\n openModal: () => void;\n closeModal: () => void;\n \n // Wallet ref for advanced usage\n wallet: SheepWallet | null;\n}\n\nconst WalletContext = createContext<WalletContextValue | null>(null);\n\n// ============================================================================\n// Default Wallet List\n// ============================================================================\n\nconst DEFAULT_WALLETS: WalletInfo[] = [\n {\n id: 'sheep-wallet',\n name: 'Sheep Wallet',\n icon: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHJ4PSI4IiBmaWxsPSIjMDExQjI5Ii8+PHRleHQgeD0iNTAlIiB5PSI1NSUiIGRvbWluYW50LWJhc2VsaW5lPSJtaWRkbGUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXdlaWdodD0iYm9sZCIgZm9udC1zaXplPSIxNiIgZmlsbD0iIzZFQjlBOCI+Uzwvc2VsZj48L3N2Zz4=',\n downloadUrl: 'https://rialo.io/wallet',\n supportsREX: true,\n supportsSfS: true,\n supportsScanConnect: true,\n },\n];\n\n// ============================================================================\n// Provider Component\n// ============================================================================\n\nexport interface WalletProviderProps {\n children: ReactNode;\n network?: RialoNetwork;\n autoConnect?: boolean;\n wallets?: WalletInfo[];\n /** Default relay URL for scan-to-connect */\n scanConnectRelay?: string;\n onConnect?: (accounts: WalletAccount[]) => void;\n onDisconnect?: () => void;\n onError?: (error: Error) => void;\n onNetworkChange?: (network: RialoNetwork) => void;\n}\n\nexport function WalletProvider({\n children,\n network: initialNetwork = 'devnet',\n autoConnect = true,\n wallets: customWallets = [],\n scanConnectRelay = 'wss://relay.rialo.io',\n onConnect,\n onDisconnect,\n onError,\n onNetworkChange,\n}: WalletProviderProps) {\n const [state, dispatch] = useReducer(walletReducer, {\n ...initialState,\n network: initialNetwork,\n });\n\n const walletRef = useRef<SheepWallet | null>(null);\n const providerRef = useRef<RialoProvider | undefined>(undefined);\n const connectingRef = useRef(false);\n const mountedRef = useRef(true);\n\n // Initialize wallet instance\n useEffect(() => {\n mountedRef.current = true;\n walletRef.current = new SheepWallet();\n\n waitForProvider(3000).then((provider) => {\n if (mountedRef.current) {\n providerRef.current = provider;\n }\n });\n\n return () => {\n mountedRef.current = false;\n walletRef.current?.destroy();\n };\n }, []);\n\n // Setup provider event listeners\n useEffect(() => {\n const setupEvents = async () => {\n const provider = await waitForProvider(3000);\n if (!provider || !mountedRef.current) return;\n\n providerRef.current = provider;\n const cleanups: Array<() => void> = [];\n\n cleanups.push(\n provider.on('disconnect', () => {\n if (!mountedRef.current) return;\n dispatch({ type: 'DISCONNECTED' });\n onDisconnect?.();\n })\n );\n\n cleanups.push(\n provider.on('accountsChanged', (data) => {\n if (!mountedRef.current) return;\n const accounts = normalizeAccounts(data as any[]);\n dispatch({ type: 'SET_ACCOUNTS', accounts });\n })\n );\n\n cleanups.push(\n provider.on('networkChanged', (data) => {\n if (!mountedRef.current) return;\n const { network } = data as { network: RialoNetwork };\n if (network) {\n dispatch({ type: 'SET_NETWORK', network });\n onNetworkChange?.(network);\n }\n })\n );\n\n return () => {\n cleanups.forEach(fn => { try { fn(); } catch {} });\n };\n };\n\n const cleanup = setupEvents();\n return () => { cleanup.then(fn => fn?.()); };\n }, [onDisconnect, onNetworkChange]);\n\n // Auto-connect (silent session restore only)\n useEffect(() => {\n if (!autoConnect) return;\n if (state.status === 'connected' || state.status === 'connecting') return;\n\n const tryAutoConnect = async () => {\n const wallet = walletRef.current;\n if (!wallet || !hasProvider()) return;\n\n try {\n const accounts = await wallet.checkSession();\n if (accounts && accounts.length > 0 && mountedRef.current) {\n dispatch({ type: 'CONNECTED', accounts, network: wallet.network });\n onConnect?.(accounts);\n }\n } catch {}\n };\n\n const timer = setTimeout(tryAutoConnect, 500);\n return () => clearTimeout(timer);\n }, [autoConnect, onConnect]);\n\n // Refresh balance periodically\n useEffect(() => {\n if (state.status !== 'connected' || state.accounts.length === 0) return;\n\n const refresh = async () => {\n const wallet = walletRef.current;\n if (!wallet || !mountedRef.current) return;\n\n try {\n const balance = await wallet.getBalance();\n if (mountedRef.current) {\n dispatch({ type: 'SET_BALANCE', balance });\n }\n } catch {}\n };\n\n refresh();\n const interval = setInterval(refresh, 30_000);\n return () => clearInterval(interval);\n }, [state.status, state.accounts]);\n\n // =========================================================================\n // Actions\n // =========================================================================\n\n const connect = useCallback(async (): Promise<WalletAccount[]> => {\n if (connectingRef.current) {\n throw new Error('Connection already in progress');\n }\n\n const wallet = walletRef.current;\n if (!wallet) {\n const err = new Error('Wallet not initialized');\n dispatch({ type: 'ERROR', error: err });\n throw err;\n }\n\n // No provider at all (no extension, no web wallet) → open modal\n if (!hasProvider()) {\n dispatch({ type: 'OPEN_MODAL' });\n return [];\n }\n\n connectingRef.current = true;\n dispatch({ type: 'CONNECTING' });\n\n try {\n const accounts = await wallet.connect();\n \n if (mountedRef.current) {\n dispatch({ type: 'CONNECTED', accounts, network: wallet.network });\n onConnect?.(accounts);\n }\n\n return accounts;\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n if (mountedRef.current) {\n dispatch({ type: 'ERROR', error: err });\n onError?.(err);\n }\n throw err;\n } finally {\n connectingRef.current = false;\n }\n }, [onConnect, onError]);\n\n const disconnect = useCallback(async (): Promise<void> => {\n const wallet = walletRef.current;\n if (!wallet) return;\n\n try {\n await wallet.disconnect();\n } catch {}\n\n if (mountedRef.current) {\n dispatch({ type: 'DISCONNECTED' });\n onDisconnect?.();\n }\n }, [onDisconnect]);\n\n const refreshBalance = useCallback(async (): Promise<void> => {\n const wallet = walletRef.current;\n if (!wallet || state.status !== 'connected') return;\n\n try {\n const balance = await wallet.getBalance();\n if (mountedRef.current) {\n dispatch({ type: 'SET_BALANCE', balance });\n }\n } catch {}\n }, [state.status]);\n\n const switchNetwork = useCallback(async (network: RialoNetwork): Promise<void> => {\n const wallet = walletRef.current;\n if (!wallet) return;\n\n await wallet.switchNetwork(network);\n \n if (mountedRef.current) {\n dispatch({ type: 'SET_NETWORK', network });\n onNetworkChange?.(network);\n }\n }, [onNetworkChange]);\n\n // =========================================================================\n // Standard Transactions\n // =========================================================================\n\n const signMessage = useCallback(async (message: string): Promise<SignedMessage> => {\n const wallet = walletRef.current;\n if (!wallet || state.status !== 'connected') throw new Error('Wallet not connected');\n return wallet.signMessage(message);\n }, [state.status]);\n\n const signTransaction = useCallback(async (tx: TransactionRequest): Promise<string> => {\n const wallet = walletRef.current;\n if (!wallet || state.status !== 'connected') throw new Error('Wallet not connected');\n return wallet.signTransaction(tx);\n }, [state.status]);\n\n const sendTransaction = useCallback(async (tx: TransactionRequest): Promise<TransactionResult> => {\n const wallet = walletRef.current;\n if (!wallet || state.status !== 'connected') throw new Error('Wallet not connected');\n return wallet.sendTransaction(tx);\n }, [state.status]);\n\n const signAndSendTransaction = useCallback(async (tx: TransactionRequest): Promise<TransactionResult> => {\n const wallet = walletRef.current;\n if (!wallet || state.status !== 'connected') throw new Error('Wallet not connected');\n return wallet.signAndSendTransaction(tx);\n }, [state.status]);\n\n // =========================================================================\n // REX — Confidential Transactions\n // =========================================================================\n\n const getREXCapabilities = useCallback(async (): Promise<REXCapabilities> => {\n const wallet = walletRef.current;\n if (!wallet) return { supported: false, privacyModes: [], maxInputSize: 0, programs: [] };\n return wallet.getREXCapabilities();\n }, []);\n\n const submitREXTransaction = useCallback(async (tx: TransactionRequest): Promise<REXTransactionResult> => {\n const wallet = walletRef.current;\n if (!wallet || state.status !== 'connected') throw new Error('Wallet not connected');\n return wallet.submitREXTransaction(tx);\n }, [state.status]);\n\n // =========================================================================\n // SfS — Gasless Transactions\n // =========================================================================\n\n const sendGaslessTransaction = useCallback(async (tx: Omit<TransactionRequest, 'gasless'>): Promise<TransactionResult> => {\n const wallet = walletRef.current;\n if (!wallet || state.status !== 'connected') throw new Error('Wallet not connected');\n return wallet.sendGaslessTransaction(tx);\n }, [state.status]);\n\n const getSfSPositions = useCallback(async (): Promise<SfSPosition[]> => {\n const wallet = walletRef.current;\n if (!wallet || state.status !== 'connected') return [];\n return wallet.getSfSPositions();\n }, [state.status]);\n\n const createSfSPosition = useCallback(async (params: SfSCreateParams): Promise<SfSPosition> => {\n const wallet = walletRef.current;\n if (!wallet || state.status !== 'connected') throw new Error('Wallet not connected');\n return wallet.createSfSPosition(params);\n }, [state.status]);\n\n const getSfSCredits = useCallback(async (): Promise<SfSCreditBalance> => {\n const wallet = walletRef.current;\n if (!wallet || state.status !== 'connected') {\n return { available: '0', usedThisEpoch: '0', totalEarned: '0', estimatedPerEpoch: '0' };\n }\n return wallet.getSfSCredits();\n }, [state.status]);\n\n // =========================================================================\n // Modal\n // =========================================================================\n\n const openModal = useCallback(() => dispatch({ type: 'OPEN_MODAL' }), []);\n const closeModal = useCallback(() => dispatch({ type: 'CLOSE_MODAL' }), []);\n\n // =========================================================================\n // Context Value\n // =========================================================================\n\n const wallets = useMemo(() => {\n const extensionInstalled = isInstalled();\n return [...DEFAULT_WALLETS, ...customWallets].map(w => ({\n ...w,\n installed: w.id === 'sheep-wallet' ? extensionInstalled : false,\n }));\n }, [customWallets]);\n\n const value: WalletContextValue = useMemo(() => ({\n state,\n connected: state.status === 'connected',\n connecting: state.status === 'connecting',\n activeAccount: state.accounts[0] || null,\n chainId: `rialo:${state.network}`,\n isInstalled: isInstalled(),\n wallets,\n connect,\n disconnect,\n refreshBalance,\n switchNetwork,\n signMessage,\n signTransaction,\n sendTransaction,\n signAndSendTransaction,\n getREXCapabilities,\n submitREXTransaction,\n sendGaslessTransaction,\n getSfSPositions,\n createSfSPosition,\n getSfSCredits,\n openModal,\n closeModal,\n wallet: walletRef.current,\n }), [\n state, wallets, connect, disconnect, refreshBalance, switchNetwork,\n signMessage, signTransaction, sendTransaction, signAndSendTransaction,\n getREXCapabilities, submitREXTransaction, sendGaslessTransaction,\n getSfSPositions, createSfSPosition, getSfSCredits, openModal, closeModal,\n ]);\n\n return (\n <WalletContext.Provider value={value}>\n {children}\n <WalletModalComponent scanConnectRelay={scanConnectRelay} />\n </WalletContext.Provider>\n );\n}\n\n// ============================================================================\n// Hooks\n// ============================================================================\n\nexport function useWallet(): WalletContextValue {\n const context = useContext(WalletContext);\n if (!context) {\n throw new Error('useWallet must be used within WalletProvider');\n }\n return context;\n}\n\nexport function useIsConnected(): boolean {\n return useWallet().connected;\n}\n\nexport function useActiveAccount(): WalletAccount | null {\n return useWallet().activeAccount;\n}\n\nexport function useAccounts(): WalletAccount[] {\n return useWallet().state.accounts;\n}\n\nexport function useBalance(): { balance: string | null; refresh: () => Promise<void> } {\n const { state, refreshBalance } = useWallet();\n return { balance: state.balance, refresh: refreshBalance };\n}\n\nexport function useNetwork(): { network: RialoNetwork; chainId: string } {\n const { state, chainId } = useWallet();\n return { network: state.network, chainId };\n}\n\nexport function useSwitchNetwork() {\n const { switchNetwork, state } = useWallet();\n return { switchNetwork, network: state.network };\n}\n\nexport function useConnectWallet() {\n const { connect, openModal, connecting, connected, isInstalled, state } = useWallet();\n return { connect, openModal, connecting, connected, isInstalled, error: state.error };\n}\n\nexport function useDisconnectWallet() {\n const { disconnect, connected } = useWallet();\n return { disconnect, connected };\n}\n\nexport function useSignMessage() {\n const { signMessage, connected } = useWallet();\n return { signMessage, connected };\n}\n\nexport function useSendTransaction() {\n const { sendTransaction, signAndSendTransaction, sendGaslessTransaction, connected } = useWallet();\n return { sendTransaction, signAndSendTransaction, sendGaslessTransaction, connected };\n}\n\n/** Hook for REX (confidential) transaction capabilities */\nexport function useREX() {\n const { getREXCapabilities, submitREXTransaction, connected } = useWallet();\n const [capabilities, setCapabilities] = useState<REXCapabilities | null>(null);\n\n useEffect(() => {\n if (connected) {\n getREXCapabilities().then(setCapabilities).catch(() => {});\n }\n }, [connected, getREXCapabilities]);\n\n return {\n capabilities,\n supported: capabilities?.supported ?? false,\n submitREXTransaction,\n connected,\n };\n}\n\n/** Hook for Stake-for-Service (gasless) operations */\nexport function useSfS() {\n const { getSfSPositions, createSfSPosition, getSfSCredits, sendGaslessTransaction, connected } = useWallet();\n const [positions, setPositions] = useState<SfSPosition[]>([]);\n const [credits, setCredits] = useState<SfSCreditBalance | null>(null);\n\n const refresh = useCallback(async () => {\n if (!connected) return;\n const [pos, cred] = await Promise.all([\n getSfSPositions().catch(() => [] as SfSPosition[]),\n getSfSCredits().catch(() => null),\n ]);\n setPositions(pos);\n if (cred) setCredits(cred);\n }, [connected, getSfSPositions, getSfSCredits]);\n\n useEffect(() => {\n refresh();\n }, [refresh]);\n\n return {\n positions,\n credits,\n hasCredits: BigInt(credits?.available ?? '0') > 0n,\n createPosition: createSfSPosition,\n sendGasless: sendGaslessTransaction,\n refresh,\n connected,\n };\n}\n\n/** Hook for Scan-to-Connect */\nexport function useScanConnect() {\n const { wallet, state } = useWallet();\n const [scanURI, setScanURI] = useState<ScanConnectURI | null>(null);\n const [status, setStatus] = useState<ScanConnectStatus>('idle');\n\n const generateQR = useCallback(async () => {\n if (!wallet) return;\n setStatus('generating');\n try {\n const uri = await wallet.createScanSession();\n setScanURI(uri);\n setStatus('waiting');\n } catch (error) {\n setStatus('error');\n }\n }, [wallet]);\n\n const approveSession = useCallback(async (sessionId: string) => {\n if (!wallet) return [];\n setStatus('approving');\n try {\n const accounts = await wallet.approveScanSession(sessionId);\n setStatus('connected');\n return accounts;\n } catch {\n setStatus('error');\n return [];\n }\n }, [wallet]);\n\n const rejectSession = useCallback(async (sessionId: string) => {\n if (!wallet) return;\n await wallet.rejectScanSession(sessionId);\n setStatus('rejected');\n }, [wallet]);\n\n return {\n scanURI,\n status,\n generateQR,\n approveSession,\n rejectSession,\n };\n}\n\n// WalletModal is now in ./WalletModal.tsx\n\n// ============================================================================\n// ConnectButton Component\n// ============================================================================\n\nexport interface ConnectButtonProps {\n connectLabel?: string;\n disconnectLabel?: string;\n showAddress?: boolean;\n showBalance?: boolean;\n /** Show feature badges (REX, SfS) */\n showFeatures?: boolean;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function ConnectButton({\n connectLabel = 'Connect Wallet',\n disconnectLabel = 'Disconnect',\n showAddress = true,\n showBalance = false,\n showFeatures = false,\n className,\n style,\n}: ConnectButtonProps) {\n const { connected, connecting, connect, disconnect, activeAccount, state, openModal, isInstalled: installed } = useWallet();\n const [showMenu, setShowMenu] = React.useState(false);\n\n const handleClick = async () => {\n if (connected) {\n setShowMenu(!showMenu);\n } else {\n // Always open modal so user can choose: Extension, Scan, or Web Wallet\n openModal();\n }\n };\n\n const displayText = connected && activeAccount && showAddress\n ? `${activeAccount.address.slice(0, 6)}...${activeAccount.address.slice(-4)}`\n : connecting\n ? 'Connecting...'\n : connectLabel;\n\n const defaultStyle: React.CSSProperties = {\n padding: '12px 20px',\n borderRadius: '12px',\n border: 'none',\n cursor: connecting ? 'wait' : 'pointer',\n fontWeight: 500,\n fontSize: '14px',\n backgroundColor: connected ? '#1a3a4d' : '#6EB9A8',\n color: connected ? '#ffffff' : '#011B29',\n transition: 'all 0.2s',\n position: 'relative',\n ...style,\n };\n\n return (\n <div style={{ position: 'relative', display: 'inline-block' }}>\n <button\n onClick={handleClick}\n disabled={connecting}\n className={className}\n style={defaultStyle}\n >\n {displayText}\n {showBalance && state.balance && (\n <span style={{ marginLeft: '8px', opacity: 0.8 }}>\n {(Number(state.balance) / 1e9).toFixed(2)} RLO\n </span>\n )}\n </button>\n\n {connected && showMenu && (\n <div\n style={{\n position: 'absolute',\n top: '100%',\n right: 0,\n marginTop: '8px',\n backgroundColor: '#011B29',\n borderRadius: '12px',\n padding: '8px',\n minWidth: '180px',\n boxShadow: '0 10px 40px rgba(0, 0, 0, 0.3)',\n zIndex: 100,\n border: '1px solid #2a4a5d',\n }}\n >\n {/* Account info */}\n {activeAccount && (\n <div style={{\n padding: '8px 12px',\n borderBottom: '1px solid #1a3a4d',\n marginBottom: '4px',\n }}>\n <div style={{ color: '#94a3b8', fontSize: '10px', marginBottom: '4px' }}>Connected</div>\n <div style={{ color: '#ffffff', fontSize: '12px', fontFamily: 'monospace' }}>\n {formatAddress(activeAccount.address, 8)}\n </div>\n </div>\n )}\n\n {/* Feature indicators */}\n {showFeatures && (\n <div style={{\n padding: '6px 12px',\n display: 'flex',\n gap: '6px',\n borderBottom: '1px solid #1a3a4d',\n marginBottom: '4px',\n }}>\n <span style={{ fontSize: '10px', color: '#8B5CF6', backgroundColor: '#8B5CF615', padding: '2px 6px', borderRadius: '4px' }}>REX</span>\n <span style={{ fontSize: '10px', color: '#F59E0B', backgroundColor: '#F59E0B15', padding: '2px 6px', borderRadius: '4px' }}>SfS</span>\n </div>\n )}\n\n <button\n onClick={() => { setShowMenu(false); disconnect(); }}\n style={{\n width: '100%',\n padding: '10px 12px',\n backgroundColor: 'transparent',\n border: 'none',\n borderRadius: '8px',\n color: '#ef4444',\n cursor: 'pointer',\n textAlign: 'left',\n fontSize: '13px',\n }}\n >\n {disconnectLabel}\n </button>\n </div>\n )}\n </div>\n );\n}\n","/**\n * @cookill/wallet-adapter/react v3.0.0\n * Error Boundary for wallet integration\n */\n\nimport React, { Component, type ReactNode, type ErrorInfo } from 'react';\n\nexport interface WalletErrorBoundaryProps {\n children: ReactNode;\n fallback?: ReactNode | ((error: Error, reset: () => void) => ReactNode);\n onError?: (error: Error, errorInfo: ErrorInfo) => void;\n}\n\ninterface State {\n hasError: boolean;\n error: Error | null;\n}\n\nexport class WalletErrorBoundary extends Component<WalletErrorBoundaryProps, State> {\n constructor(props: WalletErrorBoundaryProps) {\n super(props);\n this.state = { hasError: false, error: null };\n }\n\n static getDerivedStateFromError(error: Error): State {\n return { hasError: true, error };\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo): void {\n console.error('[WalletErrorBoundary] Caught error:', error, errorInfo);\n this.props.onError?.(error, errorInfo);\n }\n\n handleReset = (): void => {\n this.setState({ hasError: false, error: null });\n };\n\n render(): ReactNode {\n if (this.state.hasError && this.state.error) {\n const { fallback } = this.props;\n \n if (typeof fallback === 'function') {\n return fallback(this.state.error, this.handleReset);\n }\n \n if (fallback) {\n return fallback;\n }\n\n return (\n <div style={{\n padding: '20px',\n margin: '10px',\n backgroundColor: '#1a1a2e',\n border: '1px solid #ef4444',\n borderRadius: '12px',\n color: '#ffffff',\n }}>\n <h3 style={{ color: '#ef4444', margin: '0 0 12px 0' }}>\n Wallet Connection Error\n </h3>\n <p style={{ color: '#94a3b8', margin: '0 0 16px 0', fontSize: '14px' }}>\n {this.state.error.message}\n </p>\n <button\n onClick={this.handleReset}\n style={{\n padding: '8px 16px',\n backgroundColor: '#6EB9A8',\n color: '#011B29',\n border: 'none',\n borderRadius: '8px',\n cursor: 'pointer',\n fontWeight: 500,\n }}\n >\n Try Again\n </button>\n </div>\n );\n }\n\n return this.props.children;\n }\n}\n\n/**\n * HOC to wrap components with error boundary\n */\nexport function withWalletErrorBoundary<P extends object>(\n WrappedComponent: React.ComponentType<P>,\n fallback?: WalletErrorBoundaryProps['fallback']\n) {\n return function WithErrorBoundary(props: P) {\n return (\n <WalletErrorBoundary fallback={fallback}>\n <WrappedComponent {...props} />\n </WalletErrorBoundary>\n );\n };\n}\n\nexport default WalletErrorBoundary;\n","/**\n * @cookill/wallet-adapter/react v3.0.0\n * Loading and status indicator components\n */\n\nimport React from 'react';\n\n// ============================================================================\n// LoadingSpinner\n// ============================================================================\n\nexport interface LoadingSpinnerProps {\n size?: 'sm' | 'md' | 'lg';\n color?: string;\n className?: string;\n}\n\nexport function LoadingSpinner({ \n size = 'md', \n color = '#6EB9A8',\n className,\n}: LoadingSpinnerProps) {\n const sizeMap = { sm: 16, md: 24, lg: 32 };\n const px = sizeMap[size];\n\n return (\n <svg\n className={className}\n width={px}\n height={px}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n style={{ animation: 'spin 1s linear infinite' }}\n >\n <style>{`@keyframes spin { to { transform: rotate(360deg); } }`}</style>\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke={color}\n strokeWidth=\"2.5\"\n fill=\"none\"\n strokeDasharray=\"50 20\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n}\n\n// ============================================================================\n// ConnectionStatus\n// ============================================================================\n\nexport type ConnectionStatusType = \n | 'idle' \n | 'connecting' \n | 'approving' \n | 'signing' \n | 'success' \n | 'error';\n\nexport interface ConnectionStatusProps {\n status: ConnectionStatusType;\n message?: string;\n onRetry?: () => void;\n}\n\nexport function ConnectionStatus({ status, message, onRetry }: ConnectionStatusProps) {\n const configs: Record<ConnectionStatusType, { color: string; label: string }> = {\n idle: { color: '#64748b', label: 'Ready' },\n connecting: { color: '#6EB9A8', label: 'Connecting...' },\n approving: { color: '#f59e0b', label: 'Waiting for approval...' },\n signing: { color: '#6EB9A8', label: 'Signing...' },\n success: { color: '#22c55e', label: 'Connected' },\n error: { color: '#ef4444', label: 'Error' },\n };\n\n const config = configs[status];\n\n return (\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n padding: '12px 16px',\n backgroundColor: `${config.color}15`,\n borderRadius: '10px',\n border: `1px solid ${config.color}30`,\n }}>\n {(status === 'connecting' || status === 'approving' || status === 'signing') && (\n <LoadingSpinner size=\"sm\" color={config.color} />\n )}\n \n <div style={{ flex: 1 }}>\n <div style={{ color: config.color, fontWeight: 500, fontSize: '14px' }}>\n {config.label}\n </div>\n {message && (\n <div style={{ color: '#94a3b8', fontSize: '12px', marginTop: '2px' }}>\n {message}\n </div>\n )}\n </div>\n\n {status === 'error' && onRetry && (\n <button\n onClick={onRetry}\n style={{\n padding: '6px 12px',\n backgroundColor: config.color,\n color: '#ffffff',\n border: 'none',\n borderRadius: '6px',\n cursor: 'pointer',\n fontSize: '12px',\n fontWeight: 500,\n }}\n >\n Retry\n </button>\n )}\n </div>\n );\n}\n\n// ============================================================================\n// ApprovalPending\n// ============================================================================\n\nexport interface ApprovalPendingProps {\n title?: string;\n message?: string;\n walletName?: string;\n onCancel?: () => void;\n}\n\nexport function ApprovalPending({\n title = 'Waiting for Approval',\n message = 'Please approve the request in your wallet',\n walletName = 'Sheep Wallet',\n onCancel,\n}: ApprovalPendingProps) {\n return (\n <div style={{\n textAlign: 'center',\n padding: '32px 24px',\n }}>\n {/* Animated wallet icon */}\n <div style={{\n width: '64px',\n height: '64px',\n margin: '0 auto 20px',\n borderRadius: '16px',\n backgroundColor: '#6EB9A815',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n animation: 'pulse 2s ease-in-out infinite',\n }}>\n <style>{`\n @keyframes pulse {\n 0%, 100% { transform: scale(1); opacity: 1; }\n 50% { transform: scale(1.05); opacity: 0.8; }\n }\n `}</style>\n <LoadingSpinner size=\"lg\" />\n </div>\n\n <h3 style={{ \n color: '#ffffff', \n margin: '0 0 8px 0',\n fontSize: '18px',\n fontWeight: 600,\n }}>\n {title}\n </h3>\n \n <p style={{ \n color: '#94a3b8', \n margin: '0 0 24px 0',\n fontSize: '14px',\n }}>\n {message}\n </p>\n\n <div style={{\n padding: '12px 16px',\n backgroundColor: '#1a3a4d',\n borderRadius: '10px',\n color: '#6EB9A8',\n fontSize: '13px',\n marginBottom: '20px',\n }}>\n Check {walletName} extension\n </div>\n\n {onCancel && (\n <button\n onClick={onCancel}\n style={{\n padding: '10px 24px',\n backgroundColor: 'transparent',\n border: '1px solid #374151',\n borderRadius: '8px',\n color: '#9ca3af',\n cursor: 'pointer',\n fontSize: '14px',\n }}\n >\n Cancel\n </button>\n )}\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/types.ts","../src/core/provider.ts","../src/core/utils.ts","../src/core/wallet.ts"],"names":[],"mappings":"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","file":"react.js","sourcesContent":["/**\n * @cookill/wallet-adapter v3.0.0\n * Core type definitions\n */\n\n// ============================================================================\n// Network & Chain Types\n// ============================================================================\n\nexport type RialoNetwork = 'mainnet' | 'testnet' | 'devnet' | 'localnet';\nexport type RialoChainId = `rialo:${RialoNetwork}`;\n\nexport interface NetworkConfig {\n chainId: RialoChainId;\n name: string;\n rpcUrl: string;\n wsUrl?: string;\n explorerUrl?: string;\n symbol: string;\n decimals: number;\n}\n\nexport const NETWORKS: Record<RialoNetwork, NetworkConfig> = {\n mainnet: {\n chainId: 'rialo:mainnet',\n name: 'Rialo Mainnet',\n rpcUrl: 'https://mainnet.rialo.io:4101',\n wsUrl: 'wss://mainnet.rialo.io:4102',\n explorerUrl: 'https://explorer.rialo.io',\n symbol: 'RLO',\n decimals: 9,\n },\n testnet: {\n chainId: 'rialo:testnet',\n name: 'Rialo Testnet',\n rpcUrl: 'https://testnet.rialo.io:4101',\n wsUrl: 'wss://testnet.rialo.io:4102',\n explorerUrl: 'https://testnet.explorer.rialo.io',\n symbol: 'tRLO',\n decimals: 9,\n },\n devnet: {\n chainId: 'rialo:devnet',\n name: 'Rialo Devnet',\n rpcUrl: 'https://devnet.rialo.io:4101',\n wsUrl: 'wss://devnet.rialo.io:4102',\n explorerUrl: 'https://devnet.explorer.rialo.io',\n symbol: 'dRLO',\n decimals: 9,\n },\n localnet: {\n chainId: 'rialo:localnet',\n name: 'Rialo Localnet',\n rpcUrl: 'http://localhost:4101',\n wsUrl: 'ws://localhost:4102',\n explorerUrl: 'http://localhost:3000',\n symbol: 'lRLO',\n decimals: 9,\n },\n};\n\n// ============================================================================\n// Account Types\n// ============================================================================\n\nexport interface WalletAccount {\n address: string;\n publicKey?: string | Uint8Array;\n label?: string;\n}\n\n// ============================================================================\n// Transaction Types\n// ============================================================================\n\nexport interface TransactionRequest {\n to: string;\n value: string;\n data?: string;\n memo?: string;\n}\n\nexport interface TransactionResult {\n hash: string;\n signature?: string;\n status: 'pending' | 'confirmed' | 'failed';\n blockNumber?: number;\n}\n\nexport interface SignedMessage {\n signature: string;\n message: string;\n address: string;\n publicKey?: string;\n}\n\nexport interface BalanceResult {\n balance: string;\n formatted: string;\n}\n\n// ============================================================================\n// Wallet Info\n// ============================================================================\n\nexport interface WalletInfo {\n id: string;\n name: string;\n icon: string;\n installed?: boolean;\n downloadUrl?: string;\n}\n\n// ============================================================================\n// Provider Interface (what window.rialo exposes)\n// ============================================================================\n\nexport type WalletEventType = \n | 'connect' \n | 'disconnect' \n | 'accountsChanged'\n | 'networkChanged' \n | 'chainChanged'\n | 'error';\n\nexport interface RialoProvider {\n // Identity\n isRialo: boolean;\n isSheepWallet?: boolean;\n version: string;\n \n // Connection\n connect(options?: { silent?: boolean }): Promise<Array<string | WalletAccount>>;\n disconnect(): Promise<void>;\n isConnected(): Promise<boolean>;\n getAccounts(): Promise<Array<string | WalletAccount>>;\n \n // Transactions\n signTransaction(tx: TransactionRequest): Promise<{ signature: string; rawTransaction?: string }>;\n sendTransaction(tx: TransactionRequest): Promise<TransactionResult>;\n signAndSendTransaction(tx: TransactionRequest): Promise<TransactionResult>;\n \n // Message signing\n signMessage(message: string | Uint8Array): Promise<SignedMessage>;\n \n // Network\n getNetwork(): Promise<RialoNetwork>;\n switchNetwork(network: RialoNetwork): Promise<{ success: boolean }>;\n getBalance(address?: string): Promise<BalanceResult | string>;\n \n // Events\n on(event: WalletEventType, callback: (data: unknown) => void): () => void;\n removeListener(event: WalletEventType, callback: (data: unknown) => void): void;\n removeAllListeners(event?: WalletEventType): void;\n}\n\n// Window extension\ndeclare global {\n interface Window {\n rialo?: RialoProvider;\n }\n}\n","/**\n * @cookill/wallet-adapter v3.0.0\n * Provider detection and access utilities\n * \n * CRITICAL: All provider access is non-blocking and defensive\n */\n\nimport type { RialoProvider } from './types';\n\n/**\n * Check if Rialo/Sheep Wallet is installed\n * This is synchronous and never blocks\n */\nexport function isInstalled(): boolean {\n if (typeof window === 'undefined') return false;\n try {\n return !!window.rialo?.isRialo;\n } catch {\n return false;\n }\n}\n\n/**\n * Get the provider reference (synchronous)\n * Returns undefined if not installed\n */\nexport function getProvider(): RialoProvider | undefined {\n if (typeof window === 'undefined') return undefined;\n try {\n const provider = window.rialo;\n if (provider?.isRialo) return provider;\n } catch {}\n return undefined;\n}\n\n/**\n * Wait for provider to become available\n * Uses polling + event listener, with guaranteed timeout\n * \n * @param timeout Maximum time to wait in ms (default 3000)\n */\nexport function waitForProvider(timeout = 3000): Promise<RialoProvider | undefined> {\n return new Promise((resolve) => {\n // Already available?\n const existing = getProvider();\n if (existing) {\n resolve(existing);\n return;\n }\n\n let resolved = false;\n let checkInterval: ReturnType<typeof setInterval> | null = null;\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n const cleanup = () => {\n resolved = true;\n if (checkInterval) clearInterval(checkInterval);\n if (timeoutId) clearTimeout(timeoutId);\n };\n\n const done = (provider: RialoProvider | undefined) => {\n if (resolved) return;\n cleanup();\n resolve(provider);\n };\n\n // Poll every 100ms\n checkInterval = setInterval(() => {\n const p = getProvider();\n if (p) done(p);\n }, 100);\n\n // Listen for initialization event\n const onInit = () => done(getProvider());\n window.addEventListener('rialo#initialized', onInit, { once: true });\n\n // Guaranteed timeout\n timeoutId = setTimeout(() => {\n window.removeEventListener('rialo#initialized', onInit);\n done(undefined);\n }, timeout);\n });\n}\n\n/**\n * Promise timeout wrapper\n * Ensures promises never hang indefinitely\n */\nexport function withTimeout<T>(\n promise: Promise<T>,\n ms: number,\n errorMessage = 'Operation timed out'\n): Promise<T> {\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n\n const timeout = new Promise<never>((_, reject) => {\n timeoutId = setTimeout(() => reject(new Error(errorMessage)), ms);\n });\n\n return Promise.race([promise, timeout]).finally(() => {\n if (timeoutId) clearTimeout(timeoutId);\n }) as Promise<T>;\n}\n","/**\n * @cookill/wallet-adapter v3.0.0\n * Utility functions\n */\n\nimport type { WalletAccount, RialoNetwork, RialoChainId } from './types';\n\n/**\n * Format address for display (truncated)\n */\nexport function formatAddress(address: string, chars = 4): string {\n if (!address) return '';\n if (address.length <= chars * 2 + 3) return address;\n return `${address.slice(0, chars + 2)}...${address.slice(-chars)}`;\n}\n\n/**\n * Format balance from kelvins to RLO\n */\nexport function formatBalance(kelvins: string | bigint, decimals = 4): string {\n const value = typeof kelvins === 'string' ? BigInt(kelvins || '0') : kelvins;\n const rlo = Number(value) / 1_000_000_000;\n return rlo.toFixed(decimals);\n}\n\n/**\n * Parse RLO amount to kelvins\n */\nexport function parseBalance(rlo: string | number): bigint {\n const value = typeof rlo === 'string' ? parseFloat(rlo) : rlo;\n return BigInt(Math.floor(value * 1_000_000_000));\n}\n\n/**\n * Validate Rialo address format\n */\nexport function isValidAddress(address: string): boolean {\n if (!address || typeof address !== 'string') return false;\n if (address.length < 32 || address.length > 50) return false;\n return /^[1-9A-HJ-NP-Za-km-z]+$/.test(address);\n}\n\n/**\n * Convert network name to chain ID\n */\nexport function toChainId(network: RialoNetwork): RialoChainId {\n return `rialo:${network}`;\n}\n\n/**\n * Extract network from chain ID\n */\nexport function fromChainId(chainId: RialoChainId): RialoNetwork {\n return chainId.replace('rialo:', '') as RialoNetwork;\n}\n\n/**\n * Normalize account data (handles both string and object formats)\n * CRITICAL: Extension can return either string[] or WalletAccount[]\n */\nexport function normalizeAccounts(accounts: Array<string | WalletAccount>): WalletAccount[] {\n if (!Array.isArray(accounts)) return [];\n \n return accounts.map((acc): WalletAccount => {\n if (typeof acc === 'string') {\n return { address: acc, publicKey: acc };\n }\n return {\n address: acc.address,\n publicKey: acc.publicKey || acc.address,\n label: acc.label,\n };\n });\n}\n","/**\n * @cookill/wallet-adapter v3.0.0\n * Pure JavaScript wallet class (no React dependency)\n * \n * Usage:\n * const wallet = new SheepWallet();\n * if (!wallet.isInstalled) { ... prompt install ... }\n * const accounts = await wallet.connect();\n */\n\nimport type { \n RialoProvider, \n WalletAccount, \n RialoNetwork,\n TransactionRequest, \n TransactionResult, \n SignedMessage \n} from './types';\nimport { isInstalled, getProvider, withTimeout } from './provider';\nimport { normalizeAccounts } from './utils';\n\n// Connection timeout (20 seconds)\nconst CONNECT_TIMEOUT = 20_000;\n\n// Other operation timeout (30 seconds)\nconst OPERATION_TIMEOUT = 30_000;\n\nexport class SheepWallet {\n private _provider: RialoProvider | undefined;\n private _connected = false;\n private _accounts: WalletAccount[] = [];\n private _network: RialoNetwork = 'devnet';\n private _cleanupFns: Array<() => void> = [];\n\n constructor() {\n this._provider = getProvider();\n this._setupEvents();\n }\n\n // =========================================================================\n // Getters (all synchronous, never block)\n // =========================================================================\n\n get isInstalled(): boolean {\n return isInstalled();\n }\n\n get connected(): boolean {\n return this._connected;\n }\n\n get accounts(): WalletAccount[] {\n return [...this._accounts];\n }\n\n get activeAccount(): WalletAccount | undefined {\n return this._accounts[0];\n }\n\n get address(): string | undefined {\n return this._accounts[0]?.address;\n }\n\n get network(): RialoNetwork {\n return this._network;\n }\n\n get chainId(): string {\n return `rialo:${this._network}`;\n }\n\n // =========================================================================\n // Connection (with timeout protection)\n // =========================================================================\n\n async connect(): Promise<WalletAccount[]> {\n // Refresh provider reference\n this._provider = getProvider();\n \n if (!this._provider) {\n throw new Error('Sheep Wallet not installed. Get it at https://rialo.io/wallet');\n }\n\n try {\n // CRITICAL: Wrap connect() with timeout to prevent infinite hang\n const rawAccounts = await withTimeout(\n this._provider.connect(),\n CONNECT_TIMEOUT,\n 'Connection timed out. Please open Sheep Wallet extension and approve the request.'\n );\n\n this._accounts = normalizeAccounts(rawAccounts);\n this._connected = true;\n\n // Get network (with separate timeout, non-blocking on failure)\n try {\n this._network = await withTimeout(\n this._provider.getNetwork(),\n 5_000,\n 'Network request timed out'\n );\n } catch {\n // Keep default network on failure\n }\n\n return this._accounts;\n } catch (error) {\n this._connected = false;\n this._accounts = [];\n throw error;\n }\n }\n\n async disconnect(): Promise<void> {\n try {\n if (this._provider) {\n await withTimeout(\n this._provider.disconnect(),\n 5_000,\n 'Disconnect timed out'\n );\n }\n } catch {\n // Ignore disconnect errors\n }\n \n this._connected = false;\n this._accounts = [];\n }\n\n // =========================================================================\n // Silent session check (for auto-connect, never triggers approval)\n // =========================================================================\n\n async checkSession(): Promise<WalletAccount[] | null> {\n if (!this._provider) return null;\n\n try {\n const isConn = await withTimeout(\n this._provider.isConnected(),\n 3_000,\n 'Session check timed out'\n );\n\n if (!isConn) return null;\n\n const rawAccounts = await withTimeout(\n this._provider.getAccounts(),\n 3_000,\n 'Get accounts timed out'\n );\n\n const accounts = normalizeAccounts(rawAccounts);\n if (accounts.length > 0) {\n this._accounts = accounts;\n this._connected = true;\n\n try {\n this._network = await this._provider.getNetwork();\n } catch {}\n\n return accounts;\n }\n } catch {\n // Session check failure is not an error\n }\n\n return null;\n }\n\n // =========================================================================\n // Transactions\n // =========================================================================\n\n async signMessage(message: string): Promise<SignedMessage> {\n this._ensureConnected();\n \n return withTimeout(\n this._provider!.signMessage(message),\n OPERATION_TIMEOUT,\n 'Sign message timed out. Please check Sheep Wallet.'\n );\n }\n\n async signTransaction(tx: TransactionRequest): Promise<string> {\n this._ensureConnected();\n \n const result = await withTimeout(\n this._provider!.signTransaction(tx),\n OPERATION_TIMEOUT,\n 'Sign transaction timed out. Please check Sheep Wallet.'\n );\n \n return result.signature;\n }\n\n async sendTransaction(tx: TransactionRequest): Promise<TransactionResult> {\n this._ensureConnected();\n \n return withTimeout(\n this._provider!.sendTransaction(tx),\n OPERATION_TIMEOUT,\n 'Send transaction timed out. Please check Sheep Wallet.'\n );\n }\n\n async signAndSendTransaction(tx: TransactionRequest): Promise<TransactionResult> {\n this._ensureConnected();\n \n return withTimeout(\n this._provider!.signAndSendTransaction(tx),\n OPERATION_TIMEOUT,\n 'Transaction timed out. Please check Sheep Wallet.'\n );\n }\n\n // =========================================================================\n // Balance & Network\n // =========================================================================\n\n async getBalance(address?: string): Promise<string> {\n if (!this._provider) {\n throw new Error('Wallet not available');\n }\n\n const result = await withTimeout(\n this._provider.getBalance(address),\n 10_000,\n 'Balance request timed out'\n );\n\n return typeof result === 'string' ? result : result.balance;\n }\n\n async switchNetwork(network: RialoNetwork): Promise<void> {\n if (!this._provider) {\n throw new Error('Wallet not available');\n }\n\n await withTimeout(\n this._provider.switchNetwork(network),\n 10_000,\n 'Switch network timed out'\n );\n\n this._network = network;\n }\n\n // =========================================================================\n // Events\n // =========================================================================\n\n on(event: string, callback: (data: unknown) => void): () => void {\n if (!this._provider) {\n return () => {};\n }\n\n const cleanup = this._provider.on(event as any, callback);\n this._cleanupFns.push(cleanup);\n return cleanup;\n }\n\n destroy(): void {\n this._cleanupFns.forEach(fn => {\n try { fn(); } catch {}\n });\n this._cleanupFns = [];\n this._connected = false;\n this._accounts = [];\n }\n\n // =========================================================================\n // Private\n // =========================================================================\n\n private _ensureConnected(): void {\n if (!this._provider) {\n throw new Error('Sheep Wallet not installed');\n }\n if (!this._connected || this._accounts.length === 0) {\n throw new Error('Wallet not connected');\n }\n }\n\n private _setupEvents(): void {\n if (!this._provider) return;\n\n const onDisconnect = () => {\n this._connected = false;\n this._accounts = [];\n };\n\n const onAccountsChanged = (data: unknown) => {\n const raw = data as Array<string | WalletAccount>;\n this._accounts = normalizeAccounts(raw);\n };\n\n const onNetworkChanged = (data: unknown) => {\n const { network } = data as { network: RialoNetwork };\n if (network) this._network = network;\n };\n\n this._cleanupFns.push(\n this._provider.on('disconnect', onDisconnect),\n this._provider.on('accountsChanged', onAccountsChanged),\n this._provider.on('networkChanged', onNetworkChanged)\n );\n }\n}\n\nexport default SheepWallet;\n"]}
|