UNPKG

unich-web3-sdk

Version:

Web3 SDK for DEX applications with multi-chain support

1 lines 78.7 kB
{"version":3,"sources":["../src/types/chain.ts","../src/types/connector.ts","../src/chains/evm/index.ts","../src/chains/svm/index.ts","../src/chains/evm/popular.ts","../src/chains/svm/popular.ts","../src/chains/index.ts","../src/connectors/base.ts","../src/connectors/metamask.ts","../src/connectors/phantom.ts","../src/connectors/index.ts","../src/store/web3Store.ts","../src/hooks/useWeb3.ts","../src/components/Web3Provider.tsx"],"names":["ChainType","NetworkType","ConnectorStatus","ConnectorEvent","getViemChainById","chainId","mainnet","goerli","sepolia","polygon","polygonMumbai","optimism","optimismGoerli","arbitrum","arbitrumGoerli","base","baseGoerli","chain","EVMChainAdapter","viemChain","client","createPublicClient","http","customViemChain","defineChain","address","createWalletClient","custom","SVMChainAdapter","Connection","connection","publicKey","PublicKey","balance","blockHeight","ethereumMainnet","polygonMainnet","arbitrumMainnet","optimismMainnet","bscMainnet","popularEVMChains","solanaMainnet","solanaDevnet","solanaTestnet","popularSVMChains","chainAdapters","getChainAdapter","chainType","adapter","getChainAdapterForChain","chainConfig","getAllChains","getChainById","BaseConnector","id","name","type","icon","supportedChains","EventEmitter","event","listener","status","error","account","previousAccount","previousChainId","pendingRequest","requestTimeout","MetaMaskConnector","accounts","currentChainId","parsedChainId","pendingError","connectorError","hexChainId","PhantomConnector","solana","solanaChainId","defaultConnectors","getAvailableConnectors","connector","getConnectorById","isDisconnecting","isBrowser","createSafeStorage","value","useWeb3Store","create","persist","set","get","connectorId","connectedChainId","newAccount","newChainId","newChain","state","defaultState","useWeb3","config","store","setState","useState","autoConnectAttempted","useRef","useEffect","storedData","parsedData","connectors","storedConnectorId","c","Web3Context","createContext","defaultConfig","InternalProvider","children","web3","jsx","Web3Provider","mergedConfig","isMounted","setIsMounted","useWeb3Context","context","useContext","ConnectWalletButton","onConnect","onError","className","connect","isLoading","setIsLoading","metaMaskConnector"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Enum for different blockchain types\n */\nexport enum ChainType {\n EVM = \"evm\", // Ethereum Virtual Machine based chains\n SVM = \"svm\", // Solana Virtual Machine\n}\n\n/**\n * Enum for network types\n */\nexport enum NetworkType {\n MAINNET = \"mainnet\",\n TESTNET = \"testnet\",\n DEVNET = \"devnet\",\n}\n\n/**\n * Interface for chain configuration\n */\nexport interface ChainConfig {\n id: string | number; // Chain ID (number for EVM, string for others)\n name: string; // Display name\n type: ChainType; // Chain type (EVM, SVM, etc.)\n networkType: NetworkType; // Network type (mainnet, testnet, etc.)\n rpcUrls: string[]; // RPC endpoints\n nativeCurrency: {\n name: string;\n symbol: string;\n decimals: number;\n };\n blockExplorerUrls?: string[]; // Block explorer URLs\n iconUrl?: string; // Chain icon URL\n testnet?: boolean; // Is testnet\n}\n\n/**\n * Type for chain ID\n */\nexport type ChainId = string | number;\n\n/**\n * Interface for chain adapter\n * This is used to implement chain-specific functionality\n */\nexport interface ChainAdapter {\n getProvider: (chain: ChainConfig) => any;\n getBalance: (chain: ChainConfig, address: string) => Promise<bigint>;\n getBlockNumber: (chain: ChainConfig) => Promise<bigint>;\n}\n","import { ChainConfig, ChainId, ChainType } from \"./chain\";\n\n/**\n * Interface for wallet info\n */\nexport interface WalletInfo {\n id: string;\n name: string;\n icon: string;\n description?: string;\n downloadUrls?: {\n browserExtension?: string;\n mobileApp?: string;\n website?: string;\n };\n supportedChains: ChainType[];\n}\n\n/**\n * Interface for connector status\n */\nexport enum ConnectorStatus {\n DISCONNECTED = \"disconnected\",\n CONNECTING = \"connecting\",\n CONNECTED = \"connected\",\n ERROR = \"error\",\n}\n\n/**\n * Interface for connector error\n */\nexport interface ConnectorError {\n code: string;\n message: string;\n details?: any;\n}\n\n/**\n * Interface for connector\n */\nexport interface Connector {\n id: string;\n name: string;\n type: string;\n icon: string;\n supportedChains: ChainType[];\n\n // Connection methods\n connect: (chainId?: ChainId) => Promise<string>;\n disconnect: () => Promise<void>;\n switchChain: (chainId: ChainId) => Promise<void>;\n\n // Status\n isConnected: () => boolean;\n getStatus: () => ConnectorStatus;\n getError: () => ConnectorError | null;\n\n // Account info\n getAccount: () => string | null;\n getChainId: () => ChainId | null;\n\n // Events\n on: (event: ConnectorEvent, listener: (...args: any[]) => void) => void;\n off: (event: ConnectorEvent, listener: (...args: any[]) => void) => void;\n removeAllListeners: (event?: ConnectorEvent) => void;\n}\n\n/**\n * Enum for connector events\n */\nexport enum ConnectorEvent {\n CONNECT = \"connect\",\n DISCONNECT = \"disconnect\",\n CHAIN_CHANGED = \"chainChanged\",\n ACCOUNT_CHANGED = \"accountChanged\",\n ERROR = \"error\",\n}\n","import { ChainAdapter, ChainConfig } from \"../../types/chain\";\nimport {\n createPublicClient,\n http,\n PublicClient,\n defineChain,\n createWalletClient,\n custom,\n Chain as ViemChain,\n} from \"viem\";\nimport {\n mainnet,\n goerli,\n sepolia,\n polygon,\n polygonMumbai,\n optimism,\n optimismGoerli,\n arbitrum,\n arbitrumGoerli,\n base,\n baseGoerli,\n} from \"viem/chains\";\n\n/**\n * Get a Viem chain by ID\n * @param chainId Chain ID\n * @returns Viem chain object or undefined if not found\n */\nfunction getViemChainById(chainId: number): ViemChain | undefined {\n const allChains = [\n mainnet,\n goerli,\n sepolia,\n polygon,\n polygonMumbai,\n optimism,\n optimismGoerli,\n arbitrum,\n arbitrumGoerli,\n base,\n baseGoerli,\n ];\n\n return allChains.find((chain) => chain.id === chainId);\n}\n\n/**\n * Implementation of chain-specific functionality for EVM-compatible chains\n */\nexport class EVMChainAdapter implements ChainAdapter {\n private clientCache = new Map<number | string, PublicClient>();\n\n /**\n * Get a provider for the specified chain\n * @param chain Chain configuration\n * @returns Provider instance\n */\n getProvider(chain: ChainConfig): PublicClient {\n const chainId = chain.id;\n\n // Check if we have a cached client\n if (this.clientCache.has(chainId)) {\n return this.clientCache.get(chainId)!;\n }\n\n // Try to get a predefined Viem chain\n const viemChain = getViemChainById(chainId as number);\n\n let client: PublicClient;\n\n if (viemChain) {\n // Use the predefined Viem chain\n client = createPublicClient({\n chain: viemChain,\n transport: http(),\n });\n } else {\n // Create a custom chain definition\n const customViemChain = defineChain({\n id: Number(chainId),\n name: chain.name,\n nativeCurrency: {\n name: chain.nativeCurrency.name,\n symbol: chain.nativeCurrency.symbol,\n decimals: chain.nativeCurrency.decimals,\n },\n rpcUrls: {\n default: {\n http: chain.rpcUrls,\n },\n },\n blockExplorers: chain.blockExplorerUrls\n ? {\n default: {\n name: chain.name,\n url: chain.blockExplorerUrls[0],\n },\n }\n : undefined,\n });\n\n client = createPublicClient({\n chain: customViemChain,\n transport: http(),\n });\n }\n\n // Cache the client\n this.clientCache.set(chainId, client);\n return client;\n }\n\n /**\n * Get the balance of an address on the specified chain\n * @param chain Chain configuration\n * @param address Address to check\n * @returns Balance in wei\n */\n async getBalance(chain: ChainConfig, address: string): Promise<bigint> {\n const client = this.getProvider(chain);\n return await client.getBalance({ address: address as `0x${string}` });\n }\n\n /**\n * Get the current block number on the specified chain\n * @param chain Chain configuration\n * @returns Current block number\n */\n async getBlockNumber(chain: ChainConfig): Promise<bigint> {\n const client = this.getProvider(chain);\n return await client.getBlockNumber();\n }\n\n /**\n * Get a wallet client for signing transactions\n * @param chain Chain configuration\n * @returns Wallet client or null if not connected\n */\n getWalletClient(chain: ChainConfig) {\n if (typeof window !== \"undefined\" && window.ethereum) {\n // Create a Viem wallet client using the MetaMask provider\n const viemChain = getViemChainById(chain.id as number);\n\n if (viemChain) {\n return createWalletClient({\n chain: viemChain,\n transport: custom(window.ethereum),\n });\n }\n }\n\n return null;\n }\n}\n","import { ChainAdapter, ChainConfig } from \"../../types/chain\";\nimport { Connection, PublicKey } from \"@solana/web3.js\";\n\n/**\n * Solana Virtual Machine Chain Adapter\n * Implements chain-specific functionality for Solana\n */\nexport class SVMChainAdapter implements ChainAdapter {\n private connection: Connection | null = null;\n\n /**\n * Get a provider for the specified chain\n * @param chain Chain configuration\n * @returns Connection instance\n */\n async getProvider(chain: ChainConfig): Promise<Connection> {\n if (!this.connection) {\n this.connection = new Connection(chain.rpcUrls[0]);\n }\n return this.connection;\n }\n\n /**\n * Get the balance of an address on the specified chain\n * @param chain Chain configuration\n * @param address Wallet address\n * @returns Balance as a bigint\n */\n async getBalance(chain: ChainConfig, address: string): Promise<bigint> {\n const connection = await this.getProvider(chain);\n const publicKey = new PublicKey(address);\n const balance = await connection.getBalance(publicKey);\n return BigInt(balance);\n }\n\n /**\n * Get the current block number (slot) on the specified chain\n * @param chain Chain configuration\n * @returns Current slot number as a bigint\n */\n async getBlockNumber(chain: ChainConfig): Promise<bigint> {\n const connection = await this.getProvider(chain);\n const blockHeight = await connection.getBlockHeight();\n return BigInt(blockHeight);\n }\n}\n","import { ChainConfig, NetworkType, ChainType } from \"../../types/chain\";\n\nexport const ethereumMainnet: ChainConfig = {\n id: 1,\n name: \"Ethereum\",\n type: ChainType.EVM,\n networkType: NetworkType.MAINNET,\n rpcUrls: [\n \"https://eth-mainnet.g.alchemy.com/v2/your-api-key\",\n \"https://mainnet.infura.io/v3/your-api-key\",\n ],\n nativeCurrency: {\n name: \"Ether\",\n symbol: \"ETH\",\n decimals: 18,\n },\n blockExplorerUrls: [\"https://etherscan.io\"],\n iconUrl: \"https://cryptologos.cc/logos/ethereum-eth-logo.png\",\n};\n\nexport const polygonMainnet: ChainConfig = {\n id: 137,\n name: \"Polygon\",\n type: ChainType.EVM,\n networkType: NetworkType.MAINNET,\n rpcUrls: [\n \"https://polygon-rpc.com\",\n \"https://polygon-mainnet.g.alchemy.com/v2/your-api-key\",\n ],\n nativeCurrency: {\n name: \"MATIC\",\n symbol: \"MATIC\",\n decimals: 18,\n },\n blockExplorerUrls: [\"https://polygonscan.com\"],\n iconUrl: \"https://cryptologos.cc/logos/polygon-matic-logo.png\",\n};\n\nexport const arbitrumMainnet: ChainConfig = {\n id: 42161,\n name: \"Arbitrum\",\n type: ChainType.EVM,\n networkType: NetworkType.MAINNET,\n rpcUrls: [\n \"https://arb1.arbitrum.io/rpc\",\n \"https://arb-mainnet.g.alchemy.com/v2/your-api-key\",\n ],\n nativeCurrency: {\n name: \"Ether\",\n symbol: \"ETH\",\n decimals: 18,\n },\n blockExplorerUrls: [\"https://arbiscan.io\"],\n iconUrl: \"https://cryptologos.cc/logos/arbitrum-arb-logo.png\",\n};\n\nexport const optimismMainnet: ChainConfig = {\n id: 10,\n name: \"Optimism\",\n type: ChainType.EVM,\n networkType: NetworkType.MAINNET,\n rpcUrls: [\n \"https://mainnet.optimism.io\",\n \"https://opt-mainnet.g.alchemy.com/v2/your-api-key\",\n ],\n nativeCurrency: {\n name: \"Ether\",\n symbol: \"ETH\",\n decimals: 18,\n },\n blockExplorerUrls: [\"https://optimistic.etherscan.io\"],\n iconUrl: \"https://cryptologos.cc/logos/optimism-op-logo.png\",\n};\n\nexport const bscMainnet: ChainConfig = {\n id: 56,\n name: \"BNB Smart Chain\",\n type: ChainType.EVM,\n networkType: NetworkType.MAINNET,\n rpcUrls: [\n \"https://bsc-dataseed.binance.org\",\n \"https://bsc-dataseed1.defibit.io\",\n ],\n nativeCurrency: {\n name: \"BNB\",\n symbol: \"BNB\",\n decimals: 18,\n },\n blockExplorerUrls: [\"https://bscscan.com\"],\n iconUrl: \"https://cryptologos.cc/logos/bnb-bnb-logo.png\",\n};\n\nexport const popularEVMChains = [\n ethereumMainnet,\n polygonMainnet,\n arbitrumMainnet,\n optimismMainnet,\n bscMainnet,\n];\n","import { ChainConfig, NetworkType, ChainType } from \"../../types/chain\";\n\nexport const solanaMainnet: ChainConfig = {\n id: \"mainnet-beta\",\n name: \"Solana\",\n type: ChainType.SVM,\n networkType: NetworkType.MAINNET,\n rpcUrls: [\n \"https://api.mainnet-beta.solana.com\",\n \"https://solana-api.projectserum.com\",\n ],\n nativeCurrency: {\n name: \"Solana\",\n symbol: \"SOL\",\n decimals: 9,\n },\n blockExplorerUrls: [\"https://explorer.solana.com\"],\n iconUrl: \"https://cryptologos.cc/logos/solana-sol-logo.png\",\n};\n\nexport const solanaDevnet: ChainConfig = {\n id: \"devnet\",\n name: \"Solana Devnet\",\n type: ChainType.SVM,\n networkType: NetworkType.DEVNET,\n rpcUrls: [\"https://api.devnet.solana.com\"],\n nativeCurrency: {\n name: \"Solana\",\n symbol: \"SOL\",\n decimals: 9,\n },\n blockExplorerUrls: [\"https://explorer.solana.com/?cluster=devnet\"],\n iconUrl: \"https://cryptologos.cc/logos/solana-sol-logo.png\",\n};\n\nexport const solanaTestnet: ChainConfig = {\n id: \"testnet\",\n name: \"Solana Testnet\",\n type: ChainType.SVM,\n networkType: NetworkType.TESTNET,\n rpcUrls: [\"https://api.testnet.solana.com\"],\n nativeCurrency: {\n name: \"Solana\",\n symbol: \"SOL\",\n decimals: 9,\n },\n blockExplorerUrls: [\"https://explorer.solana.com/?cluster=testnet\"],\n iconUrl: \"https://cryptologos.cc/logos/solana-sol-logo.png\",\n};\n\nexport const popularSVMChains = [solanaMainnet, solanaDevnet, solanaTestnet];\n","import { ChainAdapter, ChainConfig, ChainType } from \"../types/chain\";\nimport { EVMChainAdapter } from \"./evm\";\nimport { SVMChainAdapter } from \"./svm\";\n\n// Import popular chains\nimport { popularEVMChains } from \"./evm/popular\";\nimport { popularSVMChains } from \"./svm/popular\";\n\n// Export chain adapters\nexport { EVMChainAdapter, SVMChainAdapter };\n\n// Export popular chains\nexport { popularEVMChains, popularSVMChains };\n\n// Chain adapter registry\nconst chainAdapters: Record<ChainType, ChainAdapter> = {\n [ChainType.EVM]: new EVMChainAdapter(),\n [ChainType.SVM]: new SVMChainAdapter(),\n};\n\n/**\n * Get a chain adapter for the specified chain type\n * @param chainType Chain type\n * @returns Chain adapter\n */\nexport function getChainAdapter(chainType: ChainType): ChainAdapter {\n const adapter = chainAdapters[chainType];\n if (!adapter) {\n throw new Error(`Chain adapter not found for chain type: ${chainType}`);\n }\n return adapter;\n}\n\n/**\n * Get a chain adapter for the specified chain configuration\n * @param chainConfig Chain configuration\n * @returns Chain adapter\n */\nexport function getChainAdapterForChain(\n chainConfig: ChainConfig\n): ChainAdapter {\n return getChainAdapter(chainConfig.type);\n}\n\n/**\n * Get all supported chains\n * @returns Array of chain configurations\n */\nexport function getAllChains(): ChainConfig[] {\n return [...popularEVMChains, ...popularSVMChains];\n}\n\n/**\n * Get a chain configuration by ID\n * @param chainId Chain ID\n * @returns Chain configuration or null if not found\n */\nexport function getChainById(chainId: string | number): ChainConfig | null {\n return getAllChains().find((chain) => chain.id === chainId) || null;\n}\n","import EventEmitter from \"eventemitter3\";\nimport {\n Connector,\n ConnectorError,\n ConnectorEvent,\n ConnectorStatus,\n} from \"../types/connector\";\nimport { ChainId, ChainType } from \"../types/chain\";\n\n/**\n * Base connector class that implements common functionality\n * All specific wallet connectors should extend this class\n */\nexport abstract class BaseConnector implements Connector {\n id: string;\n name: string;\n type: string;\n icon: string;\n supportedChains: ChainType[];\n\n protected _status: ConnectorStatus = ConnectorStatus.DISCONNECTED;\n protected _error: ConnectorError | null = null;\n protected _account: string | null = null;\n protected _chainId: ChainId | null = null;\n protected _eventEmitter: EventEmitter;\n\n constructor(\n id: string,\n name: string,\n type: string,\n icon: string,\n supportedChains: ChainType[]\n ) {\n this._eventEmitter = new EventEmitter();\n this.id = id;\n this.name = name;\n this.type = type;\n this.icon = icon;\n this.supportedChains = supportedChains;\n }\n\n /**\n * Connect to the wallet\n * @param chainId Optional chain ID to connect to\n */\n abstract connect(chainId?: ChainId): Promise<string>;\n\n /**\n * Disconnect from the wallet\n */\n abstract disconnect(): Promise<void>;\n\n /**\n * Switch to a different chain\n * @param chainId Chain ID to switch to\n */\n abstract switchChain(chainId: ChainId): Promise<void>;\n\n /**\n * Check if the wallet is connected\n */\n isConnected(): boolean {\n return this._status === ConnectorStatus.CONNECTED;\n }\n\n /**\n * Get the current connection status\n */\n getStatus(): ConnectorStatus {\n return this._status;\n }\n\n /**\n * Get the current error (if any)\n */\n getError(): ConnectorError | null {\n return this._error;\n }\n\n /**\n * Get the connected account address\n */\n getAccount(): string | null {\n return this._account;\n }\n\n /**\n * Get the current chain ID\n */\n getChainId(): ChainId | null {\n return this._chainId;\n }\n\n /**\n * Register an event listener\n * @param event Event to listen for\n * @param listener Listener function\n */\n on(event: ConnectorEvent, listener: (...args: any[]) => void): void {\n this._eventEmitter.on(event, listener);\n }\n\n /**\n * Remove an event listener\n * @param event Event to stop listening for\n * @param listener Listener function to remove\n */\n off(event: ConnectorEvent, listener: (...args: any[]) => void): void {\n this._eventEmitter.off(event, listener);\n }\n\n /**\n * Remove all event listeners for a specific event\n * @param event Event to stop listening for\n */\n removeAllListeners(event?: ConnectorEvent): void {\n if (event) {\n this._eventEmitter.removeAllListeners(event);\n } else {\n // Remove all listeners for all events\n this._eventEmitter.removeAllListeners();\n }\n }\n\n /**\n * Update the connection status\n * @param status New status\n */\n protected updateStatus(status: ConnectorStatus): void {\n this._status = status;\n }\n\n /**\n * Update the current error\n * @param error New error\n */\n protected updateError(error: ConnectorError | null): void {\n this._error = error;\n if (error) {\n this._eventEmitter.emit(ConnectorEvent.ERROR, error);\n }\n }\n\n /**\n * Update the connected account\n * @param account New account address\n */\n protected updateAccount(account: string | null): void {\n const previousAccount = this._account;\n this._account = account;\n\n if (account && account !== previousAccount) {\n this._eventEmitter.emit(ConnectorEvent.ACCOUNT_CHANGED, account);\n }\n }\n\n /**\n * Update the current chain ID\n * @param chainId New chain ID\n */\n protected updateChainId(chainId: ChainId | null): void {\n const previousChainId = this._chainId;\n this._chainId = chainId;\n\n if (chainId && chainId !== previousChainId) {\n this._eventEmitter.emit(ConnectorEvent.CHAIN_CHANGED, chainId);\n }\n }\n}\n","import { BaseConnector } from \"./base\";\nimport { ChainId, ChainType, ChainConfig } from \"../types/chain\";\nimport {\n ConnectorError,\n ConnectorEvent,\n ConnectorStatus,\n} from \"../types/connector\";\nimport { getChainById } from \"../chains\";\n\ndeclare global {\n interface Window {\n ethereum?: any;\n }\n}\n\n// Track pending requests to prevent duplicates\nlet pendingRequest = false;\nlet requestTimeout: NodeJS.Timeout | null = null;\n\n/**\n * MetaMask connector\n * Implements wallet connection for MetaMask and other EVM-compatible wallets\n */\nexport class MetaMaskConnector extends BaseConnector {\n // Store bound event handlers to prevent memory leaks\n private boundAccountsChanged: (accounts: string[]) => void;\n private boundChainChanged: (chainId: string) => void;\n private boundDisconnect: () => void;\n\n constructor() {\n super(\n \"metamask\",\n \"MetaMask\",\n \"injected\",\n \"https://metamask.io/images/metamask-fox.svg\",\n [ChainType.EVM] // MetaMask only supports EVM chains\n );\n\n // Bind event handlers once to prevent memory leaks\n this.boundAccountsChanged = this.handleAccountsChanged.bind(this);\n this.boundChainChanged = this.handleChainChanged.bind(this);\n this.boundDisconnect = this.handleDisconnect.bind(this);\n }\n\n /**\n * Check if MetaMask is available\n */\n isAvailable(): boolean {\n return typeof window !== \"undefined\" && !!window.ethereum;\n }\n\n /**\n * Connect to MetaMask\n * @param chainId Optional chain ID to connect to\n */\n async connect(chainId?: ChainId): Promise<string> {\n if (!this.isAvailable()) {\n const error: ConnectorError = {\n code: \"wallet_unavailable\",\n message: \"MetaMask is not installed\",\n };\n this.updateError(error);\n this.updateStatus(ConnectorStatus.ERROR);\n throw error;\n }\n\n // Check if the user has explicitly disconnected before\n const hasDisconnected =\n localStorage.getItem(\"metamask_disconnected\") === \"true\";\n if (hasDisconnected) {\n // User has explicitly disconnected, don't auto-connect\n const error: ConnectorError = {\n code: \"user_disconnected\",\n message: \"User has explicitly disconnected. Please connect manually.\",\n };\n this.updateError(error);\n this.updateStatus(ConnectorStatus.ERROR);\n throw error;\n }\n\n // Check if there's already a pending request\n if (pendingRequest) {\n const error: ConnectorError = {\n code: \"request_pending\",\n message:\n \"A wallet connection request is already pending. Please check your wallet extension.\",\n };\n this.updateError(error);\n this.updateStatus(ConnectorStatus.ERROR);\n throw error;\n }\n\n try {\n this.updateStatus(ConnectorStatus.CONNECTING);\n pendingRequest = true;\n\n // Set a timeout to reset the pending flag after 30 seconds\n // This prevents the app from getting stuck if the user never responds to the wallet\n if (requestTimeout) {\n clearTimeout(requestTimeout);\n }\n requestTimeout = setTimeout(() => {\n pendingRequest = false;\n }, 30000); // 30 seconds timeout\n\n // Request accounts\n const accounts = await window.ethereum.request({\n method: \"eth_requestAccounts\",\n });\n\n // Clear the timeout and reset the pending flag\n if (requestTimeout) {\n clearTimeout(requestTimeout);\n requestTimeout = null;\n }\n pendingRequest = false;\n\n const account = accounts[0];\n\n // Get current chain ID\n const currentChainId = await window.ethereum.request({\n method: \"eth_chainId\",\n });\n const parsedChainId = parseInt(currentChainId, 16);\n\n // If a specific chain ID is requested, switch to it\n if (chainId && parsedChainId !== chainId) {\n await this.switchChain(chainId);\n }\n\n // Set up event listeners\n this.setupEventListeners();\n\n // Update state\n this.updateAccount(account);\n this.updateChainId(parsedChainId);\n this.updateStatus(ConnectorStatus.CONNECTED);\n this.updateError(null);\n\n // Clear the disconnected flag since the user has successfully connected\n localStorage.removeItem(\"metamask_disconnected\");\n\n // Emit connect event\n this._eventEmitter.emit(ConnectorEvent.CONNECT, account);\n\n return account;\n } catch (error: any) {\n // Clear the timeout and reset the pending flag\n if (requestTimeout) {\n clearTimeout(requestTimeout);\n requestTimeout = null;\n }\n pendingRequest = false;\n\n // Handle specific MetaMask errors\n if (error.code === -32002) {\n const pendingError: ConnectorError = {\n code: \"request_already_pending\",\n message:\n \"A wallet connection request is already pending. Please check your MetaMask extension and approve or reject the request.\",\n details: error,\n };\n this.updateError(pendingError);\n this.updateStatus(ConnectorStatus.ERROR);\n throw pendingError;\n }\n\n const connectorError: ConnectorError = {\n code: error.code || \"connection_error\",\n message: error.message || \"Failed to connect to MetaMask\",\n details: error,\n };\n this.updateError(connectorError);\n this.updateStatus(ConnectorStatus.ERROR);\n throw connectorError;\n }\n }\n\n /**\n * Disconnect from MetaMask\n */\n async disconnect(): Promise<void> {\n // Only proceed if we're connected\n if (this._status === ConnectorStatus.DISCONNECTED) {\n return;\n }\n\n // Set a flag in localStorage to indicate that the user has explicitly disconnected\n localStorage.setItem(\"metamask_disconnected\", \"true\");\n\n // First remove our internal event listeners\n this.removeAllListeners();\n\n // Then remove Met