@one_deploy/sdk 1.0.0

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.
Files changed (83) hide show
  1. package/.turbo/turbo-build.log +0 -0
  2. package/.turbo/turbo-type-check.log +0 -0
  3. package/dist/config/index.d.mts +74 -0
  4. package/dist/config/index.d.ts +74 -0
  5. package/dist/config/index.js +242 -0
  6. package/dist/config/index.js.map +1 -0
  7. package/dist/config/index.mjs +224 -0
  8. package/dist/config/index.mjs.map +1 -0
  9. package/dist/engine-5ndtBaCr.d.ts +1039 -0
  10. package/dist/engine-CrlhH0nw.d.mts +1039 -0
  11. package/dist/hooks/index.d.mts +56 -0
  12. package/dist/hooks/index.d.ts +56 -0
  13. package/dist/hooks/index.js +1360 -0
  14. package/dist/hooks/index.js.map +1 -0
  15. package/dist/hooks/index.mjs +1356 -0
  16. package/dist/hooks/index.mjs.map +1 -0
  17. package/dist/index.d.mts +356 -0
  18. package/dist/index.d.ts +356 -0
  19. package/dist/index.js +5068 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/index.mjs +4949 -0
  22. package/dist/index.mjs.map +1 -0
  23. package/dist/price-CgqXPnT3.d.ts +13 -0
  24. package/dist/price-ClbLHHjv.d.mts +13 -0
  25. package/dist/providers/index.d.mts +121 -0
  26. package/dist/providers/index.d.ts +121 -0
  27. package/dist/providers/index.js +1642 -0
  28. package/dist/providers/index.js.map +1 -0
  29. package/dist/providers/index.mjs +1600 -0
  30. package/dist/providers/index.mjs.map +1 -0
  31. package/dist/react-native.d.mts +120 -0
  32. package/dist/react-native.d.ts +120 -0
  33. package/dist/react-native.js +1792 -0
  34. package/dist/react-native.js.map +1 -0
  35. package/dist/react-native.mjs +1755 -0
  36. package/dist/react-native.mjs.map +1 -0
  37. package/dist/services/index.d.mts +85 -0
  38. package/dist/services/index.d.ts +85 -0
  39. package/dist/services/index.js +1466 -0
  40. package/dist/services/index.js.map +1 -0
  41. package/dist/services/index.mjs +1458 -0
  42. package/dist/services/index.mjs.map +1 -0
  43. package/dist/types/index.d.mts +759 -0
  44. package/dist/types/index.d.ts +759 -0
  45. package/dist/types/index.js +4 -0
  46. package/dist/types/index.js.map +1 -0
  47. package/dist/types/index.mjs +3 -0
  48. package/dist/types/index.mjs.map +1 -0
  49. package/dist/utils/index.d.mts +36 -0
  50. package/dist/utils/index.d.ts +36 -0
  51. package/dist/utils/index.js +164 -0
  52. package/dist/utils/index.js.map +1 -0
  53. package/dist/utils/index.mjs +142 -0
  54. package/dist/utils/index.mjs.map +1 -0
  55. package/package.json +101 -0
  56. package/src/components/OneConnectButton.tsx +143 -0
  57. package/src/components/OneNFTGallery.tsx +324 -0
  58. package/src/components/OneOfframpWidget.tsx +660 -0
  59. package/src/components/OneOnrampWidget.tsx +596 -0
  60. package/src/components/OnePayWidget.tsx +160 -0
  61. package/src/components/OneReceiveWidget.tsx +272 -0
  62. package/src/components/OneSendWidget.tsx +248 -0
  63. package/src/components/OneSwapWidget.tsx +715 -0
  64. package/src/components/OneTransactionButton.tsx +150 -0
  65. package/src/components/OneWalletBalance.tsx +354 -0
  66. package/src/components/index.ts +24 -0
  67. package/src/config/index.ts +299 -0
  68. package/src/hooks/index.ts +2 -0
  69. package/src/hooks/useTokenPrice.ts +162 -0
  70. package/src/hooks/useWalletBalance.ts +98 -0
  71. package/src/index.ts +193 -0
  72. package/src/providers/OneProvider.tsx +452 -0
  73. package/src/providers/ThirdwebProvider.tsx +203 -0
  74. package/src/providers/index.ts +26 -0
  75. package/src/react-native.ts +378 -0
  76. package/src/services/engine.ts +1854 -0
  77. package/src/services/index.ts +30 -0
  78. package/src/services/price.ts +164 -0
  79. package/src/services/supabase.ts +180 -0
  80. package/src/types/index.ts +887 -0
  81. package/src/utils/index.ts +200 -0
  82. package/tsconfig.json +22 -0
  83. package/tsup.config.ts +25 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/config/index.ts","../src/services/engine.ts","../src/services/supabase.ts","../src/services/price.ts","../src/providers/OneProvider.tsx","../src/providers/ThirdwebProvider.tsx","../src/components/OneConnectButton.tsx","../src/components/OnePayWidget.tsx","../src/components/OneTransactionButton.tsx","../src/components/OneSendWidget.tsx","../src/components/OneOnrampWidget.tsx","../src/components/OneOfframpWidget.tsx","../src/components/OneSwapWidget.tsx","../src/components/OneWalletBalance.tsx","../src/components/OneNFTGallery.tsx","../src/components/OneReceiveWidget.tsx","../src/hooks/useWalletBalance.ts","../src/hooks/useTokenPrice.ts","../src/utils/index.ts"],"names":["config","createClient","createContext","isInitialized","useState","useMemo","useEffect","useCallback","useContext","React","inAppWallet","base","smartWallet","createThirdwebClient","jsx","BaseThirdwebProvider","ConnectButton","ethereum","polygon","arbitrum","PayEmbed","prepareTransaction","buttonStyle","TransactionButton","useActiveAccount","useSendTransaction","isValidAddress","toWei","error","jsxs","containerStyle","inputStyle","DEFAULT_FIATS","DEFAULT_CRYPTOS","DEFAULT_NETWORKS","NETWORK_DISPLAY_NAMES","CRYPTO_RATES","headerStyle","selectStyle","rowStyle","quoteBoxStyle","useWalletBalance","CHAIN_CONFIGS","optimism","bsc","avalanche","labelStyle","chains","MediaRenderer","CHAIN_INFO","useRef","formatUSD"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * ONE SDK Configuration\n *\n * Chain data is fetched from ONE Engine API - no duplicates needed here.\n * Engine is the single source of truth for 200+ EVM chains.\n */\n\nimport type { ChainConfig } from '../types';\n\n// ===== SDK Configuration =====\nexport interface OneConfig {\n // ONE Engine (required)\n oneEngineUrl: string;\n oneClientId: string;\n oneSecretKey?: string; // Only for backend usage\n\n // Optional: Direct Supabase access (for realtime subscriptions)\n supabaseUrl?: string;\n supabaseAnonKey?: string;\n\n // Deprecated: Use ONE Engine instead\n thirdwebClientId?: string;\n}\n\nlet config: OneConfig | null = null;\n\nexport function initOneSDK(options: OneConfig): void {\n if (!options.oneEngineUrl) {\n throw new Error('oneEngineUrl is required');\n }\n if (!options.oneClientId) {\n throw new Error('oneClientId is required');\n }\n config = options;\n}\n\nexport function getConfig(): OneConfig {\n if (!config) {\n throw new Error('ONE SDK not initialized. Call initOneSDK() first.');\n }\n return config;\n}\n\nexport function isInitialized(): boolean {\n return config !== null;\n}\n\nexport function getEngineUrl(): string {\n return config?.oneEngineUrl || process.env.NEXT_PUBLIC_ONE_ENGINE_URL || 'http://localhost:4000/api';\n}\n\n// ===== Chain Data (Fetched from Engine) =====\n\n// Cache for chain data\nlet chainsCache: ChainConfig[] | null = null;\nlet chainsCacheTimestamp = 0;\nconst CACHE_TTL = 5 * 60 * 1000; // 5 minutes\n\n/**\n * Fetch chains from ONE Engine API\n * Engine is the source of truth for 200+ EVM chains\n */\nexport async function fetchChains(options?: {\n category?: 'mainnet' | 'l2' | 'testnet' | 'gaming' | 'recommended';\n smartWallet?: boolean;\n limit?: number;\n}): Promise<ChainConfig[]> {\n const engineUrl = getEngineUrl();\n const params = new URLSearchParams();\n\n if (options?.category) params.set('category', options.category);\n if (options?.smartWallet) params.set('smartWallet', 'true');\n if (options?.limit) params.set('limit', options.limit.toString());\n\n const response = await fetch(`${engineUrl}/v1/chains?${params}`);\n const data = await response.json();\n\n if (!data.success) {\n throw new Error(data.error?.message || 'Failed to fetch chains');\n }\n\n // Transform Engine response to SDK ChainConfig format\n return data.data.chains.map((chain: any) => ({\n id: chain.id,\n name: chain.name,\n shortName: chain.shortName || chain.slug || chain.name.toLowerCase(),\n icon: getChainIcon(chain.id),\n nativeCurrency: chain.nativeCurrency,\n rpcUrls: Array.isArray(chain.rpc) ? chain.rpc : [chain.rpc],\n blockExplorerUrls: chain.blockExplorer ? [chain.blockExplorer] : [],\n testnet: chain.testnet,\n }));\n}\n\n/**\n * Get all supported chains (cached)\n */\nexport async function getChains(): Promise<ChainConfig[]> {\n const now = Date.now();\n if (chainsCache && (now - chainsCacheTimestamp) < CACHE_TTL) {\n return chainsCache;\n }\n\n chainsCache = await fetchChains({ limit: 200 });\n chainsCacheTimestamp = now;\n return chainsCache;\n}\n\n/**\n * Get chain by ID\n */\nexport async function getChainById(chainId: number): Promise<ChainConfig | undefined> {\n const chains = await getChains();\n return chains.find(c => c.id === chainId);\n}\n\n/**\n * Get chain by name/shortName\n */\nexport async function getChainByName(name: string): Promise<ChainConfig | undefined> {\n const chains = await getChains();\n const lowerName = name.toLowerCase();\n return chains.find(\n c => c.name.toLowerCase() === lowerName || c.shortName.toLowerCase() === lowerName\n );\n}\n\n/**\n * Get recommended chains for UI display\n */\nexport async function getRecommendedChains(): Promise<ChainConfig[]> {\n return fetchChains({ category: 'recommended', limit: 10 });\n}\n\n/**\n * Get chains with smart wallet support\n */\nexport async function getSmartWalletChains(): Promise<ChainConfig[]> {\n return fetchChains({ smartWallet: true, limit: 50 });\n}\n\n// ===== Default Chain Constants =====\n// These are commonly used chain IDs, but full data should be fetched from Engine\n\nexport const CHAIN_IDS = {\n ETHEREUM: 1,\n POLYGON: 137,\n BSC: 56,\n ARBITRUM: 42161,\n OPTIMISM: 10,\n BASE: 8453,\n AVALANCHE: 43114,\n ZKSYNC: 324,\n LINEA: 59144,\n SCROLL: 534352,\n BLAST: 81457,\n // Testnets\n SEPOLIA: 11155111,\n BASE_SEPOLIA: 84532,\n ARBITRUM_SEPOLIA: 421614,\n} as const;\n\nexport const DEFAULT_CHAIN_ID = CHAIN_IDS.BASE;\n\n// ===== Chain Icons (Simple emoji fallback) =====\nconst CHAIN_ICONS: Record<number, string> = {\n 1: '\\u229F', // Ethereum\n 137: '\\uD83D\\uDFE3', // Polygon\n 56: '\\uD83D\\uDFE1', // BSC\n 42161: '\\uD83D\\uDD35', // Arbitrum\n 10: '\\uD83D\\uDD34', // Optimism\n 8453: '\\uD83D\\uDD37', // Base\n 43114: '\\uD83D\\uDD3A', // Avalanche\n 324: '\\u26A1', // zkSync\n 59144: '\\uD83D\\uDD39', // Linea\n 534352: '\\uD83D\\uDCDC', // Scroll\n};\n\nfunction getChainIcon(chainId: number): string {\n return CHAIN_ICONS[chainId] || '\\uD83D\\uDD17';\n}\n\n// ===== Token Names Mapping =====\n// Common token symbols to human-readable names\nexport const TOKEN_NAMES: Record<string, string> = {\n ETH: 'Ethereum',\n BTC: 'Bitcoin',\n BNB: 'BNB',\n MATIC: 'Polygon',\n POL: 'Polygon',\n AVAX: 'Avalanche',\n USDT: 'Tether',\n USDC: 'USD Coin',\n DAI: 'Dai',\n WBTC: 'Wrapped Bitcoin',\n WETH: 'Wrapped Ether',\n ARB: 'Arbitrum',\n OP: 'Optimism',\n LINK: 'Chainlink',\n UNI: 'Uniswap',\n AAVE: 'Aave',\n CRV: 'Curve',\n MKR: 'Maker',\n SNX: 'Synthetix',\n COMP: 'Compound',\n SUSHI: 'SushiSwap',\n YFI: 'Yearn Finance',\n SOL: 'Solana',\n DOT: 'Polkadot',\n ATOM: 'Cosmos',\n NEAR: 'Near Protocol',\n};\n\n// ===== CoinGecko ID Mapping =====\n// For price lookups via CoinGecko API\nexport const COINGECKO_IDS: Record<string, string> = {\n ETH: 'ethereum',\n BTC: 'bitcoin',\n BNB: 'binancecoin',\n MATIC: 'matic-network',\n POL: 'matic-network',\n AVAX: 'avalanche-2',\n USDT: 'tether',\n USDC: 'usd-coin',\n DAI: 'dai',\n WBTC: 'wrapped-bitcoin',\n WETH: 'weth',\n ARB: 'arbitrum',\n OP: 'optimism',\n LINK: 'chainlink',\n UNI: 'uniswap',\n AAVE: 'aave',\n SOL: 'solana',\n};\n\n// ===== Backwards Compatibility =====\n// @deprecated - Use getChains() or fetch from Engine API\n// These static configs are kept for backwards compatibility only\n\nexport const CHAIN_CONFIGS: Record<string, ChainConfig> = {\n ethereum: {\n id: 1,\n name: 'Ethereum',\n shortName: 'ETH',\n icon: '\\u229F',\n nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 },\n rpcUrls: ['https://ethereum.rpc.thirdweb.com'],\n blockExplorerUrls: ['https://etherscan.io'],\n testnet: false,\n },\n polygon: {\n id: 137,\n name: 'Polygon',\n shortName: 'MATIC',\n icon: '\\uD83D\\uDFE3',\n nativeCurrency: { name: 'POL', symbol: 'POL', decimals: 18 },\n rpcUrls: ['https://polygon.rpc.thirdweb.com'],\n blockExplorerUrls: ['https://polygonscan.com'],\n testnet: false,\n },\n base: {\n id: 8453,\n name: 'Base',\n shortName: 'BASE',\n icon: '\\uD83D\\uDD37',\n nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 },\n rpcUrls: ['https://base.rpc.thirdweb.com'],\n blockExplorerUrls: ['https://basescan.org'],\n testnet: false,\n },\n arbitrum: {\n id: 42161,\n name: 'Arbitrum One',\n shortName: 'ARB',\n icon: '\\uD83D\\uDD35',\n nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 },\n rpcUrls: ['https://arbitrum.rpc.thirdweb.com'],\n blockExplorerUrls: ['https://arbiscan.io'],\n testnet: false,\n },\n optimism: {\n id: 10,\n name: 'Optimism',\n shortName: 'OP',\n icon: '\\uD83D\\uDD34',\n nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 },\n rpcUrls: ['https://optimism.rpc.thirdweb.com'],\n blockExplorerUrls: ['https://optimistic.etherscan.io'],\n testnet: false,\n },\n};\n\n// @deprecated - Use getChains() to get all supported chains\nexport const SUPPORTED_CHAINS = Object.keys(CHAIN_CONFIGS);\n\n// @deprecated - Use getChainByName() instead\nexport function getChainConfig(chain: string): ChainConfig | undefined {\n return CHAIN_CONFIGS[chain.toLowerCase()];\n}\n","/**\n * ONE Engine Client - The unified API gateway for all ONE Ecosystem services\n *\n * All wallet operations, onramp, swap, trading go through ONE Engine.\n * Thirdweb/Onramper/etc are internal to ONE Engine and hidden from clients.\n */\n\nimport { getConfig } from '../config';\nimport type {\n ApiResponse,\n User,\n Token,\n WalletBalance,\n Transaction,\n AIStrategy,\n AIOrder,\n AIOrderStatus,\n AITradeExecution,\n AITradeAllocation,\n AINavSnapshot,\n AIPortfolioSummary,\n AIRedemptionResult,\n AIMarketData,\n CreateAIOrderRequest,\n StrategyCategory,\n NFT,\n NFTCollection,\n Contract,\n ContractReadParams,\n ContractWriteParams,\n ContractDeployParams,\n BillProvider,\n BillPayment,\n OfframpQuote,\n OfframpRequest,\n OfframpTransaction,\n StakingPool,\n StakingPosition,\n ReferralInfo,\n Referral,\n UserProfile,\n UserSettings,\n Notification,\n BridgeQuote,\n BridgeTransaction,\n GasEstimate,\n GasPrice,\n WalletImportRequest,\n PortfolioAnalytics,\n LimitOrder,\n TradingCondition,\n Webhook,\n WebhookDelivery,\n CreateWebhookInput,\n UpdateWebhookInput,\n AdminUser,\n AdminProject,\n SystemStats,\n PaginatedResult,\n AdminListOptions,\n SystemLog,\n RateLimitInfo,\n} from '../types';\n\n// ===== Auth Types =====\nexport interface EngineAuthResponse {\n user: User;\n accessToken: string;\n refreshToken?: string;\n expiresIn: number;\n}\n\n// ===== Wallet Types =====\nexport interface EngineWalletBalance {\n address: string;\n totalUsd: number;\n change24h: number;\n changePercent24h: number;\n tokens: Token[];\n}\n\nexport interface EngineTransactionRequest {\n to: string;\n amount: string;\n tokenSymbol: string;\n chainId: number;\n memo?: string;\n}\n\nexport interface EngineTransactionResponse {\n txId: string;\n status: 'queued' | 'pending' | 'confirmed' | 'failed';\n txHash?: string;\n explorerUrl?: string;\n}\n\n// ===== Onramp Types =====\nexport interface OnrampSessionRequest {\n walletAddress: string;\n fiatCurrency?: string;\n fiatAmount?: number;\n cryptoCurrency?: string;\n cryptoNetwork?: string;\n paymentMethod?: string;\n redirectUrl?: string;\n}\n\nexport interface OnrampSession {\n sessionId: string;\n widgetUrl: string;\n expiresAt: string;\n}\n\nexport interface OnrampQuote {\n provider: string;\n fiatCurrency: string;\n fiatAmount: number;\n cryptoCurrency: string;\n cryptoAmount: number;\n rate: number;\n fees: {\n network: number;\n provider: number;\n total: number;\n };\n paymentMethod: string;\n estimatedTime: string;\n}\n\nexport interface OnrampTransaction {\n id: string;\n sessionId: string;\n status: 'pending' | 'processing' | 'completed' | 'failed' | 'expired';\n fiatAmount: number;\n fiatCurrency: string;\n cryptoAmount?: number;\n cryptoCurrency: string;\n walletAddress: string;\n txHash?: string;\n createdAt: string;\n completedAt?: string;\n}\n\n// ===== Swap Types =====\nexport interface SwapQuoteRequest {\n fromToken: string;\n fromAmount: string;\n fromChainId: number;\n toToken: string;\n toChainId: number;\n walletAddress: string;\n slippage?: number;\n}\n\nexport interface SwapQuote {\n quoteId: string;\n fromToken: string;\n fromAmount: string;\n fromChainId: number;\n toToken: string;\n toAmount: string;\n toChainId: number;\n rate: number;\n priceImpact: number;\n estimatedGas: string;\n estimatedTime: string;\n fees: {\n gas: number;\n protocol: number;\n total: number;\n };\n expiresAt: string;\n}\n\nexport interface SwapExecuteRequest {\n quoteId: string;\n walletAddress: string;\n signature?: string; // For backend wallets\n}\n\nexport interface SwapResult {\n swapId: string;\n status: 'pending' | 'confirming' | 'completed' | 'failed';\n txHash?: string;\n fromAmount: string;\n toAmount?: string;\n}\n\n// ===== Main Client =====\nexport class OneEngineClient {\n private baseUrl: string;\n private clientId: string;\n private secretKey?: string;\n private accessToken?: string;\n\n constructor(options?: {\n baseUrl?: string;\n clientId?: string;\n secretKey?: string;\n }) {\n const config = getConfig();\n this.baseUrl = options?.baseUrl || config.oneEngineUrl;\n this.clientId = options?.clientId || config.oneClientId || '';\n this.secretKey = options?.secretKey || config.oneSecretKey;\n }\n\n /**\n * Set access token for authenticated requests\n */\n setAccessToken(token: string) {\n this.accessToken = token;\n }\n\n /**\n * Clear access token\n */\n clearAccessToken() {\n this.accessToken = undefined;\n }\n\n private getHeaders(includeSecret = false): Record<string, string> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'x-client-id': this.clientId,\n };\n\n if (this.accessToken) {\n headers['Authorization'] = `Bearer ${this.accessToken}`;\n }\n\n if (includeSecret && this.secretKey) {\n headers['x-secret-key'] = this.secretKey;\n }\n\n return headers;\n }\n\n private async request<T>(\n endpoint: string,\n options: RequestInit = {},\n includeSecret = false\n ): Promise<ApiResponse<T>> {\n try {\n const response = await fetch(`${this.baseUrl}${endpoint}`, {\n ...options,\n headers: {\n ...this.getHeaders(includeSecret),\n ...options.headers,\n },\n });\n\n const data = await response.json();\n\n if (!response.ok) {\n return {\n success: false,\n error: {\n code: data.error?.code || `HTTP_${response.status}`,\n message: data.error?.message || 'Request failed',\n },\n };\n }\n\n return {\n success: true,\n data: data.data || data,\n };\n } catch (error) {\n return {\n success: false,\n error: {\n code: 'NETWORK_ERROR',\n message: error instanceof Error ? error.message : 'Network request failed',\n },\n };\n }\n }\n\n // ===============================\n // AUTH ENDPOINTS\n // ===============================\n\n /**\n * Send OTP to email for authentication\n */\n async sendEmailOtp(email: string): Promise<ApiResponse<{ message: string }>> {\n return this.request('/api/v1/auth/otp', {\n method: 'POST',\n body: JSON.stringify({ email }),\n });\n }\n\n /**\n * Verify OTP and get access token\n */\n async verifyEmailOtp(email: string, otp: string): Promise<ApiResponse<EngineAuthResponse>> {\n return this.request('/api/v1/auth/otp/verify', {\n method: 'POST',\n body: JSON.stringify({ email, otp }),\n });\n }\n\n /**\n * Authenticate with wallet signature\n */\n async authWithWallet(\n walletAddress: string,\n signature: string,\n message: string\n ): Promise<ApiResponse<EngineAuthResponse>> {\n return this.request('/api/v1/auth/wallet', {\n method: 'POST',\n body: JSON.stringify({ walletAddress, signature, message }),\n });\n }\n\n /**\n * Refresh access token\n */\n async refreshToken(refreshToken: string): Promise<ApiResponse<EngineAuthResponse>> {\n return this.request('/api/v1/auth/refresh', {\n method: 'POST',\n body: JSON.stringify({ refreshToken }),\n });\n }\n\n /**\n * Get current user\n */\n async getCurrentUser(): Promise<ApiResponse<User>> {\n return this.request('/api/v1/auth/me', { method: 'GET' });\n }\n\n /**\n * Sign out\n */\n async signOut(): Promise<ApiResponse<{ success: boolean }>> {\n return this.request('/api/v1/auth/logout', { method: 'POST' });\n }\n\n // ===============================\n // WALLET/ASSETS ENDPOINTS\n // ===============================\n\n /**\n * Get wallet balance across all chains\n */\n async getWalletBalance(\n walletAddress: string,\n chains?: number[]\n ): Promise<ApiResponse<EngineWalletBalance>> {\n const params = new URLSearchParams({ address: walletAddress });\n if (chains?.length && chains.length > 0) {\n params.set('chainId', chains[0].toString()); // Engine expects single chainId\n }\n return this.request(`/api/v1/assets?${params}`, { method: 'GET' });\n }\n\n /**\n * Get portfolio summary\n */\n async getPortfolioSummary(\n walletAddress: string\n ): Promise<ApiResponse<{ totalValue: number; change24h: number; tokens: Token[] }>> {\n const params = new URLSearchParams({ address: walletAddress });\n return this.request(`/api/v1/assets/portfolio?${params}`, { method: 'GET' });\n }\n\n /**\n * Get user's wallets\n */\n async getUserWallets(\n chainId?: number\n ): Promise<ApiResponse<{ wallets: any[]; total: number }>> {\n const params = chainId ? `?chainId=${chainId}` : '';\n return this.request(`/api/v1/wallet${params}`, { method: 'GET' });\n }\n\n /**\n * Create a new wallet\n */\n async createWallet(\n chainId: number = 8453,\n type: 'smart' | 'eoa' | 'multisig' = 'smart'\n ): Promise<ApiResponse<{ wallet: any; smartAccountAddress: string; personalAddress: string }>> {\n return this.request('/api/v1/wallet', {\n method: 'POST',\n body: JSON.stringify({ chainId, type }),\n });\n }\n\n /**\n * Get wallet transactions (placeholder - needs endpoint)\n */\n async getWalletTransactions(\n walletAddress: string,\n options?: { limit?: number; offset?: number; chainId?: number }\n ): Promise<ApiResponse<{ transactions: Transaction[]; total: number }>> {\n const params = new URLSearchParams({ address: walletAddress });\n if (options?.limit) params.set('limit', options.limit.toString());\n if (options?.offset) params.set('offset', options.offset.toString());\n if (options?.chainId) params.set('chainId', options.chainId.toString());\n return this.request(`/api/v1/assets/transactions?${params}`, { method: 'GET' });\n }\n\n /**\n * Send native token or ERC20\n */\n async sendTransaction(\n request: EngineTransactionRequest\n ): Promise<ApiResponse<EngineTransactionResponse>> {\n return this.request('/api/v1/wallet/send', {\n method: 'POST',\n body: JSON.stringify(request),\n });\n }\n\n /**\n * Get transaction status\n */\n async getTransactionStatus(txId: string): Promise<ApiResponse<EngineTransactionResponse>> {\n return this.request(`/api/v1/wallet/transaction/${txId}`, { method: 'GET' });\n }\n\n // ===============================\n // ONRAMP ENDPOINTS (Fiat-to-Crypto)\n // ===============================\n\n /**\n * Get onramp quote\n */\n async getOnrampQuote(\n fiatCurrency: string,\n fiatAmount: number,\n cryptoCurrency: string,\n paymentMethod?: string\n ): Promise<ApiResponse<OnrampQuote[]>> {\n const params = new URLSearchParams({\n fiatCurrency,\n fiatAmount: fiatAmount.toString(),\n cryptoCurrency,\n });\n if (paymentMethod) params.set('paymentMethod', paymentMethod);\n return this.request(`/api/v1/fiat/onramp/quote?${params}`, { method: 'GET' });\n }\n\n /**\n * Create onramp session (returns widget URL)\n */\n async createOnrampSession(\n request: OnrampSessionRequest\n ): Promise<ApiResponse<OnrampSession>> {\n return this.request('/api/v1/fiat/onramp', {\n method: 'POST',\n body: JSON.stringify({\n fiatCurrency: request.fiatCurrency || 'USD',\n fiatAmount: request.fiatAmount || 100,\n cryptoCurrency: request.cryptoCurrency || 'ETH',\n walletAddress: request.walletAddress,\n chainId: 8453, // Default to Base\n }),\n });\n }\n\n /**\n * Get onramp session status\n */\n async getOnrampStatus(sessionId: string): Promise<ApiResponse<OnrampTransaction>> {\n return this.request(`/api/v1/fiat/onramp/${sessionId}`, { method: 'GET' });\n }\n\n /**\n * Get supported currencies (fiat + crypto)\n */\n async getSupportedCurrencies(): Promise<ApiResponse<{ fiatCurrencies: string[]; cryptoCurrencies: string[] }>> {\n return this.request('/api/v1/fiat/onramp', { method: 'GET' });\n }\n\n /**\n * Get supported fiat currencies\n */\n async getSupportedFiatCurrencies(): Promise<ApiResponse<string[]>> {\n const result = await this.getSupportedCurrencies();\n if (result.success && result.data) {\n return { success: true, data: result.data.fiatCurrencies };\n }\n return { success: false, error: result.error };\n }\n\n /**\n * Get supported payment methods\n */\n async getSupportedPaymentMethods(country?: string): Promise<ApiResponse<string[]>> {\n // Placeholder - engine doesn't have this endpoint yet\n return { success: true, data: ['card', 'bank_transfer', 'apple_pay', 'google_pay'] };\n }\n\n // ===============================\n // SWAP ENDPOINTS\n // ===============================\n\n /**\n * Get swap quote\n */\n async getSwapQuote(request: SwapQuoteRequest): Promise<ApiResponse<SwapQuote>> {\n return this.request('/api/v1/swap/quote', {\n method: 'POST',\n body: JSON.stringify(request),\n });\n }\n\n /**\n * Execute swap\n */\n async executeSwap(request: SwapExecuteRequest): Promise<ApiResponse<SwapResult>> {\n return this.request('/api/v1/swap/execute', {\n method: 'POST',\n body: JSON.stringify(request),\n });\n }\n\n /**\n * Get swap status\n */\n async getSwapStatus(swapId: string): Promise<ApiResponse<SwapResult>> {\n return this.request(`/api/v1/swap/${swapId}`, { method: 'GET' });\n }\n\n /**\n * Get supported tokens for swap\n */\n async getSupportedSwapTokens(chainId?: number): Promise<ApiResponse<{ tokens: Token[] }>> {\n const params = chainId ? `?chainId=${chainId}` : '';\n return this.request(`/api/v1/swap/tokens${params}`, { method: 'GET' });\n }\n\n /**\n * Get supported chains for swap\n */\n async getSupportedSwapChains(): Promise<ApiResponse<{ chains: { id: number; name: string }[] }>> {\n return this.request('/api/v1/swap/chains', { method: 'GET' });\n }\n\n // ===============================\n // AI TRADING/QUANT ENDPOINTS\n // ===============================\n\n /**\n * Get available AI trading strategies\n */\n async getStrategies(): Promise<ApiResponse<AIStrategy[]>> {\n return this.request('/api/v1/quant/strategies', { method: 'GET' });\n }\n\n /**\n * Get strategy details\n */\n async getStrategy(strategyId: string): Promise<ApiResponse<AIStrategy>> {\n return this.request(`/api/v1/quant/strategies/${strategyId}`, { method: 'GET' });\n }\n\n /**\n * Get user's positions\n */\n async getPositions(): Promise<ApiResponse<any[]>> {\n return this.request('/api/v1/quant/positions', { method: 'GET' });\n }\n\n /**\n * Create investment order\n */\n async createOrder(\n strategyId: string,\n amount: number,\n currency: string\n ): Promise<ApiResponse<AIOrder>> {\n return this.request('/api/v1/trading/orders', {\n method: 'POST',\n body: JSON.stringify({ strategyId, amount, currency }),\n });\n }\n\n /**\n * Get user's orders\n */\n async getUserOrders(): Promise<ApiResponse<AIOrder[]>> {\n return this.request('/api/v1/trading/orders', { method: 'GET' });\n }\n\n /**\n * Get user's portfolio stats from positions\n */\n async getPortfolioStats(): Promise<ApiResponse<{\n totalInvested: number;\n totalValue: number;\n totalPnl: number;\n totalPnlPercent: number;\n activePositions: number;\n }>> {\n // Derive from positions\n const positionsResult = await this.getPositions();\n if (positionsResult.success && positionsResult.data) {\n const positions = positionsResult.data;\n const totalInvested = positions.reduce((sum, p) => sum + (p.investedAmount || 0), 0);\n const totalValue = positions.reduce((sum, p) => sum + (p.currentValue || 0), 0);\n const totalPnl = totalValue - totalInvested;\n const totalPnlPercent = totalInvested > 0 ? (totalPnl / totalInvested) * 100 : 0;\n return {\n success: true,\n data: {\n totalInvested,\n totalValue,\n totalPnl,\n totalPnlPercent,\n activePositions: positions.filter((p: any) => p.status === 'active').length,\n },\n };\n }\n return {\n success: true,\n data: { totalInvested: 0, totalValue: 0, totalPnl: 0, totalPnlPercent: 0, activePositions: 0 },\n };\n }\n\n // ===============================\n // MARKET/PRICE ENDPOINTS\n // ===============================\n\n /**\n * Get token prices\n */\n async getTokenPrices(symbols: string[]): Promise<ApiResponse<Record<string, {\n price: number;\n change24h: number;\n marketCap?: number;\n }>>> {\n // Convert symbols to Bybit format (add USDT suffix if needed)\n const bybitSymbols = symbols.map(s => {\n const upper = s.toUpperCase();\n if (upper.endsWith('USDT')) return upper;\n return `${upper}USDT`;\n });\n\n const result = await this.request<{ markets: any[] }>(\n `/api/v1/trading/market?symbols=${bybitSymbols.join(',')}`,\n { method: 'GET' }\n );\n\n if (result.success && result.data?.markets) {\n const prices: Record<string, { price: number; change24h: number; marketCap?: number }> = {};\n for (const market of result.data.markets) {\n const symbol = market.symbol?.replace('USDT', '') || '';\n prices[symbol] = {\n price: parseFloat(market.lastPrice) || 0,\n change24h: parseFloat(market.price24hPcnt) * 100 || 0,\n marketCap: undefined, // Bybit doesn't provide this\n };\n }\n return { success: true, data: prices };\n }\n return { success: false, error: result.error };\n }\n\n /**\n * Get market data overview\n */\n async getMarketData(): Promise<ApiResponse<{\n totalMarketCap: number;\n totalVolume24h: number;\n btcDominance: number;\n markets: any[];\n }>> {\n const result = await this.request<{ markets: any[] }>('/api/v1/trading/market', { method: 'GET' });\n if (result.success && result.data?.markets) {\n return {\n success: true,\n data: {\n totalMarketCap: 0, // Would need separate API\n totalVolume24h: result.data.markets.reduce((sum, m) => sum + (parseFloat(m.volume24h) || 0), 0),\n btcDominance: 0, // Would need separate API\n markets: result.data.markets,\n },\n };\n }\n return { success: false, error: result.error };\n }\n\n // ===============================\n // NFT ENDPOINTS\n // ===============================\n\n /**\n * Get user's NFTs\n */\n async getUserNFTs(\n walletAddress: string,\n options?: { chainId?: number; limit?: number; offset?: number }\n ): Promise<ApiResponse<{ nfts: NFT[]; total: number }>> {\n const params = new URLSearchParams({ address: walletAddress });\n if (options?.chainId) params.set('chainId', options.chainId.toString());\n if (options?.limit) params.set('limit', options.limit.toString());\n if (options?.offset) params.set('offset', options.offset.toString());\n return this.request(`/api/v1/assets/nfts?${params}`, { method: 'GET' });\n }\n\n /**\n * Get NFT details\n */\n async getNFTDetails(\n contractAddress: string,\n tokenId: string,\n chainId: number\n ): Promise<ApiResponse<NFT>> {\n return this.request(`/api/v1/assets/nfts/${contractAddress}/${tokenId}?chainId=${chainId}`, { method: 'GET' });\n }\n\n /**\n * Get NFT collection\n */\n async getNFTCollection(\n contractAddress: string,\n chainId: number\n ): Promise<ApiResponse<NFTCollection>> {\n return this.request(`/api/v1/assets/nfts/collection/${contractAddress}?chainId=${chainId}`, { method: 'GET' });\n }\n\n /**\n * Transfer NFT\n */\n async transferNFT(params: {\n contractAddress: string;\n tokenId: string;\n chainId: number;\n to: string;\n tokenType?: 'ERC721' | 'ERC1155';\n amount?: number; // For ERC1155\n }): Promise<ApiResponse<{ txHash: string; status: string }>> {\n return this.request('/api/v1/assets/nfts/transfer', {\n method: 'POST',\n body: JSON.stringify(params),\n });\n }\n\n // ===============================\n // CONTRACT ENDPOINTS\n // ===============================\n\n /**\n * Get user's contracts\n */\n async getUserContracts(\n options?: { chainId?: number; limit?: number; offset?: number }\n ): Promise<ApiResponse<{ contracts: Contract[]; total: number }>> {\n const params = new URLSearchParams();\n if (options?.chainId) params.set('chainId', options.chainId.toString());\n if (options?.limit) params.set('limit', options.limit.toString());\n if (options?.offset) params.set('offset', options.offset.toString());\n return this.request(`/api/v1/contracts?${params}`, { method: 'GET' });\n }\n\n /**\n * Get contract details\n */\n async getContractDetails(\n address: string,\n chainId: number\n ): Promise<ApiResponse<Contract>> {\n return this.request(`/api/v1/contracts/${address}?chainId=${chainId}`, { method: 'GET' });\n }\n\n /**\n * Read contract (call view function)\n */\n async readContract(params: ContractReadParams): Promise<ApiResponse<any>> {\n return this.request('/api/v1/contracts/read', {\n method: 'POST',\n body: JSON.stringify(params),\n });\n }\n\n /**\n * Write to contract (execute transaction)\n */\n async writeContract(params: ContractWriteParams): Promise<ApiResponse<{\n txHash: string;\n status: string;\n }>> {\n return this.request('/api/v1/contracts/write', {\n method: 'POST',\n body: JSON.stringify(params),\n });\n }\n\n /**\n * Deploy contract\n */\n async deployContract(params: ContractDeployParams): Promise<ApiResponse<{\n address: string;\n txHash: string;\n contract: Contract;\n }>> {\n return this.request('/api/v1/contracts/deploy', {\n method: 'POST',\n body: JSON.stringify(params),\n });\n }\n\n // ===============================\n // OFFRAMP ENDPOINTS (Crypto-to-Fiat)\n // ===============================\n\n /**\n * Get offramp quote\n */\n async getOfframpQuote(\n cryptoCurrency: string,\n cryptoAmount: number,\n fiatCurrency: string,\n payoutMethod?: string\n ): Promise<ApiResponse<OfframpQuote[]>> {\n const params = new URLSearchParams({\n cryptoCurrency,\n cryptoAmount: cryptoAmount.toString(),\n fiatCurrency,\n });\n if (payoutMethod) params.set('payoutMethod', payoutMethod);\n return this.request(`/api/v1/fiat/offramp/quote?${params}`, { method: 'GET' });\n }\n\n /**\n * Create offramp transaction\n */\n async createOfframpTransaction(request: OfframpRequest): Promise<ApiResponse<OfframpTransaction>> {\n return this.request('/api/v1/fiat/offramp', {\n method: 'POST',\n body: JSON.stringify(request),\n });\n }\n\n /**\n * Get offramp transaction status\n */\n async getOfframpStatus(transactionId: string): Promise<ApiResponse<OfframpTransaction>> {\n return this.request(`/api/v1/fiat/offramp/${transactionId}`, { method: 'GET' });\n }\n\n /**\n * Get supported payout methods\n */\n async getSupportedPayoutMethods(country?: string): Promise<ApiResponse<string[]>> {\n const params = country ? `?country=${country}` : '';\n return this.request(`/api/v1/fiat/offramp/methods${params}`, { method: 'GET' });\n }\n\n // ===============================\n // BILL PAYMENT ENDPOINTS\n // ===============================\n\n /**\n * Get bill providers\n */\n async getBillProviders(\n country?: string,\n category?: string\n ): Promise<ApiResponse<BillProvider[]>> {\n const params = new URLSearchParams();\n if (country) params.set('country', country);\n if (category) params.set('category', category);\n return this.request(`/api/v1/bills/providers?${params}`, { method: 'GET' });\n }\n\n /**\n * Get bill details/validate account\n */\n async validateBillAccount(\n providerId: string,\n accountNumber: string\n ): Promise<ApiResponse<{\n valid: boolean;\n accountName?: string;\n minAmount?: number;\n maxAmount?: number;\n dueAmount?: number;\n }>> {\n return this.request('/api/v1/bills/validate', {\n method: 'POST',\n body: JSON.stringify({ providerId, accountNumber }),\n });\n }\n\n /**\n * Pay bill\n */\n async payBill(params: {\n providerId: string;\n accountNumber: string;\n amount: number;\n currency: string;\n }): Promise<ApiResponse<BillPayment>> {\n return this.request('/api/v1/bills/pay', {\n method: 'POST',\n body: JSON.stringify(params),\n });\n }\n\n /**\n * Get bill payment history\n */\n async getBillHistory(\n options?: { limit?: number; offset?: number }\n ): Promise<ApiResponse<{ payments: BillPayment[]; total: number }>> {\n const params = new URLSearchParams();\n if (options?.limit) params.set('limit', options.limit.toString());\n if (options?.offset) params.set('offset', options.offset.toString());\n return this.request(`/api/v1/bills/history?${params}`, { method: 'GET' });\n }\n\n // ===============================\n // STAKING ENDPOINTS\n // ===============================\n\n /**\n * Get staking pools\n */\n async getStakingPools(\n chainId?: number\n ): Promise<ApiResponse<StakingPool[]>> {\n const params = chainId ? `?chainId=${chainId}` : '';\n return this.request(`/api/v1/staking/pools${params}`, { method: 'GET' });\n }\n\n /**\n * Get user's staking positions\n */\n async getStakingPositions(): Promise<ApiResponse<StakingPosition[]>> {\n return this.request('/api/v1/staking/positions', { method: 'GET' });\n }\n\n /**\n * Stake tokens\n */\n async stake(params: {\n poolId: string;\n amount: number;\n }): Promise<ApiResponse<{ positionId: string; txHash: string }>> {\n return this.request('/api/v1/staking/stake', {\n method: 'POST',\n body: JSON.stringify(params),\n });\n }\n\n /**\n * Unstake tokens\n */\n async unstake(params: {\n positionId: string;\n amount?: number; // Optional for partial unstake\n }): Promise<ApiResponse<{ txHash: string }>> {\n return this.request('/api/v1/staking/unstake', {\n method: 'POST',\n body: JSON.stringify(params),\n });\n }\n\n /**\n * Claim staking rewards\n */\n async claimStakingRewards(positionId: string): Promise<ApiResponse<{ txHash: string; amount: number }>> {\n return this.request('/api/v1/staking/claim', {\n method: 'POST',\n body: JSON.stringify({ positionId }),\n });\n }\n\n // ===============================\n // USER PROFILE ENDPOINTS\n // ===============================\n\n /**\n * Get user profile\n */\n async getUserProfile(): Promise<ApiResponse<UserProfile>> {\n return this.request('/api/v1/user/profile', { method: 'GET' });\n }\n\n /**\n * Update user profile\n */\n async updateUserProfile(updates: Partial<UserProfile>): Promise<ApiResponse<UserProfile>> {\n return this.request('/api/v1/user/profile', {\n method: 'PATCH',\n body: JSON.stringify(updates),\n });\n }\n\n /**\n * Get user settings\n */\n async getUserSettings(): Promise<ApiResponse<UserSettings>> {\n return this.request('/api/v1/user/settings', { method: 'GET' });\n }\n\n /**\n * Update user settings\n */\n async updateUserSettings(updates: Partial<UserSettings>): Promise<ApiResponse<UserSettings>> {\n return this.request('/api/v1/user/settings', {\n method: 'PATCH',\n body: JSON.stringify(updates),\n });\n }\n\n // ===============================\n // NOTIFICATION ENDPOINTS\n // ===============================\n\n /**\n * Get notifications\n */\n async getNotifications(\n options?: { unreadOnly?: boolean; limit?: number; offset?: number }\n ): Promise<ApiResponse<{ notifications: Notification[]; unreadCount: number }>> {\n const params = new URLSearchParams();\n if (options?.unreadOnly) params.set('unreadOnly', 'true');\n if (options?.limit) params.set('limit', options.limit.toString());\n if (options?.offset) params.set('offset', options.offset.toString());\n return this.request(`/api/v1/notifications?${params}`, { method: 'GET' });\n }\n\n /**\n * Mark notification as read\n */\n async markNotificationRead(notificationId: string): Promise<ApiResponse<void>> {\n return this.request(`/api/v1/notifications/${notificationId}/read`, { method: 'POST' });\n }\n\n /**\n * Mark all notifications as read\n */\n async markAllNotificationsRead(): Promise<ApiResponse<void>> {\n return this.request('/api/v1/notifications/read-all', { method: 'POST' });\n }\n\n // ===============================\n // REFERRAL ENDPOINTS\n // ===============================\n\n /**\n * Get referral info\n */\n async getReferralInfo(): Promise<ApiResponse<ReferralInfo>> {\n return this.request('/api/v1/referral', { method: 'GET' });\n }\n\n /**\n * Get referred users\n */\n async getReferrals(): Promise<ApiResponse<Referral[]>> {\n return this.request('/api/v1/referral/list', { method: 'GET' });\n }\n\n /**\n * Apply referral code\n */\n async applyReferralCode(code: string): Promise<ApiResponse<{ success: boolean; message: string }>> {\n return this.request('/api/v1/referral/apply', {\n method: 'POST',\n body: JSON.stringify({ code }),\n });\n }\n\n /**\n * Claim referral rewards\n */\n async claimReferralRewards(): Promise<ApiResponse<{ amount: number; txHash?: string }>> {\n return this.request('/api/v1/referral/claim', { method: 'POST' });\n }\n\n // ===============================\n // KYC ENDPOINTS\n // ===============================\n\n /**\n * Get KYC status\n */\n async getKycStatus(): Promise<ApiResponse<{\n status: 'none' | 'pending' | 'verified' | 'rejected';\n level: number;\n limits: { daily: number; monthly: number };\n rejectionReason?: string;\n }>> {\n return this.request('/api/v1/kyc/status', { method: 'GET' });\n }\n\n /**\n * Start KYC verification\n */\n async startKycVerification(level: number): Promise<ApiResponse<{\n verificationUrl: string;\n sessionId: string;\n }>> {\n return this.request('/api/v1/kyc/start', {\n method: 'POST',\n body: JSON.stringify({ level }),\n });\n }\n\n /**\n * Submit KYC documents\n */\n async submitKycDocuments(params: {\n documentType: 'passport' | 'id_card' | 'drivers_license';\n frontImage: string; // base64\n backImage?: string; // base64\n selfieImage: string; // base64\n }): Promise<ApiResponse<{ status: string; message: string }>> {\n return this.request('/api/v1/kyc/submit', {\n method: 'POST',\n body: JSON.stringify(params),\n });\n }\n\n // ===============================\n // BRIDGE ENDPOINTS\n // ===============================\n\n /**\n * Get bridge quote\n */\n async getBridgeQuote(params: {\n fromChainId: number;\n toChainId: number;\n fromToken: string;\n toToken: string;\n amount: string;\n walletAddress: string;\n }): Promise<ApiResponse<BridgeQuote>> {\n return this.request('/api/v1/bridge/quote', {\n method: 'POST',\n body: JSON.stringify(params),\n });\n }\n\n /**\n * Execute bridge transaction\n */\n async executeBridge(params: {\n quoteId: string;\n walletAddress: string;\n }): Promise<ApiResponse<BridgeTransaction>> {\n return this.request('/api/v1/bridge/execute', {\n method: 'POST',\n body: JSON.stringify(params),\n });\n }\n\n /**\n * Get bridge transaction status\n */\n async getBridgeStatus(bridgeId: string): Promise<ApiResponse<BridgeTransaction>> {\n return this.request(`/api/v1/bridge/${bridgeId}`, { method: 'GET' });\n }\n\n /**\n * Get supported bridge routes\n */\n async getSupportedBridgeRoutes(): Promise<ApiResponse<{\n routes: { fromChainId: number; toChainId: number; tokens: string[] }[];\n }>> {\n return this.request('/api/v1/bridge/routes', { method: 'GET' });\n }\n\n // ===============================\n // GAS ENDPOINTS\n // ===============================\n\n /**\n * Get gas estimate for transaction\n */\n async getGasEstimate(params: {\n chainId: number;\n to: string;\n data?: string;\n value?: string;\n }): Promise<ApiResponse<GasEstimate>> {\n return this.request('/api/v1/gas/estimate', {\n method: 'POST',\n body: JSON.stringify(params),\n });\n }\n\n /**\n * Get current gas prices for chain\n */\n async getGasPrice(chainId: number): Promise<ApiResponse<GasPrice>> {\n return this.request(`/api/v1/gas/price?chainId=${chainId}`, { method: 'GET' });\n }\n\n // ===============================\n // WALLET IMPORT/EXPORT ENDPOINTS\n // ===============================\n\n /**\n * Import wallet from private key or mnemonic\n */\n async importWallet(request: WalletImportRequest): Promise<ApiResponse<{\n wallet: any;\n address: string;\n smartAccountAddress?: string;\n }>> {\n return this.request('/api/v1/wallet/import', {\n method: 'POST',\n body: JSON.stringify(request),\n }, true); // Include secret key for secure import\n }\n\n /**\n * Export wallet (get encrypted private key)\n * Requires additional authentication\n */\n async exportWallet(walletId: string, pin: string): Promise<ApiResponse<{\n encryptedPrivateKey: string;\n address: string;\n }>> {\n return this.request('/api/v1/wallet/export', {\n method: 'POST',\n body: JSON.stringify({ walletId, pin }),\n }, true);\n }\n\n /**\n * Generate new mnemonic phrase\n */\n async generateMnemonic(): Promise<ApiResponse<{ mnemonic: string; address: string }>> {\n return this.request('/api/v1/wallet/generate-mnemonic', { method: 'POST' }, true);\n }\n\n /**\n * Validate mnemonic phrase\n */\n async validateMnemonic(mnemonic: string): Promise<ApiResponse<{ valid: boolean; address?: string }>> {\n return this.request('/api/v1/wallet/validate-mnemonic', {\n method: 'POST',\n body: JSON.stringify({ mnemonic }),\n });\n }\n\n // ===============================\n // PORTFOLIO ANALYTICS ENDPOINTS\n // ===============================\n\n /**\n * Get portfolio analytics with historical data\n */\n async getPortfolioAnalytics(\n walletAddress: string,\n period: '24h' | '7d' | '30d' | '90d' | '1y' | 'all' = '30d'\n ): Promise<ApiResponse<PortfolioAnalytics>> {\n const params = new URLSearchParams({ address: walletAddress, period });\n return this.request(`/api/v1/analytics/portfolio?${params}`, { method: 'GET' });\n }\n\n /**\n * Get transaction analytics\n */\n async getTransactionAnalytics(\n walletAddress: string,\n period: '24h' | '7d' | '30d' | '90d' = '30d'\n ): Promise<ApiResponse<{\n totalTransactions: number;\n totalVolume: number;\n avgTransactionValue: number;\n byType: Record<string, number>;\n byChain: Record<string, number>;\n }>> {\n const params = new URLSearchParams({ address: walletAddress, period });\n return this.request(`/api/v1/analytics/transactions?${params}`, { method: 'GET' });\n }\n\n // ===============================\n // ADVANCED TRADING ENDPOINTS\n // ===============================\n\n /**\n * Create limit order\n */\n async createLimitOrder(params: {\n tokenSymbol: string;\n type: 'buy' | 'sell';\n amount: number;\n limitPrice: number;\n chainId: number;\n expiresIn?: number; // seconds\n conditions?: TradingCondition[];\n }): Promise<ApiResponse<LimitOrder>> {\n return this.request('/api/v1/trading/limit-orders', {\n method: 'POST',\n body: JSON.stringify(params),\n });\n }\n\n /**\n * Get user's limit orders\n */\n async getLimitOrders(status?: 'pending' | 'filled' | 'cancelled'): Promise<ApiResponse<LimitOrder[]>> {\n const params = status ? `?status=${status}` : '';\n return this.request(`/api/v1/trading/limit-orders${params}`, { method: 'GET' });\n }\n\n /**\n * Cancel limit order\n */\n async cancelLimitOrder(orderId: string): Promise<ApiResponse<{ success: boolean }>> {\n return this.request(`/api/v1/trading/limit-orders/${orderId}`, { method: 'DELETE' });\n }\n\n /**\n * Set price alert\n */\n async setPriceAlert(params: {\n tokenSymbol: string;\n targetPrice: number;\n condition: 'above' | 'below';\n notification: 'push' | 'email' | 'both';\n }): Promise<ApiResponse<{ alertId: string }>> {\n return this.request('/api/v1/trading/alerts', {\n method: 'POST',\n body: JSON.stringify(params),\n });\n }\n\n /**\n * Get price alerts\n */\n async getPriceAlerts(): Promise<ApiResponse<{\n id: string;\n tokenSymbol: string;\n targetPrice: number;\n condition: 'above' | 'below';\n status: 'active' | 'triggered' | 'cancelled';\n createdAt: string;\n triggeredAt?: string;\n }[]>> {\n return this.request('/api/v1/trading/alerts', { method: 'GET' });\n }\n\n /**\n * Delete price alert\n */\n async deletePriceAlert(alertId: string): Promise<ApiResponse<{ success: boolean }>> {\n return this.request(`/api/v1/trading/alerts/${alertId}`, { method: 'DELETE' });\n }\n\n // ===============================\n // SESSION MANAGEMENT\n // ===============================\n\n /**\n * Get active sessions\n */\n async getActiveSessions(): Promise<ApiResponse<{\n sessions: {\n id: string;\n deviceName: string;\n ipAddress: string;\n lastActive: string;\n current: boolean;\n }[];\n }>> {\n return this.request('/api/v1/auth/sessions', { method: 'GET' });\n }\n\n /**\n * Revoke session\n */\n async revokeSession(sessionId: string): Promise<ApiResponse<{ success: boolean }>> {\n return this.request(`/api/v1/auth/sessions/${sessionId}`, { method: 'DELETE' });\n }\n\n /**\n * Revoke all other sessions\n */\n async revokeAllOtherSessions(): Promise<ApiResponse<{ revokedCount: number }>> {\n return this.request('/api/v1/auth/sessions/revoke-all', { method: 'POST' });\n }\n\n // ========== Webhooks ==========\n\n /**\n * List webhooks for the project\n */\n async listWebhooks(options?: { isActive?: boolean }): Promise<ApiResponse<{ webhooks: Webhook[]; total: number }>> {\n const params = new URLSearchParams();\n if (options?.isActive !== undefined) params.set('isActive', String(options.isActive));\n const query = params.toString();\n return this.request(`/api/v1/webhooks${query ? `?${query}` : ''}`, { method: 'GET' });\n }\n\n /**\n * Get webhook by ID\n */\n async getWebhook(webhookId: string): Promise<ApiResponse<{ webhook: Webhook }>> {\n return this.request(`/api/v1/webhooks/${webhookId}`, { method: 'GET' });\n }\n\n /**\n * Create a webhook\n */\n async createWebhook(input: CreateWebhookInput): Promise<ApiResponse<{ webhook: Webhook }>> {\n return this.request('/api/v1/webhooks', {\n method: 'POST',\n body: JSON.stringify(input),\n });\n }\n\n /**\n * Update a webhook\n */\n async updateWebhook(webhookId: string, input: UpdateWebhookInput): Promise<ApiResponse<{ webhook: Webhook }>> {\n return this.request(`/api/v1/webhooks/${webhookId}`, {\n method: 'PATCH',\n body: JSON.stringify(input),\n });\n }\n\n /**\n * Delete a webhook\n */\n async deleteWebhook(webhookId: string): Promise<ApiResponse<{ deleted: boolean }>> {\n return this.request(`/api/v1/webhooks/${webhookId}`, { method: 'DELETE' });\n }\n\n /**\n * Get webhook deliveries\n */\n async getWebhookDeliveries(\n webhookId: string,\n options?: { status?: 'pending' | 'success' | 'failed'; limit?: number; offset?: number }\n ): Promise<ApiResponse<{ deliveries: WebhookDelivery[]; total: number }>> {\n const params = new URLSearchParams();\n if (options?.status) params.set('status', options.status);\n if (options?.limit) params.set('limit', String(options.limit));\n if (options?.offset) params.set('offset', String(options.offset));\n const query = params.toString();\n return this.request(`/api/v1/webhooks/${webhookId}/deliveries${query ? `?${query}` : ''}`, { method: 'GET' });\n }\n\n /**\n * Test a webhook\n */\n async testWebhook(webhookId: string): Promise<ApiResponse<{\n success: boolean;\n statusCode?: number;\n responseTime?: number;\n error?: string;\n }>> {\n return this.request(`/api/v1/webhooks/${webhookId}/test`, { method: 'POST' });\n }\n\n // ========== Admin (requires admin role) ==========\n\n /**\n * List all users (admin only)\n */\n async adminListUsers(options?: AdminListOptions & {\n role?: 'user' | 'admin';\n kycStatus?: 'none' | 'pending' | 'verified' | 'rejected';\n isActive?: boolean;\n }): Promise<ApiResponse<PaginatedResult<AdminUser>>> {\n const params = new URLSearchParams();\n if (options?.page) params.set('page', String(options.page));\n if (options?.limit) params.set('limit', String(options.limit));\n if (options?.search) params.set('search', options.search);\n if (options?.sortBy) params.set('sortBy', options.sortBy);\n if (options?.sortOrder) params.set('sortOrder', options.sortOrder);\n if (options?.role) params.set('role', options.role);\n if (options?.kycStatus) params.set('kycStatus', options.kycStatus);\n if (options?.isActive !== undefined) params.set('isActive', String(options.isActive));\n const query = params.toString();\n return this.request(`/api/v1/admin/users${query ? `?${query}` : ''}`, { method: 'GET' });\n }\n\n /**\n * Get user by ID (admin only)\n */\n async adminGetUser(userId: string): Promise<ApiResponse<{ user: AdminUser }>> {\n return this.request(`/api/v1/admin/users/${userId}`, { method: 'GET' });\n }\n\n /**\n * Update user (admin only)\n */\n async adminUpdateUser(userId: string, data: {\n role?: 'user' | 'admin';\n isActive?: boolean;\n kycStatus?: 'none' | 'pending' | 'verified' | 'rejected';\n }): Promise<ApiResponse<{ user: AdminUser }>> {\n return this.request(`/api/v1/admin/users/${userId}`, {\n method: 'PATCH',\n body: JSON.stringify(data),\n });\n }\n\n /**\n * List all projects (admin only)\n */\n async adminListProjects(options?: AdminListOptions & {\n isActive?: boolean;\n }): Promise<ApiResponse<PaginatedResult<AdminProject>>> {\n const params = new URLSearchParams();\n if (options?.page) params.set('page', String(options.page));\n if (options?.limit) params.set('limit', String(options.limit));\n if (options?.search) params.set('search', options.search);\n if (options?.sortBy) params.set('sortBy', options.sortBy);\n if (options?.sortOrder) params.set('sortOrder', options.sortOrder);\n if (options?.isActive !== undefined) params.set('isActive', String(options.isActive));\n const query = params.toString();\n return this.request(`/api/v1/admin/projects${query ? `?${query}` : ''}`, { method: 'GET' });\n }\n\n /**\n * Get project by ID (admin only)\n */\n async adminGetProject(projectId: string): Promise<ApiResponse<{ project: AdminProject }>> {\n return this.request(`/api/v1/admin/projects/${projectId}`, { method: 'GET' });\n }\n\n /**\n * Update project (admin only)\n */\n async adminUpdateProject(projectId: string, data: {\n name?: string;\n isActive?: boolean;\n settings?: Record<string, unknown>;\n }): Promise<ApiResponse<{ project: AdminProject }>> {\n return this.request(`/api/v1/admin/projects/${projectId}`, {\n method: 'PATCH',\n body: JSON.stringify(data),\n });\n }\n\n /**\n * Regenerate project API key (admin only)\n */\n async adminRegenerateApiKey(projectId: string): Promise<ApiResponse<{ apiKey: string }>> {\n return this.request(`/api/v1/admin/projects/${projectId}/regenerate-key`, { method: 'POST' });\n }\n\n /**\n * Get system statistics (admin only)\n */\n async adminGetStats(days?: number): Promise<ApiResponse<SystemStats>> {\n const query = days ? `?days=${days}` : '';\n return this.request(`/api/v1/admin/stats${query}`, { method: 'GET' });\n }\n\n /**\n * Get system logs (admin only)\n */\n async adminGetLogs(options?: {\n level?: 'info' | 'warn' | 'error';\n service?: string;\n limit?: number;\n offset?: number;\n startDate?: string;\n endDate?: string;\n }): Promise<ApiResponse<{ logs: SystemLog[]; total: number }>> {\n const params = new URLSearchParams();\n if (options?.level) params.set('level', options.level);\n if (options?.service) params.set('service', options.service);\n if (options?.limit) params.set('limit', String(options.limit));\n if (options?.offset) params.set('offset', String(options.offset));\n if (options?.startDate) params.set('startDate', options.startDate);\n if (options?.endDate) params.set('endDate', options.endDate);\n const query = params.toString();\n return this.request(`/api/v1/admin/logs${query ? `?${query}` : ''}`, { method: 'GET' });\n }\n\n /**\n * Get rate limit status (admin only)\n */\n async adminGetRateLimits(options?: {\n identifier?: string;\n limit?: number;\n }): Promise<ApiResponse<{ limits: RateLimitInfo[] }>> {\n const params = new URLSearchParams();\n if (options?.identifier) params.set('identifier', options.identifier);\n if (options?.limit) params.set('limit', String(options.limit));\n const query = params.toString();\n return this.request(`/api/v1/admin/rate-limits${query ? `?${query}` : ''}`, { method: 'GET' });\n }\n\n /**\n * Clear rate limits for an identifier (admin only)\n */\n async adminClearRateLimits(identifier: string): Promise<ApiResponse<{ success: boolean }>> {\n return this.request(`/api/v1/admin/rate-limits/${identifier}`, { method: 'DELETE' });\n }\n\n // ========== AI Quant Trading ==========\n\n /**\n * Get all AI trading strategies\n */\n async getAIStrategies(filters?: {\n category?: StrategyCategory;\n riskLevel?: number;\n minTvl?: number;\n isActive?: boolean;\n }): Promise<ApiResponse<{ strategies: AIStrategy[] }>> {\n const params = new URLSearchParams();\n if (filters?.category) params.set('category', filters.category);\n if (filters?.riskLevel) params.set('risk_level', String(filters.riskLevel));\n if (filters?.minTvl) params.set('min_tvl', String(filters.minTvl));\n if (filters?.isActive !== undefined) params.set('is_active', String(filters.isActive));\n const query = params.toString();\n return this.request(`/api/v1/ai-quant/strategies${query ? `?${query}` : ''}`, { method: 'GET' });\n }\n\n /**\n * Get AI strategy details\n */\n async getAIStrategy(strategyId: string, include?: ('performance' | 'market' | 'trades')[]): Promise<ApiResponse<{\n strategy: AIStrategy;\n performance?: AINavSnapshot[];\n marketData?: AIMarketData[];\n trades?: AITradeExecution[];\n }>> {\n const params = new URLSearchParams();\n if (include?.length) params.set('include', include.join(','));\n const query = params.toString();\n return this.request(`/api/v1/ai-quant/strategies/${strategyId}${query ? `?${query}` : ''}`, { method: 'GET' });\n }\n\n /**\n * Get strategy performance history\n */\n async getAIStrategyPerformance(strategyId: string, days = 30): Promise<ApiResponse<{ performance: AINavSnapshot[] }>> {\n return this.request(`/api/v1/ai-quant/strategies/${strategyId}?include=performance&days=${days}`, { method: 'GET' });\n }\n\n /**\n * Get real-time market data for strategy pairs\n */\n async getAIStrategyMarketData(strategyId: string): Promise<ApiResponse<{ marketData: AIMarketData[] }>> {\n return this.request(`/api/v1/ai-quant/strategies/${strategyId}?include=market`, { method: 'GET' });\n }\n\n /**\n * Create AI trading order\n */\n async createAIOrder(request: CreateAIOrderRequest): Promise<ApiResponse<{ order: AIOrder }>> {\n return this.request('/api/v1/ai-quant/orders', {\n method: 'POST',\n body: JSON.stringify(request),\n });\n }\n\n /**\n * Get user's AI orders\n */\n async getAIOrders(filters?: {\n strategyId?: string;\n status?: AIOrderStatus;\n }): Promise<ApiResponse<{ orders: AIOrder[] }>> {\n const params = new URLSearchParams();\n if (filters?.strategyId) params.set('strategy_id', filters.strategyId);\n if (filters?.status) params.set('status', filters.status);\n const query = params.toString();\n return this.request(`/api/v1/ai-quant/orders${query ? `?${query}` : ''}`, { method: 'GET' });\n }\n\n /**\n * Get AI order details\n */\n async getAIOrder(orderId: string): Promise<ApiResponse<{\n order: AIOrder;\n strategy: AIStrategy;\n }>> {\n return this.request(`/api/v1/ai-quant/orders/${orderId}`, { method: 'GET' });\n }\n\n /**\n * Pause AI order\n */\n async pauseAIOrder(orderId: string): Promise<ApiResponse<{ order: AIOrder; message: string }>> {\n return this.request(`/api/v1/ai-quant/orders/${orderId}/pause`, { method: 'POST' });\n }\n\n /**\n * Resume AI order\n */\n async resumeAIOrder(orderId: string): Promise<ApiResponse<{ order: AIOrder; message: string }>> {\n return this.request(`/api/v1/ai-quant/orders/${orderId}/resume`, { method: 'POST' });\n }\n\n /**\n * Request redemption for AI order\n */\n async redeemAIOrder(orderId: string): Promise<ApiResponse<{\n success: boolean;\n redemption: AIRedemptionResult;\n message: string;\n }>> {\n return this.request(`/api/v1/ai-quant/orders/${orderId}/redeem`, { method: 'POST' });\n }\n\n /**\n * Get AI portfolio summary\n */\n async getAIPortfolio(include?: ('allocations' | 'orders')[]): Promise<ApiResponse<{\n portfolio: AIPortfolioSummary;\n allocations?: AITradeAllocation[];\n orders?: AIOrder[];\n }>> {\n const params = new URLSearchParams();\n if (include?.length) params.set('include', include.join(','));\n const query = params.toString();\n return this.request(`/api/v1/ai-quant/portfolio${query ? `?${query}` : ''}`, { method: 'GET' });\n }\n\n /**\n * Get user's trade allocations\n */\n async getAITradeAllocations(limit = 50): Promise<ApiResponse<{ allocations: AITradeAllocation[] }>> {\n return this.request(`/api/v1/ai-quant/portfolio?include=allocations&limit=${limit}`, { method: 'GET' });\n }\n\n /**\n * Get trade history for a strategy\n */\n async getAITradeHistory(strategyId: string, limit = 50): Promise<ApiResponse<{ trades: AITradeExecution[] }>> {\n return this.request(`/api/v1/ai-quant/strategies/${strategyId}?include=trades&limit=${limit}`, { method: 'GET' });\n }\n\n /**\n * Execute AI signals for a strategy (admin only)\n */\n async executeAISignals(strategyId: string): Promise<ApiResponse<{\n executions: AITradeExecution[];\n count: number;\n message: string;\n }>> {\n return this.request('/api/v1/ai-quant/execute', {\n method: 'POST',\n body: JSON.stringify({ strategyId }),\n });\n }\n\n // ========== Free Price APIs (No API Key Required) ==========\n\n /**\n * Get cryptocurrency prices (FREE - uses CoinGecko/Binance/CoinCap)\n */\n async getCryptoPrices(symbols: string[]): Promise<ApiResponse<{\n prices: Array<{\n symbol: string;\n price: number;\n change24h: number;\n changePercent24h: number;\n high24h: number;\n low24h: number;\n volume24h: number;\n marketCap?: number;\n lastUpdated: string;\n }>;\n }>> {\n return this.request(`/api/v1/prices?symbols=${symbols.join(',')}`, { method: 'GET' });\n }\n\n /**\n * Get single cryptocurrency price (FREE)\n */\n async getCryptoPrice(symbol: string): Promise<ApiResponse<{\n price: {\n symbol: string;\n price: number;\n change24h: number;\n changePercent24h: number;\n high24h: number;\n low24h: number;\n volume24h: number;\n marketCap?: number;\n lastUpdated: string;\n };\n }>> {\n return this.request(`/api/v1/prices/${symbol}`, { method: 'GET' });\n }\n\n /**\n * Get OHLCV candles for charting (FREE - from Binance)\n */\n async getCryptoCandles(\n symbol: string,\n interval: '1m' | '5m' | '15m' | '1h' | '4h' | '1d' = '1h',\n limit = 100\n ): Promise<ApiResponse<{\n symbol: string;\n interval: string;\n candles: Array<{\n timestamp: number;\n open: number;\n high: number;\n low: number;\n close: number;\n volume: number;\n }>;\n }>> {\n return this.request(`/api/v1/prices/${symbol}?candles=true&interval=${interval}&limit=${limit}`, { method: 'GET' });\n }\n\n /**\n * Get top cryptocurrencies by market cap (FREE)\n */\n async getTopCryptos(limit = 20): Promise<ApiResponse<{\n prices: Array<{\n symbol: string;\n price: number;\n change24h: number;\n changePercent24h: number;\n high24h: number;\n low24h: number;\n volume24h: number;\n marketCap?: number;\n lastUpdated: string;\n }>;\n }>> {\n return this.request(`/api/v1/prices?type=top&limit=${limit}`, { method: 'GET' });\n }\n\n /**\n * Get crypto market overview (FREE)\n */\n async getCryptoMarketOverview(): Promise<ApiResponse<{\n overview: {\n totalMarketCap: number;\n totalVolume24h: number;\n btcDominance: number;\n marketCapChange24h: number;\n activeCryptocurrencies: number;\n };\n }>> {\n return this.request('/api/v1/prices?type=overview', { method: 'GET' });\n }\n}\n\n// Factory function\nexport function createOneEngineClient(options?: {\n baseUrl?: string;\n clientId?: string;\n secretKey?: string;\n}): OneEngineClient {\n return new OneEngineClient(options);\n}\n","import { createClient, SupabaseClient } from '@supabase/supabase-js';\nimport { getConfig } from '../config';\n\nlet supabaseInstance: SupabaseClient | null = null;\n\nexport function createSupabaseClient(url?: string, anonKey?: string): SupabaseClient {\n const config = getConfig();\n const supabaseUrl = url || config.supabaseUrl;\n const supabaseAnonKey = anonKey || config.supabaseAnonKey;\n\n if (!supabaseUrl || !supabaseAnonKey) {\n throw new Error('Supabase URL and Anon Key are required');\n }\n\n return createClient(supabaseUrl, supabaseAnonKey, {\n auth: {\n autoRefreshToken: true,\n persistSession: true,\n detectSessionInUrl: true,\n },\n });\n}\n\nexport function getSupabaseClient(): SupabaseClient {\n if (!supabaseInstance) {\n supabaseInstance = createSupabaseClient();\n }\n return supabaseInstance;\n}\n\nexport class SupabaseService {\n private client: SupabaseClient;\n\n constructor(client?: SupabaseClient) {\n this.client = client || getSupabaseClient();\n }\n\n // ===== Auth Methods =====\n async signInWithEmail(email: string) {\n const { data, error } = await this.client.auth.signInWithOtp({\n email,\n options: {\n shouldCreateUser: true,\n },\n });\n return { data, error };\n }\n\n async verifyOtp(email: string, token: string) {\n const { data, error } = await this.client.auth.verifyOtp({\n email,\n token,\n type: 'email',\n });\n return { data, error };\n }\n\n async signOut() {\n const { error } = await this.client.auth.signOut();\n return { error };\n }\n\n async getSession() {\n const { data, error } = await this.client.auth.getSession();\n return { session: data.session, error };\n }\n\n async getUser() {\n const { data, error } = await this.client.auth.getUser();\n return { user: data.user, error };\n }\n\n // ===== User Profile Methods =====\n async getUserProfile(userId: string) {\n const { data, error } = await this.client\n .from('user_profiles')\n .select('*')\n .eq('user_id', userId)\n .single();\n return { data, error };\n }\n\n async updateUserProfile(userId: string, updates: Record<string, any>) {\n const { data, error } = await this.client\n .from('user_profiles')\n .update(updates)\n .eq('user_id', userId)\n .select()\n .single();\n return { data, error };\n }\n\n // ===== Transaction Methods =====\n async getTransactions(userId: string, limit = 50) {\n const { data, error } = await this.client\n .from('transactions')\n .select('*')\n .eq('user_id', userId)\n .order('created_at', { ascending: false })\n .limit(limit);\n return { data, error };\n }\n\n async createTransaction(transaction: Record<string, any>) {\n const { data, error } = await this.client\n .from('transactions')\n .insert(transaction)\n .select()\n .single();\n return { data, error };\n }\n\n // ===== AI Trading Methods =====\n async getStrategies(status = 'active') {\n const { data, error } = await this.client\n .from('ai_strategies')\n .select('*')\n .eq('status', status)\n .order('total_aum', { ascending: false });\n return { data, error };\n }\n\n async getStrategyById(strategyId: string) {\n const { data, error } = await this.client\n .from('ai_strategies')\n .select('*')\n .eq('id', strategyId)\n .single();\n return { data, error };\n }\n\n async getUserOrders(userId: string) {\n const { data, error } = await this.client\n .from('ai_orders')\n .select(`*, ai_strategies (name)`)\n .eq('user_id', userId)\n .order('created_at', { ascending: false });\n return { data, error };\n }\n\n async createOrder(order: Record<string, any>) {\n const { data, error } = await this.client\n .from('ai_orders')\n .insert(order)\n .select()\n .single();\n return { data, error };\n }\n\n // ===== Card Methods =====\n async getUserCards(userId: string) {\n const { data, error } = await this.client\n .from('cards')\n .select('*')\n .eq('user_id', userId)\n .order('created_at', { ascending: false });\n return { data, error };\n }\n\n // ===== Realtime Subscriptions =====\n subscribeToTransactions(userId: string, callback: (payload: any) => void) {\n return this.client\n .channel(`transactions:${userId}`)\n .on(\n 'postgres_changes',\n {\n event: '*',\n schema: 'public',\n table: 'transactions',\n filter: `user_id=eq.${userId}`,\n },\n callback\n )\n .subscribe();\n }\n\n unsubscribe(channel: ReturnType<typeof this.client.channel>) {\n return this.client.removeChannel(channel);\n }\n}\n","import { COINGECKO_IDS } from '../config';\nimport type { TokenPrice } from '../types';\n\nconst COINGECKO_API = 'https://api.coingecko.com/api/v3';\n\n// Fallback prices when API is unavailable\nconst FALLBACK_PRICES: Record<string, number> = {\n ETH: 3500,\n BTC: 95000,\n BNB: 700,\n MATIC: 0.5,\n AVAX: 40,\n USDT: 1,\n USDC: 1,\n DAI: 1,\n WBTC: 95000,\n WETH: 3500,\n ARB: 1.2,\n OP: 2.5,\n LINK: 20,\n UNI: 12,\n AAVE: 250,\n SOL: 200,\n};\n\nexport class PriceService {\n private cache: Map<string, { price: TokenPrice; timestamp: number }> = new Map();\n private cacheTTL = 60 * 1000; // 1 minute cache\n\n async getPrice(symbol: string): Promise<TokenPrice> {\n const upperSymbol = symbol.toUpperCase();\n\n // Check cache first\n const cached = this.cache.get(upperSymbol);\n if (cached && Date.now() - cached.timestamp < this.cacheTTL) {\n return cached.price;\n }\n\n const coinId = COINGECKO_IDS[upperSymbol];\n if (!coinId) {\n return this.getFallbackPrice(upperSymbol);\n }\n\n try {\n const response = await fetch(\n `${COINGECKO_API}/simple/price?ids=${coinId}&vs_currencies=usd&include_24hr_change=true&include_market_cap=true&include_24hr_vol=true`,\n { headers: { Accept: 'application/json' } }\n );\n\n if (!response.ok) {\n throw new Error(`CoinGecko API error: ${response.status}`);\n }\n\n const data = await response.json();\n const coinData = data[coinId];\n\n if (!coinData) {\n return this.getFallbackPrice(upperSymbol);\n }\n\n const change24h = coinData.usd_24h_change || 0;\n const price: TokenPrice = {\n symbol: upperSymbol,\n price: coinData.usd || 0,\n change24h,\n changePercent24h: change24h,\n priceChange24h: change24h,\n marketCap: coinData.usd_market_cap,\n volume24h: coinData.usd_24h_vol,\n };\n\n this.cache.set(upperSymbol, { price, timestamp: Date.now() });\n return price;\n } catch (error) {\n console.warn(`Failed to fetch price for ${upperSymbol}:`, error);\n return this.getFallbackPrice(upperSymbol);\n }\n }\n\n async getPrices(symbols: string[]): Promise<Record<string, TokenPrice>> {\n const results: Record<string, TokenPrice> = {};\n\n // Group symbols by whether they have CoinGecko IDs\n const withIds: string[] = [];\n const withoutIds: string[] = [];\n\n for (const symbol of symbols) {\n const upper = symbol.toUpperCase();\n if (COINGECKO_IDS[upper]) {\n withIds.push(upper);\n } else {\n withoutIds.push(upper);\n }\n }\n\n // Handle symbols without CoinGecko IDs\n for (const symbol of withoutIds) {\n results[symbol] = this.getFallbackPrice(symbol);\n }\n\n if (withIds.length === 0) {\n return results;\n }\n\n // Fetch prices in batch for symbols with IDs\n const coinIds = withIds.map((s) => COINGECKO_IDS[s]).join(',');\n\n try {\n const response = await fetch(\n `${COINGECKO_API}/simple/price?ids=${coinIds}&vs_currencies=usd&include_24hr_change=true`,\n { headers: { Accept: 'application/json' } }\n );\n\n if (!response.ok) {\n throw new Error(`CoinGecko API error: ${response.status}`);\n }\n\n const data = await response.json();\n\n for (const symbol of withIds) {\n const coinId = COINGECKO_IDS[symbol];\n const coinData = data[coinId];\n\n if (coinData) {\n const change24h = coinData.usd_24h_change || 0;\n results[symbol] = {\n symbol,\n price: coinData.usd || 0,\n change24h,\n changePercent24h: change24h,\n priceChange24h: change24h,\n };\n } else {\n results[symbol] = this.getFallbackPrice(symbol);\n }\n }\n } catch (error) {\n console.warn('Failed to fetch batch prices:', error);\n for (const symbol of withIds) {\n results[symbol] = this.getFallbackPrice(symbol);\n }\n }\n\n return results;\n }\n\n private getFallbackPrice(symbol: string): TokenPrice {\n const price = FALLBACK_PRICES[symbol] || 0;\n return {\n symbol,\n price,\n change24h: 0,\n changePercent24h: 0,\n priceChange24h: 0,\n };\n }\n\n clearCache(): void {\n this.cache.clear();\n }\n}\n\n// Singleton instance\nexport const priceService = new PriceService();\n","'use client';\n\nimport React, {\n createContext,\n useContext,\n useEffect,\n useState,\n useCallback,\n useMemo,\n type ReactNode,\n} from 'react';\nimport { initOneSDK, type OneConfig } from '../config';\nimport {\n OneEngineClient,\n createOneEngineClient,\n type EngineAuthResponse,\n type EngineWalletBalance,\n type OnrampSession,\n type OnrampSessionRequest,\n type SwapQuote,\n type SwapQuoteRequest,\n} from '../services/engine';\nimport type { User, Token, AIStrategy, AIOrder } from '../types';\n\n// ===== Context Types =====\n\ninterface AuthContextValue {\n user: User | null;\n isAuthenticated: boolean;\n isLoading: boolean;\n accessToken: string | null;\n sendOtp: (email: string) => Promise<{ success: boolean; error?: string }>;\n verifyOtp: (email: string, otp: string) => Promise<{ success: boolean; error?: string }>;\n signOut: () => Promise<void>;\n refreshUser: () => Promise<void>;\n}\n\ninterface WalletContextValue {\n address: string | null;\n balance: EngineWalletBalance | null;\n tokens: Token[];\n totalUsd: number;\n isLoading: boolean;\n error: string | null;\n setAddress: (address: string | null) => void;\n fetchBalance: (chains?: number[]) => Promise<void>;\n refreshBalance: () => Promise<void>;\n}\n\ninterface OnrampContextValue {\n isOpen: boolean;\n widgetUrl: string | null;\n sessionId: string | null;\n openOnramp: (options?: Partial<OnrampSessionRequest>) => Promise<void>;\n closeOnramp: () => void;\n getQuote: (fiatCurrency: string, fiatAmount: number, cryptoCurrency: string) => Promise<any>;\n}\n\ninterface SwapContextValue {\n getQuote: (request: SwapQuoteRequest) => Promise<SwapQuote | null>;\n executeSwap: (quoteId: string) => Promise<any>;\n getSupportedTokens: (chainId?: number) => Promise<Token[]>;\n getSupportedChains: () => Promise<{ id: number; name: string }[]>;\n}\n\ninterface TradingContextValue {\n strategies: AIStrategy[];\n orders: AIOrder[];\n portfolioStats: {\n totalInvested: number;\n totalValue: number;\n totalPnl: number;\n totalPnlPercent: number;\n activePositions: number;\n } | null;\n isLoading: boolean;\n fetchStrategies: () => Promise<void>;\n fetchOrders: () => Promise<void>;\n fetchPortfolio: () => Promise<void>;\n createOrder: (strategyId: string, amount: number, currency: string) => Promise<any>;\n}\n\ninterface OneContextValue {\n isInitialized: boolean;\n config: OneConfig | null;\n engine: OneEngineClient;\n auth: AuthContextValue;\n wallet: WalletContextValue;\n onramp: OnrampContextValue;\n swap: SwapContextValue;\n trading: TradingContextValue;\n}\n\nconst OneContext = createContext<OneContextValue | null>(null);\n\n// ===== Provider Props =====\ninterface OneProviderProps {\n children: ReactNode;\n config: OneConfig;\n autoFetchBalance?: boolean;\n}\n\n// ===== Provider Component =====\nexport function OneProvider({\n children,\n config,\n autoFetchBalance = true,\n}: OneProviderProps) {\n // Initialize SDK and Engine Client\n const [isInitialized, setIsInitialized] = useState(false);\n const engine = useMemo(() => createOneEngineClient({\n baseUrl: config.oneEngineUrl,\n clientId: config.oneClientId,\n secretKey: config.oneSecretKey,\n }), [config]);\n\n useEffect(() => {\n initOneSDK(config);\n setIsInitialized(true);\n }, [config]);\n\n // ===== Auth State =====\n const [user, setUser] = useState<User | null>(null);\n const [accessToken, setAccessToken] = useState<string | null>(null);\n const [authLoading, setAuthLoading] = useState(true);\n\n const sendOtp = useCallback(async (email: string) => {\n const result = await engine.sendEmailOtp(email);\n if (!result.success) {\n return { success: false, error: result.error?.message };\n }\n return { success: true };\n }, [engine]);\n\n const verifyOtp = useCallback(async (email: string, otp: string) => {\n const result = await engine.verifyEmailOtp(email, otp);\n if (!result.success || !result.data) {\n return { success: false, error: result.error?.message };\n }\n\n const { user: authUser, accessToken: token } = result.data;\n setUser(authUser);\n setAccessToken(token);\n engine.setAccessToken(token);\n\n return { success: true };\n }, [engine]);\n\n const signOut = useCallback(async () => {\n await engine.signOut();\n setUser(null);\n setAccessToken(null);\n engine.clearAccessToken();\n }, [engine]);\n\n const refreshUser = useCallback(async () => {\n try {\n if (accessToken) {\n engine.setAccessToken(accessToken);\n const result = await engine.getCurrentUser();\n if (result.success && result.data) {\n setUser(result.data);\n }\n }\n } finally {\n setAuthLoading(false);\n }\n }, [engine, accessToken]);\n\n useEffect(() => {\n refreshUser();\n }, []);\n\n // ===== Wallet State =====\n const [walletAddress, setWalletAddress] = useState<string | null>(null);\n const [walletBalance, setWalletBalance] = useState<EngineWalletBalance | null>(null);\n const [walletLoading, setWalletLoading] = useState(false);\n const [walletError, setWalletError] = useState<string | null>(null);\n\n const fetchBalance = useCallback(async (chains?: number[]) => {\n if (!walletAddress) return;\n\n setWalletLoading(true);\n setWalletError(null);\n\n try {\n const result = await engine.getWalletBalance(walletAddress, chains);\n if (result.success && result.data) {\n setWalletBalance(result.data);\n } else {\n setWalletError(result.error?.message || 'Failed to fetch balance');\n }\n } catch (error) {\n setWalletError(error instanceof Error ? error.message : 'Failed to fetch balance');\n } finally {\n setWalletLoading(false);\n }\n }, [walletAddress, engine]);\n\n const refreshBalance = useCallback(async () => {\n await fetchBalance();\n }, [fetchBalance]);\n\n useEffect(() => {\n if (autoFetchBalance && walletAddress && isInitialized) {\n fetchBalance();\n }\n }, [walletAddress, autoFetchBalance, isInitialized, fetchBalance]);\n\n // ===== Onramp State =====\n const [onrampOpen, setOnrampOpen] = useState(false);\n const [onrampUrl, setOnrampUrl] = useState<string | null>(null);\n const [onrampSessionId, setOnrampSessionId] = useState<string | null>(null);\n\n const openOnramp = useCallback(async (options?: Partial<OnrampSessionRequest>) => {\n if (!walletAddress) return;\n\n const result = await engine.createOnrampSession({\n walletAddress,\n fiatCurrency: 'USD',\n cryptoCurrency: 'ETH',\n ...options,\n });\n\n if (result.success && result.data) {\n setOnrampUrl(result.data.widgetUrl);\n setOnrampSessionId(result.data.sessionId);\n setOnrampOpen(true);\n }\n }, [walletAddress, engine]);\n\n const closeOnramp = useCallback(() => {\n setOnrampOpen(false);\n setOnrampUrl(null);\n }, []);\n\n const getOnrampQuote = useCallback(async (\n fiatCurrency: string,\n fiatAmount: number,\n cryptoCurrency: string\n ) => {\n const result = await engine.getOnrampQuote(fiatCurrency, fiatAmount, cryptoCurrency);\n return result.success ? result.data : null;\n }, [engine]);\n\n // ===== Swap =====\n const getSwapQuote = useCallback(async (request: SwapQuoteRequest) => {\n const result = await engine.getSwapQuote(request);\n return result.success ? result.data || null : null;\n }, [engine]);\n\n const executeSwap = useCallback(async (quoteId: string) => {\n if (!walletAddress) return null;\n const result = await engine.executeSwap({ quoteId, walletAddress });\n return result.success ? result.data : null;\n }, [engine, walletAddress]);\n\n const getSupportedTokens = useCallback(async (chainId?: number) => {\n const result = await engine.getSupportedSwapTokens(chainId);\n return result.success && result.data ? result.data.tokens : [];\n }, [engine]);\n\n const getSupportedChains = useCallback(async () => {\n const result = await engine.getSupportedSwapChains();\n return result.success && result.data ? result.data.chains : [];\n }, [engine]);\n\n // ===== Trading State =====\n const [strategies, setStrategies] = useState<AIStrategy[]>([]);\n const [orders, setOrders] = useState<AIOrder[]>([]);\n const [portfolioStats, setPortfolioStats] = useState<TradingContextValue['portfolioStats']>(null);\n const [tradingLoading, setTradingLoading] = useState(false);\n\n const fetchStrategies = useCallback(async () => {\n setTradingLoading(true);\n try {\n const result = await engine.getStrategies();\n if (result.success && result.data) {\n setStrategies(result.data);\n }\n } finally {\n setTradingLoading(false);\n }\n }, [engine]);\n\n const fetchOrders = useCallback(async () => {\n const result = await engine.getUserOrders();\n if (result.success && result.data) {\n setOrders(result.data);\n }\n }, [engine]);\n\n const fetchPortfolio = useCallback(async () => {\n const result = await engine.getPortfolioStats();\n if (result.success && result.data) {\n setPortfolioStats(result.data);\n }\n }, [engine]);\n\n const createOrder = useCallback(async (\n strategyId: string,\n amount: number,\n currency: string\n ) => {\n const result = await engine.createOrder(strategyId, amount, currency);\n if (result.success) {\n await fetchOrders();\n await fetchPortfolio();\n }\n return result;\n }, [engine, fetchOrders, fetchPortfolio]);\n\n // ===== Context Value =====\n const contextValue: OneContextValue = useMemo(() => ({\n isInitialized,\n config: isInitialized ? config : null,\n engine,\n\n auth: {\n user,\n isAuthenticated: !!user,\n isLoading: authLoading,\n accessToken,\n sendOtp,\n verifyOtp,\n signOut,\n refreshUser,\n },\n\n wallet: {\n address: walletAddress,\n balance: walletBalance,\n tokens: walletBalance?.tokens || [],\n totalUsd: walletBalance?.totalUsd || 0,\n isLoading: walletLoading,\n error: walletError,\n setAddress: setWalletAddress,\n fetchBalance,\n refreshBalance,\n },\n\n onramp: {\n isOpen: onrampOpen,\n widgetUrl: onrampUrl,\n sessionId: onrampSessionId,\n openOnramp,\n closeOnramp,\n getQuote: getOnrampQuote,\n },\n\n swap: {\n getQuote: getSwapQuote,\n executeSwap,\n getSupportedTokens,\n getSupportedChains,\n },\n\n trading: {\n strategies,\n orders,\n portfolioStats,\n isLoading: tradingLoading,\n fetchStrategies,\n fetchOrders,\n fetchPortfolio,\n createOrder,\n },\n }), [\n isInitialized,\n config,\n engine,\n user,\n authLoading,\n accessToken,\n sendOtp,\n verifyOtp,\n signOut,\n refreshUser,\n walletAddress,\n walletBalance,\n walletLoading,\n walletError,\n fetchBalance,\n refreshBalance,\n onrampOpen,\n onrampUrl,\n onrampSessionId,\n openOnramp,\n closeOnramp,\n getOnrampQuote,\n getSwapQuote,\n executeSwap,\n getSupportedTokens,\n getSupportedChains,\n strategies,\n orders,\n portfolioStats,\n tradingLoading,\n fetchStrategies,\n fetchOrders,\n fetchPortfolio,\n createOrder,\n ]);\n\n return (\n <OneContext.Provider value={contextValue}>\n {children}\n </OneContext.Provider>\n );\n}\n\n// ===== Hooks =====\nexport function useOne(): OneContextValue {\n const context = useContext(OneContext);\n if (!context) {\n throw new Error('useOne must be used within a OneProvider');\n }\n return context;\n}\n\nexport function useOneAuth() {\n const { auth } = useOne();\n return auth;\n}\n\nexport function useOneWallet() {\n const { wallet } = useOne();\n return wallet;\n}\n\nexport function useOneOnramp() {\n const { onramp } = useOne();\n return onramp;\n}\n\nexport function useOneSwap() {\n const { swap } = useOne();\n return swap;\n}\n\nexport function useOneTrading() {\n const { trading } = useOne();\n return trading;\n}\n\nexport function useOneEngine() {\n const { engine } = useOne();\n return engine;\n}\n\n// Export context for advanced usage\nexport { OneContext };\n","'use client';\n\nimport React, { type ReactNode, useMemo, useEffect, useState } from 'react';\nimport { createThirdwebClient, type ThirdwebClient } from 'thirdweb';\nimport { ThirdwebProvider as BaseThirdwebProvider } from 'thirdweb/react';\nimport { inAppWallet, smartWallet } from 'thirdweb/wallets';\nimport type { Chain } from 'thirdweb/chains';\nimport { base, ethereum, polygon, arbitrum, optimism } from 'thirdweb/chains';\n\n// ===== Types =====\n\nexport interface OneThirdwebConfig {\n // Engine URL to fetch thirdweb config (clientId managed by Engine)\n engineUrl?: string;\n // Or use pre-configured ONE ecosystem clientId (fetched from Engine)\n // Users do NOT need to provide their own clientId\n appName?: string;\n appIcon?: string;\n defaultChain?: Chain;\n supportedChains?: Chain[];\n sponsorGas?: boolean;\n authOptions?: {\n email?: boolean;\n phone?: boolean;\n google?: boolean;\n apple?: boolean;\n facebook?: boolean;\n discord?: boolean;\n passkey?: boolean;\n guest?: boolean;\n };\n}\n\nexport interface OneThirdwebProviderProps {\n children: ReactNode;\n config?: OneThirdwebConfig;\n}\n\n// ===== Default Configuration =====\n\nconst DEFAULT_CHAINS: Chain[] = [base, ethereum, polygon, arbitrum, optimism];\n\nconst DEFAULT_AUTH_OPTIONS = {\n email: true,\n phone: false,\n google: true,\n apple: true,\n facebook: false,\n discord: false,\n passkey: true,\n guest: false,\n};\n\n// ===== Context for Client Access =====\n\nconst ThirdwebClientContext = React.createContext<ThirdwebClient | null>(null);\n\nexport function useThirdwebClient(): ThirdwebClient {\n const client = React.useContext(ThirdwebClientContext);\n if (!client) {\n throw new Error('useThirdwebClient must be used within OneThirdwebProvider');\n }\n return client;\n}\n\n// ===== Create Wallets Configuration =====\n\nfunction createWalletConfig(config: OneThirdwebConfig) {\n const authOptions = { ...DEFAULT_AUTH_OPTIONS, ...config.authOptions };\n\n // Build auth options array\n const authMethods: string[] = [];\n if (authOptions.google) authMethods.push('google');\n if (authOptions.apple) authMethods.push('apple');\n if (authOptions.facebook) authMethods.push('facebook');\n if (authOptions.discord) authMethods.push('discord');\n if (authOptions.passkey) authMethods.push('passkey');\n\n // Create in-app wallet with email and social logins\n const inApp = inAppWallet({\n auth: {\n options: authMethods as any[],\n },\n metadata: config.appName ? {\n name: config.appName,\n image: config.appIcon ? { src: config.appIcon, width: 100, height: 100 } : undefined,\n } : undefined,\n });\n\n // If gas sponsorship is enabled, wrap in smart wallet\n if (config.sponsorGas) {\n const chain = config.defaultChain || base;\n return [\n smartWallet({\n chain,\n sponsorGas: true,\n }),\n ];\n }\n\n return [inApp];\n}\n\n// ===== Default Engine URL =====\nconst DEFAULT_ENGINE_URL = process.env.NEXT_PUBLIC_ONE_ENGINE_URL || '/api';\n\n// ===== Provider Component =====\n\nexport function OneThirdwebProvider({\n children,\n config = {},\n}: OneThirdwebProviderProps) {\n const [clientId, setClientId] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n // Fetch clientId from Engine on mount\n // Engine manages the Thirdweb clientId centrally\n useEffect(() => {\n const fetchClientConfig = async () => {\n try {\n const engineUrl = config.engineUrl || DEFAULT_ENGINE_URL;\n const response = await fetch(`${engineUrl}/v1/config/thirdweb`);\n\n if (response.ok) {\n const data = await response.json();\n if (data.success && data.data?.clientId) {\n setClientId(data.data.clientId);\n } else {\n // Fallback to environment variable if API fails\n const envClientId = process.env.NEXT_PUBLIC_THIRDWEB_CLIENT_ID;\n if (envClientId) {\n setClientId(envClientId);\n } else {\n setError('Failed to load wallet configuration');\n }\n }\n } else {\n // Fallback to environment variable\n const envClientId = process.env.NEXT_PUBLIC_THIRDWEB_CLIENT_ID;\n if (envClientId) {\n setClientId(envClientId);\n } else {\n setError('Wallet service unavailable');\n }\n }\n } catch (err) {\n // Fallback to environment variable on network error\n const envClientId = process.env.NEXT_PUBLIC_THIRDWEB_CLIENT_ID;\n if (envClientId) {\n setClientId(envClientId);\n } else {\n console.error('Failed to fetch thirdweb config:', err);\n setError('Failed to initialize wallet');\n }\n } finally {\n setIsLoading(false);\n }\n };\n\n fetchClientConfig();\n }, [config.engineUrl]);\n\n // Create thirdweb client once we have clientId\n const client = useMemo(() => {\n if (!clientId) return null;\n return createThirdwebClient({ clientId });\n }, [clientId]);\n\n // Create wallet configuration\n const wallets = useMemo(() => createWalletConfig(config), [config]);\n\n // Loading state\n if (isLoading) {\n return (\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', minHeight: '100px' }}>\n <span style={{ color: '#9ca3af' }}>Initializing wallet...</span>\n </div>\n );\n }\n\n // Error state\n if (error || !client) {\n return (\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', minHeight: '100px' }}>\n <span style={{ color: '#ef4444' }}>{error || 'Wallet initialization failed'}</span>\n </div>\n );\n }\n\n return (\n <ThirdwebClientContext.Provider value={client}>\n <BaseThirdwebProvider>\n {children}\n </BaseThirdwebProvider>\n </ThirdwebClientContext.Provider>\n );\n}\n\n// ===== Export wallets for external use =====\n\nexport { inAppWallet, smartWallet } from 'thirdweb/wallets';\nexport { base, ethereum, polygon, arbitrum, optimism } from 'thirdweb/chains';\n","'use client';\n\nimport React from 'react';\nimport { ConnectButton, type ConnectButtonProps } from 'thirdweb/react';\nimport { inAppWallet, smartWallet } from 'thirdweb/wallets';\nimport { base } from 'thirdweb/chains';\nimport { useThirdwebClient } from '../providers/ThirdwebProvider';\n\n// ===== Types =====\n\nexport interface OneConnectButtonProps {\n // Appearance\n label?: string;\n theme?: 'light' | 'dark';\n className?: string;\n style?: React.CSSProperties;\n\n // Chain config\n chain?: Parameters<typeof smartWallet>[0]['chain'];\n sponsorGas?: boolean;\n\n // Auth options\n authOptions?: {\n email?: boolean;\n google?: boolean;\n apple?: boolean;\n discord?: boolean;\n passkey?: boolean;\n };\n\n // Callbacks\n onConnect?: (address: string) => void;\n onDisconnect?: () => void;\n\n // Account abstraction\n accountAbstraction?: {\n chain: Parameters<typeof smartWallet>[0]['chain'];\n sponsorGas?: boolean;\n };\n}\n\n// ===== Default Theme =====\n\nconst ONE_THEME = {\n colors: {\n primaryButtonBg: '#10b981', // emerald-500\n primaryButtonText: '#ffffff',\n accentButtonBg: '#059669', // emerald-600\n modalBg: '#1f2937', // gray-800\n borderColor: '#374151', // gray-700\n separatorLine: '#374151',\n secondaryText: '#9ca3af', // gray-400\n primaryText: '#ffffff',\n },\n fontFamily: 'Inter, system-ui, sans-serif',\n};\n\n// ===== Component =====\n\nexport function OneConnectButton({\n label = 'Connect Wallet',\n theme = 'dark',\n className,\n style,\n chain = base,\n sponsorGas = true,\n authOptions = {\n email: true,\n google: true,\n apple: true,\n discord: false,\n passkey: true,\n },\n onConnect,\n onDisconnect,\n accountAbstraction,\n}: OneConnectButtonProps) {\n const client = useThirdwebClient();\n\n // Build auth methods\n const authMethods: string[] = ['email'];\n if (authOptions.google) authMethods.push('google');\n if (authOptions.apple) authMethods.push('apple');\n if (authOptions.discord) authMethods.push('discord');\n if (authOptions.passkey) authMethods.push('passkey');\n\n // Create in-app wallet\n const wallet = inAppWallet({\n auth: {\n options: authMethods as any[],\n },\n });\n\n // Build connect button props\n const connectProps: Partial<ConnectButtonProps> = {\n client,\n wallets: [wallet],\n connectButton: {\n label,\n style: {\n backgroundColor: ONE_THEME.colors.primaryButtonBg,\n color: ONE_THEME.colors.primaryButtonText,\n fontFamily: ONE_THEME.fontFamily,\n fontWeight: 600,\n borderRadius: '12px',\n padding: '12px 24px',\n ...style,\n },\n className,\n },\n theme: theme === 'dark' ? 'dark' : 'light',\n };\n\n // Add account abstraction if sponsoring gas\n if (sponsorGas || accountAbstraction) {\n connectProps.accountAbstraction = {\n chain: accountAbstraction?.chain || chain,\n sponsorGas: accountAbstraction?.sponsorGas ?? sponsorGas,\n };\n }\n\n return <ConnectButton {...(connectProps as ConnectButtonProps)} />;\n}\n\n// ===== Presets =====\n\nexport function OneConnectButtonSimple(props: Omit<OneConnectButtonProps, 'authOptions'>) {\n return (\n <OneConnectButton\n {...props}\n authOptions={{ email: true, google: true, apple: false, passkey: false }}\n />\n );\n}\n\nexport function OneConnectButtonFull(props: Omit<OneConnectButtonProps, 'authOptions'>) {\n return (\n <OneConnectButton\n {...props}\n authOptions={{ email: true, google: true, apple: true, discord: true, passkey: true }}\n />\n );\n}\n","'use client';\n\nimport React from 'react';\nimport { PayEmbed, type PayEmbedProps } from 'thirdweb/react';\nimport { base, ethereum, polygon, arbitrum } from 'thirdweb/chains';\nimport { useThirdwebClient } from '../providers/ThirdwebProvider';\n\n// ===== Types =====\n\nexport type PayMode = 'fund_wallet' | 'direct_payment' | 'transaction';\n\nexport interface OnePayWidgetProps {\n // Mode configuration\n mode?: PayMode;\n\n // For direct_payment mode\n recipientAddress?: string;\n amount?: string;\n tokenAddress?: string;\n chainId?: number;\n\n // For transaction mode\n transaction?: any; // PreparedTransaction from thirdweb\n\n // Appearance\n theme?: 'light' | 'dark';\n className?: string;\n style?: React.CSSProperties;\n\n // Payment options\n buyWithCrypto?: boolean;\n buyWithFiat?: boolean;\n\n // Supported tokens (token addresses per chain)\n supportedTokens?: {\n [chainId: number]: string[];\n };\n\n // Callbacks\n onSuccess?: (result: any) => void;\n onError?: (error: Error) => void;\n onCancel?: () => void;\n}\n\n// ===== Default Configuration =====\n\nconst DEFAULT_SUPPORTED_TOKENS = {\n [base.id]: [\n '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', // USDC on Base\n ],\n [ethereum.id]: [\n '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', // USDC on Ethereum\n '0xdAC17F958D2ee523a2206206994597C13D831ec7', // USDT on Ethereum\n ],\n [polygon.id]: [\n '0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359', // USDC on Polygon\n ],\n [arbitrum.id]: [\n '0xaf88d065e77c8cC2239327C5EDb3A432268e5831', // USDC on Arbitrum\n ],\n};\n\n// ===== Component =====\n\nexport function OnePayWidget({\n mode = 'fund_wallet',\n recipientAddress,\n amount,\n tokenAddress,\n chainId,\n transaction,\n theme = 'dark',\n className,\n style,\n buyWithCrypto = true,\n buyWithFiat = true,\n supportedTokens = DEFAULT_SUPPORTED_TOKENS,\n onSuccess,\n onError,\n onCancel,\n}: OnePayWidgetProps) {\n const client = useThirdwebClient();\n\n // Build pay options based on mode\n let payOptions: PayEmbedProps['payOptions'];\n\n switch (mode) {\n case 'direct_payment':\n if (!recipientAddress) {\n console.warn('OnePayWidget: recipientAddress required for direct_payment mode');\n }\n payOptions = {\n mode: 'direct_payment',\n paymentInfo: {\n sellerAddress: recipientAddress || '',\n amount: amount || '0',\n chain: chainId ? { id: chainId } as any : base,\n token: tokenAddress ? { address: tokenAddress } as any : undefined,\n },\n buyWithCrypto: buyWithCrypto ? {} : false,\n buyWithFiat: buyWithFiat ? {} : false,\n };\n break;\n\n case 'transaction':\n if (!transaction) {\n console.warn('OnePayWidget: transaction required for transaction mode');\n }\n payOptions = {\n mode: 'transaction',\n transaction,\n buyWithCrypto: buyWithCrypto ? {} : false,\n buyWithFiat: buyWithFiat ? {} : false,\n };\n break;\n\n case 'fund_wallet':\n default:\n payOptions = {\n mode: 'fund_wallet',\n buyWithCrypto: buyWithCrypto ? {} : false,\n buyWithFiat: buyWithFiat ? {} : false,\n };\n break;\n }\n\n return (\n <div className={className} style={style}>\n <PayEmbed\n client={client}\n payOptions={payOptions}\n theme={theme}\n supportedTokens={supportedTokens as any}\n />\n </div>\n );\n}\n\n// ===== Presets =====\n\nexport function OneFundWalletWidget(props: Omit<OnePayWidgetProps, 'mode'>) {\n return <OnePayWidget {...props} mode=\"fund_wallet\" />;\n}\n\nexport function OneDirectPayWidget(\n props: Omit<OnePayWidgetProps, 'mode'> & {\n recipientAddress: string;\n amount: string;\n }\n) {\n return <OnePayWidget {...props} mode=\"direct_payment\" />;\n}\n\nexport function OneCryptoOnlyPayWidget(props: Omit<OnePayWidgetProps, 'buyWithFiat'>) {\n return <OnePayWidget {...props} buyWithFiat={false} />;\n}\n\nexport function OneFiatOnlyPayWidget(props: Omit<OnePayWidgetProps, 'buyWithCrypto'>) {\n return <OnePayWidget {...props} buyWithCrypto={false} />;\n}\n","'use client';\n\nimport React from 'react';\nimport { TransactionButton, type TransactionButtonProps } from 'thirdweb/react';\nimport { prepareTransaction, type PreparedTransaction } from 'thirdweb';\nimport type { Chain } from 'thirdweb/chains';\nimport { useThirdwebClient } from '../providers/ThirdwebProvider';\n\n// ===== Types =====\n\nexport interface OneTransactionButtonProps {\n // Transaction config\n to: string;\n value?: bigint;\n data?: `0x${string}`;\n chain: Chain;\n\n // Or use prepared transaction directly\n transaction?: PreparedTransaction;\n\n // Appearance\n label?: string;\n loadingLabel?: string;\n theme?: 'light' | 'dark';\n className?: string;\n style?: React.CSSProperties;\n disabled?: boolean;\n\n // Callbacks\n onSuccess?: (result: { transactionHash: string }) => void;\n onError?: (error: Error) => void;\n onSubmitted?: (txHash: string) => void;\n}\n\n// ===== ONE Theme Styles =====\n\nconst ONE_BUTTON_STYLE: React.CSSProperties = {\n backgroundColor: '#10b981',\n color: '#ffffff',\n fontFamily: 'Inter, system-ui, sans-serif',\n fontWeight: 600,\n borderRadius: '12px',\n padding: '12px 24px',\n border: 'none',\n cursor: 'pointer',\n transition: 'background-color 0.2s',\n};\n\nconst ONE_BUTTON_DISABLED_STYLE: React.CSSProperties = {\n ...ONE_BUTTON_STYLE,\n backgroundColor: '#6b7280',\n cursor: 'not-allowed',\n};\n\n// ===== Component =====\n\nexport function OneTransactionButton({\n to,\n value,\n data,\n chain,\n transaction: preparedTx,\n label = 'Send Transaction',\n loadingLabel = 'Processing...',\n theme = 'dark',\n className,\n style,\n disabled = false,\n onSuccess,\n onError,\n onSubmitted,\n}: OneTransactionButtonProps) {\n const client = useThirdwebClient();\n\n // Prepare transaction if not already provided\n const transaction = preparedTx || prepareTransaction({\n to,\n value,\n data,\n chain,\n client,\n });\n\n const buttonStyle = disabled\n ? { ...ONE_BUTTON_DISABLED_STYLE, ...style }\n : { ...ONE_BUTTON_STYLE, ...style };\n\n return (\n <TransactionButton\n transaction={() => transaction}\n onTransactionSent={(result) => onSubmitted?.(result.transactionHash)}\n onTransactionConfirmed={(result) => onSuccess?.({ transactionHash: result.transactionHash })}\n onError={onError}\n disabled={disabled}\n style={buttonStyle}\n className={className}\n theme={theme}\n >\n {label}\n </TransactionButton>\n );\n}\n\n// ===== Presets =====\n\nexport interface OneSendETHButtonProps extends Omit<OneTransactionButtonProps, 'data'> {\n amount: string; // in ETH\n}\n\nexport function OneSendETHButton({\n amount,\n ...props\n}: OneSendETHButtonProps) {\n const valueInWei = BigInt(Math.floor(parseFloat(amount) * 1e18));\n\n return (\n <OneTransactionButton\n {...props}\n value={valueInWei}\n label={props.label || `Send ${amount} ETH`}\n />\n );\n}\n\nexport interface OneApproveButtonProps extends Omit<OneTransactionButtonProps, 'to' | 'data' | 'value'> {\n tokenAddress: string;\n spenderAddress: string;\n amount?: bigint; // Max uint256 by default\n}\n\nexport function OneApproveButton({\n tokenAddress,\n spenderAddress,\n amount = BigInt('0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'),\n chain,\n ...props\n}: OneApproveButtonProps) {\n // ERC20 approve function selector + encoded params\n const approveData = `0x095ea7b3${spenderAddress.slice(2).padStart(64, '0')}${amount.toString(16).padStart(64, '0')}` as `0x${string}`;\n\n return (\n <OneTransactionButton\n {...props}\n to={tokenAddress}\n data={approveData}\n chain={chain}\n label={props.label || 'Approve Token'}\n />\n );\n}\n","'use client';\n\nimport React, { useState, useCallback } from 'react';\nimport { useSendTransaction, useActiveAccount } from 'thirdweb/react';\nimport { prepareTransaction, toWei } from 'thirdweb';\nimport type { Chain } from 'thirdweb/chains';\nimport { base } from 'thirdweb/chains';\nimport { useThirdwebClient } from '../providers/ThirdwebProvider';\n\n// ===== Types =====\n\nexport interface OneSendWidgetProps {\n // Default values\n defaultRecipient?: string;\n defaultAmount?: string;\n defaultChain?: Chain;\n\n // Token config (if sending ERC20)\n tokenAddress?: string;\n tokenSymbol?: string;\n tokenDecimals?: number;\n\n // Appearance\n theme?: 'light' | 'dark';\n className?: string;\n style?: React.CSSProperties;\n\n // Callbacks\n onSuccess?: (txHash: string) => void;\n onError?: (error: Error) => void;\n onCancel?: () => void;\n}\n\n// ===== Styles =====\n\nconst containerStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: '16px',\n padding: '24px',\n backgroundColor: '#1f2937',\n borderRadius: '16px',\n border: '1px solid #374151',\n};\n\nconst inputStyle: React.CSSProperties = {\n width: '100%',\n padding: '12px 16px',\n backgroundColor: '#374151',\n border: '1px solid #4b5563',\n borderRadius: '12px',\n color: '#ffffff',\n fontSize: '16px',\n outline: 'none',\n};\n\nconst labelStyle: React.CSSProperties = {\n color: '#9ca3af',\n fontSize: '14px',\n marginBottom: '4px',\n};\n\nconst buttonStyle: React.CSSProperties = {\n width: '100%',\n padding: '14px',\n backgroundColor: '#10b981',\n color: '#ffffff',\n border: 'none',\n borderRadius: '12px',\n fontSize: '16px',\n fontWeight: 600,\n cursor: 'pointer',\n};\n\nconst buttonDisabledStyle: React.CSSProperties = {\n ...buttonStyle,\n backgroundColor: '#6b7280',\n cursor: 'not-allowed',\n};\n\n// ===== Component =====\n\nexport function OneSendWidget({\n defaultRecipient = '',\n defaultAmount = '',\n defaultChain = base,\n tokenAddress,\n tokenSymbol = 'ETH',\n tokenDecimals = 18,\n theme = 'dark',\n className,\n style,\n onSuccess,\n onError,\n onCancel,\n}: OneSendWidgetProps) {\n const client = useThirdwebClient();\n const account = useActiveAccount();\n const { mutate: sendTransaction, isPending } = useSendTransaction();\n\n const [recipient, setRecipient] = useState(defaultRecipient);\n const [amount, setAmount] = useState(defaultAmount);\n const [error, setError] = useState<string | null>(null);\n\n const isValidAddress = (address: string) => /^0x[a-fA-F0-9]{40}$/.test(address);\n const isValidAmount = (amt: string) => !isNaN(parseFloat(amt)) && parseFloat(amt) > 0;\n\n const canSend = isValidAddress(recipient) && isValidAmount(amount) && !isPending;\n\n const handleSend = useCallback(async () => {\n if (!account || !canSend) return;\n\n setError(null);\n\n try {\n let tx;\n\n if (tokenAddress) {\n // ERC20 transfer\n const amountInWei = BigInt(Math.floor(parseFloat(amount) * Math.pow(10, tokenDecimals)));\n const transferData = `0xa9059cbb${recipient.slice(2).padStart(64, '0')}${amountInWei.toString(16).padStart(64, '0')}` as `0x${string}`;\n\n tx = prepareTransaction({\n to: tokenAddress,\n data: transferData,\n chain: defaultChain,\n client,\n });\n } else {\n // Native token transfer\n tx = prepareTransaction({\n to: recipient as `0x${string}`,\n value: toWei(amount),\n chain: defaultChain,\n client,\n });\n }\n\n sendTransaction(tx, {\n onSuccess: (result) => {\n onSuccess?.(result.transactionHash);\n setRecipient('');\n setAmount('');\n },\n onError: (err) => {\n setError(err.message);\n onError?.(err);\n },\n });\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Transaction failed');\n setError(error.message);\n onError?.(error);\n }\n }, [account, canSend, recipient, amount, tokenAddress, tokenDecimals, defaultChain, client, sendTransaction, onSuccess, onError]);\n\n const isDark = theme === 'dark';\n\n return (\n <div\n className={className}\n style={{\n ...containerStyle,\n backgroundColor: isDark ? '#1f2937' : '#ffffff',\n border: `1px solid ${isDark ? '#374151' : '#e5e7eb'}`,\n ...style,\n }}\n >\n <h3 style={{ color: isDark ? '#ffffff' : '#111827', margin: 0, fontSize: '18px', fontWeight: 600 }}>\n Send {tokenSymbol}\n </h3>\n\n <div>\n <label style={{ ...labelStyle, color: isDark ? '#9ca3af' : '#6b7280' }}>Recipient Address</label>\n <input\n type=\"text\"\n value={recipient}\n onChange={(e) => setRecipient(e.target.value)}\n placeholder=\"0x...\"\n style={{\n ...inputStyle,\n backgroundColor: isDark ? '#374151' : '#f3f4f6',\n color: isDark ? '#ffffff' : '#111827',\n border: `1px solid ${isDark ? '#4b5563' : '#d1d5db'}`,\n }}\n />\n </div>\n\n <div>\n <label style={{ ...labelStyle, color: isDark ? '#9ca3af' : '#6b7280' }}>Amount ({tokenSymbol})</label>\n <input\n type=\"number\"\n value={amount}\n onChange={(e) => setAmount(e.target.value)}\n placeholder=\"0.0\"\n min=\"0\"\n step=\"any\"\n style={{\n ...inputStyle,\n backgroundColor: isDark ? '#374151' : '#f3f4f6',\n color: isDark ? '#ffffff' : '#111827',\n border: `1px solid ${isDark ? '#4b5563' : '#d1d5db'}`,\n }}\n />\n </div>\n\n {error && (\n <div style={{ color: '#ef4444', fontSize: '14px', padding: '8px 12px', backgroundColor: 'rgba(239, 68, 68, 0.1)', borderRadius: '8px' }}>\n {error}\n </div>\n )}\n\n <div style={{ display: 'flex', gap: '12px' }}>\n {onCancel && (\n <button\n onClick={onCancel}\n style={{\n ...buttonStyle,\n flex: 1,\n backgroundColor: 'transparent',\n border: `1px solid ${isDark ? '#4b5563' : '#d1d5db'}`,\n color: isDark ? '#9ca3af' : '#6b7280',\n }}\n >\n Cancel\n </button>\n )}\n <button\n onClick={handleSend}\n disabled={!canSend}\n style={canSend ? { ...buttonStyle, flex: 1 } : { ...buttonDisabledStyle, flex: 1 }}\n >\n {isPending ? 'Sending...' : `Send ${tokenSymbol}`}\n </button>\n </div>\n </div>\n );\n}\n\n// ===== Presets =====\n\nexport function OneSendETHWidget(props: Omit<OneSendWidgetProps, 'tokenAddress' | 'tokenSymbol' | 'tokenDecimals'>) {\n return <OneSendWidget {...props} tokenSymbol=\"ETH\" tokenDecimals={18} />;\n}\n\nexport function OneSendUSDCWidget(props: Omit<OneSendWidgetProps, 'tokenSymbol' | 'tokenDecimals'> & { tokenAddress: string }) {\n return <OneSendWidget {...props} tokenSymbol=\"USDC\" tokenDecimals={6} />;\n}\n","'use client';\n\nimport React, { useState, useEffect, useCallback } from 'react';\nimport { useActiveAccount } from 'thirdweb/react';\nimport { getEngineUrl } from '../config';\n\n// ===== Types =====\n\nexport interface OneOnrampWidgetProps {\n // Configuration\n defaultFiat?: string;\n defaultCrypto?: string;\n defaultAmount?: number;\n defaultNetwork?: string;\n\n // Currency options\n supportedFiats?: string[];\n supportedCryptos?: string[];\n supportedNetworks?: string[];\n\n // User info (pre-fill)\n email?: string;\n country?: string;\n\n // Appearance\n theme?: 'light' | 'dark';\n accentColor?: string;\n className?: string;\n style?: React.CSSProperties;\n\n // Display mode\n mode?: 'form' | 'embed' | 'popup';\n embedHeight?: number;\n\n // Callbacks\n onSuccess?: (transaction: OnrampTransaction) => void;\n onError?: (error: Error) => void;\n onClose?: () => void;\n onQuoteUpdate?: (quote: OnrampQuote) => void;\n}\n\nexport interface OnrampQuote {\n fiatCurrency: string;\n fiatAmount: number;\n cryptoCurrency: string;\n cryptoAmount: number;\n network: string;\n rate: number;\n fees: {\n network: number;\n provider: number;\n total: number;\n };\n estimatedTime: string;\n}\n\nexport interface OnrampTransaction {\n id: string;\n status: 'pending' | 'processing' | 'completed' | 'failed';\n fiatCurrency: string;\n fiatAmount: number;\n cryptoCurrency: string;\n cryptoAmount?: number;\n walletAddress: string;\n txHash?: string;\n provider: string;\n}\n\n// ===== Default Values =====\n\nconst DEFAULT_FIATS = ['USD', 'EUR', 'GBP', 'CNY', 'JPY', 'KRW', 'CAD', 'AUD'];\nconst DEFAULT_CRYPTOS = ['USDT', 'USDC', 'ETH', 'BTC', 'MATIC', 'BNB', 'AVAX', 'SOL'];\nconst DEFAULT_NETWORKS = ['ethereum', 'polygon', 'arbitrum', 'optimism', 'base', 'bsc', 'avalanche'];\n\nconst NETWORK_DISPLAY_NAMES: Record<string, string> = {\n ethereum: 'Ethereum',\n polygon: 'Polygon',\n arbitrum: 'Arbitrum',\n optimism: 'Optimism',\n base: 'Base',\n bsc: 'BNB Chain',\n avalanche: 'Avalanche',\n solana: 'Solana',\n};\n\n// Approximate rates for quote estimation\nconst CRYPTO_RATES: Record<string, number> = {\n ETH: 3500,\n BTC: 95000,\n USDT: 1,\n USDC: 1,\n MATIC: 0.85,\n BNB: 650,\n AVAX: 42,\n SOL: 200,\n DAI: 1,\n ARB: 1.2,\n OP: 2.5,\n};\n\n// ===== Styles =====\n\nconst containerStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: '16px',\n padding: '24px',\n borderRadius: '16px',\n border: '1px solid',\n maxWidth: '420px',\n};\n\nconst headerStyle: React.CSSProperties = {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n marginBottom: '8px',\n};\n\nconst selectStyle: React.CSSProperties = {\n padding: '12px 16px',\n borderRadius: '12px',\n fontSize: '16px',\n outline: 'none',\n cursor: 'pointer',\n appearance: 'none',\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'right 12px center',\n paddingRight: '40px',\n};\n\nconst inputStyle: React.CSSProperties = {\n padding: '12px 16px',\n borderRadius: '12px',\n fontSize: '18px',\n fontWeight: 500,\n outline: 'none',\n width: '100%',\n boxSizing: 'border-box',\n};\n\nconst buttonStyle: React.CSSProperties = {\n width: '100%',\n padding: '16px',\n border: 'none',\n borderRadius: '12px',\n fontSize: '16px',\n fontWeight: 600,\n cursor: 'pointer',\n transition: 'background-color 0.2s',\n};\n\nconst rowStyle: React.CSSProperties = {\n display: 'flex',\n gap: '12px',\n alignItems: 'center',\n};\n\nconst quoteBoxStyle: React.CSSProperties = {\n padding: '16px',\n borderRadius: '12px',\n fontSize: '14px',\n};\n\n// ===== Component =====\n\nexport function OneOnrampWidget({\n defaultFiat = 'USD',\n defaultCrypto = 'USDT',\n defaultAmount = 100,\n defaultNetwork = 'base',\n supportedFiats = DEFAULT_FIATS,\n supportedCryptos = DEFAULT_CRYPTOS,\n supportedNetworks = DEFAULT_NETWORKS,\n email,\n country,\n theme = 'dark',\n accentColor = '#10b981',\n className,\n style,\n mode = 'form',\n embedHeight = 600,\n onSuccess,\n onError,\n onClose,\n onQuoteUpdate,\n}: OneOnrampWidgetProps) {\n const account = useActiveAccount();\n const walletAddress = account?.address;\n\n // Form state\n const [fiatCurrency, setFiatCurrency] = useState(defaultFiat);\n const [fiatAmount, setFiatAmount] = useState(defaultAmount.toString());\n const [cryptoCurrency, setCryptoCurrency] = useState(defaultCrypto);\n const [network, setNetwork] = useState(defaultNetwork);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [quote, setQuote] = useState<OnrampQuote | null>(null);\n const [widgetUrl, setWidgetUrl] = useState<string | null>(null);\n\n const isDark = theme === 'dark';\n\n // Calculate estimated quote\n const calculateQuote = useCallback((): OnrampQuote | null => {\n const amount = parseFloat(fiatAmount);\n if (isNaN(amount) || amount <= 0) return null;\n\n const cryptoRate = CRYPTO_RATES[cryptoCurrency.toUpperCase()] || 1;\n const providerFee = amount * 0.035; // ~3.5% provider fee\n const networkFee = cryptoCurrency === 'ETH' ? 5 : 1;\n const totalFee = providerFee + networkFee;\n const netAmount = amount - totalFee;\n const cryptoAmount = netAmount / cryptoRate;\n\n return {\n fiatCurrency,\n fiatAmount: amount,\n cryptoCurrency,\n cryptoAmount: parseFloat(cryptoAmount.toFixed(8)),\n network,\n rate: cryptoRate,\n fees: {\n network: networkFee,\n provider: providerFee,\n total: totalFee,\n },\n estimatedTime: '5-15 minutes',\n };\n }, [fiatAmount, fiatCurrency, cryptoCurrency, network]);\n\n // Update quote when inputs change\n useEffect(() => {\n const newQuote = calculateQuote();\n setQuote(newQuote);\n if (newQuote) {\n onQuoteUpdate?.(newQuote);\n }\n }, [calculateQuote, onQuoteUpdate]);\n\n // Build Onramper widget URL\n const buildWidgetUrl = useCallback(() => {\n if (!walletAddress) return null;\n\n const baseUrl = 'https://buy.onramper.com';\n const params = new URLSearchParams();\n\n // API key from engine or env\n const apiKey = process.env.NEXT_PUBLIC_ONRAMPER_API_KEY || '';\n if (apiKey) {\n params.append('apiKey', apiKey);\n }\n\n // Wallet addresses (same address for all EVM chains - Smart Account)\n params.append('wallets', `ETH:${walletAddress},MATIC:${walletAddress},BNB:${walletAddress},AVAX:${walletAddress}`);\n params.append('networkWallets',\n `ethereum:${walletAddress},polygon:${walletAddress},arbitrum:${walletAddress},` +\n `optimism:${walletAddress},base:${walletAddress},bsc:${walletAddress},avalanche:${walletAddress}`\n );\n\n // Default selections\n params.append('defaultCrypto', cryptoCurrency);\n params.append('defaultFiat', fiatCurrency);\n params.append('defaultAmount', fiatAmount);\n params.append('mode', 'buy');\n\n // Network filter\n if (network) {\n params.append('onlyCryptoNetworks', network);\n }\n\n // User info\n if (email) params.append('email', email);\n if (country) params.append('country', country);\n\n // UI customization\n params.append('color', accentColor.replace('#', ''));\n params.append('darkMode', isDark ? 'true' : 'false');\n params.append('hideTopBar', 'false');\n params.append('isInAppBrowser', 'true');\n\n // Tracking\n params.append('partnerContext', `onesdk_${Date.now()}`);\n params.append('popularCryptos', 'USDT,USDC,ETH,BTC');\n\n return `${baseUrl}?${params.toString()}`;\n }, [walletAddress, cryptoCurrency, fiatCurrency, fiatAmount, network, email, country, accentColor, isDark]);\n\n // Handle buy button click\n const handleBuy = async () => {\n if (!walletAddress) {\n setError('Please connect your wallet first');\n return;\n }\n\n const amount = parseFloat(fiatAmount);\n if (isNaN(amount) || amount < 10) {\n setError('Minimum amount is $10');\n return;\n }\n\n setIsLoading(true);\n setError(null);\n\n try {\n // Try to create session via Engine API first\n const engineUrl = getEngineUrl();\n const response = await fetch(`${engineUrl}/v1/fiat/onramp`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n walletAddress,\n fiatCurrency,\n fiatAmount: amount,\n cryptoCurrency,\n network,\n email,\n }),\n });\n\n if (response.ok) {\n const data = await response.json();\n if (data.success && data.data?.widgetUrl) {\n setWidgetUrl(data.data.widgetUrl);\n if (mode === 'popup') {\n window.open(data.data.widgetUrl, '_blank', 'width=450,height=700');\n }\n return;\n }\n }\n\n // Fallback to direct Onramper URL\n const directUrl = buildWidgetUrl();\n if (directUrl) {\n setWidgetUrl(directUrl);\n if (mode === 'popup') {\n window.open(directUrl, '_blank', 'width=450,height=700');\n }\n } else {\n throw new Error('Failed to generate widget URL');\n }\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to start purchase');\n setError(error.message);\n onError?.(error);\n } finally {\n setIsLoading(false);\n }\n };\n\n // Handle closing embed\n const handleCloseEmbed = () => {\n setWidgetUrl(null);\n onClose?.();\n };\n\n // Theme colors\n const bgColor = isDark ? '#1f2937' : '#ffffff';\n const borderColor = isDark ? '#374151' : '#e5e7eb';\n const textColor = isDark ? '#ffffff' : '#111827';\n const mutedColor = isDark ? '#9ca3af' : '#6b7280';\n const inputBg = isDark ? '#374151' : '#f3f4f6';\n const quoteBg = isDark ? '#374151' : '#f3f4f6';\n\n // Embed mode - show iframe\n if (mode === 'embed' && widgetUrl) {\n return (\n <div className={className} style={{ ...style }}>\n <div style={{ display: 'flex', justifyContent: 'flex-end', marginBottom: '8px' }}>\n <button\n onClick={handleCloseEmbed}\n style={{\n background: 'none',\n border: 'none',\n color: mutedColor,\n cursor: 'pointer',\n fontSize: '14px',\n }}\n >\n Close\n </button>\n </div>\n <iframe\n src={widgetUrl}\n width=\"100%\"\n height={embedHeight}\n style={{ border: 'none', borderRadius: '16px' }}\n allow=\"payment; clipboard-read; clipboard-write\"\n />\n </div>\n );\n }\n\n // Form mode\n return (\n <div\n className={className}\n style={{\n ...containerStyle,\n backgroundColor: bgColor,\n borderColor,\n ...style,\n }}\n >\n {/* Header */}\n <div style={headerStyle}>\n <h3 style={{ color: textColor, margin: 0, fontSize: '18px', fontWeight: 600 }}>\n Buy Crypto\n </h3>\n <span style={{ color: mutedColor, fontSize: '12px' }}>\n Powered by Onramper\n </span>\n </div>\n\n {/* Fiat Input */}\n <div>\n <label style={{ color: mutedColor, fontSize: '14px', marginBottom: '8px', display: 'block' }}>\n You Pay\n </label>\n <div style={rowStyle}>\n <input\n type=\"number\"\n value={fiatAmount}\n onChange={(e) => setFiatAmount(e.target.value)}\n placeholder=\"0\"\n min=\"10\"\n style={{\n ...inputStyle,\n flex: 1,\n backgroundColor: inputBg,\n border: `1px solid ${borderColor}`,\n color: textColor,\n }}\n />\n <select\n value={fiatCurrency}\n onChange={(e) => setFiatCurrency(e.target.value)}\n style={{\n ...selectStyle,\n backgroundColor: inputBg,\n border: `1px solid ${borderColor}`,\n color: textColor,\n minWidth: '100px',\n backgroundImage: `url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='${isDark ? '%239ca3af' : '%236b7280'}'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M19 9l-7 7-7-7'%3E%3C/path%3E%3C/svg%3E\")`,\n backgroundSize: '16px',\n }}\n >\n {supportedFiats.map((fiat) => (\n <option key={fiat} value={fiat}>{fiat}</option>\n ))}\n </select>\n </div>\n </div>\n\n {/* Crypto Output */}\n <div>\n <label style={{ color: mutedColor, fontSize: '14px', marginBottom: '8px', display: 'block' }}>\n You Receive\n </label>\n <div style={rowStyle}>\n <div\n style={{\n ...inputStyle,\n flex: 1,\n backgroundColor: inputBg,\n border: `1px solid ${borderColor}`,\n color: textColor,\n display: 'flex',\n alignItems: 'center',\n }}\n >\n <span style={{ color: quote ? textColor : mutedColor }}>\n {quote ? `~${quote.cryptoAmount.toFixed(6)}` : '0.00'}\n </span>\n </div>\n <select\n value={cryptoCurrency}\n onChange={(e) => setCryptoCurrency(e.target.value)}\n style={{\n ...selectStyle,\n backgroundColor: inputBg,\n border: `1px solid ${borderColor}`,\n color: textColor,\n minWidth: '100px',\n backgroundImage: `url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='${isDark ? '%239ca3af' : '%236b7280'}'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M19 9l-7 7-7-7'%3E%3C/path%3E%3C/svg%3E\")`,\n backgroundSize: '16px',\n }}\n >\n {supportedCryptos.map((crypto) => (\n <option key={crypto} value={crypto}>{crypto}</option>\n ))}\n </select>\n </div>\n </div>\n\n {/* Network Selection */}\n <div>\n <label style={{ color: mutedColor, fontSize: '14px', marginBottom: '8px', display: 'block' }}>\n Network\n </label>\n <select\n value={network}\n onChange={(e) => setNetwork(e.target.value)}\n style={{\n ...selectStyle,\n width: '100%',\n backgroundColor: inputBg,\n border: `1px solid ${borderColor}`,\n color: textColor,\n backgroundImage: `url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='${isDark ? '%239ca3af' : '%236b7280'}'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M19 9l-7 7-7-7'%3E%3C/path%3E%3C/svg%3E\")`,\n backgroundSize: '16px',\n }}\n >\n {supportedNetworks.map((net) => (\n <option key={net} value={net}>\n {NETWORK_DISPLAY_NAMES[net] || net}\n </option>\n ))}\n </select>\n </div>\n\n {/* Quote Summary */}\n {quote && (\n <div style={{ ...quoteBoxStyle, backgroundColor: quoteBg }}>\n <div style={{ display: 'flex', justifyContent: 'space-between', marginBottom: '8px' }}>\n <span style={{ color: mutedColor }}>Rate</span>\n <span style={{ color: textColor }}>\n 1 {cryptoCurrency} = ${quote.rate.toLocaleString()}\n </span>\n </div>\n <div style={{ display: 'flex', justifyContent: 'space-between', marginBottom: '8px' }}>\n <span style={{ color: mutedColor }}>Fees</span>\n <span style={{ color: textColor }}>\n ~${quote.fees.total.toFixed(2)}\n </span>\n </div>\n <div style={{ display: 'flex', justifyContent: 'space-between' }}>\n <span style={{ color: mutedColor }}>Est. Time</span>\n <span style={{ color: textColor }}>{quote.estimatedTime}</span>\n </div>\n </div>\n )}\n\n {/* Error Message */}\n {error && (\n <div style={{\n color: '#ef4444',\n fontSize: '14px',\n padding: '12px',\n backgroundColor: 'rgba(239, 68, 68, 0.1)',\n borderRadius: '8px',\n }}>\n {error}\n </div>\n )}\n\n {/* Buy Button */}\n <button\n onClick={handleBuy}\n disabled={isLoading || !walletAddress}\n style={{\n ...buttonStyle,\n backgroundColor: isLoading || !walletAddress ? '#6b7280' : accentColor,\n color: '#ffffff',\n cursor: isLoading || !walletAddress ? 'not-allowed' : 'pointer',\n }}\n >\n {isLoading ? 'Loading...' : !walletAddress ? 'Connect Wallet' : `Buy ${cryptoCurrency}`}\n </button>\n\n {/* Wallet Address Display */}\n {walletAddress && (\n <div style={{ textAlign: 'center', color: mutedColor, fontSize: '12px' }}>\n Receiving to: {walletAddress.slice(0, 6)}...{walletAddress.slice(-4)}\n </div>\n )}\n </div>\n );\n}\n\n// ===== Presets =====\n\nexport function OneBuyUSDTWidget(props: Omit<OneOnrampWidgetProps, 'defaultCrypto'>) {\n return <OneOnrampWidget {...props} defaultCrypto=\"USDT\" />;\n}\n\nexport function OneBuyUSDCWidget(props: Omit<OneOnrampWidgetProps, 'defaultCrypto'>) {\n return <OneOnrampWidget {...props} defaultCrypto=\"USDC\" />;\n}\n\nexport function OneBuyETHWidget(props: Omit<OneOnrampWidgetProps, 'defaultCrypto'>) {\n return <OneOnrampWidget {...props} defaultCrypto=\"ETH\" />;\n}\n\nexport function OneBuyBTCWidget(props: Omit<OneOnrampWidgetProps, 'defaultCrypto'>) {\n return <OneOnrampWidget {...props} defaultCrypto=\"BTC\" />;\n}\n","'use client';\n\nimport React, { useState, useEffect, useCallback } from 'react';\nimport { useActiveAccount, useWalletBalance } from 'thirdweb/react';\nimport { base } from 'thirdweb/chains';\nimport { useThirdwebClient } from '../providers/ThirdwebProvider';\nimport { getEngineUrl } from '../config';\n\n// ===== Types =====\n\nexport interface OneOfframpWidgetProps {\n // Configuration\n defaultFiat?: string;\n defaultCrypto?: string;\n defaultAmount?: string;\n defaultNetwork?: string;\n\n // Currency options\n supportedFiats?: string[];\n supportedCryptos?: string[];\n supportedNetworks?: string[];\n\n // User info (pre-fill)\n email?: string;\n country?: string;\n\n // Appearance\n theme?: 'light' | 'dark';\n accentColor?: string;\n className?: string;\n style?: React.CSSProperties;\n\n // Display mode\n mode?: 'form' | 'embed' | 'popup';\n embedHeight?: number;\n\n // Callbacks\n onSuccess?: (transaction: OfframpTransaction) => void;\n onError?: (error: Error) => void;\n onClose?: () => void;\n onQuoteUpdate?: (quote: OfframpQuote) => void;\n}\n\nexport interface OfframpQuote {\n cryptoCurrency: string;\n cryptoAmount: number;\n fiatCurrency: string;\n fiatAmount: number;\n network: string;\n rate: number;\n fees: {\n network: number;\n provider: number;\n total: number;\n };\n estimatedTime: string;\n}\n\nexport interface OfframpTransaction {\n id: string;\n status: 'pending' | 'processing' | 'completed' | 'failed';\n cryptoCurrency: string;\n cryptoAmount: number;\n fiatCurrency: string;\n fiatAmount?: number;\n walletAddress: string;\n txHash?: string;\n provider: string;\n}\n\n// ===== Default Values =====\n\nconst DEFAULT_FIATS = ['USD', 'EUR', 'GBP', 'CNY', 'JPY', 'KRW', 'CAD', 'AUD'];\nconst DEFAULT_CRYPTOS = ['USDT', 'USDC', 'ETH', 'BTC', 'MATIC', 'BNB'];\nconst DEFAULT_NETWORKS = ['ethereum', 'polygon', 'arbitrum', 'optimism', 'base', 'bsc', 'avalanche'];\n\nconst NETWORK_DISPLAY_NAMES: Record<string, string> = {\n ethereum: 'Ethereum',\n polygon: 'Polygon',\n arbitrum: 'Arbitrum',\n optimism: 'Optimism',\n base: 'Base',\n bsc: 'BNB Chain',\n avalanche: 'Avalanche',\n solana: 'Solana',\n};\n\n// Approximate rates for quote estimation\nconst CRYPTO_RATES: Record<string, number> = {\n ETH: 3500,\n BTC: 95000,\n USDT: 1,\n USDC: 1,\n MATIC: 0.85,\n BNB: 650,\n AVAX: 42,\n SOL: 200,\n DAI: 1,\n};\n\n// ===== Styles =====\n\nconst containerStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: '16px',\n padding: '24px',\n borderRadius: '16px',\n border: '1px solid',\n maxWidth: '420px',\n};\n\nconst headerStyle: React.CSSProperties = {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n marginBottom: '8px',\n};\n\nconst selectStyle: React.CSSProperties = {\n padding: '12px 16px',\n borderRadius: '12px',\n fontSize: '16px',\n outline: 'none',\n cursor: 'pointer',\n appearance: 'none',\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'right 12px center',\n paddingRight: '40px',\n};\n\nconst inputStyle: React.CSSProperties = {\n padding: '12px 16px',\n borderRadius: '12px',\n fontSize: '18px',\n fontWeight: 500,\n outline: 'none',\n width: '100%',\n boxSizing: 'border-box',\n};\n\nconst buttonStyle: React.CSSProperties = {\n width: '100%',\n padding: '16px',\n border: 'none',\n borderRadius: '12px',\n fontSize: '16px',\n fontWeight: 600,\n cursor: 'pointer',\n transition: 'background-color 0.2s',\n};\n\nconst rowStyle: React.CSSProperties = {\n display: 'flex',\n gap: '12px',\n alignItems: 'center',\n};\n\nconst quoteBoxStyle: React.CSSProperties = {\n padding: '16px',\n borderRadius: '12px',\n fontSize: '14px',\n};\n\nconst balanceStyle: React.CSSProperties = {\n display: 'flex',\n justifyContent: 'space-between',\n fontSize: '12px',\n marginTop: '4px',\n};\n\n// ===== Component =====\n\nexport function OneOfframpWidget({\n defaultFiat = 'USD',\n defaultCrypto = 'USDT',\n defaultAmount = '',\n defaultNetwork = 'base',\n supportedFiats = DEFAULT_FIATS,\n supportedCryptos = DEFAULT_CRYPTOS,\n supportedNetworks = DEFAULT_NETWORKS,\n email,\n country,\n theme = 'dark',\n accentColor = '#ef4444', // Red for sell\n className,\n style,\n mode = 'form',\n embedHeight = 600,\n onSuccess,\n onError,\n onClose,\n onQuoteUpdate,\n}: OneOfframpWidgetProps) {\n const client = useThirdwebClient();\n const account = useActiveAccount();\n const walletAddress = account?.address;\n\n // Get balance for selected crypto\n const { data: balanceData } = useWalletBalance({\n client,\n chain: base,\n address: walletAddress,\n });\n\n // Form state\n const [cryptoCurrency, setCryptoCurrency] = useState(defaultCrypto);\n const [cryptoAmount, setCryptoAmount] = useState(defaultAmount);\n const [fiatCurrency, setFiatCurrency] = useState(defaultFiat);\n const [network, setNetwork] = useState(defaultNetwork);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [quote, setQuote] = useState<OfframpQuote | null>(null);\n const [widgetUrl, setWidgetUrl] = useState<string | null>(null);\n\n const isDark = theme === 'dark';\n\n // Calculate estimated quote\n const calculateQuote = useCallback((): OfframpQuote | null => {\n const amount = parseFloat(cryptoAmount);\n if (isNaN(amount) || amount <= 0) return null;\n\n const cryptoRate = CRYPTO_RATES[cryptoCurrency.toUpperCase()] || 1;\n const grossAmount = amount * cryptoRate;\n const providerFee = grossAmount * 0.025; // ~2.5% provider fee for offramp\n const networkFee = cryptoCurrency === 'ETH' ? 5 : 1;\n const totalFee = providerFee + networkFee;\n const netAmount = grossAmount - totalFee;\n\n return {\n cryptoCurrency,\n cryptoAmount: amount,\n fiatCurrency,\n fiatAmount: parseFloat(netAmount.toFixed(2)),\n network,\n rate: cryptoRate,\n fees: {\n network: networkFee,\n provider: providerFee,\n total: totalFee,\n },\n estimatedTime: '1-3 business days',\n };\n }, [cryptoAmount, cryptoCurrency, fiatCurrency, network]);\n\n // Update quote when inputs change\n useEffect(() => {\n const newQuote = calculateQuote();\n setQuote(newQuote);\n if (newQuote) {\n onQuoteUpdate?.(newQuote);\n }\n }, [calculateQuote, onQuoteUpdate]);\n\n // Build Onramper widget URL (sell mode)\n const buildWidgetUrl = useCallback(() => {\n if (!walletAddress) return null;\n\n const baseUrl = 'https://buy.onramper.com';\n const params = new URLSearchParams();\n\n // API key from engine or env\n const apiKey = process.env.NEXT_PUBLIC_ONRAMPER_API_KEY || '';\n if (apiKey) {\n params.append('apiKey', apiKey);\n }\n\n // Wallet addresses\n params.append('wallets', `ETH:${walletAddress},MATIC:${walletAddress},BNB:${walletAddress}`);\n params.append('networkWallets',\n `ethereum:${walletAddress},polygon:${walletAddress},arbitrum:${walletAddress},` +\n `optimism:${walletAddress},base:${walletAddress},bsc:${walletAddress}`\n );\n\n // SELL MODE\n params.append('mode', 'sell');\n params.append('defaultCrypto', cryptoCurrency);\n params.append('defaultFiat', fiatCurrency);\n if (cryptoAmount) {\n params.append('sellDefaultAmount', cryptoAmount);\n }\n\n // Network filter\n if (network) {\n params.append('onlyCryptoNetworks', network);\n }\n\n // User info\n if (email) params.append('email', email);\n if (country) params.append('country', country);\n\n // UI customization\n params.append('color', accentColor.replace('#', ''));\n params.append('darkMode', isDark ? 'true' : 'false');\n params.append('hideTopBar', 'false');\n params.append('isInAppBrowser', 'true');\n\n // Tracking\n params.append('partnerContext', `onesdk_sell_${Date.now()}`);\n\n return `${baseUrl}?${params.toString()}`;\n }, [walletAddress, cryptoCurrency, fiatCurrency, cryptoAmount, network, email, country, accentColor, isDark]);\n\n // Handle sell button click\n const handleSell = async () => {\n if (!walletAddress) {\n setError('Please connect your wallet first');\n return;\n }\n\n const amount = parseFloat(cryptoAmount);\n if (isNaN(amount) || amount <= 0) {\n setError('Please enter a valid amount');\n return;\n }\n\n // Check balance\n if (balanceData && cryptoCurrency === 'ETH') {\n const balance = parseFloat(balanceData.displayValue);\n if (amount > balance) {\n setError(`Insufficient balance. You have ${balance.toFixed(4)} ${cryptoCurrency}`);\n return;\n }\n }\n\n setIsLoading(true);\n setError(null);\n\n try {\n // Try Engine API first\n const engineUrl = getEngineUrl();\n const response = await fetch(`${engineUrl}/v1/fiat/offramp`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n walletAddress,\n cryptoCurrency,\n cryptoAmount: amount,\n fiatCurrency,\n network,\n email,\n }),\n });\n\n if (response.ok) {\n const data = await response.json();\n if (data.success && data.data?.widgetUrl) {\n setWidgetUrl(data.data.widgetUrl);\n if (mode === 'popup') {\n window.open(data.data.widgetUrl, '_blank', 'width=450,height=700');\n }\n return;\n }\n }\n\n // Fallback to direct URL\n const directUrl = buildWidgetUrl();\n if (directUrl) {\n setWidgetUrl(directUrl);\n if (mode === 'popup') {\n window.open(directUrl, '_blank', 'width=450,height=700');\n }\n } else {\n throw new Error('Failed to generate widget URL');\n }\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to start sale');\n setError(error.message);\n onError?.(error);\n } finally {\n setIsLoading(false);\n }\n };\n\n // Use max balance\n const handleUseMax = () => {\n if (balanceData && cryptoCurrency === 'ETH') {\n const balance = parseFloat(balanceData.displayValue);\n // Leave some for gas\n const maxAmount = Math.max(0, balance - 0.005);\n setCryptoAmount(maxAmount.toFixed(6));\n }\n };\n\n // Handle closing embed\n const handleCloseEmbed = () => {\n setWidgetUrl(null);\n onClose?.();\n };\n\n // Theme colors\n const bgColor = isDark ? '#1f2937' : '#ffffff';\n const borderColor = isDark ? '#374151' : '#e5e7eb';\n const textColor = isDark ? '#ffffff' : '#111827';\n const mutedColor = isDark ? '#9ca3af' : '#6b7280';\n const inputBg = isDark ? '#374151' : '#f3f4f6';\n const quoteBg = isDark ? '#374151' : '#f3f4f6';\n\n // Embed mode - show iframe\n if (mode === 'embed' && widgetUrl) {\n return (\n <div className={className} style={{ ...style }}>\n <div style={{ display: 'flex', justifyContent: 'flex-end', marginBottom: '8px' }}>\n <button\n onClick={handleCloseEmbed}\n style={{\n background: 'none',\n border: 'none',\n color: mutedColor,\n cursor: 'pointer',\n fontSize: '14px',\n }}\n >\n Close\n </button>\n </div>\n <iframe\n src={widgetUrl}\n width=\"100%\"\n height={embedHeight}\n style={{ border: 'none', borderRadius: '16px' }}\n allow=\"payment; clipboard-read; clipboard-write\"\n />\n </div>\n );\n }\n\n // Form mode\n return (\n <div\n className={className}\n style={{\n ...containerStyle,\n backgroundColor: bgColor,\n borderColor,\n ...style,\n }}\n >\n {/* Header */}\n <div style={headerStyle}>\n <h3 style={{ color: textColor, margin: 0, fontSize: '18px', fontWeight: 600 }}>\n Sell Crypto\n </h3>\n <span style={{ color: mutedColor, fontSize: '12px' }}>\n Cash out to bank\n </span>\n </div>\n\n {/* Crypto Input */}\n <div>\n <label style={{ color: mutedColor, fontSize: '14px', marginBottom: '8px', display: 'block' }}>\n You Sell\n </label>\n <div style={rowStyle}>\n <input\n type=\"number\"\n value={cryptoAmount}\n onChange={(e) => setCryptoAmount(e.target.value)}\n placeholder=\"0.0\"\n min=\"0\"\n step=\"any\"\n style={{\n ...inputStyle,\n flex: 1,\n backgroundColor: inputBg,\n border: `1px solid ${borderColor}`,\n color: textColor,\n }}\n />\n <select\n value={cryptoCurrency}\n onChange={(e) => setCryptoCurrency(e.target.value)}\n style={{\n ...selectStyle,\n backgroundColor: inputBg,\n border: `1px solid ${borderColor}`,\n color: textColor,\n minWidth: '100px',\n backgroundImage: `url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='${isDark ? '%239ca3af' : '%236b7280'}'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M19 9l-7 7-7-7'%3E%3C/path%3E%3C/svg%3E\")`,\n backgroundSize: '16px',\n }}\n >\n {supportedCryptos.map((crypto) => (\n <option key={crypto} value={crypto}>{crypto}</option>\n ))}\n </select>\n </div>\n {/* Balance row */}\n {balanceData && cryptoCurrency === 'ETH' && (\n <div style={balanceStyle}>\n <span style={{ color: mutedColor }}>\n Balance: {parseFloat(balanceData.displayValue).toFixed(4)} ETH\n </span>\n <button\n onClick={handleUseMax}\n style={{\n background: 'none',\n border: 'none',\n color: accentColor,\n cursor: 'pointer',\n fontSize: '12px',\n padding: 0,\n }}\n >\n Use Max\n </button>\n </div>\n )}\n </div>\n\n {/* Network Selection */}\n <div>\n <label style={{ color: mutedColor, fontSize: '14px', marginBottom: '8px', display: 'block' }}>\n Network\n </label>\n <select\n value={network}\n onChange={(e) => setNetwork(e.target.value)}\n style={{\n ...selectStyle,\n width: '100%',\n backgroundColor: inputBg,\n border: `1px solid ${borderColor}`,\n color: textColor,\n backgroundImage: `url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='${isDark ? '%239ca3af' : '%236b7280'}'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M19 9l-7 7-7-7'%3E%3C/path%3E%3C/svg%3E\")`,\n backgroundSize: '16px',\n }}\n >\n {supportedNetworks.map((net) => (\n <option key={net} value={net}>\n {NETWORK_DISPLAY_NAMES[net] || net}\n </option>\n ))}\n </select>\n </div>\n\n {/* Fiat Output */}\n <div>\n <label style={{ color: mutedColor, fontSize: '14px', marginBottom: '8px', display: 'block' }}>\n You Receive\n </label>\n <div style={rowStyle}>\n <div\n style={{\n ...inputStyle,\n flex: 1,\n backgroundColor: inputBg,\n border: `1px solid ${borderColor}`,\n color: textColor,\n display: 'flex',\n alignItems: 'center',\n }}\n >\n <span style={{ color: quote ? textColor : mutedColor }}>\n {quote ? `~$${quote.fiatAmount.toLocaleString()}` : '$0.00'}\n </span>\n </div>\n <select\n value={fiatCurrency}\n onChange={(e) => setFiatCurrency(e.target.value)}\n style={{\n ...selectStyle,\n backgroundColor: inputBg,\n border: `1px solid ${borderColor}`,\n color: textColor,\n minWidth: '100px',\n backgroundImage: `url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='${isDark ? '%239ca3af' : '%236b7280'}'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M19 9l-7 7-7-7'%3E%3C/path%3E%3C/svg%3E\")`,\n backgroundSize: '16px',\n }}\n >\n {supportedFiats.map((fiat) => (\n <option key={fiat} value={fiat}>{fiat}</option>\n ))}\n </select>\n </div>\n </div>\n\n {/* Quote Summary */}\n {quote && (\n <div style={{ ...quoteBoxStyle, backgroundColor: quoteBg }}>\n <div style={{ display: 'flex', justifyContent: 'space-between', marginBottom: '8px' }}>\n <span style={{ color: mutedColor }}>Rate</span>\n <span style={{ color: textColor }}>\n 1 {cryptoCurrency} = ${quote.rate.toLocaleString()}\n </span>\n </div>\n <div style={{ display: 'flex', justifyContent: 'space-between', marginBottom: '8px' }}>\n <span style={{ color: mutedColor }}>Fees</span>\n <span style={{ color: textColor }}>\n ~${quote.fees.total.toFixed(2)}\n </span>\n </div>\n <div style={{ display: 'flex', justifyContent: 'space-between' }}>\n <span style={{ color: mutedColor }}>Est. Arrival</span>\n <span style={{ color: textColor }}>{quote.estimatedTime}</span>\n </div>\n </div>\n )}\n\n {/* Warning */}\n <div style={{\n padding: '12px',\n backgroundColor: isDark ? 'rgba(251, 191, 36, 0.1)' : 'rgba(251, 191, 36, 0.15)',\n borderRadius: '8px',\n fontSize: '12px',\n color: '#fbbf24',\n }}>\n Bank transfers typically take 1-3 business days. KYC verification may be required.\n </div>\n\n {/* Error Message */}\n {error && (\n <div style={{\n color: '#ef4444',\n fontSize: '14px',\n padding: '12px',\n backgroundColor: 'rgba(239, 68, 68, 0.1)',\n borderRadius: '8px',\n }}>\n {error}\n </div>\n )}\n\n {/* Sell Button */}\n <button\n onClick={handleSell}\n disabled={isLoading || !walletAddress}\n style={{\n ...buttonStyle,\n backgroundColor: isLoading || !walletAddress ? '#6b7280' : accentColor,\n color: '#ffffff',\n cursor: isLoading || !walletAddress ? 'not-allowed' : 'pointer',\n }}\n >\n {isLoading ? 'Loading...' : !walletAddress ? 'Connect Wallet' : `Sell ${cryptoCurrency}`}\n </button>\n\n {/* Wallet Address Display */}\n {walletAddress && (\n <div style={{ textAlign: 'center', color: mutedColor, fontSize: '12px' }}>\n Selling from: {walletAddress.slice(0, 6)}...{walletAddress.slice(-4)}\n </div>\n )}\n </div>\n );\n}\n\n// ===== Presets =====\n\nexport function OneSellUSDTWidget(props: Omit<OneOfframpWidgetProps, 'defaultCrypto'>) {\n return <OneOfframpWidget {...props} defaultCrypto=\"USDT\" />;\n}\n\nexport function OneSellUSDCWidget(props: Omit<OneOfframpWidgetProps, 'defaultCrypto'>) {\n return <OneOfframpWidget {...props} defaultCrypto=\"USDC\" />;\n}\n\nexport function OneSellETHWidget(props: Omit<OneOfframpWidgetProps, 'defaultCrypto'>) {\n return <OneOfframpWidget {...props} defaultCrypto=\"ETH\" />;\n}\n","'use client';\n\nimport React, { useState, useCallback, useEffect, useMemo } from 'react';\nimport { useActiveAccount, useSendTransaction } from 'thirdweb/react';\nimport { prepareTransaction } from 'thirdweb';\nimport type { Chain } from 'thirdweb/chains';\nimport { base, ethereum, polygon, arbitrum, optimism, bsc, avalanche } from 'thirdweb/chains';\nimport { useThirdwebClient } from '../providers/ThirdwebProvider';\nimport { getEngineUrl } from '../config';\n\n// ===== Types =====\n\nexport interface SwapToken {\n address: string;\n symbol: string;\n name: string;\n decimals: number;\n logoURI?: string;\n chainId: number;\n}\n\nexport interface SwapRoute {\n provider: string;\n fromChain: number;\n toChain: number;\n fromToken: SwapToken;\n toToken: SwapToken;\n fromAmount: string;\n toAmount: string;\n estimatedGas: string;\n priceImpact: string;\n executionTime: string;\n steps: SwapStep[];\n}\n\nexport interface SwapStep {\n type: 'swap' | 'bridge' | 'approve';\n protocol: string;\n fromToken: string;\n toToken: string;\n fromChain: number;\n toChain: number;\n}\n\nexport interface OneSwapWidgetProps {\n // Default values\n defaultFromToken?: SwapToken;\n defaultToToken?: SwapToken;\n defaultFromChain?: Chain;\n defaultToChain?: Chain;\n\n // Supported chains for cross-chain\n supportedChains?: Chain[];\n\n // Supported tokens per chain\n tokens?: SwapToken[];\n\n // Mode\n mode?: 'same-chain' | 'cross-chain' | 'auto';\n\n // Appearance\n theme?: 'light' | 'dark';\n accentColor?: string;\n className?: string;\n style?: React.CSSProperties;\n\n // API endpoints\n quoteEndpoint?: string;\n executeEndpoint?: string;\n\n // Callbacks\n onSwapSuccess?: (txHash: string, route?: SwapRoute) => void;\n onSwapError?: (error: Error) => void;\n onQuoteReceived?: (route: SwapRoute) => void;\n onChainChange?: (fromChain: number, toChain: number) => void;\n}\n\n// ===== Chain Configuration =====\n\ninterface ChainConfig {\n chain: Chain;\n name: string;\n shortName: string;\n nativeToken: string;\n}\n\nconst CHAIN_CONFIGS: ChainConfig[] = [\n { chain: ethereum, name: 'Ethereum', shortName: 'ETH', nativeToken: 'ETH' },\n { chain: base, name: 'Base', shortName: 'BASE', nativeToken: 'ETH' },\n { chain: arbitrum, name: 'Arbitrum', shortName: 'ARB', nativeToken: 'ETH' },\n { chain: optimism, name: 'Optimism', shortName: 'OP', nativeToken: 'ETH' },\n { chain: polygon, name: 'Polygon', shortName: 'MATIC', nativeToken: 'POL' },\n { chain: bsc, name: 'BNB Chain', shortName: 'BSC', nativeToken: 'BNB' },\n { chain: avalanche, name: 'Avalanche', shortName: 'AVAX', nativeToken: 'AVAX' },\n];\n\n// ===== Default Tokens Per Chain =====\n\nconst TOKENS_BY_CHAIN: Record<number, SwapToken[]> = {\n // Ethereum\n 1: [\n { address: '0x0000000000000000000000000000000000000000', symbol: 'ETH', name: 'Ethereum', decimals: 18, chainId: 1 },\n { address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', symbol: 'USDC', name: 'USD Coin', decimals: 6, chainId: 1 },\n { address: '0xdAC17F958D2ee523a2206206994597C13D831ec7', symbol: 'USDT', name: 'Tether', decimals: 6, chainId: 1 },\n { address: '0x6B175474E89094C44Da98b954EescdeCB5', symbol: 'DAI', name: 'Dai', decimals: 18, chainId: 1 },\n { address: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', symbol: 'WETH', name: 'Wrapped Ether', decimals: 18, chainId: 1 },\n ],\n // Base\n 8453: [\n { address: '0x0000000000000000000000000000000000000000', symbol: 'ETH', name: 'Ethereum', decimals: 18, chainId: 8453 },\n { address: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', symbol: 'USDC', name: 'USD Coin', decimals: 6, chainId: 8453 },\n { address: '0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb', symbol: 'DAI', name: 'Dai', decimals: 18, chainId: 8453 },\n { address: '0x4200000000000000000000000000000000000006', symbol: 'WETH', name: 'Wrapped Ether', decimals: 18, chainId: 8453 },\n ],\n // Arbitrum\n 42161: [\n { address: '0x0000000000000000000000000000000000000000', symbol: 'ETH', name: 'Ethereum', decimals: 18, chainId: 42161 },\n { address: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831', symbol: 'USDC', name: 'USD Coin', decimals: 6, chainId: 42161 },\n { address: '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9', symbol: 'USDT', name: 'Tether', decimals: 6, chainId: 42161 },\n { address: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1', symbol: 'WETH', name: 'Wrapped Ether', decimals: 18, chainId: 42161 },\n ],\n // Optimism\n 10: [\n { address: '0x0000000000000000000000000000000000000000', symbol: 'ETH', name: 'Ethereum', decimals: 18, chainId: 10 },\n { address: '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85', symbol: 'USDC', name: 'USD Coin', decimals: 6, chainId: 10 },\n { address: '0x94b008aA00579c1307B0EF2c499aD98a8ce58e58', symbol: 'USDT', name: 'Tether', decimals: 6, chainId: 10 },\n { address: '0x4200000000000000000000000000000000000006', symbol: 'WETH', name: 'Wrapped Ether', decimals: 18, chainId: 10 },\n ],\n // Polygon\n 137: [\n { address: '0x0000000000000000000000000000000000000000', symbol: 'POL', name: 'Polygon', decimals: 18, chainId: 137 },\n { address: '0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359', symbol: 'USDC', name: 'USD Coin', decimals: 6, chainId: 137 },\n { address: '0xc2132D05D31c914a87C6611C10748AEb04B58e8F', symbol: 'USDT', name: 'Tether', decimals: 6, chainId: 137 },\n { address: '0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619', symbol: 'WETH', name: 'Wrapped Ether', decimals: 18, chainId: 137 },\n ],\n // BSC\n 56: [\n { address: '0x0000000000000000000000000000000000000000', symbol: 'BNB', name: 'BNB', decimals: 18, chainId: 56 },\n { address: '0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d', symbol: 'USDC', name: 'USD Coin', decimals: 18, chainId: 56 },\n { address: '0x55d398326f99059fF775485246999027B3197955', symbol: 'USDT', name: 'Tether', decimals: 18, chainId: 56 },\n { address: '0x2170Ed0880ac9A755fd29B2688956BD959F933F8', symbol: 'ETH', name: 'Ethereum', decimals: 18, chainId: 56 },\n ],\n // Avalanche\n 43114: [\n { address: '0x0000000000000000000000000000000000000000', symbol: 'AVAX', name: 'Avalanche', decimals: 18, chainId: 43114 },\n { address: '0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E', symbol: 'USDC', name: 'USD Coin', decimals: 6, chainId: 43114 },\n { address: '0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7', symbol: 'USDT', name: 'Tether', decimals: 6, chainId: 43114 },\n { address: '0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB', symbol: 'WETH', name: 'Wrapped Ether', decimals: 18, chainId: 43114 },\n ],\n};\n\n// ===== Styles =====\n\nconst containerStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: '16px',\n padding: '24px',\n borderRadius: '16px',\n border: '1px solid',\n maxWidth: '420px',\n};\n\nconst chainSelectorStyle: React.CSSProperties = {\n display: 'flex',\n gap: '8px',\n alignItems: 'center',\n};\n\nconst tokenInputStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n padding: '16px',\n borderRadius: '12px',\n};\n\nconst inputStyle: React.CSSProperties = {\n width: '100%',\n padding: '8px 0',\n backgroundColor: 'transparent',\n border: 'none',\n fontSize: '24px',\n fontWeight: 600,\n outline: 'none',\n};\n\nconst selectStyle: React.CSSProperties = {\n padding: '8px 12px',\n border: 'none',\n borderRadius: '8px',\n fontSize: '14px',\n fontWeight: 500,\n cursor: 'pointer',\n appearance: 'none',\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'right 8px center',\n paddingRight: '28px',\n};\n\nconst buttonStyle: React.CSSProperties = {\n width: '100%',\n padding: '16px',\n border: 'none',\n borderRadius: '12px',\n fontSize: '16px',\n fontWeight: 600,\n cursor: 'pointer',\n transition: 'background-color 0.2s',\n};\n\nconst routeBoxStyle: React.CSSProperties = {\n padding: '12px',\n borderRadius: '8px',\n fontSize: '13px',\n};\n\nconst labelStyle: React.CSSProperties = {\n fontSize: '12px',\n marginBottom: '4px',\n};\n\n// ===== Component =====\n\nexport function OneSwapWidget({\n defaultFromToken,\n defaultToToken,\n defaultFromChain = base,\n defaultToChain,\n supportedChains,\n tokens,\n mode = 'auto',\n theme = 'dark',\n accentColor = '#10b981',\n className,\n style,\n quoteEndpoint,\n executeEndpoint,\n onSwapSuccess,\n onSwapError,\n onQuoteReceived,\n onChainChange,\n}: OneSwapWidgetProps) {\n const client = useThirdwebClient();\n const account = useActiveAccount();\n const { mutate: sendTransaction, isPending } = useSendTransaction();\n\n // Available chains\n const availableChains = useMemo(() => {\n if (supportedChains) {\n return CHAIN_CONFIGS.filter(c => supportedChains.some(sc => sc.id === c.chain.id));\n }\n return CHAIN_CONFIGS;\n }, [supportedChains]);\n\n // State\n const [fromChain, setFromChain] = useState<ChainConfig>(\n availableChains.find(c => c.chain.id === defaultFromChain.id) || availableChains[0]\n );\n const [toChain, setToChain] = useState<ChainConfig>(\n defaultToChain\n ? availableChains.find(c => c.chain.id === defaultToChain.id) || availableChains[0]\n : fromChain\n );\n\n // Get tokens for selected chains\n const fromTokens = useMemo(() => {\n if (tokens) {\n return tokens.filter(t => t.chainId === fromChain.chain.id);\n }\n return TOKENS_BY_CHAIN[fromChain.chain.id] || [];\n }, [tokens, fromChain]);\n\n const toTokens = useMemo(() => {\n if (tokens) {\n return tokens.filter(t => t.chainId === toChain.chain.id);\n }\n return TOKENS_BY_CHAIN[toChain.chain.id] || [];\n }, [tokens, toChain]);\n\n const [fromToken, setFromToken] = useState<SwapToken>(defaultFromToken || fromTokens[0]);\n const [toToken, setToToken] = useState<SwapToken>(defaultToToken || toTokens[1] || toTokens[0]);\n const [fromAmount, setFromAmount] = useState('');\n const [toAmount, setToAmount] = useState('');\n const [route, setRoute] = useState<SwapRoute | null>(null);\n const [isLoadingQuote, setIsLoadingQuote] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const isDark = theme === 'dark';\n const isCrossChain = fromChain.chain.id !== toChain.chain.id;\n\n // Update tokens when chain changes\n useEffect(() => {\n const newFromTokens = TOKENS_BY_CHAIN[fromChain.chain.id] || [];\n if (newFromTokens.length > 0 && !newFromTokens.some(t => t.address === fromToken?.address)) {\n setFromToken(newFromTokens[0]);\n }\n }, [fromChain, fromToken?.address]);\n\n useEffect(() => {\n const newToTokens = TOKENS_BY_CHAIN[toChain.chain.id] || [];\n if (newToTokens.length > 0 && !newToTokens.some(t => t.address === toToken?.address)) {\n // Try to find same symbol token on destination chain, otherwise use first\n const sameSymbol = newToTokens.find(t => t.symbol === fromToken?.symbol);\n setToToken(sameSymbol || newToTokens[0]);\n }\n }, [toChain, toToken?.address, fromToken?.symbol]);\n\n // Notify chain change\n useEffect(() => {\n onChainChange?.(fromChain.chain.id, toChain.chain.id);\n }, [fromChain, toChain, onChainChange]);\n\n // Fetch quote\n const fetchQuote = useCallback(async () => {\n if (!fromAmount || parseFloat(fromAmount) <= 0 || !fromToken || !toToken) {\n setToAmount('');\n setRoute(null);\n return;\n }\n\n setIsLoadingQuote(true);\n setError(null);\n\n try {\n const engineUrl = getEngineUrl();\n const endpoint = quoteEndpoint || `${engineUrl}/v1/swap/quote`;\n\n const response = await fetch(endpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n fromChainId: fromChain.chain.id,\n toChainId: toChain.chain.id,\n fromToken: fromToken.address,\n toToken: toToken.address,\n fromAmount: fromAmount,\n fromDecimals: fromToken.decimals,\n walletAddress: account?.address,\n slippage: 0.5, // 0.5% default slippage\n }),\n });\n\n const data = await response.json();\n\n if (data.success && data.data) {\n const routeData: SwapRoute = {\n provider: data.data.provider || 'aggregator',\n fromChain: fromChain.chain.id,\n toChain: toChain.chain.id,\n fromToken,\n toToken,\n fromAmount,\n toAmount: data.data.toAmount || '0',\n estimatedGas: data.data.estimatedGas || '0',\n priceImpact: data.data.priceImpact || '0',\n executionTime: isCrossChain ? '2-5 min' : '~30 sec',\n steps: data.data.steps || [],\n };\n\n setRoute(routeData);\n setToAmount(routeData.toAmount);\n onQuoteReceived?.(routeData);\n } else {\n // Fallback: simple estimate\n const estimatedOutput = estimateSwapOutput(fromAmount, fromToken, toToken);\n setToAmount(estimatedOutput.toFixed(6));\n setError(data.error?.message || null);\n }\n } catch (err) {\n // Fallback estimate on error\n const estimatedOutput = estimateSwapOutput(fromAmount, fromToken, toToken);\n setToAmount(estimatedOutput.toFixed(6));\n console.error('Quote fetch error:', err);\n } finally {\n setIsLoadingQuote(false);\n }\n }, [fromAmount, fromToken, toToken, fromChain, toChain, account?.address, quoteEndpoint, isCrossChain, onQuoteReceived]);\n\n // Simple estimate fallback\n const estimateSwapOutput = (amount: string, from: SwapToken, to: SwapToken): number => {\n const prices: Record<string, number> = {\n ETH: 3500, WETH: 3500, BNB: 650, AVAX: 42, POL: 0.85,\n USDC: 1, USDT: 1, DAI: 1,\n };\n const fromPrice = prices[from.symbol] || 1;\n const toPrice = prices[to.symbol] || 1;\n return (parseFloat(amount) * fromPrice) / toPrice;\n };\n\n useEffect(() => {\n const debounce = setTimeout(fetchQuote, 500);\n return () => clearTimeout(debounce);\n }, [fetchQuote]);\n\n // Swap tokens/chains\n const handleSwapDirection = () => {\n const tempChain = fromChain;\n const tempToken = fromToken;\n setFromChain(toChain);\n setToChain(tempChain);\n setFromToken(toToken);\n setToToken(tempToken);\n setFromAmount(toAmount);\n setToAmount(fromAmount);\n };\n\n // Execute swap\n const handleSwap = async () => {\n if (!account || !fromToken || !toToken) return;\n\n setError(null);\n\n try {\n const engineUrl = getEngineUrl();\n const endpoint = executeEndpoint || `${engineUrl}/v1/swap/execute`;\n\n const response = await fetch(endpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n fromChainId: fromChain.chain.id,\n toChainId: toChain.chain.id,\n fromToken: fromToken.address,\n toToken: toToken.address,\n fromAmount,\n walletAddress: account.address,\n slippage: 0.5,\n }),\n });\n\n const data = await response.json();\n\n if (data.success && data.data?.transaction) {\n const tx = prepareTransaction({\n to: data.data.transaction.to,\n data: data.data.transaction.data,\n value: BigInt(data.data.transaction.value || 0),\n chain: fromChain.chain,\n client,\n });\n\n sendTransaction(tx, {\n onSuccess: (result) => {\n onSwapSuccess?.(result.transactionHash, route || undefined);\n setFromAmount('');\n setToAmount('');\n setRoute(null);\n },\n onError: (err) => {\n setError(err.message);\n onSwapError?.(err);\n },\n });\n } else {\n throw new Error(data.error?.message || 'Swap execution failed');\n }\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Swap failed');\n setError(error.message);\n onSwapError?.(error);\n }\n };\n\n const canSwap = account && fromAmount && parseFloat(fromAmount) > 0 && !isPending && !isLoadingQuote;\n\n // Theme colors\n const bgColor = isDark ? '#1f2937' : '#ffffff';\n const borderColor = isDark ? '#374151' : '#e5e7eb';\n const textColor = isDark ? '#ffffff' : '#111827';\n const mutedColor = isDark ? '#9ca3af' : '#6b7280';\n const inputBg = isDark ? '#374151' : '#f3f4f6';\n\n return (\n <div\n className={className}\n style={{\n ...containerStyle,\n backgroundColor: bgColor,\n borderColor,\n ...style,\n }}\n >\n {/* Header */}\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <h3 style={{ color: textColor, margin: 0, fontSize: '18px', fontWeight: 600 }}>\n Swap\n </h3>\n {isCrossChain && (\n <span style={{\n fontSize: '11px',\n padding: '4px 8px',\n backgroundColor: accentColor,\n color: '#fff',\n borderRadius: '4px',\n }}>\n Cross-Chain\n </span>\n )}\n </div>\n\n {/* From Section */}\n <div style={{ ...tokenInputStyle, backgroundColor: inputBg }}>\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ ...labelStyle, color: mutedColor }}>From</span>\n {mode !== 'same-chain' && (\n <div style={chainSelectorStyle}>\n <select\n value={fromChain.chain.id}\n onChange={(e) => {\n const chain = availableChains.find(c => c.chain.id === parseInt(e.target.value));\n if (chain) setFromChain(chain);\n }}\n style={{\n ...selectStyle,\n backgroundColor: isDark ? '#4b5563' : '#e5e7eb',\n color: textColor,\n backgroundImage: `url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='${isDark ? '%239ca3af' : '%236b7280'}'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M19 9l-7 7-7-7'%3E%3C/path%3E%3C/svg%3E\")`,\n backgroundSize: '12px',\n fontSize: '12px',\n padding: '6px 24px 6px 8px',\n }}\n >\n {availableChains.map(c => (\n <option key={c.chain.id} value={c.chain.id}>{c.shortName}</option>\n ))}\n </select>\n </div>\n )}\n </div>\n\n <div style={{ display: 'flex', gap: '12px', alignItems: 'center' }}>\n <input\n type=\"number\"\n value={fromAmount}\n onChange={(e) => setFromAmount(e.target.value)}\n placeholder=\"0.0\"\n style={{ ...inputStyle, flex: 1, color: textColor }}\n />\n <select\n value={fromToken?.address || ''}\n onChange={(e) => {\n const token = fromTokens.find(t => t.address === e.target.value);\n if (token) setFromToken(token);\n }}\n style={{\n ...selectStyle,\n backgroundColor: isDark ? '#4b5563' : '#e5e7eb',\n color: textColor,\n backgroundImage: `url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='${isDark ? '%239ca3af' : '%236b7280'}'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M19 9l-7 7-7-7'%3E%3C/path%3E%3C/svg%3E\")`,\n backgroundSize: '12px',\n }}\n >\n {fromTokens.map(token => (\n <option key={token.address} value={token.address}>{token.symbol}</option>\n ))}\n </select>\n </div>\n </div>\n\n {/* Swap Direction Button */}\n <div style={{ display: 'flex', justifyContent: 'center', margin: '-8px 0' }}>\n <button\n onClick={handleSwapDirection}\n style={{\n width: '36px',\n height: '36px',\n borderRadius: '50%',\n backgroundColor: inputBg,\n border: `2px solid ${bgColor}`,\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '16px',\n color: mutedColor,\n zIndex: 1,\n }}\n >\n ↕\n </button>\n </div>\n\n {/* To Section */}\n <div style={{ ...tokenInputStyle, backgroundColor: inputBg }}>\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ ...labelStyle, color: mutedColor }}>To</span>\n {mode !== 'same-chain' && (\n <div style={chainSelectorStyle}>\n <select\n value={toChain.chain.id}\n onChange={(e) => {\n const chain = availableChains.find(c => c.chain.id === parseInt(e.target.value));\n if (chain) setToChain(chain);\n }}\n style={{\n ...selectStyle,\n backgroundColor: isDark ? '#4b5563' : '#e5e7eb',\n color: textColor,\n backgroundImage: `url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='${isDark ? '%239ca3af' : '%236b7280'}'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M19 9l-7 7-7-7'%3E%3C/path%3E%3C/svg%3E\")`,\n backgroundSize: '12px',\n fontSize: '12px',\n padding: '6px 24px 6px 8px',\n }}\n >\n {availableChains.map(c => (\n <option key={c.chain.id} value={c.chain.id}>{c.shortName}</option>\n ))}\n </select>\n </div>\n )}\n </div>\n\n <div style={{ display: 'flex', gap: '12px', alignItems: 'center' }}>\n <input\n type=\"number\"\n value={toAmount}\n placeholder=\"0.0\"\n readOnly\n style={{ ...inputStyle, flex: 1, color: mutedColor }}\n />\n <select\n value={toToken?.address || ''}\n onChange={(e) => {\n const token = toTokens.find(t => t.address === e.target.value);\n if (token) setToToken(token);\n }}\n style={{\n ...selectStyle,\n backgroundColor: isDark ? '#4b5563' : '#e5e7eb',\n color: textColor,\n backgroundImage: `url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='${isDark ? '%239ca3af' : '%236b7280'}'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M19 9l-7 7-7-7'%3E%3C/path%3E%3C/svg%3E\")`,\n backgroundSize: '12px',\n }}\n >\n {toTokens.map(token => (\n <option key={token.address} value={token.address}>{token.symbol}</option>\n ))}\n </select>\n </div>\n </div>\n\n {/* Route Info */}\n {(route || (fromAmount && toAmount)) && (\n <div style={{ ...routeBoxStyle, backgroundColor: inputBg }}>\n <div style={{ display: 'flex', justifyContent: 'space-between', marginBottom: '6px' }}>\n <span style={{ color: mutedColor }}>Rate</span>\n <span style={{ color: textColor }}>\n 1 {fromToken?.symbol} = {toAmount && fromAmount ? (parseFloat(toAmount) / parseFloat(fromAmount)).toFixed(6) : '0'} {toToken?.symbol}\n </span>\n </div>\n {route?.priceImpact && parseFloat(route.priceImpact) > 0 && (\n <div style={{ display: 'flex', justifyContent: 'space-between', marginBottom: '6px' }}>\n <span style={{ color: mutedColor }}>Price Impact</span>\n <span style={{ color: parseFloat(route.priceImpact) > 3 ? '#ef4444' : textColor }}>\n {route.priceImpact}%\n </span>\n </div>\n )}\n {isCrossChain && (\n <div style={{ display: 'flex', justifyContent: 'space-between' }}>\n <span style={{ color: mutedColor }}>Est. Time</span>\n <span style={{ color: textColor }}>{route?.executionTime || '2-5 min'}</span>\n </div>\n )}\n </div>\n )}\n\n {/* Error */}\n {error && (\n <div style={{\n color: '#ef4444',\n fontSize: '14px',\n padding: '10px 12px',\n backgroundColor: 'rgba(239, 68, 68, 0.1)',\n borderRadius: '8px',\n }}>\n {error}\n </div>\n )}\n\n {/* Swap Button */}\n <button\n onClick={handleSwap}\n disabled={!canSwap}\n style={{\n ...buttonStyle,\n backgroundColor: canSwap ? accentColor : '#6b7280',\n color: '#ffffff',\n cursor: canSwap ? 'pointer' : 'not-allowed',\n }}\n >\n {isPending\n ? 'Swapping...'\n : isLoadingQuote\n ? 'Getting Quote...'\n : !account\n ? 'Connect Wallet'\n : isCrossChain\n ? `Bridge & Swap`\n : 'Swap'}\n </button>\n </div>\n );\n}\n\n// ===== Presets =====\n\nexport function OneSameChainSwap(props: Omit<OneSwapWidgetProps, 'mode'>) {\n return <OneSwapWidget {...props} mode=\"same-chain\" />;\n}\n\nexport function OneCrossChainSwap(props: Omit<OneSwapWidgetProps, 'mode'>) {\n return <OneSwapWidget {...props} mode=\"cross-chain\" />;\n}\n","'use client';\n\nimport React, { useState, useEffect, useCallback } from 'react';\nimport { useActiveAccount, useWalletBalance as useThirdwebBalance } from 'thirdweb/react';\nimport type { Chain } from 'thirdweb/chains';\nimport { base, ethereum, polygon, arbitrum, optimism } from 'thirdweb/chains';\nimport { useThirdwebClient } from '../providers/ThirdwebProvider';\n\n// ===== Types =====\n\nexport interface TokenBalance {\n symbol: string;\n name: string;\n balance: string;\n balanceFormatted: string;\n balanceUsd: number;\n price: number;\n priceChange24h: number;\n chainId: number;\n chain: string;\n contractAddress?: string;\n logoURI?: string;\n}\n\nexport interface OneWalletBalanceProps {\n // Display options\n showTotalBalance?: boolean;\n showTokenList?: boolean;\n showChainFilter?: boolean;\n showPriceChange?: boolean;\n\n // Chains to show\n chains?: Chain[];\n\n // API endpoint for fetching balances\n balanceEndpoint?: string;\n\n // Appearance\n theme?: 'light' | 'dark';\n className?: string;\n style?: React.CSSProperties;\n compact?: boolean;\n\n // Callbacks\n onTokenClick?: (token: TokenBalance) => void;\n onRefresh?: () => void;\n}\n\n// ===== Styles =====\n\nconst containerStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: '16px',\n};\n\nconst balanceCardStyle: React.CSSProperties = {\n padding: '24px',\n backgroundColor: '#1f2937',\n borderRadius: '16px',\n border: '1px solid #374151',\n};\n\nconst tokenRowStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '12px 16px',\n borderRadius: '12px',\n cursor: 'pointer',\n transition: 'background-color 0.2s',\n};\n\n// ===== Utilities =====\n\nconst formatUSD = (value: number): string => {\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(value);\n};\n\nconst formatBalance = (value: string, decimals: number = 4): string => {\n const num = parseFloat(value);\n if (num === 0) return '0';\n if (num < 0.0001) return '<0.0001';\n return num.toFixed(decimals);\n};\n\nconst CHAIN_INFO: Record<number, { name: string; icon: string }> = {\n 1: { name: 'Ethereum', icon: '⟠' },\n 8453: { name: 'Base', icon: '🔵' },\n 137: { name: 'Polygon', icon: '🟣' },\n 42161: { name: 'Arbitrum', icon: '🔷' },\n 10: { name: 'Optimism', icon: '🔴' },\n};\n\n// ===== Component =====\n\nexport function OneWalletBalance({\n showTotalBalance = true,\n showTokenList = true,\n showChainFilter = true,\n showPriceChange = true,\n chains = [base, ethereum, polygon, arbitrum, optimism],\n balanceEndpoint = '/api/v1/assets',\n theme = 'dark',\n className,\n style,\n compact = false,\n onTokenClick,\n onRefresh,\n}: OneWalletBalanceProps) {\n const client = useThirdwebClient();\n const account = useActiveAccount();\n\n const [tokens, setTokens] = useState<TokenBalance[]>([]);\n const [totalBalance, setTotalBalance] = useState(0);\n const [totalChange24h, setTotalChange24h] = useState(0);\n const [isLoading, setIsLoading] = useState(true);\n const [selectedChain, setSelectedChain] = useState<number | null>(null);\n const [error, setError] = useState<string | null>(null);\n\n // Fetch balances from ONE Engine\n const fetchBalances = useCallback(async () => {\n if (!account?.address) return;\n\n setIsLoading(true);\n setError(null);\n\n try {\n const chainIds = chains.map(c => c.id).join(',');\n const response = await fetch(`${balanceEndpoint}?address=${account.address}&chains=${chainIds}`);\n const data = await response.json();\n\n if (data.success && data.data) {\n const balanceData = data.data;\n setTokens(balanceData.tokens || []);\n setTotalBalance(balanceData.totalUsd || 0);\n setTotalChange24h(balanceData.change24hPercent || 0);\n } else {\n setError(data.error?.message || 'Failed to fetch balances');\n }\n } catch (err) {\n setError('Failed to load balances');\n } finally {\n setIsLoading(false);\n }\n }, [account?.address, balanceEndpoint, chains]);\n\n useEffect(() => {\n fetchBalances();\n }, [fetchBalances]);\n\n const handleRefresh = () => {\n fetchBalances();\n onRefresh?.();\n };\n\n const filteredTokens = selectedChain\n ? tokens.filter(t => t.chainId === selectedChain)\n : tokens;\n\n const isDark = theme === 'dark';\n\n if (!account) {\n return (\n <div className={className} style={{ ...style, textAlign: 'center', padding: '24px', color: isDark ? '#9ca3af' : '#6b7280' }}>\n Connect your wallet to view balances\n </div>\n );\n }\n\n return (\n <div className={className} style={{ ...containerStyle, ...style }}>\n {/* Total Balance Card */}\n {showTotalBalance && (\n <div style={{ ...balanceCardStyle, backgroundColor: isDark ? '#1f2937' : '#ffffff', border: `1px solid ${isDark ? '#374151' : '#e5e7eb'}` }}>\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'flex-start' }}>\n <div>\n <p style={{ margin: '0 0 4px 0', color: isDark ? '#9ca3af' : '#6b7280', fontSize: '14px' }}>Total Balance</p>\n {isLoading ? (\n <div style={{ height: '36px', width: '120px', backgroundColor: isDark ? '#374151' : '#e5e7eb', borderRadius: '8px', animation: 'pulse 2s infinite' }} />\n ) : (\n <h2 style={{ margin: 0, color: isDark ? '#ffffff' : '#111827', fontSize: compact ? '24px' : '32px', fontWeight: 700 }}>\n {formatUSD(totalBalance)}\n </h2>\n )}\n {showPriceChange && !isLoading && (\n <p style={{ margin: '4px 0 0 0', fontSize: '14px', color: totalChange24h >= 0 ? '#10b981' : '#ef4444' }}>\n {totalChange24h >= 0 ? '+' : ''}{totalChange24h.toFixed(2)}% (24h)\n </p>\n )}\n </div>\n <button\n onClick={handleRefresh}\n disabled={isLoading}\n style={{\n padding: '8px 12px',\n backgroundColor: isDark ? '#374151' : '#e5e7eb',\n border: 'none',\n borderRadius: '8px',\n color: isDark ? '#ffffff' : '#111827',\n cursor: isLoading ? 'not-allowed' : 'pointer',\n fontSize: '14px',\n }}\n >\n {isLoading ? '...' : '↻'}\n </button>\n </div>\n </div>\n )}\n\n {/* Chain Filter */}\n {showChainFilter && chains.length > 1 && (\n <div style={{ display: 'flex', gap: '8px', flexWrap: 'wrap' }}>\n <button\n onClick={() => setSelectedChain(null)}\n style={{\n padding: '8px 16px',\n backgroundColor: selectedChain === null ? '#10b981' : (isDark ? '#374151' : '#e5e7eb'),\n border: 'none',\n borderRadius: '20px',\n color: selectedChain === null ? '#ffffff' : (isDark ? '#9ca3af' : '#6b7280'),\n cursor: 'pointer',\n fontSize: '14px',\n }}\n >\n All\n </button>\n {chains.map(chain => (\n <button\n key={chain.id}\n onClick={() => setSelectedChain(chain.id)}\n style={{\n padding: '8px 16px',\n backgroundColor: selectedChain === chain.id ? '#10b981' : (isDark ? '#374151' : '#e5e7eb'),\n border: 'none',\n borderRadius: '20px',\n color: selectedChain === chain.id ? '#ffffff' : (isDark ? '#9ca3af' : '#6b7280'),\n cursor: 'pointer',\n fontSize: '14px',\n }}\n >\n {CHAIN_INFO[chain.id]?.icon} {CHAIN_INFO[chain.id]?.name || `Chain ${chain.id}`}\n </button>\n ))}\n </div>\n )}\n\n {/* Token List */}\n {showTokenList && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '4px' }}>\n {isLoading ? (\n Array(3).fill(0).map((_, i) => (\n <div key={i} style={{ ...tokenRowStyle, backgroundColor: isDark ? '#374151' : '#f3f4f6', height: '60px', animation: 'pulse 2s infinite' }} />\n ))\n ) : error ? (\n <div style={{ textAlign: 'center', padding: '24px', color: '#ef4444' }}>{error}</div>\n ) : filteredTokens.length === 0 ? (\n <div style={{ textAlign: 'center', padding: '24px', color: isDark ? '#9ca3af' : '#6b7280' }}>No tokens found</div>\n ) : (\n filteredTokens.map((token, index) => (\n <div\n key={`${token.chainId}-${token.symbol}-${index}`}\n style={{\n ...tokenRowStyle,\n backgroundColor: 'transparent',\n }}\n onClick={() => onTokenClick?.(token)}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = isDark ? '#374151' : '#f3f4f6';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '12px' }}>\n <div style={{\n width: '40px',\n height: '40px',\n borderRadius: '50%',\n backgroundColor: isDark ? '#374151' : '#e5e7eb',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '16px',\n fontWeight: 600,\n color: isDark ? '#ffffff' : '#111827',\n }}>\n {token.logoURI ? (\n <img src={token.logoURI} alt={token.symbol} style={{ width: '100%', height: '100%', borderRadius: '50%' }} />\n ) : (\n token.symbol.slice(0, 2)\n )}\n </div>\n <div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <span style={{ color: isDark ? '#ffffff' : '#111827', fontWeight: 600 }}>{token.symbol}</span>\n <span style={{\n fontSize: '10px',\n padding: '2px 6px',\n backgroundColor: isDark ? '#374151' : '#e5e7eb',\n borderRadius: '4px',\n color: isDark ? '#9ca3af' : '#6b7280',\n }}>\n {CHAIN_INFO[token.chainId]?.name || token.chain}\n </span>\n </div>\n <span style={{ color: isDark ? '#9ca3af' : '#6b7280', fontSize: '14px' }}>\n {formatBalance(token.balanceFormatted)} {token.symbol}\n </span>\n </div>\n </div>\n <div style={{ textAlign: 'right' }}>\n <div style={{ color: isDark ? '#ffffff' : '#111827', fontWeight: 600 }}>\n {formatUSD(token.balanceUsd)}\n </div>\n {showPriceChange && (\n <div style={{ fontSize: '14px', color: token.priceChange24h >= 0 ? '#10b981' : '#ef4444' }}>\n {token.priceChange24h >= 0 ? '+' : ''}{token.priceChange24h.toFixed(2)}%\n </div>\n )}\n </div>\n </div>\n ))\n )}\n </div>\n )}\n </div>\n );\n}\n\n// ===== Compact Balance Display =====\n\nexport function OneBalanceDisplay({\n theme = 'dark',\n className,\n style,\n}: Pick<OneWalletBalanceProps, 'theme' | 'className' | 'style'>) {\n return (\n <OneWalletBalance\n theme={theme}\n className={className}\n style={style}\n showTotalBalance={true}\n showTokenList={false}\n showChainFilter={false}\n compact={true}\n />\n );\n}\n","'use client';\n\nimport React, { useState, useEffect, useCallback } from 'react';\nimport { useActiveAccount } from 'thirdweb/react';\nimport { MediaRenderer } from 'thirdweb/react';\nimport { useThirdwebClient } from '../providers/ThirdwebProvider';\n\n// ===== Types =====\n\nexport interface NFTItem {\n id: string;\n tokenId: string;\n contractAddress: string;\n name: string;\n description?: string;\n image?: string;\n animationUrl?: string;\n attributes?: Array<{ trait_type: string; value: string | number }>;\n chain: string;\n chainId: number;\n collection?: {\n name: string;\n image?: string;\n };\n}\n\nexport interface OneNFTGalleryProps {\n // Data source\n nfts?: NFTItem[];\n fetchEndpoint?: string;\n\n // Display options\n columns?: 2 | 3 | 4;\n showCollection?: boolean;\n showChain?: boolean;\n\n // Appearance\n theme?: 'light' | 'dark';\n className?: string;\n style?: React.CSSProperties;\n\n // Callbacks\n onNFTClick?: (nft: NFTItem) => void;\n onTransfer?: (nft: NFTItem) => void;\n}\n\n// ===== Styles =====\n\nconst galleryStyle: React.CSSProperties = {\n display: 'grid',\n gap: '16px',\n};\n\nconst cardStyle: React.CSSProperties = {\n backgroundColor: '#1f2937',\n borderRadius: '16px',\n overflow: 'hidden',\n border: '1px solid #374151',\n cursor: 'pointer',\n transition: 'transform 0.2s, box-shadow 0.2s',\n};\n\nconst imageContainerStyle: React.CSSProperties = {\n aspectRatio: '1',\n backgroundColor: '#374151',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'hidden',\n};\n\nconst infoStyle: React.CSSProperties = {\n padding: '12px',\n};\n\n// ===== Component =====\n\nexport function OneNFTGallery({\n nfts: propNfts,\n fetchEndpoint = '/api/v1/assets/nft',\n columns = 3,\n showCollection = true,\n showChain = true,\n theme = 'dark',\n className,\n style,\n onNFTClick,\n onTransfer,\n}: OneNFTGalleryProps) {\n const client = useThirdwebClient();\n const account = useActiveAccount();\n\n const [nfts, setNfts] = useState<NFTItem[]>(propNfts || []);\n const [isLoading, setIsLoading] = useState(!propNfts);\n const [error, setError] = useState<string | null>(null);\n const [selectedNFT, setSelectedNFT] = useState<NFTItem | null>(null);\n\n // Fetch NFTs\n const fetchNFTs = useCallback(async () => {\n if (!account?.address || propNfts) return;\n\n setIsLoading(true);\n setError(null);\n\n try {\n const response = await fetch(`${fetchEndpoint}?address=${account.address}`);\n const data = await response.json();\n\n if (data.success && data.data) {\n setNfts(data.data.nfts || []);\n } else {\n setError(data.error?.message || 'Failed to fetch NFTs');\n }\n } catch (err) {\n setError('Failed to load NFTs');\n } finally {\n setIsLoading(false);\n }\n }, [account?.address, fetchEndpoint, propNfts]);\n\n useEffect(() => {\n fetchNFTs();\n }, [fetchNFTs]);\n\n useEffect(() => {\n if (propNfts) {\n setNfts(propNfts);\n }\n }, [propNfts]);\n\n const isDark = theme === 'dark';\n\n const gridColumns = {\n 2: 'repeat(2, 1fr)',\n 3: 'repeat(3, 1fr)',\n 4: 'repeat(4, 1fr)',\n };\n\n if (isLoading) {\n return (\n <div className={className} style={{ ...style, textAlign: 'center', padding: '40px', color: isDark ? '#9ca3af' : '#6b7280' }}>\n Loading NFTs...\n </div>\n );\n }\n\n if (error) {\n return (\n <div className={className} style={{ ...style, textAlign: 'center', padding: '40px', color: '#ef4444' }}>\n {error}\n </div>\n );\n }\n\n if (nfts.length === 0) {\n return (\n <div className={className} style={{ ...style, textAlign: 'center', padding: '40px', color: isDark ? '#9ca3af' : '#6b7280' }}>\n No NFTs found\n </div>\n );\n }\n\n return (\n <div className={className} style={style}>\n <div style={{ ...galleryStyle, gridTemplateColumns: gridColumns[columns] }}>\n {nfts.map((nft) => (\n <div\n key={`${nft.contractAddress}-${nft.tokenId}`}\n style={{\n ...cardStyle,\n backgroundColor: isDark ? '#1f2937' : '#ffffff',\n border: `1px solid ${isDark ? '#374151' : '#e5e7eb'}`,\n }}\n onClick={() => {\n setSelectedNFT(nft);\n onNFTClick?.(nft);\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.transform = 'translateY(-4px)';\n e.currentTarget.style.boxShadow = '0 10px 40px rgba(0,0,0,0.3)';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.transform = 'translateY(0)';\n e.currentTarget.style.boxShadow = 'none';\n }}\n >\n <div style={{ ...imageContainerStyle, backgroundColor: isDark ? '#374151' : '#f3f4f6' }}>\n {nft.image ? (\n <MediaRenderer\n client={client}\n src={nft.image}\n style={{ width: '100%', height: '100%', objectFit: 'cover' }}\n />\n ) : (\n <span style={{ color: isDark ? '#6b7280' : '#9ca3af', fontSize: '14px' }}>No Image</span>\n )}\n </div>\n <div style={infoStyle}>\n <h4 style={{ margin: '0 0 4px 0', color: isDark ? '#ffffff' : '#111827', fontSize: '14px', fontWeight: 600 }}>\n {nft.name || `#${nft.tokenId}`}\n </h4>\n {showCollection && nft.collection && (\n <p style={{ margin: 0, color: isDark ? '#9ca3af' : '#6b7280', fontSize: '12px' }}>\n {nft.collection.name}\n </p>\n )}\n {showChain && (\n <span style={{\n display: 'inline-block',\n marginTop: '8px',\n padding: '2px 8px',\n backgroundColor: isDark ? '#374151' : '#e5e7eb',\n borderRadius: '4px',\n fontSize: '10px',\n color: isDark ? '#9ca3af' : '#6b7280',\n }}>\n {nft.chain}\n </span>\n )}\n </div>\n </div>\n ))}\n </div>\n\n {/* NFT Detail Modal */}\n {selectedNFT && (\n <div\n style={{\n position: 'fixed',\n inset: 0,\n backgroundColor: 'rgba(0,0,0,0.8)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 1000,\n }}\n onClick={() => setSelectedNFT(null)}\n >\n <div\n style={{\n backgroundColor: isDark ? '#1f2937' : '#ffffff',\n borderRadius: '16px',\n padding: '24px',\n maxWidth: '500px',\n width: '90%',\n maxHeight: '90vh',\n overflow: 'auto',\n }}\n onClick={(e) => e.stopPropagation()}\n >\n {selectedNFT.image && (\n <MediaRenderer\n client={client}\n src={selectedNFT.image}\n style={{ width: '100%', borderRadius: '12px', marginBottom: '16px' }}\n />\n )}\n <h3 style={{ margin: '0 0 8px 0', color: isDark ? '#ffffff' : '#111827' }}>\n {selectedNFT.name || `#${selectedNFT.tokenId}`}\n </h3>\n {selectedNFT.description && (\n <p style={{ margin: '0 0 16px 0', color: isDark ? '#9ca3af' : '#6b7280', fontSize: '14px' }}>\n {selectedNFT.description}\n </p>\n )}\n {selectedNFT.attributes && selectedNFT.attributes.length > 0 && (\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: '8px', marginBottom: '16px' }}>\n {selectedNFT.attributes.map((attr, i) => (\n <div\n key={i}\n style={{\n padding: '8px 12px',\n backgroundColor: isDark ? '#374151' : '#f3f4f6',\n borderRadius: '8px',\n }}\n >\n <div style={{ fontSize: '10px', color: isDark ? '#9ca3af' : '#6b7280' }}>{attr.trait_type}</div>\n <div style={{ fontSize: '14px', color: isDark ? '#ffffff' : '#111827', fontWeight: 500 }}>{attr.value}</div>\n </div>\n ))}\n </div>\n )}\n <div style={{ display: 'flex', gap: '12px' }}>\n <button\n onClick={() => setSelectedNFT(null)}\n style={{\n flex: 1,\n padding: '12px',\n backgroundColor: 'transparent',\n border: `1px solid ${isDark ? '#374151' : '#e5e7eb'}`,\n borderRadius: '8px',\n color: isDark ? '#9ca3af' : '#6b7280',\n cursor: 'pointer',\n }}\n >\n Close\n </button>\n {onTransfer && (\n <button\n onClick={() => {\n onTransfer(selectedNFT);\n setSelectedNFT(null);\n }}\n style={{\n flex: 1,\n padding: '12px',\n backgroundColor: '#10b981',\n border: 'none',\n borderRadius: '8px',\n color: '#ffffff',\n fontWeight: 600,\n cursor: 'pointer',\n }}\n >\n Transfer\n </button>\n )}\n </div>\n </div>\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport React, { useState, useEffect } from 'react';\nimport { useActiveAccount } from 'thirdweb/react';\nimport type { Chain } from 'thirdweb/chains';\nimport { base, ethereum, polygon, arbitrum } from 'thirdweb/chains';\n\n// ===== Types =====\n\nexport interface OneReceiveWidgetProps {\n // Display options\n chains?: Chain[];\n defaultChain?: Chain;\n showChainSelector?: boolean;\n showCopyButton?: boolean;\n showQRCode?: boolean;\n\n // Appearance\n theme?: 'light' | 'dark';\n className?: string;\n style?: React.CSSProperties;\n qrSize?: number;\n\n // Callbacks\n onCopy?: (address: string) => void;\n onChainChange?: (chain: Chain) => void;\n}\n\n// ===== QR Code Generator (Simple SVG-based) =====\n\nfunction generateQRMatrix(data: string): boolean[][] {\n // Simple QR-like pattern generator (for demo - in production use a proper QR library)\n const size = 21;\n const matrix: boolean[][] = Array(size).fill(null).map(() => Array(size).fill(false));\n\n // Add finder patterns\n const addFinderPattern = (x: number, y: number) => {\n for (let i = 0; i < 7; i++) {\n for (let j = 0; j < 7; j++) {\n if (i === 0 || i === 6 || j === 0 || j === 6 || (i >= 2 && i <= 4 && j >= 2 && j <= 4)) {\n matrix[y + i][x + j] = true;\n }\n }\n }\n };\n\n addFinderPattern(0, 0);\n addFinderPattern(14, 0);\n addFinderPattern(0, 14);\n\n // Add data pattern based on address hash\n let hash = 0;\n for (let i = 0; i < data.length; i++) {\n hash = ((hash << 5) - hash) + data.charCodeAt(i);\n hash = hash & hash;\n }\n\n for (let i = 8; i < 13; i++) {\n for (let j = 8; j < 13; j++) {\n matrix[i][j] = ((hash >> ((i * 21 + j) % 32)) & 1) === 1;\n }\n }\n\n return matrix;\n}\n\nfunction QRCode({ data, size = 200, isDark = true }: { data: string; size?: number; isDark?: boolean }) {\n const matrix = generateQRMatrix(data);\n const cellSize = size / matrix.length;\n\n return (\n <svg width={size} height={size} viewBox={`0 0 ${size} ${size}`}>\n <rect width={size} height={size} fill={isDark ? '#ffffff' : '#ffffff'} rx=\"8\" />\n {matrix.map((row, y) =>\n row.map((cell, x) =>\n cell ? (\n <rect\n key={`${x}-${y}`}\n x={x * cellSize}\n y={y * cellSize}\n width={cellSize}\n height={cellSize}\n fill={isDark ? '#111827' : '#111827'}\n />\n ) : null\n )\n )}\n </svg>\n );\n}\n\n// ===== Styles =====\n\nconst containerStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '20px',\n padding: '24px',\n backgroundColor: '#1f2937',\n borderRadius: '16px',\n border: '1px solid #374151',\n};\n\nconst addressStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '12px 16px',\n backgroundColor: '#374151',\n borderRadius: '12px',\n maxWidth: '100%',\n};\n\nconst buttonStyle: React.CSSProperties = {\n padding: '8px 16px',\n backgroundColor: '#10b981',\n color: '#ffffff',\n border: 'none',\n borderRadius: '8px',\n cursor: 'pointer',\n fontSize: '14px',\n fontWeight: 500,\n};\n\n// ===== Chain Info =====\n\nconst CHAIN_INFO: Record<number, { name: string; icon: string }> = {\n 1: { name: 'Ethereum', icon: '⟠' },\n 8453: { name: 'Base', icon: '🔵' },\n 137: { name: 'Polygon', icon: '🟣' },\n 42161: { name: 'Arbitrum', icon: '🔷' },\n 10: { name: 'Optimism', icon: '🔴' },\n};\n\n// ===== Component =====\n\nexport function OneReceiveWidget({\n chains = [base, ethereum, polygon, arbitrum],\n defaultChain = base,\n showChainSelector = true,\n showCopyButton = true,\n showQRCode = true,\n theme = 'dark',\n className,\n style,\n qrSize = 200,\n onCopy,\n onChainChange,\n}: OneReceiveWidgetProps) {\n const account = useActiveAccount();\n const [selectedChain, setSelectedChain] = useState<Chain>(defaultChain);\n const [copied, setCopied] = useState(false);\n\n const address = account?.address || '';\n const isDark = theme === 'dark';\n\n const handleCopy = async () => {\n if (!address) return;\n\n try {\n await navigator.clipboard.writeText(address);\n setCopied(true);\n onCopy?.(address);\n setTimeout(() => setCopied(false), 2000);\n } catch (err) {\n console.error('Failed to copy:', err);\n }\n };\n\n const handleChainChange = (chain: Chain) => {\n setSelectedChain(chain);\n onChainChange?.(chain);\n };\n\n const shortenAddress = (addr: string) => {\n if (!addr) return '';\n return `${addr.slice(0, 6)}...${addr.slice(-4)}`;\n };\n\n if (!account) {\n return (\n <div className={className} style={{ ...style, textAlign: 'center', padding: '24px', color: isDark ? '#9ca3af' : '#6b7280' }}>\n Connect your wallet to receive funds\n </div>\n );\n }\n\n return (\n <div\n className={className}\n style={{\n ...containerStyle,\n backgroundColor: isDark ? '#1f2937' : '#ffffff',\n border: `1px solid ${isDark ? '#374151' : '#e5e7eb'}`,\n ...style,\n }}\n >\n <h3 style={{ margin: 0, color: isDark ? '#ffffff' : '#111827', fontSize: '18px', fontWeight: 600 }}>\n Receive\n </h3>\n\n {/* Chain Selector */}\n {showChainSelector && chains.length > 1 && (\n <div style={{ display: 'flex', gap: '8px', flexWrap: 'wrap', justifyContent: 'center' }}>\n {chains.map(chain => (\n <button\n key={chain.id}\n onClick={() => handleChainChange(chain)}\n style={{\n padding: '8px 12px',\n backgroundColor: selectedChain.id === chain.id ? '#10b981' : (isDark ? '#374151' : '#e5e7eb'),\n border: 'none',\n borderRadius: '8px',\n color: selectedChain.id === chain.id ? '#ffffff' : (isDark ? '#9ca3af' : '#6b7280'),\n cursor: 'pointer',\n fontSize: '12px',\n }}\n >\n {CHAIN_INFO[chain.id]?.icon} {CHAIN_INFO[chain.id]?.name}\n </button>\n ))}\n </div>\n )}\n\n {/* QR Code */}\n {showQRCode && (\n <div style={{ padding: '16px', backgroundColor: '#ffffff', borderRadius: '12px' }}>\n <QRCode data={address} size={qrSize} isDark={isDark} />\n </div>\n )}\n\n {/* Address Display */}\n <div style={{ ...addressStyle, backgroundColor: isDark ? '#374151' : '#f3f4f6', width: '100%' }}>\n <span style={{\n color: isDark ? '#ffffff' : '#111827',\n fontSize: '14px',\n fontFamily: 'monospace',\n flex: 1,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}>\n {address}\n </span>\n </div>\n\n {/* Copy Button */}\n {showCopyButton && (\n <button\n onClick={handleCopy}\n style={{\n ...buttonStyle,\n backgroundColor: copied ? '#059669' : '#10b981',\n width: '100%',\n }}\n >\n {copied ? '✓ Copied!' : 'Copy Address'}\n </button>\n )}\n\n {/* Warning */}\n <p style={{\n margin: 0,\n color: isDark ? '#9ca3af' : '#6b7280',\n fontSize: '12px',\n textAlign: 'center',\n }}>\n Only send {CHAIN_INFO[selectedChain.id]?.name || 'compatible'} assets to this address\n </p>\n </div>\n );\n}\n","import { useState, useEffect, useCallback, useRef } from 'react';\nimport { createOneEngineClient, type EngineWalletBalance } from '../services/engine';\nimport type { Token } from '../types';\n\ninterface UseWalletBalanceOptions {\n chains?: number[];\n autoRefresh?: boolean;\n refreshInterval?: number; // in milliseconds\n engineUrl?: string;\n clientId?: string;\n}\n\ninterface UseWalletBalanceReturn {\n balance: EngineWalletBalance | null;\n tokens: Token[];\n totalUsd: number;\n change24h: number;\n changePercent24h: number;\n isLoading: boolean;\n error: string | null;\n refetch: () => Promise<void>;\n}\n\n/**\n * Hook for fetching wallet balance via ONE Engine\n *\n * Note: If using OneProvider, prefer useOneWallet() instead for better integration.\n * This hook is for standalone usage outside of OneProvider.\n */\nexport function useWalletBalance(\n walletAddress: string | null,\n options: UseWalletBalanceOptions = {}\n): UseWalletBalanceReturn {\n const {\n chains,\n autoRefresh = false,\n refreshInterval = 60000, // 1 minute\n engineUrl,\n clientId,\n } = options;\n\n const [balance, setBalance] = useState<EngineWalletBalance | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n // Create engine client once\n const engineRef = useRef(createOneEngineClient({\n baseUrl: engineUrl,\n clientId: clientId,\n }));\n\n const fetchBalance = useCallback(async () => {\n if (!walletAddress) {\n setBalance(null);\n return;\n }\n\n setIsLoading(true);\n setError(null);\n\n try {\n const result = await engineRef.current.getWalletBalance(walletAddress, chains);\n if (result.success && result.data) {\n setBalance(result.data);\n } else {\n setError(result.error?.message || 'Failed to fetch balance');\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch balance');\n } finally {\n setIsLoading(false);\n }\n }, [walletAddress, chains]);\n\n // Initial fetch\n useEffect(() => {\n fetchBalance();\n }, [fetchBalance]);\n\n // Auto-refresh\n useEffect(() => {\n if (!autoRefresh || !walletAddress) return;\n\n const interval = setInterval(fetchBalance, refreshInterval);\n return () => clearInterval(interval);\n }, [autoRefresh, refreshInterval, fetchBalance, walletAddress]);\n\n return {\n balance,\n tokens: balance?.tokens || [],\n totalUsd: balance?.totalUsd || 0,\n change24h: balance?.change24h || 0,\n changePercent24h: balance?.changePercent24h || 0,\n isLoading,\n error,\n refetch: fetchBalance,\n };\n}\n","import { useState, useEffect, useCallback, useRef } from 'react';\nimport { createOneEngineClient } from '../services/engine';\nimport type { TokenPrice } from '../types';\n\ninterface UseTokenPriceOptions {\n autoRefresh?: boolean;\n refreshInterval?: number;\n engineUrl?: string;\n clientId?: string;\n}\n\ninterface UseTokenPriceReturn {\n price: TokenPrice | null;\n isLoading: boolean;\n error: string | null;\n refetch: () => Promise<void>;\n}\n\n/**\n * Hook for fetching token price via ONE Engine\n *\n * Note: If using OneProvider, prefer useOneEngine().getTokenPrices() instead.\n * This hook is for standalone usage outside of OneProvider.\n */\nexport function useTokenPrice(\n symbol: string,\n options: UseTokenPriceOptions = {}\n): UseTokenPriceReturn {\n const { autoRefresh = false, refreshInterval = 30000, engineUrl, clientId } = options;\n\n const [price, setPrice] = useState<TokenPrice | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const engineRef = useRef(createOneEngineClient({\n baseUrl: engineUrl,\n clientId: clientId,\n }));\n\n const fetchPrice = useCallback(async () => {\n if (!symbol) return;\n\n setIsLoading(true);\n setError(null);\n\n try {\n const result = await engineRef.current.getTokenPrices([symbol]);\n if (result.success && result.data && result.data[symbol]) {\n const priceData = result.data[symbol];\n setPrice({\n symbol,\n price: priceData.price,\n change24h: priceData.change24h,\n changePercent24h: priceData.change24h, // Same as change24h for percentage\n marketCap: priceData.marketCap,\n volume24h: 0, // Not provided by engine\n updatedAt: new Date().toISOString(),\n });\n } else {\n setError(result.error?.message || 'Failed to fetch price');\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch price');\n } finally {\n setIsLoading(false);\n }\n }, [symbol]);\n\n useEffect(() => {\n fetchPrice();\n }, [fetchPrice]);\n\n useEffect(() => {\n if (!autoRefresh) return;\n\n const interval = setInterval(fetchPrice, refreshInterval);\n return () => clearInterval(interval);\n }, [autoRefresh, refreshInterval, fetchPrice]);\n\n return {\n price,\n isLoading,\n error,\n refetch: fetchPrice,\n };\n}\n\n// Hook for multiple token prices\ninterface UseTokenPricesReturn {\n prices: Record<string, TokenPrice>;\n isLoading: boolean;\n error: string | null;\n refetch: () => Promise<void>;\n}\n\nexport function useTokenPrices(\n symbols: string[],\n options: UseTokenPriceOptions = {}\n): UseTokenPricesReturn {\n const { autoRefresh = false, refreshInterval = 30000, engineUrl, clientId } = options;\n\n const [prices, setPrices] = useState<Record<string, TokenPrice>>({});\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const engineRef = useRef(createOneEngineClient({\n baseUrl: engineUrl,\n clientId: clientId,\n }));\n\n const fetchPrices = useCallback(async () => {\n if (symbols.length === 0) return;\n\n setIsLoading(true);\n setError(null);\n\n try {\n const result = await engineRef.current.getTokenPrices(symbols);\n if (result.success && result.data) {\n const priceMap: Record<string, TokenPrice> = {};\n for (const sym of symbols) {\n if (result.data[sym]) {\n priceMap[sym] = {\n symbol: sym,\n price: result.data[sym].price,\n change24h: result.data[sym].change24h,\n changePercent24h: result.data[sym].change24h,\n marketCap: result.data[sym].marketCap,\n volume24h: 0,\n updatedAt: new Date().toISOString(),\n };\n }\n }\n setPrices(priceMap);\n } else {\n setError(result.error?.message || 'Failed to fetch prices');\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch prices');\n } finally {\n setIsLoading(false);\n }\n }, [symbols]);\n\n useEffect(() => {\n fetchPrices();\n }, [fetchPrices]);\n\n useEffect(() => {\n if (!autoRefresh) return;\n\n const interval = setInterval(fetchPrices, refreshInterval);\n return () => clearInterval(interval);\n }, [autoRefresh, refreshInterval, fetchPrices]);\n\n return {\n prices,\n isLoading,\n error,\n refetch: fetchPrices,\n };\n}\n","// ===== Address Utilities =====\nexport function shortenAddress(address: string, chars = 4): string {\n if (!address) return '';\n return `${address.slice(0, chars + 2)}...${address.slice(-chars)}`;\n}\n\nexport function isValidAddress(address: string): boolean {\n return /^0x[a-fA-F0-9]{40}$/.test(address);\n}\n\nexport function checksumAddress(address: string): string {\n // Basic checksum - for proper checksum use ethers/viem\n return address.toLowerCase();\n}\n\n// ===== Number Formatting =====\nexport function formatNumber(\n value: number,\n options: {\n decimals?: number;\n compact?: boolean;\n currency?: string;\n locale?: string;\n } = {}\n): string {\n const { decimals = 2, compact = false, currency, locale = 'en-US' } = options;\n\n if (currency) {\n return new Intl.NumberFormat(locale, {\n style: 'currency',\n currency,\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n notation: compact ? 'compact' : 'standard',\n }).format(value);\n }\n\n return new Intl.NumberFormat(locale, {\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n notation: compact ? 'compact' : 'standard',\n }).format(value);\n}\n\nexport function formatUSD(value: number, compact = false): string {\n return formatNumber(value, { currency: 'USD', compact });\n}\n\nexport function formatPercent(value: number, decimals = 2): string {\n const sign = value >= 0 ? '+' : '';\n return `${sign}${value.toFixed(decimals)}%`;\n}\n\nexport function formatTokenAmount(amount: number, decimals = 6): string {\n if (amount === 0) return '0';\n if (amount < 0.000001) return '<0.000001';\n if (amount < 1) return amount.toFixed(decimals);\n if (amount < 1000) return amount.toFixed(4);\n if (amount < 1000000) return formatNumber(amount, { decimals: 2 });\n return formatNumber(amount, { decimals: 2, compact: true });\n}\n\n// ===== Date & Time Utilities =====\nexport function formatDate(\n date: string | Date,\n options: Intl.DateTimeFormatOptions = {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n }\n): string {\n const d = typeof date === 'string' ? new Date(date) : date;\n return d.toLocaleDateString('en-US', options);\n}\n\nexport function formatDateTime(date: string | Date): string {\n const d = typeof date === 'string' ? new Date(date) : date;\n return d.toLocaleString('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n });\n}\n\nexport function formatRelativeTime(date: string | Date): string {\n const d = typeof date === 'string' ? new Date(date) : date;\n const now = new Date();\n const diffMs = now.getTime() - d.getTime();\n const diffSec = Math.floor(diffMs / 1000);\n const diffMin = Math.floor(diffSec / 60);\n const diffHour = Math.floor(diffMin / 60);\n const diffDay = Math.floor(diffHour / 24);\n\n if (diffSec < 60) return 'just now';\n if (diffMin < 60) return `${diffMin}m ago`;\n if (diffHour < 24) return `${diffHour}h ago`;\n if (diffDay < 7) return `${diffDay}d ago`;\n\n return formatDate(d);\n}\n\n// ===== Validation Utilities =====\nexport function isValidEmail(email: string): boolean {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(email);\n}\n\nexport function isValidPhone(phone: string): boolean {\n const phoneRegex = /^\\+?[1-9]\\d{1,14}$/;\n return phoneRegex.test(phone.replace(/[\\s-()]/g, ''));\n}\n\n// ===== String Utilities =====\nexport function capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();\n}\n\nexport function truncate(str: string, length: number): string {\n if (str.length <= length) return str;\n return `${str.slice(0, length)}...`;\n}\n\nexport function slugify(str: string): string {\n return str\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/(^-|-$)/g, '');\n}\n\n// ===== Async Utilities =====\nexport function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport async function retry<T>(\n fn: () => Promise<T>,\n options: { maxAttempts?: number; delay?: number; backoff?: number } = {}\n): Promise<T> {\n const { maxAttempts = 3, delay = 1000, backoff = 2 } = options;\n\n let lastError: Error | undefined;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n\n if (attempt < maxAttempts) {\n await sleep(delay * Math.pow(backoff, attempt - 1));\n }\n }\n }\n\n throw lastError;\n}\n\n// ===== Object Utilities =====\nexport function omit<T extends Record<string, any>, K extends keyof T>(\n obj: T,\n keys: K[]\n): Omit<T, K> {\n const result = { ...obj };\n for (const key of keys) {\n delete result[key];\n }\n return result;\n}\n\nexport function pick<T extends Record<string, any>, K extends keyof T>(\n obj: T,\n keys: K[]\n): Pick<T, K> {\n const result = {} as Pick<T, K>;\n for (const key of keys) {\n if (key in obj) {\n result[key] = obj[key];\n }\n }\n return result;\n}\n\n// ===== Error Handling =====\nexport class OneSDKError extends Error {\n code: string;\n details?: any;\n\n constructor(message: string, code: string, details?: any) {\n super(message);\n this.name = 'OneSDKError';\n this.code = code;\n this.details = details;\n }\n}\n\nexport function isOneSDKError(error: unknown): error is OneSDKError {\n return error instanceof OneSDKError;\n}\n"]}