@swype-org/react-sdk 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1357 -491
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +77 -5
- package/dist/index.d.ts +77 -5
- package/dist/index.js +1359 -494
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/theme.ts","../src/context.tsx","../src/api.ts","../src/hooks.ts","../src/components/Spinner.tsx","../src/components/ProviderCard.tsx","../src/components/AccountWalletSelector.tsx","../src/SwypePayment.tsx"],"names":["useRef","hexChainId","jsx","useState","jsxs","usePrivy","useEffect","useCallback"],"mappings":"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","file":"index.js","sourcesContent":["// ── Swype React SDK Theme Tokens ───────────────────────────────────────\nimport type { ThemeMode } from './types';\n\nexport interface ThemeTokens {\n // Surfaces\n bg: string;\n bgCard: string;\n bgInput: string;\n bgHover: string;\n bgOverlay: string;\n\n // Text\n text: string;\n textSecondary: string;\n textMuted: string;\n textInverse: string;\n\n // Borders\n border: string;\n borderFocus: string;\n\n // Accent\n accent: string;\n accentHover: string;\n accentText: string;\n\n // Semantic\n success: string;\n successBg: string;\n error: string;\n errorBg: string;\n\n // Shadows\n shadow: string;\n shadowLg: string;\n\n // Radius\n radius: string;\n radiusLg: string;\n}\n\nexport const darkTheme: ThemeTokens = {\n bg: '#0a0a0a',\n bgCard: '#141414',\n bgInput: '#1e1e1e',\n bgHover: '#252525',\n bgOverlay: 'rgba(0, 0, 0, 0.6)',\n\n text: '#f5f5f5',\n textSecondary: '#a1a1aa',\n textMuted: '#71717a',\n textInverse: '#09090b',\n\n border: '#27272a',\n borderFocus: '#3b82f6',\n\n accent: '#3b82f6',\n accentHover: '#2563eb',\n accentText: '#ffffff',\n\n success: '#22c55e',\n successBg: '#052e16',\n error: '#ef4444',\n errorBg: '#450a0a',\n\n shadow: '0 1px 3px rgba(0,0,0,0.4)',\n shadowLg: '0 8px 32px rgba(0,0,0,0.5)',\n\n radius: '10px',\n radiusLg: '16px',\n};\n\nexport const lightTheme: ThemeTokens = {\n bg: '#f8fafc',\n bgCard: '#ffffff',\n bgInput: '#f1f5f9',\n bgHover: '#e2e8f0',\n bgOverlay: 'rgba(0, 0, 0, 0.3)',\n\n text: '#0f172a',\n textSecondary: '#475569',\n textMuted: '#94a3b8',\n textInverse: '#ffffff',\n\n border: '#e2e8f0',\n borderFocus: '#3b82f6',\n\n accent: '#3b82f6',\n accentHover: '#2563eb',\n accentText: '#ffffff',\n\n success: '#16a34a',\n successBg: '#f0fdf4',\n error: '#dc2626',\n errorBg: '#fef2f2',\n\n shadow: '0 1px 3px rgba(0,0,0,0.08)',\n shadowLg: '0 8px 32px rgba(0,0,0,0.12)',\n\n radius: '10px',\n radiusLg: '16px',\n};\n\nexport function getTheme(mode: ThemeMode): ThemeTokens {\n return mode === 'dark' ? darkTheme : lightTheme;\n}\n","// ── Swype React SDK Context & Provider ─────────────────────────────────\nimport { createContext, useContext, useMemo, useRef } from 'react';\nimport { PrivyProvider } from '@privy-io/react-auth';\nimport { WagmiProvider, createConfig, http } from 'wagmi';\nimport { mainnet, arbitrum, base } from 'wagmi/chains';\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport type { ThemeMode } from './types';\nimport { getTheme, type ThemeTokens } from './theme';\n\n// ── Swype-owned Privy credentials ─────────────────────────────────────\n// These are internal to the SDK. Integrators never need to know about them.\n\n/** Swype's Privy App ID — all SDK users authenticate against this app. */\nconst SWYPE_PRIVY_APP_ID = 'cmlil87uv004n0ck0blwumwek';\n\n/**\n * Session isolation: Because the SDK uses Swype's own `appId` (distinct\n * from any integrator's `appId`), Privy automatically scopes storage\n * per app. If additional scoping within the same `appId` is ever needed,\n * create an App Client in the Privy dashboard and set `clientId` here.\n */\n\n// ── Default wagmi config ──────────────────────────────────────────────\n// Created once at module level so it's shared across all SwypeProvider\n// instances (there should only ever be one, but this is safe either way).\n\nconst wagmiConfig = createConfig({\n chains: [mainnet, arbitrum, base],\n transports: {\n [mainnet.id]: http(),\n [arbitrum.id]: http(),\n [base.id]: http(),\n },\n});\n\n// ── Swype SDK context ─────────────────────────────────────────────────\n\nexport interface SwypeConfig {\n apiBaseUrl: string;\n theme: ThemeMode;\n tokens: ThemeTokens;\n}\n\nconst SwypeContext = createContext<SwypeConfig | null>(null);\n\nexport interface SwypeProviderProps {\n /** Base URL for the Swype API (e.g. \"http://localhost:3000\") */\n apiBaseUrl: string;\n /** Light or dark mode */\n theme?: ThemeMode;\n children: React.ReactNode;\n}\n\n/**\n * Provides Swype SDK configuration and all required infrastructure\n * (Privy auth, wagmi, React Query) to child components.\n *\n * Must wrap any `<SwypePayment>` usage. The integrator does **not** need\n * to set up Privy, wagmi, or React Query — this provider handles it all.\n *\n * @example\n * ```tsx\n * <SwypeProvider apiBaseUrl=\"https://api.swype.com\">\n * <SwypePayment destination={dest} onComplete={handler} />\n * </SwypeProvider>\n * ```\n */\nexport function SwypeProvider({\n apiBaseUrl,\n theme = 'dark',\n children,\n}: SwypeProviderProps) {\n // Stable QueryClient across re-renders (created once per provider mount)\n const queryClientRef = useRef<QueryClient | null>(null);\n if (!queryClientRef.current) {\n queryClientRef.current = new QueryClient();\n }\n\n const value = useMemo<SwypeConfig>(\n () => ({\n apiBaseUrl,\n theme,\n tokens: getTheme(theme),\n }),\n [apiBaseUrl, theme],\n );\n\n return (\n <QueryClientProvider client={queryClientRef.current}>\n <WagmiProvider config={wagmiConfig}>\n <PrivyProvider\n appId={SWYPE_PRIVY_APP_ID}\n config={{\n appearance: {\n theme,\n },\n }}\n >\n <SwypeContext.Provider value={value}>\n {children}\n </SwypeContext.Provider>\n </PrivyProvider>\n </WagmiProvider>\n </QueryClientProvider>\n );\n}\n\n/** Access the Swype SDK configuration. Throws if used outside SwypeProvider. */\nexport function useSwypeConfig(): SwypeConfig {\n const ctx = useContext(SwypeContext);\n if (!ctx) {\n throw new Error('useSwypeConfig must be used within a <SwypeProvider>');\n }\n return ctx;\n}\n","// ── Swype React SDK API Client ─────────────────────────────────────────\nimport type {\n Provider,\n Chain,\n Account,\n Transfer,\n AuthorizationSessionDetail,\n ErrorResponse,\n ListResponse,\n SourceType,\n Destination,\n} from './types';\n\n/** Throw a descriptive error from an API response */\nasync function throwApiError(res: Response): Promise<never> {\n const body = (await res.json().catch(() => null)) as\n | (ErrorResponse & { error?: ErrorResponse })\n | null;\n const detail = body?.error ?? body;\n const msg = detail?.message ?? res.statusText;\n const code = detail?.code ?? String(res.status);\n throw new Error(`${res.status} — ${code}: ${msg}`);\n}\n\n// ── Providers ──────────────────────────────────────────────────────────\n\nexport async function fetchProviders(\n apiBaseUrl: string,\n token: string,\n): Promise<Provider[]> {\n const res = await fetch(`${apiBaseUrl}/v1/providers`, {\n headers: { Authorization: `Bearer ${token}` },\n });\n if (!res.ok) await throwApiError(res);\n const data = (await res.json()) as ListResponse<Provider>;\n return data.items;\n}\n\n// ── Chains ─────────────────────────────────────────────────────────────\n\nexport async function fetchChains(\n apiBaseUrl: string,\n token: string,\n): Promise<Chain[]> {\n const res = await fetch(`${apiBaseUrl}/v1/chains`, {\n headers: { Authorization: `Bearer ${token}` },\n });\n if (!res.ok) await throwApiError(res);\n const data = (await res.json()) as ListResponse<Chain>;\n return data.items;\n}\n\n// ── Accounts ───────────────────────────────────────────────────────────\n\nexport async function fetchAccounts(\n apiBaseUrl: string,\n token: string,\n): Promise<Account[]> {\n const res = await fetch(`${apiBaseUrl}/v1/accounts`, {\n headers: { Authorization: `Bearer ${token}` },\n });\n if (!res.ok) await throwApiError(res);\n const data = (await res.json()) as ListResponse<Account>;\n return data.items;\n}\n\n// ── Transfers ──────────────────────────────────────────────────────────\n\nexport interface CreateTransferParams {\n sourceType: SourceType;\n sourceId: string;\n destination: Destination;\n amount: number;\n currency?: string;\n}\n\nexport async function createTransfer(\n apiBaseUrl: string,\n token: string,\n params: CreateTransferParams,\n): Promise<Transfer> {\n const body = {\n id: crypto.randomUUID(),\n sources: [{ [params.sourceType]: params.sourceId }],\n destinations: [\n {\n chainId: params.destination.chainId,\n token: { symbol: params.destination.token.symbol },\n address: params.destination.address,\n },\n ],\n amount: {\n amount: params.amount,\n currency: params.currency ?? 'USD',\n },\n };\n\n const res = await fetch(`${apiBaseUrl}/v1/transfers`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify(body),\n });\n\n if (!res.ok) await throwApiError(res);\n return (await res.json()) as Transfer;\n}\n\nexport async function fetchTransfer(\n apiBaseUrl: string,\n token: string,\n transferId: string,\n): Promise<Transfer> {\n const res = await fetch(`${apiBaseUrl}/v1/transfers/${transferId}`, {\n headers: { Authorization: `Bearer ${token}` },\n });\n if (!res.ok) await throwApiError(res);\n return (await res.json()) as Transfer;\n}\n\n// ── Authorization Sessions & Actions ───────────────────────────────────\n\nexport async function fetchAuthorizationSession(\n apiBaseUrl: string,\n sessionId: string,\n): Promise<AuthorizationSessionDetail> {\n // This endpoint is unauthenticated\n const res = await fetch(\n `${apiBaseUrl}/v1/authorization-sessions/${sessionId}`,\n );\n if (!res.ok) await throwApiError(res);\n return (await res.json()) as AuthorizationSessionDetail;\n}\n\n// ── User Config ─────────────────────────────────────────────────────────\n\nexport async function updateUserConfig(\n apiBaseUrl: string,\n token: string,\n config: { defaultAllowance: number },\n): Promise<void> {\n const res = await fetch(`${apiBaseUrl}/v1/users`, {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify({ config }),\n });\n if (!res.ok) await throwApiError(res);\n}\n\nexport async function reportActionCompletion(\n apiBaseUrl: string,\n actionId: string,\n result: Record<string, unknown>,\n): Promise<AuthorizationSessionDetail> {\n const res = await fetch(\n `${apiBaseUrl}/v1/authorization-actions/${actionId}`,\n {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ status: 'COMPLETED', result }),\n },\n );\n if (!res.ok) await throwApiError(res);\n return (await res.json()) as AuthorizationSessionDetail;\n}\n","// ── Swype React SDK Hooks ──────────────────────────────────────────────\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useAccount, useConnect, useSwitchChain, useSignTypedData, usePublicClient, useWalletClient } from 'wagmi';\nimport { usePrivy } from '@privy-io/react-auth';\n\nimport type {\n AuthorizationAction,\n AuthorizationSessionDetail,\n ActionExecutionResult,\n Transfer,\n} from './types';\nimport * as api from './api';\nimport { useSwypeConfig } from './context';\n\n// Re-export useSwypeConfig for convenience\nexport { useSwypeConfig } from './context';\n\n// ── Transfer polling ───────────────────────────────────────────────────\n\nexport interface UseTransferPollingResult {\n transfer: Transfer | null;\n error: string | null;\n isPolling: boolean;\n startPolling: (transferId: string) => void;\n stopPolling: () => void;\n}\n\n/**\n * Polls GET /v1/transfers/{id} every `intervalMs` until status is\n * COMPLETED or FAILED.\n */\nexport function useTransferPolling(intervalMs = 3000): UseTransferPollingResult {\n const { apiBaseUrl } = useSwypeConfig();\n const { getAccessToken } = usePrivy();\n const [transfer, setTransfer] = useState<Transfer | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [isPolling, setIsPolling] = useState(false);\n const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const transferIdRef = useRef<string | null>(null);\n\n const stopPolling = useCallback(() => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n setIsPolling(false);\n }, []);\n\n const poll = useCallback(async () => {\n if (!transferIdRef.current) return;\n try {\n const token = await getAccessToken();\n if (!token) {\n setError('Could not get access token');\n stopPolling();\n return;\n }\n const t = await api.fetchTransfer(apiBaseUrl, token, transferIdRef.current);\n setTransfer(t);\n\n if (t.status === 'COMPLETED' || t.status === 'FAILED') {\n stopPolling();\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Polling error');\n stopPolling();\n }\n }, [apiBaseUrl, getAccessToken, stopPolling]);\n\n const startPolling = useCallback(\n (transferId: string) => {\n stopPolling();\n transferIdRef.current = transferId;\n setIsPolling(true);\n setError(null);\n // Fire immediately, then repeat\n poll();\n intervalRef.current = setInterval(poll, intervalMs);\n },\n [poll, intervalMs, stopPolling],\n );\n\n // Cleanup on unmount\n useEffect(() => () => stopPolling(), [stopPolling]);\n\n return { transfer, error, isPolling, startPolling, stopPolling };\n}\n\n// ── Authorization executor ─────────────────────────────────────────────\n\nexport interface UseAuthorizationExecutorResult {\n executing: boolean;\n results: ActionExecutionResult[];\n error: string | null;\n executeSession: (transfer: Transfer) => Promise<void>;\n}\n\n/**\n * Executes the full authorization flow for a transfer's first session:\n * fetches the session, walks through PENDING actions (OPEN_PROVIDER,\n * SWITCH_CHAIN, APPROVE_PERMIT_2, SIGN_PERMIT2), reports each completion\n * to the server, and chains new actions that appear.\n */\nexport function useAuthorizationExecutor(): UseAuthorizationExecutorResult {\n const { apiBaseUrl } = useSwypeConfig();\n const { address, chainId: currentChainId, isConnected } = useAccount();\n const { connectAsync, connectors } = useConnect();\n const { switchChainAsync } = useSwitchChain();\n const { signTypedDataAsync } = useSignTypedData();\n const publicClient = usePublicClient();\n const { data: walletClient } = useWalletClient();\n\n const [executing, setExecuting] = useState(false);\n const [results, setResults] = useState<ActionExecutionResult[]>([]);\n const [error, setError] = useState<string | null>(null);\n const executingRef = useRef(false);\n\n // ── Individual action executors ────────────────────────────────────\n\n const executeOpenProvider = useCallback(\n async (action: AuthorizationAction): Promise<ActionExecutionResult> => {\n try {\n if (isConnected && address) {\n const hexChainId = currentChainId\n ? `0x${currentChainId.toString(16)}`\n : undefined;\n return {\n actionId: action.id,\n type: action.type,\n status: 'success',\n message: `Connected. Account: ${address}, Chain: ${hexChainId}`,\n data: { accounts: [address], chainId: hexChainId },\n };\n }\n\n // Use the connector specified by the server (matches the user's chosen provider)\n const targetId = action.metadata?.wagmiConnectorId as string | undefined;\n const connector = targetId\n ? connectors.find((c) => c.id === targetId) ?? connectors[0]\n : connectors[0];\n\n if (!connector) {\n return {\n actionId: action.id,\n type: action.type,\n status: 'error',\n message: 'No wallet connector found. Please install a supported wallet.',\n };\n }\n\n const result = await connectAsync({ connector });\n const hexChainId = `0x${result.chainId.toString(16)}`;\n return {\n actionId: action.id,\n type: action.type,\n status: 'success',\n message: `Connected to ${connector.name}. Account: ${result.accounts[0]}, Chain: ${hexChainId}`,\n data: { accounts: [...result.accounts], chainId: hexChainId },\n };\n } catch (err) {\n return {\n actionId: action.id,\n type: action.type,\n status: 'error',\n message: err instanceof Error ? err.message : 'Failed to connect wallet',\n };\n }\n },\n [isConnected, address, currentChainId, connectors, connectAsync],\n );\n\n const executeSwitchChain = useCallback(\n async (action: AuthorizationAction): Promise<ActionExecutionResult> => {\n try {\n const targetChainIdHex = action.metadata?.targetChainId as string | undefined;\n if (!targetChainIdHex) {\n return {\n actionId: action.id,\n type: action.type,\n status: 'error',\n message: 'No targetChainId in action metadata.',\n };\n }\n const targetChainIdNum = parseInt(targetChainIdHex, 16);\n await switchChainAsync({ chainId: targetChainIdNum });\n const hexChainId = `0x${targetChainIdNum.toString(16)}`;\n return {\n actionId: action.id,\n type: action.type,\n status: 'success',\n message: `Switched to chain ${hexChainId}.`,\n data: { chainId: hexChainId, switched: true },\n };\n } catch (err) {\n return {\n actionId: action.id,\n type: action.type,\n status: 'error',\n message: err instanceof Error ? err.message : 'Failed to switch chain',\n };\n }\n },\n [switchChainAsync],\n );\n\n const executeApprovePermit2 = useCallback(\n async (action: AuthorizationAction): Promise<ActionExecutionResult> => {\n try {\n const tokenAddress = action.metadata?.tokenAddress as `0x${string}` | undefined;\n const permit2Address = action.metadata?.permit2Address as `0x${string}` | undefined;\n\n if (!tokenAddress || !permit2Address) {\n return {\n actionId: action.id,\n type: action.type,\n status: 'error',\n message: 'Missing tokenAddress or permit2Address in action metadata.',\n };\n }\n if (!address) {\n return {\n actionId: action.id,\n type: action.type,\n status: 'error',\n message: 'Wallet not connected.',\n };\n }\n\n const ERC20_ABI = [\n {\n name: 'allowance',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'owner', type: 'address' },\n { name: 'spender', type: 'address' },\n ],\n outputs: [{ name: '', type: 'uint256' }],\n },\n {\n name: 'approve',\n type: 'function',\n stateMutability: 'nonpayable',\n inputs: [\n { name: 'spender', type: 'address' },\n { name: 'amount', type: 'uint256' },\n ],\n outputs: [{ name: '', type: 'bool' }],\n },\n ] as const;\n\n if (publicClient) {\n const currentAllowance = await publicClient.readContract({\n address: tokenAddress,\n abi: ERC20_ABI,\n functionName: 'allowance',\n args: [address, permit2Address],\n });\n if (currentAllowance > 0n) {\n return {\n actionId: action.id,\n type: action.type,\n status: 'success',\n message: `Permit2 already approved (allowance: ${currentAllowance.toString()}). Skipped.`,\n data: { skipped: true, existingAllowance: currentAllowance.toString() },\n };\n }\n }\n\n if (!walletClient) {\n return {\n actionId: action.id,\n type: action.type,\n status: 'error',\n message: 'Wallet client not available.',\n };\n }\n\n const MAX_UINT256 = 2n ** 256n - 1n;\n const txHash = await walletClient.writeContract({\n address: tokenAddress,\n abi: ERC20_ABI,\n functionName: 'approve',\n args: [permit2Address, MAX_UINT256],\n });\n\n if (publicClient) {\n await publicClient.waitForTransactionReceipt({ hash: txHash });\n }\n\n return {\n actionId: action.id,\n type: action.type,\n status: 'success',\n message: `Permit2 approved. Tx: ${txHash}`,\n data: { txHash, approved: true },\n };\n } catch (err) {\n return {\n actionId: action.id,\n type: action.type,\n status: 'error',\n message: err instanceof Error ? err.message : 'Failed to approve Permit2',\n };\n }\n },\n [address, publicClient, walletClient],\n );\n\n const executeSignPermit2 = useCallback(\n async (action: AuthorizationAction): Promise<ActionExecutionResult> => {\n try {\n const PERMIT2_ADDRESS = '0x000000000022D473030F116dDEE9F6B43aC78BA3' as const;\n\n const PERMIT2_ALLOWANCE_ABI = [\n {\n name: 'allowance',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'owner', type: 'address' },\n { name: 'token', type: 'address' },\n { name: 'spender', type: 'address' },\n ],\n outputs: [\n { name: 'amount', type: 'uint160' },\n { name: 'expiration', type: 'uint48' },\n { name: 'nonce', type: 'uint48' },\n ],\n },\n ] as const;\n\n const spenderAddress = action.metadata?.spenderAddress as `0x${string}` | undefined;\n const tokenAddress = action.metadata?.tokenAddress as `0x${string}` | undefined;\n const metadataChainId = action.metadata?.chainId as string | undefined;\n const metadataAmount = action.metadata?.amount as number | null | undefined;\n\n if (!spenderAddress || !tokenAddress) {\n return {\n actionId: action.id,\n type: action.type,\n status: 'error',\n message: 'Missing spenderAddress or tokenAddress in action metadata.',\n };\n }\n\n // Check whether the Permit2 contract already has a sufficient\n // on-chain allowance for the spender. When it does, skip the\n // signature entirely — the server can pull tokens directly.\n if (publicClient && address && metadataAmount) {\n try {\n const [existingAmount, existingExpiration] = await publicClient.readContract({\n address: PERMIT2_ADDRESS,\n abi: PERMIT2_ALLOWANCE_ABI,\n functionName: 'allowance',\n args: [address, tokenAddress, spenderAddress],\n });\n\n // Convert the dollar amount to USDC smallest units (6 decimals).\n const requiredSmallestUnit = BigInt(\n Math.ceil(metadataAmount * 1_000_000),\n );\n const now = Math.floor(Date.now() / 1000);\n\n if (\n existingAmount >= requiredSmallestUnit &&\n existingExpiration > now\n ) {\n return {\n actionId: action.id,\n type: action.type,\n status: 'success',\n message: `Permit2 allowance already sufficient (${existingAmount.toString()}). Skipped.`,\n data: { skipped: true, existingAllowance: existingAmount.toString() },\n };\n }\n } catch {\n // If the on-chain check fails, fall through to signing.\n }\n }\n\n // The server computes the total Permit2 allowance (transfer amount\n // + user's top-up preference) and sends it as metadata.allowance.\n // The SDK uses that value directly, falling back to the transfer\n // amount or a legacy 5 USDC default.\n const metadataAllowance = action.metadata?.allowance as number | null | undefined;\n const permitAmount = metadataAllowance\n ? BigInt(Math.ceil(metadataAllowance * 1_000_000))\n : metadataAmount\n ? BigInt(Math.ceil(metadataAmount * 1_000_000))\n : BigInt(5_000_000);\n const permit2ChainId = metadataChainId\n ? parseInt(metadataChainId, 16)\n : currentChainId;\n const nonce = Number(action.metadata?.nonce ?? 0);\n const sigDeadline = BigInt(Math.floor(Date.now() / 1000) + 3600);\n const expiration = Math.floor(Date.now() / 1000) + 30 * 24 * 60 * 60;\n\n const signature = await signTypedDataAsync({\n domain: {\n name: 'Permit2',\n chainId: permit2ChainId,\n verifyingContract: PERMIT2_ADDRESS,\n },\n types: {\n PermitSingle: [\n { name: 'details', type: 'PermitDetails' },\n { name: 'spender', type: 'address' },\n { name: 'sigDeadline', type: 'uint256' },\n ],\n PermitDetails: [\n { name: 'token', type: 'address' },\n { name: 'amount', type: 'uint160' },\n { name: 'expiration', type: 'uint48' },\n { name: 'nonce', type: 'uint48' },\n ],\n },\n primaryType: 'PermitSingle',\n message: {\n details: {\n token: tokenAddress,\n amount: permitAmount,\n expiration,\n nonce,\n },\n spender: spenderAddress,\n sigDeadline,\n },\n });\n\n return {\n actionId: action.id,\n type: action.type,\n status: 'success',\n message: 'Permit2 allowance signature obtained.',\n data: {\n signature,\n signer: address,\n nonce: nonce.toString(),\n sigDeadline: sigDeadline.toString(),\n expiration: expiration.toString(),\n amount: permitAmount.toString(),\n },\n };\n } catch (err) {\n return {\n actionId: action.id,\n type: action.type,\n status: 'error',\n message: err instanceof Error ? err.message : 'Failed to sign Permit2',\n };\n }\n },\n [address, currentChainId, publicClient, signTypedDataAsync],\n );\n\n const executeAction = useCallback(\n async (action: AuthorizationAction): Promise<ActionExecutionResult> => {\n switch (action.type) {\n case 'OPEN_PROVIDER':\n return executeOpenProvider(action);\n case 'SWITCH_CHAIN':\n return executeSwitchChain(action);\n case 'APPROVE_PERMIT_2':\n return executeApprovePermit2(action);\n case 'SIGN_PERMIT2':\n return executeSignPermit2(action);\n default:\n return {\n actionId: action.id,\n type: action.type,\n status: 'error',\n message: `Unsupported action type: ${action.type}`,\n };\n }\n },\n [executeOpenProvider, executeSwitchChain, executeApprovePermit2, executeSignPermit2],\n );\n\n // ── Main session executor ──────────────────────────────────────────\n\n const executeSession = useCallback(\n async (transfer: Transfer) => {\n // Synchronous guard: prevent concurrent invocations so we never send\n // two wallet signing requests at the same time (wallets reject this).\n if (executingRef.current) return;\n executingRef.current = true;\n\n if (\n !transfer.authorizationSessions ||\n transfer.authorizationSessions.length === 0\n ) {\n setError('No authorization sessions available.');\n executingRef.current = false;\n return;\n }\n\n const sessionId = transfer.authorizationSessions[0].id;\n setExecuting(true);\n setError(null);\n setResults([]);\n\n try {\n let currentSession: AuthorizationSessionDetail =\n await api.fetchAuthorizationSession(apiBaseUrl, sessionId);\n\n const allResults: ActionExecutionResult[] = [];\n const completedActionIds = new Set<string>();\n\n let pendingActions = currentSession.actions\n .filter((a) => a.status === 'PENDING')\n .sort((a, b) => a.orderIndex - b.orderIndex);\n\n while (pendingActions.length > 0) {\n const action = pendingActions[0];\n if (completedActionIds.has(action.id)) break;\n\n const result = await executeAction(action);\n\n if (result.status === 'error') {\n allResults.push(result);\n setResults([...allResults]);\n setError(result.message);\n break;\n }\n\n completedActionIds.add(action.id);\n\n const updatedSession = await api.reportActionCompletion(\n apiBaseUrl,\n action.id,\n (result.data as Record<string, unknown>) ?? {},\n );\n\n currentSession = updatedSession;\n\n pendingActions = currentSession.actions\n .filter((a) => a.status === 'PENDING' && !completedActionIds.has(a.id))\n .sort((a, b) => a.orderIndex - b.orderIndex);\n\n // Chain remaining actions seamlessly after OPEN_PROVIDER\n if (action.type === 'OPEN_PROVIDER' && pendingActions.length > 0) {\n const chainResults: ActionExecutionResult[] = [result];\n let chainBroken = false;\n\n while (pendingActions.length > 0) {\n const nextAction = pendingActions[0];\n const nextResult = await executeAction(nextAction);\n\n if (nextResult.status === 'error') {\n chainResults.push(nextResult);\n allResults.push(...chainResults);\n setResults([...allResults]);\n setError(nextResult.message);\n chainBroken = true;\n break;\n }\n\n completedActionIds.add(nextAction.id);\n\n const nextSession = await api.reportActionCompletion(\n apiBaseUrl,\n nextAction.id,\n (nextResult.data as Record<string, unknown>) ?? {},\n );\n\n currentSession = nextSession;\n chainResults.push(nextResult);\n\n pendingActions = currentSession.actions\n .filter((a) => a.status === 'PENDING' && !completedActionIds.has(a.id))\n .sort((a, b) => a.orderIndex - b.orderIndex);\n }\n\n if (chainBroken) break;\n allResults.push(...chainResults);\n setResults([...allResults]);\n continue;\n }\n\n allResults.push(result);\n setResults([...allResults]);\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Authorization failed');\n } finally {\n setExecuting(false);\n executingRef.current = false;\n }\n },\n [apiBaseUrl, executeAction],\n );\n\n return { executing, results, error, executeSession };\n}\n","// ── Animated Spinner ───────────────────────────────────────────────────\nimport { useSwypeConfig } from '../context';\n\ninterface SpinnerProps {\n size?: number;\n label?: string;\n}\n\nexport function Spinner({ size = 40, label }: SpinnerProps) {\n const { tokens } = useSwypeConfig();\n\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '12px',\n }}\n >\n <div\n style={{\n width: size,\n height: size,\n border: `3px solid ${tokens.border}`,\n borderTopColor: tokens.accent,\n borderRadius: '50%',\n animation: 'swype-spin 0.8s linear infinite',\n }}\n />\n {label && (\n <p style={{ color: tokens.textSecondary, fontSize: '0.875rem', margin: 0 }}>\n {label}\n </p>\n )}\n <style>{`\n @keyframes swype-spin {\n to { transform: rotate(360deg); }\n }\n `}</style>\n </div>\n );\n}\n","// ── Provider Selection Card ────────────────────────────────────────────\nimport { useState } from 'react';\nimport type { Provider } from '../types';\nimport { useSwypeConfig } from '../context';\n\ninterface ProviderCardProps {\n provider: Provider;\n selected: boolean;\n onClick: () => void;\n}\n\nexport function ProviderCard({ provider, selected, onClick }: ProviderCardProps) {\n const { tokens } = useSwypeConfig();\n const [hovered, setHovered] = useState(false);\n\n return (\n <button\n onClick={onClick}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n width: '100%',\n padding: '14px 16px',\n background: selected\n ? tokens.accent + '18'\n : hovered\n ? tokens.bgHover\n : tokens.bgInput,\n border: `1.5px solid ${selected ? tokens.accent : tokens.border}`,\n borderRadius: tokens.radius,\n cursor: 'pointer',\n transition: 'all 0.15s ease',\n color: tokens.text,\n fontFamily: 'inherit',\n fontSize: '0.95rem',\n fontWeight: 500,\n textAlign: 'left',\n outline: 'none',\n }}\n >\n {provider.logoURI ? (\n <img\n src={provider.logoURI}\n alt={provider.name}\n style={{\n width: 32,\n height: 32,\n borderRadius: '8px',\n objectFit: 'contain',\n }}\n />\n ) : (\n <div\n style={{\n width: 32,\n height: 32,\n borderRadius: '8px',\n background: tokens.accent + '30',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '0.875rem',\n fontWeight: 700,\n color: tokens.accent,\n flexShrink: 0,\n }}\n >\n {provider.name.charAt(0).toUpperCase()}\n </div>\n )}\n <span>{provider.name}</span>\n {selected && (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n style={{ marginLeft: 'auto', flexShrink: 0 }}\n >\n <path\n d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\"\n fill={tokens.accent}\n />\n </svg>\n )}\n </button>\n );\n}\n","// ── Account & Wallet Selector ──────────────────────────────────────────\nimport { useState } from 'react';\nimport type { Account, Wallet } from '../types';\nimport { useSwypeConfig } from '../context';\n\nexport interface WalletSelection {\n accountId: string;\n walletId: string;\n accountName: string;\n walletName: string;\n chainName: string;\n}\n\ninterface AccountWalletSelectorProps {\n accounts: Account[];\n selection: WalletSelection | null;\n onSelect: (selection: WalletSelection | null) => void;\n}\n\n/**\n * Shows accounts with ACTIVE wallets. User expands an account to see\n * individual wallets with their chain name and balance, then picks one.\n */\nexport function AccountWalletSelector({\n accounts,\n selection,\n onSelect,\n}: AccountWalletSelectorProps) {\n const { tokens } = useSwypeConfig();\n const [expandedAccountId, setExpandedAccountId] = useState<string | null>(null);\n\n // Filter to accounts that have at least one ACTIVE wallet\n const activeAccounts = accounts.filter((a) =>\n a.wallets.some((w) => w.status === 'ACTIVE'),\n );\n\n if (activeAccounts.length === 0) return null;\n\n const handleAccountClick = (accountId: string) => {\n if (expandedAccountId === accountId) {\n setExpandedAccountId(null);\n } else {\n setExpandedAccountId(accountId);\n }\n };\n\n const handleWalletClick = (account: Account, wallet: Wallet) => {\n const isAlreadySelected =\n selection?.accountId === account.id && selection?.walletId === wallet.id;\n if (isAlreadySelected) {\n onSelect(null);\n } else {\n onSelect({\n accountId: account.id,\n walletId: wallet.id,\n accountName: account.name,\n walletName: wallet.name,\n chainName: wallet.chain.name,\n });\n }\n };\n\n const formatBalance = (wallet: Wallet): string => {\n const parts: string[] = [];\n for (const src of wallet.sources) {\n if (src.token.status === 'ACTIVE') {\n parts.push(\n `${src.balance.available.amount.toFixed(2)} ${src.balance.available.currency} (${src.token.symbol})`,\n );\n }\n }\n if (parts.length === 0 && wallet.balance) {\n return `${wallet.balance.available.amount.toFixed(2)} ${wallet.balance.available.currency}`;\n }\n return parts.join(', ') || 'No balance';\n };\n\n return (\n <div style={{ width: '100%' }}>\n <label\n style={{\n display: 'block',\n fontSize: '0.8rem',\n color: tokens.textMuted,\n marginBottom: '8px',\n fontWeight: 500,\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n }}\n >\n Or use a connected account\n </label>\n\n <div style={{ display: 'flex', flexDirection: 'column', gap: '6px' }}>\n {activeAccounts.map((account) => {\n const isExpanded = expandedAccountId === account.id;\n const activeWallets = account.wallets.filter((w) => w.status === 'ACTIVE');\n const hasSelection = selection?.accountId === account.id;\n\n return (\n <div\n key={account.id}\n style={{\n border: `1px solid ${hasSelection ? tokens.accent : tokens.border}`,\n borderRadius: tokens.radius,\n overflow: 'hidden',\n transition: 'border-color 0.15s ease',\n }}\n >\n {/* Account header */}\n <button\n onClick={() => handleAccountClick(account.id)}\n style={{\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '12px 14px',\n background: hasSelection\n ? tokens.accent + '10'\n : tokens.bgInput,\n border: 'none',\n cursor: 'pointer',\n color: tokens.text,\n fontFamily: 'inherit',\n fontSize: '0.9rem',\n fontWeight: 500,\n textAlign: 'left',\n outline: 'none',\n transition: 'background 0.15s ease',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '10px' }}>\n <div\n style={{\n width: 28,\n height: 28,\n borderRadius: '6px',\n background: tokens.accent + '25',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '0.75rem',\n fontWeight: 700,\n color: tokens.accent,\n flexShrink: 0,\n }}\n >\n {account.name.charAt(0).toUpperCase()}\n </div>\n <div>\n <div>{account.name}</div>\n <div\n style={{\n fontSize: '0.75rem',\n color: tokens.textMuted,\n marginTop: '2px',\n }}\n >\n {activeWallets.length} wallet{activeWallets.length !== 1 ? 's' : ''}\n </div>\n </div>\n </div>\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n style={{\n transform: isExpanded ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 0.2s ease',\n flexShrink: 0,\n }}\n >\n <path\n d=\"M7 10l5 5 5-5\"\n stroke={tokens.textMuted}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n\n {/* Wallet list (expanded) */}\n {isExpanded && (\n <div\n style={{\n borderTop: `1px solid ${tokens.border}`,\n background: tokens.bgCard,\n }}\n >\n {activeWallets.map((wallet) => {\n const isSelected = selection?.walletId === wallet.id;\n return (\n <button\n key={wallet.id}\n onClick={() => handleWalletClick(account, wallet)}\n style={{\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '10px 14px 10px 24px',\n background: isSelected\n ? tokens.accent + '12'\n : 'transparent',\n border: 'none',\n borderBottom: `1px solid ${tokens.border}`,\n cursor: 'pointer',\n color: tokens.text,\n fontFamily: 'inherit',\n fontSize: '0.85rem',\n textAlign: 'left',\n outline: 'none',\n transition: 'background 0.1s ease',\n }}\n >\n <div style={{ minWidth: 0, flex: 1 }}>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n }}\n >\n <span style={{ fontWeight: 500 }}>{wallet.name}</span>\n <span\n style={{\n fontSize: '0.7rem',\n color: tokens.textMuted,\n background: tokens.bgHover,\n padding: '1px 6px',\n borderRadius: '4px',\n }}\n >\n {wallet.chain.name}\n </span>\n </div>\n <div\n style={{\n fontSize: '0.75rem',\n color: tokens.textSecondary,\n marginTop: '3px',\n }}\n >\n {formatBalance(wallet)}\n </div>\n </div>\n\n {/* Selection indicator */}\n {isSelected && (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n style={{ flexShrink: 0, marginLeft: '8px' }}\n >\n <path\n d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\"\n fill={tokens.accent}\n />\n </svg>\n )}\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n })}\n </div>\n\n {/* Selected wallet summary */}\n {selection && (\n <div\n style={{\n marginTop: '8px',\n fontSize: '0.8rem',\n color: tokens.accent,\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n }}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\"\n fill={tokens.accent}\n />\n </svg>\n Using {selection.walletName} on {selection.chainName}\n </div>\n )}\n </div>\n );\n}\n","// ── Swype Payment Widget ───────────────────────────────────────────────\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { usePrivy } from '@privy-io/react-auth';\n\nimport type {\n Account,\n Destination,\n PaymentStep,\n Provider,\n SourceType,\n Transfer,\n} from './types';\nimport * as api from './api';\nimport { useSwypeConfig } from './context';\nimport { useAuthorizationExecutor, useTransferPolling } from './hooks';\nimport { Spinner } from './components/Spinner';\nimport { ProviderCard } from './components/ProviderCard';\nimport {\n AccountWalletSelector,\n type WalletSelection,\n} from './components/AccountWalletSelector';\n\n// ── Mobile detection ────────────────────────────────────────────────────\n\nfunction isMobile(): boolean {\n if (typeof navigator === 'undefined') return false;\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator.userAgent,\n );\n}\n\n// ── Props ──────────────────────────────────────────────────────────────\n\nexport interface SwypePaymentProps {\n /**\n * Where the funds go -- controlled by the host app (merchant).\n *\n * The merchant sets this prop and can update it at any time; the SDK\n * reads it reactively whenever a transfer is created.\n */\n destination: Destination;\n /** Called when the transfer reaches COMPLETED status */\n onComplete?: (transfer: Transfer) => void;\n /** Called on unrecoverable error */\n onError?: (error: string) => void;\n}\n\n// ── Component ──────────────────────────────────────────────────────────\n\nexport function SwypePayment({\n destination,\n onComplete,\n onError,\n}: SwypePaymentProps) {\n const { apiBaseUrl, tokens } = useSwypeConfig();\n const { ready, authenticated, login, getAccessToken } = usePrivy();\n\n // Flow state\n const [step, setStep] = useState<PaymentStep>('login');\n const [error, setError] = useState<string | null>(null);\n\n // Data\n const [providers, setProviders] = useState<Provider[]>([]);\n const [accounts, setAccounts] = useState<Account[]>([]);\n const [loadingData, setLoadingData] = useState(false);\n\n // Source selection\n const [selectedProviderId, setSelectedProviderId] = useState<string | null>(\n null,\n );\n const [walletSelection, setWalletSelection] =\n useState<WalletSelection | null>(null);\n\n // Amount\n const [amount, setAmount] = useState<string>('0.10');\n const [topUpBalance, setTopUpBalance] = useState<string>('');\n\n // Transfer\n const [transfer, setTransfer] = useState<Transfer | null>(null);\n const [creatingTransfer, setCreatingTransfer] = useState(false);\n\n // Mobile flow — when true the user was redirected to the wallet app\n // and we are waiting for them to return.\n const [mobileFlow, setMobileFlow] = useState(false);\n const pollingTransferIdRef = useRef<string | null>(null);\n\n // Hooks\n const authExecutor = useAuthorizationExecutor();\n const polling = useTransferPolling();\n\n // Determine effective source\n const sourceType: SourceType = walletSelection ? 'walletId' : 'providerId';\n const sourceId = walletSelection?.walletId ?? selectedProviderId ?? '';\n\n // ── Step transitions based on auth state ─────────────────────────\n\n useEffect(() => {\n if (ready && authenticated && step === 'login') {\n setStep('select-source');\n }\n }, [ready, authenticated, step]);\n\n // ── Load providers + accounts when entering source step ──────────\n\n useEffect(() => {\n if (step !== 'select-source') return;\n if (providers.length > 0) return;\n\n let cancelled = false;\n const load = async () => {\n setLoadingData(true);\n setError(null);\n try {\n const token = await getAccessToken();\n if (!token) throw new Error('Not authenticated');\n const [prov, accts] = await Promise.all([\n api.fetchProviders(apiBaseUrl, token),\n api.fetchAccounts(apiBaseUrl, token),\n ]);\n if (cancelled) return;\n setProviders(prov);\n setAccounts(accts);\n if (prov.length > 0) setSelectedProviderId(prov[0].id);\n } catch (err) {\n if (!cancelled) {\n const msg =\n err instanceof Error ? err.message : 'Failed to load data';\n setError(msg);\n }\n } finally {\n if (!cancelled) setLoadingData(false);\n }\n };\n load();\n return () => {\n cancelled = true;\n };\n }, [step, providers.length, apiBaseUrl, getAccessToken]);\n\n // ── Poll completion handler ──────────────────────────────────────\n\n useEffect(() => {\n if (!polling.transfer) return;\n if (polling.transfer.status === 'COMPLETED') {\n setStep('complete');\n setTransfer(polling.transfer);\n onComplete?.(polling.transfer);\n } else if (polling.transfer.status === 'FAILED') {\n setStep('complete');\n setTransfer(polling.transfer);\n setError('Transfer failed.');\n }\n }, [polling.transfer, onComplete]);\n\n // ── Resume polling when the user returns from the wallet app ────\n //\n // On mobile, the browser tab may be suspended while the user is in the\n // wallet app. When the tab becomes visible again we fire an immediate\n // poll so the UI updates right away instead of waiting for the next\n // interval tick.\n\n useEffect(() => {\n if (!mobileFlow || !polling.isPolling) return;\n\n const handleVisibility = () => {\n if (document.visibilityState === 'visible') {\n // Re-start polling which fires an immediate fetch, then resumes\n // the interval. Use the stored transfer id so we don't depend on\n // React state that may be stale after a background suspension.\n if (pollingTransferIdRef.current) {\n polling.startPolling(pollingTransferIdRef.current);\n }\n }\n };\n\n document.addEventListener('visibilitychange', handleVisibility);\n return () => {\n document.removeEventListener('visibilitychange', handleVisibility);\n };\n }, [mobileFlow, polling]);\n\n // ── Create transfer + execute auth + start polling ───────────────\n\n const handlePay = useCallback(async () => {\n const parsedAmount = parseFloat(amount);\n if (isNaN(parsedAmount) || parsedAmount <= 0) {\n setError('Enter a valid amount.');\n return;\n }\n if (!sourceId) {\n setError('Select a source.');\n return;\n }\n\n setStep('processing');\n setError(null);\n setCreatingTransfer(true);\n setMobileFlow(false);\n\n try {\n const token = await getAccessToken();\n if (!token) throw new Error('Not authenticated');\n\n // Persist the user's top-up balance as their default allowance\n // before creating the transfer so the SIGN_PERMIT2 action picks\n // it up from the user config.\n const parsedTopUp = parseFloat(topUpBalance);\n if (!isNaN(parsedTopUp) && parsedTopUp > 0) {\n await api.updateUserConfig(apiBaseUrl, token, {\n defaultAllowance: parsedTopUp,\n });\n }\n\n const t = await api.createTransfer(apiBaseUrl, token, {\n sourceType,\n sourceId,\n destination,\n amount: parsedAmount,\n });\n setTransfer(t);\n\n if (t.authorizationSessions && t.authorizationSessions.length > 0) {\n if (isMobile()) {\n // Mobile: redirect to the wallet deeplink and poll for completion.\n // The auth-app running inside the wallet's in-app browser will\n // handle the full authorization flow. Start polling *before*\n // redirecting so the interval is active when the user returns.\n setMobileFlow(true);\n pollingTransferIdRef.current = t.id;\n polling.startPolling(t.id);\n window.location.href = t.authorizationSessions[0].uri;\n return; // skip finally — we don't clear creatingTransfer so the\n // processing UI stays visible when the user comes back\n } else {\n // Desktop: execute the authorization session in-browser via\n // the Chrome extension wallet (injected provider).\n await authExecutor.executeSession(t);\n }\n }\n\n polling.startPolling(t.id);\n } catch (err) {\n const msg =\n err instanceof Error ? err.message : 'Transfer creation failed';\n setError(msg);\n onError?.(msg);\n setStep('enter-amount');\n } finally {\n setCreatingTransfer(false);\n }\n }, [\n amount,\n sourceId,\n sourceType,\n destination,\n apiBaseUrl,\n getAccessToken,\n authExecutor,\n polling,\n onError,\n topUpBalance,\n ]);\n\n // ── Restart ──────────────────────────────────────────────────────\n\n const handleNewPayment = () => {\n setStep('select-source');\n setTransfer(null);\n setError(null);\n setAmount('0.10');\n setTopUpBalance('');\n setMobileFlow(false);\n pollingTransferIdRef.current = null;\n setWalletSelection(null);\n if (providers.length > 0) setSelectedProviderId(providers[0].id);\n };\n\n // ── Shared styles ────────────────────────────────────────────────\n\n const cardStyle: React.CSSProperties = {\n background: tokens.bgCard,\n borderRadius: tokens.radiusLg,\n border: `1px solid ${tokens.border}`,\n padding: '28px 24px',\n maxWidth: 420,\n width: '100%',\n boxShadow: tokens.shadowLg,\n fontFamily:\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n color: tokens.text,\n };\n\n const headingStyle: React.CSSProperties = {\n fontSize: '1.2rem',\n fontWeight: 600,\n margin: '0 0 20px 0',\n color: tokens.text,\n textAlign: 'center',\n };\n\n const btnPrimary: React.CSSProperties = {\n width: '100%',\n padding: '14px',\n background: tokens.accent,\n color: tokens.accentText,\n border: 'none',\n borderRadius: tokens.radius,\n fontSize: '1rem',\n fontWeight: 600,\n cursor: 'pointer',\n transition: 'background 0.15s ease',\n fontFamily: 'inherit',\n };\n\n const btnDisabled: React.CSSProperties = {\n ...btnPrimary,\n opacity: 0.5,\n cursor: 'not-allowed',\n };\n\n const btnSecondary: React.CSSProperties = {\n ...btnPrimary,\n background: 'transparent',\n color: tokens.textSecondary,\n border: `1px solid ${tokens.border}`,\n width: 'auto',\n flex: '0 0 auto',\n padding: '14px 20px',\n };\n\n const errorStyle: React.CSSProperties = {\n background: tokens.errorBg,\n border: `1px solid ${tokens.error}`,\n borderRadius: tokens.radius,\n padding: '10px 14px',\n color: tokens.error,\n fontSize: '0.825rem',\n marginBottom: '14px',\n lineHeight: 1.5,\n };\n\n const stepBadge = (label: string) => (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n marginBottom: '20px',\n }}\n >\n <div\n style={{\n width: 6,\n height: 6,\n borderRadius: '50%',\n background: tokens.accent,\n }}\n />\n <span\n style={{\n fontSize: '0.75rem',\n textTransform: 'uppercase',\n letterSpacing: '0.06em',\n color: tokens.textMuted,\n fontWeight: 600,\n }}\n >\n {label}\n </span>\n </div>\n );\n\n // ── Render ───────────────────────────────────────────────────────\n\n if (!ready) {\n return (\n <div style={cardStyle}>\n <div style={{ textAlign: 'center', padding: '24px 0' }}>\n <Spinner label=\"Initializing...\" />\n </div>\n </div>\n );\n }\n\n // ── Step: Login ──────────────────────────────────────────────────\n\n if (step === 'login' && !authenticated) {\n return (\n <div style={cardStyle}>\n <div style={{ textAlign: 'center' }}>\n <svg\n width=\"48\"\n height=\"48\"\n viewBox=\"0 0 48 48\"\n fill=\"none\"\n style={{ margin: '0 auto 16px' }}\n >\n <rect width=\"48\" height=\"48\" rx=\"12\" fill={tokens.accent + '20'} />\n <path\n d=\"M24 14v20M14 24h20\"\n stroke={tokens.accent}\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n <h2 style={{ ...headingStyle, marginBottom: '8px' }}>\n Pay with Swype\n </h2>\n <p\n style={{\n fontSize: '0.875rem',\n color: tokens.textSecondary,\n margin: '0 0 24px 0',\n lineHeight: 1.5,\n }}\n >\n Connect your account to continue\n </p>\n <button style={btnPrimary} onClick={login}>\n Connect to Swype\n </button>\n </div>\n </div>\n );\n }\n\n // ── Step: Select Source ───────────────────────────────────────────\n\n if (step === 'select-source') {\n return (\n <div style={cardStyle}>\n {stepBadge('Select payment source')}\n <h2 style={headingStyle}>Choose a provider</h2>\n\n {error && <div style={errorStyle}>{error}</div>}\n\n {loadingData ? (\n <div style={{ padding: '24px 0', textAlign: 'center' }}>\n <Spinner label=\"Loading providers...\" />\n </div>\n ) : (\n <>\n {/* Account & wallet selector */}\n {accounts.length > 0 && (\n <div style={{ marginBottom: '16px' }}>\n <AccountWalletSelector\n accounts={accounts}\n selection={walletSelection}\n onSelect={(sel) => {\n setWalletSelection(sel);\n if (sel) setSelectedProviderId(null);\n }}\n />\n </div>\n )}\n\n {/* Provider list (hidden when a wallet is selected) */}\n {!walletSelection && (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n marginBottom: '20px',\n }}\n >\n {providers.map((p) => (\n <ProviderCard\n key={p.id}\n provider={p}\n selected={selectedProviderId === p.id}\n onClick={() => {\n setSelectedProviderId(p.id);\n setWalletSelection(null);\n }}\n />\n ))}\n </div>\n )}\n\n <button\n style={sourceId ? btnPrimary : btnDisabled}\n disabled={!sourceId}\n onClick={() => {\n setError(null);\n setStep('enter-amount');\n }}\n >\n Continue\n </button>\n </>\n )}\n </div>\n );\n }\n\n // ── Step: Enter Amount ───────────────────────────────────────────\n\n if (step === 'enter-amount') {\n return (\n <div style={cardStyle}>\n {stepBadge('Enter amount')}\n <h2 style={headingStyle}>How much?</h2>\n\n {error && <div style={errorStyle}>{error}</div>}\n\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n background: tokens.bgInput,\n border: `1px solid ${tokens.border}`,\n borderRadius: tokens.radius,\n padding: '4px 14px 4px 4px',\n marginBottom: '20px',\n }}\n >\n <span\n style={{\n fontSize: '1.5rem',\n fontWeight: 600,\n color: tokens.textMuted,\n paddingLeft: '10px',\n userSelect: 'none',\n }}\n >\n $\n </span>\n <input\n type=\"number\"\n min=\"0.01\"\n step=\"0.01\"\n value={amount}\n onChange={(e) => setAmount(e.target.value)}\n style={{\n flex: 1,\n background: 'transparent',\n border: 'none',\n outline: 'none',\n color: tokens.text,\n fontSize: '1.5rem',\n fontWeight: 600,\n fontFamily: 'inherit',\n padding: '10px 0',\n }}\n autoFocus\n />\n <span\n style={{\n fontSize: '0.825rem',\n fontWeight: 600,\n color: tokens.textMuted,\n background: tokens.bgHover,\n padding: '4px 10px',\n borderRadius: '6px',\n }}\n >\n USD\n </span>\n </div>\n\n {/* Top Up Balance */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n background: tokens.bgInput,\n border: `1px solid ${tokens.border}`,\n borderRadius: tokens.radius,\n padding: '4px 14px 4px 4px',\n marginBottom: '20px',\n }}\n >\n <span\n style={{\n fontSize: '1rem',\n fontWeight: 600,\n color: tokens.textMuted,\n paddingLeft: '10px',\n userSelect: 'none',\n }}\n >\n $\n </span>\n <input\n type=\"number\"\n min=\"0\"\n step=\"1\"\n placeholder=\"Top up balance (optional)\"\n value={topUpBalance}\n onChange={(e) => setTopUpBalance(e.target.value)}\n style={{\n flex: 1,\n background: 'transparent',\n border: 'none',\n outline: 'none',\n color: tokens.text,\n fontSize: '1rem',\n fontWeight: 600,\n fontFamily: 'inherit',\n padding: '10px 0',\n }}\n />\n <span\n style={{\n fontSize: '0.75rem',\n fontWeight: 600,\n color: tokens.textMuted,\n background: tokens.bgHover,\n padding: '4px 10px',\n borderRadius: '6px',\n whiteSpace: 'nowrap',\n }}\n >\n USD\n </span>\n </div>\n <p\n style={{\n fontSize: '0.75rem',\n color: tokens.textMuted,\n margin: '-12px 0 16px 0',\n lineHeight: 1.4,\n }}\n >\n Set a higher allowance to skip wallet prompts on future payments\n under this amount.\n </p>\n\n {/* Summary */}\n <div\n style={{\n fontSize: '0.825rem',\n color: tokens.textSecondary,\n marginBottom: '20px',\n padding: '12px 14px',\n background: tokens.bgInput,\n borderRadius: tokens.radius,\n lineHeight: 1.7,\n }}\n >\n <div style={{ display: 'flex', justifyContent: 'space-between' }}>\n <span>To</span>\n <span\n style={{\n fontFamily: '\"SF Mono\", \"Fira Code\", monospace',\n fontSize: '0.8rem',\n }}\n >\n {destination.address.slice(0, 6)}...\n {destination.address.slice(-4)}\n </span>\n </div>\n <div style={{ display: 'flex', justifyContent: 'space-between' }}>\n <span>Token</span>\n <span style={{ fontWeight: 600 }}>{destination.token.symbol}</span>\n </div>\n <div style={{ display: 'flex', justifyContent: 'space-between' }}>\n <span>Source</span>\n <span style={{ fontWeight: 600 }}>\n {walletSelection\n ? `${walletSelection.walletName} (${walletSelection.chainName})`\n : providers.find((p) => p.id === selectedProviderId)?.name ??\n 'Provider'}\n </span>\n </div>\n </div>\n\n <div style={{ display: 'flex', gap: '10px' }}>\n <button\n style={btnSecondary}\n onClick={() => {\n setError(null);\n setStep('select-source');\n }}\n >\n Back\n </button>\n <button\n style={parseFloat(amount) > 0 ? btnPrimary : btnDisabled}\n disabled={!(parseFloat(amount) > 0)}\n onClick={handlePay}\n >\n Pay ${parseFloat(amount || '0').toFixed(2)}\n </button>\n </div>\n </div>\n );\n }\n\n // ── Step: Processing ─────────────────────────────────────────────\n\n if (step === 'processing') {\n const statusLabel = creatingTransfer\n ? 'Creating transfer...'\n : mobileFlow\n ? 'Waiting for authorization...'\n : authExecutor.executing\n ? 'Authorizing...'\n : polling.isPolling\n ? 'Processing payment...'\n : 'Please wait...';\n\n const statusDescription = creatingTransfer\n ? 'Setting up your transfer...'\n : mobileFlow\n ? 'Complete the authorization in your wallet app, then return here.'\n : authExecutor.executing\n ? 'Complete the wallet prompts to authorize this payment.'\n : polling.isPolling\n ? 'Your payment is being processed. This usually takes a few moments.'\n : 'Hang tight...';\n\n return (\n <div style={cardStyle}>\n <div style={{ textAlign: 'center', padding: '16px 0' }}>\n <Spinner size={48} />\n <h2\n style={{\n ...headingStyle,\n marginTop: '20px',\n marginBottom: '8px',\n }}\n >\n {statusLabel}\n </h2>\n <p\n style={{\n fontSize: '0.85rem',\n color: tokens.textSecondary,\n margin: 0,\n lineHeight: 1.5,\n }}\n >\n {statusDescription}\n </p>\n\n {/* Desktop: show action-by-action progress */}\n {!mobileFlow && authExecutor.results.length > 0 && (\n <div style={{ marginTop: '20px', textAlign: 'left' }}>\n {authExecutor.results.map((r) => (\n <div\n key={r.actionId}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '6px 0',\n fontSize: '0.8rem',\n color:\n r.status === 'success' ? tokens.success : tokens.error,\n }}\n >\n <span>\n {r.status === 'success' ? '\\u2713' : '\\u2717'}\n </span>\n <span>{r.type.replace(/_/g, ' ')}</span>\n </div>\n ))}\n </div>\n )}\n\n {(error || authExecutor.error || polling.error) && (\n <div\n style={{ ...errorStyle, marginTop: '16px', textAlign: 'left' }}\n >\n {error || authExecutor.error || polling.error}\n </div>\n )}\n </div>\n </div>\n );\n }\n\n // ── Step: Complete ───────────────────────────────────────────────\n\n if (step === 'complete') {\n const succeeded = transfer?.status === 'COMPLETED';\n\n return (\n <div style={cardStyle}>\n <div style={{ textAlign: 'center' }}>\n <div\n style={{\n width: 56,\n height: 56,\n borderRadius: '50%',\n background: succeeded\n ? tokens.success + '20'\n : tokens.error + '20',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n margin: '0 auto 16px',\n }}\n >\n {succeeded ? (\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\"\n fill={tokens.success}\n />\n </svg>\n ) : (\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M18.3 5.71L12 12.01 5.7 5.71 4.29 7.12l6.3 6.3-6.3 6.29 1.41 1.41 6.3-6.29 6.29 6.29 1.41-1.41-6.29-6.29 6.29-6.3-1.41-1.41z\"\n fill={tokens.error}\n />\n </svg>\n )}\n </div>\n\n <h2\n style={{\n ...headingStyle,\n marginBottom: '8px',\n color: succeeded ? tokens.success : tokens.error,\n }}\n >\n {succeeded ? 'Payment Complete' : 'Payment Failed'}\n </h2>\n\n {transfer && (\n <div\n style={{\n fontSize: '0.825rem',\n color: tokens.textSecondary,\n margin: '0 0 24px 0',\n padding: '14px',\n background: tokens.bgInput,\n borderRadius: tokens.radius,\n textAlign: 'left',\n lineHeight: 1.8,\n }}\n >\n <div\n style={{ display: 'flex', justifyContent: 'space-between' }}\n >\n <span>Amount</span>\n <span style={{ fontWeight: 600, color: tokens.text }}>\n ${transfer.amount?.amount?.toFixed(2)}{' '}\n {transfer.amount?.currency}\n </span>\n </div>\n <div\n style={{ display: 'flex', justifyContent: 'space-between' }}\n >\n <span>Status</span>\n <span\n style={{\n fontWeight: 600,\n color: succeeded ? tokens.success : tokens.error,\n }}\n >\n {transfer.status}\n </span>\n </div>\n <div\n style={{ display: 'flex', justifyContent: 'space-between' }}\n >\n <span>Transfer ID</span>\n <span\n style={{\n fontFamily: '\"SF Mono\", \"Fira Code\", monospace',\n fontSize: '0.75rem',\n }}\n >\n {transfer.id.slice(0, 8)}...\n </span>\n </div>\n </div>\n )}\n\n {error && (\n <div style={{ ...errorStyle, textAlign: 'left' }}>{error}</div>\n )}\n\n <button style={btnPrimary} onClick={handleNewPayment}>\n {succeeded ? 'Make Another Payment' : 'Try Again'}\n </button>\n </div>\n </div>\n );\n }\n\n // Fallback\n return null;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/theme.ts","../src/context.tsx","../src/api.ts","../src/hooks.ts","../src/components/Spinner.tsx","../src/components/ProviderCard.tsx","../src/components/AccountDropdown.tsx","../src/components/AdvancedSettings.tsx","../src/components/AllowanceSelector.tsx","../src/SwypePayment.tsx"],"names":["mainnet","base","arbitrum","http","useState","useRef","useCallback","hexChainId","selection","jsx","jsxs","useEffect","usePrivy"],"mappings":"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","file":"index.js","sourcesContent":["// ── Swype React SDK Theme Tokens ───────────────────────────────────────\nimport type { ThemeMode } from './types';\n\nexport interface ThemeTokens {\n // Surfaces\n bg: string;\n bgCard: string;\n bgInput: string;\n bgHover: string;\n bgOverlay: string;\n\n // Text\n text: string;\n textSecondary: string;\n textMuted: string;\n textInverse: string;\n\n // Borders\n border: string;\n borderFocus: string;\n\n // Accent\n accent: string;\n accentHover: string;\n accentText: string;\n\n // Semantic\n success: string;\n successBg: string;\n error: string;\n errorBg: string;\n\n // Shadows\n shadow: string;\n shadowLg: string;\n\n // Radius\n radius: string;\n radiusLg: string;\n}\n\nexport const darkTheme: ThemeTokens = {\n bg: '#0a0a0a',\n bgCard: '#141414',\n bgInput: '#1e1e1e',\n bgHover: '#252525',\n bgOverlay: 'rgba(0, 0, 0, 0.6)',\n\n text: '#f5f5f5',\n textSecondary: '#a1a1aa',\n textMuted: '#71717a',\n textInverse: '#09090b',\n\n border: '#27272a',\n borderFocus: '#3b82f6',\n\n accent: '#3b82f6',\n accentHover: '#2563eb',\n accentText: '#ffffff',\n\n success: '#22c55e',\n successBg: '#052e16',\n error: '#ef4444',\n errorBg: '#450a0a',\n\n shadow: '0 1px 3px rgba(0,0,0,0.4)',\n shadowLg: '0 8px 32px rgba(0,0,0,0.5)',\n\n radius: '10px',\n radiusLg: '16px',\n};\n\nexport const lightTheme: ThemeTokens = {\n bg: '#f8fafc',\n bgCard: '#ffffff',\n bgInput: '#f1f5f9',\n bgHover: '#e2e8f0',\n bgOverlay: 'rgba(0, 0, 0, 0.3)',\n\n text: '#0f172a',\n textSecondary: '#475569',\n textMuted: '#94a3b8',\n textInverse: '#ffffff',\n\n border: '#e2e8f0',\n borderFocus: '#3b82f6',\n\n accent: '#3b82f6',\n accentHover: '#2563eb',\n accentText: '#ffffff',\n\n success: '#16a34a',\n successBg: '#f0fdf4',\n error: '#dc2626',\n errorBg: '#fef2f2',\n\n shadow: '0 1px 3px rgba(0,0,0,0.08)',\n shadowLg: '0 8px 32px rgba(0,0,0,0.12)',\n\n radius: '10px',\n radiusLg: '16px',\n};\n\nexport function getTheme(mode: ThemeMode): ThemeTokens {\n return mode === 'dark' ? darkTheme : lightTheme;\n}\n","// ── Swype React SDK Context & Provider ─────────────────────────────────\nimport { createContext, useCallback, useContext, useMemo, useRef, useState } from 'react';\nimport { PrivyProvider } from '@privy-io/react-auth';\nimport { WagmiProvider, createConfig, http } from 'wagmi';\nimport { mainnet, arbitrum, base } from 'wagmi/chains';\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport type { ThemeMode } from './types';\nimport { getTheme, type ThemeTokens } from './theme';\n\n// ── Swype-owned Privy credentials ─────────────────────────────────────\n// These are internal to the SDK. Integrators never need to know about them.\n\n/** Swype's Privy App ID — all SDK users authenticate against this app. */\nconst SWYPE_PRIVY_APP_ID = 'cmlil87uv004n0ck0blwumwek';\n\n/**\n * Session isolation: Because the SDK uses Swype's own `appId` (distinct\n * from any integrator's `appId`), Privy automatically scopes storage\n * per app. If additional scoping within the same `appId` is ever needed,\n * create an App Client in the Privy dashboard and set `clientId` here.\n */\n\n// ── Default wagmi config ──────────────────────────────────────────────\n// Created once at module level so it's shared across all SwypeProvider\n// instances (there should only ever be one, but this is safe either way).\n\nconst wagmiConfig = createConfig({\n chains: [mainnet, arbitrum, base],\n transports: {\n [mainnet.id]: http(),\n [arbitrum.id]: http(),\n [base.id]: http(),\n },\n});\n\n// ── Swype SDK context ─────────────────────────────────────────────────\n\nexport interface SwypeConfig {\n apiBaseUrl: string;\n theme: ThemeMode;\n tokens: ThemeTokens;\n /** Pre-set deposit amount (controlled by host app via useSwypeDepositAmount) */\n depositAmount: number | null;\n /** Update the deposit amount from a host-app component */\n setDepositAmount: (amount: number | null) => void;\n}\n\nconst SwypeContext = createContext<SwypeConfig | null>(null);\n\nexport interface SwypeProviderProps {\n /** Base URL for the Swype API (e.g. \"http://localhost:3000\") */\n apiBaseUrl: string;\n /** Light or dark mode */\n theme?: ThemeMode;\n children: React.ReactNode;\n}\n\n/**\n * Provides Swype SDK configuration and all required infrastructure\n * (Privy auth, wagmi, React Query) to child components.\n *\n * Must wrap any `<SwypePayment>` usage. The integrator does **not** need\n * to set up Privy, wagmi, or React Query — this provider handles it all.\n *\n * @example\n * ```tsx\n * <SwypeProvider apiBaseUrl=\"https://api.swype.com\">\n * <SwypePayment destination={dest} onComplete={handler} />\n * </SwypeProvider>\n * ```\n */\nexport function SwypeProvider({\n apiBaseUrl,\n theme = 'dark',\n children,\n}: SwypeProviderProps) {\n // Stable QueryClient across re-renders (created once per provider mount)\n const queryClientRef = useRef<QueryClient | null>(null);\n if (!queryClientRef.current) {\n queryClientRef.current = new QueryClient();\n }\n\n // Deposit amount state — host apps set this via useSwypeDepositAmount()\n const [depositAmount, setDepositAmountRaw] = useState<number | null>(null);\n\n const setDepositAmount = useCallback((amount: number | null) => {\n setDepositAmountRaw(amount);\n }, []);\n\n const value = useMemo<SwypeConfig>(\n () => ({\n apiBaseUrl,\n theme,\n tokens: getTheme(theme),\n depositAmount,\n setDepositAmount,\n }),\n [apiBaseUrl, theme, depositAmount, setDepositAmount],\n );\n\n return (\n <QueryClientProvider client={queryClientRef.current}>\n <WagmiProvider config={wagmiConfig}>\n <PrivyProvider\n appId={SWYPE_PRIVY_APP_ID}\n config={{\n appearance: {\n theme,\n },\n }}\n >\n <SwypeContext.Provider value={value}>\n {children}\n </SwypeContext.Provider>\n </PrivyProvider>\n </WagmiProvider>\n </QueryClientProvider>\n );\n}\n\n/** Access the Swype SDK configuration. Throws if used outside SwypeProvider. */\nexport function useSwypeConfig(): SwypeConfig {\n const ctx = useContext(SwypeContext);\n if (!ctx) {\n throw new Error('useSwypeConfig must be used within a <SwypeProvider>');\n }\n return ctx;\n}\n\n/**\n * Hook for host apps to pre-set the deposit amount before showing the\n * payment widget. When set, the amount field in SwypePayment is\n * auto-populated.\n *\n * @example\n * ```tsx\n * function ProductPage() {\n * const { setAmount } = useSwypeDepositAmount();\n * useEffect(() => { setAmount(25.00); }, []);\n * return <SwypePayment destination={dest} />;\n * }\n * ```\n */\nexport function useSwypeDepositAmount() {\n const ctx = useContext(SwypeContext);\n if (!ctx) {\n throw new Error(\n 'useSwypeDepositAmount must be used within a <SwypeProvider>',\n );\n }\n return {\n /** Current deposit amount, or null if not set */\n amount: ctx.depositAmount,\n /** Set the deposit amount (pass null to clear) */\n setAmount: ctx.setDepositAmount,\n };\n}\n","// ── Swype React SDK API Client ─────────────────────────────────────────\nimport type {\n Provider,\n Chain,\n Account,\n Transfer,\n AuthorizationSessionDetail,\n ErrorResponse,\n ListResponse,\n SourceType,\n Destination,\n} from './types';\n\n/** Throw a descriptive error from an API response */\nasync function throwApiError(res: Response): Promise<never> {\n const body = (await res.json().catch(() => null)) as\n | (ErrorResponse & { error?: ErrorResponse })\n | null;\n const detail = body?.error ?? body;\n const msg = detail?.message ?? res.statusText;\n const code = detail?.code ?? String(res.status);\n throw new Error(`${res.status} — ${code}: ${msg}`);\n}\n\n// ── Providers ──────────────────────────────────────────────────────────\n\nexport async function fetchProviders(\n apiBaseUrl: string,\n token: string,\n): Promise<Provider[]> {\n const res = await fetch(`${apiBaseUrl}/v1/providers`, {\n headers: { Authorization: `Bearer ${token}` },\n });\n if (!res.ok) await throwApiError(res);\n const data = (await res.json()) as ListResponse<Provider>;\n return data.items;\n}\n\n// ── Chains ─────────────────────────────────────────────────────────────\n\nexport async function fetchChains(\n apiBaseUrl: string,\n token: string,\n): Promise<Chain[]> {\n const res = await fetch(`${apiBaseUrl}/v1/chains`, {\n headers: { Authorization: `Bearer ${token}` },\n });\n if (!res.ok) await throwApiError(res);\n const data = (await res.json()) as ListResponse<Chain>;\n return data.items;\n}\n\n// ── Accounts ───────────────────────────────────────────────────────────\n\nexport async function fetchAccounts(\n apiBaseUrl: string,\n token: string,\n): Promise<Account[]> {\n const res = await fetch(`${apiBaseUrl}/v1/accounts`, {\n headers: { Authorization: `Bearer ${token}` },\n });\n if (!res.ok) await throwApiError(res);\n const data = (await res.json()) as ListResponse<Account>;\n return data.items;\n}\n\n// ── Transfers ──────────────────────────────────────────────────────────\n\nexport interface CreateTransferParams {\n sourceType: SourceType;\n sourceId: string;\n destination: Destination;\n amount: number;\n currency?: string;\n}\n\nexport async function createTransfer(\n apiBaseUrl: string,\n token: string,\n params: CreateTransferParams,\n): Promise<Transfer> {\n const body = {\n id: crypto.randomUUID(),\n sources: [{ [params.sourceType]: params.sourceId }],\n destinations: [\n {\n chainId: params.destination.chainId,\n token: { symbol: params.destination.token.symbol },\n address: params.destination.address,\n },\n ],\n amount: {\n amount: params.amount,\n currency: params.currency ?? 'USD',\n },\n };\n\n const res = await fetch(`${apiBaseUrl}/v1/transfers`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify(body),\n });\n\n if (!res.ok) await throwApiError(res);\n return (await res.json()) as Transfer;\n}\n\nexport async function fetchTransfer(\n apiBaseUrl: string,\n token: string,\n transferId: string,\n): Promise<Transfer> {\n const res = await fetch(`${apiBaseUrl}/v1/transfers/${transferId}`, {\n headers: { Authorization: `Bearer ${token}` },\n });\n if (!res.ok) await throwApiError(res);\n return (await res.json()) as Transfer;\n}\n\n// ── Authorization Sessions & Actions ───────────────────────────────────\n\nexport async function fetchAuthorizationSession(\n apiBaseUrl: string,\n sessionId: string,\n): Promise<AuthorizationSessionDetail> {\n // This endpoint is unauthenticated\n const res = await fetch(\n `${apiBaseUrl}/v1/authorization-sessions/${sessionId}`,\n );\n if (!res.ok) await throwApiError(res);\n return (await res.json()) as AuthorizationSessionDetail;\n}\n\n// ── User Config ─────────────────────────────────────────────────────────\n\nexport async function updateUserConfig(\n apiBaseUrl: string,\n token: string,\n config: { defaultAllowance: number },\n): Promise<void> {\n const res = await fetch(`${apiBaseUrl}/v1/users`, {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify({ config }),\n });\n if (!res.ok) await throwApiError(res);\n}\n\n// ── User Config via Session ─────────────────────────────────────────────\n\n/**\n * Updates the user's default allowance, authenticated by session ID.\n * PATCH /v1/authorization-sessions/{id}/user-config\n *\n * This does not require a bearer token — the session ID itself serves\n * as proof of authorization.\n */\nexport async function updateUserConfigBySession(\n apiBaseUrl: string,\n sessionId: string,\n config: { defaultAllowance: number },\n): Promise<void> {\n const res = await fetch(\n `${apiBaseUrl}/v1/authorization-sessions/${sessionId}/user-config`,\n {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ config }),\n },\n );\n if (!res.ok) await throwApiError(res);\n}\n\nexport async function reportActionCompletion(\n apiBaseUrl: string,\n actionId: string,\n result: Record<string, unknown>,\n): Promise<AuthorizationSessionDetail> {\n const res = await fetch(\n `${apiBaseUrl}/v1/authorization-actions/${actionId}`,\n {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ status: 'COMPLETED', result }),\n },\n );\n if (!res.ok) await throwApiError(res);\n return (await res.json()) as AuthorizationSessionDetail;\n}\n","// ── Swype React SDK Hooks ──────────────────────────────────────────────\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useAccount, useConnect, useSwitchChain, useSignTypedData, useWalletClient } from 'wagmi';\nimport { usePrivy } from '@privy-io/react-auth';\nimport { createPublicClient, http, type Chain, type PublicClient } from 'viem';\nimport { mainnet, base, arbitrum } from 'viem/chains';\n\nimport type {\n AuthorizationAction,\n AuthorizationSessionDetail,\n ActionExecutionResult,\n Transfer,\n SourceSelection,\n AllowanceSelection,\n} from './types';\nimport * as api from './api';\nimport { useSwypeConfig } from './context';\n\n// Re-export useSwypeConfig for convenience\nexport { useSwypeConfig } from './context';\n\n// ── Chain-aware public client ───────────────────────────────────────────\n//\n// The wagmi `usePublicClient()` hook returns a client for the wallet's\n// *current* chain, but React state updates are asynchronous. After\n// `switchChainAsync()`, the hook value is stale until the next render,\n// causing on-chain reads to hit the wrong network (and returning \"0x\"\n// for contracts that only exist on the target chain).\n//\n// This helper creates a viem PublicClient for a specific numeric chain\n// ID, bypassing wagmi state entirely so reads always go to the correct\n// chain.\n\nconst VIEM_CHAINS: Record<number, Chain> = {\n 1: mainnet,\n 8453: base,\n 42161: arbitrum,\n};\n\nconst chainClientCache = new Map<number, PublicClient>();\n\n/**\n * Returns a viem PublicClient for the given numeric EVM chain ID.\n * Clients are cached so repeated calls for the same chain reuse the\n * same instance.\n */\nfunction getPublicClientForChain(numericChainId: number): PublicClient {\n const existing = chainClientCache.get(numericChainId);\n if (existing) return existing;\n\n const viemChain = VIEM_CHAINS[numericChainId];\n if (!viemChain) {\n throw new Error(`Unsupported chain ID: ${numericChainId}`);\n }\n\n const client = createPublicClient({\n chain: viemChain,\n transport: http(),\n });\n\n chainClientCache.set(numericChainId, client as PublicClient);\n return client as PublicClient;\n}\n\n// ── Transfer polling ───────────────────────────────────────────────────\n\nexport interface UseTransferPollingResult {\n transfer: Transfer | null;\n error: string | null;\n isPolling: boolean;\n startPolling: (transferId: string) => void;\n stopPolling: () => void;\n}\n\n/**\n * Polls GET /v1/transfers/{id} every `intervalMs` until status is\n * COMPLETED or FAILED.\n */\nexport function useTransferPolling(intervalMs = 3000): UseTransferPollingResult {\n const { apiBaseUrl } = useSwypeConfig();\n const { getAccessToken } = usePrivy();\n const [transfer, setTransfer] = useState<Transfer | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [isPolling, setIsPolling] = useState(false);\n const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const transferIdRef = useRef<string | null>(null);\n\n const stopPolling = useCallback(() => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n setIsPolling(false);\n }, []);\n\n const poll = useCallback(async () => {\n if (!transferIdRef.current) return;\n try {\n const token = await getAccessToken();\n if (!token) {\n setError('Could not get access token');\n stopPolling();\n return;\n }\n const t = await api.fetchTransfer(apiBaseUrl, token, transferIdRef.current);\n setTransfer(t);\n\n if (t.status === 'COMPLETED' || t.status === 'FAILED') {\n stopPolling();\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Polling error');\n stopPolling();\n }\n }, [apiBaseUrl, getAccessToken, stopPolling]);\n\n const startPolling = useCallback(\n (transferId: string) => {\n stopPolling();\n transferIdRef.current = transferId;\n setIsPolling(true);\n setError(null);\n // Fire immediately, then repeat\n poll();\n intervalRef.current = setInterval(poll, intervalMs);\n },\n [poll, intervalMs, stopPolling],\n );\n\n // Cleanup on unmount\n useEffect(() => () => stopPolling(), [stopPolling]);\n\n return { transfer, error, isPolling, startPolling, stopPolling };\n}\n\n// ── Authorization executor ─────────────────────────────────────────────\n\nexport interface UseAuthorizationExecutorResult {\n executing: boolean;\n results: ActionExecutionResult[];\n error: string | null;\n /** The SELECT_SOURCE action when paused for user selection, null otherwise. */\n pendingSelectSource: AuthorizationAction | null;\n /** Call this from the UI to provide the user's chain+token choice. */\n resolveSelectSource: (selection: SourceSelection) => void;\n /** The SIGN_PERMIT2 action when paused for allowance selection, null otherwise. */\n pendingAllowanceSelection: AuthorizationAction | null;\n /** Call this from the UI to provide the user's top-up allowance choice. */\n resolveAllowanceSelection: (selection: AllowanceSelection) => void;\n executeSession: (transfer: Transfer) => Promise<void>;\n}\n\n/**\n * Executes the full authorization flow for a transfer's first session:\n * fetches the session, walks through PENDING actions (OPEN_PROVIDER,\n * SELECT_SOURCE, SWITCH_CHAIN, APPROVE_PERMIT_2, SIGN_PERMIT2), reports\n * each completion to the server, and chains new actions that appear.\n *\n * When a SELECT_SOURCE action is encountered, the executor pauses and\n * exposes the action via `pendingSelectSource`. The UI should display\n * a chain+token selector and call `resolveSelectSource()` with the\n * user's choice. The executor then resumes automatically.\n */\nexport function useAuthorizationExecutor(): UseAuthorizationExecutorResult {\n const { apiBaseUrl } = useSwypeConfig();\n const { address, chainId: currentChainId, isConnected } = useAccount();\n const { connectAsync, connectors } = useConnect();\n const { switchChainAsync } = useSwitchChain();\n const { signTypedDataAsync } = useSignTypedData();\n const { data: walletClient } = useWalletClient();\n\n const [executing, setExecuting] = useState(false);\n const [results, setResults] = useState<ActionExecutionResult[]>([]);\n const [error, setError] = useState<string | null>(null);\n const executingRef = useRef(false);\n\n // SELECT_SOURCE pause mechanism\n const [pendingSelectSource, setPendingSelectSource] = useState<AuthorizationAction | null>(null);\n const selectSourceResolverRef = useRef<((selection: SourceSelection) => void) | null>(null);\n\n const resolveSelectSource = useCallback((selection: SourceSelection) => {\n if (selectSourceResolverRef.current) {\n selectSourceResolverRef.current(selection);\n selectSourceResolverRef.current = null;\n setPendingSelectSource(null);\n }\n }, []);\n\n // SIGN_PERMIT2 allowance selection pause mechanism\n const [pendingAllowanceSelection, setPendingAllowanceSelection] = useState<AuthorizationAction | null>(null);\n const allowanceSelectionResolverRef = useRef<((selection: AllowanceSelection) => void) | null>(null);\n // Track the session ID so we can persist the user's preference via\n // the session-scoped user-config endpoint.\n const sessionIdRef = useRef<string | null>(null);\n\n const resolveAllowanceSelection = useCallback((selection: AllowanceSelection) => {\n if (allowanceSelectionResolverRef.current) {\n allowanceSelectionResolverRef.current(selection);\n allowanceSelectionResolverRef.current = null;\n setPendingAllowanceSelection(null);\n }\n }, []);\n\n // ── Individual action executors ────────────────────────────────────\n\n const executeOpenProvider = useCallback(\n async (action: AuthorizationAction): Promise<ActionExecutionResult> => {\n try {\n if (isConnected && address) {\n const hexChainId = currentChainId\n ? `0x${currentChainId.toString(16)}`\n : undefined;\n return {\n actionId: action.id,\n type: action.type,\n status: 'success',\n message: `Connected. Account: ${address}, Chain: ${hexChainId}`,\n data: { accounts: [address], chainId: hexChainId },\n };\n }\n\n // Use the connector specified by the server (matches the user's chosen provider)\n const targetId = action.metadata?.wagmiConnectorId as string | undefined;\n const connector = targetId\n ? connectors.find((c) => c.id === targetId) ?? connectors[0]\n : connectors[0];\n\n if (!connector) {\n return {\n actionId: action.id,\n type: action.type,\n status: 'error',\n message: 'No wallet connector found. Please install a supported wallet.',\n };\n }\n\n const result = await connectAsync({ connector });\n const hexChainId = `0x${result.chainId.toString(16)}`;\n return {\n actionId: action.id,\n type: action.type,\n status: 'success',\n message: `Connected to ${connector.name}. Account: ${result.accounts[0]}, Chain: ${hexChainId}`,\n data: { accounts: [...result.accounts], chainId: hexChainId },\n };\n } catch (err) {\n return {\n actionId: action.id,\n type: action.type,\n status: 'error',\n message: err instanceof Error ? err.message : 'Failed to connect wallet',\n };\n }\n },\n [isConnected, address, currentChainId, connectors, connectAsync],\n );\n\n /**\n * Pauses execution and waits for the user to pick a chain+token.\n * Returns a result containing the user's selection.\n */\n const executeSelectSource = useCallback(\n async (action: AuthorizationAction): Promise<ActionExecutionResult> => {\n try {\n const options = action.metadata?.options as Array<{\n chainName: string;\n chainId: string;\n tokenSymbol: string;\n tokenAddress: string;\n decimals: number;\n rawBalance: string;\n }> | undefined;\n\n const recommended = action.metadata?.recommended as {\n chainName: string;\n tokenSymbol: string;\n } | undefined;\n\n // If there are no options or only one, auto-select recommended.\n if (!options || options.length <= 1) {\n const selection = recommended ?? { chainName: 'Base', tokenSymbol: 'USDC' };\n return {\n actionId: action.id,\n type: action.type,\n status: 'success',\n message: `Auto-selected ${selection.tokenSymbol} on ${selection.chainName}.`,\n data: {\n selectedChainName: selection.chainName,\n selectedTokenSymbol: selection.tokenSymbol,\n },\n };\n }\n\n // Pause and wait for the user to make a selection.\n const selection = await new Promise<SourceSelection>((resolve) => {\n selectSourceResolverRef.current = resolve;\n setPendingSelectSource(action);\n });\n\n return {\n actionId: action.id,\n type: action.type,\n status: 'success',\n message: `Selected ${selection.tokenSymbol} on ${selection.chainName}.`,\n data: {\n selectedChainName: selection.chainName,\n selectedTokenSymbol: selection.tokenSymbol,\n },\n };\n } catch (err) {\n return {\n actionId: action.id,\n type: action.type,\n status: 'error',\n message: err instanceof Error ? err.message : 'Failed to select source',\n };\n }\n },\n [],\n );\n\n const executeSwitchChain = useCallback(\n async (action: AuthorizationAction): Promise<ActionExecutionResult> => {\n try {\n const targetChainIdHex = action.metadata?.targetChainId as string | undefined;\n if (!targetChainIdHex) {\n return {\n actionId: action.id,\n type: action.type,\n status: 'error',\n message: 'No targetChainId in action metadata.',\n };\n }\n const targetChainIdNum = parseInt(targetChainIdHex, 16);\n const hexChainId = `0x${targetChainIdNum.toString(16)}`;\n\n // Skip if the wallet is already on the target chain.\n if (currentChainId === targetChainIdNum) {\n return {\n actionId: action.id,\n type: action.type,\n status: 'success',\n message: `Already on chain ${hexChainId}. Skipped.`,\n data: { chainId: hexChainId, switched: false },\n };\n }\n\n await switchChainAsync({ chainId: targetChainIdNum });\n return {\n actionId: action.id,\n type: action.type,\n status: 'success',\n message: `Switched to chain ${hexChainId}.`,\n data: { chainId: hexChainId, switched: true },\n };\n } catch (err) {\n return {\n actionId: action.id,\n type: action.type,\n status: 'error',\n message: err instanceof Error ? err.message : 'Failed to switch chain',\n };\n }\n },\n [currentChainId, switchChainAsync],\n );\n\n const executeApprovePermit2 = useCallback(\n async (action: AuthorizationAction): Promise<ActionExecutionResult> => {\n try {\n const tokenAddress = action.metadata?.tokenAddress as `0x${string}` | undefined;\n const permit2Address = action.metadata?.permit2Address as `0x${string}` | undefined;\n const metadataChainId = action.metadata?.chainId as string | undefined;\n\n if (!tokenAddress || !permit2Address) {\n return {\n actionId: action.id,\n type: action.type,\n status: 'error',\n message: 'Missing tokenAddress or permit2Address in action metadata.',\n };\n }\n if (!address) {\n return {\n actionId: action.id,\n type: action.type,\n status: 'error',\n message: 'Wallet not connected.',\n };\n }\n\n const ERC20_ABI = [\n {\n name: 'allowance',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'owner', type: 'address' },\n { name: 'spender', type: 'address' },\n ],\n outputs: [{ name: '', type: 'uint256' }],\n },\n {\n name: 'approve',\n type: 'function',\n stateMutability: 'nonpayable',\n inputs: [\n { name: 'spender', type: 'address' },\n { name: 'amount', type: 'uint256' },\n ],\n outputs: [{ name: '', type: 'bool' }],\n },\n ] as const;\n\n // Build a chain-aware public client from action metadata so we\n // always query the correct network, even if wagmi's React state\n // hasn't re-rendered yet after SWITCH_CHAIN.\n const targetChainIdNum = metadataChainId\n ? parseInt(metadataChainId, 16)\n : currentChainId;\n\n const chainClient = targetChainIdNum\n ? getPublicClientForChain(targetChainIdNum)\n : undefined;\n\n // Check current on-chain ERC-20 allowance (source of truth).\n // If the user previously approved but later revoked, this will\n // return 0 and we'll re-approve — making the step safely repeatable.\n if (chainClient) {\n try {\n const currentAllowance = await chainClient.readContract({\n address: tokenAddress,\n abi: ERC20_ABI,\n functionName: 'allowance',\n args: [address, permit2Address],\n });\n if (currentAllowance > 0n) {\n return {\n actionId: action.id,\n type: action.type,\n status: 'success',\n message: `Permit2 already approved (allowance: ${currentAllowance.toString()}). Skipped.`,\n data: { skipped: true, existingAllowance: currentAllowance.toString() },\n };\n }\n } catch {\n // If the on-chain check fails (e.g. RPC error), fall through\n // to sending the approve transaction rather than blocking.\n }\n }\n\n if (!walletClient) {\n return {\n actionId: action.id,\n type: action.type,\n status: 'error',\n message: 'Wallet client not available.',\n };\n }\n\n const MAX_UINT256 = 2n ** 256n - 1n;\n const txHash = await walletClient.writeContract({\n address: tokenAddress,\n abi: ERC20_ABI,\n functionName: 'approve',\n args: [permit2Address, MAX_UINT256],\n });\n\n if (chainClient) {\n await chainClient.waitForTransactionReceipt({ hash: txHash });\n }\n\n return {\n actionId: action.id,\n type: action.type,\n status: 'success',\n message: `Permit2 approved. Tx: ${txHash}`,\n data: { txHash, approved: true },\n };\n } catch (err) {\n return {\n actionId: action.id,\n type: action.type,\n status: 'error',\n message: err instanceof Error ? err.message : 'Failed to approve Permit2',\n };\n }\n },\n [address, currentChainId, walletClient],\n );\n\n const executeSignPermit2 = useCallback(\n async (action: AuthorizationAction): Promise<ActionExecutionResult> => {\n try {\n const PERMIT2_ADDRESS = '0x000000000022D473030F116dDEE9F6B43aC78BA3' as const;\n\n const PERMIT2_ALLOWANCE_ABI = [\n {\n name: 'allowance',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'owner', type: 'address' },\n { name: 'token', type: 'address' },\n { name: 'spender', type: 'address' },\n ],\n outputs: [\n { name: 'amount', type: 'uint160' },\n { name: 'expiration', type: 'uint48' },\n { name: 'nonce', type: 'uint48' },\n ],\n },\n ] as const;\n\n const spenderAddress = action.metadata?.spenderAddress as `0x${string}` | undefined;\n const tokenAddress = action.metadata?.tokenAddress as `0x${string}` | undefined;\n const metadataChainId = action.metadata?.chainId as string | undefined;\n const metadataAmount = action.metadata?.amount as string | null | undefined;\n\n if (!spenderAddress || !tokenAddress) {\n return {\n actionId: action.id,\n type: action.type,\n status: 'error',\n message: 'Missing spenderAddress or tokenAddress in action metadata.',\n };\n }\n\n // Build a chain-aware public client so on-chain reads go to the\n // correct network regardless of wagmi React state timing.\n const permit2ChainId = metadataChainId\n ? parseInt(metadataChainId, 16)\n : currentChainId;\n\n const chainClient = permit2ChainId\n ? getPublicClientForChain(permit2ChainId)\n : undefined;\n\n // Read the current on-chain Permit2 allowance (source of truth).\n // This serves two purposes:\n // 1. Skip signing if the existing allowance already covers the transfer.\n // 2. Read the fresh nonce so the signature uses the correct value,\n // even if the server-supplied nonce in metadata is stale.\n let onChainNonce: number | undefined;\n\n if (chainClient && address) {\n try {\n const [existingAmount, existingExpiration, chainNonce] = await chainClient.readContract({\n address: PERMIT2_ADDRESS,\n abi: PERMIT2_ALLOWANCE_ABI,\n functionName: 'allowance',\n args: [address, tokenAddress, spenderAddress],\n });\n\n onChainNonce = chainNonce;\n\n if (metadataAmount) {\n const requiredSmallestUnit = BigInt(metadataAmount);\n const now = Math.floor(Date.now() / 1000);\n\n if (\n existingAmount >= requiredSmallestUnit &&\n existingExpiration > now\n ) {\n return {\n actionId: action.id,\n type: action.type,\n status: 'success',\n message: `Permit2 allowance already sufficient (${existingAmount.toString()}). Skipped.`,\n data: { skipped: true, existingAllowance: existingAmount.toString() },\n };\n }\n }\n } catch {\n // If the on-chain check fails, fall through to signing\n // using the server-supplied nonce as a fallback.\n }\n }\n\n // Pause and wait for the user to select a top-up allowance.\n // The UI shows the transfer amount and preset options so the user\n // can pre-authorize future payments without re-signing.\n const allowanceSelection = await new Promise<AllowanceSelection>((resolve) => {\n allowanceSelectionResolverRef.current = resolve;\n setPendingAllowanceSelection(action);\n });\n\n // Persist the user's preference via the session-scoped endpoint\n // so future transfers use the same default.\n if (allowanceSelection.topUpAmount > 0 && sessionIdRef.current) {\n try {\n await api.updateUserConfigBySession(\n apiBaseUrl,\n sessionIdRef.current,\n { defaultAllowance: allowanceSelection.topUpAmount },\n );\n } catch {\n // Non-critical: if persisting fails, the local override\n // still applies for this signing.\n }\n }\n\n // Compute the final Permit2 allowance: transfer amount + user's top-up.\n const tokenDecimals = Number(action.metadata?.tokenDecimals ?? 6);\n const topUpSmallestUnit = BigInt(\n Math.round(allowanceSelection.topUpAmount * 10 ** tokenDecimals),\n );\n const baseAmount = metadataAmount ? BigInt(metadataAmount) : BigInt(0);\n const permitAmount = baseAmount + topUpSmallestUnit;\n\n // Prefer the fresh on-chain nonce; fall back to server metadata.\n const nonce = onChainNonce ?? Number(action.metadata?.nonce ?? 0);\n const sigDeadline = BigInt(Math.floor(Date.now() / 1000) + 3600);\n const expiration = Math.floor(Date.now() / 1000) + 30 * 24 * 60 * 60;\n\n const signature = await signTypedDataAsync({\n domain: {\n name: 'Permit2',\n chainId: permit2ChainId,\n verifyingContract: PERMIT2_ADDRESS,\n },\n types: {\n PermitSingle: [\n { name: 'details', type: 'PermitDetails' },\n { name: 'spender', type: 'address' },\n { name: 'sigDeadline', type: 'uint256' },\n ],\n PermitDetails: [\n { name: 'token', type: 'address' },\n { name: 'amount', type: 'uint160' },\n { name: 'expiration', type: 'uint48' },\n { name: 'nonce', type: 'uint48' },\n ],\n },\n primaryType: 'PermitSingle',\n message: {\n details: {\n token: tokenAddress,\n amount: permitAmount,\n expiration,\n nonce,\n },\n spender: spenderAddress,\n sigDeadline,\n },\n });\n\n return {\n actionId: action.id,\n type: action.type,\n status: 'success',\n message: 'Permit2 allowance signature obtained.',\n data: {\n signature,\n signer: address,\n nonce: nonce.toString(),\n sigDeadline: sigDeadline.toString(),\n expiration: expiration.toString(),\n amount: permitAmount.toString(),\n },\n };\n } catch (err) {\n return {\n actionId: action.id,\n type: action.type,\n status: 'error',\n message: err instanceof Error ? err.message : 'Failed to sign Permit2',\n };\n }\n },\n [address, currentChainId, signTypedDataAsync, apiBaseUrl],\n );\n\n const executeAction = useCallback(\n async (action: AuthorizationAction): Promise<ActionExecutionResult> => {\n switch (action.type) {\n case 'OPEN_PROVIDER':\n return executeOpenProvider(action);\n case 'SELECT_SOURCE':\n return executeSelectSource(action);\n case 'SWITCH_CHAIN':\n return executeSwitchChain(action);\n case 'APPROVE_PERMIT_2':\n return executeApprovePermit2(action);\n case 'SIGN_PERMIT2':\n return executeSignPermit2(action);\n default:\n return {\n actionId: action.id,\n type: action.type,\n status: 'error',\n message: `Unsupported action type: ${action.type}`,\n };\n }\n },\n [executeOpenProvider, executeSelectSource, executeSwitchChain, executeApprovePermit2, executeSignPermit2],\n );\n\n // ── Main session executor ──────────────────────────────────────────\n\n const executeSession = useCallback(\n async (transfer: Transfer) => {\n // Synchronous guard: prevent concurrent invocations so we never send\n // two wallet signing requests at the same time (wallets reject this).\n if (executingRef.current) return;\n executingRef.current = true;\n\n if (\n !transfer.authorizationSessions ||\n transfer.authorizationSessions.length === 0\n ) {\n setError('No authorization sessions available.');\n executingRef.current = false;\n return;\n }\n\n const sessionId = transfer.authorizationSessions[0].id;\n sessionIdRef.current = sessionId;\n setExecuting(true);\n setError(null);\n setResults([]);\n\n try {\n let currentSession: AuthorizationSessionDetail =\n await api.fetchAuthorizationSession(apiBaseUrl, sessionId);\n\n const allResults: ActionExecutionResult[] = [];\n const completedActionIds = new Set<string>();\n\n let pendingActions = currentSession.actions\n .filter((a) => a.status === 'PENDING')\n .sort((a, b) => a.orderIndex - b.orderIndex);\n\n // Race-condition guard: authorization actions are created\n // asynchronously via a background job. If the session has been\n // created but no actions exist yet, poll until they appear.\n const ACTION_POLL_INTERVAL_MS = 500;\n const ACTION_POLL_MAX_RETRIES = 20; // 10 seconds total\n let actionPollRetries = 0;\n\n while (\n pendingActions.length === 0 &&\n currentSession.status !== 'AUTHORIZED' &&\n actionPollRetries < ACTION_POLL_MAX_RETRIES\n ) {\n await new Promise((r) => setTimeout(r, ACTION_POLL_INTERVAL_MS));\n currentSession = await api.fetchAuthorizationSession(apiBaseUrl, sessionId);\n pendingActions = currentSession.actions\n .filter((a) => a.status === 'PENDING')\n .sort((a, b) => a.orderIndex - b.orderIndex);\n actionPollRetries++;\n }\n\n if (pendingActions.length === 0 && currentSession.status !== 'AUTHORIZED') {\n setError('Authorization actions were not created in time. Please try again.');\n return;\n }\n\n while (pendingActions.length > 0) {\n const action = pendingActions[0];\n if (completedActionIds.has(action.id)) break;\n\n const result = await executeAction(action);\n\n if (result.status === 'error') {\n allResults.push(result);\n setResults([...allResults]);\n setError(result.message);\n break;\n }\n\n completedActionIds.add(action.id);\n\n const updatedSession = await api.reportActionCompletion(\n apiBaseUrl,\n action.id,\n (result.data as Record<string, unknown>) ?? {},\n );\n\n currentSession = updatedSession;\n\n pendingActions = currentSession.actions\n .filter((a) => a.status === 'PENDING' && !completedActionIds.has(a.id))\n .sort((a, b) => a.orderIndex - b.orderIndex);\n\n // Chain remaining actions seamlessly after OPEN_PROVIDER\n if (action.type === 'OPEN_PROVIDER' && pendingActions.length > 0) {\n const chainResults: ActionExecutionResult[] = [result];\n let chainBroken = false;\n\n while (pendingActions.length > 0) {\n const nextAction = pendingActions[0];\n const nextResult = await executeAction(nextAction);\n\n if (nextResult.status === 'error') {\n chainResults.push(nextResult);\n allResults.push(...chainResults);\n setResults([...allResults]);\n setError(nextResult.message);\n chainBroken = true;\n break;\n }\n\n completedActionIds.add(nextAction.id);\n\n const nextSession = await api.reportActionCompletion(\n apiBaseUrl,\n nextAction.id,\n (nextResult.data as Record<string, unknown>) ?? {},\n );\n\n currentSession = nextSession;\n chainResults.push(nextResult);\n\n pendingActions = currentSession.actions\n .filter((a) => a.status === 'PENDING' && !completedActionIds.has(a.id))\n .sort((a, b) => a.orderIndex - b.orderIndex);\n }\n\n if (chainBroken) break;\n allResults.push(...chainResults);\n setResults([...allResults]);\n continue;\n }\n\n allResults.push(result);\n setResults([...allResults]);\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Authorization failed');\n } finally {\n setExecuting(false);\n executingRef.current = false;\n }\n },\n [apiBaseUrl, executeAction],\n );\n\n return {\n executing,\n results,\n error,\n pendingSelectSource,\n resolveSelectSource,\n pendingAllowanceSelection,\n resolveAllowanceSelection,\n executeSession,\n };\n}\n","// ── Animated Spinner ───────────────────────────────────────────────────\nimport { useSwypeConfig } from '../context';\n\ninterface SpinnerProps {\n size?: number;\n label?: string;\n}\n\nexport function Spinner({ size = 40, label }: SpinnerProps) {\n const { tokens } = useSwypeConfig();\n\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '12px',\n }}\n >\n <div\n style={{\n width: size,\n height: size,\n border: `3px solid ${tokens.border}`,\n borderTopColor: tokens.accent,\n borderRadius: '50%',\n animation: 'swype-spin 0.8s linear infinite',\n }}\n />\n {label && (\n <p style={{ color: tokens.textSecondary, fontSize: '0.875rem', margin: 0 }}>\n {label}\n </p>\n )}\n <style>{`\n @keyframes swype-spin {\n to { transform: rotate(360deg); }\n }\n `}</style>\n </div>\n );\n}\n","// ── Provider Selection Card ────────────────────────────────────────────\nimport { useState } from 'react';\nimport type { Provider } from '../types';\nimport { useSwypeConfig } from '../context';\n\ninterface ProviderCardProps {\n provider: Provider;\n selected: boolean;\n onClick: () => void;\n}\n\nexport function ProviderCard({ provider, selected, onClick }: ProviderCardProps) {\n const { tokens } = useSwypeConfig();\n const [hovered, setHovered] = useState(false);\n\n return (\n <button\n onClick={onClick}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n width: '100%',\n padding: '14px 16px',\n background: selected\n ? tokens.accent + '18'\n : hovered\n ? tokens.bgHover\n : tokens.bgInput,\n border: `1.5px solid ${selected ? tokens.accent : tokens.border}`,\n borderRadius: tokens.radius,\n cursor: 'pointer',\n transition: 'all 0.15s ease',\n color: tokens.text,\n fontFamily: 'inherit',\n fontSize: '0.95rem',\n fontWeight: 500,\n textAlign: 'left',\n outline: 'none',\n }}\n >\n {provider.logoURI ? (\n <img\n src={provider.logoURI}\n alt={provider.name}\n style={{\n width: 32,\n height: 32,\n borderRadius: '8px',\n objectFit: 'contain',\n }}\n />\n ) : (\n <div\n style={{\n width: 32,\n height: 32,\n borderRadius: '8px',\n background: tokens.accent + '30',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '0.875rem',\n fontWeight: 700,\n color: tokens.accent,\n flexShrink: 0,\n }}\n >\n {provider.name.charAt(0).toUpperCase()}\n </div>\n )}\n <span>{provider.name}</span>\n {selected && (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n style={{ marginLeft: 'auto', flexShrink: 0 }}\n >\n <path\n d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\"\n fill={tokens.accent}\n />\n </svg>\n )}\n </button>\n );\n}\n","// ── Account & Wallet Dropdown ────────────────────────────────────────\n// Inline selector for switching between user accounts and wallets.\n// Shows the currently selected account name (and wallet chain) with a\n// small chevron. Expands to a dropdown with nested wallet rows on click.\n\nimport { useRef, useState, useEffect } from 'react';\nimport type { Account, Wallet } from '../types';\nimport { useSwypeConfig } from '../context';\n\ninterface AccountDropdownProps {\n accounts: Account[];\n selectedAccountId: string | null;\n onSelect: (accountId: string) => void;\n /** Currently selected wallet ID (for wallet-level selection). */\n selectedWalletId?: string | null;\n /** Called when a specific wallet is selected. Sets both account + wallet. */\n onWalletSelect?: (accountId: string, walletId: string) => void;\n}\n\nexport function AccountDropdown({\n accounts,\n selectedAccountId,\n onSelect,\n selectedWalletId,\n onWalletSelect,\n}: AccountDropdownProps) {\n const { tokens } = useSwypeConfig();\n const [open, setOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const selected = accounts.find((a) => a.id === selectedAccountId);\n\n // Resolve the currently selected wallet for display\n const selectedWallet: Wallet | undefined = selected?.wallets.find(\n (w) => w.id === selectedWalletId,\n );\n\n // Close on outside click\n useEffect(() => {\n if (!open) return;\n const handleClick = (e: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(e.target as Node)\n ) {\n setOpen(false);\n }\n };\n document.addEventListener('mousedown', handleClick);\n return () => document.removeEventListener('mousedown', handleClick);\n }, [open]);\n\n if (accounts.length === 0) return null;\n\n // Determine whether the dropdown has anything useful to show.\n // Show a static label only when there's a single account with 0-1 wallets\n // (nothing to choose from). Otherwise render the full dropdown so the\n // user can pick an account or wallet.\n const hasMultipleChoices =\n accounts.length > 1 ||\n (accounts.length === 1 &&\n onWalletSelect &&\n accounts[0].wallets.filter((w) => w.balance.available.amount > 0).length > 1);\n\n if (!hasMultipleChoices) {\n return (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n fontSize: '0.85rem',\n color: tokens.textSecondary,\n }}\n >\n <span style={{ fontWeight: 500 }}>{accounts[0].name}</span>\n {(selectedWallet ?? accounts[0].wallets[0]) && (\n <span\n style={{\n fontSize: '0.75rem',\n color: tokens.textMuted,\n fontFamily: '\"SF Mono\", \"Fira Code\", monospace',\n }}\n >\n {selectedWallet\n ? `${selectedWallet.chain.name} · ${selectedWallet.name}`\n : accounts[0].wallets[0]?.name}\n </span>\n )}\n </div>\n );\n }\n\n // Aggregate balance display\n const getAccountBalance = (account: Account): string => {\n let total = 0;\n for (const w of account.wallets) {\n total += w.balance.available.amount;\n }\n return total > 0 ? `$${total.toFixed(2)}` : '';\n };\n\n const hasActiveWallet = (account: Account): boolean =>\n account.wallets.some((w) => w.status === 'ACTIVE');\n\n return (\n <div ref={containerRef} style={{ position: 'relative' }}>\n {/* Trigger */}\n <button\n onClick={() => setOpen(!open)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n background: 'transparent',\n border: 'none',\n cursor: 'pointer',\n padding: '4px 0',\n color: tokens.textSecondary,\n fontFamily: 'inherit',\n fontSize: '0.85rem',\n outline: 'none',\n }}\n >\n <span style={{ fontWeight: 500, color: tokens.text }}>\n {selected?.name ?? 'Select account'}\n </span>\n {(selectedWallet ?? selected?.wallets?.[0]) && (\n <span\n style={{\n fontSize: '0.75rem',\n color: tokens.textMuted,\n fontFamily: '\"SF Mono\", \"Fira Code\", monospace',\n }}\n >\n {selectedWallet\n ? `${selectedWallet.chain.name} · ${selectedWallet.name}`\n : selected!.wallets[0].name}\n </span>\n )}\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n style={{\n transform: open ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 0.15s ease',\n flexShrink: 0,\n }}\n >\n <path\n d=\"M7 10l5 5 5-5\"\n stroke={tokens.textMuted}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n\n {/* Dropdown */}\n {open && (\n <div\n style={{\n position: 'absolute',\n top: '100%',\n left: 0,\n right: 0,\n marginTop: '4px',\n background: tokens.bgCard,\n border: `1px solid ${tokens.border}`,\n borderRadius: tokens.radius,\n boxShadow: tokens.shadowLg,\n zIndex: 50,\n overflow: 'hidden',\n minWidth: '220px',\n }}\n >\n {accounts.map((account) => {\n const isAcctSelected = account.id === selectedAccountId;\n const balance = getAccountBalance(account);\n const active = hasActiveWallet(account);\n const walletsWithBalance = account.wallets.filter(\n (w) => w.balance.available.amount > 0,\n );\n const showWallets =\n onWalletSelect && walletsWithBalance.length > 0;\n\n return (\n <div key={account.id}>\n {/* Account header row */}\n <button\n onClick={() => {\n onSelect(account.id);\n if (!showWallets) setOpen(false);\n }}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n padding: '10px 14px',\n background:\n isAcctSelected && !selectedWalletId\n ? tokens.accent + '12'\n : 'transparent',\n border: 'none',\n borderBottom: showWallets\n ? 'none'\n : `1px solid ${tokens.border}`,\n cursor: 'pointer',\n color: tokens.text,\n fontFamily: 'inherit',\n fontSize: '0.85rem',\n textAlign: 'left',\n outline: 'none',\n transition: 'background 0.1s ease',\n }}\n >\n <div style={{ minWidth: 0, flex: 1 }}>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n }}\n >\n <span style={{ fontWeight: 500 }}>\n {account.name}\n </span>\n {active && (\n <span\n style={{\n fontSize: '0.6rem',\n fontWeight: 600,\n color: tokens.success,\n background: tokens.successBg,\n padding: '1px 5px',\n borderRadius: '3px',\n textTransform: 'uppercase',\n letterSpacing: '0.03em',\n }}\n >\n Active\n </span>\n )}\n </div>\n {balance && (\n <div\n style={{\n fontSize: '0.75rem',\n color: tokens.textMuted,\n marginTop: '2px',\n }}\n >\n {balance}\n </div>\n )}\n </div>\n\n {isAcctSelected && !selectedWalletId && (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n style={{ flexShrink: 0, marginLeft: '8px' }}\n >\n <path\n d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\"\n fill={tokens.accent}\n />\n </svg>\n )}\n </button>\n\n {/* Nested wallet rows */}\n {showWallets &&\n walletsWithBalance.map((wallet, wIdx) => {\n const isWalletSelected =\n isAcctSelected && wallet.id === selectedWalletId;\n const walletBal =\n wallet.balance.available.amount > 0\n ? `$${wallet.balance.available.amount.toFixed(2)}`\n : '';\n const isLastWallet =\n wIdx === walletsWithBalance.length - 1;\n\n return (\n <button\n key={wallet.id}\n onClick={() => {\n onWalletSelect(account.id, wallet.id);\n setOpen(false);\n }}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n padding: '8px 14px 8px 28px',\n background: isWalletSelected\n ? tokens.accent + '12'\n : 'transparent',\n border: 'none',\n borderBottom: isLastWallet\n ? `1px solid ${tokens.border}`\n : 'none',\n cursor: 'pointer',\n color: tokens.text,\n fontFamily: 'inherit',\n fontSize: '0.8rem',\n textAlign: 'left',\n outline: 'none',\n transition: 'background 0.1s ease',\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n minWidth: 0,\n flex: 1,\n }}\n >\n <span\n style={{\n fontWeight: 500,\n fontSize: '0.8rem',\n }}\n >\n {wallet.chain.name}\n </span>\n <span\n style={{\n fontSize: '0.7rem',\n color: tokens.textMuted,\n fontFamily:\n '\"SF Mono\", \"Fira Code\", monospace',\n }}\n >\n {wallet.name}\n </span>\n {walletBal && (\n <span\n style={{\n fontSize: '0.7rem',\n color: tokens.textMuted,\n marginLeft: 'auto',\n }}\n >\n {walletBal}\n </span>\n )}\n </div>\n\n {isWalletSelected && (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n style={{\n flexShrink: 0,\n marginLeft: '8px',\n }}\n >\n <path\n d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\"\n fill={tokens.accent}\n />\n </svg>\n )}\n </button>\n );\n })}\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n","// ── Advanced Settings Panel ───────────────────────────────────────────\n// Collapsible panel that lets power users choose asset, chain, or\n// connect a new account. Hidden in basic mode.\n\nimport { useState } from 'react';\nimport type { AdvancedSettings as AdvancedSettingsType, Chain, Provider } from '../types';\nimport { useSwypeConfig } from '../context';\nimport { ProviderCard } from './ProviderCard';\n\n/** Supported stablecoin assets */\nconst ASSETS = ['USDC', 'USDT'] as const;\n\ninterface AdvancedSettingsProps {\n settings: AdvancedSettingsType;\n onChange: (settings: AdvancedSettingsType) => void;\n chains: Chain[];\n providers: Provider[];\n /** When the user picks a provider to connect a new account */\n onConnectNewAccount: (providerId: string) => void;\n /** Whether the \"connect new account\" flow is active */\n connectingNewAccount: boolean;\n}\n\nexport function AdvancedSettings({\n settings,\n onChange,\n chains,\n providers,\n onConnectNewAccount,\n connectingNewAccount,\n}: AdvancedSettingsProps) {\n const { tokens } = useSwypeConfig();\n const [open, setOpen] = useState(false);\n const [showProviders, setShowProviders] = useState(false);\n\n return (\n <div style={{ marginTop: '12px' }}>\n {/* Toggle */}\n <button\n onClick={() => setOpen(!open)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n background: 'transparent',\n border: 'none',\n cursor: 'pointer',\n padding: '4px 0',\n color: tokens.textMuted,\n fontFamily: 'inherit',\n fontSize: '0.8rem',\n fontWeight: 500,\n outline: 'none',\n letterSpacing: '0.02em',\n }}\n >\n <svg\n width=\"10\"\n height=\"10\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n style={{\n transform: open ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 0.15s ease',\n }}\n >\n <path\n d=\"M7 10l5 5 5-5\"\n stroke={tokens.textMuted}\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n Advanced options\n </button>\n\n {/* Panel */}\n {open && (\n <div\n style={{\n marginTop: '10px',\n padding: '14px',\n background: tokens.bgInput,\n borderRadius: tokens.radius,\n border: `1px solid ${tokens.border}`,\n }}\n >\n {/* Asset chips */}\n <div style={{ marginBottom: '14px' }}>\n <label\n style={{\n display: 'block',\n fontSize: '0.7rem',\n fontWeight: 600,\n color: tokens.textMuted,\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n marginBottom: '6px',\n }}\n >\n Asset\n </label>\n <div style={{ display: 'flex', gap: '6px' }}>\n {ASSETS.map((asset) => {\n const isSelected = settings.asset === asset;\n return (\n <button\n key={asset}\n onClick={() =>\n onChange({\n ...settings,\n asset: isSelected ? null : asset,\n })\n }\n style={{\n padding: '6px 14px',\n fontSize: '0.8rem',\n fontWeight: 600,\n fontFamily: 'inherit',\n borderRadius: '6px',\n border: `1.5px solid ${isSelected ? tokens.accent : tokens.border}`,\n background: isSelected\n ? tokens.accent + '18'\n : 'transparent',\n color: isSelected ? tokens.accent : tokens.text,\n cursor: 'pointer',\n outline: 'none',\n transition: 'all 0.12s ease',\n }}\n >\n {asset}\n </button>\n );\n })}\n </div>\n </div>\n\n {/* Chain chips */}\n {chains.length > 0 && (\n <div style={{ marginBottom: '14px' }}>\n <label\n style={{\n display: 'block',\n fontSize: '0.7rem',\n fontWeight: 600,\n color: tokens.textMuted,\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n marginBottom: '6px',\n }}\n >\n Chain\n </label>\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: '6px' }}>\n {chains.map((chain) => {\n const isSelected = settings.chain === chain.name;\n return (\n <button\n key={chain.id}\n onClick={() =>\n onChange({\n ...settings,\n chain: isSelected ? null : chain.name,\n })\n }\n style={{\n padding: '6px 14px',\n fontSize: '0.8rem',\n fontWeight: 600,\n fontFamily: 'inherit',\n borderRadius: '6px',\n border: `1.5px solid ${isSelected ? tokens.accent : tokens.border}`,\n background: isSelected\n ? tokens.accent + '18'\n : 'transparent',\n color: isSelected ? tokens.accent : tokens.text,\n cursor: 'pointer',\n outline: 'none',\n transition: 'all 0.12s ease',\n }}\n >\n {chain.name}\n </button>\n );\n })}\n </div>\n </div>\n )}\n\n {/* Connect new account */}\n <div>\n {!showProviders ? (\n <button\n onClick={() => setShowProviders(true)}\n disabled={connectingNewAccount}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n background: 'transparent',\n border: `1px dashed ${tokens.border}`,\n borderRadius: tokens.radius,\n padding: '10px 14px',\n width: '100%',\n cursor: connectingNewAccount ? 'not-allowed' : 'pointer',\n color: tokens.textSecondary,\n fontFamily: 'inherit',\n fontSize: '0.825rem',\n fontWeight: 500,\n outline: 'none',\n opacity: connectingNewAccount ? 0.5 : 1,\n transition: 'opacity 0.1s ease',\n }}\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <path\n d=\"M12 5v14M5 12h14\"\n stroke={tokens.textMuted}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n Connect new account\n </button>\n ) : (\n <div>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: '8px',\n }}\n >\n <label\n style={{\n fontSize: '0.7rem',\n fontWeight: 600,\n color: tokens.textMuted,\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n }}\n >\n Select provider\n </label>\n <button\n onClick={() => setShowProviders(false)}\n style={{\n background: 'transparent',\n border: 'none',\n cursor: 'pointer',\n color: tokens.textMuted,\n fontSize: '0.75rem',\n fontFamily: 'inherit',\n outline: 'none',\n padding: '2px 4px',\n }}\n >\n Cancel\n </button>\n </div>\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '6px',\n }}\n >\n {providers.map((p) => (\n <ProviderCard\n key={p.id}\n provider={p}\n selected={false}\n onClick={() => {\n onConnectNewAccount(p.id);\n setShowProviders(false);\n }}\n />\n ))}\n </div>\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n","// ── Allowance Selector ────────────────────────────────────────────────\n// Shown during the SIGN_PERMIT2 step so the user can choose how much\n// extra to pre-authorize for future payments. This avoids re-signing\n// Permit2 on every transfer.\n\nimport { useState } from 'react';\nimport type { AuthorizationAction, AllowanceSelection } from '../types';\nimport { useSwypeConfig } from '../context';\n\n/** Preset top-up options (in human-readable USD). */\nconst TOP_UP_OPTIONS = [0, 25, 50, 100, 500] as const;\n\ninterface AllowanceSelectorProps {\n /** The SIGN_PERMIT2 action whose metadata contains the transfer amount. */\n action: AuthorizationAction;\n /** Called when the user confirms their selection. */\n onSelect: (selection: AllowanceSelection) => void;\n}\n\nexport function AllowanceSelector({ action, onSelect }: AllowanceSelectorProps) {\n const { tokens } = useSwypeConfig();\n\n // Parse the transfer amount from action metadata (smallest unit → human).\n const metadataAmount = action.metadata?.amount as string | null | undefined;\n const tokenDecimals = Number(action.metadata?.tokenDecimals ?? 6);\n const currency = (action.metadata?.currency as string | undefined) ?? 'USD';\n\n const transferAmountRaw = metadataAmount\n ? Number(BigInt(metadataAmount)) / 10 ** tokenDecimals\n : 0;\n\n const [selectedTopUp, setSelectedTopUp] = useState<number>(0);\n\n const totalAllowance = transferAmountRaw + selectedTopUp;\n\n const formatAmount = (amount: number): string =>\n `$${amount.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`;\n\n return (\n <div\n style={{\n padding: '4px 0',\n textAlign: 'left',\n }}\n >\n {/* Header */}\n <h3\n style={{\n fontSize: '1rem',\n fontWeight: 600,\n color: tokens.text,\n margin: '0 0 6px 0',\n textAlign: 'center',\n }}\n >\n Set spending limit\n </h3>\n <p\n style={{\n fontSize: '0.8rem',\n color: tokens.textMuted,\n margin: '0 0 16px 0',\n lineHeight: 1.5,\n textAlign: 'center',\n }}\n >\n Pre-authorize a higher amount so future payments go through\n instantly without wallet prompts.\n </p>\n\n {/* Transfer amount display */}\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: '10px 14px',\n background: tokens.bgInput,\n borderRadius: tokens.radius,\n marginBottom: '12px',\n fontSize: '0.825rem',\n }}\n >\n <span style={{ color: tokens.textSecondary }}>This payment</span>\n <span style={{ fontWeight: 600, color: tokens.text }}>\n {formatAmount(transferAmountRaw)} {currency}\n </span>\n </div>\n\n {/* Top-up options */}\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '6px',\n marginBottom: '16px',\n }}\n >\n {TOP_UP_OPTIONS.map((topUp) => {\n const isSelected = selectedTopUp === topUp;\n const total = transferAmountRaw + topUp;\n const label =\n topUp === 0\n ? 'Just this payment'\n : `+${formatAmount(topUp)} for future payments`;\n\n return (\n <button\n key={topUp}\n onClick={() => setSelectedTopUp(topUp)}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n padding: '12px 14px',\n background: isSelected ? tokens.accent + '14' : 'transparent',\n border: `1.5px solid ${isSelected ? tokens.accent : tokens.border}`,\n borderRadius: tokens.radius,\n cursor: 'pointer',\n color: tokens.text,\n fontFamily: 'inherit',\n fontSize: '0.825rem',\n textAlign: 'left',\n outline: 'none',\n transition: 'all 0.12s ease',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n {/* Radio indicator */}\n <div\n style={{\n width: 16,\n height: 16,\n borderRadius: '50%',\n border: `2px solid ${isSelected ? tokens.accent : tokens.border}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n }}\n >\n {isSelected && (\n <div\n style={{\n width: 8,\n height: 8,\n borderRadius: '50%',\n background: tokens.accent,\n }}\n />\n )}\n </div>\n <span style={{ fontWeight: isSelected ? 600 : 400 }}>\n {label}\n </span>\n </div>\n <span\n style={{\n fontWeight: 600,\n color: isSelected ? tokens.accent : tokens.textMuted,\n fontSize: '0.8rem',\n flexShrink: 0,\n marginLeft: '8px',\n }}\n >\n {formatAmount(total)}\n </span>\n </button>\n );\n })}\n </div>\n\n {/* Summary + confirm */}\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: '10px 14px',\n background: tokens.bgInput,\n borderRadius: tokens.radius,\n marginBottom: '14px',\n fontSize: '0.825rem',\n }}\n >\n <span style={{ color: tokens.textSecondary }}>Total authorization</span>\n <span style={{ fontWeight: 700, color: tokens.text, fontSize: '0.9rem' }}>\n {formatAmount(totalAllowance)} {currency}\n </span>\n </div>\n\n <button\n onClick={() => onSelect({ topUpAmount: selectedTopUp })}\n style={{\n width: '100%',\n padding: '14px',\n background: tokens.accent,\n color: tokens.accentText,\n border: 'none',\n borderRadius: tokens.radius,\n fontSize: '1rem',\n fontWeight: 600,\n cursor: 'pointer',\n transition: 'background 0.15s ease',\n fontFamily: 'inherit',\n }}\n >\n Authorize & Sign\n </button>\n </div>\n );\n}\n","// ── Swype Payment Widget ───────────────────────────────────────────────\n//\n// New flow: Login -> Enter Amount -> Ready (auto-select account) -> Processing -> Complete\n//\n// Basic mode: Apple Pay-style one-click pay. The backend returns accounts\n// sorted by ACTIVE status and balance, so the SDK just picks the first one.\n//\n// Advanced mode: lets power users choose asset, chain, or connect a new account.\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { usePrivy } from '@privy-io/react-auth';\n\nimport type {\n Account,\n AdvancedSettings as AdvancedSettingsType,\n Chain,\n Destination,\n PaymentStep,\n Provider,\n SourceOption,\n SourceType,\n Transfer,\n Wallet,\n} from './types';\nimport * as api from './api';\nimport { useSwypeConfig } from './context';\nimport { useAuthorizationExecutor, useTransferPolling } from './hooks';\nimport { Spinner } from './components/Spinner';\nimport { ProviderCard } from './components/ProviderCard';\nimport { AccountDropdown } from './components/AccountDropdown';\nimport { AdvancedSettings } from './components/AdvancedSettings';\nimport { AllowanceSelector } from './components/AllowanceSelector';\n\n// ── Mobile detection ────────────────────────────────────────────────────\n\nfunction isMobile(): boolean {\n if (typeof navigator === 'undefined') return false;\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator.userAgent,\n );\n}\n\n// ── Smart default selection ──────────────────────────────────────────\n\n/**\n * Computes the best default account + wallet for the authorization flow.\n *\n * Priority 1: A previously-authorized wallet (status === 'ACTIVE' and\n * lastAuthorizedToken set) whose matching source balance covers the\n * transfer amount.\n *\n * Priority 2: The wallet with the highest individual balance (across all\n * accounts), and its parent account.\n *\n * Returns { accountId, walletId } or null if no accounts exist.\n */\nfunction computeSmartDefaults(\n accts: Account[],\n transferAmount: number,\n): { accountId: string; walletId: string | null } | null {\n if (accts.length === 0) return null;\n\n // Priority 1: Previously authorized wallet with sufficient balance\n for (const acct of accts) {\n for (const wallet of acct.wallets) {\n if (\n wallet.status === 'ACTIVE' &&\n wallet.lastAuthorizedToken\n ) {\n // Find the source matching the last authorized token\n const matchingSource = wallet.sources.find(\n (s) => s.token.symbol === wallet.lastAuthorizedToken!.symbol,\n );\n if (\n matchingSource &&\n matchingSource.balance.available.amount >= transferAmount\n ) {\n return { accountId: acct.id, walletId: wallet.id };\n }\n }\n }\n }\n\n // Priority 2: Highest individual wallet balance\n let bestAccount: Account | null = null;\n let bestWallet: Wallet | null = null;\n let bestBalance = -1;\n\n for (const acct of accts) {\n for (const wallet of acct.wallets) {\n const walletBal = wallet.balance.available.amount;\n if (walletBal > bestBalance) {\n bestBalance = walletBal;\n bestAccount = acct;\n bestWallet = wallet;\n }\n }\n }\n\n if (bestAccount) {\n return {\n accountId: bestAccount.id,\n walletId: bestWallet?.id ?? null,\n };\n }\n\n // Fallback: first account, no specific wallet\n return { accountId: accts[0].id, walletId: null };\n}\n\n// ── Props ──────────────────────────────────────────────────────────────\n\nexport interface SwypePaymentProps {\n /**\n * Where the funds go -- controlled by the host app (merchant).\n *\n * The merchant sets this prop and can update it at any time; the SDK\n * reads it reactively whenever a transfer is created.\n */\n destination: Destination;\n /** Called when the transfer reaches COMPLETED status */\n onComplete?: (transfer: Transfer) => void;\n /** Called on unrecoverable error */\n onError?: (error: string) => void;\n}\n\n// ── Component ──────────────────────────────────────────────────────────\n\nexport function SwypePayment({\n destination,\n onComplete,\n onError,\n}: SwypePaymentProps) {\n const { apiBaseUrl, tokens, depositAmount } = useSwypeConfig();\n const { ready, authenticated, login, getAccessToken } = usePrivy();\n\n // Flow state\n const [step, setStep] = useState<PaymentStep>('login');\n const [error, setError] = useState<string | null>(null);\n\n // Data\n const [providers, setProviders] = useState<Provider[]>([]);\n const [accounts, setAccounts] = useState<Account[]>([]);\n const [chains, setChains] = useState<Chain[]>([]);\n const [loadingData, setLoadingData] = useState(false);\n\n // Source selection\n const [selectedAccountId, setSelectedAccountId] = useState<string | null>(null);\n // Optional wallet-level selection within the selected account (for auth flow)\n const [selectedWalletId, setSelectedWalletId] = useState<string | null>(null);\n // When the user picks a provider to connect a new account\n const [selectedProviderId, setSelectedProviderId] = useState<string | null>(null);\n const [connectingNewAccount, setConnectingNewAccount] = useState(false);\n\n // Amount -- pre-populated from hook if available\n const [amount, setAmount] = useState<string>(\n depositAmount != null ? depositAmount.toString() : '',\n );\n\n // Advanced settings\n const [advancedSettings, setAdvancedSettings] = useState<AdvancedSettingsType>({\n asset: null,\n chain: null,\n });\n\n // Transfer\n const [transfer, setTransfer] = useState<Transfer | null>(null);\n const [creatingTransfer, setCreatingTransfer] = useState(false);\n\n // Mobile flow\n const [mobileFlow, setMobileFlow] = useState(false);\n const pollingTransferIdRef = useRef<string | null>(null);\n\n // Hooks\n const authExecutor = useAuthorizationExecutor();\n const polling = useTransferPolling();\n\n // Determine effective source type + id.\n // When a specific wallet is selected (wallet-level selection), use walletId\n // so the backend scopes authorization to that chain. Otherwise fall back\n // to accountId or providerId.\n const sourceType: SourceType = connectingNewAccount\n ? 'providerId'\n : selectedWalletId\n ? 'walletId'\n : selectedAccountId\n ? 'accountId'\n : 'providerId';\n const sourceId = connectingNewAccount\n ? (selectedProviderId ?? '')\n : selectedWalletId\n ? selectedWalletId\n : selectedAccountId\n ? selectedAccountId\n : (selectedProviderId ?? '');\n\n // ── Sync depositAmount from hook into local state ──────────────\n useEffect(() => {\n if (depositAmount != null) {\n setAmount(depositAmount.toString());\n }\n }, [depositAmount]);\n\n // ── Step transitions based on auth state ─────────────────────────\n\n useEffect(() => {\n if (ready && authenticated && step === 'login') {\n // If amount is pre-set, skip to ready; otherwise go to enter-amount\n if (depositAmount != null && depositAmount > 0) {\n setStep('ready');\n } else {\n setStep('enter-amount');\n }\n }\n }, [ready, authenticated, step, depositAmount]);\n\n // ── Load providers + accounts + chains as soon as authenticated ───\n // Fetching early (not gated on step) means balance data is available\n // on the enter-amount screen so the user can see how much they have.\n //\n // We use a ref to guard against concurrent fetches. Including\n // `loadingData` in the dependency array would cause the cleanup to\n // cancel the in-flight request when `setLoadingData(true)` triggers\n // a re-render.\n\n const loadingDataRef = useRef(false);\n\n useEffect(() => {\n if (!authenticated) return;\n if (accounts.length > 0 || loadingDataRef.current) return;\n\n let cancelled = false;\n loadingDataRef.current = true;\n\n const load = async () => {\n setLoadingData(true);\n setError(null);\n try {\n const token = await getAccessToken();\n if (!token) throw new Error('Not authenticated');\n const [prov, accts, chn] = await Promise.all([\n api.fetchProviders(apiBaseUrl, token),\n api.fetchAccounts(apiBaseUrl, token),\n api.fetchChains(apiBaseUrl, token),\n ]);\n if (cancelled) return;\n setProviders(prov);\n setAccounts(accts);\n setChains(chn);\n\n // Smart-default: pick the best account + wallet based on\n // previous authorizations and balance.\n const parsedAmt = depositAmount != null ? depositAmount : 0;\n const defaults = computeSmartDefaults(accts, parsedAmt);\n if (defaults) {\n setSelectedAccountId(defaults.accountId);\n setSelectedWalletId(defaults.walletId);\n } else if (prov.length > 0) {\n // No accounts yet -- user needs to connect via a provider\n setSelectedProviderId(prov[0].id);\n }\n } catch (err) {\n if (!cancelled) {\n const msg =\n err instanceof Error ? err.message : 'Failed to load data';\n setError(msg);\n }\n } finally {\n if (!cancelled) {\n setLoadingData(false);\n loadingDataRef.current = false;\n }\n }\n };\n load();\n return () => {\n cancelled = true;\n loadingDataRef.current = false;\n };\n }, [authenticated, accounts.length, apiBaseUrl, getAccessToken]);\n\n // ── Poll completion handler ──────────────────────────────────────\n\n useEffect(() => {\n if (!polling.transfer) return;\n if (polling.transfer.status === 'COMPLETED') {\n setStep('complete');\n setTransfer(polling.transfer);\n onComplete?.(polling.transfer);\n } else if (polling.transfer.status === 'FAILED') {\n setStep('complete');\n setTransfer(polling.transfer);\n setError('Transfer failed.');\n }\n }, [polling.transfer, onComplete]);\n\n // ── Resume polling when user returns from wallet app (mobile) ────\n\n useEffect(() => {\n if (!mobileFlow || !polling.isPolling) return;\n\n const handleVisibility = () => {\n if (document.visibilityState === 'visible') {\n if (pollingTransferIdRef.current) {\n polling.startPolling(pollingTransferIdRef.current);\n }\n }\n };\n\n document.addEventListener('visibilitychange', handleVisibility);\n return () => {\n document.removeEventListener('visibilitychange', handleVisibility);\n };\n }, [mobileFlow, polling]);\n\n // ── Auto-confirm SELECT_SOURCE in basic mode ─────────────────────\n // When the auth executor pauses for SELECT_SOURCE and the user hasn't\n // set explicit advanced settings, auto-confirm with the backend's\n // recommended chain+token.\n\n useEffect(() => {\n if (!authExecutor.pendingSelectSource) return;\n\n const action = authExecutor.pendingSelectSource;\n const hasAdvancedOverride =\n advancedSettings.asset !== null || advancedSettings.chain !== null;\n\n if (hasAdvancedOverride) {\n // Advanced mode: use the user's explicit choice\n const options = (action.metadata?.options ?? []) as SourceOption[];\n const recommended = action.metadata?.recommended as {\n chainName: string;\n tokenSymbol: string;\n } | undefined;\n\n // Find an option matching the user's advanced preferences\n const match = options.find(\n (opt) =>\n (advancedSettings.chain === null ||\n opt.chainName === advancedSettings.chain) &&\n (advancedSettings.asset === null ||\n opt.tokenSymbol === advancedSettings.asset),\n );\n\n if (match) {\n authExecutor.resolveSelectSource({\n chainName: match.chainName,\n tokenSymbol: match.tokenSymbol,\n });\n } else if (recommended) {\n // Fallback to recommended if no match\n authExecutor.resolveSelectSource({\n chainName: recommended.chainName,\n tokenSymbol: recommended.tokenSymbol,\n });\n }\n } else {\n // Basic mode: prefer the user's selected wallet chain, then fall back\n // to the backend's recommendation.\n const options = (action.metadata?.options ?? []) as SourceOption[];\n const recommended = action.metadata?.recommended as {\n chainName: string;\n tokenSymbol: string;\n } | undefined;\n\n // If the user explicitly selected a wallet, find the matching option.\n const selWallet = selectedWalletId\n ? accounts\n .find((a) => a.id === selectedAccountId)\n ?.wallets.find((w) => w.id === selectedWalletId)\n : null;\n\n if (selWallet) {\n const walletMatch = options.find(\n (opt) => opt.chainName === selWallet.chain.name,\n );\n if (walletMatch) {\n authExecutor.resolveSelectSource({\n chainName: walletMatch.chainName,\n tokenSymbol: walletMatch.tokenSymbol,\n });\n return;\n }\n }\n\n if (recommended) {\n authExecutor.resolveSelectSource({\n chainName: recommended.chainName,\n tokenSymbol: recommended.tokenSymbol,\n });\n } else if (options.length > 0) {\n authExecutor.resolveSelectSource({\n chainName: options[0].chainName,\n tokenSymbol: options[0].tokenSymbol,\n });\n } else {\n authExecutor.resolveSelectSource({\n chainName: 'Base',\n tokenSymbol: 'USDC',\n });\n }\n }\n }, [authExecutor, authExecutor.pendingSelectSource, advancedSettings, selectedWalletId, selectedAccountId, accounts]);\n\n // ── Create transfer + execute auth + start polling ───────────────\n\n const handlePay = useCallback(async () => {\n const parsedAmount = parseFloat(amount);\n if (isNaN(parsedAmount) || parsedAmount <= 0) {\n setError('Enter a valid amount.');\n return;\n }\n if (!sourceId) {\n setError('No account or provider selected.');\n return;\n }\n\n setStep('processing');\n setError(null);\n setCreatingTransfer(true);\n setMobileFlow(false);\n\n try {\n const token = await getAccessToken();\n if (!token) throw new Error('Not authenticated');\n\n const t = await api.createTransfer(apiBaseUrl, token, {\n sourceType,\n sourceId,\n destination,\n amount: parsedAmount,\n });\n setTransfer(t);\n\n if (t.authorizationSessions && t.authorizationSessions.length > 0) {\n if (isMobile()) {\n // Mobile: redirect to the wallet deeplink and poll for completion.\n setMobileFlow(true);\n pollingTransferIdRef.current = t.id;\n polling.startPolling(t.id);\n window.location.href = t.authorizationSessions[0].uri;\n return;\n } else {\n // Desktop: execute the authorization session in-browser\n await authExecutor.executeSession(t);\n }\n }\n\n polling.startPolling(t.id);\n } catch (err) {\n const msg =\n err instanceof Error ? err.message : 'Transfer creation failed';\n setError(msg);\n onError?.(msg);\n setStep('ready');\n } finally {\n setCreatingTransfer(false);\n }\n }, [\n amount,\n sourceId,\n sourceType,\n destination,\n apiBaseUrl,\n getAccessToken,\n authExecutor,\n polling,\n onError,\n ]);\n\n // ── Restart ──────────────────────────────────────────────────────\n\n const handleNewPayment = () => {\n setStep('ready');\n setTransfer(null);\n setError(null);\n setAmount(depositAmount != null ? depositAmount.toString() : '');\n setMobileFlow(false);\n pollingTransferIdRef.current = null;\n setConnectingNewAccount(false);\n setSelectedWalletId(null);\n setAdvancedSettings({ asset: null, chain: null });\n if (accounts.length > 0) setSelectedAccountId(accounts[0].id);\n };\n\n // ── Handle \"connect new account\" from advanced panel ─────────────\n\n const handleConnectNewAccount = (providerId: string) => {\n setSelectedProviderId(providerId);\n setSelectedAccountId(null);\n setConnectingNewAccount(true);\n };\n\n // ── Shared styles ────────────────────────────────────────────────\n\n const cardStyle: React.CSSProperties = {\n background: tokens.bgCard,\n borderRadius: tokens.radiusLg,\n border: `1px solid ${tokens.border}`,\n padding: '28px 24px',\n maxWidth: 420,\n width: '100%',\n boxShadow: tokens.shadowLg,\n fontFamily:\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n color: tokens.text,\n };\n\n const headingStyle: React.CSSProperties = {\n fontSize: '1.2rem',\n fontWeight: 600,\n margin: '0 0 20px 0',\n color: tokens.text,\n textAlign: 'center',\n };\n\n const btnPrimary: React.CSSProperties = {\n width: '100%',\n padding: '14px',\n background: tokens.accent,\n color: tokens.accentText,\n border: 'none',\n borderRadius: tokens.radius,\n fontSize: '1rem',\n fontWeight: 600,\n cursor: 'pointer',\n transition: 'background 0.15s ease',\n fontFamily: 'inherit',\n };\n\n const btnDisabled: React.CSSProperties = {\n ...btnPrimary,\n opacity: 0.5,\n cursor: 'not-allowed',\n };\n\n const btnSecondary: React.CSSProperties = {\n ...btnPrimary,\n background: 'transparent',\n color: tokens.textSecondary,\n border: `1px solid ${tokens.border}`,\n width: 'auto',\n flex: '0 0 auto',\n padding: '14px 20px',\n };\n\n const errorStyle: React.CSSProperties = {\n background: tokens.errorBg,\n border: `1px solid ${tokens.error}`,\n borderRadius: tokens.radius,\n padding: '10px 14px',\n color: tokens.error,\n fontSize: '0.825rem',\n marginBottom: '14px',\n lineHeight: 1.5,\n };\n\n const stepBadge = (label: string) => (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n marginBottom: '20px',\n }}\n >\n <div\n style={{\n width: 6,\n height: 6,\n borderRadius: '50%',\n background: tokens.accent,\n }}\n />\n <span\n style={{\n fontSize: '0.75rem',\n textTransform: 'uppercase',\n letterSpacing: '0.06em',\n color: tokens.textMuted,\n fontWeight: 600,\n }}\n >\n {label}\n </span>\n </div>\n );\n\n // ── Render ───────────────────────────────────────────────────────\n\n if (!ready) {\n return (\n <div style={cardStyle}>\n <div style={{ textAlign: 'center', padding: '24px 0' }}>\n <Spinner label=\"Initializing...\" />\n </div>\n </div>\n );\n }\n\n // ── Step: Login ──────────────────────────────────────────────────\n\n if (step === 'login' && !authenticated) {\n return (\n <div style={cardStyle}>\n <div style={{ textAlign: 'center' }}>\n <svg\n width=\"48\"\n height=\"48\"\n viewBox=\"0 0 48 48\"\n fill=\"none\"\n style={{ margin: '0 auto 16px' }}\n >\n <rect width=\"48\" height=\"48\" rx=\"12\" fill={tokens.accent + '20'} />\n <path\n d=\"M24 14v20M14 24h20\"\n stroke={tokens.accent}\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n <h2 style={{ ...headingStyle, marginBottom: '8px' }}>\n Pay with Swype\n </h2>\n <p\n style={{\n fontSize: '0.875rem',\n color: tokens.textSecondary,\n margin: '0 0 24px 0',\n lineHeight: 1.5,\n }}\n >\n Connect your account to continue\n </p>\n <button style={btnPrimary} onClick={login}>\n Connect to Swype\n </button>\n </div>\n </div>\n );\n }\n\n // ── Step: Enter Amount ───────────────────────────────────────────\n\n if (step === 'enter-amount') {\n const parsedAmount = parseFloat(amount);\n const canContinue = !isNaN(parsedAmount) && parsedAmount > 0;\n\n // Compute the max single-source balance (highest individual token\n // balance across all wallets) — the most that could be pulled in\n // one transfer.\n let maxSourceBalance: number | null = null;\n for (const acct of accounts) {\n for (const wallet of acct.wallets) {\n for (const source of wallet.sources) {\n const bal = source.balance.available.amount;\n if (maxSourceBalance === null || bal > maxSourceBalance) {\n maxSourceBalance = bal;\n }\n }\n }\n }\n\n return (\n <div style={cardStyle}>\n {stepBadge('Enter amount')}\n <h2 style={headingStyle}>How much?</h2>\n\n {error && <div style={errorStyle}>{error}</div>}\n\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n background: tokens.bgInput,\n border: `1px solid ${tokens.border}`,\n borderRadius: tokens.radius,\n padding: '4px 14px 4px 4px',\n marginBottom: '8px',\n }}\n >\n <span\n style={{\n fontSize: '1.5rem',\n fontWeight: 600,\n color: tokens.textMuted,\n paddingLeft: '10px',\n userSelect: 'none',\n }}\n >\n $\n </span>\n <input\n type=\"number\"\n min=\"0.01\"\n step=\"0.01\"\n value={amount}\n onChange={(e) => setAmount(e.target.value)}\n placeholder=\"0.00\"\n style={{\n flex: 1,\n background: 'transparent',\n border: 'none',\n outline: 'none',\n color: tokens.text,\n fontSize: '1.5rem',\n fontWeight: 600,\n fontFamily: 'inherit',\n padding: '10px 0',\n }}\n autoFocus\n />\n <span\n style={{\n fontSize: '0.825rem',\n fontWeight: 600,\n color: tokens.textMuted,\n background: tokens.bgHover,\n padding: '4px 10px',\n borderRadius: '6px',\n }}\n >\n USD\n </span>\n </div>\n\n {/* Available balance */}\n <div\n style={{\n fontSize: '0.8rem',\n color: tokens.textMuted,\n marginBottom: '20px',\n paddingLeft: '2px',\n }}\n >\n {loadingData ? (\n <span>Loading balance...</span>\n ) : maxSourceBalance !== null && maxSourceBalance > 0 ? (\n <span>\n Available: <span style={{ fontWeight: 600, color: tokens.textSecondary }}>${maxSourceBalance.toFixed(2)}</span>\n </span>\n ) : null}\n </div>\n\n <button\n style={canContinue ? btnPrimary : btnDisabled}\n disabled={!canContinue}\n onClick={() => {\n setError(null);\n setStep('ready');\n }}\n >\n Continue\n </button>\n </div>\n );\n }\n\n // ── Step: Ready ──────────────────────────────────────────────────\n\n if (step === 'ready') {\n const parsedAmount = parseFloat(amount);\n const canPay =\n !isNaN(parsedAmount) && parsedAmount > 0 && !!sourceId && !loadingData;\n\n // No accounts exist — show first-time provider selection\n const noAccounts = !loadingData && accounts.length === 0;\n\n return (\n <div style={cardStyle}>\n {stepBadge('Review & pay')}\n\n {error && <div style={errorStyle}>{error}</div>}\n\n {loadingData ? (\n <div style={{ padding: '24px 0', textAlign: 'center' }}>\n <Spinner label=\"Loading...\" />\n </div>\n ) : (\n <>\n {/* Amount display */}\n <div\n style={{\n textAlign: 'center',\n marginBottom: '20px',\n }}\n >\n <div\n style={{\n fontSize: '2rem',\n fontWeight: 700,\n color: tokens.text,\n lineHeight: 1.2,\n }}\n >\n ${parsedAmount > 0 ? parsedAmount.toFixed(2) : '0.00'}\n </div>\n <button\n onClick={() => setStep('enter-amount')}\n style={{\n background: 'transparent',\n border: 'none',\n cursor: 'pointer',\n color: tokens.textMuted,\n fontSize: '0.75rem',\n fontFamily: 'inherit',\n outline: 'none',\n padding: '4px 8px',\n marginTop: '4px',\n }}\n >\n Change amount\n </button>\n </div>\n\n {/* Source summary */}\n <div\n style={{\n fontSize: '0.825rem',\n color: tokens.textSecondary,\n marginBottom: '16px',\n padding: '12px 14px',\n background: tokens.bgInput,\n borderRadius: tokens.radius,\n lineHeight: 1.7,\n }}\n >\n {/* Destination */}\n <div\n style={{ display: 'flex', justifyContent: 'space-between' }}\n >\n <span>To</span>\n <span\n style={{\n fontFamily: '\"SF Mono\", \"Fira Code\", monospace',\n fontSize: '0.8rem',\n }}\n >\n {destination.address.slice(0, 6)}...\n {destination.address.slice(-4)}\n </span>\n </div>\n <div\n style={{ display: 'flex', justifyContent: 'space-between' }}\n >\n <span>Token</span>\n <span style={{ fontWeight: 600 }}>\n {destination.token.symbol}\n </span>\n </div>\n\n {/* Source account - subtle dropdown */}\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n }}\n >\n <span>From</span>\n {noAccounts ? (\n <span style={{ fontWeight: 500, color: tokens.textMuted }}>\n New account\n </span>\n ) : (\n <AccountDropdown\n accounts={accounts}\n selectedAccountId={selectedAccountId}\n selectedWalletId={selectedWalletId}\n onSelect={(id) => {\n setSelectedAccountId(id);\n setSelectedWalletId(null);\n setConnectingNewAccount(false);\n setSelectedProviderId(null);\n }}\n onWalletSelect={(accountId, walletId) => {\n setSelectedAccountId(accountId);\n setSelectedWalletId(walletId);\n setConnectingNewAccount(false);\n setSelectedProviderId(null);\n }}\n />\n )}\n </div>\n </div>\n\n {/* First-time user: show provider cards */}\n {noAccounts && (\n <div style={{ marginBottom: '16px' }}>\n <label\n style={{\n display: 'block',\n fontSize: '0.8rem',\n color: tokens.textMuted,\n marginBottom: '8px',\n fontWeight: 500,\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n }}\n >\n Connect a wallet\n </label>\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n }}\n >\n {providers.map((p) => (\n <ProviderCard\n key={p.id}\n provider={p}\n selected={selectedProviderId === p.id}\n onClick={() => {\n setSelectedProviderId(p.id);\n setSelectedAccountId(null);\n setConnectingNewAccount(false);\n }}\n />\n ))}\n </div>\n </div>\n )}\n\n {/* Pay button */}\n <button\n style={canPay ? btnPrimary : btnDisabled}\n disabled={!canPay}\n onClick={handlePay}\n >\n Pay ${parsedAmount > 0 ? parsedAmount.toFixed(2) : '0.00'}\n </button>\n\n {/* Advanced settings */}\n {!noAccounts && (\n <AdvancedSettings\n settings={advancedSettings}\n onChange={setAdvancedSettings}\n chains={chains}\n providers={providers}\n onConnectNewAccount={handleConnectNewAccount}\n connectingNewAccount={connectingNewAccount}\n />\n )}\n </>\n )}\n </div>\n );\n }\n\n // ── Step: Processing ─────────────────────────────────────────────\n\n if (step === 'processing') {\n // When the executor pauses for allowance selection, show the selector\n // instead of the generic processing spinner.\n if (authExecutor.pendingAllowanceSelection) {\n return (\n <div style={cardStyle}>\n <AllowanceSelector\n action={authExecutor.pendingAllowanceSelection}\n onSelect={authExecutor.resolveAllowanceSelection}\n />\n </div>\n );\n }\n\n const statusLabel = creatingTransfer\n ? 'Creating transfer...'\n : mobileFlow\n ? 'Waiting for authorization...'\n : authExecutor.executing\n ? 'Authorizing...'\n : polling.isPolling\n ? 'Processing payment...'\n : 'Please wait...';\n\n const statusDescription = creatingTransfer\n ? 'Setting up your transfer...'\n : mobileFlow\n ? 'Complete the authorization in your wallet app, then return here.'\n : authExecutor.executing\n ? 'Complete the wallet prompts to authorize this payment.'\n : polling.isPolling\n ? 'Your payment is being processed. This usually takes a few moments.'\n : 'Hang tight...';\n\n return (\n <div style={cardStyle}>\n <div style={{ textAlign: 'center', padding: '16px 0' }}>\n <Spinner size={48} />\n <h2\n style={{\n ...headingStyle,\n marginTop: '20px',\n marginBottom: '8px',\n }}\n >\n {statusLabel}\n </h2>\n <p\n style={{\n fontSize: '0.85rem',\n color: tokens.textSecondary,\n margin: 0,\n lineHeight: 1.5,\n }}\n >\n {statusDescription}\n </p>\n\n {/* Desktop: show action-by-action progress */}\n {!mobileFlow && authExecutor.results.length > 0 && (\n <div style={{ marginTop: '20px', textAlign: 'left' }}>\n {authExecutor.results.map((r) => (\n <div\n key={r.actionId}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '6px 0',\n fontSize: '0.8rem',\n color:\n r.status === 'success' ? tokens.success : tokens.error,\n }}\n >\n <span>\n {r.status === 'success' ? '\\u2713' : '\\u2717'}\n </span>\n <span>{r.type.replace(/_/g, ' ')}</span>\n </div>\n ))}\n </div>\n )}\n\n {(error || authExecutor.error || polling.error) && (\n <div\n style={{ ...errorStyle, marginTop: '16px', textAlign: 'left' }}\n >\n {error || authExecutor.error || polling.error}\n </div>\n )}\n </div>\n </div>\n );\n }\n\n // ── Step: Complete ───────────────────────────────────────────────\n\n if (step === 'complete') {\n const succeeded = transfer?.status === 'COMPLETED';\n\n return (\n <div style={cardStyle}>\n <div style={{ textAlign: 'center' }}>\n <div\n style={{\n width: 56,\n height: 56,\n borderRadius: '50%',\n background: succeeded\n ? tokens.success + '20'\n : tokens.error + '20',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n margin: '0 auto 16px',\n }}\n >\n {succeeded ? (\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\"\n fill={tokens.success}\n />\n </svg>\n ) : (\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M18.3 5.71L12 12.01 5.7 5.71 4.29 7.12l6.3 6.3-6.3 6.29 1.41 1.41 6.3-6.29 6.29 6.29 1.41-1.41-6.29-6.29 6.29-6.3-1.41-1.41z\"\n fill={tokens.error}\n />\n </svg>\n )}\n </div>\n\n <h2\n style={{\n ...headingStyle,\n marginBottom: '8px',\n color: succeeded ? tokens.success : tokens.error,\n }}\n >\n {succeeded ? 'Payment Complete' : 'Payment Failed'}\n </h2>\n\n {transfer && (\n <div\n style={{\n fontSize: '0.825rem',\n color: tokens.textSecondary,\n margin: '0 0 24px 0',\n padding: '14px',\n background: tokens.bgInput,\n borderRadius: tokens.radius,\n textAlign: 'left',\n lineHeight: 1.8,\n }}\n >\n <div\n style={{ display: 'flex', justifyContent: 'space-between' }}\n >\n <span>Amount</span>\n <span style={{ fontWeight: 600, color: tokens.text }}>\n ${transfer.amount?.amount?.toFixed(2)}{' '}\n {transfer.amount?.currency}\n </span>\n </div>\n <div\n style={{ display: 'flex', justifyContent: 'space-between' }}\n >\n <span>Status</span>\n <span\n style={{\n fontWeight: 600,\n color: succeeded ? tokens.success : tokens.error,\n }}\n >\n {transfer.status}\n </span>\n </div>\n <div\n style={{ display: 'flex', justifyContent: 'space-between' }}\n >\n <span>Transfer ID</span>\n <span\n style={{\n fontFamily: '\"SF Mono\", \"Fira Code\", monospace',\n fontSize: '0.75rem',\n }}\n >\n {transfer.id.slice(0, 8)}...\n </span>\n </div>\n </div>\n )}\n\n {error && (\n <div style={{ ...errorStyle, textAlign: 'left' }}>{error}</div>\n )}\n\n <button style={btnPrimary} onClick={handleNewPayment}>\n {succeeded ? 'Make Another Payment' : 'Try Again'}\n </button>\n </div>\n </div>\n );\n }\n\n // Fallback\n return null;\n}\n"]}
|