@one_deploy/sdk 1.0.7 → 1.2.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.
- package/README.md +339 -0
- package/dist/ForexPoolDataGenerator--__twRwl.d.mts +76 -0
- package/dist/ForexPoolDataGenerator-eUgwsU_B.d.ts +76 -0
- package/dist/OneForexTradeHistory-TlKxjbFF.d.ts +250 -0
- package/dist/OneForexTradeHistory-iDySMcw0.d.mts +250 -0
- package/dist/components/index.d.mts +539 -0
- package/dist/components/index.d.ts +539 -0
- package/dist/components/index.js +7295 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/index.mjs +7243 -0
- package/dist/components/index.mjs.map +1 -0
- package/dist/config/index.d.mts +1 -0
- package/dist/config/index.d.ts +1 -0
- package/dist/console-BfTMA7ah.d.mts +504 -0
- package/dist/console-BfTMA7ah.d.ts +504 -0
- package/dist/hooks/index.d.mts +323 -1
- package/dist/hooks/index.d.ts +323 -1
- package/dist/hooks/index.js +3223 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/index.mjs +3204 -1
- package/dist/hooks/index.mjs.map +1 -1
- package/dist/index.d.mts +18 -352
- package/dist/index.d.ts +18 -352
- package/dist/index.js +8646 -574
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +8449 -432
- package/dist/index.mjs.map +1 -1
- package/dist/providers/index.d.mts +31 -31
- package/dist/providers/index.d.ts +31 -31
- package/dist/providers/index.js +140 -153
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/index.mjs +100 -109
- package/dist/providers/index.mjs.map +1 -1
- package/dist/react-native.d.mts +8 -144
- package/dist/react-native.d.ts +8 -144
- package/dist/react-native.js +2640 -689
- package/dist/react-native.js.map +1 -1
- package/dist/react-native.mjs +2610 -691
- package/dist/react-native.mjs.map +1 -1
- package/dist/services/index.d.mts +85 -4
- package/dist/services/index.d.ts +85 -4
- package/dist/services/index.js +1621 -0
- package/dist/services/index.js.map +1 -1
- package/dist/services/index.mjs +1619 -1
- package/dist/services/index.mjs.map +1 -1
- package/dist/types/index.d.mts +203 -1
- package/dist/types/index.d.ts +203 -1
- package/dist/types/index.js +275 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/index.mjs +251 -0
- package/dist/types/index.mjs.map +1 -1
- package/dist/useForexTrading-BleeSor8.d.mts +80 -0
- package/dist/useForexTrading-ZgW_G40Q.d.ts +80 -0
- package/package.json +9 -2
- package/src/components/OneConnectButton.tsx +24 -1
- package/src/components/OneNFTGallery.tsx +13 -7
- package/src/components/OneOfframpWidget.tsx +4 -3
- package/src/components/OnePayWidget.tsx +10 -1
- package/src/components/OneSendWidget.tsx +3 -3
- package/src/components/OneSwapWidget.tsx +4 -4
- package/src/components/OneTransactionButton.tsx +28 -3
- package/src/components/OneWalletBalance.tsx +1 -1
- package/src/components/ai/OneChainSelector.tsx +63 -336
- package/src/components/ai/OneForexCapitalSplit.tsx +112 -0
- package/src/components/ai/OneForexConsoleView.tsx +90 -0
- package/src/components/ai/OneForexPairSelector.tsx +101 -0
- package/src/components/ai/OneForexPoolCard.tsx +105 -0
- package/src/components/ai/OneForexTradeHistory.tsx +107 -0
- package/src/components/ai/OnePairSelector.tsx +77 -434
- package/src/components/ai/console/OneAIQuantConsole.tsx +423 -0
- package/src/components/ai/console/OneAgentCard.tsx +383 -0
- package/src/components/ai/console/OneAgentConsole.tsx +469 -0
- package/src/components/ai/console/OneDecisionTimeline.tsx +433 -0
- package/src/components/ai/console/OneMetricsDashboard.tsx +493 -0
- package/src/components/ai/console/OnePositionCard.tsx +406 -0
- package/src/components/ai/console/OnePositionDetail.tsx +600 -0
- package/src/components/ai/console/OneRiskIndicator.tsx +464 -0
- package/src/components/ai/console/OneTradingConsole.tsx +660 -0
- package/src/components/ai/console/index.ts +17 -0
- package/src/components/ai/index.ts +10 -0
- package/src/hooks/index.ts +46 -0
- package/src/hooks/useAIDecisions.ts +280 -0
- package/src/hooks/useAIPositions.ts +349 -0
- package/src/hooks/useAIQuantConsole.ts +283 -0
- package/src/hooks/useAIRiskStatus.ts +276 -0
- package/src/hooks/useAITrading.ts +190 -0
- package/src/hooks/useBotSimulation.ts +201 -0
- package/src/hooks/useForexTrading.ts +430 -0
- package/src/hooks/useTradingConsole.ts +243 -0
- package/src/index.ts +123 -5
- package/src/providers/OneProvider.tsx +181 -5
- package/src/providers/index.ts +22 -8
- package/src/react-native.ts +41 -0
- package/src/services/forex/BotSimulationEngine.ts +968 -0
- package/src/services/forex/ForexPoolDataGenerator.ts +542 -0
- package/src/services/forex/ForexSimulationEngine.ts +482 -0
- package/src/services/forex/index.ts +21 -0
- package/src/services/index.ts +16 -0
- package/src/types/aiTrading.ts +151 -0
- package/src/types/console.ts +380 -0
- package/src/types/forex.ts +282 -0
- package/src/types/index.ts +106 -0
- package/dist/price-CgqXPnT3.d.ts +0 -13
- package/dist/price-ClbLHHjv.d.mts +0 -13
- package/dist/supabase-BT0c7q9e.d.mts +0 -82
- package/dist/supabase-BT0c7q9e.d.ts +0 -82
package/dist/index.mjs.map
CHANGED
|
@@ -1 +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/hooks/useAITrading.ts","../src/utils/index.ts"],"names":["config","isInitialized","React","DEFAULT_ENGINE_URL","useState","useEffect","useMemo","jsx","BaseThirdwebProvider","base","inAppWallet","ethereum","polygon","arbitrum","buttonStyle","isValidAddress","useCallback","prepareTransaction","error","containerStyle","inputStyle","useActiveAccount","jsxs","DEFAULT_FIATS","DEFAULT_CRYPTOS","DEFAULT_NETWORKS","NETWORK_DISPLAY_NAMES","CRYPTO_RATES","headerStyle","selectStyle","rowStyle","quoteBoxStyle","CHAIN_CONFIGS","optimism","labelStyle","useSendTransaction","CHAIN_INFO","useWalletBalance","useRef","formatUSD"],"mappings":"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","file":"index.mjs","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\n// Default configuration values\nconst DEFAULT_ENGINE_URL = 'https://api.one23.io';\nconst DEFAULT_CLIENT_ID = 'one_pk_e8f647bfa643fdcfaa3a23f760488e49be09f929296eed4a6c399d437d907f60';\n\nlet config: OneConfig | null = null;\n\nexport function initOneSDK(options: Partial<OneConfig>): void {\n // Use defaults if not provided\n const engineUrl = options.oneEngineUrl || DEFAULT_ENGINE_URL;\n const clientId = options.oneClientId || DEFAULT_CLIENT_ID;\n\n config = {\n ...options,\n oneEngineUrl: engineUrl,\n oneClientId: clientId,\n } as OneConfig;\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 || DEFAULT_ENGINE_URL;\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 Agent Configuration ==========\n\n /**\n * Get all AI agent configurations\n * This returns the full agent setup including tiers, cycles, and trading parameters\n */\n async getAgentConfigs(options?: {\n includeInactive?: boolean;\n agentId?: string;\n }): Promise<ApiResponse<{\n agents?: Array<{\n id: string;\n name: string;\n name_zh: string;\n description: string;\n description_zh: string;\n category: string;\n risk_level: number;\n icon: string;\n color: string;\n tiers: Array<{ tier: number; amount: number; label: string; label_zh: string }>;\n supported_cycles: number[];\n default_cycle: number;\n supported_pairs: string[];\n supported_chains: string[];\n is_active: boolean;\n preview: {\n tier: { tier: number; amount: number; label: string };\n cycle: number;\n dailyLots: number;\n stabilityScore: number;\n roiRange: { min: number; max: number; userMin: number; userMax: number };\n shareRate: number;\n profitEstimate: { monthlyMin: number; monthlyMax: number; cycleMin: number; cycleMax: number };\n };\n }>;\n agent?: any;\n shareRates?: Record<number, number>;\n }>> {\n const params = new URLSearchParams();\n if (options?.includeInactive) params.set('includeInactive', 'true');\n if (options?.agentId) params.set('agentId', options.agentId);\n const query = params.toString();\n return this.request(`/api/v1/agents${query ? `?${query}` : ''}`, { method: 'GET' });\n }\n\n /**\n * Calculate subscription parameters for an agent\n */\n async calculateAgentParams(params: {\n agentId: string;\n amount: number;\n cycleDays: number;\n }): Promise<ApiResponse<{\n dailyLots: number;\n effectiveCapital: number;\n stabilityScore: number;\n roiRange: { min: number; max: number; userMin: number; userMax: number };\n shareRate: number;\n profitEstimate: { monthlyMin: number; monthlyMax: number; cycleMin: number; cycleMax: number };\n }>> {\n return this.request('/api/v1/agents/calculate', {\n method: 'POST',\n body: JSON.stringify(params),\n });\n }\n\n /**\n * Get supported trading pairs from agents\n */\n async getTradingPairs(): Promise<ApiResponse<{\n pairs: string[];\n byAgent: Record<string, string[]>;\n }>> {\n const result = await this.getAgentConfigs();\n if (result.success && result.data?.agents) {\n const allPairs = new Set<string>();\n const byAgent: Record<string, string[]> = {};\n for (const agent of result.data.agents) {\n byAgent[agent.id] = agent.supported_pairs;\n agent.supported_pairs.forEach(p => allPairs.add(p));\n }\n return { success: true, data: { pairs: Array.from(allPairs), byAgent } };\n }\n return { success: false, error: result.error };\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 // ========== Project Management ==========\n\n /**\n * Get user's projects\n */\n async getProjects(options?: {\n isActive?: boolean;\n }): Promise<ApiResponse<{ projects: AdminProject[]; 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/projects${query ? `?${query}` : ''}`, { method: 'GET' });\n }\n\n /**\n * Create a new project for ecosystem partners\n */\n async createProject(params: {\n name: string;\n slug: string;\n settings?: Record<string, unknown>;\n }): Promise<ApiResponse<{ project: AdminProject }>> {\n return this.request('/api/v1/projects', {\n method: 'POST',\n body: JSON.stringify(params),\n });\n }\n\n /**\n * Get project details\n */\n async getProject(projectId: string): Promise<ApiResponse<{ project: AdminProject }>> {\n return this.request(`/api/v1/projects/${projectId}`, { method: 'GET' });\n }\n\n /**\n * Update project settings\n */\n async updateProject(projectId: string, updates: {\n name?: string;\n isActive?: boolean;\n settings?: Record<string, unknown>;\n }): Promise<ApiResponse<{ project: AdminProject }>> {\n return this.request(`/api/v1/projects/${projectId}`, {\n method: 'PATCH',\n body: JSON.stringify(updates),\n });\n }\n\n /**\n * Get project features status\n */\n async getProjectFeatures(projectId: string): Promise<ApiResponse<{\n features: Record<string, {\n enabled: boolean;\n name: string;\n description: string;\n description_zh: string;\n }>;\n availableFeatures: string[];\n }>> {\n return this.request(`/api/v1/projects/${projectId}/features`, { method: 'GET' });\n }\n\n /**\n * Enable/disable features for a project\n */\n async updateProjectFeatures(projectId: string, features: {\n wallet?: boolean;\n swap?: boolean;\n contracts?: boolean;\n fiat?: boolean;\n payments?: boolean;\n quant?: boolean;\n ai?: boolean;\n x402?: boolean;\n }): Promise<ApiResponse<{ project: AdminProject; message: string }>> {\n return this.request(`/api/v1/projects/${projectId}/features`, {\n method: 'PATCH',\n body: JSON.stringify(features),\n });\n }\n\n /**\n * Regenerate project API key\n */\n async regenerateProjectApiKey(projectId: string): Promise<ApiResponse<{ apiKey: string }>> {\n return this.request(`/api/v1/projects/${projectId}/api-key`, { method: 'POST' });\n }\n\n /**\n * Delete project\n */\n async deleteProject(projectId: string): Promise<ApiResponse<{ deleted: boolean }>> {\n return this.request(`/api/v1/projects/${projectId}`, { method: 'DELETE' });\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 synchronously before creating engine client\n // This must happen before useMemo so getConfig() works in the constructor\n useMemo(() => {\n initOneSDK(config);\n }, [config]);\n\n const [isInitialized, setIsInitialized] = useState(true);\n const engine = useMemo(() => createOneEngineClient({\n baseUrl: config.oneEngineUrl,\n clientId: config.oneClientId,\n secretKey: config.oneSecretKey,\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: '0x6B175474E89094C44Da98b954EedeAC495271d0F', 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","/**\n * AI Trading Hooks for ONE SDK\n *\n * React hooks for AI quantitative trading features.\n * These hooks provide easy access to AI strategies, orders, and portfolio management.\n */\n\nimport { useState, useEffect, useCallback, useMemo } from 'react';\nimport { createOneEngineClient, OneEngineClient } from '../services/engine';\nimport type {\n AIStrategy,\n AIOrder,\n AIOrderStatus,\n AIPortfolioSummary,\n AITradeAllocation,\n AINavSnapshot,\n AIMarketData,\n CreateAIOrderRequest,\n StrategyCategory,\n ApiResponse,\n} from '../types';\n\n// Singleton client instance\nlet clientInstance: OneEngineClient | null = null;\n\nfunction getClient(): OneEngineClient {\n if (!clientInstance) {\n clientInstance = createOneEngineClient();\n }\n return clientInstance;\n}\n\n/**\n * Set the access token for authenticated requests\n */\nexport function setAITradingAccessToken(token: string) {\n getClient().setAccessToken(token);\n}\n\n/**\n * Clear the access token\n */\nexport function clearAITradingAccessToken() {\n getClient().clearAccessToken();\n}\n\n// ============================================\n// AI Strategies Hooks\n// ============================================\n\nexport interface UseAIStrategiesOptions {\n category?: StrategyCategory;\n riskLevel?: number;\n minTvl?: number;\n isActive?: boolean;\n autoRefresh?: boolean;\n refreshInterval?: number;\n}\n\nexport interface UseAIStrategiesResult {\n strategies: AIStrategy[];\n isLoading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\n/**\n * Hook to fetch and manage AI trading strategies\n */\nexport function useAIStrategies(options: UseAIStrategiesOptions = {}): UseAIStrategiesResult {\n const [strategies, setStrategies] = useState<AIStrategy[]>([]);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n const { category, riskLevel, minTvl, isActive, autoRefresh = false, refreshInterval = 60000 } = options;\n\n const fetchStrategies = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n try {\n const result = await getClient().getAIStrategies({ category, riskLevel, minTvl, isActive });\n if (result.success && result.data?.strategies) {\n setStrategies(result.data.strategies);\n } else {\n setError(result.error?.message || 'Failed to fetch strategies');\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Unknown error');\n } finally {\n setIsLoading(false);\n }\n }, [category, riskLevel, minTvl, isActive]);\n\n useEffect(() => {\n fetchStrategies();\n }, [fetchStrategies]);\n\n useEffect(() => {\n if (autoRefresh && refreshInterval > 0) {\n const interval = setInterval(fetchStrategies, refreshInterval);\n return () => clearInterval(interval);\n }\n }, [autoRefresh, refreshInterval, fetchStrategies]);\n\n return { strategies, isLoading, error, refresh: fetchStrategies };\n}\n\n/**\n * Hook to fetch a single AI strategy with performance data\n */\nexport interface UseAIStrategyResult {\n strategy: AIStrategy | null;\n performance: AINavSnapshot[];\n marketData: AIMarketData[];\n isLoading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\nexport function useAIStrategy(\n strategyId: string | undefined,\n include: ('performance' | 'market' | 'trades')[] = ['performance', 'market']\n): UseAIStrategyResult {\n const [strategy, setStrategy] = useState<AIStrategy | null>(null);\n const [performance, setPerformance] = useState<AINavSnapshot[]>([]);\n const [marketData, setMarketData] = useState<AIMarketData[]>([]);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n const fetchStrategy = useCallback(async () => {\n if (!strategyId) {\n setIsLoading(false);\n return;\n }\n\n setIsLoading(true);\n setError(null);\n try {\n const result = await getClient().getAIStrategy(strategyId, include);\n if (result.success && result.data) {\n setStrategy(result.data.strategy);\n setPerformance(result.data.performance || []);\n setMarketData(result.data.marketData || []);\n } else {\n setError(result.error?.message || 'Failed to fetch strategy');\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Unknown error');\n } finally {\n setIsLoading(false);\n }\n }, [strategyId, include.join(',')]);\n\n useEffect(() => {\n fetchStrategy();\n }, [fetchStrategy]);\n\n return { strategy, performance, marketData, isLoading, error, refresh: fetchStrategy };\n}\n\n// ============================================\n// AI Orders Hooks\n// ============================================\n\nexport interface UseAIOrdersOptions {\n strategyId?: string;\n status?: AIOrderStatus;\n autoRefresh?: boolean;\n refreshInterval?: number;\n}\n\nexport interface UseAIOrdersResult {\n orders: AIOrder[];\n isLoading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n createOrder: (request: CreateAIOrderRequest) => Promise<ApiResponse<{ order: AIOrder }>>;\n pauseOrder: (orderId: string) => Promise<ApiResponse<{ order: AIOrder; message: string }>>;\n resumeOrder: (orderId: string) => Promise<ApiResponse<{ order: AIOrder; message: string }>>;\n redeemOrder: (orderId: string) => Promise<ApiResponse<any>>;\n}\n\n/**\n * Hook to manage AI trading orders\n */\nexport function useAIOrders(options: UseAIOrdersOptions = {}): UseAIOrdersResult {\n const [orders, setOrders] = useState<AIOrder[]>([]);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n const { strategyId, status, autoRefresh = true, refreshInterval = 30000 } = options;\n\n const fetchOrders = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n try {\n const result = await getClient().getAIOrders({ strategyId, status });\n if (result.success && result.data?.orders) {\n setOrders(result.data.orders);\n } else {\n setError(result.error?.message || 'Failed to fetch orders');\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Unknown error');\n } finally {\n setIsLoading(false);\n }\n }, [strategyId, status]);\n\n useEffect(() => {\n fetchOrders();\n }, [fetchOrders]);\n\n useEffect(() => {\n if (autoRefresh && refreshInterval > 0) {\n const interval = setInterval(fetchOrders, refreshInterval);\n return () => clearInterval(interval);\n }\n }, [autoRefresh, refreshInterval, fetchOrders]);\n\n const createOrder = useCallback(async (request: CreateAIOrderRequest) => {\n const result = await getClient().createAIOrder(request);\n if (result.success) {\n await fetchOrders(); // Refresh orders list\n }\n return result;\n }, [fetchOrders]);\n\n const pauseOrder = useCallback(async (orderId: string) => {\n const result = await getClient().pauseAIOrder(orderId);\n if (result.success) {\n await fetchOrders();\n }\n return result;\n }, [fetchOrders]);\n\n const resumeOrder = useCallback(async (orderId: string) => {\n const result = await getClient().resumeAIOrder(orderId);\n if (result.success) {\n await fetchOrders();\n }\n return result;\n }, [fetchOrders]);\n\n const redeemOrder = useCallback(async (orderId: string) => {\n const result = await getClient().redeemAIOrder(orderId);\n if (result.success) {\n await fetchOrders();\n }\n return result;\n }, [fetchOrders]);\n\n return {\n orders,\n isLoading,\n error,\n refresh: fetchOrders,\n createOrder,\n pauseOrder,\n resumeOrder,\n redeemOrder,\n };\n}\n\n// ============================================\n// AI Portfolio Hooks\n// ============================================\n\nexport interface UseAIPortfolioResult {\n portfolio: AIPortfolioSummary | null;\n allocations: AITradeAllocation[];\n activeOrders: AIOrder[];\n isLoading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\n/**\n * Hook to fetch AI trading portfolio summary\n */\nexport function useAIPortfolio(autoRefresh = true): UseAIPortfolioResult {\n const [portfolio, setPortfolio] = useState<AIPortfolioSummary | null>(null);\n const [allocations, setAllocations] = useState<AITradeAllocation[]>([]);\n const [activeOrders, setActiveOrders] = useState<AIOrder[]>([]);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n const fetchPortfolio = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n try {\n const result = await getClient().getAIPortfolio(['allocations', 'orders']);\n if (result.success && result.data) {\n setPortfolio(result.data.portfolio);\n setAllocations(result.data.allocations || []);\n setActiveOrders(result.data.orders || []);\n } else {\n setError(result.error?.message || 'Failed to fetch portfolio');\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Unknown error');\n } finally {\n setIsLoading(false);\n }\n }, []);\n\n useEffect(() => {\n fetchPortfolio();\n }, [fetchPortfolio]);\n\n useEffect(() => {\n if (autoRefresh) {\n const interval = setInterval(fetchPortfolio, 30000);\n return () => clearInterval(interval);\n }\n }, [autoRefresh, fetchPortfolio]);\n\n return { portfolio, allocations, activeOrders, isLoading, error, refresh: fetchPortfolio };\n}\n\n// ============================================\n// AI Market Data Hook\n// ============================================\n\nexport interface UseAIMarketDataResult {\n prices: Record<string, { price: number; change24h: number }>;\n isLoading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\n/**\n * Hook to fetch real-time market data for AI trading pairs\n */\nexport function useAIMarketData(\n symbols: string[] = ['BTC', 'ETH', 'BNB', 'SOL', 'XRP', 'DOGE', 'ADA', 'AVAX'],\n autoRefresh = true\n): UseAIMarketDataResult {\n const [prices, setPrices] = useState<Record<string, { price: number; change24h: number }>>({});\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n const fetchPrices = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n try {\n const result = await getClient().getTokenPrices(symbols);\n if (result.success && result.data) {\n setPrices(result.data);\n } else {\n setError(result.error?.message || 'Failed to fetch prices');\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Unknown error');\n } finally {\n setIsLoading(false);\n }\n }, [symbols.join(',')]);\n\n useEffect(() => {\n fetchPrices();\n }, [fetchPrices]);\n\n useEffect(() => {\n if (autoRefresh) {\n const interval = setInterval(fetchPrices, 15000); // Update every 15 seconds\n return () => clearInterval(interval);\n }\n }, [autoRefresh, fetchPrices]);\n\n return { prices, isLoading, error, refresh: fetchPrices };\n}\n\n// ============================================\n// Combined AI Trading Hook\n// ============================================\n\nexport interface UseAITradingResult {\n // Strategies\n strategies: AIStrategy[];\n strategiesLoading: boolean;\n\n // Orders\n orders: AIOrder[];\n ordersLoading: boolean;\n\n // Portfolio\n portfolio: AIPortfolioSummary | null;\n portfolioLoading: boolean;\n\n // Market Data\n prices: Record<string, { price: number; change24h: number }>;\n\n // Actions\n createOrder: (request: CreateAIOrderRequest) => Promise<ApiResponse<{ order: AIOrder }>>;\n pauseOrder: (orderId: string) => Promise<ApiResponse<{ order: AIOrder; message: string }>>;\n resumeOrder: (orderId: string) => Promise<ApiResponse<{ order: AIOrder; message: string }>>;\n redeemOrder: (orderId: string) => Promise<ApiResponse<any>>;\n\n // Refresh\n refreshAll: () => Promise<void>;\n\n // Error\n error: string | null;\n}\n\n/**\n * Combined hook for all AI trading functionality\n */\nexport function useAITrading(): UseAITradingResult {\n const strategiesResult = useAIStrategies({ autoRefresh: true });\n const ordersResult = useAIOrders({ autoRefresh: true });\n const portfolioResult = useAIPortfolio(true);\n const marketResult = useAIMarketData();\n\n const refreshAll = useCallback(async () => {\n await Promise.all([\n strategiesResult.refresh(),\n ordersResult.refresh(),\n portfolioResult.refresh(),\n marketResult.refresh(),\n ]);\n }, [strategiesResult.refresh, ordersResult.refresh, portfolioResult.refresh, marketResult.refresh]);\n\n const error = useMemo(() => {\n return strategiesResult.error || ordersResult.error || portfolioResult.error || marketResult.error;\n }, [strategiesResult.error, ordersResult.error, portfolioResult.error, marketResult.error]);\n\n return {\n strategies: strategiesResult.strategies,\n strategiesLoading: strategiesResult.isLoading,\n orders: ordersResult.orders,\n ordersLoading: ordersResult.isLoading,\n portfolio: portfolioResult.portfolio,\n portfolioLoading: portfolioResult.isLoading,\n prices: marketResult.prices,\n createOrder: ordersResult.createOrder,\n pauseOrder: ordersResult.pauseOrder,\n resumeOrder: ordersResult.resumeOrder,\n redeemOrder: ordersResult.redeemOrder,\n refreshAll,\n error,\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"]}
|
|
1
|
+
{"version":3,"sources":["../src/types/forex.ts","../src/services/forex/ForexPoolDataGenerator.ts","../src/services/forex/ForexSimulationEngine.ts","../src/services/forex/BotSimulationEngine.ts","../src/config/index.ts","../src/types/aiTrading.ts","../src/types/console.ts","../src/services/engine.ts","../src/services/supabase.ts","../src/services/price.ts","../src/services/usage.ts","../src/services/forex/index.ts","../src/providers/OneProvider.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/components/ai/OneChainSelector.tsx","../src/components/ai/OneTierSelector.tsx","../src/components/ai/OneCycleSelector.tsx","../src/components/ai/OnePairSelector.tsx","../src/components/ai/OneForexPoolCard.tsx","../src/components/ai/OneForexCapitalSplit.tsx","../src/components/ai/OneForexConsoleView.tsx","../src/components/ai/OneForexPairSelector.tsx","../src/components/ai/OneForexTradeHistory.tsx","../src/components/ai/console/OneMetricsDashboard.tsx","../src/components/ai/console/OneRiskIndicator.tsx","../src/components/ai/console/OneTradingConsole.tsx","../src/components/ai/console/OneAgentCard.tsx","../src/components/ai/console/OneAIQuantConsole.tsx","../src/components/ai/console/OnePositionCard.tsx","../src/components/ai/console/OneDecisionTimeline.tsx","../src/components/ai/console/OneAgentConsole.tsx","../src/components/ai/console/OnePositionDetail.tsx","../src/hooks/useWalletBalance.ts","../src/hooks/useTokenPrice.ts","../src/hooks/useAITrading.ts","../src/hooks/useForexTrading.ts","../src/hooks/useBotSimulation.ts","../src/hooks/useAIPositions.ts","../src/hooks/useAIDecisions.ts","../src/hooks/useAIRiskStatus.ts","../src/hooks/useAIQuantConsole.ts","../src/hooks/useTradingConsole.ts","../src/utils/index.ts"],"names":["genId","rand","randInt","pick","ForexPoolDataGenerator","idCounter","base","config","isInitialized","BaseThirdwebProvider","jsx","inAppWallet","ethereum","polygon","arbitrum","buttonStyle","useState","isValidAddress","useCallback","prepareTransaction","error","containerStyle","inputStyle","useActiveAccount","useEffect","jsxs","DEFAULT_FIATS","DEFAULT_CRYPTOS","DEFAULT_NETWORKS","NETWORK_DISPLAY_NAMES","CRYPTO_RATES","headerStyle","selectStyle","rowStyle","quoteBoxStyle","CHAIN_CONFIGS","optimism","labelStyle","useSendTransaction","useMemo","CHAIN_INFO","View","styles","Text","TouchableOpacity","StyleSheet","MONO","Platform","ScrollView","useRef","formatPrice","Fragment","formatDate","useWalletBalance","inv","forexSimulationEngine","botSimulationEngine","formatUSD","formatPercent"],"mappings":"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","file":"index.mjs","sourcesContent":["// ══════════════════════════════════════════════════════════════════════════════\n// ONE SDK - StableFX On-Chain Forex Types & Constants\n// Shared types for stablecoin foreign exchange pool trading\n// ══════════════════════════════════════════════════════════════════════════════\n\n// ── Capital Split ────────────────────────────────────────────────────────────\n\nexport const FOREX_CAPITAL_SPLIT = {\n poolReserves: 0.50,\n tradingCapital: 0.50,\n} as const;\n\nexport function computePoolAllocations(amount: number): {\n tradingCapital: number;\n totalPoolReserves: number;\n clearing: number;\n hedging: number;\n insurance: number;\n} {\n const totalPoolReserves = amount * FOREX_CAPITAL_SPLIT.poolReserves;\n const tradingCapital = amount * FOREX_CAPITAL_SPLIT.tradingCapital;\n return {\n tradingCapital,\n totalPoolReserves,\n clearing: totalPoolReserves * 0.50,\n hedging: totalPoolReserves * 0.30,\n insurance: totalPoolReserves * 0.20,\n };\n}\n\n// ── Cycle Options ────────────────────────────────────────────────────────────\n\nexport interface ForexCycleOption {\n days: number;\n feeRate: number;\n commissionRate: number;\n label: string;\n}\n\nexport const FOREX_CYCLE_OPTIONS: ForexCycleOption[] = [\n { days: 30, feeRate: 0.10, commissionRate: 0.60, label: '30D' },\n { days: 60, feeRate: 0.08, commissionRate: 0.70, label: '60D' },\n { days: 90, feeRate: 0.07, commissionRate: 0.75, label: '90D' },\n { days: 180, feeRate: 0.05, commissionRate: 0.85, label: '180D' },\n { days: 360, feeRate: 0.03, commissionRate: 0.90, label: '360D' },\n];\n\n// ── Currency Pairs ───────────────────────────────────────────────────────────\n\nexport interface ForexCurrencyPair {\n id: string;\n base: string;\n quote: string;\n symbol: string;\n flag: string;\n name: string;\n basePrice: number;\n pipSize: number;\n spreadPips: number;\n}\n\nexport const FOREX_CURRENCY_PAIRS: ForexCurrencyPair[] = [\n { id: 'USDC_EURC', base: 'USDC', quote: 'EURC', symbol: 'USDC/EURC', flag: '\\u{1F1EA}\\u{1F1FA}', name: 'Euro', basePrice: 0.9230, pipSize: 0.0001, spreadPips: 1.2 },\n { id: 'USDC_GBPC', base: 'USDC', quote: 'GBPC', symbol: 'USDC/GBPC', flag: '\\u{1F1EC}\\u{1F1E7}', name: 'British Pound', basePrice: 0.7890, pipSize: 0.0001, spreadPips: 1.5 },\n { id: 'USDC_JPYC', base: 'USDC', quote: 'JPYC', symbol: 'USDC/JPYC', flag: '\\u{1F1EF}\\u{1F1F5}', name: 'Japanese Yen', basePrice: 154.50, pipSize: 0.01, spreadPips: 1.0 },\n { id: 'USDC_AUDC', base: 'USDC', quote: 'AUDC', symbol: 'USDC/AUDC', flag: '\\u{1F1E6}\\u{1F1FA}', name: 'Australian Dollar', basePrice: 1.5380, pipSize: 0.0001, spreadPips: 1.8 },\n { id: 'USDC_CADC', base: 'USDC', quote: 'CADC', symbol: 'USDC/CADC', flag: '\\u{1F1E8}\\u{1F1E6}', name: 'Canadian Dollar', basePrice: 1.3640, pipSize: 0.0001, spreadPips: 1.5 },\n { id: 'USDC_CHFC', base: 'USDC', quote: 'CHFC', symbol: 'USDC/CHFC', flag: '\\u{1F1E8}\\u{1F1ED}', name: 'Swiss Franc', basePrice: 0.8750, pipSize: 0.0001, spreadPips: 1.3 },\n];\n\n// ── Pools ────────────────────────────────────────────────────────────────────\n\nexport type ForexPoolType = 'clearing' | 'hedging' | 'insurance';\n\nexport interface ForexPool {\n id: ForexPoolType;\n nameKey: string;\n descriptionKey: string;\n allocation: number;\n totalSize: number;\n utilization: number;\n color: string;\n apy7d: number;\n apy30d: number;\n netFlow24h: number;\n txCount24h: number;\n txCountTotal: number;\n totalDeposits: number;\n totalWithdrawals: number;\n profitDistributed: number;\n lastUpdated: number;\n}\n\nexport const FOREX_POOL_DEFAULTS: ForexPool[] = [\n { id: 'clearing', nameKey: 'forex.pool_clearing', descriptionKey: 'forex.pool_clearing_desc', allocation: 0.50, totalSize: 12500000, utilization: 0.78, color: '#3B82F6', apy7d: 12.8, apy30d: 11.5, netFlow24h: 185000, txCount24h: 42, txCountTotal: 12840, totalDeposits: 45200000, totalWithdrawals: 32700000, profitDistributed: 1850000, lastUpdated: Date.now() },\n { id: 'hedging', nameKey: 'forex.pool_hedging', descriptionKey: 'forex.pool_hedging_desc', allocation: 0.30, totalSize: 7500000, utilization: 0.65, color: '#F59E0B', apy7d: 8.1, apy30d: 7.6, netFlow24h: 72000, txCount24h: 24, txCountTotal: 7620, totalDeposits: 28500000, totalWithdrawals: 21000000, profitDistributed: 980000, lastUpdated: Date.now() },\n { id: 'insurance', nameKey: 'forex.pool_insurance', descriptionKey: 'forex.pool_insurance_desc', allocation: 0.20, totalSize: 5000000, utilization: 0.42, color: '#10B981', apy7d: 4.8, apy30d: 4.5, netFlow24h: 35000, txCount24h: 14, txCountTotal: 4280, totalDeposits: 15800000, totalWithdrawals: 10800000, profitDistributed: 520000, lastUpdated: Date.now() },\n];\n\n// ── Pool Transactions ────────────────────────────────────────────────────────\n\nexport type ForexPoolTransactionType =\n | 'deposit' | 'withdrawal' | 'profit_distribution'\n | 'loss_absorption' | 'inter_pool_transfer' | 'fee_collection' | 'reserve_rebalance';\n\nexport interface ForexPoolTransaction {\n id: string;\n poolId: ForexPoolType;\n type: ForexPoolTransactionType;\n amount: number;\n balanceBefore: number;\n balanceAfter: number;\n txHash: string;\n blockNumber: number;\n timestamp: number;\n description: string;\n}\n\n// ── Pool Daily Snapshots ────────────────────────────────────────────────────\n\nexport interface ForexPoolDailySnapshot {\n poolId: ForexPoolType;\n date: string;\n openBalance: number;\n closeBalance: number;\n deposits: number;\n withdrawals: number;\n netFlow: number;\n dailyPnl: number;\n dailyPnlPct: number;\n cumulativePnl: number;\n utilization: number;\n txCount: number;\n activeUsers: number;\n}\n\n// ── Positions ────────────────────────────────────────────────────────────────\n\nexport interface ForexPosition {\n id: string;\n pairId: string;\n side: 'BUY' | 'SELL';\n lots: number;\n pips: number;\n entryPrice: number;\n currentPrice: number;\n pnl: number;\n openTime: number;\n}\n\n// ── Investment ───────────────────────────────────────────────────────────────\n\nexport interface ForexInvestment {\n id: string;\n userId?: string;\n amount: number;\n currentValue: number;\n profit: number;\n status: 'active' | 'completed' | 'pending' | 'redeemed' | 'cancelled';\n selectedPairs: string[];\n cycleDays: number;\n cycleOption: ForexCycleOption;\n feeRate?: number;\n commissionRate?: number;\n startDate: string;\n endDate: string;\n tradingCapital: number;\n totalPoolReserves: number;\n poolAllocations: {\n clearing: number;\n hedging: number;\n insurance: number;\n };\n tradeWeight: number;\n totalLots: number;\n totalPips: number;\n totalTrades: number;\n positions: ForexPosition[];\n tradeHistory: ForexTradeRecord[];\n redeemedAt?: string;\n createdAt?: string;\n updatedAt?: string;\n}\n\n// ── Trade Records ────────────────────────────────────────────────────────────\n\nexport type ForexTradeStatus = 'RFQ' | 'QUOTED' | 'MATCHED' | 'SETTLED' | 'FAILED';\n\nexport interface ForexTradeRecord {\n id: string;\n timestamp: number;\n pairId: string;\n pairSymbol: string;\n side: 'BUY' | 'SELL';\n rfqPrice: number;\n quotePrice: number;\n matchPrice: number;\n settlePrice: number;\n lots: number;\n pips: number;\n pnl: number;\n status: ForexTradeStatus;\n pvpSettled: boolean;\n clearingFee?: number;\n hedgingCost?: number;\n insuranceReserve?: number;\n txHash?: string;\n blockNumber?: number;\n cycleDay?: number;\n cumulativePnl?: number;\n}\n\n// ── Console Log Types ────────────────────────────────────────────────────────\n\nexport type ForexLogType =\n | 'RFQ' | 'QUOTE' | 'MATCH' | 'SETTLE' | 'PVP'\n | 'HEDGE' | 'CLEAR' | 'POSITION' | 'PNL' | 'SYSTEM';\n\nexport interface ForexLogEntry {\n id: string;\n timestamp: number;\n type: ForexLogType;\n message: string;\n data?: Record<string, any>;\n importance: 'low' | 'medium' | 'high';\n pairId?: string;\n}\n\n// ── Agent ────────────────────────────────────────────────────────────────────\n\nexport interface ForexAgent {\n id: string;\n nameKey: string;\n descriptionKey: string;\n icon: string;\n color: string;\n supportedPairs: string[];\n dailyRoiMin: number;\n dailyRoiMax: number;\n totalManaged: number;\n totalUsers: number;\n winRate: number;\n}\n\nexport const FOREX_AGENT: ForexAgent = {\n id: 'stablefx-01',\n nameKey: 'forex.agent_name',\n descriptionKey: 'forex.agent_description',\n icon: '\\u{1F4B1}',\n color: '#0EA5E9',\n supportedPairs: FOREX_CURRENCY_PAIRS.map(p => p.id),\n dailyRoiMin: 0.002,\n dailyRoiMax: 0.005,\n totalManaged: 25000000,\n totalUsers: 3847,\n winRate: 72.5,\n};\n\n// ── Profit Calculation ───────────────────────────────────────────────────────\n\nexport function calculateForexNetProfit(\n grossProfit: number,\n cycleOption: ForexCycleOption,\n): { feeAmount: number; postFeeProfit: number; netProfit: number } {\n const feeAmount = grossProfit * cycleOption.feeRate;\n const postFeeProfit = grossProfit - feeAmount;\n const netProfit = postFeeProfit * cycleOption.commissionRate;\n return { feeAmount, postFeeProfit, netProfit };\n}\n\nexport function estimateForexProfit(\n amount: number,\n cycleDays: number,\n agent: ForexAgent = FOREX_AGENT,\n): { grossProfit: number; feeAmount: number; netProfit: number; dailyRate: number } {\n const cycleOption = FOREX_CYCLE_OPTIONS.find(c => c.days === cycleDays) || FOREX_CYCLE_OPTIONS[0];\n const estimatedApy = ((agent.dailyRoiMin + agent.dailyRoiMax) / 2) * 365 * 100;\n const dailyRate = estimatedApy / 100 / 365;\n const grossProfit = amount * dailyRate * cycleDays;\n const { feeAmount, netProfit } = calculateForexNetProfit(grossProfit, cycleOption);\n return { grossProfit, feeAmount, netProfit, dailyRate };\n}\n","// ForexPoolDataGenerator.ts - Generates historical pool snapshots, transactions, and trade history\n// Singleton service following existing pattern (like ForexSimulationEngine)\n\nimport type {\n ForexPoolType,\n ForexPoolDailySnapshot,\n ForexPoolTransaction,\n ForexPoolTransactionType,\n ForexTradeRecord,\n} from '../../types/forex';\nimport { FOREX_CURRENCY_PAIRS, FOREX_POOL_DEFAULTS, FOREX_AGENT } from '../../types/forex';\n\n// ── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction rand(min: number, max: number): number {\n return min + Math.random() * (max - min);\n}\n\nfunction randInt(min: number, max: number): number {\n return Math.floor(rand(min, max + 1));\n}\n\nfunction pick<T>(arr: T[]): T {\n return arr[Math.floor(Math.random() * arr.length)];\n}\n\nfunction genTxHash(): string {\n const chars = '0123456789abcdef';\n let hash = '0x';\n for (let i = 0; i < 64; i++) hash += chars[Math.floor(Math.random() * 16)];\n return hash;\n}\n\nfunction formatDate(d: Date): string {\n return d.toISOString().split('T')[0];\n}\n\nlet _idCounter = 0;\nfunction genId(prefix: string): string {\n return `${prefix}_${Date.now().toString(36)}_${(++_idCounter).toString(36)}`;\n}\n\n// ── Pool Parameters ──────────────────────────────────────────────────────────\n\ninterface PoolParams {\n meanDailyPnlPct: number;\n stddevPnlPct: number;\n utilizationMin: number;\n utilizationMax: number;\n depositsPerDay: [number, number];\n withdrawalsPerDay: [number, number];\n profitDistPerDay: number;\n avgDepositSize: number;\n avgWithdrawalSize: number;\n}\n\nconst POOL_PARAMS: Record<ForexPoolType, PoolParams> = {\n clearing: {\n meanDailyPnlPct: 0.00035,\n stddevPnlPct: 0.00015,\n utilizationMin: 0.70,\n utilizationMax: 0.85,\n depositsPerDay: [15, 25],\n withdrawalsPerDay: [8, 12],\n profitDistPerDay: 5,\n avgDepositSize: 25000,\n avgWithdrawalSize: 18000,\n },\n hedging: {\n meanDailyPnlPct: 0.00022,\n stddevPnlPct: 0.00020,\n utilizationMin: 0.55,\n utilizationMax: 0.75,\n depositsPerDay: [8, 15],\n withdrawalsPerDay: [5, 8],\n profitDistPerDay: 3,\n avgDepositSize: 18000,\n avgWithdrawalSize: 12000,\n },\n insurance: {\n meanDailyPnlPct: 0.00013,\n stddevPnlPct: 0.00008,\n utilizationMin: 0.30,\n utilizationMax: 0.50,\n depositsPerDay: [5, 10],\n withdrawalsPerDay: [3, 5],\n profitDistPerDay: 2,\n avgDepositSize: 12000,\n avgWithdrawalSize: 8000,\n },\n};\n\n// ── Generator Class ──────────────────────────────────────────────────────────\n\nclass ForexPoolDataGeneratorClass {\n private snapshotCache: Record<ForexPoolType, ForexPoolDailySnapshot[]> | null = null;\n private transactionCache: ForexPoolTransaction[] | null = null;\n private baseBlockNumber = 19_500_000;\n\n // ── Public API ─────────────────────────────────────────────────────────\n\n generateAllSnapshots(): Record<ForexPoolType, ForexPoolDailySnapshot[]> {\n if (this.snapshotCache) return this.snapshotCache;\n\n const result: Record<ForexPoolType, ForexPoolDailySnapshot[]> = {\n clearing: [],\n hedging: [],\n insurance: [],\n };\n\n for (const pool of FOREX_POOL_DEFAULTS) {\n result[pool.id] = this.generatePoolSnapshots(pool.id, pool.totalSize);\n }\n\n this.snapshotCache = result;\n return result;\n }\n\n generateAllTransactions(): ForexPoolTransaction[] {\n if (this.transactionCache) return this.transactionCache;\n\n const allTx: ForexPoolTransaction[] = [];\n\n for (const pool of FOREX_POOL_DEFAULTS) {\n const snapshots = this.snapshotCache?.[pool.id] || this.generatePoolSnapshots(pool.id, pool.totalSize);\n const txs = this.generatePoolTransactions(pool.id, snapshots);\n allTx.push(...txs);\n }\n\n // Add inter-pool transfers (~2-3/week = ~17-26 over 60 days)\n const now = new Date();\n for (let i = 0; i < 60; i++) {\n const day = new Date(now);\n day.setDate(day.getDate() - (60 - i));\n const dayOfWeek = day.getDay();\n\n // Inter-pool transfers: ~2-3 per week\n if (dayOfWeek === 2 || dayOfWeek === 4 || (dayOfWeek === 5 && Math.random() < 0.4)) {\n const fromPool = pick(['clearing', 'hedging', 'insurance'] as ForexPoolType[]);\n const toOptions = (['clearing', 'hedging', 'insurance'] as ForexPoolType[]).filter(p => p !== fromPool);\n const toPool = pick(toOptions);\n const amount = rand(50000, 200000);\n const ts = day.getTime() + randInt(10, 18) * 3600000;\n\n allTx.push({\n id: genId('ipt'),\n poolId: fromPool,\n type: 'inter_pool_transfer',\n amount: -amount,\n balanceBefore: 0,\n balanceAfter: 0,\n txHash: genTxHash(),\n blockNumber: this.baseBlockNumber + i * 7200 + randInt(0, 100),\n timestamp: ts,\n description: `Transfer to ${toPool} pool`,\n });\n\n allTx.push({\n id: genId('ipt'),\n poolId: toPool,\n type: 'inter_pool_transfer',\n amount: amount,\n balanceBefore: 0,\n balanceAfter: 0,\n txHash: genTxHash(),\n blockNumber: this.baseBlockNumber + i * 7200 + randInt(100, 200),\n timestamp: ts + 5000,\n description: `Transfer from ${fromPool} pool`,\n });\n }\n\n // Reserve rebalance: ~1/week\n if (dayOfWeek === 3 && Math.random() < 0.85) {\n const pool = pick(FOREX_POOL_DEFAULTS);\n const rebalanceAmt = rand(20000, 100000);\n const ts = day.getTime() + randInt(2, 6) * 3600000;\n allTx.push({\n id: genId('rrb'),\n poolId: pool.id,\n type: 'reserve_rebalance',\n amount: Math.random() < 0.5 ? rebalanceAmt : -rebalanceAmt,\n balanceBefore: 0,\n balanceAfter: 0,\n txHash: genTxHash(),\n blockNumber: this.baseBlockNumber + i * 7200 + randInt(200, 300),\n timestamp: ts,\n description: 'Automated reserve rebalance',\n });\n }\n }\n\n // Sort all transactions by timestamp\n allTx.sort((a, b) => a.timestamp - b.timestamp);\n\n // Assign running balances per pool\n const runningBalance: Record<ForexPoolType, number> = {\n clearing: FOREX_POOL_DEFAULTS[0].totalSize * 0.85,\n hedging: FOREX_POOL_DEFAULTS[1].totalSize * 0.82,\n insurance: FOREX_POOL_DEFAULTS[2].totalSize * 0.88,\n };\n\n for (const tx of allTx) {\n tx.balanceBefore = runningBalance[tx.poolId];\n runningBalance[tx.poolId] += tx.amount;\n tx.balanceAfter = runningBalance[tx.poolId];\n }\n\n this.transactionCache = allTx;\n return allTx;\n }\n\n generateTradeHistory(\n investmentAmount: number,\n startDate: string,\n selectedPairs: string[],\n ): ForexTradeRecord[] {\n const trades: ForexTradeRecord[] = [];\n const start = new Date(startDate);\n const now = new Date();\n const dayCount = Math.min(60, Math.ceil((now.getTime() - start.getTime()) / 86400000));\n let cumulativePnl = 0;\n let blockNum = this.baseBlockNumber + randInt(0, 5000);\n\n for (let d = 0; d < dayCount; d++) {\n const day = new Date(start);\n day.setDate(day.getDate() + d);\n const dayOfWeek = day.getDay();\n\n // Fewer trades on weekends\n const baseCount = (dayOfWeek === 0 || dayOfWeek === 6) ? randInt(1, 2) : randInt(3, 8);\n\n for (let t = 0; t < baseCount; t++) {\n const pair = FOREX_CURRENCY_PAIRS.find(p => p.id === pick(selectedPairs)) || pick(FOREX_CURRENCY_PAIRS);\n const side: 'BUY' | 'SELL' = Math.random() > 0.5 ? 'BUY' : 'SELL';\n const lots = parseFloat(rand(0.1, 2.5).toFixed(2));\n const rfqPrice = pair.basePrice * (1 + rand(-0.003, 0.003));\n const quoteSpread = rand(0.5, 2.0) * pair.pipSize;\n const quotePrice = side === 'BUY' ? rfqPrice + quoteSpread : rfqPrice - quoteSpread;\n\n // 85% match rate\n const matched = Math.random() < 0.85;\n if (!matched) continue;\n\n const matchPrice = quotePrice * (1 + rand(-0.00005, 0.00005));\n const settlePrice = matchPrice * (1 + rand(-0.00002, 0.00002));\n const pips = ((settlePrice - rfqPrice) / pair.pipSize) * (side === 'BUY' ? 1 : -1);\n const pnl = pips * pair.pipSize * lots * 100000;\n\n // Win rate matching FOREX_AGENT\n const isWin = Math.random() < (FOREX_AGENT.winRate / 100);\n const finalPnl = isWin ? Math.abs(pnl) : -Math.abs(pnl) * rand(0.3, 0.8);\n cumulativePnl += finalPnl;\n\n const clearingFee = Math.abs(finalPnl) * rand(0.001, 0.003);\n const hedgingCost = Math.abs(finalPnl) * rand(0.0005, 0.002);\n const insuranceReserve = Math.abs(finalPnl) * rand(0.0003, 0.001);\n\n blockNum += randInt(1, 20);\n const timestamp = day.getTime() + randInt(0, 23) * 3600000 + randInt(0, 3600000);\n\n trades.push({\n id: genId('FXT'),\n timestamp,\n pairId: pair.id,\n pairSymbol: pair.symbol,\n side,\n rfqPrice,\n quotePrice,\n matchPrice,\n settlePrice,\n lots,\n pips: isWin ? Math.abs(pips) : -Math.abs(pips) * rand(0.3, 0.8),\n pnl: finalPnl,\n status: 'SETTLED',\n pvpSettled: true,\n clearingFee,\n hedgingCost,\n insuranceReserve,\n txHash: genTxHash(),\n blockNumber: blockNum,\n cycleDay: d + 1,\n cumulativePnl,\n });\n }\n }\n\n trades.sort((a, b) => a.timestamp - b.timestamp);\n return trades;\n }\n\n generateLiveTransaction(\n poolId: ForexPoolType,\n type: ForexPoolTransactionType,\n baseAmount?: number,\n ): ForexPoolTransaction {\n const params = POOL_PARAMS[poolId];\n let amount: number;\n\n switch (type) {\n case 'deposit':\n amount = baseAmount ?? rand(params.avgDepositSize * 0.5, params.avgDepositSize * 1.5);\n break;\n case 'withdrawal':\n amount = -(baseAmount ?? rand(params.avgWithdrawalSize * 0.5, params.avgWithdrawalSize * 1.5));\n break;\n case 'profit_distribution':\n amount = baseAmount ?? rand(500, 5000);\n break;\n case 'fee_collection':\n amount = baseAmount ?? rand(100, 2000);\n break;\n case 'loss_absorption':\n amount = -(baseAmount ?? rand(200, 3000));\n break;\n default:\n amount = baseAmount ?? rand(-5000, 5000);\n }\n\n const pool = FOREX_POOL_DEFAULTS.find(p => p.id === poolId)!;\n const balanceBefore = pool.totalSize;\n\n return {\n id: genId('ptx'),\n poolId,\n type,\n amount,\n balanceBefore,\n balanceAfter: balanceBefore + amount,\n txHash: genTxHash(),\n blockNumber: this.baseBlockNumber + Math.floor(Date.now() / 12000),\n timestamp: Date.now(),\n description: this.getTxDescription(type, poolId, Math.abs(amount)),\n };\n }\n\n // ── Private Methods ────────────────────────────────────────────────────\n\n private generatePoolSnapshots(\n poolId: ForexPoolType,\n currentSize: number,\n ): ForexPoolDailySnapshot[] {\n const params = POOL_PARAMS[poolId];\n const snapshots: ForexPoolDailySnapshot[] = [];\n const now = new Date();\n\n // Work backward: start with a smaller balance 60 days ago\n let balance = currentSize * rand(0.82, 0.88);\n let cumulativePnl = 0;\n\n for (let i = 59; i >= 0; i--) {\n const day = new Date(now);\n day.setDate(day.getDate() - i);\n const dayOfWeek = day.getDay();\n const isWeekend = dayOfWeek === 0 || dayOfWeek === 6;\n\n const openBalance = balance;\n\n // Weekend activity ~20% of weekday\n const activityMultiplier = isWeekend ? 0.2 : 1.0;\n\n // Daily PnL with occasional drawdowns (1-2 per week)\n const isDrawdown = !isWeekend && Math.random() < 0.2; // ~1.4/week\n let dailyPnlPct: number;\n if (isDrawdown) {\n dailyPnlPct = -rand(0.0001, params.stddevPnlPct * 2);\n } else {\n dailyPnlPct = this.gaussianRandom(params.meanDailyPnlPct, params.stddevPnlPct);\n }\n dailyPnlPct *= activityMultiplier;\n\n const dailyPnl = balance * dailyPnlPct;\n cumulativePnl += dailyPnl;\n\n // Net deposits: organic growth with slight positive bias\n const depositCount = isWeekend\n ? randInt(1, Math.ceil(params.depositsPerDay[0] * 0.2))\n : randInt(params.depositsPerDay[0], params.depositsPerDay[1]);\n const withdrawalCount = isWeekend\n ? randInt(0, Math.ceil(params.withdrawalsPerDay[0] * 0.2))\n : randInt(params.withdrawalsPerDay[0], params.withdrawalsPerDay[1]);\n\n const deposits = depositCount * params.avgDepositSize * rand(0.7, 1.3) * activityMultiplier;\n const withdrawals = withdrawalCount * params.avgWithdrawalSize * rand(0.7, 1.3) * activityMultiplier;\n const netFlow = deposits - withdrawals;\n\n balance += dailyPnl + netFlow;\n\n const txCount = depositCount + withdrawalCount + Math.round(params.profitDistPerDay * activityMultiplier);\n const utilization = rand(params.utilizationMin, params.utilizationMax);\n const activeUsers = Math.round(rand(80, 400) * activityMultiplier);\n\n snapshots.push({\n poolId,\n date: formatDate(day),\n openBalance,\n closeBalance: balance,\n deposits,\n withdrawals,\n netFlow,\n dailyPnl,\n dailyPnlPct,\n cumulativePnl,\n utilization,\n txCount,\n activeUsers,\n });\n }\n\n return snapshots;\n }\n\n private generatePoolTransactions(\n poolId: ForexPoolType,\n snapshots: ForexPoolDailySnapshot[],\n ): ForexPoolTransaction[] {\n const params = POOL_PARAMS[poolId];\n const transactions: ForexPoolTransaction[] = [];\n\n for (const snap of snapshots) {\n const day = new Date(snap.date);\n const dayOfWeek = day.getDay();\n const isWeekend = dayOfWeek === 0 || dayOfWeek === 6;\n const mult = isWeekend ? 0.2 : 1.0;\n\n const depositCount = Math.round(randInt(params.depositsPerDay[0], params.depositsPerDay[1]) * mult);\n const withdrawalCount = Math.round(randInt(params.withdrawalsPerDay[0], params.withdrawalsPerDay[1]) * mult);\n const profitCount = Math.round(params.profitDistPerDay * mult);\n\n // Deposits\n for (let i = 0; i < depositCount; i++) {\n const amount = rand(params.avgDepositSize * 0.3, params.avgDepositSize * 2.0);\n const ts = day.getTime() + randInt(0, 23) * 3600000 + randInt(0, 3600000);\n transactions.push({\n id: genId('dep'),\n poolId,\n type: 'deposit',\n amount,\n balanceBefore: 0,\n balanceAfter: 0,\n txHash: genTxHash(),\n blockNumber: this.baseBlockNumber + Math.floor(ts / 12000) + randInt(0, 50),\n timestamp: ts,\n description: `Deposit to ${poolId} pool`,\n });\n }\n\n // Withdrawals\n for (let i = 0; i < withdrawalCount; i++) {\n const amount = rand(params.avgWithdrawalSize * 0.3, params.avgWithdrawalSize * 2.0);\n const ts = day.getTime() + randInt(0, 23) * 3600000 + randInt(0, 3600000);\n transactions.push({\n id: genId('wdr'),\n poolId,\n type: 'withdrawal',\n amount: -amount,\n balanceBefore: 0,\n balanceAfter: 0,\n txHash: genTxHash(),\n blockNumber: this.baseBlockNumber + Math.floor(ts / 12000) + randInt(0, 50),\n timestamp: ts,\n description: `Withdrawal from ${poolId} pool`,\n });\n }\n\n // Profit distributions\n for (let i = 0; i < profitCount; i++) {\n const amount = rand(500, 8000);\n const ts = day.getTime() + randInt(6, 22) * 3600000 + randInt(0, 3600000);\n transactions.push({\n id: genId('prd'),\n poolId,\n type: 'profit_distribution',\n amount,\n balanceBefore: 0,\n balanceAfter: 0,\n txHash: genTxHash(),\n blockNumber: this.baseBlockNumber + Math.floor(ts / 12000) + randInt(0, 50),\n timestamp: ts,\n description: `Profit distribution from ${poolId} pool`,\n });\n }\n\n // Fee collection (1-2 per day on weekdays)\n if (!isWeekend) {\n const feeCount = randInt(1, 2);\n for (let i = 0; i < feeCount; i++) {\n const amount = rand(100, 3000);\n const ts = day.getTime() + randInt(8, 20) * 3600000;\n transactions.push({\n id: genId('fee'),\n poolId,\n type: 'fee_collection',\n amount,\n balanceBefore: 0,\n balanceAfter: 0,\n txHash: genTxHash(),\n blockNumber: this.baseBlockNumber + Math.floor(ts / 12000) + randInt(0, 50),\n timestamp: ts,\n description: `Fee collection for ${poolId} pool`,\n });\n }\n }\n }\n\n return transactions;\n }\n\n private gaussianRandom(mean: number, stddev: number): number {\n let u = 0, v = 0;\n while (u === 0) u = Math.random();\n while (v === 0) v = Math.random();\n const z = Math.sqrt(-2.0 * Math.log(u)) * Math.cos(2.0 * Math.PI * v);\n return mean + z * stddev;\n }\n\n private getTxDescription(type: ForexPoolTransactionType, poolId: ForexPoolType, amount: number): string {\n const fmt = `$${amount.toLocaleString(undefined, { maximumFractionDigits: 0 })}`;\n switch (type) {\n case 'deposit': return `Deposit ${fmt} to ${poolId} pool`;\n case 'withdrawal': return `Withdrawal ${fmt} from ${poolId} pool`;\n case 'profit_distribution': return `Profit distribution ${fmt} from ${poolId}`;\n case 'loss_absorption': return `Loss absorbed ${fmt} by ${poolId} pool`;\n case 'inter_pool_transfer': return `Inter-pool transfer ${fmt}`;\n case 'fee_collection': return `Fee collected ${fmt} in ${poolId}`;\n case 'reserve_rebalance': return `Reserve rebalance ${fmt} in ${poolId}`;\n default: return `${type} ${fmt}`;\n }\n }\n}\n\n// ── Singleton Export ──────────────────────────────────────────────────────────\n\nlet _instance: ForexPoolDataGeneratorClass | null = null;\n\nexport const ForexPoolDataGenerator = {\n getInstance(): ForexPoolDataGeneratorClass {\n if (!_instance) {\n _instance = new ForexPoolDataGeneratorClass();\n }\n return _instance;\n },\n};\n","// ForexSimulationEngine.ts - StableFX RFQ+PvP on-chain forex simulation engine\n// Simulates Circle StableFX-style foreign exchange operations using USDC stablecoin pairs\n\nimport type {\n ForexLogEntry,\n ForexLogType,\n ForexCurrencyPair,\n ForexTradeRecord,\n ForexPosition,\n ForexPoolTransaction,\n} from '../../types/forex';\nimport { FOREX_CURRENCY_PAIRS } from '../../types/forex';\n\n// ── Types ──────────────────────────────────────────────────────────────────────\n\ntype LogCallback = (entry: ForexLogEntry) => void;\ntype PoolTxCallback = (tx: ForexPoolTransaction) => void;\n\ninterface PairState {\n pair: ForexCurrencyPair;\n currentPrice: number;\n bidPrice: number;\n askPrice: number;\n lastSpread: number;\n}\n\n// ── Helpers ────────────────────────────────────────────────────────────────────\n\nlet idCounter = 0;\nfunction genId(): string {\n return `fxlog_${Date.now()}_${++idCounter}`;\n}\n\nfunction tradeId(): string {\n return `FXT_${Date.now().toString(36).toUpperCase()}_${(++idCounter).toString(36).toUpperCase()}`;\n}\n\nfunction rand(min: number, max: number): number {\n return min + Math.random() * (max - min);\n}\n\nfunction randInt(min: number, max: number): number {\n return Math.floor(rand(min, max + 1));\n}\n\nfunction pick<T>(arr: T[]): T {\n return arr[Math.floor(Math.random() * arr.length)];\n}\n\nfunction formatRate(price: number, pair: ForexCurrencyPair): string {\n if (pair.pipSize >= 0.01) return price.toFixed(3);\n return price.toFixed(5);\n}\n\n// ── News Headlines ───────────────────────────────────────────────────────────\n\nconst FX_NEWS = [\n 'ECB signals potential rate adjustment, EUR pairs volatile',\n 'BOJ maintains yield curve control, JPY weakens further',\n 'Fed minutes reveal hawkish sentiment, USD strengthens',\n 'UK CPI data beats expectations, GBP rallies',\n 'RBA holds rates steady, AUD consolidates',\n 'SNB intervenes in currency markets, CHF stabilizes',\n 'Bank of Canada rate decision pending, CAD in focus',\n 'Cross-border stablecoin settlement volume hits $2.1B daily',\n 'Circle USDC reserves fully backed, attestation report released',\n 'DeFi forex protocol TVL reaches new high at $890M',\n 'On-chain FX liquidity deepens across major pairs',\n 'Institutional adoption of on-chain forex accelerates',\n];\n\n// ── Engine ─────────────────────────────────────────────────────────────────────\n\nclass ForexSimulationEngine {\n private listeners: LogCallback[] = [];\n private poolTxListeners: PoolTxCallback[] = [];\n private cycleTimer: ReturnType<typeof setTimeout> | null = null;\n private pairStates: Map<string, PairState> = new Map();\n private running = false;\n private openPositions: ForexPosition[] = [];\n private totalPnl = 0;\n private totalTrades = 0;\n private totalPips = 0;\n private totalLots = 0;\n\n constructor() {\n for (const pair of FOREX_CURRENCY_PAIRS) {\n const jitter = pair.basePrice * rand(-0.003, 0.003);\n const price = pair.basePrice + jitter;\n const halfSpread = pair.spreadPips * pair.pipSize / 2;\n this.pairStates.set(pair.id, {\n pair,\n currentPrice: price,\n bidPrice: price - halfSpread,\n askPrice: price + halfSpread,\n lastSpread: pair.spreadPips,\n });\n }\n }\n\n // ── Public API ─────────────────────────────────────────────────────────────\n\n start(): void {\n this.running = true;\n this.scheduleCycle();\n }\n\n stop(): void {\n this.running = false;\n if (this.cycleTimer) {\n clearTimeout(this.cycleTimer);\n this.cycleTimer = null;\n }\n }\n\n onLog(callback: LogCallback): () => void {\n this.listeners.push(callback);\n return () => {\n this.listeners = this.listeners.filter(l => l !== callback);\n };\n }\n\n onPoolTransaction(callback: PoolTxCallback): () => void {\n this.poolTxListeners.push(callback);\n return () => {\n this.poolTxListeners = this.poolTxListeners.filter(l => l !== callback);\n };\n }\n\n isRunning(): boolean {\n return this.running;\n }\n\n getStats(): { totalPnl: number; totalTrades: number; totalPips: number; totalLots: number; positions: number } {\n return {\n totalPnl: this.totalPnl,\n totalTrades: this.totalTrades,\n totalPips: this.totalPips,\n totalLots: this.totalLots,\n positions: this.openPositions.length,\n };\n }\n\n getPairStates(): Map<string, PairState> {\n return this.pairStates;\n }\n\n emitBootSequence(): void {\n const bootMessages: Array<{ msg: string; delay: number }> = [\n { msg: 'Initializing StableFX Engine v2.1.0...', delay: 0 },\n { msg: 'Connecting to Circle StableFX RFQ network...', delay: 500 },\n { msg: 'Loading USDC stablecoin pair feeds (6 pairs)...', delay: 1200 },\n { msg: 'Calibrating PvP settlement engine...', delay: 2000 },\n { msg: 'Initializing clearing pool ($12.5M)...', delay: 2800 },\n { msg: 'Initializing hedging pool ($7.5M)...', delay: 3400 },\n { msg: 'Initializing insurance pool ($5.0M)...', delay: 4000 },\n { msg: 'Risk management module online (max exposure: 25%)', delay: 4500 },\n { msg: '=== StableFX Engine ready. Starting RFQ cycles ===', delay: 5000 },\n ];\n\n for (const { msg, delay } of bootMessages) {\n setTimeout(() => {\n this.emit({\n id: genId(),\n timestamp: Date.now(),\n type: 'SYSTEM',\n message: msg,\n importance: 'medium',\n });\n }, delay);\n }\n }\n\n destroy(): void {\n this.stop();\n this.listeners = [];\n this.poolTxListeners = [];\n this.pairStates.clear();\n this.openPositions = [];\n }\n\n // ── Private Methods ────────────────────────────────────────────────────────\n\n private emit(entry: ForexLogEntry): void {\n for (const listener of this.listeners) {\n listener(entry);\n }\n }\n\n private emitPoolTx(tx: ForexPoolTransaction): void {\n for (const listener of this.poolTxListeners) {\n listener(tx);\n }\n }\n\n private generatePoolTxFromEvent(\n type: 'SETTLE' | 'HEDGE' | 'CLEAR',\n data: { pnl?: number; volume?: number; lots?: number },\n ): void {\n try {\n const { ForexPoolDataGenerator } = require('./ForexPoolDataGenerator');\n const generator = ForexPoolDataGenerator.getInstance();\n\n if (type === 'SETTLE' && data.pnl !== undefined) {\n const tx = generator.generateLiveTransaction('clearing', 'fee_collection', Math.abs(data.pnl) * rand(0.001, 0.003));\n this.emitPoolTx(tx);\n } else if (type === 'HEDGE') {\n const tx = generator.generateLiveTransaction('hedging', data.pnl && data.pnl < 0 ? 'loss_absorption' : 'profit_distribution', Math.abs(data.lots || 1) * rand(50, 200));\n this.emitPoolTx(tx);\n } else if (type === 'CLEAR') {\n const tx = generator.generateLiveTransaction('clearing', 'profit_distribution', (data.volume || 100000) * rand(0.0001, 0.0005));\n this.emitPoolTx(tx);\n }\n } catch {\n // Generator not available\n }\n }\n\n private scheduleCycle(): void {\n if (!this.running) return;\n const interval = rand(8000, 14000);\n this.cycleTimer = setTimeout(() => {\n if (this.running) {\n this.runTradeCycle();\n this.scheduleCycle();\n }\n }, interval);\n }\n\n private simulatePrice(pairId: string): number {\n const state = this.pairStates.get(pairId);\n if (!state) return 0;\n const volatility = state.pair.id.includes('JPYC') ? 0.0008 : 0.0004;\n const drift = rand(-volatility, volatility);\n const newPrice = state.currentPrice * (1 + drift);\n const halfSpread = (state.pair.spreadPips + rand(-0.3, 0.3)) * state.pair.pipSize / 2;\n state.currentPrice = newPrice;\n state.bidPrice = newPrice - halfSpread;\n state.askPrice = newPrice + halfSpread;\n state.lastSpread = halfSpread * 2 / state.pair.pipSize;\n return newPrice;\n }\n\n private runTradeCycle(): void {\n const pairState = pick(Array.from(this.pairStates.values()));\n const pair = pairState.pair;\n const entries: Array<{ entry: Omit<ForexLogEntry, 'id' | 'timestamp'>; delay: number }> = [];\n let delay = 0;\n\n // Update price\n const price = this.simulatePrice(pair.id);\n\n // 1. RFQ - Request for Quote\n const side = Math.random() > 0.5 ? 'BUY' : 'SELL';\n const lots = parseFloat((rand(0.1, 2.5)).toFixed(2));\n const notional = lots * 100000;\n const rfqId = tradeId();\n\n entries.push({\n entry: {\n type: 'RFQ',\n message: `RFQ ${rfqId} | ${pair.symbol} ${side} ${lots.toFixed(2)} lots ($${(notional / 1000).toFixed(0)}K) | Mid: ${formatRate(price, pair)}`,\n data: { rfqId, pair: pair.id, side, lots, price },\n importance: 'medium',\n pairId: pair.id,\n },\n delay,\n });\n delay += rand(400, 800);\n\n // 2. QUOTE - Price quote from LP\n const quoteSpread = rand(0.5, 2.0) * pair.pipSize;\n const quotePrice = side === 'BUY'\n ? price + quoteSpread\n : price - quoteSpread;\n const quotePips = Math.abs(quotePrice - price) / pair.pipSize;\n\n entries.push({\n entry: {\n type: 'QUOTE',\n message: `QUOTE ${rfqId} | ${pair.symbol} @ ${formatRate(quotePrice, pair)} | Spread: ${quotePips.toFixed(1)} pips | Valid: 3s`,\n data: { rfqId, quotePrice, spread: quotePips },\n importance: 'medium',\n pairId: pair.id,\n },\n delay,\n });\n delay += rand(500, 1000);\n\n // 3. MATCH - Trade matching (85% success rate)\n const matched = Math.random() < 0.85;\n if (matched) {\n const matchPrice = quotePrice * (1 + rand(-0.00005, 0.00005));\n entries.push({\n entry: {\n type: 'MATCH',\n message: `MATCH ${rfqId} | ${pair.symbol} ${side} @ ${formatRate(matchPrice, pair)} | ${lots.toFixed(2)} lots | Counterparty: LP-${randInt(1, 8)}`,\n data: { rfqId, matchPrice, counterparty: `LP-${randInt(1, 8)}` },\n importance: 'high',\n pairId: pair.id,\n },\n delay,\n });\n delay += rand(1000, 2500);\n\n // 4. SETTLE - PvP Settlement\n const settlePrice = matchPrice * (1 + rand(-0.00002, 0.00002));\n const pips = ((settlePrice - price) / pair.pipSize) * (side === 'BUY' ? 1 : -1);\n const pnl = pips * pair.pipSize * lots * 100000;\n\n entries.push({\n entry: {\n type: 'SETTLE',\n message: `SETTLE ${rfqId} | PvP confirmed | ${pair.symbol} @ ${formatRate(settlePrice, pair)} | P&L: ${pips >= 0 ? '+' : ''}${pips.toFixed(1)} pips ($${pnl >= 0 ? '+' : ''}${pnl.toFixed(2)})`,\n data: { rfqId, settlePrice, pips, pnl, pvp: true },\n importance: 'high',\n pairId: pair.id,\n },\n delay,\n });\n delay += rand(300, 600);\n\n // 5. PVP - Settlement confirmation\n entries.push({\n entry: {\n type: 'PVP',\n message: `PvP ${rfqId} | Atomic settlement confirmed on-chain | USDC transferred: $${notional.toLocaleString()} | Gas: ~$0.${randInt(10, 50)}`,\n data: { rfqId, settled: true, gasWei: randInt(10, 50) },\n importance: 'medium',\n pairId: pair.id,\n },\n delay,\n });\n\n // Generate pool transaction for settlement\n this.generatePoolTxFromEvent('SETTLE', { pnl });\n\n // Update stats\n this.totalTrades++;\n this.totalPnl += pnl;\n this.totalPips += pips;\n this.totalLots += lots;\n\n // Update positions\n if (Math.random() < 0.4) {\n this.openPositions.push({\n id: rfqId,\n pairId: pair.id,\n side: side as 'BUY' | 'SELL',\n lots,\n pips,\n entryPrice: matchPrice,\n currentPrice: settlePrice,\n pnl,\n openTime: Date.now(),\n });\n if (this.openPositions.length > 5) {\n this.openPositions.shift();\n }\n }\n } else {\n entries.push({\n entry: {\n type: 'MATCH',\n message: `MATCH FAILED ${rfqId} | ${pair.symbol} | No counterparty at requested price | Requoting...`,\n data: { rfqId, matched: false },\n importance: 'low',\n pairId: pair.id,\n },\n delay,\n });\n }\n\n // 6. HEDGE - Pool hedging operations (20% chance)\n if (Math.random() < 0.2) {\n delay += rand(400, 800);\n const hedgePair = pick(FOREX_CURRENCY_PAIRS);\n const hedgeLots = parseFloat(rand(0.5, 5.0).toFixed(2));\n const hedgeDirection = Math.random() > 0.5 ? 'LONG' : 'SHORT';\n entries.push({\n entry: {\n type: 'HEDGE',\n message: `HEDGE | ${hedgePair.symbol} ${hedgeDirection} ${hedgeLots.toFixed(2)} lots | Pool delta neutralization | Exposure: ${rand(5, 20).toFixed(1)}%`,\n data: { pair: hedgePair.id, direction: hedgeDirection, lots: hedgeLots },\n importance: 'medium',\n },\n delay,\n });\n this.generatePoolTxFromEvent('HEDGE', { lots: hedgeLots });\n }\n\n // 7. CLEAR - Clearing pool operations (15% chance)\n if (Math.random() < 0.15) {\n delay += rand(300, 600);\n const clearAmount = randInt(50000, 500000);\n entries.push({\n entry: {\n type: 'CLEAR',\n message: `CLEAR | Netting cycle complete | Volume: $${(clearAmount / 1000).toFixed(0)}K | Pairs settled: ${randInt(2, 6)} | Pool util: ${rand(60, 85).toFixed(1)}%`,\n data: { volume: clearAmount, pairsSettled: randInt(2, 6) },\n importance: 'low',\n },\n delay,\n });\n this.generatePoolTxFromEvent('CLEAR', { volume: clearAmount });\n }\n\n // 8. POSITION - Position update (25% chance)\n if (this.openPositions.length > 0 && Math.random() < 0.25) {\n delay += rand(300, 600);\n const posUpdates = this.openPositions.slice(0, 3).map(pos => {\n const pState = this.pairStates.get(pos.pairId);\n if (pState) {\n pos.currentPrice = pState.currentPrice;\n pos.pips = ((pos.currentPrice - pos.entryPrice) / pState.pair.pipSize) * (pos.side === 'BUY' ? 1 : -1);\n pos.pnl = pos.pips * pState.pair.pipSize * pos.lots * 100000;\n }\n return `${pState?.pair.symbol || pos.pairId} ${pos.side}: ${pos.pips >= 0 ? '+' : ''}${pos.pips.toFixed(1)} pips`;\n });\n entries.push({\n entry: {\n type: 'POSITION',\n message: `POSITION | ${posUpdates.join(' | ')} | Open: ${this.openPositions.length}`,\n data: { positions: this.openPositions.length },\n importance: 'low',\n },\n delay,\n });\n\n // Close old positions\n if (this.openPositions.length > 2 && Math.random() < 0.3) {\n const closed = this.openPositions.shift()!;\n this.totalPnl += closed.pnl * rand(0.01, 0.03);\n }\n }\n\n // 9. PNL - Periodic P&L summary (30% chance)\n if (Math.random() < 0.3) {\n delay += rand(300, 600);\n entries.push({\n entry: {\n type: 'PNL',\n message: `PNL | Session: $${this.totalPnl >= 0 ? '+' : ''}${this.totalPnl.toFixed(2)} | Trades: ${this.totalTrades} | Pips: ${this.totalPips >= 0 ? '+' : ''}${this.totalPips.toFixed(1)} | Lots: ${this.totalLots.toFixed(2)}`,\n data: { totalPnl: this.totalPnl, totalTrades: this.totalTrades, totalPips: this.totalPips },\n importance: 'medium',\n },\n delay,\n });\n }\n\n // 10. NEWS (10% chance)\n if (Math.random() < 0.1) {\n delay += rand(300, 600);\n entries.push({\n entry: {\n type: 'SYSTEM',\n message: `[Market] ${pick(FX_NEWS)}`,\n importance: 'medium',\n },\n delay,\n });\n }\n\n // Emit all entries with delays\n for (const { entry, delay: d } of entries) {\n setTimeout(() => {\n if (this.running) {\n this.emit({\n ...entry,\n id: genId(),\n timestamp: Date.now(),\n });\n }\n }, d);\n }\n }\n}\n\n// ── Singleton Export ──────────────────────────────────────────────────────────\n\nexport const forexSimulationEngine = new ForexSimulationEngine();\nexport type { PairState };\n","// BotSimulationEngine.ts - Core simulation engine for trading bot console\n// Runs independent simulation loops for each strategy bot with distinct personalities\n\n// ── Types ──────────────────────────────────────────────────────────────────────\n\nexport type BotLogType =\n | 'SCAN'\n | 'INDICATOR'\n | 'NEWS'\n | 'SIGNAL'\n | 'ANALYSIS'\n | 'DECISION'\n | 'ORDER'\n | 'FILLED'\n | 'PNL'\n | 'RISK'\n | 'SYSTEM'\n | 'STRATEGY' // Strategy reasoning and context\n | 'THINKING'; // AI thinking process\n\nexport interface BotLogEntry {\n id: string;\n timestamp: number;\n strategyId: string;\n strategyName: string;\n type: BotLogType;\n message: string;\n data?: Record<string, any>;\n importance: 'low' | 'medium' | 'high';\n}\n\nexport interface IndicatorSnapshot {\n rsi: number;\n macd: { value: number; signal: number; histogram: number };\n ema: { short: number; long: number; crossover: 'golden' | 'death' | 'none' };\n bollinger: { upper: number; middle: number; lower: number; width: number; position: number };\n volume: { current: number; average: number; ratio: number };\n}\n\nexport interface BotState {\n strategyId: string;\n strategyName: string;\n isRunning: boolean;\n currentPair: string;\n currentPrice: number;\n indicators: IndicatorSnapshot;\n openPositions: OpenPosition[];\n totalPnl: number;\n totalTrades: number;\n winRate: number;\n lastSignal: string;\n lastSignalConfidence: number;\n}\n\ninterface OpenPosition {\n id: string;\n pair: string;\n side: 'LONG' | 'SHORT';\n entryPrice: number;\n currentPrice: number;\n size: number;\n leverage: number;\n pnl: number;\n pnlPercent: number;\n}\n\nexport interface StrategyPersonality {\n id: string;\n name: string;\n shortName: string;\n color: string;\n scanIntervalMin: number;\n scanIntervalMax: number;\n tradeFrequency: number;\n positionSizeMin: number;\n positionSizeMax: number;\n leverageMin: number;\n leverageMax: number;\n primaryIndicators: string[];\n riskTolerance: 'low' | 'medium' | 'high';\n preferredPairs: string[];\n rsiBias: number;\n}\n\ntype LogCallback = (entry: BotLogEntry) => void;\n\n// ── Strategy Personalities ─────────────────────────────────────────────────────\n\nexport const STRATEGY_PERSONALITIES: StrategyPersonality[] = [\n {\n id: 'balanced-01',\n name: 'Balanced Alpha',\n shortName: 'BAL',\n color: '#3B82F6',\n scanIntervalMin: 25000, // Slower: 25-40s between cycles\n scanIntervalMax: 40000,\n tradeFrequency: 0.4,\n positionSizeMin: 15,\n positionSizeMax: 35,\n leverageMin: 3,\n leverageMax: 10,\n primaryIndicators: ['RSI', 'MACD'],\n riskTolerance: 'medium',\n preferredPairs: ['BTC/USDT', 'ETH/USDT', 'SOL/USDT'],\n rsiBias: 50,\n },\n {\n id: 'conservative-01',\n name: 'Conservative Shield',\n shortName: 'CON',\n color: '#10B981',\n scanIntervalMin: 35000, // Slower: 35-55s between cycles\n scanIntervalMax: 55000,\n tradeFrequency: 0.25,\n positionSizeMin: 10,\n positionSizeMax: 20,\n leverageMin: 2,\n leverageMax: 5,\n primaryIndicators: ['Bollinger', 'Volume'],\n riskTolerance: 'low',\n preferredPairs: ['BTC/USDT', 'ETH/USDT'],\n rsiBias: 45,\n },\n {\n id: 'aggressive-01',\n name: 'Aggressive Momentum',\n shortName: 'AGG',\n color: '#EF4444',\n scanIntervalMin: 18000, // Slower: 18-30s between cycles\n scanIntervalMax: 30000,\n tradeFrequency: 0.5,\n positionSizeMin: 25,\n positionSizeMax: 50,\n leverageMin: 5,\n leverageMax: 20,\n primaryIndicators: ['RSI', 'MACD', 'EMA', 'Volume'],\n riskTolerance: 'high',\n preferredPairs: ['BTC/USDT', 'ETH/USDT', 'SOL/USDT', 'DOGE/USDT', 'AVAX/USDT'],\n rsiBias: 55,\n },\n];\n\n// ── Trading pairs with base prices ─────────────────────────────────────────────\n\nconst PAIR_PRICES: Record<string, number> = {\n 'BTC/USDT': 67500,\n 'ETH/USDT': 3450,\n 'BNB/USDT': 605,\n 'SOL/USDT': 178,\n 'XRP/USDT': 0.62,\n 'DOGE/USDT': 0.165,\n 'ADA/USDT': 0.45,\n 'AVAX/USDT': 38.5,\n 'ARB/USDT': 1.18,\n 'MATIC/USDT': 0.72,\n 'LINK/USDT': 14.5,\n 'UNI/USDT': 7.8,\n 'AAVE/USDT': 92,\n 'OP/USDT': 2.45,\n 'APT/USDT': 8.9,\n 'INJ/USDT': 24.5,\n 'TIA/USDT': 11.2,\n 'SUI/USDT': 1.65,\n 'DOT/USDT': 7.2,\n 'ATOM/USDT': 9.8,\n 'FIL/USDT': 5.6,\n 'LTC/USDT': 72,\n 'NEAR/USDT': 5.1,\n 'FTM/USDT': 0.42,\n};\n\nconst CHAIN_INFO: Record<string, { name: string; shortName: string; icon: string }> = {\n ethereum: { name: 'Ethereum', shortName: 'ETH', icon: 'Ξ' },\n arbitrum: { name: 'Arbitrum', shortName: 'ARB', icon: '◆' },\n bsc: { name: 'BSC', shortName: 'BSC', icon: '◆' },\n base: { name: 'Base', shortName: 'BASE', icon: '●' },\n polygon: { name: 'Polygon', shortName: 'POLY', icon: '⬡' },\n optimism: { name: 'Optimism', shortName: 'OP', icon: '◉' },\n avalanche: { name: 'Avalanche', shortName: 'AVAX', icon: '▲' },\n linea: { name: 'Linea', shortName: 'LINEA', icon: '═' },\n zksync: { name: 'zkSync', shortName: 'ZK', icon: '⬢' },\n scroll: { name: 'Scroll', shortName: 'SCRL', icon: '◎' },\n};\n\nconst NEWS_HEADLINES = [\n 'Fed signals potential rate pause, crypto markets react positively',\n 'Major institutional investor increases BTC allocation by 15%',\n 'On-chain data shows whale accumulation pattern forming',\n 'DeFi TVL reaches new monthly high across major protocols',\n 'Exchange outflows surge as holders move to cold storage',\n 'Options market signals increased volatility expected this week',\n 'Mining difficulty adjustment approaching, hash rate stable',\n 'Regulatory clarity in EU boosts market sentiment',\n 'Stablecoin supply expanding, potential bullish indicator',\n 'Social sentiment score shifts to extreme greed zone',\n 'Cross-chain bridge volume hits record daily high',\n 'Layer 2 adoption metrics show 40% MoM growth',\n];\n\n// ── Helpers ────────────────────────────────────────────────────────────────────\n\nlet idCounter = 0;\nfunction genId(): string {\n return `log_${Date.now()}_${++idCounter}`;\n}\n\nfunction rand(min: number, max: number): number {\n return min + Math.random() * (max - min);\n}\n\nfunction randInt(min: number, max: number): number {\n return Math.floor(rand(min, max + 1));\n}\n\nfunction pick<T>(arr: T[]): T {\n return arr[Math.floor(Math.random() * arr.length)];\n}\n\nfunction clamp(val: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, val));\n}\n\nfunction formatPrice(price: number): string {\n if (price >= 1000) return price.toFixed(2);\n if (price >= 1) return price.toFixed(3);\n return price.toFixed(5);\n}\n\n// ── Engine ─────────────────────────────────────────────────────────────────────\n\nclass BotSimulationEngine {\n private listeners: LogCallback[] = [];\n private botTimers: Map<string, ReturnType<typeof setTimeout>> = new Map();\n private botStates: Map<string, BotState> = new Map();\n private priceState: Map<string, number> = new Map();\n private indicatorState: Map<string, IndicatorSnapshot> = new Map();\n private running = false;\n private userPairs: string[] = [];\n private userChains: string[] = [];\n\n constructor() {\n // Initialize prices with some jitter\n for (const [pair, base] of Object.entries(PAIR_PRICES)) {\n this.priceState.set(pair, base * (1 + rand(-0.02, 0.02)));\n }\n }\n\n // ── Public API ─────────────────────────────────────────────────────────────\n\n getStrategies(): StrategyPersonality[] {\n return STRATEGY_PERSONALITIES;\n }\n\n start(strategyIds?: string[], userPairs?: string[], userChains?: string[]): void {\n this.running = true;\n // Convert pair IDs (e.g. 'BTC') to full symbols (e.g. 'BTC/USDT') if needed\n this.userPairs = (userPairs || [])\n .map(p => p.includes('/') ? p : `${p}/USDT`)\n .filter(p => p in PAIR_PRICES);\n this.userChains = (userChains || []).filter(c => c in CHAIN_INFO);\n const strategies = strategyIds\n ? STRATEGY_PERSONALITIES.filter(s => strategyIds.includes(s.id))\n : STRATEGY_PERSONALITIES;\n\n for (const strategy of strategies) {\n this.initBotState(strategy);\n this.scheduleCycle(strategy);\n }\n }\n\n stop(strategyIds?: string[]): void {\n const ids = strategyIds || Array.from(this.botTimers.keys());\n for (const id of ids) {\n const timer = this.botTimers.get(id);\n if (timer) {\n clearTimeout(timer);\n this.botTimers.delete(id);\n }\n }\n if (!strategyIds) {\n this.running = false;\n }\n }\n\n onLog(callback: LogCallback): () => void {\n this.listeners.push(callback);\n return () => {\n this.listeners = this.listeners.filter(l => l !== callback);\n };\n }\n\n getBotState(strategyId: string): BotState | undefined {\n return this.botStates.get(strategyId);\n }\n\n getAllBotStates(): Map<string, BotState> {\n return this.botStates;\n }\n\n isRunning(): boolean {\n return this.running;\n }\n\n emitBootSequence(): void {\n const bootMessages: Array<{ msg: string; delay: number }> = [\n { msg: 'Initializing ONE Trading Engine v3.2.1...', delay: 0 },\n { msg: 'Loading market data feeds...', delay: 500 },\n { msg: 'Connecting to exchange WebSocket streams...', delay: 1200 },\n { msg: 'Calibrating indicator engines (RSI, MACD, EMA, Bollinger)...', delay: 2000 },\n { msg: 'Loading strategy personalities: balanced-01, conservative-01, aggressive-01', delay: 2800 },\n { msg: 'Risk management module initialized (max drawdown: 15%)', delay: 3600 },\n { msg: 'Portfolio allocation engine ready', delay: 4200 },\n { msg: '=== All systems online. Starting trading cycles ===', delay: 5000 },\n ];\n\n for (const { msg, delay } of bootMessages) {\n setTimeout(() => {\n this.emit({\n id: genId(),\n timestamp: Date.now(),\n strategyId: 'system',\n strategyName: 'SYSTEM',\n type: 'SYSTEM',\n message: msg,\n importance: 'medium',\n });\n }, delay);\n }\n }\n\n destroy(): void {\n this.stop();\n this.listeners = [];\n this.botStates.clear();\n this.priceState.clear();\n this.indicatorState.clear();\n this.userPairs = [];\n this.userChains = [];\n }\n\n // ── Private Methods ────────────────────────────────────────────────────────\n\n private emit(entry: BotLogEntry): void {\n for (const listener of this.listeners) {\n listener(entry);\n }\n }\n\n private getActivePairs(strategy: StrategyPersonality): string[] {\n return this.userPairs.length > 0 ? this.userPairs : strategy.preferredPairs;\n }\n\n private getActiveChain(): string {\n const chains = this.userChains.length > 0\n ? this.userChains\n : ['ethereum', 'arbitrum', 'bsc'];\n return pick(chains);\n }\n\n private getChainLabel(chainId: string): string {\n const info = CHAIN_INFO[chainId];\n return info ? info.shortName : chainId;\n }\n\n private initBotState(strategy: StrategyPersonality): void {\n const activePairs = this.getActivePairs(strategy);\n const pair = pick(activePairs);\n const price = this.priceState.get(pair) || PAIR_PRICES[pair] || 50000;\n const indicators = this.generateIndicators(strategy, price);\n this.indicatorState.set(strategy.id, indicators);\n\n this.botStates.set(strategy.id, {\n strategyId: strategy.id,\n strategyName: strategy.name,\n isRunning: true,\n currentPair: pair,\n currentPrice: price,\n indicators,\n openPositions: [],\n totalPnl: rand(-50, 200),\n totalTrades: randInt(5, 25),\n winRate: rand(0.48, 0.68),\n lastSignal: 'HOLD',\n lastSignalConfidence: 0,\n });\n }\n\n private scheduleCycle(strategy: StrategyPersonality): void {\n if (!this.running) return;\n const interval = rand(strategy.scanIntervalMin, strategy.scanIntervalMax);\n const timer = setTimeout(() => {\n if (this.running) {\n this.runBotCycle(strategy);\n this.scheduleCycle(strategy);\n }\n }, interval);\n this.botTimers.set(strategy.id, timer);\n }\n\n private async runBotCycle(strategy: StrategyPersonality): Promise<void> {\n const state = this.botStates.get(strategy.id);\n if (!state) return;\n\n const activePairs = this.getActivePairs(strategy);\n const pair = pick(activePairs);\n const price = this.simulatePrice(pair);\n const indicators = this.generateIndicators(strategy, price);\n this.indicatorState.set(strategy.id, indicators);\n\n state.currentPair = pair;\n state.currentPrice = price;\n state.indicators = indicators;\n\n const entries: Array<{ entry: Omit<BotLogEntry, 'id' | 'timestamp'>; delay: number }> = [];\n let delay = 0;\n\n // 1. SCAN - Always (slower delay)\n const chain = this.getActiveChain();\n const chainLabel = this.getChainLabel(chain);\n entries.push({\n entry: {\n strategyId: strategy.id,\n strategyName: strategy.shortName,\n type: 'SCAN',\n message: `Scanning ${pair} on ${chainLabel} | Price: $${formatPrice(price)}`,\n data: { pair, chain, chainLabel },\n importance: 'low',\n },\n delay,\n });\n delay += rand(800, 1500); // Slower: 0.8-1.5s\n\n // 2. THINKING - AI reasoning process (new)\n const thinkingMessages = this.generateThinkingProcess(strategy, pair, price);\n for (const thinking of thinkingMessages) {\n entries.push({\n entry: {\n strategyId: strategy.id,\n strategyName: strategy.shortName,\n type: 'THINKING',\n message: thinking,\n importance: 'low',\n },\n delay,\n });\n delay += rand(600, 1200); // 0.6-1.2s between thoughts\n }\n\n // 3. INDICATOR - Always (slower delay)\n const indicatorParts = [];\n if (strategy.primaryIndicators.includes('RSI') || strategy.primaryIndicators.includes('MACD')) {\n indicatorParts.push(`RSI: ${indicators.rsi.toFixed(1)}`);\n }\n if (strategy.primaryIndicators.includes('MACD') || strategy.primaryIndicators.includes('RSI')) {\n indicatorParts.push(`MACD: ${indicators.macd.histogram > 0 ? '+' : ''}${indicators.macd.histogram.toFixed(3)}`);\n }\n if (strategy.primaryIndicators.includes('EMA')) {\n indicatorParts.push(`EMA: ${indicators.ema.short.toFixed(1)}/${indicators.ema.long.toFixed(1)}`);\n if (indicators.ema.crossover !== 'none') {\n indicatorParts.push(`[${indicators.ema.crossover.toUpperCase()} CROSS]`);\n }\n }\n if (strategy.primaryIndicators.includes('Bollinger')) {\n indicatorParts.push(`BB: ${indicators.bollinger.position.toFixed(1)}% width=${indicators.bollinger.width.toFixed(2)}`);\n }\n if (strategy.primaryIndicators.includes('Volume')) {\n indicatorParts.push(`Vol: ${indicators.volume.ratio.toFixed(2)}x avg`);\n }\n\n entries.push({\n entry: {\n strategyId: strategy.id,\n strategyName: strategy.shortName,\n type: 'INDICATOR',\n message: indicatorParts.join(' | '),\n data: { indicators },\n importance: 'low',\n },\n delay,\n });\n delay += rand(800, 1500); // Slower: 0.8-1.5s\n\n // 4. NEWS - 12% chance (slower)\n if (Math.random() < 0.12) {\n const sentiment = Math.random() > 0.4 ? 'Bullish' : 'Bearish';\n entries.push({\n entry: {\n strategyId: strategy.id,\n strategyName: strategy.shortName,\n type: 'NEWS',\n message: `[${sentiment}] ${pick(NEWS_HEADLINES)}`,\n importance: 'medium',\n },\n delay,\n });\n delay += rand(1000, 1800); // Slower: 1-1.8s\n }\n\n // 5. ANALYSIS - 40% chance (slower)\n if (Math.random() < 0.4) {\n const analysis = this.generateAnalysis(strategy, indicators, pair);\n entries.push({\n entry: {\n strategyId: strategy.id,\n strategyName: strategy.shortName,\n type: 'ANALYSIS',\n message: analysis,\n importance: 'medium',\n },\n delay,\n });\n delay += rand(1000, 2000); // Slower: 1-2s\n }\n\n // 6-10. Signal evaluation and potential trade\n const signal = this.evaluateSignal(strategy, indicators);\n state.lastSignal = signal.direction;\n state.lastSignalConfidence = signal.confidence;\n\n if (signal.direction !== 'HOLD') {\n // 6. STRATEGY - Show strategy reasoning context (NEW)\n const strategyContext = this.generateStrategyContext(strategy, signal, indicators, pair);\n entries.push({\n entry: {\n strategyId: strategy.id,\n strategyName: strategy.shortName,\n type: 'STRATEGY',\n message: strategyContext,\n data: {\n strategy: strategy.name,\n riskTolerance: strategy.riskTolerance,\n primaryIndicators: strategy.primaryIndicators,\n signal: signal.direction,\n confidence: signal.confidence,\n },\n importance: 'high',\n },\n delay,\n });\n delay += rand(1500, 2500); // Slower: 1.5-2.5s\n\n // 7. SIGNAL\n entries.push({\n entry: {\n strategyId: strategy.id,\n strategyName: strategy.shortName,\n type: 'SIGNAL',\n message: `${signal.direction} signal detected | Confidence: ${(signal.confidence * 100).toFixed(1)}% | ${signal.reason}`,\n data: { signal },\n importance: 'high',\n },\n delay,\n });\n delay += rand(1200, 2000); // Slower: 1.2-2s\n\n // 8. DECISION\n const decision = this.makeTradeDecision(strategy, signal, state);\n if (decision.execute) {\n entries.push({\n entry: {\n strategyId: strategy.id,\n strategyName: strategy.shortName,\n type: 'DECISION',\n message: `Execute ${signal.direction} | Size: ${decision.positionSize.toFixed(1)}% | Leverage: ${decision.leverage}x | Risk/Reward: 1:${decision.riskReward.toFixed(1)}`,\n data: {\n strategyName: strategy.name,\n strategyId: strategy.id,\n riskTolerance: strategy.riskTolerance,\n signalReason: signal.reason,\n confidence: signal.confidence,\n },\n importance: 'high',\n },\n delay,\n });\n delay += rand(1000, 1800); // Slower: 1-1.8s\n\n // 9. ORDER\n const orderId = `ORD_${Date.now().toString(36).toUpperCase()}`;\n const orderPrice = signal.direction === 'LONG'\n ? price * (1 - rand(0.0001, 0.0005))\n : price * (1 + rand(0.0001, 0.0005));\n\n entries.push({\n entry: {\n strategyId: strategy.id,\n strategyName: strategy.shortName,\n type: 'ORDER',\n message: `Submitting ${signal.direction} order | ${pair} @ $${formatPrice(orderPrice)} on ${chainLabel} | ID: ${orderId}`,\n data: {\n orderId,\n pair,\n side: signal.direction,\n price: orderPrice,\n leverage: decision.leverage,\n chain,\n chainLabel,\n strategyName: strategy.name,\n strategyContext: strategyContext,\n signalReason: signal.reason,\n },\n importance: 'high',\n },\n delay,\n });\n delay += rand(2000, 4000); // Slower: 2-4s for order execution\n\n // 10. FILLED\n const fillPrice = orderPrice * (1 + rand(-0.0003, 0.0003));\n const slippage = Math.abs(fillPrice - orderPrice) / orderPrice * 100;\n entries.push({\n entry: {\n strategyId: strategy.id,\n strategyName: strategy.shortName,\n type: 'FILLED',\n message: `Order FILLED | ${pair} ${signal.direction} @ $${formatPrice(fillPrice)} on ${chainLabel} | Slippage: ${slippage.toFixed(4)}% | ID: ${orderId}`,\n data: {\n orderId,\n fillPrice,\n slippage,\n chain,\n chainLabel,\n strategyName: strategy.name,\n executedBy: strategy.id,\n },\n importance: 'high',\n },\n delay,\n });\n\n // Update state with new position\n const position: OpenPosition = {\n id: orderId,\n pair,\n side: signal.direction as 'LONG' | 'SHORT',\n entryPrice: fillPrice,\n currentPrice: price,\n size: decision.positionSize,\n leverage: decision.leverage,\n pnl: 0,\n pnlPercent: 0,\n };\n state.openPositions = [...state.openPositions.slice(-2), position];\n state.totalTrades++;\n } else {\n entries.push({\n entry: {\n strategyId: strategy.id,\n strategyName: strategy.shortName,\n type: 'DECISION',\n message: `SKIP - ${decision.reason}`,\n importance: 'medium',\n },\n delay,\n });\n }\n }\n\n // 11. PNL - Update open positions (slower)\n if (state.openPositions.length > 0 && Math.random() < 0.5) {\n delay += rand(1500, 2500); // Slower: 1.5-2.5s\n let totalPositionPnl = 0;\n const pnlParts: string[] = [];\n\n for (const pos of state.openPositions) {\n pos.currentPrice = this.simulatePrice(pos.pair);\n const priceDiff = pos.side === 'LONG'\n ? (pos.currentPrice - pos.entryPrice) / pos.entryPrice\n : (pos.entryPrice - pos.currentPrice) / pos.entryPrice;\n pos.pnlPercent = priceDiff * pos.leverage * 100;\n pos.pnl = priceDiff * pos.leverage * pos.size;\n totalPositionPnl += pos.pnl;\n pnlParts.push(`${pos.pair} ${pos.side}: ${pos.pnlPercent >= 0 ? '+' : ''}${pos.pnlPercent.toFixed(2)}%`);\n }\n\n state.totalPnl += totalPositionPnl * rand(0.01, 0.05);\n\n // Sometimes close a position\n if (state.openPositions.length > 1 && Math.random() < 0.3) {\n const closed = state.openPositions.shift()!;\n const finalPnl = closed.pnlPercent;\n if (finalPnl > 0) {\n state.winRate = state.winRate * 0.95 + 0.05;\n } else {\n state.winRate = state.winRate * 0.95;\n }\n state.winRate = clamp(state.winRate, 0.35, 0.75);\n pnlParts.push(`CLOSED ${closed.pair}: ${finalPnl >= 0 ? '+' : ''}${finalPnl.toFixed(2)}%`);\n }\n\n entries.push({\n entry: {\n strategyId: strategy.id,\n strategyName: strategy.shortName,\n type: 'PNL',\n message: pnlParts.join(' | '),\n data: { totalPnl: state.totalPnl, positions: state.openPositions.length },\n importance: 'medium',\n },\n delay,\n });\n }\n\n // 12. RISK - Periodic check (slower)\n if (Math.random() < 0.2) {\n delay += rand(1000, 2000); // Slower: 1-2s\n const exposure = state.openPositions.reduce((sum, p) => sum + p.size * p.leverage, 0);\n const maxDrawdown = rand(2, 12);\n entries.push({\n entry: {\n strategyId: strategy.id,\n strategyName: strategy.shortName,\n type: 'RISK',\n message: `Portfolio exposure: ${exposure.toFixed(1)}% | Max drawdown: ${maxDrawdown.toFixed(1)}% | Open positions: ${state.openPositions.length} | Win rate: ${(state.winRate * 100).toFixed(1)}%`,\n importance: exposure > 80 ? 'high' : 'low',\n },\n delay,\n });\n }\n\n // Emit entries with delays\n for (const { entry, delay: d } of entries) {\n setTimeout(() => {\n if (this.running) {\n this.emit({\n ...entry,\n id: genId(),\n timestamp: Date.now(),\n });\n }\n }, d);\n }\n }\n\n private simulatePrice(pair: string): number {\n const current = this.priceState.get(pair) || PAIR_PRICES[pair] || 50000;\n const volatility = pair.includes('DOGE') ? 0.005 : pair.includes('BTC') ? 0.002 : 0.003;\n const drift = rand(-volatility, volatility);\n const newPrice = current * (1 + drift);\n this.priceState.set(pair, newPrice);\n return newPrice;\n }\n\n private generateIndicators(strategy: StrategyPersonality, price: number): IndicatorSnapshot {\n const prev = this.indicatorState.get(strategy.id);\n const prevRsi = prev?.rsi ?? strategy.rsiBias;\n\n // RSI: mean-reverting around bias\n const rsiMean = strategy.rsiBias;\n const rsiDrift = rand(-8, 8);\n const rsiReversion = (rsiMean - prevRsi) * 0.15;\n const rsi = clamp(prevRsi + rsiDrift + rsiReversion, 8, 95);\n\n // MACD: correlated with RSI\n const macdBias = rsi > 65 ? 0.3 : rsi < 35 ? -0.3 : 0;\n const prevHist = prev?.macd.histogram ?? 0;\n const histogram = clamp(prevHist * 0.7 + rand(-0.5, 0.5) + macdBias, -2, 2);\n const macdValue = histogram * rand(0.8, 1.5);\n const macdSignal = macdValue - histogram;\n\n // EMA: occasional crossovers\n const prevShort = prev?.ema.short ?? price;\n const prevLong = prev?.ema.long ?? price;\n const emaShort = prevShort * 0.9 + price * 0.1;\n const emaLong = prevLong * 0.95 + price * 0.05;\n let crossover: 'golden' | 'death' | 'none' = 'none';\n if (prevShort <= prevLong && emaShort > emaLong) crossover = 'golden';\n else if (prevShort >= prevLong && emaShort < emaLong) crossover = 'death';\n\n // Bollinger\n const bbMiddle = price;\n const bbWidth = price * rand(0.01, 0.04);\n const bbUpper = bbMiddle + bbWidth;\n const bbLower = bbMiddle - bbWidth;\n const bbPosition = ((price - bbLower) / (bbUpper - bbLower)) * 100;\n\n // Volume\n const volRatio = rand(0.3, 2.5);\n const volCurrent = rand(100000, 5000000);\n\n return {\n rsi,\n macd: { value: macdValue, signal: macdSignal, histogram },\n ema: { short: emaShort, long: emaLong, crossover },\n bollinger: { upper: bbUpper, middle: bbMiddle, lower: bbLower, width: bbWidth / price, position: bbPosition },\n volume: { current: volCurrent, average: volCurrent / volRatio, ratio: volRatio },\n };\n }\n\n private generateThinkingProcess(strategy: StrategyPersonality, pair: string, price: number): string[] {\n const thoughts: string[] = [];\n const pairBase = pair.split('/')[0];\n\n // Generate 1-3 thinking steps\n const thinkingTemplates = [\n `Analyzing ${pairBase} market structure...`,\n `Checking ${strategy.primaryIndicators.join(', ')} confluence...`,\n `Evaluating risk parameters for ${strategy.riskTolerance} tolerance...`,\n `Scanning order book depth at $${formatPrice(price)}...`,\n `Cross-referencing with historical patterns...`,\n `Calculating optimal entry zone...`,\n `Assessing market sentiment indicators...`,\n `Monitoring whale activity on ${pairBase}...`,\n `Comparing momentum across timeframes...`,\n `Validating support/resistance levels...`,\n ];\n\n const numThoughts = randInt(1, 3);\n const shuffled = [...thinkingTemplates].sort(() => Math.random() - 0.5);\n\n for (let i = 0; i < numThoughts; i++) {\n thoughts.push(shuffled[i]);\n }\n\n return thoughts;\n }\n\n private generateStrategyContext(\n strategy: StrategyPersonality,\n signal: { direction: string; confidence: number; reason: string },\n indicators: IndicatorSnapshot,\n pair: string\n ): string {\n const contexts = [];\n\n // Strategy personality context\n contexts.push(`[${strategy.name}]`);\n\n // Risk context\n const riskLevel = strategy.riskTolerance === 'high' ? 'aggressive' : strategy.riskTolerance === 'low' ? 'conservative' : 'balanced';\n contexts.push(`Risk: ${riskLevel}`);\n\n // Key indicator that triggered\n if (indicators.rsi < 35 || indicators.rsi > 65) {\n contexts.push(`RSI ${indicators.rsi < 35 ? 'oversold' : 'overbought'} (${indicators.rsi.toFixed(1)})`);\n }\n if (indicators.ema.crossover !== 'none') {\n contexts.push(`EMA ${indicators.ema.crossover} cross`);\n }\n if (Math.abs(indicators.macd.histogram) > 0.3) {\n contexts.push(`MACD ${indicators.macd.histogram > 0 ? 'bullish' : 'bearish'} momentum`);\n }\n\n // Confidence interpretation\n const confLevel = signal.confidence > 0.7 ? 'HIGH' : signal.confidence > 0.5 ? 'MEDIUM' : 'LOW';\n contexts.push(`Confidence: ${confLevel}`);\n\n return contexts.join(' | ');\n }\n\n private generateAnalysis(strategy: StrategyPersonality, indicators: IndicatorSnapshot, pair: string): string {\n const analyses = [];\n\n if (indicators.rsi > 70) {\n analyses.push(`RSI at ${indicators.rsi.toFixed(1)} - overbought territory, watching for reversal`);\n } else if (indicators.rsi < 30) {\n analyses.push(`RSI at ${indicators.rsi.toFixed(1)} - oversold, potential bounce setup`);\n } else if (indicators.rsi > 55) {\n analyses.push(`RSI trending bullish at ${indicators.rsi.toFixed(1)}`);\n } else {\n analyses.push(`RSI neutral at ${indicators.rsi.toFixed(1)}, no clear direction`);\n }\n\n if (indicators.macd.histogram > 0.5) {\n analyses.push('MACD histogram expanding positive - momentum building');\n } else if (indicators.macd.histogram < -0.5) {\n analyses.push('MACD histogram expanding negative - bearish pressure');\n }\n\n if (indicators.ema.crossover === 'golden') {\n analyses.push('EMA golden cross detected - strong bullish signal');\n } else if (indicators.ema.crossover === 'death') {\n analyses.push('EMA death cross detected - bearish warning');\n }\n\n if (indicators.bollinger.position > 90) {\n analyses.push(`Price near upper Bollinger band (${indicators.bollinger.position.toFixed(0)}%) - potential resistance`);\n } else if (indicators.bollinger.position < 10) {\n analyses.push(`Price near lower Bollinger band (${indicators.bollinger.position.toFixed(0)}%) - potential support`);\n }\n\n if (indicators.volume.ratio > 1.8) {\n analyses.push(`Volume spike ${indicators.volume.ratio.toFixed(1)}x average - high activity`);\n }\n\n return analyses.length > 0 ? analyses.join(' | ') : `${pair} consolidating - waiting for clearer setup`;\n }\n\n private evaluateSignal(\n strategy: StrategyPersonality,\n indicators: IndicatorSnapshot,\n ): { direction: 'LONG' | 'SHORT' | 'HOLD'; confidence: number; reason: string } {\n let bullScore = 0;\n let bearScore = 0;\n const reasons: string[] = [];\n\n // RSI\n if (indicators.rsi < 30) { bullScore += 2; reasons.push('RSI oversold'); }\n else if (indicators.rsi < 40) { bullScore += 1; reasons.push('RSI low'); }\n else if (indicators.rsi > 70) { bearScore += 2; reasons.push('RSI overbought'); }\n else if (indicators.rsi > 60) { bearScore += 1; reasons.push('RSI high'); }\n\n // MACD\n if (indicators.macd.histogram > 0.3) { bullScore += 1.5; reasons.push('MACD bullish'); }\n else if (indicators.macd.histogram < -0.3) { bearScore += 1.5; reasons.push('MACD bearish'); }\n\n // EMA\n if (indicators.ema.crossover === 'golden') { bullScore += 2.5; reasons.push('Golden cross'); }\n else if (indicators.ema.crossover === 'death') { bearScore += 2.5; reasons.push('Death cross'); }\n else if (indicators.ema.short > indicators.ema.long) { bullScore += 0.5; }\n else { bearScore += 0.5; }\n\n // Bollinger\n if (indicators.bollinger.position < 15) { bullScore += 1; reasons.push('BB support'); }\n else if (indicators.bollinger.position > 85) { bearScore += 1; reasons.push('BB resistance'); }\n\n // Volume confirmation\n if (indicators.volume.ratio > 1.5) {\n if (bullScore > bearScore) bullScore += 1;\n else bearScore += 1;\n reasons.push('Volume confirms');\n }\n\n const netScore = bullScore - bearScore;\n const confidence = Math.min(Math.abs(netScore) / 6, 0.95);\n const threshold = strategy.riskTolerance === 'high' ? 1.5 : strategy.riskTolerance === 'medium' ? 2.0 : 2.5;\n\n // Apply trade frequency filter\n if (Math.random() > strategy.tradeFrequency) {\n return { direction: 'HOLD', confidence: 0, reason: 'Cycle skip' };\n }\n\n if (netScore > threshold) {\n return { direction: 'LONG', confidence, reason: reasons.slice(0, 3).join(', ') };\n } else if (netScore < -threshold) {\n return { direction: 'SHORT', confidence, reason: reasons.slice(0, 3).join(', ') };\n }\n\n return { direction: 'HOLD', confidence: 0, reason: 'No clear signal' };\n }\n\n private makeTradeDecision(\n strategy: StrategyPersonality,\n signal: { direction: string; confidence: number },\n state: BotState,\n ): { execute: boolean; positionSize: number; leverage: number; riskReward: number; reason: string } {\n // Check position limits\n if (state.openPositions.length >= 3) {\n return { execute: false, positionSize: 0, leverage: 0, riskReward: 0, reason: 'Max positions reached (3)' };\n }\n\n // Confidence threshold\n const minConfidence = strategy.riskTolerance === 'high' ? 0.3 : strategy.riskTolerance === 'medium' ? 0.45 : 0.6;\n if (signal.confidence < minConfidence) {\n return { execute: false, positionSize: 0, leverage: 0, riskReward: 0, reason: `Confidence too low (${(signal.confidence * 100).toFixed(0)}% < ${(minConfidence * 100).toFixed(0)}%)` };\n }\n\n const positionSize = rand(strategy.positionSizeMin, strategy.positionSizeMax);\n const leverage = randInt(strategy.leverageMin, strategy.leverageMax);\n const riskReward = rand(1.2, 3.5);\n\n return { execute: true, positionSize, leverage, riskReward, reason: '' };\n }\n}\n\n// ── Singleton Export ────────────────────────────────────────────────────────────\n\nexport const botSimulationEngine = new BotSimulationEngine();\n","/**\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\n// Default configuration values\nconst DEFAULT_ENGINE_URL = 'https://api.one23.io';\nconst DEFAULT_CLIENT_ID = 'one_pk_e8f647bfa643fdcfaa3a23f760488e49be09f929296eed4a6c399d437d907f60';\n\nlet config: OneConfig | null = null;\n\nexport function initOneSDK(options: Partial<OneConfig>): void {\n // Use defaults if not provided\n const engineUrl = options.oneEngineUrl || DEFAULT_ENGINE_URL;\n const clientId = options.oneClientId || DEFAULT_CLIENT_ID;\n\n config = {\n ...options,\n oneEngineUrl: engineUrl,\n oneClientId: clientId,\n } as OneConfig;\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 || DEFAULT_ENGINE_URL;\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 SDK - AI Trading Types & Constants\n// Shared types for AI-powered crypto trading strategies\n// ══════════════════════════════════════════════════════════════════════════════\n\nexport type StrategyCategory = 'conservative' | 'balanced' | 'aggressive' | 'hedge' | 'arbitrage' | 'trend' | 'grid' | 'dca';\nexport type OrderStatus = 'pending' | 'active' | 'paused' | 'completed' | 'cancelled' | 'pending_redemption' | 'redeemed';\nexport type TradeAction = 'buy' | 'sell' | 'long' | 'short' | 'close_long' | 'close_short';\nexport type TradeStatus = 'open' | 'closed' | 'liquidated' | 'cancelled';\nexport type FeeType = 'management' | 'performance' | 'withdrawal' | 'early_redemption_penalty';\nexport type OrderEventType = 'created' | 'activated' | 'paused' | 'resumed' | 'redemption_requested' | 'redeemed' | 'cancelled' | 'fee_deducted' | 'profit_realized';\n\nexport interface AIStrategyConfig {\n id: string;\n name: string;\n description: string | null;\n category: StrategyCategory;\n riskLevel: 1 | 2 | 3 | 4 | 5;\n minInvestment: number;\n maxInvestment: number | null;\n lockPeriodDays: number;\n expectedApyMin: number | null;\n expectedApyMax: number | null;\n managementFeeRate: number;\n performanceFeeRate: number;\n supportedPairs: string[];\n supportedChains: string[];\n supportedCurrencies: string[];\n leverageMin: number;\n leverageMax: number;\n isActive: boolean;\n}\n\nexport interface AIOrderCreateInput {\n strategyId: string;\n amount: number;\n currency: string;\n chain: string;\n lockPeriodDays: number;\n}\n\nexport interface AIOrderSummary {\n orderId: string;\n strategyId: string;\n strategyName: string;\n amount: number;\n currentValue: number;\n profit: number;\n profitPercent: number;\n status: OrderStatus;\n daysRemaining: number;\n lockProgress: number;\n}\n\nexport interface AIPortfolioSummary {\n totalInvested: number;\n totalValue: number;\n totalProfit: number;\n totalProfitPercent: number;\n activeOrders: number;\n totalTrades: number;\n profitToday: number;\n profit7d: number;\n profit30d: number;\n}\n\nexport interface AITradeLog {\n id: string;\n timestamp: string;\n action: TradeAction;\n pair: string;\n entryPrice: number;\n exitPrice: number | null;\n amount: number;\n pnl: number;\n pnlPercent: number;\n leverage: number;\n status: TradeStatus;\n aiConfidence: number | null;\n aiReasoning: string | null;\n}\n\nexport interface AIPenaltyCalculation {\n completionRate: number;\n penaltyRate: number;\n estimatedPenalty: number;\n estimatedRedemption: number;\n isEarlyWithdrawal: boolean;\n}\n\nexport interface AIPerformanceChart {\n date: string;\n nav: number;\n dailyPnl: number;\n cumulativePnl: number;\n}\n\nexport const PENALTY_TIERS = [\n { minProgress: 0.75, maxProgress: 1.0, rate: 0.50, label: '50%' },\n { minProgress: 0.50, maxProgress: 0.75, rate: 0.60, label: '60%' },\n { minProgress: 0.25, maxProgress: 0.50, rate: 0.70, label: '70%' },\n { minProgress: 0.00, maxProgress: 0.25, rate: 0.80, label: '80%' },\n] as const;\n\nexport function calculateEarlyWithdrawalPenalty(\n investedAmount: number,\n profit: number,\n lockProgress: number,\n): AIPenaltyCalculation {\n const totalValue = investedAmount + profit;\n const isEarlyWithdrawal = lockProgress < 1.0;\n let penaltyRate = 0;\n if (isEarlyWithdrawal) {\n if (lockProgress >= 0.75) penaltyRate = 0.50;\n else if (lockProgress >= 0.50) penaltyRate = 0.60;\n else if (lockProgress >= 0.25) penaltyRate = 0.70;\n else penaltyRate = 0.80;\n }\n const estimatedPenalty = totalValue * penaltyRate;\n const estimatedRedemption = totalValue - estimatedPenalty;\n return { completionRate: lockProgress, penaltyRate, estimatedPenalty, estimatedRedemption, isEarlyWithdrawal };\n}\n\nexport const STRATEGY_CATEGORIES: Record<StrategyCategory, { labelKey: string; color: string; icon: string }> = {\n conservative: { labelKey: 'ai.category_conservative', color: '#10B981', icon: '\\u{1F6E1}\\u{FE0F}' },\n balanced: { labelKey: 'ai.category_balanced', color: '#3B82F6', icon: '\\u{2696}\\u{FE0F}' },\n aggressive: { labelKey: 'ai.category_aggressive', color: '#EF4444', icon: '\\u{1F680}' },\n hedge: { labelKey: 'ai.category_hedge', color: '#8B5CF6', icon: '\\u{1F512}' },\n arbitrage: { labelKey: 'ai.category_arbitrage', color: '#F59E0B', icon: '\\u{26A1}' },\n trend: { labelKey: 'ai.category_trend', color: '#EC4899', icon: '\\u{1F4C8}' },\n grid: { labelKey: 'ai.category_grid', color: '#6366F1', icon: '\\u{25A6}' },\n dca: { labelKey: 'ai.category_dca', color: '#14B8A6', icon: '\\u{1F4CA}' },\n};\n\nexport const RISK_LEVELS: Record<number, { labelKey: string; color: string; bgColor: string }> = {\n 1: { labelKey: 'ai.risk_very_low', color: '#10B981', bgColor: '#D1FAE5' },\n 2: { labelKey: 'ai.risk_low', color: '#22C55E', bgColor: '#DCFCE7' },\n 3: { labelKey: 'ai.risk_medium', color: '#F59E0B', bgColor: '#FEF3C7' },\n 4: { labelKey: 'ai.risk_high', color: '#F97316', bgColor: '#FFEDD5' },\n 5: { labelKey: 'ai.risk_very_high', color: '#EF4444', bgColor: '#FEE2E2' },\n};\n\nexport const ORDER_STATUS_CONFIG: Record<OrderStatus, { labelKey: string; color: string; bgColor: string }> = {\n pending: { labelKey: 'ai.status_pending', color: '#F59E0B', bgColor: '#FEF3C7' },\n active: { labelKey: 'ai.status_active', color: '#10B981', bgColor: '#D1FAE5' },\n paused: { labelKey: 'ai.status_paused', color: '#6B7280', bgColor: '#F3F4F6' },\n completed: { labelKey: 'ai.status_completed', color: '#3B82F6', bgColor: '#DBEAFE' },\n cancelled: { labelKey: 'ai.status_cancelled', color: '#EF4444', bgColor: '#FEE2E2' },\n pending_redemption: { labelKey: 'ai.status_pending_redemption', color: '#8B5CF6', bgColor: '#EDE9FE' },\n redeemed: { labelKey: 'ai.status_redeemed', color: '#14B8A6', bgColor: '#CCFBF1' },\n};\n","// ══════════════════════════════════════════════════════════════════════════════\n// ONE SDK - Trading Console Types & Constants\n// Shared types for real-time trading console components\n// ══════════════════════════════════════════════════════════════════════════════\n\nimport type { BotLogEntry, BotState, StrategyPersonality } from '../services/forex/BotSimulationEngine';\nimport type { ForexLogEntry, ForexPoolTransaction, ForexLogType } from './forex';\n\n// ── Re-exports for convenience ────────────────────────────────────────────────\n\nexport type { BotLogEntry, BotLogType, BotState, IndicatorSnapshot, StrategyPersonality } from '../services/forex/BotSimulationEngine';\n\n// ── Console Log Types ─────────────────────────────────────────────────────────\n\nexport type AILogType =\n | 'SCAN' | 'THINKING' | 'INDICATOR' | 'ANALYSIS' | 'SIGNAL'\n | 'STRATEGY' | 'DECISION' | 'ORDER' | 'FILLED' | 'PNL'\n | 'RISK' | 'NEWS' | 'SYSTEM';\n\nexport const AI_LOG_COLORS: Record<AILogType, string> = {\n SCAN: '#06B6D4', // Cyan\n THINKING: '#A855F7', // Purple\n INDICATOR: '#3B82F6', // Blue\n ANALYSIS: '#6366F1', // Indigo\n SIGNAL: '#F59E0B', // Amber\n STRATEGY: '#D946EF', // Fuchsia\n DECISION: '#F97316', // Orange\n ORDER: '#EC4899', // Pink\n FILLED: '#10B981', // Green\n PNL: '#22C55E', // Emerald\n RISK: '#EF4444', // Red\n NEWS: '#14B8A6', // Teal\n SYSTEM: '#9CA3AF', // Gray\n};\n\n// Forex log type colors (for ForexSimulationEngine logs)\nexport const FOREX_LOG_COLORS: Record<ForexLogType, string> = {\n RFQ: '#06B6D4', // Cyan\n QUOTE: '#8B5CF6', // Purple\n MATCH: '#10B981', // Green\n SETTLE: '#F59E0B', // Amber\n PVP: '#3B82F6', // Blue\n HEDGE: '#EC4899', // Pink\n CLEAR: '#14B8A6', // Teal\n POSITION: '#6366F1', // Indigo\n PNL: '#22C55E', // Emerald\n SYSTEM: '#9CA3AF', // Gray\n};\n\n// ── AI Position Types ─────────────────────────────────────────────────────────\n\nexport type PositionSide = 'LONG' | 'SHORT';\nexport type PositionStatus = 'open' | 'closed' | 'liquidated' | 'pending';\n\nexport interface AIPosition {\n id: string;\n strategyId: string;\n strategyName: string;\n pair: string;\n side: PositionSide;\n entryPrice: number;\n currentPrice: number;\n size: number;\n leverage: number;\n margin: number;\n pnl: number;\n pnlPercent: number;\n status: PositionStatus;\n stopLoss?: number;\n takeProfit?: number;\n liquidationPrice?: number;\n openTime: number;\n closeTime?: number;\n chain?: string;\n orderId?: string;\n aiConfidence?: number;\n aiReasoning?: string;\n}\n\n// ── AI Decision Types ─────────────────────────────────────────────────────────\n\nexport type DecisionAction = 'OPEN_LONG' | 'OPEN_SHORT' | 'CLOSE_LONG' | 'CLOSE_SHORT' | 'HOLD' | 'SKIP';\n\nexport interface AIDecision {\n id: string;\n timestamp: number;\n strategyId: string;\n strategyName: string;\n pair: string;\n action: DecisionAction;\n confidence: number;\n reasoning: string;\n indicators: {\n rsi?: number;\n macd?: number;\n ema?: string;\n volume?: number;\n bollinger?: string;\n };\n signals: string[];\n executed: boolean;\n positionId?: string;\n price?: number;\n size?: number;\n leverage?: number;\n}\n\n// ── Risk Status Types ─────────────────────────────────────────────────────────\n\nexport type RiskLevel = 'low' | 'medium' | 'high' | 'critical';\nexport type TradingStatus = 'active' | 'paused' | 'stopped' | 'cooldown';\n\nexport interface RiskStatus {\n timestamp: number;\n // Portfolio exposure\n totalExposure: number;\n maxExposure: number;\n exposurePercent: number;\n // Daily limits\n dailyPnl: number;\n dailyPnlLimit: number;\n dailyPnlPercent: number;\n dailyTradeCount: number;\n dailyTradeLimit: number;\n // Drawdown\n currentDrawdown: number;\n maxDrawdown: number;\n drawdownPercent: number;\n // Position limits\n openPositions: number;\n maxPositions: number;\n // Risk assessment\n riskLevel: RiskLevel;\n tradingStatus: TradingStatus;\n warnings: string[];\n // Per-strategy risk\n strategyRisks?: Record<string, {\n exposure: number;\n drawdown: number;\n riskLevel: RiskLevel;\n }>;\n}\n\nexport const RISK_LEVEL_COLORS: Record<RiskLevel, { color: string; bgColor: string }> = {\n low: { color: '#10B981', bgColor: '#D1FAE5' },\n medium: { color: '#F59E0B', bgColor: '#FEF3C7' },\n high: { color: '#F97316', bgColor: '#FFEDD5' },\n critical: { color: '#EF4444', bgColor: '#FEE2E2' },\n};\n\nexport const TRADING_STATUS_COLORS: Record<TradingStatus, { color: string; bgColor: string }> = {\n active: { color: '#10B981', bgColor: '#D1FAE5' },\n paused: { color: '#F59E0B', bgColor: '#FEF3C7' },\n stopped: { color: '#EF4444', bgColor: '#FEE2E2' },\n cooldown: { color: '#6366F1', bgColor: '#E0E7FF' },\n};\n\n// ── Console Metrics Types ─────────────────────────────────────────────────────\n\nexport interface ConsoleMetrics {\n // NAV & Performance\n nav: number;\n navChange24h: number;\n navChangePercent24h: number;\n // P&L\n totalPnl: number;\n realizedPnl: number;\n unrealizedPnl: number;\n pnlToday: number;\n pnl7d: number;\n pnl30d: number;\n // Trading stats\n totalTrades: number;\n tradesToday: number;\n winRate: number;\n winCount: number;\n lossCount: number;\n avgWin: number;\n avgLoss: number;\n profitFactor: number;\n // Position stats\n openPositions: number;\n totalExposure: number;\n avgLeverage: number;\n // By strategy\n strategyMetrics?: Record<string, {\n pnl: number;\n trades: number;\n winRate: number;\n exposure: number;\n }>;\n}\n\n// ── Agent Types ───────────────────────────────────────────────────────────────\n\nexport type AgentStatus = 'active' | 'paused' | 'idle' | 'error' | 'initializing';\n\nexport interface AIAgent {\n id: string;\n strategyId: string;\n name: string;\n shortName: string;\n color: string;\n status: AgentStatus;\n // Performance\n totalPnl: number;\n pnlToday: number;\n winRate: number;\n totalTrades: number;\n tradesToday: number;\n // Current state\n currentPair?: string;\n currentPrice?: number;\n lastSignal?: string;\n lastSignalConfidence?: number;\n lastActivity?: number;\n // Positions\n openPositions: number;\n totalExposure: number;\n // Risk\n riskLevel: RiskLevel;\n drawdown: number;\n // Config\n riskTolerance: 'low' | 'medium' | 'high';\n primaryIndicators: string[];\n preferredPairs: string[];\n leverageRange: [number, number];\n}\n\nexport const AGENT_STATUS_COLORS: Record<AgentStatus, { color: string; bgColor: string; label: string }> = {\n active: { color: '#10B981', bgColor: '#D1FAE5', label: 'Active' },\n paused: { color: '#F59E0B', bgColor: '#FEF3C7', label: 'Paused' },\n idle: { color: '#6B7280', bgColor: '#F3F4F6', label: 'Idle' },\n error: { color: '#EF4444', bgColor: '#FEE2E2', label: 'Error' },\n initializing: { color: '#3B82F6', bgColor: '#DBEAFE', label: 'Starting' },\n};\n\n// ── Combined Console State ────────────────────────────────────────────────────\n\nexport interface CombinedLogEntry {\n id: string;\n timestamp: number;\n source: 'ai' | 'forex';\n strategyId?: string;\n strategyName?: string;\n type: string;\n message: string;\n data?: Record<string, any>;\n importance: 'low' | 'medium' | 'high';\n}\n\nexport interface TradingConsoleState {\n ai: {\n strategies: StrategyPersonality[];\n agents: AIAgent[];\n positions: AIPosition[];\n decisions: AIDecision[];\n riskStatus: RiskStatus | null;\n simulationLogs: BotLogEntry[];\n botStates: Map<string, BotState>;\n };\n forex: {\n logs: ForexLogEntry[];\n poolTransactions: ForexPoolTransaction[];\n stats: {\n totalPnl: number;\n totalTrades: number;\n totalPips: number;\n totalLots: number;\n };\n };\n metrics: ConsoleMetrics;\n combinedLogs: CombinedLogEntry[];\n}\n\n// ── Hook Options ──────────────────────────────────────────────────────────────\n\nexport interface TradingConsoleOptions {\n simulation?: boolean;\n pollInterval?: number;\n maxLogs?: number;\n strategyIds?: string[];\n autoStart?: boolean;\n}\n\nexport interface AIQuantConsoleOptions {\n strategyIds?: string[];\n pollInterval?: number;\n simulation?: boolean;\n maxLogs?: number;\n}\n\nexport interface AgentConsoleOptions {\n strategyId: string;\n pollInterval?: number;\n simulation?: boolean;\n maxLogs?: number;\n}\n\n// ── Default Values ────────────────────────────────────────────────────────────\n\nexport const DEFAULT_CONSOLE_OPTIONS: TradingConsoleOptions = {\n simulation: true,\n pollInterval: 5000,\n maxLogs: 500,\n autoStart: false,\n};\n\nexport const DEFAULT_RISK_STATUS: RiskStatus = {\n timestamp: Date.now(),\n totalExposure: 0,\n maxExposure: 100000,\n exposurePercent: 0,\n dailyPnl: 0,\n dailyPnlLimit: 5000,\n dailyPnlPercent: 0,\n dailyTradeCount: 0,\n dailyTradeLimit: 50,\n currentDrawdown: 0,\n maxDrawdown: 15,\n drawdownPercent: 0,\n openPositions: 0,\n maxPositions: 10,\n riskLevel: 'low',\n tradingStatus: 'active',\n warnings: [],\n};\n\nexport const DEFAULT_CONSOLE_METRICS: ConsoleMetrics = {\n nav: 0,\n navChange24h: 0,\n navChangePercent24h: 0,\n totalPnl: 0,\n realizedPnl: 0,\n unrealizedPnl: 0,\n pnlToday: 0,\n pnl7d: 0,\n pnl30d: 0,\n totalTrades: 0,\n tradesToday: 0,\n winRate: 0,\n winCount: 0,\n lossCount: 0,\n avgWin: 0,\n avgLoss: 0,\n profitFactor: 0,\n openPositions: 0,\n totalExposure: 0,\n avgLeverage: 0,\n};\n\n// ── Utility Functions ─────────────────────────────────────────────────────────\n\nexport function calculateRiskLevel(\n exposurePercent: number,\n drawdownPercent: number,\n dailyPnlPercent: number\n): RiskLevel {\n const worstMetric = Math.max(exposurePercent, drawdownPercent, Math.abs(dailyPnlPercent));\n if (worstMetric >= 90) return 'critical';\n if (worstMetric >= 70) return 'high';\n if (worstMetric >= 40) return 'medium';\n return 'low';\n}\n\nexport function formatPnl(pnl: number): string {\n const sign = pnl >= 0 ? '+' : '';\n if (Math.abs(pnl) >= 1000000) {\n return `${sign}$${(pnl / 1000000).toFixed(2)}M`;\n }\n if (Math.abs(pnl) >= 1000) {\n return `${sign}$${(pnl / 1000).toFixed(2)}K`;\n }\n return `${sign}$${pnl.toFixed(2)}`;\n}\n\nexport function formatPercent(value: number, showSign = true): string {\n const sign = showSign && value >= 0 ? '+' : '';\n return `${sign}${value.toFixed(2)}%`;\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 Agent Configuration ==========\n\n /**\n * Get all AI agent configurations\n * This returns the full agent setup including tiers, cycles, and trading parameters\n */\n async getAgentConfigs(options?: {\n includeInactive?: boolean;\n agentId?: string;\n }): Promise<ApiResponse<{\n agents?: Array<{\n id: string;\n name: string;\n name_zh: string;\n description: string;\n description_zh: string;\n category: string;\n risk_level: number;\n icon: string;\n color: string;\n tiers: Array<{ tier: number; amount: number; label: string; label_zh: string }>;\n supported_cycles: number[];\n default_cycle: number;\n supported_pairs: string[];\n supported_chains: string[];\n is_active: boolean;\n preview: {\n tier: { tier: number; amount: number; label: string };\n cycle: number;\n dailyLots: number;\n stabilityScore: number;\n roiRange: { min: number; max: number; userMin: number; userMax: number };\n shareRate: number;\n profitEstimate: { monthlyMin: number; monthlyMax: number; cycleMin: number; cycleMax: number };\n };\n }>;\n agent?: any;\n shareRates?: Record<number, number>;\n }>> {\n const params = new URLSearchParams();\n if (options?.includeInactive) params.set('includeInactive', 'true');\n if (options?.agentId) params.set('agentId', options.agentId);\n const query = params.toString();\n return this.request(`/api/v1/agents${query ? `?${query}` : ''}`, { method: 'GET' });\n }\n\n /**\n * Calculate subscription parameters for an agent\n */\n async calculateAgentParams(params: {\n agentId: string;\n amount: number;\n cycleDays: number;\n }): Promise<ApiResponse<{\n dailyLots: number;\n effectiveCapital: number;\n stabilityScore: number;\n roiRange: { min: number; max: number; userMin: number; userMax: number };\n shareRate: number;\n profitEstimate: { monthlyMin: number; monthlyMax: number; cycleMin: number; cycleMax: number };\n }>> {\n return this.request('/api/v1/agents/calculate', {\n method: 'POST',\n body: JSON.stringify(params),\n });\n }\n\n /**\n * Get supported trading pairs from agents\n */\n async getTradingPairs(): Promise<ApiResponse<{\n pairs: string[];\n byAgent: Record<string, string[]>;\n }>> {\n const result = await this.getAgentConfigs();\n if (result.success && result.data?.agents) {\n const allPairs = new Set<string>();\n const byAgent: Record<string, string[]> = {};\n for (const agent of result.data.agents) {\n byAgent[agent.id] = agent.supported_pairs;\n agent.supported_pairs.forEach(p => allPairs.add(p));\n }\n return { success: true, data: { pairs: Array.from(allPairs), byAgent } };\n }\n return { success: false, error: result.error };\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 // ========== Project Management ==========\n\n /**\n * Get user's projects\n */\n async getProjects(options?: {\n isActive?: boolean;\n }): Promise<ApiResponse<{ projects: AdminProject[]; 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/projects${query ? `?${query}` : ''}`, { method: 'GET' });\n }\n\n /**\n * Create a new project for ecosystem partners\n */\n async createProject(params: {\n name: string;\n slug: string;\n settings?: Record<string, unknown>;\n }): Promise<ApiResponse<{ project: AdminProject }>> {\n return this.request('/api/v1/projects', {\n method: 'POST',\n body: JSON.stringify(params),\n });\n }\n\n /**\n * Get project details\n */\n async getProject(projectId: string): Promise<ApiResponse<{ project: AdminProject }>> {\n return this.request(`/api/v1/projects/${projectId}`, { method: 'GET' });\n }\n\n /**\n * Update project settings\n */\n async updateProject(projectId: string, updates: {\n name?: string;\n isActive?: boolean;\n settings?: Record<string, unknown>;\n }): Promise<ApiResponse<{ project: AdminProject }>> {\n return this.request(`/api/v1/projects/${projectId}`, {\n method: 'PATCH',\n body: JSON.stringify(updates),\n });\n }\n\n /**\n * Get project features status\n */\n async getProjectFeatures(projectId: string): Promise<ApiResponse<{\n features: Record<string, {\n enabled: boolean;\n name: string;\n description: string;\n description_zh: string;\n }>;\n availableFeatures: string[];\n }>> {\n return this.request(`/api/v1/projects/${projectId}/features`, { method: 'GET' });\n }\n\n /**\n * Enable/disable features for a project\n */\n async updateProjectFeatures(projectId: string, features: {\n wallet?: boolean;\n swap?: boolean;\n contracts?: boolean;\n fiat?: boolean;\n payments?: boolean;\n quant?: boolean;\n ai?: boolean;\n x402?: boolean;\n }): Promise<ApiResponse<{ project: AdminProject; message: string }>> {\n return this.request(`/api/v1/projects/${projectId}/features`, {\n method: 'PATCH',\n body: JSON.stringify(features),\n });\n }\n\n /**\n * Regenerate project API key\n */\n async regenerateProjectApiKey(projectId: string): Promise<ApiResponse<{ apiKey: string }>> {\n return this.request(`/api/v1/projects/${projectId}/api-key`, { method: 'POST' });\n }\n\n /**\n * Delete project\n */\n async deleteProject(projectId: string): Promise<ApiResponse<{ deleted: boolean }>> {\n return this.request(`/api/v1/projects/${projectId}`, { method: 'DELETE' });\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","/**\n * Usage Tracking Service\n * Tracks AI usage for Personal Assistant and Trading Agent\n */\n\nimport { getConfig } from '../config';\n\n// Usage categories (internal)\nexport type UsageCategory =\n | 'wallet'\n | 'payment'\n | 'exchange_onramper'\n | 'exchange_swap'\n | 'ai_thirdweb'\n | 'ai_trading_engine';\n\n// Display categories (client-facing)\nexport type DisplayCategory = 'personal_assistant' | 'trading_agent';\n\nexport interface UsageRecord {\n userId: string;\n category: UsageCategory;\n action: string;\n requestTokens?: number;\n responseTokens?: number;\n creditsUsed?: number;\n metadata?: Record<string, any>;\n}\n\nexport interface UsageSummary {\n personal_assistant: {\n requestCount: number;\n totalTokens: number;\n totalCredits: number;\n };\n trading_agent: {\n requestCount: number;\n totalTokens: number;\n totalCredits: number;\n };\n}\n\nexport interface UsageActivity {\n type: DisplayCategory;\n action: string;\n tokens: number;\n credits: number;\n timestamp: string;\n}\n\nexport interface UsageResponse {\n summary: UsageSummary;\n dailyBreakdown: Array<{\n date: string;\n personal_assistant: number;\n trading_agent: number;\n }>;\n recentActivity: UsageActivity[];\n period: {\n days: number;\n startDate: string;\n endDate: string;\n };\n}\n\n/**\n * Usage Tracking Service\n */\nexport class UsageService {\n private baseUrl: string;\n private userId: string | null = null;\n\n constructor(baseUrl?: string) {\n this.baseUrl = baseUrl || getConfig().oneEngineUrl || '';\n }\n\n /**\n * Set the current user ID for tracking\n */\n setUserId(userId: string): void {\n this.userId = userId;\n }\n\n /**\n * Record Personal Assistant usage (Thirdweb AI)\n */\n async trackPersonalAssistant(\n action: string,\n tokens?: { request?: number; response?: number },\n credits?: number,\n metadata?: Record<string, any>\n ): Promise<boolean> {\n return this.recordUsage({\n userId: this.userId!,\n category: 'ai_thirdweb',\n action,\n requestTokens: tokens?.request,\n responseTokens: tokens?.response,\n creditsUsed: credits,\n metadata,\n });\n }\n\n /**\n * Record Trading Agent usage (Engine AI)\n */\n async trackTradingAgent(\n action: string,\n credits?: number,\n metadata?: Record<string, any>\n ): Promise<boolean> {\n return this.recordUsage({\n userId: this.userId!,\n category: 'ai_trading_engine',\n action,\n creditsUsed: credits,\n metadata,\n });\n }\n\n /**\n * Record wallet operation usage\n */\n async trackWallet(action: string, metadata?: Record<string, any>): Promise<boolean> {\n return this.recordUsage({\n userId: this.userId!,\n category: 'wallet',\n action,\n metadata,\n });\n }\n\n /**\n * Record payment usage\n */\n async trackPayment(action: string, metadata?: Record<string, any>): Promise<boolean> {\n return this.recordUsage({\n userId: this.userId!,\n category: 'payment',\n action,\n metadata,\n });\n }\n\n /**\n * Record exchange usage (onramper)\n */\n async trackOnramper(action: string, metadata?: Record<string, any>): Promise<boolean> {\n return this.recordUsage({\n userId: this.userId!,\n category: 'exchange_onramper',\n action,\n metadata,\n });\n }\n\n /**\n * Record exchange usage (swap)\n */\n async trackSwap(action: string, metadata?: Record<string, any>): Promise<boolean> {\n return this.recordUsage({\n userId: this.userId!,\n category: 'exchange_swap',\n action,\n metadata,\n });\n }\n\n /**\n * Record any usage\n */\n async recordUsage(record: UsageRecord): Promise<boolean> {\n if (!record.userId) {\n console.warn('[UsageService] No userId set, skipping usage tracking');\n return false;\n }\n\n try {\n const response = await fetch(`${this.baseUrl}/api/v1/usage/user`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n userId: record.userId,\n category: record.category,\n action: record.action,\n requestTokens: record.requestTokens || 0,\n responseTokens: record.responseTokens || 0,\n creditsUsed: record.creditsUsed || 0,\n metadata: record.metadata || {},\n }),\n });\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n console.error('[UsageService] Failed to record usage:', error);\n return false;\n }\n\n return true;\n } catch (error) {\n console.error('[UsageService] Error recording usage:', error);\n return false;\n }\n }\n\n /**\n * Get AI usage summary for current user\n */\n async getAIUsage(days: number = 30): Promise<UsageResponse | null> {\n if (!this.userId) {\n console.warn('[UsageService] No userId set');\n return null;\n }\n\n try {\n const response = await fetch(\n `${this.baseUrl}/api/v1/usage/user?userId=${this.userId}&days=${days}`\n );\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n console.error('[UsageService] Failed to get usage:', error);\n return null;\n }\n\n const result = await response.json();\n return result.data;\n } catch (error) {\n console.error('[UsageService] Error getting usage:', error);\n return null;\n }\n }\n}\n\n// Singleton instance\nlet usageServiceInstance: UsageService | null = null;\n\nexport function getUsageService(): UsageService {\n if (!usageServiceInstance) {\n usageServiceInstance = new UsageService();\n }\n return usageServiceInstance;\n}\n\nexport function createUsageService(baseUrl?: string): UsageService {\n return new UsageService(baseUrl);\n}\n","/**\n * ONE SDK - Forex Trading Services\n * Simulation engines and data generators for StableFX on-chain forex\n */\n\n// Forex RFQ+PvP Simulation Engine\nexport { forexSimulationEngine } from './ForexSimulationEngine';\nexport type { PairState } from './ForexSimulationEngine';\n\n// Pool Data Generator (historical snapshots & transactions)\nexport { ForexPoolDataGenerator } from './ForexPoolDataGenerator';\n\n// Bot Simulation Engine (AI crypto trading strategies)\nexport { botSimulationEngine, STRATEGY_PERSONALITIES } from './BotSimulationEngine';\nexport type {\n BotLogType,\n BotLogEntry,\n IndicatorSnapshot,\n BotState,\n StrategyPersonality,\n} from './BotSimulationEngine';\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 { 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\nimport { initOneSDK, type OneConfig } from '../config';\nimport {\n OneEngineClient,\n createOneEngineClient,\n type EngineWalletBalance,\n type OnrampSessionRequest,\n type SwapQuote,\n type SwapQuoteRequest,\n} from '../services/engine';\nimport type { User, Token, AIStrategy, AIOrder } from '../types';\n\n// ===== Thirdweb Config Types =====\n\nexport interface ThirdwebAuthOptions {\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\nexport interface ThirdwebWalletConfig {\n appName?: string;\n appIcon?: string;\n defaultChain?: Chain;\n supportedChains?: Chain[];\n sponsorGas?: boolean;\n authOptions?: ThirdwebAuthOptions;\n}\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 management\n address: string | null;\n setAddress: (address: string | null) => void;\n // Balance from Engine API\n balance: EngineWalletBalance | null;\n tokens: Token[];\n totalUsd: number;\n isLoading: boolean;\n error: string | null;\n fetchBalance: (chains?: number[]) => Promise<void>;\n refreshBalance: () => Promise<void>;\n // Thirdweb client for wallet connection\n thirdwebClient: ThirdwebClient | null;\n isThirdwebReady: boolean;\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 // Direct thirdweb access\n thirdwebClient: ThirdwebClient | null;\n}\n\nconst OneContext = createContext<OneContextValue | null>(null);\n\n// ===== Default Thirdweb Configuration =====\n\nconst DEFAULT_CHAINS: Chain[] = [base, ethereum, polygon, arbitrum, optimism];\n\nconst DEFAULT_AUTH_OPTIONS: ThirdwebAuthOptions = {\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// ===== Create Wallets Configuration =====\n\nfunction createWalletConfig(config: ThirdwebWalletConfig) {\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// ===== Provider Props =====\ninterface OneProviderProps {\n children: ReactNode;\n config: OneConfig;\n thirdweb?: ThirdwebWalletConfig;\n autoFetchBalance?: boolean;\n}\n\n// ===== Provider Component =====\nexport function OneProvider({\n children,\n config,\n thirdweb: thirdwebConfig = {},\n autoFetchBalance = true,\n}: OneProviderProps) {\n // Initialize SDK synchronously before creating engine client\n useMemo(() => {\n initOneSDK(config);\n }, [config]);\n\n const [isInitialized, setIsInitialized] = useState(true);\n const engine = useMemo(() => createOneEngineClient({\n baseUrl: config.oneEngineUrl,\n clientId: config.oneClientId,\n secretKey: config.oneSecretKey,\n }), [config]);\n\n // ===== Thirdweb State =====\n const [thirdwebClientId, setThirdwebClientId] = useState<string | null>(null);\n const [thirdwebLoading, setThirdwebLoading] = useState(true);\n const [thirdwebError, setThirdwebError] = useState<string | null>(null);\n\n // Fetch thirdweb clientId from Engine on mount\n useEffect(() => {\n const fetchClientConfig = async () => {\n try {\n const response = await fetch(`${config.oneEngineUrl}/v1/config/thirdweb`);\n\n if (response.ok) {\n const data = await response.json();\n if (data.success && data.data?.clientId) {\n setThirdwebClientId(data.data.clientId);\n } else {\n // Fallback to environment variable\n const envClientId = typeof window !== 'undefined'\n ? (window as any).__NEXT_PUBLIC_THIRDWEB_CLIENT_ID\n : process.env.NEXT_PUBLIC_THIRDWEB_CLIENT_ID;\n if (envClientId) {\n setThirdwebClientId(envClientId);\n } else {\n setThirdwebError('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 setThirdwebClientId(envClientId);\n } else {\n setThirdwebError('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 setThirdwebClientId(envClientId);\n } else {\n console.warn('Failed to fetch thirdweb config:', err);\n // Don't set error - thirdweb is optional\n }\n } finally {\n setThirdwebLoading(false);\n }\n };\n\n fetchClientConfig();\n }, [config.oneEngineUrl]);\n\n // Create thirdweb client once we have clientId\n const thirdwebClient = useMemo(() => {\n if (!thirdwebClientId) return null;\n return createThirdwebClient({ clientId: thirdwebClientId });\n }, [thirdwebClientId]);\n\n // Create wallet configuration\n const wallets = useMemo(() => createWalletConfig(thirdwebConfig), [thirdwebConfig]);\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 thirdwebClient,\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 thirdwebClient,\n isThirdwebReady: !thirdwebLoading && !!thirdwebClient,\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 thirdwebClient,\n thirdwebLoading,\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 // Wrap with ThirdwebProvider if client is available\n const content = (\n <OneContext.Provider value={contextValue}>\n {children}\n </OneContext.Provider>\n );\n\n // If thirdweb is ready, wrap with ThirdwebProvider\n if (thirdwebClient) {\n return (\n <BaseThirdwebProvider>\n {content}\n </BaseThirdwebProvider>\n );\n }\n\n return content;\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\nexport function useThirdwebClient(): ThirdwebClient | null {\n const { thirdwebClient } = useOne();\n return thirdwebClient;\n}\n\n// Export context for advanced usage\nexport { OneContext };\n\n// Export thirdweb utilities for convenience\nexport { inAppWallet, smartWallet } from 'thirdweb/wallets';\nexport { base, ethereum, polygon, arbitrum, optimism } from 'thirdweb/chains';\nexport type { Chain } from 'thirdweb/chains';\nexport type { ThirdwebClient } from 'thirdweb';\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';\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 // Show loading state if client is not ready\n if (!client) {\n return (\n <button\n disabled\n className={className}\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 opacity: 0.5,\n cursor: 'not-allowed',\n ...style,\n }}\n >\n Initializing...\n </button>\n );\n }\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';\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 // Show loading state if client is not ready\n if (!client) {\n return (\n <div className={className} style={{ ...style, padding: '20px', textAlign: 'center', color: '#9ca3af' }}>\n Initializing payment...\n </div>\n );\n }\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';\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 // Show loading state if client is not ready\n if (!client && !preparedTx) {\n return (\n <button\n disabled\n className={className}\n style={{ ...ONE_BUTTON_DISABLED_STYLE, ...style, opacity: 0.5 }}\n >\n Initializing...\n </button>\n );\n }\n\n // Prepare transaction if not already provided\n const transaction = preparedTx || (client ? prepareTransaction({\n to,\n value,\n data,\n chain,\n client,\n }) : null);\n\n if (!transaction) {\n return (\n <button\n disabled\n className={className}\n style={{ ...ONE_BUTTON_DISABLED_STYLE, ...style, opacity: 0.5 }}\n >\n Initializing...\n </button>\n );\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';\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 = !!client && isValidAddress(recipient) && isValidAmount(amount) && !isPending;\n\n const handleSend = useCallback(async () => {\n if (!account || !canSend || !client) 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';\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: client as any,\n chain: base,\n address: walletAddress,\n enabled: !!client,\n } as any);\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';\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: '0x6B175474E89094C44Da98b954EedeAC495271d0F', 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 (!client || !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: 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 = client && 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';\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';\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 && client ? (\n <MediaRenderer\n client={client}\n src={nft.image}\n style={{ width: '100%', height: '100%', objectFit: 'cover' }}\n />\n ) : nft.image ? (\n <img src={nft.image} alt={nft.name} style={{ width: '100%', height: '100%', objectFit: 'cover' }} />\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 client ? (\n <MediaRenderer\n client={client}\n src={selectedNFT.image}\n style={{ width: '100%', borderRadius: '12px', marginBottom: '16px' }}\n />\n ) : (\n <img src={selectedNFT.image} alt={selectedNFT.name} 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","/**\n * OneChainSelector - Multi-chain selection component for AI trading\n * Part of ONE Ecosystem SDK - can be used by any ecosystem partner\n */\n\nimport React from 'react';\nimport { View, Text, StyleSheet, TouchableOpacity, ViewStyle, TextStyle } from 'react-native';\n\n// Chain configuration with branding\nexport const CHAIN_CONFIG: Record<string, { name: string; icon: string; color: string }> = {\n ethereum: { name: 'Ethereum', icon: 'Ξ', color: '#627EEA' },\n arbitrum: { name: 'Arbitrum', icon: '◆', color: '#28A0F0' },\n bsc: { name: 'BSC', icon: '◆', color: '#F3BA2F' },\n base: { name: 'Base', icon: '●', color: '#0052FF' },\n polygon: { name: 'Polygon', icon: '⬡', color: '#8247E5' },\n optimism: { name: 'Optimism', icon: '◉', color: '#FF0420' },\n avalanche: { name: 'Avalanche', icon: '▲', color: '#E84142' },\n linea: { name: 'Linea', icon: '═', color: '#121212' },\n zksync: { name: 'zkSync', icon: '⬢', color: '#8C8DFC' },\n scroll: { name: 'Scroll', icon: '◎', color: '#FFEEDA' },\n};\n\nexport interface OneChainSelectorProps {\n /** List of supported chain IDs */\n supportedChains: string[];\n /** Currently selected chains */\n selectedChains: string[];\n /** Callback when chain selection changes */\n onSelectChain: (chain: string) => void;\n /** Enable multi-select (default: true) */\n multiSelect?: boolean;\n /** Accent color for selected state */\n accentColor?: string;\n /** Section title */\n title?: string;\n /** Section subtitle */\n subtitle?: string;\n /** Minimum required selections (for multi-select) */\n minSelections?: number;\n /** Custom styles */\n style?: ViewStyle;\n /** Custom title style */\n titleStyle?: TextStyle;\n}\n\nexport const OneChainSelector: React.FC<OneChainSelectorProps> = ({\n supportedChains,\n selectedChains,\n onSelectChain,\n multiSelect = true,\n accentColor = '#188775',\n title,\n subtitle,\n minSelections = 1,\n style,\n titleStyle,\n}) => {\n const handleSelect = (chain: string) => {\n if (multiSelect) {\n // In multi-select, prevent deselecting if at minimum\n if (selectedChains.includes(chain) && selectedChains.length <= minSelections) {\n return;\n }\n onSelectChain(chain);\n } else {\n // Single select - always allow selection\n if (!selectedChains.includes(chain)) {\n onSelectChain(chain);\n }\n }\n };\n\n return (\n <View style={[styles.container, style]}>\n {title && <Text style={[styles.title, titleStyle]}>{title}</Text>}\n {subtitle && <Text style={styles.subtitle}>{subtitle}</Text>}\n\n <View style={styles.chainsContainer}>\n {supportedChains.map((chain) => {\n const chainInfo = CHAIN_CONFIG[chain] || { name: chain, icon: '●', color: '#888' };\n const isSelected = selectedChains.includes(chain);\n\n return (\n <TouchableOpacity\n key={chain}\n style={[\n styles.chainChip,\n isSelected && styles.chainChipSelected,\n isSelected && { borderColor: accentColor, backgroundColor: accentColor + '15' }\n ]}\n onPress={() => handleSelect(chain)}\n activeOpacity={0.7}\n >\n <View style={[styles.chainIconBg, { backgroundColor: chainInfo.color + '20' }]}>\n <Text style={[styles.chainIcon, { color: chainInfo.color }]}>{chainInfo.icon}</Text>\n </View>\n <Text style={[\n styles.chainText,\n isSelected && { color: accentColor, fontWeight: '600' }\n ]}>\n {chainInfo.name}\n </Text>\n {isSelected && (\n <Text style={[styles.checkmark, { color: accentColor }]}>✓</Text>\n )}\n </TouchableOpacity>\n );\n })}\n </View>\n\n {multiSelect && selectedChains.length > 0 && (\n <View style={styles.selectedInfo}>\n <Text style={styles.selectedText}>\n {selectedChains.length} chain{selectedChains.length > 1 ? 's' : ''} selected\n </Text>\n </View>\n )}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n marginBottom: 16,\n },\n title: {\n fontSize: 16,\n fontWeight: '600',\n color: '#1a1a1a',\n marginBottom: 4,\n },\n subtitle: {\n fontSize: 12,\n color: '#666',\n marginBottom: 12,\n },\n chainsContainer: {\n flexDirection: 'row',\n flexWrap: 'wrap',\n gap: 8,\n },\n chainChip: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: 12,\n paddingVertical: 8,\n backgroundColor: '#fff',\n borderRadius: 12,\n borderWidth: 2,\n borderColor: '#e5e5e5',\n gap: 8,\n },\n chainChipSelected: {\n borderWidth: 2,\n },\n chainIconBg: {\n width: 28,\n height: 28,\n borderRadius: 14,\n alignItems: 'center',\n justifyContent: 'center',\n },\n chainIcon: {\n fontSize: 14,\n fontWeight: '700',\n },\n chainText: {\n fontSize: 14,\n color: '#666',\n },\n checkmark: {\n fontSize: 16,\n fontWeight: '700',\n },\n selectedInfo: {\n marginTop: 8,\n paddingVertical: 4,\n },\n selectedText: {\n fontSize: 12,\n color: '#888',\n },\n});\n","/**\n * OneTierSelector - Investment tier selection component for AI trading\n * Part of ONE Ecosystem SDK - can be used by any ecosystem partner\n */\n\nimport React from 'react';\nimport { View, Text, StyleSheet, TouchableOpacity, ViewStyle, TextStyle } from 'react-native';\n\nexport interface Tier {\n tier: number;\n amount: number;\n label: string;\n label_zh?: string;\n}\n\nexport interface OneTierSelectorProps {\n /** Available investment tiers */\n tiers: Tier[];\n /** Currently selected tier */\n selectedTier: Tier | null;\n /** Callback when tier selection changes */\n onSelectTier: (tier: Tier) => void;\n /** Accent color for selected state */\n accentColor?: string;\n /** Section title */\n title?: string;\n /** Section subtitle */\n subtitle?: string;\n /** Show recommended badge on middle tier */\n showRecommended?: boolean;\n /** Recommended label text */\n recommendedLabel?: string;\n /** Use Chinese labels */\n useZhLabels?: boolean;\n /** Custom styles */\n style?: ViewStyle;\n /** Custom title style */\n titleStyle?: TextStyle;\n}\n\nexport const OneTierSelector: React.FC<OneTierSelectorProps> = ({\n tiers,\n selectedTier,\n onSelectTier,\n accentColor = '#188775',\n title,\n subtitle,\n showRecommended = true,\n recommendedLabel = 'Recommended',\n useZhLabels = false,\n style,\n titleStyle,\n}) => {\n // Middle tier is usually recommended\n const recommendedTierIndex = Math.floor(tiers.length / 2);\n\n return (\n <View style={[styles.container, style]}>\n {title && <Text style={[styles.title, titleStyle]}>{title}</Text>}\n {subtitle && <Text style={styles.subtitle}>{subtitle}</Text>}\n\n <View style={styles.tiersContainer}>\n {tiers.map((tier, index) => {\n const isSelected = selectedTier?.tier === tier.tier;\n const isRecommended = showRecommended && index === recommendedTierIndex;\n\n return (\n <TouchableOpacity\n key={tier.tier}\n style={[\n styles.tierCard,\n isSelected && styles.tierCardSelected,\n isSelected && { borderColor: accentColor }\n ]}\n onPress={() => onSelectTier(tier)}\n activeOpacity={0.7}\n >\n {isRecommended && (\n <View style={[styles.recommendedBadge, { backgroundColor: accentColor }]}>\n <Text style={styles.recommendedText}>{recommendedLabel}</Text>\n </View>\n )}\n\n <Text style={[\n styles.tierLabel,\n isSelected && { color: accentColor },\n isRecommended && styles.tierLabelWithBadge\n ]}>\n {useZhLabels && tier.label_zh ? tier.label_zh : tier.label}\n </Text>\n\n <Text style={[\n styles.tierAmount,\n isSelected && { color: accentColor }\n ]}>\n ${tier.amount.toLocaleString()}\n </Text>\n\n {isSelected && (\n <View style={[styles.checkCircle, { backgroundColor: accentColor }]}>\n <Text style={styles.checkmark}>✓</Text>\n </View>\n )}\n </TouchableOpacity>\n );\n })}\n </View>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n marginBottom: 16,\n },\n title: {\n fontSize: 16,\n fontWeight: '600',\n color: '#1a1a1a',\n marginBottom: 4,\n },\n subtitle: {\n fontSize: 12,\n color: '#666',\n marginBottom: 12,\n },\n tiersContainer: {\n flexDirection: 'row',\n gap: 8,\n },\n tierCard: {\n flex: 1,\n padding: 16,\n backgroundColor: '#fff',\n borderRadius: 12,\n borderWidth: 2,\n borderColor: '#e5e5e5',\n alignItems: 'center',\n position: 'relative',\n overflow: 'hidden',\n },\n tierCardSelected: {\n backgroundColor: '#fff',\n },\n tierLabel: {\n fontSize: 12,\n color: '#666',\n marginBottom: 4,\n },\n tierLabelWithBadge: {\n marginTop: 16,\n },\n tierAmount: {\n fontSize: 20,\n fontWeight: '700',\n color: '#1a1a1a',\n },\n checkCircle: {\n position: 'absolute',\n top: -8,\n right: -8,\n width: 28,\n height: 28,\n borderRadius: 14,\n alignItems: 'center',\n justifyContent: 'center',\n },\n checkmark: {\n fontSize: 14,\n fontWeight: '700',\n color: '#fff',\n },\n recommendedBadge: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n paddingVertical: 4,\n alignItems: 'center',\n },\n recommendedText: {\n fontSize: 10,\n fontWeight: '700',\n color: '#fff',\n textTransform: 'uppercase',\n },\n});\n","/**\n * OneCycleSelector - Investment cycle selection component for AI trading\n * Part of ONE Ecosystem SDK - can be used by any ecosystem partner\n */\n\nimport React from 'react';\nimport { View, Text, StyleSheet, TouchableOpacity, ViewStyle, TextStyle } from 'react-native';\n\n// Default share rates by cycle (platform takes this percentage)\nexport const DEFAULT_SHARE_RATES: Record<number, number> = {\n 7: 25,\n 14: 22,\n 30: 18,\n 60: 15,\n 90: 12,\n};\n\nexport interface OneCycleSelectorProps {\n /** List of supported cycle days */\n supportedCycles: number[];\n /** Currently selected cycle */\n selectedCycle: number;\n /** Callback when cycle selection changes */\n onSelectCycle: (cycle: number) => void;\n /** Accent color for selected state */\n accentColor?: string;\n /** Section title */\n title?: string;\n /** Section subtitle */\n subtitle?: string;\n /** Custom share rates by cycle (overrides defaults) */\n shareRates?: Record<number, number>;\n /** Days label */\n daysLabel?: string;\n /** Your share label */\n yourShareLabel?: string;\n /** Platform fee label */\n platformFeeLabel?: string;\n /** Custom styles */\n style?: ViewStyle;\n /** Custom title style */\n titleStyle?: TextStyle;\n}\n\nexport const OneCycleSelector: React.FC<OneCycleSelectorProps> = ({\n supportedCycles,\n selectedCycle,\n onSelectCycle,\n accentColor = '#188775',\n title,\n subtitle,\n shareRates = DEFAULT_SHARE_RATES,\n daysLabel = 'days',\n yourShareLabel = 'Your share',\n platformFeeLabel = 'Platform fee',\n style,\n titleStyle,\n}) => {\n return (\n <View style={[styles.container, style]}>\n {title && <Text style={[styles.title, titleStyle]}>{title}</Text>}\n {subtitle && <Text style={styles.subtitle}>{subtitle}</Text>}\n\n <View style={styles.cyclesContainer}>\n {supportedCycles.map((cycle) => {\n const isSelected = selectedCycle === cycle;\n const shareRate = shareRates[cycle] || 20;\n const userRate = 100 - shareRate;\n\n return (\n <TouchableOpacity\n key={cycle}\n style={[\n styles.cycleOption,\n isSelected && styles.cycleOptionSelected,\n isSelected && { borderColor: accentColor, backgroundColor: accentColor + '10' }\n ]}\n onPress={() => onSelectCycle(cycle)}\n activeOpacity={0.7}\n >\n <Text style={[\n styles.cycleDays,\n isSelected && { color: accentColor }\n ]}>\n {cycle}\n </Text>\n <Text style={styles.cycleDaysLabel}>{daysLabel}</Text>\n\n <View style={styles.cycleEarnings}>\n <Text style={[\n styles.cycleEarningsValue,\n isSelected && { color: accentColor }\n ]}>\n {userRate}%\n </Text>\n <Text style={styles.cycleEarningsLabel}>{yourShareLabel}</Text>\n </View>\n\n <Text style={styles.cycleFee}>\n {shareRate}% {platformFeeLabel}\n </Text>\n </TouchableOpacity>\n );\n })}\n </View>\n\n <View style={styles.infoBox}>\n <Text style={styles.infoText}>\n Longer cycles = higher user share\n </Text>\n </View>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n marginBottom: 16,\n },\n title: {\n fontSize: 16,\n fontWeight: '600',\n color: '#1a1a1a',\n marginBottom: 4,\n },\n subtitle: {\n fontSize: 12,\n color: '#666',\n marginBottom: 12,\n },\n cyclesContainer: {\n flexDirection: 'row',\n flexWrap: 'wrap',\n gap: 8,\n },\n cycleOption: {\n flex: 1,\n minWidth: '45%',\n padding: 16,\n borderRadius: 12,\n borderWidth: 2,\n borderColor: '#e5e5e5',\n backgroundColor: '#fff',\n alignItems: 'center',\n },\n cycleOptionSelected: {\n borderWidth: 2,\n },\n cycleDays: {\n fontSize: 28,\n fontWeight: '700',\n color: '#1a1a1a',\n },\n cycleDaysLabel: {\n fontSize: 12,\n color: '#666',\n marginBottom: 8,\n },\n cycleEarnings: {\n alignItems: 'center',\n },\n cycleEarningsValue: {\n fontSize: 18,\n fontWeight: '700',\n color: '#10B981',\n },\n cycleEarningsLabel: {\n fontSize: 11,\n color: '#666',\n },\n cycleFee: {\n fontSize: 11,\n color: '#888',\n marginTop: 4,\n },\n infoBox: {\n marginTop: 12,\n padding: 8,\n backgroundColor: '#f5f5f5',\n borderRadius: 8,\n },\n infoText: {\n fontSize: 12,\n color: '#666',\n textAlign: 'center',\n },\n});\n","/**\n * OnePairSelector - Trading pair selection component for AI trading\n * Part of ONE Ecosystem SDK - can be used by any ecosystem partner\n */\n\nimport React from 'react';\nimport { View, Text, StyleSheet, TouchableOpacity, ViewStyle, TextStyle } from 'react-native';\n\n// Common trading pairs with icons\nexport const PAIR_ICONS: Record<string, string> = {\n 'BTC/USDT': '₿',\n 'ETH/USDT': 'Ξ',\n 'SOL/USDT': '◎',\n 'BNB/USDT': '◆',\n 'XRP/USDT': '✕',\n 'DOGE/USDT': 'Ð',\n 'ADA/USDT': '◈',\n 'AVAX/USDT': '▲',\n 'DOT/USDT': '●',\n 'MATIC/USDT': '⬡',\n 'LINK/USDT': '◇',\n 'UNI/USDT': '🦄',\n 'ATOM/USDT': '⚛',\n 'LTC/USDT': 'Ł',\n 'ARB/USDT': '◆',\n 'OP/USDT': '◉',\n};\n\nexport interface OnePairSelectorProps {\n /** List of supported trading pairs */\n supportedPairs: string[];\n /** Currently selected pairs */\n selectedPairs: string[];\n /** Callback when pair selection changes */\n onTogglePair: (pair: string) => void;\n /** Accent color for selected state */\n accentColor?: string;\n /** Section title */\n title?: string;\n /** Section subtitle */\n subtitle?: string;\n /** Minimum required selections */\n minSelections?: number;\n /** Maximum allowed selections (0 = unlimited) */\n maxSelections?: number;\n /** Custom styles */\n style?: ViewStyle;\n /** Custom title style */\n titleStyle?: TextStyle;\n}\n\nexport const OnePairSelector: React.FC<OnePairSelectorProps> = ({\n supportedPairs,\n selectedPairs,\n onTogglePair,\n accentColor = '#188775',\n title,\n subtitle,\n minSelections = 1,\n maxSelections = 0,\n style,\n titleStyle,\n}) => {\n const handleToggle = (pair: string) => {\n const isSelected = selectedPairs.includes(pair);\n\n // Prevent deselecting below minimum\n if (isSelected && selectedPairs.length <= minSelections) {\n return;\n }\n\n // Prevent selecting above maximum\n if (!isSelected && maxSelections > 0 && selectedPairs.length >= maxSelections) {\n return;\n }\n\n onTogglePair(pair);\n };\n\n return (\n <View style={[styles.container, style]}>\n {title && <Text style={[styles.title, titleStyle]}>{title}</Text>}\n {subtitle && <Text style={styles.subtitle}>{subtitle}</Text>}\n\n <View style={styles.pairsContainer}>\n {supportedPairs.map((pair) => {\n const isSelected = selectedPairs.includes(pair);\n const icon = PAIR_ICONS[pair] || '●';\n const baseSymbol = pair.split('/')[0];\n\n return (\n <TouchableOpacity\n key={pair}\n style={[\n styles.pairChip,\n isSelected && styles.pairChipSelected,\n isSelected && { backgroundColor: accentColor + '15', borderColor: accentColor }\n ]}\n onPress={() => handleToggle(pair)}\n activeOpacity={0.7}\n >\n <Text style={styles.pairIcon}>{icon}</Text>\n <Text style={[\n styles.pairText,\n isSelected && { color: accentColor, fontWeight: '600' }\n ]}>\n {baseSymbol}\n </Text>\n {isSelected && (\n <Text style={[styles.checkmark, { color: accentColor }]}>✓</Text>\n )}\n </TouchableOpacity>\n );\n })}\n </View>\n\n <View style={styles.selectedInfo}>\n <Text style={styles.selectedText}>\n {selectedPairs.length} pair{selectedPairs.length !== 1 ? 's' : ''} selected\n {minSelections > 0 && ` (min: ${minSelections})`}\n {maxSelections > 0 && ` (max: ${maxSelections})`}\n </Text>\n </View>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n marginBottom: 16,\n },\n title: {\n fontSize: 16,\n fontWeight: '600',\n color: '#1a1a1a',\n marginBottom: 4,\n },\n subtitle: {\n fontSize: 12,\n color: '#666',\n marginBottom: 12,\n },\n pairsContainer: {\n flexDirection: 'row',\n flexWrap: 'wrap',\n gap: 8,\n },\n pairChip: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: 12,\n paddingVertical: 8,\n backgroundColor: '#fff',\n borderRadius: 8,\n borderWidth: 1,\n borderColor: '#e5e5e5',\n gap: 6,\n },\n pairChipSelected: {\n borderWidth: 2,\n },\n pairIcon: {\n fontSize: 14,\n },\n pairText: {\n fontSize: 14,\n color: '#666',\n },\n checkmark: {\n fontSize: 14,\n fontWeight: '700',\n },\n selectedInfo: {\n marginTop: 8,\n paddingVertical: 4,\n },\n selectedText: {\n fontSize: 12,\n color: '#888',\n },\n});\n","/**\n * OneForexPoolCard - Displays a forex liquidity pool with metrics\n * Part of ONE Ecosystem SDK\n */\n\nimport React from 'react';\nimport { View, Text, StyleSheet, ViewStyle } from 'react-native';\nimport type { ForexPool } from '../../types/forex';\n\nexport interface OneForexPoolCardProps {\n /** Pool data object */\n pool: ForexPool;\n /** Pool display name (provide translated string) */\n poolName?: string;\n /** Whether to show enhanced metrics (APY, flow, tx count) */\n showMetrics?: boolean;\n /** Custom accent color override */\n accentColor?: string;\n /** Custom container style */\n style?: ViewStyle;\n /** Dark mode */\n dark?: boolean;\n}\n\nexport const OneForexPoolCard: React.FC<OneForexPoolCardProps> = ({\n pool,\n poolName,\n showMetrics = true,\n accentColor,\n style,\n dark = true,\n}) => {\n const color = accentColor || pool.color;\n const bg = dark ? '#111111' : '#ffffff';\n const border = dark ? '#1a1a1a' : '#e5e5e5';\n const textPrimary = dark ? '#ffffff' : '#1a1a1a';\n const textSecondary = dark ? '#9ca3af' : '#666666';\n const textMuted = dark ? '#666666' : '#999999';\n const barBg = dark ? '#1a1a1a' : '#e5e5e5';\n\n return (\n <View style={[styles.container, { backgroundColor: bg, borderColor: border }, style]}>\n <View style={styles.header}>\n <View style={[styles.dot, { backgroundColor: color }]} />\n <Text style={[styles.name, { color: textPrimary }]}>\n {poolName || pool.nameKey}\n </Text>\n <Text style={[styles.alloc, { color: textSecondary }]}>\n {(pool.allocation * 100).toFixed(0)}%\n </Text>\n </View>\n\n <View style={[styles.barOuter, { backgroundColor: barBg }]}>\n <View style={[styles.barFill, { width: `${pool.utilization * 100}%`, backgroundColor: color }]} />\n </View>\n\n <View style={styles.statsRow}>\n <Text style={[styles.statValue, { color: textSecondary }]}>\n ${(pool.totalSize / 1_000_000).toFixed(1)}M\n </Text>\n <Text style={[styles.statLabel, { color: textMuted }]}>\n {(pool.utilization * 100).toFixed(1)}% util\n </Text>\n </View>\n\n {showMetrics && (\n <View style={[styles.metricsRow, { borderTopColor: border }]}>\n <View style={styles.metricItem}>\n <Text style={[styles.metricLabel, { color: textMuted }]}>APY 7d</Text>\n <Text style={[styles.metricValue, { color: '#10B981' }]}>\n {pool.apy7d.toFixed(1)}%\n </Text>\n </View>\n <View style={styles.metricItem}>\n <Text style={[styles.metricLabel, { color: textMuted }]}>24h Flow</Text>\n <Text style={[styles.metricValue, { color: pool.netFlow24h >= 0 ? '#10B981' : '#EF4444' }]}>\n {pool.netFlow24h >= 0 ? '+' : ''}${(pool.netFlow24h / 1000).toFixed(0)}K\n </Text>\n </View>\n <View style={styles.metricItem}>\n <Text style={[styles.metricLabel, { color: textMuted }]}>Txs</Text>\n <Text style={[styles.metricValue, { color: textPrimary }]}>{pool.txCount24h}</Text>\n </View>\n </View>\n )}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: { borderRadius: 8, borderWidth: 1, padding: 14 },\n header: { flexDirection: 'row', alignItems: 'center', marginBottom: 8, gap: 8 },\n dot: { width: 8, height: 8, borderRadius: 4 },\n name: { fontSize: 13, fontWeight: '600', flex: 1 },\n alloc: { fontSize: 12 },\n barOuter: { height: 6, borderRadius: 3, overflow: 'hidden', marginBottom: 6 },\n barFill: { height: '100%', borderRadius: 3 },\n statsRow: { flexDirection: 'row', justifyContent: 'space-between' },\n statValue: { fontSize: 12, fontWeight: '600' },\n statLabel: { fontSize: 11 },\n metricsRow: { flexDirection: 'row', justifyContent: 'space-between', paddingTop: 8, marginTop: 8, borderTopWidth: 1 },\n metricItem: { alignItems: 'center', flex: 1 },\n metricLabel: { fontSize: 9, textTransform: 'uppercase', letterSpacing: 0.5, marginBottom: 2 },\n metricValue: { fontSize: 12, fontWeight: '600' },\n});\n","/**\n * OneForexCapitalSplit - Displays 50/50 capital allocation split\n * Part of ONE Ecosystem SDK\n */\n\nimport React from 'react';\nimport { View, Text, StyleSheet, ViewStyle } from 'react-native';\nimport { FOREX_CAPITAL_SPLIT, FOREX_POOL_DEFAULTS, computePoolAllocations } from '../../types/forex';\n\nexport interface OneForexCapitalSplitProps {\n /** Total investment amount */\n amount: number;\n /** Labels (provide translated strings) */\n labels?: {\n title?: string;\n tradingCapital?: string;\n poolReserves?: string;\n clearing?: string;\n hedging?: string;\n insurance?: string;\n };\n /** Show pool breakdown within reserves */\n showPoolBreakdown?: boolean;\n /** Custom container style */\n style?: ViewStyle;\n /** Dark mode */\n dark?: boolean;\n}\n\nexport const OneForexCapitalSplit: React.FC<OneForexCapitalSplitProps> = ({\n amount,\n labels = {},\n showPoolBreakdown = true,\n style,\n dark = false,\n}) => {\n const allocs = computePoolAllocations(amount);\n const bg = dark ? '#111111' : '#ffffff';\n const border = dark ? '#1a1a1a' : '#e5e5e5';\n const textPrimary = dark ? '#ffffff' : '#1a1a1a';\n const textSecondary = dark ? '#9ca3af' : '#666666';\n const itemBg = dark ? '#0a0a0a' : '#f5f5f5';\n\n return (\n <View style={[styles.container, { backgroundColor: bg, borderColor: border }, style]}>\n {labels.title && <Text style={[styles.title, { color: textPrimary }]}>{labels.title}</Text>}\n\n <View style={styles.splitRow}>\n <View style={[styles.splitItem, { backgroundColor: itemBg }]}>\n <View style={[styles.dot, { backgroundColor: '#0EA5E9' }]} />\n <Text style={[styles.splitLabel, { color: textSecondary }]}>\n {labels.tradingCapital || 'Active Trading (RFQ)'}\n </Text>\n <Text style={[styles.splitPct, { color: textSecondary }]}>50%</Text>\n <Text style={[styles.splitAmt, { color: textPrimary }]}>\n ${allocs.tradingCapital.toLocaleString()}\n </Text>\n </View>\n <View style={[styles.splitItem, { backgroundColor: itemBg }]}>\n <View style={[styles.dot, { backgroundColor: '#8B5CF6' }]} />\n <Text style={[styles.splitLabel, { color: textSecondary }]}>\n {labels.poolReserves || 'Pool Reserves'}\n </Text>\n <Text style={[styles.splitPct, { color: textSecondary }]}>50%</Text>\n <Text style={[styles.splitAmt, { color: textPrimary }]}>\n ${allocs.totalPoolReserves.toLocaleString()}\n </Text>\n </View>\n </View>\n\n {showPoolBreakdown && amount > 0 && (\n <View style={[styles.breakdown, { borderTopColor: border }]}>\n {FOREX_POOL_DEFAULTS.map(pool => {\n const poolAmt = allocs[pool.id as keyof typeof allocs] as number;\n return (\n <View key={pool.id} style={styles.poolRow}>\n <View style={[styles.poolDot, { backgroundColor: pool.color }]} />\n <Text style={[styles.poolName, { color: textSecondary }]}>\n {(labels as any)?.[pool.id] || pool.nameKey}\n </Text>\n <View style={[styles.poolBar, { backgroundColor: dark ? '#1a1a1a' : '#e5e5e5' }]}>\n <View style={[styles.poolBarFill, { width: `${pool.allocation * 100}%`, backgroundColor: pool.color }]} />\n </View>\n <Text style={[styles.poolAmt, { color: textPrimary }]}>\n ${poolAmt.toLocaleString()}\n </Text>\n </View>\n );\n })}\n </View>\n )}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: { borderRadius: 8, borderWidth: 1, padding: 14 },\n title: { fontSize: 14, fontWeight: '600', marginBottom: 12 },\n splitRow: { gap: 8 },\n splitItem: { flexDirection: 'row', alignItems: 'center', paddingVertical: 10, paddingHorizontal: 12, borderRadius: 8 },\n dot: { width: 10, height: 10, borderRadius: 5, marginRight: 8 },\n splitLabel: { flex: 1, fontSize: 13, fontWeight: '500' },\n splitPct: { fontSize: 12, fontWeight: '600', marginRight: 12 },\n splitAmt: { fontSize: 14, fontWeight: '700' },\n breakdown: { marginTop: 12, paddingTop: 12, borderTopWidth: 1 },\n poolRow: { flexDirection: 'row', alignItems: 'center', marginBottom: 8 },\n poolDot: { width: 8, height: 8, borderRadius: 4, marginRight: 8 },\n poolName: { width: 80, fontSize: 12 },\n poolBar: { flex: 1, height: 6, borderRadius: 3, overflow: 'hidden', marginHorizontal: 8 },\n poolBarFill: { height: '100%', borderRadius: 3 },\n poolAmt: { width: 70, fontSize: 12, fontWeight: '600', textAlign: 'right' },\n});\n","/**\n * OneForexConsoleView - Displays live forex trading console log feed\n * Part of ONE Ecosystem SDK\n */\n\nimport React, { useRef, useEffect } from 'react';\nimport { View, Text, StyleSheet, ScrollView, ViewStyle, Platform } from 'react-native';\nimport type { ForexLogEntry } from '../../types/forex';\nimport { FOREX_LOG_COLORS } from '../../types/console';\n\nconst MONO = Platform.OS === 'ios' ? 'Courier New' : 'monospace';\n\nexport interface OneForexConsoleViewProps {\n /** Array of log entries to display */\n logs: ForexLogEntry[];\n /** Maximum visible entries */\n maxItems?: number;\n /** Auto-scroll to bottom */\n autoScroll?: boolean;\n /** Custom container style */\n style?: ViewStyle;\n /** Console height */\n height?: number;\n}\n\nexport const OneForexConsoleView: React.FC<OneForexConsoleViewProps> = ({\n logs,\n maxItems = 100,\n autoScroll = true,\n style,\n height = 400,\n}) => {\n const scrollRef = useRef<ScrollView>(null);\n const visibleLogs = logs.slice(-maxItems);\n\n useEffect(() => {\n if (autoScroll && scrollRef.current) {\n setTimeout(() => scrollRef.current?.scrollToEnd({ animated: true }), 50);\n }\n }, [logs.length, autoScroll]);\n\n const formatTime = (ts: number) => {\n const d = new Date(ts);\n return `${d.getHours().toString().padStart(2, '0')}:${d.getMinutes().toString().padStart(2, '0')}:${d.getSeconds().toString().padStart(2, '0')}`;\n };\n\n return (\n <View style={[styles.container, { height }, style]}>\n <ScrollView ref={scrollRef} style={styles.scroll} contentContainerStyle={styles.scrollContent}>\n {visibleLogs.map((log) => (\n <View key={log.id} style={styles.logRow}>\n <Text style={styles.timestamp}>{formatTime(log.timestamp)}</Text>\n <Text style={[styles.type, { color: FOREX_LOG_COLORS[log.type] || '#9CA3AF' }]}>\n {log.type.padEnd(8)}\n </Text>\n <Text style={[\n styles.message,\n log.importance === 'high' && styles.messageHigh,\n ]} numberOfLines={2}>\n {log.message}\n </Text>\n </View>\n ))}\n {visibleLogs.length === 0 && (\n <Text style={styles.emptyText}>Waiting for trading activity...</Text>\n )}\n </ScrollView>\n </View>\n );\n};\n\n// Terminal palette – always dark regardless of app theme\nconst T = {\n base: '#0A0A0C',\n border: '#2A2A35',\n muted: '#555560',\n secondary: '#9CA3AF',\n};\n\nconst styles = StyleSheet.create({\n container: { backgroundColor: T.base, borderRadius: 8, borderWidth: 1, borderColor: T.border, overflow: 'hidden' },\n scroll: { flex: 1 },\n scrollContent: { padding: 8 },\n logRow: { flexDirection: 'row', paddingVertical: 3 },\n timestamp: { fontFamily: MONO, fontSize: 10, color: T.muted, width: 60, marginRight: 6 },\n type: { fontFamily: MONO, fontSize: 10, fontWeight: '700', width: 65, marginRight: 6 },\n message: { fontFamily: MONO, fontSize: 10, color: T.secondary, flex: 1 },\n messageHigh: { color: '#ffffff', fontWeight: '600' },\n emptyText: { fontFamily: MONO, fontSize: 11, color: T.muted, textAlign: 'center', paddingVertical: 40 },\n});\n","/**\n * OneForexPairSelector - Stablecoin FX pair selection for forex trading\n * Part of ONE Ecosystem SDK\n */\n\nimport React from 'react';\nimport { View, Text, StyleSheet, TouchableOpacity, ViewStyle } from 'react-native';\nimport { FOREX_CURRENCY_PAIRS } from '../../types/forex';\nimport type { ForexCurrencyPair } from '../../types/forex';\n\nexport interface OneForexPairSelectorProps {\n /** Currently selected pair IDs */\n selectedPairs: string[];\n /** Callback when a pair is toggled */\n onTogglePair: (pairId: string) => void;\n /** Accent color for selected state */\n accentColor?: string;\n /** Section title */\n title?: string;\n /** Section subtitle */\n subtitle?: string;\n /** Custom pairs list (defaults to FOREX_CURRENCY_PAIRS) */\n pairs?: ForexCurrencyPair[];\n /** Custom container style */\n style?: ViewStyle;\n}\n\nexport const OneForexPairSelector: React.FC<OneForexPairSelectorProps> = ({\n selectedPairs,\n onTogglePair,\n accentColor = '#0EA5E9',\n title,\n subtitle,\n pairs = FOREX_CURRENCY_PAIRS,\n style,\n}) => {\n const handleToggle = (pairId: string) => {\n if (selectedPairs.includes(pairId) && selectedPairs.length <= 1) return;\n onTogglePair(pairId);\n };\n\n return (\n <View style={[styles.container, style]}>\n {title && <Text style={styles.title}>{title}</Text>}\n {subtitle && <Text style={styles.subtitle}>{subtitle}</Text>}\n\n <View style={styles.pairGrid}>\n {pairs.map((pair) => {\n const isSelected = selectedPairs.includes(pair.id);\n return (\n <TouchableOpacity\n key={pair.id}\n style={[\n styles.pairBtn,\n isSelected && styles.pairBtnActive,\n isSelected && { borderColor: accentColor, backgroundColor: accentColor + '08' },\n ]}\n onPress={() => handleToggle(pair.id)}\n activeOpacity={0.7}\n >\n <Text style={styles.pairFlag}>{pair.flag}</Text>\n <View style={styles.pairInfo}>\n <Text style={[styles.pairSymbol, isSelected && { color: accentColor, fontWeight: '600' }]}>\n {pair.symbol}\n </Text>\n <Text style={styles.pairName}>{pair.name}</Text>\n </View>\n {isSelected && (\n <Text style={[styles.check, { color: accentColor }]}>{'\\u2713'}</Text>\n )}\n </TouchableOpacity>\n );\n })}\n </View>\n\n <Text style={styles.selectedInfo}>\n {selectedPairs.length} pair{selectedPairs.length !== 1 ? 's' : ''} selected (min: 1)\n </Text>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: { marginBottom: 16 },\n title: { fontSize: 16, fontWeight: '600', color: '#1a1a1a', marginBottom: 4 },\n subtitle: { fontSize: 12, color: '#666', marginBottom: 12 },\n pairGrid: { gap: 8 },\n pairBtn: {\n flexDirection: 'row', alignItems: 'center',\n paddingHorizontal: 12, paddingVertical: 12,\n borderRadius: 8, borderWidth: 1.5, borderColor: '#e5e5e5',\n backgroundColor: '#fff', gap: 10,\n },\n pairBtnActive: { borderWidth: 2 },\n pairFlag: { fontSize: 20 },\n pairInfo: { flex: 1 },\n pairSymbol: { fontSize: 14, color: '#666' },\n pairName: { fontSize: 11, color: '#999' },\n check: { fontSize: 16, fontWeight: '700' },\n selectedInfo: { fontSize: 12, color: '#888', marginTop: 8 },\n});\n","/**\n * OneForexTradeHistory - Displays trade history with settlement details\n * Part of ONE Ecosystem SDK\n */\n\nimport React from 'react';\nimport { View, Text, StyleSheet, ScrollView, ViewStyle, Platform } from 'react-native';\nimport type { ForexTradeRecord } from '../../types/forex';\n\nconst MONO = Platform.OS === 'ios' ? 'Courier New' : 'monospace';\n\nexport interface OneForexTradeHistoryProps {\n /** Trade records to display */\n trades: ForexTradeRecord[];\n /** Maximum trades to show */\n maxItems?: number;\n /** Show settlement details (clearing/hedging/insurance fees) */\n showSettlementDetails?: boolean;\n /** Show transaction hash */\n showTxHash?: boolean;\n /** Empty state text */\n emptyText?: string;\n /** Custom container style */\n style?: ViewStyle;\n}\n\nexport const OneForexTradeHistory: React.FC<OneForexTradeHistoryProps> = ({\n trades,\n maxItems = 50,\n showSettlementDetails = true,\n showTxHash = true,\n emptyText = 'No trade history yet',\n style,\n}) => {\n const visibleTrades = trades.slice(-maxItems).reverse();\n\n if (visibleTrades.length === 0) {\n return (\n <View style={[styles.empty, style]}>\n <Text style={styles.emptyText}>{emptyText}</Text>\n </View>\n );\n }\n\n return (\n <ScrollView style={[styles.container, style]} contentContainerStyle={styles.scrollContent}>\n {visibleTrades.map((trade) => (\n <View key={trade.id} style={styles.card}>\n <View style={styles.header}>\n <Text style={styles.pair}>{trade.pairSymbol}</Text>\n <View style={[\n styles.sideBadge,\n { backgroundColor: trade.side === 'BUY' ? '#10B98118' : '#EF444418', borderColor: trade.side === 'BUY' ? '#10B98140' : '#EF444440' },\n ]}>\n <Text style={[styles.sideText, { color: trade.side === 'BUY' ? '#10B981' : '#EF4444' }]}>\n {trade.side}\n </Text>\n </View>\n <Text style={[styles.pnl, { color: trade.pnl >= 0 ? '#10B981' : '#EF4444' }]}>\n {trade.pnl >= 0 ? '+' : ''}${trade.pnl.toFixed(2)}\n </Text>\n </View>\n\n <View style={styles.details}>\n <Text style={styles.detail}>\n {trade.lots.toFixed(2)} lots | {trade.pips >= 0 ? '+' : ''}{trade.pips.toFixed(1)} pips\n </Text>\n <Text style={styles.time}>{new Date(trade.timestamp).toLocaleString()}</Text>\n </View>\n\n {showSettlementDetails && trade.clearingFee !== undefined && (\n <View style={styles.settlement}>\n <Text style={styles.settlementText}>\n CLR: ${trade.clearingFee.toFixed(2)} | HDG: ${(trade.hedgingCost || 0).toFixed(2)} | INS: ${(trade.insuranceReserve || 0).toFixed(2)}\n </Text>\n </View>\n )}\n\n {showTxHash && trade.txHash && (\n <Text style={styles.txHash}>\n {trade.txHash.slice(0, 10)}...{trade.txHash.slice(-6)}\n </Text>\n )}\n </View>\n ))}\n </ScrollView>\n );\n};\n\nconst styles = StyleSheet.create({\n container: { flex: 1 },\n scrollContent: { paddingBottom: 16 },\n empty: { alignItems: 'center', justifyContent: 'center', padding: 40 },\n emptyText: { fontSize: 14, color: '#666' },\n card: { backgroundColor: '#111111', borderRadius: 6, borderWidth: 1, borderColor: '#1a1a1a', padding: 12, marginBottom: 8 },\n header: { flexDirection: 'row', alignItems: 'center', gap: 8 },\n pair: { fontSize: 13, fontWeight: '600', color: '#ffffff' },\n sideBadge: { paddingHorizontal: 6, paddingVertical: 2, borderRadius: 3, borderWidth: 1 },\n sideText: { fontSize: 9, fontWeight: '700', letterSpacing: 0.5 },\n pnl: { fontFamily: MONO, marginLeft: 'auto', fontSize: 13, fontWeight: '700' },\n details: { flexDirection: 'row', justifyContent: 'space-between', marginTop: 6 },\n detail: { fontFamily: MONO, fontSize: 11, color: '#9ca3af' },\n time: { fontSize: 11, color: '#666' },\n settlement: { marginTop: 6, paddingTop: 6, borderTopWidth: 1, borderTopColor: '#1a1a1a' },\n settlementText: { fontFamily: MONO, fontSize: 10, color: '#666' },\n txHash: { fontFamily: MONO, fontSize: 9, color: '#444', marginTop: 2 },\n});\n","/**\n * OneMetricsDashboard - Displays trading metrics and performance\n * Part of ONE Ecosystem SDK\n */\n\nimport React from 'react';\nimport { View, Text, StyleSheet, ViewStyle, Platform } from 'react-native';\nimport type { ConsoleMetrics } from '../../../types/console';\nimport { formatPnl, formatPercent } from '../../../types/console';\n\nconst MONO = Platform.OS === 'ios' ? 'Courier New' : 'monospace';\n\nexport interface OneMetricsDashboardProps {\n metrics: ConsoleMetrics;\n showNAV?: boolean;\n showPnL?: boolean;\n showTrades?: boolean;\n showPositions?: boolean;\n showStrategies?: boolean;\n compact?: boolean;\n style?: ViewStyle;\n dark?: boolean;\n}\n\nexport const OneMetricsDashboard: React.FC<OneMetricsDashboardProps> = ({\n metrics,\n showNAV = true,\n showPnL = true,\n showTrades = true,\n showPositions = true,\n showStrategies = false,\n compact = false,\n style,\n dark = true,\n}) => {\n const bg = dark ? '#111111' : '#ffffff';\n const border = dark ? '#2A2A35' : '#E5E7EB';\n const textPrimary = dark ? '#ffffff' : '#111827';\n const textSecondary = dark ? '#9CA3AF' : '#6B7280';\n const textMuted = dark ? '#555560' : '#9CA3AF';\n const cardBg = dark ? '#1A1A1F' : '#F9FAFB';\n\n const MetricCard = ({\n label,\n value,\n subValue,\n valueColor,\n icon,\n }: {\n label: string;\n value: string;\n subValue?: string;\n valueColor?: string;\n icon?: string;\n }) => (\n <View style={[styles.metricCard, { backgroundColor: cardBg }]}>\n <View style={styles.metricHeader}>\n {icon && <Text style={styles.metricIcon}>{icon}</Text>}\n <Text style={[styles.metricLabel, { color: textMuted }]}>{label}</Text>\n </View>\n <Text style={[styles.metricValue, { color: valueColor || textPrimary }]}>\n {value}\n </Text>\n {subValue && (\n <Text style={[styles.metricSubValue, { color: textSecondary }]}>\n {subValue}\n </Text>\n )}\n </View>\n );\n\n if (compact) {\n return (\n <View style={[styles.compactContainer, { backgroundColor: bg, borderColor: border }, style]}>\n <View style={styles.compactItem}>\n <Text style={[styles.compactLabel, { color: textMuted }]}>NAV</Text>\n <Text style={[styles.compactValue, { color: textPrimary }]}>\n ${metrics.nav.toFixed(0)}\n </Text>\n </View>\n <View style={styles.compactDivider} />\n <View style={styles.compactItem}>\n <Text style={[styles.compactLabel, { color: textMuted }]}>P&L</Text>\n <Text style={[\n styles.compactValue,\n { color: metrics.totalPnl >= 0 ? '#10B981' : '#EF4444' }\n ]}>\n {formatPnl(metrics.totalPnl)}\n </Text>\n </View>\n <View style={styles.compactDivider} />\n <View style={styles.compactItem}>\n <Text style={[styles.compactLabel, { color: textMuted }]}>Win</Text>\n <Text style={[styles.compactValue, { color: textPrimary }]}>\n {(metrics.winRate * 100).toFixed(0)}%\n </Text>\n </View>\n <View style={styles.compactDivider} />\n <View style={styles.compactItem}>\n <Text style={[styles.compactLabel, { color: textMuted }]}>Pos</Text>\n <Text style={[styles.compactValue, { color: textPrimary }]}>\n {metrics.openPositions}\n </Text>\n </View>\n </View>\n );\n }\n\n return (\n <View style={[styles.container, { backgroundColor: bg, borderColor: border }, style]}>\n {/* NAV Section */}\n {showNAV && (\n <View style={styles.navSection}>\n <View style={styles.navMain}>\n <Text style={[styles.navLabel, { color: textMuted }]}>Net Asset Value</Text>\n <Text style={[styles.navValue, { color: textPrimary }]}>\n ${metrics.nav.toLocaleString('en-US', { minimumFractionDigits: 2 })}\n </Text>\n <View style={styles.navChangeRow}>\n <Text style={[\n styles.navChange,\n { color: metrics.navChange24h >= 0 ? '#10B981' : '#EF4444' }\n ]}>\n {metrics.navChange24h >= 0 ? '+' : ''}${metrics.navChange24h.toFixed(2)}\n </Text>\n <Text style={[\n styles.navChangePercent,\n { color: metrics.navChange24h >= 0 ? '#10B981' : '#EF4444' }\n ]}>\n ({formatPercent(metrics.navChangePercent24h)})\n </Text>\n <Text style={[styles.navPeriod, { color: textMuted }]}>24h</Text>\n </View>\n </View>\n </View>\n )}\n\n {/* P&L Grid */}\n {showPnL && (\n <View style={styles.section}>\n <Text style={[styles.sectionTitle, { color: textMuted }]}>Profit & Loss</Text>\n <View style={styles.metricsGrid}>\n <MetricCard\n label=\"Total P&L\"\n value={formatPnl(metrics.totalPnl)}\n valueColor={metrics.totalPnl >= 0 ? '#10B981' : '#EF4444'}\n />\n <MetricCard\n label=\"Realized\"\n value={formatPnl(metrics.realizedPnl)}\n valueColor={metrics.realizedPnl >= 0 ? '#10B981' : '#EF4444'}\n />\n <MetricCard\n label=\"Unrealized\"\n value={formatPnl(metrics.unrealizedPnl)}\n valueColor={metrics.unrealizedPnl >= 0 ? '#10B981' : '#EF4444'}\n />\n <MetricCard\n label=\"Today\"\n value={formatPnl(metrics.pnlToday)}\n valueColor={metrics.pnlToday >= 0 ? '#10B981' : '#EF4444'}\n />\n </View>\n <View style={styles.pnlPeriods}>\n <View style={styles.pnlPeriodItem}>\n <Text style={[styles.pnlPeriodLabel, { color: textMuted }]}>7D</Text>\n <Text style={[\n styles.pnlPeriodValue,\n { color: metrics.pnl7d >= 0 ? '#10B981' : '#EF4444' }\n ]}>\n {formatPnl(metrics.pnl7d)}\n </Text>\n </View>\n <View style={styles.pnlPeriodItem}>\n <Text style={[styles.pnlPeriodLabel, { color: textMuted }]}>30D</Text>\n <Text style={[\n styles.pnlPeriodValue,\n { color: metrics.pnl30d >= 0 ? '#10B981' : '#EF4444' }\n ]}>\n {formatPnl(metrics.pnl30d)}\n </Text>\n </View>\n </View>\n </View>\n )}\n\n {/* Trading Stats */}\n {showTrades && (\n <View style={styles.section}>\n <Text style={[styles.sectionTitle, { color: textMuted }]}>Trading Stats</Text>\n <View style={styles.metricsGrid}>\n <MetricCard\n label=\"Total Trades\"\n value={metrics.totalTrades.toString()}\n subValue={`${metrics.tradesToday} today`}\n />\n <MetricCard\n label=\"Win Rate\"\n value={`${(metrics.winRate * 100).toFixed(1)}%`}\n subValue={`${metrics.winCount}W / ${metrics.lossCount}L`}\n valueColor={metrics.winRate >= 0.5 ? '#10B981' : '#EF4444'}\n />\n <MetricCard\n label=\"Avg Win\"\n value={formatPnl(metrics.avgWin)}\n valueColor=\"#10B981\"\n />\n <MetricCard\n label=\"Avg Loss\"\n value={formatPnl(metrics.avgLoss)}\n valueColor=\"#EF4444\"\n />\n </View>\n {metrics.profitFactor > 0 && metrics.profitFactor !== Infinity && (\n <View style={styles.profitFactorRow}>\n <Text style={[styles.profitFactorLabel, { color: textMuted }]}>Profit Factor</Text>\n <Text style={[\n styles.profitFactorValue,\n { color: metrics.profitFactor >= 1.5 ? '#10B981' : metrics.profitFactor >= 1 ? '#F59E0B' : '#EF4444' }\n ]}>\n {metrics.profitFactor.toFixed(2)}\n </Text>\n </View>\n )}\n </View>\n )}\n\n {/* Position Stats */}\n {showPositions && (\n <View style={styles.section}>\n <Text style={[styles.sectionTitle, { color: textMuted }]}>Position Overview</Text>\n <View style={styles.positionStats}>\n <View style={styles.positionItem}>\n <Text style={[styles.positionLabel, { color: textMuted }]}>Open Positions</Text>\n <Text style={[styles.positionValue, { color: textPrimary }]}>\n {metrics.openPositions}\n </Text>\n </View>\n <View style={styles.positionItem}>\n <Text style={[styles.positionLabel, { color: textMuted }]}>Total Exposure</Text>\n <Text style={[styles.positionValue, { color: textPrimary }]}>\n ${metrics.totalExposure.toFixed(0)}\n </Text>\n </View>\n <View style={styles.positionItem}>\n <Text style={[styles.positionLabel, { color: textMuted }]}>Avg Leverage</Text>\n <Text style={[styles.positionValue, { color: textPrimary }]}>\n {metrics.avgLeverage.toFixed(1)}x\n </Text>\n </View>\n </View>\n </View>\n )}\n\n {/* Strategy Breakdown */}\n {showStrategies && metrics.strategyMetrics && Object.keys(metrics.strategyMetrics).length > 0 && (\n <View style={styles.section}>\n <Text style={[styles.sectionTitle, { color: textMuted }]}>Strategy Performance</Text>\n {Object.entries(metrics.strategyMetrics).map(([strategyId, data]) => (\n <View key={strategyId} style={styles.strategyRow}>\n <Text style={[styles.strategyName, { color: textSecondary }]}>\n {strategyId.replace('-01', '').replace('-', ' ')}\n </Text>\n <View style={styles.strategyStats}>\n <Text style={[\n styles.strategyPnl,\n { color: data.pnl >= 0 ? '#10B981' : '#EF4444' }\n ]}>\n {formatPnl(data.pnl)}\n </Text>\n <Text style={[styles.strategyWinRate, { color: textMuted }]}>\n {(data.winRate * 100).toFixed(0)}%\n </Text>\n <Text style={[styles.strategyTrades, { color: textMuted }]}>\n {data.trades} trades\n </Text>\n </View>\n </View>\n ))}\n </View>\n )}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n borderRadius: 12,\n borderWidth: 1,\n padding: 14,\n gap: 16,\n },\n compactContainer: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-around',\n borderRadius: 8,\n borderWidth: 1,\n paddingVertical: 10,\n paddingHorizontal: 12,\n },\n compactItem: {\n alignItems: 'center',\n gap: 2,\n },\n compactLabel: {\n fontFamily: MONO,\n fontSize: 9,\n textTransform: 'uppercase',\n },\n compactValue: {\n fontFamily: MONO,\n fontSize: 13,\n fontWeight: '600',\n },\n compactDivider: {\n width: 1,\n height: 24,\n backgroundColor: '#2A2A35',\n },\n navSection: {\n alignItems: 'center',\n paddingBottom: 10,\n borderBottomWidth: 1,\n borderBottomColor: '#2A2A35',\n },\n navMain: {\n alignItems: 'center',\n gap: 4,\n },\n navLabel: {\n fontFamily: MONO,\n fontSize: 10,\n textTransform: 'uppercase',\n },\n navValue: {\n fontSize: 28,\n fontWeight: '700',\n fontFamily: MONO,\n },\n navChangeRow: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 6,\n },\n navChange: {\n fontFamily: MONO,\n fontSize: 14,\n fontWeight: '600',\n },\n navChangePercent: {\n fontFamily: MONO,\n fontSize: 12,\n },\n navPeriod: {\n fontFamily: MONO,\n fontSize: 10,\n },\n section: {\n gap: 10,\n },\n sectionTitle: {\n fontFamily: MONO,\n fontSize: 10,\n textTransform: 'uppercase',\n letterSpacing: 1,\n },\n metricsGrid: {\n flexDirection: 'row',\n flexWrap: 'wrap',\n gap: 8,\n },\n metricCard: {\n width: '48%',\n padding: 10,\n borderRadius: 8,\n gap: 4,\n },\n metricHeader: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 4,\n },\n metricIcon: {\n fontSize: 12,\n },\n metricLabel: {\n fontFamily: MONO,\n fontSize: 9,\n textTransform: 'uppercase',\n },\n metricValue: {\n fontFamily: MONO,\n fontSize: 16,\n fontWeight: '700',\n },\n metricSubValue: {\n fontFamily: MONO,\n fontSize: 10,\n },\n pnlPeriods: {\n flexDirection: 'row',\n justifyContent: 'flex-end',\n gap: 16,\n },\n pnlPeriodItem: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 6,\n },\n pnlPeriodLabel: {\n fontFamily: MONO,\n fontSize: 10,\n },\n pnlPeriodValue: {\n fontFamily: MONO,\n fontSize: 12,\n fontWeight: '600',\n },\n profitFactorRow: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n paddingTop: 8,\n borderTopWidth: 1,\n borderTopColor: '#2A2A35',\n },\n profitFactorLabel: {\n fontFamily: MONO,\n fontSize: 10,\n textTransform: 'uppercase',\n },\n profitFactorValue: {\n fontFamily: MONO,\n fontSize: 16,\n fontWeight: '700',\n },\n positionStats: {\n flexDirection: 'row',\n justifyContent: 'space-around',\n },\n positionItem: {\n alignItems: 'center',\n gap: 4,\n },\n positionLabel: {\n fontFamily: MONO,\n fontSize: 9,\n textTransform: 'uppercase',\n },\n positionValue: {\n fontFamily: MONO,\n fontSize: 16,\n fontWeight: '600',\n },\n strategyRow: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n paddingVertical: 6,\n borderBottomWidth: 1,\n borderBottomColor: '#1A1A1F',\n },\n strategyName: {\n fontSize: 12,\n textTransform: 'capitalize',\n flex: 1,\n },\n strategyStats: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 12,\n },\n strategyPnl: {\n fontFamily: MONO,\n fontSize: 12,\n fontWeight: '600',\n width: 70,\n textAlign: 'right',\n },\n strategyWinRate: {\n fontFamily: MONO,\n fontSize: 11,\n width: 35,\n textAlign: 'right',\n },\n strategyTrades: {\n fontFamily: MONO,\n fontSize: 10,\n width: 60,\n textAlign: 'right',\n },\n});\n","/**\n * OneRiskIndicator - Displays risk status with visual indicators\n * Part of ONE Ecosystem SDK\n */\n\nimport React from 'react';\nimport { View, Text, StyleSheet, ViewStyle, Platform } from 'react-native';\nimport type { RiskStatus, RiskLevel, TradingStatus } from '../../../types/console';\nimport { RISK_LEVEL_COLORS, TRADING_STATUS_COLORS } from '../../../types/console';\n\nconst MONO = Platform.OS === 'ios' ? 'Courier New' : 'monospace';\n\nexport interface OneRiskIndicatorProps {\n riskStatus: RiskStatus;\n showDetails?: boolean;\n showWarnings?: boolean;\n showLimits?: boolean;\n compact?: boolean;\n style?: ViewStyle;\n dark?: boolean;\n}\n\nexport const OneRiskIndicator: React.FC<OneRiskIndicatorProps> = ({\n riskStatus,\n showDetails = true,\n showWarnings = true,\n showLimits = true,\n compact = false,\n style,\n dark = true,\n}) => {\n const bg = dark ? '#111111' : '#ffffff';\n const border = dark ? '#2A2A35' : '#E5E7EB';\n const textPrimary = dark ? '#ffffff' : '#111827';\n const textSecondary = dark ? '#9CA3AF' : '#6B7280';\n const textMuted = dark ? '#555560' : '#9CA3AF';\n\n const riskConfig = RISK_LEVEL_COLORS[riskStatus.riskLevel];\n const statusConfig = TRADING_STATUS_COLORS[riskStatus.tradingStatus];\n\n // Progress bar component\n const ProgressBar = ({\n value,\n max,\n color,\n label,\n showValue = true,\n }: {\n value: number;\n max: number;\n color: string;\n label: string;\n showValue?: boolean;\n }) => {\n const percent = Math.min((value / max) * 100, 100);\n const barColor = percent > 80 ? '#EF4444' : percent > 60 ? '#F59E0B' : color;\n\n return (\n <View style={styles.progressItem}>\n <View style={styles.progressHeader}>\n <Text style={[styles.progressLabel, { color: textMuted }]}>{label}</Text>\n {showValue && (\n <Text style={[styles.progressValue, { color: textSecondary }]}>\n {value.toFixed(0)} / {max.toFixed(0)}\n </Text>\n )}\n </View>\n <View style={[styles.progressTrack, { backgroundColor: dark ? '#1A1A1F' : '#E5E7EB' }]}>\n <View\n style={[\n styles.progressFill,\n { width: `${percent}%`, backgroundColor: barColor }\n ]}\n />\n </View>\n <Text style={[styles.progressPercent, { color: barColor }]}>\n {percent.toFixed(1)}%\n </Text>\n </View>\n );\n };\n\n if (compact) {\n return (\n <View style={[styles.compactContainer, { backgroundColor: bg, borderColor: border }, style]}>\n <View style={[styles.riskBadge, { backgroundColor: riskConfig.bgColor }]}>\n <View style={[styles.riskDot, { backgroundColor: riskConfig.color }]} />\n <Text style={[styles.riskText, { color: riskConfig.color }]}>\n {riskStatus.riskLevel.toUpperCase()}\n </Text>\n </View>\n <View style={[styles.statusBadge, { backgroundColor: statusConfig.bgColor }]}>\n <Text style={[styles.statusText, { color: statusConfig.color }]}>\n {riskStatus.tradingStatus.toUpperCase()}\n </Text>\n </View>\n <Text style={[styles.compactExposure, { color: textSecondary }]}>\n Exp: {riskStatus.exposurePercent.toFixed(0)}%\n </Text>\n <Text style={[\n styles.compactPnl,\n { color: riskStatus.dailyPnl >= 0 ? '#10B981' : '#EF4444' }\n ]}>\n {riskStatus.dailyPnl >= 0 ? '+' : ''}{riskStatus.dailyPnl.toFixed(0)}\n </Text>\n </View>\n );\n }\n\n return (\n <View style={[styles.container, { backgroundColor: bg, borderColor: border }, style]}>\n {/* Header */}\n <View style={styles.header}>\n <View style={styles.headerLeft}>\n <Text style={[styles.title, { color: textPrimary }]}>Risk Status</Text>\n <View style={[styles.riskBadgeLarge, { backgroundColor: riskConfig.bgColor }]}>\n <View style={[styles.riskDotLarge, { backgroundColor: riskConfig.color }]} />\n <Text style={[styles.riskTextLarge, { color: riskConfig.color }]}>\n {riskStatus.riskLevel.toUpperCase()}\n </Text>\n </View>\n </View>\n <View style={[styles.tradingStatusBadge, { backgroundColor: statusConfig.bgColor }]}>\n <View style={[styles.statusIndicator, { backgroundColor: statusConfig.color }]} />\n <Text style={[styles.tradingStatusText, { color: statusConfig.color }]}>\n {riskStatus.tradingStatus === 'active' ? 'Trading Active' :\n riskStatus.tradingStatus === 'paused' ? 'Trading Paused' :\n riskStatus.tradingStatus === 'stopped' ? 'Trading Stopped' : 'Cooldown'}\n </Text>\n </View>\n </View>\n\n {/* Progress Bars */}\n {showLimits && (\n <View style={styles.progressSection}>\n <ProgressBar\n value={riskStatus.totalExposure}\n max={riskStatus.maxExposure}\n color=\"#3B82F6\"\n label=\"Portfolio Exposure\"\n />\n <ProgressBar\n value={riskStatus.currentDrawdown}\n max={riskStatus.maxDrawdown}\n color=\"#8B5CF6\"\n label=\"Drawdown\"\n showValue={false}\n />\n <ProgressBar\n value={Math.abs(riskStatus.dailyPnl)}\n max={riskStatus.dailyPnlLimit}\n color={riskStatus.dailyPnl >= 0 ? '#10B981' : '#EF4444'}\n label=\"Daily P&L Limit\"\n />\n <ProgressBar\n value={riskStatus.openPositions}\n max={riskStatus.maxPositions}\n color=\"#F59E0B\"\n label=\"Open Positions\"\n />\n </View>\n )}\n\n {/* Details Grid */}\n {showDetails && (\n <View style={styles.detailsGrid}>\n <View style={styles.detailItem}>\n <Text style={[styles.detailLabel, { color: textMuted }]}>Exposure</Text>\n <Text style={[styles.detailValue, { color: textPrimary }]}>\n ${riskStatus.totalExposure.toFixed(0)}\n </Text>\n </View>\n <View style={styles.detailItem}>\n <Text style={[styles.detailLabel, { color: textMuted }]}>Daily P&L</Text>\n <Text style={[\n styles.detailValue,\n { color: riskStatus.dailyPnl >= 0 ? '#10B981' : '#EF4444' }\n ]}>\n {riskStatus.dailyPnl >= 0 ? '+' : ''}${riskStatus.dailyPnl.toFixed(0)}\n </Text>\n </View>\n <View style={styles.detailItem}>\n <Text style={[styles.detailLabel, { color: textMuted }]}>Drawdown</Text>\n <Text style={[styles.detailValue, { color: textPrimary }]}>\n {riskStatus.currentDrawdown.toFixed(2)}%\n </Text>\n </View>\n <View style={styles.detailItem}>\n <Text style={[styles.detailLabel, { color: textMuted }]}>Trades Today</Text>\n <Text style={[styles.detailValue, { color: textPrimary }]}>\n {riskStatus.dailyTradeCount} / {riskStatus.dailyTradeLimit}\n </Text>\n </View>\n </View>\n )}\n\n {/* Warnings */}\n {showWarnings && riskStatus.warnings.length > 0 && (\n <View style={[styles.warningsSection, { backgroundColor: dark ? '#1A1A1F' : '#FEF3C7' }]}>\n <Text style={[styles.warningsTitle, { color: '#F59E0B' }]}>Warnings</Text>\n {riskStatus.warnings.map((warning, index) => (\n <View key={index} style={styles.warningItem}>\n <Text style={styles.warningIcon}>!</Text>\n <Text style={[styles.warningText, { color: textSecondary }]}>{warning}</Text>\n </View>\n ))}\n </View>\n )}\n\n {/* Strategy Risks */}\n {riskStatus.strategyRisks && Object.keys(riskStatus.strategyRisks).length > 0 && (\n <View style={styles.strategyRisksSection}>\n <Text style={[styles.sectionTitle, { color: textMuted }]}>Strategy Risk Breakdown</Text>\n {Object.entries(riskStatus.strategyRisks).map(([strategyId, risk]) => {\n const strategyRiskConfig = RISK_LEVEL_COLORS[risk.riskLevel];\n return (\n <View key={strategyId} style={styles.strategyRiskItem}>\n <Text style={[styles.strategyName, { color: textSecondary }]}>\n {strategyId.replace('-01', '')}\n </Text>\n <View style={[styles.strategyRiskBadge, { backgroundColor: strategyRiskConfig.bgColor }]}>\n <Text style={[styles.strategyRiskText, { color: strategyRiskConfig.color }]}>\n {risk.riskLevel.toUpperCase()}\n </Text>\n </View>\n <Text style={[styles.strategyExposure, { color: textMuted }]}>\n ${risk.exposure.toFixed(0)}\n </Text>\n </View>\n );\n })}\n </View>\n )}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n borderRadius: 12,\n borderWidth: 1,\n padding: 14,\n gap: 14,\n },\n compactContainer: {\n flexDirection: 'row',\n alignItems: 'center',\n borderRadius: 8,\n borderWidth: 1,\n paddingHorizontal: 12,\n paddingVertical: 8,\n gap: 10,\n },\n header: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'flex-start',\n },\n headerLeft: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 10,\n },\n title: {\n fontSize: 15,\n fontWeight: '600',\n },\n riskBadge: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: 8,\n paddingVertical: 4,\n borderRadius: 12,\n gap: 4,\n },\n riskBadgeLarge: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: 10,\n paddingVertical: 5,\n borderRadius: 12,\n gap: 5,\n },\n riskDot: {\n width: 6,\n height: 6,\n borderRadius: 3,\n },\n riskDotLarge: {\n width: 8,\n height: 8,\n borderRadius: 4,\n },\n riskText: {\n fontFamily: MONO,\n fontSize: 10,\n fontWeight: '700',\n },\n riskTextLarge: {\n fontFamily: MONO,\n fontSize: 11,\n fontWeight: '700',\n },\n statusBadge: {\n paddingHorizontal: 8,\n paddingVertical: 4,\n borderRadius: 12,\n },\n statusText: {\n fontFamily: MONO,\n fontSize: 9,\n fontWeight: '700',\n },\n tradingStatusBadge: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: 10,\n paddingVertical: 5,\n borderRadius: 12,\n gap: 5,\n },\n statusIndicator: {\n width: 6,\n height: 6,\n borderRadius: 3,\n },\n tradingStatusText: {\n fontSize: 11,\n fontWeight: '600',\n },\n compactExposure: {\n fontFamily: MONO,\n fontSize: 11,\n flex: 1,\n },\n compactPnl: {\n fontFamily: MONO,\n fontSize: 12,\n fontWeight: '600',\n },\n progressSection: {\n gap: 10,\n },\n progressItem: {\n gap: 4,\n },\n progressHeader: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n progressLabel: {\n fontFamily: MONO,\n fontSize: 10,\n textTransform: 'uppercase',\n },\n progressValue: {\n fontFamily: MONO,\n fontSize: 10,\n },\n progressTrack: {\n height: 6,\n borderRadius: 3,\n overflow: 'hidden',\n },\n progressFill: {\n height: '100%',\n borderRadius: 3,\n },\n progressPercent: {\n fontFamily: MONO,\n fontSize: 10,\n textAlign: 'right',\n },\n detailsGrid: {\n flexDirection: 'row',\n flexWrap: 'wrap',\n gap: 10,\n },\n detailItem: {\n width: '48%',\n gap: 2,\n },\n detailLabel: {\n fontFamily: MONO,\n fontSize: 9,\n textTransform: 'uppercase',\n },\n detailValue: {\n fontFamily: MONO,\n fontSize: 14,\n fontWeight: '600',\n },\n warningsSection: {\n padding: 10,\n borderRadius: 8,\n gap: 6,\n },\n warningsTitle: {\n fontFamily: MONO,\n fontSize: 10,\n fontWeight: '700',\n textTransform: 'uppercase',\n },\n warningItem: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n },\n warningIcon: {\n width: 16,\n height: 16,\n backgroundColor: '#F59E0B',\n color: '#ffffff',\n textAlign: 'center',\n lineHeight: 16,\n fontSize: 12,\n fontWeight: '700',\n borderRadius: 8,\n overflow: 'hidden',\n },\n warningText: {\n fontSize: 12,\n flex: 1,\n },\n strategyRisksSection: {\n gap: 8,\n paddingTop: 10,\n borderTopWidth: 1,\n borderTopColor: '#2A2A35',\n },\n sectionTitle: {\n fontFamily: MONO,\n fontSize: 10,\n textTransform: 'uppercase',\n },\n strategyRiskItem: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 10,\n },\n strategyName: {\n fontFamily: MONO,\n fontSize: 11,\n flex: 1,\n textTransform: 'capitalize',\n },\n strategyRiskBadge: {\n paddingHorizontal: 6,\n paddingVertical: 2,\n borderRadius: 4,\n },\n strategyRiskText: {\n fontFamily: MONO,\n fontSize: 9,\n fontWeight: '700',\n },\n strategyExposure: {\n fontFamily: MONO,\n fontSize: 10,\n width: 60,\n textAlign: 'right',\n },\n});\n","/**\n * OneTradingConsole - Total unified console view (AI + Forex)\n * Part of ONE Ecosystem SDK\n */\n\nimport React, { useRef, useEffect, useState } from 'react';\nimport { View, Text, StyleSheet, ScrollView, ViewStyle, Platform, TouchableOpacity } from 'react-native';\nimport type { CombinedLogEntry, ConsoleMetrics, RiskStatus, AIAgent } from '../../../types/console';\nimport type { BotLogEntry } from '../../../services/forex/BotSimulationEngine';\nimport type { ForexLogEntry } from '../../../types/forex';\nimport { AI_LOG_COLORS, FOREX_LOG_COLORS } from '../../../types/console';\nimport { OneMetricsDashboard } from './OneMetricsDashboard';\nimport { OneRiskIndicator } from './OneRiskIndicator';\n\nconst MONO = Platform.OS === 'ios' ? 'Courier New' : 'monospace';\n\nexport interface OneTradingConsoleProps {\n mode?: 'combined' | 'ai-only' | 'forex-only';\n // Combined logs\n combinedLogs?: CombinedLogEntry[];\n // Or separate logs\n aiLogs?: BotLogEntry[];\n forexLogs?: ForexLogEntry[];\n // Data\n agents?: AIAgent[];\n metrics?: ConsoleMetrics;\n riskStatus?: RiskStatus | null;\n // Display options\n maxLogs?: number;\n autoScroll?: boolean;\n showMetrics?: boolean;\n showRisk?: boolean;\n showControls?: boolean;\n consoleHeight?: number;\n // Controls\n isAIRunning?: boolean;\n isForexRunning?: boolean;\n onStartAI?: () => void;\n onStopAI?: () => void;\n onStartForex?: () => void;\n onStopForex?: () => void;\n onStartAll?: () => void;\n onStopAll?: () => void;\n onClearLogs?: () => void;\n onRefresh?: () => void;\n // Callbacks\n onAgentSelect?: (agent: AIAgent) => void;\n style?: ViewStyle;\n dark?: boolean;\n}\n\nexport const OneTradingConsole: React.FC<OneTradingConsoleProps> = ({\n mode = 'combined',\n combinedLogs = [],\n aiLogs = [],\n forexLogs = [],\n agents = [],\n metrics,\n riskStatus,\n maxLogs = 200,\n autoScroll = true,\n showMetrics = true,\n showRisk = true,\n showControls = true,\n consoleHeight = 400,\n isAIRunning = false,\n isForexRunning = false,\n onStartAI,\n onStopAI,\n onStartForex,\n onStopForex,\n onStartAll,\n onStopAll,\n onClearLogs,\n onRefresh,\n onAgentSelect,\n style,\n dark = true,\n}) => {\n const bg = dark ? '#0A0A0C' : '#ffffff';\n const consoleBg = dark ? '#0A0A0C' : '#F9FAFB';\n const cardBg = dark ? '#111111' : '#F9FAFB';\n const border = dark ? '#2A2A35' : '#E5E7EB';\n const textPrimary = dark ? '#ffffff' : '#111827';\n const textSecondary = dark ? '#9CA3AF' : '#6B7280';\n const textMuted = dark ? '#555560' : '#9CA3AF';\n\n const scrollRef = useRef<ScrollView>(null);\n const [selectedTab, setSelectedTab] = useState<'console' | 'metrics' | 'risk' | 'agents'>('console');\n\n // Merge logs if not using combined\n const allLogs: CombinedLogEntry[] = combinedLogs.length > 0\n ? combinedLogs\n : [\n ...aiLogs.map(log => ({\n id: log.id,\n timestamp: log.timestamp,\n source: 'ai' as const,\n strategyId: log.strategyId,\n strategyName: log.strategyName,\n type: log.type,\n message: log.message,\n data: log.data,\n importance: log.importance,\n })),\n ...forexLogs.map(log => ({\n id: log.id,\n timestamp: log.timestamp,\n source: 'forex' as const,\n type: log.type,\n message: log.message,\n data: log.data,\n importance: log.importance,\n })),\n ].sort((a, b) => a.timestamp - b.timestamp);\n\n // Filter logs based on mode\n const filteredLogs = allLogs.filter(log => {\n if (mode === 'ai-only') return log.source === 'ai';\n if (mode === 'forex-only') return log.source === 'forex';\n return true;\n });\n\n const visibleLogs = filteredLogs.slice(-maxLogs);\n\n const isAnyRunning = isAIRunning || isForexRunning;\n\n // Auto-scroll\n useEffect(() => {\n if (autoScroll && scrollRef.current && selectedTab === 'console') {\n setTimeout(() => scrollRef.current?.scrollToEnd({ animated: true }), 50);\n }\n }, [visibleLogs.length, autoScroll, selectedTab]);\n\n const formatTime = (ts: number) => {\n const d = new Date(ts);\n return `${d.getHours().toString().padStart(2, '0')}:${d.getMinutes().toString().padStart(2, '0')}:${d.getSeconds().toString().padStart(2, '0')}`;\n };\n\n const getLogColor = (log: CombinedLogEntry): string => {\n if (log.source === 'ai') {\n return AI_LOG_COLORS[log.type as keyof typeof AI_LOG_COLORS] || textMuted;\n }\n return FOREX_LOG_COLORS[log.type as keyof typeof FOREX_LOG_COLORS] || textMuted;\n };\n\n const activeAgents = agents.filter(a => a.status === 'active');\n const totalPnl = agents.reduce((sum, a) => sum + a.totalPnl, 0);\n\n return (\n <View style={[styles.container, { backgroundColor: bg }, style]}>\n {/* Header */}\n <View style={[styles.header, { borderBottomColor: border }]}>\n <View style={styles.headerLeft}>\n <Text style={[styles.title, { color: textPrimary }]}>Trading Console</Text>\n <View style={styles.statusBadges}>\n {mode !== 'forex-only' && (\n <View style={[\n styles.statusBadge,\n { backgroundColor: isAIRunning ? '#D1FAE5' : '#F3F4F6' }\n ]}>\n <View style={[\n styles.statusDot,\n { backgroundColor: isAIRunning ? '#10B981' : '#9CA3AF' }\n ]} />\n <Text style={[\n styles.statusText,\n { color: isAIRunning ? '#10B981' : '#9CA3AF' }\n ]}>\n AI\n </Text>\n </View>\n )}\n {mode !== 'ai-only' && (\n <View style={[\n styles.statusBadge,\n { backgroundColor: isForexRunning ? '#DBEAFE' : '#F3F4F6' }\n ]}>\n <View style={[\n styles.statusDot,\n { backgroundColor: isForexRunning ? '#3B82F6' : '#9CA3AF' }\n ]} />\n <Text style={[\n styles.statusText,\n { color: isForexRunning ? '#3B82F6' : '#9CA3AF' }\n ]}>\n FX\n </Text>\n </View>\n )}\n </View>\n </View>\n {showControls && (\n <View style={styles.headerControls}>\n {onClearLogs && (\n <TouchableOpacity\n style={[styles.controlBtn, { backgroundColor: cardBg }]}\n onPress={onClearLogs}\n activeOpacity={0.7}\n >\n <Text style={[styles.controlBtnText, { color: textSecondary }]}>Clear</Text>\n </TouchableOpacity>\n )}\n {onRefresh && (\n <TouchableOpacity\n style={[styles.controlBtn, { backgroundColor: cardBg }]}\n onPress={onRefresh}\n activeOpacity={0.7}\n >\n <Text style={[styles.controlBtnText, { color: textSecondary }]}>Refresh</Text>\n </TouchableOpacity>\n )}\n {(onStartAll || onStopAll) && (\n <TouchableOpacity\n style={[\n styles.controlBtn,\n { backgroundColor: isAnyRunning ? '#FEE2E2' : '#D1FAE5' }\n ]}\n onPress={isAnyRunning ? onStopAll : onStartAll}\n activeOpacity={0.7}\n >\n <Text style={[\n styles.controlBtnText,\n { color: isAnyRunning ? '#EF4444' : '#10B981' }\n ]}>\n {isAnyRunning ? 'Stop' : 'Start'}\n </Text>\n </TouchableOpacity>\n )}\n </View>\n )}\n </View>\n\n {/* Quick Stats */}\n <View style={[styles.quickStats, { backgroundColor: cardBg, borderBottomColor: border }]}>\n <View style={styles.quickStatItem}>\n <Text style={[styles.quickStatLabel, { color: textMuted }]}>Agents</Text>\n <Text style={[styles.quickStatValue, { color: textPrimary }]}>\n {activeAgents.length}/{agents.length}\n </Text>\n </View>\n <View style={styles.quickStatDivider} />\n <View style={styles.quickStatItem}>\n <Text style={[styles.quickStatLabel, { color: textMuted }]}>P&L</Text>\n <Text style={[\n styles.quickStatValue,\n { color: totalPnl >= 0 ? '#10B981' : '#EF4444' }\n ]}>\n {totalPnl >= 0 ? '+' : ''}${totalPnl.toFixed(2)}\n </Text>\n </View>\n <View style={styles.quickStatDivider} />\n <View style={styles.quickStatItem}>\n <Text style={[styles.quickStatLabel, { color: textMuted }]}>Logs</Text>\n <Text style={[styles.quickStatValue, { color: textPrimary }]}>\n {visibleLogs.length}\n </Text>\n </View>\n </View>\n\n {/* Tab Bar */}\n <View style={[styles.tabBar, { borderBottomColor: border }]}>\n <TouchableOpacity\n style={[styles.tab, selectedTab === 'console' && styles.tabActive]}\n onPress={() => setSelectedTab('console')}\n activeOpacity={0.7}\n >\n <Text style={[\n styles.tabText,\n { color: selectedTab === 'console' ? '#3B82F6' : textSecondary }\n ]}>\n Console\n </Text>\n </TouchableOpacity>\n {showMetrics && metrics && (\n <TouchableOpacity\n style={[styles.tab, selectedTab === 'metrics' && styles.tabActive]}\n onPress={() => setSelectedTab('metrics')}\n activeOpacity={0.7}\n >\n <Text style={[\n styles.tabText,\n { color: selectedTab === 'metrics' ? '#3B82F6' : textSecondary }\n ]}>\n Metrics\n </Text>\n </TouchableOpacity>\n )}\n {showRisk && riskStatus && (\n <TouchableOpacity\n style={[styles.tab, selectedTab === 'risk' && styles.tabActive]}\n onPress={() => setSelectedTab('risk')}\n activeOpacity={0.7}\n >\n <Text style={[\n styles.tabText,\n { color: selectedTab === 'risk' ? '#3B82F6' : textSecondary }\n ]}>\n Risk\n </Text>\n </TouchableOpacity>\n )}\n {agents.length > 0 && (\n <TouchableOpacity\n style={[styles.tab, selectedTab === 'agents' && styles.tabActive]}\n onPress={() => setSelectedTab('agents')}\n activeOpacity={0.7}\n >\n <Text style={[\n styles.tabText,\n { color: selectedTab === 'agents' ? '#3B82F6' : textSecondary }\n ]}>\n Agents\n </Text>\n </TouchableOpacity>\n )}\n </View>\n\n {/* Content */}\n {selectedTab === 'console' && (\n <View style={[styles.consoleContainer, { backgroundColor: consoleBg, height: consoleHeight }]}>\n <ScrollView\n ref={scrollRef}\n style={styles.consoleScroll}\n contentContainerStyle={styles.consoleContent}\n >\n {visibleLogs.map((log) => (\n <View key={log.id} style={styles.logRow}>\n <Text style={[styles.logTime, { color: textMuted }]}>\n {formatTime(log.timestamp)}\n </Text>\n <View style={[\n styles.sourceBadge,\n { backgroundColor: log.source === 'ai' ? '#1E3A5F' : '#1E3A3A' }\n ]}>\n <Text style={[\n styles.sourceText,\n { color: log.source === 'ai' ? '#60A5FA' : '#5EEAD4' }\n ]}>\n {log.source === 'ai' ? (log.strategyName || 'AI') : 'FX'}\n </Text>\n </View>\n <Text style={[styles.logType, { color: getLogColor(log) }]}>\n {log.type.padEnd(10)}\n </Text>\n <Text\n style={[\n styles.logMessage,\n { color: log.importance === 'high' ? textPrimary : textSecondary },\n log.importance === 'high' && styles.logMessageHigh,\n ]}\n numberOfLines={2}\n >\n {log.message}\n </Text>\n </View>\n ))}\n {visibleLogs.length === 0 && (\n <View style={styles.emptyState}>\n <Text style={[styles.emptyIcon, { color: textMuted }]}>⚡</Text>\n <Text style={[styles.emptyTitle, { color: textSecondary }]}>\n No Activity Yet\n </Text>\n <Text style={[styles.emptyText, { color: textMuted }]}>\n Start the trading simulation to see live activity\n </Text>\n </View>\n )}\n </ScrollView>\n </View>\n )}\n\n {selectedTab === 'metrics' && metrics && (\n <ScrollView style={styles.tabContent} contentContainerStyle={styles.tabContentInner}>\n <OneMetricsDashboard\n metrics={metrics}\n showNAV={true}\n showPnL={true}\n showTrades={true}\n showPositions={true}\n showStrategies={true}\n dark={dark}\n />\n </ScrollView>\n )}\n\n {selectedTab === 'risk' && riskStatus && (\n <ScrollView style={styles.tabContent} contentContainerStyle={styles.tabContentInner}>\n <OneRiskIndicator\n riskStatus={riskStatus}\n showDetails={true}\n showWarnings={true}\n showLimits={true}\n dark={dark}\n />\n </ScrollView>\n )}\n\n {selectedTab === 'agents' && agents.length > 0 && (\n <ScrollView style={styles.tabContent} contentContainerStyle={styles.tabContentInner}>\n {agents.map(agent => (\n <TouchableOpacity\n key={agent.id}\n style={[styles.agentRow, { backgroundColor: cardBg, borderColor: border }]}\n onPress={() => onAgentSelect?.(agent)}\n activeOpacity={0.7}\n >\n <View style={styles.agentLeft}>\n <View style={[styles.agentDot, { backgroundColor: agent.color }]} />\n <View>\n <Text style={[styles.agentName, { color: textPrimary }]}>{agent.name}</Text>\n <Text style={[styles.agentPair, { color: textMuted }]}>\n {agent.currentPair || 'Idle'}\n </Text>\n </View>\n </View>\n <View style={styles.agentRight}>\n <Text style={[\n styles.agentPnl,\n { color: agent.totalPnl >= 0 ? '#10B981' : '#EF4444' }\n ]}>\n {agent.totalPnl >= 0 ? '+' : ''}${agent.totalPnl.toFixed(2)}\n </Text>\n <View style={[\n styles.agentStatus,\n { backgroundColor: agent.status === 'active' ? '#D1FAE5' : '#F3F4F6' }\n ]}>\n <Text style={[\n styles.agentStatusText,\n { color: agent.status === 'active' ? '#10B981' : '#9CA3AF' }\n ]}>\n {agent.status}\n </Text>\n </View>\n </View>\n </TouchableOpacity>\n ))}\n </ScrollView>\n )}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n borderRadius: 12,\n overflow: 'hidden',\n },\n header: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: 14,\n borderBottomWidth: 1,\n },\n headerLeft: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 10,\n },\n headerControls: {\n flexDirection: 'row',\n gap: 8,\n },\n title: {\n fontSize: 16,\n fontWeight: '700',\n },\n statusBadges: {\n flexDirection: 'row',\n gap: 6,\n },\n statusBadge: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: 6,\n paddingVertical: 3,\n borderRadius: 10,\n gap: 4,\n },\n statusDot: {\n width: 6,\n height: 6,\n borderRadius: 3,\n },\n statusText: {\n fontSize: 10,\n fontWeight: '600',\n },\n controlBtn: {\n paddingHorizontal: 10,\n paddingVertical: 5,\n borderRadius: 6,\n },\n controlBtnText: {\n fontSize: 11,\n fontWeight: '600',\n },\n quickStats: {\n flexDirection: 'row',\n justifyContent: 'space-around',\n alignItems: 'center',\n paddingVertical: 10,\n borderBottomWidth: 1,\n },\n quickStatItem: {\n alignItems: 'center',\n gap: 2,\n },\n quickStatLabel: {\n fontFamily: MONO,\n fontSize: 9,\n textTransform: 'uppercase',\n },\n quickStatValue: {\n fontFamily: MONO,\n fontSize: 14,\n fontWeight: '700',\n },\n quickStatDivider: {\n width: 1,\n height: 24,\n backgroundColor: '#2A2A35',\n },\n tabBar: {\n flexDirection: 'row',\n borderBottomWidth: 1,\n },\n tab: {\n flex: 1,\n paddingVertical: 10,\n alignItems: 'center',\n borderBottomWidth: 2,\n borderBottomColor: 'transparent',\n },\n tabActive: {\n borderBottomColor: '#3B82F6',\n },\n tabText: {\n fontSize: 12,\n fontWeight: '600',\n },\n consoleContainer: {\n overflow: 'hidden',\n },\n consoleScroll: {\n flex: 1,\n },\n consoleContent: {\n padding: 8,\n },\n logRow: {\n flexDirection: 'row',\n alignItems: 'flex-start',\n paddingVertical: 2,\n },\n logTime: {\n fontFamily: MONO,\n fontSize: 10,\n width: 55,\n marginRight: 6,\n },\n sourceBadge: {\n paddingHorizontal: 4,\n paddingVertical: 1,\n borderRadius: 3,\n marginRight: 6,\n minWidth: 28,\n alignItems: 'center',\n },\n sourceText: {\n fontFamily: MONO,\n fontSize: 8,\n fontWeight: '700',\n },\n logType: {\n fontFamily: MONO,\n fontSize: 10,\n fontWeight: '700',\n width: 75,\n marginRight: 6,\n },\n logMessage: {\n fontFamily: MONO,\n fontSize: 10,\n flex: 1,\n },\n logMessageHigh: {\n fontWeight: '600',\n },\n emptyState: {\n alignItems: 'center',\n paddingVertical: 60,\n gap: 12,\n },\n emptyIcon: {\n fontSize: 36,\n },\n emptyTitle: {\n fontSize: 14,\n fontWeight: '600',\n },\n emptyText: {\n fontSize: 12,\n textAlign: 'center',\n },\n tabContent: {\n flex: 1,\n },\n tabContentInner: {\n padding: 14,\n },\n agentRow: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: 12,\n borderRadius: 8,\n borderWidth: 1,\n marginBottom: 8,\n },\n agentLeft: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 10,\n },\n agentDot: {\n width: 10,\n height: 10,\n borderRadius: 5,\n },\n agentName: {\n fontSize: 13,\n fontWeight: '600',\n },\n agentPair: {\n fontFamily: MONO,\n fontSize: 10,\n },\n agentRight: {\n alignItems: 'flex-end',\n gap: 4,\n },\n agentPnl: {\n fontFamily: MONO,\n fontSize: 14,\n fontWeight: '600',\n },\n agentStatus: {\n paddingHorizontal: 6,\n paddingVertical: 2,\n borderRadius: 4,\n },\n agentStatusText: {\n fontSize: 9,\n fontWeight: '600',\n textTransform: 'uppercase',\n },\n});\n","/**\n * OneAgentCard - Displays agent status and mini metrics\n * Part of ONE Ecosystem SDK\n */\n\nimport React from 'react';\nimport { View, Text, StyleSheet, TouchableOpacity, ViewStyle, Platform } from 'react-native';\nimport type { AIAgent } from '../../../types/console';\nimport { AGENT_STATUS_COLORS, RISK_LEVEL_COLORS, formatPnl } from '../../../types/console';\n\nconst MONO = Platform.OS === 'ios' ? 'Courier New' : 'monospace';\n\nexport interface OneAgentCardProps {\n agent: AIAgent;\n onPress?: (agent: AIAgent) => void;\n showMetrics?: boolean;\n showIndicators?: boolean;\n compact?: boolean;\n style?: ViewStyle;\n dark?: boolean;\n}\n\nexport const OneAgentCard: React.FC<OneAgentCardProps> = ({\n agent,\n onPress,\n showMetrics = true,\n showIndicators = true,\n compact = false,\n style,\n dark = true,\n}) => {\n const bg = dark ? '#111111' : '#ffffff';\n const border = dark ? '#2A2A35' : '#E5E7EB';\n const textPrimary = dark ? '#ffffff' : '#111827';\n const textSecondary = dark ? '#9CA3AF' : '#6B7280';\n const textMuted = dark ? '#555560' : '#9CA3AF';\n\n const statusConfig = AGENT_STATUS_COLORS[agent.status];\n const riskConfig = RISK_LEVEL_COLORS[agent.riskLevel];\n\n const handlePress = () => {\n if (onPress) {\n onPress(agent);\n }\n };\n\n // Render content shared between pressable and non-pressable versions\n const renderCompactContent = () => (\n <>\n <View style={[styles.statusDot, { backgroundColor: statusConfig.color }]} />\n <Text style={[styles.compactName, { color: textPrimary }]}>{agent.shortName}</Text>\n <Text style={[\n styles.compactPnl,\n { color: agent.totalPnl >= 0 ? '#10B981' : '#EF4444' }\n ]}>\n {formatPnl(agent.totalPnl)}\n </Text>\n </>\n );\n\n const renderFullContent = () => (\n <>\n {/* Header */}\n <View style={styles.header}>\n <View style={styles.nameRow}>\n <View style={[styles.colorDot, { backgroundColor: agent.color }]} />\n <Text style={[styles.name, { color: textPrimary }]}>{agent.name}</Text>\n </View>\n <View style={[styles.statusBadge, { backgroundColor: statusConfig.bgColor }]}>\n <View style={[styles.statusIndicator, { backgroundColor: statusConfig.color }]} />\n <Text style={[styles.statusText, { color: statusConfig.color }]}>\n {statusConfig.label}\n </Text>\n </View>\n </View>\n\n {/* Current Activity */}\n {agent.currentPair && (\n <View style={styles.activityRow}>\n <Text style={[styles.activityLabel, { color: textMuted }]}>Watching</Text>\n <Text style={[styles.activityValue, { color: textSecondary }]}>\n {agent.currentPair} @ ${agent.currentPrice?.toFixed(2)}\n </Text>\n </View>\n )}\n\n {/* Signal */}\n {agent.lastSignal && agent.lastSignal !== 'HOLD' && (\n <View style={styles.signalRow}>\n <Text style={[styles.signalLabel, { color: textMuted }]}>Signal</Text>\n <View style={[\n styles.signalBadge,\n { backgroundColor: agent.lastSignal === 'LONG' ? '#D1FAE5' : '#FEE2E2' }\n ]}>\n <Text style={[\n styles.signalText,\n { color: agent.lastSignal === 'LONG' ? '#10B981' : '#EF4444' }\n ]}>\n {agent.lastSignal}\n </Text>\n </View>\n {agent.lastSignalConfidence && (\n <Text style={[styles.confidenceText, { color: textSecondary }]}>\n {(agent.lastSignalConfidence * 100).toFixed(0)}%\n </Text>\n )}\n </View>\n )}\n\n {/* Metrics */}\n {showMetrics && (\n <View style={styles.metricsGrid}>\n <View style={styles.metricItem}>\n <Text style={[styles.metricLabel, { color: textMuted }]}>P&L</Text>\n <Text style={[\n styles.metricValue,\n { color: agent.totalPnl >= 0 ? '#10B981' : '#EF4444' }\n ]}>\n {formatPnl(agent.totalPnl)}\n </Text>\n </View>\n <View style={styles.metricItem}>\n <Text style={[styles.metricLabel, { color: textMuted }]}>Win Rate</Text>\n <Text style={[styles.metricValue, { color: textPrimary }]}>\n {(agent.winRate * 100).toFixed(1)}%\n </Text>\n </View>\n <View style={styles.metricItem}>\n <Text style={[styles.metricLabel, { color: textMuted }]}>Trades</Text>\n <Text style={[styles.metricValue, { color: textPrimary }]}>\n {agent.totalTrades}\n </Text>\n </View>\n <View style={styles.metricItem}>\n <Text style={[styles.metricLabel, { color: textMuted }]}>Positions</Text>\n <Text style={[styles.metricValue, { color: textPrimary }]}>\n {agent.openPositions}\n </Text>\n </View>\n </View>\n )}\n\n {/* Indicators */}\n {showIndicators && (\n <View style={styles.indicatorsRow}>\n <View style={styles.indicatorItem}>\n <Text style={[styles.indicatorLabel, { color: textMuted }]}>Risk</Text>\n <View style={[styles.riskBadge, { backgroundColor: riskConfig.bgColor }]}>\n <Text style={[styles.riskText, { color: riskConfig.color }]}>\n {agent.riskLevel.toUpperCase()}\n </Text>\n </View>\n </View>\n <View style={styles.indicatorItem}>\n <Text style={[styles.indicatorLabel, { color: textMuted }]}>Exposure</Text>\n <Text style={[styles.indicatorValue, { color: textSecondary }]}>\n ${agent.totalExposure.toFixed(0)}\n </Text>\n </View>\n </View>\n )}\n\n {/* Strategy Info */}\n <View style={styles.strategyRow}>\n <Text style={[styles.strategyLabel, { color: textMuted }]}>\n {agent.primaryIndicators.join(' · ')}\n </Text>\n <Text style={[styles.leverageText, { color: textMuted }]}>\n {agent.leverageRange[0]}-{agent.leverageRange[1]}x\n </Text>\n </View>\n </>\n );\n\n if (compact) {\n if (onPress) {\n return (\n <TouchableOpacity\n style={[styles.compactContainer, { backgroundColor: bg, borderColor: border }, style]}\n onPress={handlePress}\n activeOpacity={0.7}\n >\n {renderCompactContent()}\n </TouchableOpacity>\n );\n }\n return (\n <View style={[styles.compactContainer, { backgroundColor: bg, borderColor: border }, style]}>\n {renderCompactContent()}\n </View>\n );\n }\n\n if (onPress) {\n return (\n <TouchableOpacity\n style={[styles.container, { backgroundColor: bg, borderColor: border }, style]}\n onPress={handlePress}\n activeOpacity={0.7}\n >\n {renderFullContent()}\n </TouchableOpacity>\n );\n }\n\n return (\n <View style={[styles.container, { backgroundColor: bg, borderColor: border }, style]}>\n {renderFullContent()}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n borderRadius: 12,\n borderWidth: 1,\n padding: 14,\n gap: 10,\n },\n compactContainer: {\n flexDirection: 'row',\n alignItems: 'center',\n borderRadius: 8,\n borderWidth: 1,\n paddingHorizontal: 12,\n paddingVertical: 8,\n gap: 8,\n },\n statusDot: {\n width: 8,\n height: 8,\n borderRadius: 4,\n },\n compactName: {\n fontFamily: MONO,\n fontSize: 12,\n fontWeight: '600',\n flex: 1,\n },\n compactPnl: {\n fontFamily: MONO,\n fontSize: 12,\n fontWeight: '600',\n },\n header: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n nameRow: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n },\n colorDot: {\n width: 10,\n height: 10,\n borderRadius: 5,\n },\n name: {\n fontSize: 15,\n fontWeight: '600',\n },\n statusBadge: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: 8,\n paddingVertical: 4,\n borderRadius: 12,\n gap: 4,\n },\n statusIndicator: {\n width: 6,\n height: 6,\n borderRadius: 3,\n },\n statusText: {\n fontSize: 11,\n fontWeight: '600',\n textTransform: 'uppercase',\n },\n activityRow: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n activityLabel: {\n fontFamily: MONO,\n fontSize: 10,\n textTransform: 'uppercase',\n },\n activityValue: {\n fontFamily: MONO,\n fontSize: 12,\n },\n signalRow: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n },\n signalLabel: {\n fontFamily: MONO,\n fontSize: 10,\n textTransform: 'uppercase',\n },\n signalBadge: {\n paddingHorizontal: 8,\n paddingVertical: 2,\n borderRadius: 4,\n },\n signalText: {\n fontFamily: MONO,\n fontSize: 11,\n fontWeight: '700',\n },\n confidenceText: {\n fontFamily: MONO,\n fontSize: 11,\n },\n metricsGrid: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n paddingTop: 6,\n borderTopWidth: 1,\n borderTopColor: '#2A2A35',\n },\n metricItem: {\n alignItems: 'center',\n gap: 2,\n },\n metricLabel: {\n fontFamily: MONO,\n fontSize: 9,\n textTransform: 'uppercase',\n },\n metricValue: {\n fontFamily: MONO,\n fontSize: 13,\n fontWeight: '600',\n },\n indicatorsRow: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n indicatorItem: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 6,\n },\n indicatorLabel: {\n fontFamily: MONO,\n fontSize: 10,\n textTransform: 'uppercase',\n },\n indicatorValue: {\n fontFamily: MONO,\n fontSize: 12,\n },\n riskBadge: {\n paddingHorizontal: 6,\n paddingVertical: 2,\n borderRadius: 4,\n },\n riskText: {\n fontFamily: MONO,\n fontSize: 10,\n fontWeight: '700',\n },\n strategyRow: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n strategyLabel: {\n fontFamily: MONO,\n fontSize: 9,\n },\n leverageText: {\n fontFamily: MONO,\n fontSize: 9,\n },\n});\n","/**\n * OneAIQuantConsole - All 7 AI agents overview\n * Part of ONE Ecosystem SDK\n */\n\nimport React, { useState } from 'react';\nimport { View, Text, StyleSheet, ScrollView, ViewStyle, Platform, TouchableOpacity } from 'react-native';\nimport type { AIAgent, ConsoleMetrics, RiskStatus } from '../../../types/console';\nimport { OneAgentCard } from './OneAgentCard';\nimport { OneMetricsDashboard } from './OneMetricsDashboard';\nimport { OneRiskIndicator } from './OneRiskIndicator';\n\nconst MONO = Platform.OS === 'ios' ? 'Courier New' : 'monospace';\n\nexport interface OneAIQuantConsoleProps {\n agents: AIAgent[];\n metrics?: ConsoleMetrics;\n riskStatus?: RiskStatus | null;\n layout?: 'list' | 'grid' | 'compact';\n showMetrics?: boolean;\n showRisk?: boolean;\n showPerformance?: boolean;\n showPositions?: boolean;\n onAgentSelect?: (agent: AIAgent) => void;\n onStartAll?: () => void;\n onStopAll?: () => void;\n isRunning?: boolean;\n style?: ViewStyle;\n dark?: boolean;\n}\n\nexport const OneAIQuantConsole: React.FC<OneAIQuantConsoleProps> = ({\n agents,\n metrics,\n riskStatus,\n layout = 'list',\n showMetrics = true,\n showRisk = true,\n showPerformance = true,\n showPositions = true,\n onAgentSelect,\n onStartAll,\n onStopAll,\n isRunning = false,\n style,\n dark = true,\n}) => {\n const bg = dark ? '#0A0A0C' : '#ffffff';\n const border = dark ? '#2A2A35' : '#E5E7EB';\n const textPrimary = dark ? '#ffffff' : '#111827';\n const textSecondary = dark ? '#9CA3AF' : '#6B7280';\n const textMuted = dark ? '#555560' : '#9CA3AF';\n const cardBg = dark ? '#111111' : '#F9FAFB';\n\n const [selectedTab, setSelectedTab] = useState<'agents' | 'metrics' | 'risk'>('agents');\n\n const activeAgents = agents.filter(a => a.status === 'active');\n const totalPnl = agents.reduce((sum, a) => sum + a.totalPnl, 0);\n const totalPositions = agents.reduce((sum, a) => sum + a.openPositions, 0);\n\n const handleAgentPress = (agent: AIAgent) => {\n if (onAgentSelect) {\n onAgentSelect(agent);\n }\n };\n\n const renderAgentList = () => {\n if (layout === 'compact') {\n return (\n <View style={styles.compactGrid}>\n {agents.map(agent => (\n <OneAgentCard\n key={agent.id}\n agent={agent}\n onPress={handleAgentPress}\n compact={true}\n dark={dark}\n style={styles.compactCard}\n />\n ))}\n </View>\n );\n }\n\n if (layout === 'grid') {\n return (\n <View style={styles.agentGrid}>\n {agents.map(agent => (\n <View key={agent.id} style={styles.gridItem}>\n <OneAgentCard\n agent={agent}\n onPress={handleAgentPress}\n showMetrics={showPerformance}\n showIndicators={true}\n dark={dark}\n />\n </View>\n ))}\n </View>\n );\n }\n\n // Default: list layout\n return (\n <View style={styles.agentList}>\n {agents.map(agent => (\n <OneAgentCard\n key={agent.id}\n agent={agent}\n onPress={handleAgentPress}\n showMetrics={showPerformance}\n showIndicators={showPositions}\n dark={dark}\n />\n ))}\n </View>\n );\n };\n\n return (\n <View style={[styles.container, { backgroundColor: bg }, style]}>\n {/* Header */}\n <View style={[styles.header, { borderBottomColor: border }]}>\n <View style={styles.headerLeft}>\n <Text style={[styles.title, { color: textPrimary }]}>AI Quant Console</Text>\n <View style={[styles.statusBadge, { backgroundColor: isRunning ? '#D1FAE5' : '#F3F4F6' }]}>\n <View style={[\n styles.statusDot,\n { backgroundColor: isRunning ? '#10B981' : '#9CA3AF' }\n ]} />\n <Text style={[\n styles.statusText,\n { color: isRunning ? '#10B981' : '#9CA3AF' }\n ]}>\n {isRunning ? 'Running' : 'Stopped'}\n </Text>\n </View>\n </View>\n <View style={styles.headerRight}>\n {onStartAll && onStopAll && (\n <TouchableOpacity\n style={[\n styles.controlButton,\n { backgroundColor: isRunning ? '#FEE2E2' : '#D1FAE5' }\n ]}\n onPress={isRunning ? onStopAll : onStartAll}\n activeOpacity={0.7}\n >\n <Text style={[\n styles.controlButtonText,\n { color: isRunning ? '#EF4444' : '#10B981' }\n ]}>\n {isRunning ? 'Stop All' : 'Start All'}\n </Text>\n </TouchableOpacity>\n )}\n </View>\n </View>\n\n {/* Quick Stats */}\n <View style={[styles.quickStats, { backgroundColor: cardBg, borderBottomColor: border }]}>\n <View style={styles.quickStatItem}>\n <Text style={[styles.quickStatLabel, { color: textMuted }]}>Agents</Text>\n <Text style={[styles.quickStatValue, { color: textPrimary }]}>\n {activeAgents.length}/{agents.length}\n </Text>\n </View>\n <View style={styles.quickStatDivider} />\n <View style={styles.quickStatItem}>\n <Text style={[styles.quickStatLabel, { color: textMuted }]}>Total P&L</Text>\n <Text style={[\n styles.quickStatValue,\n { color: totalPnl >= 0 ? '#10B981' : '#EF4444' }\n ]}>\n {totalPnl >= 0 ? '+' : ''}${totalPnl.toFixed(2)}\n </Text>\n </View>\n <View style={styles.quickStatDivider} />\n <View style={styles.quickStatItem}>\n <Text style={[styles.quickStatLabel, { color: textMuted }]}>Positions</Text>\n <Text style={[styles.quickStatValue, { color: textPrimary }]}>\n {totalPositions}\n </Text>\n </View>\n </View>\n\n {/* Tab Navigation */}\n <View style={[styles.tabBar, { borderBottomColor: border }]}>\n <TouchableOpacity\n style={[\n styles.tab,\n selectedTab === 'agents' && styles.tabActive,\n selectedTab === 'agents' && { borderBottomColor: '#3B82F6' }\n ]}\n onPress={() => setSelectedTab('agents')}\n activeOpacity={0.7}\n >\n <Text style={[\n styles.tabText,\n { color: selectedTab === 'agents' ? '#3B82F6' : textSecondary }\n ]}>\n Agents ({agents.length})\n </Text>\n </TouchableOpacity>\n {showMetrics && metrics && (\n <TouchableOpacity\n style={[\n styles.tab,\n selectedTab === 'metrics' && styles.tabActive,\n selectedTab === 'metrics' && { borderBottomColor: '#3B82F6' }\n ]}\n onPress={() => setSelectedTab('metrics')}\n activeOpacity={0.7}\n >\n <Text style={[\n styles.tabText,\n { color: selectedTab === 'metrics' ? '#3B82F6' : textSecondary }\n ]}>\n Metrics\n </Text>\n </TouchableOpacity>\n )}\n {showRisk && riskStatus && (\n <TouchableOpacity\n style={[\n styles.tab,\n selectedTab === 'risk' && styles.tabActive,\n selectedTab === 'risk' && { borderBottomColor: '#3B82F6' }\n ]}\n onPress={() => setSelectedTab('risk')}\n activeOpacity={0.7}\n >\n <Text style={[\n styles.tabText,\n { color: selectedTab === 'risk' ? '#3B82F6' : textSecondary }\n ]}>\n Risk\n </Text>\n </TouchableOpacity>\n )}\n </View>\n\n {/* Content */}\n <ScrollView style={styles.content} contentContainerStyle={styles.contentInner}>\n {selectedTab === 'agents' && renderAgentList()}\n\n {selectedTab === 'metrics' && metrics && (\n <OneMetricsDashboard\n metrics={metrics}\n showNAV={true}\n showPnL={true}\n showTrades={true}\n showPositions={true}\n showStrategies={true}\n dark={dark}\n />\n )}\n\n {selectedTab === 'risk' && riskStatus && (\n <OneRiskIndicator\n riskStatus={riskStatus}\n showDetails={true}\n showWarnings={true}\n showLimits={true}\n dark={dark}\n />\n )}\n\n {/* Empty state */}\n {agents.length === 0 && selectedTab === 'agents' && (\n <View style={styles.emptyState}>\n <Text style={[styles.emptyIcon, { color: textMuted }]}>⚡</Text>\n <Text style={[styles.emptyTitle, { color: textSecondary }]}>\n No Agents Available\n </Text>\n <Text style={[styles.emptyText, { color: textMuted }]}>\n Start the simulation to see AI trading agents\n </Text>\n </View>\n )}\n </ScrollView>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n borderRadius: 12,\n overflow: 'hidden',\n },\n header: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: 14,\n borderBottomWidth: 1,\n },\n headerLeft: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 10,\n },\n headerRight: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n },\n title: {\n fontSize: 16,\n fontWeight: '700',\n },\n statusBadge: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: 8,\n paddingVertical: 4,\n borderRadius: 12,\n gap: 4,\n },\n statusDot: {\n width: 6,\n height: 6,\n borderRadius: 3,\n },\n statusText: {\n fontSize: 11,\n fontWeight: '600',\n },\n controlButton: {\n paddingHorizontal: 12,\n paddingVertical: 6,\n borderRadius: 6,\n },\n controlButtonText: {\n fontSize: 12,\n fontWeight: '600',\n },\n quickStats: {\n flexDirection: 'row',\n justifyContent: 'space-around',\n alignItems: 'center',\n paddingVertical: 12,\n borderBottomWidth: 1,\n },\n quickStatItem: {\n alignItems: 'center',\n gap: 2,\n },\n quickStatLabel: {\n fontFamily: MONO,\n fontSize: 9,\n textTransform: 'uppercase',\n },\n quickStatValue: {\n fontFamily: MONO,\n fontSize: 16,\n fontWeight: '700',\n },\n quickStatDivider: {\n width: 1,\n height: 30,\n backgroundColor: '#2A2A35',\n },\n tabBar: {\n flexDirection: 'row',\n borderBottomWidth: 1,\n },\n tab: {\n flex: 1,\n paddingVertical: 12,\n alignItems: 'center',\n borderBottomWidth: 2,\n borderBottomColor: 'transparent',\n },\n tabActive: {\n borderBottomWidth: 2,\n },\n tabText: {\n fontSize: 13,\n fontWeight: '600',\n },\n content: {\n flex: 1,\n },\n contentInner: {\n padding: 14,\n gap: 12,\n },\n agentList: {\n gap: 12,\n },\n agentGrid: {\n flexDirection: 'row',\n flexWrap: 'wrap',\n gap: 12,\n },\n gridItem: {\n width: '48%',\n },\n compactGrid: {\n gap: 8,\n },\n compactCard: {\n marginBottom: 0,\n },\n emptyState: {\n alignItems: 'center',\n paddingVertical: 60,\n gap: 12,\n },\n emptyIcon: {\n fontSize: 40,\n },\n emptyTitle: {\n fontSize: 16,\n fontWeight: '600',\n },\n emptyText: {\n fontSize: 13,\n textAlign: 'center',\n },\n});\n","/**\n * OnePositionCard - Displays position with live P&L\n * Part of ONE Ecosystem SDK\n */\n\nimport React from 'react';\nimport { View, Text, StyleSheet, TouchableOpacity, ViewStyle, Platform } from 'react-native';\nimport type { AIPosition } from '../../../types/console';\nimport { formatPnl, formatPercent } from '../../../types/console';\n\nconst MONO = Platform.OS === 'ios' ? 'Courier New' : 'monospace';\n\nexport interface OnePositionCardProps {\n position: AIPosition;\n onPress?: (position: AIPosition) => void;\n onClose?: (positionId: string) => void;\n showDetails?: boolean;\n showRiskLevels?: boolean;\n compact?: boolean;\n style?: ViewStyle;\n dark?: boolean;\n}\n\nexport const OnePositionCard: React.FC<OnePositionCardProps> = ({\n position,\n onPress,\n onClose,\n showDetails = true,\n showRiskLevels = true,\n compact = false,\n style,\n dark = true,\n}) => {\n const bg = dark ? '#111111' : '#ffffff';\n const border = dark ? '#2A2A35' : '#E5E7EB';\n const textPrimary = dark ? '#ffffff' : '#111827';\n const textSecondary = dark ? '#9CA3AF' : '#6B7280';\n const textMuted = dark ? '#555560' : '#9CA3AF';\n\n const isLong = position.side === 'LONG';\n const sideColor = isLong ? '#10B981' : '#EF4444';\n const sideBgColor = isLong ? '#D1FAE5' : '#FEE2E2';\n const pnlColor = position.pnl >= 0 ? '#10B981' : '#EF4444';\n\n const handlePress = () => {\n if (onPress) {\n onPress(position);\n }\n };\n\n const handleClose = () => {\n if (onClose) {\n onClose(position.id);\n }\n };\n\n const formatPrice = (price: number): string => {\n if (price >= 1000) return price.toFixed(2);\n if (price >= 1) return price.toFixed(3);\n return price.toFixed(5);\n };\n\n const openDuration = Date.now() - position.openTime;\n const hours = Math.floor(openDuration / 3600000);\n const minutes = Math.floor((openDuration % 3600000) / 60000);\n const durationText = hours > 0 ? `${hours}h ${minutes}m` : `${minutes}m`;\n\n // Render compact content\n const renderCompactContent = () => (\n <>\n <View style={[styles.sideBadge, { backgroundColor: sideBgColor }]}>\n <Text style={[styles.sideText, { color: sideColor }]}>{position.side}</Text>\n </View>\n <Text style={[styles.compactPair, { color: textPrimary }]}>{position.pair}</Text>\n <Text style={[styles.compactLeverage, { color: textMuted }]}>{position.leverage}x</Text>\n <Text style={[styles.compactPnl, { color: pnlColor }]}>\n {formatPnl(position.pnl)}\n </Text>\n </>\n );\n\n // Render full content\n const renderFullContent = () => (\n <>\n {/* Header */}\n <View style={styles.header}>\n <View style={styles.headerLeft}>\n <View style={[styles.sideBadge, { backgroundColor: sideBgColor }]}>\n <Text style={[styles.sideText, { color: sideColor }]}>{position.side}</Text>\n </View>\n <Text style={[styles.pair, { color: textPrimary }]}>{position.pair}</Text>\n <Text style={[styles.leverage, { color: textSecondary }]}>{position.leverage}x</Text>\n </View>\n <View style={styles.headerRight}>\n <Text style={[styles.pnl, { color: pnlColor }]}>\n {formatPnl(position.pnl)}\n </Text>\n <Text style={[styles.pnlPercent, { color: pnlColor }]}>\n {formatPercent(position.pnlPercent)}\n </Text>\n </View>\n </View>\n\n {/* Price Info */}\n <View style={styles.priceRow}>\n <View style={styles.priceItem}>\n <Text style={[styles.priceLabel, { color: textMuted }]}>Entry</Text>\n <Text style={[styles.priceValue, { color: textSecondary }]}>\n ${formatPrice(position.entryPrice)}\n </Text>\n </View>\n <View style={styles.priceItem}>\n <Text style={[styles.priceLabel, { color: textMuted }]}>Current</Text>\n <Text style={[styles.priceValue, { color: textPrimary }]}>\n ${formatPrice(position.currentPrice)}\n </Text>\n </View>\n <View style={styles.priceItem}>\n <Text style={[styles.priceLabel, { color: textMuted }]}>Size</Text>\n <Text style={[styles.priceValue, { color: textSecondary }]}>\n ${position.size.toFixed(0)}\n </Text>\n </View>\n </View>\n\n {/* Risk Levels */}\n {showRiskLevels && (position.stopLoss || position.takeProfit) && (\n <View style={styles.riskRow}>\n {position.stopLoss && (\n <View style={styles.riskItem}>\n <Text style={[styles.riskLabel, { color: '#EF4444' }]}>SL</Text>\n <Text style={[styles.riskValue, { color: textSecondary }]}>\n ${formatPrice(position.stopLoss)}\n </Text>\n </View>\n )}\n {position.takeProfit && (\n <View style={styles.riskItem}>\n <Text style={[styles.riskLabel, { color: '#10B981' }]}>TP</Text>\n <Text style={[styles.riskValue, { color: textSecondary }]}>\n ${formatPrice(position.takeProfit)}\n </Text>\n </View>\n )}\n {position.liquidationPrice && (\n <View style={styles.riskItem}>\n <Text style={[styles.riskLabel, { color: '#F59E0B' }]}>LIQ</Text>\n <Text style={[styles.riskValue, { color: textSecondary }]}>\n ${formatPrice(position.liquidationPrice)}\n </Text>\n </View>\n )}\n </View>\n )}\n\n {/* Details */}\n {showDetails && (\n <View style={styles.detailsRow}>\n <View style={styles.detailItem}>\n <Text style={[styles.detailLabel, { color: textMuted }]}>Strategy</Text>\n <Text style={[styles.detailValue, { color: textSecondary }]}>\n {position.strategyName}\n </Text>\n </View>\n <View style={styles.detailItem}>\n <Text style={[styles.detailLabel, { color: textMuted }]}>Duration</Text>\n <Text style={[styles.detailValue, { color: textSecondary }]}>\n {durationText}\n </Text>\n </View>\n {position.chain && (\n <View style={styles.detailItem}>\n <Text style={[styles.detailLabel, { color: textMuted }]}>Chain</Text>\n <Text style={[styles.detailValue, { color: textSecondary }]}>\n {position.chain}\n </Text>\n </View>\n )}\n </View>\n )}\n\n {/* AI Reasoning */}\n {position.aiReasoning && (\n <View style={[styles.reasoningBox, { backgroundColor: dark ? '#1A1A1F' : '#F3F4F6' }]}>\n <Text style={[styles.reasoningLabel, { color: textMuted }]}>AI Reasoning</Text>\n <Text style={[styles.reasoningText, { color: textSecondary }]}>\n {position.aiReasoning}\n </Text>\n {position.aiConfidence && (\n <Text style={[styles.confidenceText, { color: textMuted }]}>\n Confidence: {(position.aiConfidence * 100).toFixed(0)}%\n </Text>\n )}\n </View>\n )}\n\n {/* Close Button */}\n {onClose && position.status === 'open' && (\n <TouchableOpacity\n style={styles.closeButton}\n onPress={handleClose}\n activeOpacity={0.7}\n >\n <Text style={styles.closeButtonText}>Close Position</Text>\n </TouchableOpacity>\n )}\n </>\n );\n\n if (compact) {\n if (onPress) {\n return (\n <TouchableOpacity\n style={[styles.compactContainer, { backgroundColor: bg, borderColor: border }, style]}\n onPress={handlePress}\n activeOpacity={0.7}\n >\n {renderCompactContent()}\n </TouchableOpacity>\n );\n }\n return (\n <View style={[styles.compactContainer, { backgroundColor: bg, borderColor: border }, style]}>\n {renderCompactContent()}\n </View>\n );\n }\n\n if (onPress) {\n return (\n <TouchableOpacity\n style={[styles.container, { backgroundColor: bg, borderColor: border }, style]}\n onPress={handlePress}\n activeOpacity={0.7}\n >\n {renderFullContent()}\n </TouchableOpacity>\n );\n }\n\n return (\n <View style={[styles.container, { backgroundColor: bg, borderColor: border }, style]}>\n {renderFullContent()}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n borderRadius: 12,\n borderWidth: 1,\n padding: 14,\n gap: 12,\n },\n compactContainer: {\n flexDirection: 'row',\n alignItems: 'center',\n borderRadius: 8,\n borderWidth: 1,\n paddingHorizontal: 12,\n paddingVertical: 8,\n gap: 10,\n },\n sideBadge: {\n paddingHorizontal: 8,\n paddingVertical: 3,\n borderRadius: 4,\n },\n sideText: {\n fontFamily: MONO,\n fontSize: 10,\n fontWeight: '700',\n },\n compactPair: {\n fontFamily: MONO,\n fontSize: 12,\n fontWeight: '600',\n flex: 1,\n },\n compactLeverage: {\n fontFamily: MONO,\n fontSize: 11,\n },\n compactPnl: {\n fontFamily: MONO,\n fontSize: 12,\n fontWeight: '600',\n },\n header: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n headerLeft: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n },\n headerRight: {\n alignItems: 'flex-end',\n },\n pair: {\n fontSize: 16,\n fontWeight: '700',\n },\n leverage: {\n fontFamily: MONO,\n fontSize: 12,\n },\n pnl: {\n fontFamily: MONO,\n fontSize: 18,\n fontWeight: '700',\n },\n pnlPercent: {\n fontFamily: MONO,\n fontSize: 12,\n },\n priceRow: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n },\n priceItem: {\n alignItems: 'center',\n gap: 2,\n },\n priceLabel: {\n fontFamily: MONO,\n fontSize: 9,\n textTransform: 'uppercase',\n },\n priceValue: {\n fontFamily: MONO,\n fontSize: 12,\n },\n riskRow: {\n flexDirection: 'row',\n justifyContent: 'space-around',\n paddingVertical: 8,\n borderTopWidth: 1,\n borderTopColor: '#2A2A35',\n borderBottomWidth: 1,\n borderBottomColor: '#2A2A35',\n },\n riskItem: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 6,\n },\n riskLabel: {\n fontFamily: MONO,\n fontSize: 10,\n fontWeight: '700',\n },\n riskValue: {\n fontFamily: MONO,\n fontSize: 11,\n },\n detailsRow: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n },\n detailItem: {\n alignItems: 'center',\n gap: 2,\n },\n detailLabel: {\n fontFamily: MONO,\n fontSize: 9,\n textTransform: 'uppercase',\n },\n detailValue: {\n fontFamily: MONO,\n fontSize: 11,\n },\n reasoningBox: {\n padding: 10,\n borderRadius: 8,\n gap: 4,\n },\n reasoningLabel: {\n fontFamily: MONO,\n fontSize: 9,\n textTransform: 'uppercase',\n },\n reasoningText: {\n fontSize: 12,\n lineHeight: 18,\n },\n confidenceText: {\n fontFamily: MONO,\n fontSize: 10,\n marginTop: 4,\n },\n closeButton: {\n backgroundColor: '#EF4444',\n paddingVertical: 10,\n borderRadius: 8,\n alignItems: 'center',\n },\n closeButtonText: {\n color: '#ffffff',\n fontWeight: '600',\n fontSize: 14,\n },\n});\n","/**\n * OneDecisionTimeline - Displays AI decision history with reasoning\n * Part of ONE Ecosystem SDK\n */\n\nimport React from 'react';\nimport { View, Text, StyleSheet, ScrollView, ViewStyle, Platform, TouchableOpacity } from 'react-native';\nimport type { AIDecision, DecisionAction } from '../../../types/console';\n\nconst MONO = Platform.OS === 'ios' ? 'Courier New' : 'monospace';\n\nconst ACTION_COLORS: Record<DecisionAction, { color: string; bgColor: string; label: string }> = {\n OPEN_LONG: { color: '#10B981', bgColor: '#D1FAE5', label: 'LONG' },\n OPEN_SHORT: { color: '#EF4444', bgColor: '#FEE2E2', label: 'SHORT' },\n CLOSE_LONG: { color: '#6366F1', bgColor: '#E0E7FF', label: 'CLOSE L' },\n CLOSE_SHORT: { color: '#8B5CF6', bgColor: '#EDE9FE', label: 'CLOSE S' },\n HOLD: { color: '#9CA3AF', bgColor: '#F3F4F6', label: 'HOLD' },\n SKIP: { color: '#F59E0B', bgColor: '#FEF3C7', label: 'SKIP' },\n};\n\nexport interface OneDecisionTimelineProps {\n decisions: AIDecision[];\n maxItems?: number;\n showReasoning?: boolean;\n showIndicators?: boolean;\n showConfidence?: boolean;\n onDecisionPress?: (decision: AIDecision) => void;\n style?: ViewStyle;\n height?: number;\n dark?: boolean;\n}\n\nexport const OneDecisionTimeline: React.FC<OneDecisionTimelineProps> = ({\n decisions,\n maxItems = 50,\n showReasoning = true,\n showIndicators = true,\n showConfidence = true,\n onDecisionPress,\n style,\n height = 400,\n dark = true,\n}) => {\n const bg = dark ? '#0A0A0C' : '#ffffff';\n const border = dark ? '#2A2A35' : '#E5E7EB';\n const textPrimary = dark ? '#ffffff' : '#111827';\n const textSecondary = dark ? '#9CA3AF' : '#6B7280';\n const textMuted = dark ? '#555560' : '#9CA3AF';\n const cardBg = dark ? '#111111' : '#F9FAFB';\n\n const visibleDecisions = decisions.slice(0, maxItems);\n\n const formatTime = (ts: number) => {\n const d = new Date(ts);\n const hours = d.getHours().toString().padStart(2, '0');\n const mins = d.getMinutes().toString().padStart(2, '0');\n const secs = d.getSeconds().toString().padStart(2, '0');\n return `${hours}:${mins}:${secs}`;\n };\n\n const formatDate = (ts: number) => {\n const d = new Date(ts);\n const month = (d.getMonth() + 1).toString().padStart(2, '0');\n const day = d.getDate().toString().padStart(2, '0');\n return `${month}/${day}`;\n };\n\n const getConfidenceColor = (confidence: number): string => {\n if (confidence >= 0.7) return '#10B981';\n if (confidence >= 0.5) return '#F59E0B';\n return '#EF4444';\n };\n\n const handlePress = (decision: AIDecision) => {\n if (onDecisionPress) {\n onDecisionPress(decision);\n }\n };\n\n const DecisionItem = ({ decision }: { decision: AIDecision }) => {\n const actionConfig = ACTION_COLORS[decision.action];\n\n const itemContent = (\n <>\n {/* Timeline dot and line */}\n <View style={styles.timelineColumn}>\n <View style={[styles.timelineDot, { backgroundColor: actionConfig.color }]} />\n <View style={[styles.timelineLine, { backgroundColor: border }]} />\n </View>\n\n {/* Content */}\n <View style={styles.decisionContent}>\n {/* Header */}\n <View style={styles.decisionHeader}>\n <View style={styles.decisionHeaderLeft}>\n <View style={[styles.actionBadge, { backgroundColor: actionConfig.bgColor }]}>\n <Text style={[styles.actionText, { color: actionConfig.color }]}>\n {actionConfig.label}\n </Text>\n </View>\n <Text style={[styles.pairText, { color: textPrimary }]}>{decision.pair}</Text>\n </View>\n <View style={styles.decisionHeaderRight}>\n <Text style={[styles.timeText, { color: textMuted }]}>\n {formatDate(decision.timestamp)} {formatTime(decision.timestamp)}\n </Text>\n </View>\n </View>\n\n {/* Strategy and Confidence */}\n <View style={styles.metaRow}>\n <Text style={[styles.strategyText, { color: textSecondary }]}>\n {decision.strategyName}\n </Text>\n {showConfidence && (\n <View style={styles.confidenceRow}>\n <Text style={[styles.confidenceLabel, { color: textMuted }]}>Confidence:</Text>\n <View style={[styles.confidenceBar, { backgroundColor: dark ? '#1A1A1F' : '#E5E7EB' }]}>\n <View\n style={[\n styles.confidenceFill,\n {\n width: `${decision.confidence * 100}%`,\n backgroundColor: getConfidenceColor(decision.confidence),\n }\n ]}\n />\n </View>\n <Text style={[styles.confidenceValue, { color: getConfidenceColor(decision.confidence) }]}>\n {(decision.confidence * 100).toFixed(0)}%\n </Text>\n </View>\n )}\n </View>\n\n {/* Reasoning */}\n {showReasoning && decision.reasoning && (\n <View style={[styles.reasoningBox, { backgroundColor: dark ? '#1A1A1F' : '#F3F4F6' }]}>\n <Text style={[styles.reasoningText, { color: textSecondary }]}>\n {decision.reasoning}\n </Text>\n </View>\n )}\n\n {/* Indicators */}\n {showIndicators && decision.indicators && Object.keys(decision.indicators).length > 0 && (\n <View style={styles.indicatorsRow}>\n {decision.indicators.rsi !== undefined && (\n <View style={styles.indicatorItem}>\n <Text style={[styles.indicatorLabel, { color: textMuted }]}>RSI</Text>\n <Text style={[styles.indicatorValue, { color: textSecondary }]}>\n {decision.indicators.rsi.toFixed(1)}\n </Text>\n </View>\n )}\n {decision.indicators.macd !== undefined && (\n <View style={styles.indicatorItem}>\n <Text style={[styles.indicatorLabel, { color: textMuted }]}>MACD</Text>\n <Text style={[\n styles.indicatorValue,\n { color: decision.indicators.macd >= 0 ? '#10B981' : '#EF4444' }\n ]}>\n {decision.indicators.macd >= 0 ? '+' : ''}{decision.indicators.macd.toFixed(3)}\n </Text>\n </View>\n )}\n {decision.indicators.ema && (\n <View style={styles.indicatorItem}>\n <Text style={[styles.indicatorLabel, { color: textMuted }]}>EMA</Text>\n <Text style={[\n styles.indicatorValue,\n { color: decision.indicators.ema === 'bullish' ? '#10B981' : '#EF4444' }\n ]}>\n {decision.indicators.ema}\n </Text>\n </View>\n )}\n {decision.indicators.volume !== undefined && (\n <View style={styles.indicatorItem}>\n <Text style={[styles.indicatorLabel, { color: textMuted }]}>Vol</Text>\n <Text style={[styles.indicatorValue, { color: textSecondary }]}>\n {decision.indicators.volume.toFixed(1)}x\n </Text>\n </View>\n )}\n </View>\n )}\n\n {/* Signals */}\n {decision.signals && decision.signals.length > 0 && (\n <View style={styles.signalsRow}>\n {decision.signals.slice(0, 3).map((signal, index) => (\n <View key={index} style={[styles.signalBadge, { backgroundColor: dark ? '#1A1A1F' : '#E5E7EB' }]}>\n <Text style={[styles.signalText, { color: textSecondary }]}>{signal}</Text>\n </View>\n ))}\n </View>\n )}\n\n {/* Execution Info */}\n {decision.executed && (\n <View style={[styles.executionRow, { borderTopColor: border }]}>\n <View style={[styles.executedBadge, { backgroundColor: '#D1FAE5' }]}>\n <Text style={styles.executedText}>EXECUTED</Text>\n </View>\n {decision.price && (\n <Text style={[styles.executionDetail, { color: textSecondary }]}>\n @ ${decision.price.toFixed(2)}\n </Text>\n )}\n {decision.size && (\n <Text style={[styles.executionDetail, { color: textSecondary }]}>\n Size: ${decision.size}\n </Text>\n )}\n {decision.leverage && (\n <Text style={[styles.executionDetail, { color: textSecondary }]}>\n {decision.leverage}x\n </Text>\n )}\n </View>\n )}\n </View>\n </>\n );\n\n if (onDecisionPress) {\n return (\n <TouchableOpacity\n style={[styles.decisionItem, { backgroundColor: cardBg }]}\n onPress={() => handlePress(decision)}\n activeOpacity={0.7}\n >\n {itemContent}\n </TouchableOpacity>\n );\n }\n\n return (\n <View style={[styles.decisionItem, { backgroundColor: cardBg }]}>\n {itemContent}\n </View>\n );\n };\n\n return (\n <View style={[styles.container, { backgroundColor: bg, borderColor: border, height }, style]}>\n <ScrollView style={styles.scroll} contentContainerStyle={styles.scrollContent}>\n {visibleDecisions.map((decision) => (\n <DecisionItem key={decision.id} decision={decision} />\n ))}\n {visibleDecisions.length === 0 && (\n <Text style={[styles.emptyText, { color: textMuted }]}>\n No decisions recorded yet...\n </Text>\n )}\n </ScrollView>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n borderRadius: 8,\n borderWidth: 1,\n overflow: 'hidden',\n },\n scroll: {\n flex: 1,\n },\n scrollContent: {\n padding: 12,\n gap: 8,\n },\n decisionItem: {\n flexDirection: 'row',\n borderRadius: 8,\n overflow: 'hidden',\n },\n timelineColumn: {\n width: 24,\n alignItems: 'center',\n paddingTop: 14,\n },\n timelineDot: {\n width: 10,\n height: 10,\n borderRadius: 5,\n },\n timelineLine: {\n width: 2,\n flex: 1,\n marginTop: 4,\n },\n decisionContent: {\n flex: 1,\n padding: 12,\n gap: 8,\n },\n decisionHeader: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n decisionHeaderLeft: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n },\n decisionHeaderRight: {\n alignItems: 'flex-end',\n },\n actionBadge: {\n paddingHorizontal: 8,\n paddingVertical: 3,\n borderRadius: 4,\n },\n actionText: {\n fontFamily: MONO,\n fontSize: 10,\n fontWeight: '700',\n },\n pairText: {\n fontSize: 14,\n fontWeight: '600',\n },\n timeText: {\n fontFamily: MONO,\n fontSize: 10,\n },\n metaRow: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n strategyText: {\n fontSize: 11,\n },\n confidenceRow: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 6,\n },\n confidenceLabel: {\n fontFamily: MONO,\n fontSize: 9,\n },\n confidenceBar: {\n width: 50,\n height: 6,\n borderRadius: 3,\n overflow: 'hidden',\n },\n confidenceFill: {\n height: '100%',\n borderRadius: 3,\n },\n confidenceValue: {\n fontFamily: MONO,\n fontSize: 10,\n fontWeight: '600',\n },\n reasoningBox: {\n padding: 8,\n borderRadius: 6,\n },\n reasoningText: {\n fontSize: 11,\n lineHeight: 16,\n },\n indicatorsRow: {\n flexDirection: 'row',\n flexWrap: 'wrap',\n gap: 12,\n },\n indicatorItem: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 4,\n },\n indicatorLabel: {\n fontFamily: MONO,\n fontSize: 9,\n textTransform: 'uppercase',\n },\n indicatorValue: {\n fontFamily: MONO,\n fontSize: 11,\n fontWeight: '600',\n },\n signalsRow: {\n flexDirection: 'row',\n flexWrap: 'wrap',\n gap: 6,\n },\n signalBadge: {\n paddingHorizontal: 6,\n paddingVertical: 2,\n borderRadius: 4,\n },\n signalText: {\n fontFamily: MONO,\n fontSize: 9,\n },\n executionRow: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 10,\n paddingTop: 8,\n borderTopWidth: 1,\n },\n executedBadge: {\n paddingHorizontal: 6,\n paddingVertical: 2,\n borderRadius: 4,\n },\n executedText: {\n fontFamily: MONO,\n fontSize: 9,\n fontWeight: '700',\n color: '#10B981',\n },\n executionDetail: {\n fontFamily: MONO,\n fontSize: 10,\n },\n emptyText: {\n fontFamily: MONO,\n fontSize: 11,\n textAlign: 'center',\n paddingVertical: 40,\n },\n});\n","/**\n * OneAgentConsole - Individual agent detail view\n * Part of ONE Ecosystem SDK\n */\n\nimport React, { useRef, useEffect } from 'react';\nimport { View, Text, StyleSheet, ScrollView, ViewStyle, Platform, TouchableOpacity } from 'react-native';\nimport type { BotLogEntry, BotState } from '../../../services/forex/BotSimulationEngine';\nimport type { AIPosition, AIDecision, AIAgent } from '../../../types/console';\nimport { AI_LOG_COLORS } from '../../../types/console';\nimport { OnePositionCard } from './OnePositionCard';\nimport { OneDecisionTimeline } from './OneDecisionTimeline';\n\nconst MONO = Platform.OS === 'ios' ? 'Courier New' : 'monospace';\n\nexport interface OneAgentConsoleProps {\n agent?: AIAgent;\n strategyId?: string;\n strategyName?: string;\n logs: BotLogEntry[];\n botState?: BotState;\n positions?: AIPosition[];\n decisions?: AIDecision[];\n showConsole?: boolean;\n showPositions?: boolean;\n showDecisions?: boolean;\n showMetrics?: boolean;\n maxLogs?: number;\n autoScroll?: boolean;\n consoleHeight?: number;\n onPositionPress?: (position: AIPosition) => void;\n onDecisionPress?: (decision: AIDecision) => void;\n onClosePosition?: (positionId: string) => void;\n style?: ViewStyle;\n dark?: boolean;\n}\n\nexport const OneAgentConsole: React.FC<OneAgentConsoleProps> = ({\n agent,\n strategyId,\n strategyName,\n logs,\n botState,\n positions = [],\n decisions = [],\n showConsole = true,\n showPositions = true,\n showDecisions = true,\n showMetrics = true,\n maxLogs = 100,\n autoScroll = true,\n consoleHeight = 300,\n onPositionPress,\n onDecisionPress,\n onClosePosition,\n style,\n dark = true,\n}) => {\n const bg = dark ? '#111111' : '#ffffff';\n const border = dark ? '#2A2A35' : '#E5E7EB';\n const textPrimary = dark ? '#ffffff' : '#111827';\n const textSecondary = dark ? '#9CA3AF' : '#6B7280';\n const textMuted = dark ? '#555560' : '#9CA3AF';\n const consoleBg = dark ? '#0A0A0C' : '#F9FAFB';\n\n const scrollRef = useRef<ScrollView>(null);\n const visibleLogs = logs.slice(-maxLogs);\n const openPositions = positions.filter(p => p.status === 'open');\n\n // Auto-scroll console\n useEffect(() => {\n if (autoScroll && scrollRef.current) {\n setTimeout(() => scrollRef.current?.scrollToEnd({ animated: true }), 50);\n }\n }, [logs.length, autoScroll]);\n\n const formatTime = (ts: number) => {\n const d = new Date(ts);\n return `${d.getHours().toString().padStart(2, '0')}:${d.getMinutes().toString().padStart(2, '0')}:${d.getSeconds().toString().padStart(2, '0')}`;\n };\n\n const displayName = agent?.name || strategyName || strategyId || 'Agent';\n const displayColor = agent?.color || botState?.strategyName ? '#3B82F6' : '#9CA3AF';\n const isActive = agent?.status === 'active' || botState?.isRunning;\n\n return (\n <View style={[styles.container, { backgroundColor: bg, borderColor: border }, style]}>\n {/* Header */}\n <View style={styles.header}>\n <View style={styles.headerLeft}>\n <View style={[styles.colorDot, { backgroundColor: displayColor }]} />\n <Text style={[styles.agentName, { color: textPrimary }]}>{displayName}</Text>\n <View style={[\n styles.statusBadge,\n { backgroundColor: isActive ? '#D1FAE5' : '#F3F4F6' }\n ]}>\n <View style={[\n styles.statusDot,\n { backgroundColor: isActive ? '#10B981' : '#9CA3AF' }\n ]} />\n <Text style={[\n styles.statusText,\n { color: isActive ? '#10B981' : '#9CA3AF' }\n ]}>\n {isActive ? 'Active' : 'Idle'}\n </Text>\n </View>\n </View>\n {botState && (\n <View style={styles.headerRight}>\n <Text style={[styles.currentPair, { color: textSecondary }]}>\n {botState.currentPair}\n </Text>\n </View>\n )}\n </View>\n\n {/* Quick Metrics */}\n {showMetrics && (agent || botState) && (\n <View style={[styles.metricsRow, { borderBottomColor: border }]}>\n <View style={styles.metricItem}>\n <Text style={[styles.metricLabel, { color: textMuted }]}>P&L</Text>\n <Text style={[\n styles.metricValue,\n { color: (agent?.totalPnl ?? botState?.totalPnl ?? 0) >= 0 ? '#10B981' : '#EF4444' }\n ]}>\n {(agent?.totalPnl ?? botState?.totalPnl ?? 0) >= 0 ? '+' : ''}\n ${(agent?.totalPnl ?? botState?.totalPnl ?? 0).toFixed(2)}\n </Text>\n </View>\n <View style={styles.metricItem}>\n <Text style={[styles.metricLabel, { color: textMuted }]}>Win Rate</Text>\n <Text style={[styles.metricValue, { color: textPrimary }]}>\n {((agent?.winRate ?? botState?.winRate ?? 0) * 100).toFixed(1)}%\n </Text>\n </View>\n <View style={styles.metricItem}>\n <Text style={[styles.metricLabel, { color: textMuted }]}>Trades</Text>\n <Text style={[styles.metricValue, { color: textPrimary }]}>\n {agent?.totalTrades ?? botState?.totalTrades ?? 0}\n </Text>\n </View>\n <View style={styles.metricItem}>\n <Text style={[styles.metricLabel, { color: textMuted }]}>Positions</Text>\n <Text style={[styles.metricValue, { color: textPrimary }]}>\n {openPositions.length}\n </Text>\n </View>\n {botState?.lastSignal && botState.lastSignal !== 'HOLD' && (\n <View style={styles.metricItem}>\n <Text style={[styles.metricLabel, { color: textMuted }]}>Signal</Text>\n <View style={[\n styles.signalBadge,\n { backgroundColor: botState.lastSignal === 'LONG' ? '#D1FAE5' : '#FEE2E2' }\n ]}>\n <Text style={[\n styles.signalText,\n { color: botState.lastSignal === 'LONG' ? '#10B981' : '#EF4444' }\n ]}>\n {botState.lastSignal}\n </Text>\n </View>\n </View>\n )}\n </View>\n )}\n\n {/* Console Output */}\n {showConsole && (\n <View style={styles.section}>\n <Text style={[styles.sectionTitle, { color: textMuted }]}>Console Output</Text>\n <View style={[styles.consoleContainer, { backgroundColor: consoleBg, height: consoleHeight }]}>\n <ScrollView\n ref={scrollRef}\n style={styles.consoleScroll}\n contentContainerStyle={styles.consoleContent}\n >\n {visibleLogs.map((log) => (\n <View key={log.id} style={styles.logRow}>\n <Text style={[styles.logTime, { color: textMuted }]}>\n {formatTime(log.timestamp)}\n </Text>\n <Text style={[\n styles.logType,\n { color: AI_LOG_COLORS[log.type as keyof typeof AI_LOG_COLORS] || textMuted }\n ]}>\n {log.type.padEnd(10)}\n </Text>\n <Text\n style={[\n styles.logMessage,\n { color: log.importance === 'high' ? textPrimary : textSecondary },\n log.importance === 'high' && styles.logMessageHigh,\n ]}\n numberOfLines={2}\n >\n {log.message}\n </Text>\n </View>\n ))}\n {visibleLogs.length === 0 && (\n <Text style={[styles.emptyText, { color: textMuted }]}>\n Waiting for activity...\n </Text>\n )}\n </ScrollView>\n </View>\n </View>\n )}\n\n {/* Open Positions */}\n {showPositions && openPositions.length > 0 && (\n <View style={styles.section}>\n <Text style={[styles.sectionTitle, { color: textMuted }]}>\n Open Positions ({openPositions.length})\n </Text>\n <View style={styles.positionsList}>\n {openPositions.map((position) => (\n <OnePositionCard\n key={position.id}\n position={position}\n onPress={onPositionPress}\n onClose={onClosePosition}\n compact={true}\n dark={dark}\n />\n ))}\n </View>\n </View>\n )}\n\n {/* Recent Decisions */}\n {showDecisions && decisions.length > 0 && (\n <View style={styles.section}>\n <Text style={[styles.sectionTitle, { color: textMuted }]}>\n Recent Decisions ({decisions.length})\n </Text>\n <OneDecisionTimeline\n decisions={decisions.slice(0, 5)}\n showReasoning={true}\n showIndicators={false}\n showConfidence={true}\n onDecisionPress={onDecisionPress}\n height={250}\n dark={dark}\n />\n </View>\n )}\n\n {/* Indicators (if bot state available) */}\n {botState?.indicators && (\n <View style={[styles.indicatorsSection, { borderTopColor: border }]}>\n <Text style={[styles.sectionTitle, { color: textMuted }]}>Current Indicators</Text>\n <View style={styles.indicatorsGrid}>\n <View style={styles.indicatorItem}>\n <Text style={[styles.indicatorLabel, { color: textMuted }]}>RSI</Text>\n <Text style={[\n styles.indicatorValue,\n {\n color: botState.indicators.rsi < 30 ? '#10B981' :\n botState.indicators.rsi > 70 ? '#EF4444' : textPrimary\n }\n ]}>\n {botState.indicators.rsi.toFixed(1)}\n </Text>\n </View>\n <View style={styles.indicatorItem}>\n <Text style={[styles.indicatorLabel, { color: textMuted }]}>MACD</Text>\n <Text style={[\n styles.indicatorValue,\n { color: botState.indicators.macd.histogram >= 0 ? '#10B981' : '#EF4444' }\n ]}>\n {botState.indicators.macd.histogram >= 0 ? '+' : ''}\n {botState.indicators.macd.histogram.toFixed(3)}\n </Text>\n </View>\n <View style={styles.indicatorItem}>\n <Text style={[styles.indicatorLabel, { color: textMuted }]}>EMA</Text>\n <Text style={[\n styles.indicatorValue,\n { color: botState.indicators.ema.crossover === 'golden' ? '#10B981' :\n botState.indicators.ema.crossover === 'death' ? '#EF4444' : textSecondary }\n ]}>\n {botState.indicators.ema.crossover !== 'none' ?\n botState.indicators.ema.crossover.toUpperCase() : 'NEUTRAL'}\n </Text>\n </View>\n <View style={styles.indicatorItem}>\n <Text style={[styles.indicatorLabel, { color: textMuted }]}>Volume</Text>\n <Text style={[styles.indicatorValue, { color: textPrimary }]}>\n {botState.indicators.volume.ratio.toFixed(1)}x\n </Text>\n </View>\n <View style={styles.indicatorItem}>\n <Text style={[styles.indicatorLabel, { color: textMuted }]}>BB Pos</Text>\n <Text style={[styles.indicatorValue, { color: textPrimary }]}>\n {botState.indicators.bollinger.position.toFixed(0)}%\n </Text>\n </View>\n </View>\n </View>\n )}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n borderRadius: 12,\n borderWidth: 1,\n overflow: 'hidden',\n },\n header: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: 14,\n borderBottomWidth: 1,\n borderBottomColor: '#2A2A35',\n },\n headerLeft: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 10,\n },\n headerRight: {\n alignItems: 'flex-end',\n },\n colorDot: {\n width: 12,\n height: 12,\n borderRadius: 6,\n },\n agentName: {\n fontSize: 16,\n fontWeight: '600',\n },\n statusBadge: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: 8,\n paddingVertical: 4,\n borderRadius: 12,\n gap: 4,\n },\n statusDot: {\n width: 6,\n height: 6,\n borderRadius: 3,\n },\n statusText: {\n fontSize: 11,\n fontWeight: '600',\n },\n currentPair: {\n fontFamily: MONO,\n fontSize: 12,\n },\n metricsRow: {\n flexDirection: 'row',\n justifyContent: 'space-around',\n paddingVertical: 12,\n paddingHorizontal: 8,\n borderBottomWidth: 1,\n },\n metricItem: {\n alignItems: 'center',\n gap: 2,\n },\n metricLabel: {\n fontFamily: MONO,\n fontSize: 9,\n textTransform: 'uppercase',\n },\n metricValue: {\n fontFamily: MONO,\n fontSize: 14,\n fontWeight: '600',\n },\n signalBadge: {\n paddingHorizontal: 8,\n paddingVertical: 2,\n borderRadius: 4,\n },\n signalText: {\n fontFamily: MONO,\n fontSize: 10,\n fontWeight: '700',\n },\n section: {\n padding: 14,\n gap: 10,\n },\n sectionTitle: {\n fontFamily: MONO,\n fontSize: 10,\n textTransform: 'uppercase',\n letterSpacing: 1,\n },\n consoleContainer: {\n borderRadius: 8,\n overflow: 'hidden',\n },\n consoleScroll: {\n flex: 1,\n },\n consoleContent: {\n padding: 8,\n },\n logRow: {\n flexDirection: 'row',\n paddingVertical: 2,\n },\n logTime: {\n fontFamily: MONO,\n fontSize: 10,\n width: 60,\n marginRight: 6,\n },\n logType: {\n fontFamily: MONO,\n fontSize: 10,\n fontWeight: '700',\n width: 75,\n marginRight: 6,\n },\n logMessage: {\n fontFamily: MONO,\n fontSize: 10,\n flex: 1,\n },\n logMessageHigh: {\n fontWeight: '600',\n },\n emptyText: {\n fontFamily: MONO,\n fontSize: 11,\n textAlign: 'center',\n paddingVertical: 30,\n },\n positionsList: {\n gap: 8,\n },\n indicatorsSection: {\n padding: 14,\n borderTopWidth: 1,\n gap: 10,\n },\n indicatorsGrid: {\n flexDirection: 'row',\n flexWrap: 'wrap',\n gap: 16,\n },\n indicatorItem: {\n alignItems: 'center',\n gap: 2,\n minWidth: 60,\n },\n indicatorLabel: {\n fontFamily: MONO,\n fontSize: 9,\n textTransform: 'uppercase',\n },\n indicatorValue: {\n fontFamily: MONO,\n fontSize: 13,\n fontWeight: '600',\n },\n});\n","/**\n * OnePositionDetail - Detailed position tracking view\n * Part of ONE Ecosystem SDK\n */\n\nimport React, { useEffect, useState, useRef } from 'react';\nimport { View, Text, StyleSheet, ScrollView, ViewStyle, Platform, TouchableOpacity, Animated } from 'react-native';\nimport type { AIPosition } from '../../../types/console';\nimport { formatPnl, formatPercent } from '../../../types/console';\n\nconst MONO = Platform.OS === 'ios' ? 'Courier New' : 'monospace';\n\nexport interface OnePositionDetailProps {\n position: AIPosition;\n showTimeline?: boolean;\n showReasoning?: boolean;\n showRiskLevels?: boolean;\n showHistory?: boolean;\n priceUpdateInterval?: number;\n onClose?: (positionId: string) => void;\n onUpdateStopLoss?: (positionId: string, stopLoss: number) => void;\n onUpdateTakeProfit?: (positionId: string, takeProfit: number) => void;\n style?: ViewStyle;\n dark?: boolean;\n}\n\nexport const OnePositionDetail: React.FC<OnePositionDetailProps> = ({\n position,\n showTimeline = true,\n showReasoning = true,\n showRiskLevels = true,\n showHistory = true,\n priceUpdateInterval = 5000,\n onClose,\n onUpdateStopLoss,\n onUpdateTakeProfit,\n style,\n dark = true,\n}) => {\n const bg = dark ? '#0A0A0C' : '#ffffff';\n const cardBg = dark ? '#111111' : '#F9FAFB';\n const border = dark ? '#2A2A35' : '#E5E7EB';\n const textPrimary = dark ? '#ffffff' : '#111827';\n const textSecondary = dark ? '#9CA3AF' : '#6B7280';\n const textMuted = dark ? '#555560' : '#9CA3AF';\n\n const isLong = position.side === 'LONG';\n const sideColor = isLong ? '#10B981' : '#EF4444';\n const sideBgColor = isLong ? '#D1FAE5' : '#FEE2E2';\n const pnlColor = position.pnl >= 0 ? '#10B981' : '#EF4444';\n\n // Animated values for P&L updates\n const pnlAnim = useRef(new Animated.Value(0)).current;\n const [prevPnl, setPrevPnl] = useState(position.pnl);\n\n useEffect(() => {\n if (position.pnl !== prevPnl) {\n Animated.sequence([\n Animated.timing(pnlAnim, { toValue: 1, duration: 200, useNativeDriver: false }),\n Animated.timing(pnlAnim, { toValue: 0, duration: 400, useNativeDriver: false }),\n ]).start();\n setPrevPnl(position.pnl);\n }\n }, [position.pnl, prevPnl, pnlAnim]);\n\n const pnlBgColor = pnlAnim.interpolate({\n inputRange: [0, 1],\n outputRange: [cardBg, position.pnl >= 0 ? '#134E4A' : '#7F1D1D'],\n });\n\n const formatPrice = (price: number): string => {\n if (price >= 1000) return price.toFixed(2);\n if (price >= 1) return price.toFixed(4);\n return price.toFixed(6);\n };\n\n const formatDuration = (openTime: number, closeTime?: number): string => {\n const end = closeTime || Date.now();\n const duration = end - openTime;\n const hours = Math.floor(duration / 3600000);\n const minutes = Math.floor((duration % 3600000) / 60000);\n const seconds = Math.floor((duration % 60000) / 1000);\n\n if (hours > 0) return `${hours}h ${minutes}m`;\n if (minutes > 0) return `${minutes}m ${seconds}s`;\n return `${seconds}s`;\n };\n\n const formatTimestamp = (ts: number): string => {\n const d = new Date(ts);\n return d.toLocaleString('en-US', {\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n });\n };\n\n // Calculate distance to liquidation\n const distanceToLiquidation = position.liquidationPrice\n ? Math.abs((position.currentPrice - position.liquidationPrice) / position.currentPrice * 100)\n : null;\n\n // Calculate P&L at TP and SL\n const pnlAtTP = position.takeProfit\n ? ((isLong\n ? (position.takeProfit - position.entryPrice)\n : (position.entryPrice - position.takeProfit)) / position.entryPrice) * position.leverage * position.size\n : null;\n\n const pnlAtSL = position.stopLoss\n ? ((isLong\n ? (position.stopLoss - position.entryPrice)\n : (position.entryPrice - position.stopLoss)) / position.entryPrice) * position.leverage * position.size\n : null;\n\n const handleClose = () => {\n if (onClose) {\n onClose(position.id);\n }\n };\n\n return (\n <ScrollView style={[styles.container, { backgroundColor: bg }, style]}>\n {/* Header */}\n <View style={[styles.header, { backgroundColor: cardBg, borderBottomColor: border }]}>\n <View style={styles.headerTop}>\n <View style={styles.headerLeft}>\n <View style={[styles.sideBadge, { backgroundColor: sideBgColor }]}>\n <Text style={[styles.sideText, { color: sideColor }]}>{position.side}</Text>\n </View>\n <Text style={[styles.pair, { color: textPrimary }]}>{position.pair}</Text>\n <Text style={[styles.leverage, { color: textSecondary }]}>{position.leverage}x</Text>\n </View>\n <View style={[\n styles.statusBadge,\n { backgroundColor: position.status === 'open' ? '#D1FAE5' : '#F3F4F6' }\n ]}>\n <Text style={[\n styles.statusText,\n { color: position.status === 'open' ? '#10B981' : '#9CA3AF' }\n ]}>\n {position.status.toUpperCase()}\n </Text>\n </View>\n </View>\n\n {/* Main P&L Display */}\n <Animated.View style={[styles.pnlSection, { backgroundColor: pnlBgColor }]}>\n <View style={styles.pnlMain}>\n <Text style={[styles.pnlValue, { color: pnlColor }]}>\n {formatPnl(position.pnl)}\n </Text>\n <Text style={[styles.pnlPercent, { color: pnlColor }]}>\n {formatPercent(position.pnlPercent)}\n </Text>\n </View>\n <Text style={[styles.pnlLabel, { color: textMuted }]}>Unrealized P&L</Text>\n </Animated.View>\n </View>\n\n {/* Price Information */}\n <View style={[styles.section, { backgroundColor: cardBg }]}>\n <Text style={[styles.sectionTitle, { color: textMuted }]}>Price Information</Text>\n <View style={styles.priceGrid}>\n <View style={styles.priceItem}>\n <Text style={[styles.priceLabel, { color: textMuted }]}>Entry Price</Text>\n <Text style={[styles.priceValue, { color: textPrimary }]}>\n ${formatPrice(position.entryPrice)}\n </Text>\n </View>\n <View style={styles.priceItem}>\n <Text style={[styles.priceLabel, { color: textMuted }]}>Current Price</Text>\n <Text style={[styles.priceValue, { color: textPrimary }]}>\n ${formatPrice(position.currentPrice)}\n </Text>\n </View>\n <View style={styles.priceItem}>\n <Text style={[styles.priceLabel, { color: textMuted }]}>Price Change</Text>\n <Text style={[\n styles.priceValue,\n { color: (position.currentPrice - position.entryPrice) * (isLong ? 1 : -1) >= 0 ? '#10B981' : '#EF4444' }\n ]}>\n {((position.currentPrice - position.entryPrice) / position.entryPrice * 100) >= 0 ? '+' : ''}\n {((position.currentPrice - position.entryPrice) / position.entryPrice * 100).toFixed(4)}%\n </Text>\n </View>\n </View>\n </View>\n\n {/* Position Details */}\n <View style={[styles.section, { backgroundColor: cardBg }]}>\n <Text style={[styles.sectionTitle, { color: textMuted }]}>Position Details</Text>\n <View style={styles.detailsGrid}>\n <View style={styles.detailRow}>\n <Text style={[styles.detailLabel, { color: textSecondary }]}>Size</Text>\n <Text style={[styles.detailValue, { color: textPrimary }]}>\n ${position.size.toLocaleString()}\n </Text>\n </View>\n <View style={styles.detailRow}>\n <Text style={[styles.detailLabel, { color: textSecondary }]}>Margin</Text>\n <Text style={[styles.detailValue, { color: textPrimary }]}>\n ${position.margin.toFixed(2)}\n </Text>\n </View>\n <View style={styles.detailRow}>\n <Text style={[styles.detailLabel, { color: textSecondary }]}>Leverage</Text>\n <Text style={[styles.detailValue, { color: textPrimary }]}>\n {position.leverage}x\n </Text>\n </View>\n <View style={styles.detailRow}>\n <Text style={[styles.detailLabel, { color: textSecondary }]}>Strategy</Text>\n <Text style={[styles.detailValue, { color: textPrimary }]}>\n {position.strategyName}\n </Text>\n </View>\n {position.chain && (\n <View style={styles.detailRow}>\n <Text style={[styles.detailLabel, { color: textSecondary }]}>Chain</Text>\n <Text style={[styles.detailValue, { color: textPrimary }]}>\n {position.chain}\n </Text>\n </View>\n )}\n <View style={styles.detailRow}>\n <Text style={[styles.detailLabel, { color: textSecondary }]}>Duration</Text>\n <Text style={[styles.detailValue, { color: textPrimary }]}>\n {formatDuration(position.openTime, position.closeTime)}\n </Text>\n </View>\n </View>\n </View>\n\n {/* Risk Levels */}\n {showRiskLevels && (\n <View style={[styles.section, { backgroundColor: cardBg }]}>\n <Text style={[styles.sectionTitle, { color: textMuted }]}>Risk Management</Text>\n <View style={styles.riskGrid}>\n {position.stopLoss && (\n <View style={[styles.riskCard, { borderColor: '#EF4444' }]}>\n <Text style={[styles.riskCardLabel, { color: '#EF4444' }]}>Stop Loss</Text>\n <Text style={[styles.riskCardPrice, { color: textPrimary }]}>\n ${formatPrice(position.stopLoss)}\n </Text>\n {pnlAtSL !== null && (\n <Text style={[styles.riskCardPnl, { color: '#EF4444' }]}>\n {formatPnl(pnlAtSL)}\n </Text>\n )}\n </View>\n )}\n {position.takeProfit && (\n <View style={[styles.riskCard, { borderColor: '#10B981' }]}>\n <Text style={[styles.riskCardLabel, { color: '#10B981' }]}>Take Profit</Text>\n <Text style={[styles.riskCardPrice, { color: textPrimary }]}>\n ${formatPrice(position.takeProfit)}\n </Text>\n {pnlAtTP !== null && (\n <Text style={[styles.riskCardPnl, { color: '#10B981' }]}>\n {formatPnl(pnlAtTP)}\n </Text>\n )}\n </View>\n )}\n {position.liquidationPrice && (\n <View style={[styles.riskCard, { borderColor: '#F59E0B' }]}>\n <Text style={[styles.riskCardLabel, { color: '#F59E0B' }]}>Liquidation</Text>\n <Text style={[styles.riskCardPrice, { color: textPrimary }]}>\n ${formatPrice(position.liquidationPrice)}\n </Text>\n {distanceToLiquidation !== null && (\n <Text style={[styles.riskCardDistance, { color: textMuted }]}>\n {distanceToLiquidation.toFixed(2)}% away\n </Text>\n )}\n </View>\n )}\n </View>\n </View>\n )}\n\n {/* AI Reasoning */}\n {showReasoning && position.aiReasoning && (\n <View style={[styles.section, { backgroundColor: cardBg }]}>\n <Text style={[styles.sectionTitle, { color: textMuted }]}>AI Analysis</Text>\n <View style={[styles.reasoningBox, { backgroundColor: dark ? '#1A1A1F' : '#F3F4F6' }]}>\n <Text style={[styles.reasoningText, { color: textSecondary }]}>\n {position.aiReasoning}\n </Text>\n </View>\n {position.aiConfidence && (\n <View style={styles.confidenceRow}>\n <Text style={[styles.confidenceLabel, { color: textMuted }]}>Confidence</Text>\n <View style={[styles.confidenceBar, { backgroundColor: dark ? '#1A1A1F' : '#E5E7EB' }]}>\n <View\n style={[\n styles.confidenceFill,\n {\n width: `${position.aiConfidence * 100}%`,\n backgroundColor: position.aiConfidence >= 0.7 ? '#10B981' :\n position.aiConfidence >= 0.5 ? '#F59E0B' : '#EF4444',\n }\n ]}\n />\n </View>\n <Text style={[styles.confidenceValue, { color: textPrimary }]}>\n {(position.aiConfidence * 100).toFixed(0)}%\n </Text>\n </View>\n )}\n </View>\n )}\n\n {/* Timeline */}\n {showTimeline && (\n <View style={[styles.section, { backgroundColor: cardBg }]}>\n <Text style={[styles.sectionTitle, { color: textMuted }]}>Timeline</Text>\n <View style={styles.timeline}>\n <View style={styles.timelineItem}>\n <View style={[styles.timelineDot, { backgroundColor: '#10B981' }]} />\n <View style={styles.timelineContent}>\n <Text style={[styles.timelineLabel, { color: textSecondary }]}>Position Opened</Text>\n <Text style={[styles.timelineTime, { color: textMuted }]}>\n {formatTimestamp(position.openTime)}\n </Text>\n <Text style={[styles.timelineDetail, { color: textMuted }]}>\n @ ${formatPrice(position.entryPrice)}\n </Text>\n </View>\n </View>\n {position.closeTime && (\n <View style={styles.timelineItem}>\n <View style={[styles.timelineDot, { backgroundColor: '#EF4444' }]} />\n <View style={styles.timelineContent}>\n <Text style={[styles.timelineLabel, { color: textSecondary }]}>Position Closed</Text>\n <Text style={[styles.timelineTime, { color: textMuted }]}>\n {formatTimestamp(position.closeTime)}\n </Text>\n <Text style={[styles.timelineDetail, { color: textMuted }]}>\n @ ${formatPrice(position.currentPrice)}\n </Text>\n </View>\n </View>\n )}\n </View>\n </View>\n )}\n\n {/* Action Buttons */}\n {position.status === 'open' && onClose && (\n <View style={styles.actionsSection}>\n <TouchableOpacity\n style={styles.closeButton}\n onPress={handleClose}\n activeOpacity={0.7}\n >\n <Text style={styles.closeButtonText}>Close Position</Text>\n </TouchableOpacity>\n </View>\n )}\n </ScrollView>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n header: {\n padding: 16,\n borderBottomWidth: 1,\n gap: 16,\n },\n headerTop: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n headerLeft: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 10,\n },\n sideBadge: {\n paddingHorizontal: 10,\n paddingVertical: 4,\n borderRadius: 6,\n },\n sideText: {\n fontFamily: MONO,\n fontSize: 12,\n fontWeight: '700',\n },\n pair: {\n fontSize: 20,\n fontWeight: '700',\n },\n leverage: {\n fontFamily: MONO,\n fontSize: 14,\n },\n statusBadge: {\n paddingHorizontal: 10,\n paddingVertical: 4,\n borderRadius: 6,\n },\n statusText: {\n fontSize: 11,\n fontWeight: '700',\n },\n pnlSection: {\n padding: 16,\n borderRadius: 12,\n alignItems: 'center',\n gap: 4,\n },\n pnlMain: {\n flexDirection: 'row',\n alignItems: 'baseline',\n gap: 10,\n },\n pnlValue: {\n fontFamily: MONO,\n fontSize: 32,\n fontWeight: '700',\n },\n pnlPercent: {\n fontFamily: MONO,\n fontSize: 18,\n fontWeight: '600',\n },\n pnlLabel: {\n fontFamily: MONO,\n fontSize: 10,\n textTransform: 'uppercase',\n },\n section: {\n margin: 12,\n marginTop: 0,\n padding: 16,\n borderRadius: 12,\n gap: 12,\n },\n sectionTitle: {\n fontFamily: MONO,\n fontSize: 10,\n textTransform: 'uppercase',\n letterSpacing: 1,\n },\n priceGrid: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n },\n priceItem: {\n alignItems: 'center',\n gap: 4,\n },\n priceLabel: {\n fontFamily: MONO,\n fontSize: 9,\n textTransform: 'uppercase',\n },\n priceValue: {\n fontFamily: MONO,\n fontSize: 14,\n fontWeight: '600',\n },\n detailsGrid: {\n gap: 8,\n },\n detailRow: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n paddingVertical: 6,\n borderBottomWidth: 1,\n borderBottomColor: '#1A1A1F',\n },\n detailLabel: {\n fontSize: 13,\n },\n detailValue: {\n fontFamily: MONO,\n fontSize: 13,\n fontWeight: '600',\n },\n riskGrid: {\n flexDirection: 'row',\n gap: 10,\n },\n riskCard: {\n flex: 1,\n padding: 12,\n borderRadius: 8,\n borderWidth: 1,\n alignItems: 'center',\n gap: 4,\n },\n riskCardLabel: {\n fontFamily: MONO,\n fontSize: 9,\n fontWeight: '700',\n textTransform: 'uppercase',\n },\n riskCardPrice: {\n fontFamily: MONO,\n fontSize: 13,\n fontWeight: '600',\n },\n riskCardPnl: {\n fontFamily: MONO,\n fontSize: 11,\n },\n riskCardDistance: {\n fontFamily: MONO,\n fontSize: 10,\n },\n reasoningBox: {\n padding: 12,\n borderRadius: 8,\n },\n reasoningText: {\n fontSize: 13,\n lineHeight: 20,\n },\n confidenceRow: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 10,\n },\n confidenceLabel: {\n fontFamily: MONO,\n fontSize: 10,\n textTransform: 'uppercase',\n },\n confidenceBar: {\n flex: 1,\n height: 8,\n borderRadius: 4,\n overflow: 'hidden',\n },\n confidenceFill: {\n height: '100%',\n borderRadius: 4,\n },\n confidenceValue: {\n fontFamily: MONO,\n fontSize: 12,\n fontWeight: '600',\n width: 35,\n },\n timeline: {\n gap: 16,\n paddingLeft: 8,\n },\n timelineItem: {\n flexDirection: 'row',\n gap: 12,\n },\n timelineDot: {\n width: 12,\n height: 12,\n borderRadius: 6,\n marginTop: 3,\n },\n timelineContent: {\n flex: 1,\n gap: 2,\n },\n timelineLabel: {\n fontSize: 13,\n fontWeight: '500',\n },\n timelineTime: {\n fontFamily: MONO,\n fontSize: 11,\n },\n timelineDetail: {\n fontFamily: MONO,\n fontSize: 11,\n },\n actionsSection: {\n padding: 16,\n gap: 10,\n },\n closeButton: {\n backgroundColor: '#EF4444',\n paddingVertical: 14,\n borderRadius: 10,\n alignItems: 'center',\n },\n closeButtonText: {\n color: '#ffffff',\n fontSize: 16,\n fontWeight: '600',\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","/**\n * AI Trading Hooks for ONE SDK\n *\n * React hooks for AI quantitative trading features.\n * These hooks provide easy access to AI strategies, orders, and portfolio management.\n */\n\nimport { useState, useEffect, useCallback, useMemo } from 'react';\nimport { createOneEngineClient, OneEngineClient } from '../services/engine';\nimport type {\n AIStrategy,\n AIOrder,\n AIOrderStatus,\n AIPortfolioSummary,\n AITradeAllocation,\n AINavSnapshot,\n AIMarketData,\n CreateAIOrderRequest,\n StrategyCategory,\n ApiResponse,\n} from '../types';\n\n// Singleton client instance\nlet clientInstance: OneEngineClient | null = null;\n\nfunction getClient(): OneEngineClient {\n if (!clientInstance) {\n clientInstance = createOneEngineClient();\n }\n return clientInstance;\n}\n\n/**\n * Set the access token for authenticated requests\n */\nexport function setAITradingAccessToken(token: string) {\n getClient().setAccessToken(token);\n}\n\n/**\n * Clear the access token\n */\nexport function clearAITradingAccessToken() {\n getClient().clearAccessToken();\n}\n\n// ============================================\n// AI Strategies Hooks\n// ============================================\n\nexport interface UseAIStrategiesOptions {\n category?: StrategyCategory;\n riskLevel?: number;\n minTvl?: number;\n isActive?: boolean;\n autoRefresh?: boolean;\n refreshInterval?: number;\n}\n\nexport interface UseAIStrategiesResult {\n strategies: AIStrategy[];\n isLoading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\n/**\n * Hook to fetch and manage AI trading strategies\n */\nexport function useAIStrategies(options: UseAIStrategiesOptions = {}): UseAIStrategiesResult {\n const [strategies, setStrategies] = useState<AIStrategy[]>([]);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n const { category, riskLevel, minTvl, isActive, autoRefresh = false, refreshInterval = 60000 } = options;\n\n const fetchStrategies = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n try {\n const result = await getClient().getAIStrategies({ category, riskLevel, minTvl, isActive });\n if (result.success && result.data?.strategies) {\n setStrategies(result.data.strategies);\n } else {\n setError(result.error?.message || 'Failed to fetch strategies');\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Unknown error');\n } finally {\n setIsLoading(false);\n }\n }, [category, riskLevel, minTvl, isActive]);\n\n useEffect(() => {\n fetchStrategies();\n }, [fetchStrategies]);\n\n useEffect(() => {\n if (autoRefresh && refreshInterval > 0) {\n const interval = setInterval(fetchStrategies, refreshInterval);\n return () => clearInterval(interval);\n }\n }, [autoRefresh, refreshInterval, fetchStrategies]);\n\n return { strategies, isLoading, error, refresh: fetchStrategies };\n}\n\n/**\n * Hook to fetch a single AI strategy with performance data\n */\nexport interface UseAIStrategyResult {\n strategy: AIStrategy | null;\n performance: AINavSnapshot[];\n marketData: AIMarketData[];\n isLoading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\nexport function useAIStrategy(\n strategyId: string | undefined,\n include: ('performance' | 'market' | 'trades')[] = ['performance', 'market']\n): UseAIStrategyResult {\n const [strategy, setStrategy] = useState<AIStrategy | null>(null);\n const [performance, setPerformance] = useState<AINavSnapshot[]>([]);\n const [marketData, setMarketData] = useState<AIMarketData[]>([]);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n const fetchStrategy = useCallback(async () => {\n if (!strategyId) {\n setIsLoading(false);\n return;\n }\n\n setIsLoading(true);\n setError(null);\n try {\n const result = await getClient().getAIStrategy(strategyId, include);\n if (result.success && result.data) {\n setStrategy(result.data.strategy);\n setPerformance(result.data.performance || []);\n setMarketData(result.data.marketData || []);\n } else {\n setError(result.error?.message || 'Failed to fetch strategy');\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Unknown error');\n } finally {\n setIsLoading(false);\n }\n }, [strategyId, include.join(',')]);\n\n useEffect(() => {\n fetchStrategy();\n }, [fetchStrategy]);\n\n return { strategy, performance, marketData, isLoading, error, refresh: fetchStrategy };\n}\n\n// ============================================\n// AI Orders Hooks\n// ============================================\n\nexport interface UseAIOrdersOptions {\n strategyId?: string;\n status?: AIOrderStatus;\n autoRefresh?: boolean;\n refreshInterval?: number;\n}\n\nexport interface UseAIOrdersResult {\n orders: AIOrder[];\n isLoading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n createOrder: (request: CreateAIOrderRequest) => Promise<ApiResponse<{ order: AIOrder }>>;\n pauseOrder: (orderId: string) => Promise<ApiResponse<{ order: AIOrder; message: string }>>;\n resumeOrder: (orderId: string) => Promise<ApiResponse<{ order: AIOrder; message: string }>>;\n redeemOrder: (orderId: string) => Promise<ApiResponse<any>>;\n}\n\n/**\n * Hook to manage AI trading orders\n */\nexport function useAIOrders(options: UseAIOrdersOptions = {}): UseAIOrdersResult {\n const [orders, setOrders] = useState<AIOrder[]>([]);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n const { strategyId, status, autoRefresh = true, refreshInterval = 30000 } = options;\n\n const fetchOrders = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n try {\n const result = await getClient().getAIOrders({ strategyId, status });\n if (result.success && result.data?.orders) {\n setOrders(result.data.orders);\n } else {\n setError(result.error?.message || 'Failed to fetch orders');\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Unknown error');\n } finally {\n setIsLoading(false);\n }\n }, [strategyId, status]);\n\n useEffect(() => {\n fetchOrders();\n }, [fetchOrders]);\n\n useEffect(() => {\n if (autoRefresh && refreshInterval > 0) {\n const interval = setInterval(fetchOrders, refreshInterval);\n return () => clearInterval(interval);\n }\n }, [autoRefresh, refreshInterval, fetchOrders]);\n\n const createOrder = useCallback(async (request: CreateAIOrderRequest) => {\n const result = await getClient().createAIOrder(request);\n if (result.success) {\n await fetchOrders(); // Refresh orders list\n }\n return result;\n }, [fetchOrders]);\n\n const pauseOrder = useCallback(async (orderId: string) => {\n const result = await getClient().pauseAIOrder(orderId);\n if (result.success) {\n await fetchOrders();\n }\n return result;\n }, [fetchOrders]);\n\n const resumeOrder = useCallback(async (orderId: string) => {\n const result = await getClient().resumeAIOrder(orderId);\n if (result.success) {\n await fetchOrders();\n }\n return result;\n }, [fetchOrders]);\n\n const redeemOrder = useCallback(async (orderId: string) => {\n const result = await getClient().redeemAIOrder(orderId);\n if (result.success) {\n await fetchOrders();\n }\n return result;\n }, [fetchOrders]);\n\n return {\n orders,\n isLoading,\n error,\n refresh: fetchOrders,\n createOrder,\n pauseOrder,\n resumeOrder,\n redeemOrder,\n };\n}\n\n// ============================================\n// AI Portfolio Hooks\n// ============================================\n\nexport interface UseAIPortfolioResult {\n portfolio: AIPortfolioSummary | null;\n allocations: AITradeAllocation[];\n activeOrders: AIOrder[];\n isLoading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\n/**\n * Hook to fetch AI trading portfolio summary\n */\nexport function useAIPortfolio(autoRefresh = true): UseAIPortfolioResult {\n const [portfolio, setPortfolio] = useState<AIPortfolioSummary | null>(null);\n const [allocations, setAllocations] = useState<AITradeAllocation[]>([]);\n const [activeOrders, setActiveOrders] = useState<AIOrder[]>([]);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n const fetchPortfolio = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n try {\n const result = await getClient().getAIPortfolio(['allocations', 'orders']);\n if (result.success && result.data) {\n setPortfolio(result.data.portfolio);\n setAllocations(result.data.allocations || []);\n setActiveOrders(result.data.orders || []);\n } else {\n setError(result.error?.message || 'Failed to fetch portfolio');\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Unknown error');\n } finally {\n setIsLoading(false);\n }\n }, []);\n\n useEffect(() => {\n fetchPortfolio();\n }, [fetchPortfolio]);\n\n useEffect(() => {\n if (autoRefresh) {\n const interval = setInterval(fetchPortfolio, 30000);\n return () => clearInterval(interval);\n }\n }, [autoRefresh, fetchPortfolio]);\n\n return { portfolio, allocations, activeOrders, isLoading, error, refresh: fetchPortfolio };\n}\n\n// ============================================\n// AI Market Data Hook\n// ============================================\n\nexport interface UseAIMarketDataResult {\n prices: Record<string, { price: number; change24h: number }>;\n isLoading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\n/**\n * Hook to fetch real-time market data for AI trading pairs\n */\nexport function useAIMarketData(\n symbols: string[] = ['BTC', 'ETH', 'BNB', 'SOL', 'XRP', 'DOGE', 'ADA', 'AVAX'],\n autoRefresh = true\n): UseAIMarketDataResult {\n const [prices, setPrices] = useState<Record<string, { price: number; change24h: number }>>({});\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n const fetchPrices = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n try {\n const result = await getClient().getTokenPrices(symbols);\n if (result.success && result.data) {\n setPrices(result.data);\n } else {\n setError(result.error?.message || 'Failed to fetch prices');\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Unknown error');\n } finally {\n setIsLoading(false);\n }\n }, [symbols.join(',')]);\n\n useEffect(() => {\n fetchPrices();\n }, [fetchPrices]);\n\n useEffect(() => {\n if (autoRefresh) {\n const interval = setInterval(fetchPrices, 15000); // Update every 15 seconds\n return () => clearInterval(interval);\n }\n }, [autoRefresh, fetchPrices]);\n\n return { prices, isLoading, error, refresh: fetchPrices };\n}\n\n// ============================================\n// Combined AI Trading Hook\n// ============================================\n\nexport interface UseAITradingResult {\n // Strategies\n strategies: AIStrategy[];\n strategiesLoading: boolean;\n\n // Orders\n orders: AIOrder[];\n ordersLoading: boolean;\n\n // Portfolio\n portfolio: AIPortfolioSummary | null;\n portfolioLoading: boolean;\n\n // Market Data\n prices: Record<string, { price: number; change24h: number }>;\n\n // Actions\n createOrder: (request: CreateAIOrderRequest) => Promise<ApiResponse<{ order: AIOrder }>>;\n pauseOrder: (orderId: string) => Promise<ApiResponse<{ order: AIOrder; message: string }>>;\n resumeOrder: (orderId: string) => Promise<ApiResponse<{ order: AIOrder; message: string }>>;\n redeemOrder: (orderId: string) => Promise<ApiResponse<any>>;\n\n // Refresh\n refreshAll: () => Promise<void>;\n\n // Error\n error: string | null;\n}\n\n/**\n * Combined hook for all AI trading functionality\n */\nexport function useAITrading(): UseAITradingResult {\n const strategiesResult = useAIStrategies({ autoRefresh: true });\n const ordersResult = useAIOrders({ autoRefresh: true });\n const portfolioResult = useAIPortfolio(true);\n const marketResult = useAIMarketData();\n\n const refreshAll = useCallback(async () => {\n await Promise.all([\n strategiesResult.refresh(),\n ordersResult.refresh(),\n portfolioResult.refresh(),\n marketResult.refresh(),\n ]);\n }, [strategiesResult.refresh, ordersResult.refresh, portfolioResult.refresh, marketResult.refresh]);\n\n const error = useMemo(() => {\n return strategiesResult.error || ordersResult.error || portfolioResult.error || marketResult.error;\n }, [strategiesResult.error, ordersResult.error, portfolioResult.error, marketResult.error]);\n\n return {\n strategies: strategiesResult.strategies,\n strategiesLoading: strategiesResult.isLoading,\n orders: ordersResult.orders,\n ordersLoading: ordersResult.isLoading,\n portfolio: portfolioResult.portfolio,\n portfolioLoading: portfolioResult.isLoading,\n prices: marketResult.prices,\n createOrder: ordersResult.createOrder,\n pauseOrder: ordersResult.pauseOrder,\n resumeOrder: ordersResult.resumeOrder,\n redeemOrder: ordersResult.redeemOrder,\n refreshAll,\n error,\n };\n}\n\n// ============================================\n// AI Agents Hooks\n// ============================================\n\nexport interface AIAgent {\n id: string;\n name: string;\n name_zh: string;\n description: string;\n description_zh: string;\n category: string;\n risk_level: number;\n icon: string;\n color: string;\n tiers: Array<{ tier: number; amount: number; label: string; label_zh: string }>;\n supported_cycles: number[];\n default_cycle: number;\n supported_pairs: string[];\n supported_chains: string[];\n is_active: boolean;\n preview?: {\n tier: { tier: number; amount: number; label: string };\n cycle: number;\n dailyLots: number;\n stabilityScore: number;\n roiRange: { min: number; max: number; userMin: number; userMax: number };\n shareRate: number;\n profitEstimate: { monthlyMin: number; monthlyMax: number; cycleMin: number; cycleMax: number };\n };\n}\n\nexport interface AIAgentParams {\n dailyLots: number;\n effectiveCapital: number;\n stabilityScore: number;\n roiRange: { min: number; max: number; userMin: number; userMax: number };\n shareRate: number;\n profitEstimate: { monthlyMin: number; monthlyMax: number; cycleMin: number; cycleMax: number };\n}\n\nexport interface UseAIAgentsResult {\n agents: AIAgent[];\n shareRates: Record<number, number>;\n isLoading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\n/**\n * Hook to fetch all AI agents with their configurations\n */\nexport function useAIAgents(includeInactive = false): UseAIAgentsResult {\n const [agents, setAgents] = useState<AIAgent[]>([]);\n const [shareRates, setShareRates] = useState<Record<number, number>>({});\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n const fetchAgents = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n try {\n const result = await getClient().getAgentConfigs({ includeInactive });\n if (result.success && result.data) {\n setAgents(result.data.agents || []);\n setShareRates(result.data.shareRates || {});\n } else {\n setError(result.error?.message || 'Failed to fetch agents');\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Unknown error');\n } finally {\n setIsLoading(false);\n }\n }, [includeInactive]);\n\n useEffect(() => {\n fetchAgents();\n }, [fetchAgents]);\n\n return { agents, shareRates, isLoading, error, refresh: fetchAgents };\n}\n\nexport interface UseAIAgentResult {\n agent: AIAgent | null;\n params: AIAgentParams | null;\n isLoading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n calculateParams: (amount: number, cycleDays: number) => Promise<AIAgentParams | null>;\n}\n\n/**\n * Hook to fetch a single AI agent with detailed parameters\n */\nexport function useAIAgent(agentId: string | undefined): UseAIAgentResult {\n const [agent, setAgent] = useState<AIAgent | null>(null);\n const [params, setParams] = useState<AIAgentParams | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n const fetchAgent = useCallback(async () => {\n if (!agentId) {\n setIsLoading(false);\n return;\n }\n\n setIsLoading(true);\n setError(null);\n try {\n const result = await getClient().getAgentConfigs({ agentId });\n if (result.success && result.data?.agent) {\n setAgent(result.data.agent);\n } else {\n setError(result.error?.message || 'Agent not found');\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Unknown error');\n } finally {\n setIsLoading(false);\n }\n }, [agentId]);\n\n useEffect(() => {\n fetchAgent();\n }, [fetchAgent]);\n\n const calculateParams = useCallback(async (amount: number, cycleDays: number): Promise<AIAgentParams | null> => {\n if (!agentId) return null;\n\n try {\n const result = await getClient().calculateAgentParams({ agentId, amount, cycleDays });\n if (result.success && result.data) {\n setParams(result.data);\n return result.data;\n }\n return null;\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to calculate params');\n return null;\n }\n }, [agentId]);\n\n return { agent, params, isLoading, error, refresh: fetchAgent, calculateParams };\n}\n\nexport interface UseAIAgentSubscriptionResult {\n subscribe: (agentId: string, amount: number, cycleDays: number, txHash?: string) => Promise<ApiResponse<{ order: AIOrder }>>;\n isLoading: boolean;\n error: string | null;\n}\n\n/**\n * Hook to subscribe to an AI agent strategy\n */\nexport function useAIAgentSubscription(): UseAIAgentSubscriptionResult {\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const subscribe = useCallback(async (\n agentId: string,\n amount: number,\n cycleDays: number,\n txHash?: string\n ): Promise<ApiResponse<{ order: AIOrder }>> => {\n setIsLoading(true);\n setError(null);\n try {\n // Create order for the agent strategy\n const result = await getClient().createAIOrder({\n strategyId: agentId,\n amount,\n lockPeriodDays: cycleDays,\n txHashDeposit: txHash,\n });\n if (!result.success) {\n setError(result.error?.message || 'Failed to subscribe');\n }\n return result;\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : 'Subscription failed';\n setError(errorMsg);\n return { success: false, error: { code: 'SUBSCRIPTION_ERROR', message: errorMsg } };\n } finally {\n setIsLoading(false);\n }\n }, []);\n\n return { subscribe, isLoading, error };\n}\n","/**\n * ONE SDK - Forex Trading Hooks\n * Provides React hooks for StableFX on-chain forex trading integration\n * Can be used by any ecosystem partner\n */\n\nimport { useState, useEffect, useCallback, useRef, useMemo } from 'react';\nimport type {\n ForexPool,\n ForexPoolType,\n ForexInvestment,\n ForexLogEntry,\n ForexPoolTransaction,\n ForexPoolDailySnapshot,\n ForexTradeRecord,\n} from '../types/forex';\nimport {\n FOREX_POOL_DEFAULTS,\n FOREX_CYCLE_OPTIONS,\n FOREX_AGENT,\n FOREX_CAPITAL_SPLIT,\n computePoolAllocations,\n estimateForexProfit,\n} from '../types/forex';\n\n// ── Configuration ────────────────────────────────────────────────────────────\n\nlet _forexAccessToken: string | null = null;\nlet _forexEngineUrl: string = 'https://api.one23.io';\n\n/** Set the access token for authenticated forex API calls */\nexport function setForexAccessToken(token: string): void {\n _forexAccessToken = token;\n}\n\n/** Clear the forex access token */\nexport function clearForexAccessToken(): void {\n _forexAccessToken = null;\n}\n\n/** Configure the engine URL for forex API calls */\nexport function setForexEngineUrl(url: string): void {\n _forexEngineUrl = url;\n}\n\n// ── Internal API Helper ──────────────────────────────────────────────────────\n\nasync function forexApi<T>(path: string, options?: RequestInit): Promise<T | null> {\n try {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n if (_forexAccessToken) {\n headers['Authorization'] = `Bearer ${_forexAccessToken}`;\n }\n const res = await fetch(`${_forexEngineUrl}${path}`, { ...options, headers });\n if (!res.ok) return null;\n const json = await res.json();\n return json?.data ?? json;\n } catch {\n return null;\n }\n}\n\n// ── useForexPools ────────────────────────────────────────────────────────────\n\nexport interface UseForexPoolsResult {\n pools: ForexPool[];\n isLoading: boolean;\n error: string | null;\n refresh: () => void;\n}\n\nexport function useForexPools(options?: { refreshInterval?: number }): UseForexPoolsResult {\n const [pools, setPools] = useState<ForexPool[]>(FOREX_POOL_DEFAULTS);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const fetchPools = useCallback(async () => {\n setIsLoading(true);\n try {\n const data = await forexApi<{ pools: any[] }>('/api/forex/pools');\n if (data?.pools) {\n setPools(data.pools.map((p: any) => ({\n id: p.type ?? p.id,\n nameKey: `forex.pool_${p.type ?? p.id}`,\n descriptionKey: `forex.pool_${p.type ?? p.id}_desc`,\n allocation: p.allocation ?? (p.type === 'clearing' ? 0.50 : p.type === 'hedging' ? 0.30 : 0.20),\n totalSize: p.totalSize ?? p.total_size ?? 0,\n utilization: p.utilization ?? 0,\n color: p.type === 'clearing' ? '#3B82F6' : p.type === 'hedging' ? '#F59E0B' : '#10B981',\n apy7d: p.apy7d ?? 0,\n apy30d: p.apy30d ?? 0,\n netFlow24h: p.netFlow24h ?? 0,\n txCount24h: p.txCount24h ?? 0,\n txCountTotal: p.txCountTotal ?? 0,\n totalDeposits: p.totalDeposits ?? 0,\n totalWithdrawals: p.totalWithdrawals ?? 0,\n profitDistributed: p.profitDistributed ?? 0,\n lastUpdated: p.lastUpdated ?? Date.now(),\n })));\n }\n setError(null);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch pools');\n } finally {\n setIsLoading(false);\n }\n }, []);\n\n useEffect(() => {\n fetchPools();\n if (options?.refreshInterval) {\n const timer = setInterval(fetchPools, options.refreshInterval);\n return () => clearInterval(timer);\n }\n }, [fetchPools, options?.refreshInterval]);\n\n return { pools, isLoading, error, refresh: fetchPools };\n}\n\n// ── useForexInvestments ──────────────────────────────────────────────────────\n\nexport interface UseForexInvestmentsResult {\n investments: ForexInvestment[];\n isLoading: boolean;\n error: string | null;\n createInvestment: (params: { amount: number; selectedPairs: string[]; cycleDays: number }) => Promise<ForexInvestment | null>;\n redeemInvestment: (investmentId: string) => Promise<boolean>;\n refresh: () => void;\n portfolioSummary: {\n totalInvested: number;\n totalValue: number;\n totalProfit: number;\n activeCount: number;\n };\n}\n\nexport function useForexInvestments(options?: { refreshInterval?: number }): UseForexInvestmentsResult {\n const [investments, setInvestments] = useState<ForexInvestment[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const fetchInvestments = useCallback(async () => {\n setIsLoading(true);\n try {\n const data = await forexApi<{ investments: any[] }>('/api/forex/investments');\n if (data?.investments) {\n setInvestments(data.investments.map(mapInvestment));\n }\n setError(null);\n } catch {\n setError('Failed to fetch investments');\n } finally {\n setIsLoading(false);\n }\n }, []);\n\n const createInvestment = useCallback(async (params: {\n amount: number; selectedPairs: string[]; cycleDays: number;\n }): Promise<ForexInvestment | null> => {\n setIsLoading(true);\n try {\n const data = await forexApi<{ investment: any }>('/api/forex/investments', {\n method: 'POST',\n body: JSON.stringify(params),\n });\n if (data?.investment) {\n const inv = mapInvestment(data.investment);\n setInvestments(prev => [inv, ...prev]);\n return inv;\n }\n // Local fallback\n const inv = createLocalInvestment(params);\n setInvestments(prev => [inv, ...prev]);\n return inv;\n } catch {\n const inv = createLocalInvestment(params);\n setInvestments(prev => [inv, ...prev]);\n return inv;\n } finally {\n setIsLoading(false);\n }\n }, []);\n\n const redeemInvestment = useCallback(async (investmentId: string): Promise<boolean> => {\n try {\n await forexApi(`/api/forex/investments/${investmentId}/redeem`, { method: 'POST' });\n setInvestments(prev => prev.map(inv =>\n inv.id === investmentId ? { ...inv, status: 'redeemed' as const } : inv\n ));\n return true;\n } catch {\n return false;\n }\n }, []);\n\n useEffect(() => {\n fetchInvestments();\n if (options?.refreshInterval) {\n const timer = setInterval(fetchInvestments, options.refreshInterval);\n return () => clearInterval(timer);\n }\n }, [fetchInvestments, options?.refreshInterval]);\n\n const portfolioSummary = useMemo(() => {\n const active = investments.filter(i => i.status === 'active');\n return {\n totalInvested: active.reduce((s, i) => s + i.amount, 0),\n totalValue: active.reduce((s, i) => s + i.currentValue, 0),\n totalProfit: active.reduce((s, i) => s + i.profit, 0),\n activeCount: active.length,\n };\n }, [investments]);\n\n return { investments, isLoading, error, createInvestment, redeemInvestment, refresh: fetchInvestments, portfolioSummary };\n}\n\n// ── useForexSimulation ───────────────────────────────────────────────────────\n\nexport interface UseForexSimulationResult {\n logs: ForexLogEntry[];\n poolTransactions: ForexPoolTransaction[];\n isRunning: boolean;\n stats: { totalPnl: number; totalTrades: number; totalPips: number; totalLots: number };\n start: () => void;\n stop: () => void;\n clearLogs: () => void;\n}\n\nexport function useForexSimulation(options?: { maxLogs?: number }): UseForexSimulationResult {\n const maxLogs = options?.maxLogs ?? 500;\n const [logs, setLogs] = useState<ForexLogEntry[]>([]);\n const [poolTxs, setPoolTxs] = useState<ForexPoolTransaction[]>([]);\n const [isRunning, setIsRunning] = useState(false);\n const [stats, setStats] = useState({ totalPnl: 0, totalTrades: 0, totalPips: 0, totalLots: 0 });\n const engineRef = useRef<any>(null);\n\n const getEngine = useCallback(() => {\n if (!engineRef.current) {\n try {\n const { forexSimulationEngine } = require('../services/forex/ForexSimulationEngine');\n engineRef.current = forexSimulationEngine;\n } catch { /* not available */ }\n }\n return engineRef.current;\n }, []);\n\n const start = useCallback(() => {\n const engine = getEngine();\n if (!engine) return;\n if (!engine.isRunning()) engine.start();\n setIsRunning(true);\n }, [getEngine]);\n\n const stop = useCallback(() => {\n const engine = getEngine();\n if (engine) engine.stop();\n setIsRunning(false);\n }, [getEngine]);\n\n const clearLogs = useCallback(() => {\n setLogs([]);\n setPoolTxs([]);\n }, []);\n\n useEffect(() => {\n const engine = getEngine();\n if (!engine) return;\n\n const unsubLog = engine.onLog((entry: ForexLogEntry) => {\n setLogs(prev => {\n const next = [...prev, entry];\n return next.length > maxLogs ? next.slice(-maxLogs) : next;\n });\n const s = engine.getStats();\n setStats({ totalPnl: s.totalPnl, totalTrades: s.totalTrades, totalPips: s.totalPips, totalLots: s.totalLots });\n });\n\n const unsubTx = engine.onPoolTransaction((tx: ForexPoolTransaction) => {\n setPoolTxs(prev => [...prev.slice(-999), tx]);\n });\n\n return () => {\n unsubLog();\n unsubTx();\n };\n }, [getEngine, maxLogs]);\n\n return { logs, poolTransactions: poolTxs, isRunning, stats, start, stop, clearLogs };\n}\n\n// ── useForexPoolData ─────────────────────────────────────────────────────────\n\nexport interface UseForexPoolDataResult {\n snapshots: Record<ForexPoolType, ForexPoolDailySnapshot[]>;\n transactions: ForexPoolTransaction[];\n isInitialized: boolean;\n initialize: () => void;\n}\n\nexport function useForexPoolData(): UseForexPoolDataResult {\n const [snapshots, setSnapshots] = useState<Record<ForexPoolType, ForexPoolDailySnapshot[]>>({ clearing: [], hedging: [], insurance: [] });\n const [transactions, setTransactions] = useState<ForexPoolTransaction[]>([]);\n const [isInitialized, setIsInitialized] = useState(false);\n\n const initialize = useCallback(() => {\n if (isInitialized) return;\n try {\n const { ForexPoolDataGenerator } = require('../services/forex/ForexPoolDataGenerator');\n const gen = ForexPoolDataGenerator.getInstance();\n setSnapshots(gen.generateAllSnapshots());\n setTransactions(gen.generateAllTransactions());\n setIsInitialized(true);\n } catch { /* not available */ }\n }, [isInitialized]);\n\n return { snapshots, transactions, isInitialized, initialize };\n}\n\n// ── Combined useForexTrading ─────────────────────────────────────────────────\n\nexport interface UseForexTradingResult {\n pools: UseForexPoolsResult;\n investments: UseForexInvestmentsResult;\n simulation: UseForexSimulationResult;\n poolData: UseForexPoolDataResult;\n // Convenience re-exports\n capitalSplit: typeof FOREX_CAPITAL_SPLIT;\n agent: typeof FOREX_AGENT;\n currencyPairs: typeof import('../types/forex').FOREX_CURRENCY_PAIRS;\n cycleOptions: typeof import('../types/forex').FOREX_CYCLE_OPTIONS;\n computePoolAllocations: typeof computePoolAllocations;\n estimateProfit: typeof estimateForexProfit;\n}\n\nexport function useForexTrading(options?: {\n poolRefreshInterval?: number;\n investmentRefreshInterval?: number;\n}): UseForexTradingResult {\n const pools = useForexPools({ refreshInterval: options?.poolRefreshInterval });\n const investments = useForexInvestments({ refreshInterval: options?.investmentRefreshInterval });\n const simulation = useForexSimulation();\n const poolData = useForexPoolData();\n\n return {\n pools,\n investments,\n simulation,\n poolData,\n capitalSplit: FOREX_CAPITAL_SPLIT,\n agent: FOREX_AGENT,\n currencyPairs: require('../types/forex').FOREX_CURRENCY_PAIRS,\n cycleOptions: require('../types/forex').FOREX_CYCLE_OPTIONS,\n computePoolAllocations,\n estimateProfit: estimateForexProfit,\n };\n}\n\n// ── Internal Helpers ─────────────────────────────────────────────────────────\n\nfunction mapInvestment(raw: any): ForexInvestment {\n const cycleDays = raw.cycleDays ?? raw.cycle_days ?? 90;\n const cycleOption = FOREX_CYCLE_OPTIONS.find(c => c.days === cycleDays) || FOREX_CYCLE_OPTIONS[2];\n const amount = typeof raw.amount === 'string' ? parseFloat(raw.amount) : (raw.amount ?? 0);\n const allocs = computePoolAllocations(amount);\n\n return {\n id: raw.id,\n userId: raw.userId ?? raw.user_id,\n amount,\n currentValue: raw.currentValue ?? raw.current_value ?? amount,\n profit: raw.profit ?? 0,\n status: raw.status ?? 'active',\n selectedPairs: raw.selectedPairs ?? raw.selected_pairs ?? [],\n cycleDays,\n cycleOption,\n feeRate: raw.feeRate ?? cycleOption.feeRate,\n commissionRate: raw.commissionRate ?? cycleOption.commissionRate,\n startDate: raw.startDate ?? raw.start_date ?? new Date().toISOString(),\n endDate: raw.endDate ?? raw.end_date ?? '',\n tradingCapital: raw.tradingCapital ?? allocs.tradingCapital,\n totalPoolReserves: raw.totalPoolReserves ?? allocs.totalPoolReserves,\n poolAllocations: raw.poolAllocations ?? {\n clearing: allocs.clearing,\n hedging: allocs.hedging,\n insurance: allocs.insurance,\n },\n tradeWeight: raw.tradeWeight ?? 0,\n totalLots: raw.totalLots ?? 0,\n totalPips: raw.totalPips ?? 0,\n totalTrades: raw.totalTrades ?? 0,\n positions: raw.positions ?? [],\n tradeHistory: raw.tradeHistory ?? [],\n redeemedAt: raw.redeemedAt,\n createdAt: raw.createdAt,\n updatedAt: raw.updatedAt,\n };\n}\n\nfunction createLocalInvestment(params: { amount: number; selectedPairs: string[]; cycleDays: number }): ForexInvestment {\n const { amount, selectedPairs, cycleDays } = params;\n const cycleOption = FOREX_CYCLE_OPTIONS.find(c => c.days === cycleDays) || FOREX_CYCLE_OPTIONS[2];\n const allocs = computePoolAllocations(amount);\n const now = new Date();\n const endDate = new Date(now);\n endDate.setDate(endDate.getDate() + cycleDays);\n\n return {\n id: `fx_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`,\n amount,\n currentValue: amount,\n profit: 0,\n status: 'active',\n selectedPairs,\n cycleDays,\n cycleOption,\n startDate: now.toISOString(),\n endDate: endDate.toISOString(),\n tradingCapital: allocs.tradingCapital,\n totalPoolReserves: allocs.totalPoolReserves,\n poolAllocations: { clearing: allocs.clearing, hedging: allocs.hedging, insurance: allocs.insurance },\n tradeWeight: 0,\n totalLots: 0,\n totalPips: 0,\n totalTrades: 0,\n positions: [],\n tradeHistory: [],\n };\n}\n","/**\n * ONE SDK - Bot Simulation Hook\n * Provides React hook for subscribing to BotSimulationEngine events\n */\n\nimport { useState, useEffect, useCallback, useRef, useMemo } from 'react';\nimport type { BotLogEntry, BotState, StrategyPersonality } from '../services/forex/BotSimulationEngine';\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\nexport interface UseBotSimulationOptions {\n maxLogs?: number;\n strategyIds?: string[];\n userPairs?: string[];\n userChains?: string[];\n autoStart?: boolean;\n}\n\nexport interface UseBotSimulationResult {\n /** All log entries from all strategies */\n logs: BotLogEntry[];\n /** Logs grouped by strategy ID */\n logsByStrategy: Map<string, BotLogEntry[]>;\n /** Current state for each strategy */\n botStates: Map<string, BotState>;\n /** Whether simulation is currently running */\n isRunning: boolean;\n /** Available strategies */\n strategies: StrategyPersonality[];\n /** Start the simulation */\n start: (strategyIds?: string[], userPairs?: string[], userChains?: string[]) => void;\n /** Stop the simulation */\n stop: (strategyIds?: string[]) => void;\n /** Clear all logs */\n clearLogs: () => void;\n /** Emit boot sequence messages */\n emitBootSequence: () => void;\n /** Get state for a specific strategy */\n getBotState: (strategyId: string) => BotState | undefined;\n}\n\n// ── Hook Implementation ───────────────────────────────────────────────────────\n\nexport function useBotSimulation(options?: UseBotSimulationOptions): UseBotSimulationResult {\n const maxLogs = options?.maxLogs ?? 500;\n const [logs, setLogs] = useState<BotLogEntry[]>([]);\n const [isRunning, setIsRunning] = useState(false);\n const [strategies, setStrategies] = useState<StrategyPersonality[]>([]);\n const [botStatesMap, setBotStatesMap] = useState<Map<string, BotState>>(new Map());\n const engineRef = useRef<any>(null);\n const unsubRef = useRef<(() => void) | null>(null);\n\n // Lazy load the engine\n const getEngine = useCallback(() => {\n if (!engineRef.current) {\n try {\n const { botSimulationEngine } = require('../services/forex/BotSimulationEngine');\n engineRef.current = botSimulationEngine;\n setStrategies(botSimulationEngine.getStrategies());\n } catch {\n // Engine not available\n }\n }\n return engineRef.current;\n }, []);\n\n // Group logs by strategy\n const logsByStrategy = useMemo(() => {\n const grouped = new Map<string, BotLogEntry[]>();\n for (const log of logs) {\n const existing = grouped.get(log.strategyId) || [];\n grouped.set(log.strategyId, [...existing, log]);\n }\n return grouped;\n }, [logs]);\n\n // Start simulation\n const start = useCallback((\n strategyIds?: string[],\n userPairs?: string[],\n userChains?: string[]\n ) => {\n const engine = getEngine();\n if (!engine) return;\n\n const ids = strategyIds || options?.strategyIds;\n const pairs = userPairs || options?.userPairs;\n const chains = userChains || options?.userChains;\n\n if (!engine.isRunning()) {\n engine.start(ids, pairs, chains);\n }\n setIsRunning(true);\n }, [getEngine, options?.strategyIds, options?.userPairs, options?.userChains]);\n\n // Stop simulation\n const stop = useCallback((strategyIds?: string[]) => {\n const engine = getEngine();\n if (engine) {\n engine.stop(strategyIds);\n if (!strategyIds) {\n setIsRunning(false);\n }\n }\n }, [getEngine]);\n\n // Clear logs\n const clearLogs = useCallback(() => {\n setLogs([]);\n }, []);\n\n // Emit boot sequence\n const emitBootSequence = useCallback(() => {\n const engine = getEngine();\n if (engine) {\n engine.emitBootSequence();\n }\n }, [getEngine]);\n\n // Get state for specific strategy\n const getBotState = useCallback((strategyId: string): BotState | undefined => {\n return botStatesMap.get(strategyId);\n }, [botStatesMap]);\n\n // Subscribe to engine events\n useEffect(() => {\n const engine = getEngine();\n if (!engine) return;\n\n // Check if already running\n setIsRunning(engine.isRunning());\n\n // Subscribe to log events\n unsubRef.current = engine.onLog((entry: BotLogEntry) => {\n setLogs(prev => {\n const next = [...prev, entry];\n return next.length > maxLogs ? next.slice(-maxLogs) : next;\n });\n\n // Update bot states\n const state = engine.getBotState(entry.strategyId);\n if (state) {\n setBotStatesMap(prev => {\n const next = new Map(prev);\n next.set(entry.strategyId, state);\n return next;\n });\n }\n });\n\n return () => {\n if (unsubRef.current) {\n unsubRef.current();\n unsubRef.current = null;\n }\n };\n }, [getEngine, maxLogs]);\n\n // Auto-start if configured\n useEffect(() => {\n if (options?.autoStart) {\n const engine = getEngine();\n if (engine && !engine.isRunning()) {\n emitBootSequence();\n setTimeout(() => {\n start();\n }, 5500); // After boot sequence completes\n }\n }\n }, [options?.autoStart, getEngine, emitBootSequence, start]);\n\n // Periodically update bot states\n useEffect(() => {\n if (!isRunning) return;\n\n const interval = setInterval(() => {\n const engine = getEngine();\n if (engine) {\n const states = engine.getAllBotStates();\n if (states.size > 0) {\n setBotStatesMap(new Map(states));\n }\n }\n }, 1000);\n\n return () => clearInterval(interval);\n }, [isRunning, getEngine]);\n\n return {\n logs,\n logsByStrategy,\n botStates: botStatesMap,\n isRunning,\n strategies,\n start,\n stop,\n clearLogs,\n emitBootSequence,\n getBotState,\n };\n}\n","/**\n * ONE SDK - AI Positions Hook\n * Provides React hook for fetching and tracking AI trading positions\n */\n\nimport { useState, useEffect, useCallback, useMemo } from 'react';\nimport type { AIPosition, PositionStatus } from '../types/console';\n\n// ── Configuration ─────────────────────────────────────────────────────────────\n\nlet _consoleAccessToken: string | null = null;\nlet _consoleEngineUrl: string = 'https://api.one23.io';\n\nexport function setConsoleAccessToken(token: string): void {\n _consoleAccessToken = token;\n}\n\nexport function clearConsoleAccessToken(): void {\n _consoleAccessToken = null;\n}\n\nexport function setConsoleEngineUrl(url: string): void {\n _consoleEngineUrl = url;\n}\n\n// ── Internal API Helper ───────────────────────────────────────────────────────\n\nasync function consoleApi<T>(path: string, options?: RequestInit): Promise<T | null> {\n try {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n if (_consoleAccessToken) {\n headers['Authorization'] = `Bearer ${_consoleAccessToken}`;\n }\n const res = await fetch(`${_consoleEngineUrl}${path}`, { ...options, headers });\n if (!res.ok) return null;\n const json = await res.json();\n return json?.data ?? json;\n } catch {\n return null;\n }\n}\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\nexport interface UseAIPositionsOptions {\n strategyId?: string;\n strategyIds?: string[];\n status?: PositionStatus | PositionStatus[];\n pollInterval?: number;\n simulation?: boolean;\n}\n\nexport interface UseAIPositionsResult {\n positions: AIPosition[];\n openPositions: AIPosition[];\n closedPositions: AIPosition[];\n isLoading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n // Position actions\n closePosition: (positionId: string) => Promise<boolean>;\n updateStopLoss: (positionId: string, stopLoss: number) => Promise<boolean>;\n updateTakeProfit: (positionId: string, takeProfit: number) => Promise<boolean>;\n // Computed values\n summary: {\n totalPositions: number;\n openCount: number;\n totalExposure: number;\n totalPnl: number;\n unrealizedPnl: number;\n avgLeverage: number;\n byStrategy: Record<string, { count: number; pnl: number; exposure: number }>;\n };\n}\n\n// ── Simulation Data Generator ─────────────────────────────────────────────────\n\nfunction generateSimulatedPositions(strategyIds?: string[]): AIPosition[] {\n const strategies = [\n { id: 'balanced-01', name: 'Balanced Alpha', shortName: 'BAL' },\n { id: 'conservative-01', name: 'Conservative Shield', shortName: 'CON' },\n { id: 'aggressive-01', name: 'Aggressive Momentum', shortName: 'AGG' },\n ];\n\n const pairs = ['BTC/USDT', 'ETH/USDT', 'SOL/USDT', 'ARB/USDT', 'AVAX/USDT'];\n const basePrices: Record<string, number> = {\n 'BTC/USDT': 67500,\n 'ETH/USDT': 3450,\n 'SOL/USDT': 178,\n 'ARB/USDT': 1.18,\n 'AVAX/USDT': 38.5,\n };\n\n const positions: AIPosition[] = [];\n const filteredStrategies = strategyIds\n ? strategies.filter(s => strategyIds.includes(s.id))\n : strategies;\n\n for (const strategy of filteredStrategies) {\n // Generate 0-3 positions per strategy\n const numPositions = Math.floor(Math.random() * 4);\n for (let i = 0; i < numPositions; i++) {\n const pair = pairs[Math.floor(Math.random() * pairs.length)];\n const basePrice = basePrices[pair];\n const side = Math.random() > 0.5 ? 'LONG' : 'SHORT';\n const entryPrice = basePrice * (1 + (Math.random() - 0.5) * 0.02);\n const currentPrice = basePrice * (1 + (Math.random() - 0.5) * 0.03);\n const leverage = Math.floor(Math.random() * 10) + 2;\n const size = Math.floor(Math.random() * 1000) + 100;\n const margin = size / leverage;\n\n const priceDiff = side === 'LONG'\n ? (currentPrice - entryPrice) / entryPrice\n : (entryPrice - currentPrice) / entryPrice;\n const pnlPercent = priceDiff * leverage * 100;\n const pnl = size * priceDiff * leverage;\n\n positions.push({\n id: `pos_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`,\n strategyId: strategy.id,\n strategyName: strategy.name,\n pair,\n side,\n entryPrice,\n currentPrice,\n size,\n leverage,\n margin,\n pnl,\n pnlPercent,\n status: 'open',\n stopLoss: entryPrice * (side === 'LONG' ? 0.95 : 1.05),\n takeProfit: entryPrice * (side === 'LONG' ? 1.1 : 0.9),\n liquidationPrice: entryPrice * (side === 'LONG' ? (1 - 1 / leverage) : (1 + 1 / leverage)),\n openTime: Date.now() - Math.floor(Math.random() * 86400000),\n chain: ['ethereum', 'arbitrum', 'base'][Math.floor(Math.random() * 3)],\n aiConfidence: Math.random() * 0.4 + 0.5,\n aiReasoning: `${side === 'LONG' ? 'Bullish' : 'Bearish'} momentum detected on ${pair}`,\n });\n }\n }\n\n return positions;\n}\n\n// ── Hook Implementation ───────────────────────────────────────────────────────\n\nexport function useAIPositions(options?: UseAIPositionsOptions): UseAIPositionsResult {\n const [positions, setPositions] = useState<AIPosition[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const fetchPositions = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n\n try {\n if (options?.simulation) {\n // Use simulated data\n const simulated = generateSimulatedPositions(options?.strategyIds);\n setPositions(simulated);\n } else {\n // Fetch from API\n let path = '/api/v1/ai-quant/positions';\n const params = new URLSearchParams();\n if (options?.strategyId) {\n params.append('strategyId', options.strategyId);\n }\n if (options?.strategyIds?.length) {\n params.append('strategyIds', options.strategyIds.join(','));\n }\n if (options?.status) {\n const statuses = Array.isArray(options.status) ? options.status : [options.status];\n params.append('status', statuses.join(','));\n }\n if (params.toString()) {\n path += `?${params.toString()}`;\n }\n\n const data = await consoleApi<{ positions: any[] }>(path);\n if (data?.positions) {\n setPositions(data.positions.map(mapPosition));\n }\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch positions');\n } finally {\n setIsLoading(false);\n }\n }, [options?.simulation, options?.strategyId, options?.strategyIds, options?.status]);\n\n // Close position\n const closePosition = useCallback(async (positionId: string): Promise<boolean> => {\n try {\n if (options?.simulation) {\n setPositions(prev => prev.map(p =>\n p.id === positionId ? { ...p, status: 'closed' as const, closeTime: Date.now() } : p\n ));\n return true;\n }\n await consoleApi(`/api/v1/ai-quant/positions/${positionId}/close`, { method: 'POST' });\n setPositions(prev => prev.map(p =>\n p.id === positionId ? { ...p, status: 'closed' as const, closeTime: Date.now() } : p\n ));\n return true;\n } catch {\n return false;\n }\n }, [options?.simulation]);\n\n // Update stop loss\n const updateStopLoss = useCallback(async (positionId: string, stopLoss: number): Promise<boolean> => {\n try {\n if (options?.simulation) {\n setPositions(prev => prev.map(p =>\n p.id === positionId ? { ...p, stopLoss } : p\n ));\n return true;\n }\n await consoleApi(`/api/v1/ai-quant/positions/${positionId}`, {\n method: 'PATCH',\n body: JSON.stringify({ stopLoss }),\n });\n setPositions(prev => prev.map(p =>\n p.id === positionId ? { ...p, stopLoss } : p\n ));\n return true;\n } catch {\n return false;\n }\n }, [options?.simulation]);\n\n // Update take profit\n const updateTakeProfit = useCallback(async (positionId: string, takeProfit: number): Promise<boolean> => {\n try {\n if (options?.simulation) {\n setPositions(prev => prev.map(p =>\n p.id === positionId ? { ...p, takeProfit } : p\n ));\n return true;\n }\n await consoleApi(`/api/v1/ai-quant/positions/${positionId}`, {\n method: 'PATCH',\n body: JSON.stringify({ takeProfit }),\n });\n setPositions(prev => prev.map(p =>\n p.id === positionId ? { ...p, takeProfit } : p\n ));\n return true;\n } catch {\n return false;\n }\n }, [options?.simulation]);\n\n // Initial fetch and polling\n useEffect(() => {\n fetchPositions();\n if (options?.pollInterval) {\n const timer = setInterval(fetchPositions, options.pollInterval);\n return () => clearInterval(timer);\n }\n }, [fetchPositions, options?.pollInterval]);\n\n // Computed values\n const openPositions = useMemo(() =>\n positions.filter(p => p.status === 'open'),\n [positions]\n );\n\n const closedPositions = useMemo(() =>\n positions.filter(p => p.status === 'closed'),\n [positions]\n );\n\n const summary = useMemo(() => {\n const open = positions.filter(p => p.status === 'open');\n const byStrategy: Record<string, { count: number; pnl: number; exposure: number }> = {};\n\n for (const pos of open) {\n if (!byStrategy[pos.strategyId]) {\n byStrategy[pos.strategyId] = { count: 0, pnl: 0, exposure: 0 };\n }\n byStrategy[pos.strategyId].count++;\n byStrategy[pos.strategyId].pnl += pos.pnl;\n byStrategy[pos.strategyId].exposure += pos.size;\n }\n\n const totalExposure = open.reduce((sum, p) => sum + p.size, 0);\n const totalPnl = positions.reduce((sum, p) => sum + p.pnl, 0);\n const unrealizedPnl = open.reduce((sum, p) => sum + p.pnl, 0);\n const avgLeverage = open.length > 0\n ? open.reduce((sum, p) => sum + p.leverage, 0) / open.length\n : 0;\n\n return {\n totalPositions: positions.length,\n openCount: open.length,\n totalExposure,\n totalPnl,\n unrealizedPnl,\n avgLeverage,\n byStrategy,\n };\n }, [positions]);\n\n return {\n positions,\n openPositions,\n closedPositions,\n isLoading,\n error,\n refresh: fetchPositions,\n closePosition,\n updateStopLoss,\n updateTakeProfit,\n summary,\n };\n}\n\n// ── Helper Functions ──────────────────────────────────────────────────────────\n\nfunction mapPosition(raw: any): AIPosition {\n return {\n id: raw.id,\n strategyId: raw.strategyId ?? raw.strategy_id,\n strategyName: raw.strategyName ?? raw.strategy_name ?? '',\n pair: raw.pair,\n side: raw.side,\n entryPrice: raw.entryPrice ?? raw.entry_price ?? 0,\n currentPrice: raw.currentPrice ?? raw.current_price ?? 0,\n size: raw.size ?? 0,\n leverage: raw.leverage ?? 1,\n margin: raw.margin ?? raw.size / (raw.leverage ?? 1),\n pnl: raw.pnl ?? 0,\n pnlPercent: raw.pnlPercent ?? raw.pnl_percent ?? 0,\n status: raw.status ?? 'open',\n stopLoss: raw.stopLoss ?? raw.stop_loss,\n takeProfit: raw.takeProfit ?? raw.take_profit,\n liquidationPrice: raw.liquidationPrice ?? raw.liquidation_price,\n openTime: raw.openTime ?? raw.open_time ?? Date.now(),\n closeTime: raw.closeTime ?? raw.close_time,\n chain: raw.chain,\n orderId: raw.orderId ?? raw.order_id,\n aiConfidence: raw.aiConfidence ?? raw.ai_confidence,\n aiReasoning: raw.aiReasoning ?? raw.ai_reasoning,\n };\n}\n","/**\n * ONE SDK - AI Decisions Hook\n * Provides React hook for fetching AI trading decision history with reasoning\n */\n\nimport { useState, useEffect, useCallback, useMemo } from 'react';\nimport type { AIDecision, DecisionAction } from '../types/console';\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\nexport interface UseAIDecisionsOptions {\n strategyId?: string;\n strategyIds?: string[];\n actions?: DecisionAction[];\n limit?: number;\n pollInterval?: number;\n simulation?: boolean;\n}\n\nexport interface UseAIDecisionsResult {\n decisions: AIDecision[];\n recentDecisions: AIDecision[];\n executedDecisions: AIDecision[];\n isLoading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n // Filters\n getByStrategy: (strategyId: string) => AIDecision[];\n getByAction: (action: DecisionAction) => AIDecision[];\n // Stats\n stats: {\n totalDecisions: number;\n executedCount: number;\n executionRate: number;\n byAction: Record<DecisionAction, number>;\n byStrategy: Record<string, number>;\n avgConfidence: number;\n };\n}\n\n// ── Simulation Data Generator ─────────────────────────────────────────────────\n\nfunction generateSimulatedDecisions(\n strategyIds?: string[],\n limit: number = 50\n): AIDecision[] {\n const strategies = [\n { id: 'balanced-01', name: 'Balanced Alpha' },\n { id: 'conservative-01', name: 'Conservative Shield' },\n { id: 'aggressive-01', name: 'Aggressive Momentum' },\n ];\n\n const pairs = ['BTC/USDT', 'ETH/USDT', 'SOL/USDT', 'ARB/USDT', 'AVAX/USDT'];\n const actions: DecisionAction[] = ['OPEN_LONG', 'OPEN_SHORT', 'CLOSE_LONG', 'CLOSE_SHORT', 'HOLD', 'SKIP'];\n\n const reasonings = {\n OPEN_LONG: [\n 'RSI oversold with MACD bullish crossover',\n 'Golden cross detected on EMA, volume confirming',\n 'Support level held, momentum building',\n 'Bullish divergence on RSI, trend reversal likely',\n ],\n OPEN_SHORT: [\n 'RSI overbought with MACD bearish crossover',\n 'Death cross on EMA, volume increasing',\n 'Resistance level rejected, bearish pressure',\n 'Bearish divergence detected, reversal expected',\n ],\n CLOSE_LONG: [\n 'Take profit target reached',\n 'Momentum weakening, securing profits',\n 'Risk management triggered',\n ],\n CLOSE_SHORT: [\n 'Take profit target reached',\n 'Bearish momentum exhausted',\n 'Stop loss proximity warning',\n ],\n HOLD: [\n 'No clear signal, waiting for confirmation',\n 'Consolidation phase, insufficient momentum',\n 'Mixed indicators, patience advised',\n ],\n SKIP: [\n 'Confidence below threshold',\n 'Risk parameters exceeded',\n 'Position limit reached',\n ],\n };\n\n const filteredStrategies = strategyIds\n ? strategies.filter(s => strategyIds.includes(s.id))\n : strategies;\n\n const decisions: AIDecision[] = [];\n const now = Date.now();\n\n for (let i = 0; i < limit; i++) {\n const strategy = filteredStrategies[Math.floor(Math.random() * filteredStrategies.length)];\n const pair = pairs[Math.floor(Math.random() * pairs.length)];\n const action = actions[Math.floor(Math.random() * actions.length)];\n const confidence = Math.random() * 0.5 + 0.3;\n const executed = action !== 'HOLD' && action !== 'SKIP' && confidence > 0.5;\n const reasoningList = reasonings[action];\n\n decisions.push({\n id: `dec_${now - i * 60000}_${Math.random().toString(36).slice(2, 8)}`,\n timestamp: now - i * (Math.random() * 300000 + 60000),\n strategyId: strategy.id,\n strategyName: strategy.name,\n pair,\n action,\n confidence,\n reasoning: reasoningList[Math.floor(Math.random() * reasoningList.length)],\n indicators: {\n rsi: Math.random() * 100,\n macd: (Math.random() - 0.5) * 2,\n ema: Math.random() > 0.5 ? 'bullish' : 'bearish',\n volume: Math.random() * 2 + 0.5,\n bollinger: Math.random() > 0.5 ? 'upper' : 'lower',\n },\n signals: [\n `RSI ${Math.random() > 0.5 ? 'oversold' : 'overbought'}`,\n `MACD ${Math.random() > 0.5 ? 'bullish' : 'bearish'}`,\n ],\n executed,\n positionId: executed ? `pos_${Date.now()}_${Math.random().toString(36).slice(2, 6)}` : undefined,\n price: 50000 * (1 + (Math.random() - 0.5) * 0.1),\n size: executed ? Math.floor(Math.random() * 1000) + 100 : undefined,\n leverage: executed ? Math.floor(Math.random() * 10) + 2 : undefined,\n });\n }\n\n return decisions.sort((a, b) => b.timestamp - a.timestamp);\n}\n\n// ── Hook Implementation ───────────────────────────────────────────────────────\n\nexport function useAIDecisions(options?: UseAIDecisionsOptions): UseAIDecisionsResult {\n const limit = options?.limit ?? 100;\n const [decisions, setDecisions] = useState<AIDecision[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const fetchDecisions = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n\n try {\n if (options?.simulation) {\n const simulated = generateSimulatedDecisions(options?.strategyIds, limit);\n setDecisions(simulated);\n } else {\n let path = '/api/v1/ai-quant/decisions';\n const params = new URLSearchParams();\n if (options?.strategyId) {\n params.append('strategyId', options.strategyId);\n }\n if (options?.strategyIds?.length) {\n params.append('strategyIds', options.strategyIds.join(','));\n }\n if (options?.actions?.length) {\n params.append('actions', options.actions.join(','));\n }\n params.append('limit', limit.toString());\n if (params.toString()) {\n path += `?${params.toString()}`;\n }\n\n const res = await fetch(`https://api.one23.io${path}`);\n if (res.ok) {\n const data = await res.json();\n if (data?.decisions) {\n setDecisions(data.decisions.map(mapDecision));\n }\n }\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch decisions');\n } finally {\n setIsLoading(false);\n }\n }, [options?.simulation, options?.strategyId, options?.strategyIds, options?.actions, limit]);\n\n // Initial fetch and polling\n useEffect(() => {\n fetchDecisions();\n if (options?.pollInterval) {\n const timer = setInterval(fetchDecisions, options.pollInterval);\n return () => clearInterval(timer);\n }\n }, [fetchDecisions, options?.pollInterval]);\n\n // Filter functions\n const getByStrategy = useCallback((strategyId: string) =>\n decisions.filter(d => d.strategyId === strategyId),\n [decisions]\n );\n\n const getByAction = useCallback((action: DecisionAction) =>\n decisions.filter(d => d.action === action),\n [decisions]\n );\n\n // Computed values\n const recentDecisions = useMemo(() =>\n decisions.slice(0, 10),\n [decisions]\n );\n\n const executedDecisions = useMemo(() =>\n decisions.filter(d => d.executed),\n [decisions]\n );\n\n const stats = useMemo(() => {\n const executed = decisions.filter(d => d.executed);\n const byAction: Record<DecisionAction, number> = {\n OPEN_LONG: 0,\n OPEN_SHORT: 0,\n CLOSE_LONG: 0,\n CLOSE_SHORT: 0,\n HOLD: 0,\n SKIP: 0,\n };\n const byStrategy: Record<string, number> = {};\n\n for (const d of decisions) {\n byAction[d.action]++;\n byStrategy[d.strategyId] = (byStrategy[d.strategyId] || 0) + 1;\n }\n\n const avgConfidence = decisions.length > 0\n ? decisions.reduce((sum, d) => sum + d.confidence, 0) / decisions.length\n : 0;\n\n return {\n totalDecisions: decisions.length,\n executedCount: executed.length,\n executionRate: decisions.length > 0 ? executed.length / decisions.length : 0,\n byAction,\n byStrategy,\n avgConfidence,\n };\n }, [decisions]);\n\n return {\n decisions,\n recentDecisions,\n executedDecisions,\n isLoading,\n error,\n refresh: fetchDecisions,\n getByStrategy,\n getByAction,\n stats,\n };\n}\n\n// ── Helper Functions ──────────────────────────────────────────────────────────\n\nfunction mapDecision(raw: any): AIDecision {\n return {\n id: raw.id,\n timestamp: raw.timestamp ?? Date.now(),\n strategyId: raw.strategyId ?? raw.strategy_id,\n strategyName: raw.strategyName ?? raw.strategy_name ?? '',\n pair: raw.pair,\n action: raw.action,\n confidence: raw.confidence ?? 0,\n reasoning: raw.reasoning ?? '',\n indicators: raw.indicators ?? {},\n signals: raw.signals ?? [],\n executed: raw.executed ?? false,\n positionId: raw.positionId ?? raw.position_id,\n price: raw.price,\n size: raw.size,\n leverage: raw.leverage,\n };\n}\n","/**\n * ONE SDK - AI Risk Status Hook\n * Provides React hook for monitoring trading risk status and limits\n */\n\nimport { useState, useEffect, useCallback, useMemo } from 'react';\nimport type { RiskStatus, RiskLevel, TradingStatus } from '../types/console';\nimport { DEFAULT_RISK_STATUS, calculateRiskLevel } from '../types/console';\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\nexport interface UseAIRiskStatusOptions {\n strategyId?: string;\n pollInterval?: number;\n simulation?: boolean;\n}\n\nexport interface UseAIRiskStatusResult {\n riskStatus: RiskStatus;\n isLoading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n // Computed values\n isWithinLimits: boolean;\n canTrade: boolean;\n riskLevel: RiskLevel;\n tradingStatus: TradingStatus;\n warnings: string[];\n // Actions\n pauseTrading: () => Promise<boolean>;\n resumeTrading: () => Promise<boolean>;\n resetDailyLimits: () => Promise<boolean>;\n}\n\n// ── Simulation Data Generator ─────────────────────────────────────────────────\n\nfunction generateSimulatedRiskStatus(): RiskStatus {\n const totalExposure = Math.random() * 80000 + 10000;\n const maxExposure = 100000;\n const exposurePercent = (totalExposure / maxExposure) * 100;\n\n const dailyPnl = (Math.random() - 0.3) * 3000;\n const dailyPnlLimit = 5000;\n const dailyPnlPercent = (Math.abs(dailyPnl) / dailyPnlLimit) * 100;\n\n const currentDrawdown = Math.random() * 10;\n const maxDrawdown = 15;\n const drawdownPercent = (currentDrawdown / maxDrawdown) * 100;\n\n const openPositions = Math.floor(Math.random() * 8);\n const maxPositions = 10;\n\n const dailyTradeCount = Math.floor(Math.random() * 30);\n const dailyTradeLimit = 50;\n\n const riskLevel = calculateRiskLevel(exposurePercent, drawdownPercent, dailyPnlPercent);\n\n const warnings: string[] = [];\n if (exposurePercent > 70) warnings.push('High portfolio exposure');\n if (drawdownPercent > 60) warnings.push('Approaching max drawdown');\n if (dailyPnlPercent > 80 && dailyPnl < 0) warnings.push('Daily loss limit warning');\n if (openPositions >= maxPositions - 1) warnings.push('Position limit nearly reached');\n\n let tradingStatus: TradingStatus = 'active';\n if (riskLevel === 'critical') tradingStatus = 'stopped';\n else if (riskLevel === 'high' && warnings.length > 1) tradingStatus = 'paused';\n\n const strategyRisks: Record<string, { exposure: number; drawdown: number; riskLevel: RiskLevel }> = {\n 'balanced-01': {\n exposure: Math.random() * 30000,\n drawdown: Math.random() * 5,\n riskLevel: Math.random() > 0.7 ? 'medium' : 'low',\n },\n 'conservative-01': {\n exposure: Math.random() * 20000,\n drawdown: Math.random() * 3,\n riskLevel: 'low',\n },\n 'aggressive-01': {\n exposure: Math.random() * 40000,\n drawdown: Math.random() * 8,\n riskLevel: Math.random() > 0.5 ? 'high' : 'medium',\n },\n };\n\n return {\n timestamp: Date.now(),\n totalExposure,\n maxExposure,\n exposurePercent,\n dailyPnl,\n dailyPnlLimit,\n dailyPnlPercent,\n dailyTradeCount,\n dailyTradeLimit,\n currentDrawdown,\n maxDrawdown,\n drawdownPercent,\n openPositions,\n maxPositions,\n riskLevel,\n tradingStatus,\n warnings,\n strategyRisks,\n };\n}\n\n// ── Hook Implementation ───────────────────────────────────────────────────────\n\nexport function useAIRiskStatus(options?: UseAIRiskStatusOptions): UseAIRiskStatusResult {\n const [riskStatus, setRiskStatus] = useState<RiskStatus>(DEFAULT_RISK_STATUS);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const fetchRiskStatus = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n\n try {\n if (options?.simulation) {\n const simulated = generateSimulatedRiskStatus();\n setRiskStatus(simulated);\n } else {\n let path = '/api/v1/ai-quant/risk-status';\n if (options?.strategyId) {\n path += `?strategyId=${options.strategyId}`;\n }\n\n const res = await fetch(`https://api.one23.io${path}`);\n if (res.ok) {\n const data = await res.json();\n if (data) {\n setRiskStatus(mapRiskStatus(data));\n }\n }\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch risk status');\n } finally {\n setIsLoading(false);\n }\n }, [options?.simulation, options?.strategyId]);\n\n // Initial fetch and polling\n useEffect(() => {\n fetchRiskStatus();\n if (options?.pollInterval) {\n const timer = setInterval(fetchRiskStatus, options.pollInterval);\n return () => clearInterval(timer);\n }\n }, [fetchRiskStatus, options?.pollInterval]);\n\n // Actions\n const pauseTrading = useCallback(async (): Promise<boolean> => {\n try {\n if (options?.simulation) {\n setRiskStatus(prev => ({ ...prev, tradingStatus: 'paused' }));\n return true;\n }\n const res = await fetch('https://api.one23.io/api/v1/ai-quant/trading/pause', {\n method: 'POST',\n });\n if (res.ok) {\n setRiskStatus(prev => ({ ...prev, tradingStatus: 'paused' }));\n return true;\n }\n return false;\n } catch {\n return false;\n }\n }, [options?.simulation]);\n\n const resumeTrading = useCallback(async (): Promise<boolean> => {\n try {\n if (options?.simulation) {\n setRiskStatus(prev => ({ ...prev, tradingStatus: 'active' }));\n return true;\n }\n const res = await fetch('https://api.one23.io/api/v1/ai-quant/trading/resume', {\n method: 'POST',\n });\n if (res.ok) {\n setRiskStatus(prev => ({ ...prev, tradingStatus: 'active' }));\n return true;\n }\n return false;\n } catch {\n return false;\n }\n }, [options?.simulation]);\n\n const resetDailyLimits = useCallback(async (): Promise<boolean> => {\n try {\n if (options?.simulation) {\n setRiskStatus(prev => ({\n ...prev,\n dailyPnl: 0,\n dailyPnlPercent: 0,\n dailyTradeCount: 0,\n warnings: prev.warnings.filter(w => !w.includes('Daily')),\n }));\n return true;\n }\n const res = await fetch('https://api.one23.io/api/v1/ai-quant/risk/reset-daily', {\n method: 'POST',\n });\n return res.ok;\n } catch {\n return false;\n }\n }, [options?.simulation]);\n\n // Computed values\n const isWithinLimits = useMemo(() => {\n return (\n riskStatus.exposurePercent < 90 &&\n riskStatus.drawdownPercent < 90 &&\n riskStatus.dailyPnlPercent < 90 &&\n riskStatus.openPositions < riskStatus.maxPositions\n );\n }, [riskStatus]);\n\n const canTrade = useMemo(() => {\n return riskStatus.tradingStatus === 'active' && isWithinLimits;\n }, [riskStatus.tradingStatus, isWithinLimits]);\n\n return {\n riskStatus,\n isLoading,\n error,\n refresh: fetchRiskStatus,\n isWithinLimits,\n canTrade,\n riskLevel: riskStatus.riskLevel,\n tradingStatus: riskStatus.tradingStatus,\n warnings: riskStatus.warnings,\n pauseTrading,\n resumeTrading,\n resetDailyLimits,\n };\n}\n\n// ── Helper Functions ──────────────────────────────────────────────────────────\n\nfunction mapRiskStatus(raw: any): RiskStatus {\n const exposurePercent = raw.maxExposure > 0\n ? (raw.totalExposure / raw.maxExposure) * 100\n : 0;\n const dailyPnlPercent = raw.dailyPnlLimit > 0\n ? (Math.abs(raw.dailyPnl) / raw.dailyPnlLimit) * 100\n : 0;\n const drawdownPercent = raw.maxDrawdown > 0\n ? (raw.currentDrawdown / raw.maxDrawdown) * 100\n : 0;\n\n return {\n timestamp: raw.timestamp ?? Date.now(),\n totalExposure: raw.totalExposure ?? raw.total_exposure ?? 0,\n maxExposure: raw.maxExposure ?? raw.max_exposure ?? 100000,\n exposurePercent,\n dailyPnl: raw.dailyPnl ?? raw.daily_pnl ?? 0,\n dailyPnlLimit: raw.dailyPnlLimit ?? raw.daily_pnl_limit ?? 5000,\n dailyPnlPercent,\n dailyTradeCount: raw.dailyTradeCount ?? raw.daily_trade_count ?? 0,\n dailyTradeLimit: raw.dailyTradeLimit ?? raw.daily_trade_limit ?? 50,\n currentDrawdown: raw.currentDrawdown ?? raw.current_drawdown ?? 0,\n maxDrawdown: raw.maxDrawdown ?? raw.max_drawdown ?? 15,\n drawdownPercent,\n openPositions: raw.openPositions ?? raw.open_positions ?? 0,\n maxPositions: raw.maxPositions ?? raw.max_positions ?? 10,\n riskLevel: raw.riskLevel ?? raw.risk_level ?? calculateRiskLevel(exposurePercent, drawdownPercent, dailyPnlPercent),\n tradingStatus: raw.tradingStatus ?? raw.trading_status ?? 'active',\n warnings: raw.warnings ?? [],\n strategyRisks: raw.strategyRisks ?? raw.strategy_risks,\n };\n}\n","/**\n * ONE SDK - AI Quant Console Hook\n * Combined hook for all AI trading console data\n */\n\nimport { useState, useEffect, useCallback, useMemo } from 'react';\nimport { useBotSimulation } from './useBotSimulation';\nimport { useAIPositions } from './useAIPositions';\nimport { useAIDecisions } from './useAIDecisions';\nimport { useAIRiskStatus } from './useAIRiskStatus';\nimport type {\n AIAgent,\n AIPosition,\n AIDecision,\n RiskStatus,\n ConsoleMetrics,\n AIQuantConsoleOptions,\n} from '../types/console';\nimport { DEFAULT_CONSOLE_METRICS, AGENT_STATUS_COLORS } from '../types/console';\nimport type { BotLogEntry, BotState, StrategyPersonality } from '../services/forex/BotSimulationEngine';\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\nexport interface UseAIQuantConsoleResult {\n // Strategies and Agents\n strategies: StrategyPersonality[];\n agents: AIAgent[];\n // Logs\n logs: BotLogEntry[];\n logsByStrategy: Map<string, BotLogEntry[]>;\n // Bot States\n botStates: Map<string, BotState>;\n // Positions\n positions: AIPosition[];\n openPositions: AIPosition[];\n // Decisions\n decisions: AIDecision[];\n recentDecisions: AIDecision[];\n // Risk\n riskStatus: RiskStatus | null;\n // Metrics\n metrics: ConsoleMetrics;\n // State\n isRunning: boolean;\n isLoading: boolean;\n error: string | null;\n // Controls\n start: (strategyIds?: string[]) => void;\n stop: (strategyIds?: string[]) => void;\n clearLogs: () => void;\n emitBootSequence: () => void;\n refresh: () => Promise<void>;\n // Agent helpers\n getAgent: (strategyId: string) => AIAgent | undefined;\n getAgentLogs: (strategyId: string) => BotLogEntry[];\n getAgentPositions: (strategyId: string) => AIPosition[];\n getAgentDecisions: (strategyId: string) => AIDecision[];\n}\n\n// ── Hook Implementation ───────────────────────────────────────────────────────\n\nexport function useAIQuantConsole(options?: AIQuantConsoleOptions): UseAIQuantConsoleResult {\n const simulation = options?.simulation ?? true;\n const pollInterval = options?.pollInterval ?? 5000;\n const maxLogs = options?.maxLogs ?? 500;\n const strategyIds = options?.strategyIds;\n\n // Sub-hooks\n const botSim = useBotSimulation({\n maxLogs,\n strategyIds,\n autoStart: false,\n });\n\n const positionsHook = useAIPositions({\n strategyIds,\n pollInterval,\n simulation,\n });\n\n const decisionsHook = useAIDecisions({\n strategyIds,\n pollInterval,\n simulation,\n limit: 100,\n });\n\n const riskHook = useAIRiskStatus({\n pollInterval,\n simulation,\n });\n\n // Transform bot states to agents\n const agents = useMemo((): AIAgent[] => {\n const agentList: AIAgent[] = [];\n\n for (const strategy of botSim.strategies) {\n const state = botSim.botStates.get(strategy.id);\n const strategyPositions = positionsHook.positions.filter(p => p.strategyId === strategy.id);\n const strategyDecisions = decisionsHook.decisions.filter(d => d.strategyId === strategy.id);\n const openPos = strategyPositions.filter(p => p.status === 'open');\n\n const totalPnl = strategyPositions.reduce((sum, p) => sum + p.pnl, 0);\n const exposure = openPos.reduce((sum, p) => sum + p.size, 0);\n const winCount = strategyPositions.filter(p => p.pnl > 0).length;\n const totalTrades = strategyPositions.length;\n\n // Determine agent risk level based on exposure and drawdown\n let riskLevel: 'low' | 'medium' | 'high' | 'critical' = 'low';\n if (strategy.riskTolerance === 'high') riskLevel = 'medium';\n if (exposure > 50000) riskLevel = 'high';\n if (state && state.openPositions.length >= 3) riskLevel = 'high';\n\n agentList.push({\n id: strategy.id,\n strategyId: strategy.id,\n name: strategy.name,\n shortName: strategy.shortName,\n color: strategy.color,\n status: state?.isRunning ? 'active' : botSim.isRunning ? 'idle' : 'paused',\n totalPnl: state?.totalPnl ?? totalPnl,\n pnlToday: totalPnl * 0.3, // Simulated\n winRate: state?.winRate ?? (totalTrades > 0 ? winCount / totalTrades : 0.5),\n totalTrades: state?.totalTrades ?? totalTrades,\n tradesToday: Math.floor((state?.totalTrades ?? totalTrades) * 0.2),\n currentPair: state?.currentPair,\n currentPrice: state?.currentPrice,\n lastSignal: state?.lastSignal,\n lastSignalConfidence: state?.lastSignalConfidence,\n lastActivity: state ? Date.now() : undefined,\n openPositions: openPos.length,\n totalExposure: exposure,\n riskLevel,\n drawdown: Math.random() * 5, // Simulated\n riskTolerance: strategy.riskTolerance,\n primaryIndicators: strategy.primaryIndicators,\n preferredPairs: strategy.preferredPairs,\n leverageRange: [strategy.leverageMin, strategy.leverageMax],\n });\n }\n\n return agentList;\n }, [botSim.strategies, botSim.botStates, botSim.isRunning, positionsHook.positions, decisionsHook.decisions]);\n\n // Calculate combined metrics\n const metrics = useMemo((): ConsoleMetrics => {\n const positions = positionsHook.positions;\n const openPos = positions.filter(p => p.status === 'open');\n const closedPos = positions.filter(p => p.status === 'closed');\n\n const totalPnl = positions.reduce((sum, p) => sum + p.pnl, 0);\n const unrealizedPnl = openPos.reduce((sum, p) => sum + p.pnl, 0);\n const realizedPnl = closedPos.reduce((sum, p) => sum + p.pnl, 0);\n\n const wins = positions.filter(p => p.pnl > 0);\n const losses = positions.filter(p => p.pnl < 0);\n\n const avgWin = wins.length > 0\n ? wins.reduce((sum, p) => sum + p.pnl, 0) / wins.length\n : 0;\n const avgLoss = losses.length > 0\n ? Math.abs(losses.reduce((sum, p) => sum + p.pnl, 0)) / losses.length\n : 0;\n\n const profitFactor = avgLoss > 0 ? avgWin / avgLoss : avgWin > 0 ? Infinity : 0;\n\n const totalExposure = openPos.reduce((sum, p) => sum + p.size, 0);\n const avgLeverage = openPos.length > 0\n ? openPos.reduce((sum, p) => sum + p.leverage, 0) / openPos.length\n : 0;\n\n // Strategy metrics\n const strategyMetrics: Record<string, { pnl: number; trades: number; winRate: number; exposure: number }> = {};\n for (const agent of agents) {\n const strategyPos = positions.filter(p => p.strategyId === agent.strategyId);\n const strategyOpen = strategyPos.filter(p => p.status === 'open');\n const strategyWins = strategyPos.filter(p => p.pnl > 0);\n\n strategyMetrics[agent.strategyId] = {\n pnl: strategyPos.reduce((sum, p) => sum + p.pnl, 0),\n trades: strategyPos.length,\n winRate: strategyPos.length > 0 ? strategyWins.length / strategyPos.length : 0,\n exposure: strategyOpen.reduce((sum, p) => sum + p.size, 0),\n };\n }\n\n return {\n nav: 100000 + totalPnl,\n navChange24h: totalPnl * 0.3,\n navChangePercent24h: (totalPnl * 0.3) / 100000 * 100,\n totalPnl,\n realizedPnl,\n unrealizedPnl,\n pnlToday: totalPnl * 0.3,\n pnl7d: totalPnl * 0.7,\n pnl30d: totalPnl,\n totalTrades: positions.length,\n tradesToday: Math.floor(positions.length * 0.2),\n winRate: positions.length > 0 ? wins.length / positions.length : 0,\n winCount: wins.length,\n lossCount: losses.length,\n avgWin,\n avgLoss,\n profitFactor,\n openPositions: openPos.length,\n totalExposure,\n avgLeverage,\n strategyMetrics,\n };\n }, [positionsHook.positions, agents]);\n\n // Controls\n const start = useCallback((ids?: string[]) => {\n botSim.start(ids || strategyIds);\n }, [botSim, strategyIds]);\n\n const stop = useCallback((ids?: string[]) => {\n botSim.stop(ids);\n }, [botSim]);\n\n const clearLogs = useCallback(() => {\n botSim.clearLogs();\n }, [botSim]);\n\n const refresh = useCallback(async () => {\n await Promise.all([\n positionsHook.refresh(),\n decisionsHook.refresh(),\n riskHook.refresh(),\n ]);\n }, [positionsHook, decisionsHook, riskHook]);\n\n // Agent helpers\n const getAgent = useCallback((strategyId: string) =>\n agents.find(a => a.strategyId === strategyId),\n [agents]\n );\n\n const getAgentLogs = useCallback((strategyId: string) =>\n botSim.logsByStrategy.get(strategyId) || [],\n [botSim.logsByStrategy]\n );\n\n const getAgentPositions = useCallback((strategyId: string) =>\n positionsHook.positions.filter(p => p.strategyId === strategyId),\n [positionsHook.positions]\n );\n\n const getAgentDecisions = useCallback((strategyId: string) =>\n decisionsHook.decisions.filter(d => d.strategyId === strategyId),\n [decisionsHook.decisions]\n );\n\n // Combined loading/error state\n const isLoading = positionsHook.isLoading || decisionsHook.isLoading || riskHook.isLoading;\n const error = positionsHook.error || decisionsHook.error || riskHook.error;\n\n return {\n strategies: botSim.strategies,\n agents,\n logs: botSim.logs,\n logsByStrategy: botSim.logsByStrategy,\n botStates: botSim.botStates,\n positions: positionsHook.positions,\n openPositions: positionsHook.openPositions,\n decisions: decisionsHook.decisions,\n recentDecisions: decisionsHook.recentDecisions,\n riskStatus: riskHook.riskStatus,\n metrics,\n isRunning: botSim.isRunning,\n isLoading,\n error,\n start,\n stop,\n clearLogs,\n emitBootSequence: botSim.emitBootSequence,\n refresh,\n getAgent,\n getAgentLogs,\n getAgentPositions,\n getAgentDecisions,\n };\n}\n","/**\n * ONE SDK - Master Trading Console Hook\n * Orchestrates all AI and Forex trading data in a unified interface\n */\n\nimport { useState, useEffect, useCallback, useMemo } from 'react';\nimport { useAIQuantConsole } from './useAIQuantConsole';\nimport { useForexSimulation, useForexPools, useForexInvestments } from './useForexTrading';\nimport type {\n AIAgent,\n AIPosition,\n AIDecision,\n RiskStatus,\n ConsoleMetrics,\n CombinedLogEntry,\n TradingConsoleOptions,\n TradingConsoleState,\n} from '../types/console';\nimport { DEFAULT_CONSOLE_METRICS } from '../types/console';\nimport type { BotLogEntry, BotState, StrategyPersonality } from '../services/forex/BotSimulationEngine';\nimport type { ForexLogEntry, ForexPoolTransaction, ForexPool, ForexInvestment } from '../types/forex';\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\nexport interface UseTradingConsoleResult {\n // AI Data\n ai: {\n strategies: StrategyPersonality[];\n agents: AIAgent[];\n positions: AIPosition[];\n decisions: AIDecision[];\n riskStatus: RiskStatus | null;\n simulationLogs: BotLogEntry[];\n logsByStrategy: Map<string, BotLogEntry[]>;\n botStates: Map<string, BotState>;\n };\n // Forex Data\n forex: {\n logs: ForexLogEntry[];\n poolTransactions: ForexPoolTransaction[];\n pools: ForexPool[];\n investments: ForexInvestment[];\n stats: {\n totalPnl: number;\n totalTrades: number;\n totalPips: number;\n totalLots: number;\n };\n };\n // Combined\n combinedLogs: CombinedLogEntry[];\n metrics: ConsoleMetrics;\n // Controls\n controls: {\n startAISimulation: (strategyIds?: string[]) => void;\n stopAISimulation: (strategyIds?: string[]) => void;\n startForexSimulation: () => void;\n stopForexSimulation: () => void;\n startAll: () => void;\n stopAll: () => void;\n clearLogs: () => void;\n emitBootSequence: () => void;\n refreshAll: () => Promise<void>;\n };\n // State\n state: {\n isAISimulationRunning: boolean;\n isForexSimulationRunning: boolean;\n isAnyRunning: boolean;\n isLoading: boolean;\n error: string | null;\n };\n // Agent helpers\n getAgent: (strategyId: string) => AIAgent | undefined;\n getAgentLogs: (strategyId: string) => BotLogEntry[];\n getAgentPositions: (strategyId: string) => AIPosition[];\n getAgentDecisions: (strategyId: string) => AIDecision[];\n}\n\n// ── Hook Implementation ───────────────────────────────────────────────────────\n\nexport function useTradingConsole(options?: TradingConsoleOptions): UseTradingConsoleResult {\n const simulation = options?.simulation ?? true;\n const pollInterval = options?.pollInterval ?? 5000;\n const maxLogs = options?.maxLogs ?? 500;\n const strategyIds = options?.strategyIds;\n const autoStart = options?.autoStart ?? false;\n\n // AI Console Hook\n const aiConsole = useAIQuantConsole({\n simulation,\n pollInterval,\n maxLogs,\n strategyIds,\n });\n\n // Forex Hooks\n const forexSim = useForexSimulation({ maxLogs });\n const forexPools = useForexPools({ refreshInterval: pollInterval });\n const forexInvestments = useForexInvestments({ refreshInterval: pollInterval });\n\n // Combine logs from both AI and Forex\n const combinedLogs = useMemo((): CombinedLogEntry[] => {\n const combined: CombinedLogEntry[] = [];\n\n // Add AI logs\n for (const log of aiConsole.logs) {\n combined.push({\n id: log.id,\n timestamp: log.timestamp,\n source: 'ai',\n strategyId: log.strategyId,\n strategyName: log.strategyName,\n type: log.type,\n message: log.message,\n data: log.data,\n importance: log.importance,\n });\n }\n\n // Add Forex logs\n for (const log of forexSim.logs) {\n combined.push({\n id: log.id,\n timestamp: log.timestamp,\n source: 'forex',\n type: log.type,\n message: log.message,\n data: log.data,\n importance: log.importance,\n });\n }\n\n // Sort by timestamp descending\n return combined.sort((a, b) => b.timestamp - a.timestamp).slice(0, maxLogs);\n }, [aiConsole.logs, forexSim.logs, maxLogs]);\n\n // Combine metrics from AI and Forex\n const combinedMetrics = useMemo((): ConsoleMetrics => {\n const aiMetrics = aiConsole.metrics;\n\n // Add forex stats to metrics\n return {\n ...aiMetrics,\n totalPnl: aiMetrics.totalPnl + forexSim.stats.totalPnl,\n totalTrades: aiMetrics.totalTrades + forexSim.stats.totalTrades,\n };\n }, [aiConsole.metrics, forexSim.stats]);\n\n // Controls\n const controls = useMemo(() => ({\n startAISimulation: (ids?: string[]) => {\n aiConsole.emitBootSequence();\n setTimeout(() => aiConsole.start(ids), 5500);\n },\n stopAISimulation: (ids?: string[]) => {\n aiConsole.stop(ids);\n },\n startForexSimulation: () => {\n forexSim.start();\n },\n stopForexSimulation: () => {\n forexSim.stop();\n },\n startAll: () => {\n aiConsole.emitBootSequence();\n setTimeout(() => {\n aiConsole.start();\n forexSim.start();\n }, 5500);\n },\n stopAll: () => {\n aiConsole.stop();\n forexSim.stop();\n },\n clearLogs: () => {\n aiConsole.clearLogs();\n forexSim.clearLogs();\n },\n emitBootSequence: () => {\n aiConsole.emitBootSequence();\n },\n refreshAll: async () => {\n await Promise.all([\n aiConsole.refresh(),\n forexPools.refresh(),\n forexInvestments.refresh(),\n ]);\n },\n }), [aiConsole, forexSim, forexPools, forexInvestments]);\n\n // State\n const state = useMemo(() => ({\n isAISimulationRunning: aiConsole.isRunning,\n isForexSimulationRunning: forexSim.isRunning,\n isAnyRunning: aiConsole.isRunning || forexSim.isRunning,\n isLoading: aiConsole.isLoading || forexPools.isLoading || forexInvestments.isLoading,\n error: aiConsole.error || forexPools.error || forexInvestments.error,\n }), [aiConsole.isRunning, aiConsole.isLoading, aiConsole.error, forexSim.isRunning, forexPools, forexInvestments]);\n\n // Auto-start if configured\n useEffect(() => {\n if (autoStart) {\n controls.startAll();\n }\n }, [autoStart, controls]);\n\n return {\n ai: {\n strategies: aiConsole.strategies,\n agents: aiConsole.agents,\n positions: aiConsole.positions,\n decisions: aiConsole.decisions,\n riskStatus: aiConsole.riskStatus,\n simulationLogs: aiConsole.logs,\n logsByStrategy: aiConsole.logsByStrategy,\n botStates: aiConsole.botStates,\n },\n forex: {\n logs: forexSim.logs,\n poolTransactions: forexSim.poolTransactions,\n pools: forexPools.pools,\n investments: forexInvestments.investments,\n stats: forexSim.stats,\n },\n combinedLogs,\n metrics: combinedMetrics,\n controls,\n state,\n getAgent: aiConsole.getAgent,\n getAgentLogs: aiConsole.getAgentLogs,\n getAgentPositions: aiConsole.getAgentPositions,\n getAgentDecisions: aiConsole.getAgentDecisions,\n };\n}\n\n// ── Convenience Exports ───────────────────────────────────────────────────────\n\nexport { useAIQuantConsole } from './useAIQuantConsole';\nexport { useBotSimulation } from './useBotSimulation';\nexport { useAIPositions, setConsoleAccessToken, clearConsoleAccessToken, setConsoleEngineUrl } from './useAIPositions';\nexport { useAIDecisions } from './useAIDecisions';\nexport { useAIRiskStatus } from './useAIRiskStatus';\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"]}
|