{"version":3,"sources":["../src/widgets/kyc/KycModal.tsx","../src/components/Modal.tsx","../src/components/SDKWrapper.tsx","../src/stores/cardStatusStore.ts","../src/stores/sdkConfigStore.ts","../src/api/api.ts","../src/api/httpClient.ts","../src/api/auth.ts","../src/api/utils.ts","../src/stores/creditStore.ts","../src/core/dataFetcher.ts","../src/stores/useKycStore.ts","../src/widgets/kyc/SumSubConsentView.tsx","../src/components/shared/Checkbox.tsx","../src/widgets/kyc/KycPendingViaRain.tsx","../src/widgets/kyc/PreRainTerms.tsx","../src/components/SumSubWidget.tsx","../src/hooks/use-sumsub.ts","../src/utils/getUserIpAddress.ts","../src/core/cardActivation.ts","../src/api/sdk.ts","../src/hooks/useCardData.ts","../src/hooks/useCreditData.ts"],"sourcesContent":["import React, { useMemo, useEffect, JSX } from \"react\";\nimport { Modal } from \"../../components/Modal\";\nimport { useCardStatusStore } from \"../../stores/cardStatusStore\";\nimport { useKycStore } from \"../../stores/useKycStore\";\nimport SumSubConsentView from \"./SumSubConsentView\";\nimport KycPendingViaRain from \"./KycPendingViaRain\";\nimport PreRainTerms from \"./PreRainTerms\";\nimport { SumSubWidget } from \"../../components/SumSubWidget\";\n\ninterface KycModalProps {\n  eoaAddress: string;\n  onClose?: () => void;\n  onComplete?: () => void;\n}\n\nexport function KycModal({\n  eoaAddress,\n  onClose,\n  onComplete,\n}: KycModalProps): JSX.Element | null {\n  const { status } = useCardStatusStore();\n  const { acceptedTerms, acceptedRainTerms } = useKycStore();\n\n  // Call onComplete when status becomes approved\n  useEffect(() => {\n    if (status === \"approved\" && onComplete) {\n      onComplete();\n    }\n  }, [status, onComplete]);\n\n  const getModalView = useMemo(() => {\n    switch (status) {\n      case \"userNotExisting\":\n      case \"initiated\": {\n        if (acceptedTerms) {\n          return {\n            title: \"Complete KYC\",\n            component: <SumSubWidget eoaAddress={eoaAddress} />,\n          };\n        } else {\n          return {\n            title: \"Verifying with Sumsub\",\n            component: <SumSubConsentView />,\n          };\n        }\n      }\n      case \"review\": {\n        return {\n          title: \"KYC Verification is in Process\",\n          component: <KycPendingViaRain />,\n        };\n      }\n      case \"pending\": {\n        if (acceptedRainTerms) {\n          return {\n            title: \"Accept Terms to Proceed\",\n            component: <KycPendingViaRain />,\n          };\n        } else {\n          return {\n            title: \"KYC Verification is in Process\",\n            component: <PreRainTerms />,\n          };\n        }\n      }\n      case \"approved\": {\n        // For approved status, we just return null as this SDK doesn't handle card activation\n        return {\n          title: \"\",\n          component: <></>,\n        };\n      }\n      default:\n        return {\n          title: \"Apply for Card\",\n          component: <></>,\n        };\n    }\n  }, [status, acceptedTerms, acceptedRainTerms]);\n\n  const handleClose = onClose || (() => {});\n  const { title, component } = getModalView;\n\n  // Don't render modal if status is approved or no component\n  if (status === \"approved\" || !component) {\n    return null;\n  }\n\n  return (\n    <Modal title={title} onOutsideClick={handleClose} onClose={handleClose}>\n      {component}\n    </Modal>\n  );\n}\n","import { motion, AnimatePresence } from \"framer-motion\";\nimport React, { ReactNode } from \"react\";\nimport { SDKWrapper } from \"./SDKWrapper\";\n\ninterface ModalProps {\n  title: string;\n  children: ReactNode;\n  onClose: () => void;\n  onOutsideClick?: () => void;\n  overlayOpacity?: string;\n  topDistance?: string;\n  open?: boolean;\n}\n\nexport function Modal({\n  title,\n  children,\n  onClose,\n  onOutsideClick,\n  overlayOpacity = \"bg-black bg-opacity-100\",\n  topDistance = \"pt-[100px]\",\n  open = true,\n}: ModalProps) {\n  return (\n    <SDKWrapper>\n      <AnimatePresence>\n        {open && (\n          <motion.div\n            initial={{ opacity: 0 }}\n            animate={{ opacity: 1 }}\n            exit={{ opacity: 0 }}\n            transition={{ duration: 0.2 }}\n            className={`fixed inset-0 z-50 flex items-start justify-center ${topDistance} ${overlayOpacity} px-4 sm:px-0`}\n            onClick={onOutsideClick || onClose}\n            aria-modal=\"true\"\n            role=\"dialog\"\n          >\n            <motion.div\n              initial={{ scale: 0.95, opacity: 0 }}\n              animate={{ scale: 1, opacity: 1 }}\n              exit={{ scale: 0.95, opacity: 0 }}\n              transition={{ duration: 0.2 }}\n              className=\"relative max-h-[90vh] w-full max-w-lg p-0 flex flex-col\"\n              onClick={(e) => e.stopPropagation()}\n            >\n              <div className=\"flex items-center justify-between pb-[14px]\">\n                <h2 className=\"text-base sm:text-lg font-semibold text-[#E6E8ED]\">\n                  {title}\n                </h2>\n                <button\n                  onClick={onClose}\n                  aria-label=\"Close modal\"\n                  className=\"text-gray-400 hover:text-white text-xl sm:text-2xl px-2\"\n                >\n                  &times;\n                </button>\n              </div>\n              <div className=\"border border-[#292930] rounded-[9px] bg-[#0D0D10] shadow-lg flex flex-col max-h-[70vh] overflow-y-auto [&::-webkit-scrollbar]:w-1.5 sm:[&::-webkit-scrollbar]:w-2 [&::-webkit-scrollbar-track]:bg-[#292930] [&::-webkit-scrollbar-track]:border-0 [&::-webkit-scrollbar-thumb]:bg-[#808080] [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-thumb]:border-0\">\n                <div className=\"px-4 sm:px-6 py-4 sm:py-6 relative\">\n                  {children}\n                </div>\n              </div>\n            </motion.div>\n          </motion.div>\n        )}\n      </AnimatePresence>\n    </SDKWrapper>\n  );\n}\n","import React, { ReactNode } from \"react\";\n\ninterface SDKWrapperProps {\n  children: ReactNode;\n  className?: string;\n}\n\n/**\n * SDKWrapper component that wraps all SDK components with a root class\n * This ensures all Tailwind styles are scoped and don't affect the host application\n */\nexport function SDKWrapper({ children, className = \"\" }: SDKWrapperProps) {\n  return <div className={`swype-sdk-root ${className}`}>{children}</div>;\n}\n","import { create } from \"zustand\";\nimport { CardStatus, UserCard } from \"../api/types\";\nimport { useSDKConfigStore } from \"./sdkConfigStore\";\n\ninterface CardStatusState {\n  status: CardStatus | null;\n  userCard: UserCard | null;\n  isUserCardDelegated: boolean;\n  isLoading: boolean;\n  error: string | null;\n  // Internal methods for SDK use only\n  _setCardStatus: (status: CardStatus, userCard: UserCard | null) => void;\n  _setUserStatus: (status: CardStatus) => void;\n  _setLoading: (loading: boolean) => void;\n  _setError: (error: string | null) => void;\n  _reset: () => void;\n}\n\n// Helper function to check if card is delegated to the current EOA\nconst isCardDelegatedToCurrentEOA = (userCard: UserCard | null): boolean => {\n  if (!userCard) return false;\n\n  // Get current EOA from global config store\n  const { eoaAddress } = useSDKConfigStore.getState();\n  if (!eoaAddress) return false;\n\n  // Card is delegated to this EOA if holdingAddress matches the current EOA\n  return userCard.holdingAddress.toLowerCase() === eoaAddress.toLowerCase();\n};\n\nexport const useCardStatusStore = create<CardStatusState>((set) => ({\n  status: null,\n  userCard: null,\n  isLoading: false,\n  error: null,\n  isUserCardDelegated: false,\n\n  // Internal methods for SDK use only (prefixed with _)\n  _setCardStatus: (status, userCard) => {\n    const isCardDelegated = isCardDelegatedToCurrentEOA(userCard);\n    set({\n      status,\n      userCard,\n      isUserCardDelegated: isCardDelegated,\n    });\n  },\n\n  _setLoading: (loading) => set({ isLoading: loading }),\n  _setUserStatus: (status) => set({ status }),\n\n  _setError: (error) => set({ error }),\n\n  _reset: () =>\n    set({\n      status: null,\n      userCard: null,\n      isUserCardDelegated: false,\n      isLoading: false,\n      error: null,\n    }),\n}));\n","import { create } from \"zustand\";\nimport { dataFetcher } from \"../core/dataFetcher\";\n\ninterface SDKConfigState {\n  eoaAddress: string | null;\n  apiKey: string | null;\n  baseUrl: string | null;\n  apiPath: string | null;\n  isInitialized: boolean;\n  setConfig: (config: {\n    eoaAddress: string;\n    apiKey: string;\n    baseUrl?: string;\n    apiPath?: string;\n  }) => void;\n  reset: () => void;\n}\n\nexport const useSDKConfigStore = create<SDKConfigState>((set, get) => ({\n  eoaAddress: null,\n  apiKey: null,\n  baseUrl: null,\n  apiPath: null,\n  isInitialized: false,\n\n  setConfig: (config) => {\n    // Reset previous state\n    get().reset();\n\n    // Set new config\n    set({\n      eoaAddress: config.eoaAddress,\n      apiKey: config.apiKey,\n      baseUrl: config.baseUrl || \"https://dev.console.fi\",\n      apiPath: config.apiPath || \"/v1/vendor\",\n      isInitialized: true,\n    });\n\n    // Note: Data fetching will be triggered after authentication is complete\n  },\n\n  reset: () => {\n    set({\n      eoaAddress: null,\n      apiKey: null,\n      baseUrl: null,\n      apiPath: null,\n      isInitialized: false,\n    });\n\n    // Reset data stores\n    dataFetcher.reset();\n  },\n}));\n","import axios from \"axios\";\nimport {\n  CardStatusResponse,\n  SumSubTokenResponse,\n  CreditDelegationRequest,\n  CreditDelegationResponse,\n  LinkCardRequest,\n  UserCardsResponse,\n  CreditInformationResponse,\n  CreateCardResponse,\n  CardSecretResponse,\n} from \"./types\";\nimport { getApiClient } from \"./httpClient\";\nimport {\n  formatAvailableLimit,\n  mapEulerMetadataToSuppliedAssets,\n} from \"./utils\";\nimport {\n  getMockCardStatus,\n  getMockUserCards,\n  getMockAaveCreditInformation,\n  getMockEulerCreditInformation,\n  getMockSumSubToken,\n  getMockCreditDelegationTxData,\n} from \"./mockData\";\n\nexport const getCardStatus = async (\n  eoaAddress: string\n): Promise<CardStatusResponse> => {\n  // Return mock data\n  // return getMockCardStatus();\n\n  // Real API call (commented out - uncomment to use real API)\n  try {\n    const client = getApiClient();\n    const response = await client.get<CardStatusResponse>(\n      `/cards/user/${eoaAddress}/status`\n    );\n    return response.data;\n  } catch (error) {\n    if (axios.isAxiosError(error) && error.response?.status === 404) {\n      return { data: \"userNotExisting\" };\n    }\n    throw error;\n  }\n};\n\nexport const getUserCards = async (\n  eoaAddress: string\n): Promise<UserCardsResponse> => {\n  // Return mock data\n  // return getMockUserCards();\n\n  // Real API call (commented out - uncomment to use real API)\n  try {\n    const client = getApiClient();\n    const response = await client.get<UserCardsResponse>(\n      `/cards/user/${eoaAddress}`\n    );\n    return response.data;\n  } catch (err) {\n    console.error(\"[getUserCards]\", err);\n    return { data: null };\n  }\n};\n\nexport const getCreditInformation = async (\n  creditAddress: string,\n  creditType: \"aave-v3\" | \"euler\"\n): Promise<CreditInformationResponse> => {\n  // Return mock data based on credit type\n  // if (creditType === \"aave-v3\") {\n  //   return getMockAaveCreditInformation();\n  // } else {\n  //   return getMockEulerCreditInformation();\n  // }\n\n  // Real API call (commented out - uncomment to use real API)\n  try {\n    const client = getApiClient();\n    const response = await client.get<CreditInformationResponse>(\n      `/cards/credit/${creditAddress}/${creditType}`\n    );\n\n    // Transform availableLimit if it exists\n    if (\n      response.data?.data &&\n      typeof response.data.data.availableLimit === \"number\"\n    ) {\n      response.data.data.availableLimit = formatAvailableLimit(\n        response.data.data.availableLimit,\n        creditType\n      );\n      response.data.data.amountDelegated = formatAvailableLimit(\n        response.data.data.amountDelegated,\n        creditType\n      );\n    }\n\n    // If Euler, map vaults to suppliedAssets for compatibility (without mutating original)\n    if (creditType === \"euler\" && response.data?.data?.metadata) {\n      response.data.data.metadata = mapEulerMetadataToSuppliedAssets(\n        response.data.data.metadata\n      );\n    }\n\n    return response.data;\n  } catch (error) {\n    console.error(\"[getCreditInformation]\", error);\n    return { data: null };\n  }\n};\n\nexport const getSumSubAccessToken = async (\n  userId: string,\n  ipAddress?: string\n): Promise<SumSubTokenResponse[\"data\"] | undefined> => {\n  // Return mock data\n  // return getMockSumSubToken();\n\n  // Real API call (commented out - uncomment to use real API)\n  try {\n    const client = getApiClient();\n    const response = await client.post<SumSubTokenResponse>(\n      \"/cards/sumsub/token\",\n      { userId, ipAddress }\n    );\n    return response.data.data;\n  } catch (error) {\n    console.error(\"[error at getSumSubAccessToken]\", error);\n    return undefined;\n  }\n};\n\nexport const getCreditDelegationTxData = async (\n  requestData: CreditDelegationRequest\n): Promise<{ data: CreditDelegationResponse }> => {\n  // Return mock data\n  // return getMockCreditDelegationTxData();\n\n  // Real API call (commented out - uncomment to use real API)\n  const client = getApiClient();\n  const response = await client.post<{ data: CreditDelegationResponse }>(\n    \"/cards/credit/delegate\",\n    requestData\n  );\n  return response.data;\n};\n\nexport const linkCardToCreditAccount = async (\n  requestData: LinkCardRequest\n): Promise<any> => {\n  const client = getApiClient();\n  const response = await client.patch(\"/cards/\", requestData);\n  return response.data;\n};\n\nexport const createCard = async (\n  userEoa: string\n): Promise<CreateCardResponse> => {\n  const client = getApiClient();\n  const response = await client.post<CreateCardResponse>(\n    `/card/create/${userEoa}`\n  );\n  return response.data;\n};\n\nexport const freezeCard = async (\n  userEoa: string,\n  cardID: string,\n  freeze: boolean\n): Promise<{ success: boolean; message?: string }> => {\n  const client = getApiClient();\n  try {\n    const response = await client.patch(\n      `/cards/user/${userEoa}/status/${cardID}`,\n      {\n        cardID,\n        freeze,\n      }\n    );\n    // if 200 then return success\n    if (response.status === 200) {\n      return { success: true };\n    }\n    // if not 200, return failure with message\n    return {\n      success: false,\n      message: response.data?.message || \"Failed to freeze card\",\n    };\n  } catch (error: any) {\n    console.error(\"[freezeCard]\", error);\n    return {\n      success: false,\n      message: error?.message || \"Failed to freeze card\",\n    };\n  }\n};\n\nexport const updatePin = async (\n  userEoa: string,\n  cardID: string,\n  iv: string, // base64 encoded IV\n  data: string // base64 encoded encrypted pin\n): Promise<{ success: boolean; message?: string }> => {\n  const client = getApiClient();\n  try {\n    const response = await client.patch<{ success: boolean; message?: string }>(\n      `/cards/user/${userEoa}/secrets/${cardID}/pin`,\n      { iv, data }\n    );\n    return response.data;\n  } catch (error) {\n    console.error(\"[updatePin]\", error);\n    return { success: false, message: \"Failed to update PIN\" };\n  }\n};\n\n/**\n * Get the public key for card encryption\n * @returns Public key in PEM format\n */\nexport const getCardPublicKey = async (): Promise<{ data: string }> => {\n  const client = getApiClient();\n  const response = await client.get<{ data: string }>(\"/cards/pubkey\");\n  return response.data;\n};\n\n/**\n * Get encrypted card details for a user\n * @param eoaAddress Ethereum address of the user\n * @param cardID UUID of the card\n * @param sessionID Session identifier\n * @returns Encrypted card details\n */\nexport const getCardSecrets = async (\n  eoaAddress: string,\n  cardID: string,\n  sessionID: string\n): Promise<CardSecretResponse> => {\n  const client = getApiClient();\n  const response = await client.get<{\n    data: {\n      encryptedPan: {\n        iv: string;\n        data: string;\n      };\n      encryptedCvc: {\n        iv: string;\n        data: string;\n      };\n    };\n  }>(`/cards/user/${eoaAddress}/secrets/${cardID}`, {\n    headers: {\n      sessionID,\n    },\n  });\n  return response.data;\n};\n","import axios, { AxiosError, AxiosInstance } from \"axios\";\nimport { useSDKConfigStore } from \"../stores/sdkConfigStore\";\nimport { ensureValidAuth, getAuthState, clearAuth } from \"./auth\";\n\n// Get API client with auth headers\nexport function getApiClient(): AxiosInstance {\n  const { apiKey, baseUrl, apiPath, isInitialized } =\n    useSDKConfigStore.getState();\n\n  if (!isInitialized || !apiKey) {\n    throw new Error(\"SwypeSDK not initialized. Call initializeSwypeSDK first.\");\n  }\n\n  const authState = getAuthState();\n  if (!authState.signature || !authState.deadline) {\n    throw new Error(\n      \"SwypeSDK auth not ready. Authentication signature missing.\"\n    );\n  }\n\n  const fullBaseURL = `${baseUrl}${apiPath}`;\n\n  const client = axios.create({\n    baseURL: fullBaseURL,\n    headers: {\n      \"Content-Type\": \"application/json\",\n      \"x-api-key\": apiKey,\n      Authorization: `Bearer ${authState.signature}`,\n      \"X-Deadline\": authState.deadline.toString(),\n    },\n  });\n\n  // Add request interceptor to ensure valid auth before each request\n  client.interceptors.request.use(\n    async (config) => {\n      await ensureValidAuth();\n\n      // Update headers with fresh auth if regenerated\n      const freshAuthState = getAuthState();\n      if (freshAuthState.signature && freshAuthState.deadline) {\n        config.headers.set(\n          \"Authorization\",\n          `Bearer ${freshAuthState.signature}`\n        );\n        config.headers.set(\"X-Deadline\", freshAuthState.deadline.toString());\n      }\n\n      return config;\n    },\n    (error) => {\n      return Promise.reject(error);\n    }\n  );\n\n  // Add response interceptor for handling errors\n  client.interceptors.response.use(\n    (response) => response,\n    (error: AxiosError) => {\n      if (error.response) {\n        console.error(\"API Error Response:\", {\n          status: error.response.status,\n          data: error.response.data,\n        });\n\n        // If auth error, clear auth state to force regeneration\n        if (error.response.status === 401 || error.response.status === 403) {\n          clearAuth();\n        }\n      }\n      return Promise.reject(error);\n    }\n  );\n\n  return client;\n}\n","import { useSDKConfigStore } from \"../stores/sdkConfigStore\";\n\n// Auth state interface\ninterface AuthState {\n  signature: string | null;\n  deadline: number | null;\n}\n\n// Global auth state\nlet authState: AuthState = {\n  signature: null,\n  deadline: null,\n};\n\n// EIP712 Typed Data for login\nconst createLoginTypedData = (eoaAddress: string, timestamp: number) => ({\n  types: {\n    EIP712Domain: [\n      { name: \"name\", type: \"string\" },\n      { name: \"version\", type: \"string\" },\n    ],\n    LoginRequest: [\n      { name: \"eoa\", type: \"address\" },\n      { name: \"message\", type: \"string\" },\n      { name: \"timestamp\", type: \"uint256\" },\n      { name: \"action\", type: \"string\" },\n    ],\n  },\n  primaryType: \"LoginRequest\",\n  domain: {\n    name: \"BrahmaCards\",\n    version: \"1\",\n  },\n  message: {\n    eoa: eoaAddress,\n    message: \"I'm a BrahmaCards user\",\n    timestamp: timestamp,\n    action: \"login\",\n  },\n});\n\n// Generate auth signature\nconst generateAuthSignature = async (\n  eoaAddress: string,\n  signTypedData: (typedData: any) => Promise<string>\n): Promise<{ signature: string; deadline: number }> => {\n  // Set deadline to current time + 1 hour\n  const deadline = Math.floor(Date.now() / 1000) + 3600; // 1 hour in seconds\n\n  const typedData = createLoginTypedData(eoaAddress, deadline);\n  const signature = await signTypedData(typedData);\n\n  console.log({ typedData, deadline, signature, type: typeof signature });\n\n  return { signature, deadline };\n};\n\n// Export the generateAuthSignature function for external use\nexport const generateAuthSign = async (\n  eoaAddress: string,\n  signTypedData: (typedData: any) => Promise<string>\n): Promise<{ signature: string; deadline: number }> => {\n  return generateAuthSignature(eoaAddress, signTypedData);\n};\n\n// Initialize authentication with pre-generated signature\nexport async function initializeAuth(\n  eoaAddress: string,\n  authSignature: { signature: string; deadline: number }\n): Promise<void> {\n  try {\n    authState = {\n      signature: authSignature.signature,\n      deadline: authSignature.deadline,\n    };\n\n    console.log(\"SwypeSDK auth initialized\");\n  } catch (error) {\n    console.error(\"Failed to initialize SwypeSDK auth:\", error);\n    throw error;\n  }\n}\n\n// Check if auth is expired and throw error if needed (no auto-renewal)\nexport const ensureValidAuth = async (): Promise<void> => {\n  const { eoaAddress, isInitialized } = useSDKConfigStore.getState();\n\n  if (!isInitialized || !eoaAddress) {\n    throw new Error(\"SwypeSDK not initialized. Call initializeSwypeSDK first.\");\n  }\n\n  const currentTime = Math.floor(Date.now() / 1000);\n\n  // If no auth or auth is expired, throw error since we can't auto-renew\n  if (\n    !authState.signature ||\n    !authState.deadline ||\n    authState.deadline <= currentTime\n  ) {\n    throw new Error(\n      \"Authentication expired. Please re-initialize the SDK with a new signature.\"\n    );\n  }\n};\n\n// Get current auth state\nexport const getAuthState = (): AuthState => {\n  return { ...authState };\n};\n\n// Clear auth state (useful for logout or auth errors)\nexport const clearAuth = (): void => {\n  authState = {\n    signature: null,\n    deadline: null,\n  };\n};\n","// Format Units utility function (simplified version)\nexport const formatUnits = (value: bigint, decimals: number): string => {\n  const divisor = BigInt(10 ** decimals);\n  const quotient = value / divisor;\n  const remainder = value % divisor;\n\n  const formattedRemainder = remainder.toString().padStart(decimals, \"0\");\n  return `${quotient.toString()}.${formattedRemainder}`;\n};\n\n// Helper function for formatting credit limits\nexport const formatAvailableLimit = (\n  availableLimit: number,\n  creditType: string\n): number => {\n  const decimals = creditType === \"aave-v3\" ? 6 : 18;\n  const formatted = Number(formatUnits(BigInt(availableLimit), decimals));\n  return Number(formatted.toFixed(4));\n};\n\n// Mapper function to convert Euler metadata to include suppliedAssets\nexport function mapEulerMetadataToSuppliedAssets(metadata: any) {\n  if (!Array.isArray(metadata?.vaults)) return metadata;\n\n  const suppliedAssets = metadata.vaults.map((vault: any) => {\n    const formattedAsset = Number(formatUnits(BigInt(vault.assets || 0), 18));\n\n    console.log({ formattedAsset });\n    return {\n      UsageAsCollateralEnabledOnUser: true, // Assume true for Euler\n      amount: formattedAsset,\n      amountUSD: 0, // No USD value provided, set to 0 or calculate if possible\n      collateralAmountBase: String(formattedAsset),\n      collateralAmountBig: formattedAsset,\n      supplyRate: 0, // Not provided by Euler, set to 0 or fetch if available\n      underlyingAsset: vault.vault || \"\",\n    };\n  });\n\n  const suppliedValue = suppliedAssets.reduce(\n    (sum: number, asset: any) => sum + asset.amountUSD,\n    0\n  );\n\n  return {\n    ...metadata,\n    suppliedAssets,\n    suppliedValue,\n  };\n}\n","import { create } from \"zustand\";\nimport { CreditInformationResponse } from \"../api/types\";\n\ntype CreditType = \"card\" | \"aave\" | \"euler\";\n\ninterface CreditState {\n  creditInfo: Record<CreditType, CreditInformationResponse | null>;\n  isLoading: boolean;\n  error: string | null;\n  // Internal methods for SDK use only\n  _setCreditInfo: (type: CreditType, info: CreditInformationResponse) => void;\n  _setLoading: (loading: boolean) => void;\n  _setError: (error: string | null) => void;\n  _reset: () => void;\n}\n\nexport const useCreditStore = create<CreditState>((set) => ({\n  creditInfo: {\n    card: null,\n    aave: null,\n    euler: null,\n  },\n  isLoading: false,\n  error: null,\n\n  // Internal methods for SDK use only (prefixed with _)\n  _setCreditInfo: (type, info) =>\n    set((state) => ({\n      creditInfo: {\n        ...state.creditInfo,\n        [type]: info,\n      },\n    })),\n\n  _setLoading: (loading) => set({ isLoading: loading }),\n  _setError: (error) => set({ error }),\n\n  _reset: () =>\n    set({\n      creditInfo: {\n        card: null,\n        aave: null,\n        euler: null,\n      },\n      isLoading: false,\n      error: null,\n    }),\n}));\n","import { getCardStatus, getUserCards, getCreditInformation } from \"../api/api\";\nimport { useCardStatusStore } from \"../stores/cardStatusStore\";\nimport { useCreditStore } from \"../stores/creditStore\";\nimport { useSDKConfigStore } from \"../stores/sdkConfigStore\";\n\nclass DataFetcher {\n  private static instance: DataFetcher;\n  private hasFetched = false;\n\n  static getInstance(): DataFetcher {\n    if (!DataFetcher.instance) {\n      DataFetcher.instance = new DataFetcher();\n    }\n    return DataFetcher.instance;\n  }\n\n  async fetchAllData(): Promise<void> {\n    const { eoaAddress, isInitialized } = useSDKConfigStore.getState();\n\n    if (!isInitialized || !eoaAddress || this.hasFetched) {\n      return;\n    }\n\n    console.log(\"🚀 SDK: Starting data fetch for:\", eoaAddress);\n\n    // Get store references\n    const cardStore = useCardStatusStore.getState();\n    const creditStore = useCreditStore.getState();\n\n    // Set loading states\n    cardStore._setLoading(true);\n    creditStore._setLoading(true);\n\n    try {\n      // Fetch all data in parallel\n      const [\n        cardStatusResponse,\n        userCardsResponse,\n        aaveCreditResponse,\n        eulerCreditResponse,\n      ] = await Promise.all([\n        getCardStatus(eoaAddress),\n        getUserCards(eoaAddress),\n        getCreditInformation(eoaAddress, \"aave-v3\"),\n        getCreditInformation(eoaAddress, \"euler\"),\n      ]);\n\n      // Update card data\n      const userCard = userCardsResponse.data?.[0] || null;\n      cardStore._setCardStatus(cardStatusResponse.data, userCard);\n\n      // Update credit data\n      creditStore._setCreditInfo(\"aave\", aaveCreditResponse);\n      creditStore._setCreditInfo(\"euler\", eulerCreditResponse);\n\n      this.hasFetched = true;\n      console.log(\"✅ SDK: Successfully fetched all data for:\", eoaAddress);\n    } catch (error) {\n      console.error(\"❌ SDK: Error fetching data:\", error);\n      const errorMessage =\n        error instanceof Error ? error.message : \"Failed to fetch data\";\n\n      cardStore._setError(errorMessage);\n      creditStore._setError(errorMessage);\n    } finally {\n      cardStore._setLoading(false);\n      creditStore._setLoading(false);\n    }\n  }\n\n  // Public method to trigger data fetching after authentication\n  async fetchDataAfterAuth(): Promise<void> {\n    // Reset the fetch flag to allow fetching again\n    this.hasFetched = false;\n    await this.fetchAllData();\n  }\n\n  reset(): void {\n    this.hasFetched = false;\n    useCardStatusStore.getState()._reset();\n    useCreditStore.getState()._reset();\n  }\n}\n\nexport const dataFetcher = DataFetcher.getInstance();\n","import { create } from \"zustand\";\n\ninterface KycStoreState {\n  acceptedTerms: boolean;\n  acceptedRainTerms: boolean;\n  isKycModalOpen: boolean;\n  isSumsubProfileVerified: boolean;\n  setAcceptedTerms: (accepted: boolean) => void;\n  setAcceptedRainTerms: (accepted: boolean) => void;\n  setKycModalOpen: (open: boolean) => void;\n  setIsSumsubProfileVerified: (verified: boolean) => void;\n}\n\nexport const useKycStore = create<KycStoreState>((set) => ({\n  acceptedTerms: false,\n  acceptedRainTerms: false,\n  isKycModalOpen: false,\n  isSumsubProfileVerified: false,\n  setAcceptedTerms: (accepted) => set({ acceptedTerms: accepted }),\n  setAcceptedRainTerms: (accepted) => set({ acceptedRainTerms: accepted }),\n  setKycModalOpen: (open) => set({ isKycModalOpen: open }),\n  setIsSumsubProfileVerified: (verified) =>\n    set({ isSumsubProfileVerified: verified }),\n}));\n","import React, { useState } from \"react\";\nimport { useKycStore } from \"../../stores/useKycStore\";\nimport Checkbox from \"../../components/shared/Checkbox\";\nimport { InfoCircledIcon } from \"@radix-ui/react-icons\";\n\ninterface CheckboxProps {\n  checked: boolean;\n  onChange: (checked: boolean) => void;\n  label: React.ReactNode;\n  className?: string;\n}\n\nexport default function SumSubConsentView() {\n  const [checked1, setChecked1] = useState(false);\n  const { setAcceptedTerms } = useKycStore();\n\n  return (\n    <div className=\"flex flex-col gap-6 w-full pt-4\">\n      <p className=\"text-[#CBCED1] font-['Neue Montreal'] text-[18px] font-medium leading-[22.5px]\">\n        Provide consent to proceed\n      </p>\n      <div className=\"flex flex-col gap-1 w-full\">\n        <Checkbox\n          checked={checked1}\n          onChange={setChecked1}\n          label={\"I accept E-Sign consent\"}\n          className=\"rounded-t-md\"\n        />\n      </div>\n      <div className=\"flex gap-2\">\n        <span>\n          <InfoCircledIcon\n            color=\"#CBCED1\"\n            style={{ width: \"20px\", height: \"20px\" }}\n          />\n        </span>\n        <p className=\"text-[#CBCED1] font-['Neue Montreal'] text-[15.75px] font-medium leading-[22.5px]\">\n          BrahmaFi card is not affiliated with swype.fun , AAVE, Euler or other\n          Defi and issued subject to separate terms provided by Issuer.\n        </p>\n      </div>\n      <button\n        className={`flex h-[44px] justify-center items-center gap-1 self-stretch rounded-lg bg-white backdrop-blur-[6px] text-black font-medium text-[16px] transition ease-in-out ${\n          checked1\n            ? \"cursor-pointer opacity-100\"\n            : \"cursor-not-allowed opacity-50\"\n        }`}\n        disabled={!checked1}\n        onClick={() => setAcceptedTerms(true)}\n      >\n        Continue to Sumsub Verification\n      </button>\n      <div className=\"flex gap-2\">\n        <span>\n          <InfoCircledIcon\n            color=\"#CBCED1\"\n            style={{ width: \"20px\", height: \"20px\" }}\n          />\n        </span>\n\n        <p className=\"text-[#CBCED1] font-['Neue Montreal'] text-[15.75px] font-medium leading-[22.5px]\">\n          Brahma never stores your data we use Sumsub that completes the\n          verification process to ensure safety\n        </p>\n      </div>\n    </div>\n  );\n}\n","import React from \"react\";\n\ninterface CheckboxProps {\n  checked: boolean;\n  onChange: (checked: boolean) => void;\n  label: React.ReactNode;\n  className?: string;\n}\n\nexport default function Checkbox({\n  checked,\n  onChange,\n  label,\n  className,\n}: CheckboxProps) {\n  return (\n    <label\n      className={`flex items-center gap-2 p-[20px_16px] border-[1.125px] border-[#18181C] bg-[#18181C] align-self-stretch  ${\n        className || \"\"\n      }`}\n      style={{ borderRadius: 12 }}\n    >\n      <span>\n        <input\n          type=\"checkbox\"\n          checked={checked}\n          onChange={(e) => onChange(e.target.checked)}\n          className=\"peer appearance-none w-[15px] h-[15px] rounded-[3px] border border-[#CBCED1] bg-[#18181C] checked:bg-[#18181C] checked:border-[#CBCED1] flex items-center justify-center transition-colors duration-150 focus:outline-none relative cursor-pointer\"\n        />\n      </span>\n\n      {/* Custom checkmark */}\n      <span className=\"pointer-events-none absolute w-[15px] h-[15px] flex items-center justify-center cursor-pointer\">\n        {checked && (\n          <svg\n            width=\"15\"\n            height=\"15\"\n            viewBox=\"0 0 27 27\"\n            fill=\"none\"\n            xmlns=\"http://www.w3.org/2000/svg\"\n          >\n            <rect\n              x=\"1.5\"\n              y=\"1.5\"\n              width=\"24\"\n              height=\"24\"\n              rx=\"6\"\n              fill=\"#18181C\"\n              stroke=\"#CBCED1\"\n              strokeWidth=\"3\"\n            />\n            <path\n              d=\"M7 14L12 19L20 9\"\n              stroke=\"#CBCED1\"\n              strokeWidth=\"3\"\n              strokeLinecap=\"round\"\n              strokeLinejoin=\"round\"\n            />\n          </svg>\n        )}\n      </span>\n      <span className=\"text-[#CBCED1] font-['Neue Montreal'] text-[15.75px] font-medium leading-[22.5px] ml-2 select-none\">\n        {label}\n      </span>\n    </label>\n  );\n}\n","export default function KycPendingViaRain() {\n  return (\n    <div className=\"flex flex-col gap-[10px]\" style={{ gap: \"10px\" }}>\n      <div\n        className=\"rounded-[4px] border border-[#292930] bg-black flex flex-col items-center justify-center gap-[15px] h-[372px]\"\n        style={{ height: \"372px\", gap: \"15px\" }}\n      >\n        <PendingSvg />\n        <p className=\"text-[#E6E8ED] text-center font-['Neue Montreal'] text-[23.391px] font-medium leading-[120%]\">\n          Processing your\n          <br />\n          KYC Verificationn\n        </p>\n      </div>\n      <p className=\"text-[#E6E8ED] text-center font-['Neue Montreal'] text-[16px] font-medium leading-[120%]\">\n        Your KYC verification is pending and may take up to 2 days. Please check\n        back later for updates.\n      </p>\n    </div>\n  );\n}\n\nconst PendingSvg = () => {\n  return (\n    <svg\n      width=\"88\"\n      height=\"89\"\n      viewBox=\"0 0 88 89\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M5.49609 3.19922H43.7531L54.4651 12.993V72.98H5.49609V3.19922Z\"\n        fill=\"#FFAD0D\"\n      />\n      <path\n        d=\"M41.2347 8.17186H7.9063V67.5467H52.3441V19.3047H41.2347V8.17186ZM7.9063 0.75H44.9378L59.7504 15.5937V67.5467C59.7504 69.5151 58.9701 71.4029 57.5812 72.7948C56.1922 74.1867 54.3084 74.9686 52.3441 74.9686H7.9063C5.94203 74.9686 4.05821 74.1867 2.66926 72.7948C1.2803 71.4029 0.5 69.5151 0.5 67.5467V8.17186C0.5 6.20346 1.2803 4.31568 2.66926 2.92381C4.05821 1.53194 5.94203 0.75 7.9063 0.75ZM15.3126 34.1484H44.9378V41.5702H15.3126V34.1484ZM15.3126 48.9921H44.9378V56.414H15.3126V48.9921Z\"\n        fill=\"#0D0D10\"\n      />\n      <path\n        d=\"M54.4465 61.1122C44.3921 61.1122 24.3926 66.6428 24.3926 77.5397V85.7535H84.5005V77.5397C84.5005 66.6428 64.5009 61.1122 54.4465 61.1122ZM61.0584 54.6894C65.2113 52.3348 68.1074 47.8994 68.1074 42.7521C68.1074 35.1954 61.9873 29.0625 54.4465 29.0625C46.9057 29.0625 40.7856 35.1954 40.7856 42.7521C40.7856 47.8994 43.6817 52.3348 47.8347 54.6894C49.8018 55.7846 52.0422 56.4417 54.4465 56.4417C56.8508 56.4417 59.0912 55.7846 61.0584 54.6894Z\"\n        fill=\"white\"\n        stroke=\"#0D0D10\"\n        strokeWidth=\"5.25554\"\n      />\n    </svg>\n  );\n};\n","import React, { useState } from \"react\";\nimport { useKycStore } from \"../../stores/useKycStore\";\nimport Checkbox from \"../../components/shared/Checkbox\";\n\nexport default function PreRainTerms() {\n  const [checked1, setChecked1] = useState(false);\n  const [checked2, setChecked2] = useState(false);\n  const [checked3, setChecked3] = useState(false);\n  const { setAcceptedRainTerms } = useKycStore();\n\n  const allChecked = checked1 && checked2 && checked3;\n\n  return (\n    <div className=\"flex flex-col gap-6 w-full pt-4\">\n      <div className=\"text-[#CBCED1] font-['Neue Montreal'] text-[18px] font-medium leading-[22.5px]\">\n        By continuing you accept our terms\n      </div>\n      <div className=\"flex flex-col gap-1 w-full\">\n        <Checkbox\n          checked={checked1}\n          onChange={setChecked1}\n          label={\n            <>\n              I accept the{\" \"}\n              <a href=\"#\" className=\"underline\">\n                BrahmaFi Card Terms Privacy Policy\n              </a>\n            </>\n          }\n          className=\"rounded-t-md\"\n        />\n        <Checkbox\n          checked={checked2}\n          onChange={setChecked2}\n          label=\"I certify that the information I have provided is accurate and that I will abide by all the rules and requirements related to my BrahmaFi Card\"\n        />\n        <Checkbox\n          checked={checked3}\n          onChange={setChecked3}\n          label={\n            <>\n              I confirm I&apos;m not a U.S. resident, have reviewed the{\" \"}\n              <a href=\"#\" className=\"underline\">\n                supported countries list\n              </a>\n              , comply with local laws, and understand the BrahmaFi card is not\n              an unauthorised solicitation.\n            </>\n          }\n          className=\"rounded-b-md\"\n        />\n      </div>\n      <button\n        className={`flex h-[44px] justify-center items-center gap-1 self-stretch rounded-lg bg-white backdrop-blur-[6px] text-black font-medium ${\n          !allChecked ? \"opacity-50 cursor-not-allowed\" : \"\"\n        }`}\n        disabled={!allChecked}\n        onClick={() => setAcceptedRainTerms(true)}\n      >\n        Continue\n      </button>\n    </div>\n  );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport SumsubWebSdk from \"@sumsub/websdk-react\";\nimport { motion } from \"framer-motion\";\nimport { useSumSub, SumsubMessage } from \"../hooks/use-sumsub\";\nimport { useCardStatusStore } from \"../stores/cardStatusStore\";\nimport { useKycStore } from \"../stores/useKycStore\";\nimport { SDKWrapper } from \"./SDKWrapper\";\n\ninterface SumSubWidgetProps {\n  eoaAddress?: string;\n  onApplicantIdChange?: (id: string) => void;\n  onVerificationComplete?: () => void;\n}\n\nconst LoadingBar: React.FC<{ className?: string }> = ({ className = \"\" }) => {\n  return (\n    <div\n      className={`h-4 overflow-hidden bg-white relative w-full ${className}`}\n    >\n      <motion.div\n        className=\"bg-red-500 h-full absolute top-0 left-0\"\n        initial={{ width: \"0%\" }}\n        animate={{ width: \"100%\" }}\n        transition={{\n          duration: 2,\n          ease: \"linear\",\n          repeat: Infinity,\n          repeatType: \"loop\",\n        }}\n      />\n    </div>\n  );\n};\ninterface RetroButtonProps\n  extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n  variant?: \"default\" | \"primary\";\n}\n\nconst RetroButton: React.FC<RetroButtonProps> = ({\n  children,\n  variant = \"default\",\n  className = \"\",\n  ...props\n}) => {\n  const variantClasses = {\n    default: \"bg-[#E6BE8A] text-[#3B2F2F] border-[#8B4513] hover:bg-[#E6BE8A]\",\n    primary: \"bg-[#8B4513] text-[#FFD700] border-[#D4AF37] hover:bg-[#8B4513]\",\n  };\n\n  return (\n    <button\n      className={`\n        font-['Times_New_Roman',_Times,_serif] \n        px-4 py-1.5 text-base\n        ${variantClasses[variant]}\n        ${className}\n        border-2\n        active:translate-y-[1px]\n        flex items-center justify-center gap-2\n        transition-none\n        disabled:opacity-50 disabled:cursor-not-allowed\n      `}\n      {...props}\n    >\n      <span>{children}</span>\n    </button>\n  );\n};\n\nexport function SumSubWidget({\n  eoaAddress,\n  onApplicantIdChange,\n  onVerificationComplete,\n}: SumSubWidgetProps) {\n  const {\n    accessToken,\n    isLoading,\n    error,\n    handleMessage,\n    handleError,\n    handleTokenExpiration,\n    retry,\n  } = useSumSub({\n    eoaAddress,\n    onApplicantIdChange,\n    onVerificationComplete,\n  });\n\n  const { _setUserStatus } = useCardStatusStore();\n  const { setIsSumsubProfileVerified, isSumsubProfileVerified } = useKycStore();\n\n  if (isLoading) {\n    return (\n      <SDKWrapper>\n        <div className=\"text-center p-6 min-h-[30vh] flex flex-col justify-center\">\n          <p className=\"font-['MS_Sans_Serif',_Arial,_sans-serif] mb-4 text-white\">\n            Loading SumSub verification module...\n          </p>\n          <LoadingBar className=\"w-[50rem] mx-auto\" />\n        </div>\n      </SDKWrapper>\n    );\n  }\n\n  if (error || !accessToken) {\n    return (\n      <SDKWrapper>\n        <div className=\"text-center p-6 min-h-[10vh] flex flex-col justify-center\">\n          <p className=\"font-['MS_Sans_Serif',_Arial,_sans-serif] mb-4 text-red-600\">\n            {error || \"Failed to load verification module. Please try again.\"}\n          </p>\n          <RetroButton variant=\"primary\" onClick={retry}>\n            Try Again\n          </RetroButton>\n        </div>\n      </SDKWrapper>\n    );\n  }\n\n  const sdkKey = `sumsub-sdk-${accessToken}`;\n\n  return (\n    <SDKWrapper>\n      <div className=\"relative rounded-md w-full min-h-[30vh]\">\n        <div className=\"relative w-full\" style={{ minHeight: \"400px\" }}>\n          <SumsubWebSdk\n            key={sdkKey}\n            accessToken={accessToken}\n            expirationHandler={handleTokenExpiration}\n            config={{\n              lang: \"en\",\n              customizationName: \"swype\",\n              theme: \"dark\",\n            }}\n            options={{\n              addViewportTag: false,\n              adaptIframeHeight: true,\n            }}\n            onMessage={(message: SumsubMessage, payload: any) => {\n              console.log(\"Sumsub onMessage:\", message.type, payload);\n              if (payload && payload.reviewStatus === \"completed\") {\n                _setUserStatus(\"initiated\");\n                setIsSumsubProfileVerified(true);\n              }\n              handleMessage(message);\n            }}\n            onError={handleError}\n          />\n        </div>\n\n        <div className=\"w-full mt-4\">\n          <button\n            disabled={!isSumsubProfileVerified}\n            className={`flex h-[44px] w-full justify-center items-center gap-1 self-stretch rounded-lg bg-white backdrop-blur-[6px] text-black font-medium disabled:opacity-50 disabled:cursor-not-allowed disabled:bg-gray-100`}\n            onClick={() => _setUserStatus(\"pending\")}\n          >\n            Continue\n          </button>\n        </div>\n      </div>\n    </SDKWrapper>\n  );\n}\n","import { useState, useEffect, useCallback } from \"react\";\nimport { getSumSubAccessToken } from \"../api/api\";\nimport { getUserIpAddress } from \"../utils/getUserIpAddress\";\n\n// Define types for Sumsub WebSDK messages\nexport interface SumsubMessage {\n  type: string;\n  payload?: {\n    applicantId?: string;\n    reviewStatus?: string;\n    [key: string]: unknown;\n  };\n}\n\ninterface UseSumSubOptions {\n  eoaAddress?: string;\n  onApplicantIdChange?: (id: string) => void;\n  onVerificationComplete?: () => void;\n}\n\nexport const useSumSub = ({\n  eoaAddress,\n  onApplicantIdChange,\n  onVerificationComplete,\n}: UseSumSubOptions) => {\n  const [accessToken, setAccessToken] = useState<string | null>(null);\n  const [isLoading, setIsLoading] = useState(true);\n  const [error, setError] = useState<string | null>(null);\n  const [tokenRefreshCount, setTokenRefreshCount] = useState(0);\n  const [applicantId, setApplicantId] = useState<string | null>(null);\n\n  // Function to get a new access token from our backend server\n  const getAccessToken = useCallback(async () => {\n    console.log(\"Attempting to get SumSub access token...\");\n    setIsLoading(true);\n    setError(null);\n    try {\n      if (!eoaAddress) throw new Error(\"EOA address not provided\");\n\n      // Get user's IP address\n      const ipAddress = await getUserIpAddress();\n\n      const tokenData = await getSumSubAccessToken(eoaAddress, ipAddress);\n\n      if (!tokenData?.token) {\n        throw new Error(\"No token received from backend\");\n      }\n\n      setAccessToken(tokenData.token);\n      setTokenRefreshCount(0);\n      console.log(\"SumSub access token obtained successfully.\");\n    } catch (err) {\n      console.error(\"Error getting access token:\", err);\n      setError(\n        err instanceof Error\n          ? err.message\n          : \"Failed to get access token. Please try again.\"\n      );\n    } finally {\n      setIsLoading(false);\n    }\n  }, [eoaAddress]);\n\n  useEffect(() => {\n    if (eoaAddress) {\n      getAccessToken();\n    }\n  }, [getAccessToken, eoaAddress]);\n\n  // Handle WebSDK messages\n  const handleMessage = useCallback(\n    (message: SumsubMessage) => {\n      console.log(\"Sumsub Message Received:\", message.type, message.payload);\n\n      // Extract applicantId if available\n      if (\n        message.payload?.applicantId &&\n        typeof message.payload.applicantId === \"string\"\n      ) {\n        const newApplicantId = message.payload.applicantId;\n        if (newApplicantId !== applicantId) {\n          setApplicantId(newApplicantId);\n          onApplicantIdChange?.(newApplicantId);\n          console.log(\"Applicant ID updated:\", newApplicantId);\n        }\n      }\n\n      // Check for verification completion\n      if (\n        message.type === \"idCheck.applicantReviewed\" ||\n        message.payload?.reviewStatus === \"completed\"\n      ) {\n        console.log(\"Verification process completed.\");\n        onVerificationComplete?.();\n      }\n    },\n    [applicantId, onApplicantIdChange, onVerificationComplete]\n  );\n\n  // Handle WebSDK errors\n  const handleError = useCallback((sdkError: Error) => {\n    console.error(\"Sumsub WebSDK error:\", sdkError);\n    setError(`Sumsub SDK Error: ${sdkError.message}. Please try again.`);\n  }, []);\n\n  // Handle token expiration\n  const handleTokenExpiration = useCallback(async () => {\n    console.warn(\"Sumsub token expired, attempting refresh...\");\n\n    if (tokenRefreshCount >= 2) {\n      console.error(\"Max token refresh attempts reached.\");\n      setError(\"Failed to refresh session. Please try again later.\");\n      setAccessToken(null);\n      return;\n    }\n\n    setTokenRefreshCount((prev) => prev + 1);\n    setTimeout(async () => {\n      await getAccessToken();\n    }, 2000);\n  }, [tokenRefreshCount, getAccessToken]);\n\n  const retry = useCallback(() => {\n    setTokenRefreshCount(0);\n    getAccessToken();\n  }, [getAccessToken]);\n\n  return {\n    accessToken,\n    isLoading,\n    error,\n    applicantId,\n    handleMessage,\n    handleError,\n    handleTokenExpiration,\n    retry,\n  };\n};\n","// Function to get the user's IP address\nexport const getUserIpAddress = async (): Promise<string> => {\n  try {\n    const response = await fetch(\"https://api.ipify.org?format=json\");\n    const data = await response.json();\n    return data.ip;\n  } catch (err) {\n    console.error(\"[error at getUserIpAddress]\", err);\n    return \"\"; // Return empty string if IP address cannot be fetched\n  }\n};\n","import { useSDKConfigStore } from \"../stores/sdkConfigStore\";\nimport { useCardStatusStore } from \"../stores/cardStatusStore\";\nimport {\n  getCreditDelegationTxData,\n  linkCardToCreditAccount,\n  createCard,\n  getUserCards,\n} from \"../api/api\";\nimport { dataFetcher } from \"./dataFetcher\";\n\nexport interface DelegateCardParams {\n  creditType: \"aave-v3\" | \"euler\";\n  creditLimit: number;\n  sendTransactionAsync: (params: {\n    to: string;\n    value: bigint;\n    data: string;\n  }) => Promise<string>; // Returns transaction hash\n  signTypedDataAsync: (params: {\n    domain: { chainId: number };\n    types: Record<string, Array<{ name: string; type: string }>>;\n    primaryType: string;\n    message: Record<string, any>;\n  }) => Promise<string>; // Returns signature\n}\n\n/**\n * Complete card delegation process\n * Handles delegation transaction, signing, and linking in one flow\n */\nexport async function delegateCard(params: DelegateCardParams): Promise<void> {\n  const { eoaAddress } = useSDKConfigStore.getState();\n\n  if (!eoaAddress) {\n    throw new Error(\"EOA address not found. Please initialize the SDK first.\");\n  }\n\n  if (params.creditLimit <= 0) {\n    throw new Error(\"Credit limit must be greater than 0.\");\n  }\n\n  try {\n    // Step 1: Get credit delegation transaction data\n    const delegationResponse = await getCreditDelegationTxData({\n      from: eoaAddress,\n      creditLimit: params.creditLimit,\n      creditType: params.creditType,\n    });\n\n    console.log({ delegationResponse });\n    const delegation = delegationResponse.data;\n    console.log({ delegation });\n\n    if (!delegation.to || !delegation.callData) {\n      throw new Error(\n        \"Invalid transaction data received from delegation service\"\n      );\n    }\n\n    // Step 2: Execute transaction\n    const transactionHash = await params.sendTransactionAsync({\n      to: delegation.to,\n      value: BigInt(delegation.value || 0),\n      data: delegation.callData,\n    });\n    console.log({ transactionHash });\n\n    // Step 2.5: Create card after transaction is executed\n    const createCardResponse = await createCard(eoaAddress);\n\n    console.log({ createCardResponse });\n\n    const createdCard = createCardResponse.data;\n\n    if (!createdCard.id) {\n      throw new Error(\"Failed to create card - invalid card ID received\");\n    }\n\n    // Step 3: Generate signature using created card details\n    const signature = await params.signTypedDataAsync({\n      domain: {\n        chainId: 8453,\n      },\n      types: {\n        DelegationParams: [\n          { name: \"cardID\", type: \"string\" },\n          { name: \"creditProvider\", type: \"address\" },\n          { name: \"creditType\", type: \"string\" },\n        ],\n      },\n      primaryType: \"DelegationParams\",\n      message: {\n        cardID: createdCard.id,\n        creditProvider: eoaAddress,\n        creditType: params.creditType,\n      },\n    });\n\n    console.log({ signature });\n\n    // Step 4: Link card to credit account using created card details\n    await linkCardToCreditAccount({\n      cardID: createdCard.id,\n      creditProviderAddress: eoaAddress,\n      chainID: 8453, // Base chain ID\n      signature,\n      creditType: params.creditType,\n    });\n\n    // Step 5: Verify delegation by checking holding address\n    const userCardsResponse = await getUserCards(eoaAddress);\n\n    console.log({ userCardsResponse });\n\n    const updatedCard = userCardsResponse.data?.find(\n      (card) => card.cardID === createdCard.id\n    );\n\n    if (!updatedCard) {\n      throw new Error(\n        \"Card not found after delegation - delegation may have failed\"\n      );\n    }\n\n    if (updatedCard.holdingAddress.toLowerCase() !== eoaAddress.toLowerCase()) {\n      throw new Error(\n        \"Delegation failed - holding address does not match EOA address\"\n      );\n    }\n\n    // Step 6: Refetch all data to update the store with latest status\n    await dataFetcher.fetchDataAfterAuth();\n  } catch (err) {\n    const errorMessage =\n      err instanceof Error ? err.message : \"Failed to delegate card\";\n    throw new Error(errorMessage);\n  }\n}\n","import { initializeAuth } from \"./auth\";\nimport { useSDKConfigStore } from \"../stores/sdkConfigStore\";\nimport { dataFetcher } from \"../core/dataFetcher\";\nimport { SwypeSDKConfig } from \"./types\";\n\n// Initialize SDK with configuration and pre-generated auth signature\nexport async function initializeSwypeSDK(\n  config: SwypeSDKConfig\n): Promise<void> {\n  // Store config in global store\n  const { setConfig } = useSDKConfigStore.getState();\n  setConfig({\n    eoaAddress: config.eoaAddress,\n    apiKey: config.apiKey,\n    baseUrl: config.baseUrl,\n    apiPath: config.apiPath,\n  });\n\n  try {\n    // Initialize authentication with pre-generated signature\n    await initializeAuth(config.eoaAddress, {\n      signature: config.signature,\n      deadline: config.deadline,\n    });\n\n    console.log(\"SwypeSDK initialized successfully\");\n\n    // Now that authentication is complete, fetch all data\n    await dataFetcher.fetchDataAfterAuth();\n  } catch (error) {\n    console.error(\"Failed to initialize SwypeSDK:\", error);\n    throw error;\n  }\n}\n","import { useCardStatusStore } from \"../stores/cardStatusStore\";\nimport { CardStatus, UserCard } from \"../api/types\";\n\ninterface UseCardDataReturn {\n  status: CardStatus | null;\n  userCard: UserCard | null;\n  isUserCardDelegated: boolean;\n  isLoading: boolean;\n  error: string | null;\n}\n\nexport const useCardData = (): UseCardDataReturn => {\n  const { status, userCard, isUserCardDelegated, isLoading, error } =\n    useCardStatusStore();\n\n  return {\n    status,\n    userCard,\n    isUserCardDelegated,\n    isLoading,\n    error,\n  };\n};\n","import { useCreditStore } from \"../stores/creditStore\";\nimport { CreditInformationResponse } from \"../api/types\";\n\ntype CreditType = \"card\" | \"aave\" | \"euler\";\n\ninterface UseCreditDataReturn {\n  creditInfo: Record<CreditType, CreditInformationResponse | null>;\n  isLoading: boolean;\n  error: string | null;\n}\n\nexport const useCreditData = (): UseCreditDataReturn => {\n  const { creditInfo, isLoading, error } = useCreditStore();\n\n  return {\n    creditInfo,\n    isLoading,\n    error,\n  };\n};\n"],"mappings":"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","names":["useEffect","jsx","create","create","axios","authState","axios","create","create","create","jsx","jsxs","jsx","jsxs","jsx","jsxs","useState","jsx","jsxs","useState","motion","useState","useState","jsx","jsxs","motion","Fragment","jsx","useEffect"]}