@zubari/sdk 0.1.2 → 0.1.3
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/dist/TransactionService-CxwB1kpN.d.mts +205 -0
- package/dist/TransactionService-DdL6H6M-.d.ts +205 -0
- package/dist/{WalletManager-TiAdzqrn.d.ts → WalletManager-CYJNiww6.d.ts} +49 -132
- package/dist/{WalletManager-DJjdq89b.d.mts → WalletManager-Dmmcbtiw.d.mts} +49 -132
- package/dist/{index-BLuxEdLp.d.mts → index-DhluuR9H.d.mts} +1 -1
- package/dist/{index-BLuxEdLp.d.ts → index-DhluuR9H.d.ts} +1 -1
- package/dist/{index-DO3T2HVe.d.ts → index-OxzgPoRG.d.ts} +2 -2
- package/dist/{index-fXVD8_D0.d.mts → index-poGbMJzn.d.mts} +2 -2
- package/dist/index.d.mts +5 -6
- package/dist/index.d.ts +5 -6
- package/dist/index.js +3057 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3055 -3
- package/dist/index.mjs.map +1 -1
- package/dist/protocols/index.d.mts +1 -1
- package/dist/protocols/index.d.ts +1 -1
- package/dist/react/index.d.mts +4 -5
- package/dist/react/index.d.ts +4 -5
- package/dist/react/index.js +2649 -3
- package/dist/react/index.js.map +1 -1
- package/dist/react/index.mjs +2649 -3
- package/dist/react/index.mjs.map +1 -1
- package/dist/services/index.d.mts +87 -3
- package/dist/services/index.d.ts +87 -3
- package/dist/services/index.js +3065 -2
- package/dist/services/index.js.map +1 -1
- package/dist/services/index.mjs +3062 -3
- package/dist/services/index.mjs.map +1 -1
- package/dist/wallet/index.d.mts +4 -5
- package/dist/wallet/index.d.ts +4 -5
- package/dist/wallet/index.js +2650 -2
- package/dist/wallet/index.js.map +1 -1
- package/dist/wallet/index.mjs +2650 -2
- package/dist/wallet/index.mjs.map +1 -1
- package/package.json +6 -1
- package/dist/SwapService-C0G8IXW2.d.mts +0 -35
- package/dist/SwapService-DZD0OJI_.d.ts +0 -35
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/config/networks.ts","../src/config/contracts.ts","../src/wallet/ZubariWallet.ts","../src/security/KeyManager.ts","../src/storage/SecureStorage.ts","../src/services/WdkApiClient.ts","../src/services/WdkService.ts","../src/wallet/WalletManager.ts","../src/protocols/NFTProtocol.ts","../src/protocols/TipsProtocol.ts","../src/protocols/SubscriptionProtocol.ts","../src/protocols/PayoutsProtocol.ts","../src/services/SwapService.ts","../src/types/index.ts","../src/react/useWalletManager.ts","../src/utils/index.ts"],"names":["DERIVATION_PATHS","viemFormatEther"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { NetworkType } from '../types';\n\nexport interface NetworkConfig {\n name: string;\n chainId: number;\n coinType: number; // BIP-44 coin type\n rpcUrl: string;\n explorerUrl: string;\n nativeCurrency: {\n name: string;\n symbol: string;\n decimals: number;\n };\n isEvm: boolean;\n}\n\nexport const NETWORKS: Record<NetworkType, NetworkConfig> = {\n bitcoin: {\n name: 'Bitcoin',\n chainId: 0,\n coinType: 0, // m/44'/0'\n rpcUrl: 'https://blockstream.info/api',\n explorerUrl: 'https://blockstream.info',\n nativeCurrency: {\n name: 'Bitcoin',\n symbol: 'BTC',\n decimals: 8,\n },\n isEvm: false,\n },\n ethereum: {\n name: 'Ethereum',\n chainId: 1,\n coinType: 60, // m/44'/60'\n rpcUrl: 'https://eth.llamarpc.com',\n explorerUrl: 'https://etherscan.io',\n nativeCurrency: {\n name: 'Ether',\n symbol: 'ETH',\n decimals: 18,\n },\n isEvm: true,\n },\n ton: {\n name: 'TON',\n chainId: -239,\n coinType: 607, // m/44'/607'\n rpcUrl: 'https://toncenter.com/api/v2',\n explorerUrl: 'https://tonscan.org',\n nativeCurrency: {\n name: 'Toncoin',\n symbol: 'TON',\n decimals: 9,\n },\n isEvm: false,\n },\n tron: {\n name: 'TRON',\n chainId: 728126428,\n coinType: 195, // m/44'/195'\n rpcUrl: 'https://api.trongrid.io',\n explorerUrl: 'https://tronscan.org',\n nativeCurrency: {\n name: 'TRON',\n symbol: 'TRX',\n decimals: 6,\n },\n isEvm: false,\n },\n solana: {\n name: 'Solana',\n chainId: 0,\n coinType: 501, // m/44'/501'\n rpcUrl: 'https://api.mainnet-beta.solana.com',\n explorerUrl: 'https://solscan.io',\n nativeCurrency: {\n name: 'Solana',\n symbol: 'SOL',\n decimals: 9,\n },\n isEvm: false,\n },\n spark: {\n name: 'Spark (Lightning)',\n chainId: 0,\n coinType: 998, // m/44'/998'\n rpcUrl: '',\n explorerUrl: '',\n nativeCurrency: {\n name: 'Bitcoin',\n symbol: 'BTC',\n decimals: 8,\n },\n isEvm: false,\n },\n};\n\nexport const TESTNET_NETWORKS: Partial<Record<NetworkType, Partial<NetworkConfig>>> = {\n ethereum: {\n name: 'Sepolia',\n chainId: 11155111,\n // Using eth-sepolia.g.alchemy.com public endpoint (more reliable than rpc.sepolia.org)\n // Fallback order: 1. Alchemy public, 2. Infura public, 3. BlockPi\n rpcUrl: 'https://ethereum-sepolia-rpc.publicnode.com',\n explorerUrl: 'https://sepolia.etherscan.io',\n },\n solana: {\n name: 'Solana Devnet',\n rpcUrl: 'https://api.devnet.solana.com',\n explorerUrl: 'https://solscan.io?cluster=devnet',\n },\n};\n\n// BIP-44 derivation paths\nexport const DERIVATION_PATHS: Record<NetworkType, string> = {\n bitcoin: \"m/44'/0'/0'/0\",\n ethereum: \"m/44'/60'/0'/0\",\n ton: \"m/44'/607'/0'/0\",\n tron: \"m/44'/195'/0'/0\",\n solana: \"m/44'/501'/0'/0\",\n spark: \"m/44'/998'/0'/0\",\n};\n\nexport function getNetworkConfig(\n network: NetworkType,\n isTestnet: boolean = false\n): NetworkConfig {\n const mainnetConfig = NETWORKS[network];\n if (!isTestnet) return mainnetConfig;\n\n const testnetOverrides = TESTNET_NETWORKS[network];\n if (!testnetOverrides) return mainnetConfig;\n\n return {\n ...mainnetConfig,\n ...testnetOverrides,\n };\n}\n","// Contract addresses for Zubari ecosystem\nexport interface ContractAddresses {\n registry: string;\n nft: string;\n marketplace: string;\n tips: string;\n subscriptions: string;\n payouts: string;\n entryPoint: string;\n paymaster: string;\n accountFactory: string;\n usdt: string;\n weth: string;\n}\n\n// Placeholder addresses - will be updated after deployment\nconst ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';\n\nexport const ZUBARI_CONTRACTS: Record<'testnet' | 'mainnet', ContractAddresses> = {\n testnet: {\n // Ethereum Sepolia (11155111) - Deployed 2024-12-09\n registry: '0xEdDf443D48832f23D4A0bED4C4c5eF200B38A7d3',\n nft: '0xdc37e25650D685e4c38124aC314477Ea5f508a9e',\n marketplace: ZERO_ADDRESS, // Not yet deployed\n tips: '0xFDc353edC63Cd3D4bba35bB43861369516a9Dc85',\n subscriptions: '0x8C05F8aD2F295fB7f3596043a7c37C98A5F7fAB8',\n payouts: '0x804Fe503936E8b8d3D5Dbb62AF4fB6Fe7265Fb2c',\n entryPoint: '0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789',\n paymaster: ZERO_ADDRESS, // Not yet deployed\n accountFactory: ZERO_ADDRESS, // Not yet deployed\n usdt: '0xaA8E23Fb1079EA71e0a56F48a2aA51851D8433D0', // USDT on Sepolia\n weth: '0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14',\n },\n mainnet: {\n // Ethereum Mainnet (1)\n registry: ZERO_ADDRESS,\n nft: ZERO_ADDRESS,\n marketplace: ZERO_ADDRESS,\n tips: ZERO_ADDRESS,\n subscriptions: ZERO_ADDRESS,\n payouts: ZERO_ADDRESS,\n entryPoint: '0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789',\n paymaster: ZERO_ADDRESS,\n accountFactory: ZERO_ADDRESS,\n usdt: '0xdAC17F958D2ee523a2206206994597C13D831ec7', // USDT on Ethereum\n weth: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',\n },\n};\n\n// Platform configuration\nexport const PLATFORM_CONFIG = {\n // Platform fee in basis points (300 = 3%)\n tipFeeBps: 300,\n // Maximum royalty in basis points (1000 = 10%)\n maxRoyaltyBps: 1000,\n // Default slippage tolerance for swaps (50 = 0.5%)\n defaultSlippageBps: 50,\n // Voucher validity in seconds (30 days)\n voucherValiditySecs: 30 * 24 * 60 * 60,\n // Swap deadline in seconds (30 minutes)\n swapDeadlineSecs: 30 * 60,\n} as const;\n\n// EIP-712 Domain for lazy minting\nexport const NFT_VOUCHER_DOMAIN = {\n name: 'ZubariNFT',\n version: '1',\n} as const;\n\nexport const NFT_VOUCHER_TYPES = {\n NFTVoucher: [\n { name: 'tokenId', type: 'bytes32' },\n { name: 'uri', type: 'string' },\n { name: 'creator', type: 'address' },\n { name: 'royaltyBps', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n ],\n} as const;\n\nexport function getContractAddresses(network: 'testnet' | 'mainnet'): ContractAddresses {\n return ZUBARI_CONTRACTS[network];\n}\n","import type {\n ZubariWalletConfig,\n NetworkType,\n NetworkBalance,\n TxResult,\n Account,\n SendParams,\n} from '../types';\nimport { getNetworkConfig, DERIVATION_PATHS } from '../config/networks';\nimport { getContractAddresses } from '../config/contracts';\n\n/**\n * ZubariWallet - Multi-chain self-custodial wallet\n *\n * Core wallet class that manages accounts across multiple blockchain networks\n * using Tether WDK as the underlying infrastructure layer.\n */\nexport class ZubariWallet {\n private readonly seed: string;\n private readonly config: ZubariWalletConfig;\n private readonly accounts: Map<NetworkType, Account> = new Map();\n private initialized: boolean = false;\n\n constructor(seed: string, config: ZubariWalletConfig) {\n this.seed = seed;\n this.config = {\n network: config.network || 'mainnet',\n enabledNetworks: config.enabledNetworks || ['ethereum'],\n gasless: config.gasless ?? false,\n paymasterUrl: config.paymasterUrl,\n bundlerUrl: config.bundlerUrl,\n rpcUrls: config.rpcUrls,\n };\n }\n\n /**\n * Initialize the wallet by deriving accounts for all enabled networks\n */\n async initialize(): Promise<void> {\n if (this.initialized) return;\n\n for (const network of this.config.enabledNetworks) {\n await this.deriveAccount(network);\n }\n\n this.initialized = true;\n }\n\n /**\n * Derive account for a specific network using BIP-44\n */\n private async deriveAccount(network: NetworkType, index: number = 0): Promise<Account> {\n const networkConfig = getNetworkConfig(network, this.config.network === 'testnet');\n const basePath = DERIVATION_PATHS[network];\n const derivationPath = `${basePath}/${index}`;\n\n // This is a placeholder implementation\n // Real implementation will use WDK wallet managers\n const account: Account = {\n network,\n address: '', // Will be derived using WDK\n publicKey: '',\n derivationPath,\n };\n\n this.accounts.set(network, account);\n return account;\n }\n\n /**\n * Get account for a specific network\n */\n async getAccount(network: NetworkType, index: number = 0): Promise<Account> {\n const existing = this.accounts.get(network);\n if (existing && existing.derivationPath.endsWith(`/${index}`)) {\n return existing;\n }\n return this.deriveAccount(network, index);\n }\n\n /**\n * Get address for a specific network\n */\n async getAddress(network: NetworkType): Promise<string> {\n const account = await this.getAccount(network);\n return account.address;\n }\n\n /**\n * Get all addresses for enabled networks\n */\n async getAllAddresses(): Promise<Record<NetworkType, string>> {\n const addresses: Partial<Record<NetworkType, string>> = {};\n\n for (const network of this.config.enabledNetworks) {\n addresses[network] = await this.getAddress(network);\n }\n\n return addresses as Record<NetworkType, string>;\n }\n\n /**\n * Get balance for a specific network\n */\n async getBalance(network: NetworkType): Promise<NetworkBalance> {\n const networkConfig = getNetworkConfig(network, this.config.network === 'testnet');\n\n // Placeholder implementation - will use WDK\n return {\n network,\n native: {\n symbol: networkConfig.nativeCurrency.symbol,\n balance: BigInt(0),\n balanceFormatted: '0',\n balanceUsd: 0,\n },\n tokens: [],\n };\n }\n\n /**\n * Get balances for all enabled networks\n */\n async getAllBalances(): Promise<NetworkBalance[]> {\n const balances: NetworkBalance[] = [];\n\n for (const network of this.config.enabledNetworks) {\n balances.push(await this.getBalance(network));\n }\n\n return balances;\n }\n\n /**\n * Get total portfolio value in USD\n */\n async getTotalPortfolioUsd(): Promise<number> {\n const balances = await this.getAllBalances();\n let total = 0;\n\n for (const balance of balances) {\n total += balance.native.balanceUsd;\n for (const token of balance.tokens) {\n total += token.balanceUsd;\n }\n }\n\n return total;\n }\n\n /**\n * Send native currency on a specific network\n */\n async send(network: NetworkType, params: SendParams): Promise<TxResult> {\n const { to, amount, gasless } = params;\n const useGasless = gasless ?? (this.config.gasless && network === 'ethereum');\n\n // Placeholder implementation - will use WDK\n return {\n hash: '',\n network,\n status: 'pending',\n };\n }\n\n /**\n * Send ERC-20 token on EVM networks\n */\n async sendToken(\n network: NetworkType,\n token: string,\n to: string,\n amount: bigint\n ): Promise<TxResult> {\n const networkConfig = getNetworkConfig(network, this.config.network === 'testnet');\n\n if (!networkConfig.isEvm) {\n throw new Error(`sendToken is only supported on EVM networks. ${network} is not an EVM chain.`);\n }\n\n // Placeholder implementation - will use WDK\n return {\n hash: '',\n network,\n status: 'pending',\n };\n }\n\n /**\n * Send Bitcoin on-chain using WalletManagerBtc\n * @param to - Destination address (bc1q... for native segwit)\n * @param amount - Amount in satoshis\n */\n async sendBitcoin(to: string, amount: bigint): Promise<TxResult> {\n // Validate Bitcoin address format\n if (!this.isValidBitcoinAddress(to)) {\n throw new Error('Invalid Bitcoin address. Expected bc1q... (native segwit) format.');\n }\n\n // Use WDK WalletManagerBtc for transaction\n // const btcManager = new WalletManagerBtc({ seed: this.seed });\n // const tx = await btcManager.send(to, amount);\n\n return this.send('bitcoin', { to, amount });\n }\n\n /**\n * Validate Bitcoin address format\n */\n private isValidBitcoinAddress(address: string): boolean {\n // Native SegWit (bech32)\n if (address.startsWith('bc1q') || address.startsWith('tb1q')) {\n return address.length >= 42 && address.length <= 62;\n }\n // Legacy P2PKH\n if (address.startsWith('1') || address.startsWith('m') || address.startsWith('n')) {\n return address.length >= 25 && address.length <= 34;\n }\n // P2SH\n if (address.startsWith('3') || address.startsWith('2')) {\n return address.length >= 25 && address.length <= 34;\n }\n return false;\n }\n\n /**\n * Get Bitcoin address (native segwit bc1q...)\n */\n async getBitcoinAddress(): Promise<string> {\n const account = await this.getAccount('bitcoin');\n return account.address;\n }\n\n /**\n * Pay Lightning invoice via Spark network\n * Uses WDK WalletManagerSpark (m/44'/998')\n * @param invoice - Lightning invoice string (lnbc...)\n */\n async sendLightning(invoice: string): Promise<TxResult> {\n // Validate Lightning invoice format\n if (!this.isValidLightningInvoice(invoice)) {\n throw new Error('Invalid Lightning invoice format. Expected lnbc... or lntb...');\n }\n\n // Decode invoice to get amount and destination\n const invoiceDetails = this.decodeLightningInvoice(invoice);\n\n // Use WDK WalletManagerSpark for payment\n // const sparkManager = new WalletManagerSpark({ seed: this.seed, feeFree: true });\n // const payment = await sparkManager.payInvoice(invoice);\n\n return {\n hash: '', // Will be payment hash from Spark\n network: 'spark',\n status: 'pending',\n metadata: {\n invoice,\n amount: invoiceDetails.amount,\n destination: invoiceDetails.destination,\n },\n };\n }\n\n /**\n * Create Lightning invoice via Spark\n * @param amount - Amount in millisatoshis\n * @param memo - Optional payment memo\n * @returns Lightning invoice string (lnbc...)\n */\n async createLightningInvoice(amount: bigint, memo?: string): Promise<string> {\n if (amount <= 0) {\n throw new Error('Invoice amount must be greater than 0');\n }\n\n // Use WDK WalletManagerSpark to create invoice\n // const sparkManager = new WalletManagerSpark({ seed: this.seed, feeFree: true });\n // const invoice = await sparkManager.createInvoice(amount, memo);\n\n // Placeholder - actual implementation uses Spark\n const isTestnet = this.config.network === 'testnet';\n const prefix = isTestnet ? 'lntb' : 'lnbc';\n\n // This is a placeholder - real invoice comes from Spark\n return `${prefix}${amount}m1...`;\n }\n\n /**\n * Validate Lightning invoice format\n */\n private isValidLightningInvoice(invoice: string): boolean {\n const lowerInvoice = invoice.toLowerCase();\n return (\n lowerInvoice.startsWith('lnbc') || // Mainnet\n lowerInvoice.startsWith('lntb') || // Testnet\n lowerInvoice.startsWith('lnbcrt') // Regtest\n );\n }\n\n /**\n * Decode Lightning invoice (basic parsing)\n */\n private decodeLightningInvoice(invoice: string): {\n amount: bigint;\n destination: string;\n expiry: number;\n } {\n // Real implementation would use bolt11 library\n // This is a placeholder structure\n return {\n amount: BigInt(0),\n destination: '',\n expiry: 3600,\n };\n }\n\n /**\n * Get Lightning (Spark) balance\n */\n async getLightningBalance(): Promise<{\n available: bigint;\n pending: bigint;\n }> {\n // Use WDK WalletManagerSpark\n // const sparkManager = new WalletManagerSpark({ seed: this.seed });\n // return sparkManager.getBalance();\n\n return {\n available: BigInt(0),\n pending: BigInt(0),\n };\n }\n\n /**\n * Get configuration\n */\n getConfig(): ZubariWalletConfig {\n return { ...this.config };\n }\n\n /**\n * Check if wallet is initialized\n */\n isInitialized(): boolean {\n return this.initialized;\n }\n\n /**\n * Get contract addresses for current network\n */\n getContractAddresses() {\n return getContractAddresses(this.config.network);\n }\n}\n","/**\n * KeyManager - Secure key storage and encryption\n *\n * Handles seed phrase encryption using AES-256-GCM\n * with PBKDF2 key derivation from user password.\n */\nexport class KeyManager {\n private static readonly ALGORITHM = 'AES-GCM';\n private static readonly KEY_LENGTH = 256;\n private static readonly IV_LENGTH = 12;\n private static readonly SALT_LENGTH = 16;\n private static readonly PBKDF2_ITERATIONS = 100000;\n\n /**\n * Encrypt a seed phrase with a password\n */\n static async encryptSeed(seed: string, password: string): Promise<string> {\n const encoder = new TextEncoder();\n const seedData = encoder.encode(seed);\n\n // Generate random salt and IV\n const salt = crypto.getRandomValues(new Uint8Array(this.SALT_LENGTH));\n const iv = crypto.getRandomValues(new Uint8Array(this.IV_LENGTH));\n\n // Derive key from password\n const key = await this.deriveKey(password, salt);\n\n // Encrypt\n const encrypted = await crypto.subtle.encrypt(\n { name: this.ALGORITHM, iv },\n key,\n seedData\n );\n\n // Combine salt + iv + encrypted data\n const combined = new Uint8Array(salt.length + iv.length + encrypted.byteLength);\n combined.set(salt, 0);\n combined.set(iv, salt.length);\n combined.set(new Uint8Array(encrypted), salt.length + iv.length);\n\n // Return as base64\n return btoa(String.fromCharCode(...combined));\n }\n\n /**\n * Decrypt a seed phrase with a password\n */\n static async decryptSeed(encryptedData: string, password: string): Promise<string> {\n // Decode from base64\n const combined = new Uint8Array(\n atob(encryptedData)\n .split('')\n .map(c => c.charCodeAt(0))\n );\n\n // Extract salt, iv, and encrypted data\n const salt = combined.slice(0, this.SALT_LENGTH);\n const iv = combined.slice(this.SALT_LENGTH, this.SALT_LENGTH + this.IV_LENGTH);\n const encrypted = combined.slice(this.SALT_LENGTH + this.IV_LENGTH);\n\n // Derive key from password\n const key = await this.deriveKey(password, salt);\n\n // Decrypt\n const decrypted = await crypto.subtle.decrypt(\n { name: this.ALGORITHM, iv },\n key,\n encrypted\n );\n\n const decoder = new TextDecoder();\n return decoder.decode(decrypted);\n }\n\n /**\n * Derive encryption key from password using PBKDF2\n */\n private static async deriveKey(\n password: string,\n salt: Uint8Array\n ): Promise<CryptoKey> {\n const encoder = new TextEncoder();\n const passwordData = encoder.encode(password);\n\n // Import password as key material\n const keyMaterial = await crypto.subtle.importKey(\n 'raw',\n passwordData,\n 'PBKDF2',\n false,\n ['deriveKey']\n );\n\n // Derive AES key\n return crypto.subtle.deriveKey(\n {\n name: 'PBKDF2',\n salt: salt.buffer.slice(salt.byteOffset, salt.byteOffset + salt.byteLength) as ArrayBuffer,\n iterations: this.PBKDF2_ITERATIONS,\n hash: 'SHA-256',\n },\n keyMaterial,\n { name: this.ALGORITHM, length: this.KEY_LENGTH },\n false,\n ['encrypt', 'decrypt']\n );\n }\n\n /**\n * Validate a BIP-39 seed phrase (basic validation)\n */\n static validateSeedPhrase(seed: string): boolean {\n const words = seed.trim().split(/\\s+/);\n // BIP-39 supports 12, 15, 18, 21, or 24 words\n const validWordCounts = [12, 15, 18, 21, 24];\n return validWordCounts.includes(words.length);\n }\n\n /**\n * Generate a random encryption key (for backup purposes)\n */\n static generateBackupKey(): string {\n const bytes = crypto.getRandomValues(new Uint8Array(32));\n return Array.from(bytes)\n .map(b => b.toString(16).padStart(2, '0'))\n .join('');\n }\n}\n","/**\n * Secure Storage Interface\n * Platform-agnostic interface for secure key storage\n */\nexport interface SecureStorageAdapter {\n /**\n * Store a value securely\n */\n setItem(key: string, value: string): Promise<void>;\n\n /**\n * Retrieve a value\n */\n getItem(key: string): Promise<string | null>;\n\n /**\n * Remove a value\n */\n removeItem(key: string): Promise<void>;\n\n /**\n * Check if a key exists\n */\n hasItem(key: string): Promise<boolean>;\n\n /**\n * Clear all stored values\n */\n clear(): Promise<void>;\n}\n\n/**\n * iOS Keychain Storage Adapter\n * Uses react-native-keychain for iOS Keychain access\n */\nexport class KeychainStorageAdapter implements SecureStorageAdapter {\n private serviceName: string;\n\n constructor(serviceName: string = 'com.zubari.wallet') {\n this.serviceName = serviceName;\n }\n\n async setItem(key: string, value: string): Promise<void> {\n // In React Native, use react-native-keychain\n // const Keychain = require('react-native-keychain');\n // await Keychain.setGenericPassword(key, value, { service: this.serviceName });\n\n // Placeholder for native implementation\n if (typeof global !== 'undefined' && (global as any).KeychainModule) {\n await (global as any).KeychainModule.setItem(this.serviceName, key, value);\n } else {\n throw new Error('Keychain not available on this platform');\n }\n }\n\n async getItem(key: string): Promise<string | null> {\n if (typeof global !== 'undefined' && (global as any).KeychainModule) {\n return (global as any).KeychainModule.getItem(this.serviceName, key);\n }\n throw new Error('Keychain not available on this platform');\n }\n\n async removeItem(key: string): Promise<void> {\n if (typeof global !== 'undefined' && (global as any).KeychainModule) {\n await (global as any).KeychainModule.removeItem(this.serviceName, key);\n } else {\n throw new Error('Keychain not available on this platform');\n }\n }\n\n async hasItem(key: string): Promise<boolean> {\n const value = await this.getItem(key);\n return value !== null;\n }\n\n async clear(): Promise<void> {\n if (typeof global !== 'undefined' && (global as any).KeychainModule) {\n await (global as any).KeychainModule.clear(this.serviceName);\n } else {\n throw new Error('Keychain not available on this platform');\n }\n }\n}\n\n/**\n * Android Keystore Storage Adapter\n * Uses Android Keystore for secure storage\n */\nexport class KeystoreStorageAdapter implements SecureStorageAdapter {\n private alias: string;\n\n constructor(alias: string = 'zubari_wallet_keys') {\n this.alias = alias;\n }\n\n async setItem(key: string, value: string): Promise<void> {\n // In React Native, use react-native-encrypted-storage or similar\n // const EncryptedStorage = require('react-native-encrypted-storage');\n // await EncryptedStorage.setItem(key, value);\n\n if (typeof global !== 'undefined' && (global as any).KeystoreModule) {\n await (global as any).KeystoreModule.setItem(this.alias, key, value);\n } else {\n throw new Error('Keystore not available on this platform');\n }\n }\n\n async getItem(key: string): Promise<string | null> {\n if (typeof global !== 'undefined' && (global as any).KeystoreModule) {\n return (global as any).KeystoreModule.getItem(this.alias, key);\n }\n throw new Error('Keystore not available on this platform');\n }\n\n async removeItem(key: string): Promise<void> {\n if (typeof global !== 'undefined' && (global as any).KeystoreModule) {\n await (global as any).KeystoreModule.removeItem(this.alias, key);\n } else {\n throw new Error('Keystore not available on this platform');\n }\n }\n\n async hasItem(key: string): Promise<boolean> {\n const value = await this.getItem(key);\n return value !== null;\n }\n\n async clear(): Promise<void> {\n if (typeof global !== 'undefined' && (global as any).KeystoreModule) {\n await (global as any).KeystoreModule.clear(this.alias);\n } else {\n throw new Error('Keystore not available on this platform');\n }\n }\n}\n\n/**\n * Web Encrypted LocalStorage Adapter\n * Uses Web Crypto API for encryption with localStorage\n */\nexport class WebEncryptedStorageAdapter implements SecureStorageAdapter {\n private encryptionKey: CryptoKey | null = null;\n private storagePrefix: string;\n\n constructor(storagePrefix: string = 'zubari_') {\n this.storagePrefix = storagePrefix;\n }\n\n /**\n * Initialize with a password-derived key\n */\n async initialize(password: string): Promise<void> {\n const encoder = new TextEncoder();\n const salt = this.getSalt();\n\n const keyMaterial = await crypto.subtle.importKey(\n 'raw',\n encoder.encode(password),\n 'PBKDF2',\n false,\n ['deriveKey']\n );\n\n this.encryptionKey = await crypto.subtle.deriveKey(\n {\n name: 'PBKDF2',\n salt: salt.buffer as ArrayBuffer,\n iterations: 100000,\n hash: 'SHA-256',\n },\n keyMaterial,\n { name: 'AES-GCM', length: 256 },\n false,\n ['encrypt', 'decrypt']\n );\n }\n\n private getSalt(): Uint8Array {\n const saltKey = `${this.storagePrefix}salt`;\n let saltHex = localStorage.getItem(saltKey);\n\n if (!saltHex) {\n const salt = crypto.getRandomValues(new Uint8Array(16));\n saltHex = Array.from(salt)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n localStorage.setItem(saltKey, saltHex);\n }\n\n return new Uint8Array(\n saltHex.match(/.{1,2}/g)!.map((byte) => parseInt(byte, 16))\n );\n }\n\n async setItem(key: string, value: string): Promise<void> {\n if (!this.encryptionKey) {\n throw new Error('Storage not initialized. Call initialize() first.');\n }\n\n const encoder = new TextEncoder();\n const iv = crypto.getRandomValues(new Uint8Array(12));\n\n const encrypted = await crypto.subtle.encrypt(\n { name: 'AES-GCM', iv },\n this.encryptionKey,\n encoder.encode(value)\n );\n\n const combined = new Uint8Array(iv.length + encrypted.byteLength);\n combined.set(iv);\n combined.set(new Uint8Array(encrypted), iv.length);\n\n const base64 = btoa(String.fromCharCode(...combined));\n localStorage.setItem(`${this.storagePrefix}${key}`, base64);\n }\n\n async getItem(key: string): Promise<string | null> {\n if (!this.encryptionKey) {\n throw new Error('Storage not initialized. Call initialize() first.');\n }\n\n const base64 = localStorage.getItem(`${this.storagePrefix}${key}`);\n if (!base64) return null;\n\n try {\n const combined = new Uint8Array(\n atob(base64)\n .split('')\n .map((c) => c.charCodeAt(0))\n );\n\n const iv = combined.slice(0, 12);\n const encrypted = combined.slice(12);\n\n const decrypted = await crypto.subtle.decrypt(\n { name: 'AES-GCM', iv },\n this.encryptionKey,\n encrypted\n );\n\n const decoder = new TextDecoder();\n return decoder.decode(decrypted);\n } catch {\n return null;\n }\n }\n\n async removeItem(key: string): Promise<void> {\n localStorage.removeItem(`${this.storagePrefix}${key}`);\n }\n\n async hasItem(key: string): Promise<boolean> {\n return localStorage.getItem(`${this.storagePrefix}${key}`) !== null;\n }\n\n async clear(): Promise<void> {\n const keysToRemove: string[] = [];\n\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith(this.storagePrefix)) {\n keysToRemove.push(key);\n }\n }\n\n keysToRemove.forEach((key) => localStorage.removeItem(key));\n }\n}\n\n/**\n * In-Memory Storage Adapter (for testing)\n */\nexport class MemoryStorageAdapter implements SecureStorageAdapter {\n private storage: Map<string, string> = new Map();\n\n async setItem(key: string, value: string): Promise<void> {\n this.storage.set(key, value);\n }\n\n async getItem(key: string): Promise<string | null> {\n return this.storage.get(key) || null;\n }\n\n async removeItem(key: string): Promise<void> {\n this.storage.delete(key);\n }\n\n async hasItem(key: string): Promise<boolean> {\n return this.storage.has(key);\n }\n\n async clear(): Promise<void> {\n this.storage.clear();\n }\n}\n\n/**\n * Secure Storage Factory\n * Creates appropriate storage adapter based on platform\n */\nexport function createSecureStorage(): SecureStorageAdapter {\n // Check for React Native\n if (\n typeof global !== 'undefined' &&\n (global as any).nativeModuleProxy !== undefined\n ) {\n // Check platform\n const Platform = (global as any).Platform;\n if (Platform?.OS === 'ios') {\n return new KeychainStorageAdapter();\n } else if (Platform?.OS === 'android') {\n return new KeystoreStorageAdapter();\n }\n }\n\n // Check for browser environment\n if (typeof window !== 'undefined' && typeof localStorage !== 'undefined') {\n return new WebEncryptedStorageAdapter();\n }\n\n // Fallback to memory storage (for Node.js/testing)\n return new MemoryStorageAdapter();\n}\n","/**\n * WDK API Client\n *\n * Client for calling the backend WDK endpoints to derive addresses\n * using Tether WDK (which runs server-side in Node.js).\n */\n\nimport type { NetworkType } from '../types';\n\nexport interface WdkApiConfig {\n baseUrl: string;\n timeout?: number;\n}\n\nexport interface DeriveAddressResponse {\n success: boolean;\n address?: string;\n chain?: string;\n path?: string;\n network?: string;\n error?: string;\n}\n\nexport interface DeriveAllAddressesResponse {\n success: boolean;\n addresses?: {\n ethereum: string | null;\n bitcoin: string | null;\n ton: string | null;\n tron: string | null;\n solana: string | null;\n spark: string | null;\n };\n network?: string;\n error?: string;\n}\n\nexport interface ValidateSeedResponse {\n success: boolean;\n isValid?: boolean;\n wordCount?: number;\n error?: string;\n}\n\nexport interface GenerateSeedResponse {\n success: boolean;\n seed?: string;\n wordCount?: number;\n error?: string;\n}\n\n/**\n * WDK API Client for server-side Tether WDK integration\n */\nexport class WdkApiClient {\n private config: Required<WdkApiConfig>;\n\n constructor(config: WdkApiConfig) {\n this.config = {\n baseUrl: config.baseUrl,\n timeout: config.timeout || 30000,\n };\n }\n\n /**\n * Generate a new BIP-39 seed phrase using Tether WDK\n */\n async generateSeed(): Promise<GenerateSeedResponse> {\n try {\n const response = await fetch(`${this.config.baseUrl}/api/wallets/wdk/generate-seed`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n return await response.json();\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to generate seed',\n };\n }\n }\n\n /**\n * Validate a BIP-39 seed phrase\n */\n async validateSeed(seed: string): Promise<ValidateSeedResponse> {\n try {\n const response = await fetch(`${this.config.baseUrl}/api/wallets/wdk/validate-seed`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ seed }),\n });\n\n return await response.json();\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to validate seed',\n };\n }\n }\n\n /**\n * Derive address for a specific chain using Tether WDK\n */\n async deriveAddress(\n seed: string,\n chain: NetworkType,\n network: 'mainnet' | 'testnet' = 'testnet'\n ): Promise<DeriveAddressResponse> {\n try {\n const response = await fetch(`${this.config.baseUrl}/api/wallets/wdk/derive-address`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ seed, chain, network }),\n });\n\n return await response.json();\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to derive address',\n };\n }\n }\n\n /**\n * Derive addresses for all chains using Tether WDK\n */\n async deriveAllAddresses(\n seed: string,\n network: 'mainnet' | 'testnet' = 'testnet'\n ): Promise<DeriveAllAddressesResponse> {\n try {\n const response = await fetch(`${this.config.baseUrl}/api/wallets/wdk/derive-all`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ seed, network }),\n });\n\n return await response.json();\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to derive addresses',\n };\n }\n }\n}\n\n// Default API URL (can be overridden)\nconst DEFAULT_API_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:3001';\n\n// Singleton instance\nlet wdkApiClient: WdkApiClient | null = null;\n\n/**\n * Get or create the WDK API client instance\n */\nexport function getWdkApiClient(baseUrl?: string): WdkApiClient {\n if (!wdkApiClient || (baseUrl && wdkApiClient['config'].baseUrl !== baseUrl)) {\n wdkApiClient = new WdkApiClient({\n baseUrl: baseUrl || DEFAULT_API_URL,\n });\n }\n return wdkApiClient;\n}\n","/**\n * WDK Service for SDK\n *\n * Native integration with Tether WDK for multi-chain address derivation.\n * Uses individual wallet modules for each chain to derive cryptographically\n * valid addresses from a BIP-39 seed phrase.\n *\n * Supported chains: Ethereum, Bitcoin, TON, TRON, Solana, Spark (Lightning)\n *\n * @see https://docs.wallet.tether.io/\n */\n\n// Dynamic imports for ESM modules (WDK packages are ESM-only)\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WdkManager: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerBtc: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerEvm: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerSolana: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerTon: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerTron: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerSpark: any;\n\nlet wdkLoaded = false;\nlet wdkLoadError: Error | null = null;\n\n/**\n * Dynamic import helper that bypasses TypeScript's CommonJS transformation\n * TypeScript converts import() to require() in CommonJS, but WDK is ESM-only\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst dynamicImport = new Function('specifier', 'return import(specifier)') as (\n specifier: string\n) => Promise<any>;\n\n/**\n * Dynamically load WDK modules (they are ESM-only)\n */\nasync function loadWdkModules(): Promise<void> {\n if (wdkLoaded) return;\n if (wdkLoadError) throw wdkLoadError;\n\n try {\n const [wdk, btc, evm, solana, ton, tron, spark] = await Promise.all([\n dynamicImport('@tetherto/wdk'),\n dynamicImport('@tetherto/wdk-wallet-btc'),\n dynamicImport('@tetherto/wdk-wallet-evm'),\n dynamicImport('@tetherto/wdk-wallet-solana'),\n dynamicImport('@tetherto/wdk-wallet-ton'),\n dynamicImport('@tetherto/wdk-wallet-tron'),\n dynamicImport('@tetherto/wdk-wallet-spark'),\n ]);\n\n WdkManager = wdk.default;\n WalletManagerBtc = btc.default;\n WalletManagerEvm = evm.default;\n WalletManagerSolana = solana.default;\n WalletManagerTon = ton.default;\n WalletManagerTron = tron.default;\n WalletManagerSpark = spark.default;\n wdkLoaded = true;\n } catch (error) {\n wdkLoadError = error instanceof Error ? error : new Error('Failed to load WDK modules');\n console.error('Failed to load WDK modules:', error);\n throw wdkLoadError;\n }\n}\n\nexport type SupportedChain = 'ethereum' | 'bitcoin' | 'ton' | 'tron' | 'solana' | 'spark';\n\nexport interface ChainAddress {\n chain: SupportedChain;\n address: string;\n path: string;\n}\n\nexport interface MultiChainAddresses {\n ethereum: string | null;\n bitcoin: string | null;\n ton: string | null;\n tron: string | null;\n solana: string | null;\n spark: string | null;\n}\n\nexport interface WdkServiceConfig {\n network: 'mainnet' | 'testnet';\n rpcUrls?: {\n ethereum?: string;\n bitcoin?: string;\n solana?: string;\n ton?: string;\n tron?: string;\n };\n}\n\n// BIP-44 derivation paths\nconst DERIVATION_PATHS: Record<SupportedChain, string> = {\n bitcoin: \"m/84'/0'/0'/0/0\", // BIP-84 for native SegWit\n ethereum: \"m/44'/60'/0'/0/0\",\n ton: \"m/44'/607'/0'\", // Updated for v1.0.0-beta.6+\n tron: \"m/44'/195'/0'/0/0\",\n solana: \"m/44'/501'/0'/0'\", // Updated for v1.0.0-beta.4+\n spark: \"m/44'/998'/0'/0/0\",\n};\n\n// Default RPC URLs\nconst DEFAULT_RPC_URLS = {\n mainnet: {\n ethereum: 'https://eth.llamarpc.com',\n solana: 'https://api.mainnet-beta.solana.com',\n ton: 'https://toncenter.com/api/v2/jsonRPC',\n tron: 'https://api.trongrid.io',\n },\n testnet: {\n ethereum: 'https://ethereum-sepolia-rpc.publicnode.com',\n solana: 'https://api.devnet.solana.com',\n ton: 'https://testnet.toncenter.com/api/v2/jsonRPC',\n tron: 'https://api.shasta.trongrid.io',\n },\n};\n\n/**\n * WDK Service for native multi-chain address derivation\n * Uses Tether WDK wallet modules directly without needing a backend API\n */\nexport class WdkService {\n private seed: string | null = null;\n private config: WdkServiceConfig;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private wallets: Partial<Record<SupportedChain, any>> = {};\n\n constructor(config: Partial<WdkServiceConfig> = {}) {\n this.config = {\n network: config.network || 'testnet',\n rpcUrls: config.rpcUrls,\n };\n }\n\n /**\n * Check if WDK modules are loaded\n */\n static isLoaded(): boolean {\n return wdkLoaded;\n }\n\n /**\n * Ensure WDK modules are loaded\n */\n private async ensureLoaded(): Promise<void> {\n await loadWdkModules();\n }\n\n /**\n * Load WDK modules (call this before using sync methods)\n */\n async loadModules(): Promise<void> {\n await loadWdkModules();\n }\n\n /**\n * Generate a random BIP-39 seed phrase (12 words)\n */\n async generateSeedPhrase(): Promise<string> {\n await this.ensureLoaded();\n return WdkManager.getRandomSeedPhrase();\n }\n\n /**\n * Validate a BIP-39 seed phrase\n */\n async isValidSeed(seed: string): Promise<boolean> {\n await this.ensureLoaded();\n return WdkManager.isValidSeed(seed);\n }\n\n /**\n * Validate seed phrase (sync version - basic check)\n */\n isValidSeedSync(seed: string): boolean {\n const words = seed.trim().split(/\\s+/);\n return words.length === 12 || words.length === 24;\n }\n\n /**\n * Initialize the service with a seed phrase\n */\n async initialize(seed: string): Promise<void> {\n await this.ensureLoaded();\n\n if (!WdkManager.isValidSeed(seed)) {\n throw new Error('Invalid seed phrase');\n }\n\n this.seed = seed;\n this.wallets = {};\n }\n\n /**\n * Get RPC URL for a chain\n */\n private getRpcUrl(chain: SupportedChain): string {\n const networkUrls = DEFAULT_RPC_URLS[this.config.network];\n\n if (this.config.rpcUrls?.[chain as keyof typeof this.config.rpcUrls]) {\n return this.config.rpcUrls[chain as keyof typeof this.config.rpcUrls]!;\n }\n\n return networkUrls[chain as keyof typeof networkUrls] || '';\n }\n\n /**\n * Get or create wallet instance for a specific chain\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private async getWallet(chain: SupportedChain): Promise<any> {\n if (!this.seed) {\n throw new Error('WDK service not initialized. Call initialize() first.');\n }\n\n // Return cached wallet if exists\n if (this.wallets[chain]) {\n return this.wallets[chain];\n }\n\n const isTestnet = this.config.network === 'testnet';\n\n try {\n switch (chain) {\n case 'ethereum': {\n const rpcUrl = this.getRpcUrl('ethereum');\n const wallet = new WalletManagerEvm(this.seed, { provider: rpcUrl });\n this.wallets[chain] = wallet;\n return wallet;\n }\n\n case 'bitcoin': {\n const wallet = new WalletManagerBtc(this.seed, {\n network: isTestnet ? 'testnet' : 'bitcoin',\n });\n this.wallets[chain] = wallet;\n return wallet;\n }\n\n case 'solana': {\n const rpcUrl = this.getRpcUrl('solana');\n const wallet = new WalletManagerSolana(this.seed, {\n rpcUrl,\n });\n this.wallets[chain] = wallet;\n return wallet;\n }\n\n case 'ton': {\n const url = this.getRpcUrl('ton');\n const wallet = new WalletManagerTon(this.seed, {\n tonClient: { url },\n });\n this.wallets[chain] = wallet;\n return wallet;\n }\n\n case 'tron': {\n const fullHost = this.getRpcUrl('tron');\n const wallet = new WalletManagerTron(this.seed, {\n provider: fullHost,\n });\n this.wallets[chain] = wallet;\n return wallet;\n }\n\n case 'spark': {\n const wallet = new WalletManagerSpark(this.seed, {\n network: isTestnet ? 'TESTNET' : 'MAINNET',\n });\n this.wallets[chain] = wallet;\n return wallet;\n }\n\n default:\n throw new Error(`Unsupported chain: ${chain}`);\n }\n } catch (error) {\n console.error(`Failed to initialize ${chain} wallet:`, error);\n throw error;\n }\n }\n\n /**\n * Derive address for a specific chain\n */\n async deriveAddress(chain: SupportedChain): Promise<ChainAddress> {\n const path = DERIVATION_PATHS[chain];\n\n try {\n const wallet = await this.getWallet(chain);\n const account = await wallet.getAccount(0);\n const address = await account.getAddress();\n\n return {\n chain,\n address,\n path,\n };\n } catch (error) {\n console.error(`Error deriving ${chain} address:`, error);\n throw error;\n }\n }\n\n /**\n * Derive addresses for all supported chains\n */\n async deriveAllAddresses(): Promise<MultiChainAddresses> {\n const chains: SupportedChain[] = ['ethereum', 'bitcoin', 'ton', 'tron', 'solana', 'spark'];\n const addresses: MultiChainAddresses = {\n ethereum: null,\n bitcoin: null,\n ton: null,\n tron: null,\n solana: null,\n spark: null,\n };\n\n // Derive all addresses in parallel for better performance\n const results = await Promise.allSettled(\n chains.map(async (chain) => {\n const result = await this.deriveAddress(chain);\n return { chain, address: result.address };\n })\n );\n\n for (const result of results) {\n if (result.status === 'fulfilled') {\n addresses[result.value.chain] = result.value.address;\n } else {\n console.error('Failed to derive address:', result.reason);\n }\n }\n\n return addresses;\n }\n\n /**\n * Derive addresses for specific chains only\n */\n async deriveAddressesForChains(chains: SupportedChain[]): Promise<Partial<MultiChainAddresses>> {\n const addresses: Partial<MultiChainAddresses> = {};\n\n const results = await Promise.allSettled(\n chains.map(async (chain) => {\n const result = await this.deriveAddress(chain);\n return { chain, address: result.address };\n })\n );\n\n for (const result of results) {\n if (result.status === 'fulfilled') {\n addresses[result.value.chain] = result.value.address;\n }\n }\n\n return addresses;\n }\n\n /**\n * Get fee rates for a specific chain\n */\n async getFeeRates(\n chain: SupportedChain\n ): Promise<{ slow: string; medium: string; fast: string }> {\n if (!this.seed) {\n throw new Error('WDK service not initialized. Call initialize() first.');\n }\n\n try {\n const wallet = await this.getWallet(chain);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const feeRates: any = await wallet.getFeeRates();\n return {\n slow: (feeRates.slow || feeRates.low || '0').toString(),\n medium: (feeRates.medium || feeRates.normal || feeRates.standard || '0').toString(),\n fast: (feeRates.fast || feeRates.high || '0').toString(),\n };\n } catch (error) {\n console.error(`Error fetching fee rates for ${chain}:`, error);\n throw error;\n }\n }\n\n /**\n * Get the current network configuration\n */\n getNetwork(): 'mainnet' | 'testnet' {\n return this.config.network;\n }\n\n /**\n * Check if service is initialized\n */\n isInitialized(): boolean {\n return this.seed !== null;\n }\n\n /**\n * Clean up and dispose of wallet instances\n */\n dispose(): void {\n for (const wallet of Object.values(this.wallets)) {\n if (wallet && typeof wallet.dispose === 'function') {\n try {\n wallet.dispose();\n } catch {\n // Ignore dispose errors\n }\n }\n }\n this.wallets = {};\n this.seed = null;\n }\n}\n\n// Singleton instance\nlet wdkServiceInstance: WdkService | null = null;\n\n/**\n * Get or create the WDK service singleton\n */\nexport function getWdkService(config?: Partial<WdkServiceConfig>): WdkService {\n if (!wdkServiceInstance || (config && config.network !== wdkServiceInstance.getNetwork())) {\n wdkServiceInstance = new WdkService(config);\n }\n return wdkServiceInstance;\n}\n\n/**\n * Create a new WDK service instance (non-singleton)\n */\nexport function createWdkService(config?: Partial<WdkServiceConfig>): WdkService {\n return new WdkService(config);\n}\n","import { Wallet, HDNodeWallet, formatEther, parseEther } from 'ethers';\nimport { createPublicClient, http, formatEther as viemFormatEther } from 'viem';\nimport { sepolia, mainnet } from 'viem/chains';\nimport { KeyManager } from '../security';\nimport type { SecureStorageAdapter } from '../storage/SecureStorage';\nimport { createSecureStorage, WebEncryptedStorageAdapter } from '../storage/SecureStorage';\nimport { NETWORKS, DERIVATION_PATHS, getNetworkConfig, type NetworkConfig } from '../config/networks';\nimport type { NetworkType } from '../types';\nimport { getWdkApiClient } from '../services/WdkApiClient';\nimport { WdkService, type MultiChainAddresses as WdkMultiChainAddresses } from '../services/WdkService';\n\n/**\n * Note on Tether WDK Integration:\n *\n * Tether WDK (@tetherto/wdk, @tetherto/wdk-wallet-btc, @tetherto/wdk-wallet-evm)\n * is designed for Node.js and React Native environments. The Bitcoin wallet module\n * uses Electrum client which requires Node.js 'net' module.\n *\n * For browser environments (Next.js, React web), we use ethers.js for address derivation\n * following proper BIP-44/BIP-84 paths. This provides deterministic addresses that are\n * compatible with the same seed used in WDK-based apps.\n *\n * For React Native or Node.js apps, you can integrate WDK directly:\n * @see https://docs.wallet.tether.io/\n */\n\n/**\n * Storage keys for wallet data\n */\nconst STORAGE_KEYS = {\n ENCRYPTED_SEED: 'encrypted_seed',\n ACTIVE_WALLET: 'active_wallet',\n} as const;\n\n/**\n * Supported chains for Zubari WDK Wallet\n */\nexport const SUPPORTED_CHAINS: NetworkType[] = ['ethereum', 'bitcoin', 'ton', 'tron', 'solana', 'spark'];\n\n/**\n * Chain balance information\n */\nexport interface ChainBalance {\n chain: NetworkType;\n symbol: string;\n balance: string;\n balanceUsd: number;\n address: string;\n decimals: number;\n icon?: string;\n}\n\n/**\n * Multi-chain addresses\n */\nexport interface MultiChainAddresses {\n ethereum: string;\n bitcoin: string;\n ton: string;\n tron: string;\n solana: string;\n spark: string;\n}\n\n/**\n * Wallet state interface\n */\nexport interface WalletState {\n isInitialized: boolean;\n isLocked: boolean;\n address: string | null;\n balance: string | null;\n // Multi-chain support\n addresses?: Partial<MultiChainAddresses>;\n balances?: ChainBalance[];\n selectedChain?: NetworkType;\n}\n\n/**\n * WalletManager Configuration\n */\nexport interface WalletManagerConfig {\n network?: 'mainnet' | 'testnet';\n rpcUrl?: string;\n storage?: SecureStorageAdapter;\n enabledChains?: NetworkType[];\n /** API URL for WDK backend (for multi-chain address derivation) */\n apiUrl?: string;\n}\n\n/**\n * WalletManager - Handles BIP-39 seed generation, address derivation, and secure storage\n *\n * This class provides:\n * - BIP-39 mnemonic generation (12 words)\n * - BIP-44 address derivation for multiple chains (Ethereum, Bitcoin, TON, TRON, Solana, Spark)\n * - Encrypted seed storage using AES-256-GCM\n * - Multi-chain balance fetching\n */\nexport class WalletManager {\n private readonly config: Required<Omit<WalletManagerConfig, 'enabledChains'>> & { enabledChains: NetworkType[] };\n private storage: SecureStorageAdapter;\n private currentSeed: string | null = null;\n private derivedAddress: string | null = null;\n private derivedAddresses: Partial<MultiChainAddresses> = {};\n private selectedChain: NetworkType = 'ethereum';\n private wdkService: WdkService;\n\n constructor(config: WalletManagerConfig = {}) {\n // Get the appropriate RPC URL from network config\n const isTestnet = config.network !== 'mainnet';\n const ethereumConfig = getNetworkConfig('ethereum', isTestnet);\n\n this.config = {\n network: config.network || 'testnet',\n rpcUrl: config.rpcUrl || ethereumConfig.rpcUrl,\n storage: config.storage || createSecureStorage(),\n enabledChains: config.enabledChains || SUPPORTED_CHAINS,\n apiUrl: config.apiUrl || process.env.NEXT_PUBLIC_API_URL || 'http://localhost:3001',\n };\n this.storage = this.config.storage;\n\n // Initialize native WDK service\n this.wdkService = new WdkService({\n network: this.config.network,\n });\n }\n\n /**\n * Generate a new BIP-39 seed phrase (12 words) using ethers.js\n * For native WDK generation, use generateSeedWithWdk() instead\n */\n static generateSeed(): string {\n const wallet = Wallet.createRandom();\n const mnemonic = wallet.mnemonic;\n if (!mnemonic) {\n throw new Error('Failed to generate mnemonic');\n }\n return mnemonic.phrase;\n }\n\n /**\n * Generate a new BIP-39 seed phrase using native Tether WDK\n * This is the recommended method for generating seed phrases\n */\n async generateSeedWithWdk(): Promise<string> {\n return await this.wdkService.generateSeedPhrase();\n }\n\n /**\n * Validate seed phrase using native WDK (async, more accurate)\n */\n async validateSeedWithWdk(seed: string): Promise<boolean> {\n return await this.wdkService.isValidSeed(seed);\n }\n\n /**\n * Validate a BIP-39 seed phrase\n */\n static validateSeed(seed: string): boolean {\n return KeyManager.validateSeedPhrase(seed);\n }\n\n /**\n * Derive Ethereum address from seed phrase using BIP-44 path\n * Path: m/44'/60'/0'/0/0\n */\n static deriveAddress(seed: string): string {\n const hdNode = HDNodeWallet.fromPhrase(seed, undefined, \"m/44'/60'/0'/0/0\");\n return hdNode.address;\n }\n\n /**\n * Get the HDNodeWallet for signing transactions\n */\n static getWallet(seed: string): HDNodeWallet {\n return HDNodeWallet.fromPhrase(seed, undefined, \"m/44'/60'/0'/0/0\");\n }\n\n /**\n * Initialize storage with password (required for web platform)\n */\n async initializeStorage(password: string): Promise<void> {\n if (this.storage instanceof WebEncryptedStorageAdapter) {\n await this.storage.initialize(password);\n }\n }\n\n /**\n * Create a new wallet with generated seed\n */\n async createWallet(password: string): Promise<{ seed: string; address: string }> {\n const seed = WalletManager.generateSeed();\n const address = WalletManager.deriveAddress(seed);\n\n // Encrypt and store seed\n const encrypted = await KeyManager.encryptSeed(seed, password);\n await this.storage.setItem(STORAGE_KEYS.ENCRYPTED_SEED, encrypted);\n\n this.currentSeed = seed;\n this.derivedAddress = address;\n\n return { seed, address };\n }\n\n /**\n * Import an existing wallet from seed phrase\n */\n async importWallet(seed: string, password: string): Promise<{ address: string }> {\n if (!WalletManager.validateSeed(seed)) {\n throw new Error('Invalid seed phrase');\n }\n\n const address = WalletManager.deriveAddress(seed);\n\n // Encrypt and store seed\n const encrypted = await KeyManager.encryptSeed(seed, password);\n await this.storage.setItem(STORAGE_KEYS.ENCRYPTED_SEED, encrypted);\n\n this.currentSeed = seed;\n this.derivedAddress = address;\n\n return { address };\n }\n\n /**\n * Unlock wallet with password\n */\n async unlock(password: string): Promise<{ address: string }> {\n const encrypted = await this.storage.getItem(STORAGE_KEYS.ENCRYPTED_SEED);\n if (!encrypted) {\n throw new Error('No wallet found');\n }\n\n try {\n const seed = await KeyManager.decryptSeed(encrypted, password);\n const address = WalletManager.deriveAddress(seed);\n\n this.currentSeed = seed;\n this.derivedAddress = address;\n\n return { address };\n } catch {\n throw new Error('Invalid password');\n }\n }\n\n /**\n * Lock wallet (clear seed from memory)\n */\n lock(): void {\n this.currentSeed = null;\n this.wdkService.dispose();\n // Keep derived address for display\n }\n\n /**\n * Check if wallet exists in storage\n */\n async hasWallet(): Promise<boolean> {\n return this.storage.hasItem(STORAGE_KEYS.ENCRYPTED_SEED);\n }\n\n /**\n * Delete wallet from storage\n */\n async deleteWallet(): Promise<void> {\n await this.storage.removeItem(STORAGE_KEYS.ENCRYPTED_SEED);\n this.currentSeed = null;\n this.derivedAddress = null;\n this.derivedAddresses = {};\n this.wdkService.dispose();\n }\n\n /**\n * Get current wallet state\n */\n getState(): WalletState {\n return {\n isInitialized: this.derivedAddress !== null,\n isLocked: this.currentSeed === null && this.derivedAddress !== null,\n address: this.derivedAddress,\n balance: null, // Use fetchBalance for current balance\n };\n }\n\n /**\n * Get current address (if unlocked)\n */\n getAddress(): string | null {\n return this.derivedAddress;\n }\n\n /**\n * Check if wallet is unlocked\n */\n isUnlocked(): boolean {\n return this.currentSeed !== null;\n }\n\n /**\n * Get the seed phrase (only if unlocked)\n */\n getSeed(): string | null {\n return this.currentSeed;\n }\n\n /**\n * Fetch balance for current address with timeout handling\n */\n async fetchBalance(): Promise<string> {\n if (!this.derivedAddress) {\n throw new Error('Wallet not initialized');\n }\n\n const chain = this.config.network === 'mainnet' ? mainnet : sepolia;\n const client = createPublicClient({\n chain,\n transport: http(this.config.rpcUrl, {\n timeout: 15000, // 15 second timeout\n retryCount: 2,\n retryDelay: 1000,\n }),\n });\n\n try {\n const balance = await client.getBalance({\n address: this.derivedAddress as `0x${string}`,\n });\n\n return viemFormatEther(balance);\n } catch (error) {\n console.warn('Failed to fetch balance:', error);\n // Return '0' instead of throwing to not block wallet operations\n return '0';\n }\n }\n\n /**\n * Create viem public client for the current network\n */\n getPublicClient() {\n const chain = this.config.network === 'mainnet' ? mainnet : sepolia;\n return createPublicClient({\n chain,\n transport: http(this.config.rpcUrl, {\n timeout: 15000, // 15 second timeout\n retryCount: 2,\n retryDelay: 1000,\n }),\n });\n }\n\n /**\n * Get ethers wallet for signing (only if unlocked)\n */\n getEthersWallet(): HDNodeWallet | null {\n if (!this.currentSeed) return null;\n return WalletManager.getWallet(this.currentSeed);\n }\n\n /**\n * Set active wallet preference\n */\n async setActiveWalletPreference(wallet: 'metamask' | 'wdk'): Promise<void> {\n await this.storage.setItem(STORAGE_KEYS.ACTIVE_WALLET, wallet);\n }\n\n /**\n * Get active wallet preference\n */\n async getActiveWalletPreference(): Promise<'metamask' | 'wdk'> {\n const stored = await this.storage.getItem(STORAGE_KEYS.ACTIVE_WALLET);\n return (stored === 'metamask' || stored === 'wdk') ? stored : 'metamask';\n }\n\n // ==========================================\n // Multi-Chain Support Methods (Powered by Tether WDK)\n // ==========================================\n\n /**\n * Derive address for a specific chain (async version)\n *\n * Calls the backend WDK API for proper derivation when available.\n * Falls back to local ethers-based derivation if API is unavailable.\n */\n static async deriveAddressForChainAsync(\n seed: string,\n chain: NetworkType,\n network: 'mainnet' | 'testnet' = 'testnet',\n apiUrl?: string\n ): Promise<string> {\n try {\n // Try to use the WDK API for proper derivation\n const wdkApi = getWdkApiClient(apiUrl);\n const response = await wdkApi.deriveAddress(seed, chain, network);\n\n if (response.success && response.address) {\n return response.address;\n }\n\n console.warn(`WDK API failed for ${chain}, using local derivation:`, response.error);\n } catch (error) {\n console.warn(`WDK API unavailable for ${chain}, using local derivation:`, error);\n }\n\n // Fallback to local ethers-based derivation\n return WalletManager.deriveAddressForChain(seed, chain);\n }\n\n /**\n * Format address for non-WDK chains (fallback)\n *\n * Note: This fallback produces PLACEHOLDER addresses derived from the seed.\n * For real blockchain interaction, use the WDK API via deriveAddressForChainAsync().\n * These addresses should NOT be used for receiving funds without verification.\n */\n private static formatAddressForChain(address: string, chain: NetworkType): string {\n // For Ethereum, just return the address as-is\n if (chain === 'ethereum') {\n return address;\n }\n\n // Generate deterministic placeholder addresses from the Ethereum address\n // These are NOT cryptographically correct for each chain but are:\n // - Deterministic (same seed = same address)\n // - Correctly formatted for each chain\n // - Clearly marked as needing verification\n\n const addressBytes = address.toLowerCase().replace('0x', '');\n\n switch (chain) {\n case 'bitcoin': {\n // Bitcoin testnet P2WPKH addresses start with tb1q\n // Format: tb1q + 38 chars of bech32\n // Use first 32 chars of address hash as base for bech32-like encoding\n const btcChars = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l';\n let btcAddr = 'tb1q';\n for (let i = 0; i < 38; i++) {\n const idx = parseInt(addressBytes.charAt(i % 40) || '0', 16) % btcChars.length;\n btcAddr += btcChars[idx];\n }\n return btcAddr;\n }\n\n case 'ton': {\n // TON bounceable address: EQ + 46 chars base64url\n // Total length: 48 chars\n const base64Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';\n let tonAddr = 'EQ';\n for (let i = 0; i < 46; i++) {\n const idx = parseInt(addressBytes.charAt(i % 40) || '0', 16) * 4 % base64Chars.length;\n tonAddr += base64Chars[idx];\n }\n return tonAddr;\n }\n\n case 'tron': {\n // TRON address: T + 33 chars base58\n // Total length: 34 chars\n const base58Chars = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';\n let tronAddr = 'T';\n for (let i = 0; i < 33; i++) {\n const idx = parseInt(addressBytes.charAt(i % 40) || '0', 16) * 3 % base58Chars.length;\n tronAddr += base58Chars[idx];\n }\n return tronAddr;\n }\n\n case 'solana': {\n // Solana address: 32-44 chars base58\n // Typically 44 chars\n const base58Chars = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';\n let solAddr = '';\n for (let i = 0; i < 44; i++) {\n const idx = parseInt(addressBytes.charAt(i % 40) || '0', 16) * 3 % base58Chars.length;\n solAddr += base58Chars[idx];\n }\n return solAddr;\n }\n\n case 'spark': {\n // Spark/Lightning: sp1 + 59 chars bech32m\n // Total length: 62 chars\n const bech32Chars = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l';\n let sparkAddr = 'sp1q';\n for (let i = 0; i < 58; i++) {\n const idx = parseInt(addressBytes.charAt(i % 40) || '0', 16) % bech32Chars.length;\n sparkAddr += bech32Chars[idx];\n }\n return sparkAddr;\n }\n\n default:\n return address;\n }\n }\n\n /**\n * Derive address for a specific chain (sync version for backwards compatibility)\n * Uses ethers for basic derivation, use deriveAddressForChainAsync for WDK\n *\n * Note: For non-Ethereum chains, this produces placeholder addresses that are\n * deterministic but not cryptographically valid. Use WDK API for real addresses.\n */\n static deriveAddressForChain(seed: string, chain: NetworkType): string {\n // Always derive from Ethereum path first to get the base address\n const ethPath = DERIVATION_PATHS['ethereum'];\n const ethNode = HDNodeWallet.fromPhrase(seed, undefined, `${ethPath}/0`);\n\n if (chain === 'ethereum') {\n return ethNode.address;\n }\n\n // For other chains, generate formatted placeholder addresses based on the ETH address\n return WalletManager.formatAddressForChain(ethNode.address, chain);\n }\n\n /**\n * Derive addresses for all enabled chains (sync version)\n */\n deriveAllAddresses(): Partial<MultiChainAddresses> {\n if (!this.currentSeed) {\n throw new Error('Wallet is locked');\n }\n\n const addresses: Partial<MultiChainAddresses> = {};\n\n for (const chain of this.config.enabledChains) {\n addresses[chain] = WalletManager.deriveAddressForChain(this.currentSeed, chain);\n }\n\n this.derivedAddresses = addresses;\n return addresses;\n }\n\n /**\n * Derive addresses for all enabled chains using native Tether WDK (recommended)\n * This uses the WDK directly without needing a backend API.\n * Returns REAL cryptographically valid addresses for all chains.\n */\n async deriveAllAddressesWithWdk(): Promise<Partial<MultiChainAddresses>> {\n if (!this.currentSeed) {\n throw new Error('Wallet is locked');\n }\n\n try {\n // Initialize WDK with the current seed\n await this.wdkService.initialize(this.currentSeed);\n\n // Derive addresses for enabled chains only\n const enabledChainsSet = new Set(this.config.enabledChains);\n const wdkAddresses = await this.wdkService.deriveAllAddresses();\n\n // Filter to only enabled chains\n const addresses: Partial<MultiChainAddresses> = {};\n for (const [chain, address] of Object.entries(wdkAddresses)) {\n if (enabledChainsSet.has(chain as NetworkType) && address) {\n addresses[chain as NetworkType] = address;\n }\n }\n\n this.derivedAddresses = addresses;\n return addresses;\n } catch (error) {\n console.error('Native WDK derivation failed:', error);\n throw error;\n }\n }\n\n /**\n * Derive addresses for all enabled chains using Tether WDK\n * Tries native WDK first, then falls back to API, then to placeholders\n */\n async deriveAllAddressesAsync(): Promise<Partial<MultiChainAddresses>> {\n if (!this.currentSeed) {\n throw new Error('Wallet is locked');\n }\n\n // Strategy 1: Try native WDK (best - no network dependency)\n try {\n return await this.deriveAllAddressesWithWdk();\n } catch (wdkError) {\n console.warn('Native WDK failed, trying API:', wdkError);\n }\n\n // Strategy 2: Try WDK API (requires backend running)\n try {\n const wdkApi = getWdkApiClient(this.config.apiUrl);\n const response = await wdkApi.deriveAllAddresses(this.currentSeed, this.config.network);\n\n if (response.success && response.addresses) {\n // Filter to only enabled chains\n const addresses: Partial<MultiChainAddresses> = {};\n for (const chain of this.config.enabledChains) {\n const address = response.addresses[chain];\n if (address) {\n addresses[chain] = address;\n }\n }\n this.derivedAddresses = addresses;\n return addresses;\n }\n\n console.warn('WDK API call failed:', response.error);\n } catch (apiError) {\n console.warn('WDK API unavailable:', apiError);\n }\n\n // Strategy 3: Fallback to placeholders (NOT RECOMMENDED - addresses are not real)\n console.warn('WARNING: Using placeholder addresses. These are NOT valid for receiving funds!');\n return this.deriveAllAddresses();\n }\n\n /**\n * Get address for a specific chain\n */\n getAddressForChain(chain: NetworkType): string | null {\n if (!this.currentSeed) {\n return this.derivedAddresses[chain] || null;\n }\n\n if (!this.derivedAddresses[chain]) {\n this.derivedAddresses[chain] = WalletManager.deriveAddressForChain(this.currentSeed, chain);\n }\n\n return this.derivedAddresses[chain] || null;\n }\n\n /**\n * Get all derived addresses\n */\n getAllAddresses(): Partial<MultiChainAddresses> {\n return { ...this.derivedAddresses };\n }\n\n /**\n * Set the selected chain\n */\n setSelectedChain(chain: NetworkType): void {\n if (!this.config.enabledChains.includes(chain)) {\n throw new Error(`Chain ${chain} is not enabled`);\n }\n this.selectedChain = chain;\n }\n\n /**\n * Get the currently selected chain\n */\n getSelectedChain(): NetworkType {\n return this.selectedChain;\n }\n\n /**\n * Get enabled chains\n */\n getEnabledChains(): NetworkType[] {\n return [...this.config.enabledChains];\n }\n\n /**\n * Get chain configuration\n */\n getChainConfig(chain: NetworkType): NetworkConfig {\n return getNetworkConfig(chain, this.config.network === 'testnet');\n }\n\n /**\n * Fetch balance for a specific chain\n * Note: Currently only Ethereum is implemented\n */\n async fetchBalanceForChain(chain: NetworkType): Promise<ChainBalance> {\n const address = this.getAddressForChain(chain);\n if (!address) {\n throw new Error(`No address for chain ${chain}`);\n }\n\n const networkConfig = this.getChainConfig(chain);\n let balance = '0';\n\n // Fetch balance based on chain type\n if (chain === 'ethereum') {\n const viemChain = this.config.network === 'mainnet' ? mainnet : sepolia;\n const client = createPublicClient({\n chain: viemChain,\n transport: http(this.config.rpcUrl, {\n timeout: 15000, // 15 second timeout\n retryCount: 2,\n retryDelay: 1000,\n }),\n });\n\n try {\n const rawBalance = await client.getBalance({\n address: address as `0x${string}`,\n });\n balance = viemFormatEther(rawBalance);\n } catch (error) {\n console.warn(`Failed to fetch ${chain} balance:`, error);\n // Balance remains '0' on error\n }\n }\n // TODO: Implement balance fetching for other chains\n // - Bitcoin: Use blockstream API\n // - TON: Use toncenter API\n // - TRON: Use trongrid API\n // - Solana: Use Solana JSON RPC\n // - Spark: Use Spark SDK\n\n return {\n chain,\n symbol: networkConfig.nativeCurrency.symbol,\n balance,\n balanceUsd: 0, // TODO: Implement price fetching\n address,\n decimals: networkConfig.nativeCurrency.decimals,\n };\n }\n\n /**\n * Fetch balances for all enabled chains\n */\n async fetchAllBalances(): Promise<ChainBalance[]> {\n const balances: ChainBalance[] = [];\n\n for (const chain of this.config.enabledChains) {\n try {\n const balance = await this.fetchBalanceForChain(chain);\n balances.push(balance);\n } catch (error) {\n console.error(`Failed to fetch balance for ${chain}:`, error);\n // Add placeholder balance on error\n const networkConfig = this.getChainConfig(chain);\n balances.push({\n chain,\n symbol: networkConfig.nativeCurrency.symbol,\n balance: '0',\n balanceUsd: 0,\n address: this.getAddressForChain(chain) || '',\n decimals: networkConfig.nativeCurrency.decimals,\n });\n }\n }\n\n return balances;\n }\n\n /**\n * Get extended wallet state with multi-chain info\n */\n getExtendedState(): WalletState {\n return {\n isInitialized: this.derivedAddress !== null,\n isLocked: this.currentSeed === null && this.derivedAddress !== null,\n address: this.derivedAddress,\n balance: null,\n addresses: this.derivedAddresses,\n selectedChain: this.selectedChain,\n };\n }\n}\n","import type {\n NFTMetadata,\n LazyMintVoucher,\n NFT,\n ListingParams,\n TxResult,\n} from '../types';\nimport { PLATFORM_CONFIG, NFT_VOUCHER_DOMAIN, NFT_VOUCHER_TYPES } from '../config/contracts';\n\n/**\n * ZubariNFTProtocol - NFT creation and marketplace operations\n *\n * Handles lazy minting via EIP-712 signatures, NFT listing,\n * and marketplace operations on Ethereum network.\n */\nexport class ZubariNFTProtocol {\n private readonly contractAddress: string;\n private readonly _marketplaceAddress: string;\n private readonly chainId: number;\n\n constructor(\n contractAddress: string,\n marketplaceAddress: string,\n chainId: number\n ) {\n this.contractAddress = contractAddress;\n this._marketplaceAddress = marketplaceAddress;\n this.chainId = chainId;\n }\n\n /**\n * Create a lazy mint voucher for off-chain NFT creation\n * The voucher can be redeemed on-chain when purchased\n */\n async createLazyMintVoucher(\n metadata: NFTMetadata,\n creatorAddress: string,\n signer: { signTypedData: (domain: object, types: object, value: object) => Promise<string> }\n ): Promise<LazyMintVoucher> {\n // Validate royalty\n if (metadata.royaltyBps > PLATFORM_CONFIG.maxRoyaltyBps) {\n throw new Error(`Royalty cannot exceed ${PLATFORM_CONFIG.maxRoyaltyBps / 100}%`);\n }\n\n // Generate random tokenId\n const tokenId = this.generateTokenId();\n\n // Calculate deadline (30 days from now)\n const deadline = Math.floor(Date.now() / 1000) + PLATFORM_CONFIG.voucherValiditySecs;\n\n // Build voucher data\n const voucherData = {\n tokenId,\n uri: metadata.image, // Will be IPFS URI\n creator: creatorAddress,\n royaltyBps: metadata.royaltyBps,\n deadline,\n };\n\n // Create EIP-712 domain\n const domain = {\n ...NFT_VOUCHER_DOMAIN,\n chainId: this.chainId,\n verifyingContract: this.contractAddress,\n };\n\n // Sign the voucher\n const signature = await signer.signTypedData(domain, NFT_VOUCHER_TYPES, voucherData);\n\n return {\n ...voucherData,\n signature,\n };\n }\n\n /**\n * Redeem a lazy mint voucher to mint the NFT on-chain\n */\n async redeemVoucher(voucher: LazyMintVoucher, _buyerAddress: string): Promise<TxResult> {\n // Validate voucher deadline\n if (voucher.deadline < Math.floor(Date.now() / 1000)) {\n throw new Error('Voucher has expired');\n }\n\n // Placeholder - will call contract\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * List an NFT for sale on the marketplace\n */\n async listForSale(_params: ListingParams): Promise<TxResult> {\n // Placeholder - will approve and list\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Buy an NFT from the marketplace\n */\n async buyNFT(_listingId: string, _price: bigint): Promise<TxResult> {\n // Placeholder - will call marketplace contract\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Transfer an NFT to another address\n */\n async transfer(_tokenId: string, _to: string): Promise<TxResult> {\n // Placeholder - will call NFT contract\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Get NFTs owned by an address\n */\n async getOwnedNFTs(_address: string): Promise<NFT[]> {\n // Placeholder - will query contract/indexer\n return [];\n }\n\n /**\n * Generate a random tokenId (32 bytes hex)\n */\n private generateTokenId(): string {\n const bytes = new Uint8Array(32);\n crypto.getRandomValues(bytes);\n return '0x' + Array.from(bytes).map(b => b.toString(16).padStart(2, '0')).join('');\n }\n}\n","import type { TipData, TipResult, TipStats, TxResult } from '../types';\nimport { PLATFORM_CONFIG } from '../config/contracts';\n\n/**\n * ZubariTipsProtocol - Micropayment tips for creators\n *\n * Handles ETH and ERC-20 token tips with platform fee distribution.\n * Supports gasless tips via ERC-4337 when enabled.\n */\nexport class ZubariTipsProtocol {\n private readonly contractAddress: string;\n private readonly chainId: number;\n private readonly gaslessEnabled: boolean;\n\n constructor(contractAddress: string, chainId: number, gaslessEnabled: boolean = false) {\n this.contractAddress = contractAddress;\n this.chainId = chainId;\n this.gaslessEnabled = gaslessEnabled;\n }\n\n /**\n * Send a tip to a creator\n */\n async sendTip(tip: TipData): Promise<TipResult> {\n const { recipient, amount, token, message } = tip;\n\n // Calculate platform fee (3%)\n const platformFee = (amount * BigInt(PLATFORM_CONFIG.tipFeeBps)) / BigInt(10000);\n const creatorAmount = amount - platformFee;\n\n // Validate amount\n if (amount <= 0n) {\n throw new Error('Tip amount must be greater than 0');\n }\n\n // Placeholder - will call contract\n const txResult: TxResult = {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n\n return {\n txHash: txResult.hash,\n tipId: '', // Will be returned from contract event\n recipient,\n amount: creatorAmount,\n platformFee,\n timestamp: Math.floor(Date.now() / 1000),\n };\n }\n\n /**\n * Send tips to multiple creators in a single transaction\n */\n async sendBatchTips(tips: TipData[]): Promise<TipResult[]> {\n if (tips.length === 0) {\n throw new Error('At least one tip is required');\n }\n\n // Calculate total amount needed\n const totalAmount = tips.reduce((sum, tip) => sum + tip.amount, BigInt(0));\n\n // Placeholder - will call batch function\n return tips.map(tip => ({\n txHash: '',\n tipId: '',\n recipient: tip.recipient,\n amount: tip.amount - (tip.amount * BigInt(PLATFORM_CONFIG.tipFeeBps)) / BigInt(10000),\n platformFee: (tip.amount * BigInt(PLATFORM_CONFIG.tipFeeBps)) / BigInt(10000),\n timestamp: Math.floor(Date.now() / 1000),\n }));\n }\n\n /**\n * Get tips received by an address\n */\n async getTipsReceived(address: string): Promise<TipResult[]> {\n // Placeholder - will query indexer\n return [];\n }\n\n /**\n * Get tips sent by an address\n */\n async getTipsSent(address: string): Promise<TipResult[]> {\n // Placeholder - will query indexer\n return [];\n }\n\n /**\n * Get tip statistics for a creator\n */\n async getCreatorTipStats(creator: string): Promise<TipStats> {\n // Placeholder - will query indexer/contract\n return {\n totalReceived: BigInt(0),\n tipCount: 0,\n uniqueTippers: 0,\n };\n }\n\n /**\n * Get platform fee in basis points\n */\n getPlatformFeeBps(): number {\n return PLATFORM_CONFIG.tipFeeBps;\n }\n}\n","import type { SubscriptionPlan, Subscription, TxResult } from '../types';\n\n/**\n * ZubariSubscriptionProtocol - Recurring subscription payments\n *\n * Handles subscription plan creation, subscription management,\n * and verification of active subscriptions.\n */\nexport class ZubariSubscriptionProtocol {\n private readonly contractAddress: string;\n private readonly chainId: number;\n\n constructor(contractAddress: string, chainId: number) {\n this.contractAddress = contractAddress;\n this.chainId = chainId;\n }\n\n /**\n * Create a new subscription plan\n */\n async createPlan(plan: SubscriptionPlan): Promise<string> {\n // Validate plan\n if (!plan.name || plan.name.length === 0) {\n throw new Error('Plan name is required');\n }\n if (plan.price <= 0n) {\n throw new Error('Plan price must be greater than 0');\n }\n if (plan.duration <= 0) {\n throw new Error('Plan duration must be greater than 0');\n }\n\n // Generate planId based on creator + name hash\n const planId = this.generatePlanId(plan.name);\n\n // Placeholder - will call contract\n return planId;\n }\n\n /**\n * Update an existing subscription plan\n */\n async updatePlan(planId: string, updates: Partial<SubscriptionPlan>): Promise<TxResult> {\n // Placeholder - will call contract\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Subscribe to a creator's plan\n */\n async subscribe(\n creator: string,\n planId: string,\n months: number = 1\n ): Promise<Subscription> {\n if (months <= 0) {\n throw new Error('Subscription duration must be at least 1 month');\n }\n\n const now = Math.floor(Date.now() / 1000);\n const durationSeconds = months * 30 * 24 * 60 * 60; // 30 days per month\n\n // Placeholder - will call contract\n return {\n subscriptionId: '',\n planId,\n creator,\n subscriber: '', // Current user address\n startTime: now,\n endTime: now + durationSeconds,\n autoRenew: false,\n status: 'active',\n };\n }\n\n /**\n * Cancel an active subscription\n */\n async cancel(subscriptionId: string): Promise<TxResult> {\n // Placeholder - will call contract\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Check if an address is subscribed to a creator\n */\n async isSubscribed(creator: string, subscriber?: string): Promise<boolean> {\n // Placeholder - will call contract view function\n return false;\n }\n\n /**\n * Get active subscriptions for a subscriber\n */\n async getActiveSubscriptions(subscriber?: string): Promise<Subscription[]> {\n // Placeholder - will query contract/indexer\n return [];\n }\n\n /**\n * Get all subscribers for a creator\n */\n async getSubscribers(creator: string): Promise<Subscription[]> {\n // Placeholder - will query contract/indexer\n return [];\n }\n\n /**\n * Get a specific plan by ID\n */\n async getPlan(planId: string): Promise<SubscriptionPlan | null> {\n // Placeholder - will query contract\n return null;\n }\n\n /**\n * Get all plans for a creator\n */\n async getCreatorPlans(creator: string): Promise<SubscriptionPlan[]> {\n // Placeholder - will query contract/indexer\n return [];\n }\n\n /**\n * Generate a unique plan ID\n */\n private generatePlanId(name: string): string {\n const bytes = new Uint8Array(16);\n crypto.getRandomValues(bytes);\n return '0x' + Array.from(bytes).map(b => b.toString(16).padStart(2, '0')).join('');\n }\n}\n","import type { EarningsBreakdown, RevenueSplit, TxResult } from '../types';\n\n/**\n * ZubariPayoutsProtocol - Creator earnings management\n *\n * Handles earnings tracking, claiming, revenue splits,\n * and conversion to stablecoins.\n */\nexport class ZubariPayoutsProtocol {\n private readonly contractAddress: string;\n private readonly chainId: number;\n\n constructor(contractAddress: string, chainId: number) {\n this.contractAddress = contractAddress;\n this.chainId = chainId;\n }\n\n /**\n * Get pending earnings breakdown for the current user\n */\n async getPendingEarnings(): Promise<EarningsBreakdown> {\n // Placeholder - will call contract\n return {\n tips: BigInt(0),\n subscriptions: BigInt(0),\n nftSales: BigInt(0),\n royalties: BigInt(0),\n total: BigInt(0),\n };\n }\n\n /**\n * Get historical earnings for a time period\n */\n async getEarningsHistory(\n period: 'day' | 'week' | 'month' | 'all' = 'all'\n ): Promise<EarningsBreakdown[]> {\n // Placeholder - will query indexer\n return [];\n }\n\n /**\n * Claim all pending earnings\n */\n async claimEarnings(): Promise<TxResult> {\n // Placeholder - will call contract\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Claim specific amount of earnings\n */\n async claimPartialEarnings(amount: bigint): Promise<TxResult> {\n if (amount <= 0n) {\n throw new Error('Amount must be greater than 0');\n }\n\n // Placeholder - will call contract\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Setup revenue split with collaborators\n * Basis points must sum to 10000 (100%)\n */\n async setupRevenueSplit(splits: RevenueSplit[]): Promise<TxResult> {\n // Validate that basis points sum to 100%\n const totalBps = splits.reduce((sum, split) => sum + split.basisPoints, 0);\n if (totalBps !== 10000) {\n throw new Error('Revenue splits must sum to 100% (10000 basis points)');\n }\n\n // Validate each split\n for (const split of splits) {\n if (split.basisPoints <= 0) {\n throw new Error('Each split must have positive basis points');\n }\n if (!split.recipient || split.recipient.length === 0) {\n throw new Error('Each split must have a valid recipient address');\n }\n }\n\n // Placeholder - will call contract\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Get current revenue split configuration\n */\n async getRevenueSplit(): Promise<RevenueSplit[]> {\n // Placeholder - will query contract\n return [];\n }\n\n /**\n * Remove revenue split (creator gets 100%)\n */\n async removeRevenueSplit(): Promise<TxResult> {\n // Placeholder - will call contract\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Convert earnings to stablecoin (USDT)\n */\n async convertToStable(token: string, amount: bigint): Promise<TxResult> {\n if (amount <= 0n) {\n throw new Error('Amount must be greater than 0');\n }\n\n // Placeholder - will use swap protocol\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n}\n","import type { SwapQuote, TxResult } from '../types';\nimport { PLATFORM_CONFIG, getContractAddresses } from '../config/contracts';\n\n/**\n * SwapService - DEX integration via Velora\n *\n * Handles token swaps with slippage protection,\n * quote fetching, and earnings conversion.\n */\nexport class SwapService {\n private readonly _chainId: number;\n private readonly isTestnet: boolean;\n\n constructor(chainId: number, isTestnet: boolean = false) {\n this._chainId = chainId;\n this.isTestnet = isTestnet;\n }\n\n /**\n * Get a swap quote\n */\n async getQuote(\n tokenIn: string,\n tokenOut: string,\n amountIn: bigint\n ): Promise<SwapQuote> {\n if (amountIn <= 0n) {\n throw new Error('Amount must be greater than 0');\n }\n\n // Placeholder - will use Velora DEX\n return {\n tokenIn,\n tokenOut,\n amountIn,\n amountOut: BigInt(0),\n priceImpact: 0,\n route: [tokenIn, tokenOut],\n estimatedGas: BigInt(0),\n };\n }\n\n /**\n * Execute a swap with slippage protection\n */\n async executeSwap(\n quote: SwapQuote,\n slippageToleranceBps: number = PLATFORM_CONFIG.defaultSlippageBps\n ): Promise<TxResult> {\n // Calculate minimum output with slippage\n const _minAmountOut =\n quote.amountOut - (quote.amountOut * BigInt(slippageToleranceBps)) / BigInt(10000);\n\n // Calculate deadline\n const _deadline = Math.floor(Date.now() / 1000) + PLATFORM_CONFIG.swapDeadlineSecs;\n\n // Warn if price impact is high\n if (quote.priceImpact > 5) {\n console.warn(`High price impact: ${quote.priceImpact}%`);\n }\n\n // Placeholder - will call swap contract\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Convert earnings to USDT, keeping some ETH for gas\n */\n async convertEarningsToStable(\n ethBalance: bigint,\n reserveForGas: bigint = BigInt('10000000000000000') // 0.01 ETH\n ): Promise<TxResult> {\n const amountToSwap = ethBalance - reserveForGas;\n\n if (amountToSwap <= 0n) {\n throw new Error('Insufficient balance after gas reserve');\n }\n\n // Get quote for ETH -> USDT\n const contracts = getContractAddresses(this.isTestnet ? 'testnet' : 'mainnet');\n const quote = await this.getQuote(\n '0x0000000000000000000000000000000000000000', // ETH\n contracts.usdt, // USDT on Ethereum\n amountToSwap\n );\n\n return this.executeSwap(quote);\n }\n\n /**\n * Check if a swap route exists\n */\n async hasRoute(tokenIn: string, tokenOut: string): Promise<boolean> {\n try {\n const quote = await this.getQuote(tokenIn, tokenOut, BigInt(1));\n return quote.amountOut > 0n;\n } catch {\n return false;\n }\n }\n\n /**\n * Get supported tokens for swapping\n */\n async getSupportedTokens(): Promise<string[]> {\n // Placeholder - will query DEX\n return [];\n }\n}\n","// Network Types\nexport type NetworkType = 'bitcoin' | 'ethereum' | 'ton' | 'tron' | 'solana' | 'spark';\n\n// Wallet Configuration\nexport interface ZubariWalletConfig {\n network: 'mainnet' | 'testnet';\n enabledNetworks: NetworkType[];\n gasless: boolean;\n paymasterUrl?: string;\n bundlerUrl?: string;\n rpcUrls?: Partial<Record<NetworkType, string>>;\n}\n\n// Balance Types\nexport interface TokenBalance {\n symbol: string;\n address: string;\n balance: bigint;\n balanceFormatted: string;\n balanceUsd: number;\n decimals: number;\n}\n\nexport interface NetworkBalance {\n network: NetworkType;\n native: {\n symbol: string;\n balance: bigint;\n balanceFormatted: string;\n balanceUsd: number;\n };\n tokens: TokenBalance[];\n}\n\n// Transaction Types\nexport interface TxResult {\n hash: string;\n network: NetworkType;\n status: 'pending' | 'confirmed' | 'failed';\n blockNumber?: number;\n gasUsed?: bigint;\n error?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface SendParams {\n to: string;\n amount: bigint;\n token?: string;\n gasless?: boolean;\n}\n\n// Account Types\nexport interface Account {\n network: NetworkType;\n address: string;\n publicKey: string;\n derivationPath: string;\n}\n\n// NFT Types\nexport interface NFTMetadata {\n name: string;\n description: string;\n image: string;\n attributes?: Array<{ trait_type: string; value: string | number }>;\n royaltyBps: number;\n}\n\nexport interface LazyMintVoucher {\n tokenId: string;\n uri: string;\n creator: string;\n royaltyBps: number;\n deadline: number;\n signature: string;\n}\n\nexport interface NFT {\n tokenId: string;\n contractAddress: string;\n owner: string;\n creator: string;\n uri: string;\n metadata?: NFTMetadata;\n isLazyMinted: boolean;\n}\n\nexport interface ListingParams {\n tokenId: string;\n price: bigint;\n paymentToken: string;\n duration: number;\n}\n\n// Tip Types\nexport interface TipData {\n recipient: string;\n amount: bigint;\n token: string;\n message?: string;\n}\n\nexport interface TipResult {\n txHash: string;\n tipId: string;\n recipient: string;\n amount: bigint;\n platformFee: bigint;\n timestamp: number;\n}\n\nexport interface TipStats {\n totalReceived: bigint;\n tipCount: number;\n uniqueTippers: number;\n}\n\n// Subscription Types\nexport interface SubscriptionPlan {\n planId?: string;\n name: string;\n description: string;\n price: bigint;\n paymentToken: string;\n duration: number;\n perks: string[];\n maxSubscribers?: number;\n nftBadge: boolean;\n}\n\nexport interface Subscription {\n subscriptionId: string;\n planId: string;\n creator: string;\n subscriber: string;\n startTime: number;\n endTime: number;\n autoRenew: boolean;\n status: 'active' | 'expired' | 'cancelled';\n}\n\n// Payout Types\nexport interface EarningsBreakdown {\n tips: bigint;\n subscriptions: bigint;\n nftSales: bigint;\n royalties: bigint;\n total: bigint;\n}\n\nexport interface RevenueSplit {\n recipient: string;\n basisPoints: number;\n}\n\n// Swap Types\nexport interface SwapQuote {\n tokenIn: string;\n tokenOut: string;\n amountIn: bigint;\n amountOut: bigint;\n priceImpact: number;\n route: string[];\n estimatedGas: bigint;\n}\n\nexport interface SwapParams {\n tokenIn: string;\n tokenOut: string;\n amountIn: bigint;\n minAmountOut: bigint;\n deadline: number;\n}\n\n// Error Types\nexport type ZubariErrorCode =\n | 'TX_FAILED'\n | 'AUTH_EXPIRED'\n | 'RPC_ERROR'\n | 'VOUCHER_EXPIRED'\n | 'SLIPPAGE_ERROR'\n | 'RATE_LIMITED'\n | 'UPLOAD_ERROR'\n | 'INSUFFICIENT_FUNDS'\n | 'INVALID_SIGNATURE'\n | 'UNSUPPORTED_NETWORK'\n | 'UNKNOWN_ERROR';\n\nexport class ZubariError extends Error {\n constructor(\n public readonly code: ZubariErrorCode,\n message: string,\n public readonly details?: unknown\n ) {\n super(message);\n this.name = 'ZubariError';\n }\n}\n","/**\n * React hooks for WalletManager\n *\n * These hooks provide a React-friendly interface to the WalletManager class.\n * They handle state management, loading states, and error handling.\n */\n\nimport { useState, useCallback, useEffect, useMemo } from 'react';\nimport {\n WalletManager,\n SUPPORTED_CHAINS,\n type WalletState,\n type WalletManagerConfig,\n type ChainBalance,\n type MultiChainAddresses,\n} from '../wallet';\nimport type { NetworkType } from '../types';\n\nexport interface UseWalletManagerOptions extends WalletManagerConfig {\n autoCheckWallet?: boolean;\n}\n\nexport interface UseWalletManagerReturn {\n // State\n state: WalletState;\n isLoading: boolean;\n error: string | null;\n\n // Basic Actions\n createWallet: (password: string) => Promise<{ seed: string; address: string }>;\n importWallet: (seed: string, password: string) => Promise<void>;\n unlock: (password: string) => Promise<void>;\n lock: () => void;\n deleteWallet: () => Promise<void>;\n fetchBalance: () => Promise<string>;\n\n // Multi-chain Actions\n selectedChain: NetworkType;\n setSelectedChain: (chain: NetworkType) => void;\n chainBalances: ChainBalance[];\n fetchAllBalances: () => Promise<ChainBalance[]>;\n getAddressForChain: (chain: NetworkType) => string | null;\n getAllAddresses: () => Partial<MultiChainAddresses>;\n supportedChains: NetworkType[];\n\n // Utilities\n hasWallet: () => Promise<boolean>;\n getSeed: () => string | null;\n manager: WalletManager;\n}\n\n/**\n * React hook for managing a WDK wallet with multi-chain support\n */\nexport function useWalletManager(\n options: UseWalletManagerOptions = {}\n): UseWalletManagerReturn {\n const { autoCheckWallet = true, ...config } = options;\n\n // Create manager instance (memoized)\n const manager = useMemo(() => new WalletManager(config), [\n config.network,\n config.rpcUrl,\n ]);\n\n // State\n const [state, setState] = useState<WalletState>({\n isInitialized: false,\n isLocked: true,\n address: null,\n balance: null,\n });\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [selectedChain, setSelectedChainState] = useState<NetworkType>('ethereum');\n const [chainBalances, setChainBalances] = useState<ChainBalance[]>([]);\n\n // Update state from manager\n const updateState = useCallback(() => {\n setState(manager.getExtendedState());\n }, [manager]);\n\n // Check if wallet exists on mount\n useEffect(() => {\n if (autoCheckWallet) {\n manager.hasWallet().then((exists) => {\n if (exists) {\n setState((prev) => ({\n ...prev,\n isInitialized: true,\n isLocked: true,\n }));\n }\n });\n }\n }, [manager, autoCheckWallet]);\n\n // Create new wallet\n const createWallet = useCallback(\n async (password: string) => {\n setIsLoading(true);\n setError(null);\n try {\n // Initialize storage for web\n await manager.initializeStorage(password);\n const result = await manager.createWallet(password);\n // Derive addresses for all chains using Tether WDK (async)\n // Falls back to sync derivation if WDK is not available\n try {\n await manager.deriveAllAddressesAsync();\n } catch {\n manager.deriveAllAddresses();\n }\n updateState();\n return result;\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Failed to create wallet';\n setError(message);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [manager, updateState]\n );\n\n // Import existing wallet\n const importWallet = useCallback(\n async (seed: string, password: string) => {\n setIsLoading(true);\n setError(null);\n try {\n await manager.initializeStorage(password);\n await manager.importWallet(seed, password);\n // Derive addresses for all chains using Tether WDK (async)\n try {\n await manager.deriveAllAddressesAsync();\n } catch {\n manager.deriveAllAddresses();\n }\n updateState();\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Failed to import wallet';\n setError(message);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [manager, updateState]\n );\n\n // Unlock wallet\n const unlock = useCallback(\n async (password: string) => {\n setIsLoading(true);\n setError(null);\n try {\n await manager.initializeStorage(password);\n await manager.unlock(password);\n // Derive addresses for all chains using Tether WDK (async)\n try {\n await manager.deriveAllAddressesAsync();\n } catch {\n manager.deriveAllAddresses();\n }\n updateState();\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Invalid password';\n setError(message);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [manager, updateState]\n );\n\n // Lock wallet\n const lock = useCallback(() => {\n manager.lock();\n setChainBalances([]);\n updateState();\n }, [manager, updateState]);\n\n // Delete wallet\n const deleteWallet = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n try {\n await manager.deleteWallet();\n setChainBalances([]);\n setState({\n isInitialized: false,\n isLocked: true,\n address: null,\n balance: null,\n });\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Failed to delete wallet';\n setError(message);\n throw err;\n } finally {\n setIsLoading(false);\n }\n }, [manager]);\n\n // Fetch balance (for selected chain)\n const fetchBalance = useCallback(async () => {\n setIsLoading(true);\n // Don't clear error here - balance fetch errors shouldn't clear previous errors\n try {\n const balance = await manager.fetchBalance();\n setState((prev) => ({ ...prev, balance }));\n return balance;\n } catch (err) {\n // Log warning but don't throw - balance fetch errors shouldn't block UI\n console.warn('Failed to fetch balance:', err);\n // Return '0' instead of throwing to not block wallet operations\n setState((prev) => ({ ...prev, balance: '0' }));\n return '0';\n } finally {\n setIsLoading(false);\n }\n }, [manager]);\n\n // Fetch all chain balances\n const fetchAllBalances = useCallback(async () => {\n setIsLoading(true);\n // Don't clear error here - balance fetch errors shouldn't clear previous errors\n try {\n const balances = await manager.fetchAllBalances();\n setChainBalances(balances);\n return balances;\n } catch (err) {\n // Log warning but don't throw - balance fetch errors shouldn't block UI\n console.warn('Failed to fetch all balances:', err);\n // Return empty array instead of throwing\n return [];\n } finally {\n setIsLoading(false);\n }\n }, [manager]);\n\n // Set selected chain\n const setSelectedChain = useCallback((chain: NetworkType) => {\n manager.setSelectedChain(chain);\n setSelectedChainState(chain);\n }, [manager]);\n\n // Get address for chain\n const getAddressForChain = useCallback(\n (chain: NetworkType) => manager.getAddressForChain(chain),\n [manager]\n );\n\n // Get all addresses\n const getAllAddresses = useCallback(\n () => manager.getAllAddresses(),\n [manager]\n );\n\n // Check if wallet exists\n const hasWallet = useCallback(() => manager.hasWallet(), [manager]);\n\n // Get seed (only if unlocked)\n const getSeed = useCallback(() => manager.getSeed(), [manager]);\n\n return {\n state,\n isLoading,\n error,\n createWallet,\n importWallet,\n unlock,\n lock,\n deleteWallet,\n fetchBalance,\n // Multi-chain\n selectedChain,\n setSelectedChain,\n chainBalances,\n fetchAllBalances,\n getAddressForChain,\n getAllAddresses,\n supportedChains: SUPPORTED_CHAINS,\n // Utilities\n hasWallet,\n getSeed,\n manager,\n };\n}\n","/**\n * Utility functions for wallet operations\n */\n\n/**\n * Format address for display (truncate middle)\n */\nexport function formatAddress(address: string, chars: number = 4): string {\n if (!address || address.length < 10) return address;\n return `${address.slice(0, chars + 2)}...${address.slice(-chars)}`;\n}\n\n/**\n * Format balance for display\n */\nexport function formatBalance(\n balance: bigint,\n decimals: number = 18,\n precision: number = 4\n): string {\n const divisor = BigInt(10 ** decimals);\n const integerPart = balance / divisor;\n const fractionalPart = balance % divisor;\n\n const fractionalStr = fractionalPart\n .toString()\n .padStart(decimals, '0')\n .slice(0, precision);\n\n return `${integerPart}.${fractionalStr}`;\n}\n\n/**\n * Check if string is a valid Ethereum address\n */\nexport function isValidAddress(address: string): boolean {\n return /^0x[a-fA-F0-9]{40}$/.test(address);\n}\n\n/**\n * Normalize an Ethereum address to checksum format\n */\nexport function normalizeAddress(address: string): string {\n if (!isValidAddress(address)) {\n throw new Error('Invalid Ethereum address');\n }\n return address.toLowerCase();\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/tweetnacl/nacl-fast.js","../../../node_modules/base-x/src/index.js","../../../node_modules/bs58/index.js","../../../node_modules/bs58check/base.js","../../../node_modules/bs58check/index.js","../src/config/networks.ts","../src/config/contracts.ts","../src/wallet/ZubariWallet.ts","../src/security/KeyManager.ts","../src/storage/SecureStorage.ts","../src/services/WdkApiClient.ts","../src/services/WdkService.ts","../src/services/BrowserAddressDerivation.ts","../src/wallet/WalletManager.ts","../src/protocols/NFTProtocol.ts","../src/protocols/TipsProtocol.ts","../src/protocols/SubscriptionProtocol.ts","../src/protocols/PayoutsProtocol.ts","../src/services/SwapService.ts","../src/services/TransactionService.ts","../src/types/index.ts","../src/react/useWalletManager.ts","../src/utils/index.ts"],"names":["exports","crypto","i","j","sha256","DERIVATION_PATHS","HDNodeWallet","viemFormatEther","WdkManager","WalletManagerBtc","WalletManagerEvm","WalletManagerSolana","WalletManagerTon","WalletManagerTron","WalletManagerSpark","wdkLoaded","wdkLoadError","dynamicImport","loadWdkModules","DEFAULT_RPC_URLS"],"mappings":"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E,CAAA;AACR,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,CAAA,GAAI,EAAE,EAAE,CAAA;AACR,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,CAAA,GAAI,EAAE,EAAE,CAAA;AACR,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,CAAA,GAAI,EAAE,EAAE,CAAA;AACR,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,CAAA,GAAI,EAAE,EAAE,CAAA;AACR,QAAA,GAA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,UAAA;AAAA,QAAY,UAAA;AAAA,QACpC,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QACpC,SAAA;AAAA,QAAY,UAAA;AAAA,QAAY,SAAA;AAAA,QAAY,SAAA;AAAA,QACpC,SAAA;AAAA,QAAY,UAAA;AAAA,QAAY,SAAA;AAAA,QAAY,UAAA;AAAA,QACpC,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QACpC,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QACpC,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,SAAA;AAAA,QACpC,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QACpC,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,SAAA;AAAA,QACpC,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QACpC,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,SAAA;AAAA,QAAY,SAAA;AAAA,QACpC,SAAA;AAAA,QAAY,UAAA;AAAA,QAAY,SAAA;AAAA,QAAY,UAAA;AAAA,QACpC,SAAA;AAAA,QAAY,UAAA;AAAA,QAAY,SAAA;AAAA,QAAY,UAAA;AAAA,QACpC,SAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QACpC,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QACpC,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QACpC,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,SAAA;AAAA,QACpC,UAAA;AAAA,QAAY,SAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QACpC,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QACpC,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,SAAA;AAAA,QACpC,UAAA;AAAA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","file":"index.mjs","sourcesContent":["(function(nacl) {\n'use strict';\n\n// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.\n// Public domain.\n//\n// Implementation derived from TweetNaCl version 20140427.\n// See for details: http://tweetnacl.cr.yp.to/\n\nvar gf = function(init) {\n var i, r = new Float64Array(16);\n if (init) for (i = 0; i < init.length; i++) r[i] = init[i];\n return r;\n};\n\n// Pluggable, initialized in high-level API below.\nvar randombytes = function(/* x, n */) { throw new Error('no PRNG'); };\n\nvar _0 = new Uint8Array(16);\nvar _9 = new Uint8Array(32); _9[0] = 9;\n\nvar gf0 = gf(),\n gf1 = gf([1]),\n _121665 = gf([0xdb41, 1]),\n D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),\n D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]),\n X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]),\n Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]),\n I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);\n\nfunction ts64(x, i, h, l) {\n x[i] = (h >> 24) & 0xff;\n x[i+1] = (h >> 16) & 0xff;\n x[i+2] = (h >> 8) & 0xff;\n x[i+3] = h & 0xff;\n x[i+4] = (l >> 24) & 0xff;\n x[i+5] = (l >> 16) & 0xff;\n x[i+6] = (l >> 8) & 0xff;\n x[i+7] = l & 0xff;\n}\n\nfunction vn(x, xi, y, yi, n) {\n var i,d = 0;\n for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i];\n return (1 & ((d - 1) >>> 8)) - 1;\n}\n\nfunction crypto_verify_16(x, xi, y, yi) {\n return vn(x,xi,y,yi,16);\n}\n\nfunction crypto_verify_32(x, xi, y, yi) {\n return vn(x,xi,y,yi,32);\n}\n\nfunction core_salsa20(o, p, k, c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n x0 = x0 + j0 | 0;\n x1 = x1 + j1 | 0;\n x2 = x2 + j2 | 0;\n x3 = x3 + j3 | 0;\n x4 = x4 + j4 | 0;\n x5 = x5 + j5 | 0;\n x6 = x6 + j6 | 0;\n x7 = x7 + j7 | 0;\n x8 = x8 + j8 | 0;\n x9 = x9 + j9 | 0;\n x10 = x10 + j10 | 0;\n x11 = x11 + j11 | 0;\n x12 = x12 + j12 | 0;\n x13 = x13 + j13 | 0;\n x14 = x14 + j14 | 0;\n x15 = x15 + j15 | 0;\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x1 >>> 0 & 0xff;\n o[ 5] = x1 >>> 8 & 0xff;\n o[ 6] = x1 >>> 16 & 0xff;\n o[ 7] = x1 >>> 24 & 0xff;\n\n o[ 8] = x2 >>> 0 & 0xff;\n o[ 9] = x2 >>> 8 & 0xff;\n o[10] = x2 >>> 16 & 0xff;\n o[11] = x2 >>> 24 & 0xff;\n\n o[12] = x3 >>> 0 & 0xff;\n o[13] = x3 >>> 8 & 0xff;\n o[14] = x3 >>> 16 & 0xff;\n o[15] = x3 >>> 24 & 0xff;\n\n o[16] = x4 >>> 0 & 0xff;\n o[17] = x4 >>> 8 & 0xff;\n o[18] = x4 >>> 16 & 0xff;\n o[19] = x4 >>> 24 & 0xff;\n\n o[20] = x5 >>> 0 & 0xff;\n o[21] = x5 >>> 8 & 0xff;\n o[22] = x5 >>> 16 & 0xff;\n o[23] = x5 >>> 24 & 0xff;\n\n o[24] = x6 >>> 0 & 0xff;\n o[25] = x6 >>> 8 & 0xff;\n o[26] = x6 >>> 16 & 0xff;\n o[27] = x6 >>> 24 & 0xff;\n\n o[28] = x7 >>> 0 & 0xff;\n o[29] = x7 >>> 8 & 0xff;\n o[30] = x7 >>> 16 & 0xff;\n o[31] = x7 >>> 24 & 0xff;\n\n o[32] = x8 >>> 0 & 0xff;\n o[33] = x8 >>> 8 & 0xff;\n o[34] = x8 >>> 16 & 0xff;\n o[35] = x8 >>> 24 & 0xff;\n\n o[36] = x9 >>> 0 & 0xff;\n o[37] = x9 >>> 8 & 0xff;\n o[38] = x9 >>> 16 & 0xff;\n o[39] = x9 >>> 24 & 0xff;\n\n o[40] = x10 >>> 0 & 0xff;\n o[41] = x10 >>> 8 & 0xff;\n o[42] = x10 >>> 16 & 0xff;\n o[43] = x10 >>> 24 & 0xff;\n\n o[44] = x11 >>> 0 & 0xff;\n o[45] = x11 >>> 8 & 0xff;\n o[46] = x11 >>> 16 & 0xff;\n o[47] = x11 >>> 24 & 0xff;\n\n o[48] = x12 >>> 0 & 0xff;\n o[49] = x12 >>> 8 & 0xff;\n o[50] = x12 >>> 16 & 0xff;\n o[51] = x12 >>> 24 & 0xff;\n\n o[52] = x13 >>> 0 & 0xff;\n o[53] = x13 >>> 8 & 0xff;\n o[54] = x13 >>> 16 & 0xff;\n o[55] = x13 >>> 24 & 0xff;\n\n o[56] = x14 >>> 0 & 0xff;\n o[57] = x14 >>> 8 & 0xff;\n o[58] = x14 >>> 16 & 0xff;\n o[59] = x14 >>> 24 & 0xff;\n\n o[60] = x15 >>> 0 & 0xff;\n o[61] = x15 >>> 8 & 0xff;\n o[62] = x15 >>> 16 & 0xff;\n o[63] = x15 >>> 24 & 0xff;\n}\n\nfunction core_hsalsa20(o,p,k,c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x5 >>> 0 & 0xff;\n o[ 5] = x5 >>> 8 & 0xff;\n o[ 6] = x5 >>> 16 & 0xff;\n o[ 7] = x5 >>> 24 & 0xff;\n\n o[ 8] = x10 >>> 0 & 0xff;\n o[ 9] = x10 >>> 8 & 0xff;\n o[10] = x10 >>> 16 & 0xff;\n o[11] = x10 >>> 24 & 0xff;\n\n o[12] = x15 >>> 0 & 0xff;\n o[13] = x15 >>> 8 & 0xff;\n o[14] = x15 >>> 16 & 0xff;\n o[15] = x15 >>> 24 & 0xff;\n\n o[16] = x6 >>> 0 & 0xff;\n o[17] = x6 >>> 8 & 0xff;\n o[18] = x6 >>> 16 & 0xff;\n o[19] = x6 >>> 24 & 0xff;\n\n o[20] = x7 >>> 0 & 0xff;\n o[21] = x7 >>> 8 & 0xff;\n o[22] = x7 >>> 16 & 0xff;\n o[23] = x7 >>> 24 & 0xff;\n\n o[24] = x8 >>> 0 & 0xff;\n o[25] = x8 >>> 8 & 0xff;\n o[26] = x8 >>> 16 & 0xff;\n o[27] = x8 >>> 24 & 0xff;\n\n o[28] = x9 >>> 0 & 0xff;\n o[29] = x9 >>> 8 & 0xff;\n o[30] = x9 >>> 16 & 0xff;\n o[31] = x9 >>> 24 & 0xff;\n}\n\nfunction crypto_core_salsa20(out,inp,k,c) {\n core_salsa20(out,inp,k,c);\n}\n\nfunction crypto_core_hsalsa20(out,inp,k,c) {\n core_hsalsa20(out,inp,k,c);\n}\n\nvar sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);\n // \"expand 32-byte k\"\n\nfunction crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n mpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n }\n return 0;\n}\n\nfunction crypto_stream_salsa20(c,cpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = x[i];\n }\n return 0;\n}\n\nfunction crypto_stream(c,cpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20(c,cpos,d,sn,s);\n}\n\nfunction crypto_stream_xor(c,cpos,m,mpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s);\n}\n\n/*\n* Port of Andrew Moon's Poly1305-donna-16. Public domain.\n* https://github.com/floodyberry/poly1305-donna\n*/\n\nvar poly1305 = function(key) {\n this.buffer = new Uint8Array(16);\n this.r = new Uint16Array(10);\n this.h = new Uint16Array(10);\n this.pad = new Uint16Array(8);\n this.leftover = 0;\n this.fin = 0;\n\n var t0, t1, t2, t3, t4, t5, t6, t7;\n\n t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff;\n t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;\n t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;\n this.r[5] = ((t4 >>> 1)) & 0x1ffe;\n t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;\n t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n this.r[9] = ((t7 >>> 5)) & 0x007f;\n\n this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8;\n this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8;\n this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8;\n this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8;\n this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8;\n this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8;\n this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8;\n this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8;\n};\n\npoly1305.prototype.blocks = function(m, mpos, bytes) {\n var hibit = this.fin ? 0 : (1 << 11);\n var t0, t1, t2, t3, t4, t5, t6, t7, c;\n var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;\n\n var h0 = this.h[0],\n h1 = this.h[1],\n h2 = this.h[2],\n h3 = this.h[3],\n h4 = this.h[4],\n h5 = this.h[5],\n h6 = this.h[6],\n h7 = this.h[7],\n h8 = this.h[8],\n h9 = this.h[9];\n\n var r0 = this.r[0],\n r1 = this.r[1],\n r2 = this.r[2],\n r3 = this.r[3],\n r4 = this.r[4],\n r5 = this.r[5],\n r6 = this.r[6],\n r7 = this.r[7],\n r8 = this.r[8],\n r9 = this.r[9];\n\n while (bytes >= 16) {\n t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff;\n t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff;\n t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff;\n h5 += ((t4 >>> 1)) & 0x1fff;\n t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff;\n t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n h9 += ((t7 >>> 5)) | hibit;\n\n c = 0;\n\n d0 = c;\n d0 += h0 * r0;\n d0 += h1 * (5 * r9);\n d0 += h2 * (5 * r8);\n d0 += h3 * (5 * r7);\n d0 += h4 * (5 * r6);\n c = (d0 >>> 13); d0 &= 0x1fff;\n d0 += h5 * (5 * r5);\n d0 += h6 * (5 * r4);\n d0 += h7 * (5 * r3);\n d0 += h8 * (5 * r2);\n d0 += h9 * (5 * r1);\n c += (d0 >>> 13); d0 &= 0x1fff;\n\n d1 = c;\n d1 += h0 * r1;\n d1 += h1 * r0;\n d1 += h2 * (5 * r9);\n d1 += h3 * (5 * r8);\n d1 += h4 * (5 * r7);\n c = (d1 >>> 13); d1 &= 0x1fff;\n d1 += h5 * (5 * r6);\n d1 += h6 * (5 * r5);\n d1 += h7 * (5 * r4);\n d1 += h8 * (5 * r3);\n d1 += h9 * (5 * r2);\n c += (d1 >>> 13); d1 &= 0x1fff;\n\n d2 = c;\n d2 += h0 * r2;\n d2 += h1 * r1;\n d2 += h2 * r0;\n d2 += h3 * (5 * r9);\n d2 += h4 * (5 * r8);\n c = (d2 >>> 13); d2 &= 0x1fff;\n d2 += h5 * (5 * r7);\n d2 += h6 * (5 * r6);\n d2 += h7 * (5 * r5);\n d2 += h8 * (5 * r4);\n d2 += h9 * (5 * r3);\n c += (d2 >>> 13); d2 &= 0x1fff;\n\n d3 = c;\n d3 += h0 * r3;\n d3 += h1 * r2;\n d3 += h2 * r1;\n d3 += h3 * r0;\n d3 += h4 * (5 * r9);\n c = (d3 >>> 13); d3 &= 0x1fff;\n d3 += h5 * (5 * r8);\n d3 += h6 * (5 * r7);\n d3 += h7 * (5 * r6);\n d3 += h8 * (5 * r5);\n d3 += h9 * (5 * r4);\n c += (d3 >>> 13); d3 &= 0x1fff;\n\n d4 = c;\n d4 += h0 * r4;\n d4 += h1 * r3;\n d4 += h2 * r2;\n d4 += h3 * r1;\n d4 += h4 * r0;\n c = (d4 >>> 13); d4 &= 0x1fff;\n d4 += h5 * (5 * r9);\n d4 += h6 * (5 * r8);\n d4 += h7 * (5 * r7);\n d4 += h8 * (5 * r6);\n d4 += h9 * (5 * r5);\n c += (d4 >>> 13); d4 &= 0x1fff;\n\n d5 = c;\n d5 += h0 * r5;\n d5 += h1 * r4;\n d5 += h2 * r3;\n d5 += h3 * r2;\n d5 += h4 * r1;\n c = (d5 >>> 13); d5 &= 0x1fff;\n d5 += h5 * r0;\n d5 += h6 * (5 * r9);\n d5 += h7 * (5 * r8);\n d5 += h8 * (5 * r7);\n d5 += h9 * (5 * r6);\n c += (d5 >>> 13); d5 &= 0x1fff;\n\n d6 = c;\n d6 += h0 * r6;\n d6 += h1 * r5;\n d6 += h2 * r4;\n d6 += h3 * r3;\n d6 += h4 * r2;\n c = (d6 >>> 13); d6 &= 0x1fff;\n d6 += h5 * r1;\n d6 += h6 * r0;\n d6 += h7 * (5 * r9);\n d6 += h8 * (5 * r8);\n d6 += h9 * (5 * r7);\n c += (d6 >>> 13); d6 &= 0x1fff;\n\n d7 = c;\n d7 += h0 * r7;\n d7 += h1 * r6;\n d7 += h2 * r5;\n d7 += h3 * r4;\n d7 += h4 * r3;\n c = (d7 >>> 13); d7 &= 0x1fff;\n d7 += h5 * r2;\n d7 += h6 * r1;\n d7 += h7 * r0;\n d7 += h8 * (5 * r9);\n d7 += h9 * (5 * r8);\n c += (d7 >>> 13); d7 &= 0x1fff;\n\n d8 = c;\n d8 += h0 * r8;\n d8 += h1 * r7;\n d8 += h2 * r6;\n d8 += h3 * r5;\n d8 += h4 * r4;\n c = (d8 >>> 13); d8 &= 0x1fff;\n d8 += h5 * r3;\n d8 += h6 * r2;\n d8 += h7 * r1;\n d8 += h8 * r0;\n d8 += h9 * (5 * r9);\n c += (d8 >>> 13); d8 &= 0x1fff;\n\n d9 = c;\n d9 += h0 * r9;\n d9 += h1 * r8;\n d9 += h2 * r7;\n d9 += h3 * r6;\n d9 += h4 * r5;\n c = (d9 >>> 13); d9 &= 0x1fff;\n d9 += h5 * r4;\n d9 += h6 * r3;\n d9 += h7 * r2;\n d9 += h8 * r1;\n d9 += h9 * r0;\n c += (d9 >>> 13); d9 &= 0x1fff;\n\n c = (((c << 2) + c)) | 0;\n c = (c + d0) | 0;\n d0 = c & 0x1fff;\n c = (c >>> 13);\n d1 += c;\n\n h0 = d0;\n h1 = d1;\n h2 = d2;\n h3 = d3;\n h4 = d4;\n h5 = d5;\n h6 = d6;\n h7 = d7;\n h8 = d8;\n h9 = d9;\n\n mpos += 16;\n bytes -= 16;\n }\n this.h[0] = h0;\n this.h[1] = h1;\n this.h[2] = h2;\n this.h[3] = h3;\n this.h[4] = h4;\n this.h[5] = h5;\n this.h[6] = h6;\n this.h[7] = h7;\n this.h[8] = h8;\n this.h[9] = h9;\n};\n\npoly1305.prototype.finish = function(mac, macpos) {\n var g = new Uint16Array(10);\n var c, mask, f, i;\n\n if (this.leftover) {\n i = this.leftover;\n this.buffer[i++] = 1;\n for (; i < 16; i++) this.buffer[i] = 0;\n this.fin = 1;\n this.blocks(this.buffer, 0, 16);\n }\n\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n for (i = 2; i < 10; i++) {\n this.h[i] += c;\n c = this.h[i] >>> 13;\n this.h[i] &= 0x1fff;\n }\n this.h[0] += (c * 5);\n c = this.h[0] >>> 13;\n this.h[0] &= 0x1fff;\n this.h[1] += c;\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n this.h[2] += c;\n\n g[0] = this.h[0] + 5;\n c = g[0] >>> 13;\n g[0] &= 0x1fff;\n for (i = 1; i < 10; i++) {\n g[i] = this.h[i] + c;\n c = g[i] >>> 13;\n g[i] &= 0x1fff;\n }\n g[9] -= (1 << 13);\n\n mask = (c ^ 1) - 1;\n for (i = 0; i < 10; i++) g[i] &= mask;\n mask = ~mask;\n for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];\n\n this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff;\n this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff;\n this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff;\n this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff;\n this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff;\n this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff;\n this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff;\n this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff;\n\n f = this.h[0] + this.pad[0];\n this.h[0] = f & 0xffff;\n for (i = 1; i < 8; i++) {\n f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;\n this.h[i] = f & 0xffff;\n }\n\n mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff;\n mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff;\n mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff;\n mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff;\n mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff;\n mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff;\n mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff;\n mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff;\n mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff;\n mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff;\n mac[macpos+10] = (this.h[5] >>> 0) & 0xff;\n mac[macpos+11] = (this.h[5] >>> 8) & 0xff;\n mac[macpos+12] = (this.h[6] >>> 0) & 0xff;\n mac[macpos+13] = (this.h[6] >>> 8) & 0xff;\n mac[macpos+14] = (this.h[7] >>> 0) & 0xff;\n mac[macpos+15] = (this.h[7] >>> 8) & 0xff;\n};\n\npoly1305.prototype.update = function(m, mpos, bytes) {\n var i, want;\n\n if (this.leftover) {\n want = (16 - this.leftover);\n if (want > bytes)\n want = bytes;\n for (i = 0; i < want; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n bytes -= want;\n mpos += want;\n this.leftover += want;\n if (this.leftover < 16)\n return;\n this.blocks(this.buffer, 0, 16);\n this.leftover = 0;\n }\n\n if (bytes >= 16) {\n want = bytes - (bytes % 16);\n this.blocks(m, mpos, want);\n mpos += want;\n bytes -= want;\n }\n\n if (bytes) {\n for (i = 0; i < bytes; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n this.leftover += bytes;\n }\n};\n\nfunction crypto_onetimeauth(out, outpos, m, mpos, n, k) {\n var s = new poly1305(k);\n s.update(m, mpos, n);\n s.finish(out, outpos);\n return 0;\n}\n\nfunction crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {\n var x = new Uint8Array(16);\n crypto_onetimeauth(x,0,m,mpos,n,k);\n return crypto_verify_16(h,hpos,x,0);\n}\n\nfunction crypto_secretbox(c,m,d,n,k) {\n var i;\n if (d < 32) return -1;\n crypto_stream_xor(c,0,m,0,d,n,k);\n crypto_onetimeauth(c, 16, c, 32, d - 32, c);\n for (i = 0; i < 16; i++) c[i] = 0;\n return 0;\n}\n\nfunction crypto_secretbox_open(m,c,d,n,k) {\n var i;\n var x = new Uint8Array(32);\n if (d < 32) return -1;\n crypto_stream(x,0,32,n,k);\n if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1;\n crypto_stream_xor(m,0,c,0,d,n,k);\n for (i = 0; i < 32; i++) m[i] = 0;\n return 0;\n}\n\nfunction set25519(r, a) {\n var i;\n for (i = 0; i < 16; i++) r[i] = a[i]|0;\n}\n\nfunction car25519(o) {\n var i, v, c = 1;\n for (i = 0; i < 16; i++) {\n v = o[i] + c + 65535;\n c = Math.floor(v / 65536);\n o[i] = v - c * 65536;\n }\n o[0] += c-1 + 37 * (c-1);\n}\n\nfunction sel25519(p, q, b) {\n var t, c = ~(b-1);\n for (var i = 0; i < 16; i++) {\n t = c & (p[i] ^ q[i]);\n p[i] ^= t;\n q[i] ^= t;\n }\n}\n\nfunction pack25519(o, n) {\n var i, j, b;\n var m = gf(), t = gf();\n for (i = 0; i < 16; i++) t[i] = n[i];\n car25519(t);\n car25519(t);\n car25519(t);\n for (j = 0; j < 2; j++) {\n m[0] = t[0] - 0xffed;\n for (i = 1; i < 15; i++) {\n m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);\n m[i-1] &= 0xffff;\n }\n m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);\n b = (m[15]>>16) & 1;\n m[14] &= 0xffff;\n sel25519(t, m, 1-b);\n }\n for (i = 0; i < 16; i++) {\n o[2*i] = t[i] & 0xff;\n o[2*i+1] = t[i]>>8;\n }\n}\n\nfunction neq25519(a, b) {\n var c = new Uint8Array(32), d = new Uint8Array(32);\n pack25519(c, a);\n pack25519(d, b);\n return crypto_verify_32(c, 0, d, 0);\n}\n\nfunction par25519(a) {\n var d = new Uint8Array(32);\n pack25519(d, a);\n return d[0] & 1;\n}\n\nfunction unpack25519(o, n) {\n var i;\n for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);\n o[15] &= 0x7fff;\n}\n\nfunction A(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];\n}\n\nfunction Z(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];\n}\n\nfunction M(o, a, b) {\n var v, c,\n t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0,\n t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,\n t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,\n t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,\n b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11],\n b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n\n v = a[0];\n t0 += v * b0;\n t1 += v * b1;\n t2 += v * b2;\n t3 += v * b3;\n t4 += v * b4;\n t5 += v * b5;\n t6 += v * b6;\n t7 += v * b7;\n t8 += v * b8;\n t9 += v * b9;\n t10 += v * b10;\n t11 += v * b11;\n t12 += v * b12;\n t13 += v * b13;\n t14 += v * b14;\n t15 += v * b15;\n v = a[1];\n t1 += v * b0;\n t2 += v * b1;\n t3 += v * b2;\n t4 += v * b3;\n t5 += v * b4;\n t6 += v * b5;\n t7 += v * b6;\n t8 += v * b7;\n t9 += v * b8;\n t10 += v * b9;\n t11 += v * b10;\n t12 += v * b11;\n t13 += v * b12;\n t14 += v * b13;\n t15 += v * b14;\n t16 += v * b15;\n v = a[2];\n t2 += v * b0;\n t3 += v * b1;\n t4 += v * b2;\n t5 += v * b3;\n t6 += v * b4;\n t7 += v * b5;\n t8 += v * b6;\n t9 += v * b7;\n t10 += v * b8;\n t11 += v * b9;\n t12 += v * b10;\n t13 += v * b11;\n t14 += v * b12;\n t15 += v * b13;\n t16 += v * b14;\n t17 += v * b15;\n v = a[3];\n t3 += v * b0;\n t4 += v * b1;\n t5 += v * b2;\n t6 += v * b3;\n t7 += v * b4;\n t8 += v * b5;\n t9 += v * b6;\n t10 += v * b7;\n t11 += v * b8;\n t12 += v * b9;\n t13 += v * b10;\n t14 += v * b11;\n t15 += v * b12;\n t16 += v * b13;\n t17 += v * b14;\n t18 += v * b15;\n v = a[4];\n t4 += v * b0;\n t5 += v * b1;\n t6 += v * b2;\n t7 += v * b3;\n t8 += v * b4;\n t9 += v * b5;\n t10 += v * b6;\n t11 += v * b7;\n t12 += v * b8;\n t13 += v * b9;\n t14 += v * b10;\n t15 += v * b11;\n t16 += v * b12;\n t17 += v * b13;\n t18 += v * b14;\n t19 += v * b15;\n v = a[5];\n t5 += v * b0;\n t6 += v * b1;\n t7 += v * b2;\n t8 += v * b3;\n t9 += v * b4;\n t10 += v * b5;\n t11 += v * b6;\n t12 += v * b7;\n t13 += v * b8;\n t14 += v * b9;\n t15 += v * b10;\n t16 += v * b11;\n t17 += v * b12;\n t18 += v * b13;\n t19 += v * b14;\n t20 += v * b15;\n v = a[6];\n t6 += v * b0;\n t7 += v * b1;\n t8 += v * b2;\n t9 += v * b3;\n t10 += v * b4;\n t11 += v * b5;\n t12 += v * b6;\n t13 += v * b7;\n t14 += v * b8;\n t15 += v * b9;\n t16 += v * b10;\n t17 += v * b11;\n t18 += v * b12;\n t19 += v * b13;\n t20 += v * b14;\n t21 += v * b15;\n v = a[7];\n t7 += v * b0;\n t8 += v * b1;\n t9 += v * b2;\n t10 += v * b3;\n t11 += v * b4;\n t12 += v * b5;\n t13 += v * b6;\n t14 += v * b7;\n t15 += v * b8;\n t16 += v * b9;\n t17 += v * b10;\n t18 += v * b11;\n t19 += v * b12;\n t20 += v * b13;\n t21 += v * b14;\n t22 += v * b15;\n v = a[8];\n t8 += v * b0;\n t9 += v * b1;\n t10 += v * b2;\n t11 += v * b3;\n t12 += v * b4;\n t13 += v * b5;\n t14 += v * b6;\n t15 += v * b7;\n t16 += v * b8;\n t17 += v * b9;\n t18 += v * b10;\n t19 += v * b11;\n t20 += v * b12;\n t21 += v * b13;\n t22 += v * b14;\n t23 += v * b15;\n v = a[9];\n t9 += v * b0;\n t10 += v * b1;\n t11 += v * b2;\n t12 += v * b3;\n t13 += v * b4;\n t14 += v * b5;\n t15 += v * b6;\n t16 += v * b7;\n t17 += v * b8;\n t18 += v * b9;\n t19 += v * b10;\n t20 += v * b11;\n t21 += v * b12;\n t22 += v * b13;\n t23 += v * b14;\n t24 += v * b15;\n v = a[10];\n t10 += v * b0;\n t11 += v * b1;\n t12 += v * b2;\n t13 += v * b3;\n t14 += v * b4;\n t15 += v * b5;\n t16 += v * b6;\n t17 += v * b7;\n t18 += v * b8;\n t19 += v * b9;\n t20 += v * b10;\n t21 += v * b11;\n t22 += v * b12;\n t23 += v * b13;\n t24 += v * b14;\n t25 += v * b15;\n v = a[11];\n t11 += v * b0;\n t12 += v * b1;\n t13 += v * b2;\n t14 += v * b3;\n t15 += v * b4;\n t16 += v * b5;\n t17 += v * b6;\n t18 += v * b7;\n t19 += v * b8;\n t20 += v * b9;\n t21 += v * b10;\n t22 += v * b11;\n t23 += v * b12;\n t24 += v * b13;\n t25 += v * b14;\n t26 += v * b15;\n v = a[12];\n t12 += v * b0;\n t13 += v * b1;\n t14 += v * b2;\n t15 += v * b3;\n t16 += v * b4;\n t17 += v * b5;\n t18 += v * b6;\n t19 += v * b7;\n t20 += v * b8;\n t21 += v * b9;\n t22 += v * b10;\n t23 += v * b11;\n t24 += v * b12;\n t25 += v * b13;\n t26 += v * b14;\n t27 += v * b15;\n v = a[13];\n t13 += v * b0;\n t14 += v * b1;\n t15 += v * b2;\n t16 += v * b3;\n t17 += v * b4;\n t18 += v * b5;\n t19 += v * b6;\n t20 += v * b7;\n t21 += v * b8;\n t22 += v * b9;\n t23 += v * b10;\n t24 += v * b11;\n t25 += v * b12;\n t26 += v * b13;\n t27 += v * b14;\n t28 += v * b15;\n v = a[14];\n t14 += v * b0;\n t15 += v * b1;\n t16 += v * b2;\n t17 += v * b3;\n t18 += v * b4;\n t19 += v * b5;\n t20 += v * b6;\n t21 += v * b7;\n t22 += v * b8;\n t23 += v * b9;\n t24 += v * b10;\n t25 += v * b11;\n t26 += v * b12;\n t27 += v * b13;\n t28 += v * b14;\n t29 += v * b15;\n v = a[15];\n t15 += v * b0;\n t16 += v * b1;\n t17 += v * b2;\n t18 += v * b3;\n t19 += v * b4;\n t20 += v * b5;\n t21 += v * b6;\n t22 += v * b7;\n t23 += v * b8;\n t24 += v * b9;\n t25 += v * b10;\n t26 += v * b11;\n t27 += v * b12;\n t28 += v * b13;\n t29 += v * b14;\n t30 += v * b15;\n\n t0 += 38 * t16;\n t1 += 38 * t17;\n t2 += 38 * t18;\n t3 += 38 * t19;\n t4 += 38 * t20;\n t5 += 38 * t21;\n t6 += 38 * t22;\n t7 += 38 * t23;\n t8 += 38 * t24;\n t9 += 38 * t25;\n t10 += 38 * t26;\n t11 += 38 * t27;\n t12 += 38 * t28;\n t13 += 38 * t29;\n t14 += 38 * t30;\n // t15 left as is\n\n // first car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n // second car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n o[ 0] = t0;\n o[ 1] = t1;\n o[ 2] = t2;\n o[ 3] = t3;\n o[ 4] = t4;\n o[ 5] = t5;\n o[ 6] = t6;\n o[ 7] = t7;\n o[ 8] = t8;\n o[ 9] = t9;\n o[10] = t10;\n o[11] = t11;\n o[12] = t12;\n o[13] = t13;\n o[14] = t14;\n o[15] = t15;\n}\n\nfunction S(o, a) {\n M(o, a, a);\n}\n\nfunction inv25519(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 253; a >= 0; a--) {\n S(c, c);\n if(a !== 2 && a !== 4) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction pow2523(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 250; a >= 0; a--) {\n S(c, c);\n if(a !== 1) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction crypto_scalarmult(q, n, p) {\n var z = new Uint8Array(32);\n var x = new Float64Array(80), r, i;\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf();\n for (i = 0; i < 31; i++) z[i] = n[i];\n z[31]=(n[31]&127)|64;\n z[0]&=248;\n unpack25519(x,p);\n for (i = 0; i < 16; i++) {\n b[i]=x[i];\n d[i]=a[i]=c[i]=0;\n }\n a[0]=d[0]=1;\n for (i=254; i>=0; --i) {\n r=(z[i>>>3]>>>(i&7))&1;\n sel25519(a,b,r);\n sel25519(c,d,r);\n A(e,a,c);\n Z(a,a,c);\n A(c,b,d);\n Z(b,b,d);\n S(d,e);\n S(f,a);\n M(a,c,a);\n M(c,b,e);\n A(e,a,c);\n Z(a,a,c);\n S(b,a);\n Z(c,d,f);\n M(a,c,_121665);\n A(a,a,d);\n M(c,c,a);\n M(a,d,f);\n M(d,b,x);\n S(b,e);\n sel25519(a,b,r);\n sel25519(c,d,r);\n }\n for (i = 0; i < 16; i++) {\n x[i+16]=a[i];\n x[i+32]=c[i];\n x[i+48]=b[i];\n x[i+64]=d[i];\n }\n var x32 = x.subarray(32);\n var x16 = x.subarray(16);\n inv25519(x32,x32);\n M(x16,x16,x32);\n pack25519(q,x16);\n return 0;\n}\n\nfunction crypto_scalarmult_base(q, n) {\n return crypto_scalarmult(q, n, _9);\n}\n\nfunction crypto_box_keypair(y, x) {\n randombytes(x, 32);\n return crypto_scalarmult_base(y, x);\n}\n\nfunction crypto_box_beforenm(k, y, x) {\n var s = new Uint8Array(32);\n crypto_scalarmult(s, x, y);\n return crypto_core_hsalsa20(k, _0, s, sigma);\n}\n\nvar crypto_box_afternm = crypto_secretbox;\nvar crypto_box_open_afternm = crypto_secretbox_open;\n\nfunction crypto_box(c, m, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_afternm(c, m, d, n, k);\n}\n\nfunction crypto_box_open(m, c, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_open_afternm(m, c, d, n, k);\n}\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction crypto_hashblocks_hl(hh, hl, m, n) {\n var wh = new Int32Array(16), wl = new Int32Array(16),\n bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7,\n bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7,\n th, tl, i, j, h, l, a, b, c, d;\n\n var ah0 = hh[0],\n ah1 = hh[1],\n ah2 = hh[2],\n ah3 = hh[3],\n ah4 = hh[4],\n ah5 = hh[5],\n ah6 = hh[6],\n ah7 = hh[7],\n\n al0 = hl[0],\n al1 = hl[1],\n al2 = hl[2],\n al3 = hl[3],\n al4 = hl[4],\n al5 = hl[5],\n al6 = hl[6],\n al7 = hl[7];\n\n var pos = 0;\n while (n >= 128) {\n for (i = 0; i < 16; i++) {\n j = 8 * i + pos;\n wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3];\n wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7];\n }\n for (i = 0; i < 80; i++) {\n bh0 = ah0;\n bh1 = ah1;\n bh2 = ah2;\n bh3 = ah3;\n bh4 = ah4;\n bh5 = ah5;\n bh6 = ah6;\n bh7 = ah7;\n\n bl0 = al0;\n bl1 = al1;\n bl2 = al2;\n bl3 = al3;\n bl4 = al4;\n bl5 = al5;\n bl6 = al6;\n bl7 = al7;\n\n // add\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma1\n h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32))));\n l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Ch\n h = (ah4 & ah5) ^ (~ah4 & ah6);\n l = (al4 & al5) ^ (~al4 & al6);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // K\n h = K[i*2];\n l = K[i*2+1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // w\n h = wh[i%16];\n l = wl[i%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n th = c & 0xffff | d << 16;\n tl = a & 0xffff | b << 16;\n\n // add\n h = th;\n l = tl;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma0\n h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32))));\n l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Maj\n h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);\n l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh7 = (c & 0xffff) | (d << 16);\n bl7 = (a & 0xffff) | (b << 16);\n\n // add\n h = bh3;\n l = bl3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = th;\n l = tl;\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh3 = (c & 0xffff) | (d << 16);\n bl3 = (a & 0xffff) | (b << 16);\n\n ah1 = bh0;\n ah2 = bh1;\n ah3 = bh2;\n ah4 = bh3;\n ah5 = bh4;\n ah6 = bh5;\n ah7 = bh6;\n ah0 = bh7;\n\n al1 = bl0;\n al2 = bl1;\n al3 = bl2;\n al4 = bl3;\n al5 = bl4;\n al6 = bl5;\n al7 = bl6;\n al0 = bl7;\n\n if (i%16 === 15) {\n for (j = 0; j < 16; j++) {\n // add\n h = wh[j];\n l = wl[j];\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = wh[(j+9)%16];\n l = wl[(j+9)%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma0\n th = wh[(j+1)%16];\n tl = wl[(j+1)%16];\n h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7);\n l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma1\n th = wh[(j+14)%16];\n tl = wl[(j+14)%16];\n h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6);\n l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n wh[j] = (c & 0xffff) | (d << 16);\n wl[j] = (a & 0xffff) | (b << 16);\n }\n }\n }\n\n // add\n h = ah0;\n l = al0;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[0];\n l = hl[0];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[0] = ah0 = (c & 0xffff) | (d << 16);\n hl[0] = al0 = (a & 0xffff) | (b << 16);\n\n h = ah1;\n l = al1;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[1];\n l = hl[1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[1] = ah1 = (c & 0xffff) | (d << 16);\n hl[1] = al1 = (a & 0xffff) | (b << 16);\n\n h = ah2;\n l = al2;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[2];\n l = hl[2];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[2] = ah2 = (c & 0xffff) | (d << 16);\n hl[2] = al2 = (a & 0xffff) | (b << 16);\n\n h = ah3;\n l = al3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[3];\n l = hl[3];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[3] = ah3 = (c & 0xffff) | (d << 16);\n hl[3] = al3 = (a & 0xffff) | (b << 16);\n\n h = ah4;\n l = al4;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[4];\n l = hl[4];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[4] = ah4 = (c & 0xffff) | (d << 16);\n hl[4] = al4 = (a & 0xffff) | (b << 16);\n\n h = ah5;\n l = al5;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[5];\n l = hl[5];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[5] = ah5 = (c & 0xffff) | (d << 16);\n hl[5] = al5 = (a & 0xffff) | (b << 16);\n\n h = ah6;\n l = al6;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[6];\n l = hl[6];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[6] = ah6 = (c & 0xffff) | (d << 16);\n hl[6] = al6 = (a & 0xffff) | (b << 16);\n\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[7];\n l = hl[7];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[7] = ah7 = (c & 0xffff) | (d << 16);\n hl[7] = al7 = (a & 0xffff) | (b << 16);\n\n pos += 128;\n n -= 128;\n }\n\n return n;\n}\n\nfunction crypto_hash(out, m, n) {\n var hh = new Int32Array(8),\n hl = new Int32Array(8),\n x = new Uint8Array(256),\n i, b = n;\n\n hh[0] = 0x6a09e667;\n hh[1] = 0xbb67ae85;\n hh[2] = 0x3c6ef372;\n hh[3] = 0xa54ff53a;\n hh[4] = 0x510e527f;\n hh[5] = 0x9b05688c;\n hh[6] = 0x1f83d9ab;\n hh[7] = 0x5be0cd19;\n\n hl[0] = 0xf3bcc908;\n hl[1] = 0x84caa73b;\n hl[2] = 0xfe94f82b;\n hl[3] = 0x5f1d36f1;\n hl[4] = 0xade682d1;\n hl[5] = 0x2b3e6c1f;\n hl[6] = 0xfb41bd6b;\n hl[7] = 0x137e2179;\n\n crypto_hashblocks_hl(hh, hl, m, n);\n n %= 128;\n\n for (i = 0; i < n; i++) x[i] = m[b-n+i];\n x[n] = 128;\n\n n = 256-128*(n<112?1:0);\n x[n-9] = 0;\n ts64(x, n-8, (b / 0x20000000) | 0, b << 3);\n crypto_hashblocks_hl(hh, hl, x, n);\n\n for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]);\n\n return 0;\n}\n\nfunction add(p, q) {\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf(),\n g = gf(), h = gf(), t = gf();\n\n Z(a, p[1], p[0]);\n Z(t, q[1], q[0]);\n M(a, a, t);\n A(b, p[0], p[1]);\n A(t, q[0], q[1]);\n M(b, b, t);\n M(c, p[3], q[3]);\n M(c, c, D2);\n M(d, p[2], q[2]);\n A(d, d, d);\n Z(e, b, a);\n Z(f, d, c);\n A(g, d, c);\n A(h, b, a);\n\n M(p[0], e, f);\n M(p[1], h, g);\n M(p[2], g, f);\n M(p[3], e, h);\n}\n\nfunction cswap(p, q, b) {\n var i;\n for (i = 0; i < 4; i++) {\n sel25519(p[i], q[i], b);\n }\n}\n\nfunction pack(r, p) {\n var tx = gf(), ty = gf(), zi = gf();\n inv25519(zi, p[2]);\n M(tx, p[0], zi);\n M(ty, p[1], zi);\n pack25519(r, ty);\n r[31] ^= par25519(tx) << 7;\n}\n\nfunction scalarmult(p, q, s) {\n var b, i;\n set25519(p[0], gf0);\n set25519(p[1], gf1);\n set25519(p[2], gf1);\n set25519(p[3], gf0);\n for (i = 255; i >= 0; --i) {\n b = (s[(i/8)|0] >> (i&7)) & 1;\n cswap(p, q, b);\n add(q, p);\n add(p, p);\n cswap(p, q, b);\n }\n}\n\nfunction scalarbase(p, s) {\n var q = [gf(), gf(), gf(), gf()];\n set25519(q[0], X);\n set25519(q[1], Y);\n set25519(q[2], gf1);\n M(q[3], X, Y);\n scalarmult(p, q, s);\n}\n\nfunction crypto_sign_keypair(pk, sk, seeded) {\n var d = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()];\n var i;\n\n if (!seeded) randombytes(sk, 32);\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n scalarbase(p, d);\n pack(pk, p);\n\n for (i = 0; i < 32; i++) sk[i+32] = pk[i];\n return 0;\n}\n\nvar L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);\n\nfunction modL(r, x) {\n var carry, i, j, k;\n for (i = 63; i >= 32; --i) {\n carry = 0;\n for (j = i - 32, k = i - 12; j < k; ++j) {\n x[j] += carry - 16 * x[i] * L[j - (i - 32)];\n carry = Math.floor((x[j] + 128) / 256);\n x[j] -= carry * 256;\n }\n x[j] += carry;\n x[i] = 0;\n }\n carry = 0;\n for (j = 0; j < 32; j++) {\n x[j] += carry - (x[31] >> 4) * L[j];\n carry = x[j] >> 8;\n x[j] &= 255;\n }\n for (j = 0; j < 32; j++) x[j] -= carry * L[j];\n for (i = 0; i < 32; i++) {\n x[i+1] += x[i] >> 8;\n r[i] = x[i] & 255;\n }\n}\n\nfunction reduce(r) {\n var x = new Float64Array(64), i;\n for (i = 0; i < 64; i++) x[i] = r[i];\n for (i = 0; i < 64; i++) r[i] = 0;\n modL(r, x);\n}\n\n// Note: difference from C - smlen returned, not passed as argument.\nfunction crypto_sign(sm, m, n, sk) {\n var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64);\n var i, j, x = new Float64Array(64);\n var p = [gf(), gf(), gf(), gf()];\n\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n var smlen = n + 64;\n for (i = 0; i < n; i++) sm[64 + i] = m[i];\n for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];\n\n crypto_hash(r, sm.subarray(32), n+32);\n reduce(r);\n scalarbase(p, r);\n pack(sm, p);\n\n for (i = 32; i < 64; i++) sm[i] = sk[i];\n crypto_hash(h, sm, n + 64);\n reduce(h);\n\n for (i = 0; i < 64; i++) x[i] = 0;\n for (i = 0; i < 32; i++) x[i] = r[i];\n for (i = 0; i < 32; i++) {\n for (j = 0; j < 32; j++) {\n x[i+j] += h[i] * d[j];\n }\n }\n\n modL(sm.subarray(32), x);\n return smlen;\n}\n\nfunction unpackneg(r, p) {\n var t = gf(), chk = gf(), num = gf(),\n den = gf(), den2 = gf(), den4 = gf(),\n den6 = gf();\n\n set25519(r[2], gf1);\n unpack25519(r[1], p);\n S(num, r[1]);\n M(den, num, D);\n Z(num, num, r[2]);\n A(den, r[2], den);\n\n S(den2, den);\n S(den4, den2);\n M(den6, den4, den2);\n M(t, den6, num);\n M(t, t, den);\n\n pow2523(t, t);\n M(t, t, num);\n M(t, t, den);\n M(t, t, den);\n M(r[0], t, den);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) M(r[0], r[0], I);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) return -1;\n\n if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]);\n\n M(r[3], r[0], r[1]);\n return 0;\n}\n\nfunction crypto_sign_open(m, sm, n, pk) {\n var i;\n var t = new Uint8Array(32), h = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()],\n q = [gf(), gf(), gf(), gf()];\n\n if (n < 64) return -1;\n\n if (unpackneg(q, pk)) return -1;\n\n for (i = 0; i < n; i++) m[i] = sm[i];\n for (i = 0; i < 32; i++) m[i+32] = pk[i];\n crypto_hash(h, m, n);\n reduce(h);\n scalarmult(p, q, h);\n\n scalarbase(q, sm.subarray(32));\n add(p, q);\n pack(t, p);\n\n n -= 64;\n if (crypto_verify_32(sm, 0, t, 0)) {\n for (i = 0; i < n; i++) m[i] = 0;\n return -1;\n }\n\n for (i = 0; i < n; i++) m[i] = sm[i + 64];\n return n;\n}\n\nvar crypto_secretbox_KEYBYTES = 32,\n crypto_secretbox_NONCEBYTES = 24,\n crypto_secretbox_ZEROBYTES = 32,\n crypto_secretbox_BOXZEROBYTES = 16,\n crypto_scalarmult_BYTES = 32,\n crypto_scalarmult_SCALARBYTES = 32,\n crypto_box_PUBLICKEYBYTES = 32,\n crypto_box_SECRETKEYBYTES = 32,\n crypto_box_BEFORENMBYTES = 32,\n crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES,\n crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES,\n crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES,\n crypto_sign_BYTES = 64,\n crypto_sign_PUBLICKEYBYTES = 32,\n crypto_sign_SECRETKEYBYTES = 64,\n crypto_sign_SEEDBYTES = 32,\n crypto_hash_BYTES = 64;\n\nnacl.lowlevel = {\n crypto_core_hsalsa20: crypto_core_hsalsa20,\n crypto_stream_xor: crypto_stream_xor,\n crypto_stream: crypto_stream,\n crypto_stream_salsa20_xor: crypto_stream_salsa20_xor,\n crypto_stream_salsa20: crypto_stream_salsa20,\n crypto_onetimeauth: crypto_onetimeauth,\n crypto_onetimeauth_verify: crypto_onetimeauth_verify,\n crypto_verify_16: crypto_verify_16,\n crypto_verify_32: crypto_verify_32,\n crypto_secretbox: crypto_secretbox,\n crypto_secretbox_open: crypto_secretbox_open,\n crypto_scalarmult: crypto_scalarmult,\n crypto_scalarmult_base: crypto_scalarmult_base,\n crypto_box_beforenm: crypto_box_beforenm,\n crypto_box_afternm: crypto_box_afternm,\n crypto_box: crypto_box,\n crypto_box_open: crypto_box_open,\n crypto_box_keypair: crypto_box_keypair,\n crypto_hash: crypto_hash,\n crypto_sign: crypto_sign,\n crypto_sign_keypair: crypto_sign_keypair,\n crypto_sign_open: crypto_sign_open,\n\n crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES,\n crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES,\n crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES,\n crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES,\n crypto_scalarmult_BYTES: crypto_scalarmult_BYTES,\n crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES,\n crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES,\n crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES,\n crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES,\n crypto_box_NONCEBYTES: crypto_box_NONCEBYTES,\n crypto_box_ZEROBYTES: crypto_box_ZEROBYTES,\n crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES,\n crypto_sign_BYTES: crypto_sign_BYTES,\n crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES,\n crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES,\n crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES,\n crypto_hash_BYTES: crypto_hash_BYTES,\n\n gf: gf,\n D: D,\n L: L,\n pack25519: pack25519,\n unpack25519: unpack25519,\n M: M,\n A: A,\n S: S,\n Z: Z,\n pow2523: pow2523,\n add: add,\n set25519: set25519,\n modL: modL,\n scalarmult: scalarmult,\n scalarbase: scalarbase,\n};\n\n/* High-level API */\n\nfunction checkLengths(k, n) {\n if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size');\n if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size');\n}\n\nfunction checkBoxLengths(pk, sk) {\n if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size');\n if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size');\n}\n\nfunction checkArrayTypes() {\n for (var i = 0; i < arguments.length; i++) {\n if (!(arguments[i] instanceof Uint8Array))\n throw new TypeError('unexpected type, use Uint8Array');\n }\n}\n\nfunction cleanup(arr) {\n for (var i = 0; i < arr.length; i++) arr[i] = 0;\n}\n\nnacl.randomBytes = function(n) {\n var b = new Uint8Array(n);\n randombytes(b, n);\n return b;\n};\n\nnacl.secretbox = function(msg, nonce, key) {\n checkArrayTypes(msg, nonce, key);\n checkLengths(key, nonce);\n var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);\n var c = new Uint8Array(m.length);\n for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i];\n crypto_secretbox(c, m, m.length, nonce, key);\n return c.subarray(crypto_secretbox_BOXZEROBYTES);\n};\n\nnacl.secretbox.open = function(box, nonce, key) {\n checkArrayTypes(box, nonce, key);\n checkLengths(key, nonce);\n var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);\n var m = new Uint8Array(c.length);\n for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i];\n if (c.length < 32) return null;\n if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return null;\n return m.subarray(crypto_secretbox_ZEROBYTES);\n};\n\nnacl.secretbox.keyLength = crypto_secretbox_KEYBYTES;\nnacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES;\nnacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES;\n\nnacl.scalarMult = function(n, p) {\n checkArrayTypes(n, p);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult(q, n, p);\n return q;\n};\n\nnacl.scalarMult.base = function(n) {\n checkArrayTypes(n);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult_base(q, n);\n return q;\n};\n\nnacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;\nnacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES;\n\nnacl.box = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox(msg, nonce, k);\n};\n\nnacl.box.before = function(publicKey, secretKey) {\n checkArrayTypes(publicKey, secretKey);\n checkBoxLengths(publicKey, secretKey);\n var k = new Uint8Array(crypto_box_BEFORENMBYTES);\n crypto_box_beforenm(k, publicKey, secretKey);\n return k;\n};\n\nnacl.box.after = nacl.secretbox;\n\nnacl.box.open = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox.open(msg, nonce, k);\n};\n\nnacl.box.open.after = nacl.secretbox.open;\n\nnacl.box.keyPair = function() {\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);\n crypto_box_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.box.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_box_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n crypto_scalarmult_base(pk, secretKey);\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES;\nnacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES;\nnacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES;\nnacl.box.nonceLength = crypto_box_NONCEBYTES;\nnacl.box.overheadLength = nacl.secretbox.overheadLength;\n\nnacl.sign = function(msg, secretKey) {\n checkArrayTypes(msg, secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length);\n crypto_sign(signedMsg, msg, msg.length, secretKey);\n return signedMsg;\n};\n\nnacl.sign.open = function(signedMsg, publicKey) {\n checkArrayTypes(signedMsg, publicKey);\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var tmp = new Uint8Array(signedMsg.length);\n var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);\n if (mlen < 0) return null;\n var m = new Uint8Array(mlen);\n for (var i = 0; i < m.length; i++) m[i] = tmp[i];\n return m;\n};\n\nnacl.sign.detached = function(msg, secretKey) {\n var signedMsg = nacl.sign(msg, secretKey);\n var sig = new Uint8Array(crypto_sign_BYTES);\n for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];\n return sig;\n};\n\nnacl.sign.detached.verify = function(msg, sig, publicKey) {\n checkArrayTypes(msg, sig, publicKey);\n if (sig.length !== crypto_sign_BYTES)\n throw new Error('bad signature size');\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var sm = new Uint8Array(crypto_sign_BYTES + msg.length);\n var m = new Uint8Array(crypto_sign_BYTES + msg.length);\n var i;\n for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];\n for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];\n return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);\n};\n\nnacl.sign.keyPair = function() {\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n crypto_sign_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i];\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.sign.keyPair.fromSeed = function(seed) {\n checkArrayTypes(seed);\n if (seed.length !== crypto_sign_SEEDBYTES)\n throw new Error('bad seed size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n for (var i = 0; i < 32; i++) sk[i] = seed[i];\n crypto_sign_keypair(pk, sk, true);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES;\nnacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES;\nnacl.sign.seedLength = crypto_sign_SEEDBYTES;\nnacl.sign.signatureLength = crypto_sign_BYTES;\n\nnacl.hash = function(msg) {\n checkArrayTypes(msg);\n var h = new Uint8Array(crypto_hash_BYTES);\n crypto_hash(h, msg, msg.length);\n return h;\n};\n\nnacl.hash.hashLength = crypto_hash_BYTES;\n\nnacl.verify = function(x, y) {\n checkArrayTypes(x, y);\n // Zero length arguments are considered not equal.\n if (x.length === 0 || y.length === 0) return false;\n if (x.length !== y.length) return false;\n return (vn(x, 0, y, 0, x.length) === 0) ? true : false;\n};\n\nnacl.setPRNG = function(fn) {\n randombytes = fn;\n};\n\n(function() {\n // Initialize PRNG if environment provides CSPRNG.\n // If not, methods calling randombytes will throw.\n var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null;\n if (crypto && crypto.getRandomValues) {\n // Browsers.\n var QUOTA = 65536;\n nacl.setPRNG(function(x, n) {\n var i, v = new Uint8Array(n);\n for (i = 0; i < n; i += QUOTA) {\n crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));\n }\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n } else if (typeof require !== 'undefined') {\n // Node.js.\n crypto = require('crypto');\n if (crypto && crypto.randomBytes) {\n nacl.setPRNG(function(x, n) {\n var i, v = crypto.randomBytes(n);\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n }\n }\n})();\n\n})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {}));\n","'use strict'\n// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\nfunction base (ALPHABET) {\n if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n var BASE_MAP = new Uint8Array(256)\n for (var j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255\n }\n for (var i = 0; i < ALPHABET.length; i++) {\n var x = ALPHABET.charAt(i)\n var xc = x.charCodeAt(0)\n if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n BASE_MAP[xc] = i\n }\n var BASE = ALPHABET.length\n var LEADER = ALPHABET.charAt(0)\n var FACTOR = Math.log(BASE) / Math.log(256) // log(BASE) / log(256), rounded up\n var iFACTOR = Math.log(256) / Math.log(BASE) // log(256) / log(BASE), rounded up\n function encode (source) {\n if (source instanceof Uint8Array) {\n } else if (ArrayBuffer.isView(source)) {\n source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength)\n } else if (Array.isArray(source)) {\n source = Uint8Array.from(source)\n }\n if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n if (source.length === 0) { return '' }\n // Skip & count leading zeroes.\n var zeroes = 0\n var length = 0\n var pbegin = 0\n var pend = source.length\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++\n zeroes++\n }\n // Allocate enough space in big-endian base58 representation.\n var size = ((pend - pbegin) * iFACTOR + 1) >>> 0\n var b58 = new Uint8Array(size)\n // Process the bytes.\n while (pbegin !== pend) {\n var carry = source[pbegin]\n // Apply \"b58 = b58 * 256 + ch\".\n var i = 0\n for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n carry += (256 * b58[it1]) >>> 0\n b58[it1] = (carry % BASE) >>> 0\n carry = (carry / BASE) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n pbegin++\n }\n // Skip leading zeroes in base58 result.\n var it2 = size - length\n while (it2 !== size && b58[it2] === 0) {\n it2++\n }\n // Translate the result into a string.\n var str = LEADER.repeat(zeroes)\n for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]) }\n return str\n }\n function decodeUnsafe (source) {\n if (typeof source !== 'string') { throw new TypeError('Expected String') }\n if (source.length === 0) { return new Uint8Array() }\n var psz = 0\n // Skip and count leading '1's.\n var zeroes = 0\n var length = 0\n while (source[psz] === LEADER) {\n zeroes++\n psz++\n }\n // Allocate enough space in big-endian base256 representation.\n var size = (((source.length - psz) * FACTOR) + 1) >>> 0 // log(58) / log(256), rounded up.\n var b256 = new Uint8Array(size)\n // Process the characters.\n while (source[psz]) {\n // Find code of next character\n var charCode = source.charCodeAt(psz)\n // Base map can not be indexed using char code\n if (charCode > 255) { return }\n // Decode character\n var carry = BASE_MAP[charCode]\n // Invalid character\n if (carry === 255) { return }\n var i = 0\n for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n carry += (BASE * b256[it3]) >>> 0\n b256[it3] = (carry % 256) >>> 0\n carry = (carry / 256) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n psz++\n }\n // Skip leading zeroes in b256.\n var it4 = size - length\n while (it4 !== size && b256[it4] === 0) {\n it4++\n }\n var vch = new Uint8Array(zeroes + (size - it4))\n var j = zeroes\n while (it4 !== size) {\n vch[j++] = b256[it4++]\n }\n return vch\n }\n function decode (string) {\n var buffer = decodeUnsafe(string)\n if (buffer) { return buffer }\n throw new Error('Non-base' + BASE + ' character')\n }\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n }\n}\nmodule.exports = base\n","const basex = require('base-x')\nconst ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n\nmodule.exports = basex(ALPHABET)\n","'use strict'\n\nvar base58 = require('bs58')\n\nmodule.exports = function (checksumFn) {\n // Encode a buffer as a base58-check encoded string\n function encode (payload) {\n var payloadU8 = Uint8Array.from(payload)\n var checksum = checksumFn(payloadU8)\n var length = payloadU8.length + 4\n var both = new Uint8Array(length)\n both.set(payloadU8, 0)\n both.set(checksum.subarray(0, 4), payloadU8.length)\n return base58.encode(both, length)\n }\n\n function decodeRaw (buffer) {\n var payload = buffer.slice(0, -4)\n var checksum = buffer.slice(-4)\n var newChecksum = checksumFn(payload)\n\n if (checksum[0] ^ newChecksum[0] |\n checksum[1] ^ newChecksum[1] |\n checksum[2] ^ newChecksum[2] |\n checksum[3] ^ newChecksum[3]) return\n\n return payload\n }\n\n // Decode a base58-check encoded string to a buffer, no result if checksum is wrong\n function decodeUnsafe (string) {\n var buffer = base58.decodeUnsafe(string)\n if (!buffer) return\n\n return decodeRaw(buffer)\n }\n\n function decode (string) {\n var buffer = base58.decode(string)\n var payload = decodeRaw(buffer, checksumFn)\n if (!payload) throw new Error('Invalid checksum')\n return payload\n }\n\n return {\n encode: encode,\n decode: decode,\n decodeUnsafe: decodeUnsafe\n }\n}\n","'use strict'\n\nvar { sha256 } = require('@noble/hashes/sha256')\nvar bs58checkBase = require('./base')\n\n// SHA256(SHA256(buffer))\nfunction sha256x2 (buffer) {\n return sha256(sha256(buffer))\n}\n\nmodule.exports = bs58checkBase(sha256x2)\n","import type { NetworkType } from '../types';\n\nexport interface NetworkConfig {\n name: string;\n chainId: number;\n coinType: number; // BIP-44 coin type\n rpcUrl: string;\n explorerUrl: string;\n nativeCurrency: {\n name: string;\n symbol: string;\n decimals: number;\n };\n isEvm: boolean;\n}\n\nexport const NETWORKS: Record<NetworkType, NetworkConfig> = {\n bitcoin: {\n name: 'Bitcoin',\n chainId: 0,\n coinType: 0, // m/44'/0'\n rpcUrl: 'https://blockstream.info/api',\n explorerUrl: 'https://blockstream.info',\n nativeCurrency: {\n name: 'Bitcoin',\n symbol: 'BTC',\n decimals: 8,\n },\n isEvm: false,\n },\n ethereum: {\n name: 'Ethereum',\n chainId: 1,\n coinType: 60, // m/44'/60'\n rpcUrl: 'https://eth.llamarpc.com',\n explorerUrl: 'https://etherscan.io',\n nativeCurrency: {\n name: 'Ether',\n symbol: 'ETH',\n decimals: 18,\n },\n isEvm: true,\n },\n ton: {\n name: 'TON',\n chainId: -239,\n coinType: 607, // m/44'/607'\n rpcUrl: 'https://toncenter.com/api/v2',\n explorerUrl: 'https://tonscan.org',\n nativeCurrency: {\n name: 'Toncoin',\n symbol: 'TON',\n decimals: 9,\n },\n isEvm: false,\n },\n tron: {\n name: 'TRON',\n chainId: 728126428,\n coinType: 195, // m/44'/195'\n rpcUrl: 'https://api.trongrid.io',\n explorerUrl: 'https://tronscan.org',\n nativeCurrency: {\n name: 'TRON',\n symbol: 'TRX',\n decimals: 6,\n },\n isEvm: false,\n },\n solana: {\n name: 'Solana',\n chainId: 0,\n coinType: 501, // m/44'/501'\n rpcUrl: 'https://api.mainnet-beta.solana.com',\n explorerUrl: 'https://solscan.io',\n nativeCurrency: {\n name: 'Solana',\n symbol: 'SOL',\n decimals: 9,\n },\n isEvm: false,\n },\n spark: {\n name: 'Spark (Lightning)',\n chainId: 0,\n coinType: 998, // m/44'/998'\n rpcUrl: '',\n explorerUrl: '',\n nativeCurrency: {\n name: 'Bitcoin',\n symbol: 'BTC',\n decimals: 8,\n },\n isEvm: false,\n },\n};\n\nexport const TESTNET_NETWORKS: Partial<Record<NetworkType, Partial<NetworkConfig>>> = {\n ethereum: {\n name: 'Sepolia',\n chainId: 11155111,\n // Using eth-sepolia.g.alchemy.com public endpoint (more reliable than rpc.sepolia.org)\n // Fallback order: 1. Alchemy public, 2. Infura public, 3. BlockPi\n rpcUrl: 'https://ethereum-sepolia-rpc.publicnode.com',\n explorerUrl: 'https://sepolia.etherscan.io',\n },\n solana: {\n name: 'Solana Devnet',\n rpcUrl: 'https://api.devnet.solana.com',\n explorerUrl: 'https://solscan.io?cluster=devnet',\n },\n};\n\n// BIP-44 derivation paths\nexport const DERIVATION_PATHS: Record<NetworkType, string> = {\n bitcoin: \"m/44'/0'/0'/0\",\n ethereum: \"m/44'/60'/0'/0\",\n ton: \"m/44'/607'/0'/0\",\n tron: \"m/44'/195'/0'/0\",\n solana: \"m/44'/501'/0'/0\",\n spark: \"m/44'/998'/0'/0\",\n};\n\nexport function getNetworkConfig(\n network: NetworkType,\n isTestnet: boolean = false\n): NetworkConfig {\n const mainnetConfig = NETWORKS[network];\n if (!isTestnet) return mainnetConfig;\n\n const testnetOverrides = TESTNET_NETWORKS[network];\n if (!testnetOverrides) return mainnetConfig;\n\n return {\n ...mainnetConfig,\n ...testnetOverrides,\n };\n}\n","// Contract addresses for Zubari ecosystem\nexport interface ContractAddresses {\n registry: string;\n nft: string;\n marketplace: string;\n tips: string;\n subscriptions: string;\n payouts: string;\n entryPoint: string;\n paymaster: string;\n accountFactory: string;\n usdt: string;\n weth: string;\n}\n\n// Placeholder addresses - will be updated after deployment\nconst ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';\n\nexport const ZUBARI_CONTRACTS: Record<'testnet' | 'mainnet', ContractAddresses> = {\n testnet: {\n // Ethereum Sepolia (11155111) - Deployed 2024-12-09\n registry: '0xEdDf443D48832f23D4A0bED4C4c5eF200B38A7d3',\n nft: '0xdc37e25650D685e4c38124aC314477Ea5f508a9e',\n marketplace: ZERO_ADDRESS, // Not yet deployed\n tips: '0xFDc353edC63Cd3D4bba35bB43861369516a9Dc85',\n subscriptions: '0x8C05F8aD2F295fB7f3596043a7c37C98A5F7fAB8',\n payouts: '0x804Fe503936E8b8d3D5Dbb62AF4fB6Fe7265Fb2c',\n entryPoint: '0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789',\n paymaster: ZERO_ADDRESS, // Not yet deployed\n accountFactory: ZERO_ADDRESS, // Not yet deployed\n usdt: '0xaA8E23Fb1079EA71e0a56F48a2aA51851D8433D0', // USDT on Sepolia\n weth: '0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14',\n },\n mainnet: {\n // Ethereum Mainnet (1)\n registry: ZERO_ADDRESS,\n nft: ZERO_ADDRESS,\n marketplace: ZERO_ADDRESS,\n tips: ZERO_ADDRESS,\n subscriptions: ZERO_ADDRESS,\n payouts: ZERO_ADDRESS,\n entryPoint: '0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789',\n paymaster: ZERO_ADDRESS,\n accountFactory: ZERO_ADDRESS,\n usdt: '0xdAC17F958D2ee523a2206206994597C13D831ec7', // USDT on Ethereum\n weth: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',\n },\n};\n\n// Platform configuration\nexport const PLATFORM_CONFIG = {\n // Platform fee in basis points (300 = 3%)\n tipFeeBps: 300,\n // Maximum royalty in basis points (1000 = 10%)\n maxRoyaltyBps: 1000,\n // Default slippage tolerance for swaps (50 = 0.5%)\n defaultSlippageBps: 50,\n // Voucher validity in seconds (30 days)\n voucherValiditySecs: 30 * 24 * 60 * 60,\n // Swap deadline in seconds (30 minutes)\n swapDeadlineSecs: 30 * 60,\n} as const;\n\n// EIP-712 Domain for lazy minting\nexport const NFT_VOUCHER_DOMAIN = {\n name: 'ZubariNFT',\n version: '1',\n} as const;\n\nexport const NFT_VOUCHER_TYPES = {\n NFTVoucher: [\n { name: 'tokenId', type: 'bytes32' },\n { name: 'uri', type: 'string' },\n { name: 'creator', type: 'address' },\n { name: 'royaltyBps', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n ],\n} as const;\n\nexport function getContractAddresses(network: 'testnet' | 'mainnet'): ContractAddresses {\n return ZUBARI_CONTRACTS[network];\n}\n","import type {\n ZubariWalletConfig,\n NetworkType,\n NetworkBalance,\n TxResult,\n Account,\n SendParams,\n} from '../types';\nimport { getNetworkConfig, DERIVATION_PATHS } from '../config/networks';\nimport { getContractAddresses } from '../config/contracts';\n\n/**\n * ZubariWallet - Multi-chain self-custodial wallet\n *\n * Core wallet class that manages accounts across multiple blockchain networks\n * using Tether WDK as the underlying infrastructure layer.\n */\nexport class ZubariWallet {\n private readonly seed: string;\n private readonly config: ZubariWalletConfig;\n private readonly accounts: Map<NetworkType, Account> = new Map();\n private initialized: boolean = false;\n\n constructor(seed: string, config: ZubariWalletConfig) {\n this.seed = seed;\n this.config = {\n network: config.network || 'mainnet',\n enabledNetworks: config.enabledNetworks || ['ethereum'],\n gasless: config.gasless ?? false,\n paymasterUrl: config.paymasterUrl,\n bundlerUrl: config.bundlerUrl,\n rpcUrls: config.rpcUrls,\n };\n }\n\n /**\n * Initialize the wallet by deriving accounts for all enabled networks\n */\n async initialize(): Promise<void> {\n if (this.initialized) return;\n\n for (const network of this.config.enabledNetworks) {\n await this.deriveAccount(network);\n }\n\n this.initialized = true;\n }\n\n /**\n * Derive account for a specific network using BIP-44\n */\n private async deriveAccount(network: NetworkType, index: number = 0): Promise<Account> {\n const networkConfig = getNetworkConfig(network, this.config.network === 'testnet');\n const basePath = DERIVATION_PATHS[network];\n const derivationPath = `${basePath}/${index}`;\n\n // This is a placeholder implementation\n // Real implementation will use WDK wallet managers\n const account: Account = {\n network,\n address: '', // Will be derived using WDK\n publicKey: '',\n derivationPath,\n };\n\n this.accounts.set(network, account);\n return account;\n }\n\n /**\n * Get account for a specific network\n */\n async getAccount(network: NetworkType, index: number = 0): Promise<Account> {\n const existing = this.accounts.get(network);\n if (existing && existing.derivationPath.endsWith(`/${index}`)) {\n return existing;\n }\n return this.deriveAccount(network, index);\n }\n\n /**\n * Get address for a specific network\n */\n async getAddress(network: NetworkType): Promise<string> {\n const account = await this.getAccount(network);\n return account.address;\n }\n\n /**\n * Get all addresses for enabled networks\n */\n async getAllAddresses(): Promise<Record<NetworkType, string>> {\n const addresses: Partial<Record<NetworkType, string>> = {};\n\n for (const network of this.config.enabledNetworks) {\n addresses[network] = await this.getAddress(network);\n }\n\n return addresses as Record<NetworkType, string>;\n }\n\n /**\n * Get balance for a specific network\n */\n async getBalance(network: NetworkType): Promise<NetworkBalance> {\n const networkConfig = getNetworkConfig(network, this.config.network === 'testnet');\n\n // Placeholder implementation - will use WDK\n return {\n network,\n native: {\n symbol: networkConfig.nativeCurrency.symbol,\n balance: BigInt(0),\n balanceFormatted: '0',\n balanceUsd: 0,\n },\n tokens: [],\n };\n }\n\n /**\n * Get balances for all enabled networks\n */\n async getAllBalances(): Promise<NetworkBalance[]> {\n const balances: NetworkBalance[] = [];\n\n for (const network of this.config.enabledNetworks) {\n balances.push(await this.getBalance(network));\n }\n\n return balances;\n }\n\n /**\n * Get total portfolio value in USD\n */\n async getTotalPortfolioUsd(): Promise<number> {\n const balances = await this.getAllBalances();\n let total = 0;\n\n for (const balance of balances) {\n total += balance.native.balanceUsd;\n for (const token of balance.tokens) {\n total += token.balanceUsd;\n }\n }\n\n return total;\n }\n\n /**\n * Send native currency on a specific network\n */\n async send(network: NetworkType, params: SendParams): Promise<TxResult> {\n const { to, amount, gasless } = params;\n const useGasless = gasless ?? (this.config.gasless && network === 'ethereum');\n\n // Placeholder implementation - will use WDK\n return {\n hash: '',\n network,\n status: 'pending',\n };\n }\n\n /**\n * Send ERC-20 token on EVM networks\n */\n async sendToken(\n network: NetworkType,\n token: string,\n to: string,\n amount: bigint\n ): Promise<TxResult> {\n const networkConfig = getNetworkConfig(network, this.config.network === 'testnet');\n\n if (!networkConfig.isEvm) {\n throw new Error(`sendToken is only supported on EVM networks. ${network} is not an EVM chain.`);\n }\n\n // Placeholder implementation - will use WDK\n return {\n hash: '',\n network,\n status: 'pending',\n };\n }\n\n /**\n * Send Bitcoin on-chain using WalletManagerBtc\n * @param to - Destination address (bc1q... for native segwit)\n * @param amount - Amount in satoshis\n */\n async sendBitcoin(to: string, amount: bigint): Promise<TxResult> {\n // Validate Bitcoin address format\n if (!this.isValidBitcoinAddress(to)) {\n throw new Error('Invalid Bitcoin address. Expected bc1q... (native segwit) format.');\n }\n\n // Use WDK WalletManagerBtc for transaction\n // const btcManager = new WalletManagerBtc({ seed: this.seed });\n // const tx = await btcManager.send(to, amount);\n\n return this.send('bitcoin', { to, amount });\n }\n\n /**\n * Validate Bitcoin address format\n */\n private isValidBitcoinAddress(address: string): boolean {\n // Native SegWit (bech32)\n if (address.startsWith('bc1q') || address.startsWith('tb1q')) {\n return address.length >= 42 && address.length <= 62;\n }\n // Legacy P2PKH\n if (address.startsWith('1') || address.startsWith('m') || address.startsWith('n')) {\n return address.length >= 25 && address.length <= 34;\n }\n // P2SH\n if (address.startsWith('3') || address.startsWith('2')) {\n return address.length >= 25 && address.length <= 34;\n }\n return false;\n }\n\n /**\n * Get Bitcoin address (native segwit bc1q...)\n */\n async getBitcoinAddress(): Promise<string> {\n const account = await this.getAccount('bitcoin');\n return account.address;\n }\n\n /**\n * Pay Lightning invoice via Spark network\n * Uses WDK WalletManagerSpark (m/44'/998')\n * @param invoice - Lightning invoice string (lnbc...)\n */\n async sendLightning(invoice: string): Promise<TxResult> {\n // Validate Lightning invoice format\n if (!this.isValidLightningInvoice(invoice)) {\n throw new Error('Invalid Lightning invoice format. Expected lnbc... or lntb...');\n }\n\n // Decode invoice to get amount and destination\n const invoiceDetails = this.decodeLightningInvoice(invoice);\n\n // Use WDK WalletManagerSpark for payment\n // const sparkManager = new WalletManagerSpark({ seed: this.seed, feeFree: true });\n // const payment = await sparkManager.payInvoice(invoice);\n\n return {\n hash: '', // Will be payment hash from Spark\n network: 'spark',\n status: 'pending',\n metadata: {\n invoice,\n amount: invoiceDetails.amount,\n destination: invoiceDetails.destination,\n },\n };\n }\n\n /**\n * Create Lightning invoice via Spark\n * @param amount - Amount in millisatoshis\n * @param memo - Optional payment memo\n * @returns Lightning invoice string (lnbc...)\n */\n async createLightningInvoice(amount: bigint, memo?: string): Promise<string> {\n if (amount <= 0) {\n throw new Error('Invoice amount must be greater than 0');\n }\n\n // Use WDK WalletManagerSpark to create invoice\n // const sparkManager = new WalletManagerSpark({ seed: this.seed, feeFree: true });\n // const invoice = await sparkManager.createInvoice(amount, memo);\n\n // Placeholder - actual implementation uses Spark\n const isTestnet = this.config.network === 'testnet';\n const prefix = isTestnet ? 'lntb' : 'lnbc';\n\n // This is a placeholder - real invoice comes from Spark\n return `${prefix}${amount}m1...`;\n }\n\n /**\n * Validate Lightning invoice format\n */\n private isValidLightningInvoice(invoice: string): boolean {\n const lowerInvoice = invoice.toLowerCase();\n return (\n lowerInvoice.startsWith('lnbc') || // Mainnet\n lowerInvoice.startsWith('lntb') || // Testnet\n lowerInvoice.startsWith('lnbcrt') // Regtest\n );\n }\n\n /**\n * Decode Lightning invoice (basic parsing)\n */\n private decodeLightningInvoice(invoice: string): {\n amount: bigint;\n destination: string;\n expiry: number;\n } {\n // Real implementation would use bolt11 library\n // This is a placeholder structure\n return {\n amount: BigInt(0),\n destination: '',\n expiry: 3600,\n };\n }\n\n /**\n * Get Lightning (Spark) balance\n */\n async getLightningBalance(): Promise<{\n available: bigint;\n pending: bigint;\n }> {\n // Use WDK WalletManagerSpark\n // const sparkManager = new WalletManagerSpark({ seed: this.seed });\n // return sparkManager.getBalance();\n\n return {\n available: BigInt(0),\n pending: BigInt(0),\n };\n }\n\n /**\n * Get configuration\n */\n getConfig(): ZubariWalletConfig {\n return { ...this.config };\n }\n\n /**\n * Check if wallet is initialized\n */\n isInitialized(): boolean {\n return this.initialized;\n }\n\n /**\n * Get contract addresses for current network\n */\n getContractAddresses() {\n return getContractAddresses(this.config.network);\n }\n}\n","/**\n * KeyManager - Secure key storage and encryption\n *\n * Handles seed phrase encryption using AES-256-GCM\n * with PBKDF2 key derivation from user password.\n */\nexport class KeyManager {\n private static readonly ALGORITHM = 'AES-GCM';\n private static readonly KEY_LENGTH = 256;\n private static readonly IV_LENGTH = 12;\n private static readonly SALT_LENGTH = 16;\n private static readonly PBKDF2_ITERATIONS = 100000;\n\n /**\n * Encrypt a seed phrase with a password\n */\n static async encryptSeed(seed: string, password: string): Promise<string> {\n const encoder = new TextEncoder();\n const seedData = encoder.encode(seed);\n\n // Generate random salt and IV\n const salt = crypto.getRandomValues(new Uint8Array(this.SALT_LENGTH));\n const iv = crypto.getRandomValues(new Uint8Array(this.IV_LENGTH));\n\n // Derive key from password\n const key = await this.deriveKey(password, salt);\n\n // Encrypt\n const encrypted = await crypto.subtle.encrypt(\n { name: this.ALGORITHM, iv },\n key,\n seedData\n );\n\n // Combine salt + iv + encrypted data\n const combined = new Uint8Array(salt.length + iv.length + encrypted.byteLength);\n combined.set(salt, 0);\n combined.set(iv, salt.length);\n combined.set(new Uint8Array(encrypted), salt.length + iv.length);\n\n // Return as base64\n return btoa(String.fromCharCode(...combined));\n }\n\n /**\n * Decrypt a seed phrase with a password\n */\n static async decryptSeed(encryptedData: string, password: string): Promise<string> {\n // Decode from base64\n const combined = new Uint8Array(\n atob(encryptedData)\n .split('')\n .map(c => c.charCodeAt(0))\n );\n\n // Extract salt, iv, and encrypted data\n const salt = combined.slice(0, this.SALT_LENGTH);\n const iv = combined.slice(this.SALT_LENGTH, this.SALT_LENGTH + this.IV_LENGTH);\n const encrypted = combined.slice(this.SALT_LENGTH + this.IV_LENGTH);\n\n // Derive key from password\n const key = await this.deriveKey(password, salt);\n\n // Decrypt\n const decrypted = await crypto.subtle.decrypt(\n { name: this.ALGORITHM, iv },\n key,\n encrypted\n );\n\n const decoder = new TextDecoder();\n return decoder.decode(decrypted);\n }\n\n /**\n * Derive encryption key from password using PBKDF2\n */\n private static async deriveKey(\n password: string,\n salt: Uint8Array\n ): Promise<CryptoKey> {\n const encoder = new TextEncoder();\n const passwordData = encoder.encode(password);\n\n // Import password as key material\n const keyMaterial = await crypto.subtle.importKey(\n 'raw',\n passwordData,\n 'PBKDF2',\n false,\n ['deriveKey']\n );\n\n // Derive AES key\n return crypto.subtle.deriveKey(\n {\n name: 'PBKDF2',\n salt: salt.buffer.slice(salt.byteOffset, salt.byteOffset + salt.byteLength) as ArrayBuffer,\n iterations: this.PBKDF2_ITERATIONS,\n hash: 'SHA-256',\n },\n keyMaterial,\n { name: this.ALGORITHM, length: this.KEY_LENGTH },\n false,\n ['encrypt', 'decrypt']\n );\n }\n\n /**\n * Validate a BIP-39 seed phrase (basic validation)\n */\n static validateSeedPhrase(seed: string): boolean {\n const words = seed.trim().split(/\\s+/);\n // BIP-39 supports 12, 15, 18, 21, or 24 words\n const validWordCounts = [12, 15, 18, 21, 24];\n return validWordCounts.includes(words.length);\n }\n\n /**\n * Generate a random encryption key (for backup purposes)\n */\n static generateBackupKey(): string {\n const bytes = crypto.getRandomValues(new Uint8Array(32));\n return Array.from(bytes)\n .map(b => b.toString(16).padStart(2, '0'))\n .join('');\n }\n}\n","/**\n * Secure Storage Interface\n * Platform-agnostic interface for secure key storage\n */\nexport interface SecureStorageAdapter {\n /**\n * Store a value securely\n */\n setItem(key: string, value: string): Promise<void>;\n\n /**\n * Retrieve a value\n */\n getItem(key: string): Promise<string | null>;\n\n /**\n * Remove a value\n */\n removeItem(key: string): Promise<void>;\n\n /**\n * Check if a key exists\n */\n hasItem(key: string): Promise<boolean>;\n\n /**\n * Clear all stored values\n */\n clear(): Promise<void>;\n}\n\n/**\n * iOS Keychain Storage Adapter\n * Uses react-native-keychain for iOS Keychain access\n */\nexport class KeychainStorageAdapter implements SecureStorageAdapter {\n private serviceName: string;\n\n constructor(serviceName: string = 'com.zubari.wallet') {\n this.serviceName = serviceName;\n }\n\n async setItem(key: string, value: string): Promise<void> {\n // In React Native, use react-native-keychain\n // const Keychain = require('react-native-keychain');\n // await Keychain.setGenericPassword(key, value, { service: this.serviceName });\n\n // Placeholder for native implementation\n if (typeof global !== 'undefined' && (global as any).KeychainModule) {\n await (global as any).KeychainModule.setItem(this.serviceName, key, value);\n } else {\n throw new Error('Keychain not available on this platform');\n }\n }\n\n async getItem(key: string): Promise<string | null> {\n if (typeof global !== 'undefined' && (global as any).KeychainModule) {\n return (global as any).KeychainModule.getItem(this.serviceName, key);\n }\n throw new Error('Keychain not available on this platform');\n }\n\n async removeItem(key: string): Promise<void> {\n if (typeof global !== 'undefined' && (global as any).KeychainModule) {\n await (global as any).KeychainModule.removeItem(this.serviceName, key);\n } else {\n throw new Error('Keychain not available on this platform');\n }\n }\n\n async hasItem(key: string): Promise<boolean> {\n const value = await this.getItem(key);\n return value !== null;\n }\n\n async clear(): Promise<void> {\n if (typeof global !== 'undefined' && (global as any).KeychainModule) {\n await (global as any).KeychainModule.clear(this.serviceName);\n } else {\n throw new Error('Keychain not available on this platform');\n }\n }\n}\n\n/**\n * Android Keystore Storage Adapter\n * Uses Android Keystore for secure storage\n */\nexport class KeystoreStorageAdapter implements SecureStorageAdapter {\n private alias: string;\n\n constructor(alias: string = 'zubari_wallet_keys') {\n this.alias = alias;\n }\n\n async setItem(key: string, value: string): Promise<void> {\n // In React Native, use react-native-encrypted-storage or similar\n // const EncryptedStorage = require('react-native-encrypted-storage');\n // await EncryptedStorage.setItem(key, value);\n\n if (typeof global !== 'undefined' && (global as any).KeystoreModule) {\n await (global as any).KeystoreModule.setItem(this.alias, key, value);\n } else {\n throw new Error('Keystore not available on this platform');\n }\n }\n\n async getItem(key: string): Promise<string | null> {\n if (typeof global !== 'undefined' && (global as any).KeystoreModule) {\n return (global as any).KeystoreModule.getItem(this.alias, key);\n }\n throw new Error('Keystore not available on this platform');\n }\n\n async removeItem(key: string): Promise<void> {\n if (typeof global !== 'undefined' && (global as any).KeystoreModule) {\n await (global as any).KeystoreModule.removeItem(this.alias, key);\n } else {\n throw new Error('Keystore not available on this platform');\n }\n }\n\n async hasItem(key: string): Promise<boolean> {\n const value = await this.getItem(key);\n return value !== null;\n }\n\n async clear(): Promise<void> {\n if (typeof global !== 'undefined' && (global as any).KeystoreModule) {\n await (global as any).KeystoreModule.clear(this.alias);\n } else {\n throw new Error('Keystore not available on this platform');\n }\n }\n}\n\n/**\n * Web Encrypted LocalStorage Adapter\n * Uses Web Crypto API for encryption with localStorage\n */\nexport class WebEncryptedStorageAdapter implements SecureStorageAdapter {\n private encryptionKey: CryptoKey | null = null;\n private storagePrefix: string;\n\n constructor(storagePrefix: string = 'zubari_') {\n this.storagePrefix = storagePrefix;\n }\n\n /**\n * Initialize with a password-derived key\n */\n async initialize(password: string): Promise<void> {\n const encoder = new TextEncoder();\n const salt = this.getSalt();\n\n const keyMaterial = await crypto.subtle.importKey(\n 'raw',\n encoder.encode(password),\n 'PBKDF2',\n false,\n ['deriveKey']\n );\n\n this.encryptionKey = await crypto.subtle.deriveKey(\n {\n name: 'PBKDF2',\n salt: salt.buffer as ArrayBuffer,\n iterations: 100000,\n hash: 'SHA-256',\n },\n keyMaterial,\n { name: 'AES-GCM', length: 256 },\n false,\n ['encrypt', 'decrypt']\n );\n }\n\n private getSalt(): Uint8Array {\n const saltKey = `${this.storagePrefix}salt`;\n let saltHex = localStorage.getItem(saltKey);\n\n if (!saltHex) {\n const salt = crypto.getRandomValues(new Uint8Array(16));\n saltHex = Array.from(salt)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n localStorage.setItem(saltKey, saltHex);\n }\n\n return new Uint8Array(\n saltHex.match(/.{1,2}/g)!.map((byte) => parseInt(byte, 16))\n );\n }\n\n async setItem(key: string, value: string): Promise<void> {\n if (!this.encryptionKey) {\n throw new Error('Storage not initialized. Call initialize() first.');\n }\n\n const encoder = new TextEncoder();\n const iv = crypto.getRandomValues(new Uint8Array(12));\n\n const encrypted = await crypto.subtle.encrypt(\n { name: 'AES-GCM', iv },\n this.encryptionKey,\n encoder.encode(value)\n );\n\n const combined = new Uint8Array(iv.length + encrypted.byteLength);\n combined.set(iv);\n combined.set(new Uint8Array(encrypted), iv.length);\n\n const base64 = btoa(String.fromCharCode(...combined));\n localStorage.setItem(`${this.storagePrefix}${key}`, base64);\n }\n\n async getItem(key: string): Promise<string | null> {\n if (!this.encryptionKey) {\n throw new Error('Storage not initialized. Call initialize() first.');\n }\n\n const base64 = localStorage.getItem(`${this.storagePrefix}${key}`);\n if (!base64) return null;\n\n try {\n const combined = new Uint8Array(\n atob(base64)\n .split('')\n .map((c) => c.charCodeAt(0))\n );\n\n const iv = combined.slice(0, 12);\n const encrypted = combined.slice(12);\n\n const decrypted = await crypto.subtle.decrypt(\n { name: 'AES-GCM', iv },\n this.encryptionKey,\n encrypted\n );\n\n const decoder = new TextDecoder();\n return decoder.decode(decrypted);\n } catch {\n return null;\n }\n }\n\n async removeItem(key: string): Promise<void> {\n localStorage.removeItem(`${this.storagePrefix}${key}`);\n }\n\n async hasItem(key: string): Promise<boolean> {\n return localStorage.getItem(`${this.storagePrefix}${key}`) !== null;\n }\n\n async clear(): Promise<void> {\n const keysToRemove: string[] = [];\n\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith(this.storagePrefix)) {\n keysToRemove.push(key);\n }\n }\n\n keysToRemove.forEach((key) => localStorage.removeItem(key));\n }\n}\n\n/**\n * In-Memory Storage Adapter (for testing)\n */\nexport class MemoryStorageAdapter implements SecureStorageAdapter {\n private storage: Map<string, string> = new Map();\n\n async setItem(key: string, value: string): Promise<void> {\n this.storage.set(key, value);\n }\n\n async getItem(key: string): Promise<string | null> {\n return this.storage.get(key) || null;\n }\n\n async removeItem(key: string): Promise<void> {\n this.storage.delete(key);\n }\n\n async hasItem(key: string): Promise<boolean> {\n return this.storage.has(key);\n }\n\n async clear(): Promise<void> {\n this.storage.clear();\n }\n}\n\n/**\n * Secure Storage Factory\n * Creates appropriate storage adapter based on platform\n */\nexport function createSecureStorage(): SecureStorageAdapter {\n // Check for React Native\n if (\n typeof global !== 'undefined' &&\n (global as any).nativeModuleProxy !== undefined\n ) {\n // Check platform\n const Platform = (global as any).Platform;\n if (Platform?.OS === 'ios') {\n return new KeychainStorageAdapter();\n } else if (Platform?.OS === 'android') {\n return new KeystoreStorageAdapter();\n }\n }\n\n // Check for browser environment\n if (typeof window !== 'undefined' && typeof localStorage !== 'undefined') {\n return new WebEncryptedStorageAdapter();\n }\n\n // Fallback to memory storage (for Node.js/testing)\n return new MemoryStorageAdapter();\n}\n","/**\n * WDK API Client\n *\n * Client for calling the backend WDK endpoints to derive addresses\n * using Tether WDK (which runs server-side in Node.js).\n */\n\nimport type { NetworkType } from '../types';\n\nexport interface WdkApiConfig {\n baseUrl: string;\n timeout?: number;\n}\n\nexport interface DeriveAddressResponse {\n success: boolean;\n address?: string;\n chain?: string;\n path?: string;\n network?: string;\n error?: string;\n}\n\nexport interface DeriveAllAddressesResponse {\n success: boolean;\n addresses?: {\n ethereum: string | null;\n bitcoin: string | null;\n ton: string | null;\n tron: string | null;\n solana: string | null;\n spark: string | null;\n };\n network?: string;\n error?: string;\n}\n\nexport interface ValidateSeedResponse {\n success: boolean;\n isValid?: boolean;\n wordCount?: number;\n error?: string;\n}\n\nexport interface GenerateSeedResponse {\n success: boolean;\n seed?: string;\n wordCount?: number;\n error?: string;\n}\n\n/**\n * WDK API Client for server-side Tether WDK integration\n */\nexport class WdkApiClient {\n private config: Required<WdkApiConfig>;\n\n constructor(config: WdkApiConfig) {\n this.config = {\n baseUrl: config.baseUrl,\n timeout: config.timeout || 30000,\n };\n }\n\n /**\n * Generate a new BIP-39 seed phrase using Tether WDK\n */\n async generateSeed(): Promise<GenerateSeedResponse> {\n try {\n const response = await fetch(`${this.config.baseUrl}/api/wallets/wdk/generate-seed`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n return await response.json();\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to generate seed',\n };\n }\n }\n\n /**\n * Validate a BIP-39 seed phrase\n */\n async validateSeed(seed: string): Promise<ValidateSeedResponse> {\n try {\n const response = await fetch(`${this.config.baseUrl}/api/wallets/wdk/validate-seed`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ seed }),\n });\n\n return await response.json();\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to validate seed',\n };\n }\n }\n\n /**\n * Derive address for a specific chain using Tether WDK\n */\n async deriveAddress(\n seed: string,\n chain: NetworkType,\n network: 'mainnet' | 'testnet' = 'testnet'\n ): Promise<DeriveAddressResponse> {\n try {\n const response = await fetch(`${this.config.baseUrl}/api/wallets/wdk/derive-address`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ seed, chain, network }),\n });\n\n return await response.json();\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to derive address',\n };\n }\n }\n\n /**\n * Derive addresses for all chains using Tether WDK\n */\n async deriveAllAddresses(\n seed: string,\n network: 'mainnet' | 'testnet' = 'testnet'\n ): Promise<DeriveAllAddressesResponse> {\n try {\n const response = await fetch(`${this.config.baseUrl}/api/wallets/wdk/derive-all`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ seed, network }),\n });\n\n return await response.json();\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to derive addresses',\n };\n }\n }\n}\n\n// Default API URL (can be overridden)\nconst DEFAULT_API_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:3001';\n\n// Singleton instance\nlet wdkApiClient: WdkApiClient | null = null;\n\n/**\n * Get or create the WDK API client instance\n */\nexport function getWdkApiClient(baseUrl?: string): WdkApiClient {\n if (!wdkApiClient || (baseUrl && wdkApiClient['config'].baseUrl !== baseUrl)) {\n wdkApiClient = new WdkApiClient({\n baseUrl: baseUrl || DEFAULT_API_URL,\n });\n }\n return wdkApiClient;\n}\n","/**\n * WDK Service for SDK\n *\n * Native integration with Tether WDK for multi-chain address derivation.\n * Uses individual wallet modules for each chain to derive cryptographically\n * valid addresses from a BIP-39 seed phrase.\n *\n * Supported chains: Ethereum, Bitcoin, TON, TRON, Solana, Spark (Lightning)\n *\n * @see https://docs.wallet.tether.io/\n */\n\n// Dynamic imports for ESM modules (WDK packages are ESM-only)\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WdkManager: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerBtc: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerEvm: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerSolana: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerTon: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerTron: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerSpark: any;\n\nlet wdkLoaded = false;\nlet wdkLoadError: Error | null = null;\n\n/**\n * Dynamic import helper that bypasses TypeScript's CommonJS transformation\n * TypeScript converts import() to require() in CommonJS, but WDK is ESM-only\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst dynamicImport = new Function('specifier', 'return import(specifier)') as (\n specifier: string\n) => Promise<any>;\n\n/**\n * Dynamically load WDK modules (they are ESM-only)\n */\nasync function loadWdkModules(): Promise<void> {\n if (wdkLoaded) return;\n if (wdkLoadError) throw wdkLoadError;\n\n try {\n const [wdk, btc, evm, solana, ton, tron, spark] = await Promise.all([\n dynamicImport('@tetherto/wdk'),\n dynamicImport('@tetherto/wdk-wallet-btc'),\n dynamicImport('@tetherto/wdk-wallet-evm'),\n dynamicImport('@tetherto/wdk-wallet-solana'),\n dynamicImport('@tetherto/wdk-wallet-ton'),\n dynamicImport('@tetherto/wdk-wallet-tron'),\n dynamicImport('@tetherto/wdk-wallet-spark'),\n ]);\n\n WdkManager = wdk.default;\n WalletManagerBtc = btc.default;\n WalletManagerEvm = evm.default;\n WalletManagerSolana = solana.default;\n WalletManagerTon = ton.default;\n WalletManagerTron = tron.default;\n WalletManagerSpark = spark.default;\n wdkLoaded = true;\n } catch (error) {\n wdkLoadError = error instanceof Error ? error : new Error('Failed to load WDK modules');\n console.error('Failed to load WDK modules:', error);\n throw wdkLoadError;\n }\n}\n\nexport type SupportedChain = 'ethereum' | 'bitcoin' | 'ton' | 'tron' | 'solana' | 'spark';\n\nexport interface ChainAddress {\n chain: SupportedChain;\n address: string;\n path: string;\n}\n\nexport interface MultiChainAddresses {\n ethereum: string | null;\n bitcoin: string | null;\n ton: string | null;\n tron: string | null;\n solana: string | null;\n spark: string | null;\n}\n\nexport interface WdkServiceConfig {\n network: 'mainnet' | 'testnet';\n rpcUrls?: {\n ethereum?: string;\n bitcoin?: string;\n solana?: string;\n ton?: string;\n tron?: string;\n };\n}\n\n// BIP-44 derivation paths\nconst DERIVATION_PATHS: Record<SupportedChain, string> = {\n bitcoin: \"m/84'/0'/0'/0/0\", // BIP-84 for native SegWit\n ethereum: \"m/44'/60'/0'/0/0\",\n ton: \"m/44'/607'/0'\", // Updated for v1.0.0-beta.6+\n tron: \"m/44'/195'/0'/0/0\",\n solana: \"m/44'/501'/0'/0'\", // Updated for v1.0.0-beta.4+\n spark: \"m/44'/998'/0'/0/0\",\n};\n\n// Default RPC URLs\nconst DEFAULT_RPC_URLS = {\n mainnet: {\n ethereum: 'https://eth.llamarpc.com',\n solana: 'https://api.mainnet-beta.solana.com',\n ton: 'https://toncenter.com/api/v2/jsonRPC',\n tron: 'https://api.trongrid.io',\n },\n testnet: {\n ethereum: 'https://ethereum-sepolia-rpc.publicnode.com',\n solana: 'https://api.devnet.solana.com',\n ton: 'https://testnet.toncenter.com/api/v2/jsonRPC',\n tron: 'https://api.shasta.trongrid.io',\n },\n};\n\n/**\n * WDK Service for native multi-chain address derivation\n * Uses Tether WDK wallet modules directly without needing a backend API\n */\nexport class WdkService {\n private seed: string | null = null;\n private config: WdkServiceConfig;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private wallets: Partial<Record<SupportedChain, any>> = {};\n\n constructor(config: Partial<WdkServiceConfig> = {}) {\n this.config = {\n network: config.network || 'testnet',\n rpcUrls: config.rpcUrls,\n };\n }\n\n /**\n * Check if WDK modules are loaded\n */\n static isLoaded(): boolean {\n return wdkLoaded;\n }\n\n /**\n * Ensure WDK modules are loaded\n */\n private async ensureLoaded(): Promise<void> {\n await loadWdkModules();\n }\n\n /**\n * Load WDK modules (call this before using sync methods)\n */\n async loadModules(): Promise<void> {\n await loadWdkModules();\n }\n\n /**\n * Generate a random BIP-39 seed phrase (12 words)\n */\n async generateSeedPhrase(): Promise<string> {\n await this.ensureLoaded();\n return WdkManager.getRandomSeedPhrase();\n }\n\n /**\n * Validate a BIP-39 seed phrase\n */\n async isValidSeed(seed: string): Promise<boolean> {\n await this.ensureLoaded();\n return WdkManager.isValidSeed(seed);\n }\n\n /**\n * Validate seed phrase (sync version - basic check)\n */\n isValidSeedSync(seed: string): boolean {\n const words = seed.trim().split(/\\s+/);\n return words.length === 12 || words.length === 24;\n }\n\n /**\n * Initialize the service with a seed phrase\n */\n async initialize(seed: string): Promise<void> {\n await this.ensureLoaded();\n\n if (!WdkManager.isValidSeed(seed)) {\n throw new Error('Invalid seed phrase');\n }\n\n this.seed = seed;\n this.wallets = {};\n }\n\n /**\n * Get RPC URL for a chain\n */\n private getRpcUrl(chain: SupportedChain): string {\n const networkUrls = DEFAULT_RPC_URLS[this.config.network];\n\n if (this.config.rpcUrls?.[chain as keyof typeof this.config.rpcUrls]) {\n return this.config.rpcUrls[chain as keyof typeof this.config.rpcUrls]!;\n }\n\n return networkUrls[chain as keyof typeof networkUrls] || '';\n }\n\n /**\n * Get or create wallet instance for a specific chain\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private async getWallet(chain: SupportedChain): Promise<any> {\n if (!this.seed) {\n throw new Error('WDK service not initialized. Call initialize() first.');\n }\n\n // Return cached wallet if exists\n if (this.wallets[chain]) {\n return this.wallets[chain];\n }\n\n const isTestnet = this.config.network === 'testnet';\n\n try {\n switch (chain) {\n case 'ethereum': {\n const rpcUrl = this.getRpcUrl('ethereum');\n const wallet = new WalletManagerEvm(this.seed, { provider: rpcUrl });\n this.wallets[chain] = wallet;\n return wallet;\n }\n\n case 'bitcoin': {\n const wallet = new WalletManagerBtc(this.seed, {\n network: isTestnet ? 'testnet' : 'bitcoin',\n });\n this.wallets[chain] = wallet;\n return wallet;\n }\n\n case 'solana': {\n const rpcUrl = this.getRpcUrl('solana');\n const wallet = new WalletManagerSolana(this.seed, {\n rpcUrl,\n });\n this.wallets[chain] = wallet;\n return wallet;\n }\n\n case 'ton': {\n const url = this.getRpcUrl('ton');\n const wallet = new WalletManagerTon(this.seed, {\n tonClient: { url },\n });\n this.wallets[chain] = wallet;\n return wallet;\n }\n\n case 'tron': {\n const fullHost = this.getRpcUrl('tron');\n const wallet = new WalletManagerTron(this.seed, {\n provider: fullHost,\n });\n this.wallets[chain] = wallet;\n return wallet;\n }\n\n case 'spark': {\n const wallet = new WalletManagerSpark(this.seed, {\n network: isTestnet ? 'TESTNET' : 'MAINNET',\n });\n this.wallets[chain] = wallet;\n return wallet;\n }\n\n default:\n throw new Error(`Unsupported chain: ${chain}`);\n }\n } catch (error) {\n console.error(`Failed to initialize ${chain} wallet:`, error);\n throw error;\n }\n }\n\n /**\n * Derive address for a specific chain\n */\n async deriveAddress(chain: SupportedChain): Promise<ChainAddress> {\n const path = DERIVATION_PATHS[chain];\n\n try {\n const wallet = await this.getWallet(chain);\n const account = await wallet.getAccount(0);\n const address = await account.getAddress();\n\n return {\n chain,\n address,\n path,\n };\n } catch (error) {\n console.error(`Error deriving ${chain} address:`, error);\n throw error;\n }\n }\n\n /**\n * Derive addresses for all supported chains\n */\n async deriveAllAddresses(): Promise<MultiChainAddresses> {\n const chains: SupportedChain[] = ['ethereum', 'bitcoin', 'ton', 'tron', 'solana', 'spark'];\n const addresses: MultiChainAddresses = {\n ethereum: null,\n bitcoin: null,\n ton: null,\n tron: null,\n solana: null,\n spark: null,\n };\n\n // Derive all addresses in parallel for better performance\n const results = await Promise.allSettled(\n chains.map(async (chain) => {\n const result = await this.deriveAddress(chain);\n return { chain, address: result.address };\n })\n );\n\n for (const result of results) {\n if (result.status === 'fulfilled') {\n addresses[result.value.chain] = result.value.address;\n } else {\n console.error('Failed to derive address:', result.reason);\n }\n }\n\n return addresses;\n }\n\n /**\n * Derive addresses for specific chains only\n */\n async deriveAddressesForChains(chains: SupportedChain[]): Promise<Partial<MultiChainAddresses>> {\n const addresses: Partial<MultiChainAddresses> = {};\n\n const results = await Promise.allSettled(\n chains.map(async (chain) => {\n const result = await this.deriveAddress(chain);\n return { chain, address: result.address };\n })\n );\n\n for (const result of results) {\n if (result.status === 'fulfilled') {\n addresses[result.value.chain] = result.value.address;\n }\n }\n\n return addresses;\n }\n\n /**\n * Get fee rates for a specific chain\n */\n async getFeeRates(\n chain: SupportedChain\n ): Promise<{ slow: string; medium: string; fast: string }> {\n if (!this.seed) {\n throw new Error('WDK service not initialized. Call initialize() first.');\n }\n\n try {\n const wallet = await this.getWallet(chain);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const feeRates: any = await wallet.getFeeRates();\n return {\n slow: (feeRates.slow || feeRates.low || '0').toString(),\n medium: (feeRates.medium || feeRates.normal || feeRates.standard || '0').toString(),\n fast: (feeRates.fast || feeRates.high || '0').toString(),\n };\n } catch (error) {\n console.error(`Error fetching fee rates for ${chain}:`, error);\n throw error;\n }\n }\n\n /**\n * Get the current network configuration\n */\n getNetwork(): 'mainnet' | 'testnet' {\n return this.config.network;\n }\n\n /**\n * Check if service is initialized\n */\n isInitialized(): boolean {\n return this.seed !== null;\n }\n\n /**\n * Clean up and dispose of wallet instances\n */\n dispose(): void {\n for (const wallet of Object.values(this.wallets)) {\n if (wallet && typeof wallet.dispose === 'function') {\n try {\n wallet.dispose();\n } catch {\n // Ignore dispose errors\n }\n }\n }\n this.wallets = {};\n this.seed = null;\n }\n}\n\n// Singleton instance\nlet wdkServiceInstance: WdkService | null = null;\n\n/**\n * Get or create the WDK service singleton\n */\nexport function getWdkService(config?: Partial<WdkServiceConfig>): WdkService {\n if (!wdkServiceInstance || (config && config.network !== wdkServiceInstance.getNetwork())) {\n wdkServiceInstance = new WdkService(config);\n }\n return wdkServiceInstance;\n}\n\n/**\n * Create a new WDK service instance (non-singleton)\n */\nexport function createWdkService(config?: Partial<WdkServiceConfig>): WdkService {\n return new WdkService(config);\n}\n","/**\n * Browser-Compatible Address Derivation\n *\n * This module provides multi-chain address derivation that works in browser environments.\n * It uses the @scure libraries which are pure JS and don't require Node.js polyfills.\n *\n * Supported chains:\n * - Ethereum: ethers.js (BIP-44)\n * - Bitcoin: @scure/bip32 + @scure/base (BIP-84 native SegWit)\n * - Solana: ed25519-hd-key + tweetnacl (SLIP-0010)\n * - TON: ed25519 derivation with TON address format\n * - TRON: secp256k1 + base58check\n * - Spark: Bitcoin-based with custom derivation\n */\n\nimport { HDNodeWallet } from 'ethers';\nimport { mnemonicToSeedSync, validateMnemonic, generateMnemonic } from '@scure/bip39';\nimport { wordlist } from '@scure/bip39/wordlists/english';\nimport { HDKey } from '@scure/bip32';\nimport { bech32 } from '@scure/base';\nimport { sha256 } from '@noble/hashes/sha256';\nimport { ripemd160 } from '@noble/hashes/ripemd160';\nimport type { NetworkType } from '../types';\n\nexport interface ChainAddress {\n chain: NetworkType;\n address: string;\n path: string;\n}\n\nexport interface BrowserMultiChainAddresses {\n ethereum: string | null;\n bitcoin: string | null;\n ton: string | null;\n tron: string | null;\n solana: string | null;\n spark: string | null;\n}\n\n// BIP-44/84 derivation paths\nconst DERIVATION_PATHS = {\n ethereum: \"m/44'/60'/0'/0/0\",\n bitcoin_mainnet: \"m/84'/0'/0'/0/0\",\n bitcoin_testnet: \"m/84'/1'/0'/0/0\",\n ton: \"m/44'/607'/0'/0'/0'\",\n tron: \"m/44'/195'/0'/0/0\",\n solana: \"m/44'/501'/0'/0'\",\n spark: \"m/44'/998'/0'/0/0\",\n};\n\n/**\n * Derive Ethereum address from seed phrase\n */\nexport function deriveEthereumAddress(seed: string): string {\n const hdNode = HDNodeWallet.fromPhrase(seed, undefined, DERIVATION_PATHS.ethereum);\n return hdNode.address;\n}\n\n/**\n * Derive Bitcoin address from seed phrase (BIP-84 native SegWit)\n * Uses @scure libraries for browser compatibility\n */\nexport function deriveBitcoinAddress(\n seed: string,\n network: 'mainnet' | 'testnet' = 'testnet'\n): string {\n try {\n // Convert mnemonic to seed using @scure/bip39\n const seedBytes = mnemonicToSeedSync(seed);\n\n // Derive HD key using @scure/bip32\n const hdKey = HDKey.fromMasterSeed(seedBytes);\n const path = network === 'testnet' ? DERIVATION_PATHS.bitcoin_testnet : DERIVATION_PATHS.bitcoin_mainnet;\n const child = hdKey.derive(path);\n\n if (!child.publicKey) {\n throw new Error('Failed to derive public key');\n }\n\n // Create P2WPKH address (native SegWit)\n // 1. Hash160 = RIPEMD160(SHA256(publicKey))\n const pubKeyHash = ripemd160(sha256(child.publicKey));\n\n // 2. Create witness program: version (0x00) + hash160\n // For bech32, we encode: witness version (0) + pubKeyHash as 5-bit words\n const witnessVersion = 0;\n const words = bech32.toWords(pubKeyHash);\n words.unshift(witnessVersion); // Prepend witness version\n\n // 3. Encode with bech32\n const hrp = network === 'testnet' ? 'tb' : 'bc';\n const address = bech32.encode(hrp, words);\n\n return address;\n } catch (error) {\n console.error('Bitcoin address derivation failed:', error);\n throw error;\n }\n}\n\n/**\n * Derive Solana address from seed phrase using SLIP-0010 (ed25519)\n */\nexport async function deriveSolanaAddress(seed: string): Promise<string> {\n try {\n const [ed25519, nacl, bs58] = await Promise.all([\n import('ed25519-hd-key'),\n import('tweetnacl'),\n import('bs58'),\n ]);\n\n // Use @scure/bip39 for seed generation (browser compatible)\n const seedBytes = mnemonicToSeedSync(seed);\n\n // SLIP-0010 derivation for ed25519\n const derived = ed25519.derivePath(DERIVATION_PATHS.solana, Buffer.from(seedBytes).toString('hex'));\n\n // Create keypair from derived seed\n const keypair = nacl.sign.keyPair.fromSeed(new Uint8Array(derived.key));\n\n // Solana address is the base58-encoded public key (32 bytes)\n return bs58.encode(keypair.publicKey);\n } catch (error) {\n console.error('Solana address derivation failed:', error);\n throw error;\n }\n}\n\n/**\n * Derive TON address from seed phrase\n * Uses proper BIP-44 derivation path m/44'/607'/0'/0'/0'\n */\nexport async function deriveTonAddress(seed: string): Promise<string> {\n try {\n const [ed25519, nacl] = await Promise.all([\n import('ed25519-hd-key'),\n import('tweetnacl'),\n ]);\n\n // Use @scure/bip39 for seed generation (browser compatible)\n const seedBytes = mnemonicToSeedSync(seed);\n\n // Use SLIP-0010 derivation for ed25519 with TON's coin type\n const derived = ed25519.derivePath(DERIVATION_PATHS.ton, Buffer.from(seedBytes).toString('hex'));\n\n // Create keypair\n const keypair = nacl.sign.keyPair.fromSeed(new Uint8Array(derived.key));\n\n // TON address is derived from public key using workchain + hash\n // Standard TON wallet v4r2 uses the public key to derive address\n const publicKey = keypair.publicKey;\n\n // Create TON bounceable address (EQ prefix for workchain 0)\n // Format: 1 byte flags + 1 byte workchain + 32 bytes hash + 2 bytes CRC16\n const workchain = 0;\n const flags = 0x11; // bounceable\n\n // For raw address, we use SHA256 of public key using @noble/hashes\n const hash = sha256(publicKey);\n\n // Build address bytes: flags + workchain + hash\n const addressData = new Uint8Array(34);\n addressData[0] = flags;\n addressData[1] = workchain;\n addressData.set(hash, 2);\n\n // Calculate CRC16\n const crc = crc16(addressData);\n\n // Full address with CRC\n const fullAddress = new Uint8Array(36);\n fullAddress.set(addressData);\n fullAddress[34] = (crc >> 8) & 0xff;\n fullAddress[35] = crc & 0xff;\n\n // Convert to base64url (TON standard format)\n const base64 = btoa(String.fromCharCode(...fullAddress))\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_');\n\n return base64;\n } catch (error) {\n console.error('TON address derivation failed:', error);\n throw error;\n }\n}\n\n/**\n * CRC16-CCITT for TON addresses\n */\nfunction crc16(data: Uint8Array): number {\n let crc = 0;\n for (const byte of data) {\n crc ^= byte << 8;\n for (let i = 0; i < 8; i++) {\n crc = (crc & 0x8000) ? ((crc << 1) ^ 0x1021) : (crc << 1);\n crc &= 0xffff;\n }\n }\n return crc;\n}\n\n/**\n * Derive TRON address from seed phrase\n * TRON uses secp256k1 like Ethereum but with base58check encoding\n */\nexport async function deriveTronAddress(seed: string): Promise<string> {\n try {\n const bs58check = await import('bs58check');\n\n // Derive using TRON's BIP-44 path\n const hdNode = HDNodeWallet.fromPhrase(seed, undefined, DERIVATION_PATHS.tron);\n\n // Get the Ethereum-style address (last 20 bytes of keccak256 of public key)\n // TRON uses same derivation but different encoding\n const ethAddressHex = hdNode.address.slice(2).toLowerCase();\n\n // TRON address: 0x41 prefix + 20 bytes address\n const addressBytes = new Uint8Array(21);\n addressBytes[0] = 0x41; // TRON mainnet prefix\n\n // Copy ETH address bytes\n for (let i = 0; i < 20; i++) {\n addressBytes[i + 1] = parseInt(ethAddressHex.slice(i * 2, i * 2 + 2), 16);\n }\n\n // Base58check encode\n return bs58check.encode(Buffer.from(addressBytes));\n } catch (error) {\n console.error('TRON address derivation failed:', error);\n throw error;\n }\n}\n\n/**\n * Derive Spark address from seed phrase\n * Spark uses its own derivation path and bech32 format\n * Uses @scure libraries for browser compatibility\n */\nexport function deriveSparkAddress(\n seed: string,\n network: 'mainnet' | 'testnet' = 'testnet'\n): string {\n try {\n // Convert mnemonic to seed using @scure/bip39\n const seedBytes = mnemonicToSeedSync(seed);\n\n // Derive HD key using @scure/bip32\n const hdKey = HDKey.fromMasterSeed(seedBytes);\n const child = hdKey.derive(DERIVATION_PATHS.spark);\n\n if (!child.publicKey) {\n throw new Error('Failed to derive public key');\n }\n\n // Create P2WPKH-style address (same as Bitcoin but with Spark HRP)\n // 1. Hash160 = RIPEMD160(SHA256(publicKey))\n const pubKeyHash = ripemd160(sha256(child.publicKey));\n\n // 2. Create witness program with version 0\n const witnessVersion = 0;\n const words = bech32.toWords(pubKeyHash);\n words.unshift(witnessVersion);\n\n // 3. Encode with bech32 using Spark's HRP\n // Note: Spark uses 'sp' for mainnet and 'tsp' for testnet\n const hrp = network === 'testnet' ? 'tsp' : 'sp';\n const address = bech32.encode(hrp, words);\n\n return address;\n } catch (error) {\n console.error('Spark address derivation failed:', error);\n throw error;\n }\n}\n\n/**\n * Derive addresses for all supported chains\n */\nexport async function deriveAllAddresses(\n seed: string,\n network: 'mainnet' | 'testnet' = 'testnet'\n): Promise<BrowserMultiChainAddresses> {\n const addresses: BrowserMultiChainAddresses = {\n ethereum: null,\n bitcoin: null,\n ton: null,\n tron: null,\n solana: null,\n spark: null,\n };\n\n // Derive synchronous chains first (Ethereum, Bitcoin, Spark)\n try {\n addresses.ethereum = deriveEthereumAddress(seed);\n } catch (e) {\n console.error('ETH derivation failed:', e);\n }\n\n try {\n addresses.bitcoin = deriveBitcoinAddress(seed, network);\n } catch (e) {\n console.error('BTC derivation failed:', e);\n }\n\n try {\n addresses.spark = deriveSparkAddress(seed, network);\n } catch (e) {\n console.error('Spark derivation failed:', e);\n }\n\n // Derive async chains in parallel\n const [solResult, tonResult, tronResult] = await Promise.allSettled([\n deriveSolanaAddress(seed),\n deriveTonAddress(seed),\n deriveTronAddress(seed),\n ]);\n\n if (solResult.status === 'fulfilled') {\n addresses.solana = solResult.value;\n } else {\n console.error('SOL derivation failed:', solResult.reason);\n }\n\n if (tonResult.status === 'fulfilled') {\n addresses.ton = tonResult.value;\n } else {\n console.error('TON derivation failed:', tonResult.reason);\n }\n\n if (tronResult.status === 'fulfilled') {\n addresses.tron = tronResult.value;\n } else {\n console.error('TRON derivation failed:', tronResult.reason);\n }\n\n return addresses;\n}\n\n/**\n * Validate a BIP-39 seed phrase using @scure/bip39\n */\nexport function isValidSeed(seed: string): boolean {\n return validateMnemonic(seed, wordlist);\n}\n\n/**\n * Generate a random BIP-39 seed phrase using @scure/bip39\n */\nexport function generateSeedPhrase(): string {\n return generateMnemonic(wordlist);\n}\n","import { Wallet, HDNodeWallet, formatEther, parseEther } from 'ethers';\nimport { createPublicClient, http, formatEther as viemFormatEther } from 'viem';\nimport { sepolia, mainnet } from 'viem/chains';\nimport { KeyManager } from '../security';\nimport type { SecureStorageAdapter } from '../storage/SecureStorage';\nimport { createSecureStorage, WebEncryptedStorageAdapter } from '../storage/SecureStorage';\nimport { NETWORKS, DERIVATION_PATHS, getNetworkConfig, type NetworkConfig } from '../config/networks';\nimport type { NetworkType } from '../types';\nimport { getWdkApiClient } from '../services/WdkApiClient';\nimport { WdkService, type MultiChainAddresses as WdkMultiChainAddresses } from '../services/WdkService';\nimport * as BrowserDerivation from '../services/BrowserAddressDerivation';\n\n/**\n * Note on Tether WDK Integration:\n *\n * Tether WDK (@tetherto/wdk, @tetherto/wdk-wallet-btc, @tetherto/wdk-wallet-evm)\n * is designed for Node.js and React Native environments. The Bitcoin wallet module\n * uses Electrum client which requires Node.js 'net' module.\n *\n * For browser environments (Next.js, React web), we use ethers.js for address derivation\n * following proper BIP-44/BIP-84 paths. This provides deterministic addresses that are\n * compatible with the same seed used in WDK-based apps.\n *\n * For React Native or Node.js apps, you can integrate WDK directly:\n * @see https://docs.wallet.tether.io/\n */\n\n/**\n * Storage keys for wallet data\n */\nconst STORAGE_KEYS = {\n ENCRYPTED_SEED: 'encrypted_seed',\n ACTIVE_WALLET: 'active_wallet',\n} as const;\n\n/**\n * Supported chains for Zubari WDK Wallet\n */\nexport const SUPPORTED_CHAINS: NetworkType[] = ['ethereum', 'bitcoin', 'ton', 'tron', 'solana', 'spark'];\n\n/**\n * Chain balance information\n */\nexport interface ChainBalance {\n chain: NetworkType;\n symbol: string;\n balance: string;\n balanceUsd: number;\n address: string;\n decimals: number;\n icon?: string;\n}\n\n/**\n * Multi-chain addresses\n */\nexport interface MultiChainAddresses {\n ethereum: string;\n bitcoin: string;\n ton: string;\n tron: string;\n solana: string;\n spark: string;\n}\n\n/**\n * Wallet state interface\n */\nexport interface WalletState {\n isInitialized: boolean;\n isLocked: boolean;\n address: string | null;\n balance: string | null;\n // Multi-chain support\n addresses?: Partial<MultiChainAddresses>;\n balances?: ChainBalance[];\n selectedChain?: NetworkType;\n}\n\n/**\n * WalletManager Configuration\n */\nexport interface WalletManagerConfig {\n network?: 'mainnet' | 'testnet';\n rpcUrl?: string;\n storage?: SecureStorageAdapter;\n enabledChains?: NetworkType[];\n /** API URL for WDK backend (for multi-chain address derivation) */\n apiUrl?: string;\n}\n\n/**\n * WalletManager - Handles BIP-39 seed generation, address derivation, and secure storage\n *\n * This class provides:\n * - BIP-39 mnemonic generation (12 words)\n * - BIP-44 address derivation for multiple chains (Ethereum, Bitcoin, TON, TRON, Solana, Spark)\n * - Encrypted seed storage using AES-256-GCM\n * - Multi-chain balance fetching\n */\nexport class WalletManager {\n private readonly config: Required<Omit<WalletManagerConfig, 'enabledChains'>> & { enabledChains: NetworkType[] };\n private storage: SecureStorageAdapter;\n private currentSeed: string | null = null;\n private derivedAddress: string | null = null;\n private derivedAddresses: Partial<MultiChainAddresses> = {};\n private selectedChain: NetworkType = 'ethereum';\n private wdkService: WdkService;\n\n constructor(config: WalletManagerConfig = {}) {\n // Get the appropriate RPC URL from network config\n const isTestnet = config.network !== 'mainnet';\n const ethereumConfig = getNetworkConfig('ethereum', isTestnet);\n\n this.config = {\n network: config.network || 'testnet',\n rpcUrl: config.rpcUrl || ethereumConfig.rpcUrl,\n storage: config.storage || createSecureStorage(),\n enabledChains: config.enabledChains || SUPPORTED_CHAINS,\n apiUrl: config.apiUrl || process.env.NEXT_PUBLIC_API_URL || 'http://localhost:3001',\n };\n this.storage = this.config.storage;\n\n // Initialize native WDK service\n this.wdkService = new WdkService({\n network: this.config.network,\n });\n }\n\n /**\n * Generate a new BIP-39 seed phrase (12 words) using ethers.js\n * For native WDK generation, use generateSeedWithWdk() instead\n */\n static generateSeed(): string {\n const wallet = Wallet.createRandom();\n const mnemonic = wallet.mnemonic;\n if (!mnemonic) {\n throw new Error('Failed to generate mnemonic');\n }\n return mnemonic.phrase;\n }\n\n /**\n * Generate a new BIP-39 seed phrase using native Tether WDK\n * This is the recommended method for generating seed phrases\n */\n async generateSeedWithWdk(): Promise<string> {\n return await this.wdkService.generateSeedPhrase();\n }\n\n /**\n * Validate seed phrase using native WDK (async, more accurate)\n */\n async validateSeedWithWdk(seed: string): Promise<boolean> {\n return await this.wdkService.isValidSeed(seed);\n }\n\n /**\n * Validate a BIP-39 seed phrase\n */\n static validateSeed(seed: string): boolean {\n return KeyManager.validateSeedPhrase(seed);\n }\n\n /**\n * Derive Ethereum address from seed phrase using BIP-44 path\n * Path: m/44'/60'/0'/0/0\n */\n static deriveAddress(seed: string): string {\n const hdNode = HDNodeWallet.fromPhrase(seed, undefined, \"m/44'/60'/0'/0/0\");\n return hdNode.address;\n }\n\n /**\n * Get the HDNodeWallet for signing transactions\n */\n static getWallet(seed: string): HDNodeWallet {\n return HDNodeWallet.fromPhrase(seed, undefined, \"m/44'/60'/0'/0/0\");\n }\n\n /**\n * Initialize storage with password (required for web platform)\n */\n async initializeStorage(password: string): Promise<void> {\n if (this.storage instanceof WebEncryptedStorageAdapter) {\n await this.storage.initialize(password);\n }\n }\n\n /**\n * Create a new wallet with generated seed\n */\n async createWallet(password: string): Promise<{ seed: string; address: string }> {\n const seed = WalletManager.generateSeed();\n const address = WalletManager.deriveAddress(seed);\n\n // Encrypt and store seed\n const encrypted = await KeyManager.encryptSeed(seed, password);\n await this.storage.setItem(STORAGE_KEYS.ENCRYPTED_SEED, encrypted);\n\n this.currentSeed = seed;\n this.derivedAddress = address;\n\n return { seed, address };\n }\n\n /**\n * Import an existing wallet from seed phrase\n */\n async importWallet(seed: string, password: string): Promise<{ address: string }> {\n if (!WalletManager.validateSeed(seed)) {\n throw new Error('Invalid seed phrase');\n }\n\n const address = WalletManager.deriveAddress(seed);\n\n // Encrypt and store seed\n const encrypted = await KeyManager.encryptSeed(seed, password);\n await this.storage.setItem(STORAGE_KEYS.ENCRYPTED_SEED, encrypted);\n\n this.currentSeed = seed;\n this.derivedAddress = address;\n\n return { address };\n }\n\n /**\n * Unlock wallet with password\n */\n async unlock(password: string): Promise<{ address: string }> {\n const encrypted = await this.storage.getItem(STORAGE_KEYS.ENCRYPTED_SEED);\n if (!encrypted) {\n throw new Error('No wallet found');\n }\n\n try {\n const seed = await KeyManager.decryptSeed(encrypted, password);\n const address = WalletManager.deriveAddress(seed);\n\n this.currentSeed = seed;\n this.derivedAddress = address;\n\n return { address };\n } catch {\n throw new Error('Invalid password');\n }\n }\n\n /**\n * Lock wallet (clear seed from memory)\n */\n lock(): void {\n this.currentSeed = null;\n this.wdkService.dispose();\n // Keep derived address for display\n }\n\n /**\n * Check if wallet exists in storage\n */\n async hasWallet(): Promise<boolean> {\n return this.storage.hasItem(STORAGE_KEYS.ENCRYPTED_SEED);\n }\n\n /**\n * Delete wallet from storage\n */\n async deleteWallet(): Promise<void> {\n await this.storage.removeItem(STORAGE_KEYS.ENCRYPTED_SEED);\n this.currentSeed = null;\n this.derivedAddress = null;\n this.derivedAddresses = {};\n this.wdkService.dispose();\n }\n\n /**\n * Get current wallet state\n */\n getState(): WalletState {\n return {\n isInitialized: this.derivedAddress !== null,\n isLocked: this.currentSeed === null && this.derivedAddress !== null,\n address: this.derivedAddress,\n balance: null, // Use fetchBalance for current balance\n };\n }\n\n /**\n * Get current address (if unlocked)\n */\n getAddress(): string | null {\n return this.derivedAddress;\n }\n\n /**\n * Check if wallet is unlocked\n */\n isUnlocked(): boolean {\n return this.currentSeed !== null;\n }\n\n /**\n * Get the seed phrase (only if unlocked)\n */\n getSeed(): string | null {\n return this.currentSeed;\n }\n\n /**\n * Fetch balance for current address with timeout handling\n */\n async fetchBalance(): Promise<string> {\n if (!this.derivedAddress) {\n throw new Error('Wallet not initialized');\n }\n\n const chain = this.config.network === 'mainnet' ? mainnet : sepolia;\n const client = createPublicClient({\n chain,\n transport: http(this.config.rpcUrl, {\n timeout: 15000, // 15 second timeout\n retryCount: 2,\n retryDelay: 1000,\n }),\n });\n\n try {\n const balance = await client.getBalance({\n address: this.derivedAddress as `0x${string}`,\n });\n\n return viemFormatEther(balance);\n } catch (error) {\n console.warn('Failed to fetch balance:', error);\n // Return '0' instead of throwing to not block wallet operations\n return '0';\n }\n }\n\n /**\n * Create viem public client for the current network\n */\n getPublicClient() {\n const chain = this.config.network === 'mainnet' ? mainnet : sepolia;\n return createPublicClient({\n chain,\n transport: http(this.config.rpcUrl, {\n timeout: 15000, // 15 second timeout\n retryCount: 2,\n retryDelay: 1000,\n }),\n });\n }\n\n /**\n * Get ethers wallet for signing (only if unlocked)\n */\n getEthersWallet(): HDNodeWallet | null {\n if (!this.currentSeed) return null;\n return WalletManager.getWallet(this.currentSeed);\n }\n\n /**\n * Set active wallet preference\n */\n async setActiveWalletPreference(wallet: 'metamask' | 'wdk'): Promise<void> {\n await this.storage.setItem(STORAGE_KEYS.ACTIVE_WALLET, wallet);\n }\n\n /**\n * Get active wallet preference\n */\n async getActiveWalletPreference(): Promise<'metamask' | 'wdk'> {\n const stored = await this.storage.getItem(STORAGE_KEYS.ACTIVE_WALLET);\n return (stored === 'metamask' || stored === 'wdk') ? stored : 'metamask';\n }\n\n // ==========================================\n // Multi-Chain Support Methods (Powered by Tether WDK)\n // ==========================================\n\n /**\n * Derive address for a specific chain (async version)\n *\n * Calls the backend WDK API for proper derivation when available.\n * Falls back to local ethers-based derivation if API is unavailable.\n */\n static async deriveAddressForChainAsync(\n seed: string,\n chain: NetworkType,\n network: 'mainnet' | 'testnet' = 'testnet',\n apiUrl?: string\n ): Promise<string> {\n try {\n // Try to use the WDK API for proper derivation\n const wdkApi = getWdkApiClient(apiUrl);\n const response = await wdkApi.deriveAddress(seed, chain, network);\n\n if (response.success && response.address) {\n return response.address;\n }\n\n console.warn(`WDK API failed for ${chain}, using local derivation:`, response.error);\n } catch (error) {\n console.warn(`WDK API unavailable for ${chain}, using local derivation:`, error);\n }\n\n // Fallback to local ethers-based derivation\n return WalletManager.deriveAddressForChain(seed, chain);\n }\n\n /**\n * Format address for non-WDK chains (fallback)\n *\n * Note: This fallback produces PLACEHOLDER addresses derived from the seed.\n * For real blockchain interaction, use the WDK API via deriveAddressForChainAsync().\n * These addresses should NOT be used for receiving funds without verification.\n */\n private static formatAddressForChain(address: string, chain: NetworkType): string {\n // For Ethereum, just return the address as-is\n if (chain === 'ethereum') {\n return address;\n }\n\n // Generate deterministic placeholder addresses from the Ethereum address\n // These are NOT cryptographically correct for each chain but are:\n // - Deterministic (same seed = same address)\n // - Correctly formatted for each chain\n // - Clearly marked as needing verification\n\n const addressBytes = address.toLowerCase().replace('0x', '');\n\n switch (chain) {\n case 'bitcoin': {\n // Bitcoin testnet P2WPKH addresses start with tb1q\n // Format: tb1q + 38 chars of bech32\n // Use first 32 chars of address hash as base for bech32-like encoding\n const btcChars = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l';\n let btcAddr = 'tb1q';\n for (let i = 0; i < 38; i++) {\n const idx = parseInt(addressBytes.charAt(i % 40) || '0', 16) % btcChars.length;\n btcAddr += btcChars[idx];\n }\n return btcAddr;\n }\n\n case 'ton': {\n // TON bounceable address: EQ + 46 chars base64url\n // Total length: 48 chars\n const base64Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';\n let tonAddr = 'EQ';\n for (let i = 0; i < 46; i++) {\n const idx = parseInt(addressBytes.charAt(i % 40) || '0', 16) * 4 % base64Chars.length;\n tonAddr += base64Chars[idx];\n }\n return tonAddr;\n }\n\n case 'tron': {\n // TRON address: T + 33 chars base58\n // Total length: 34 chars\n const base58Chars = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';\n let tronAddr = 'T';\n for (let i = 0; i < 33; i++) {\n const idx = parseInt(addressBytes.charAt(i % 40) || '0', 16) * 3 % base58Chars.length;\n tronAddr += base58Chars[idx];\n }\n return tronAddr;\n }\n\n case 'solana': {\n // Solana address: 32-44 chars base58\n // Typically 44 chars\n const base58Chars = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';\n let solAddr = '';\n for (let i = 0; i < 44; i++) {\n const idx = parseInt(addressBytes.charAt(i % 40) || '0', 16) * 3 % base58Chars.length;\n solAddr += base58Chars[idx];\n }\n return solAddr;\n }\n\n case 'spark': {\n // Spark/Lightning: sp1 + 59 chars bech32m\n // Total length: 62 chars\n const bech32Chars = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l';\n let sparkAddr = 'sp1q';\n for (let i = 0; i < 58; i++) {\n const idx = parseInt(addressBytes.charAt(i % 40) || '0', 16) % bech32Chars.length;\n sparkAddr += bech32Chars[idx];\n }\n return sparkAddr;\n }\n\n default:\n return address;\n }\n }\n\n /**\n * Derive address for a specific chain (sync version for backwards compatibility)\n * Uses ethers for basic derivation, use deriveAddressForChainAsync for WDK\n *\n * Note: For non-Ethereum chains, this produces placeholder addresses that are\n * deterministic but not cryptographically valid. Use WDK API for real addresses.\n */\n static deriveAddressForChain(seed: string, chain: NetworkType): string {\n // Always derive from Ethereum path first to get the base address\n const ethPath = DERIVATION_PATHS['ethereum'];\n const ethNode = HDNodeWallet.fromPhrase(seed, undefined, `${ethPath}/0`);\n\n if (chain === 'ethereum') {\n return ethNode.address;\n }\n\n // For other chains, generate formatted placeholder addresses based on the ETH address\n return WalletManager.formatAddressForChain(ethNode.address, chain);\n }\n\n /**\n * Derive addresses for all enabled chains (sync version)\n */\n deriveAllAddresses(): Partial<MultiChainAddresses> {\n if (!this.currentSeed) {\n throw new Error('Wallet is locked');\n }\n\n const addresses: Partial<MultiChainAddresses> = {};\n\n for (const chain of this.config.enabledChains) {\n addresses[chain] = WalletManager.deriveAddressForChain(this.currentSeed, chain);\n }\n\n this.derivedAddresses = addresses;\n return addresses;\n }\n\n /**\n * Derive addresses for all enabled chains using native Tether WDK (recommended)\n * This uses the WDK directly without needing a backend API.\n * Returns REAL cryptographically valid addresses for all chains.\n */\n async deriveAllAddressesWithWdk(): Promise<Partial<MultiChainAddresses>> {\n if (!this.currentSeed) {\n throw new Error('Wallet is locked');\n }\n\n try {\n // Initialize WDK with the current seed\n await this.wdkService.initialize(this.currentSeed);\n\n // Derive addresses for enabled chains only\n const enabledChainsSet = new Set(this.config.enabledChains);\n const wdkAddresses = await this.wdkService.deriveAllAddresses();\n\n // Filter to only enabled chains\n const addresses: Partial<MultiChainAddresses> = {};\n for (const [chain, address] of Object.entries(wdkAddresses)) {\n if (enabledChainsSet.has(chain as NetworkType) && address) {\n addresses[chain as NetworkType] = address;\n }\n }\n\n this.derivedAddresses = addresses;\n return addresses;\n } catch (error) {\n console.error('Native WDK derivation failed:', error);\n throw error;\n }\n }\n\n /**\n * Derive addresses for all enabled chains using Tether WDK\n * Tries native WDK first, then falls back to API, then to placeholders\n */\n async deriveAllAddressesAsync(): Promise<Partial<MultiChainAddresses>> {\n if (!this.currentSeed) {\n throw new Error('Wallet is locked');\n }\n\n // Strategy 1: Try native WDK (best - no network dependency)\n try {\n return await this.deriveAllAddressesWithWdk();\n } catch (wdkError) {\n console.warn('Native WDK failed, trying API:', wdkError);\n }\n\n // Strategy 2: Try WDK API (requires backend running)\n try {\n const wdkApi = getWdkApiClient(this.config.apiUrl);\n const response = await wdkApi.deriveAllAddresses(this.currentSeed, this.config.network);\n\n if (response.success && response.addresses) {\n // Filter to only enabled chains\n const addresses: Partial<MultiChainAddresses> = {};\n for (const chain of this.config.enabledChains) {\n const address = response.addresses[chain];\n if (address) {\n addresses[chain] = address;\n }\n }\n this.derivedAddresses = addresses;\n return addresses;\n }\n\n console.warn('WDK API call failed:', response.error);\n } catch (apiError) {\n console.warn('WDK API unavailable:', apiError);\n }\n\n // Strategy 3: Browser-compatible derivation (uses crypto libraries directly)\n console.log('Using browser-compatible address derivation...');\n try {\n const browserAddresses = await BrowserDerivation.deriveAllAddresses(\n this.currentSeed,\n this.config.network\n );\n\n // Filter to only enabled chains\n const addresses: Partial<MultiChainAddresses> = {};\n for (const chain of this.config.enabledChains) {\n const address = browserAddresses[chain];\n if (address) {\n addresses[chain] = address;\n }\n }\n this.derivedAddresses = addresses;\n return addresses;\n } catch (browserError) {\n console.error('Browser derivation failed:', browserError);\n // Final fallback: only return Ethereum (which always works)\n const ethAddress = WalletManager.deriveAddress(this.currentSeed);\n this.derivedAddresses = { ethereum: ethAddress };\n return this.derivedAddresses;\n }\n }\n\n /**\n * Get address for a specific chain\n */\n getAddressForChain(chain: NetworkType): string | null {\n if (!this.currentSeed) {\n return this.derivedAddresses[chain] || null;\n }\n\n if (!this.derivedAddresses[chain]) {\n this.derivedAddresses[chain] = WalletManager.deriveAddressForChain(this.currentSeed, chain);\n }\n\n return this.derivedAddresses[chain] || null;\n }\n\n /**\n * Get all derived addresses\n */\n getAllAddresses(): Partial<MultiChainAddresses> {\n return { ...this.derivedAddresses };\n }\n\n /**\n * Set the selected chain\n */\n setSelectedChain(chain: NetworkType): void {\n if (!this.config.enabledChains.includes(chain)) {\n throw new Error(`Chain ${chain} is not enabled`);\n }\n this.selectedChain = chain;\n }\n\n /**\n * Get the currently selected chain\n */\n getSelectedChain(): NetworkType {\n return this.selectedChain;\n }\n\n /**\n * Get enabled chains\n */\n getEnabledChains(): NetworkType[] {\n return [...this.config.enabledChains];\n }\n\n /**\n * Get chain configuration\n */\n getChainConfig(chain: NetworkType): NetworkConfig {\n return getNetworkConfig(chain, this.config.network === 'testnet');\n }\n\n /**\n * Fetch balance for a specific chain\n * Note: Currently only Ethereum is implemented\n */\n async fetchBalanceForChain(chain: NetworkType): Promise<ChainBalance> {\n const address = this.getAddressForChain(chain);\n if (!address) {\n throw new Error(`No address for chain ${chain}`);\n }\n\n const networkConfig = this.getChainConfig(chain);\n let balance = '0';\n\n // Fetch balance based on chain type\n if (chain === 'ethereum') {\n const viemChain = this.config.network === 'mainnet' ? mainnet : sepolia;\n const client = createPublicClient({\n chain: viemChain,\n transport: http(this.config.rpcUrl, {\n timeout: 15000, // 15 second timeout\n retryCount: 2,\n retryDelay: 1000,\n }),\n });\n\n try {\n const rawBalance = await client.getBalance({\n address: address as `0x${string}`,\n });\n balance = viemFormatEther(rawBalance);\n } catch (error) {\n console.warn(`Failed to fetch ${chain} balance:`, error);\n // Balance remains '0' on error\n }\n }\n // TODO: Implement balance fetching for other chains\n // - Bitcoin: Use blockstream API\n // - TON: Use toncenter API\n // - TRON: Use trongrid API\n // - Solana: Use Solana JSON RPC\n // - Spark: Use Spark SDK\n\n return {\n chain,\n symbol: networkConfig.nativeCurrency.symbol,\n balance,\n balanceUsd: 0, // TODO: Implement price fetching\n address,\n decimals: networkConfig.nativeCurrency.decimals,\n };\n }\n\n /**\n * Fetch balances for all enabled chains\n */\n async fetchAllBalances(): Promise<ChainBalance[]> {\n const balances: ChainBalance[] = [];\n\n for (const chain of this.config.enabledChains) {\n try {\n const balance = await this.fetchBalanceForChain(chain);\n balances.push(balance);\n } catch (error) {\n console.error(`Failed to fetch balance for ${chain}:`, error);\n // Add placeholder balance on error\n const networkConfig = this.getChainConfig(chain);\n balances.push({\n chain,\n symbol: networkConfig.nativeCurrency.symbol,\n balance: '0',\n balanceUsd: 0,\n address: this.getAddressForChain(chain) || '',\n decimals: networkConfig.nativeCurrency.decimals,\n });\n }\n }\n\n return balances;\n }\n\n /**\n * Get extended wallet state with multi-chain info\n */\n getExtendedState(): WalletState {\n return {\n isInitialized: this.derivedAddress !== null,\n isLocked: this.currentSeed === null && this.derivedAddress !== null,\n address: this.derivedAddress,\n balance: null,\n addresses: this.derivedAddresses,\n selectedChain: this.selectedChain,\n };\n }\n}\n","import type {\n NFTMetadata,\n LazyMintVoucher,\n NFT,\n ListingParams,\n TxResult,\n} from '../types';\nimport { PLATFORM_CONFIG, NFT_VOUCHER_DOMAIN, NFT_VOUCHER_TYPES } from '../config/contracts';\n\n/**\n * ZubariNFTProtocol - NFT creation and marketplace operations\n *\n * Handles lazy minting via EIP-712 signatures, NFT listing,\n * and marketplace operations on Ethereum network.\n */\nexport class ZubariNFTProtocol {\n private readonly contractAddress: string;\n private readonly _marketplaceAddress: string;\n private readonly chainId: number;\n\n constructor(\n contractAddress: string,\n marketplaceAddress: string,\n chainId: number\n ) {\n this.contractAddress = contractAddress;\n this._marketplaceAddress = marketplaceAddress;\n this.chainId = chainId;\n }\n\n /**\n * Create a lazy mint voucher for off-chain NFT creation\n * The voucher can be redeemed on-chain when purchased\n */\n async createLazyMintVoucher(\n metadata: NFTMetadata,\n creatorAddress: string,\n signer: { signTypedData: (domain: object, types: object, value: object) => Promise<string> }\n ): Promise<LazyMintVoucher> {\n // Validate royalty\n if (metadata.royaltyBps > PLATFORM_CONFIG.maxRoyaltyBps) {\n throw new Error(`Royalty cannot exceed ${PLATFORM_CONFIG.maxRoyaltyBps / 100}%`);\n }\n\n // Generate random tokenId\n const tokenId = this.generateTokenId();\n\n // Calculate deadline (30 days from now)\n const deadline = Math.floor(Date.now() / 1000) + PLATFORM_CONFIG.voucherValiditySecs;\n\n // Build voucher data\n const voucherData = {\n tokenId,\n uri: metadata.image, // Will be IPFS URI\n creator: creatorAddress,\n royaltyBps: metadata.royaltyBps,\n deadline,\n };\n\n // Create EIP-712 domain\n const domain = {\n ...NFT_VOUCHER_DOMAIN,\n chainId: this.chainId,\n verifyingContract: this.contractAddress,\n };\n\n // Sign the voucher\n const signature = await signer.signTypedData(domain, NFT_VOUCHER_TYPES, voucherData);\n\n return {\n ...voucherData,\n signature,\n };\n }\n\n /**\n * Redeem a lazy mint voucher to mint the NFT on-chain\n */\n async redeemVoucher(voucher: LazyMintVoucher, _buyerAddress: string): Promise<TxResult> {\n // Validate voucher deadline\n if (voucher.deadline < Math.floor(Date.now() / 1000)) {\n throw new Error('Voucher has expired');\n }\n\n // Placeholder - will call contract\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * List an NFT for sale on the marketplace\n */\n async listForSale(_params: ListingParams): Promise<TxResult> {\n // Placeholder - will approve and list\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Buy an NFT from the marketplace\n */\n async buyNFT(_listingId: string, _price: bigint): Promise<TxResult> {\n // Placeholder - will call marketplace contract\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Transfer an NFT to another address\n */\n async transfer(_tokenId: string, _to: string): Promise<TxResult> {\n // Placeholder - will call NFT contract\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Get NFTs owned by an address\n */\n async getOwnedNFTs(_address: string): Promise<NFT[]> {\n // Placeholder - will query contract/indexer\n return [];\n }\n\n /**\n * Generate a random tokenId (32 bytes hex)\n */\n private generateTokenId(): string {\n const bytes = new Uint8Array(32);\n crypto.getRandomValues(bytes);\n return '0x' + Array.from(bytes).map(b => b.toString(16).padStart(2, '0')).join('');\n }\n}\n","import type { TipData, TipResult, TipStats, TxResult } from '../types';\nimport { PLATFORM_CONFIG } from '../config/contracts';\n\n/**\n * ZubariTipsProtocol - Micropayment tips for creators\n *\n * Handles ETH and ERC-20 token tips with platform fee distribution.\n * Supports gasless tips via ERC-4337 when enabled.\n */\nexport class ZubariTipsProtocol {\n private readonly contractAddress: string;\n private readonly chainId: number;\n private readonly gaslessEnabled: boolean;\n\n constructor(contractAddress: string, chainId: number, gaslessEnabled: boolean = false) {\n this.contractAddress = contractAddress;\n this.chainId = chainId;\n this.gaslessEnabled = gaslessEnabled;\n }\n\n /**\n * Send a tip to a creator\n */\n async sendTip(tip: TipData): Promise<TipResult> {\n const { recipient, amount, token, message } = tip;\n\n // Calculate platform fee (3%)\n const platformFee = (amount * BigInt(PLATFORM_CONFIG.tipFeeBps)) / BigInt(10000);\n const creatorAmount = amount - platformFee;\n\n // Validate amount\n if (amount <= 0n) {\n throw new Error('Tip amount must be greater than 0');\n }\n\n // Placeholder - will call contract\n const txResult: TxResult = {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n\n return {\n txHash: txResult.hash,\n tipId: '', // Will be returned from contract event\n recipient,\n amount: creatorAmount,\n platformFee,\n timestamp: Math.floor(Date.now() / 1000),\n };\n }\n\n /**\n * Send tips to multiple creators in a single transaction\n */\n async sendBatchTips(tips: TipData[]): Promise<TipResult[]> {\n if (tips.length === 0) {\n throw new Error('At least one tip is required');\n }\n\n // Calculate total amount needed\n const totalAmount = tips.reduce((sum, tip) => sum + tip.amount, BigInt(0));\n\n // Placeholder - will call batch function\n return tips.map(tip => ({\n txHash: '',\n tipId: '',\n recipient: tip.recipient,\n amount: tip.amount - (tip.amount * BigInt(PLATFORM_CONFIG.tipFeeBps)) / BigInt(10000),\n platformFee: (tip.amount * BigInt(PLATFORM_CONFIG.tipFeeBps)) / BigInt(10000),\n timestamp: Math.floor(Date.now() / 1000),\n }));\n }\n\n /**\n * Get tips received by an address\n */\n async getTipsReceived(address: string): Promise<TipResult[]> {\n // Placeholder - will query indexer\n return [];\n }\n\n /**\n * Get tips sent by an address\n */\n async getTipsSent(address: string): Promise<TipResult[]> {\n // Placeholder - will query indexer\n return [];\n }\n\n /**\n * Get tip statistics for a creator\n */\n async getCreatorTipStats(creator: string): Promise<TipStats> {\n // Placeholder - will query indexer/contract\n return {\n totalReceived: BigInt(0),\n tipCount: 0,\n uniqueTippers: 0,\n };\n }\n\n /**\n * Get platform fee in basis points\n */\n getPlatformFeeBps(): number {\n return PLATFORM_CONFIG.tipFeeBps;\n }\n}\n","import type { SubscriptionPlan, Subscription, TxResult } from '../types';\n\n/**\n * ZubariSubscriptionProtocol - Recurring subscription payments\n *\n * Handles subscription plan creation, subscription management,\n * and verification of active subscriptions.\n */\nexport class ZubariSubscriptionProtocol {\n private readonly contractAddress: string;\n private readonly chainId: number;\n\n constructor(contractAddress: string, chainId: number) {\n this.contractAddress = contractAddress;\n this.chainId = chainId;\n }\n\n /**\n * Create a new subscription plan\n */\n async createPlan(plan: SubscriptionPlan): Promise<string> {\n // Validate plan\n if (!plan.name || plan.name.length === 0) {\n throw new Error('Plan name is required');\n }\n if (plan.price <= 0n) {\n throw new Error('Plan price must be greater than 0');\n }\n if (plan.duration <= 0) {\n throw new Error('Plan duration must be greater than 0');\n }\n\n // Generate planId based on creator + name hash\n const planId = this.generatePlanId(plan.name);\n\n // Placeholder - will call contract\n return planId;\n }\n\n /**\n * Update an existing subscription plan\n */\n async updatePlan(planId: string, updates: Partial<SubscriptionPlan>): Promise<TxResult> {\n // Placeholder - will call contract\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Subscribe to a creator's plan\n */\n async subscribe(\n creator: string,\n planId: string,\n months: number = 1\n ): Promise<Subscription> {\n if (months <= 0) {\n throw new Error('Subscription duration must be at least 1 month');\n }\n\n const now = Math.floor(Date.now() / 1000);\n const durationSeconds = months * 30 * 24 * 60 * 60; // 30 days per month\n\n // Placeholder - will call contract\n return {\n subscriptionId: '',\n planId,\n creator,\n subscriber: '', // Current user address\n startTime: now,\n endTime: now + durationSeconds,\n autoRenew: false,\n status: 'active',\n };\n }\n\n /**\n * Cancel an active subscription\n */\n async cancel(subscriptionId: string): Promise<TxResult> {\n // Placeholder - will call contract\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Check if an address is subscribed to a creator\n */\n async isSubscribed(creator: string, subscriber?: string): Promise<boolean> {\n // Placeholder - will call contract view function\n return false;\n }\n\n /**\n * Get active subscriptions for a subscriber\n */\n async getActiveSubscriptions(subscriber?: string): Promise<Subscription[]> {\n // Placeholder - will query contract/indexer\n return [];\n }\n\n /**\n * Get all subscribers for a creator\n */\n async getSubscribers(creator: string): Promise<Subscription[]> {\n // Placeholder - will query contract/indexer\n return [];\n }\n\n /**\n * Get a specific plan by ID\n */\n async getPlan(planId: string): Promise<SubscriptionPlan | null> {\n // Placeholder - will query contract\n return null;\n }\n\n /**\n * Get all plans for a creator\n */\n async getCreatorPlans(creator: string): Promise<SubscriptionPlan[]> {\n // Placeholder - will query contract/indexer\n return [];\n }\n\n /**\n * Generate a unique plan ID\n */\n private generatePlanId(name: string): string {\n const bytes = new Uint8Array(16);\n crypto.getRandomValues(bytes);\n return '0x' + Array.from(bytes).map(b => b.toString(16).padStart(2, '0')).join('');\n }\n}\n","import type { EarningsBreakdown, RevenueSplit, TxResult } from '../types';\n\n/**\n * ZubariPayoutsProtocol - Creator earnings management\n *\n * Handles earnings tracking, claiming, revenue splits,\n * and conversion to stablecoins.\n */\nexport class ZubariPayoutsProtocol {\n private readonly contractAddress: string;\n private readonly chainId: number;\n\n constructor(contractAddress: string, chainId: number) {\n this.contractAddress = contractAddress;\n this.chainId = chainId;\n }\n\n /**\n * Get pending earnings breakdown for the current user\n */\n async getPendingEarnings(): Promise<EarningsBreakdown> {\n // Placeholder - will call contract\n return {\n tips: BigInt(0),\n subscriptions: BigInt(0),\n nftSales: BigInt(0),\n royalties: BigInt(0),\n total: BigInt(0),\n };\n }\n\n /**\n * Get historical earnings for a time period\n */\n async getEarningsHistory(\n period: 'day' | 'week' | 'month' | 'all' = 'all'\n ): Promise<EarningsBreakdown[]> {\n // Placeholder - will query indexer\n return [];\n }\n\n /**\n * Claim all pending earnings\n */\n async claimEarnings(): Promise<TxResult> {\n // Placeholder - will call contract\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Claim specific amount of earnings\n */\n async claimPartialEarnings(amount: bigint): Promise<TxResult> {\n if (amount <= 0n) {\n throw new Error('Amount must be greater than 0');\n }\n\n // Placeholder - will call contract\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Setup revenue split with collaborators\n * Basis points must sum to 10000 (100%)\n */\n async setupRevenueSplit(splits: RevenueSplit[]): Promise<TxResult> {\n // Validate that basis points sum to 100%\n const totalBps = splits.reduce((sum, split) => sum + split.basisPoints, 0);\n if (totalBps !== 10000) {\n throw new Error('Revenue splits must sum to 100% (10000 basis points)');\n }\n\n // Validate each split\n for (const split of splits) {\n if (split.basisPoints <= 0) {\n throw new Error('Each split must have positive basis points');\n }\n if (!split.recipient || split.recipient.length === 0) {\n throw new Error('Each split must have a valid recipient address');\n }\n }\n\n // Placeholder - will call contract\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Get current revenue split configuration\n */\n async getRevenueSplit(): Promise<RevenueSplit[]> {\n // Placeholder - will query contract\n return [];\n }\n\n /**\n * Remove revenue split (creator gets 100%)\n */\n async removeRevenueSplit(): Promise<TxResult> {\n // Placeholder - will call contract\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Convert earnings to stablecoin (USDT)\n */\n async convertToStable(token: string, amount: bigint): Promise<TxResult> {\n if (amount <= 0n) {\n throw new Error('Amount must be greater than 0');\n }\n\n // Placeholder - will use swap protocol\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n}\n","import type { SwapQuote, TxResult } from '../types';\nimport { PLATFORM_CONFIG, getContractAddresses } from '../config/contracts';\n\n/**\n * SwapService - DEX integration via Velora\n *\n * Handles token swaps with slippage protection,\n * quote fetching, and earnings conversion.\n */\nexport class SwapService {\n private readonly _chainId: number;\n private readonly isTestnet: boolean;\n\n constructor(chainId: number, isTestnet: boolean = false) {\n this._chainId = chainId;\n this.isTestnet = isTestnet;\n }\n\n /**\n * Get a swap quote\n */\n async getQuote(\n tokenIn: string,\n tokenOut: string,\n amountIn: bigint\n ): Promise<SwapQuote> {\n if (amountIn <= 0n) {\n throw new Error('Amount must be greater than 0');\n }\n\n // Placeholder - will use Velora DEX\n return {\n tokenIn,\n tokenOut,\n amountIn,\n amountOut: BigInt(0),\n priceImpact: 0,\n route: [tokenIn, tokenOut],\n estimatedGas: BigInt(0),\n };\n }\n\n /**\n * Execute a swap with slippage protection\n */\n async executeSwap(\n quote: SwapQuote,\n slippageToleranceBps: number = PLATFORM_CONFIG.defaultSlippageBps\n ): Promise<TxResult> {\n // Calculate minimum output with slippage\n const _minAmountOut =\n quote.amountOut - (quote.amountOut * BigInt(slippageToleranceBps)) / BigInt(10000);\n\n // Calculate deadline\n const _deadline = Math.floor(Date.now() / 1000) + PLATFORM_CONFIG.swapDeadlineSecs;\n\n // Warn if price impact is high\n if (quote.priceImpact > 5) {\n console.warn(`High price impact: ${quote.priceImpact}%`);\n }\n\n // Placeholder - will call swap contract\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Convert earnings to USDT, keeping some ETH for gas\n */\n async convertEarningsToStable(\n ethBalance: bigint,\n reserveForGas: bigint = BigInt('10000000000000000') // 0.01 ETH\n ): Promise<TxResult> {\n const amountToSwap = ethBalance - reserveForGas;\n\n if (amountToSwap <= 0n) {\n throw new Error('Insufficient balance after gas reserve');\n }\n\n // Get quote for ETH -> USDT\n const contracts = getContractAddresses(this.isTestnet ? 'testnet' : 'mainnet');\n const quote = await this.getQuote(\n '0x0000000000000000000000000000000000000000', // ETH\n contracts.usdt, // USDT on Ethereum\n amountToSwap\n );\n\n return this.executeSwap(quote);\n }\n\n /**\n * Check if a swap route exists\n */\n async hasRoute(tokenIn: string, tokenOut: string): Promise<boolean> {\n try {\n const quote = await this.getQuote(tokenIn, tokenOut, BigInt(1));\n return quote.amountOut > 0n;\n } catch {\n return false;\n }\n }\n\n /**\n * Get supported tokens for swapping\n */\n async getSupportedTokens(): Promise<string[]> {\n // Placeholder - will query DEX\n return [];\n }\n}\n","/**\n * Transaction Service for Zubari SDK\n *\n * Provides multi-chain transaction capabilities using Tether WDK.\n * Supports Ethereum, Bitcoin, Solana, TON, TRON, and Spark (Lightning).\n *\n * @see https://docs.wallet.tether.io/\n */\n\nimport type { NetworkType, TxResult } from '../types';\n\n// Dynamic imports for ESM modules (WDK packages are ESM-only)\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WdkManager: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerBtc: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerEvm: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerSolana: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerTon: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerTron: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerSpark: any;\n\nlet wdkLoaded = false;\nlet wdkLoadError: Error | null = null;\n\n/**\n * Dynamic import helper that bypasses TypeScript's CommonJS transformation\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst dynamicImport = new Function('specifier', 'return import(specifier)') as (\n specifier: string\n) => Promise<any>;\n\n/**\n * Dynamically load WDK modules (they are ESM-only)\n */\nasync function loadWdkModules(): Promise<void> {\n if (wdkLoaded) return;\n if (wdkLoadError) throw wdkLoadError;\n\n try {\n const [wdk, btc, evm, solana, ton, tron, spark] = await Promise.all([\n dynamicImport('@tetherto/wdk'),\n dynamicImport('@tetherto/wdk-wallet-btc'),\n dynamicImport('@tetherto/wdk-wallet-evm'),\n dynamicImport('@tetherto/wdk-wallet-solana'),\n dynamicImport('@tetherto/wdk-wallet-ton'),\n dynamicImport('@tetherto/wdk-wallet-tron'),\n dynamicImport('@tetherto/wdk-wallet-spark'),\n ]);\n\n WdkManager = wdk.default;\n WalletManagerBtc = btc.default;\n WalletManagerEvm = evm.default;\n WalletManagerSolana = solana.default;\n WalletManagerTon = ton.default;\n WalletManagerTron = tron.default;\n WalletManagerSpark = spark.default;\n wdkLoaded = true;\n } catch (error) {\n wdkLoadError = error instanceof Error ? error : new Error('Failed to load WDK modules');\n console.error('Failed to load WDK modules:', error);\n throw wdkLoadError;\n }\n}\n\n/**\n * Transaction parameters for sending\n */\nexport interface TransactionParams {\n /** Recipient address */\n to: string;\n /** Amount to send (in human-readable format, e.g., \"0.1\") */\n amount: string;\n /** Token address (optional, for ERC-20/SPL tokens) */\n token?: string;\n /** Transaction memo/message (for chains that support it) */\n memo?: string;\n /** Fee priority: 'slow' | 'medium' | 'fast' */\n feePriority?: 'slow' | 'medium' | 'fast';\n /** Custom gas limit (EVM chains) */\n gasLimit?: string;\n /** Custom gas price (EVM chains) */\n gasPrice?: string;\n}\n\n/**\n * Transaction result with detailed information\n */\nexport interface TransactionResult {\n /** Transaction hash */\n hash: string;\n /** Network/chain */\n network: NetworkType;\n /** Transaction status */\n status: 'pending' | 'confirmed' | 'failed';\n /** Block number (when confirmed) */\n blockNumber?: number;\n /** Gas used (EVM chains) */\n gasUsed?: string;\n /** Fee paid */\n fee?: string;\n /** Explorer URL */\n explorerUrl?: string;\n /** Error message if failed */\n error?: string;\n /** Timestamp */\n timestamp: number;\n}\n\n/**\n * Transaction history item\n */\nexport interface TransactionHistoryItem {\n hash: string;\n network: NetworkType;\n type: 'send' | 'receive' | 'swap' | 'contract';\n from: string;\n to: string;\n amount: string;\n token?: string;\n fee?: string;\n status: 'pending' | 'confirmed' | 'failed';\n timestamp: number;\n blockNumber?: number;\n}\n\n/**\n * Fee estimate for a transaction\n */\nexport interface FeeEstimate {\n slow: {\n fee: string;\n estimatedTime: string; // e.g., \"~30 min\"\n };\n medium: {\n fee: string;\n estimatedTime: string; // e.g., \"~5 min\"\n };\n fast: {\n fee: string;\n estimatedTime: string; // e.g., \"~1 min\"\n };\n}\n\n/**\n * Transaction Service configuration\n */\nexport interface TransactionServiceConfig {\n network: 'mainnet' | 'testnet';\n rpcUrls?: Partial<Record<NetworkType, string>>;\n}\n\n// Default RPC URLs\nconst DEFAULT_RPC_URLS = {\n mainnet: {\n ethereum: 'https://eth.llamarpc.com',\n bitcoin: '', // Uses Electrum\n solana: 'https://api.mainnet-beta.solana.com',\n ton: 'https://toncenter.com/api/v2/jsonRPC',\n tron: 'https://api.trongrid.io',\n spark: '', // Uses Spark network\n },\n testnet: {\n ethereum: 'https://ethereum-sepolia-rpc.publicnode.com',\n bitcoin: '', // Uses Electrum testnet\n solana: 'https://api.devnet.solana.com',\n ton: 'https://testnet.toncenter.com/api/v2/jsonRPC',\n tron: 'https://api.shasta.trongrid.io',\n spark: '', // Uses Spark testnet\n },\n};\n\n// Explorer URLs\nconst EXPLORER_URLS = {\n mainnet: {\n ethereum: 'https://etherscan.io/tx/',\n bitcoin: 'https://mempool.space/tx/',\n solana: 'https://solscan.io/tx/',\n ton: 'https://tonscan.org/tx/',\n tron: 'https://tronscan.org/#/transaction/',\n spark: 'https://spark.info/tx/',\n },\n testnet: {\n ethereum: 'https://sepolia.etherscan.io/tx/',\n bitcoin: 'https://mempool.space/testnet/tx/',\n solana: 'https://solscan.io/tx/?cluster=devnet&tx=',\n ton: 'https://testnet.tonscan.org/tx/',\n tron: 'https://shasta.tronscan.org/#/transaction/',\n spark: 'https://testnet.spark.info/tx/',\n },\n};\n\n/**\n * Transaction Service\n *\n * Provides multi-chain transaction capabilities:\n * - Send native tokens (ETH, BTC, SOL, TON, TRX)\n * - Send ERC-20/SPL tokens\n * - Fee estimation\n * - Transaction history\n */\nexport class TransactionService {\n private seed: string | null = null;\n private config: TransactionServiceConfig;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private wallets: Partial<Record<NetworkType, any>> = {};\n\n constructor(config: Partial<TransactionServiceConfig> = {}) {\n this.config = {\n network: config.network || 'testnet',\n rpcUrls: config.rpcUrls,\n };\n }\n\n /**\n * Ensure WDK modules are loaded\n */\n private async ensureLoaded(): Promise<void> {\n await loadWdkModules();\n }\n\n /**\n * Get RPC URL for a chain\n */\n private getRpcUrl(chain: NetworkType): string {\n const networkUrls = DEFAULT_RPC_URLS[this.config.network];\n\n if (this.config.rpcUrls?.[chain]) {\n return this.config.rpcUrls[chain]!;\n }\n\n return networkUrls[chain as keyof typeof networkUrls] || '';\n }\n\n /**\n * Get explorer URL for a transaction\n */\n getExplorerUrl(chain: NetworkType, txHash: string): string {\n const explorers = EXPLORER_URLS[this.config.network];\n const baseUrl = explorers[chain as keyof typeof explorers] || '';\n return `${baseUrl}${txHash}`;\n }\n\n /**\n * Initialize the service with a seed phrase\n */\n async initialize(seed: string): Promise<void> {\n await this.ensureLoaded();\n\n if (!WdkManager.isValidSeed(seed)) {\n throw new Error('Invalid seed phrase');\n }\n\n this.seed = seed;\n this.wallets = {};\n }\n\n /**\n * Check if service is initialized\n */\n isInitialized(): boolean {\n return this.seed !== null;\n }\n\n /**\n * Get or create wallet instance for a specific chain\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private async getWallet(chain: NetworkType): Promise<any> {\n if (!this.seed) {\n throw new Error('TransactionService not initialized. Call initialize() first.');\n }\n\n // Return cached wallet if exists\n if (this.wallets[chain]) {\n return this.wallets[chain];\n }\n\n const isTestnet = this.config.network === 'testnet';\n\n try {\n switch (chain) {\n case 'ethereum': {\n const rpcUrl = this.getRpcUrl('ethereum');\n const wallet = new WalletManagerEvm(this.seed, { provider: rpcUrl });\n this.wallets[chain] = wallet;\n return wallet;\n }\n\n case 'bitcoin': {\n const wallet = new WalletManagerBtc(this.seed, {\n network: isTestnet ? 'testnet' : 'bitcoin',\n });\n this.wallets[chain] = wallet;\n return wallet;\n }\n\n case 'solana': {\n const rpcUrl = this.getRpcUrl('solana');\n const wallet = new WalletManagerSolana(this.seed, {\n rpcUrl,\n });\n this.wallets[chain] = wallet;\n return wallet;\n }\n\n case 'ton': {\n const url = this.getRpcUrl('ton');\n const wallet = new WalletManagerTon(this.seed, {\n tonClient: { url },\n });\n this.wallets[chain] = wallet;\n return wallet;\n }\n\n case 'tron': {\n const fullHost = this.getRpcUrl('tron');\n const wallet = new WalletManagerTron(this.seed, {\n provider: fullHost,\n });\n this.wallets[chain] = wallet;\n return wallet;\n }\n\n case 'spark': {\n const wallet = new WalletManagerSpark(this.seed, {\n network: isTestnet ? 'TESTNET' : 'MAINNET',\n });\n this.wallets[chain] = wallet;\n return wallet;\n }\n\n default:\n throw new Error(`Unsupported chain: ${chain}`);\n }\n } catch (error) {\n console.error(`Failed to initialize ${chain} wallet:`, error);\n throw error;\n }\n }\n\n /**\n * Estimate transaction fee\n */\n async estimateFee(chain: NetworkType, params: TransactionParams): Promise<FeeEstimate> {\n const wallet = await this.getWallet(chain);\n\n try {\n // Get fee rates from the wallet\n const feeRates = await wallet.getFeeRates();\n\n // Format based on chain type\n if (chain === 'ethereum') {\n return {\n slow: {\n fee: `${feeRates.slow || '0'} Gwei`,\n estimatedTime: '~10 min',\n },\n medium: {\n fee: `${feeRates.medium || feeRates.standard || '0'} Gwei`,\n estimatedTime: '~3 min',\n },\n fast: {\n fee: `${feeRates.fast || feeRates.high || '0'} Gwei`,\n estimatedTime: '~30 sec',\n },\n };\n } else if (chain === 'bitcoin') {\n return {\n slow: {\n fee: `${feeRates.slow || feeRates.low || '0'} sat/vB`,\n estimatedTime: '~60 min',\n },\n medium: {\n fee: `${feeRates.medium || feeRates.normal || '0'} sat/vB`,\n estimatedTime: '~30 min',\n },\n fast: {\n fee: `${feeRates.fast || feeRates.high || '0'} sat/vB`,\n estimatedTime: '~10 min',\n },\n };\n } else {\n // Generic format for other chains\n return {\n slow: {\n fee: String(feeRates.slow || feeRates.low || '0'),\n estimatedTime: '~10 min',\n },\n medium: {\n fee: String(feeRates.medium || feeRates.standard || '0'),\n estimatedTime: '~3 min',\n },\n fast: {\n fee: String(feeRates.fast || feeRates.high || '0'),\n estimatedTime: '~1 min',\n },\n };\n }\n } catch (error) {\n console.error(`Error estimating fee for ${chain}:`, error);\n // Return default fees on error\n return {\n slow: { fee: '0', estimatedTime: 'Unknown' },\n medium: { fee: '0', estimatedTime: 'Unknown' },\n fast: { fee: '0', estimatedTime: 'Unknown' },\n };\n }\n }\n\n /**\n * Send a transaction\n */\n async send(chain: NetworkType, params: TransactionParams): Promise<TransactionResult> {\n const wallet = await this.getWallet(chain);\n const account = await wallet.getAccount(0);\n\n const timestamp = Date.now();\n\n try {\n // Build and send transaction based on chain\n let txHash: string;\n\n if (params.token) {\n // Token transfer (ERC-20, SPL, TRC-20, etc.)\n txHash = await account.sendToken(params.to, params.amount, params.token, {\n memo: params.memo,\n feePriority: params.feePriority || 'medium',\n });\n } else {\n // Native token transfer\n txHash = await account.send(params.to, params.amount, {\n memo: params.memo,\n feePriority: params.feePriority || 'medium',\n gasLimit: params.gasLimit,\n gasPrice: params.gasPrice,\n });\n }\n\n return {\n hash: txHash,\n network: chain,\n status: 'pending',\n explorerUrl: this.getExplorerUrl(chain, txHash),\n timestamp,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Transaction failed';\n console.error(`Transaction failed on ${chain}:`, error);\n\n return {\n hash: '',\n network: chain,\n status: 'failed',\n error: errorMessage,\n timestamp,\n };\n }\n }\n\n /**\n * Get transaction status\n */\n async getTransactionStatus(chain: NetworkType, txHash: string): Promise<TransactionResult> {\n const wallet = await this.getWallet(chain);\n\n try {\n const tx = await wallet.getTransaction(txHash);\n\n return {\n hash: txHash,\n network: chain,\n status: tx.confirmed ? 'confirmed' : 'pending',\n blockNumber: tx.blockNumber,\n gasUsed: tx.gasUsed?.toString(),\n fee: tx.fee?.toString(),\n explorerUrl: this.getExplorerUrl(chain, txHash),\n timestamp: tx.timestamp || Date.now(),\n };\n } catch (error) {\n console.error(`Error getting transaction status for ${txHash}:`, error);\n return {\n hash: txHash,\n network: chain,\n status: 'pending',\n explorerUrl: this.getExplorerUrl(chain, txHash),\n timestamp: Date.now(),\n };\n }\n }\n\n /**\n * Get transaction history for an address\n */\n async getTransactionHistory(\n chain: NetworkType,\n limit: number = 10\n ): Promise<TransactionHistoryItem[]> {\n const wallet = await this.getWallet(chain);\n const account = await wallet.getAccount(0);\n\n try {\n const history = await account.getTransactions({ limit });\n\n return history.map((tx: any) => ({\n hash: tx.hash || tx.txHash,\n network: chain,\n type: tx.type || (tx.from === account.address ? 'send' : 'receive'),\n from: tx.from,\n to: tx.to,\n amount: tx.amount || tx.value,\n token: tx.token,\n fee: tx.fee?.toString(),\n status: tx.confirmed ? 'confirmed' : 'pending',\n timestamp: tx.timestamp || Date.now(),\n blockNumber: tx.blockNumber,\n }));\n } catch (error) {\n console.error(`Error getting transaction history for ${chain}:`, error);\n return [];\n }\n }\n\n /**\n * Get balance for a specific chain\n */\n async getBalance(chain: NetworkType): Promise<{ balance: string; balanceUsd: number }> {\n const wallet = await this.getWallet(chain);\n const account = await wallet.getAccount(0);\n\n try {\n const balance = await account.getBalance();\n return {\n balance: balance.toString(),\n balanceUsd: 0, // TODO: Implement price fetching\n };\n } catch (error) {\n console.error(`Error getting balance for ${chain}:`, error);\n return { balance: '0', balanceUsd: 0 };\n }\n }\n\n /**\n * Get the current network configuration\n */\n getNetwork(): 'mainnet' | 'testnet' {\n return this.config.network;\n }\n\n /**\n * Clean up and dispose of wallet instances\n */\n dispose(): void {\n for (const wallet of Object.values(this.wallets)) {\n if (wallet && typeof wallet.dispose === 'function') {\n try {\n wallet.dispose();\n } catch {\n // Ignore dispose errors\n }\n }\n }\n this.wallets = {};\n this.seed = null;\n }\n}\n\n// Singleton instance\nlet transactionServiceInstance: TransactionService | null = null;\n\n/**\n * Get or create the Transaction service singleton\n */\nexport function getTransactionService(config?: Partial<TransactionServiceConfig>): TransactionService {\n if (!transactionServiceInstance || (config && config.network !== transactionServiceInstance.getNetwork())) {\n transactionServiceInstance = new TransactionService(config);\n }\n return transactionServiceInstance;\n}\n\n/**\n * Create a new Transaction service instance (non-singleton)\n */\nexport function createTransactionService(config?: Partial<TransactionServiceConfig>): TransactionService {\n return new TransactionService(config);\n}\n","// Network Types\nexport type NetworkType = 'bitcoin' | 'ethereum' | 'ton' | 'tron' | 'solana' | 'spark';\n\n// Wallet Configuration\nexport interface ZubariWalletConfig {\n network: 'mainnet' | 'testnet';\n enabledNetworks: NetworkType[];\n gasless: boolean;\n paymasterUrl?: string;\n bundlerUrl?: string;\n rpcUrls?: Partial<Record<NetworkType, string>>;\n}\n\n// Balance Types\nexport interface TokenBalance {\n symbol: string;\n address: string;\n balance: bigint;\n balanceFormatted: string;\n balanceUsd: number;\n decimals: number;\n}\n\nexport interface NetworkBalance {\n network: NetworkType;\n native: {\n symbol: string;\n balance: bigint;\n balanceFormatted: string;\n balanceUsd: number;\n };\n tokens: TokenBalance[];\n}\n\n// Transaction Types\nexport interface TxResult {\n hash: string;\n network: NetworkType;\n status: 'pending' | 'confirmed' | 'failed';\n blockNumber?: number;\n gasUsed?: bigint;\n error?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface SendParams {\n to: string;\n amount: bigint;\n token?: string;\n gasless?: boolean;\n}\n\n// Account Types\nexport interface Account {\n network: NetworkType;\n address: string;\n publicKey: string;\n derivationPath: string;\n}\n\n// NFT Types\nexport interface NFTMetadata {\n name: string;\n description: string;\n image: string;\n attributes?: Array<{ trait_type: string; value: string | number }>;\n royaltyBps: number;\n}\n\nexport interface LazyMintVoucher {\n tokenId: string;\n uri: string;\n creator: string;\n royaltyBps: number;\n deadline: number;\n signature: string;\n}\n\nexport interface NFT {\n tokenId: string;\n contractAddress: string;\n owner: string;\n creator: string;\n uri: string;\n metadata?: NFTMetadata;\n isLazyMinted: boolean;\n}\n\nexport interface ListingParams {\n tokenId: string;\n price: bigint;\n paymentToken: string;\n duration: number;\n}\n\n// Tip Types\nexport interface TipData {\n recipient: string;\n amount: bigint;\n token: string;\n message?: string;\n}\n\nexport interface TipResult {\n txHash: string;\n tipId: string;\n recipient: string;\n amount: bigint;\n platformFee: bigint;\n timestamp: number;\n}\n\nexport interface TipStats {\n totalReceived: bigint;\n tipCount: number;\n uniqueTippers: number;\n}\n\n// Subscription Types\nexport interface SubscriptionPlan {\n planId?: string;\n name: string;\n description: string;\n price: bigint;\n paymentToken: string;\n duration: number;\n perks: string[];\n maxSubscribers?: number;\n nftBadge: boolean;\n}\n\nexport interface Subscription {\n subscriptionId: string;\n planId: string;\n creator: string;\n subscriber: string;\n startTime: number;\n endTime: number;\n autoRenew: boolean;\n status: 'active' | 'expired' | 'cancelled';\n}\n\n// Payout Types\nexport interface EarningsBreakdown {\n tips: bigint;\n subscriptions: bigint;\n nftSales: bigint;\n royalties: bigint;\n total: bigint;\n}\n\nexport interface RevenueSplit {\n recipient: string;\n basisPoints: number;\n}\n\n// Swap Types\nexport interface SwapQuote {\n tokenIn: string;\n tokenOut: string;\n amountIn: bigint;\n amountOut: bigint;\n priceImpact: number;\n route: string[];\n estimatedGas: bigint;\n}\n\nexport interface SwapParams {\n tokenIn: string;\n tokenOut: string;\n amountIn: bigint;\n minAmountOut: bigint;\n deadline: number;\n}\n\n// Error Types\nexport type ZubariErrorCode =\n | 'TX_FAILED'\n | 'AUTH_EXPIRED'\n | 'RPC_ERROR'\n | 'VOUCHER_EXPIRED'\n | 'SLIPPAGE_ERROR'\n | 'RATE_LIMITED'\n | 'UPLOAD_ERROR'\n | 'INSUFFICIENT_FUNDS'\n | 'INVALID_SIGNATURE'\n | 'UNSUPPORTED_NETWORK'\n | 'UNKNOWN_ERROR';\n\nexport class ZubariError extends Error {\n constructor(\n public readonly code: ZubariErrorCode,\n message: string,\n public readonly details?: unknown\n ) {\n super(message);\n this.name = 'ZubariError';\n }\n}\n","/**\n * React hooks for WalletManager\n *\n * These hooks provide a React-friendly interface to the WalletManager class.\n * They handle state management, loading states, and error handling.\n */\n\nimport { useState, useCallback, useEffect, useMemo } from 'react';\nimport {\n WalletManager,\n SUPPORTED_CHAINS,\n type WalletState,\n type WalletManagerConfig,\n type ChainBalance,\n type MultiChainAddresses,\n} from '../wallet';\nimport type { NetworkType } from '../types';\n\nexport interface UseWalletManagerOptions extends WalletManagerConfig {\n autoCheckWallet?: boolean;\n}\n\nexport interface UseWalletManagerReturn {\n // State\n state: WalletState;\n isLoading: boolean;\n error: string | null;\n\n // Basic Actions\n createWallet: (password: string) => Promise<{ seed: string; address: string }>;\n importWallet: (seed: string, password: string) => Promise<void>;\n unlock: (password: string) => Promise<void>;\n lock: () => void;\n deleteWallet: () => Promise<void>;\n fetchBalance: () => Promise<string>;\n\n // Multi-chain Actions\n selectedChain: NetworkType;\n setSelectedChain: (chain: NetworkType) => void;\n chainBalances: ChainBalance[];\n fetchAllBalances: () => Promise<ChainBalance[]>;\n getAddressForChain: (chain: NetworkType) => string | null;\n getAllAddresses: () => Partial<MultiChainAddresses>;\n supportedChains: NetworkType[];\n\n // Utilities\n hasWallet: () => Promise<boolean>;\n getSeed: () => string | null;\n manager: WalletManager;\n}\n\n/**\n * React hook for managing a WDK wallet with multi-chain support\n */\nexport function useWalletManager(\n options: UseWalletManagerOptions = {}\n): UseWalletManagerReturn {\n const { autoCheckWallet = true, ...config } = options;\n\n // Create manager instance (memoized)\n const manager = useMemo(() => new WalletManager(config), [\n config.network,\n config.rpcUrl,\n ]);\n\n // State\n const [state, setState] = useState<WalletState>({\n isInitialized: false,\n isLocked: true,\n address: null,\n balance: null,\n });\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [selectedChain, setSelectedChainState] = useState<NetworkType>('ethereum');\n const [chainBalances, setChainBalances] = useState<ChainBalance[]>([]);\n\n // Update state from manager\n const updateState = useCallback(() => {\n setState(manager.getExtendedState());\n }, [manager]);\n\n // Check if wallet exists on mount\n useEffect(() => {\n if (autoCheckWallet) {\n manager.hasWallet().then((exists) => {\n if (exists) {\n setState((prev) => ({\n ...prev,\n isInitialized: true,\n isLocked: true,\n }));\n }\n });\n }\n }, [manager, autoCheckWallet]);\n\n // Create new wallet\n const createWallet = useCallback(\n async (password: string) => {\n setIsLoading(true);\n setError(null);\n try {\n // Initialize storage for web\n await manager.initializeStorage(password);\n const result = await manager.createWallet(password);\n // Derive addresses for all chains using Tether WDK (async)\n // Falls back to sync derivation if WDK is not available\n try {\n await manager.deriveAllAddressesAsync();\n } catch {\n manager.deriveAllAddresses();\n }\n updateState();\n return result;\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Failed to create wallet';\n setError(message);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [manager, updateState]\n );\n\n // Import existing wallet\n const importWallet = useCallback(\n async (seed: string, password: string) => {\n setIsLoading(true);\n setError(null);\n try {\n await manager.initializeStorage(password);\n await manager.importWallet(seed, password);\n // Derive addresses for all chains using Tether WDK (async)\n try {\n await manager.deriveAllAddressesAsync();\n } catch {\n manager.deriveAllAddresses();\n }\n updateState();\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Failed to import wallet';\n setError(message);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [manager, updateState]\n );\n\n // Unlock wallet\n const unlock = useCallback(\n async (password: string) => {\n setIsLoading(true);\n setError(null);\n try {\n await manager.initializeStorage(password);\n await manager.unlock(password);\n // Derive addresses for all chains using Tether WDK (async)\n try {\n await manager.deriveAllAddressesAsync();\n } catch {\n manager.deriveAllAddresses();\n }\n updateState();\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Invalid password';\n setError(message);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [manager, updateState]\n );\n\n // Lock wallet\n const lock = useCallback(() => {\n manager.lock();\n setChainBalances([]);\n updateState();\n }, [manager, updateState]);\n\n // Delete wallet\n const deleteWallet = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n try {\n await manager.deleteWallet();\n setChainBalances([]);\n setState({\n isInitialized: false,\n isLocked: true,\n address: null,\n balance: null,\n });\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Failed to delete wallet';\n setError(message);\n throw err;\n } finally {\n setIsLoading(false);\n }\n }, [manager]);\n\n // Fetch balance (for selected chain)\n const fetchBalance = useCallback(async () => {\n setIsLoading(true);\n // Don't clear error here - balance fetch errors shouldn't clear previous errors\n try {\n const balance = await manager.fetchBalance();\n setState((prev) => ({ ...prev, balance }));\n return balance;\n } catch (err) {\n // Log warning but don't throw - balance fetch errors shouldn't block UI\n console.warn('Failed to fetch balance:', err);\n // Return '0' instead of throwing to not block wallet operations\n setState((prev) => ({ ...prev, balance: '0' }));\n return '0';\n } finally {\n setIsLoading(false);\n }\n }, [manager]);\n\n // Fetch all chain balances\n const fetchAllBalances = useCallback(async () => {\n setIsLoading(true);\n // Don't clear error here - balance fetch errors shouldn't clear previous errors\n try {\n const balances = await manager.fetchAllBalances();\n setChainBalances(balances);\n return balances;\n } catch (err) {\n // Log warning but don't throw - balance fetch errors shouldn't block UI\n console.warn('Failed to fetch all balances:', err);\n // Return empty array instead of throwing\n return [];\n } finally {\n setIsLoading(false);\n }\n }, [manager]);\n\n // Set selected chain\n const setSelectedChain = useCallback((chain: NetworkType) => {\n manager.setSelectedChain(chain);\n setSelectedChainState(chain);\n }, [manager]);\n\n // Get address for chain\n const getAddressForChain = useCallback(\n (chain: NetworkType) => manager.getAddressForChain(chain),\n [manager]\n );\n\n // Get all addresses\n const getAllAddresses = useCallback(\n () => manager.getAllAddresses(),\n [manager]\n );\n\n // Check if wallet exists\n const hasWallet = useCallback(() => manager.hasWallet(), [manager]);\n\n // Get seed (only if unlocked)\n const getSeed = useCallback(() => manager.getSeed(), [manager]);\n\n return {\n state,\n isLoading,\n error,\n createWallet,\n importWallet,\n unlock,\n lock,\n deleteWallet,\n fetchBalance,\n // Multi-chain\n selectedChain,\n setSelectedChain,\n chainBalances,\n fetchAllBalances,\n getAddressForChain,\n getAllAddresses,\n supportedChains: SUPPORTED_CHAINS,\n // Utilities\n hasWallet,\n getSeed,\n manager,\n };\n}\n","/**\n * Utility functions for wallet operations\n */\n\n/**\n * Format address for display (truncate middle)\n */\nexport function formatAddress(address: string, chars: number = 4): string {\n if (!address || address.length < 10) return address;\n return `${address.slice(0, chars + 2)}...${address.slice(-chars)}`;\n}\n\n/**\n * Format balance for display\n */\nexport function formatBalance(\n balance: bigint,\n decimals: number = 18,\n precision: number = 4\n): string {\n const divisor = BigInt(10 ** decimals);\n const integerPart = balance / divisor;\n const fractionalPart = balance % divisor;\n\n const fractionalStr = fractionalPart\n .toString()\n .padStart(decimals, '0')\n .slice(0, precision);\n\n return `${integerPart}.${fractionalStr}`;\n}\n\n/**\n * Check if string is a valid Ethereum address\n */\nexport function isValidAddress(address: string): boolean {\n return /^0x[a-fA-F0-9]{40}$/.test(address);\n}\n\n/**\n * Normalize an Ethereum address to checksum format\n */\nexport function normalizeAddress(address: string): string {\n if (!isValidAddress(address)) {\n throw new Error('Invalid Ethereum address');\n }\n return address.toLowerCase();\n}\n"]}
|