@zubari/sdk 0.1.2 → 0.1.4
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 +3112 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3110 -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 +2704 -3
- package/dist/react/index.js.map +1 -1
- package/dist/react/index.mjs +2704 -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 +2705 -2
- package/dist/wallet/index.js.map +1 -1
- package/dist/wallet/index.mjs +2705 -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/react/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/config/networks.ts","../../src/security/KeyManager.ts","../../src/storage/SecureStorage.ts","../../src/services/WdkApiClient.ts","../../src/services/WdkService.ts","../../src/wallet/WalletManager.ts","../../src/react/useWalletManager.ts"],"names":["DERIVATION_PATHS","Wallet","HDNodeWallet","mainnet","sepolia","createPublicClient","http","viemFormatEther","useMemo","useState","useCallback","useEffect"],"mappings":"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","file":"index.js","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","/**\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","/**\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"]}
|
|
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/security/KeyManager.ts","../../src/storage/SecureStorage.ts","../../src/services/WdkApiClient.ts","../../src/services/WdkService.ts","../../src/services/BrowserAddressDerivation.ts","../../src/wallet/WalletManager.ts","../../src/react/useWalletManager.ts"],"names":["exports","crypto","i","j","sha256","DERIVATION_PATHS","HDNodeWallet","mnemonicToSeedSync","HDKey","ripemd160","bech32","Wallet","mainnet","sepolia","createPublicClient","http","viemFormatEther","useMemo","useState","useCallback","useEffect"],"mappings":"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AAE,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,G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AY,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;AA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","file":"index.js","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","/**\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 } else if (chain === 'bitcoin') {\n // Bitcoin: Use Blockstream API\n const baseUrl = this.config.network === 'mainnet'\n ? 'https://blockstream.info/api'\n : 'https://blockstream.info/testnet/api';\n\n try {\n const response = await fetch(`${baseUrl}/address/${address}`, {\n headers: { 'Accept': 'application/json' },\n });\n\n if (response.ok) {\n const data = await response.json();\n // Calculate balance from chain_stats and mempool_stats\n // funded_txo_sum = total received, spent_txo_sum = total spent\n const chainFunded = data.chain_stats?.funded_txo_sum || 0;\n const chainSpent = data.chain_stats?.spent_txo_sum || 0;\n const mempoolFunded = data.mempool_stats?.funded_txo_sum || 0;\n const mempoolSpent = data.mempool_stats?.spent_txo_sum || 0;\n\n // Total balance in satoshis\n const satoshis = (chainFunded - chainSpent) + (mempoolFunded - mempoolSpent);\n // Convert to BTC (1 BTC = 100,000,000 satoshis)\n balance = (satoshis / 100_000_000).toFixed(8);\n }\n } catch (error) {\n console.warn(`Failed to fetch ${chain} balance:`, error);\n // Balance remains '0' on error\n }\n } else if (chain === 'solana') {\n // Solana: Use public RPC API\n const rpcUrl = this.config.network === 'mainnet'\n ? 'https://api.mainnet-beta.solana.com'\n : 'https://api.devnet.solana.com';\n\n try {\n const response = await fetch(rpcUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: 1,\n method: 'getBalance',\n params: [address],\n }),\n });\n\n if (response.ok) {\n const data = await response.json();\n if (data.result?.value !== undefined) {\n // Convert lamports to SOL (1 SOL = 1,000,000,000 lamports)\n balance = (data.result.value / 1_000_000_000).toFixed(9);\n }\n }\n } catch (error) {\n console.warn(`Failed to fetch ${chain} balance:`, error);\n }\n } else if (chain === 'tron') {\n // TRON: Use TronGrid API\n const baseUrl = this.config.network === 'mainnet'\n ? 'https://api.trongrid.io'\n : 'https://api.shasta.trongrid.io';\n\n try {\n const response = await fetch(`${baseUrl}/v1/accounts/${address}`, {\n headers: { 'Accept': 'application/json' },\n });\n\n if (response.ok) {\n const data = await response.json();\n if (data.data?.[0]?.balance !== undefined) {\n // Balance is in SUN (1 TRX = 1,000,000 SUN)\n balance = (data.data[0].balance / 1_000_000).toFixed(6);\n }\n }\n } catch (error) {\n console.warn(`Failed to fetch ${chain} balance:`, error);\n }\n }\n // TODO: Implement balance fetching for remaining chains\n // - TON: Use toncenter API\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","/**\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"]}
|