@one_deploy/sdk 1.2.2 → 1.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/{ForexPoolDataGenerator-qwWv6sCE.d.ts → ForexPoolDataGenerator-B3DCN6_i.d.ts} +1 -1
  2. package/dist/{ForexPoolDataGenerator-JxTPpJPz.d.mts → ForexPoolDataGenerator-DWVj6mGW.d.mts} +1 -1
  3. package/dist/{OneForexTradeHistory-BE4rJH5t.d.ts → OneForexTradeHistory-BMbwdkMm.d.ts} +1 -1
  4. package/dist/{OneForexTradeHistory-DbuHXRy0.d.mts → OneForexTradeHistory-DACfkJQF.d.mts} +1 -1
  5. package/dist/components/index.d.mts +2 -2
  6. package/dist/components/index.d.ts +2 -2
  7. package/dist/components/index.js.map +1 -1
  8. package/dist/components/index.mjs.map +1 -1
  9. package/dist/config/index.d.mts +1 -1
  10. package/dist/config/index.d.ts +1 -1
  11. package/dist/{console-Dvf-N9Gr.d.mts → console-BoAIxikK.d.mts} +21 -1
  12. package/dist/{console-Dvf-N9Gr.d.ts → console-BoAIxikK.d.ts} +21 -1
  13. package/dist/hooks/index.d.mts +2 -2
  14. package/dist/hooks/index.d.ts +2 -2
  15. package/dist/index.d.mts +4 -4
  16. package/dist/index.d.ts +4 -4
  17. package/dist/index.js +1 -1
  18. package/dist/index.js.map +1 -1
  19. package/dist/index.mjs +1 -1
  20. package/dist/index.mjs.map +1 -1
  21. package/dist/providers/index.d.mts +1 -1
  22. package/dist/providers/index.d.ts +1 -1
  23. package/dist/providers/index.js +1 -1
  24. package/dist/providers/index.js.map +1 -1
  25. package/dist/providers/index.mjs +1 -1
  26. package/dist/providers/index.mjs.map +1 -1
  27. package/dist/react-native.d.mts +4 -4
  28. package/dist/react-native.d.ts +4 -4
  29. package/dist/react-native.js +131 -0
  30. package/dist/react-native.js.map +1 -1
  31. package/dist/react-native.mjs +129 -1
  32. package/dist/react-native.mjs.map +1 -1
  33. package/dist/services/index.d.mts +2 -2
  34. package/dist/services/index.d.ts +2 -2
  35. package/dist/types/index.d.mts +1 -1
  36. package/dist/types/index.d.ts +1 -1
  37. package/dist/{useForexTrading-CA2DPQVf.d.ts → useForexTrading-BB4eUlHO.d.ts} +1 -1
  38. package/dist/{useForexTrading-I7nIQyog.d.mts → useForexTrading-xJwkxnhd.d.mts} +1 -1
  39. package/package.json +1 -1
  40. package/src/providers/OneProvider.tsx +1 -1
  41. package/src/providers/ThirdwebProvider.tsx +1 -1
  42. package/src/react-native.ts +16 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/config/index.ts","../../src/services/engine.ts","../../src/providers/OneProvider.tsx"],"names":["config","createContext","inAppWallet","base","smartWallet","useMemo","useState","useEffect","createThirdwebClient","useCallback","jsx","BaseThirdwebProvider","useContext"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * ONE SDK Configuration\n *\n * Chain data is fetched from ONE Engine API - no duplicates needed here.\n * Engine is the single source of truth for 200+ EVM chains.\n */\n\nimport type { ChainConfig } from '../types';\n\n// ===== SDK Configuration =====\nexport interface OneConfig {\n // ONE Engine (required)\n oneEngineUrl: string;\n oneClientId: string;\n oneSecretKey?: string; // Only for backend usage\n\n // Optional: Direct Supabase access (for realtime subscriptions)\n supabaseUrl?: string;\n supabaseAnonKey?: string;\n\n // Deprecated: Use ONE Engine instead\n thirdwebClientId?: string;\n}\n\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","'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"]}
1
+ {"version":3,"sources":["../../src/config/index.ts","../../src/services/engine.ts","../../src/providers/OneProvider.tsx"],"names":["config","createContext","inAppWallet","base","smartWallet","useMemo","useState","useEffect","createThirdwebClient","useCallback","jsx","BaseThirdwebProvider","useContext"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * ONE SDK Configuration\n *\n * Chain data is fetched from ONE Engine API - no duplicates needed here.\n * Engine is the single source of truth for 200+ EVM chains.\n */\n\nimport type { ChainConfig } from '../types';\n\n// ===== SDK Configuration =====\nexport interface OneConfig {\n // ONE Engine (required)\n oneEngineUrl: string;\n oneClientId: string;\n oneSecretKey?: string; // Only for backend usage\n\n // Optional: Direct Supabase access (for realtime subscriptions)\n supabaseUrl?: string;\n supabaseAnonKey?: string;\n\n // Deprecated: Use ONE Engine instead\n thirdwebClientId?: string;\n}\n\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","'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}/api/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"]}