@diviswap/sdk 1.8.0 → 1.8.1

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/react/provider.tsx","../../src/react/farcaster-provider.tsx","../../src/react/hooks.ts","../../src/types/addresses.ts","../../src/integrations/wallet.ts","../../src/react/useAddresses.ts"],"names":["createContext","useState","useEffect","user","error","React","useContext","DiviswapContext","useCallback"],"mappings":"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","file":"index.js","sourcesContent":["'use client';\n\nimport React, { createContext, useContext, useEffect, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport type { User, Transaction, Payee } from '../types';\n\nexport interface DiviswapContextValue {\n // Authentication state\n user: User | null;\n loading: boolean;\n error: Error | null;\n \n // Authentication methods\n login: (email: string, password: string) => Promise<void>;\n logout: () => Promise<void>;\n register: (data: any) => Promise<void>;\n \n // Transaction methods\n createTransaction: (data: any) => Promise<Transaction>;\n getTransactions: (filters?: any) => Promise<Transaction[]>;\n \n // Payee methods\n createPayee: (data: any) => Promise<Payee>;\n getPayees: () => Promise<Payee[]>;\n deletePayee: (id: string) => Promise<void>;\n \n // Fee methods\n calculateFees?: (amount: number) => Promise<any>;\n getIntegratorFees?: () => Promise<any>;\n}\n\nconst DiviswapContext = createContext<DiviswapContextValue | null>(null);\n\nexport interface DiviswapProviderProps {\n children: ReactNode;\n}\n\nexport function DiviswapProvider({\n children\n}: DiviswapProviderProps) {\n const [user, setUser] = useState<User | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n \n // Initialize SDK client is handled in the API route\n // The provider just manages client-side state and API calls\n\n // Check for existing session on mount\n useEffect(() => {\n checkSession();\n }, []);\n\n const checkSession = async () => {\n try {\n const response = await fetch('/api/diviswap?resource=session');\n if (response.ok) {\n const user = await response.json();\n if (user) {\n setUser(user);\n }\n }\n } catch (error) {\n console.error('Session check failed:', error);\n }\n };\n\n const login = async (email: string, password: string) => {\n setLoading(true);\n setError(null);\n try {\n const response = await fetch('/api/diviswap', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ action: 'login', email, password })\n });\n \n if (!response.ok) {\n throw new Error('Login failed');\n }\n \n const data = await response.json();\n setUser(data.user);\n } catch (err) {\n setError(err as Error);\n throw err;\n } finally {\n setLoading(false);\n }\n };\n\n const logout = async () => {\n setLoading(true);\n try {\n await fetch('/api/diviswap', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ action: 'logout' })\n });\n setUser(null);\n } catch (err) {\n setError(err as Error);\n throw err;\n } finally {\n setLoading(false);\n }\n };\n\n const register = async (data: any) => {\n setLoading(true);\n setError(null);\n try {\n const response = await fetch('/api/diviswap', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ action: 'register', ...data })\n });\n \n if (!response.ok) {\n throw new Error('Registration failed');\n }\n \n const result = await response.json();\n setUser(result.user);\n } catch (err) {\n setError(err as Error);\n throw err;\n } finally {\n setLoading(false);\n }\n };\n\n const createTransaction = async (data: any) => {\n const response = await fetch('/api/diviswap', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ action: 'createTransaction', ...data })\n });\n\n if (!response.ok) {\n throw new Error('Transaction creation failed');\n }\n\n return response.json();\n };\n\n const getTransactions = async (filters?: any) => {\n const params = new URLSearchParams({ resource: 'transactions', ...filters });\n const response = await fetch(`/api/diviswap?${params}`);\n \n if (!response.ok) {\n throw new Error('Failed to fetch transactions');\n }\n \n return response.json();\n };\n\n const createPayee = async (data: any) => {\n const response = await fetch('/api/diviswap', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ action: 'createPayee', ...data })\n });\n\n if (!response.ok) {\n throw new Error('Payee creation failed');\n }\n\n return response.json();\n };\n\n const getPayees = async () => {\n const response = await fetch('/api/diviswap?resource=payees');\n\n if (!response.ok) {\n throw new Error('Failed to fetch payees');\n }\n\n return response.json();\n };\n\n const deletePayee = async (id: string) => {\n const response = await fetch(`/api/diviswap?resource=payee&id=${id}`, {\n method: 'DELETE'\n });\n \n if (!response.ok) {\n throw new Error('Failed to delete payee');\n }\n };\n\n const calculateFees = async (amount: number) => {\n const response = await fetch('/api/diviswap', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ action: 'calculateFees', amount })\n });\n\n if (!response.ok) {\n throw new Error('Fee calculation failed');\n }\n\n return response.json();\n };\n\n const getIntegratorFees = async () => {\n const response = await fetch('/api/diviswap', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ action: 'getIntegratorFees' })\n });\n\n if (!response.ok) {\n throw new Error('Failed to fetch integrator fees');\n }\n\n return response.json();\n };\n\n const value: DiviswapContextValue = {\n user,\n loading,\n error,\n login,\n logout,\n register,\n createTransaction,\n getTransactions,\n createPayee,\n getPayees,\n deletePayee,\n calculateFees,\n getIntegratorFees\n };\n\n return (\n <DiviswapContext.Provider value={value}>\n {children}\n </DiviswapContext.Provider>\n );\n}\n\nexport function useDiviswap() {\n const context = useContext(DiviswapContext);\n if (!context) {\n throw new Error('useDiviswap must be used within a DiviswapProvider');\n }\n return context;\n}\n\n// Legacy aliases for backward compatibility\n/** @deprecated Use DiviswapProvider instead */\nexport const LiberExProvider = DiviswapProvider;\n/** @deprecated Use useDiviswap instead */\nexport const useLiberEx = useDiviswap;\n/** @deprecated Use DiviswapContextValue instead */\nexport type LiberExContextValue = DiviswapContextValue;\n/** @deprecated Use DiviswapProviderProps instead */\nexport type LiberExProviderProps = DiviswapProviderProps;","'use client';\n\nimport React, { createContext, useContext, useEffect, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport type { User, Transaction, Payee } from '../types';\n\nexport interface DiviswapContextValue {\n // Authentication state\n user: User | null;\n loading: boolean;\n error: Error | null;\n sessionToken: string | null;\n\n // Authentication methods\n login: (email: string, password: string) => Promise<void>;\n logout: () => Promise<void>;\n register: (data: any) => Promise<void>;\n\n // Transaction methods\n createTransaction: (data: any) => Promise<Transaction>;\n getTransactions: (filters?: any) => Promise<Transaction[]>;\n\n // Payee methods\n createPayee: (data: any) => Promise<Payee>;\n getPayees: () => Promise<Payee[]>;\n deletePayee: (id: string) => Promise<void>;\n\n // Fee methods\n calculateFees?: (amount: number) => Promise<any>;\n getIntegratorFees?: () => Promise<any>;\n}\n\nconst DiviswapContext = createContext<DiviswapContextValue | null>(null);\n\nexport interface DiviswapFarcasterProviderProps {\n children: ReactNode;\n /** Where to store the session token: 'memory' for Farcaster mini apps, 'localStorage' for regular web apps */\n tokenStorage?: 'memory' | 'localStorage';\n}\n\nexport function DiviswapFarcasterProvider({\n children,\n tokenStorage = 'memory'\n}: DiviswapFarcasterProviderProps) {\n const [user, setUser] = useState<User | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [sessionToken, setSessionToken] = useState<string | null>(null);\n\n // Load token from storage on mount (if using localStorage)\n useEffect(() => {\n if (tokenStorage === 'localStorage' && typeof window !== 'undefined') {\n const storedToken = localStorage.getItem('diviswap_session_token');\n if (storedToken) {\n setSessionToken(storedToken);\n checkSession(storedToken);\n }\n }\n }, [tokenStorage]);\n\n // Save token to storage when it changes (if using localStorage)\n useEffect(() => {\n if (tokenStorage === 'localStorage' && typeof window !== 'undefined') {\n if (sessionToken) {\n localStorage.setItem('diviswap_session_token', sessionToken);\n } else {\n localStorage.removeItem('diviswap_session_token');\n }\n }\n }, [sessionToken, tokenStorage]);\n\n const getAuthHeaders = (): HeadersInit => {\n const headers: HeadersInit = { 'Content-Type': 'application/json' };\n if (sessionToken) {\n headers['Authorization'] = `Bearer ${sessionToken}`;\n }\n return headers;\n };\n\n const checkSession = async (token?: string | null) => {\n try {\n const headers: HeadersInit = token ? { 'Authorization': `Bearer ${token}` } : {};\n const response = await fetch('/api/diviswap?resource=session', { headers });\n if (response.ok) {\n const userData = await response.json();\n if (userData) {\n setUser(userData);\n }\n }\n } catch (error) {\n console.error('Session check failed:', error);\n }\n };\n\n const login = async (email: string, password: string) => {\n setLoading(true);\n setError(null);\n try {\n const response = await fetch('/api/diviswap', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ action: 'login', email, password })\n });\n\n if (!response.ok) {\n throw new Error('Login failed');\n }\n\n const data = await response.json();\n\n // Store the session token\n const token = data.sessionToken || data.accessToken || data.access_token;\n if (token) {\n setSessionToken(token);\n }\n\n setUser(data.user);\n } catch (err) {\n setError(err as Error);\n throw err;\n } finally {\n setLoading(false);\n }\n };\n\n const logout = async () => {\n setLoading(true);\n try {\n await fetch('/api/diviswap', {\n method: 'POST',\n headers: getAuthHeaders(),\n body: JSON.stringify({ action: 'logout', sessionToken })\n });\n setUser(null);\n setSessionToken(null);\n } catch (err) {\n setError(err as Error);\n throw err;\n } finally {\n setLoading(false);\n }\n };\n\n const register = async (data: any) => {\n setLoading(true);\n setError(null);\n try {\n const response = await fetch('/api/diviswap', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ action: 'register', ...data })\n });\n\n if (!response.ok) {\n throw new Error('Registration failed');\n }\n\n const result = await response.json();\n\n // Store the session token\n const token = result.sessionToken || result.accessToken || result.access_token;\n if (token) {\n setSessionToken(token);\n }\n\n setUser(result.user);\n } catch (err) {\n setError(err as Error);\n throw err;\n } finally {\n setLoading(false);\n }\n };\n\n const createTransaction = async (data: any) => {\n const response = await fetch('/api/diviswap', {\n method: 'POST',\n headers: getAuthHeaders(),\n body: JSON.stringify({ action: 'createTransaction', sessionToken, ...data })\n });\n\n if (!response.ok) {\n throw new Error('Transaction creation failed');\n }\n\n return response.json();\n };\n\n const getTransactions = async (filters?: any) => {\n const params = new URLSearchParams({\n resource: 'transactions',\n ...(sessionToken && { sessionToken }),\n ...filters\n });\n const response = await fetch(`/api/diviswap?${params}`, {\n headers: sessionToken ? { 'Authorization': `Bearer ${sessionToken}` } : {}\n });\n\n if (!response.ok) {\n throw new Error('Failed to fetch transactions');\n }\n\n return response.json();\n };\n\n const createPayee = async (data: any) => {\n const response = await fetch('/api/diviswap', {\n method: 'POST',\n headers: getAuthHeaders(),\n body: JSON.stringify({ action: 'createPayee', sessionToken, ...data })\n });\n\n if (!response.ok) {\n throw new Error('Payee creation failed');\n }\n\n return response.json();\n };\n\n const getPayees = async () => {\n const params = new URLSearchParams({ resource: 'payees' });\n if (sessionToken) {\n params.append('sessionToken', sessionToken);\n }\n\n const response = await fetch(`/api/diviswap?${params}`, {\n headers: sessionToken ? { 'Authorization': `Bearer ${sessionToken}` } : {}\n });\n\n if (!response.ok) {\n throw new Error('Failed to fetch payees');\n }\n\n return response.json();\n };\n\n const deletePayee = async (id: string) => {\n const params = new URLSearchParams({\n resource: 'payee',\n id,\n ...(sessionToken && { sessionToken })\n });\n\n const response = await fetch(`/api/diviswap?${params}`, {\n method: 'DELETE',\n headers: sessionToken ? { 'Authorization': `Bearer ${sessionToken}` } : {}\n });\n\n if (!response.ok) {\n throw new Error('Failed to delete payee');\n }\n };\n\n const calculateFees = async (amount: number) => {\n const response = await fetch('/api/diviswap', {\n method: 'POST',\n headers: getAuthHeaders(),\n body: JSON.stringify({ action: 'calculateFees', sessionToken, amount })\n });\n\n if (!response.ok) {\n throw new Error('Fee calculation failed');\n }\n\n return response.json();\n };\n\n const getIntegratorFees = async () => {\n const response = await fetch('/api/diviswap', {\n method: 'POST',\n headers: getAuthHeaders(),\n body: JSON.stringify({ action: 'getIntegratorFees', sessionToken })\n });\n\n if (!response.ok) {\n throw new Error('Failed to fetch integrator fees');\n }\n\n return response.json();\n };\n\n const value: DiviswapContextValue = {\n user,\n loading,\n error,\n sessionToken,\n login,\n logout,\n register,\n createTransaction,\n getTransactions,\n createPayee,\n getPayees,\n deletePayee,\n calculateFees,\n getIntegratorFees\n };\n\n return (\n <DiviswapContext.Provider value={value}>\n {children}\n </DiviswapContext.Provider>\n );\n}\n\nexport function useDiviswapFarcaster() {\n const context = useContext(DiviswapContext);\n if (!context) {\n throw new Error('useDiviswapFarcaster must be used within a DiviswapFarcasterProvider');\n }\n return context;\n}\n\n// Legacy aliases for backward compatibility\n/** @deprecated Use DiviswapFarcasterProvider instead */\nexport const LiberExFarcasterProvider = DiviswapFarcasterProvider;\n/** @deprecated Use DiviswapFarcasterProviderProps instead */\nexport type LiberExFarcasterProviderProps = DiviswapFarcasterProviderProps;\n","import { useState, useEffect, useCallback } from 'react';\nimport { useDiviswap } from './provider';\nimport type { Transaction, Payee } from '../types';\n\n// Re-export the main hook\nexport { useDiviswap };\n// Legacy alias\nexport { useDiviswap as useLiberEx };\n\n// Convenience hook for authentication\nexport function useAuth() {\n const { user, login, logout, register, loading, error } = useDiviswap();\n \n return {\n user,\n login,\n logout,\n register,\n loading,\n error,\n isAuthenticated: !!user,\n isLoading: loading,\n };\n}\n\n// Hook for managing transactions\nexport function useTransactions() {\n const { createTransaction, getTransactions, error } = useDiviswap();\n const [transactions, setTransactions] = useState<Transaction[]>([]);\n const [loading, setLoading] = useState(false);\n \n const fetchTransactions = useCallback(async (filters?: {\n limit?: number;\n offset?: number;\n status?: 'pending' | 'processing' | 'completed' | 'failed';\n type?: 'onramp' | 'offramp';\n }) => {\n setLoading(true);\n try {\n const data = await getTransactions(filters);\n setTransactions(data);\n return data;\n } catch (err) {\n console.error('Failed to fetch transactions:', err);\n throw err;\n } finally {\n setLoading(false);\n }\n }, [getTransactions]);\n \n const create = useCallback(async (data: any) => {\n setLoading(true);\n try {\n const transaction = await createTransaction(data);\n await fetchTransactions(); // Refresh list\n return transaction;\n } catch (err) {\n console.error('Failed to create transaction:', err);\n throw err;\n } finally {\n setLoading(false);\n }\n }, [createTransaction, fetchTransactions]);\n \n return {\n transactions,\n loading,\n error,\n fetchTransactions,\n createTransaction: create,\n refresh: fetchTransactions\n };\n}\n\n// Hook for managing payees\nexport function usePayees() {\n const { createPayee, getPayees, deletePayee, error } = useDiviswap();\n const [payees, setPayees] = useState<Payee[]>([]);\n const [loading, setLoading] = useState(false);\n \n const fetchPayees = useCallback(async () => {\n setLoading(true);\n try {\n const data = await getPayees();\n setPayees(data);\n return data;\n } catch (err) {\n console.error('Failed to fetch payees:', err);\n throw err;\n } finally {\n setLoading(false);\n }\n }, [getPayees]);\n \n const create = useCallback(async (data: any) => {\n setLoading(true);\n try {\n const payee = await createPayee(data);\n await fetchPayees(); // Refresh list\n return payee;\n } catch (err) {\n console.error('Failed to create payee:', err);\n throw err;\n } finally {\n setLoading(false);\n }\n }, [createPayee, fetchPayees]);\n \n const remove = useCallback(async (id: string) => {\n setLoading(true);\n try {\n await deletePayee(id);\n await fetchPayees(); // Refresh list\n } catch (err) {\n console.error('Failed to delete payee:', err);\n throw err;\n } finally {\n setLoading(false);\n }\n }, [deletePayee, fetchPayees]);\n \n // Load payees on mount\n useEffect(() => {\n fetchPayees();\n }, [fetchPayees]);\n \n return {\n payees,\n loading,\n error,\n createPayee: create,\n deletePayee: remove,\n refresh: fetchPayees,\n defaultPayee: payees.find(p => p.isDefault) || null\n };\n}\n\n// Hook for KYC status checking\nexport interface KYCStatus {\n kycStatus: 'NOT_STARTED' | 'PENDING' | 'APPROVED' | 'REJECTED' | 'EXPIRED';\n kybStatus: 'NOT_REQUIRED' | 'NOT_STARTED' | 'PENDING' | 'APPROVED' | 'REJECTED';\n canTransact: boolean;\n requiresAction: boolean;\n verificationLevel: 'none' | 'basic' | 'full';\n nextStep?: 'COMPLETE_KYC' | 'COMPLETE_KYB' | 'WAIT_FOR_APPROVAL';\n kycMetadata?: {\n rejectLabels?: string[];\n reviewRejectType?: string;\n clientComment?: string;\n };\n}\n\nexport interface UseKYCStatusOptions {\n customerId?: string | null;\n customerEmail?: string | null;\n}\n\nexport function useKYCStatus(options?: UseKYCStatusOptions) {\n const [kycStatus, setKycStatus] = useState<KYCStatus | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n const fetchKYCStatus = useCallback(async () => {\n try {\n setLoading(true);\n setError(null);\n\n // Build query params for partner auth if provided\n const params = new URLSearchParams({ resource: 'kycStatus' });\n if (options?.customerId) params.set('customerId', options.customerId);\n if (options?.customerEmail) params.set('customerEmail', options.customerEmail);\n\n // Call the API route that fetches KYC status\n const response = await fetch(`/api/diviswap?${params}`);\n\n if (!response.ok) {\n throw new Error('Failed to fetch KYC status');\n }\n\n const status = await response.json();\n setKycStatus(status);\n } catch (err: any) {\n console.error('KYC status fetch error:', err);\n setError(err.message || 'Failed to fetch KYC status');\n // Set default status on error\n setKycStatus({\n kycStatus: 'NOT_STARTED',\n kybStatus: 'NOT_REQUIRED',\n canTransact: false,\n requiresAction: true,\n verificationLevel: 'none',\n nextStep: 'COMPLETE_KYC'\n });\n } finally {\n setLoading(false);\n }\n }, [options?.customerId, options?.customerEmail]);\n\n useEffect(() => {\n fetchKYCStatus();\n }, [fetchKYCStatus]);\n\n const refetch = useCallback(() => {\n fetchKYCStatus();\n }, [fetchKYCStatus]);\n\n // Helper flags\n const isKycApproved = kycStatus?.kycStatus === 'APPROVED';\n const isKycPending = kycStatus?.kycStatus === 'PENDING';\n const isKycRejected = kycStatus?.kycStatus === 'REJECTED';\n const needsKyc = !isKycApproved && kycStatus?.requiresAction && kycStatus?.nextStep === 'COMPLETE_KYC';\n\n return {\n kycStatus,\n loading,\n error,\n refetch,\n // Helper flags\n isKycApproved,\n isKycPending,\n isKycRejected,\n needsKyc,\n canTransact: kycStatus?.canTransact ?? false,\n verificationLevel: kycStatus?.verificationLevel ?? 'none'\n };\n}\n\n// Hook for comprehensive dashboard data with stats and charts\nexport interface DashboardStats {\n totalVolume: number;\n pendingTransactions: number;\n completedTransactions: number;\n failedTransactions: number;\n}\n\nexport interface ChartDataPoint {\n date: string;\n volume: number;\n transactions: number;\n}\n\nexport interface UseDashboardOptions {\n customerId?: string | null;\n customerEmail?: string | null;\n}\n\nexport function useDashboard(options?: UseDashboardOptions) {\n const [loading, setLoading] = useState(true);\n const [transactions, setTransactions] = useState<Transaction[]>([]);\n const [payees, setPayees] = useState<Payee[]>([]);\n const [stats, setStats] = useState<DashboardStats>({\n totalVolume: 0,\n pendingTransactions: 0,\n completedTransactions: 0,\n failedTransactions: 0,\n });\n const [chartData, setChartData] = useState<ChartDataPoint[]>([]);\n\n const loadDashboardData = useCallback(async () => {\n try {\n setLoading(true);\n\n // Build query params for partner auth if provided\n const txParams = new URLSearchParams({\n resource: 'transactions',\n limit: '50'\n });\n const payeeParams = new URLSearchParams({ resource: 'payees' });\n\n if (options?.customerId) {\n txParams.set('customerId', options.customerId);\n payeeParams.set('customerId', options.customerId);\n }\n if (options?.customerEmail) {\n txParams.set('customerEmail', options.customerEmail);\n payeeParams.set('customerEmail', options.customerEmail);\n }\n\n // Fetch transactions and payees in parallel\n const [txResponse, payeeResponse] = await Promise.all([\n fetch(`/api/diviswap?${txParams}`),\n fetch(`/api/diviswap?${payeeParams}`)\n ]);\n\n const txData = txResponse.ok ? await txResponse.json() : [];\n const payeeData = payeeResponse.ok ? await payeeResponse.json() : [];\n\n setTransactions(txData || []);\n setPayees(payeeData || []);\n\n // Calculate stats\n if (txData && txData.length > 0) {\n // Only count final transactions to avoid double/triple counting\n // Offramp creates: CRYPTO_DEPOSIT → TRADE → BANK_WITHDRAWAL (only count BANK_WITHDRAWAL)\n // Onramp creates: BANK_DEPOSIT → TRADE → CRYPTO_WITHDRAWAL (only count BANK_DEPOSIT)\n const finalTransactions = txData.filter((tx: any) =>\n tx.tx_type === 'BANK_WITHDRAWAL' || tx.tx_type === 'BANK_DEPOSIT'\n );\n\n // Amount is in transaction_details object\n const totalVolume = finalTransactions.reduce((sum: number, tx: any) => {\n const amount = tx.transaction_details?.amount || 0;\n return sum + amount;\n }, 0);\n\n // Status can be INITIATED, PROCESSING, COMPLETED, FAILED (uppercase from backend)\n const pendingTransactions = finalTransactions.filter((tx: any) =>\n tx.status === 'INITIATED' || tx.status === 'PROCESSING' || tx.status === 'pending' || tx.status === 'processing'\n ).length;\n const completedTransactions = finalTransactions.filter((tx: any) =>\n tx.status === 'COMPLETED' || tx.status === 'completed'\n ).length;\n const failedTransactions = finalTransactions.filter((tx: any) =>\n tx.status === 'FAILED' || tx.status === 'failed'\n ).length;\n\n setStats({\n totalVolume,\n pendingTransactions,\n completedTransactions,\n failedTransactions,\n });\n\n // Prepare chart data (last 7 days)\n const last7Days = Array.from({ length: 7 }, (_, i) => {\n const date = new Date();\n date.setDate(date.getDate() - (6 - i));\n return date.toISOString().split('T')[0];\n });\n\n const dailyVolumes = last7Days.map(date => {\n // Only count final transactions to avoid double/triple counting\n const dayTransactions = txData.filter((tx: any) =>\n tx.created_at &&\n new Date(tx.created_at).toISOString().split('T')[0] === date &&\n (tx.tx_type === 'BANK_WITHDRAWAL' || tx.tx_type === 'BANK_DEPOSIT')\n );\n const volume = dayTransactions.reduce((sum: number, tx: any) =>\n sum + (tx.transaction_details?.amount || 0), 0\n );\n\n return {\n date: new Date(date).toLocaleDateString('en-US', { month: 'short', day: 'numeric' }),\n volume: volume, // Amount is already in dollars\n transactions: dayTransactions.length,\n };\n });\n\n setChartData(dailyVolumes);\n }\n } catch (error) {\n console.error('Error loading dashboard data:', error);\n } finally {\n setLoading(false);\n }\n }, [options?.customerId, options?.customerEmail]);\n\n useEffect(() => {\n loadDashboardData();\n }, [loadDashboardData]);\n\n return {\n stats,\n chartData,\n transactions: transactions.slice(0, 5), // Recent 5 transactions for dashboard\n payees,\n loading,\n refresh: loadDashboardData,\n };\n}","/**\n * Address-related type definitions\n */\n\nexport interface Address {\n id: number;\n uuid: string;\n uuid_history: string[];\n chain_id: number;\n address: string;\n is_default: boolean;\n user_id?: number;\n organization_id?: number;\n created_at: string;\n updated_at: string;\n}\n\nexport interface CreateAddressRequest {\n chain_id: number;\n address: string;\n is_default?: boolean;\n}\n\nexport interface SetDefaultAddressRequest {\n chain_id: number;\n address: string;\n}\n\nexport interface DeleteAddressRequest {\n chain_id: number;\n address: string;\n}\n\n/**\n * Chain ID mappings\n */\nexport const CHAIN_IDS = {\n // Mainnets\n ethereum: 1,\n optimism: 10,\n base: 8453,\n polygon: 137,\n arbitrum: 42161,\n \n // Testnets\n sepolia: 11155111,\n optimism_sepolia: 11155420,\n base_sepolia: 84532,\n polygon_mumbai: 80001,\n arbitrum_sepolia: 421614\n} as const;\n\nexport type ChainName = keyof typeof CHAIN_IDS;\n\n/**\n * Wallet connection info for automatic tracking\n */\nexport interface WalletConnection {\n address: string;\n chainId: number;\n chainName?: string;\n}","/**\n * Wallet integration helpers for automatic address tracking\n */\n\nimport { Diviswap } from '../client';\nimport { WalletConnection, CHAIN_IDS } from '../types/addresses';\n\n/**\n * Ethereum-like wallet interface (compatible with MetaMask, WalletConnect, etc.)\n */\nexport interface EthereumWallet {\n request: (args: { method: string; params?: any[] }) => Promise<any>;\n on?: (event: string, handler: (...args: any[]) => void) => void;\n removeListener?: (event: string, handler: (...args: any[]) => void) => void;\n}\n\n/**\n * Automatic wallet tracking configuration\n */\nexport interface WalletTrackingConfig {\n /** Automatically track when accounts change */\n trackAccountChanges?: boolean;\n /** Automatically track when chain changes */\n trackChainChanges?: boolean;\n /** Set newly connected addresses as default for their chain */\n setAsDefault?: boolean;\n /** Custom chain mappings for unsupported chains */\n customChains?: Record<number, string>;\n}\n\n/**\n * Wallet tracking manager for automatic address management\n */\nexport class WalletTracker {\n private static instance: WalletTracker | null = null;\n private wallet: EthereumWallet | null = null;\n private diviswap: Diviswap | null = null;\n private config: WalletTrackingConfig;\n private listeners: Map<string, (...args: any[]) => void> = new Map();\n\n private constructor(config: WalletTrackingConfig = {}) {\n this.config = {\n trackAccountChanges: true,\n trackChainChanges: true,\n setAsDefault: true,\n ...config\n };\n }\n\n /**\n * Get or create the wallet tracker instance\n */\n static getInstance(config?: WalletTrackingConfig): WalletTracker {\n if (!WalletTracker.instance) {\n WalletTracker.instance = new WalletTracker(config);\n }\n return WalletTracker.instance;\n }\n\n /**\n * Initialize wallet tracking with Diviswap SDK instance\n */\n init(diviswap: Diviswap, wallet?: EthereumWallet): void {\n this.diviswap = diviswap;\n\n if (wallet) {\n this.wallet = wallet;\n } else if (typeof window !== 'undefined' && (window as any).ethereum) {\n this.wallet = (window as any).ethereum;\n }\n\n if (this.wallet && this.config.trackAccountChanges) {\n this.setupAccountChangeListener();\n }\n\n if (this.wallet && this.config.trackChainChanges) {\n this.setupChainChangeListener();\n }\n }\n\n /**\n * Connect and track a wallet\n */\n async connect(): Promise<WalletConnection[]> {\n if (!this.wallet) {\n throw new Error('No wallet provider available');\n }\n\n if (!this.diviswap) {\n throw new Error('Diviswap SDK not initialized. Call init() first.');\n }\n\n try {\n // Request account access\n const accounts = await this.wallet.request({\n method: 'eth_requestAccounts'\n });\n\n // Get current chain\n const chainId = await this.wallet.request({\n method: 'eth_chainId'\n });\n\n const numericChainId = parseInt(chainId, 16);\n const connections: WalletConnection[] = [];\n\n // Track all connected accounts\n for (const account of accounts) {\n const connection: WalletConnection = {\n address: account,\n chainId: numericChainId,\n chainName: this.getChainName(numericChainId)\n };\n\n await this.diviswap.addresses.trackWallet(connection);\n connections.push(connection);\n }\n\n return connections;\n } catch (error) {\n console.error('Failed to connect wallet:', error);\n throw error;\n }\n }\n\n /**\n * Track current wallet state without requesting connection\n */\n async trackCurrent(): Promise<WalletConnection[]> {\n if (!this.wallet) {\n throw new Error('No wallet provider available');\n }\n\n if (!this.diviswap) {\n throw new Error('Diviswap SDK not initialized. Call init() first.');\n }\n\n try {\n // Get current accounts (may be empty if not connected)\n const accounts = await this.wallet.request({\n method: 'eth_accounts'\n });\n\n if (accounts.length === 0) {\n return [];\n }\n\n // Get current chain\n const chainId = await this.wallet.request({\n method: 'eth_chainId'\n });\n\n const numericChainId = parseInt(chainId, 16);\n const connections: WalletConnection[] = [];\n\n // Track all current accounts\n for (const account of accounts) {\n const connection: WalletConnection = {\n address: account,\n chainId: numericChainId,\n chainName: this.getChainName(numericChainId)\n };\n\n await this.diviswap.addresses.trackWallet(connection);\n connections.push(connection);\n }\n\n return connections;\n } catch (error) {\n console.error('Failed to track current wallet state:', error);\n throw error;\n }\n }\n\n /**\n * Setup listener for account changes\n */\n private setupAccountChangeListener(): void {\n if (!this.wallet?.on) return;\n\n const handler = async (accounts: string[]) => {\n if (!this.diviswap) return;\n\n try {\n // Get current chain\n const chainId = await this.wallet!.request({\n method: 'eth_chainId'\n });\n\n const numericChainId = parseInt(chainId, 16);\n\n // Track new accounts\n for (const account of accounts) {\n const connection: WalletConnection = {\n address: account,\n chainId: numericChainId,\n chainName: this.getChainName(numericChainId)\n };\n\n await this.diviswap.addresses.trackWallet(connection);\n }\n } catch (error) {\n console.error('Failed to handle account change:', error);\n }\n };\n\n this.wallet.on('accountsChanged', handler);\n this.listeners.set('accountsChanged', handler);\n }\n\n /**\n * Setup listener for chain changes\n */\n private setupChainChangeListener(): void {\n if (!this.wallet?.on) return;\n\n const handler = async (chainId: string) => {\n if (!this.diviswap) return;\n\n try {\n // Get current accounts\n const accounts = await this.wallet!.request({\n method: 'eth_accounts'\n });\n\n const numericChainId = parseInt(chainId, 16);\n\n // Track accounts on new chain\n for (const account of accounts) {\n const connection: WalletConnection = {\n address: account,\n chainId: numericChainId,\n chainName: this.getChainName(numericChainId)\n };\n\n await this.diviswap.addresses.trackWallet(connection);\n }\n } catch (error) {\n console.error('Failed to handle chain change:', error);\n }\n };\n\n this.wallet.on('chainChanged', handler);\n this.listeners.set('chainChanged', handler);\n }\n\n /**\n * Get chain name from chain ID\n */\n private getChainName(chainId: number): string | undefined {\n // Check built-in chains first\n const builtInChain = Object.entries(CHAIN_IDS).find(([_, id]) => id === chainId)?.[0];\n if (builtInChain) return builtInChain;\n\n // Check custom chains\n return this.config.customChains?.[chainId];\n }\n\n /**\n * Cleanup listeners\n */\n cleanup(): void {\n if (this.wallet?.removeListener) {\n for (const [event, handler] of this.listeners) {\n this.wallet.removeListener(event, handler);\n }\n }\n this.listeners.clear();\n }\n\n /**\n * Update configuration\n */\n updateConfig(config: Partial<WalletTrackingConfig>): void {\n this.config = { ...this.config, ...config };\n }\n}\n\n/**\n * Convenience functions for easy integration\n */\n\n/**\n * Connect wallet and automatically track addresses\n *\n * @example\n * ```typescript\n * import { Diviswap, connectWallet } from '@diviswap/sdk';\n *\n * const diviswap = Diviswap.init(config);\n *\n * // Connect and track wallet automatically\n * const connections = await connectWallet(diviswap);\n * console.log('Tracked addresses:', connections);\n * ```\n */\nexport async function connectWallet(\n diviswap: Diviswap,\n wallet?: EthereumWallet,\n config?: WalletTrackingConfig\n): Promise<WalletConnection[]> {\n const tracker = WalletTracker.getInstance(config);\n tracker.init(diviswap, wallet);\n return tracker.connect();\n}\n\n/**\n * Track current wallet state without requesting connection\n *\n * @example\n * ```typescript\n * import { Diviswap, trackCurrentWallet } from '@diviswap/sdk';\n *\n * const diviswap = Diviswap.init(config);\n *\n * // Track currently connected accounts\n * const connections = await trackCurrentWallet(diviswap);\n * ```\n */\nexport async function trackCurrentWallet(\n diviswap: Diviswap,\n wallet?: EthereumWallet,\n config?: WalletTrackingConfig\n): Promise<WalletConnection[]> {\n const tracker = WalletTracker.getInstance(config);\n tracker.init(diviswap, wallet);\n return tracker.trackCurrent();\n}\n\n/**\n * Setup automatic wallet tracking (listens for account/chain changes)\n *\n * @example\n * ```typescript\n * import { Diviswap, setupWalletTracking } from '@diviswap/sdk';\n *\n * const diviswap = Diviswap.init(config);\n *\n * // Setup automatic tracking\n * setupWalletTracking(diviswap, {\n * trackAccountChanges: true,\n * trackChainChanges: true,\n * setAsDefault: true\n * });\n * ```\n */\nexport function setupWalletTracking(\n diviswap: Diviswap,\n wallet?: EthereumWallet,\n config?: WalletTrackingConfig\n): WalletTracker {\n const tracker = WalletTracker.getInstance(config);\n tracker.init(diviswap, wallet);\n return tracker;\n}","/**\n * React hooks for address management\n */\n\nimport { useState, useEffect, useCallback } from 'react';\nimport { Address, CreateAddressRequest, WalletConnection, ChainName } from '../types/addresses';\nimport { Diviswap } from '../client';\nimport { connectWallet, trackCurrentWallet, setupWalletTracking, EthereumWallet, WalletTrackingConfig } from '../integrations/wallet';\n\n/**\n * Hook for managing user addresses\n */\nexport function useAddresses(diviswap?: Diviswap) {\n const [addresses, setAddresses] = useState<Address[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchAddresses = useCallback(async () => {\n if (!diviswap) return;\n\n setLoading(true);\n setError(null);\n \n try {\n const result = await diviswap.addresses.list();\n setAddresses(result);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to fetch addresses'));\n } finally {\n setLoading(false);\n }\n }, [diviswap]);\n\n const createAddress = useCallback(async (data: CreateAddressRequest) => {\n if (!diviswap) throw new Error('Diviswap instance not provided');\n\n setLoading(true);\n setError(null);\n\n try {\n const newAddress = await diviswap.addresses.create(data);\n setAddresses(prev => [...prev, newAddress]);\n return newAddress;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to create address');\n setError(error);\n throw error;\n } finally {\n setLoading(false);\n }\n }, [diviswap]);\n\n const setDefaultAddress = useCallback(async (data: { chain_id: number; address: string }) => {\n if (!diviswap) throw new Error('Diviswap instance not provided');\n\n setLoading(true);\n setError(null);\n\n try {\n await diviswap.addresses.setDefault(data);\n // Refresh addresses to update default status\n await fetchAddresses();\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to set default address');\n setError(error);\n throw error;\n } finally {\n setLoading(false);\n }\n }, [diviswap, fetchAddresses]);\n\n const deleteAddress = useCallback(async (data: { chain_id: number; address: string }) => {\n if (!diviswap) throw new Error('Diviswap instance not provided');\n\n setLoading(true);\n setError(null);\n\n try {\n await diviswap.addresses.delete(data);\n setAddresses(prev => prev.filter(addr => \n !(addr.chain_id === data.chain_id && addr.address.toLowerCase() === data.address.toLowerCase())\n ));\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to delete address');\n setError(error);\n throw error;\n } finally {\n setLoading(false);\n }\n }, [diviswap]);\n\n const getByChain = useCallback((chainIdOrName: number | ChainName) => {\n if (!diviswap) return [];\n const chainId = typeof chainIdOrName === 'string' ? diviswap.addresses.getChainId(chainIdOrName) : chainIdOrName;\n return addresses.filter(addr => addr.chain_id === chainId);\n }, [addresses, diviswap]);\n\n const getDefault = useCallback((chainIdOrName: number | ChainName) => {\n if (!diviswap) return null;\n const chainId = typeof chainIdOrName === 'string' ? diviswap.addresses.getChainId(chainIdOrName) : chainIdOrName;\n return addresses.find(addr => addr.chain_id === chainId && addr.is_default) || null;\n }, [addresses, diviswap]);\n\n // Auto-fetch addresses when diviswap instance is available\n useEffect(() => {\n if (diviswap) {\n fetchAddresses();\n }\n }, [diviswap, fetchAddresses]);\n\n return {\n addresses,\n loading,\n error,\n fetchAddresses,\n createAddress,\n setDefaultAddress,\n deleteAddress,\n getByChain,\n getDefault,\n };\n}\n\n/**\n * Hook for wallet connection and automatic address tracking\n */\nexport function useWalletConnection(diviswap?: Diviswap, config?: WalletTrackingConfig) {\n const [connections, setConnections] = useState<WalletConnection[]>([]);\n const [isConnecting, setIsConnecting] = useState(false);\n const [isTracking, setIsTracking] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const connect = useCallback(async (wallet?: EthereumWallet) => {\n if (!diviswap) throw new Error('Diviswap instance not provided');\n\n setIsConnecting(true);\n setError(null);\n\n try {\n const result = await connectWallet(diviswap, wallet, config);\n setConnections(result);\n return result;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to connect wallet');\n setError(error);\n throw error;\n } finally {\n setIsConnecting(false);\n }\n }, [diviswap, config]);\n\n const trackCurrent = useCallback(async (wallet?: EthereumWallet) => {\n if (!diviswap) throw new Error('Diviswap instance not provided');\n\n setIsTracking(true);\n setError(null);\n\n try {\n const result = await trackCurrentWallet(diviswap, wallet, config);\n setConnections(result);\n return result;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to track current wallet');\n setError(error);\n throw error;\n } finally {\n setIsTracking(false);\n }\n }, [diviswap, config]);\n\n const setupTracking = useCallback((wallet?: EthereumWallet) => {\n if (!diviswap) throw new Error('Diviswap instance not provided');\n\n try {\n const tracker = setupWalletTracking(diviswap, wallet, config);\n return tracker;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to setup wallet tracking');\n setError(error);\n throw error;\n }\n }, [diviswap, config]);\n\n return {\n connections,\n isConnecting,\n isTracking,\n error,\n connect,\n trackCurrent,\n setupTracking,\n };\n}\n\n/**\n * Hook that combines address management with wallet tracking\n */\nexport function useWalletAddresses(diviswap?: Diviswap, config?: WalletTrackingConfig) {\n const addressHook = useAddresses(diviswap);\n const walletHook = useWalletConnection(diviswap, config);\n\n const connectAndTrack = useCallback(async (wallet?: EthereumWallet) => {\n const connections = await walletHook.connect(wallet);\n // Refresh addresses after connecting\n await addressHook.fetchAddresses();\n return connections;\n }, [walletHook.connect, addressHook.fetchAddresses]);\n\n const trackCurrentAndRefresh = useCallback(async (wallet?: EthereumWallet) => {\n const connections = await walletHook.trackCurrent(wallet);\n // Refresh addresses after tracking\n await addressHook.fetchAddresses();\n return connections;\n }, [walletHook.trackCurrent, addressHook.fetchAddresses]);\n\n return {\n // Address management\n ...addressHook,\n \n // Wallet connection\n connections: walletHook.connections,\n isConnecting: walletHook.isConnecting,\n isTracking: walletHook.isTracking,\n walletError: walletHook.error,\n \n // Combined actions\n connectAndTrack,\n trackCurrentAndRefresh,\n setupTracking: walletHook.setupTracking,\n };\n}"]}
1
+ {"version":3,"sources":["../../src/react/provider.tsx","../../src/react/farcaster-provider.tsx","../../src/react/hooks.ts","../../src/types/addresses.ts","../../src/integrations/wallet.ts","../../src/react/useAddresses.ts"],"names":["createContext","useState","useEffect","user","error","React","useContext","DiviswapContext","useCallback"],"mappings":";;;;;;;;;AA+BA,IAAM,eAAA,GAAkBA,oBAA2C,IAAI,CAAA;AAMhE,SAAS,gBAAA,CAAiB,EAAE,QAAA,EAAS,EAA0B;AAClE,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIC,eAAsB,IAAI,CAAA;AAClD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAuB,IAAI,CAAA;AAMrD,EAAAC,eAAA,CAAU,MAAM;AACZ,IAAA,YAAA,EAAa;AAAA,EACjB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,eAAe,YAAY;AAC7B,IAAA,IAAI;AACA,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,gCAAgC,CAAA;AAC7D,MAAA,IAAI,SAAS,EAAA,EAAI;AACb,QAAA,MAAMC,KAAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,QAAA,IAAIA,KAAAA,EAAM;AACN,UAAA,OAAA,CAAQA,KAAI,CAAA;AAAA,QAChB;AAAA,MACJ;AAAA,IACJ,SAASC,MAAAA,EAAO;AACZ,MAAA,OAAA,CAAQ,KAAA,CAAM,yBAAyBA,MAAK,CAAA;AAAA,IAChD;AAAA,EACJ,CAAA;AAEA,EAAA,MAAM,KAAA,GAAQ,OAAO,KAAA,EAAe,QAAA,KAAqB;AACrD,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACA,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,eAAA,EAAiB;AAAA,QAC1C,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,QAC9C,IAAA,EAAM,KAAK,SAAA,CAAU,EAAE,QAAQ,OAAA,EAAS,KAAA,EAAO,UAAU;AAAA,OAC5D,CAAA;AAED,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AACd,QAAA,MAAM,IAAI,MAAM,cAAc,CAAA;AAAA,MAClC;AAEA,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,MAAA,OAAA,CAAQ,KAAK,IAAI,CAAA;AAAA,IACrB,SAAS,GAAA,EAAK;AACV,MAAA,QAAA,CAAS,GAAY,CAAA;AACrB,MAAA,MAAM,GAAA;AAAA,IACV,CAAA,SAAE;AACE,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IACpB;AAAA,EACJ,CAAA;AAEA,EAAA,MAAM,SAAS,YAAY;AACvB,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,IAAI;AACA,MAAA,MAAM,MAAM,eAAA,EAAiB;AAAA,QACzB,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,QAC9C,MAAM,IAAA,CAAK,SAAA,CAAU,EAAE,MAAA,EAAQ,UAAU;AAAA,OAC5C,CAAA;AACD,MAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,IAChB,SAAS,GAAA,EAAK;AACV,MAAA,QAAA,CAAS,GAAY,CAAA;AACrB,MAAA,MAAM,GAAA;AAAA,IACV,CAAA,SAAE;AACE,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IACpB;AAAA,EACJ,CAAA;AAEA,EAAA,MAAM,QAAA,GAAW,OAAO,IAAA,KAAc;AAClC,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACA,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,eAAA,EAAiB;AAAA,QAC1C,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,QAC9C,IAAA,EAAM,KAAK,SAAA,CAAU,EAAE,QAAQ,UAAA,EAAY,GAAG,MAAM;AAAA,OACvD,CAAA;AAED,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AACd,QAAA,MAAM,IAAI,MAAM,qBAAqB,CAAA;AAAA,MACzC;AAEA,MAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,IAAA,EAAK;AACnC,MAAA,OAAA,CAAQ,OAAO,IAAI,CAAA;AAAA,IACvB,SAAS,GAAA,EAAK;AACV,MAAA,QAAA,CAAS,GAAY,CAAA;AACrB,MAAA,MAAM,GAAA;AAAA,IACV,CAAA,SAAE;AACE,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IACpB;AAAA,EACJ,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,OAAO,IAAA,KAAc;AAC3C,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,eAAA,EAAiB;AAAA,MAC1C,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,MAC9C,IAAA,EAAM,KAAK,SAAA,CAAU,EAAE,QAAQ,mBAAA,EAAqB,GAAG,MAAM;AAAA,KAChE,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AACd,MAAA,MAAM,IAAI,MAAM,6BAA6B,CAAA;AAAA,IACjD;AAEA,IAAA,OAAO,SAAS,IAAA,EAAK;AAAA,EACzB,CAAA;AAEA,EAAA,MAAM,eAAA,GAAkB,OAAO,OAAA,KAAkB;AAC7C,IAAA,MAAM,MAAA,GAAS,IAAI,eAAA,CAAgB;AAAA,MAC/B,QAAA,EAAU,cAAA;AAAA,MACV,GAAG;AAAA,KACN,CAAA;AACD,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,cAAA,EAAiB,MAAM,CAAA,CAAE,CAAA;AAEtD,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AACd,MAAA,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAAA,IAClD;AAEA,IAAA,OAAO,SAAS,IAAA,EAAK;AAAA,EACzB,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,OAAO,IAAA,KAAc;AACrC,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,eAAA,EAAiB;AAAA,MAC1C,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,MAC9C,IAAA,EAAM,KAAK,SAAA,CAAU,EAAE,QAAQ,aAAA,EAAe,GAAG,MAAM;AAAA,KAC1D,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AACd,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IAC3C;AAEA,IAAA,OAAO,SAAS,IAAA,EAAK;AAAA,EACzB,CAAA;AAEA,EAAA,MAAM,YAAY,YAAY;AAC1B,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,+BAA+B,CAAA;AAE5D,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AACd,MAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,IAC5C;AAEA,IAAA,OAAO,SAAS,IAAA,EAAK;AAAA,EACzB,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,OAAO,EAAA,KAAe;AACtC,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,gCAAA,EAAmC,EAAE,CAAA,CAAA,EAAI;AAAA,MAClE,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AACd,MAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,IAC5C;AAAA,EACJ,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,OAAO,MAAA,KAAmB;AAC5C,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,eAAA,EAAiB;AAAA,MAC1C,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,MAC9C,MAAM,IAAA,CAAK,SAAA,CAAU,EAAE,MAAA,EAAQ,eAAA,EAAiB,QAAQ;AAAA,KAC3D,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AACd,MAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,IAC5C;AAEA,IAAA,OAAO,SAAS,IAAA,EAAK;AAAA,EACzB,CAAA;AAEA,EAAA,MAAM,oBAAoB,YAAY;AAClC,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,eAAA,EAAiB;AAAA,MAC1C,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,MAC9C,MAAM,IAAA,CAAK,SAAA,CAAU,EAAE,MAAA,EAAQ,qBAAqB;AAAA,KACvD,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AACd,MAAA,MAAM,IAAI,MAAM,iCAAiC,CAAA;AAAA,IACrD;AAEA,IAAA,OAAO,SAAS,IAAA,EAAK;AAAA,EACzB,CAAA;AAEA,EAAA,MAAM,KAAA,GAA8B;AAAA,IAChC,IAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,iBAAA;AAAA,IACA,eAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACJ;AAEA,EAAA,uBACIC,sBAAA,CAAA,aAAA,CAAC,eAAA,CAAgB,QAAA,EAAhB,EAAyB,SACrB,QACL,CAAA;AAER;AAEO,SAAS,WAAA,GAAc;AAC1B,EAAA,MAAM,OAAA,GAAUC,iBAAW,eAAe,CAAA;AAC1C,EAAA,IAAI,CAAC,OAAA,EAAS;AACV,IAAA,MAAM,IAAI,MAAM,oDAAoD,CAAA;AAAA,EACxE;AACA,EAAA,OAAO,OAAA;AACX;AAIO,IAAM,eAAA,GAAkB;AC5N/B,IAAMC,gBAAAA,GAAkBP,oBAA2C,IAAI,CAAA;AAQhE,SAAS,yBAAA,CAA0B;AAAA,EACtC,QAAA;AAAA,EACA,YAAA,GAAe;AACnB,CAAA,EAAmC;AAC/B,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIC,eAAsB,IAAI,CAAA;AAClD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAuB,IAAI,CAAA;AACrD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,eAAwB,IAAI,CAAA;AAGpE,EAAAC,gBAAU,MAAM;AACZ,IAAA,IAAI,YAAA,KAAiB,cAAA,IAAkB,OAAO,MAAA,KAAW,WAAA,EAAa;AAClE,MAAA,MAAM,WAAA,GAAc,YAAA,CAAa,OAAA,CAAQ,wBAAwB,CAAA;AACjE,MAAA,IAAI,WAAA,EAAa;AACb,QAAA,eAAA,CAAgB,WAAW,CAAA;AAC3B,QAAA,YAAA,CAAa,WAAW,CAAA;AAAA,MAC5B;AAAA,IACJ;AAAA,EACJ,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAGjB,EAAAA,gBAAU,MAAM;AACZ,IAAA,IAAI,YAAA,KAAiB,cAAA,IAAkB,OAAO,MAAA,KAAW,WAAA,EAAa;AAClE,MAAA,IAAI,YAAA,EAAc;AACd,QAAA,YAAA,CAAa,OAAA,CAAQ,0BAA0B,YAAY,CAAA;AAAA,MAC/D,CAAA,MAAO;AACH,QAAA,YAAA,CAAa,WAAW,wBAAwB,CAAA;AAAA,MACpD;AAAA,IACJ;AAAA,EACJ,CAAA,EAAG,CAAC,YAAA,EAAc,YAAY,CAAC,CAAA;AAE/B,EAAA,MAAM,iBAAiB,MAAmB;AACtC,IAAA,MAAM,OAAA,GAAuB,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAClE,IAAA,IAAI,YAAA,EAAc;AACd,MAAA,OAAA,CAAQ,eAAe,CAAA,GAAI,CAAA,OAAA,EAAU,YAAY,CAAA,CAAA;AAAA,IACrD;AACA,IAAA,OAAO,OAAA;AAAA,EACX,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,OAAO,KAAA,KAA0B;AAClD,IAAA,IAAI;AACA,MAAA,MAAM,OAAA,GAAuB,QACvB,EAAE,aAAA,EAAe,UAAU,KAAK,CAAA,CAAA,KAChC,EAAC;AACP,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,gCAAA,EAAkC;AAAA,QAC3D;AAAA,OACH,CAAA;AACD,MAAA,IAAI,SAAS,EAAA,EAAI;AACb,QAAA,MAAM,QAAA,GAAW,MAAM,QAAA,CAAS,IAAA,EAAK;AACrC,QAAA,IAAI,QAAA,EAAU;AACV,UAAA,OAAA,CAAQ,QAAQ,CAAA;AAAA,QACpB;AAAA,MACJ;AAAA,IACJ,SAASE,MAAAA,EAAO;AACZ,MAAA,OAAA,CAAQ,KAAA,CAAM,yBAAyBA,MAAK,CAAA;AAAA,IAChD;AAAA,EACJ,CAAA;AAEA,EAAA,MAAM,KAAA,GAAQ,OAAO,KAAA,EAAe,QAAA,KAAqB;AACrD,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACA,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,eAAA,EAAiB;AAAA,QAC1C,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,QAC9C,IAAA,EAAM,KAAK,SAAA,CAAU,EAAE,QAAQ,OAAA,EAAS,KAAA,EAAO,UAAU;AAAA,OAC5D,CAAA;AAED,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AACd,QAAA,MAAM,IAAI,MAAM,cAAc,CAAA;AAAA,MAClC;AAEA,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AAGjC,MAAA,MAAM,KAAA,GACF,IAAA,CAAK,YAAA,IAAgB,IAAA,CAAK,eAAe,IAAA,CAAK,YAAA;AAClD,MAAA,IAAI,KAAA,EAAO;AACP,QAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,MACzB;AAEA,MAAA,OAAA,CAAQ,KAAK,IAAI,CAAA;AAAA,IACrB,SAAS,GAAA,EAAK;AACV,MAAA,QAAA,CAAS,GAAY,CAAA;AACrB,MAAA,MAAM,GAAA;AAAA,IACV,CAAA,SAAE;AACE,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IACpB;AAAA,EACJ,CAAA;AAEA,EAAA,MAAM,SAAS,YAAY;AACvB,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,IAAI;AACA,MAAA,MAAM,MAAM,eAAA,EAAiB;AAAA,QACzB,MAAA,EAAQ,MAAA;AAAA,QACR,SAAS,cAAA,EAAe;AAAA,QACxB,MAAM,IAAA,CAAK,SAAA,CAAU,EAAE,MAAA,EAAQ,QAAA,EAAU,cAAc;AAAA,OAC1D,CAAA;AACD,MAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,MAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,IACxB,SAAS,GAAA,EAAK;AACV,MAAA,QAAA,CAAS,GAAY,CAAA;AACrB,MAAA,MAAM,GAAA;AAAA,IACV,CAAA,SAAE;AACE,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IACpB;AAAA,EACJ,CAAA;AAEA,EAAA,MAAM,QAAA,GAAW,OAAO,IAAA,KAAc;AAClC,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACA,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,eAAA,EAAiB;AAAA,QAC1C,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,QAC9C,IAAA,EAAM,KAAK,SAAA,CAAU,EAAE,QAAQ,UAAA,EAAY,GAAG,MAAM;AAAA,OACvD,CAAA;AAED,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AACd,QAAA,MAAM,IAAI,MAAM,qBAAqB,CAAA;AAAA,MACzC;AAEA,MAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,IAAA,EAAK;AAGnC,MAAA,MAAM,KAAA,GACF,MAAA,CAAO,YAAA,IACP,MAAA,CAAO,eACP,MAAA,CAAO,YAAA;AACX,MAAA,IAAI,KAAA,EAAO;AACP,QAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,MACzB;AAEA,MAAA,OAAA,CAAQ,OAAO,IAAI,CAAA;AAAA,IACvB,SAAS,GAAA,EAAK;AACV,MAAA,QAAA,CAAS,GAAY,CAAA;AACrB,MAAA,MAAM,GAAA;AAAA,IACV,CAAA,SAAE;AACE,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IACpB;AAAA,EACJ,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,OAAO,IAAA,KAAc;AAC3C,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,eAAA,EAAiB;AAAA,MAC1C,MAAA,EAAQ,MAAA;AAAA,MACR,SAAS,cAAA,EAAe;AAAA,MACxB,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,QACjB,MAAA,EAAQ,mBAAA;AAAA,QACR,YAAA;AAAA,QACA,GAAG;AAAA,OACN;AAAA,KACJ,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AACd,MAAA,MAAM,IAAI,MAAM,6BAA6B,CAAA;AAAA,IACjD;AAEA,IAAA,OAAO,SAAS,IAAA,EAAK;AAAA,EACzB,CAAA;AAEA,EAAA,MAAM,eAAA,GAAkB,OAAO,OAAA,KAAkB;AAC7C,IAAA,MAAM,MAAA,GAAS,IAAI,eAAA,CAAgB;AAAA,MAC/B,QAAA,EAAU,cAAA;AAAA,MACV,GAAI,YAAA,IAAgB,EAAE,YAAA,EAAa;AAAA,MACnC,GAAG;AAAA,KACN,CAAA;AACD,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,cAAA,EAAiB,MAAM,CAAA,CAAA,EAAI;AAAA,MACpD,OAAA,EAAS,eACH,EAAE,aAAA,EAAe,UAAU,YAAY,CAAA,CAAA,KACvC;AAAC,KACV,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AACd,MAAA,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAAA,IAClD;AAEA,IAAA,OAAO,SAAS,IAAA,EAAK;AAAA,EACzB,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,OAAO,IAAA,KAAc;AACrC,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,eAAA,EAAiB;AAAA,MAC1C,MAAA,EAAQ,MAAA;AAAA,MACR,SAAS,cAAA,EAAe;AAAA,MACxB,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,QACjB,MAAA,EAAQ,aAAA;AAAA,QACR,YAAA;AAAA,QACA,GAAG;AAAA,OACN;AAAA,KACJ,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AACd,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IAC3C;AAEA,IAAA,OAAO,SAAS,IAAA,EAAK;AAAA,EACzB,CAAA;AAEA,EAAA,MAAM,YAAY,YAAY;AAC1B,IAAA,MAAM,SAAS,IAAI,eAAA,CAAgB,EAAE,QAAA,EAAU,UAAU,CAAA;AACzD,IAAA,IAAI,YAAA,EAAc;AACd,MAAA,MAAA,CAAO,MAAA,CAAO,gBAAgB,YAAY,CAAA;AAAA,IAC9C;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,cAAA,EAAiB,MAAM,CAAA,CAAA,EAAI;AAAA,MACpD,OAAA,EAAS,eACH,EAAE,aAAA,EAAe,UAAU,YAAY,CAAA,CAAA,KACvC;AAAC,KACV,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AACd,MAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,IAC5C;AAEA,IAAA,OAAO,SAAS,IAAA,EAAK;AAAA,EACzB,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,OAAO,EAAA,KAAe;AACtC,IAAA,MAAM,MAAA,GAAS,IAAI,eAAA,CAAgB;AAAA,MAC/B,QAAA,EAAU,OAAA;AAAA,MACV,EAAA;AAAA,MACA,GAAI,YAAA,IAAgB,EAAE,YAAA;AAAa,KACtC,CAAA;AAED,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,cAAA,EAAiB,MAAM,CAAA,CAAA,EAAI;AAAA,MACpD,MAAA,EAAQ,QAAA;AAAA,MACR,OAAA,EAAS,eACH,EAAE,aAAA,EAAe,UAAU,YAAY,CAAA,CAAA,KACvC;AAAC,KACV,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AACd,MAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,IAC5C;AAAA,EACJ,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,OAAO,MAAA,KAAmB;AAC5C,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,eAAA,EAAiB;AAAA,MAC1C,MAAA,EAAQ,MAAA;AAAA,MACR,SAAS,cAAA,EAAe;AAAA,MACxB,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,QACjB,MAAA,EAAQ,eAAA;AAAA,QACR,YAAA;AAAA,QACA;AAAA,OACH;AAAA,KACJ,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AACd,MAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,IAC5C;AAEA,IAAA,OAAO,SAAS,IAAA,EAAK;AAAA,EACzB,CAAA;AAEA,EAAA,MAAM,oBAAoB,YAAY;AAClC,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,eAAA,EAAiB;AAAA,MAC1C,MAAA,EAAQ,MAAA;AAAA,MACR,SAAS,cAAA,EAAe;AAAA,MACxB,MAAM,IAAA,CAAK,SAAA,CAAU,EAAE,MAAA,EAAQ,mBAAA,EAAqB,cAAc;AAAA,KACrE,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AACd,MAAA,MAAM,IAAI,MAAM,iCAAiC,CAAA;AAAA,IACrD;AAEA,IAAA,OAAO,SAAS,IAAA,EAAK;AAAA,EACzB,CAAA;AAEA,EAAA,MAAM,KAAA,GAA8B;AAAA,IAChC,IAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,YAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,iBAAA;AAAA,IACA,eAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACJ;AAEA,EAAA,uBACIC,sBAAAA,CAAA,aAAA,CAACE,iBAAgB,QAAA,EAAhB,EAAyB,SACrB,QACL,CAAA;AAER;AAcO,IAAM,wBAAA,GAA2B;AC7UjC,SAAS,OAAA,GAAU;AACtB,EAAA,MAAM,EAAE,MAAM,KAAA,EAAO,MAAA,EAAQ,UAAU,OAAA,EAAS,KAAA,KAAU,WAAA,EAAY;AAEtE,EAAA,OAAO;AAAA,IACH,IAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,eAAA,EAAiB,CAAC,CAAC,IAAA;AAAA,IACnB,SAAA,EAAW;AAAA,GACf;AACJ;AAGO,SAAS,eAAA,GAAkB;AAC9B,EAAA,MAAM,EAAE,iBAAA,EAAmB,eAAA,EAAiB,KAAA,KAAU,WAAA,EAAY;AAClE,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIN,cAAAA,CAAwB,EAAE,CAAA;AAClE,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAS,KAAK,CAAA;AAE5C,EAAA,MAAM,iBAAA,GAAoBO,iBAAA;AAAA,IACtB,OAAO,OAAA,KAKD;AACF,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,IAAI;AACA,QAAA,MAAM,IAAA,GAAO,MAAM,eAAA,CAAgB,OAAO,CAAA;AAC1C,QAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,QAAA,OAAO,IAAA;AAAA,MACX,SAAS,GAAA,EAAK;AACV,QAAA,OAAA,CAAQ,KAAA,CAAM,iCAAiC,GAAG,CAAA;AAClD,QAAA,MAAM,GAAA;AAAA,MACV,CAAA,SAAE;AACE,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MACpB;AAAA,IACJ,CAAA;AAAA,IACA,CAAC,eAAe;AAAA,GACpB;AAEA,EAAA,MAAM,MAAA,GAASA,iBAAA;AAAA,IACX,OAAO,IAAA,KAAc;AACjB,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,IAAI;AACA,QAAA,MAAM,WAAA,GAAc,MAAM,iBAAA,CAAkB,IAAI,CAAA;AAChD,QAAA,MAAM,iBAAA,EAAkB;AACxB,QAAA,OAAO,WAAA;AAAA,MACX,SAAS,GAAA,EAAK;AACV,QAAA,OAAA,CAAQ,KAAA,CAAM,iCAAiC,GAAG,CAAA;AAClD,QAAA,MAAM,GAAA;AAAA,MACV,CAAA,SAAE;AACE,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MACpB;AAAA,IACJ,CAAA;AAAA,IACA,CAAC,mBAAmB,iBAAiB;AAAA,GACzC;AAEA,EAAA,OAAO;AAAA,IACH,YAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,iBAAA;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB,OAAA,EAAS;AAAA,GACb;AACJ;AAGO,SAAS,SAAA,GAAY;AACxB,EAAA,MAAM,EAAE,WAAA,EAAa,SAAA,EAAW,WAAA,EAAa,KAAA,KAAU,WAAA,EAAY;AACnE,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIP,cAAAA,CAAkB,EAAE,CAAA;AAChD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAS,KAAK,CAAA;AAE5C,EAAA,MAAM,WAAA,GAAcO,kBAAY,YAAY;AACxC,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,IAAI;AACA,MAAA,MAAM,IAAA,GAAO,MAAM,SAAA,EAAU;AAC7B,MAAA,SAAA,CAAU,IAAI,CAAA;AACd,MAAA,OAAO,IAAA;AAAA,IACX,SAAS,GAAA,EAAK;AACV,MAAA,OAAA,CAAQ,KAAA,CAAM,2BAA2B,GAAG,CAAA;AAC5C,MAAA,MAAM,GAAA;AAAA,IACV,CAAA,SAAE;AACE,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IACpB;AAAA,EACJ,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAEd,EAAA,MAAM,MAAA,GAASA,iBAAA;AAAA,IACX,OAAO,IAAA,KAAc;AACjB,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,IAAI;AACA,QAAA,MAAM,KAAA,GAAQ,MAAM,WAAA,CAAY,IAAI,CAAA;AACpC,QAAA,MAAM,WAAA,EAAY;AAClB,QAAA,OAAO,KAAA;AAAA,MACX,SAAS,GAAA,EAAK;AACV,QAAA,OAAA,CAAQ,KAAA,CAAM,2BAA2B,GAAG,CAAA;AAC5C,QAAA,MAAM,GAAA;AAAA,MACV,CAAA,SAAE;AACE,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MACpB;AAAA,IACJ,CAAA;AAAA,IACA,CAAC,aAAa,WAAW;AAAA,GAC7B;AAEA,EAAA,MAAM,MAAA,GAASA,iBAAA;AAAA,IACX,OAAO,EAAA,KAAe;AAClB,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,IAAI;AACA,QAAA,MAAM,YAAY,EAAE,CAAA;AACpB,QAAA,MAAM,WAAA,EAAY;AAAA,MACtB,SAAS,GAAA,EAAK;AACV,QAAA,OAAA,CAAQ,KAAA,CAAM,2BAA2B,GAAG,CAAA;AAC5C,QAAA,MAAM,GAAA;AAAA,MACV,CAAA,SAAE;AACE,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MACpB;AAAA,IACJ,CAAA;AAAA,IACA,CAAC,aAAa,WAAW;AAAA,GAC7B;AAGA,EAAAN,gBAAU,MAAM;AACZ,IAAA,WAAA,EAAY;AAAA,EAChB,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAA,OAAO;AAAA,IACH,MAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA,EAAa,MAAA;AAAA,IACb,WAAA,EAAa,MAAA;AAAA,IACb,OAAA,EAAS,WAAA;AAAA,IACT,cAAc,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,CAAA,IAAK;AAAA,GACrD;AACJ;AA2BO,SAAS,aAAa,OAAA,EAA+B;AACxD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAID,eAA2B,IAAI,CAAA;AACjE,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAS,IAAI,CAAA;AAC3C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAwB,IAAI,CAAA;AAEtD,EAAA,MAAM,cAAA,GAAiBO,kBAAY,YAAY;AAC3C,IAAA,IAAI;AACA,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,QAAA,CAAS,IAAI,CAAA;AAGb,MAAA,MAAM,SAAS,IAAI,eAAA,CAAgB,EAAE,QAAA,EAAU,aAAa,CAAA;AAC5D,MAAA,IAAI,OAAA,EAAS,UAAA;AACT,QAAA,MAAA,CAAO,GAAA,CAAI,YAAA,EAAc,OAAA,CAAQ,UAAU,CAAA;AAC/C,MAAA,IAAI,OAAA,EAAS,aAAA;AACT,QAAA,MAAA,CAAO,GAAA,CAAI,eAAA,EAAiB,OAAA,CAAQ,aAAa,CAAA;AAGrD,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,cAAA,EAAiB,MAAM,CAAA,CAAE,CAAA;AAEtD,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AACd,QAAA,MAAM,IAAI,MAAM,4BAA4B,CAAA;AAAA,MAChD;AAEA,MAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,IAAA,EAAK;AACnC,MAAA,YAAA,CAAa,MAAM,CAAA;AAAA,IACvB,SAAS,GAAA,EAAU;AACf,MAAA,OAAA,CAAQ,KAAA,CAAM,2BAA2B,GAAG,CAAA;AAC5C,MAAA,QAAA,CAAS,GAAA,CAAI,WAAW,4BAA4B,CAAA;AAEpD,MAAA,YAAA,CAAa;AAAA,QACT,SAAA,EAAW,aAAA;AAAA,QACX,SAAA,EAAW,cAAA;AAAA,QACX,WAAA,EAAa,KAAA;AAAA,QACb,cAAA,EAAgB,IAAA;AAAA,QAChB,iBAAA,EAAmB,MAAA;AAAA,QACnB,QAAA,EAAU;AAAA,OACb,CAAA;AAAA,IACL,CAAA,SAAE;AACE,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IACpB;AAAA,EACJ,GAAG,CAAC,OAAA,EAAS,UAAA,EAAY,OAAA,EAAS,aAAa,CAAC,CAAA;AAEhD,EAAAN,gBAAU,MAAM;AACZ,IAAA,cAAA,EAAe;AAAA,EACnB,CAAA,EAAG,CAAC,cAAc,CAAC,CAAA;AAEnB,EAAA,MAAM,OAAA,GAAUM,kBAAY,MAAM;AAC9B,IAAA,cAAA,EAAe;AAAA,EACnB,CAAA,EAAG,CAAC,cAAc,CAAC,CAAA;AAGnB,EAAA,MAAM,aAAA,GAAgB,WAAW,SAAA,KAAc,UAAA;AAC/C,EAAA,MAAM,YAAA,GAAe,WAAW,SAAA,KAAc,SAAA;AAC9C,EAAA,MAAM,aAAA,GAAgB,WAAW,SAAA,KAAc,UAAA;AAC/C,EAAA,MAAM,WACF,CAAC,aAAA,IACD,SAAA,EAAW,cAAA,IACX,WAAW,QAAA,KAAa,cAAA;AAE5B,EAAA,OAAO;AAAA,IACH,SAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA;AAAA;AAAA,IAEA,aAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA,EAAa,WAAW,WAAA,IAAe,KAAA;AAAA,IACvC,iBAAA,EAAmB,WAAW,iBAAA,IAAqB;AAAA,GACvD;AACJ;AAqBO,SAAS,aAAa,OAAA,EAA+B;AACxD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIP,eAAS,IAAI,CAAA;AAC3C,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,cAAAA,CAAwB,EAAE,CAAA;AAClE,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,cAAAA,CAAkB,EAAE,CAAA;AAChD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,cAAAA,CAAyB;AAAA,IAC/C,WAAA,EAAa,CAAA;AAAA,IACb,mBAAA,EAAqB,CAAA;AAAA,IACrB,qBAAA,EAAuB,CAAA;AAAA,IACvB,kBAAA,EAAoB;AAAA,GACvB,CAAA;AACD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,cAAAA,CAA2B,EAAE,CAAA;AAE/D,EAAA,MAAM,iBAAA,GAAoBO,kBAAY,YAAY;AAC9C,IAAA,IAAI;AACA,MAAA,UAAA,CAAW,IAAI,CAAA;AAGf,MAAA,MAAM,QAAA,GAAW,IAAI,eAAA,CAAgB;AAAA,QACjC,QAAA,EAAU,cAAA;AAAA,QACV,KAAA,EAAO;AAAA,OACV,CAAA;AACD,MAAA,MAAM,cAAc,IAAI,eAAA,CAAgB,EAAE,QAAA,EAAU,UAAU,CAAA;AAE9D,MAAA,IAAI,SAAS,UAAA,EAAY;AACrB,QAAA,QAAA,CAAS,GAAA,CAAI,YAAA,EAAc,OAAA,CAAQ,UAAU,CAAA;AAC7C,QAAA,WAAA,CAAY,GAAA,CAAI,YAAA,EAAc,OAAA,CAAQ,UAAU,CAAA;AAAA,MACpD;AACA,MAAA,IAAI,SAAS,aAAA,EAAe;AACxB,QAAA,QAAA,CAAS,GAAA,CAAI,eAAA,EAAiB,OAAA,CAAQ,aAAa,CAAA;AACnD,QAAA,WAAA,CAAY,GAAA,CAAI,eAAA,EAAiB,OAAA,CAAQ,aAAa,CAAA;AAAA,MAC1D;AAGA,MAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,QAClD,KAAA,CAAM,CAAA,cAAA,EAAiB,QAAQ,CAAA,CAAE,CAAA;AAAA,QACjC,KAAA,CAAM,CAAA,cAAA,EAAiB,WAAW,CAAA,CAAE;AAAA,OACvC,CAAA;AAED,MAAA,MAAM,SAAS,UAAA,CAAW,EAAA,GAAK,MAAM,UAAA,CAAW,IAAA,KAAS,EAAC;AAC1D,MAAA,MAAM,YAAY,aAAA,CAAc,EAAA,GAC1B,MAAM,aAAA,CAAc,IAAA,KACpB,EAAC;AAEP,MAAA,eAAA,CAAgB,MAAA,IAAU,EAAE,CAAA;AAC5B,MAAA,SAAA,CAAU,SAAA,IAAa,EAAE,CAAA;AAGzB,MAAA,IAAI,MAAA,IAAU,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAI7B,QAAA,MAAM,oBAAoB,MAAA,CAAO,MAAA;AAAA,UAC7B,CAAC,EAAA,KACG,EAAA,CAAG,OAAA,KAAY,iBAAA,IACf,GAAG,OAAA,KAAY;AAAA,SACvB;AAGA,QAAA,MAAM,cAAc,iBAAA,CAAkB,MAAA;AAAA,UAClC,CAAC,KAAa,EAAA,KAAY;AACtB,YAAA,MAAM,MAAA,GAAS,EAAA,CAAG,mBAAA,EAAqB,MAAA,IAAU,CAAA;AACjD,YAAA,OAAO,GAAA,GAAM,MAAA;AAAA,UACjB,CAAA;AAAA,UACA;AAAA,SACJ;AAGA,QAAA,MAAM,sBAAsB,iBAAA,CAAkB,MAAA;AAAA,UAC1C,CAAC,EAAA,KACG,EAAA,CAAG,MAAA,KAAW,WAAA,IACd,EAAA,CAAG,MAAA,KAAW,YAAA,IACd,EAAA,CAAG,MAAA,KAAW,SAAA,IACd,EAAA,CAAG,MAAA,KAAW;AAAA,SACtB,CAAE,MAAA;AACF,QAAA,MAAM,wBAAwB,iBAAA,CAAkB,MAAA;AAAA,UAC5C,CAAC,EAAA,KACG,EAAA,CAAG,MAAA,KAAW,WAAA,IAAe,GAAG,MAAA,KAAW;AAAA,SACnD,CAAE,MAAA;AACF,QAAA,MAAM,qBAAqB,iBAAA,CAAkB,MAAA;AAAA,UACzC,CAAC,EAAA,KACG,EAAA,CAAG,MAAA,KAAW,QAAA,IAAY,GAAG,MAAA,KAAW;AAAA,SAChD,CAAE,MAAA;AAEF,QAAA,QAAA,CAAS;AAAA,UACL,WAAA;AAAA,UACA,mBAAA;AAAA,UACA,qBAAA;AAAA,UACA;AAAA,SACH,CAAA;AAGD,QAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,EAAE,QAAQ,CAAA,EAAE,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM;AAClD,UAAA,MAAM,IAAA,uBAAW,IAAA,EAAK;AACtB,UAAA,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,OAAA,EAAQ,IAAK,IAAI,CAAA,CAAE,CAAA;AACrC,UAAA,OAAO,KAAK,WAAA,EAAY,CAAE,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAAA,QAC1C,CAAC,CAAA;AAED,QAAA,MAAM,YAAA,GAAe,SAAA,CAAU,GAAA,CAAI,CAAC,IAAA,KAAS;AAEzC,UAAA,MAAM,kBAAkB,MAAA,CAAO,MAAA;AAAA,YAC3B,CAAC,OACG,EAAA,CAAG,UAAA,IACH,IAAI,IAAA,CAAK,EAAA,CAAG,UAAU,CAAA,CACjB,WAAA,GACA,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA,KAAM,SACtB,EAAA,CAAG,OAAA,KAAY,iBAAA,IACZ,EAAA,CAAG,OAAA,KAAY,cAAA;AAAA,WAC3B;AACA,UAAA,MAAM,SAAS,eAAA,CAAgB,MAAA;AAAA,YAC3B,CAAC,GAAA,EAAa,EAAA,KACV,GAAA,IAAO,EAAA,CAAG,qBAAqB,MAAA,IAAU,CAAA,CAAA;AAAA,YAC7C;AAAA,WACJ;AAEA,UAAA,OAAO;AAAA,YACH,MAAM,IAAI,IAAA,CAAK,IAAI,CAAA,CAAE,mBAAmB,OAAA,EAAS;AAAA,cAC7C,KAAA,EAAO,OAAA;AAAA,cACP,GAAA,EAAK;AAAA,aACR,CAAA;AAAA,YACD,MAAA;AAAA;AAAA,YACA,cAAc,eAAA,CAAgB;AAAA,WAClC;AAAA,QACJ,CAAC,CAAA;AAED,QAAA,YAAA,CAAa,YAAY,CAAA;AAAA,MAC7B;AAAA,IACJ,SAAS,KAAA,EAAO;AACZ,MAAA,OAAA,CAAQ,KAAA,CAAM,iCAAiC,KAAK,CAAA;AAAA,IACxD,CAAA,SAAE;AACE,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IACpB;AAAA,EACJ,GAAG,CAAC,OAAA,EAAS,UAAA,EAAY,OAAA,EAAS,aAAa,CAAC,CAAA;AAEhD,EAAAN,gBAAU,MAAM;AACZ,IAAA,iBAAA,EAAkB;AAAA,EACtB,CAAA,EAAG,CAAC,iBAAiB,CAAC,CAAA;AAEtB,EAAA,OAAO;AAAA,IACH,KAAA;AAAA,IACA,SAAA;AAAA,IACA,YAAA,EAAc,YAAA,CAAa,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AAAA;AAAA,IACrC,MAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA,EAAS;AAAA,GACb;AACJ;;;ACzXO,IAAM,SAAA,GAAY;AAAA;AAAA,EAErB,QAAA,EAAU,CAAA;AAAA,EACV,QAAA,EAAU,EAAA;AAAA,EACV,IAAA,EAAM,IAAA;AAAA,EACN,OAAA,EAAS,GAAA;AAAA,EACT,QAAA,EAAU,KAAA;AAAA;AAAA,EAGV,OAAA,EAAS,QAAA;AAAA,EACT,gBAAA,EAAkB,QAAA;AAAA,EAClB,YAAA,EAAc,KAAA;AAAA,EACd,cAAA,EAAgB,KAAA;AAAA,EAChB,gBAAA,EAAkB;AACtB,CAAA;;;ACjBO,IAAM,cAAA,GAAN,MAAM,cAAA,CAAc;AAAA,EAOf,WAAA,CAAY,MAAA,GAA+B,EAAC,EAAG;AALvD,IAAA,IAAA,CAAQ,MAAA,GAAgC,IAAA;AACxC,IAAA,IAAA,CAAQ,QAAA,GAA4B,IAAA;AAEpC,IAAA,IAAA,CAAQ,SAAA,uBAAuD,GAAA,EAAI;AAG/D,IAAA,IAAA,CAAK,MAAA,GAAS;AAAA,MACV,mBAAA,EAAqB,IAAA;AAAA,MACrB,iBAAA,EAAmB,IAAA;AAAA,MACnB,YAAA,EAAc,IAAA;AAAA,MACd,GAAG;AAAA,KACP;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,YAAY,MAAA,EAA8C;AAC7D,IAAA,IAAI,CAAC,eAAc,QAAA,EAAU;AACzB,MAAA,cAAA,CAAc,QAAA,GAAW,IAAI,cAAA,CAAc,MAAM,CAAA;AAAA,IACrD;AACA,IAAA,OAAO,cAAA,CAAc,QAAA;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAA,CAAK,UAAoB,MAAA,EAA+B;AACpD,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAEhB,IAAA,IAAI,MAAA,EAAQ;AACR,MAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,IAClB,CAAA,MAAA,IAAW,OAAO,MAAA,KAAW,WAAA,IAAgB,OAAe,QAAA,EAAU;AAClE,MAAA,IAAA,CAAK,SAAU,MAAA,CAAe,QAAA;AAAA,IAClC;AAEA,IAAA,IAAI,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,MAAA,CAAO,mBAAA,EAAqB;AAChD,MAAA,IAAA,CAAK,0BAAA,EAA2B;AAAA,IACpC;AAEA,IAAA,IAAI,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,MAAA,CAAO,iBAAA,EAAmB;AAC9C,MAAA,IAAA,CAAK,wBAAA,EAAyB;AAAA,IAClC;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAA,GAAuC;AACzC,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AACd,MAAA,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAAA,IAClD;AAEA,IAAA,IAAI,CAAC,KAAK,QAAA,EAAU;AAChB,MAAA,MAAM,IAAI,MAAM,kDAAkD,CAAA;AAAA,IACtE;AAEA,IAAA,IAAI;AAEA,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ;AAAA,QACvC,MAAA,EAAQ;AAAA,OACX,CAAA;AAGD,MAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ;AAAA,QACtC,MAAA,EAAQ;AAAA,OACX,CAAA;AAED,MAAA,MAAM,cAAA,GAAiB,QAAA,CAAS,OAAA,EAAS,EAAE,CAAA;AAC3C,MAAA,MAAM,cAAkC,EAAC;AAGzC,MAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC5B,QAAA,MAAM,UAAA,GAA+B;AAAA,UACjC,OAAA,EAAS,OAAA;AAAA,UACT,OAAA,EAAS,cAAA;AAAA,UACT,SAAA,EAAW,IAAA,CAAK,YAAA,CAAa,cAAc;AAAA,SAC/C;AAEA,QAAA,MAAM,IAAA,CAAK,QAAA,CAAS,SAAA,CAAU,WAAA,CAAY,UAAU,CAAA;AACpD,QAAA,WAAA,CAAY,KAAK,UAAU,CAAA;AAAA,MAC/B;AAEA,MAAA,OAAO,WAAA;AAAA,IACX,SAAS,KAAA,EAAO;AACZ,MAAA,OAAA,CAAQ,KAAA,CAAM,6BAA6B,KAAK,CAAA;AAChD,MAAA,MAAM,KAAA;AAAA,IACV;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAA,GAA4C;AAC9C,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AACd,MAAA,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAAA,IAClD;AAEA,IAAA,IAAI,CAAC,KAAK,QAAA,EAAU;AAChB,MAAA,MAAM,IAAI,MAAM,kDAAkD,CAAA;AAAA,IACtE;AAEA,IAAA,IAAI;AAEA,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ;AAAA,QACvC,MAAA,EAAQ;AAAA,OACX,CAAA;AAED,MAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACvB,QAAA,OAAO,EAAC;AAAA,MACZ;AAGA,MAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ;AAAA,QACtC,MAAA,EAAQ;AAAA,OACX,CAAA;AAED,MAAA,MAAM,cAAA,GAAiB,QAAA,CAAS,OAAA,EAAS,EAAE,CAAA;AAC3C,MAAA,MAAM,cAAkC,EAAC;AAGzC,MAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC5B,QAAA,MAAM,UAAA,GAA+B;AAAA,UACjC,OAAA,EAAS,OAAA;AAAA,UACT,OAAA,EAAS,cAAA;AAAA,UACT,SAAA,EAAW,IAAA,CAAK,YAAA,CAAa,cAAc;AAAA,SAC/C;AAEA,QAAA,MAAM,IAAA,CAAK,QAAA,CAAS,SAAA,CAAU,WAAA,CAAY,UAAU,CAAA;AACpD,QAAA,WAAA,CAAY,KAAK,UAAU,CAAA;AAAA,MAC/B;AAEA,MAAA,OAAO,WAAA;AAAA,IACX,SAAS,KAAA,EAAO;AACZ,MAAA,OAAA,CAAQ,KAAA,CAAM,yCAAyC,KAAK,CAAA;AAC5D,MAAA,MAAM,KAAA;AAAA,IACV;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKQ,0BAAA,GAAmC;AACvC,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,EAAQ,EAAA,EAAI;AAEtB,IAAA,MAAM,OAAA,GAAU,OAAO,QAAA,KAAuB;AAC1C,MAAA,IAAI,CAAC,KAAK,QAAA,EAAU;AAEpB,MAAA,IAAI;AAEA,QAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,MAAA,CAAQ,OAAA,CAAQ;AAAA,UACvC,MAAA,EAAQ;AAAA,SACX,CAAA;AAED,QAAA,MAAM,cAAA,GAAiB,QAAA,CAAS,OAAA,EAAS,EAAE,CAAA;AAG3C,QAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC5B,UAAA,MAAM,UAAA,GAA+B;AAAA,YACjC,OAAA,EAAS,OAAA;AAAA,YACT,OAAA,EAAS,cAAA;AAAA,YACT,SAAA,EAAW,IAAA,CAAK,YAAA,CAAa,cAAc;AAAA,WAC/C;AAEA,UAAA,MAAM,IAAA,CAAK,QAAA,CAAS,SAAA,CAAU,WAAA,CAAY,UAAU,CAAA;AAAA,QACxD;AAAA,MACJ,SAAS,KAAA,EAAO;AACZ,QAAA,OAAA,CAAQ,KAAA,CAAM,oCAAoC,KAAK,CAAA;AAAA,MAC3D;AAAA,IACJ,CAAA;AAEA,IAAA,IAAA,CAAK,MAAA,CAAO,EAAA,CAAG,iBAAA,EAAmB,OAAO,CAAA;AACzC,IAAA,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,iBAAA,EAAmB,OAAO,CAAA;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA,EAKQ,wBAAA,GAAiC;AACrC,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,EAAQ,EAAA,EAAI;AAEtB,IAAA,MAAM,OAAA,GAAU,OAAO,OAAA,KAAoB;AACvC,MAAA,IAAI,CAAC,KAAK,QAAA,EAAU;AAEpB,MAAA,IAAI;AAEA,QAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAQ,OAAA,CAAQ;AAAA,UACxC,MAAA,EAAQ;AAAA,SACX,CAAA;AAED,QAAA,MAAM,cAAA,GAAiB,QAAA,CAAS,OAAA,EAAS,EAAE,CAAA;AAG3C,QAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC5B,UAAA,MAAM,UAAA,GAA+B;AAAA,YACjC,OAAA,EAAS,OAAA;AAAA,YACT,OAAA,EAAS,cAAA;AAAA,YACT,SAAA,EAAW,IAAA,CAAK,YAAA,CAAa,cAAc;AAAA,WAC/C;AAEA,UAAA,MAAM,IAAA,CAAK,QAAA,CAAS,SAAA,CAAU,WAAA,CAAY,UAAU,CAAA;AAAA,QACxD;AAAA,MACJ,SAAS,KAAA,EAAO;AACZ,QAAA,OAAA,CAAQ,KAAA,CAAM,kCAAkC,KAAK,CAAA;AAAA,MACzD;AAAA,IACJ,CAAA;AAEA,IAAA,IAAA,CAAK,MAAA,CAAO,EAAA,CAAG,cAAA,EAAgB,OAAO,CAAA;AACtC,IAAA,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,cAAA,EAAgB,OAAO,CAAA;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAKQ,aAAa,OAAA,EAAqC;AAEtD,IAAA,MAAM,YAAA,GAAe,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,CAAE,IAAA;AAAA,MAC3C,CAAC,CAAC,CAAA,EAAG,EAAE,MAAM,EAAA,KAAO;AAAA,QACpB,CAAC,CAAA;AACL,IAAA,IAAI,cAAc,OAAO,YAAA;AAGzB,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,YAAA,GAAe,OAAO,CAAA;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,GAAgB;AACZ,IAAA,IAAI,IAAA,CAAK,QAAQ,cAAA,EAAgB;AAC7B,MAAA,KAAA,MAAW,CAAC,KAAA,EAAO,OAAO,CAAA,IAAK,KAAK,SAAA,EAAW;AAC3C,QAAA,IAAA,CAAK,MAAA,CAAO,cAAA,CAAe,KAAA,EAAO,OAAO,CAAA;AAAA,MAC7C;AAAA,IACJ;AACA,IAAA,IAAA,CAAK,UAAU,KAAA,EAAM;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa,MAAA,EAA6C;AACtD,IAAA,IAAA,CAAK,SAAS,EAAE,GAAG,IAAA,CAAK,MAAA,EAAQ,GAAG,MAAA,EAAO;AAAA,EAC9C;AACJ,CAAA;AArPa,cAAA,CACM,QAAA,GAAiC,IAAA;AAD7C,IAAM,aAAA,GAAN,cAAA;AAyQP,eAAsB,aAAA,CAClB,QAAA,EACA,MAAA,EACA,MAAA,EAC2B;AAC3B,EAAA,MAAM,OAAA,GAAU,aAAA,CAAc,WAAA,CAAY,MAAM,CAAA;AAChD,EAAA,OAAA,CAAQ,IAAA,CAAK,UAAU,MAAM,CAAA;AAC7B,EAAA,OAAO,QAAQ,OAAA,EAAQ;AAC3B;AAeA,eAAsB,kBAAA,CAClB,QAAA,EACA,MAAA,EACA,MAAA,EAC2B;AAC3B,EAAA,MAAM,OAAA,GAAU,aAAA,CAAc,WAAA,CAAY,MAAM,CAAA;AAChD,EAAA,OAAA,CAAQ,IAAA,CAAK,UAAU,MAAM,CAAA;AAC7B,EAAA,OAAO,QAAQ,YAAA,EAAa;AAChC;AAmBO,SAAS,mBAAA,CACZ,QAAA,EACA,MAAA,EACA,MAAA,EACa;AACb,EAAA,MAAM,OAAA,GAAU,aAAA,CAAc,WAAA,CAAY,MAAM,CAAA;AAChD,EAAA,OAAA,CAAQ,IAAA,CAAK,UAAU,MAAM,CAAA;AAC7B,EAAA,OAAO,OAAA;AACX;;;AC7UO,SAAS,aAAa,QAAA,EAAqB;AAC9C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAID,cAAAA,CAAoB,EAAE,CAAA;AACxD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAuB,IAAI,CAAA;AAErD,EAAA,MAAM,cAAA,GAAiBO,kBAAY,YAAY;AAC3C,IAAA,IAAI,CAAC,QAAA,EAAU;AAEf,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AAEb,IAAA,IAAI;AACA,MAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,SAAA,CAAU,IAAA,EAAK;AAC7C,MAAA,YAAA,CAAa,MAAM,CAAA;AAAA,IACvB,SAAS,GAAA,EAAK;AACV,MAAA,QAAA;AAAA,QACI,GAAA,YAAe,KAAA,GACT,GAAA,GACA,IAAI,MAAM,2BAA2B;AAAA,OAC/C;AAAA,IACJ,CAAA,SAAE;AACE,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IACpB;AAAA,EACJ,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,MAAM,aAAA,GAAgBA,iBAAAA;AAAA,IAClB,OAAO,IAAA,KAA+B;AAClC,MAAA,IAAI,CAAC,QAAA,EAAU,MAAM,IAAI,MAAM,gCAAgC,CAAA;AAE/D,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,QAAA,CAAS,IAAI,CAAA;AAEb,MAAA,IAAI;AACA,QAAA,MAAM,UAAA,GAAa,MAAM,QAAA,CAAS,SAAA,CAAU,OAAO,IAAI,CAAA;AACvD,QAAA,YAAA,CAAa,CAAC,IAAA,KAAS,CAAC,GAAG,IAAA,EAAM,UAAU,CAAC,CAAA;AAC5C,QAAA,OAAO,UAAA;AAAA,MACX,SAAS,GAAA,EAAK;AACV,QAAA,MAAMJ,SACF,GAAA,YAAe,KAAA,GACT,GAAA,GACA,IAAI,MAAM,0BAA0B,CAAA;AAC9C,QAAA,QAAA,CAASA,MAAK,CAAA;AACd,QAAA,MAAMA,MAAAA;AAAA,MACV,CAAA,SAAE;AACE,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MACpB;AAAA,IACJ,CAAA;AAAA,IACA,CAAC,QAAQ;AAAA,GACb;AAEA,EAAA,MAAM,iBAAA,GAAoBI,iBAAAA;AAAA,IACtB,OAAO,IAAA,KAAgD;AACnD,MAAA,IAAI,CAAC,QAAA,EAAU,MAAM,IAAI,MAAM,gCAAgC,CAAA;AAE/D,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,QAAA,CAAS,IAAI,CAAA;AAEb,MAAA,IAAI;AACA,QAAA,MAAM,QAAA,CAAS,SAAA,CAAU,UAAA,CAAW,IAAI,CAAA;AAExC,QAAA,MAAM,cAAA,EAAe;AAAA,MACzB,SAAS,GAAA,EAAK;AACV,QAAA,MAAMJ,SACF,GAAA,YAAe,KAAA,GACT,GAAA,GACA,IAAI,MAAM,+BAA+B,CAAA;AACnD,QAAA,QAAA,CAASA,MAAK,CAAA;AACd,QAAA,MAAMA,MAAAA;AAAA,MACV,CAAA,SAAE;AACE,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MACpB;AAAA,IACJ,CAAA;AAAA,IACA,CAAC,UAAU,cAAc;AAAA,GAC7B;AAEA,EAAA,MAAM,aAAA,GAAgBI,iBAAAA;AAAA,IAClB,OAAO,IAAA,KAAgD;AACnD,MAAA,IAAI,CAAC,QAAA,EAAU,MAAM,IAAI,MAAM,gCAAgC,CAAA;AAE/D,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,QAAA,CAAS,IAAI,CAAA;AAEb,MAAA,IAAI;AACA,QAAA,MAAM,QAAA,CAAS,SAAA,CAAU,MAAA,CAAO,IAAI,CAAA;AACpC,QAAA,YAAA;AAAA,UAAa,CAAC,SACV,IAAA,CAAK,MAAA;AAAA,YACD,CAAC,IAAA,KACG,EACI,IAAA,CAAK,QAAA,KAAa,IAAA,CAAK,QAAA,IACvB,IAAA,CAAK,OAAA,CAAQ,WAAA,EAAY,KACrB,IAAA,CAAK,QAAQ,WAAA,EAAY;AAAA;AAEzC,SACJ;AAAA,MACJ,SAAS,GAAA,EAAK;AACV,QAAA,MAAMJ,SACF,GAAA,YAAe,KAAA,GACT,GAAA,GACA,IAAI,MAAM,0BAA0B,CAAA;AAC9C,QAAA,QAAA,CAASA,MAAK,CAAA;AACd,QAAA,MAAMA,MAAAA;AAAA,MACV,CAAA,SAAE;AACE,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MACpB;AAAA,IACJ,CAAA;AAAA,IACA,CAAC,QAAQ;AAAA,GACb;AAEA,EAAA,MAAM,UAAA,GAAaI,iBAAAA;AAAA,IACf,CAAC,aAAA,KAAsC;AACnC,MAAA,IAAI,CAAC,QAAA,EAAU,OAAO,EAAC;AACvB,MAAA,MAAM,OAAA,GACF,OAAO,aAAA,KAAkB,QAAA,GACnB,SAAS,SAAA,CAAU,UAAA,CAAW,aAAa,CAAA,GAC3C,aAAA;AACV,MAAA,OAAO,UAAU,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,aAAa,OAAO,CAAA;AAAA,IAC/D,CAAA;AAAA,IACA,CAAC,WAAW,QAAQ;AAAA,GACxB;AAEA,EAAA,MAAM,UAAA,GAAaA,iBAAAA;AAAA,IACf,CAAC,aAAA,KAAsC;AACnC,MAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AACtB,MAAA,MAAM,OAAA,GACF,OAAO,aAAA,KAAkB,QAAA,GACnB,SAAS,SAAA,CAAU,UAAA,CAAW,aAAa,CAAA,GAC3C,aAAA;AACV,MAAA,OACI,SAAA,CAAU,IAAA;AAAA,QACN,CAAC,IAAA,KAAS,IAAA,CAAK,QAAA,KAAa,WAAW,IAAA,CAAK;AAAA,OAChD,IAAK,IAAA;AAAA,IAEb,CAAA;AAAA,IACA,CAAC,WAAW,QAAQ;AAAA,GACxB;AAGA,EAAAN,gBAAU,MAAM;AACZ,IAAA,IAAI,QAAA,EAAU;AACV,MAAA,cAAA,EAAe;AAAA,IACnB;AAAA,EACJ,CAAA,EAAG,CAAC,QAAA,EAAU,cAAc,CAAC,CAAA;AAE7B,EAAA,OAAO;AAAA,IACH,SAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,cAAA;AAAA,IACA,aAAA;AAAA,IACA,iBAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACJ;AACJ;AAKO,SAAS,mBAAA,CACZ,UACA,MAAA,EACF;AACE,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAID,cAAAA,CAA6B,EAAE,CAAA;AACrE,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,eAAS,KAAK,CAAA;AACtD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,eAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAuB,IAAI,CAAA;AAErD,EAAA,MAAM,OAAA,GAAUO,iBAAAA;AAAA,IACZ,OAAO,MAAA,KAA4B;AAC/B,MAAA,IAAI,CAAC,QAAA,EAAU,MAAM,IAAI,MAAM,gCAAgC,CAAA;AAE/D,MAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,MAAA,QAAA,CAAS,IAAI,CAAA;AAEb,MAAA,IAAI;AACA,QAAA,MAAM,MAAA,GAAS,MAAM,aAAA,CAAc,QAAA,EAAU,QAAQ,MAAM,CAAA;AAC3D,QAAA,cAAA,CAAe,MAAM,CAAA;AACrB,QAAA,OAAO,MAAA;AAAA,MACX,SAAS,GAAA,EAAK;AACV,QAAA,MAAMJ,SACF,GAAA,YAAe,KAAA,GACT,GAAA,GACA,IAAI,MAAM,0BAA0B,CAAA;AAC9C,QAAA,QAAA,CAASA,MAAK,CAAA;AACd,QAAA,MAAMA,MAAAA;AAAA,MACV,CAAA,SAAE;AACE,QAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,MACzB;AAAA,IACJ,CAAA;AAAA,IACA,CAAC,UAAU,MAAM;AAAA,GACrB;AAEA,EAAA,MAAM,YAAA,GAAeI,iBAAAA;AAAA,IACjB,OAAO,MAAA,KAA4B;AAC/B,MAAA,IAAI,CAAC,QAAA,EAAU,MAAM,IAAI,MAAM,gCAAgC,CAAA;AAE/D,MAAA,aAAA,CAAc,IAAI,CAAA;AAClB,MAAA,QAAA,CAAS,IAAI,CAAA;AAEb,MAAA,IAAI;AACA,QAAA,MAAM,SAAS,MAAM,kBAAA;AAAA,UACjB,QAAA;AAAA,UACA,MAAA;AAAA,UACA;AAAA,SACJ;AACA,QAAA,cAAA,CAAe,MAAM,CAAA;AACrB,QAAA,OAAO,MAAA;AAAA,MACX,SAAS,GAAA,EAAK;AACV,QAAA,MAAMJ,SACF,GAAA,YAAe,KAAA,GACT,GAAA,GACA,IAAI,MAAM,gCAAgC,CAAA;AACpD,QAAA,QAAA,CAASA,MAAK,CAAA;AACd,QAAA,MAAMA,MAAAA;AAAA,MACV,CAAA,SAAE;AACE,QAAA,aAAA,CAAc,KAAK,CAAA;AAAA,MACvB;AAAA,IACJ,CAAA;AAAA,IACA,CAAC,UAAU,MAAM;AAAA,GACrB;AAEA,EAAA,MAAM,aAAA,GAAgBI,iBAAAA;AAAA,IAClB,CAAC,MAAA,KAA4B;AACzB,MAAA,IAAI,CAAC,QAAA,EAAU,MAAM,IAAI,MAAM,gCAAgC,CAAA;AAE/D,MAAA,IAAI;AACA,QAAA,MAAM,OAAA,GAAU,mBAAA,CAAoB,QAAA,EAAU,MAAA,EAAQ,MAAM,CAAA;AAC5D,QAAA,OAAO,OAAA;AAAA,MACX,SAAS,GAAA,EAAK;AACV,QAAA,MAAMJ,SACF,GAAA,YAAe,KAAA,GACT,GAAA,GACA,IAAI,MAAM,iCAAiC,CAAA;AACrD,QAAA,QAAA,CAASA,MAAK,CAAA;AACd,QAAA,MAAMA,MAAAA;AAAA,MACV;AAAA,IACJ,CAAA;AAAA,IACA,CAAC,UAAU,MAAM;AAAA,GACrB;AAEA,EAAA,OAAO;AAAA,IACH,WAAA;AAAA,IACA,YAAA;AAAA,IACA,UAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACJ;AACJ;AAKO,SAAS,kBAAA,CACZ,UACA,MAAA,EACF;AACE,EAAA,MAAM,WAAA,GAAc,aAAa,QAAQ,CAAA;AACzC,EAAA,MAAM,UAAA,GAAa,mBAAA,CAAoB,QAAA,EAAU,MAAM,CAAA;AAEvD,EAAA,MAAM,eAAA,GAAkBI,iBAAAA;AAAA,IACpB,OAAO,MAAA,KAA4B;AAC/B,MAAA,MAAM,WAAA,GAAc,MAAM,UAAA,CAAW,OAAA,CAAQ,MAAM,CAAA;AAEnD,MAAA,MAAM,YAAY,cAAA,EAAe;AACjC,MAAA,OAAO,WAAA;AAAA,IACX,CAAA;AAAA,IACA,CAAC,UAAA,CAAW,OAAA,EAAS,WAAA,CAAY,cAAc;AAAA,GACnD;AAEA,EAAA,MAAM,sBAAA,GAAyBA,iBAAAA;AAAA,IAC3B,OAAO,MAAA,KAA4B;AAC/B,MAAA,MAAM,WAAA,GAAc,MAAM,UAAA,CAAW,YAAA,CAAa,MAAM,CAAA;AAExD,MAAA,MAAM,YAAY,cAAA,EAAe;AACjC,MAAA,OAAO,WAAA;AAAA,IACX,CAAA;AAAA,IACA,CAAC,UAAA,CAAW,YAAA,EAAc,WAAA,CAAY,cAAc;AAAA,GACxD;AAEA,EAAA,OAAO;AAAA;AAAA,IAEH,GAAG,WAAA;AAAA;AAAA,IAGH,aAAa,UAAA,CAAW,WAAA;AAAA,IACxB,cAAc,UAAA,CAAW,YAAA;AAAA,IACzB,YAAY,UAAA,CAAW,UAAA;AAAA,IACvB,aAAa,UAAA,CAAW,KAAA;AAAA;AAAA,IAGxB,eAAA;AAAA,IACA,sBAAA;AAAA,IACA,eAAe,UAAA,CAAW;AAAA,GAC9B;AACJ","file":"index.js","sourcesContent":["'use client';\n\nimport React, { createContext, useContext, useEffect, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport type { User, Transaction, Payee } from '../types';\n\nexport interface DiviswapContextValue {\n // Authentication state\n user: User | null;\n loading: boolean;\n error: Error | null;\n\n // Authentication methods\n login: (email: string, password: string) => Promise<void>;\n logout: () => Promise<void>;\n register: (data: any) => Promise<void>;\n\n // Transaction methods\n createTransaction: (data: any) => Promise<Transaction>;\n getTransactions: (filters?: any) => Promise<Transaction[]>;\n\n // Payee methods\n createPayee: (data: any) => Promise<Payee>;\n getPayees: () => Promise<Payee[]>;\n deletePayee: (id: string) => Promise<void>;\n\n // Fee methods\n calculateFees?: (amount: number) => Promise<any>;\n getIntegratorFees?: () => Promise<any>;\n}\n\nconst DiviswapContext = createContext<DiviswapContextValue | null>(null);\n\nexport interface DiviswapProviderProps {\n children: ReactNode;\n}\n\nexport function DiviswapProvider({ children }: DiviswapProviderProps) {\n const [user, setUser] = useState<User | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n // Initialize SDK client is handled in the API route\n // The provider just manages client-side state and API calls\n\n // Check for existing session on mount\n useEffect(() => {\n checkSession();\n }, []);\n\n const checkSession = async () => {\n try {\n const response = await fetch('/api/diviswap?resource=session');\n if (response.ok) {\n const user = await response.json();\n if (user) {\n setUser(user);\n }\n }\n } catch (error) {\n console.error('Session check failed:', error);\n }\n };\n\n const login = async (email: string, password: string) => {\n setLoading(true);\n setError(null);\n try {\n const response = await fetch('/api/diviswap', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ action: 'login', email, password }),\n });\n\n if (!response.ok) {\n throw new Error('Login failed');\n }\n\n const data = await response.json();\n setUser(data.user);\n } catch (err) {\n setError(err as Error);\n throw err;\n } finally {\n setLoading(false);\n }\n };\n\n const logout = async () => {\n setLoading(true);\n try {\n await fetch('/api/diviswap', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ action: 'logout' }),\n });\n setUser(null);\n } catch (err) {\n setError(err as Error);\n throw err;\n } finally {\n setLoading(false);\n }\n };\n\n const register = async (data: any) => {\n setLoading(true);\n setError(null);\n try {\n const response = await fetch('/api/diviswap', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ action: 'register', ...data }),\n });\n\n if (!response.ok) {\n throw new Error('Registration failed');\n }\n\n const result = await response.json();\n setUser(result.user);\n } catch (err) {\n setError(err as Error);\n throw err;\n } finally {\n setLoading(false);\n }\n };\n\n const createTransaction = async (data: any) => {\n const response = await fetch('/api/diviswap', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ action: 'createTransaction', ...data }),\n });\n\n if (!response.ok) {\n throw new Error('Transaction creation failed');\n }\n\n return response.json();\n };\n\n const getTransactions = async (filters?: any) => {\n const params = new URLSearchParams({\n resource: 'transactions',\n ...filters,\n });\n const response = await fetch(`/api/diviswap?${params}`);\n\n if (!response.ok) {\n throw new Error('Failed to fetch transactions');\n }\n\n return response.json();\n };\n\n const createPayee = async (data: any) => {\n const response = await fetch('/api/diviswap', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ action: 'createPayee', ...data }),\n });\n\n if (!response.ok) {\n throw new Error('Payee creation failed');\n }\n\n return response.json();\n };\n\n const getPayees = async () => {\n const response = await fetch('/api/diviswap?resource=payees');\n\n if (!response.ok) {\n throw new Error('Failed to fetch payees');\n }\n\n return response.json();\n };\n\n const deletePayee = async (id: string) => {\n const response = await fetch(`/api/diviswap?resource=payee&id=${id}`, {\n method: 'DELETE',\n });\n\n if (!response.ok) {\n throw new Error('Failed to delete payee');\n }\n };\n\n const calculateFees = async (amount: number) => {\n const response = await fetch('/api/diviswap', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ action: 'calculateFees', amount }),\n });\n\n if (!response.ok) {\n throw new Error('Fee calculation failed');\n }\n\n return response.json();\n };\n\n const getIntegratorFees = async () => {\n const response = await fetch('/api/diviswap', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ action: 'getIntegratorFees' }),\n });\n\n if (!response.ok) {\n throw new Error('Failed to fetch integrator fees');\n }\n\n return response.json();\n };\n\n const value: DiviswapContextValue = {\n user,\n loading,\n error,\n login,\n logout,\n register,\n createTransaction,\n getTransactions,\n createPayee,\n getPayees,\n deletePayee,\n calculateFees,\n getIntegratorFees,\n };\n\n return (\n <DiviswapContext.Provider value={value}>\n {children}\n </DiviswapContext.Provider>\n );\n}\n\nexport function useDiviswap() {\n const context = useContext(DiviswapContext);\n if (!context) {\n throw new Error('useDiviswap must be used within a DiviswapProvider');\n }\n return context;\n}\n\n// Legacy aliases for backward compatibility\n/** @deprecated Use DiviswapProvider instead */\nexport const LiberExProvider = DiviswapProvider;\n/** @deprecated Use useDiviswap instead */\nexport const useLiberEx = useDiviswap;\n/** @deprecated Use DiviswapContextValue instead */\nexport type LiberExContextValue = DiviswapContextValue;\n/** @deprecated Use DiviswapProviderProps instead */\nexport type LiberExProviderProps = DiviswapProviderProps;\n","'use client';\n\nimport React, { createContext, useContext, useEffect, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport type { User, Transaction, Payee } from '../types';\n\nexport interface DiviswapContextValue {\n // Authentication state\n user: User | null;\n loading: boolean;\n error: Error | null;\n sessionToken: string | null;\n\n // Authentication methods\n login: (email: string, password: string) => Promise<void>;\n logout: () => Promise<void>;\n register: (data: any) => Promise<void>;\n\n // Transaction methods\n createTransaction: (data: any) => Promise<Transaction>;\n getTransactions: (filters?: any) => Promise<Transaction[]>;\n\n // Payee methods\n createPayee: (data: any) => Promise<Payee>;\n getPayees: () => Promise<Payee[]>;\n deletePayee: (id: string) => Promise<void>;\n\n // Fee methods\n calculateFees?: (amount: number) => Promise<any>;\n getIntegratorFees?: () => Promise<any>;\n}\n\nconst DiviswapContext = createContext<DiviswapContextValue | null>(null);\n\nexport interface DiviswapFarcasterProviderProps {\n children: ReactNode;\n /** Where to store the session token: 'memory' for Farcaster mini apps, 'localStorage' for regular web apps */\n tokenStorage?: 'memory' | 'localStorage';\n}\n\nexport function DiviswapFarcasterProvider({\n children,\n tokenStorage = 'memory',\n}: DiviswapFarcasterProviderProps) {\n const [user, setUser] = useState<User | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [sessionToken, setSessionToken] = useState<string | null>(null);\n\n // Load token from storage on mount (if using localStorage)\n useEffect(() => {\n if (tokenStorage === 'localStorage' && typeof window !== 'undefined') {\n const storedToken = localStorage.getItem('diviswap_session_token');\n if (storedToken) {\n setSessionToken(storedToken);\n checkSession(storedToken);\n }\n }\n }, [tokenStorage]);\n\n // Save token to storage when it changes (if using localStorage)\n useEffect(() => {\n if (tokenStorage === 'localStorage' && typeof window !== 'undefined') {\n if (sessionToken) {\n localStorage.setItem('diviswap_session_token', sessionToken);\n } else {\n localStorage.removeItem('diviswap_session_token');\n }\n }\n }, [sessionToken, tokenStorage]);\n\n const getAuthHeaders = (): HeadersInit => {\n const headers: HeadersInit = { 'Content-Type': 'application/json' };\n if (sessionToken) {\n headers['Authorization'] = `Bearer ${sessionToken}`;\n }\n return headers;\n };\n\n const checkSession = async (token?: string | null) => {\n try {\n const headers: HeadersInit = token\n ? { Authorization: `Bearer ${token}` }\n : {};\n const response = await fetch('/api/diviswap?resource=session', {\n headers,\n });\n if (response.ok) {\n const userData = await response.json();\n if (userData) {\n setUser(userData);\n }\n }\n } catch (error) {\n console.error('Session check failed:', error);\n }\n };\n\n const login = async (email: string, password: string) => {\n setLoading(true);\n setError(null);\n try {\n const response = await fetch('/api/diviswap', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ action: 'login', email, password }),\n });\n\n if (!response.ok) {\n throw new Error('Login failed');\n }\n\n const data = await response.json();\n\n // Store the session token\n const token =\n data.sessionToken || data.accessToken || data.access_token;\n if (token) {\n setSessionToken(token);\n }\n\n setUser(data.user);\n } catch (err) {\n setError(err as Error);\n throw err;\n } finally {\n setLoading(false);\n }\n };\n\n const logout = async () => {\n setLoading(true);\n try {\n await fetch('/api/diviswap', {\n method: 'POST',\n headers: getAuthHeaders(),\n body: JSON.stringify({ action: 'logout', sessionToken }),\n });\n setUser(null);\n setSessionToken(null);\n } catch (err) {\n setError(err as Error);\n throw err;\n } finally {\n setLoading(false);\n }\n };\n\n const register = async (data: any) => {\n setLoading(true);\n setError(null);\n try {\n const response = await fetch('/api/diviswap', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ action: 'register', ...data }),\n });\n\n if (!response.ok) {\n throw new Error('Registration failed');\n }\n\n const result = await response.json();\n\n // Store the session token\n const token =\n result.sessionToken ||\n result.accessToken ||\n result.access_token;\n if (token) {\n setSessionToken(token);\n }\n\n setUser(result.user);\n } catch (err) {\n setError(err as Error);\n throw err;\n } finally {\n setLoading(false);\n }\n };\n\n const createTransaction = async (data: any) => {\n const response = await fetch('/api/diviswap', {\n method: 'POST',\n headers: getAuthHeaders(),\n body: JSON.stringify({\n action: 'createTransaction',\n sessionToken,\n ...data,\n }),\n });\n\n if (!response.ok) {\n throw new Error('Transaction creation failed');\n }\n\n return response.json();\n };\n\n const getTransactions = async (filters?: any) => {\n const params = new URLSearchParams({\n resource: 'transactions',\n ...(sessionToken && { sessionToken }),\n ...filters,\n });\n const response = await fetch(`/api/diviswap?${params}`, {\n headers: sessionToken\n ? { Authorization: `Bearer ${sessionToken}` }\n : {},\n });\n\n if (!response.ok) {\n throw new Error('Failed to fetch transactions');\n }\n\n return response.json();\n };\n\n const createPayee = async (data: any) => {\n const response = await fetch('/api/diviswap', {\n method: 'POST',\n headers: getAuthHeaders(),\n body: JSON.stringify({\n action: 'createPayee',\n sessionToken,\n ...data,\n }),\n });\n\n if (!response.ok) {\n throw new Error('Payee creation failed');\n }\n\n return response.json();\n };\n\n const getPayees = async () => {\n const params = new URLSearchParams({ resource: 'payees' });\n if (sessionToken) {\n params.append('sessionToken', sessionToken);\n }\n\n const response = await fetch(`/api/diviswap?${params}`, {\n headers: sessionToken\n ? { Authorization: `Bearer ${sessionToken}` }\n : {},\n });\n\n if (!response.ok) {\n throw new Error('Failed to fetch payees');\n }\n\n return response.json();\n };\n\n const deletePayee = async (id: string) => {\n const params = new URLSearchParams({\n resource: 'payee',\n id,\n ...(sessionToken && { sessionToken }),\n });\n\n const response = await fetch(`/api/diviswap?${params}`, {\n method: 'DELETE',\n headers: sessionToken\n ? { Authorization: `Bearer ${sessionToken}` }\n : {},\n });\n\n if (!response.ok) {\n throw new Error('Failed to delete payee');\n }\n };\n\n const calculateFees = async (amount: number) => {\n const response = await fetch('/api/diviswap', {\n method: 'POST',\n headers: getAuthHeaders(),\n body: JSON.stringify({\n action: 'calculateFees',\n sessionToken,\n amount,\n }),\n });\n\n if (!response.ok) {\n throw new Error('Fee calculation failed');\n }\n\n return response.json();\n };\n\n const getIntegratorFees = async () => {\n const response = await fetch('/api/diviswap', {\n method: 'POST',\n headers: getAuthHeaders(),\n body: JSON.stringify({ action: 'getIntegratorFees', sessionToken }),\n });\n\n if (!response.ok) {\n throw new Error('Failed to fetch integrator fees');\n }\n\n return response.json();\n };\n\n const value: DiviswapContextValue = {\n user,\n loading,\n error,\n sessionToken,\n login,\n logout,\n register,\n createTransaction,\n getTransactions,\n createPayee,\n getPayees,\n deletePayee,\n calculateFees,\n getIntegratorFees,\n };\n\n return (\n <DiviswapContext.Provider value={value}>\n {children}\n </DiviswapContext.Provider>\n );\n}\n\nexport function useDiviswapFarcaster() {\n const context = useContext(DiviswapContext);\n if (!context) {\n throw new Error(\n 'useDiviswapFarcaster must be used within a DiviswapFarcasterProvider'\n );\n }\n return context;\n}\n\n// Legacy aliases for backward compatibility\n/** @deprecated Use DiviswapFarcasterProvider instead */\nexport const LiberExFarcasterProvider = DiviswapFarcasterProvider;\n/** @deprecated Use DiviswapFarcasterProviderProps instead */\nexport type LiberExFarcasterProviderProps = DiviswapFarcasterProviderProps;\n","import { useState, useEffect, useCallback } from 'react';\nimport { useDiviswap } from './provider';\nimport type { Transaction, Payee } from '../types';\n\n// Re-export the main hook\nexport { useDiviswap };\n// Legacy alias\nexport { useDiviswap as useLiberEx };\n\n// Convenience hook for authentication\nexport function useAuth() {\n const { user, login, logout, register, loading, error } = useDiviswap();\n\n return {\n user,\n login,\n logout,\n register,\n loading,\n error,\n isAuthenticated: !!user,\n isLoading: loading,\n };\n}\n\n// Hook for managing transactions\nexport function useTransactions() {\n const { createTransaction, getTransactions, error } = useDiviswap();\n const [transactions, setTransactions] = useState<Transaction[]>([]);\n const [loading, setLoading] = useState(false);\n\n const fetchTransactions = useCallback(\n async (filters?: {\n limit?: number;\n offset?: number;\n status?: 'pending' | 'processing' | 'completed' | 'failed';\n type?: 'onramp' | 'offramp';\n }) => {\n setLoading(true);\n try {\n const data = await getTransactions(filters);\n setTransactions(data);\n return data;\n } catch (err) {\n console.error('Failed to fetch transactions:', err);\n throw err;\n } finally {\n setLoading(false);\n }\n },\n [getTransactions]\n );\n\n const create = useCallback(\n async (data: any) => {\n setLoading(true);\n try {\n const transaction = await createTransaction(data);\n await fetchTransactions(); // Refresh list\n return transaction;\n } catch (err) {\n console.error('Failed to create transaction:', err);\n throw err;\n } finally {\n setLoading(false);\n }\n },\n [createTransaction, fetchTransactions]\n );\n\n return {\n transactions,\n loading,\n error,\n fetchTransactions,\n createTransaction: create,\n refresh: fetchTransactions,\n };\n}\n\n// Hook for managing payees\nexport function usePayees() {\n const { createPayee, getPayees, deletePayee, error } = useDiviswap();\n const [payees, setPayees] = useState<Payee[]>([]);\n const [loading, setLoading] = useState(false);\n\n const fetchPayees = useCallback(async () => {\n setLoading(true);\n try {\n const data = await getPayees();\n setPayees(data);\n return data;\n } catch (err) {\n console.error('Failed to fetch payees:', err);\n throw err;\n } finally {\n setLoading(false);\n }\n }, [getPayees]);\n\n const create = useCallback(\n async (data: any) => {\n setLoading(true);\n try {\n const payee = await createPayee(data);\n await fetchPayees(); // Refresh list\n return payee;\n } catch (err) {\n console.error('Failed to create payee:', err);\n throw err;\n } finally {\n setLoading(false);\n }\n },\n [createPayee, fetchPayees]\n );\n\n const remove = useCallback(\n async (id: string) => {\n setLoading(true);\n try {\n await deletePayee(id);\n await fetchPayees(); // Refresh list\n } catch (err) {\n console.error('Failed to delete payee:', err);\n throw err;\n } finally {\n setLoading(false);\n }\n },\n [deletePayee, fetchPayees]\n );\n\n // Load payees on mount\n useEffect(() => {\n fetchPayees();\n }, [fetchPayees]);\n\n return {\n payees,\n loading,\n error,\n createPayee: create,\n deletePayee: remove,\n refresh: fetchPayees,\n defaultPayee: payees.find((p) => p.isDefault) || null,\n };\n}\n\n// Hook for KYC status checking\nexport interface KYCStatus {\n kycStatus: 'NOT_STARTED' | 'PENDING' | 'APPROVED' | 'REJECTED' | 'EXPIRED';\n kybStatus:\n | 'NOT_REQUIRED'\n | 'NOT_STARTED'\n | 'PENDING'\n | 'APPROVED'\n | 'REJECTED';\n canTransact: boolean;\n requiresAction: boolean;\n verificationLevel: 'none' | 'basic' | 'full';\n nextStep?: 'COMPLETE_KYC' | 'COMPLETE_KYB' | 'WAIT_FOR_APPROVAL';\n kycMetadata?: {\n rejectLabels?: string[];\n reviewRejectType?: string;\n clientComment?: string;\n };\n}\n\nexport interface UseKYCStatusOptions {\n customerId?: string | null;\n customerEmail?: string | null;\n}\n\nexport function useKYCStatus(options?: UseKYCStatusOptions) {\n const [kycStatus, setKycStatus] = useState<KYCStatus | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n const fetchKYCStatus = useCallback(async () => {\n try {\n setLoading(true);\n setError(null);\n\n // Build query params for partner auth if provided\n const params = new URLSearchParams({ resource: 'kycStatus' });\n if (options?.customerId)\n params.set('customerId', options.customerId);\n if (options?.customerEmail)\n params.set('customerEmail', options.customerEmail);\n\n // Call the API route that fetches KYC status\n const response = await fetch(`/api/diviswap?${params}`);\n\n if (!response.ok) {\n throw new Error('Failed to fetch KYC status');\n }\n\n const status = await response.json();\n setKycStatus(status);\n } catch (err: any) {\n console.error('KYC status fetch error:', err);\n setError(err.message || 'Failed to fetch KYC status');\n // Set default status on error\n setKycStatus({\n kycStatus: 'NOT_STARTED',\n kybStatus: 'NOT_REQUIRED',\n canTransact: false,\n requiresAction: true,\n verificationLevel: 'none',\n nextStep: 'COMPLETE_KYC',\n });\n } finally {\n setLoading(false);\n }\n }, [options?.customerId, options?.customerEmail]);\n\n useEffect(() => {\n fetchKYCStatus();\n }, [fetchKYCStatus]);\n\n const refetch = useCallback(() => {\n fetchKYCStatus();\n }, [fetchKYCStatus]);\n\n // Helper flags\n const isKycApproved = kycStatus?.kycStatus === 'APPROVED';\n const isKycPending = kycStatus?.kycStatus === 'PENDING';\n const isKycRejected = kycStatus?.kycStatus === 'REJECTED';\n const needsKyc =\n !isKycApproved &&\n kycStatus?.requiresAction &&\n kycStatus?.nextStep === 'COMPLETE_KYC';\n\n return {\n kycStatus,\n loading,\n error,\n refetch,\n // Helper flags\n isKycApproved,\n isKycPending,\n isKycRejected,\n needsKyc,\n canTransact: kycStatus?.canTransact ?? false,\n verificationLevel: kycStatus?.verificationLevel ?? 'none',\n };\n}\n\n// Hook for comprehensive dashboard data with stats and charts\nexport interface DashboardStats {\n totalVolume: number;\n pendingTransactions: number;\n completedTransactions: number;\n failedTransactions: number;\n}\n\nexport interface ChartDataPoint {\n date: string;\n volume: number;\n transactions: number;\n}\n\nexport interface UseDashboardOptions {\n customerId?: string | null;\n customerEmail?: string | null;\n}\n\nexport function useDashboard(options?: UseDashboardOptions) {\n const [loading, setLoading] = useState(true);\n const [transactions, setTransactions] = useState<Transaction[]>([]);\n const [payees, setPayees] = useState<Payee[]>([]);\n const [stats, setStats] = useState<DashboardStats>({\n totalVolume: 0,\n pendingTransactions: 0,\n completedTransactions: 0,\n failedTransactions: 0,\n });\n const [chartData, setChartData] = useState<ChartDataPoint[]>([]);\n\n const loadDashboardData = useCallback(async () => {\n try {\n setLoading(true);\n\n // Build query params for partner auth if provided\n const txParams = new URLSearchParams({\n resource: 'transactions',\n limit: '50',\n });\n const payeeParams = new URLSearchParams({ resource: 'payees' });\n\n if (options?.customerId) {\n txParams.set('customerId', options.customerId);\n payeeParams.set('customerId', options.customerId);\n }\n if (options?.customerEmail) {\n txParams.set('customerEmail', options.customerEmail);\n payeeParams.set('customerEmail', options.customerEmail);\n }\n\n // Fetch transactions and payees in parallel\n const [txResponse, payeeResponse] = await Promise.all([\n fetch(`/api/diviswap?${txParams}`),\n fetch(`/api/diviswap?${payeeParams}`),\n ]);\n\n const txData = txResponse.ok ? await txResponse.json() : [];\n const payeeData = payeeResponse.ok\n ? await payeeResponse.json()\n : [];\n\n setTransactions(txData || []);\n setPayees(payeeData || []);\n\n // Calculate stats\n if (txData && txData.length > 0) {\n // Only count final transactions to avoid double/triple counting\n // Offramp creates: CRYPTO_DEPOSIT → TRADE → BANK_WITHDRAWAL (only count BANK_WITHDRAWAL)\n // Onramp creates: BANK_DEPOSIT → TRADE → CRYPTO_WITHDRAWAL (only count BANK_DEPOSIT)\n const finalTransactions = txData.filter(\n (tx: any) =>\n tx.tx_type === 'BANK_WITHDRAWAL' ||\n tx.tx_type === 'BANK_DEPOSIT'\n );\n\n // Amount is in transaction_details object\n const totalVolume = finalTransactions.reduce(\n (sum: number, tx: any) => {\n const amount = tx.transaction_details?.amount || 0;\n return sum + amount;\n },\n 0\n );\n\n // Status can be INITIATED, PROCESSING, COMPLETED, FAILED (uppercase from backend)\n const pendingTransactions = finalTransactions.filter(\n (tx: any) =>\n tx.status === 'INITIATED' ||\n tx.status === 'PROCESSING' ||\n tx.status === 'pending' ||\n tx.status === 'processing'\n ).length;\n const completedTransactions = finalTransactions.filter(\n (tx: any) =>\n tx.status === 'COMPLETED' || tx.status === 'completed'\n ).length;\n const failedTransactions = finalTransactions.filter(\n (tx: any) =>\n tx.status === 'FAILED' || tx.status === 'failed'\n ).length;\n\n setStats({\n totalVolume,\n pendingTransactions,\n completedTransactions,\n failedTransactions,\n });\n\n // Prepare chart data (last 7 days)\n const last7Days = Array.from({ length: 7 }, (_, i) => {\n const date = new Date();\n date.setDate(date.getDate() - (6 - i));\n return date.toISOString().split('T')[0];\n });\n\n const dailyVolumes = last7Days.map((date) => {\n // Only count final transactions to avoid double/triple counting\n const dayTransactions = txData.filter(\n (tx: any) =>\n tx.created_at &&\n new Date(tx.created_at)\n .toISOString()\n .split('T')[0] === date &&\n (tx.tx_type === 'BANK_WITHDRAWAL' ||\n tx.tx_type === 'BANK_DEPOSIT')\n );\n const volume = dayTransactions.reduce(\n (sum: number, tx: any) =>\n sum + (tx.transaction_details?.amount || 0),\n 0\n );\n\n return {\n date: new Date(date).toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n }),\n volume: volume, // Amount is already in dollars\n transactions: dayTransactions.length,\n };\n });\n\n setChartData(dailyVolumes);\n }\n } catch (error) {\n console.error('Error loading dashboard data:', error);\n } finally {\n setLoading(false);\n }\n }, [options?.customerId, options?.customerEmail]);\n\n useEffect(() => {\n loadDashboardData();\n }, [loadDashboardData]);\n\n return {\n stats,\n chartData,\n transactions: transactions.slice(0, 5), // Recent 5 transactions for dashboard\n payees,\n loading,\n refresh: loadDashboardData,\n };\n}\n","/**\n * Address-related type definitions\n */\n\nexport interface Address {\n id: number;\n uuid: string;\n uuid_history: string[];\n chain_id: number;\n address: string;\n is_default: boolean;\n user_id?: number;\n organization_id?: number;\n created_at: string;\n updated_at: string;\n}\n\nexport interface CreateAddressRequest {\n chain_id: number;\n address: string;\n is_default?: boolean;\n}\n\nexport interface SetDefaultAddressRequest {\n chain_id: number;\n address: string;\n}\n\nexport interface DeleteAddressRequest {\n chain_id: number;\n address: string;\n}\n\n/**\n * Chain ID mappings\n */\nexport const CHAIN_IDS = {\n // Mainnets\n ethereum: 1,\n optimism: 10,\n base: 8453,\n polygon: 137,\n arbitrum: 42161,\n\n // Testnets\n sepolia: 11155111,\n optimism_sepolia: 11155420,\n base_sepolia: 84532,\n polygon_mumbai: 80001,\n arbitrum_sepolia: 421614,\n} as const;\n\nexport type ChainName = keyof typeof CHAIN_IDS;\n\n/**\n * Wallet connection info for automatic tracking\n */\nexport interface WalletConnection {\n address: string;\n chainId: number;\n chainName?: string;\n}\n","/**\n * Wallet integration helpers for automatic address tracking\n */\n\nimport { Diviswap } from '../client';\nimport { WalletConnection, CHAIN_IDS } from '../types/addresses';\n\n/**\n * Ethereum-like wallet interface (compatible with MetaMask, WalletConnect, etc.)\n */\nexport interface EthereumWallet {\n request: (args: { method: string; params?: any[] }) => Promise<any>;\n on?: (event: string, handler: (...args: any[]) => void) => void;\n removeListener?: (event: string, handler: (...args: any[]) => void) => void;\n}\n\n/**\n * Automatic wallet tracking configuration\n */\nexport interface WalletTrackingConfig {\n /** Automatically track when accounts change */\n trackAccountChanges?: boolean;\n /** Automatically track when chain changes */\n trackChainChanges?: boolean;\n /** Set newly connected addresses as default for their chain */\n setAsDefault?: boolean;\n /** Custom chain mappings for unsupported chains */\n customChains?: Record<number, string>;\n}\n\n/**\n * Wallet tracking manager for automatic address management\n */\nexport class WalletTracker {\n private static instance: WalletTracker | null = null;\n private wallet: EthereumWallet | null = null;\n private diviswap: Diviswap | null = null;\n private config: WalletTrackingConfig;\n private listeners: Map<string, (...args: any[]) => void> = new Map();\n\n private constructor(config: WalletTrackingConfig = {}) {\n this.config = {\n trackAccountChanges: true,\n trackChainChanges: true,\n setAsDefault: true,\n ...config,\n };\n }\n\n /**\n * Get or create the wallet tracker instance\n */\n static getInstance(config?: WalletTrackingConfig): WalletTracker {\n if (!WalletTracker.instance) {\n WalletTracker.instance = new WalletTracker(config);\n }\n return WalletTracker.instance;\n }\n\n /**\n * Initialize wallet tracking with Diviswap SDK instance\n */\n init(diviswap: Diviswap, wallet?: EthereumWallet): void {\n this.diviswap = diviswap;\n\n if (wallet) {\n this.wallet = wallet;\n } else if (typeof window !== 'undefined' && (window as any).ethereum) {\n this.wallet = (window as any).ethereum;\n }\n\n if (this.wallet && this.config.trackAccountChanges) {\n this.setupAccountChangeListener();\n }\n\n if (this.wallet && this.config.trackChainChanges) {\n this.setupChainChangeListener();\n }\n }\n\n /**\n * Connect and track a wallet\n */\n async connect(): Promise<WalletConnection[]> {\n if (!this.wallet) {\n throw new Error('No wallet provider available');\n }\n\n if (!this.diviswap) {\n throw new Error('Diviswap SDK not initialized. Call init() first.');\n }\n\n try {\n // Request account access\n const accounts = await this.wallet.request({\n method: 'eth_requestAccounts',\n });\n\n // Get current chain\n const chainId = await this.wallet.request({\n method: 'eth_chainId',\n });\n\n const numericChainId = parseInt(chainId, 16);\n const connections: WalletConnection[] = [];\n\n // Track all connected accounts\n for (const account of accounts) {\n const connection: WalletConnection = {\n address: account,\n chainId: numericChainId,\n chainName: this.getChainName(numericChainId),\n };\n\n await this.diviswap.addresses.trackWallet(connection);\n connections.push(connection);\n }\n\n return connections;\n } catch (error) {\n console.error('Failed to connect wallet:', error);\n throw error;\n }\n }\n\n /**\n * Track current wallet state without requesting connection\n */\n async trackCurrent(): Promise<WalletConnection[]> {\n if (!this.wallet) {\n throw new Error('No wallet provider available');\n }\n\n if (!this.diviswap) {\n throw new Error('Diviswap SDK not initialized. Call init() first.');\n }\n\n try {\n // Get current accounts (may be empty if not connected)\n const accounts = await this.wallet.request({\n method: 'eth_accounts',\n });\n\n if (accounts.length === 0) {\n return [];\n }\n\n // Get current chain\n const chainId = await this.wallet.request({\n method: 'eth_chainId',\n });\n\n const numericChainId = parseInt(chainId, 16);\n const connections: WalletConnection[] = [];\n\n // Track all current accounts\n for (const account of accounts) {\n const connection: WalletConnection = {\n address: account,\n chainId: numericChainId,\n chainName: this.getChainName(numericChainId),\n };\n\n await this.diviswap.addresses.trackWallet(connection);\n connections.push(connection);\n }\n\n return connections;\n } catch (error) {\n console.error('Failed to track current wallet state:', error);\n throw error;\n }\n }\n\n /**\n * Setup listener for account changes\n */\n private setupAccountChangeListener(): void {\n if (!this.wallet?.on) return;\n\n const handler = async (accounts: string[]) => {\n if (!this.diviswap) return;\n\n try {\n // Get current chain\n const chainId = await this.wallet!.request({\n method: 'eth_chainId',\n });\n\n const numericChainId = parseInt(chainId, 16);\n\n // Track new accounts\n for (const account of accounts) {\n const connection: WalletConnection = {\n address: account,\n chainId: numericChainId,\n chainName: this.getChainName(numericChainId),\n };\n\n await this.diviswap.addresses.trackWallet(connection);\n }\n } catch (error) {\n console.error('Failed to handle account change:', error);\n }\n };\n\n this.wallet.on('accountsChanged', handler);\n this.listeners.set('accountsChanged', handler);\n }\n\n /**\n * Setup listener for chain changes\n */\n private setupChainChangeListener(): void {\n if (!this.wallet?.on) return;\n\n const handler = async (chainId: string) => {\n if (!this.diviswap) return;\n\n try {\n // Get current accounts\n const accounts = await this.wallet!.request({\n method: 'eth_accounts',\n });\n\n const numericChainId = parseInt(chainId, 16);\n\n // Track accounts on new chain\n for (const account of accounts) {\n const connection: WalletConnection = {\n address: account,\n chainId: numericChainId,\n chainName: this.getChainName(numericChainId),\n };\n\n await this.diviswap.addresses.trackWallet(connection);\n }\n } catch (error) {\n console.error('Failed to handle chain change:', error);\n }\n };\n\n this.wallet.on('chainChanged', handler);\n this.listeners.set('chainChanged', handler);\n }\n\n /**\n * Get chain name from chain ID\n */\n private getChainName(chainId: number): string | undefined {\n // Check built-in chains first\n const builtInChain = Object.entries(CHAIN_IDS).find(\n ([_, id]) => id === chainId\n )?.[0];\n if (builtInChain) return builtInChain;\n\n // Check custom chains\n return this.config.customChains?.[chainId];\n }\n\n /**\n * Cleanup listeners\n */\n cleanup(): void {\n if (this.wallet?.removeListener) {\n for (const [event, handler] of this.listeners) {\n this.wallet.removeListener(event, handler);\n }\n }\n this.listeners.clear();\n }\n\n /**\n * Update configuration\n */\n updateConfig(config: Partial<WalletTrackingConfig>): void {\n this.config = { ...this.config, ...config };\n }\n}\n\n/**\n * Convenience functions for easy integration\n */\n\n/**\n * Connect wallet and automatically track addresses\n *\n * @example\n * ```typescript\n * import { Diviswap, connectWallet } from '@diviswap/sdk';\n *\n * const diviswap = Diviswap.init(config);\n *\n * // Connect and track wallet automatically\n * const connections = await connectWallet(diviswap);\n * console.log('Tracked addresses:', connections);\n * ```\n */\nexport async function connectWallet(\n diviswap: Diviswap,\n wallet?: EthereumWallet,\n config?: WalletTrackingConfig\n): Promise<WalletConnection[]> {\n const tracker = WalletTracker.getInstance(config);\n tracker.init(diviswap, wallet);\n return tracker.connect();\n}\n\n/**\n * Track current wallet state without requesting connection\n *\n * @example\n * ```typescript\n * import { Diviswap, trackCurrentWallet } from '@diviswap/sdk';\n *\n * const diviswap = Diviswap.init(config);\n *\n * // Track currently connected accounts\n * const connections = await trackCurrentWallet(diviswap);\n * ```\n */\nexport async function trackCurrentWallet(\n diviswap: Diviswap,\n wallet?: EthereumWallet,\n config?: WalletTrackingConfig\n): Promise<WalletConnection[]> {\n const tracker = WalletTracker.getInstance(config);\n tracker.init(diviswap, wallet);\n return tracker.trackCurrent();\n}\n\n/**\n * Setup automatic wallet tracking (listens for account/chain changes)\n *\n * @example\n * ```typescript\n * import { Diviswap, setupWalletTracking } from '@diviswap/sdk';\n *\n * const diviswap = Diviswap.init(config);\n *\n * // Setup automatic tracking\n * setupWalletTracking(diviswap, {\n * trackAccountChanges: true,\n * trackChainChanges: true,\n * setAsDefault: true\n * });\n * ```\n */\nexport function setupWalletTracking(\n diviswap: Diviswap,\n wallet?: EthereumWallet,\n config?: WalletTrackingConfig\n): WalletTracker {\n const tracker = WalletTracker.getInstance(config);\n tracker.init(diviswap, wallet);\n return tracker;\n}\n","/**\n * React hooks for address management\n */\n\nimport { useState, useEffect, useCallback } from 'react';\nimport {\n Address,\n CreateAddressRequest,\n WalletConnection,\n ChainName,\n} from '../types/addresses';\nimport { Diviswap } from '../client';\nimport {\n connectWallet,\n trackCurrentWallet,\n setupWalletTracking,\n EthereumWallet,\n WalletTrackingConfig,\n} from '../integrations/wallet';\n\n/**\n * Hook for managing user addresses\n */\nexport function useAddresses(diviswap?: Diviswap) {\n const [addresses, setAddresses] = useState<Address[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchAddresses = useCallback(async () => {\n if (!diviswap) return;\n\n setLoading(true);\n setError(null);\n\n try {\n const result = await diviswap.addresses.list();\n setAddresses(result);\n } catch (err) {\n setError(\n err instanceof Error\n ? err\n : new Error('Failed to fetch addresses')\n );\n } finally {\n setLoading(false);\n }\n }, [diviswap]);\n\n const createAddress = useCallback(\n async (data: CreateAddressRequest) => {\n if (!diviswap) throw new Error('Diviswap instance not provided');\n\n setLoading(true);\n setError(null);\n\n try {\n const newAddress = await diviswap.addresses.create(data);\n setAddresses((prev) => [...prev, newAddress]);\n return newAddress;\n } catch (err) {\n const error =\n err instanceof Error\n ? err\n : new Error('Failed to create address');\n setError(error);\n throw error;\n } finally {\n setLoading(false);\n }\n },\n [diviswap]\n );\n\n const setDefaultAddress = useCallback(\n async (data: { chain_id: number; address: string }) => {\n if (!diviswap) throw new Error('Diviswap instance not provided');\n\n setLoading(true);\n setError(null);\n\n try {\n await diviswap.addresses.setDefault(data);\n // Refresh addresses to update default status\n await fetchAddresses();\n } catch (err) {\n const error =\n err instanceof Error\n ? err\n : new Error('Failed to set default address');\n setError(error);\n throw error;\n } finally {\n setLoading(false);\n }\n },\n [diviswap, fetchAddresses]\n );\n\n const deleteAddress = useCallback(\n async (data: { chain_id: number; address: string }) => {\n if (!diviswap) throw new Error('Diviswap instance not provided');\n\n setLoading(true);\n setError(null);\n\n try {\n await diviswap.addresses.delete(data);\n setAddresses((prev) =>\n prev.filter(\n (addr) =>\n !(\n addr.chain_id === data.chain_id &&\n addr.address.toLowerCase() ===\n data.address.toLowerCase()\n )\n )\n );\n } catch (err) {\n const error =\n err instanceof Error\n ? err\n : new Error('Failed to delete address');\n setError(error);\n throw error;\n } finally {\n setLoading(false);\n }\n },\n [diviswap]\n );\n\n const getByChain = useCallback(\n (chainIdOrName: number | ChainName) => {\n if (!diviswap) return [];\n const chainId =\n typeof chainIdOrName === 'string'\n ? diviswap.addresses.getChainId(chainIdOrName)\n : chainIdOrName;\n return addresses.filter((addr) => addr.chain_id === chainId);\n },\n [addresses, diviswap]\n );\n\n const getDefault = useCallback(\n (chainIdOrName: number | ChainName) => {\n if (!diviswap) return null;\n const chainId =\n typeof chainIdOrName === 'string'\n ? diviswap.addresses.getChainId(chainIdOrName)\n : chainIdOrName;\n return (\n addresses.find(\n (addr) => addr.chain_id === chainId && addr.is_default\n ) || null\n );\n },\n [addresses, diviswap]\n );\n\n // Auto-fetch addresses when diviswap instance is available\n useEffect(() => {\n if (diviswap) {\n fetchAddresses();\n }\n }, [diviswap, fetchAddresses]);\n\n return {\n addresses,\n loading,\n error,\n fetchAddresses,\n createAddress,\n setDefaultAddress,\n deleteAddress,\n getByChain,\n getDefault,\n };\n}\n\n/**\n * Hook for wallet connection and automatic address tracking\n */\nexport function useWalletConnection(\n diviswap?: Diviswap,\n config?: WalletTrackingConfig\n) {\n const [connections, setConnections] = useState<WalletConnection[]>([]);\n const [isConnecting, setIsConnecting] = useState(false);\n const [isTracking, setIsTracking] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const connect = useCallback(\n async (wallet?: EthereumWallet) => {\n if (!diviswap) throw new Error('Diviswap instance not provided');\n\n setIsConnecting(true);\n setError(null);\n\n try {\n const result = await connectWallet(diviswap, wallet, config);\n setConnections(result);\n return result;\n } catch (err) {\n const error =\n err instanceof Error\n ? err\n : new Error('Failed to connect wallet');\n setError(error);\n throw error;\n } finally {\n setIsConnecting(false);\n }\n },\n [diviswap, config]\n );\n\n const trackCurrent = useCallback(\n async (wallet?: EthereumWallet) => {\n if (!diviswap) throw new Error('Diviswap instance not provided');\n\n setIsTracking(true);\n setError(null);\n\n try {\n const result = await trackCurrentWallet(\n diviswap,\n wallet,\n config\n );\n setConnections(result);\n return result;\n } catch (err) {\n const error =\n err instanceof Error\n ? err\n : new Error('Failed to track current wallet');\n setError(error);\n throw error;\n } finally {\n setIsTracking(false);\n }\n },\n [diviswap, config]\n );\n\n const setupTracking = useCallback(\n (wallet?: EthereumWallet) => {\n if (!diviswap) throw new Error('Diviswap instance not provided');\n\n try {\n const tracker = setupWalletTracking(diviswap, wallet, config);\n return tracker;\n } catch (err) {\n const error =\n err instanceof Error\n ? err\n : new Error('Failed to setup wallet tracking');\n setError(error);\n throw error;\n }\n },\n [diviswap, config]\n );\n\n return {\n connections,\n isConnecting,\n isTracking,\n error,\n connect,\n trackCurrent,\n setupTracking,\n };\n}\n\n/**\n * Hook that combines address management with wallet tracking\n */\nexport function useWalletAddresses(\n diviswap?: Diviswap,\n config?: WalletTrackingConfig\n) {\n const addressHook = useAddresses(diviswap);\n const walletHook = useWalletConnection(diviswap, config);\n\n const connectAndTrack = useCallback(\n async (wallet?: EthereumWallet) => {\n const connections = await walletHook.connect(wallet);\n // Refresh addresses after connecting\n await addressHook.fetchAddresses();\n return connections;\n },\n [walletHook.connect, addressHook.fetchAddresses]\n );\n\n const trackCurrentAndRefresh = useCallback(\n async (wallet?: EthereumWallet) => {\n const connections = await walletHook.trackCurrent(wallet);\n // Refresh addresses after tracking\n await addressHook.fetchAddresses();\n return connections;\n },\n [walletHook.trackCurrent, addressHook.fetchAddresses]\n );\n\n return {\n // Address management\n ...addressHook,\n\n // Wallet connection\n connections: walletHook.connections,\n isConnecting: walletHook.isConnecting,\n isTracking: walletHook.isTracking,\n walletError: walletHook.error,\n\n // Combined actions\n connectAndTrack,\n trackCurrentAndRefresh,\n setupTracking: walletHook.setupTracking,\n };\n}\n"]}