@enclave-hq/wallet-sdk 1.2.3 → 1.2.5

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/types.ts","../src/core/errors.ts","../src/adapters/base/wallet-adapter.ts","../src/utils/address/universal-address.ts","../src/adapters/tron/wallet-connect.ts"],"names":["ChainUtilsChainType","EventEmitter","WalletConnectChainID","WalletConnectWallet"],"mappings":"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","file":"tron.js","sourcesContent":["/**\n * Core type definitions\n */\n\nimport { ChainType as ChainUtilsChainType } from '@enclave-hq/chain-utils'\n\n// ========== Enumerations ==========\n\n/**\n * Chain type (re-exported from chain-utils)\n */\nexport const ChainType = ChainUtilsChainType\nexport type ChainType = ChainUtilsChainType\n\n/**\n * Wallet Types\n */\nexport enum WalletType {\n METAMASK = 'metamask',\n WALLETCONNECT = 'walletconnect',\n COINBASE_WALLET = 'coinbase-wallet',\n TRONLINK = 'tronlink',\n WALLETCONNECT_TRON = 'walletconnect-tron',\n PRIVATE_KEY = 'private-key',\n // Deep Link (通用深度链接,与 WalletConnect 同级)\n DEEP_LINK_EVM = 'deep-link-evm',\n DEEP_LINK_TRON = 'deep-link-tron',\n}\n\n/**\n * Wallet States\n */\nexport enum WalletState {\n DISCONNECTED = 'disconnected',\n CONNECTING = 'connecting',\n CONNECTED = 'connected',\n ERROR = 'error',\n}\n\n// ========== Account Related ==========\n\n/**\n * Universal Address (chain-agnostic address)\n * Format: \"chainId:address\"\n */\nexport type UniversalAddress = string\n\n/**\n * Account Information\n */\nexport interface Account {\n /** Universal Address (chainId:address) */\n universalAddress: UniversalAddress\n /** Native address (e.g., 0x... or T...) */\n nativeAddress: string\n /** Chain ID */\n chainId: number\n /** Chain Type */\n chainType: ChainType\n /** Whether this is an active account */\n isActive: boolean\n /** Account balance (optional) */\n balance?: string\n /** Account name (optional) */\n name?: string\n}\n\n// ========== Signer Interface ==========\n\n/**\n * Signer interface\n * Compatible with Enclave SDK's ISigner interface\n * Provides a unified interface for signing operations\n * \n * Note: The signer should handle the appropriate signature standard:\n * - EIP-191 for EVM chains\n * - TIP-191 for TRON\n * - Other standards for other chains\n */\nexport interface ISigner {\n /**\n * Sign a message (raw message string, not hash)\n * @param message - Raw message string to sign\n * The signer should handle the appropriate signature standard\n * @returns Signature (hex string with 0x prefix)\n */\n signMessage(message: string): Promise<string>;\n\n /**\n * Get the signer's address\n * @returns Address (hex string with 0x prefix for EVM, Base58 for TRON)\n */\n getAddress(): Promise<string>;\n}\n\n// ========== Adapter Related ==========\n\n/**\n * 钱包适配器接口\n * Extends ISigner to provide unified signing interface\n */\nexport interface IWalletAdapter extends ISigner {\n // 元数据\n readonly type: WalletType\n readonly chainType: ChainType\n readonly name: string\n readonly icon?: string\n \n // 状态\n state: WalletState\n currentAccount: Account | null\n \n // 连接管理\n connect(chainId?: number | number[]): Promise<Account>\n disconnect(): Promise<void>\n isAvailable(): Promise<boolean>\n isConnected(): boolean\n \n // 签名\n signMessage(message: string): Promise<string>\n signTransaction?(transaction: Transaction): Promise<string>\n signTypedData?(typedData: any): Promise<string>\n \n // 链切换(仅 EVM 支持)\n switchChain?(chainId: number): Promise<void>\n addChain?(chainConfig: AddChainParams): Promise<void>\n \n // 账户切换(弹出钱包账户选择界面)\n requestSwitchAccount?(targetAddress?: string): Promise<Account>\n \n // 合约调用\n readContract?<T = any>(params: ContractReadParams): Promise<T>\n writeContract?(params: ContractWriteParams): Promise<string>\n estimateGas?(params: ContractWriteParams): Promise<bigint>\n waitForTransaction?(txHash: string, confirmations?: number): Promise<TransactionReceipt>\n \n // Provider 访问\n getProvider(): any\n getSigner?(): any\n \n // 事件监听\n on(event: string, handler: (...args: any[]) => void): void\n off(event: string, handler: (...args: any[]) => void): void\n removeAllListeners(event?: string): void\n}\n\n/**\n * 合约读取参数\n */\nexport interface ContractReadParams {\n address: string\n abi: any[]\n functionName: string\n args?: any[]\n}\n\n/**\n * 合约写入参数\n */\nexport interface ContractWriteParams extends ContractReadParams {\n value?: string // 发送的原生代币数量(wei)\n gas?: number\n gasPrice?: string // Legacy gas price (for pre-EIP-1559 networks)\n maxFeePerGas?: string // EIP-1559: Maximum fee per gas (in wei)\n maxPriorityFeePerGas?: string // EIP-1559: Maximum priority fee per gas (in wei)\n}\n\n/**\n * EVM 交易参数\n */\nexport interface EVMTransaction {\n to: string\n value?: string | bigint\n data?: string\n gas?: string | bigint\n gasPrice?: string | bigint\n maxFeePerGas?: string | bigint\n maxPriorityFeePerGas?: string | bigint\n nonce?: number\n chainId?: number\n}\n\n/**\n * Tron 交易参数\n */\nexport interface TronTransaction {\n // Tron 交易格式\n txID?: string\n raw_data?: any\n raw_data_hex?: string\n visible?: boolean\n}\n\n/**\n * 通用交易类型\n */\nexport type Transaction = EVMTransaction | TronTransaction\n\n/**\n * 交易回执\n */\nexport interface TransactionReceipt {\n transactionHash: string\n blockNumber: number\n blockHash: string\n from: string\n to?: string\n status: 'success' | 'failed'\n gasUsed: string\n effectiveGasPrice?: string\n logs?: any[]\n}\n\n/**\n * 添加链参数\n */\nexport interface AddChainParams {\n chainId: number\n chainName: string\n nativeCurrency: {\n name: string\n symbol: string\n decimals: number\n }\n rpcUrls: string[]\n blockExplorerUrls?: string[]\n iconUrls?: string[]\n}\n\n// ========== WalletManager 相关 ==========\n\n/**\n * WalletManager 配置\n */\nexport interface WalletManagerConfig {\n /** 是否启用自动存储(localStorage) */\n enableStorage?: boolean\n /** 存储键前缀 */\n storagePrefix?: string\n /** 默认链 ID(EVM) */\n defaultChainId?: number\n /** 默认 Tron 链 ID */\n defaultTronChainId?: number\n /** WalletConnect 项目 ID */\n walletConnectProjectId?: string\n}\n\n/**\n * 已连接的钱包信息\n */\nexport interface ConnectedWallet {\n /** 账户信息 */\n account: Account\n /** 钱包类型 */\n walletType: WalletType\n /** Chain Type */\n chainType: ChainType\n /** 是否为主钱包 */\n isPrimary: boolean\n /** 是否支持链切换 */\n canSwitchChain: boolean\n /** 适配器实例 */\n adapter: IWalletAdapter\n}\n\n// ========== 事件相关 ==========\n\n/**\n * WalletManager 事件类型\n */\nexport interface WalletManagerEvents extends Record<string, (...args: any[]) => void> {\n // 主钱包事件\n accountChanged: (account: Account | null) => void\n chainChanged: (chainId: number, account: Account) => void\n disconnected: () => void\n \n // 任意钱包事件\n walletAccountChanged: (chainType: ChainType, account: Account | null, isPrimary: boolean) => void\n walletChainChanged: (chainType: ChainType, chainId: number, account: Account, isPrimary: boolean) => void\n walletDisconnected: (chainType: ChainType, isPrimary: boolean) => void\n \n // 主钱包切换\n primaryWalletSwitched: (newPrimary: Account, oldPrimary: Account | null, chainType: ChainType) => void\n \n // 错误\n error: (error: Error) => void\n}\n\n// ========== 存储相关 ==========\n\n/**\n * 存储的钱包历史记录\n */\nexport interface WalletHistoryRecord {\n universalAddress: UniversalAddress\n nativeAddress: string\n chainId: number\n chainType: ChainType\n walletType: WalletType\n lastConnected: number // 时间戳\n name?: string\n}\n\n/**\n * 存储的数据结构\n */\nexport interface StorageData {\n /** 当前 Universal Address */\n current: UniversalAddress | null\n /** 主钱包类型(用于自动恢复连接) */\n primaryWalletType?: WalletType\n /** 主钱包的 ChainID(用于自动恢复连接) */\n primaryChainId?: number\n /** 历史记录 */\n history: WalletHistoryRecord[]\n}\n\n// ========== 钱包检测 ==========\n\n/**\n * 钱包可用性信息\n */\nexport interface WalletAvailability {\n walletType: WalletType\n chainType: ChainType\n isAvailable: boolean\n downloadUrl?: string\n detected: boolean\n}\n\n","/**\n * Error Type Definitions\n */\n\n/**\n * Base Error Class\n */\nexport class WalletSDKError extends Error {\n constructor(\n message: string,\n public readonly code: string,\n public readonly details?: any\n ) {\n super(message)\n this.name = 'WalletSDKError'\n Object.setPrototypeOf(this, WalletSDKError.prototype)\n }\n}\n\n/**\n * Wallet Not Connected Error\n */\nexport class WalletNotConnectedError extends WalletSDKError {\n constructor(walletType?: string) {\n super(\n walletType\n ? `Wallet ${walletType} is not connected`\n : 'No wallet is connected',\n 'WALLET_NOT_CONNECTED',\n { walletType }\n )\n this.name = 'WalletNotConnectedError'\n }\n}\n\n/**\n * Wallet Not Available Error\n */\nexport class WalletNotAvailableError extends WalletSDKError {\n constructor(walletType: string, downloadUrl?: string) {\n super(\n `Wallet ${walletType} is not available. Please install it first.`,\n 'WALLET_NOT_AVAILABLE',\n { walletType, downloadUrl }\n )\n this.name = 'WalletNotAvailableError'\n }\n}\n\n/**\n * Connection Rejected Error\n */\nexport class ConnectionRejectedError extends WalletSDKError {\n constructor(walletType: string) {\n super(\n `Connection to ${walletType} was rejected by user`,\n 'CONNECTION_REJECTED',\n { walletType }\n )\n this.name = 'ConnectionRejectedError'\n }\n}\n\n/**\n * Chain Not Supported Error\n */\nexport class ChainNotSupportedError extends WalletSDKError {\n constructor(chainId: number, walletType: string) {\n super(\n `Chain ${chainId} is not supported by ${walletType}`,\n 'CHAIN_NOT_SUPPORTED',\n { chainId, walletType }\n )\n this.name = 'ChainNotSupportedError'\n }\n}\n\n/**\n * Signature Rejected Error\n */\nexport class SignatureRejectedError extends WalletSDKError {\n constructor(message?: string) {\n super(\n message || 'Signature was rejected by user',\n 'SIGNATURE_REJECTED'\n )\n this.name = 'SignatureRejectedError'\n }\n}\n\n/**\n * Transaction Failed Error\n */\nexport class TransactionFailedError extends WalletSDKError {\n constructor(txHash: string, reason?: string) {\n super(\n `Transaction ${txHash} failed${reason ? `: ${reason}` : ''}`,\n 'TRANSACTION_FAILED',\n { txHash, reason }\n )\n this.name = 'TransactionFailedError'\n }\n}\n\n/**\n * Method Not Supported Error\n */\nexport class MethodNotSupportedError extends WalletSDKError {\n constructor(method: string, walletType: string) {\n super(\n `Method ${method} is not supported by ${walletType}`,\n 'METHOD_NOT_SUPPORTED',\n { method, walletType }\n )\n this.name = 'MethodNotSupportedError'\n }\n}\n\n/**\n * 配置错误\n */\nexport class ConfigurationError extends WalletSDKError {\n constructor(message: string, details?: any) {\n super(message, 'CONFIGURATION_ERROR', details)\n this.name = 'ConfigurationError'\n }\n}\n\n/**\n * 网络错误\n */\nexport class NetworkError extends WalletSDKError {\n constructor(message: string, details?: any) {\n super(message, 'NETWORK_ERROR', details)\n this.name = 'NetworkError'\n }\n}\n\n\n","/**\n * 钱包适配器基类\n */\n\nimport EventEmitter from 'eventemitter3'\nimport {\n WalletType,\n ChainType,\n WalletState,\n Account,\n IWalletAdapter,\n ContractReadParams,\n ContractWriteParams,\n TransactionReceipt,\n} from '../../core/types'\nimport { WalletNotConnectedError, MethodNotSupportedError } from '../../core/errors'\n\n/**\n * 钱包适配器基类\n */\nexport abstract class WalletAdapter extends EventEmitter implements IWalletAdapter {\n // 元数据\n abstract readonly type: WalletType\n abstract readonly chainType: ChainType\n abstract readonly name: string\n readonly icon?: string\n\n // 状态\n state: WalletState = WalletState.DISCONNECTED\n currentAccount: Account | null = null\n\n // 连接管理\n // Support both single chain ID and array of chain IDs for multi-chain support\n // Most adapters will use the first chain ID if an array is provided\n abstract connect(chainId?: number | number[]): Promise<Account>\n abstract disconnect(): Promise<void>\n abstract isAvailable(): Promise<boolean>\n \n /**\n * Check if the wallet is currently connected\n * @returns true if the wallet is connected (state is CONNECTED and has an account)\n */\n isConnected(): boolean {\n return this.state === WalletState.CONNECTED && this.currentAccount !== null\n }\n\n // 签名\n abstract signMessage(message: string): Promise<string>\n\n /**\n * Get the signer's address (implements ISigner interface)\n * Returns the native address of the current account\n */\n async getAddress(): Promise<string> {\n this.ensureConnected()\n if (!this.currentAccount) {\n throw new WalletNotConnectedError(this.type)\n }\n return this.currentAccount.nativeAddress\n }\n\n signTransaction?(_transaction: any): Promise<string> {\n throw new MethodNotSupportedError('signTransaction', this.type)\n }\n\n signTypedData?(_typedData: any): Promise<string> {\n throw new MethodNotSupportedError('signTypedData', this.type)\n }\n\n // 链切换(默认不支持)\n switchChain?(_chainId: number): Promise<void> {\n throw new MethodNotSupportedError('switchChain', this.type)\n }\n\n addChain?(_chainConfig: any): Promise<void> {\n throw new MethodNotSupportedError('addChain', this.type)\n }\n\n // 合约调用(默认不支持)\n async readContract<T = any>(_params: ContractReadParams): Promise<T> {\n throw new MethodNotSupportedError('readContract', this.type)\n }\n\n async writeContract(_params: ContractWriteParams): Promise<string> {\n throw new MethodNotSupportedError('writeContract', this.type)\n }\n\n async estimateGas(_params: ContractWriteParams): Promise<bigint> {\n throw new MethodNotSupportedError('estimateGas', this.type)\n }\n\n async waitForTransaction(_txHash: string, _confirmations?: number): Promise<TransactionReceipt> {\n throw new MethodNotSupportedError('waitForTransaction', this.type)\n }\n\n // Provider 访问\n abstract getProvider(): any\n\n getSigner?(): any {\n throw new MethodNotSupportedError('getSigner', this.type)\n }\n\n // 工具方法\n protected ensureConnected(): void {\n if (this.state !== WalletState.CONNECTED || !this.currentAccount) {\n throw new WalletNotConnectedError(this.type)\n }\n }\n\n protected setState(state: WalletState): void {\n this.state = state\n }\n\n protected setAccount(account: Account | null): void {\n this.currentAccount = account\n }\n\n protected emitAccountChanged(account: Account | null): void {\n this.emit('accountChanged', account)\n }\n\n protected emitChainChanged(chainId: number): void {\n this.emit('chainChanged', chainId)\n }\n\n protected emitDisconnected(): void {\n this.emit('disconnected')\n }\n\n protected emitError(error: Error): void {\n this.emit('error', error)\n }\n\n // EventEmitter 方法(从 EventEmitter3 继承)\n // removeAllListeners 已经由 EventEmitter 提供\n}\n\n","/**\n * Universal Address 工具\n * 格式: \"chainId:address\"\n */\n\nimport type { UniversalAddress } from '../../core/types'\n\n/**\n * 创建 Universal Address\n */\nexport function createUniversalAddress(\n chainId: number,\n address: string\n): UniversalAddress {\n return `${chainId}:${address}`\n}\n\n/**\n * 解析 Universal Address\n */\nexport function parseUniversalAddress(universalAddress: UniversalAddress): {\n chainId: number\n address: string\n} | null {\n const parts = universalAddress.split(':')\n if (parts.length !== 2) {\n return null\n }\n \n const chainId = parseInt(parts[0], 10)\n if (isNaN(chainId)) {\n return null\n }\n \n return {\n chainId,\n address: parts[1],\n }\n}\n\n/**\n * 验证 Universal Address 格式\n */\nexport function isValidUniversalAddress(universalAddress: string): boolean {\n return parseUniversalAddress(universalAddress) !== null\n}\n\n/**\n * 从 Universal Address 提取链 ID\n */\nexport function getChainIdFromUniversalAddress(\n universalAddress: UniversalAddress\n): number | null {\n const parsed = parseUniversalAddress(universalAddress)\n return parsed ? parsed.chainId : null\n}\n\n/**\n * 从 Universal Address 提取地址\n */\nexport function getAddressFromUniversalAddress(\n universalAddress: UniversalAddress\n): string | null {\n const parsed = parseUniversalAddress(universalAddress)\n return parsed ? parsed.address : null\n}\n\n/**\n * 比较两个 Universal Address 是否相同\n */\nexport function compareUniversalAddresses(\n a: UniversalAddress,\n b: UniversalAddress\n): boolean {\n return a.toLowerCase() === b.toLowerCase()\n}\n\n\n","/**\n * WalletConnect Tron Adapter\n * \n * Uses @tronweb3/walletconnect-tron official package for TRON WalletConnect support\n */\n\nimport { WalletConnectWallet, WalletConnectChainID } from '@tronweb3/walletconnect-tron'\nimport { WalletAdapter } from '../base/wallet-adapter'\nimport {\n WalletType,\n ChainType,\n WalletState,\n Account,\n ContractReadParams,\n ContractWriteParams,\n TransactionReceipt,\n} from '../../core/types'\nimport { createUniversalAddress } from '../../utils/address/universal-address'\nimport { \n ConnectionRejectedError, \n SignatureRejectedError, \n ConfigurationError,\n} from '../../core/errors'\n\n/**\n * WalletConnect Tron Adapter\n * \n * Uses the official @tronweb3/walletconnect-tron package for better compatibility\n */\nexport class WalletConnectTronAdapter extends WalletAdapter {\n readonly type = WalletType.WALLETCONNECT_TRON\n readonly chainType = ChainType.TRON\n readonly name = 'WalletConnect (Tron)'\n readonly icon = 'https://avatars.githubusercontent.com/u/37784886'\n\n private wallet: WalletConnectWallet | null = null\n private projectId: string\n private currentAddress: string | null = null\n\n // Tron 主网链 ID\n private static readonly TRON_MAINNET_CHAIN_ID = 195\n\n // Static wallet instance to avoid multiple initializations\n private static walletInstance: WalletConnectWallet | null = null\n private static walletProjectId: string | null = null\n\n constructor(projectId: string) {\n super()\n if (!projectId) {\n throw new ConfigurationError('WalletConnect projectId is required')\n }\n this.projectId = projectId\n }\n\n /**\n * Check if WalletConnect is available\n */\n async isAvailable(): Promise<boolean> {\n return typeof window !== 'undefined'\n }\n\n /**\n * Check if running in Telegram environment (Mini App or Web)\n * Both Telegram Mini App (in client) and Telegram Web (web.telegram.org) \n * provide window.Telegram.WebApp API, so they are treated the same way.\n */\n private isTelegramMiniApp(): boolean {\n if (typeof window === 'undefined') return false\n // @ts-ignore\n const tg = window.Telegram?.WebApp\n if (!tg) return false\n \n // Log platform info for debugging\n // @ts-ignore\n const platform = tg.platform || 'unknown'\n console.log('[WalletConnect Tron] Telegram environment detected:', {\n platform: platform,\n version: tg.version,\n isMiniApp: platform !== 'web', // Mini App if not web platform\n isWeb: platform === 'web', // Telegram Web if web platform\n })\n \n return true\n }\n\n /**\n * Restore session from existing wallet (for storage restoration)\n */\n async restoreSession(chainId?: number | number[]): Promise<Account | null> {\n if (typeof window === 'undefined') {\n return null\n }\n\n try {\n // For restoreSession, use first chain ID if array is provided\n const targetChainId = Array.isArray(chainId) ? (chainId[0] || WalletConnectTronAdapter.TRON_MAINNET_CHAIN_ID) : (chainId || WalletConnectTronAdapter.TRON_MAINNET_CHAIN_ID)\n\n // Initialize wallet if not already initialized (pass chainId to ensure correct network)\n if (!WalletConnectTronAdapter.walletInstance || \n WalletConnectTronAdapter.walletProjectId !== this.projectId) {\n this.initializeWallet(targetChainId)\n }\n\n this.wallet = WalletConnectTronAdapter.walletInstance\n\n if (!this.wallet) {\n return null\n }\n\n // Check if wallet is already connected\n const status = await this.wallet.checkConnectStatus()\n if (status && status.address) {\n this.currentAddress = status.address\n const account: Account = {\n universalAddress: createUniversalAddress(targetChainId, status.address),\n nativeAddress: status.address,\n chainId: targetChainId,\n chainType: ChainType.TRON,\n isActive: true,\n }\n this.setState(WalletState.CONNECTED)\n this.setAccount(account)\n this.setupEventListeners()\n return account\n }\n\n return null\n } catch (error) {\n console.debug('[WalletConnect Tron] Restore session failed:', error)\n return null\n }\n }\n\n /**\n * Initialize WalletConnect wallet instance\n * @param chainId - Optional chain ID to determine network (default: Mainnet)\n */\n private initializeWallet(chainId?: number): void {\n if (WalletConnectTronAdapter.walletInstance && \n WalletConnectTronAdapter.walletProjectId === this.projectId) {\n return\n }\n\n // Get valid URL for metadata\n // In Telegram Mini App, window.location.origin might be invalid or empty\n // Also support serveo.net and other tunnel services for development\n let appUrl = ''\n if (typeof window !== 'undefined') {\n try {\n // Try to get origin from window.location\n if (window.location && window.location.origin) {\n appUrl = window.location.origin\n } else if (window.location && window.location.href) {\n // Fallback: extract origin from href\n const url = new URL(window.location.href)\n appUrl = url.origin\n }\n } catch (error) {\n console.warn('[WalletConnect Tron] Failed to get origin from window.location:', error)\n }\n \n // Check if current URL is from serveo.net or other tunnel services\n // These URLs should be allowed in WalletConnect Cloud project settings\n if (appUrl && (\n appUrl.includes('serveo.net') ||\n appUrl.includes('loca.lt') ||\n appUrl.includes('ngrok.io') ||\n appUrl.includes('ngrok-free.app') ||\n appUrl.includes('cloudflared.io')\n )) {\n console.log('[WalletConnect Tron] Detected tunnel service URL:', appUrl)\n console.log('[WalletConnect Tron] ⚠️ Make sure this URL is added to WalletConnect Cloud project allowlist')\n }\n \n // If still empty, try to get from Telegram WebApp\n if (!appUrl) {\n // @ts-ignore\n const tg = window.Telegram?.WebApp\n if (tg && tg.initDataUnsafe?.start_param) {\n // Use a default URL if we can't determine the origin\n appUrl = 'https://enclave.network'\n } else {\n appUrl = 'https://enclave.network' // Default fallback URL\n }\n }\n } else {\n appUrl = 'https://enclave.network' // Server-side fallback\n }\n\n // Ensure URL is valid (must be https:// or http://)\n if (!appUrl || (!appUrl.startsWith('http://') && !appUrl.startsWith('https://'))) {\n appUrl = 'https://enclave.network'\n }\n\n // Valid icons array (must be valid URLs)\n const icons = [\n 'https://walletconnect.com/walletconnect-logo.svg',\n 'https://avatars.githubusercontent.com/u/37784886', // WalletConnect GitHub avatar\n ]\n\n // Determine network based on chainId\n // WalletConnectChainID.Mainnet = TRON Mainnet\n // WalletConnectChainID.Shasta = TRON Testnet (Shasta)\n // WalletConnectChainID.Nile = TRON Testnet (Nile)\n let network = WalletConnectChainID.Mainnet // Default to mainnet\n \n if (chainId !== undefined) {\n // TRON Mainnet chain ID is 195\n if (chainId === 195 || chainId === WalletConnectTronAdapter.TRON_MAINNET_CHAIN_ID) {\n network = WalletConnectChainID.Mainnet\n } else if (chainId === 201910292) {\n // TRON Testnet (Shasta)\n network = WalletConnectChainID.Shasta\n } else if (chainId === 2494104990) {\n // TRON Testnet (Nile)\n network = WalletConnectChainID.Nile\n }\n }\n\n // Log detailed metadata configuration for debugging\n const metadataInfo = {\n name: 'Enclave Wallet SDK',\n description: 'Multi-chain wallet adapter for Enclave',\n url: appUrl,\n icons: icons,\n network: network,\n chainId: chainId,\n isTelegram: this.isTelegramMiniApp(),\n projectId: this.projectId,\n urlValid: appUrl && (appUrl.startsWith('http://') || appUrl.startsWith('https://')),\n iconsValid: icons && icons.length > 0 && icons.every(icon => icon && icon.startsWith('http')),\n currentLocation: typeof window !== 'undefined' ? window.location.href : 'N/A',\n telegramPlatform: (typeof window !== 'undefined' && (window as any).Telegram?.WebApp?.platform) || 'N/A',\n }\n \n console.log('[WalletConnect Tron] Initializing with metadata:', metadataInfo)\n \n // Warn if configuration might be invalid\n if (!metadataInfo.urlValid) {\n console.warn('[WalletConnect Tron] ⚠️ Invalid URL in metadata:', appUrl)\n }\n if (!metadataInfo.iconsValid) {\n console.warn('[WalletConnect Tron] ⚠️ Invalid icons in metadata:', icons)\n }\n\n // Create new wallet instance\n // According to official docs: https://developers.tron.network/docs/walletconnect-tron\n //\n // IMPORTANT: If no wallets are registered in WalletConnect Explorer for TRON:\n // - explorerRecommendedWalletIds will have no effect (wallets not in Explorer)\n // - The AppKit will show a QR code for scanning\n // - Users can still connect by scanning the QR code with any WalletConnect-compatible wallet\n // - Deep link (wc://) may work if the wallet app supports it\n //\n // The @tronweb3/walletconnect-tron package uses createAppKit with allWallets: 'HIDE',\n // which means it only shows wallets discovered via WalletConnect Explorer API.\n // If Explorer has no TRON wallets, it will fall back to QR code display.\n //\n // Connection flow:\n // 1. If no wallets in Explorer → Shows QR code\n // 2. User scans QR code with wallet app (TokenPocket, etc.)\n // 3. Wallet app connects via WalletConnect protocol\n // 4. Connection established\n console.log('[WalletConnect Tron] Initializing wallet...', {\n network,\n chainId,\n note: 'If no wallets are in WalletConnect Explorer for TRON, QR code will be displayed for scanning',\n })\n \n WalletConnectTronAdapter.walletInstance = new WalletConnectWallet({\n network: network,\n options: {\n projectId: this.projectId,\n metadata: {\n name: 'Enclave Wallet SDK',\n description: 'Multi-chain wallet adapter for Enclave',\n url: appUrl,\n icons: icons,\n },\n },\n // Theme configuration\n themeMode: 'light',\n themeVariables: {\n '--w3m-z-index': 10000, // Ensure modal appears above Telegram UI\n },\n // Web3Modal configuration for recommended wallets\n // According to official docs: https://developers.tron.network/docs/walletconnect-tron\n // Note: If no wallets are registered in WalletConnect Explorer for TRON,\n // explorerRecommendedWalletIds will have no effect, and QR code will be shown instead.\n // @ts-ignore - web3ModalConfig is supported but may not be in TypeScript types\n web3ModalConfig: {\n themeMode: 'light',\n themeVariables: {\n '--w3m-z-index': 10000,\n },\n /**\n * Recommended Wallets are fetched from WalletConnect explore api:\n * https://walletconnect.com/explorer?type=wallet&version=2\n * \n * IMPORTANT: If wallets are not registered in Explorer for TRON, this list will be ignored.\n * The AppKit will show a QR code instead, which users can scan with any WalletConnect-compatible wallet.\n * \n * Wallet IDs (for reference, may not work if not in Explorer):\n * - TokenPocket: 20459438007b75f4f4acb98bf29aa3b800550309646d375da5fd4aac6c2a2c66\n * - TronLink: 1ae92b26df02f0abca6304df07debccd18262fdf5fe82daa81593582dac9a369\n */\n explorerRecommendedWalletIds: [\n // These IDs are kept for when wallets register in WalletConnect Explorer\n // Currently, if no TRON wallets are in Explorer, QR code will be shown\n '20459438007b75f4f4acb98bf29aa3b800550309646d375da5fd4aac6c2a2c66', // TokenPocket\n '1ae92b26df02f0abca6304df07debccd18262fdf5fe82daa81593582dac9a369', // TronLink\n '4622a2b2d6af1c9844944291e5e7351a6aa24cd7b23099efac1b2fd875da31a0', // TokenPocket (backup)\n ],\n },\n } as any)\n\n WalletConnectTronAdapter.walletProjectId = this.projectId\n }\n\n /**\n * Connect wallet\n */\n async connect(chainId?: number | number[]): Promise<Account> {\n if (typeof window === 'undefined') {\n throw new Error('WalletConnect requires a browser environment')\n }\n\n // Prevent multiple simultaneous connection attempts\n const currentState = this.state\n if (currentState === WalletState.CONNECTING) {\n console.warn('[WalletConnect Tron] Connection already in progress, waiting...')\n let attempts = 0\n while (this.state === WalletState.CONNECTING && attempts < 50) {\n await new Promise(resolve => setTimeout(resolve, 100))\n attempts++\n }\n if (this.state === WalletState.CONNECTED && this.currentAccount) {\n return this.currentAccount\n }\n if (this.state === WalletState.CONNECTING) {\n throw new Error('Connection timeout - previous connection attempt is still pending')\n }\n }\n\n // If already connected, return current account\n if (this.state === WalletState.CONNECTED && this.currentAccount) {\n return this.currentAccount\n }\n\n try {\n this.setState(WalletState.CONNECTING)\n\n // For WalletConnect Tron, use first chain ID if array is provided (single chain only)\n const targetChainId = Array.isArray(chainId) ? (chainId[0] || WalletConnectTronAdapter.TRON_MAINNET_CHAIN_ID) : (chainId || WalletConnectTronAdapter.TRON_MAINNET_CHAIN_ID)\n\n // Initialize wallet if needed (pass chainId to ensure correct network)\n if (!WalletConnectTronAdapter.walletInstance || \n WalletConnectTronAdapter.walletProjectId !== this.projectId) {\n this.initializeWallet(targetChainId)\n }\n\n this.wallet = WalletConnectTronAdapter.walletInstance\n\n if (!this.wallet) {\n throw new Error('Failed to initialize WalletConnect wallet')\n }\n\n // Get network info for error reporting\n let network = WalletConnectChainID.Mainnet\n if (targetChainId === 195) {\n network = WalletConnectChainID.Mainnet\n } else if (targetChainId === 201910292) {\n network = WalletConnectChainID.Shasta\n } else if (targetChainId === 2494104990) {\n network = WalletConnectChainID.Nile\n }\n\n // Connect to wallet\n // In Telegram Mini App, this may trigger a deep link (wc://) to open the wallet app\n // The official @tronweb3/walletconnect-tron package handles this automatically\n // However, \"Invalid App Configuration\" error may occur if:\n // 1. Metadata URL/icons are invalid\n // 2. Deep link (wc://) cannot be handled in Telegram Mini App\n // 3. Network/chainId mismatch\n let address: string\n try {\n console.log('[WalletConnect Tron] Attempting to connect...', {\n network,\n chainId: targetChainId,\n isTelegram: this.isTelegramMiniApp(),\n projectId: this.projectId,\n })\n \n const result = await this.wallet.connect()\n address = result.address\n\n if (!address) {\n throw new ConnectionRejectedError(this.type)\n }\n \n // Log connection success for debugging\n console.log('[WalletConnect Tron] Connection successful:', {\n address,\n network,\n chainId: targetChainId,\n isTelegram: this.isTelegramMiniApp(),\n })\n } catch (error: any) {\n const errorMessage = error.message || String(error)\n const errorCode = error.code || error.error?.code\n const origin = (typeof window !== 'undefined' && window.location) ? window.location.origin : ''\n \n // Extract more detailed error information\n let detailedError = errorMessage\n if (error.error) {\n if (typeof error.error === 'string') {\n detailedError = error.error\n } else if (error.error.message) {\n detailedError = error.error.message\n } else if (error.error.data) {\n detailedError = JSON.stringify(error.error.data)\n }\n }\n \n // Check for common error patterns\n const isNoWalletFound = \n errorMessage.includes('没有找到支持的钱包') ||\n errorMessage.includes('No matching wallet') ||\n errorMessage.includes('No wallet found') ||\n errorMessage.includes('找不到钱包') ||\n errorMessage.includes('not found') ||\n errorMessage.includes('no matching')\n \n const isTimeout = \n errorMessage.includes('timeout') ||\n errorMessage.includes('超时') ||\n errorCode === 'TIMEOUT'\n \n const isRejected = \n errorMessage.includes('rejected') ||\n errorMessage.includes('拒绝') ||\n errorCode === 4001\n\n // WalletConnect relay reject: origin not allowlisted for this projectId\n const isOriginNotAllowed =\n errorCode === 3000 ||\n /origin not allowed/i.test(errorMessage) ||\n /Unauthorized:\\s*origin not allowed/i.test(errorMessage)\n \n // Get current metadata configuration for error reporting\n const currentMetadata = this.wallet ? {\n // Try to get metadata from wallet instance if available\n projectId: this.projectId,\n network: network,\n } : null\n \n // Build detailed error information\n const errorDetails = {\n error: errorMessage,\n detailedError: detailedError,\n code: errorCode,\n isTelegram: this.isTelegramMiniApp(),\n network: network,\n chainId: targetChainId,\n projectId: this.projectId,\n metadata: currentMetadata,\n // Get URL from window.location if available\n currentUrl: typeof window !== 'undefined' ? window.location.href : 'N/A',\n telegramPlatform: (typeof window !== 'undefined' && (window as any).Telegram?.WebApp?.platform) || 'N/A',\n errorType: isNoWalletFound ? 'NO_WALLET_FOUND' : \n isTimeout ? 'TIMEOUT' : \n isRejected ? 'REJECTED' : \n 'UNKNOWN',\n }\n \n console.error('[WalletConnect Tron] Connection error - Full details:', errorDetails)\n console.error('[WalletConnect Tron] Error object:', error)\n console.error('[WalletConnect Tron] Error stack:', error.stack)\n \n // Handle \"No wallet found\" error specifically\n if (isNoWalletFound) {\n const noWalletErrorDetails = [\n `\\n=== WalletConnect Tron: No Matching Wallet Found ===`,\n `Error: ${errorMessage}`,\n `Detailed: ${detailedError}`,\n `Code: ${errorCode || 'N/A'}`,\n ``,\n `Environment:`,\n ` - Telegram Mini App: ${this.isTelegramMiniApp() ? 'Yes' : 'No'}`,\n ` - Platform: ${errorDetails.telegramPlatform}`,\n ` - Current URL: ${errorDetails.currentUrl}`,\n ``,\n `Configuration:`,\n ` - Project ID: ${this.projectId ? 'Set' : 'Missing'}`,\n ` - Network: ${network}`,\n ` - Chain ID: ${targetChainId}`,\n ` - Metadata URL: ${typeof window !== 'undefined' ? window.location.origin : 'N/A'}`,\n ``,\n `Possible Causes:`,\n ` 1. No WalletConnect-compatible wallet (TokenPocket, etc.) installed on device`,\n ` 2. Wallet app not opened or not responding to deep link (wc://)`,\n ` 3. Deep link handling issue in Telegram Mini App environment`,\n ` 4. WalletConnect session timeout (user took too long to approve)`,\n ` 5. Network connectivity issue preventing WalletConnect relay connection`,\n ``,\n `Solutions:`,\n ` 1. Ensure TokenPocket or other WalletConnect-compatible wallet is installed`,\n ` 2. Try opening the wallet app manually before connecting`,\n ` 3. In Telegram Mini App, ensure the deep link popup is not blocked`,\n ` 4. Try connecting again (may need to wait a few seconds)`,\n ` 5. Check network connection and WalletConnect relay server accessibility`,\n ``,\n `For more details, see the error object logged above.`,\n `===========================================\\n`,\n ].join('\\n')\n \n console.error(noWalletErrorDetails)\n \n throw new ConnectionRejectedError(\n `WalletConnect Tron: 没有找到支持的钱包 (No matching wallet found)\\n\\n` +\n `可能的原因:\\n` +\n `1. 设备上未安装支持 WalletConnect 的钱包(如 TokenPocket)\\n` +\n `2. 钱包应用未打开或未响应 deep link (wc://)\\n` +\n `3. 在 Telegram Mini App 中,deep link 处理可能有问题\\n` +\n `4. 连接超时(用户未及时批准)\\n` +\n `5. 网络连接问题\\n\\n` +\n `解决方案:\\n` +\n `1. 确保已安装 TokenPocket 或其他支持 WalletConnect 的钱包\\n` +\n `2. 尝试手动打开钱包应用后再连接\\n` +\n `3. 在 Telegram Mini App 中,确保 deep link 弹窗未被阻止\\n` +\n `4. 稍等几秒后重试连接\\n` +\n `5. 检查网络连接和 WalletConnect 中继服务器可访问性\\n\\n` +\n `详细错误信息请查看控制台日志。`\n )\n }\n \n // Check if it's a configuration error (often related to deep links in Telegram Mini App)\n if (errorMessage.includes('Invalid') || \n errorMessage.includes('Configuration') ||\n errorMessage.includes('App Config') ||\n errorMessage.includes('Invalid App')) {\n \n // Build detailed configuration error message\n const configErrorDetails = [\n `\\n=== WalletConnect Tron Configuration Error ===`,\n `Error: ${errorMessage}`,\n `Detailed: ${detailedError}`,\n `Code: ${errorCode || 'N/A'}`,\n `\\nEnvironment:`,\n ` - Telegram Mini App: ${this.isTelegramMiniApp() ? 'Yes' : 'No'}`,\n ` - Platform: ${errorDetails.telegramPlatform}`,\n ` - Current URL: ${errorDetails.currentUrl}`,\n `\\nConfiguration:`,\n ` - Project ID: ${this.projectId ? 'Set' : 'Missing'}`,\n ` - Network: ${network}`,\n ` - Chain ID: ${targetChainId}`,\n `\\nPossible Causes:`,\n ` 1. Deep link (wc://) handling issue in Telegram Mini App`,\n ` 2. Invalid metadata configuration (URL or icons not accessible)`,\n ` 3. Network/chainId mismatch`,\n ` 4. WalletConnect project ID not configured correctly`,\n ` 5. Domain not added to WalletConnect Cloud allowlist`,\n `\\nPlease check:`,\n ` - WalletConnect Project ID is valid and active`,\n ` - Domain is added to WalletConnect Cloud allowlist (for serveo.net, etc.)`,\n ` - Metadata URL is accessible: Check console for metadata logs`,\n ` - Icons are accessible: Check console for icon URLs`,\n ` - Network matches chainId: Expected ${network} for chainId ${targetChainId}`,\n `\\nFor more details, see the error object logged above.`,\n `===========================================\\n`,\n ].join('\\n')\n \n console.error(configErrorDetails)\n \n throw new ConfigurationError(\n `WalletConnect Tron connection failed: ${errorMessage}\\n\\n` +\n `Configuration Details:\\n` +\n `- Telegram Mini App: ${this.isTelegramMiniApp() ? 'Yes' : 'No'}\\n` +\n `- Platform: ${errorDetails.telegramPlatform}\\n` +\n `- Origin: ${origin || '(unknown)'}\\n` +\n `- Project ID: ${this.projectId ? 'Set' : 'Missing'}\\n` +\n `- Network: ${network}\\n` +\n `- Chain ID: ${targetChainId}\\n\\n` +\n `This \"Invalid App Configuration\" error may be caused by:\\n` +\n `1. Deep link (wc://) handling issue in Telegram Mini App\\n` +\n `2. Invalid metadata configuration (URL or icons)\\n` +\n `3. Network/chainId mismatch\\n` +\n `4. Domain not added to WalletConnect Cloud allowlist\\n\\n` +\n `Please check the console for detailed error information.`\n )\n }\n\n // Handle WalletConnect Cloud origin allowlist errors with a very explicit action item\n if (isOriginNotAllowed) {\n throw new ConfigurationError(\n `WalletConnect Tron relayer rejected this origin (code 3000: Unauthorized: origin not allowed).\\n\\n` +\n `Fix:\\n` +\n `1) Open WalletConnect Cloud → your project (${this.projectId})\\n` +\n `2) Add this site origin to the allowlist:\\n` +\n ` - ${origin || '(unknown origin)'}\\n\\n` +\n `Common dev origins to allow:\\n` +\n `- http://localhost:5173\\n` +\n `- http://192.168.0.221:5173 (your LAN dev URL)\\n` +\n `- https://wallet-test.enclave-hq.com (your Cloudflare Tunnel/custom domain)\\n\\n` +\n `Original error: ${errorMessage}`\n )\n }\n \n // Handle timeout errors\n if (isTimeout) {\n throw new ConnectionRejectedError(\n `WalletConnect Tron connection timeout. Please try again and ensure your wallet app is open and ready.`\n )\n }\n \n // Handle user rejection\n if (isRejected) {\n throw new ConnectionRejectedError(this.type)\n }\n \n throw error\n }\n\n this.currentAddress = address\n\n // Create account info\n const account: Account = {\n universalAddress: createUniversalAddress(targetChainId, address),\n nativeAddress: address,\n chainId: targetChainId,\n chainType: ChainType.TRON,\n isActive: true,\n }\n\n this.setState(WalletState.CONNECTED)\n this.setAccount(account)\n this.setupEventListeners()\n\n return account\n } catch (error: any) {\n this.setState(WalletState.ERROR)\n this.setAccount(null)\n this.currentAddress = null\n\n if (error.message?.includes('rejected') || error.code === 4001) {\n throw new ConnectionRejectedError(this.type)\n }\n\n throw error\n }\n }\n\n /**\n * Disconnect wallet\n */\n async disconnect(): Promise<void> {\n // Remove event listeners first\n this.removeEventListeners()\n\n // Disconnect wallet if exists\n if (this.wallet) {\n try {\n await this.wallet.disconnect()\n } catch (error) {\n console.warn('[WalletConnect Tron] Error during disconnect:', error)\n }\n }\n\n // Clean up instance state (but keep static wallet for reuse)\n this.wallet = null\n this.currentAddress = null\n this.setState(WalletState.DISCONNECTED)\n this.setAccount(null)\n this.emitDisconnected()\n }\n\n /**\n * Sign message\n */\n async signMessage(message: string): Promise<string> {\n this.ensureConnected()\n\n try {\n if (!this.wallet) {\n throw new Error('Wallet not initialized')\n }\n\n const signature = await this.wallet.signMessage(message)\n\n // Handle different response formats\n if (typeof signature === 'string') {\n return signature\n } else if (signature && typeof signature === 'object') {\n if ('signature' in signature) {\n return (signature as any).signature\n } else if ('result' in signature) {\n return (signature as any).result\n } else {\n return JSON.stringify(signature)\n }\n }\n\n throw new Error('Invalid signature format returned from wallet')\n } catch (error: any) {\n console.error('[WalletConnect Tron] Sign message error:', error)\n\n let errorMessage = 'Unknown error'\n if (typeof error === 'string') {\n errorMessage = error\n } else if (error?.message) {\n errorMessage = error.message\n } else if (error?.error?.message) {\n errorMessage = error.error.message\n } else {\n try {\n errorMessage = JSON.stringify(error)\n } catch {\n errorMessage = String(error)\n }\n }\n\n if (errorMessage?.includes('rejected') ||\n errorMessage?.includes('declined') ||\n errorMessage?.includes('User rejected') ||\n error?.code === 4001 ||\n error?.code === 'USER_REJECTED' ||\n error?.error?.code === 4001) {\n throw new SignatureRejectedError()\n }\n\n if (errorMessage?.includes('not supported') ||\n errorMessage?.includes('method not found') ||\n errorMessage?.includes('Method not found') ||\n error?.code === -32601 ||\n error?.error?.code === -32601) {\n throw new Error('tron_signMessage is not supported by the connected wallet. Please use a wallet that supports WalletConnect Tron signing, or use TronLink extension for browser-based signing.')\n }\n\n throw new Error(`WalletConnect Tron sign message failed: ${errorMessage}`)\n }\n }\n\n /**\n * Sign transaction\n * \n * @param transaction - Tron transaction object\n * Can be created using TronWeb (if available) or any TRON transaction builder\n * Format: { raw_data: {...}, raw_data_hex: \"...\", txID: \"...\" }\n * @returns Signed transaction object or signature\n */\n async signTransaction(transaction: any): Promise<string> {\n this.ensureConnected()\n\n try {\n if (!this.wallet) {\n throw new Error('Wallet not initialized')\n }\n\n if (!transaction) {\n throw new Error('Transaction object is required')\n }\n\n console.log('[WalletConnect Tron] Signing transaction:', {\n hasRawData: !!transaction.raw_data,\n hasRawDataHex: !!transaction.raw_data_hex,\n hasTxID: !!transaction.txID,\n })\n\n // Use official package's signTransaction method\n const result = await this.wallet.signTransaction(transaction)\n\n // Handle different response formats\n if (typeof result === 'string') {\n return result\n } else if (result && typeof result === 'object') {\n // If result is a signed transaction object, extract txID or return the object\n if ('txID' in result && typeof result.txID === 'string') {\n return result.txID\n } else if ('txid' in result && typeof result.txid === 'string') {\n return result.txid\n } else if ('signature' in result) {\n // Return the signed transaction object as JSON string\n return JSON.stringify(result)\n } else {\n // Return the full result as JSON string\n return JSON.stringify(result)\n }\n }\n\n throw new Error('Invalid signature format returned from wallet')\n } catch (error: any) {\n console.error('[WalletConnect Tron] Sign transaction error:', error)\n\n let errorMessage = 'Unknown error'\n if (typeof error === 'string') {\n errorMessage = error\n } else if (error?.message) {\n errorMessage = error.message\n } else if (error?.error?.message) {\n errorMessage = error.error.message\n } else if (error?.data?.message) {\n errorMessage = error.data.message\n } else {\n try {\n errorMessage = JSON.stringify(error)\n } catch {\n errorMessage = String(error)\n }\n }\n\n if (errorMessage?.includes('rejected') ||\n errorMessage?.includes('declined') ||\n errorMessage?.includes('User rejected') ||\n error?.code === 4001 ||\n error?.code === 'USER_REJECTED' ||\n error?.error?.code === 4001) {\n throw new SignatureRejectedError('Transaction signature was rejected by user')\n }\n\n if (errorMessage?.includes('not supported') ||\n errorMessage?.includes('method not found') ||\n errorMessage?.includes('Method not found') ||\n errorMessage?.includes('Not support') ||\n error?.code === -32601 ||\n error?.error?.code === -32601) {\n throw new Error('tron_signTransaction is not supported by the connected wallet. Please use a wallet that supports WalletConnect Tron signing, or use TronLink extension for browser-based signing.')\n }\n\n throw new Error(`WalletConnect Tron sign transaction failed: ${errorMessage}`)\n }\n }\n\n /**\n * Read contract (not supported by WalletConnect)\n */\n async readContract<T = any>(_params: ContractReadParams): Promise<T> {\n this.ensureConnected()\n throw new Error('WalletConnect Tron does not support direct contract reading. Please use direct Tron RPC calls or a wallet extension (like TronLink) for read operations.')\n }\n\n /**\n * Write contract (not yet implemented)\n */\n async writeContract(_params: ContractWriteParams): Promise<string> {\n throw new Error('Contract write not yet implemented for WalletConnect Tron')\n }\n\n /**\n * Estimate gas (not yet implemented)\n */\n async estimateGas(_params: ContractWriteParams): Promise<bigint> {\n throw new Error('Gas estimation not yet implemented for WalletConnect Tron')\n }\n\n /**\n * Wait for transaction (not yet implemented)\n */\n async waitForTransaction(_txHash: string, _confirmations?: number): Promise<TransactionReceipt> {\n throw new Error('Transaction waiting not yet implemented for WalletConnect Tron')\n }\n\n /**\n * Setup event listeners\n */\n private setupEventListeners(): void {\n if (!this.wallet) {\n return\n }\n\n // Listen for account changes\n this.wallet.on('accountsChanged', (accounts: string[]) => {\n if (accounts && accounts.length > 0 && accounts[0] !== this.currentAddress) {\n const newAddress = accounts[0]\n this.currentAddress = newAddress\n if (this.currentAccount) {\n const newAccount: Account = {\n ...this.currentAccount,\n nativeAddress: newAddress,\n universalAddress: createUniversalAddress(this.currentAccount.chainId, newAddress),\n }\n this.setAccount(newAccount)\n this.emit('accountChanged', newAccount)\n }\n } else if (!accounts || accounts.length === 0) {\n // Accounts array is empty, meaning wallet disconnected\n this.disconnect()\n }\n })\n\n // Listen for disconnect\n this.wallet.on('disconnect', () => {\n this.disconnect()\n })\n }\n\n /**\n * Remove event listeners\n */\n private removeEventListeners(): void {\n if (!this.wallet) {\n return\n }\n\n this.wallet.removeAllListeners('accountsChanged')\n this.wallet.removeAllListeners('disconnect')\n }\n\n /**\n * Get provider (returns wallet instance)\n */\n getProvider(): WalletConnectWallet | null {\n return this.wallet\n }\n\n /**\n * Clear static wallet instance (for complete cleanup)\n */\n static clearWalletInstance(): void {\n if (WalletConnectTronAdapter.walletInstance) {\n WalletConnectTronAdapter.walletInstance.disconnect().catch(() => {\n // Ignore errors\n })\n WalletConnectTronAdapter.walletInstance = null\n WalletConnectTronAdapter.walletProjectId = null\n }\n }\n}\n"]}