@swype-org/react-sdk 0.2.1-betatest.d455d11 → 0.2.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -1
- package/dist/index.cjs +6063 -3519
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +590 -235
- package/dist/index.d.ts +590 -235
- package/dist/index.js +6019 -3489
- package/dist/index.js.map +1 -1
- package/package.json +16 -13
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/theme.ts","../src/context.tsx","../src/api.ts","../node_modules/@wagmi/core/src/utils/getAction.ts","../node_modules/@wagmi/core/src/version.ts","../node_modules/@wagmi/core/src/utils/getVersion.ts","../node_modules/@wagmi/core/src/errors/base.ts","../node_modules/@wagmi/core/src/errors/config.ts","../node_modules/@wagmi/core/src/actions/getConnectorClient.ts","../node_modules/@wagmi/core/src/actions/getAccount.ts","../node_modules/@wagmi/core/src/actions/readContract.ts","../node_modules/@wagmi/core/src/actions/getWalletClient.ts","../node_modules/@wagmi/core/src/actions/waitForTransactionReceipt.ts","../src/passkeyRpId.ts","../src/signature.ts","../src/transferPolling.ts","../src/passkey-delegation.ts","../src/hooks.ts","../src/paymentHelpers.ts","../src/paymentReducer.ts","../src/auth.ts","../src/walletFlow.ts","../src/components/SwypeLoadingScreen.tsx","../src/assets/logos.ts","../src/components/ui/ScreenLayout.tsx","../src/FlowPhaseContext.tsx","../src/components/ui/StepProgress.tsx","../src/components/ui/SettingsMenu.tsx","../src/components/ui/ScreenHeader.tsx","../src/components/ui/PoweredByFooter.tsx","../src/components/ui/PrimaryButton.tsx","../src/components/ui/OutlineButton.tsx","../src/components/ui/InfoBanner.tsx","../src/components/ui/WarningBanner.tsx","../src/components/ui/IconCircle.tsx","../src/components/ui/OtpInput.tsx","../src/components/ui/StepList.tsx","../src/components/screens/LoginScreen.tsx","../src/components/screens/OtpVerifyScreen.tsx","../src/components/screens/PasskeyScreen.tsx","../src/components/Spinner.tsx","../src/components/screens/WalletPickerScreen.tsx","../src/components/screens/SetupScreen.tsx","../src/components/screens/SetupStatusScreen.tsx","../src/components/screens/DepositScreen.tsx","../src/components/screens/SuccessScreen.tsx","../src/components/screens/SelectSourceScreen.tsx","../src/components/screens/AdvancedSourceScreen.tsx","../src/components/screens/TransferStatusScreen.tsx","../src/deeplink.ts","../src/components/screens/OpenWalletScreen.tsx","../src/components/screens/ConfirmSignScreen.tsx","../src/components/screens/TokenPickerScreen.tsx","../src/components/screens/GuestDepositScreen.tsx","../src/components/screens/GuestWalletScreen.tsx","../src/components/screens/OfferSetupScreen.tsx","../src/components/screens/SetupCompleteScreen.tsx","../src/components/screens/GuestSelectSourceScreen.tsx","../src/StepRenderer.tsx","../src/sentry.ts","../src/components/ErrorBoundary.tsx","../src/hooks/useDerivedState.ts","../src/hooks/useAuthHandlers.ts","../src/mobileFlow.ts","../src/hooks/usePasskeyHandlers.ts","../src/hooks/useTransferHandlers.ts","../src/hooks/useSourceSelectionHandlers.ts","../src/hooks/useMobileFlowHandlers.ts","../src/hooks/useProviderHandlers.ts","../src/hooks/useOneTapSetupHandlers.ts","../src/dataLoading.ts","../src/processingStatus.ts","../src/hooks/usePaymentEffects.ts","../src/hooks/useGuestTransferHandlers.ts","../src/SwypePayment.tsx"],"names":["_BaseError_walk","connector","chainId","chain","viem_readContract","viem_waitForTransactionReceipt","fetchTransfer","wagmiConfig","credential","useState","useRef","useCallback","hexChainId","signTransfer","jsx","jsxs","containerStyle","createContext","useContext","labelStyle","useEffect","buttonStyle","headerStyle","iconStyle","bodyStyle","rowStyle","badgeStyle","Fragment","inputStyle","contentStyle","headingStyle","subtitleStyle","errorBannerStyle","dividerStyle","mascotStyle","amountRowStyle","tokenIconButtonStyle","tokenIconWrapStyle","radioStyle","radioDotStyle","stepsWrapStyle","logoStyle","waitHintStyle","errorStyle","hintStyle","depositLabelStyle","tokenListStyle","tokenRowStyle","tokenIconCircleStyle","tokenLogoImgStyle","tokenIconTextStyle","tokenInfoStyle","descriptionStyle","cardStyle","optionListStyle","optionButtonStyle","optionContentStyle","optionNameStyle","optionMainStyle","useMemo","usePrivy","signedTransfer","useConfig","useConnect","useSwitchChain"],"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 warning: string;\n warningBg: string;\n warningText: 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: '#071216',\n bgCard: '#101c22',\n bgInput: '#17272f',\n bgHover: '#20343d',\n bgOverlay: 'rgba(3, 10, 13, 0.7)',\n\n text: '#ecfeff',\n textSecondary: '#b7d3dd',\n textMuted: '#7fa4b0',\n textInverse: '#052027',\n\n border: '#2b4551',\n borderFocus: '#28b67a',\n\n accent: '#B2FF93',\n accentHover: '#8FD974',\n accentText: '#1B4332',\n\n success: '#0f9d73',\n successBg: '#0f2f2a',\n error: '#d46a72',\n errorBg: '#301d21',\n warning: '#F57C00',\n warningBg: '#3D2E00',\n warningText: '#FFB74D',\n\n shadow: '0 1px 4px rgba(0,0,0,0.35)',\n shadowLg: '0 18px 44px rgba(0,0,0,0.42)',\n\n radius: '14px',\n radiusLg: '24px',\n};\n\nexport const lightTheme: ThemeTokens = {\n bg: '#ebf9fb',\n bgCard: '#f9fdff',\n bgInput: '#f1f8fb',\n bgHover: '#e7f4f7',\n bgOverlay: 'rgba(7, 18, 22, 0.18)',\n\n text: '#12222b',\n textSecondary: '#4b6772',\n textMuted: '#7d97a1',\n textInverse: '#ffffff',\n\n border: '#d2e4ea',\n borderFocus: '#28b67a',\n\n accent: '#B2FF93',\n accentHover: '#8FD974',\n accentText: '#1B4332',\n\n success: '#0f9d73',\n successBg: '#e6f7f1',\n error: '#ce6670',\n errorBg: '#fdf1f2',\n warning: '#F57C00',\n warningBg: '#FFF8E1',\n warningText: '#5D4037',\n\n shadow: '0 1px 3px rgba(12, 31, 39, 0.08)',\n shadowLg: '0 20px 48px rgba(19, 61, 75, 0.14)',\n\n radius: '14px',\n radiusLg: '24px',\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, polygon, bsc } from 'wagmi/chains';\nimport { injected, walletConnect } from 'wagmi/connectors';\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 SWYPE_WALLETCONNECT_PROJECT_ID = '2b0c147a1f1f8e1e5e0b1c6a3d4e5f6a';\n\nconst wagmiConfig = createConfig({\n chains: [mainnet, arbitrum, base, polygon, bsc],\n connectors: [\n injected({ shimDisconnect: true, unstable_shimAsyncInject: 2_000 }),\n walletConnect({\n projectId: SWYPE_WALLETCONNECT_PROJECT_ID,\n showQrModal: true,\n metadata: {\n name: 'Swype',\n description: 'Swype Payments',\n url: 'https://swype.com',\n icons: ['https://swype.com/logo.png'],\n },\n }),\n ],\n transports: {\n [mainnet.id]: http(),\n [arbitrum.id]: http(),\n [base.id]: http(),\n [polygon.id]: http(),\n [bsc.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 accentColor: getTheme(theme).accent as `#${string}`,\n },\n intl: {\n defaultCountry: 'US',\n },\n embeddedWallets: {\n showWalletUIs: false,\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/** Access Swype SDK configuration when available (returns null outside provider). */\nexport function useOptionalSwypeConfig(): SwypeConfig | null {\n return useContext(SwypeContext);\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 UserConfig,\n MerchantAuthorization,\n MerchantPublicKey,\n GuestQuote,\n GuestSourceChain,\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 credentialId: string,\n): Promise<Account[]> {\n const params = new URLSearchParams({ credentialId });\n const res = await fetch(`${apiBaseUrl}/v1/accounts?${params.toString()}`, {\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\nexport async function fetchAccount(\n apiBaseUrl: string,\n token: string,\n accountId: string,\n credentialId: string,\n): Promise<Account> {\n const params = new URLSearchParams({ credentialId });\n const res = await fetch(`${apiBaseUrl}/v1/accounts/${accountId}?${params.toString()}`, {\n headers: { Authorization: `Bearer ${token}` },\n });\n if (!res.ok) await throwApiError(res);\n return (await res.json()) as Account;\n}\n\nexport interface CreateAccountParams {\n /** Caller-supplied UUID v4 for idempotency. If omitted, a random UUID is generated. */\n id?: string;\n name: string;\n credentialId: string;\n providerId: string;\n /** Optional user-chosen display name. */\n nickname?: string;\n}\n\nexport async function createAccount(\n apiBaseUrl: string,\n token: string,\n params: CreateAccountParams,\n): Promise<Account> {\n const body: Record<string, string> = {\n id: params.id ?? crypto.randomUUID(),\n name: params.name,\n credentialId: params.credentialId,\n providerId: params.providerId,\n };\n if (params.nickname) {\n body.nickname = params.nickname;\n }\n const res = await fetch(`${apiBaseUrl}/v1/accounts`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify(body),\n });\n if (!res.ok) await throwApiError(res);\n return (await res.json()) as Account;\n}\n\n// ── Account Authorization Sessions ─────────────────────────────────────\n\nexport async function createAccountAuthorizationSession(\n apiBaseUrl: string,\n token: string,\n accountId: string,\n credentialId: string,\n options?: { tokenAddress?: string; chainId?: number },\n): Promise<{ id: string; status: string; uri: string }> {\n const body: Record<string, unknown> = { credentialId };\n if (options?.tokenAddress) body.tokenAddress = options.tokenAddress;\n if (options?.chainId != null) body.chainId = options.chainId;\n\n const res = await fetch(\n `${apiBaseUrl}/v1/accounts/${accountId}/authorization-sessions`,\n {\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 { id: string; status: string; uri: string };\n}\n\n// ── Transfers ──────────────────────────────────────────────────────────\n\nexport interface CreateTransferParams {\n /** Caller-supplied UUID v4 for idempotency. If omitted, a random UUID is generated. */\n id?: string;\n credentialId: string;\n merchantAuthorization?: MerchantAuthorization;\n sourceType: SourceType;\n sourceId: string;\n /** ERC-20 contract address of the selected source token. */\n sourceTokenAddress?: 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 if (!params.merchantAuthorization) {\n throw new Error('merchantAuthorization is required for transfer creation.');\n }\n\n const body = {\n id: params.id ?? crypto.randomUUID(),\n credentialId: params.credentialId,\n merchantAuthorization: params.merchantAuthorization,\n sources: [{\n [params.sourceType]: params.sourceId,\n ...(params.sourceTokenAddress ? { tokenAddress: params.sourceTokenAddress } : {}),\n }],\n destinations: [\n {\n chainId: params.destination.chainId,\n token: { address: params.destination.token.address },\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 fetchMerchantPublicKey(\n apiBaseUrl: string,\n merchantId: string,\n): Promise<MerchantPublicKey> {\n const res = await fetch(\n `${apiBaseUrl}/v1/merchants/${encodeURIComponent(merchantId)}/public-key`,\n );\n if (!res.ok) await throwApiError(res);\n return (await res.json()) as MerchantPublicKey;\n}\n\nexport async function fetchTransfer(\n apiBaseUrl: string,\n token: string,\n transferId: string,\n authorizationSessionToken?: string,\n): Promise<Transfer> {\n if (!token && !authorizationSessionToken) {\n throw new Error('Missing auth credentials for transfer fetch.');\n }\n const res = await fetch(`${apiBaseUrl}/v1/transfers/${transferId}`, {\n headers: {\n ...(token ? { Authorization: `Bearer ${token}` } : {}),\n ...(authorizationSessionToken\n ? { 'x-authorization-session-token': authorizationSessionToken }\n : {}),\n },\n });\n if (!res.ok) await throwApiError(res);\n return (await res.json()) as Transfer;\n}\n\n/**\n * Submit a passkey-signed UserOperation for a transfer.\n * PATCH /v1/transfers/{transferId}\n */\nexport async function signTransfer(\n apiBaseUrl: string,\n token: string,\n transferId: string,\n signedUserOp: Record<string, unknown>,\n authorizationSessionToken?: string,\n): Promise<Transfer> {\n if (!token && !authorizationSessionToken) {\n throw new Error('Missing auth credentials for transfer signing.');\n }\n\n const res = await fetch(`${apiBaseUrl}/v1/transfers/${transferId}`, {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json',\n ...(token ? { Authorization: `Bearer ${token}` } : {}),\n ...(authorizationSessionToken\n ? { 'x-authorization-session-token': authorizationSessionToken }\n : {}),\n },\n body: JSON.stringify({ signedUserOp }),\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// ── Register Passkey ────────────────────────────────────────────────────\n\n/**\n * Registers a WebAuthn passkey for the authenticated user.\n * POST /v1/users/config/passkey\n */\nexport async function registerPasskey(\n apiBaseUrl: string,\n token: string,\n credentialId: string,\n publicKey: string,\n): Promise<void> {\n const res = await fetch(`${apiBaseUrl}/v1/users/config/passkey`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify({ credentialId, publicKey }),\n });\n if (!res.ok) await throwApiError(res);\n}\n\n// ── Passkey Activity ────────────────────────────────────────────────────\n\n/**\n * Reports passkey activity (verification) to update the last_active\n * timestamp server-side. Fire-and-forget — callers should not block on\n * the result.\n * PATCH /v1/users/config/passkey\n */\nexport async function reportPasskeyActivity(\n apiBaseUrl: string,\n token: string,\n credentialId: string,\n): Promise<void> {\n const res = await fetch(`${apiBaseUrl}/v1/users/config/passkey`, {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify({ credentialId }),\n });\n if (!res.ok) await throwApiError(res);\n}\n\n// ── User Config ─────────────────────────────────────────────────────────\n\n/**\n * Fetches the authenticated user's config, including passkey status.\n * GET /v1/users/config\n */\nexport async function fetchUserConfig(\n apiBaseUrl: string,\n token: string,\n): Promise<{ id: string; config: UserConfig }> {\n const res = await fetch(`${apiBaseUrl}/v1/users/config`, {\n headers: { Authorization: `Bearer ${token}` },\n });\n if (!res.ok) await throwApiError(res);\n return (await res.json()) as { id: string; config: UserConfig };\n}\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\n// ── Guest Transfers (unauthenticated) ───────────────────────────────────\n\nexport async function fetchGuestSourceOptions(\n apiBaseUrl: string,\n): Promise<GuestSourceChain[]> {\n const res = await fetch(`${apiBaseUrl}/v1/guest-transfers/source-options`);\n if (!res.ok) await throwApiError(res);\n const data = (await res.json()) as { items: GuestSourceChain[] };\n return data.items;\n}\n\nexport interface GuestQuoteParams {\n merchantAuthorization: MerchantAuthorization;\n sourceAddress: string;\n sourceChainId: number;\n sourceToken: string;\n destinationChainId: number;\n destinationAddress: string;\n destinationToken: string;\n amount: string;\n}\n\nexport async function fetchGuestQuote(\n apiBaseUrl: string,\n params: GuestQuoteParams,\n): Promise<GuestQuote> {\n const res = await fetch(`${apiBaseUrl}/v1/guest-transfers/quote`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(params),\n });\n if (!res.ok) await throwApiError(res);\n return (await res.json()) as GuestQuote;\n}\n\nexport interface CreateGuestTransferParams {\n id: string;\n merchantAuthorization: MerchantAuthorization;\n requestId: string;\n originTxHash: string;\n sourceChainId: number;\n sourceAddress: string;\n destinationChainId: number;\n destinationAddress: string;\n destinationToken: string;\n amount: { amount: number; currency: string };\n}\n\nexport async function createGuestTransfer(\n apiBaseUrl: string,\n params: CreateGuestTransferParams,\n): Promise<{ id: string; status: string }> {\n const res = await fetch(`${apiBaseUrl}/v1/guest-transfers`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(params),\n });\n if (!res.ok) await throwApiError(res);\n return (await res.json()) as { id: string; status: string };\n}\n\nexport async function fetchGuestTransfer(\n apiBaseUrl: string,\n transferId: string,\n): Promise<{ id: string; status: string }> {\n const res = await fetch(\n `${apiBaseUrl}/v1/guest-transfers/${transferId}`,\n );\n if (!res.ok) await throwApiError(res);\n return (await res.json()) as { id: string; status: string };\n}\n","import type {\n Account,\n Chain,\n Client,\n PublicActions,\n RpcSchema,\n Transport,\n WalletActions,\n} from 'viem'\n\n/**\n * Retrieves and returns an action from the client (if exists), and falls\n * back to the tree-shakable action.\n *\n * Useful for extracting overridden actions from a client (ie. if a consumer\n * wants to override the `sendTransaction` implementation).\n */\nexport function getAction<\n transport extends Transport,\n chain extends Chain | undefined,\n account extends Account | undefined,\n rpcSchema extends RpcSchema | undefined,\n extended extends { [key: string]: unknown },\n client extends Client<transport, chain, account, rpcSchema, extended>,\n parameters,\n returnType,\n>(\n client: client,\n actionFn: (_: any, parameters: parameters) => returnType,\n // Some minifiers drop `Function.prototype.name`, or replace it with short letters,\n // meaning that `actionFn.name` will not always work. For that case, the consumer\n // needs to pass the name explicitly.\n name: keyof PublicActions | keyof WalletActions,\n): (parameters: parameters) => returnType {\n const action_implicit = client[actionFn.name]\n if (typeof action_implicit === 'function')\n return action_implicit as (params: parameters) => returnType\n\n const action_explicit = client[name]\n if (typeof action_explicit === 'function')\n return action_explicit as (params: parameters) => returnType\n\n return (params) => actionFn(client, params)\n}\n","export const version = '2.22.1'\n","import { version } from '../version.js'\n\nexport const getVersion = () => `@wagmi/core@${version}`\n","import type { Compute, OneOf } from '../types/utils.js'\nimport { getVersion } from '../utils/getVersion.js'\n\nexport type ErrorType<name extends string = 'Error'> = Error & { name: name }\n\ntype BaseErrorOptions = Compute<\n OneOf<{ details?: string | undefined } | { cause: BaseError | Error }> & {\n docsPath?: string | undefined\n docsSlug?: string | undefined\n metaMessages?: string[] | undefined\n }\n>\n\nexport type BaseErrorType = BaseError & { name: 'WagmiCoreError' }\nexport class BaseError extends Error {\n details: string\n docsPath?: string | undefined\n metaMessages?: string[] | undefined\n shortMessage: string\n\n override name = 'WagmiCoreError'\n get docsBaseUrl() {\n return 'https://wagmi.sh/core'\n }\n get version() {\n return getVersion()\n }\n\n constructor(shortMessage: string, options: BaseErrorOptions = {}) {\n super()\n\n const details =\n options.cause instanceof BaseError\n ? options.cause.details\n : options.cause?.message\n ? options.cause.message\n : options.details!\n const docsPath =\n options.cause instanceof BaseError\n ? options.cause.docsPath || options.docsPath\n : options.docsPath\n\n this.message = [\n shortMessage || 'An error occurred.',\n '',\n ...(options.metaMessages ? [...options.metaMessages, ''] : []),\n ...(docsPath\n ? [\n `Docs: ${this.docsBaseUrl}${docsPath}.html${\n options.docsSlug ? `#${options.docsSlug}` : ''\n }`,\n ]\n : []),\n ...(details ? [`Details: ${details}`] : []),\n `Version: ${this.version}`,\n ].join('\\n')\n\n if (options.cause) this.cause = options.cause\n this.details = details\n this.docsPath = docsPath\n this.metaMessages = options.metaMessages\n this.shortMessage = shortMessage\n }\n\n walk(fn?: (err: unknown) => boolean) {\n return this.#walk(this, fn)\n }\n\n #walk(err: unknown, fn?: (err: unknown) => boolean): unknown {\n if (fn?.(err)) return err\n if ((err as Error).cause) return this.#walk((err as Error).cause, fn)\n return err\n }\n}\n","import type { Address } from 'viem'\n\nimport type { Connector } from '../createConfig.js'\nimport { BaseError } from './base.js'\n\nexport type ChainNotConfiguredErrorType = ChainNotConfiguredError & {\n name: 'ChainNotConfiguredError'\n}\nexport class ChainNotConfiguredError extends BaseError {\n override name = 'ChainNotConfiguredError'\n constructor() {\n super('Chain not configured.')\n }\n}\n\nexport type ConnectorAlreadyConnectedErrorType =\n ConnectorAlreadyConnectedError & {\n name: 'ConnectorAlreadyConnectedError'\n }\nexport class ConnectorAlreadyConnectedError extends BaseError {\n override name = 'ConnectorAlreadyConnectedError'\n constructor() {\n super('Connector already connected.')\n }\n}\n\nexport type ConnectorNotConnectedErrorType = ConnectorNotConnectedError & {\n name: 'ConnectorNotConnectedError'\n}\nexport class ConnectorNotConnectedError extends BaseError {\n override name = 'ConnectorNotConnectedError'\n constructor() {\n super('Connector not connected.')\n }\n}\n\nexport type ConnectorNotFoundErrorType = ConnectorNotFoundError & {\n name: 'ConnectorNotFoundError'\n}\nexport class ConnectorNotFoundError extends BaseError {\n override name = 'ConnectorNotFoundError'\n constructor() {\n super('Connector not found.')\n }\n}\n\nexport type ConnectorAccountNotFoundErrorType =\n ConnectorAccountNotFoundError & {\n name: 'ConnectorAccountNotFoundError'\n }\nexport class ConnectorAccountNotFoundError extends BaseError {\n override name = 'ConnectorAccountNotFoundError'\n constructor({\n address,\n connector,\n }: {\n address: Address\n connector: Connector\n }) {\n super(`Account \"${address}\" not found for connector \"${connector.name}\".`)\n }\n}\n\nexport type ConnectorChainMismatchErrorType = ConnectorAccountNotFoundError & {\n name: 'ConnectorChainMismatchError'\n}\nexport class ConnectorChainMismatchError extends BaseError {\n override name = 'ConnectorChainMismatchError'\n constructor({\n connectionChainId,\n connectorChainId,\n }: {\n connectionChainId: number\n connectorChainId: number\n }) {\n super(\n `The current chain of the connector (id: ${connectorChainId}) does not match the connection's chain (id: ${connectionChainId}).`,\n {\n metaMessages: [\n `Current Chain ID: ${connectorChainId}`,\n `Expected Chain ID: ${connectionChainId}`,\n ],\n },\n )\n }\n}\n\nexport type ConnectorUnavailableReconnectingErrorType =\n ConnectorUnavailableReconnectingError & {\n name: 'ConnectorUnavailableReconnectingError'\n }\nexport class ConnectorUnavailableReconnectingError extends BaseError {\n override name = 'ConnectorUnavailableReconnectingError'\n constructor({ connector }: { connector: { name: string } }) {\n super(`Connector \"${connector.name}\" unavailable while reconnecting.`, {\n details: [\n 'During the reconnection step, the only connector methods guaranteed to be available are: `id`, `name`, `type`, `uid`.',\n 'All other methods are not guaranteed to be available until reconnection completes and connectors are fully restored.',\n 'This error commonly occurs for connectors that asynchronously inject after reconnection has already started.',\n ].join(' '),\n })\n }\n}\n","import {\n type Account,\n type Address,\n type BaseErrorType,\n type Client,\n createClient,\n custom,\n} from 'viem'\nimport { getAddress, parseAccount } from 'viem/utils'\n\nimport type { Config, Connection } from '../createConfig.js'\nimport type { ErrorType } from '../errors/base.js'\nimport {\n ConnectorAccountNotFoundError,\n type ConnectorAccountNotFoundErrorType,\n ConnectorChainMismatchError,\n type ConnectorChainMismatchErrorType,\n ConnectorNotConnectedError,\n type ConnectorNotConnectedErrorType,\n ConnectorUnavailableReconnectingError,\n type ConnectorUnavailableReconnectingErrorType,\n} from '../errors/config.js'\nimport type {\n ChainIdParameter,\n ConnectorParameter,\n} from '../types/properties.js'\nimport type { Compute } from '../types/utils.js'\n\nexport type GetConnectorClientParameters<\n config extends Config = Config,\n chainId extends\n config['chains'][number]['id'] = config['chains'][number]['id'],\n> = Compute<\n ChainIdParameter<config, chainId> &\n ConnectorParameter & {\n /**\n * Account to use for the client.\n *\n * - `Account | Address`: An Account MUST exist on the connector.\n * - `null`: Account MAY NOT exist on the connector. This is useful for\n * actions that can infer the account from the connector (e.g. sending a\n * call without a connected account – the user will be prompted to select\n * an account within the wallet).\n */\n account?: Address | Account | null | undefined\n /**\n * Assert that the current chain ID matches the connector's chain ID.\n */\n assertChainId?: boolean | undefined\n }\n>\n\nexport type GetConnectorClientReturnType<\n config extends Config = Config,\n chainId extends\n config['chains'][number]['id'] = config['chains'][number]['id'],\n> = Compute<\n Client<\n config['_internal']['transports'][chainId],\n Extract<config['chains'][number], { id: chainId }>,\n Account\n >\n>\n\nexport type GetConnectorClientErrorType =\n | ConnectorAccountNotFoundErrorType\n | ConnectorChainMismatchErrorType\n | ConnectorNotConnectedErrorType\n | ConnectorUnavailableReconnectingErrorType\n // base\n | BaseErrorType\n | ErrorType\n\n/** https://wagmi.sh/core/api/actions/getConnectorClient */\nexport async function getConnectorClient<\n config extends Config,\n chainId extends config['chains'][number]['id'],\n>(\n config: config,\n parameters: GetConnectorClientParameters<config, chainId> = {},\n): Promise<GetConnectorClientReturnType<config, chainId>> {\n const { assertChainId = true } = parameters\n\n // Get connection\n let connection: Connection | undefined\n if (parameters.connector) {\n const { connector } = parameters\n if (\n config.state.status === 'reconnecting' &&\n !connector.getAccounts &&\n !connector.getChainId\n )\n throw new ConnectorUnavailableReconnectingError({ connector })\n\n const [accounts, chainId] = await Promise.all([\n connector.getAccounts().catch((e) => {\n if (parameters.account === null) return []\n throw e\n }),\n connector.getChainId(),\n ])\n connection = {\n accounts: accounts as readonly [Address, ...Address[]],\n chainId,\n connector,\n }\n } else connection = config.state.connections.get(config.state.current!)\n if (!connection) throw new ConnectorNotConnectedError()\n\n const chainId = parameters.chainId ?? connection.chainId\n\n // Check connector using same chainId as connection\n const connectorChainId = await connection.connector.getChainId()\n if (assertChainId && connectorChainId !== chainId)\n throw new ConnectorChainMismatchError({\n connectionChainId: chainId,\n connectorChainId,\n })\n\n // If connector has custom `getClient` implementation\n type Return = GetConnectorClientReturnType<config, chainId>\n const connector = connection.connector\n if (connector.getClient)\n return connector.getClient({ chainId }) as unknown as Return\n\n // Default using `custom` transport\n const account = parseAccount(parameters.account ?? connection.accounts[0]!)\n if (account) account.address = getAddress(account.address) // TODO: Checksum address as part of `parseAccount`?\n\n // If account was provided, check that it exists on the connector\n if (\n parameters.account &&\n !connection.accounts.some(\n (x) => x.toLowerCase() === account.address.toLowerCase(),\n )\n )\n throw new ConnectorAccountNotFoundError({\n address: account.address,\n connector,\n })\n\n const chain = config.chains.find((chain) => chain.id === chainId)\n const provider = (await connection.connector.getProvider({ chainId })) as {\n request(...args: any): Promise<any>\n }\n\n return createClient({\n account,\n chain,\n name: 'Connector Client',\n transport: (opts) => custom(provider)({ ...opts, retryCount: 0 }),\n }) as Return\n}\n","import type { Address, Chain } from 'viem'\n\nimport type { Config, Connector } from '../createConfig.js'\n\nexport type GetAccountReturnType<\n config extends Config = Config,\n ///\n chain = Config extends config ? Chain : config['chains'][number],\n> =\n | {\n address: Address\n addresses: readonly [Address, ...Address[]]\n chain: chain | undefined\n chainId: number\n connector: Connector\n isConnected: true\n isConnecting: false\n isDisconnected: false\n isReconnecting: false\n status: 'connected'\n }\n | {\n address: Address | undefined\n addresses: readonly Address[] | undefined\n chain: chain | undefined\n chainId: number | undefined\n connector: Connector | undefined\n isConnected: boolean\n isConnecting: false\n isDisconnected: false\n isReconnecting: true\n status: 'reconnecting'\n }\n | {\n address: Address | undefined\n addresses: readonly Address[] | undefined\n chain: chain | undefined\n chainId: number | undefined\n connector: Connector | undefined\n isConnected: false\n isReconnecting: false\n isConnecting: true\n isDisconnected: false\n status: 'connecting'\n }\n | {\n address: undefined\n addresses: undefined\n chain: undefined\n chainId: undefined\n connector: undefined\n isConnected: false\n isReconnecting: false\n isConnecting: false\n isDisconnected: true\n status: 'disconnected'\n }\n\n/** https://wagmi.sh/core/api/actions/getAccount */\nexport function getAccount<config extends Config>(\n config: config,\n): GetAccountReturnType<config> {\n const uid = config.state.current!\n const connection = config.state.connections.get(uid)\n const addresses = connection?.accounts\n const address = addresses?.[0]\n const chain = config.chains.find(\n (chain) => chain.id === connection?.chainId,\n ) as GetAccountReturnType<config>['chain']\n const status = config.state.status\n\n switch (status) {\n case 'connected':\n return {\n address: address!,\n addresses: addresses!,\n chain,\n chainId: connection?.chainId!,\n connector: connection?.connector!,\n isConnected: true,\n isConnecting: false,\n isDisconnected: false,\n isReconnecting: false,\n status,\n }\n case 'reconnecting':\n return {\n address,\n addresses,\n chain,\n chainId: connection?.chainId,\n connector: connection?.connector,\n isConnected: !!address,\n isConnecting: false,\n isDisconnected: false,\n isReconnecting: true,\n status,\n }\n case 'connecting':\n return {\n address,\n addresses,\n chain,\n chainId: connection?.chainId,\n connector: connection?.connector,\n isConnected: false,\n isConnecting: true,\n isDisconnected: false,\n isReconnecting: false,\n status,\n }\n case 'disconnected':\n return {\n address: undefined,\n addresses: undefined,\n chain: undefined,\n chainId: undefined,\n connector: undefined,\n isConnected: false,\n isConnecting: false,\n isDisconnected: true,\n isReconnecting: false,\n status,\n }\n }\n}\n","import type { Abi, ContractFunctionArgs, ContractFunctionName } from 'viem'\nimport {\n type ReadContractErrorType as viem_ReadContractErrorType,\n type ReadContractParameters as viem_ReadContractParameters,\n type ReadContractReturnType as viem_ReadContractReturnType,\n readContract as viem_readContract,\n} from 'viem/actions'\n\nimport type { Config } from '../createConfig.js'\nimport type { ChainIdParameter } from '../types/properties.js'\nimport { getAction } from '../utils/getAction.js'\n\nexport type ReadContractParameters<\n abi extends Abi | readonly unknown[] = Abi,\n functionName extends ContractFunctionName<\n abi,\n 'pure' | 'view'\n > = ContractFunctionName<abi, 'pure' | 'view'>,\n args extends ContractFunctionArgs<\n abi,\n 'pure' | 'view',\n functionName\n > = ContractFunctionArgs<abi, 'pure' | 'view', functionName>,\n config extends Config = Config,\n> = viem_ReadContractParameters<abi, functionName, args> &\n ChainIdParameter<config>\n\nexport type ReadContractReturnType<\n abi extends Abi | readonly unknown[] = Abi,\n functionName extends ContractFunctionName<\n abi,\n 'pure' | 'view'\n > = ContractFunctionName<abi, 'pure' | 'view'>,\n args extends ContractFunctionArgs<\n abi,\n 'pure' | 'view',\n functionName\n > = ContractFunctionArgs<abi, 'pure' | 'view', functionName>,\n> = viem_ReadContractReturnType<abi, functionName, args>\n\nexport type ReadContractErrorType = viem_ReadContractErrorType\n\n/** https://wagmi.sh/core/api/actions/readContract */\nexport function readContract<\n config extends Config,\n const abi extends Abi | readonly unknown[],\n functionName extends ContractFunctionName<abi, 'pure' | 'view'>,\n args extends ContractFunctionArgs<abi, 'pure' | 'view', functionName>,\n>(\n config: config,\n parameters: ReadContractParameters<abi, functionName, args, config>,\n): Promise<ReadContractReturnType<abi, functionName, args>> {\n const { chainId, ...rest } = parameters\n const client = config.getClient({ chainId })\n const action = getAction(client, viem_readContract, 'readContract')\n return action(rest as any)\n}\n","import { type Account, type WalletClient, walletActions } from 'viem'\n\nimport type { Config } from '../createConfig.js'\nimport type { BaseErrorType, ErrorType } from '../errors/base.js'\nimport type { Compute } from '../types/utils.js'\nimport {\n type GetConnectorClientErrorType,\n type GetConnectorClientParameters,\n getConnectorClient,\n} from './getConnectorClient.js'\n\nexport type GetWalletClientParameters<\n config extends Config = Config,\n chainId extends\n config['chains'][number]['id'] = config['chains'][number]['id'],\n> = GetConnectorClientParameters<Config, chainId>\n\nexport type GetWalletClientReturnType<\n config extends Config = Config,\n chainId extends\n config['chains'][number]['id'] = config['chains'][number]['id'],\n> = Compute<\n WalletClient<\n config['_internal']['transports'][chainId],\n Extract<config['chains'][number], { id: chainId }>,\n Account\n >\n>\n\nexport type GetWalletClientErrorType =\n // getConnectorClient()\n | GetConnectorClientErrorType\n // base\n | BaseErrorType\n | ErrorType\n\nexport async function getWalletClient<\n config extends Config,\n chainId extends config['chains'][number]['id'],\n>(\n config: config,\n parameters: GetWalletClientParameters<config, chainId> = {},\n): Promise<GetWalletClientReturnType<config, chainId>> {\n const client = await getConnectorClient(config, parameters)\n // @ts-ignore\n return client.extend(walletActions) as unknown as GetWalletClientReturnType<\n config,\n chainId\n >\n}\n","import type { Chain } from 'viem'\nimport { hexToString } from 'viem'\nimport {\n call,\n getTransaction,\n type WaitForTransactionReceiptErrorType as viem_WaitForTransactionReceiptErrorType,\n type WaitForTransactionReceiptParameters as viem_WaitForTransactionReceiptParameters,\n type WaitForTransactionReceiptReturnType as viem_WaitForTransactionReceiptReturnType,\n waitForTransactionReceipt as viem_waitForTransactionReceipt,\n} from 'viem/actions'\n\nimport type { Config } from '../createConfig.js'\nimport type { SelectChains } from '../types/chain.js'\nimport type { ChainIdParameter } from '../types/properties.js'\nimport type { Compute, IsNarrowable } from '../types/utils.js'\nimport { getAction } from '../utils/getAction.js'\n\nexport type WaitForTransactionReceiptParameters<\n config extends Config = Config,\n chainId extends\n config['chains'][number]['id'] = config['chains'][number]['id'],\n> = Compute<\n viem_WaitForTransactionReceiptParameters & ChainIdParameter<config, chainId>\n>\n\nexport type WaitForTransactionReceiptReturnType<\n config extends Config = Config,\n chainId extends\n config['chains'][number]['id'] = config['chains'][number]['id'],\n ///\n chains extends readonly Chain[] = SelectChains<config, chainId>,\n> = Compute<\n {\n [key in keyof chains]: viem_WaitForTransactionReceiptReturnType<\n IsNarrowable<chains[key], Chain> extends true ? chains[key] : undefined\n > & { chainId: chains[key]['id'] }\n }[number]\n>\n\nexport type WaitForTransactionReceiptErrorType =\n viem_WaitForTransactionReceiptErrorType\n\nexport async function waitForTransactionReceipt<\n config extends Config,\n chainId extends config['chains'][number]['id'],\n>(\n config: config,\n parameters: WaitForTransactionReceiptParameters<config, chainId>,\n): Promise<WaitForTransactionReceiptReturnType<config, chainId>> {\n const { chainId, timeout = 0, ...rest } = parameters\n\n const client = config.getClient({ chainId })\n const action = getAction(\n client,\n viem_waitForTransactionReceipt,\n 'waitForTransactionReceipt',\n )\n const receipt = await action({ ...rest, timeout })\n\n if (receipt.status === 'reverted') {\n const action_getTransaction = getAction(\n client,\n getTransaction,\n 'getTransaction',\n )\n const { from: account, ...txn } = await action_getTransaction({\n hash: receipt.transactionHash,\n })\n const action_call = getAction(client, call, 'call')\n const code = await action_call({\n ...(txn as any),\n account,\n data: txn.input,\n gasPrice: txn.type !== 'eip1559' ? txn.gasPrice : undefined,\n maxFeePerGas: txn.type === 'eip1559' ? txn.maxFeePerGas : undefined,\n maxPriorityFeePerGas:\n txn.type === 'eip1559' ? txn.maxPriorityFeePerGas : undefined,\n })\n const reason = code?.data\n ? hexToString(`0x${code.data.substring(138)}`)\n : 'unknown reason'\n throw new Error(reason)\n }\n\n return {\n ...receipt,\n chainId: client.chain.id,\n } as WaitForTransactionReceiptReturnType<config, chainId>\n}\n","export function normalizeConfiguredDomain(value: string): string {\n return value\n .replace(/^https?:\\/\\//, '')\n .replace(/\\/.*$/, '')\n .replace(/^\\./, '')\n .trim();\n}\n\nexport function resolveRootDomainFromHostname(hostname: string): string {\n const trimmedHostname = hostname.trim().toLowerCase();\n if (!trimmedHostname) {\n return 'localhost';\n }\n\n if (trimmedHostname === 'localhost' || /^\\d{1,3}(?:\\.\\d{1,3}){3}$/.test(trimmedHostname)) {\n return trimmedHostname;\n }\n\n const parts = trimmedHostname.split('.').filter(Boolean);\n if (parts.length < 2) {\n return trimmedHostname;\n }\n\n return parts.slice(-2).join('.');\n}\n","import { parseErc6492Signature } from 'viem/utils';\nimport { decodeAbiParameters } from 'viem';\n\nconst ERC_6492_MAGIC_SUFFIX =\n '6492649264926492649264926492649264926492649264926492649264926492';\n\n/**\n * Normalizes a wallet signature into the standard 65-byte `r || s || v`\n * format expected by viem and on-chain `ecrecover`.\n *\n * Handles the following formats transparently:\n *\n * - **65 bytes** (standard) — returned as-is.\n * - **64 bytes** (EIP-2098 compact) — `v` is extracted from the high bit\n * of `s` and appended.\n * - **ERC-6492 wrapped** — the magic suffix is detected and stripped via\n * viem's `parseErc6492Signature`, then the inner signature is\n * re-normalized.\n * - **ABI-encoded `SignatureWrapper(uint8 ownerIndex, bytes signatureData)`**\n * — used by Coinbase Smart Wallet / Base Wallet. The inner\n * `signatureData` is extracted and re-normalized.\n * - **Other >65-byte formats** — passed through as-is for EIP-1271\n * on-chain validation by smart contract account wallets.\n */\nexport function normalizeSignature(sig: string): `0x${string}` {\n const hex = sig.startsWith('0x') ? sig.slice(2) : sig;\n\n // 65 bytes — standard ECDSA (r=32 + s=32 + v=1)\n if (hex.length === 130) {\n return `0x${hex}` as `0x${string}`;\n }\n\n // 64 bytes — EIP-2098 compact (r=32 + yParityAndS=32)\n if (hex.length === 128) {\n const r = hex.slice(0, 64);\n const yParityAndS = hex.slice(64, 128);\n\n const highByte = parseInt(yParityAndS.slice(0, 2), 16);\n const v = (highByte & 0x80) !== 0 ? 28 : 27;\n\n const sFirstByte = (highByte & 0x7f).toString(16).padStart(2, '0');\n const s = sFirstByte + yParityAndS.slice(2);\n\n return `0x${r}${s}${v.toString(16)}` as `0x${string}`;\n }\n\n // ERC-6492 wrapped — ends with 32-byte magic suffix\n if (hex.length > 64 && hex.endsWith(ERC_6492_MAGIC_SUFFIX)) {\n const { signature: inner } = parseErc6492Signature(\n `0x${hex}` as `0x${string}`,\n );\n return normalizeSignature(inner);\n }\n\n // ABI-encoded SignatureWrapper(uint8 ownerIndex, bytes signatureData)\n // produced by Coinbase Smart Wallet / Base Wallet.\n if (hex.length > 130) {\n try {\n const [, innerBytes] = decodeAbiParameters(\n [{ type: 'uint256' }, { type: 'bytes' }],\n `0x${hex}` as `0x${string}`,\n );\n return normalizeSignature(innerBytes as string);\n } catch {\n // Try alternate ABI layout: abi.encode((uint8,bytes)).\n // This includes a top-level offset and is commonly 224 bytes.\n try {\n const [wrapper] = decodeAbiParameters(\n [{\n type: 'tuple',\n components: [{ type: 'uint8' }, { type: 'bytes' }],\n }],\n `0x${hex}` as `0x${string}`,\n );\n return normalizeSignature((wrapper as readonly [number, string])[1]);\n } catch {\n // Not a known wrapper — pass through for EIP-1271 on-chain validation.\n // SCA wallets may produce arbitrary-length contract signatures.\n return `0x${hex}` as `0x${string}`;\n }\n }\n }\n\n throw new Error(\n `Invalid signature: unable to normalize. Length=${hex.length / 2} bytes. ` +\n `Expected 65, 64, ERC-6492 wrapped, or ABI-encoded SignatureWrapper.`,\n );\n}\n","import type { Transfer } from './types';\nimport * as api from './api';\n\nexport type PollTransferTickResult =\n | { kind: 'retry' }\n | { kind: 'success'; transfer: Transfer }\n | { kind: 'error'; message: string };\n\nexport async function pollTransferTick(params: {\n apiBaseUrl: string;\n transferId: string;\n getAccessToken: () => Promise<string | null>;\n fetchTransfer?: typeof api.fetchTransfer;\n}): Promise<PollTransferTickResult> {\n const fetchTransfer = params.fetchTransfer ?? api.fetchTransfer;\n const token = await params.getAccessToken();\n if (!token) {\n return { kind: 'retry' };\n }\n\n try {\n const transfer = await fetchTransfer(params.apiBaseUrl, token, params.transferId);\n return { kind: 'success', transfer };\n } catch (err) {\n return {\n kind: 'error',\n message: err instanceof Error ? err.message : 'Polling error',\n };\n }\n}\n","/**\n * Cross-origin iframe passkey helpers.\n *\n * When the webview-app runs inside a cross-origin iframe, WebAuthn\n * ceremonies cannot execute from within the iframe on Safari. For passkey\n * creation, we first attempt a direct `navigator.credentials.create()`\n * call (works in Chrome/Firefox with the iframe permissions policy). If\n * that fails (Safari), we open a same-origin pop-up window on the Swype\n * domain to perform the ceremony. The popup writes the result to the\n * server with a verification token, and the opener reads from the server\n * after the popup closes.\n */\n\n/**\n * Thrown when `navigator.credentials.create()` fails inside a\n * cross-origin iframe (Safari). The UI layer should catch this and\n * offer the user a button that opens the Swype passkey pop-up.\n */\nexport class PasskeyIframeBlockedError extends Error {\n constructor(message = 'Passkey creation is not supported in this browser context.') {\n super(message);\n this.name = 'PasskeyIframeBlockedError';\n }\n}\n\nexport function isInCrossOriginIframe(): boolean {\n if (typeof window === 'undefined') return false;\n if (window.parent === window) return false;\n try {\n void window.parent.location.origin;\n return false;\n } catch {\n return true;\n }\n}\n\nexport function isSafari(): boolean {\n if (typeof navigator === 'undefined') return false;\n const ua = navigator.userAgent;\n return /Safari/i.test(ua) && !/Chrome|CriOS|Chromium|Edg|OPR|Firefox/i.test(ua);\n}\n\n// ── Pop-up based passkey creation (Safari fallback) ───────────────────\n\nconst POPUP_RESULT_TIMEOUT_MS = 120_000;\nconst POPUP_CLOSED_POLL_MS = 500;\nconst POPUP_CLOSED_GRACE_MS = 1_000;\n\nexport interface PasskeyPopupOptions {\n challenge: string;\n rpId: string;\n rpName: string;\n userId: string;\n userName: string;\n userDisplayName: string;\n pubKeyCredParams: Array<{ alg: number; type: string }>;\n authenticatorSelection?: {\n authenticatorAttachment?: string;\n residentKey?: string;\n userVerification?: string;\n };\n timeout?: number;\n /** Populated by `createPasskeyViaPopup`; not set by callers. */\n verificationToken?: string;\n /** Privy JWT so the popup can register the passkey server-side. */\n authToken?: string;\n /** Core API base URL for server-side passkey registration. */\n apiBaseUrl?: string;\n}\n\n/**\n * Opens a same-origin pop-up window on the Swype domain to perform\n * passkey creation. Used as a fallback when Safari blocks\n * `navigator.credentials.create()` inside a cross-origin iframe.\n *\n * The popup registers the passkey with the server using a verification\n * token. After the popup closes, this function checks the server for\n * the passkey matching the token.\n *\n * Must be called from a user-gesture handler (e.g. button click) to\n * avoid the browser's pop-up blocker.\n */\nexport function createPasskeyViaPopup(\n options: PasskeyPopupOptions,\n): Promise<{ credentialId: string; publicKey: string }> {\n return new Promise((resolve, reject) => {\n const verificationToken = crypto.randomUUID();\n const payload: PasskeyPopupOptions = { ...options, verificationToken };\n const encoded = btoa(JSON.stringify(payload));\n const popupUrl = `${window.location.origin}/passkey-register#${encoded}`;\n\n const popup = window.open(popupUrl, 'swype-passkey');\n if (!popup) {\n reject(new Error('Pop-up blocked. Please allow pop-ups for this site and try again.'));\n return;\n }\n\n let settled = false;\n\n const timer = setTimeout(() => {\n cleanup();\n reject(new Error('Passkey creation timed out. Please try again.'));\n }, POPUP_RESULT_TIMEOUT_MS);\n\n const closedPoll = setInterval(() => {\n if (popup.closed) {\n clearInterval(closedPoll);\n setTimeout(() => {\n if (!settled) {\n settled = true;\n cleanup();\n checkServerForPasskeyByToken(\n options.authToken,\n options.apiBaseUrl,\n verificationToken,\n ).then((result) => {\n if (result) {\n resolve(result);\n } else {\n reject(new Error('Passkey window was closed before completing.'));\n }\n }).catch(() => {\n reject(new Error('Passkey window was closed before completing.'));\n });\n }\n }, POPUP_CLOSED_GRACE_MS);\n }\n }, POPUP_CLOSED_POLL_MS);\n\n function cleanup() {\n clearTimeout(timer);\n clearInterval(closedPoll);\n }\n });\n}\n\n// ── Pop-up based passkey verification (Safari fallback) ───────────────\n\nconst VERIFY_POPUP_TIMEOUT_MS = 60_000;\n\nexport interface PasskeyVerifyPopupOptions {\n credentialIds: string[];\n rpId: string;\n /** Populated by `findDevicePasskeyViaPopup`; not set by callers. */\n verificationToken?: string;\n /** Privy JWT so the popup can report verification server-side. */\n authToken?: string;\n /** Core API base URL for server-side passkey activity reporting. */\n apiBaseUrl?: string;\n}\n\n/**\n * Opens a same-origin pop-up window on the Swype domain to check whether\n * any of the given passkey credential IDs exist on this device.\n *\n * Used as a fallback when Safari blocks `navigator.credentials.get()`\n * inside a cross-origin iframe. The popup runs on the Swype domain where\n * the rpId matches, so WebAuthn works.\n *\n * The popup writes a verification token to the server. After the popup\n * closes, the opener checks the server for the matching token to determine\n * which credential was verified.\n *\n * Must be called from a user-gesture handler (e.g. button click) to\n * avoid the browser's pop-up blocker.\n *\n * @returns The matching credential ID, or `null` if none matched or the\n * popup was closed before completing.\n */\nexport function findDevicePasskeyViaPopup(\n options: PasskeyVerifyPopupOptions,\n): Promise<string | null> {\n return new Promise((resolve, reject) => {\n const verificationToken = crypto.randomUUID();\n const payload: PasskeyVerifyPopupOptions = {\n ...options,\n verificationToken,\n };\n const encoded = btoa(JSON.stringify(payload));\n const popupUrl = `${window.location.origin}/passkey-verify#${encoded}`;\n\n const popup = window.open(popupUrl, 'swype-passkey-verify');\n if (!popup) {\n reject(new Error('Pop-up blocked. Please allow pop-ups for this site and try again.'));\n return;\n }\n\n let settled = false;\n\n const timer = setTimeout(() => {\n cleanup();\n resolve(null);\n }, VERIFY_POPUP_TIMEOUT_MS);\n\n const closedPoll = setInterval(() => {\n if (popup.closed && !settled) {\n clearInterval(closedPoll);\n setTimeout(() => {\n if (!settled) {\n settled = true;\n cleanup();\n checkServerForPasskeyByToken(\n options.authToken,\n options.apiBaseUrl,\n verificationToken,\n ).then((result) => {\n resolve(result?.credentialId ?? null);\n }).catch(() => {\n resolve(null);\n });\n }\n }, POPUP_CLOSED_GRACE_MS);\n }\n }, POPUP_CLOSED_POLL_MS);\n\n function cleanup() {\n clearTimeout(timer);\n clearInterval(closedPoll);\n }\n });\n}\n\n/**\n * Server-side check: fetches the user's passkeys and returns the one\n * whose `lastVerificationToken` matches the given token.\n *\n * Used by both registration and verification popup flows to retrieve\n * the result after the popup writes to the server and closes.\n */\nasync function checkServerForPasskeyByToken(\n authToken: string | undefined,\n apiBaseUrl: string | undefined,\n verificationToken: string,\n): Promise<{ credentialId: string; publicKey: string } | null> {\n if (!authToken || !apiBaseUrl) return null;\n\n const res = await fetch(`${apiBaseUrl}/v1/users/config`, {\n headers: { Authorization: `Bearer ${authToken}` },\n });\n if (!res.ok) return null;\n\n const body = (await res.json()) as {\n config: {\n passkeys?: Array<{ credentialId: string; publicKey: string; lastVerificationToken?: string | null }>;\n };\n };\n\n const passkeys = body.config.passkeys ?? [];\n const matched = passkeys.find((p) => p.lastVerificationToken === verificationToken);\n return matched ? { credentialId: matched.credentialId, publicKey: matched.publicKey } : null;\n}\n","// ── Swype React SDK Hooks ──────────────────────────────────────────────\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useConfig, useConnect, useSwitchChain } from 'wagmi';\nimport { getAccount, getWalletClient } from '@wagmi/core';\nimport { usePrivy } from '@privy-io/react-auth';\nimport { recoverTypedDataAddress } from 'viem';\n\nimport type {\n AuthorizationAction,\n AuthorizationSessionDetail,\n ActionExecutionResult,\n Transfer,\n TransferSignPayload,\n SourceSelection,\n} from './types';\nimport * as api from './api';\nimport { useOptionalSwypeConfig, useSwypeConfig } from './context';\nimport { normalizeConfiguredDomain, resolveRootDomainFromHostname } from './passkeyRpId';\nimport { normalizeSignature } from './signature';\nimport { pollTransferTick } from './transferPolling';\nimport {\n isInCrossOriginIframe,\n PasskeyIframeBlockedError,\n createPasskeyViaPopup,\n findDevicePasskeyViaPopup,\n type PasskeyPopupOptions,\n} from './passkey-delegation';\nexport { useSwypeConfig } from './context';\nexport { PasskeyIframeBlockedError, createPasskeyViaPopup, findDevicePasskeyViaPopup, isSafari, isInCrossOriginIframe, type PasskeyPopupOptions } from './passkey-delegation';\n\n\n// ── Constants ──────────────────────────────────────────────────────────\n\nconst WALLET_CLIENT_MAX_ATTEMPTS = 25;\nconst WALLET_CLIENT_POLL_MS = 400;\n\nconst ACTION_POLL_INTERVAL_MS = 500;\nconst ACTION_POLL_MAX_RETRIES = 20;\n\nconst SIGN_PERMIT2_POLL_MS = 1000;\nconst SIGN_PERMIT2_MAX_POLLS = 15;\n\nconst TRANSFER_SIGN_MAX_POLLS = 60;\n\n// ── Types ──────────────────────────────────────────────────────────────\n\ntype WagmiConfig = Parameters<typeof getWalletClient>[0];\ntype Connectors = ReturnType<typeof useConnect>['connectors'];\ntype ConnectAsync = ReturnType<typeof useConnect>['connectAsync'];\ntype SwitchChainAsync = ReturnType<typeof useSwitchChain>['switchChainAsync'];\ntype AccessTokenGetter = () => Promise<string | null | undefined>;\n\ntype SignTypedDataPayload = {\n domain: Record<string, unknown>;\n types: Record<string, Array<{ name: string; type: string }>>;\n primaryType: string;\n message: Record<string, unknown>;\n};\n\n// ── Helpers ────────────────────────────────────────────────────────────\n\n/**\n * Waits until `document.hasFocus()` returns true before resolving.\n *\n * SFSafariViewController (and Chrome Custom Tabs) can present the web page\n * before the document receives focus — particularly when opened via a SwiftUI\n * `.sheet`, where the underlying window retains focus during the presentation\n * animation. Calling `navigator.credentials.create/get` while the document is\n * unfocused throws \"The document is not focused\", aborting the WebAuthn\n * ceremony.\n *\n * We poll `document.hasFocus()` every `intervalMs` for up to `timeoutMs`.\n * If focus is already held the promise resolves synchronously on the next\n * microtask tick, adding negligible latency in the common case.\n */\nfunction waitForDocumentFocus(timeoutMs = 5000, intervalMs = 100): Promise<void> {\n return new Promise((resolve, reject) => {\n if (typeof document === 'undefined') {\n resolve();\n return;\n }\n\n if (document.hasFocus()) {\n resolve();\n return;\n }\n\n const deadline = Date.now() + timeoutMs;\n\n const timer = setInterval(() => {\n if (document.hasFocus()) {\n clearInterval(timer);\n resolve();\n } else if (Date.now() >= deadline) {\n clearInterval(timer);\n // Attempt the WebAuthn call anyway — some browsers report hasFocus()\n // as false even when the user is actively interacting with the page.\n resolve();\n }\n }, intervalMs);\n });\n}\n\nfunction actionSuccess(\n action: AuthorizationAction,\n message: string,\n data?: unknown,\n): ActionExecutionResult {\n return { actionId: action.id, type: action.type, status: 'success', message, data };\n}\n\nfunction actionError(\n action: AuthorizationAction,\n message: string,\n): ActionExecutionResult {\n return { actionId: action.id, type: action.type, status: 'error', message };\n}\n\nfunction isUserRejection(msg: string): boolean {\n const lower = msg.toLowerCase();\n return lower.includes('rejected') || lower.includes('denied');\n}\n\nfunction hexToBytes(hex: string): Uint8Array<ArrayBuffer> {\n const clean = hex.startsWith('0x') ? hex.slice(2) : hex;\n const bytes = clean.match(/.{1,2}/g)!.map((b) => parseInt(b, 16));\n return new Uint8Array(bytes) as Uint8Array<ArrayBuffer>;\n}\n\nfunction toBase64(buffer: ArrayBuffer | ArrayBufferLike): string {\n return btoa(String.fromCharCode(...new Uint8Array(buffer)));\n}\n\nfunction base64ToBytes(value: string): Uint8Array<ArrayBuffer> {\n const normalized = value.replace(/-/g, '+').replace(/_/g, '/');\n const padded = normalized + '='.repeat((4 - (normalized.length % 4)) % 4);\n const raw = atob(padded);\n const bytes = new Uint8Array(raw.length);\n for (let i = 0; i < raw.length; i++) {\n bytes[i] = raw.charCodeAt(i);\n }\n return bytes as Uint8Array<ArrayBuffer>;\n}\n\nfunction readEnvValue(name: string): string | undefined {\n const meta = import.meta as unknown as { env?: Record<string, string | undefined> };\n const metaValue = meta.env?.[name];\n if (typeof metaValue === 'string' && metaValue.trim().length > 0) {\n return metaValue.trim();\n }\n\n const processValue = (\n globalThis as { process?: { env?: Record<string, string | undefined> } }\n ).process?.env?.[name];\n if (typeof processValue === 'string' && processValue.trim().length > 0) {\n return processValue.trim();\n }\n\n return undefined;\n}\n\nexport function resolvePasskeyRpId(): string {\n const configuredDomain = readEnvValue('VITE_DOMAIN') ?? readEnvValue('SWYPE_DOMAIN');\n if (configuredDomain) {\n return normalizeConfiguredDomain(configuredDomain);\n }\n\n if (typeof window !== 'undefined') {\n return resolveRootDomainFromHostname(window.location.hostname);\n }\n\n return 'localhost';\n}\n\n// Delegation helpers imported from './passkey-delegation'.\n\nasync function waitForWalletClient(\n wagmiConfig: WagmiConfig,\n params: Parameters<typeof getWalletClient>[1] = {},\n) {\n for (let i = 0; i < WALLET_CLIENT_MAX_ATTEMPTS; i++) {\n try {\n const account = getAccount(wagmiConfig);\n const enrichedParams = account.connector\n ? { ...params, connector: account.connector }\n : params;\n return await getWalletClient(wagmiConfig, enrichedParams);\n } catch {\n if (i === WALLET_CLIENT_MAX_ATTEMPTS - 1) {\n throw new Error('Wallet not ready. Please try again.');\n }\n await new Promise((r) => setTimeout(r, WALLET_CLIENT_POLL_MS));\n }\n }\n throw new Error('Wallet not ready. Please try again.');\n}\n\nfunction parseSignTypedDataPayload(\n typedData: Record<string, unknown>,\n): SignTypedDataPayload {\n const { domain, types, primaryType, message } = typedData;\n\n if (!domain || typeof domain !== 'object' || Array.isArray(domain)) {\n throw new Error('SIGN_PERMIT2 typedData is missing a valid domain object.');\n }\n if (!types || typeof types !== 'object' || Array.isArray(types)) {\n throw new Error('SIGN_PERMIT2 typedData is missing a valid types object.');\n }\n if (typeof primaryType !== 'string') {\n throw new Error('SIGN_PERMIT2 typedData is missing primaryType.');\n }\n if (!message || typeof message !== 'object' || Array.isArray(message)) {\n throw new Error('SIGN_PERMIT2 typedData is missing a valid message object.');\n }\n\n return {\n domain: domain as Record<string, unknown>,\n types: types as Record<string, Array<{ name: string; type: string }>>,\n primaryType,\n message: message as Record<string, unknown>,\n };\n}\n\n/** Extract sorted pending actions from a session, excluding already-completed ones. */\nfunction getPendingActions(\n session: AuthorizationSessionDetail,\n completedIds: Set<string>,\n): AuthorizationAction[] {\n return session.actions\n .filter((a) => a.status === 'PENDING' && !completedIds.has(a.id))\n .sort((a, b) => a.orderIndex - b.orderIndex);\n}\n\n// ── Standalone passkey creation ─────────────────────────────────────────\n\n/**\n * Creates a WebAuthn passkey credential.\n * Used for upfront passkey registration before the authorization flow.\n *\n * @param params.userId - Globally unique user identifier (e.g. Privy DID).\n * Used as the WebAuthn `user.id` handle so each user gets a distinct\n * credential slot on the authenticator.\n * @param params.displayName - Human-readable label shown in the OS passkey\n * prompt (e.g. the user's email address or name).\n * @returns The base64-encoded credentialId and publicKey.\n */\nexport async function createPasskeyCredential(\n params: { userId: string; displayName: string },\n): Promise<{ credentialId: string; publicKey: string }> {\n const challenge = new Uint8Array(32);\n crypto.getRandomValues(challenge);\n const rpId = resolvePasskeyRpId();\n\n const publicKeyOptions: PublicKeyCredentialCreationOptions = {\n challenge,\n rp: { name: 'Swype', id: rpId },\n user: {\n id: new TextEncoder().encode(params.userId),\n name: params.displayName,\n displayName: params.displayName,\n },\n pubKeyCredParams: [\n { alg: -7, type: 'public-key' },\n { alg: -257, type: 'public-key' },\n ],\n authenticatorSelection: {\n authenticatorAttachment: 'platform',\n residentKey: 'preferred',\n userVerification: 'required',\n },\n timeout: 60000,\n };\n\n if (isInCrossOriginIframe()) {\n try {\n await waitForDocumentFocus();\n const credential = await navigator.credentials.create({\n publicKey: publicKeyOptions,\n }) as PublicKeyCredential | null;\n\n if (!credential) {\n throw new Error('Passkey creation was cancelled.');\n }\n\n return extractPasskeyResult(credential);\n } catch (err) {\n if (err instanceof PasskeyIframeBlockedError) throw err;\n if (err instanceof Error && err.message === 'Passkey creation was cancelled.') throw err;\n throw new PasskeyIframeBlockedError();\n }\n }\n\n await waitForDocumentFocus();\n\n const credential = await navigator.credentials.create({\n publicKey: publicKeyOptions,\n }) as PublicKeyCredential | null;\n\n if (!credential) {\n throw new Error('Passkey creation was cancelled.');\n }\n\n return extractPasskeyResult(credential);\n}\n\nfunction extractPasskeyResult(\n credential: PublicKeyCredential,\n): { credentialId: string; publicKey: string } {\n const response = credential.response as AuthenticatorAttestationResponse;\n const publicKeyBytes = response.getPublicKey?.();\n return {\n credentialId: toBase64(credential.rawId),\n publicKey: publicKeyBytes ? toBase64(publicKeyBytes) : '',\n };\n}\n\n/**\n * Builds the {@link PasskeyPopupOptions} for a user. Called by the UI\n * layer when it needs to open the passkey creation pop-up after\n * `createPasskeyCredential` throws {@link PasskeyIframeBlockedError}.\n *\n * @param params.authToken - Privy JWT so the popup can register the\n * passkey server-side (Safari fallback when BroadcastChannel is blocked).\n * @param params.apiBaseUrl - Core API base URL for server-side registration.\n */\nexport function buildPasskeyPopupOptions(\n params: { userId: string; displayName: string; authToken?: string; apiBaseUrl?: string },\n): PasskeyPopupOptions {\n const challenge = new Uint8Array(32);\n crypto.getRandomValues(challenge);\n const rpId = resolvePasskeyRpId();\n\n return {\n challenge: toBase64(challenge),\n rpId,\n rpName: 'Swype',\n userId: toBase64(new TextEncoder().encode(params.userId)),\n userName: params.displayName,\n userDisplayName: params.displayName,\n pubKeyCredParams: [\n { alg: -7, type: 'public-key' },\n { alg: -257, type: 'public-key' },\n ],\n authenticatorSelection: {\n authenticatorAttachment: 'platform',\n residentKey: 'preferred',\n userVerification: 'required',\n },\n timeout: 60000,\n authToken: params.authToken,\n apiBaseUrl: params.apiBaseUrl,\n };\n}\n\n/**\n * @deprecated Use {@link findDevicePasskey} instead, which checks all\n * credentials in a single WebAuthn call.\n */\nexport async function deviceHasPasskey(credentialId: string): Promise<boolean> {\n const found = await findDevicePasskey([credentialId]);\n return found != null;\n}\n\n/**\n * Determines which (if any) of the given server-registered passkeys exists on\n * the current device. All credential IDs are passed in a single\n * `navigator.credentials.get()` call so the browser shows at most one prompt\n * and the platform authenticator automatically selects the matching key.\n *\n * @param credentialIds - Base64-encoded WebAuthn credential IDs from the server.\n * @returns The matching credential ID, or `null` if none are on this device.\n */\nexport async function findDevicePasskey(credentialIds: string[]): Promise<string | null> {\n if (credentialIds.length === 0) return null;\n\n try {\n const challenge = new Uint8Array(32);\n crypto.getRandomValues(challenge);\n\n await waitForDocumentFocus();\n\n const assertion = await navigator.credentials.get({\n publicKey: {\n challenge,\n rpId: resolvePasskeyRpId(),\n allowCredentials: credentialIds.map(id => ({\n type: 'public-key' as const,\n id: base64ToBytes(id),\n })),\n userVerification: 'discouraged',\n timeout: 30000,\n },\n }) as PublicKeyCredential | null;\n\n if (!assertion) return null;\n return toBase64(assertion.rawId);\n } catch {\n return null;\n }\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 const result = await pollTransferTick({\n apiBaseUrl,\n transferId: transferIdRef.current,\n getAccessToken,\n });\n\n if (result.kind === 'retry') {\n return;\n }\n\n if (result.kind === 'error') {\n setError(result.message);\n stopPolling();\n return;\n }\n\n setError(null);\n setTransfer(result.transfer);\n\n if (result.transfer.status === 'COMPLETED' || result.transfer.status === 'FAILED') {\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 poll();\n intervalRef.current = setInterval(poll, intervalMs);\n },\n [poll, intervalMs, stopPolling],\n );\n\n useEffect(() => () => stopPolling(), [stopPolling]);\n\n return { transfer, error, isPolling, startPolling, stopPolling };\n}\n\n// ── Action executors ──────────────────────────────────────────────────\n//\n// Each function handles a single authorization action type. They are\n// standalone (not hooks) so they can be tested and reasoned about\n// independently. The useAuthorizationExecutor hook wires them together\n// with React state.\n\nasync function executeOpenProvider(\n action: AuthorizationAction,\n wagmiConfig: WagmiConfig,\n connectors: Connectors,\n connectAsync: ConnectAsync,\n): Promise<ActionExecutionResult> {\n try {\n const account = getAccount(wagmiConfig);\n\n if (account.isConnected && account.address) {\n const hexChainId = account.chainId\n ? `0x${account.chainId.toString(16)}`\n : undefined;\n return actionSuccess(action,\n `Connected. Account: ${account.address}, Chain: ${hexChainId}`,\n { accounts: [account.address], chainId: hexChainId },\n );\n }\n\n const targetId = action.metadata?.wagmiConnectorId as string | undefined;\n const metaMaskConnector = connectors.find((c) => {\n const id = c.id.toLowerCase();\n const name = c.name.toLowerCase();\n return id.includes('metamask') || name.includes('metamask');\n });\n const connector = targetId\n ? connectors.find((c) => c.id === targetId) ?? metaMaskConnector ?? connectors[0]\n : metaMaskConnector ?? connectors[0];\n\n if (!connector) {\n return actionError(action, 'No wallet connector found. Please install a supported wallet.');\n }\n\n const result = await connectAsync({ connector });\n const hexChainId = `0x${result.chainId.toString(16)}`;\n return actionSuccess(action,\n `Connected to ${connector.name}. Account: ${result.accounts[0]}, Chain: ${hexChainId}`,\n { accounts: [...result.accounts], chainId: hexChainId },\n );\n } catch (err) {\n return actionError(action,\n err instanceof Error ? err.message : 'Failed to connect wallet',\n );\n }\n}\n\nasync function executeSelectSource(\n action: AuthorizationAction,\n waitForSelection: (action: AuthorizationAction) => Promise<SourceSelection>,\n): 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 (!options || options.length === 0) {\n return actionError(\n action,\n 'No selectable source options returned by backend.',\n );\n }\n\n // Always pause for explicit user confirmation, including single-option cases.\n const selection = await waitForSelection(action);\n const isValidSelection = options.some(\n (option) => (\n option.chainName === selection.chainName\n && option.tokenSymbol === selection.tokenSymbol\n ),\n );\n\n if (!isValidSelection) {\n return actionError(\n action,\n 'Invalid source selection. Please choose one of the provided options.',\n );\n }\n\n return actionSuccess(action,\n `Selected ${selection.tokenSymbol} on ${selection.chainName}.`,\n { selectedChainName: selection.chainName, selectedTokenSymbol: selection.tokenSymbol },\n );\n } catch (err) {\n return actionError(action,\n err instanceof Error ? err.message : 'Failed to select source',\n );\n }\n}\n\nasync function executeSwitchChain(\n action: AuthorizationAction,\n wagmiConfig: WagmiConfig,\n switchChainAsync: SwitchChainAsync,\n): Promise<ActionExecutionResult> {\n try {\n const account = getAccount(wagmiConfig);\n const targetChainIdHex = action.metadata?.targetChainId as string | undefined;\n if (!targetChainIdHex) {\n return actionError(action, 'No targetChainId in action metadata.');\n }\n\n if (!/^0x[0-9a-fA-F]+$/.test(targetChainIdHex)) {\n return actionError(\n action,\n `Invalid targetChainId in action metadata: ${targetChainIdHex}`,\n );\n }\n\n const targetChainIdNum = parseInt(targetChainIdHex, 16);\n if (Number.isNaN(targetChainIdNum)) {\n return actionError(\n action,\n `Invalid targetChainId in action metadata: ${targetChainIdHex}`,\n );\n }\n const hexChainId = `0x${targetChainIdNum.toString(16)}`;\n\n if (account.chainId === targetChainIdNum) {\n return actionSuccess(action,\n `Already on chain ${hexChainId}. Skipped.`,\n { chainId: hexChainId, switched: false },\n );\n }\n\n await switchChainAsync({ chainId: targetChainIdNum });\n return actionSuccess(action,\n `Switched to chain ${hexChainId}.`,\n { chainId: hexChainId, switched: true },\n );\n } catch (err) {\n return actionError(action,\n err instanceof Error ? err.message : 'Failed to switch chain',\n );\n }\n}\n\n/**\n * Sends an ERC-20 `approve(permit2, maxUint256)` transaction from the\n * user's EOA so the Permit2 contract can manage their token allowances.\n */\nasync function executeApprovePermit2(\n action: AuthorizationAction,\n wagmiConfig: WagmiConfig,\n): Promise<ActionExecutionResult> {\n try {\n const walletClient = await waitForWalletClient(wagmiConfig);\n const account = getAccount(wagmiConfig);\n const sender = account.address ?? walletClient.account?.address;\n const expectedWallet = action.metadata?.walletAddress as string | undefined;\n\n if (!sender) {\n throw new Error('Wallet account not available. Please connect your wallet.');\n }\n\n if (expectedWallet && sender.toLowerCase() !== expectedWallet.toLowerCase()) {\n return actionError(action,\n `Connected wallet ${sender} does not match the required source wallet ` +\n `${expectedWallet}. Please switch accounts in your wallet and retry.`,\n );\n }\n\n const to = action.metadata?.to as string | undefined;\n const data = action.metadata?.data as string | undefined;\n const tokenSymbol = action.metadata?.tokenSymbol as string | undefined;\n\n if (!to || !data) {\n return actionError(action,\n 'APPROVE_PERMIT2 metadata is missing transaction parameters (to, data).',\n );\n }\n\n const txHash = await walletClient.request({\n method: 'eth_sendTransaction',\n params: [{\n from: sender,\n to: to as `0x${string}`,\n data: data as `0x${string}`,\n value: '0x0',\n }],\n });\n\n console.info(\n `[swype-sdk][approve-permit2] ERC-20 approve tx sent. ` +\n `token=${tokenSymbol ?? to}, txHash=${txHash}`,\n );\n\n return actionSuccess(action,\n `Approved Permit2 to spend ${tokenSymbol ?? 'tokens'}.`,\n { txHash },\n );\n } catch (err) {\n const msg = err instanceof Error ? err.message : 'Failed to approve Permit2';\n return actionError(action,\n isUserRejection(msg)\n ? 'You rejected the approval transaction. Please approve the Permit2 spending allowance in your wallet to continue.'\n : msg,\n );\n }\n}\n\n/**\n * Signs an EIP-712 typed-data message granting the user's smart account\n * a Permit2 allowance to pull tokens from their EOA.\n *\n * If typedData isn't available yet (smart account still deploying), polls\n * the session until it appears.\n */\nasync function executeSignPermit2(\n action: AuthorizationAction,\n wagmiConfig: WagmiConfig,\n apiBaseUrl: string,\n sessionId: string | null,\n): Promise<ActionExecutionResult> {\n try {\n const expectedWallet = action.metadata?.walletAddress as string | undefined;\n const walletClient = await waitForWalletClient(\n wagmiConfig,\n expectedWallet ? { account: expectedWallet as `0x${string}` } : {},\n );\n const account = getAccount(wagmiConfig);\n const connectedAddress = account.address ?? walletClient.account?.address;\n const sender = expectedWallet ?? connectedAddress;\n\n if (!sender) {\n throw new Error('Wallet account not available. Please connect your wallet.');\n }\n\n if (\n expectedWallet &&\n connectedAddress &&\n connectedAddress.toLowerCase() !== expectedWallet.toLowerCase()\n ) {\n return actionError(action,\n `Connected wallet ${connectedAddress} does not match the required source wallet ` +\n `${expectedWallet}. Please switch accounts in your wallet and retry.`,\n );\n }\n\n let typedData = action.metadata?.typedData as Record<string, unknown> | undefined;\n const tokenSymbol = action.metadata?.tokenSymbol as string | undefined;\n const ownerIsSCA = action.metadata?.ownerIsSCA === true;\n\n // Poll for typedData if the server hasn't populated it yet\n if (!typedData && sessionId) {\n for (let i = 0; i < SIGN_PERMIT2_MAX_POLLS; i++) {\n await new Promise((r) => setTimeout(r, SIGN_PERMIT2_POLL_MS));\n const session = await api.fetchAuthorizationSession(apiBaseUrl, sessionId);\n const updated = session.actions.find((a) => a.id === action.id);\n typedData = updated?.metadata?.typedData as Record<string, unknown> | undefined;\n if (typedData) break;\n }\n }\n\n if (!typedData) {\n return actionError(action,\n 'SIGN_PERMIT2 metadata is missing typedData. The server may still be preparing the signing payload.',\n );\n }\n\n const parsed = parseSignTypedDataPayload(typedData);\n\n console.info(\n `[swype-sdk][sign-permit2] Signing typed data. ` +\n `expectedOwner=${expectedWallet ?? 'N/A'}, senderParam=${sender}, ` +\n `connectedAddress=${connectedAddress ?? 'N/A'}, primaryType=${parsed.primaryType}, ` +\n `domainChainId=${String(parsed.domain.chainId ?? 'N/A')}, ` +\n `verifyingContract=${String(parsed.domain.verifyingContract ?? 'N/A')}`,\n );\n\n const rawSignature = await walletClient.signTypedData({\n account: sender as `0x${string}`,\n domain: parsed.domain as Parameters<typeof walletClient.signTypedData>[0]['domain'],\n types: parsed.types as Parameters<typeof walletClient.signTypedData>[0]['types'],\n primaryType: parsed.primaryType as Parameters<typeof walletClient.signTypedData>[0]['primaryType'],\n message: parsed.message as Parameters<typeof walletClient.signTypedData>[0]['message'],\n });\n\n // SCA owners: preserve the raw signature so the server and Permit2 contract\n // can forward it unchanged to the SCA's on-chain validator (e.g. Kernel\n // WebAuthn). Normalizing would strip the wrapper the validator expects.\n // EOA owners: normalize EIP-2098 compact / SignatureWrapper formats.\n const signature = ownerIsSCA\n ? ((rawSignature.startsWith('0x')\n ? rawSignature\n : `0x${rawSignature}`) as `0x${string}`)\n : normalizeSignature(rawSignature);\n\n if (ownerIsSCA) {\n console.info(\n `[swype-sdk][sign-permit2] Owner is SCA — preserving raw signature (${rawSignature.length / 2 - 1}B). ` +\n `Server will validate via EIP-1271.`,\n );\n } else {\n const recoverInput = {\n domain: parsed.domain,\n types: parsed.types,\n primaryType: parsed.primaryType,\n message: parsed.message,\n signature,\n } as unknown as Parameters<typeof recoverTypedDataAddress>[0];\n const recoveredSigner = await recoverTypedDataAddress(recoverInput);\n const expectedSigner = (expectedWallet ?? sender).toLowerCase();\n\n console.info(\n `[swype-sdk][sign-permit2] Signature recovered. ` +\n `recoveredSigner=${recoveredSigner}, expectedSigner=${expectedSigner}`,\n );\n\n if (recoveredSigner.toLowerCase() !== expectedSigner) {\n return actionError(action,\n `Wallet signed with ${recoveredSigner}, but source wallet is ` +\n `${expectedWallet ?? sender}. Please switch to the source wallet in MetaMask and retry.`,\n );\n }\n }\n\n console.info(\n `[swype-sdk][sign-permit2] Permit2 EIP-712 signature obtained. token=${tokenSymbol ?? 'unknown'}`,\n );\n\n return actionSuccess(action,\n `Permit2 allowance signed for ${tokenSymbol ?? 'tokens'}.`,\n { signature },\n );\n } catch (err) {\n const msg = err instanceof Error ? err.message : 'Failed to sign Permit2 allowance';\n return actionError(action,\n isUserRejection(msg)\n ? 'You rejected the Permit2 signature request. Please approve the signature in your wallet to allow fund transfers.'\n : msg,\n );\n }\n}\n\n// ── Authorization executor ─────────────────────────────────────────────\n\nexport interface UseAuthorizationExecutorResult {\n executing: boolean;\n results: ActionExecutionResult[];\n error: string | null;\n /** The current action being executed (for UI display). */\n currentAction: AuthorizationAction | 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 One-Tap limit setup, null otherwise. */\n pendingOneTapSetup: AuthorizationAction | null;\n /** Call this from the UI after the user has set their One-Tap limit. */\n resolveOneTapSetup: () => void;\n /** Execute authorization by session id. */\n executeSessionById: (sessionId: string) => Promise<void>;\n}\n\nexport interface UseAuthorizationExecutorOptions {\n /** Optional API base URL override when used outside SwypeProvider. */\n apiBaseUrl?: string;\n}\n\n/**\n * Executes the full authorization flow for a transfer's first session:\n * fetches the session, walks through PENDING actions, reports each\n * completion to the server, and chains new actions that appear.\n *\n * Supported action types:\n * - OPEN_PROVIDER — connect the user's wallet\n * - SELECT_SOURCE — pause for user chain+token selection\n * - SWITCH_CHAIN — switch the wallet to the required chain\n * - CREATE_SMART_ACCOUNT — server-side smart account creation (legacy)\n * - DEPLOY_SMART_ACCOUNT — server-side on-chain deployment via no-op UserOp\n * - APPROVE_PERMIT2 — ERC-20 approve(permit2, maxUint256) from EOA\n * - SIGN_PERMIT2 — EIP-712 Permit2 allowance signature from EOA\n *\n * Transfer signing (passkey) is handled separately via\n * `useTransferSigning()` after the authorization flow completes.\n */\nexport function useAuthorizationExecutor(\n options?: UseAuthorizationExecutorOptions,\n): UseAuthorizationExecutorResult {\n const swypeConfig = useOptionalSwypeConfig();\n const apiBaseUrl = options?.apiBaseUrl ?? swypeConfig?.apiBaseUrl;\n const wagmiConfig = useConfig();\n const { connectAsync, connectors } = useConnect();\n const { switchChainAsync } = useSwitchChain();\n\n const [executing, setExecuting] = useState(false);\n const [results, setResults] = useState<ActionExecutionResult[]>([]);\n const [error, setError] = useState<string | null>(null);\n const [currentAction, setCurrentAction] = useState<AuthorizationAction | 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 const sessionIdRef = useRef<string | 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 const waitForSelection = useCallback(\n (action: AuthorizationAction) =>\n new Promise<SourceSelection>((resolve) => {\n selectSourceResolverRef.current = resolve;\n setPendingSelectSource(action);\n }),\n [],\n );\n\n // One-Tap setup pause mechanism (pauses before SIGN_PERMIT2 when awaitingLimit)\n const [pendingOneTapSetup, setPendingOneTapSetup] = useState<AuthorizationAction | null>(null);\n const oneTapSetupResolverRef = useRef<(() => void) | null>(null);\n\n const resolveOneTapSetup = useCallback(() => {\n if (oneTapSetupResolverRef.current) {\n oneTapSetupResolverRef.current();\n oneTapSetupResolverRef.current = null;\n setPendingOneTapSetup(null);\n }\n }, []);\n\n const waitForOneTapSetup = useCallback(\n (action: AuthorizationAction) =>\n new Promise<void>((resolve) => {\n oneTapSetupResolverRef.current = resolve;\n setPendingOneTapSetup(action);\n }),\n [],\n );\n\n // ── Dispatch a single action to the appropriate executor ───────────\n\n const dispatchAction = useCallback(\n async (action: AuthorizationAction): Promise<ActionExecutionResult> => {\n setCurrentAction(action);\n switch (action.type) {\n case 'OPEN_PROVIDER':\n return executeOpenProvider(action, wagmiConfig, connectors, connectAsync);\n case 'SELECT_SOURCE':\n return executeSelectSource(action, waitForSelection);\n case 'SWITCH_CHAIN':\n return executeSwitchChain(action, wagmiConfig, switchChainAsync);\n case 'APPROVE_PERMIT2':\n return executeApprovePermit2(action, wagmiConfig);\n case 'DEPLOY_SMART_ACCOUNT':\n return actionSuccess(action, 'Smart account deployment acknowledged.');\n case 'SIGN_PERMIT2': {\n let resolvedAction = action;\n if (action.metadata?.awaitingLimit) {\n await waitForOneTapSetup(action);\n if (apiBaseUrl && sessionIdRef.current) {\n const session = await api.fetchAuthorizationSession(apiBaseUrl, sessionIdRef.current);\n const refreshed = session.actions.find((a) => a.id === action.id);\n if (refreshed) resolvedAction = refreshed;\n }\n }\n return executeSignPermit2(resolvedAction, wagmiConfig, apiBaseUrl ?? '', sessionIdRef.current);\n }\n default:\n return actionError(action, `Unsupported action type: ${action.type}`);\n }\n },\n [wagmiConfig, connectors, connectAsync, switchChainAsync, apiBaseUrl, waitForSelection, waitForOneTapSetup],\n );\n\n // ── Main session executor ──────────────────────────────────────────\n\n const executeSessionById = useCallback(\n async (sessionId: string) => {\n if (executingRef.current) return;\n executingRef.current = true;\n\n if (!sessionId) {\n executingRef.current = false;\n throw new Error('No authorization session id provided.');\n }\n\n if (!apiBaseUrl) {\n executingRef.current = false;\n throw new Error('Missing apiBaseUrl. Provide useAuthorizationExecutor({ apiBaseUrl }) or wrap in <SwypeProvider>.');\n }\n\n sessionIdRef.current = sessionId;\n setExecuting(true);\n setError(null);\n setResults([]);\n\n try {\n let session = await api.fetchAuthorizationSession(apiBaseUrl, sessionId);\n const allResults: ActionExecutionResult[] = [];\n const completedIds = new Set<string>();\n\n // Wait for the server to create initial actions\n let pending = getPendingActions(session, completedIds);\n let retries = 0;\n\n while (\n pending.length === 0 &&\n session.status !== 'AUTHORIZED' &&\n retries < ACTION_POLL_MAX_RETRIES\n ) {\n await new Promise((r) => setTimeout(r, ACTION_POLL_INTERVAL_MS));\n session = await api.fetchAuthorizationSession(apiBaseUrl, sessionId);\n pending = getPendingActions(session, completedIds);\n retries++;\n }\n\n if (pending.length === 0 && session.status !== 'AUTHORIZED') {\n throw new Error('Authorization actions were not created in time. Please try again.');\n }\n\n // Execute actions one by one, re-fetching pending after each report\n while (pending.length > 0) {\n const action = pending[0];\n if (completedIds.has(action.id)) break;\n\n const result = await dispatchAction(action);\n\n if (result.status === 'error') {\n allResults.push(result);\n setResults([...allResults]);\n throw new Error(result.message);\n }\n\n completedIds.add(action.id);\n allResults.push(result);\n\n session = await api.reportActionCompletion(\n apiBaseUrl,\n action.id,\n (result.data as Record<string, unknown>) ?? {},\n );\n\n setResults([...allResults]);\n pending = getPendingActions(session, completedIds);\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : 'Authorization failed';\n setError(msg);\n throw err;\n } finally {\n setCurrentAction(null);\n setExecuting(false);\n executingRef.current = false;\n }\n },\n [apiBaseUrl, dispatchAction],\n );\n\n return {\n executing,\n results,\n error,\n currentAction,\n pendingSelectSource,\n resolveSelectSource,\n pendingOneTapSetup,\n resolveOneTapSetup,\n executeSessionById,\n };\n}\n\n// ── Transfer signing (post-auth passkey flow) ─────────────────────────\n\nexport interface UseTransferSigningResult {\n signing: boolean;\n signPayload: TransferSignPayload | null;\n error: string | null;\n /**\n * Starts the signing flow:\n * 1. Polls GET /v1/transfers/{id} until signPayload is present\n * 2. Triggers WebAuthn passkey prompt\n * 3. Submits signed UserOp via PATCH /v1/transfers/{id}\n */\n signTransfer: (transferId: string) => Promise<Transfer>;\n}\n\nexport interface UseTransferSigningOptions {\n /** Optional API base URL override when used outside SwypeProvider. */\n apiBaseUrl?: string;\n /** Optional access-token getter override (e.g. deeplink query token). */\n getAccessToken?: AccessTokenGetter;\n /** Optional authorization-session token for session-authenticated transfer signing. */\n authorizationSessionToken?: string;\n}\n\n/**\n * Post-authorization transfer signing hook.\n *\n * After the auth session completes and the transfer reaches AUTHORIZED,\n * the backend prepares a signPayload containing the unsigned UserOp.\n * This hook polls for it, prompts the user's passkey via WebAuthn, and\n * submits the signed UserOp back to the API.\n */\nexport function useTransferSigning(\n pollIntervalMs = 2000,\n options?: UseTransferSigningOptions,\n): UseTransferSigningResult {\n const swypeConfig = useOptionalSwypeConfig();\n const apiBaseUrl = options?.apiBaseUrl ?? swypeConfig?.apiBaseUrl;\n const authorizationSessionToken = options?.authorizationSessionToken;\n\n let privyGetAccessToken: AccessTokenGetter | undefined;\n try {\n ({ getAccessToken: privyGetAccessToken } = usePrivy());\n } catch {\n privyGetAccessToken = undefined;\n }\n const getAccessToken = options?.getAccessToken ?? privyGetAccessToken;\n const [signing, setSigning] = useState(false);\n const [signPayload, setSignPayload] = useState<TransferSignPayload | null>(null);\n const [error, setError] = useState<string | null>(null);\n\n const signTransfer = useCallback(\n async (transferId: string): Promise<Transfer> => {\n setSigning(true);\n setError(null);\n setSignPayload(null);\n\n try {\n if (!apiBaseUrl) {\n throw new Error('Missing apiBaseUrl. Provide useTransferSigning(_, { apiBaseUrl }) or wrap in <SwypeProvider>.');\n }\n if (!getAccessToken && !authorizationSessionToken) {\n throw new Error('Missing getAccessToken provider. Provide useTransferSigning(_, { getAccessToken }).');\n }\n const token = getAccessToken ? await getAccessToken() : null;\n if (!token && !authorizationSessionToken) {\n throw new Error('Could not get access token');\n }\n\n // 1. Poll for sign payload\n let payload: TransferSignPayload | null = null;\n\n for (let i = 0; i < TRANSFER_SIGN_MAX_POLLS; i++) {\n const transfer = await api.fetchTransfer(\n apiBaseUrl,\n token ?? '',\n transferId,\n authorizationSessionToken,\n );\n\n if (transfer.signPayload) {\n payload = transfer.signPayload;\n setSignPayload(payload);\n break;\n }\n\n // CREATED is a valid intermediate state — the backend may still\n // be transitioning to AUTHORIZED after the auth session completes.\n if (transfer.status !== 'AUTHORIZED' && transfer.status !== 'CREATED') {\n throw new Error(`Unexpected transfer status: ${transfer.status}`);\n }\n\n await new Promise((r) => setTimeout(r, pollIntervalMs));\n }\n\n if (!payload) {\n throw new Error('Timed out waiting for sign payload. Please try again.');\n }\n\n // 2. Prompt passkey via WebAuthn\n // The challenge MUST be the UserOp hash so the on-chain P-256\n // verifier can reconstruct the signed message via the EntryPoint.\n const hashBytes = hexToBytes(payload.userOpHash);\n\n let signedUserOp: typeof payload.userOp & {\n credentialId: string;\n signature: string;\n authenticatorData: string;\n clientDataJSON: string;\n };\n\n const allowCredentials = payload.passkeyCredentialId\n ? [{\n type: 'public-key' as const,\n id: base64ToBytes(payload.passkeyCredentialId),\n }]\n : undefined;\n\n await waitForDocumentFocus();\n\n const assertion = await navigator.credentials.get({\n publicKey: {\n challenge: hashBytes,\n rpId: resolvePasskeyRpId(),\n allowCredentials,\n userVerification: 'required',\n timeout: 60000,\n },\n }) as PublicKeyCredential | null;\n\n if (!assertion) {\n throw new Error('Passkey authentication was cancelled.');\n }\n\n const response = assertion.response as AuthenticatorAssertionResponse;\n signedUserOp = {\n ...payload.userOp,\n credentialId: toBase64(assertion.rawId),\n signature: toBase64(response.signature),\n authenticatorData: toBase64(response.authenticatorData),\n clientDataJSON: toBase64(response.clientDataJSON),\n };\n\n // 3. Submit signed UserOp via PATCH\n return await api.signTransfer(\n apiBaseUrl,\n token ?? '',\n transferId,\n signedUserOp,\n authorizationSessionToken,\n );\n } catch (err) {\n const msg = err instanceof Error ? err.message : 'Failed to sign transfer';\n setError(msg);\n throw err;\n } finally {\n setSigning(false);\n }\n },\n [apiBaseUrl, getAccessToken, pollIntervalMs, authorizationSessionToken],\n );\n\n return { signing, signPayload, error, signTransfer };\n}\n","import type { Account, SourceOption, Wallet } from './types';\nimport type { PersistedMobileFlow } from './mobileFlow';\n\n// ── Constants ──────────────────────────────────────────────────────────\n\nexport const ACTIVE_CREDENTIAL_STORAGE_KEY = 'swype_active_credential_id';\nexport const MOBILE_FLOW_STORAGE_KEY = 'swype_mobile_flow';\nexport const MIN_SEND_AMOUNT_USD = 0.25;\nexport const DEFAULT_DEPOSIT_AMOUNT_USD = 5;\n\n// ── Iframe detection ───────────────────────────────────────────────────\n\nexport function isInIframe(): boolean {\n try {\n return typeof window !== 'undefined' && window !== window.top;\n } catch {\n // Cross-origin access to window.top can throw; if it does we're in an iframe.\n return true;\n }\n}\n\n// ── Mobile flow sessionStorage persistence ─────────────────────────────\n//\n// On mobile, navigating to the wallet app can cause the browser to evict\n// the page from memory. When the user returns the page reloads from\n// scratch, losing all React state. These helpers persist the minimum\n// state needed to restore the OpenWalletScreen so the user can retry\n// or see the flow advance once authorization is detected.\n\nexport function persistMobileFlowState(data: PersistedMobileFlow): void {\n try {\n sessionStorage.setItem(MOBILE_FLOW_STORAGE_KEY, JSON.stringify(data));\n } catch { /* sessionStorage may be unavailable */ }\n}\n\nexport function loadMobileFlowState(): PersistedMobileFlow | null {\n try {\n const raw = sessionStorage.getItem(MOBILE_FLOW_STORAGE_KEY);\n if (!raw) return null;\n return JSON.parse(raw) as PersistedMobileFlow;\n } catch {\n return null;\n }\n}\n\nexport function clearMobileFlowState(): void {\n try {\n sessionStorage.removeItem(MOBILE_FLOW_STORAGE_KEY);\n } catch { /* sessionStorage may be unavailable */ }\n}\n\n// ── Smart default selection ────────────────────────────────────────────\n\nexport interface SmartDefaults {\n accountId: string;\n walletId: string | null;\n}\n\nexport function getWalletAddress(wallet: Pick<Wallet, 'name'>): string | null {\n const address = wallet.name.trim();\n return address.length > 0 ? address : null;\n}\n\nexport function getAddressableWallets(account: Account): Wallet[] {\n return account.wallets.filter((wallet) => getWalletAddress(wallet) != null);\n}\n\nexport function hasActiveDepositWallet(account: Account): boolean {\n return getAddressableWallets(account).some((wallet) => wallet.status === 'ACTIVE');\n}\n\nexport function getPreferredDepositWallet(\n account: Account,\n transferAmount: number,\n): Wallet | null {\n const wallets = getAddressableWallets(account);\n if (wallets.length === 0) return null;\n\n let bestWithAllowance: Wallet | null = null;\n let bestWithAllowanceBal = -1;\n let bestActive: Wallet | null = null;\n let bestActiveBal = -1;\n let bestAny: Wallet | null = null;\n let bestAnyBal = -1;\n\n for (const wallet of wallets) {\n const isActive = wallet.status === 'ACTIVE';\n const walletBal = wallet.balance.available.amount;\n\n if (isActive) {\n const hasFullyEligibleSource = wallet.sources.some(\n (s) =>\n s.balance.available.amount >= transferAmount\n && s.remainingAllowance != null\n && s.remainingAllowance >= transferAmount,\n );\n if (hasFullyEligibleSource && walletBal > bestWithAllowanceBal) {\n bestWithAllowance = wallet;\n bestWithAllowanceBal = walletBal;\n }\n if (walletBal > bestActiveBal) {\n bestActive = wallet;\n bestActiveBal = walletBal;\n }\n }\n if (walletBal > bestAnyBal) {\n bestAny = wallet;\n bestAnyBal = walletBal;\n }\n }\n\n return bestWithAllowance ?? bestActive ?? bestAny ?? wallets[0];\n}\n\nexport function getDepositEligibleAccounts(accounts: Account[]): Account[] {\n return accounts.filter((account) => getAddressableWallets(account).length > 0);\n}\n\nexport function resolveDepositSelection(\n accounts: Account[],\n transferAmount: number,\n selectedAccountId?: string | null,\n): SmartDefaults | null {\n const eligibleAccounts = getDepositEligibleAccounts(accounts);\n if (eligibleAccounts.length === 0) return null;\n\n if (selectedAccountId) {\n const selectedAccount = eligibleAccounts.find((account) => account.id === selectedAccountId);\n if (selectedAccount) {\n const preferredWallet = getPreferredDepositWallet(selectedAccount, transferAmount);\n return {\n accountId: selectedAccount.id,\n walletId: preferredWallet?.id ?? null,\n };\n }\n }\n\n for (const account of eligibleAccounts) {\n const fullyEligibleWallet = getAddressableWallets(account).find(\n (wallet) =>\n wallet.status === 'ACTIVE'\n && wallet.sources.some(\n (source) =>\n source.balance.available.amount >= transferAmount\n && source.remainingAllowance != null\n && source.remainingAllowance >= transferAmount,\n ),\n );\n if (fullyEligibleWallet) {\n return {\n accountId: account.id,\n walletId: fullyEligibleWallet.id,\n };\n }\n }\n\n const fallbackAccount = eligibleAccounts[0];\n const fallbackWallet = getPreferredDepositWallet(fallbackAccount, transferAmount);\n return {\n accountId: fallbackAccount.id,\n walletId: fallbackWallet?.id ?? null,\n };\n}\n\nexport function computeSmartDefaults(\n accts: Account[],\n transferAmount: number,\n): SmartDefaults | null {\n if (accts.length === 0) return null;\n\n for (const acct of accts) {\n for (const wallet of acct.wallets) {\n if (wallet.status === 'ACTIVE') {\n const bestSource = wallet.sources.find(\n (s) => s.balance.available.amount >= transferAmount,\n );\n if (bestSource) {\n return { accountId: acct.id, walletId: wallet.id };\n }\n }\n }\n }\n\n let bestAccount: Account | null = null;\n let bestWallet: Wallet | null = null;\n let bestBalance = -1;\n let bestIsActive = false;\n\n for (const acct of accts) {\n for (const wallet of acct.wallets) {\n const walletBal = wallet.balance.available.amount;\n const isActive = wallet.status === 'ACTIVE';\n if (\n walletBal > bestBalance ||\n (walletBal === bestBalance && isActive && !bestIsActive)\n ) {\n bestBalance = walletBal;\n bestAccount = acct;\n bestWallet = wallet;\n bestIsActive = isActive;\n }\n }\n }\n\n if (bestAccount) {\n return {\n accountId: bestAccount.id,\n walletId: bestWallet?.id ?? null,\n };\n }\n\n return { accountId: accts[0].id, walletId: null };\n}\n\n// ── Source option helpers ───────────────────────────────────────────────\n\nexport function parseRawBalance(rawBalance: string, decimals: number): number {\n const parsed = Number(rawBalance);\n if (!Number.isFinite(parsed)) return 0;\n return parsed / 10 ** decimals;\n}\n\nexport interface SelectSourceChainChoice {\n chainName: string;\n balance: number;\n tokens: { tokenSymbol: string; balance: number }[];\n}\n\nexport function buildSelectSourceChoices(options: SourceOption[]): SelectSourceChainChoice[] {\n const chainChoices: SelectSourceChainChoice[] = [];\n const chainIndexByName = new Map<string, number>();\n\n for (const option of options) {\n const { chainName, tokenSymbol } = option;\n const balance = parseRawBalance(option.rawBalance, option.decimals);\n\n let chainChoice: SelectSourceChainChoice;\n const existingIdx = chainIndexByName.get(chainName);\n\n if (existingIdx === undefined) {\n chainChoice = { chainName, balance: 0, tokens: [] };\n chainIndexByName.set(chainName, chainChoices.length);\n chainChoices.push(chainChoice);\n } else {\n chainChoice = chainChoices[existingIdx];\n }\n\n chainChoice.balance += balance;\n const existing = chainChoice.tokens.find((t) => t.tokenSymbol === tokenSymbol);\n if (existing) {\n existing.balance += balance;\n } else {\n chainChoice.tokens.push({ tokenSymbol, balance });\n }\n }\n\n return chainChoices\n .map((chain) => ({\n ...chain,\n tokens: chain.tokens.filter((t) => t.balance > 0).sort((a, b) => b.balance - a.balance),\n }))\n .filter((chain) => chain.tokens.length > 0)\n .sort((a, b) => b.balance - a.balance);\n}\n","import type {\n Account,\n Chain,\n GuestQuote,\n GuestSourceChain,\n PaymentStep,\n Provider,\n SourceType,\n Transfer,\n} from './types';\nimport type { NormalizedAuthIdentifier } from './auth';\nimport type { SmartDefaults } from './paymentHelpers';\n\n// ── State ──────────────────────────────────────────────────────────────\n\nexport interface PaymentState {\n step: PaymentStep;\n error: string | null;\n\n providers: Provider[];\n accounts: Account[];\n chains: Chain[];\n loadingData: boolean;\n\n selectedProviderId: string | null;\n selectedAccountId: string | null;\n selectedWalletId: string | null;\n selectedTokenSymbol: string | null;\n\n amount: string;\n\n transfer: Transfer | null;\n creatingTransfer: boolean;\n\n registeringPasskey: boolean;\n verifyingPasskeyPopup: boolean;\n passkeyPopupNeeded: boolean;\n activeCredentialId: string | null;\n knownCredentialIds: string[];\n\n verificationTarget: NormalizedAuthIdentifier | null;\n\n oneTapLimit: number;\n\n mobileFlow: boolean;\n deeplinkUri: string | null;\n\n increasingLimit: boolean;\n\n previousStep: PaymentStep | null;\n\n // Guest flow state\n isGuestFlow: boolean;\n guestQuote: GuestQuote | null;\n guestOriginTxHash: string | null;\n guestTransferId: string | null;\n guestTransferComplete: boolean;\n guestWalletAddress: string | null;\n guestWalletChainId: number | null;\n guestFlowInProgress: boolean;\n\n /** Tracks that the user came from a guest checkout and opted into One-Tap setup. */\n cameFromGuestSetup: boolean;\n\n // Guest source selection\n guestSourceOptions: GuestSourceChain[];\n guestSourceOptionsLoading: boolean;\n guestSourceOptionsError: string | null;\n /** Token balances keyed by `${chainId}:${tokenAddress}` after wallet connection. */\n guestTokenBalances: Record<string, string>;\n guestBalancesLoading: boolean;\n selectedGuestChainName: string | null;\n selectedGuestChainId: number | null;\n selectedGuestTokenSymbol: string | null;\n selectedGuestTokenAddress: string | null;\n selectedGuestTokenDecimals: number | null;\n}\n\n// ── Actions ────────────────────────────────────────────────────────────\n\nexport type PaymentAction =\n // Auth\n | { type: 'CODE_SENT'; target: NormalizedAuthIdentifier }\n | { type: 'BACK_TO_LOGIN' }\n\n // Passkey\n | { type: 'PASSKEY_CONFIG_LOADED'; knownIds: string[]; oneTapLimit?: number }\n | { type: 'PASSKEY_ACTIVATED'; credentialId: string }\n | { type: 'SET_PASSKEY_POPUP_NEEDED'; needed: boolean }\n | { type: 'SET_REGISTERING_PASSKEY'; value: boolean }\n | { type: 'SET_VERIFYING_PASSKEY'; value: boolean }\n\n // Data loading\n | { type: 'DATA_LOAD_START' }\n | {\n type: 'DATA_LOADED';\n providers: Provider[];\n accounts: Account[];\n chains: Chain[];\n defaults: SmartDefaults | null;\n resolvedStep?: PaymentStep;\n clearMobileState?: boolean;\n }\n | { type: 'DATA_LOAD_END' }\n | {\n type: 'ACCOUNTS_RELOADED';\n accounts: Account[];\n providers: Provider[];\n defaults: SmartDefaults | null;\n }\n\n // Source selection\n | { type: 'SELECT_PROVIDER'; providerId: string }\n | { type: 'SELECT_ACCOUNT'; accountId: string; walletId: string | null }\n | { type: 'SELECT_TOKEN'; walletId: string; tokenSymbol: string }\n\n // Transfer lifecycle\n | { type: 'PAY_STARTED'; isSetupRedirect: boolean }\n | { type: 'PAY_ENDED' }\n | { type: 'PAY_ERROR'; error: string; fallbackStep: PaymentStep }\n | { type: 'TRANSFER_CREATED'; transfer: Transfer }\n | { type: 'TRANSFER_SIGNED'; transfer: Transfer }\n | { type: 'TRANSFER_COMPLETED'; transfer: Transfer }\n | { type: 'TRANSFER_FAILED'; transfer: Transfer; error: string }\n | { type: 'PROCESSING_TIMEOUT'; error: string }\n | { type: 'CONFIRM_SIGN_SUCCESS'; transfer: Transfer }\n\n // Mobile flow\n | { type: 'MOBILE_DEEPLINK_READY'; deeplinkUri: string }\n | { type: 'MOBILE_SETUP_COMPLETE'; transfer?: Transfer }\n | { type: 'MOBILE_SIGN_READY'; transfer: Transfer }\n | { type: 'CLEAR_MOBILE_STATE' }\n | {\n type: 'ENTER_MOBILE_FLOW';\n deeplinkUri: string;\n providerId: string | null;\n error?: string;\n }\n | { type: 'MOBILE_RESUME_SUCCESS'; transfer: Transfer }\n | { type: 'MOBILE_RESUME_FAILED'; transfer: Transfer }\n | { type: 'MOBILE_RESUME_PROCESSING'; transfer: Transfer }\n\n // Increase limit\n | { type: 'SET_INCREASING_LIMIT'; value: boolean }\n | { type: 'INCREASE_LIMIT_DEEPLINK'; transfer: Transfer; deeplinkUri: string }\n\n // Navigation & error\n | { type: 'NAVIGATE'; step: PaymentStep }\n | { type: 'SET_ERROR'; error: string | null }\n\n // Lifecycle\n | {\n type: 'NEW_PAYMENT';\n depositAmount: number | null;\n firstAccountId: string | null;\n }\n | { type: 'LOGOUT'; depositAmount: number | null }\n | { type: 'SYNC_AMOUNT'; amount: string }\n\n // Guest flow\n | { type: 'GUEST_WALLET_CONNECTED'; address: string; chainId: number }\n | { type: 'GUEST_FETCHING_QUOTE' }\n | { type: 'GUEST_QUOTE_RECEIVED'; quote: GuestQuote }\n | { type: 'GUEST_APPROVING' }\n | { type: 'GUEST_DEPOSIT_SIGNED'; txHash: string }\n | { type: 'GUEST_TRANSFER_SUBMITTED'; transferId: string }\n | { type: 'GUEST_TRANSFER_COMPLETED'; transferId: string }\n | { type: 'GUEST_TRANSFER_FAILED'; error: string }\n | { type: 'GUEST_FLOW_ERROR'; error: string }\n | { type: 'START_SETUP_FLOW' }\n | { type: 'SETUP_FLOW_COMPLETE' }\n\n // Guest source selection\n | { type: 'GUEST_SOURCE_OPTIONS_LOADING' }\n | { type: 'GUEST_SOURCE_OPTIONS_LOADED'; options: GuestSourceChain[] }\n | { type: 'GUEST_SOURCE_OPTIONS_FAILED'; error: string }\n | { type: 'GUEST_BALANCES_LOADING' }\n | { type: 'GUEST_BALANCES_LOADED'; balances: Record<string, string> }\n | { type: 'GUEST_SELECT_CHAIN'; chainName: string; chainId: number }\n | { type: 'GUEST_SELECT_TOKEN'; tokenSymbol: string; tokenAddress: string; decimals: number };\n\n// ── Step resolution ────────────────────────────────────────────────────\n\nfunction hasActiveWallet(accounts: Account[]): boolean {\n return accounts.some((a) => a.wallets.some((w) => w.status === 'ACTIVE'));\n}\n\nexport function resolveStep(state: PaymentState): PaymentStep {\n if (!state.activeCredentialId) {\n if (state.knownCredentialIds.length > 0 && state.passkeyPopupNeeded) {\n return 'verify-passkey';\n }\n return 'create-passkey';\n }\n\n if (!hasActiveWallet(state.accounts)) {\n return 'wallet-picker';\n }\n\n return 'deposit';\n}\n\n// ── Derived values ─────────────────────────────────────────────────────\n\nexport function deriveSourceTypeAndId(state: PaymentState): {\n sourceType: SourceType;\n sourceId: string;\n} {\n if (state.selectedWalletId) {\n return { sourceType: 'walletId', sourceId: state.selectedWalletId };\n }\n if (state.selectedAccountId) {\n return { sourceType: 'accountId', sourceId: state.selectedAccountId };\n }\n return { sourceType: 'accountId', sourceId: '' };\n}\n\n// ── Initial state ──────────────────────────────────────────────────────\n\nexport interface InitialStateConfig {\n depositAmount: number | null;\n passkeyPopupNeeded: boolean;\n activeCredentialId: string | null;\n}\n\nexport function createInitialState(config: InitialStateConfig): PaymentState {\n return {\n step: 'guest-deposit',\n error: null,\n providers: [],\n accounts: [],\n chains: [],\n loadingData: false,\n selectedProviderId: null,\n selectedAccountId: null,\n selectedWalletId: null,\n selectedTokenSymbol: null,\n amount: config.depositAmount != null ? config.depositAmount.toString() : '',\n transfer: null,\n creatingTransfer: false,\n registeringPasskey: false,\n verifyingPasskeyPopup: false,\n passkeyPopupNeeded: config.passkeyPopupNeeded,\n activeCredentialId: config.activeCredentialId,\n knownCredentialIds: [],\n verificationTarget: null,\n oneTapLimit: 100,\n mobileFlow: false,\n deeplinkUri: null,\n increasingLimit: false,\n previousStep: null,\n isGuestFlow: true,\n guestQuote: null,\n guestOriginTxHash: null,\n guestTransferId: null,\n guestTransferComplete: false,\n guestWalletAddress: null,\n guestWalletChainId: null,\n guestFlowInProgress: false,\n cameFromGuestSetup: false,\n guestSourceOptions: [],\n guestSourceOptionsLoading: false,\n guestSourceOptionsError: null,\n guestTokenBalances: {},\n guestBalancesLoading: false,\n selectedGuestChainName: null,\n selectedGuestChainId: null,\n selectedGuestTokenSymbol: null,\n selectedGuestTokenAddress: null,\n selectedGuestTokenDecimals: null,\n };\n}\n\n// ── Reducer ────────────────────────────────────────────────────────────\n\nexport function paymentReducer(\n state: PaymentState,\n action: PaymentAction,\n): PaymentState {\n switch (action.type) {\n // ── Auth ──────────────────────────────────────────────────────\n\n case 'CODE_SENT':\n return {\n ...state,\n verificationTarget: action.target,\n error: null,\n step: 'otp-verify',\n };\n\n case 'BACK_TO_LOGIN':\n return {\n ...state,\n verificationTarget: null,\n error: null,\n step: 'login',\n };\n\n // ── Passkey ──────────────────────────────────────────────────\n\n case 'PASSKEY_CONFIG_LOADED':\n return {\n ...state,\n knownCredentialIds: action.knownIds,\n oneTapLimit: action.oneTapLimit ?? state.oneTapLimit,\n };\n\n case 'PASSKEY_ACTIVATED':\n return {\n ...state,\n activeCredentialId: action.credentialId,\n passkeyPopupNeeded: false,\n };\n\n case 'SET_PASSKEY_POPUP_NEEDED':\n return { ...state, passkeyPopupNeeded: action.needed };\n\n case 'SET_REGISTERING_PASSKEY':\n return { ...state, registeringPasskey: action.value };\n\n case 'SET_VERIFYING_PASSKEY':\n return { ...state, verifyingPasskeyPopup: action.value };\n\n // ── Data loading ─────────────────────────────────────────────\n\n case 'DATA_LOAD_START':\n return { ...state, loadingData: true, error: null };\n\n case 'DATA_LOADED': {\n const next: PaymentState = {\n ...state,\n providers: action.providers,\n accounts: action.accounts,\n chains: action.chains,\n };\n\n if (action.defaults) {\n next.selectedAccountId = action.defaults.accountId;\n next.selectedWalletId = action.defaults.walletId;\n }\n\n if (action.clearMobileState) {\n next.mobileFlow = false;\n next.deeplinkUri = null;\n }\n\n if (action.resolvedStep !== undefined) {\n next.step = action.resolvedStep;\n }\n\n return next;\n }\n\n case 'DATA_LOAD_END':\n return { ...state, loadingData: false };\n\n case 'ACCOUNTS_RELOADED': {\n const next: PaymentState = {\n ...state,\n accounts: action.accounts,\n providers: action.providers,\n };\n if (action.defaults) {\n next.selectedAccountId = action.defaults.accountId;\n next.selectedWalletId = action.defaults.walletId;\n }\n return next;\n }\n\n // ── Source selection ──────────────────────────────────────────\n\n case 'SELECT_PROVIDER':\n return {\n ...state,\n selectedProviderId: action.providerId,\n selectedAccountId: null,\n selectedWalletId: null,\n selectedTokenSymbol: null,\n };\n\n case 'SELECT_ACCOUNT':\n return {\n ...state,\n selectedAccountId: action.accountId,\n selectedWalletId: action.walletId,\n selectedTokenSymbol: null,\n step: 'deposit',\n };\n\n case 'SELECT_TOKEN':\n return {\n ...state,\n selectedWalletId: action.walletId,\n selectedTokenSymbol: action.tokenSymbol,\n step: 'deposit',\n };\n\n // ── Transfer lifecycle ───────────────────────────────────────\n\n case 'PAY_STARTED':\n return {\n ...state,\n step: action.isSetupRedirect ? 'open-wallet' : 'processing',\n error: null,\n creatingTransfer: true,\n deeplinkUri: null,\n mobileFlow: false,\n };\n\n case 'PAY_ENDED':\n return { ...state, creatingTransfer: false };\n\n case 'PAY_ERROR':\n return {\n ...state,\n error: action.error,\n step: action.fallbackStep,\n };\n\n case 'TRANSFER_CREATED':\n return { ...state, transfer: action.transfer };\n\n case 'TRANSFER_SIGNED':\n return { ...state, transfer: action.transfer };\n\n case 'TRANSFER_COMPLETED':\n return {\n ...state,\n transfer: action.transfer,\n step: 'success',\n mobileFlow: false,\n deeplinkUri: null,\n };\n\n case 'TRANSFER_FAILED':\n return {\n ...state,\n transfer: action.transfer,\n error: action.error,\n step: 'success',\n mobileFlow: false,\n deeplinkUri: null,\n };\n\n case 'PROCESSING_TIMEOUT':\n return {\n ...state,\n error: state.isGuestFlow\n ? `Your transfer was submitted and may still complete. ${action.error}`\n : action.error,\n step: 'success',\n guestFlowInProgress: false,\n };\n\n case 'CONFIRM_SIGN_SUCCESS':\n return {\n ...state,\n transfer: action.transfer,\n step: 'processing',\n mobileFlow: false,\n deeplinkUri: null,\n };\n\n // ── Mobile flow ──────────────────────────────────────────────\n\n case 'MOBILE_DEEPLINK_READY':\n return {\n ...state,\n mobileFlow: true,\n deeplinkUri: action.deeplinkUri,\n step: 'open-wallet',\n };\n\n case 'MOBILE_SETUP_COMPLETE':\n return {\n ...state,\n transfer: action.transfer ?? state.transfer,\n error: null,\n mobileFlow: false,\n deeplinkUri: null,\n step: 'deposit',\n };\n\n case 'MOBILE_SIGN_READY':\n return {\n ...state,\n transfer: action.transfer,\n error: null,\n mobileFlow: false,\n deeplinkUri: null,\n step: 'confirm-sign',\n };\n\n case 'CLEAR_MOBILE_STATE':\n return { ...state, mobileFlow: false, deeplinkUri: null };\n\n case 'ENTER_MOBILE_FLOW':\n return {\n ...state,\n mobileFlow: true,\n deeplinkUri: action.deeplinkUri,\n selectedProviderId: action.providerId ?? state.selectedProviderId,\n error: action.error ?? null,\n step: 'open-wallet',\n };\n\n case 'MOBILE_RESUME_SUCCESS':\n return {\n ...state,\n transfer: action.transfer,\n error: null,\n mobileFlow: false,\n deeplinkUri: null,\n step: 'success',\n };\n\n case 'MOBILE_RESUME_FAILED':\n return {\n ...state,\n transfer: action.transfer,\n error: 'Transfer failed.',\n mobileFlow: false,\n deeplinkUri: null,\n step: 'success',\n };\n\n case 'MOBILE_RESUME_PROCESSING':\n return {\n ...state,\n transfer: action.transfer,\n error: null,\n mobileFlow: false,\n deeplinkUri: null,\n step: 'processing',\n };\n\n // ── Increase limit ───────────────────────────────────────────\n\n case 'SET_INCREASING_LIMIT':\n return { ...state, increasingLimit: action.value };\n\n case 'INCREASE_LIMIT_DEEPLINK':\n return {\n ...state,\n transfer: action.transfer,\n mobileFlow: true,\n deeplinkUri: action.deeplinkUri,\n };\n\n // ── Navigation & error ───────────────────────────────────────\n\n case 'NAVIGATE':\n return { ...state, step: action.step, previousStep: state.step, error: null };\n\n case 'SET_ERROR':\n return { ...state, error: action.error };\n\n // ── Lifecycle ────────────────────────────────────────────────\n\n case 'NEW_PAYMENT':\n return {\n ...state,\n step: 'deposit',\n transfer: null,\n error: null,\n amount:\n action.depositAmount != null\n ? action.depositAmount.toString()\n : '',\n mobileFlow: false,\n deeplinkUri: null,\n selectedProviderId: null,\n selectedWalletId: null,\n selectedAccountId: action.firstAccountId,\n guestQuote: null,\n guestOriginTxHash: null,\n guestTransferId: null,\n guestTransferComplete: false,\n guestWalletAddress: null,\n guestWalletChainId: null,\n guestFlowInProgress: false,\n cameFromGuestSetup: false,\n };\n\n case 'LOGOUT':\n return {\n ...createInitialState({\n depositAmount: action.depositAmount,\n passkeyPopupNeeded: state.passkeyPopupNeeded,\n activeCredentialId: null,\n }),\n };\n\n case 'SYNC_AMOUNT':\n return { ...state, amount: action.amount };\n\n // ── Guest flow ───────────────────────────────────────────────\n\n case 'GUEST_WALLET_CONNECTED':\n return {\n ...state,\n guestWalletAddress: action.address,\n guestWalletChainId: action.chainId,\n error: null,\n };\n\n case 'GUEST_FETCHING_QUOTE':\n return {\n ...state,\n step: 'guest-fetching-quote',\n };\n\n case 'GUEST_QUOTE_RECEIVED':\n return {\n ...state,\n guestQuote: action.quote,\n step: 'guest-signing',\n };\n\n case 'GUEST_APPROVING':\n return {\n ...state,\n step: 'guest-approving',\n };\n\n case 'GUEST_DEPOSIT_SIGNED':\n return {\n ...state,\n guestOriginTxHash: action.txHash,\n step: 'processing',\n };\n\n case 'GUEST_TRANSFER_SUBMITTED':\n return {\n ...state,\n guestTransferId: action.transferId,\n };\n\n case 'GUEST_TRANSFER_COMPLETED':\n return {\n ...state,\n guestTransferComplete: true,\n guestFlowInProgress: false,\n guestQuote: null,\n step: 'success',\n };\n\n case 'GUEST_TRANSFER_FAILED':\n return {\n ...state,\n error: action.error,\n guestFlowInProgress: false,\n step: 'success',\n };\n\n case 'GUEST_FLOW_ERROR':\n return {\n ...state,\n error: action.error,\n guestFlowInProgress: false,\n step: 'guest-deposit',\n };\n\n case 'START_SETUP_FLOW':\n return {\n ...state,\n isGuestFlow: false,\n cameFromGuestSetup: true,\n step: 'login',\n };\n\n case 'SETUP_FLOW_COMPLETE':\n return {\n ...state,\n step: 'setup-complete',\n };\n\n // ── Guest source selection ────────────────────────────────────\n\n case 'GUEST_SOURCE_OPTIONS_LOADING':\n return { ...state, guestSourceOptionsLoading: true, guestSourceOptionsError: null };\n\n case 'GUEST_SOURCE_OPTIONS_LOADED':\n return {\n ...state,\n guestSourceOptions: action.options,\n guestSourceOptionsLoading: false,\n guestSourceOptionsError: null,\n };\n\n case 'GUEST_SOURCE_OPTIONS_FAILED':\n return {\n ...state,\n guestSourceOptionsLoading: false,\n guestSourceOptionsError: action.error,\n };\n\n case 'GUEST_BALANCES_LOADING':\n return { ...state, guestBalancesLoading: true };\n\n case 'GUEST_BALANCES_LOADED':\n return {\n ...state,\n guestTokenBalances: action.balances,\n guestBalancesLoading: false,\n step: 'guest-select-source',\n };\n\n case 'GUEST_SELECT_CHAIN': {\n const chain = state.guestSourceOptions.find((c) => c.chainName === action.chainName);\n const firstToken = chain?.tokens[0];\n return {\n ...state,\n selectedGuestChainName: action.chainName,\n selectedGuestChainId: action.chainId,\n selectedGuestTokenSymbol: firstToken?.symbol ?? null,\n selectedGuestTokenAddress: firstToken?.address ?? null,\n selectedGuestTokenDecimals: firstToken?.decimals ?? null,\n };\n }\n\n case 'GUEST_SELECT_TOKEN':\n return {\n ...state,\n selectedGuestTokenSymbol: action.tokenSymbol,\n selectedGuestTokenAddress: action.tokenAddress,\n selectedGuestTokenDecimals: action.decimals,\n };\n\n default:\n return state;\n }\n}\n","export type AuthIdentifierKind = 'email' | 'phone';\n\nexport interface NormalizedAuthIdentifier {\n kind: AuthIdentifierKind;\n value: string;\n}\n\nconst EMAIL_PATTERN = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\nconst PHONE_DIGIT_PATTERN = /^\\d{7,15}$/;\n\nexport function normalizePhoneNumber(rawValue: string): string | null {\n const trimmed = rawValue.trim();\n if (!trimmed) return null;\n\n const hasExplicitCountryCode = trimmed.startsWith('+');\n const digits = trimmed.replace(/\\D/g, '');\n if (!PHONE_DIGIT_PATTERN.test(digits)) return null;\n\n return hasExplicitCountryCode ? `+${digits}` : digits;\n}\n\nexport function normalizeAuthIdentifier(rawValue: string): NormalizedAuthIdentifier | null {\n const trimmed = rawValue.trim();\n if (!trimmed) return null;\n\n if (EMAIL_PATTERN.test(trimmed)) {\n return {\n kind: 'email',\n value: trimmed.toLowerCase(),\n };\n }\n\n const normalizedPhoneNumber = normalizePhoneNumber(trimmed);\n if (normalizedPhoneNumber) {\n return {\n kind: 'phone',\n value: normalizedPhoneNumber,\n };\n }\n\n return null;\n}\n\nexport function maskAuthIdentifier(identifier: NormalizedAuthIdentifier): string {\n if (identifier.kind === 'email') {\n const [localPart, domain = ''] = identifier.value.split('@');\n const localPrefix = localPart.slice(0, 2);\n return `${localPrefix}${'*'.repeat(Math.max(localPart.length - 2, 0))}@${domain}`;\n }\n\n const digits = identifier.value.replace(/\\D/g, '');\n const visibleSuffix = digits.slice(-4);\n return `***-***-${visibleSuffix}`;\n}\n","const MOBILE_USER_AGENT_PATTERN =\n /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i;\n\nexport function isMobileUserAgent(userAgent: string | null | undefined): boolean {\n if (!userAgent) {\n return false;\n }\n\n return MOBILE_USER_AGENT_PATTERN.test(userAgent);\n}\n\nexport function shouldUseWalletConnector(options: {\n useWalletConnector?: boolean;\n userAgent: string | null | undefined;\n}): boolean {\n return options.useWalletConnector ?? !isMobileUserAgent(options.userAgent);\n}\n","// ── Branded Swype Loading Screen ───────────────────────────────────────\n//\n// Context-free loading screen that can be rendered both inside and outside\n// SwypeProvider. Uses hardcoded Swype brand colours so the loading\n// experience is visually identical regardless of where it's mounted.\n\nimport type { CSSProperties } from 'react';\n\nconst MUTED = '#7fa4b0';\nconst LOGO_SIZE = 48;\n\nexport function SwypeLoadingScreen() {\n return (\n <div style={containerStyle}>\n <svg\n width={LOGO_SIZE}\n height={LOGO_SIZE}\n viewBox=\"0 0 100 100\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{ borderRadius: 10 }}\n >\n <g clipPath=\"url(#swype-loading-clip)\">\n {/* Background */}\n <rect width=\"100\" height=\"100\" rx=\"18.5874\" fill=\"white\" />\n\n {/* Detail paths */}\n <path d=\"M64.0138 36.6191C68.3952 36.7025 70.2512 42.3038 65.1932 44.0399C61.4251 44.2617 60.8419 41.8557 61.3059 38.6113C62.3258 37.4916 62.6562 37.2326 64.0138 36.6191Z\" fill=\"white\" />\n <path d=\"M34.7441 36.6714C36.6646 36.3309 38.4839 37.6898 38.813 39.71C39.1407 41.7302 37.8542 43.6499 35.9352 43.9994C34.7427 44.2169 33.5274 43.7774 32.7154 42.8325C31.8492 41.8262 31.5728 40.4029 31.9959 39.1191C32.419 37.8367 33.4719 36.8979 34.7441 36.6714Z\" fill=\"white\" />\n\n {/* Legs — animated group */}\n <g style={{ transformOrigin: '50px 62px', animation: 'swype-legs-walk 0.8s ease-in-out infinite' }}>\n <path d=\"M37.719 72.0299C39.0372 70.605 40.611 68.9843 41.7888 67.4312L50.1528 61.6651L57.6601 61.4468C57.4965 63.5289 61.7342 75.3729 61.6981 77.5158C62.154 77.0628 63.0658 76.3318 63.567 75.9876C65.9954 74.3365 68.8384 73.8223 71.4833 74.5554C72.8167 74.9328 73.9331 75.9251 74.58 77.3075C75.2967 78.8451 75.3771 80.3207 74.9127 82.0281C73.8912 85.7844 71.5792 88.6365 68.624 90.5357C66.125 92.1415 61.7077 93.9276 58.9822 93.0828C58.078 92.7956 56.4567 92.015 55.9204 91.1399C55.1385 89.8648 54.5613 88.8907 54.1469 87.3736C53.3686 84.4709 53.3459 86.0793 52.7439 77.9085C52.8102 75.0919 52.9961 69.1199 52.9088 66.782C52.1044 67.8121 48.6686 72.1053 47.7896 73.7937L43.7186 79.5555C45.2316 79.4947 47.0626 79.5314 48.354 80.4535C49.2813 81.1277 49.9192 82.2144 50.1273 83.4755C50.2332 83.8294 50.3132 84.6855 50.3258 85.0634C50.4307 88.2051 49.4337 91.7462 46.8974 93.4764C45.8189 94.2126 44.2654 94.598 43.01 94.7341C37.9909 95.3115 33.0817 93.5835 29.3502 89.9257C28.3222 88.8994 27.4875 87.705 27.4333 86.0333C27.4046 85.1165 27.6099 84.1963 28.0241 83.3859C28.6301 82.2147 30.2471 80.3005 31.0794 79.3156C33.2057 76.7997 35.4975 74.4306 37.719 72.0299Z\" fill=\"black\" />\n </g>\n\n {/* Body */}\n <path d=\"M25.2815 30.5666C25.6441 30.6182 25.869 30.0928 25.5864 29.8598C23.1701 27.868 21.5484 25.4469 21.0444 22.6545C20.3641 19.1251 21.516 15.5212 24.2422 12.6488C26.8514 9.91783 30.7518 8.12575 35.0552 7.68041C40.5681 7.11357 44.9544 9.44386 49.0355 11.908C49.1016 11.9479 49.1793 11.964 49.2559 11.9535L49.6641 11.8975C49.7772 11.882 49.8729 11.8099 49.9313 11.7118C50.7042 10.4132 53.3609 9.13558 54.9428 8.55183C63.274 5.47733 72.1015 8.67608 75.6217 15.0543C77.4169 18.3043 77.4637 21.9922 75.7515 25.2845C74.8719 26.99 73.8277 28.1868 72.3742 29.4156C72.1074 29.6412 72.3057 30.099 72.652 30.0534C78.3434 29.3036 83.6958 29.6535 88.1602 33.0995C88.1743 33.1104 88.1896 33.1204 88.2051 33.1289C94.9326 36.8336 95.4063 45.4019 90.8735 50.5016C88.6438 53.0434 85.3883 54.9193 81.641 55.8268C81.4786 55.8662 81.3675 56.017 81.3778 56.1837C81.627 60.2197 80.6407 63.7049 77.0957 66.8558C74.3594 69.31 72.2572 70.905 68.1242 71.1594C66.1317 71.2671 64.5824 71.0823 61.0405 69.4728C57.7759 67.9894 53.6996 61.9918 52.509 57.7058C52.4204 57.3871 51.9326 57.3204 51.7644 57.6052C49.4075 61.5961 43.2088 67.6787 38.7227 69.4728C35.1404 70.8919 32.2895 71.8779 28.5005 70.8789C24.3706 69.7951 20.9698 67.4623 19.0499 64.3964C18.0021 62.7282 16.7577 59.3144 17.4723 57.5087C17.4921 57.4587 17.5023 57.4056 17.4951 57.3522C17.4647 57.1259 17.359 56.7067 17.1377 56.6504C8.17592 54.367 2.58735 48.0815 5.03045 40.4013C6.14562 36.9784 8.95444 34.0395 12.8321 32.2381C16.7957 30.3763 20.9323 29.9475 25.2815 30.5666Z\" fill=\"black\" />\n\n {/* Connector */}\n <rect x=\"44.3433\" y=\"56.4863\" width=\"10.1195\" height=\"9.10751\" fill=\"black\" />\n\n {/* Eyes */}\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M45.6929 25.6221C49.2323 25.6223 52.1021 31.512 52.1021 38.7773C52.102 46.0426 49.2323 51.9323 45.6929 51.9326C42.2373 51.9326 39.4213 46.3188 39.2896 39.292C41.4308 38.8166 43.9097 38.7264 46.1079 39.1299C47.0121 39.2956 47.8949 38.5389 47.4956 37.7109C46.0273 34.6668 42.4111 34.0327 39.686 34.1816C40.5942 29.1824 42.9408 25.6221 45.6929 25.6221Z\" fill=\"white\" />\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M63.2471 25.6216C66.7865 25.6219 69.6562 31.5116 69.6562 38.7769C69.6562 46.0422 66.7865 51.9319 63.2471 51.9321C59.7916 51.9321 56.9756 46.319 56.8438 39.2925C58.985 38.8171 61.4639 38.7259 63.6621 39.1294C64.5663 39.2952 65.4491 38.5394 65.0498 37.7114C63.5816 34.6669 59.9654 34.0322 57.2402 34.1812C58.1484 29.1821 60.4951 25.6216 63.2471 25.6216Z\" fill=\"white\" />\n </g>\n <defs>\n <clipPath id=\"swype-loading-clip\">\n <rect width=\"100\" height=\"100\" rx=\"18.5874\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n\n <span style={labelStyle}>Loading...</span>\n\n <style>{`\n @keyframes swype-legs-walk {\n 0%, 100% { transform: rotate(0deg); }\n 25% { transform: rotate(5deg); }\n 75% { transform: rotate(-5deg); }\n }\n `}</style>\n </div>\n );\n}\n\nconst containerStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 12,\n height: '100%',\n flex: 1,\n background: 'transparent',\n};\n\nconst labelStyle: CSSProperties = {\n color: MUTED,\n fontSize: 13,\n fontFamily: 'system-ui, -apple-system, sans-serif',\n letterSpacing: '0.02em',\n};\n","// Inline SVG logos encoded as data URIs so they bundle with zero config.\n\nfunction svgToDataUri(svg: string): string {\n return `data:image/svg+xml,${encodeURIComponent(svg)}`;\n}\n\nconst BASE_SVG = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 111 111\" fill=\"none\">\n<path d=\"M54.921 110.034C85.359 110.034 110.034 85.402 110.034 55.017C110.034 24.6319 85.359 0 54.921 0C26.0432 0 2.35281 22.1714 0 50.3923H72.8467V59.6416H0C2.35281 87.8625 26.0432 110.034 54.921 110.034Z\" fill=\"#0052FF\"/>\n</svg>`;\n\nconst METAMASK_SVG = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 142 136.878\">\n<path fill=\"#FF5C16\" d=\"M132.682,132.192l-30.583-9.106l-23.063,13.787l-16.092-0.007l-23.077-13.78l-30.569,9.106L0,100.801l9.299-34.839L0,36.507L9.299,0l47.766,28.538h27.85L132.682,0l9.299,36.507l-9.299,29.455l9.299,34.839L132.682,132.192L132.682,132.192z\"/>\n<path fill=\"#FF5C16\" d=\"M9.305,0l47.767,28.558l-1.899,19.599L9.305,0z M39.875,100.814l21.017,16.01l-21.017,6.261C39.875,123.085,39.875,100.814,39.875,100.814z M59.212,74.345l-4.039-26.174L29.317,65.97l-0.014-0.007v0.013l0.08,18.321l10.485-9.951L59.212,74.345L59.212,74.345z M132.682,0L84.915,28.558l1.893,19.599L132.682,0z M102.113,100.814l-21.018,16.01l21.018,6.261V100.814z M112.678,65.975h0.007H112.678v-0.013l-0.006,0.007L86.815,48.171l-4.039,26.174h19.336l10.492,9.95C112.604,84.295,112.678,65.975,112.678,65.975z\"/>\n<path fill=\"#E34807\" d=\"M39.868,123.085l-30.569,9.106L0,100.814h39.868C39.868,100.814,39.868,123.085,39.868,123.085z M59.205,74.338l5.839,37.84l-8.093-21.04L29.37,84.295l10.491-9.956h19.344L59.205,74.338z M102.112,123.085l30.57,9.106l9.299-31.378h-39.869C102.112,100.814,102.112,123.085,102.112,123.085z M82.776,74.338l-5.839,37.84l8.092-21.04l27.583-6.843l-10.498-9.956H82.776V74.338z\"/>\n<path fill=\"#FF8D5D\" d=\"M0,100.801l9.299-34.839h19.997l0.073,18.327l27.584,6.843l8.092,21.039l-4.16,4.633l-21.017-16.01H0V100.801z M141.981,100.801l-9.299-34.839h-19.998l-0.073,18.327l-27.582,6.843l-8.093,21.039l4.159,4.633l21.018-16.01h39.868V100.801z M84.915,28.538h-27.85l-1.891,19.599l9.872,64.013h11.891l9.878-64.013L84.915,28.538z\"/>\n<path fill=\"#661800\" d=\"M9.299,0L0,36.507l9.299,29.455h19.997l25.87-17.804L9.299,0z M53.426,81.938h-9.059l-4.932,4.835l17.524,4.344l-3.533-9.186V81.938z M132.682,0l9.299,36.507l-9.299,29.455h-19.998L86.815,48.158L132.682,0z M88.568,81.938h9.072l4.932,4.841l-17.544,4.353l3.54-9.201V81.938z M79.029,124.385l2.067-7.567l-4.16-4.633h-11.9l-4.159,4.633l2.066,7.567\"/>\n<path fill=\"#C0C4CD\" d=\"M79.029,124.384v12.495H62.945v-12.495L79.029,124.384L79.029,124.384z\"/>\n<path fill=\"#E7EBF6\" d=\"M39.875,123.072l23.083,13.8v-12.495l-2.067-7.566C60.891,116.811,39.875,123.072,39.875,123.072z M102.113,123.072l-23.084,13.8v-12.495l2.067-7.566C81.096,116.811,102.113,123.072,102.113,123.072z\"/>\n</svg>`;\n\nconst TRUST_WALLET_SVG = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"729 341 463 521\">\n<defs>\n<linearGradient id=\"tw-grad\" x1=\"1123.26\" y1=\"1865.78\" x2=\"954.61\" y2=\"1337.5\" gradientTransform=\"translate(0 2182) scale(1 -1)\" gradientUnits=\"userSpaceOnUse\">\n<stop offset=\".02\" stop-color=\"blue\"/>\n<stop offset=\".08\" stop-color=\"#0094ff\"/>\n<stop offset=\".16\" stop-color=\"#48ff91\"/>\n<stop offset=\".42\" stop-color=\"#0094ff\"/>\n<stop offset=\".68\" stop-color=\"#0038ff\"/>\n<stop offset=\".9\" stop-color=\"#0500ff\"/>\n</linearGradient>\n</defs>\n<path fill=\"#0500ff\" d=\"m738.71,423.41l221.45-72.3v500.52c-158.18-66.74-221.45-194.65-221.45-266.94v-161.28Z\"/>\n<path fill=\"url(#tw-grad)\" d=\"m1181.62,423.41l-221.45-72.3v500.52c158.18-66.74,221.45-194.65,221.45-266.94v-161.28Z\"/>\n</svg>`;\n\nconst SWYPE_SVG = `<svg width=\"100\" height=\"100\" viewBox=\"0 0 100 100\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<g clip-path=\"url(#clip0_125_480)\">\n<rect width=\"100\" height=\"100\" rx=\"18.5874\" fill=\"black\"/>\n<path d=\"M64.0138 36.6191C68.3952 36.7025 70.2512 42.3038 65.1932 44.0399C61.4251 44.2617 60.8419 41.8557 61.3059 38.6113C62.3258 37.4916 62.6562 37.2326 64.0138 36.6191Z\" fill=\"black\"/>\n<path d=\"M34.7441 36.6714C36.6646 36.3309 38.4839 37.6898 38.813 39.71C39.1407 41.7302 37.8542 43.6499 35.9352 43.9994C34.7427 44.2169 33.5274 43.7774 32.7154 42.8325C31.8492 41.8262 31.5728 40.4029 31.9959 39.1191C32.419 37.8367 33.4719 36.8979 34.7441 36.6714Z\" fill=\"black\"/>\n<path d=\"M37.719 72.0299C39.0372 70.605 40.611 68.9843 41.7888 67.4312L50.1528 61.6651L57.6601 61.4468C57.4965 63.5289 61.7342 75.3729 61.6981 77.5158C62.154 77.0628 63.0658 76.3318 63.567 75.9876C65.9954 74.3365 68.8384 73.8223 71.4833 74.5554C72.8167 74.9328 73.9331 75.9251 74.58 77.3075C75.2967 78.8451 75.3771 80.3207 74.9127 82.0281C73.8912 85.7844 71.5792 88.6365 68.624 90.5357C66.125 92.1415 61.7077 93.9276 58.9822 93.0828C58.078 92.7956 56.4567 92.015 55.9204 91.1399C55.1385 89.8648 54.5613 88.8907 54.1469 87.3736C53.3686 84.4709 53.3459 86.0793 52.7439 77.9085C52.8102 75.0919 52.9961 69.1199 52.9088 66.782C52.1044 67.8121 48.6686 72.1053 47.7896 73.7937L43.7186 79.5555C45.2316 79.4947 47.0626 79.5314 48.354 80.4535C49.2813 81.1277 49.9192 82.2144 50.1273 83.4755C50.2332 83.8294 50.3132 84.6855 50.3258 85.0634C50.4307 88.2051 49.4337 91.7462 46.8974 93.4764C45.8189 94.2126 44.2654 94.598 43.01 94.7341C37.9909 95.3115 33.0817 93.5835 29.3502 89.9257C28.3222 88.8994 27.4875 87.705 27.4333 86.0333C27.4046 85.1165 27.6099 84.1963 28.0241 83.3859C28.6301 82.2147 30.2471 80.3005 31.0794 79.3156C33.2057 76.7997 35.4975 74.4306 37.719 72.0299Z\" fill=\"white\"/>\n<path d=\"M25.2815 30.5666C25.6441 30.6182 25.869 30.0928 25.5864 29.8598C23.1701 27.868 21.5484 25.4469 21.0444 22.6545C20.3641 19.1251 21.516 15.5212 24.2422 12.6488C26.8514 9.91783 30.7518 8.12575 35.0552 7.68041C40.5681 7.11357 44.9544 9.44386 49.0355 11.908C49.1016 11.9479 49.1793 11.964 49.2559 11.9535L49.6641 11.8975C49.7772 11.882 49.8729 11.8099 49.9313 11.7118C50.7042 10.4132 53.3609 9.13558 54.9428 8.55183C63.274 5.47733 72.1015 8.67608 75.6217 15.0543C77.4169 18.3043 77.4637 21.9922 75.7515 25.2845C74.8719 26.99 73.8277 28.1868 72.3742 29.4156C72.1074 29.6412 72.3057 30.099 72.652 30.0534C78.3434 29.3036 83.6958 29.6535 88.1602 33.0995C88.1743 33.1104 88.1896 33.1204 88.2051 33.1289C94.9326 36.8336 95.4063 45.4019 90.8735 50.5016C88.6438 53.0434 85.3883 54.9193 81.641 55.8268C81.4786 55.8662 81.3675 56.017 81.3778 56.1837C81.627 60.2197 80.6407 63.7049 77.0957 66.8558C74.3594 69.31 72.2572 70.905 68.1242 71.1594C66.1317 71.2671 64.5824 71.0823 61.0405 69.4728C57.7759 67.9894 53.6996 61.9918 52.509 57.7058C52.4204 57.3871 51.9326 57.3204 51.7644 57.6052C49.4075 61.5961 43.2088 67.6787 38.7227 69.4728C35.1404 70.8919 32.2895 71.8779 28.5005 70.8789C24.3706 69.7951 20.9698 67.4623 19.0499 64.3964C18.0021 62.7282 16.7577 59.3144 17.4723 57.5087C17.4921 57.4587 17.5023 57.4056 17.4951 57.3522C17.4647 57.1259 17.359 56.7067 17.1377 56.6504C8.17592 54.367 2.58735 48.0815 5.03045 40.4013C6.14562 36.9784 8.95444 34.0395 12.8321 32.2381C16.7957 30.3763 20.9323 29.9475 25.2815 30.5666Z\" fill=\"white\"/>\n<rect x=\"44.3433\" y=\"56.4863\" width=\"10.1195\" height=\"9.10751\" fill=\"white\"/>\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M45.6929 25.6221C49.2323 25.6223 52.1021 31.512 52.1021 38.7773C52.102 46.0426 49.2323 51.9323 45.6929 51.9326C42.2373 51.9326 39.4213 46.3188 39.2896 39.292C41.4308 38.8166 43.9097 38.7264 46.1079 39.1299C47.0121 39.2956 47.8949 38.5389 47.4956 37.7109C46.0273 34.6668 42.4111 34.0327 39.686 34.1816C40.5942 29.1824 42.9408 25.6221 45.6929 25.6221Z\" fill=\"black\"/>\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M63.2471 25.6216C66.7865 25.6219 69.6562 31.5116 69.6562 38.7769C69.6562 46.0422 66.7865 51.9319 63.2471 51.9321C59.7916 51.9321 56.9756 46.319 56.8438 39.2925C58.985 38.8171 61.4639 38.7259 63.6621 39.1294C64.5663 39.2952 65.4491 38.5394 65.0498 37.7114C63.5816 34.6669 59.9654 34.0322 57.2402 34.1812C58.1484 29.1821 60.4951 25.6216 63.2471 25.6216Z\" fill=\"black\"/>\n</g>\n<defs>\n<clipPath id=\"clip0_125_480\">\n<rect width=\"100\" height=\"100\" rx=\"18.5874\" fill=\"white\"/>\n</clipPath>\n</defs>\n</svg>`;\n\nconst USDC_SVG = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 2000 2000\">\n<path d=\"M1000 2000c554.17 0 1000-445.83 1000-1000S1554.17 0 1000 0 0 445.83 0 1000s445.83 1000 1000 1000z\" fill=\"#2775ca\"/>\n<path d=\"M1275 1158.33c0-145.83-87.5-195.83-262.5-216.66-125-16.67-150-50-150-108.34s41.67-95.83 125-95.83c75 0 116.67 25 137.5 87.5 4.17 12.5 16.67 20.83 29.17 20.83h66.66c16.67 0 29.17-12.5 29.17-29.16v-4.17c-16.67-91.67-91.67-162.5-187.5-170.83v-100c0-16.67-12.5-29.17-33.33-33.34h-62.5c-16.67 0-29.17 12.5-33.34 33.34v95.83c-125 16.67-204.16 100-204.16 204.17 0 137.5 83.33 191.66 258.33 212.5 116.67 20.83 154.17 45.83 154.17 112.5s-58.34 112.5-137.5 112.5c-108.34 0-145.84-45.84-158.34-108.34-4.16-16.66-16.66-25-29.16-25h-70.84c-16.66 0-29.16 12.5-29.16 29.17v4.17c16.66 104.16 83.33 179.16 220.83 200v100c0 16.66 12.5 29.16 33.33 33.33h62.5c16.67 0 29.17-12.5 33.34-33.33v-100c125-20.84 208.33-108.34 208.33-220.84z\" fill=\"#fff\"/>\n<path d=\"M787.5 1595.83c-325-116.66-491.67-479.16-370.83-800 62.5-175 200-308.33 370.83-370.83 16.67-8.33 25-20.83 25-41.67V325c0-16.67-8.33-29.17-25-33.33-4.17 0-12.5 0-16.67 4.16-395.83 125-612.5 545.84-487.5 941.67 75 233.33 254.17 412.5 487.5 487.5 16.67 8.33 33.34 0 37.5-16.67 4.17-4.16 4.17-8.33 4.17-16.66v-58.34c0-12.5-12.5-29.16-25-37.5zM1229.17 295.83c-16.67-8.33-33.34 0-37.5 16.67-4.17 4.17-4.17 8.33-4.17 16.67v58.33c0 16.67 12.5 33.33 25 41.67 325 116.66 491.67 479.16 370.83 800-62.5 175-200 308.33-370.83 370.83-16.67 8.33-25 20.83-25 41.67V1700c0 16.67 8.33 29.17 25 33.33 4.17 0 12.5 0 16.67-4.16 395.83-125 612.5-545.84 487.5-941.67-75-237.5-258.34-416.67-487.5-491.67z\" fill=\"#fff\"/>\n</svg>`;\n\nconst TETHER_SVG = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 800 800\">\n<circle fill=\"#009393\" cx=\"400\" cy=\"400\" r=\"400\"/>\n<path fill=\"#fff\" fill-rule=\"evenodd\" d=\"M400.49,428.59c68.79,0,126.28-11.63,140.33-27.17-11.93-13.18-55.08-23.56-109.88-26.4v32.83c-9.81.51-20.01.76-30.46.76s-20.65-.25-30.48-.76v-32.83c-54.78,2.84-97.95,13.22-109.88,26.4,14.07,15.54,71.57,27.17,140.36,27.17ZM522.71,274.06v45.21h-91.77v31.35c64.46,3.35,112.83,17.13,113.19,33.62v34.38c-.36,16.49-48.73,30.24-113.19,33.6v76.94h-60.93v-76.94c-64.46-3.35-112.81-17.11-113.17-33.6v-34.38c.36-16.49,48.71-30.27,113.17-33.62v-31.35h-91.77v-45.21h244.48ZM242.15,202.11h322.16c7.7,0,14.79,4.05,18.63,10.63l93.85,161.16c4.86,8.36,3.42,18.91-3.52,25.68l-258.34,252.18c-8.38,8.17-21.84,8.17-30.2,0L126.71,399.92c-7.09-6.94-8.43-17.79-3.2-26.19l100.33-161.49c3.91-6.28,10.85-10.12,18.32-10.12Z\"/>\n</svg>`;\n\nexport const SWYPE_LOGO = svgToDataUri(SWYPE_SVG);\n\n/** @deprecated Use SWYPE_LOGO instead. Kept for backward compatibility. */\nexport const SWYPE_MASCOT = SWYPE_LOGO;\n\nexport const BASE_LOGO = svgToDataUri(BASE_SVG);\n\nexport const METAMASK_LOGO = svgToDataUri(METAMASK_SVG);\n\nexport const TRUST_WALLET_LOGO = svgToDataUri(TRUST_WALLET_SVG);\n\nexport const USDC_LOGO = svgToDataUri(USDC_SVG);\n\nexport const TETHER_LOGO = svgToDataUri(TETHER_SVG);\n\n/** Lookup by lowercased provider/wallet name. */\nexport const KNOWN_LOGOS: Record<string, string> = {\n metamask: METAMASK_LOGO,\n base: BASE_LOGO,\n 'trust wallet': TRUST_WALLET_LOGO,\n};\n\n/** Lookup by token symbol (case-sensitive). */\nexport const TOKEN_LOGOS: Record<string, string> = {\n USDC: USDC_LOGO,\n 'USDC.e': USDC_LOGO,\n USDT: TETHER_LOGO,\n};\n","import type { CSSProperties, ReactNode } from 'react';\nimport { useSwypeConfig } from '../../context';\n\ninterface ScreenLayoutProps {\n children: ReactNode;\n /** Content pinned to the bottom of the screen (buttons, footer) */\n footer?: ReactNode;\n}\n\nconst FOOTER_CSS = `\n.swype-screen-footer {\n padding-bottom: max(32px, env(safe-area-inset-bottom, 32px));\n}`;\n\nexport function ScreenLayout({ children, footer }: ScreenLayoutProps) {\n const { tokens } = useSwypeConfig();\n\n return (\n <div style={containerStyle(tokens.bgCard)}>\n <div style={bodyStyle}>{children}</div>\n {footer && (\n <div className=\"swype-screen-footer\" style={footerStyle}>\n {footer}\n </div>\n )}\n <style>{FOOTER_CSS}</style>\n </div>\n );\n}\n\nconst containerStyle = (bg: string): CSSProperties => ({\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n maxWidth: 420,\n width: '100%',\n margin: '0 auto',\n background: `linear-gradient(to top, rgba(178, 255, 147, 0.15), transparent 40%), ${bg}`,\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n boxSizing: 'border-box',\n});\n\nconst bodyStyle: CSSProperties = {\n flex: 1,\n minHeight: 0,\n padding: '0 24px',\n display: 'flex',\n flexDirection: 'column',\n overflowY: 'auto',\n};\n\nconst footerStyle: CSSProperties = {\n paddingTop: 16,\n paddingLeft: 24,\n paddingRight: 24,\n marginTop: 'auto',\n};\n","import { createContext, useContext } from 'react';\nimport type { ReactNode } from 'react';\nimport type { FlowPhase } from './components/ui/StepProgress';\n\nconst FlowPhaseContext = createContext<FlowPhase | null>(null);\n\nexport function FlowPhaseProvider({\n phase,\n children,\n}: {\n phase: FlowPhase | null;\n children: ReactNode;\n}) {\n return (\n <FlowPhaseContext.Provider value={phase}>\n {children}\n </FlowPhaseContext.Provider>\n );\n}\n\nexport function useFlowPhase(): FlowPhase | null {\n return useContext(FlowPhaseContext);\n}\n","import type { CSSProperties } from 'react';\nimport { useSwypeConfig } from '../../context';\nimport { SWYPE_LOGO } from '../../assets/logos';\n\nexport type FlowPhase = 'link' | 'deposit';\n\ninterface StepProgressProps {\n phase: FlowPhase;\n}\n\nexport function StepProgress({ phase }: StepProgressProps) {\n const { tokens } = useSwypeConfig();\n\n if (phase === 'deposit') {\n return (\n <img src={SWYPE_LOGO} alt=\"Swype\" style={mascotStyle} />\n );\n }\n\n return (\n <div style={containerStyle}>\n <div style={sectionStyle('flex-end')}>\n <span style={labelStyle(tokens.text)}>Link</span>\n <span style={dotStyle(tokens.accent)} />\n </div>\n <span style={lineStyle(tokens.textMuted)} />\n <div style={sectionStyle('flex-start')}>\n <span style={dotStyle(tokens.textMuted)} />\n <span style={labelStyle(tokens.textMuted)}>Deposit</span>\n </div>\n </div>\n );\n}\n\nconst containerStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n width: '100%',\n};\n\nconst sectionStyle = (justify: 'flex-start' | 'flex-end'): CSSProperties => ({\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: justify,\n gap: 6,\n});\n\nconst dotStyle = (color: string): CSSProperties => ({\n width: 8,\n height: 8,\n borderRadius: '50%',\n backgroundColor: color,\n flexShrink: 0,\n});\n\nconst lineStyle = (color: string): CSSProperties => ({\n width: 32,\n height: 0,\n borderTop: `2px solid ${color}`,\n opacity: 0.4,\n flexShrink: 0,\n});\n\nconst labelStyle = (color: string): CSSProperties => ({\n fontSize: '0.82rem',\n fontWeight: 600,\n color,\n whiteSpace: 'nowrap',\n});\n\nconst mascotStyle: CSSProperties = {\n width: 28,\n height: 28,\n};\n","import { useCallback, useEffect, useRef, useState, type CSSProperties } from 'react';\nimport { useSwypeConfig } from '../../context';\n\ninterface SettingsMenuProps {\n onLogout: () => void;\n}\n\nexport function SettingsMenu({ onLogout }: SettingsMenuProps) {\n const { tokens } = useSwypeConfig();\n const [open, setOpen] = useState(false);\n const menuRef = useRef<HTMLDivElement>(null);\n\n const toggle = useCallback(() => setOpen((prev) => !prev), []);\n\n useEffect(() => {\n if (!open) return;\n const handleClickOutside = (e: MouseEvent) => {\n if (menuRef.current && !menuRef.current.contains(e.target as Node)) {\n setOpen(false);\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [open]);\n\n return (\n <div ref={menuRef} style={containerStyle}>\n <button type=\"button\" onClick={toggle} style={triggerStyle(tokens.text)} aria-label=\"Settings\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n <circle cx=\"12\" cy=\"5\" r=\"2\" fill=\"currentColor\" />\n <circle cx=\"12\" cy=\"12\" r=\"2\" fill=\"currentColor\" />\n <circle cx=\"12\" cy=\"19\" r=\"2\" fill=\"currentColor\" />\n </svg>\n </button>\n\n {open && (\n <div style={dropdownStyle(tokens)}>\n <button\n type=\"button\"\n onClick={() => { setOpen(false); onLogout(); }}\n style={menuItemStyle(tokens)}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" style={{ marginRight: 8, flexShrink: 0 }}>\n <path d=\"M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4\" stroke={tokens.error} strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <polyline points=\"16 17 21 12 16 7\" stroke={tokens.error} strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <line x1=\"21\" y1=\"12\" x2=\"9\" y2=\"12\" stroke={tokens.error} strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n Log out\n </button>\n </div>\n )}\n </div>\n );\n}\n\nconst containerStyle: CSSProperties = {\n position: 'relative',\n};\n\nconst triggerStyle = (color: string): CSSProperties => ({\n background: 'transparent',\n border: 'none',\n cursor: 'pointer',\n padding: 4,\n color,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n});\n\nconst dropdownStyle = (tokens: {\n bgCard: string;\n border: string;\n shadow: string;\n}): CSSProperties => ({\n position: 'absolute',\n right: 0,\n top: '100%',\n marginTop: 4,\n minWidth: 140,\n background: tokens.bgCard,\n border: `1px solid ${tokens.border}`,\n borderRadius: 12,\n boxShadow: tokens.shadow,\n zIndex: 100,\n overflow: 'hidden',\n});\n\nconst menuItemStyle = (tokens: {\n error: string;\n bgHover: string;\n}): CSSProperties => ({\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n padding: '12px 16px',\n background: 'transparent',\n border: 'none',\n cursor: 'pointer',\n fontFamily: 'inherit',\n fontSize: '0.85rem',\n fontWeight: 500,\n color: tokens.error,\n});\n","import type { CSSProperties, ReactNode } from 'react';\nimport { useSwypeConfig } from '../../context';\nimport { useFlowPhase } from '../../FlowPhaseContext';\nimport { StepProgress } from './StepProgress';\nimport { SettingsMenu } from './SettingsMenu';\n\ninterface ScreenHeaderProps {\n /** Center title text */\n title?: string;\n /** Right-aligned element (avatar, close button, etc.) */\n right?: ReactNode;\n /** Called when back arrow is pressed. Omit to hide the back arrow. */\n onBack?: () => void;\n /** Optional secondary label next to the title (e.g. \"Simple\") */\n badge?: string;\n /** When provided, renders the three-dot settings menu with a logout action in the right slot. */\n onLogout?: () => void;\n}\n\nexport function ScreenHeader({ title, right, onBack, badge, onLogout }: ScreenHeaderProps) {\n const { tokens } = useSwypeConfig();\n const flowPhase = useFlowPhase();\n\n const rightContent = onLogout ? <SettingsMenu onLogout={onLogout} /> : right;\n\n return (\n <div style={headerStyle}>\n <div style={leftSlotStyle}>\n {onBack && (\n <button type=\"button\" onClick={onBack} style={backButtonStyle(tokens.text)} aria-label=\"Go back\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M15 18l-6-6 6-6\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n )}\n </div>\n <div style={centerSlotStyle}>\n {flowPhase ? (\n <StepProgress phase={flowPhase} />\n ) : (\n <>\n {title && <span style={titleStyle(tokens.text)}>{title}</span>}\n {badge && <span style={badgeStyle(tokens.textMuted)}>{badge}</span>}\n </>\n )}\n </div>\n <div style={rightSlotStyle}>{rightContent}</div>\n </div>\n );\n}\n\nconst headerStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n padding: '16px 0',\n minHeight: 52,\n};\n\nconst leftSlotStyle: CSSProperties = { flex: '0 0 40px' };\nconst rightSlotStyle: CSSProperties = { flex: '0 0 40px', display: 'flex', justifyContent: 'flex-end' };\n\nconst centerSlotStyle: CSSProperties = {\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 8,\n};\n\nconst backButtonStyle = (color: string): CSSProperties => ({\n background: 'transparent',\n border: 'none',\n cursor: 'pointer',\n padding: 4,\n color,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n});\n\nconst titleStyle = (color: string): CSSProperties => ({\n fontSize: '0.9rem',\n fontWeight: 600,\n color,\n letterSpacing: '-0.01em',\n});\n\nconst badgeStyle = (color: string): CSSProperties => ({\n fontSize: '0.78rem',\n fontWeight: 500,\n color,\n});\n","import type { CSSProperties } from 'react';\nimport { useSwypeConfig } from '../../context';\n\nexport function PoweredByFooter() {\n const { tokens } = useSwypeConfig();\n\n return (\n <div style={containerStyle(tokens.textMuted)}>\n <div style={rowStyle}>\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zM12 17c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3-9H9V6c0-1.66 1.34-3 3-3s3 1.34 3 3v2z\"\n fill=\"currentColor\"\n />\n </svg>\n <span>Powered by Blink</span>\n </div>\n </div>\n );\n}\n\nconst containerStyle = (color: string): CSSProperties => ({\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 6,\n fontSize: '0.75rem',\n color,\n padding: '12px 0 4px',\n});\n\nconst rowStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n};\n\nconst pillStyle = (color: string, border: string): CSSProperties => ({\n fontSize: '0.65rem',\n fontWeight: 600,\n padding: '2px 8px',\n borderRadius: 999,\n border: `1px solid ${border}`,\n color,\n});\n\n","import type { CSSProperties, ReactNode } from 'react';\nimport { useSwypeConfig } from '../../context';\n\ninterface PrimaryButtonProps {\n children: ReactNode;\n onClick?: () => void;\n disabled?: boolean;\n loading?: boolean;\n /** Optional icon element rendered left of the label */\n icon?: ReactNode;\n}\n\nexport function PrimaryButton({ children, onClick, disabled, loading, icon }: PrimaryButtonProps) {\n const { tokens } = useSwypeConfig();\n const isDisabled = disabled || loading;\n\n return (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={isDisabled}\n style={buttonStyle(tokens, isDisabled)}\n >\n {icon && <span style={iconWrapStyle}>{icon}</span>}\n {loading ? 'Please wait...' : children}\n </button>\n );\n}\n\nconst buttonStyle = (\n tokens: { accent: string; accentHover: string; accentText: string },\n disabled?: boolean,\n): CSSProperties => ({\n width: '100%',\n padding: '18px 24px',\n background: `linear-gradient(180deg, ${tokens.accent}, ${tokens.accentHover})`,\n color: tokens.accentText,\n border: 'none',\n borderRadius: 999,\n fontSize: '1rem',\n fontWeight: 700,\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.5 : 1,\n transition: 'filter 0.15s ease, transform 0.15s ease',\n fontFamily: 'inherit',\n boxShadow: '0 6px 20px rgba(178, 255, 147, 0.25)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 8,\n});\n\nconst iconWrapStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n};\n","import type { CSSProperties, ReactNode } from 'react';\nimport { useSwypeConfig } from '../../context';\n\ninterface OutlineButtonProps {\n children: ReactNode;\n onClick?: () => void;\n disabled?: boolean;\n}\n\nexport function OutlineButton({ children, onClick, disabled }: OutlineButtonProps) {\n const { tokens } = useSwypeConfig();\n\n return (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={disabled}\n style={buttonStyle(tokens, disabled)}\n >\n {children}\n </button>\n );\n}\n\nconst buttonStyle = (\n tokens: { text: string; border: string; bgCard: string },\n disabled?: boolean,\n): CSSProperties => ({\n width: '100%',\n padding: '16px 24px',\n background: tokens.bgCard,\n color: tokens.text,\n border: `1.5px solid ${tokens.border}`,\n borderRadius: 999,\n fontSize: '0.95rem',\n fontWeight: 600,\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.5 : 1,\n fontFamily: 'inherit',\n transition: 'opacity 0.15s ease',\n});\n","import type { CSSProperties, ReactNode } from 'react';\nimport { useSwypeConfig } from '../../context';\n\ninterface InfoBannerProps {\n children: ReactNode;\n /** SVG icon element. Defaults to a shield icon. */\n icon?: ReactNode;\n}\n\nconst defaultIcon = (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm0 10.99h7c-.53 4.12-3.28 7.79-7 8.94V12H5V6.3l7-3.11v8.8z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n\nexport function InfoBanner({ children, icon }: InfoBannerProps) {\n const { tokens } = useSwypeConfig();\n\n return (\n <div style={containerStyle(tokens.accent)}>\n <span style={iconStyle}>{icon ?? defaultIcon}</span>\n <span style={textStyle}>{children}</span>\n </div>\n );\n}\n\nconst containerStyle = (accent: string): CSSProperties => ({\n display: 'flex',\n alignItems: 'flex-start',\n gap: 10,\n padding: '14px 16px',\n background: `${accent}0D`,\n borderRadius: 16,\n fontSize: '0.82rem',\n lineHeight: 1.5,\n color: 'inherit',\n});\n\nconst iconStyle: CSSProperties = {\n flexShrink: 0,\n marginTop: 1,\n display: 'flex',\n};\n\nconst textStyle: CSSProperties = { flex: 1 };\n","import type { CSSProperties, ReactNode } from 'react';\n\ninterface WarningBannerProps {\n title: string;\n children: ReactNode;\n}\n\nexport function WarningBanner({ title, children }: WarningBannerProps) {\n return (\n <div style={containerStyle}>\n <div style={headerStyle}>\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" style={iconStyle}>\n <path d=\"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z\" fill=\"#F57C00\" />\n </svg>\n <strong>{title}</strong>\n </div>\n <div style={bodyStyle}>{children}</div>\n </div>\n );\n}\n\nconst containerStyle: CSSProperties = {\n padding: '14px 16px',\n background: '#FFF8E1',\n border: '1px solid #FFE082',\n borderRadius: 16,\n fontSize: '0.84rem',\n lineHeight: 1.5,\n color: '#5D4037',\n};\n\nconst headerStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n marginBottom: 4,\n fontWeight: 600,\n color: '#37474F',\n};\n\nconst iconStyle: CSSProperties = { flexShrink: 0 };\n\nconst bodyStyle: CSSProperties = { color: '#6D4C41' };\n","import type { CSSProperties, ReactNode } from 'react';\nimport { useSwypeConfig } from '../../context';\n\ntype IconCircleVariant = 'accent' | 'success' | 'error';\n\ninterface IconCircleProps {\n children: ReactNode;\n variant?: IconCircleVariant;\n size?: number;\n}\n\nexport function IconCircle({ children, variant = 'accent', size = 56 }: IconCircleProps) {\n const { tokens } = useSwypeConfig();\n\n const bgMap: Record<IconCircleVariant, string> = {\n accent: `${tokens.accent}18`,\n success: tokens.successBg,\n error: tokens.errorBg,\n };\n\n return (\n <div style={circleStyle(bgMap[variant], size)}>\n {children}\n </div>\n );\n}\n\nconst circleStyle = (bg: string, size: number): CSSProperties => ({\n width: size,\n height: size,\n borderRadius: '50%',\n background: bg,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n margin: '0 auto',\n flexShrink: 0,\n});\n","import { useCallback, useRef, type CSSProperties, type KeyboardEvent } from 'react';\nimport { useSwypeConfig } from '../../context';\n\ninterface OtpInputProps {\n value: string;\n onChange: (value: string) => void;\n length?: number;\n disabled?: boolean;\n}\n\nexport function OtpInput({ value, onChange, length = 6, disabled }: OtpInputProps) {\n const { tokens } = useSwypeConfig();\n const inputsRef = useRef<(HTMLInputElement | null)[]>([]);\n\n const digits = value.padEnd(length).split('').slice(0, length);\n\n const focusInput = useCallback((index: number) => {\n const clamped = Math.max(0, Math.min(index, length - 1));\n inputsRef.current[clamped]?.focus();\n }, [length]);\n\n const handleChange = useCallback((index: number, char: string) => {\n const cleaned = char.replace(/\\D/g, '');\n if (cleaned.length > 1) {\n const filled = cleaned.slice(0, length);\n onChange(filled);\n focusInput(Math.min(filled.length, length - 1));\n return;\n }\n const digit = cleaned.slice(0, 1);\n const next = digits.slice();\n next[index] = digit;\n const joined = next.join('').replace(/\\s/g, '');\n onChange(joined);\n if (digit && index < length - 1) {\n focusInput(index + 1);\n }\n }, [digits, onChange, length, focusInput]);\n\n const handleKeyDown = useCallback((index: number, e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Backspace' && !digits[index] && index > 0) {\n focusInput(index - 1);\n } else if (e.key === 'ArrowLeft' && index > 0) {\n focusInput(index - 1);\n } else if (e.key === 'ArrowRight' && index < length - 1) {\n focusInput(index + 1);\n }\n }, [digits, focusInput, length]);\n\n const handlePaste = useCallback((e: React.ClipboardEvent) => {\n e.preventDefault();\n const pasted = e.clipboardData.getData('text').replace(/\\D/g, '').slice(0, length);\n onChange(pasted);\n focusInput(Math.min(pasted.length, length - 1));\n }, [onChange, length, focusInput]);\n\n return (\n <div style={containerStyle}>\n {digits.map((digit, i) => (\n <input\n key={i}\n ref={(el) => { inputsRef.current[i] = el; }}\n type=\"text\"\n inputMode=\"numeric\"\n autoComplete={i === 0 ? 'one-time-code' : 'off'}\n maxLength={1}\n value={digit.trim()}\n disabled={disabled}\n onChange={(e) => handleChange(i, e.target.value)}\n onKeyDown={(e) => handleKeyDown(i, e)}\n onPaste={handlePaste}\n onFocus={(e) => e.target.select()}\n style={inputStyle(tokens, !!digit.trim())}\n />\n ))}\n </div>\n );\n}\n\nconst containerStyle: CSSProperties = {\n display: 'flex',\n gap: 8,\n justifyContent: 'center',\n width: '100%',\n};\n\nconst inputStyle = (\n tokens: { border: string; bgInput: string; text: string; borderFocus: string },\n filled: boolean,\n): CSSProperties => ({\n boxSizing: 'border-box',\n width: 44,\n maxWidth: 'calc((100% - 40px) / 6)',\n height: 52,\n borderRadius: 12,\n border: `1.5px solid ${filled ? tokens.borderFocus : tokens.border}`,\n background: tokens.bgInput,\n color: tokens.text,\n fontSize: '1.25rem',\n fontWeight: 600,\n fontFamily: 'inherit',\n textAlign: 'center',\n outline: 'none',\n caretColor: tokens.borderFocus,\n transition: 'border-color 0.15s ease',\n});\n","import type { CSSProperties } from 'react';\nimport { useSwypeConfig } from '../../context';\n\nexport interface StepItem {\n label: string;\n /** Optional sublabel (e.g. \"$100 limit · 2 tokens approved\") */\n detail?: string;\n status: 'pending' | 'active' | 'complete';\n}\n\ninterface StepListProps {\n steps: StepItem[];\n}\n\nexport function StepList({ steps }: StepListProps) {\n const { tokens } = useSwypeConfig();\n\n return (\n <div style={listStyle}>\n {steps.map((step, i) => {\n const isComplete = step.status === 'complete';\n const isActive = step.status === 'active';\n\n return (\n <div key={i} style={rowStyle}>\n <div\n style={badgeStyle(\n isComplete || isActive ? tokens.accent : tokens.border,\n isComplete,\n )}\n >\n {isComplete ? (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\" fill=\"#fff\" />\n </svg>\n ) : (\n <span style={isActive ? activeBadgeNumberStyle(tokens.accent) : badgeNumberStyle}>{i + 1}</span>\n )}\n </div>\n <div style={labelContainerStyle}>\n <span style={labelStyle(isComplete || isActive ? tokens.text : tokens.textMuted)}>\n {step.label}\n </span>\n {step.detail && (\n <span style={detailStyle(tokens.textMuted)}>{step.detail}</span>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n\nconst listStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 12,\n};\n\nconst rowStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n};\n\nconst badgeStyle = (color: string, filled: boolean): CSSProperties => ({\n width: 28,\n height: 28,\n borderRadius: '50%',\n background: filled ? color : 'transparent',\n border: filled ? 'none' : `1.5px solid ${color}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n});\n\nconst badgeNumberStyle: CSSProperties = {\n fontSize: '0.75rem',\n fontWeight: 600,\n color: 'inherit',\n};\n\nconst activeBadgeNumberStyle = (color: string): CSSProperties => ({\n fontSize: '0.75rem',\n fontWeight: 600,\n color,\n});\n\nconst labelContainerStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n};\n\nconst labelStyle = (color: string): CSSProperties => ({\n fontSize: '0.9rem',\n fontWeight: 500,\n color,\n});\n\nconst detailStyle = (color: string): CSSProperties => ({\n fontSize: '0.75rem',\n color,\n});\n","import type { CSSProperties } from 'react';\nimport { useSwypeConfig } from '../../context';\nimport { SWYPE_LOGO } from '../../assets/logos';\nimport { ScreenLayout, ScreenHeader, PoweredByFooter, PrimaryButton } from '../ui';\n\ninterface LoginScreenProps {\n authInput: string;\n onAuthInputChange: (value: string) => void;\n onSubmit: () => void;\n sending: boolean;\n error: string | null;\n onBack?: () => void;\n merchantInitials?: string;\n onSocialLogin?: (provider: 'google' | 'apple' | 'twitter') => void;\n}\n\nexport function LoginScreen({\n authInput,\n onAuthInputChange,\n onSubmit,\n sending,\n error,\n onBack,\n merchantInitials,\n onSocialLogin,\n}: LoginScreenProps) {\n const { tokens } = useSwypeConfig();\n const disabled = authInput.trim().length === 0 || sending;\n\n return (\n <ScreenLayout\n footer={\n <>\n <PrimaryButton onClick={onSubmit} disabled={disabled} loading={sending}>\n Next\n </PrimaryButton>\n\n {onSocialLogin && (\n <>\n <div style={dividerStyle(tokens)}>\n <div style={dividerLineStyle(tokens.border)} />\n <span>or continue with</span>\n <div style={dividerLineStyle(tokens.border)} />\n </div>\n\n <div style={socialRowStyle}>\n {(['google', 'apple', 'twitter'] as const).map((provider) => (\n <button\n key={provider}\n type=\"button\"\n onClick={() => onSocialLogin(provider)}\n style={socialButtonStyle(tokens)}\n >\n {socialLabel(provider)}\n </button>\n ))}\n </div>\n </>\n )}\n\n <PoweredByFooter />\n </>\n }\n >\n <ScreenHeader\n onBack={onBack}\n right={\n merchantInitials ? (\n <div style={avatarStyle(tokens)}>{merchantInitials}</div>\n ) : undefined\n }\n />\n\n <div style={contentStyle}>\n <img src={SWYPE_LOGO} alt=\"Swype\" style={logoStyle} />\n\n <h2 style={headingStyle(tokens.text)}>\n {'Your Money. Any App.\\nOne Tap.'}\n </h2>\n\n {error && <div style={errorStyle(tokens)}>{error}</div>}\n\n <input\n id=\"swype-login-identifier\"\n type=\"text\"\n inputMode=\"text\"\n autoComplete=\"username\"\n placeholder=\"Email or phone number\"\n value={authInput}\n onChange={(e) => onAuthInputChange(e.target.value)}\n onKeyDown={(e) => { if (e.key === 'Enter' && !disabled) onSubmit(); }}\n style={inputStyle(tokens)}\n />\n </div>\n </ScreenLayout>\n );\n}\n\nfunction socialLabel(provider: 'google' | 'apple' | 'twitter'): string {\n switch (provider) {\n case 'google': return 'Google';\n case 'apple': return 'Apple';\n case 'twitter': return 'X';\n }\n}\n\n/* ── Styles ──────────────────────────────────────────────────────── */\n\nconst contentStyle: CSSProperties = {\n textAlign: 'center',\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n};\n\nconst logoStyle: CSSProperties = {\n width: 50,\n height: 50,\n};\n\nconst headingStyle = (color: string): CSSProperties => ({\n fontSize: '1.45rem',\n fontWeight: 700,\n lineHeight: 1.25,\n letterSpacing: '-0.02em',\n color,\n margin: '20px 0 8px',\n whiteSpace: 'pre-line',\n});\n\nconst inputStyle = (tokens: { border: string; bgInput: string; text: string }): CSSProperties => ({\n width: '100%',\n padding: '15px 16px',\n borderRadius: 16,\n border: `1px solid ${tokens.border}`,\n background: tokens.bgInput,\n color: tokens.text,\n fontSize: '0.95rem',\n fontFamily: 'inherit',\n outline: 'none',\n boxSizing: 'border-box',\n});\n\nconst errorStyle = (tokens: { error: string; errorBg: string }): CSSProperties => ({\n background: tokens.errorBg,\n border: `1px solid ${tokens.error}66`,\n borderRadius: 16,\n padding: '11px 14px',\n color: tokens.error,\n fontSize: '0.84rem',\n marginBottom: 14,\n lineHeight: 1.5,\n width: '100%',\n textAlign: 'left',\n});\n\nconst dividerStyle = (tokens: { textMuted: string }): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n gap: 10,\n margin: '20px 0 14px',\n color: tokens.textMuted,\n fontSize: '0.82rem',\n});\n\nconst dividerLineStyle = (color: string): CSSProperties => ({\n flex: 1,\n height: 1,\n background: color,\n});\n\nconst socialRowStyle: CSSProperties = {\n display: 'flex',\n gap: 10,\n marginBottom: 20,\n};\n\nconst socialButtonStyle = (tokens: { border: string; text: string }): CSSProperties => ({\n flex: 1,\n padding: '12px 0',\n borderRadius: 12,\n border: `1px solid ${tokens.border}`,\n background: 'transparent',\n color: tokens.text,\n fontSize: '0.88rem',\n fontWeight: 600,\n fontFamily: 'inherit',\n cursor: 'pointer',\n});\n\nconst avatarStyle = (tokens: { border: string; textMuted: string }): CSSProperties => ({\n width: 28,\n height: 28,\n borderRadius: '50%',\n border: `1px solid ${tokens.border}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '0.6rem',\n fontWeight: 700,\n color: tokens.textMuted,\n background: 'transparent',\n});\n","import { useCallback, useEffect, useRef, useState, type CSSProperties } from 'react';\nimport { useSwypeConfig } from '../../context';\nimport { ScreenLayout, ScreenHeader, PoweredByFooter, PrimaryButton, OtpInput } from '../ui';\n\nconst RESEND_COOLDOWN_SECONDS = 30;\n\ninterface OtpVerifyScreenProps {\n /** Masked identifier displayed to the user (e.g. \"user@email.com\") */\n maskedIdentifier: string;\n otpCode: string;\n onOtpChange: (code: string) => void;\n onVerify: () => void;\n onResend: () => void;\n onBack: () => void;\n verifying: boolean;\n error: string | null;\n}\n\nexport function OtpVerifyScreen({\n maskedIdentifier,\n otpCode,\n onOtpChange,\n onVerify,\n onResend,\n onBack,\n verifying,\n error,\n}: OtpVerifyScreenProps) {\n const { tokens } = useSwypeConfig();\n const disabled = otpCode.trim().length !== 6 || verifying;\n\n const [cooldown, setCooldown] = useState(RESEND_COOLDOWN_SECONDS);\n const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n\n useEffect(() => {\n setCooldown(RESEND_COOLDOWN_SECONDS);\n intervalRef.current = setInterval(() => {\n setCooldown((prev) => {\n if (prev <= 1) {\n if (intervalRef.current) clearInterval(intervalRef.current);\n return 0;\n }\n return prev - 1;\n });\n }, 1000);\n return () => {\n if (intervalRef.current) clearInterval(intervalRef.current);\n };\n }, []);\n\n const handleResend = useCallback(() => {\n if (cooldown > 0) return;\n onResend();\n setCooldown(RESEND_COOLDOWN_SECONDS);\n intervalRef.current = setInterval(() => {\n setCooldown((prev) => {\n if (prev <= 1) {\n if (intervalRef.current) clearInterval(intervalRef.current);\n return 0;\n }\n return prev - 1;\n });\n }, 1000);\n }, [cooldown, onResend]);\n\n return (\n <ScreenLayout\n footer={\n <>\n <PrimaryButton onClick={onVerify} disabled={disabled} loading={verifying}>\n Verify\n </PrimaryButton>\n <PoweredByFooter />\n </>\n }\n >\n <ScreenHeader onBack={onBack} />\n\n <div style={contentStyle}>\n <h2 style={headingStyle(tokens.text)}>Confirm it is you</h2>\n <p style={subtitleStyle(tokens.textSecondary)}>\n We sent a 6-digit code to{'\\n'}\n <strong>{maskedIdentifier}</strong>\n </p>\n\n {error && <div style={errorBannerStyle(tokens)}>{error}</div>}\n\n <OtpInput value={otpCode} onChange={onOtpChange} disabled={verifying} />\n\n <button\n type=\"button\"\n onClick={handleResend}\n disabled={cooldown > 0}\n style={resendStyle(tokens.textMuted, cooldown > 0)}\n >\n {cooldown > 0 ? `Resend code in ${cooldown}s` : 'Resend code'}\n </button>\n </div>\n </ScreenLayout>\n );\n}\n\nconst contentStyle: CSSProperties = {\n textAlign: 'center',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n paddingTop: 24,\n};\n\nconst headingStyle = (color: string): CSSProperties => ({\n fontSize: '1.5rem',\n fontWeight: 700,\n letterSpacing: '-0.02em',\n color,\n margin: '20px 0 8px',\n});\n\nconst subtitleStyle = (color: string): CSSProperties => ({\n fontSize: '0.88rem',\n color,\n margin: '0 0 28px',\n lineHeight: 1.5,\n whiteSpace: 'pre-line',\n});\n\nconst errorBannerStyle = (tokens: { error: string; errorBg: string }): CSSProperties => ({\n background: tokens.errorBg,\n border: `1px solid ${tokens.error}66`,\n borderRadius: 16,\n padding: '11px 14px',\n color: tokens.error,\n fontSize: '0.84rem',\n marginBottom: 14,\n lineHeight: 1.5,\n width: '100%',\n textAlign: 'left',\n});\n\nconst resendStyle = (color: string, disabled: boolean): CSSProperties => ({\n background: 'transparent',\n border: 'none',\n color,\n cursor: disabled ? 'default' : 'pointer',\n fontFamily: 'inherit',\n fontSize: '0.82rem',\n marginTop: 16,\n padding: 0,\n opacity: disabled ? 0.6 : 1,\n});\n\n","import type { CSSProperties } from 'react';\nimport { useSwypeConfig } from '../../context';\nimport { ScreenLayout, ScreenHeader, PoweredByFooter, PrimaryButton } from '../ui';\n\ninterface PasskeyScreenProps {\n onCreatePasskey: () => void;\n onBack?: () => void;\n onLogout?: () => void;\n creating: boolean;\n error: string | null;\n /** When true, direct passkey creation failed (Safari iframe restriction). */\n popupFallback?: boolean;\n /** Opens a pop-up window on the Swype domain for passkey registration. */\n onCreatePasskeyViaPopup?: () => void;\n}\n\nexport function PasskeyScreen({\n onCreatePasskey,\n onBack,\n onLogout,\n creating,\n error,\n popupFallback = false,\n onCreatePasskeyViaPopup,\n}: PasskeyScreenProps) {\n const { tokens } = useSwypeConfig();\n\n const handleCreate = popupFallback && onCreatePasskeyViaPopup\n ? onCreatePasskeyViaPopup\n : onCreatePasskey;\n\n const buttonLabel = popupFallback\n ? 'Open Passkey Window'\n : 'Verify Passkey';\n\n return (\n <ScreenLayout\n footer={\n <>\n <PrimaryButton onClick={handleCreate} disabled={creating} loading={creating}>\n {buttonLabel}\n </PrimaryButton>\n <PoweredByFooter />\n </>\n }\n >\n <ScreenHeader onBack={onBack} onLogout={onLogout} />\n\n <div style={contentStyle}>\n <h2 style={headingStyle(tokens.text)}>Secure your account with a passkey</h2>\n <p style={subtitleStyle(tokens.textSecondary)}>This enables secure one-tap deposits on this device</p>\n\n {error && <div style={errorBannerStyle(tokens)}>{error}</div>}\n </div>\n </ScreenLayout>\n );\n}\n\nconst contentStyle: CSSProperties = {\n textAlign: 'center',\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n};\n\nconst headingStyle = (color: string): CSSProperties => ({\n fontSize: '1.45rem',\n fontWeight: 700,\n letterSpacing: '-0.02em',\n color,\n margin: '24px 0 8px',\n});\n\nconst subtitleStyle = (color: string): CSSProperties => ({\n fontSize: '0.86rem',\n color,\n margin: '0 0 20px',\n lineHeight: 1.5,\n});\n\nconst errorBannerStyle = (tokens: { error: string; errorBg: string }): CSSProperties => ({\n background: tokens.errorBg,\n border: `1px solid ${tokens.error}66`,\n borderRadius: 16,\n padding: '11px 14px',\n color: tokens.error,\n fontSize: '0.84rem',\n marginBottom: 14,\n lineHeight: 1.5,\n width: '100%',\n textAlign: 'left',\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: `4px solid ${tokens.bgInput}`,\n borderTopColor: tokens.accent,\n borderRightColor: tokens.accent + '66',\n borderRadius: '50%',\n boxShadow: 'inset 0 0 0 1px rgba(255,255,255,0.1)',\n animation: 'swype-spin 0.9s 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","import { useCallback, useRef, useState, type CSSProperties } from 'react';\nimport type { Account, Provider } from '../../types';\nimport type { PreparedSession } from '../../hooks/useProviderHandlers';\nimport { useSwypeConfig } from '../../context';\nimport { ScreenLayout, ScreenHeader, PoweredByFooter, PrimaryButton } from '../ui';\nimport { Spinner } from '../Spinner';\nimport { KNOWN_LOGOS } from '../../assets/logos';\n\nconst WALLET_EMOJIS: Record<string, string> = {\n rabby: '\\uD83D\\uDC30',\n ora: '\\u2666\\uFE0F',\n phantom: '\\uD83D\\uDC7B',\n};\n\nfunction truncateAddress(address: string): string {\n if (address.length <= 10) return address;\n return `${address.slice(0, 6)}...${address.slice(-4)}`;\n}\n\ninterface StoredSession extends PreparedSession {\n providerId: string;\n}\n\ninterface WalletPickerScreenProps {\n providers: Provider[];\n pendingConnections?: Account[];\n loading?: boolean;\n useDeeplink?: boolean;\n onPrepareProvider: (providerId: string) => Promise<PreparedSession | null>;\n onSelectProvider: (providerId: string, preparedSession?: PreparedSession) => Promise<void>;\n onContinueConnection?: (accountId: string) => void;\n onBack: () => void;\n onLogout?: () => void;\n}\n\nexport function WalletPickerScreen({\n providers,\n pendingConnections,\n loading,\n useDeeplink,\n onPrepareProvider,\n onSelectProvider,\n onContinueConnection,\n onBack,\n onLogout,\n}: WalletPickerScreenProps) {\n const { tokens } = useSwypeConfig();\n const [hoveredId, setHoveredId] = useState<string | null>(null);\n const [selectedProviderId, setSelectedProviderId] = useState<string | null>(null);\n const [cryptoExpanded, setCryptoExpanded] = useState(false);\n const [connecting, setConnecting] = useState(false);\n const [preparedSession, setPreparedSession] = useState<StoredSession | null>(null);\n const [preparing, setPreparing] = useState(false);\n const prepareIdRef = useRef(0);\n\n const handleCardClick = useCallback(async (providerId: string) => {\n setSelectedProviderId(providerId);\n setPreparedSession(null);\n setPreparing(true);\n\n const id = ++prepareIdRef.current;\n try {\n const session = await onPrepareProvider(providerId);\n if (prepareIdRef.current !== id) return;\n if (session) {\n setPreparedSession({ ...session, providerId });\n }\n } finally {\n if (prepareIdRef.current === id) {\n setPreparing(false);\n }\n }\n }, [onPrepareProvider]);\n\n const hasPending = pendingConnections != null && pendingConnections.length > 0;\n\n const displayProviders = providers.length > 0\n ? providers\n : [\n { id: 'metamask', name: 'MetaMask' },\n { id: 'rabby', name: 'Rabby' },\n { id: 'ora', name: 'Ora' },\n { id: 'phantom', name: 'Phantom' },\n ];\n\n const selectedProvider = displayProviders.find((p) => p.id === selectedProviderId);\n\n if (loading) {\n return (\n <ScreenLayout>\n <ScreenHeader title=\"Set up Swype\" onBack={onBack} onLogout={onLogout} />\n <div style={{ textAlign: 'center', padding: '48px 0', flex: 1, display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <Spinner label=\"Connecting...\" />\n </div>\n </ScreenLayout>\n );\n }\n\n return (\n <ScreenLayout\n footer={\n <>\n {selectedProvider && (\n <PrimaryButton\n onClick={() => {\n const session = preparedSession?.providerId === selectedProvider.id\n ? preparedSession\n : undefined;\n if (session && useDeeplink) {\n const opened = window.open(session.uri, '_blank');\n if (!opened && window === window.parent) {\n window.location.href = session.uri;\n }\n }\n setConnecting(true);\n onSelectProvider(selectedProvider.id, session).finally(() => setConnecting(false));\n }}\n loading={connecting || preparing}\n disabled={preparing}\n >\n {preparing ? 'Preparing...' : `Open ${selectedProvider.name} to Link`}\n </PrimaryButton>\n )}\n <PoweredByFooter />\n </>\n }\n >\n <ScreenHeader title=\"Set up Swype\" onBack={onBack} onLogout={onLogout} />\n\n {hasPending && (\n <>\n <h2 style={headingStyle(tokens.text)}>Continue where you left off</h2>\n <p style={subtitleStyle(tokens.textSecondary)}>\n You have a wallet that still needs setup\n </p>\n\n <div style={pendingListStyle}>\n {pendingConnections.map((acct) => {\n const wallet = acct.wallets[0];\n const address = wallet ? truncateAddress(wallet.name) : undefined;\n const isHovered = hoveredId === `pending-${acct.id}`;\n return (\n <button\n key={acct.id}\n onClick={() => onContinueConnection?.(acct.id)}\n onMouseEnter={() => setHoveredId(`pending-${acct.id}`)}\n onMouseLeave={() => setHoveredId(null)}\n style={pendingCardStyle(tokens, isHovered)}\n >\n <div style={pendingCardContentStyle}>\n <div style={pendingIconStyle}>\n {KNOWN_LOGOS[acct.name.toLowerCase()] ? (\n <img\n src={KNOWN_LOGOS[acct.name.toLowerCase()]}\n alt={acct.name}\n style={logoImgStyle}\n />\n ) : (\n <span style={emojiStyle}>\n {WALLET_EMOJIS[acct.name.toLowerCase()] ?? acct.name.charAt(0)}\n </span>\n )}\n </div>\n <div style={pendingInfoStyle}>\n <span style={pendingNameStyle(tokens.text)}>{acct.name}</span>\n {address && (\n <span style={pendingAddressStyle(tokens.textMuted)}>{address}</span>\n )}\n </div>\n <span style={pendingBadgeStyle(tokens)}>Setup incomplete</span>\n </div>\n <div style={continueRowStyle(tokens)}>\n Continue setup\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z\" fill=\"currentColor\" />\n </svg>\n </div>\n </button>\n );\n })}\n </div>\n\n <div style={dividerStyle(tokens.border)}>\n <span style={dividerTextStyle(tokens.textMuted)}>Or connect a new wallet</span>\n </div>\n </>\n )}\n\n {!hasPending && (\n <h2 style={headingStyle(tokens.text)}>Where is your money?</h2>\n )}\n\n <button\n type=\"button\"\n onClick={() => setCryptoExpanded((v) => !v)}\n style={categoryRowStyle(tokens, cryptoExpanded)}\n >\n <span style={categoryLabelStyle}>Crypto Wallet</span>\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n style={{ transform: cryptoExpanded ? 'rotate(180deg)' : 'none', transition: 'transform 0.2s ease' }}\n >\n <path d=\"M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z\" fill=\"currentColor\" />\n </svg>\n </button>\n\n {cryptoExpanded && (\n <div style={gridStyle}>\n {displayProviders.map((p) => {\n const logoSrc = ('logoURI' in p && (p as Provider).logoURI)\n || KNOWN_LOGOS[p.name.toLowerCase()];\n const emoji = WALLET_EMOJIS[p.name.toLowerCase()] ?? p.name.charAt(0);\n const isSelected = selectedProviderId === p.id;\n const isHovered = hoveredId === p.id;\n return (\n <button\n key={p.id}\n onClick={() => handleCardClick(p.id)}\n onMouseEnter={() => setHoveredId(p.id)}\n onMouseLeave={() => setHoveredId(null)}\n style={cardStyle(tokens, isHovered, isSelected)}\n >\n {logoSrc ? (\n <img\n src={logoSrc}\n alt={p.name}\n style={logoImgStyle}\n />\n ) : (\n <span style={emojiStyle}>{emoji}</span>\n )}\n <span style={nameStyle(tokens.text)}>{p.name}</span>\n </button>\n );\n })}\n </div>\n )}\n\n <div style={categoryRowStyle(tokens, false, true)}>\n <span style={categoryLabelStyle}>Bank Account</span>\n <span style={comingSoonBadgeStyle(tokens)}>Coming Soon</span>\n </div>\n </ScreenLayout>\n );\n}\n\nconst headingStyle = (color: string): CSSProperties => ({\n fontSize: '1.35rem',\n fontWeight: 700,\n letterSpacing: '-0.02em',\n color,\n margin: '8px 0 4px',\n});\n\nconst subtitleStyle = (color: string): CSSProperties => ({\n fontSize: '0.88rem',\n color,\n margin: '0 0 24px',\n});\n\nconst gridStyle: CSSProperties = {\n display: 'grid',\n gridTemplateColumns: '1fr 1fr',\n gap: 12,\n marginBottom: 12,\n};\n\nconst SELECTED_GREEN = '#22c55e';\n\nconst cardStyle = (\n tokens: { bgInput: string; border: string; bgHover: string },\n hovered: boolean,\n selected: boolean,\n): CSSProperties => ({\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 8,\n padding: '20px 12px',\n background: hovered ? tokens.bgHover : tokens.bgInput,\n border: selected ? `2px solid ${SELECTED_GREEN}` : `1.5px solid ${tokens.border}`,\n boxShadow: selected ? `0 0 0 2px ${SELECTED_GREEN}44` : 'none',\n borderRadius: 16,\n cursor: 'pointer',\n fontFamily: 'inherit',\n transition: 'background 0.15s ease, border 0.15s ease, box-shadow 0.15s ease',\n outline: 'none',\n});\n\nconst emojiStyle: CSSProperties = {\n fontSize: '1.75rem',\n lineHeight: 1,\n};\n\nconst logoImgStyle: CSSProperties = {\n width: 32,\n height: 32,\n borderRadius: 8,\n objectFit: 'contain',\n};\n\nconst nameStyle = (color: string): CSSProperties => ({\n fontSize: '0.88rem',\n fontWeight: 600,\n color,\n});\n\n// ── Category row styles ──────────────────────────────────────────────\n\nconst categoryRowStyle = (\n tokens: { bgInput: string; border: string; text: string; textMuted: string },\n expanded: boolean,\n disabled?: boolean,\n): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n padding: '16px 18px',\n background: tokens.bgInput,\n border: `1.5px solid ${tokens.border}`,\n borderRadius: 14,\n cursor: disabled ? 'default' : 'pointer',\n fontFamily: 'inherit',\n fontSize: '0.95rem',\n fontWeight: 600,\n color: disabled ? tokens.textMuted : tokens.text,\n opacity: disabled ? 0.6 : 1,\n outline: 'none',\n marginBottom: expanded ? 12 : 12,\n boxSizing: 'border-box',\n});\n\nconst categoryLabelStyle: CSSProperties = {\n lineHeight: 1,\n};\n\nconst comingSoonBadgeStyle = (tokens: { textMuted: string; border: string }): CSSProperties => ({\n fontSize: '0.72rem',\n fontWeight: 600,\n color: tokens.textMuted,\n background: `${tokens.border}88`,\n padding: '3px 10px',\n borderRadius: 6,\n whiteSpace: 'nowrap',\n});\n\n// ── Pending connection styles ────────────────────────────────────────\n\nconst pendingListStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 10,\n marginBottom: 20,\n};\n\nconst pendingCardStyle = (\n tokens: { bgInput: string; border: string; bgHover: string; warning: string },\n hovered: boolean,\n): CSSProperties => ({\n display: 'flex',\n flexDirection: 'column',\n gap: 0,\n padding: 0,\n background: hovered ? tokens.bgHover : tokens.bgInput,\n border: `1.5px solid ${tokens.warning}44`,\n borderRadius: 16,\n cursor: 'pointer',\n fontFamily: 'inherit',\n transition: 'background 0.15s ease',\n outline: 'none',\n overflow: 'hidden',\n textAlign: 'left',\n});\n\nconst pendingCardContentStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n padding: '14px 16px',\n};\n\nconst pendingIconStyle: CSSProperties = {\n flexShrink: 0,\n};\n\nconst pendingInfoStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n flex: 1,\n minWidth: 0,\n};\n\nconst pendingNameStyle = (color: string): CSSProperties => ({\n fontSize: '0.92rem',\n fontWeight: 600,\n color,\n});\n\nconst pendingAddressStyle = (color: string): CSSProperties => ({\n fontSize: '0.78rem',\n color,\n fontFamily: 'monospace',\n});\n\nconst pendingBadgeStyle = (tokens: { warningBg?: string; warningText?: string; warning: string }): CSSProperties => ({\n fontSize: '0.72rem',\n fontWeight: 600,\n color: tokens.warningText ?? tokens.warning,\n background: tokens.warningBg ?? `${tokens.warning}1a`,\n padding: '3px 8px',\n borderRadius: 6,\n whiteSpace: 'nowrap',\n flexShrink: 0,\n});\n\nconst continueRowStyle = (tokens: { accent: string; bgHover: string, text: string }): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 4,\n padding: '10px 16px',\n fontSize: '0.84rem',\n fontWeight: 600,\n color: tokens.text,\n background: `${tokens.accent}0d`,\n borderTop: `1px solid ${tokens.accent}22`,\n});\n\nconst dividerStyle = (borderColor: string): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n margin: '4px 0 16px',\n});\n\nconst dividerTextStyle = (color: string): CSSProperties => ({\n fontSize: '0.82rem',\n color,\n whiteSpace: 'nowrap',\n});\n","import { useState, useRef, useCallback, type CSSProperties } from 'react';\nimport { useSwypeConfig } from '../../context';\nimport { TOKEN_LOGOS } from '../../assets/logos';\nimport { ScreenLayout, ScreenHeader, PoweredByFooter, PrimaryButton } from '../ui';\n\nconst DEFAULT_MAX = 10_000_000;\nconst ABSOLUTE_MIN = 0.01;\n\nconst PRESETS = [100, 250, 1000] as const;\n\ninterface SetupScreenProps {\n availableBalance: number;\n /** Number of tokens/chains available */\n tokenCount: number;\n /** Source wallet/account name */\n sourceName?: string;\n onSetupOneTap: (limit: number) => void;\n onBack: () => void;\n onLogout: () => void;\n /** Navigate to the advanced source picker. */\n onAdvanced?: () => void;\n /** Human-readable label for the currently selected source (e.g. \"USDC on Base\"). */\n selectedSourceLabel?: string;\n loading?: boolean;\n error: string | null;\n /** Token symbol for the selected source, e.g. \"USDC\" or \"USDT\" */\n selectedTokenSymbol?: string;\n}\n\nexport function SetupScreen({\n availableBalance,\n onSetupOneTap,\n onBack,\n onLogout,\n onAdvanced,\n loading,\n error,\n selectedTokenSymbol,\n}: SetupScreenProps) {\n const { tokens } = useSwypeConfig();\n\n const effectiveMax = DEFAULT_MAX;\n const effectiveMin = Math.min(ABSOLUTE_MIN, effectiveMax);\n\n const [limit, setLimit] = useState(() => Math.min(availableBalance, effectiveMax));\n const [activePreset, setActivePreset] = useState<number | 'max' | null>(null);\n const [editing, setEditing] = useState(false);\n const [inputValue, setInputValue] = useState('');\n const inputRef = useRef<HTMLInputElement>(null);\n\n const startEditing = useCallback(() => {\n setInputValue(limit.toFixed(2));\n setEditing(true);\n setActivePreset(null);\n requestAnimationFrame(() => inputRef.current?.focus());\n }, [limit]);\n\n const commitEdit = useCallback(() => {\n const parsed = parseFloat(inputValue);\n if (!isNaN(parsed)) {\n setLimit(Math.min(effectiveMax, Math.max(effectiveMin, Math.round(parsed * 100) / 100)));\n }\n setActivePreset(null);\n setEditing(false);\n }, [inputValue, effectiveMax, effectiveMin]);\n\n const selectPreset = (value: number) => {\n setLimit(Math.min(value, effectiveMax));\n setActivePreset(value);\n };\n\n const selectMax = () => {\n setLimit(Math.min(availableBalance, effectiveMax));\n setActivePreset('max');\n };\n\n return (\n <ScreenLayout\n footer={\n <>\n <PrimaryButton\n onClick={() => onSetupOneTap(limit)}\n disabled={loading}\n loading={loading}\n >\n Approve\n </PrimaryButton>\n <PoweredByFooter />\n </>\n }\n >\n <ScreenHeader onBack={onBack} onLogout={onLogout} />\n\n <h2 style={headingStyle(tokens.text)}>Set Spending Limit</h2>\n\n {error && <div style={errorBannerStyle(tokens)}>{error}</div>}\n\n {/* Amount display row */}\n <div style={amountRowStyle}>\n <div style={{ flex: 1 }}>\n {editing ? (\n <div style={limitValueStyle(tokens.text)}>\n $<input\n ref={inputRef}\n type=\"text\"\n inputMode=\"decimal\"\n pattern=\"[0-9]*\"\n value={inputValue}\n onChange={(e) => setInputValue(e.target.value)}\n onBlur={commitEdit}\n onKeyDown={(e) => { if (e.key === 'Enter') commitEdit(); }}\n style={limitInputStyle(tokens.text)}\n />\n </div>\n ) : (\n <div\n style={editableLimitStyle(tokens.text)}\n onClick={startEditing}\n >\n ${limit.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}\n </div>\n )}\n </div>\n\n <button\n type=\"button\"\n onClick={onAdvanced}\n style={tokenIconButtonStyle(!!onAdvanced)}\n >\n <div style={tokenIconWrapStyle}>\n {selectedTokenSymbol && TOKEN_LOGOS[selectedTokenSymbol] ? (\n <img src={TOKEN_LOGOS[selectedTokenSymbol]} alt={selectedTokenSymbol} width={36} height={36} style={{ borderRadius: '50%' }} />\n ) : (\n <svg width=\"36\" height=\"36\" viewBox=\"0 0 36 36\" fill=\"none\">\n <circle cx=\"18\" cy=\"18\" r=\"18\" fill=\"#2DB84B\" />\n <text x=\"18\" y=\"23\" textAnchor=\"middle\" fontSize=\"18\" fill=\"#fff\" fontWeight=\"700\">$</text>\n </svg>\n )}\n </div>\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" style={{ opacity: 0.5 }}>\n <path d=\"M6 9l6 6 6-6\" stroke={tokens.textMuted} strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n </div>\n\n {/* Preset amount buttons */}\n <div style={presetsRowStyle}>\n {PRESETS.map((value) => (\n <button\n key={value}\n type=\"button\"\n onClick={() => selectPreset(value)}\n style={presetButtonStyle(tokens, activePreset === value)}\n >\n ${value.toLocaleString()}\n </button>\n ))}\n <button\n type=\"button\"\n onClick={selectMax}\n style={presetButtonStyle(tokens, activePreset === 'max')}\n >\n Max\n </button>\n </div>\n\n </ScreenLayout>\n );\n}\n\nconst headingStyle = (color: string): CSSProperties => ({\n fontSize: '1.1rem',\n fontWeight: 700,\n letterSpacing: '-0.02em',\n color,\n margin: '8px 0 24px',\n textAlign: 'center',\n});\n\nconst errorBannerStyle = (tokens: { error: string; errorBg: string }): CSSProperties => ({\n background: tokens.errorBg,\n border: `1px solid ${tokens.error}66`,\n borderRadius: 16,\n padding: '11px 14px',\n color: tokens.error,\n fontSize: '0.84rem',\n marginBottom: 14,\n lineHeight: 1.5,\n});\n\nconst amountRowStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: 24,\n gap: 12,\n};\n\nconst limitValueStyle = (color: string): CSSProperties => ({\n fontSize: '2.4rem',\n fontWeight: 700,\n color,\n letterSpacing: '-0.02em',\n display: 'flex',\n alignItems: 'baseline',\n});\n\nconst editableLimitStyle = (color: string): CSSProperties => ({\n ...limitValueStyle(color),\n cursor: 'pointer',\n});\n\nconst limitInputStyle = (color: string): CSSProperties => ({\n fontSize: '2.4rem',\n fontWeight: 700,\n color,\n background: 'transparent',\n border: 'none',\n borderBottom: '2px solid currentColor',\n outline: 'none',\n width: '6ch',\n fontFamily: 'inherit',\n padding: 0,\n letterSpacing: '-0.02em',\n});\n\nconst tokenIconButtonStyle = (clickable: boolean): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n gap: 4,\n background: 'transparent',\n border: 'none',\n cursor: clickable ? 'pointer' : 'default',\n padding: 0,\n flexShrink: 0,\n});\n\nconst tokenIconWrapStyle: CSSProperties = {\n position: 'relative',\n width: 36,\n height: 36,\n};\n\nconst checkBadgeStyle: CSSProperties = {\n position: 'absolute',\n bottom: -1,\n right: -3,\n};\n\nconst presetsRowStyle: CSSProperties = {\n display: 'flex',\n gap: 10,\n marginBottom: 24,\n};\n\nconst presetButtonStyle = (\n tokens: { accent: string; border: string; text: string; accentText: string },\n active: boolean,\n): CSSProperties => ({\n flex: 1,\n padding: '10px 0',\n borderRadius: 999,\n fontSize: '0.88rem',\n fontWeight: 600,\n fontFamily: 'inherit',\n cursor: 'pointer',\n transition: 'background 0.15s ease, border-color 0.15s ease',\n ...(active\n ? {\n background: `${tokens.accent}30`,\n border: `1.5px solid ${tokens.accent}`,\n color: tokens.text,\n }\n : {\n background: 'transparent',\n border: `1.5px solid ${tokens.border}`,\n color: tokens.text,\n }),\n});\n","import type { CSSProperties } from 'react';\nimport { useSwypeConfig } from '../../context';\nimport { SWYPE_LOGO } from '../../assets/logos';\nimport { ScreenLayout, ScreenHeader, PoweredByFooter, StepList } from '../ui';\nimport type { StepItem } from '../ui';\nimport { Spinner } from '../Spinner';\n\ninterface SetupStatusScreenProps {\n /** Whether setup has completed */\n complete: boolean;\n /** The approved One-Tap limit */\n limit: number;\n /** Number of tokens approved */\n tokensApproved: number;\n /** Merchant name for the \"Return to ...\" button */\n merchantName?: string;\n /** Called when user taps the primary action on the complete screen */\n onContinue: () => void;\n onLogout: () => void;\n error: string | null;\n}\n\nexport function SetupStatusScreen({\n complete,\n onContinue,\n onLogout,\n error,\n}: SetupStatusScreenProps) {\n const { tokens } = useSwypeConfig();\n\n if (complete) {\n return (\n <ScreenLayout footer={<PoweredByFooter />}>\n <ScreenHeader onBack={onContinue} />\n <div style={contentStyle}>\n <img src={SWYPE_LOGO} alt=\"Swype\" style={mascotStyle} />\n <h2 style={headingStyle(tokens.text)}>Done!</h2>\n <p style={subtitleStyle(tokens.textSecondary)}>\n Return to the app to try one-tap deposits.\n </p>\n </div>\n </ScreenLayout>\n );\n }\n\n const steps: StepItem[] = [\n { label: 'Setting up Wallet', status: 'active' },\n { label: 'Done', status: 'pending' },\n ];\n\n return (\n <ScreenLayout>\n <ScreenHeader onLogout={onLogout} />\n <div style={contentStyle}>\n <Spinner size={48} />\n <h2 style={headingStyle(tokens.text)}>Setting up One-Tap...</h2>\n\n {error && <div style={errorBannerStyle(tokens)}>{error}</div>}\n\n <div style={stepsWrapStyle}>\n <StepList steps={steps} />\n </div>\n\n <p style={waitHintStyle(tokens.textMuted)}>Usually takes a few seconds</p>\n </div>\n </ScreenLayout>\n );\n}\n\nconst contentStyle: CSSProperties = {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n textAlign: 'center',\n padding: '0 24px 32px',\n};\n\nconst mascotStyle: CSSProperties = {\n width: 56,\n height: 56,\n};\n\nconst headingStyle = (color: string): CSSProperties => ({\n fontSize: '1.45rem',\n fontWeight: 700,\n letterSpacing: '-0.02em',\n color,\n margin: '20px 0 8px',\n});\n\nconst subtitleStyle = (color: string): CSSProperties => ({\n fontSize: '0.9rem',\n color,\n margin: '0 0 28px',\n lineHeight: 1.5,\n maxWidth: 260,\n});\n\nconst errorBannerStyle = (tokens: { error: string; errorBg: string }): CSSProperties => ({\n background: tokens.errorBg,\n border: `1px solid ${tokens.error}66`,\n borderRadius: 16,\n padding: '11px 14px',\n color: tokens.error,\n fontSize: '0.84rem',\n marginBottom: 14,\n lineHeight: 1.5,\n width: '100%',\n textAlign: 'left',\n});\n\nconst stepsWrapStyle: CSSProperties = {\n width: '100%',\n maxWidth: 280,\n textAlign: 'left',\n marginBottom: 16,\n};\n\nconst waitHintStyle = (color: string): CSSProperties => ({\n fontSize: '0.82rem',\n color,\n margin: 0,\n});\n","import { useState, useEffect, useRef, type CSSProperties } from 'react';\nimport type { Account } from '../../types';\nimport { useSwypeConfig } from '../../context';\nimport { KNOWN_LOGOS, TOKEN_LOGOS } from '../../assets/logos';\nimport {\n getPreferredDepositWallet,\n getWalletAddress,\n hasActiveDepositWallet,\n} from '../../paymentHelpers';\nimport {\n ScreenLayout,\n ScreenHeader,\n PoweredByFooter,\n PrimaryButton,\n WarningBanner,\n} from '../ui';\n\ninterface DepositScreenProps {\n merchantName?: string;\n /** Total available balance from source */\n availableBalance: number;\n /** Remaining One-Tap allowance from the API, or null when not configured */\n remainingLimit: number | null;\n /** Number of tokens/chains available */\n tokenCount: number;\n /** Pre-populated amount */\n initialAmount: number;\n /** Estimated fee percentage and dollar amount */\n estimatedFeePct?: number;\n estimatedFeeUsd?: number;\n /** Whether the deposit is currently processing */\n processing?: boolean;\n error: string | null;\n onDeposit: (amount: number) => void;\n onSwitchWallet: () => void;\n onBack: () => void;\n onLogout: () => void;\n /** Called when the user taps \"Increase Limit\" to re-authorize via wallet deeplink */\n onIncreaseLimit?: () => void;\n /** Whether a limit-increase flow is currently in progress */\n increasingLimit?: boolean;\n /** All user accounts for the source dropdown */\n accounts?: Account[];\n /** Currently selected account ID */\n selectedAccountId?: string | null;\n /** Called when an active account is selected from the dropdown */\n onSelectAccount?: (accountId: string) => void;\n /** Called when an inactive account is clicked (to authorize it) */\n onAuthorizeAccount?: (accountId: string) => void;\n /** Called when \"+ Add Provider\" is clicked in the dropdown */\n onAddProvider?: () => void;\n /** Called when the token badge is tapped to open the token picker */\n onSelectToken?: () => void;\n /** Label for the selected chain/token, e.g. \"USDC on Base\" */\n selectedSourceLabel?: string;\n /** Token symbol for the selected source, e.g. \"USDC\" or \"USDT\" */\n selectedTokenSymbol?: string;\n}\n\nconst MIN_DEPOSIT = 0.25;\n\nexport function DepositScreen({\n merchantName,\n availableBalance,\n remainingLimit,\n tokenCount,\n initialAmount,\n processing,\n error,\n onDeposit,\n onSwitchWallet,\n onBack,\n onLogout,\n onIncreaseLimit,\n increasingLimit,\n accounts,\n selectedAccountId,\n onSelectAccount,\n onAuthorizeAccount,\n onAddProvider,\n onSelectToken,\n selectedSourceLabel,\n selectedTokenSymbol,\n}: DepositScreenProps) {\n const { tokens } = useSwypeConfig();\n const amount = initialAmount;\n const [accountPickerOpen, setAccountPickerOpen] = useState(false);\n const pickerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!accountPickerOpen) return;\n const handleClick = (e: MouseEvent) => {\n if (pickerRef.current && !pickerRef.current.contains(e.target as Node)) {\n setAccountPickerOpen(false);\n }\n };\n document.addEventListener('mousedown', handleClick);\n return () => document.removeEventListener('mousedown', handleClick);\n }, [accountPickerOpen]);\n\n const selectedAccount = accounts?.find((a) => a.id === selectedAccountId);\n const selectedProviderName = selectedAccount?.name ?? 'Wallet';\n const selectedProviderLogo = KNOWN_LOGOS[selectedProviderName.toLowerCase()];\n const totalAccountBalance = selectedAccount\n ? selectedAccount.wallets.reduce((sum, w) => sum + w.balance.available.amount, 0)\n : availableBalance;\n const isLowBalance = availableBalance < MIN_DEPOSIT;\n const exceedsLimit = remainingLimit != null && amount > remainingLimit && !isLowBalance;\n const canDeposit = amount >= MIN_DEPOSIT && !exceedsLimit && !isLowBalance && !processing;\n\n return (\n <ScreenLayout\n footer={\n <>\n {!accountPickerOpen && (\n exceedsLimit && onIncreaseLimit ? (\n <PrimaryButton onClick={onIncreaseLimit} loading={increasingLimit}>\n Increase limit\n </PrimaryButton>\n ) : (\n <PrimaryButton onClick={() => onDeposit(amount)} disabled={!canDeposit} loading={processing}>\n Confirm\n </PrimaryButton>\n )\n )}\n <PoweredByFooter />\n </>\n }\n >\n <ScreenHeader onBack={onBack} onLogout={onLogout} />\n\n {/* Deposit card with inline balance row + account dropdown */}\n <div ref={pickerRef} style={depositCardWrapStyle}>\n <div /**style={depositCardStyle(tokens)}**/>\n <div style={depositLabelStyle(tokens.textMuted)}>Depositing</div>\n\n <div style={amountRowStyle}>\n <div style={amountValueStyle(tokens.text)}>\n ${amount.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}\n </div>\n <button\n type=\"button\"\n onClick={onSelectToken}\n style={tokenIconButtonStyle(!!onSelectToken)}\n >\n <div style={tokenIconWrapStyle}>\n {selectedTokenSymbol && TOKEN_LOGOS[selectedTokenSymbol] ? (\n <img src={TOKEN_LOGOS[selectedTokenSymbol]} alt={selectedTokenSymbol} width={36} height={36} style={{ borderRadius: '50%' }} />\n ) : (\n <svg width=\"36\" height=\"36\" viewBox=\"0 0 36 36\" fill=\"none\">\n <circle cx=\"18\" cy=\"18\" r=\"18\" fill=\"#2DB84B\" />\n <text x=\"18\" y=\"23\" textAnchor=\"middle\" fontSize=\"18\" fill=\"#fff\" fontWeight=\"700\">$</text>\n </svg>\n )}\n </div>\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" style={{ opacity: 0.5 }}>\n <path d=\"M6 9l6 6 6-6\" stroke={tokens.textMuted} strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n </div>\n\n {!accountPickerOpen && (\n <button\n type=\"button\"\n onClick={() => setAccountPickerOpen(!accountPickerOpen)}\n style={walletBalanceRowStyle}\n >\n {selectedProviderLogo ? (\n <img src={selectedProviderLogo} alt={selectedProviderName} style={providerLogoStyle} />\n ) : (\n <div style={providerFallbackStyle(tokens.textMuted)}>\n {selectedProviderName.charAt(0)}\n </div>\n )}\n <span style={walletBalanceStyle(tokens.text)}>\n ${totalAccountBalance.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}\n </span>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" style={{ opacity: 0.4 }}>\n <path d=\"M7 10l5-5 5 5M7 14l5 5 5-5\" stroke={tokens.textMuted} strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n )}\n </div>\n\n {accountPickerOpen && accounts && accounts.length > 0 && (\n <div style={accountDropdownOuterStyle(tokens)}>\n <div style={accountDropdownLabelStyle(tokens.textMuted)}>Choose account</div>\n <div style={accountDropdownInnerStyle(tokens)}>\n {accounts.map((account) => {\n const preferredWallet = getPreferredDepositWallet(account, amount);\n const active = hasActiveDepositWallet(account);\n const isSelected = account.id === selectedAccountId;\n const walletAddress = preferredWallet\n ? getWalletAddress(preferredWallet)\n : null;\n const truncatedAddress = walletAddress\n ? `${walletAddress.slice(0, 6)}...${walletAddress.slice(-4)}`\n : null;\n const accountBalance = account.wallets.reduce(\n (sum, w) => sum + w.balance.available.amount,\n 0,\n );\n const providerLogo = KNOWN_LOGOS[account.name.toLowerCase()];\n\n return (\n <button\n key={account.id}\n type=\"button\"\n onClick={() => {\n if (active) {\n onSelectAccount?.(account.id);\n } else {\n onAuthorizeAccount?.(account.id);\n }\n setAccountPickerOpen(false);\n }}\n style={accountRowStyle(tokens, isSelected)}\n >\n <div style={accountRowLeftStyle}>\n {providerLogo ? (\n <img src={providerLogo} alt={account.name} style={accountLogoStyle} />\n ) : (\n <div style={accountFallbackIconStyle(tokens.textMuted)}>\n {account.name.charAt(0)}\n </div>\n )}\n <div style={accountInfoStyle}>\n <span style={accountAddressStyle(tokens.text)}>\n {truncatedAddress ?? account.nickname ?? account.name}\n </span>\n <span style={accountBalanceTextStyle(tokens.textMuted)}>\n ${accountBalance.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}\n </span>\n </div>\n </div>\n {isSelected ? (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 22 22\" fill=\"none\">\n <circle cx=\"11\" cy=\"11\" r=\"11\" fill={tokens.success} />\n <path d=\"M7 11l3 3 5-5\" stroke=\"#fff\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n ) : (\n <div style={radioEmptyStyle(tokens.border)} />\n )}\n </button>\n );\n })}\n\n {onAddProvider && (\n <button\n type=\"button\"\n onClick={() => {\n onAddProvider();\n setAccountPickerOpen(false);\n }}\n style={addAccountBtnStyle(tokens)}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M12 5v14M5 12h14\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" />\n </svg>\n Add Account\n </button>\n )}\n </div>\n </div>\n )}\n </div>\n\n {!accountPickerOpen && remainingLimit != null && (\n <div style={spendingLimitStyle(tokens.textMuted)}>\n Spending Limit{' '}\n <strong style={{ color: tokens.text }}>\n ${remainingLimit.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}\n </strong>\n {exceedsLimit && (\n <p style={limitExceededHintStyle(tokens.warning)}>\n Your deposit of ${amount.toFixed(2)} exceeds your One-Tap limit of ${remainingLimit?.toFixed(2) ?? '0.00'}.\n Increase your limit to continue.\n </p>\n )}\n </div>\n )}\n\n {!accountPickerOpen && isLowBalance && (\n <WarningBanner title=\"Not enough funds\">\n Your wallet balance is ${availableBalance.toFixed(2)} — you need at least\n ${MIN_DEPOSIT.toFixed(2)} to deposit via One-Tap.\n </WarningBanner>\n )}\n\n {error && <div style={errorBannerStyle(tokens)}>{error}</div>}\n </ScreenLayout>\n );\n}\n\n/* ── Styles ──────────────────────────────────────────────────────── */\n\nconst depositCardWrapStyle: CSSProperties = {\n position: 'relative',\n marginBottom: 20,\n};\n\nconst depositCardStyle = (tokens: { bg: string; border: string; radiusLg: string }): CSSProperties => ({\n background: tokens.bg,\n border: `1px solid ${tokens.border}`,\n borderRadius: tokens.radiusLg,\n padding: '16px 20px',\n});\n\nconst depositLabelStyle = (color: string): CSSProperties => ({\n fontSize: '0.75rem',\n fontWeight: 500,\n color,\n marginBottom: 4,\n});\n\nconst amountRowStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: 12,\n};\n\nconst amountValueStyle = (color: string): CSSProperties => ({\n fontSize: '2.4rem',\n fontWeight: 700,\n letterSpacing: '-0.02em',\n color,\n});\n\nconst tokenIconButtonStyle = (clickable: boolean): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n gap: 4,\n background: 'transparent',\n border: 'none',\n cursor: clickable ? 'pointer' : 'default',\n padding: 0,\n flexShrink: 0,\n});\n\nconst tokenIconWrapStyle: CSSProperties = {\n position: 'relative',\n width: 36,\n height: 36,\n};\n\nconst checkBadgeStyle: CSSProperties = {\n position: 'absolute',\n bottom: -1,\n right: -3,\n};\n\n/* ── Wallet balance row ──────────────────────────────────────────── */\n\nconst walletBalanceRowStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 8,\n background: 'transparent',\n border: 'none',\n padding: 0,\n width: '100%',\n cursor: 'pointer',\n fontFamily: 'inherit',\n outline: 'none',\n};\n\nconst providerLogoStyle: CSSProperties = {\n width: 18,\n height: 18,\n borderRadius: '50%',\n objectFit: 'contain',\n};\n\nconst providerFallbackStyle = (color: string): CSSProperties => ({\n width: 18,\n height: 18,\n borderRadius: '50%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '0.65rem',\n fontWeight: 700,\n color,\n flexShrink: 0,\n});\n\nconst walletBalanceStyle = (color: string): CSSProperties => ({\n fontSize: '0.9rem',\n fontWeight: 600,\n color,\n});\n\n/* ── Account dropdown styles ─────────────────────────────────────── */\n\nconst accountDropdownOuterStyle = (tokens: { bgCard: string; shadowLg: string; radiusLg: string; border: string }): CSSProperties => ({\n marginTop: 4,\n background: tokens.bgCard,\n border: `1px solid ${tokens.border}`,\n borderRadius: tokens.radiusLg,\n boxShadow: tokens.shadowLg,\n padding: '12px 14px 14px',\n});\n\nconst accountDropdownLabelStyle = (color: string): CSSProperties => ({\n fontSize: '0.78rem',\n fontWeight: 500,\n color,\n marginBottom: 8,\n});\n\nconst accountDropdownInnerStyle = (tokens: { bgInput: string; border: string; radiusLg: string }): CSSProperties => ({\n background: tokens.bgInput,\n border: `1px solid ${tokens.border}`,\n borderRadius: tokens.radiusLg,\n overflow: 'hidden',\n});\n\nconst accountRowStyle = (\n tokens: { border: string; accent: string },\n isSelected: boolean,\n): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n padding: '14px 16px',\n background: isSelected ? `${tokens.accent}10` : 'transparent',\n border: 'none',\n borderBottom: `1px solid ${tokens.border}`,\n cursor: 'pointer',\n fontFamily: 'inherit',\n textAlign: 'left',\n outline: 'none',\n});\n\nconst accountRowLeftStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n minWidth: 0,\n flex: 1,\n};\n\nconst accountLogoStyle: CSSProperties = {\n width: 28,\n height: 28,\n borderRadius: '50%',\n objectFit: 'contain',\n flexShrink: 0,\n};\n\nconst accountFallbackIconStyle = (color: string): CSSProperties => ({\n width: 28,\n height: 28,\n borderRadius: '50%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '0.75rem',\n fontWeight: 700,\n color,\n flexShrink: 0,\n});\n\nconst accountInfoStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n minWidth: 0,\n};\n\nconst accountAddressStyle = (color: string): CSSProperties => ({\n fontWeight: 600,\n fontSize: '0.88rem',\n color,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n});\n\nconst accountBalanceTextStyle = (color: string): CSSProperties => ({\n fontSize: '0.76rem',\n color,\n fontWeight: 500,\n});\n\nconst radioEmptyStyle = (borderColor: string): CSSProperties => ({\n width: 22,\n height: 22,\n borderRadius: '50%',\n border: `2px solid ${borderColor}`,\n flexShrink: 0,\n});\n\nconst addAccountBtnStyle = (tokens: { textMuted: string }): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n width: '100%',\n padding: '12px 16px',\n background: 'transparent',\n border: 'none',\n color: tokens.textMuted,\n fontWeight: 600,\n fontSize: '0.85rem',\n cursor: 'pointer',\n fontFamily: 'inherit',\n textAlign: 'left',\n outline: 'none',\n});\n\nconst spendingLimitStyle = (color: string): CSSProperties => ({\n textAlign: 'center',\n fontSize: '0.84rem',\n color,\n marginBottom: 8,\n});\n\nconst errorBannerStyle = (tokens: { error: string; errorBg: string }): CSSProperties => ({\n background: tokens.errorBg,\n border: `1px solid ${tokens.error}66`,\n borderRadius: 16,\n padding: '11px 14px',\n color: tokens.error,\n fontSize: '0.84rem',\n marginTop: 8,\n lineHeight: 1.5,\n});\n\nconst limitExceededHintStyle = (color: string): CSSProperties => ({\n textAlign: 'center',\n fontSize: '0.78rem',\n color,\n margin: '12px 0 2px',\n lineHeight: 1.5,\n});\n\n","import { useCallback, useEffect, useRef, useState, type CSSProperties } from 'react';\nimport { useSwypeConfig } from '../../context';\nimport { ScreenLayout, ScreenHeader, PoweredByFooter, PrimaryButton, IconCircle } from '../ui';\n\ninterface SuccessScreenProps {\n amount: number;\n currency: string;\n succeeded: boolean;\n error?: string | null;\n merchantName?: string;\n sourceName?: string;\n remainingLimit?: number | null;\n onDone: () => void;\n onLogout: () => void;\n onIncreaseLimits?: () => void;\n onManageAccount?: () => void;\n /** When set, shows a countdown and auto-calls onDone after this many seconds. */\n autoCloseSeconds?: number;\n /** When true, this is a guest transfer success — offer One-Tap setup. */\n isGuestTransfer?: boolean;\n /** Navigate to One-Tap setup offer screen. */\n onOfferSetup?: () => void;\n}\n\nexport function SuccessScreen({\n amount,\n currency,\n succeeded,\n error,\n merchantName,\n sourceName,\n remainingLimit,\n onDone,\n onLogout,\n onIncreaseLimits,\n onManageAccount,\n autoCloseSeconds,\n isGuestTransfer,\n onOfferSetup,\n}: SuccessScreenProps) {\n const { tokens } = useSwypeConfig();\n const effectiveAutoClose = succeeded ? autoCloseSeconds : undefined;\n const [countdown, setCountdown] = useState(effectiveAutoClose ?? 0);\n const doneCalledRef = useRef(false);\n\n const handleDone = useCallback(() => {\n if (doneCalledRef.current) return;\n doneCalledRef.current = true;\n onDone();\n }, [onDone]);\n\n useEffect(() => {\n if (!effectiveAutoClose || effectiveAutoClose <= 0) return;\n\n const intervalId = window.setInterval(() => {\n setCountdown((prev) => {\n if (prev <= 1) {\n window.clearInterval(intervalId);\n return 0;\n }\n return prev - 1;\n });\n }, 1000);\n\n return () => window.clearInterval(intervalId);\n }, [effectiveAutoClose]);\n\n useEffect(() => {\n if (effectiveAutoClose && countdown === 0) {\n handleDone();\n }\n }, [effectiveAutoClose, countdown, handleDone]);\n\n return (\n <ScreenLayout\n footer={\n <>\n <PrimaryButton onClick={handleDone}>\n {!succeeded ? 'Try again' : 'Done'}\n </PrimaryButton>\n {isGuestTransfer && succeeded && onOfferSetup && (\n <button type=\"button\" onClick={onOfferSetup} style={setupLinkStyle(tokens.accent)}>\n Set up One-Tap deposits\n </button>\n )}\n {effectiveAutoClose != null && effectiveAutoClose > 0 && (\n <p style={countdownStyle(tokens.textMuted)}>\n Returning to app in {countdown}s…\n </p>\n )}\n {onManageAccount && (\n <button type=\"button\" onClick={onManageAccount} style={manageStyle(tokens.textMuted)}>\n Manage Swype account →\n </button>\n )}\n <PoweredByFooter />\n </>\n }\n >\n <ScreenHeader onLogout={onLogout} />\n\n <div style={contentStyle}>\n {succeeded ? (\n <>\n <IconCircle variant=\"success\" size={64}>\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\" fill={tokens.success} />\n </svg>\n </IconCircle>\n\n <h2 style={headingStyle(tokens.text)}>\n ${amount.toFixed(2)} deposited\n </h2>\n {merchantName && (\n <p style={subtitleStyle(tokens.textSecondary)}>to {merchantName}</p>\n )}\n </>\n ) : (\n <>\n <IconCircle variant=\"error\" size={64}>\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\" fill={tokens.error} />\n </svg>\n </IconCircle>\n\n <h2 style={headingStyle(tokens.text)}>\n Transfer failed\n </h2>\n {error && (\n <p style={subtitleStyle(tokens.error)}>{error}</p>\n )}\n </>\n )}\n\n {/* Summary card */}\n <div style={summaryCardStyle(tokens)}>\n {sourceName && (\n <div style={summaryRowStyle}>\n <span style={summaryLabelStyle(tokens.textMuted)}>From</span>\n <span style={summaryValueStyle(tokens.text)}>{sourceName}</span>\n </div>\n )}\n {succeeded && (\n <div style={summaryRowStyle}>\n <span style={summaryLabelStyle(tokens.textMuted)}>Time</span>\n <span style={summaryValueStyle(tokens.text)}>just now</span>\n </div>\n )}\n {succeeded && remainingLimit != null && (\n <div style={summaryRowStyle}>\n <span style={summaryLabelStyle(tokens.textMuted)}>Remaining limit</span>\n <span style={{ ...summaryValueStyle(tokens.text), color: tokens.accent }}>\n ${remainingLimit.toFixed(2)}\n </span>\n </div>\n )}\n </div>\n\n {/* Upsell card — only on success */}\n {succeeded && onIncreaseLimits && (\n <div style={upsellCardStyle(tokens)}>\n <div style={upsellHeaderStyle}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" style={{ marginRight: 6 }}>\n <path d=\"M7 14l5-5 5 5\" stroke={tokens.accent} strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n <strong>Want higher limits?</strong>\n </div>\n <p style={upsellBodyStyle(tokens.textSecondary)}>\n Increase your One-Tap limit to deposit more without re-approving.\n </p>\n <button type=\"button\" onClick={onIncreaseLimits} style={upsellLinkStyle(tokens.accent)}>\n Increase One-Tap limit\n </button>\n </div>\n )}\n </div>\n </ScreenLayout>\n );\n}\n\nconst contentStyle: CSSProperties = {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n paddingTop: 16,\n};\n\nconst headingStyle = (color: string): CSSProperties => ({\n fontSize: '1.5rem',\n fontWeight: 700,\n letterSpacing: '-0.02em',\n color,\n margin: '20px 0 4px',\n});\n\nconst subtitleStyle = (color: string): CSSProperties => ({\n fontSize: '0.9rem',\n color,\n margin: '0 0 20px',\n});\n\nconst summaryCardStyle = (tokens: { bgInput: string; border: string }): CSSProperties => ({\n width: '100%',\n padding: '14px 16px',\n background: tokens.bgInput,\n border: `1px solid ${tokens.border}`,\n borderRadius: 20,\n marginBottom: 16,\n});\n\nconst summaryRowStyle: CSSProperties = {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: '6px 0',\n};\n\nconst summaryLabelStyle = (color: string): CSSProperties => ({\n fontSize: '0.84rem',\n color,\n});\n\nconst summaryValueStyle = (color: string): CSSProperties => ({\n fontSize: '0.88rem',\n fontWeight: 600,\n color,\n});\n\nconst upsellCardStyle = (tokens: { bgInput: string; border: string }): CSSProperties => ({\n width: '100%',\n padding: '16px',\n background: tokens.bgInput,\n border: `1px solid ${tokens.border}`,\n borderRadius: 20,\n marginBottom: 16,\n});\n\nconst upsellHeaderStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n fontSize: '0.88rem',\n marginBottom: 4,\n};\n\nconst upsellBodyStyle = (color: string): CSSProperties => ({\n fontSize: '0.8rem',\n color,\n margin: '4px 0 10px',\n lineHeight: 1.5,\n});\n\nconst upsellLinkStyle = (color: string): CSSProperties => ({\n background: 'transparent',\n border: 'none',\n color,\n fontWeight: 600,\n fontSize: '0.84rem',\n cursor: 'pointer',\n fontFamily: 'inherit',\n padding: 0,\n});\n\nconst countdownStyle = (color: string): CSSProperties => ({\n fontSize: '0.82rem',\n color,\n margin: '10px 0 0',\n textAlign: 'center',\n});\n\nconst setupLinkStyle = (color: string): CSSProperties => ({\n background: 'transparent',\n border: 'none',\n color,\n cursor: 'pointer',\n fontFamily: 'inherit',\n fontSize: '0.88rem',\n fontWeight: 600,\n display: 'block',\n width: '100%',\n textAlign: 'center',\n padding: '12px 0 0',\n});\n\nconst manageStyle = (color: string): CSSProperties => ({\n background: 'transparent',\n border: 'none',\n color,\n cursor: 'pointer',\n fontFamily: 'inherit',\n fontSize: '0.84rem',\n fontWeight: 500,\n display: 'block',\n width: '100%',\n textAlign: 'center',\n padding: '12px 0 0',\n});\n","import type { CSSProperties } from 'react';\nimport { TOKEN_LOGOS } from '../../assets/logos';\nimport { useSwypeConfig } from '../../context';\nimport {\n ScreenLayout,\n ScreenHeader,\n PrimaryButton,\n PoweredByFooter,\n} from '../ui';\n\ninterface ChainChoice {\n chainName: string;\n balance: number;\n tokens: { tokenSymbol: string; balance: number }[];\n}\n\ninterface SelectSourceScreenProps {\n choices: ChainChoice[];\n selectedChainName: string;\n selectedTokenSymbol: string;\n recommended: { chainName: string; tokenSymbol: string } | null;\n onChainChange: (chainName: string) => void;\n onTokenChange: (tokenSymbol: string) => void;\n onConfirm: () => void;\n onBack?: () => void;\n onLogout: () => void;\n}\n\nexport function SelectSourceScreen({\n choices,\n selectedChainName,\n selectedTokenSymbol,\n recommended,\n onChainChange,\n onTokenChange,\n onConfirm,\n onBack,\n onLogout,\n}: SelectSourceScreenProps) {\n const { tokens } = useSwypeConfig();\n\n const selectedChain = choices.find((c) => c.chainName === selectedChainName) ?? choices[0];\n const tokenChoices = selectedChain?.tokens ?? [];\n const canConfirm = !!selectedChainName && !!selectedTokenSymbol;\n\n return (\n <ScreenLayout\n footer={\n <>\n <PrimaryButton onClick={onConfirm} disabled={!canConfirm}>\n Confirm source\n </PrimaryButton>\n <PoweredByFooter />\n </>\n }\n >\n <ScreenHeader\n title=\"Select Source\"\n onBack={onBack}\n onLogout={onLogout}\n />\n\n <p style={subtitleStyle(tokens.textMuted)}>\n Choose which chain and token to pay from.\n </p>\n\n {/* Chain selector */}\n <label style={labelStyle(tokens.textSecondary)}>Chain</label>\n <div style={optionListStyle}>\n {choices.map((chain) => {\n const isSelected = chain.chainName === selectedChainName;\n const isRecommended = chain.chainName === recommended?.chainName;\n return (\n <button\n key={chain.chainName}\n type=\"button\"\n onClick={() => onChainChange(chain.chainName)}\n style={optionButtonStyle(tokens, isSelected)}\n >\n <div style={optionContentStyle}>\n <span style={optionNameStyle(tokens.text)}>\n {chain.chainName}\n {isRecommended && (\n <span style={recommendedBadgeStyle(tokens.textMuted)}> recommended</span>\n )}\n </span>\n <span style={optionBalanceStyle(tokens.textMuted)}>\n ${chain.balance.toFixed(2)}\n </span>\n </div>\n <div style={radioStyle(tokens, isSelected)}>\n {isSelected && <div style={radioDotStyle(tokens.accent)} />}\n </div>\n </button>\n );\n })}\n </div>\n\n {/* Token selector */}\n {tokenChoices.length > 0 && (\n <>\n <label style={labelStyle(tokens.textSecondary)}>Token</label>\n <div style={optionListStyle}>\n {tokenChoices.map((token) => {\n const isSelected = token.tokenSymbol === selectedTokenSymbol;\n const tokenLogo = TOKEN_LOGOS[token.tokenSymbol];\n return (\n <button\n key={token.tokenSymbol}\n type=\"button\"\n onClick={() => onTokenChange(token.tokenSymbol)}\n style={optionButtonStyle(tokens, isSelected)}\n >\n <div style={optionMainStyle}>\n <div style={tokenIconCircleStyle(tokens, !!tokenLogo)}>\n {tokenLogo ? (\n <img src={tokenLogo} alt={token.tokenSymbol} style={tokenLogoImgStyle} />\n ) : (\n <span style={tokenIconTextStyle(tokens.textMuted)}>$</span>\n )}\n </div>\n <div style={optionContentStyle}>\n <span style={optionNameStyle(tokens.text)}>\n {token.tokenSymbol}\n </span>\n <span style={optionBalanceStyle(tokens.textMuted)}>\n ${token.balance.toFixed(2)}\n </span>\n </div>\n </div>\n <div style={radioStyle(tokens, isSelected)}>\n {isSelected && <div style={radioDotStyle(tokens.accent)} />}\n </div>\n </button>\n );\n })}\n </div>\n </>\n )}\n </ScreenLayout>\n );\n}\n\n/* ── Styles ────────────────────────────────────────────────────────── */\n\nconst subtitleStyle = (color: string): CSSProperties => ({\n fontSize: '0.85rem',\n color,\n margin: '0 0 20px',\n lineHeight: 1.5,\n});\n\nconst labelStyle = (color: string): CSSProperties => ({\n display: 'block',\n fontSize: '0.75rem',\n fontWeight: 600,\n color,\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n marginBottom: 8,\n});\n\nconst optionListStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 8,\n marginBottom: 20,\n};\n\nconst optionButtonStyle = (\n tokens: { bgInput: string; border: string; accent: string },\n selected: boolean,\n): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '14px 16px',\n background: tokens.bgInput,\n border: `1.5px solid ${selected ? tokens.accent : tokens.border}`,\n borderRadius: 14,\n cursor: 'pointer',\n fontFamily: 'inherit',\n textAlign: 'left',\n transition: 'border-color 0.15s ease',\n});\n\nconst optionContentStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n};\n\nconst optionMainStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n};\n\nconst optionNameStyle = (color: string): CSSProperties => ({\n fontSize: '0.9rem',\n fontWeight: 600,\n color,\n});\n\nconst recommendedBadgeStyle = (color: string): CSSProperties => ({\n fontSize: '0.7rem',\n fontWeight: 500,\n color,\n marginLeft: 6,\n});\n\nconst optionBalanceStyle = (color: string): CSSProperties => ({\n fontSize: '0.78rem',\n color,\n});\n\nconst tokenIconCircleStyle = (\n tokens: { border: string },\n hasLogo: boolean,\n): CSSProperties => ({\n width: 36,\n height: 36,\n borderRadius: '50%',\n border: hasLogo ? 'none' : `1.5px solid ${tokens.border}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n overflow: 'hidden',\n});\n\nconst tokenLogoImgStyle: CSSProperties = {\n width: 36,\n height: 36,\n borderRadius: '50%',\n objectFit: 'cover',\n};\n\nconst tokenIconTextStyle = (color: string): CSSProperties => ({\n fontSize: '1rem',\n fontWeight: 700,\n color,\n});\n\nconst radioStyle = (\n tokens: { border: string; accent: string },\n selected: boolean,\n): CSSProperties => ({\n width: 20,\n height: 20,\n borderRadius: '50%',\n border: `2px solid ${selected ? tokens.accent : tokens.border}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n});\n\nconst radioDotStyle = (color: string): CSSProperties => ({\n width: 10,\n height: 10,\n borderRadius: '50%',\n background: color,\n});\n","import { useState, type CSSProperties } from 'react';\nimport { useSwypeConfig } from '../../context';\nimport {\n ScreenLayout,\n ScreenHeader,\n PrimaryButton,\n PoweredByFooter,\n} from '../ui';\n\ninterface ChainChoice {\n chainName: string;\n balance: number;\n tokens: { tokenSymbol: string; balance: number }[];\n}\n\ninterface AdvancedSourceScreenProps {\n choices: ChainChoice[];\n selectedChainName: string;\n selectedTokenSymbol: string;\n onSelectSource: (chainName: string, tokenSymbol: string) => void;\n onBack: () => void;\n}\n\nexport function AdvancedSourceScreen({\n choices,\n selectedChainName,\n selectedTokenSymbol,\n onSelectSource,\n onBack,\n}: AdvancedSourceScreenProps) {\n const { tokens } = useSwypeConfig();\n\n const [expandedChain, setExpandedChain] = useState<string | null>(\n selectedChainName || (choices[0]?.chainName ?? null),\n );\n const [localChain, setLocalChain] = useState(selectedChainName);\n const [localToken, setLocalToken] = useState(selectedTokenSymbol);\n\n const canConfirm = !!localChain && !!localToken;\n\n const handleChainToggle = (chainName: string) => {\n setExpandedChain((prev) => (prev === chainName ? null : chainName));\n };\n\n const handleTokenSelect = (chainName: string, tokenSymbol: string) => {\n setLocalChain(chainName);\n setLocalToken(tokenSymbol);\n setExpandedChain(chainName);\n };\n\n return (\n <ScreenLayout\n footer={\n <>\n <PrimaryButton\n onClick={() => onSelectSource(localChain, localToken)}\n disabled={!canConfirm}\n >\n Select Source\n </PrimaryButton>\n <PoweredByFooter />\n </>\n }\n >\n <ScreenHeader\n title=\"Swype Setup\"\n onBack={onBack}\n right={<span style={advancedBadgeStyle(tokens.accent)}>Advanced</span>}\n />\n\n <h2 style={headingStyle(tokens.text)}>Set up One-Tap deposits</h2>\n <p style={subtitleStyle(tokens.textSecondary)}>\n Select a token source for your One-Tap deposits.\n </p>\n\n <label style={labelStyle(tokens.textSecondary)}>Select tokens to approve</label>\n\n <div style={chainListStyle}>\n {choices.map((chain) => {\n const isExpanded = expandedChain === chain.chainName;\n const chainHasSelection = localChain === chain.chainName;\n\n return (\n <div key={chain.chainName} style={chainCardStyle(tokens)}>\n {/* Chain header */}\n <button\n type=\"button\"\n onClick={() => handleChainToggle(chain.chainName)}\n style={chainHeaderStyle(tokens, isExpanded)}\n >\n <div style={chainHeaderLeftStyle}>\n <span style={chainNameStyle(tokens.text)}>\n {chain.chainName}\n </span>\n <span style={chainBalanceStyle(tokens.textMuted)}>\n ${chain.balance.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}\n </span>\n </div>\n <span style={chevronIconStyle(isExpanded, tokens.textMuted)}>\n {isExpanded ? '▾' : '▸'}\n </span>\n </button>\n\n {/* Token rows */}\n {isExpanded && (\n <div style={tokenListStyle}>\n {chain.tokens.map((token) => {\n const isSelected =\n chainHasSelection && localToken === token.tokenSymbol;\n\n return (\n <button\n key={token.tokenSymbol}\n type=\"button\"\n onClick={() => handleTokenSelect(chain.chainName, token.tokenSymbol)}\n style={tokenRowStyle(tokens, isSelected)}\n >\n <div style={tokenInfoStyle}>\n <span style={tokenSymbolStyle(tokens.text)}>\n {token.tokenSymbol}\n </span>\n <span style={tokenBalStyle(tokens.textMuted)}>\n Balance: {token.balance.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })} {token.tokenSymbol}\n </span>\n </div>\n <div style={radioStyle(tokens, isSelected)}>\n {isSelected && <div style={radioDotStyle(tokens.accent)} />}\n </div>\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n })}\n </div>\n </ScreenLayout>\n );\n}\n\n/* ── Styles ────────────────────────────────────────────────────────── */\n\nconst advancedBadgeStyle = (color: string): CSSProperties => ({\n fontSize: '0.72rem',\n fontWeight: 600,\n color,\n border: `1px solid ${color}`,\n borderRadius: 999,\n padding: '3px 10px',\n letterSpacing: '0.02em',\n});\n\nconst headingStyle = (color: string): CSSProperties => ({\n fontSize: '1.3rem',\n fontWeight: 700,\n letterSpacing: '-0.02em',\n color,\n margin: '8px 0 4px',\n});\n\nconst subtitleStyle = (color: string): CSSProperties => ({\n fontSize: '0.86rem',\n color,\n margin: '0 0 20px',\n lineHeight: 1.5,\n});\n\nconst labelStyle = (color: string): CSSProperties => ({\n display: 'block',\n fontSize: '0.75rem',\n fontWeight: 600,\n color,\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n marginBottom: 10,\n});\n\nconst chainListStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 10,\n};\n\nconst chainCardStyle = (tokens: { border: string; bgInput: string }): CSSProperties => ({\n border: `1px solid ${tokens.border}`,\n borderRadius: 14,\n overflow: 'hidden',\n background: tokens.bgInput,\n});\n\nconst chainHeaderStyle = (\n tokens: { bgInput: string },\n _expanded: boolean,\n): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n padding: '14px 16px',\n background: tokens.bgInput,\n border: 'none',\n cursor: 'pointer',\n fontFamily: 'inherit',\n textAlign: 'left',\n});\n\nconst chainHeaderLeftStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n};\n\nconst chainNameStyle = (color: string): CSSProperties => ({\n fontSize: '0.92rem',\n fontWeight: 600,\n color,\n});\n\nconst chainBalanceStyle = (color: string): CSSProperties => ({\n fontSize: '0.76rem',\n color,\n});\n\nconst chevronIconStyle = (_expanded: boolean, color: string): CSSProperties => ({\n fontSize: '0.9rem',\n color,\n transition: 'transform 0.15s ease',\n});\n\nconst tokenListStyle: CSSProperties = {\n padding: '0 12px 12px',\n display: 'flex',\n flexDirection: 'column',\n gap: 6,\n};\n\nconst tokenRowStyle = (\n tokens: { bgCard: string; border: string; accent: string },\n selected: boolean,\n): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '12px 14px',\n background: tokens.bgCard,\n border: `1.5px solid ${selected ? tokens.accent : tokens.border}`,\n borderRadius: 10,\n cursor: 'pointer',\n fontFamily: 'inherit',\n textAlign: 'left',\n transition: 'border-color 0.15s ease',\n});\n\nconst tokenInfoStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n};\n\nconst tokenSymbolStyle = (color: string): CSSProperties => ({\n fontSize: '0.88rem',\n fontWeight: 600,\n color,\n});\n\nconst tokenBalStyle = (color: string): CSSProperties => ({\n fontSize: '0.74rem',\n color,\n});\n\nconst radioStyle = (\n tokens: { border: string; accent: string },\n selected: boolean,\n): CSSProperties => ({\n width: 20,\n height: 20,\n borderRadius: '50%',\n border: `2px solid ${selected ? tokens.accent : tokens.border}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n});\n\nconst radioDotStyle = (color: string): CSSProperties => ({\n width: 10,\n height: 10,\n borderRadius: '50%',\n background: color,\n});\n","import type { CSSProperties } from 'react';\nimport { useSwypeConfig } from '../../context';\nimport { ScreenLayout, ScreenHeader, StepList, PoweredByFooter } from '../ui';\nimport type { StepItem } from '../ui';\nimport { Spinner } from '../Spinner';\n\nexport type TransferPhase = 'creating' | 'verifying' | 'sent';\n\ninterface TransferStatusScreenProps {\n phase: TransferPhase;\n error: string | null;\n onLogout: () => void;\n}\n\nconst STEP_LABELS = ['Creating transfer', 'Verifying', 'Sent'] as const;\n\nconst PHASE_ACTIVE_INDEX: Record<TransferPhase, number> = {\n creating: 0,\n verifying: 1,\n sent: 2,\n};\n\nfunction buildSteps(phase: TransferPhase): StepItem[] {\n const activeIdx = PHASE_ACTIVE_INDEX[phase];\n return STEP_LABELS.map((label, i) => ({\n label,\n status: i < activeIdx ? 'complete' : i === activeIdx ? 'active' : 'pending',\n }));\n}\n\nexport function TransferStatusScreen({\n phase,\n error,\n onLogout,\n}: TransferStatusScreenProps) {\n const { tokens } = useSwypeConfig();\n\n const steps = buildSteps(phase);\n\n return (\n <ScreenLayout footer={<PoweredByFooter />}>\n <ScreenHeader onLogout={onLogout} />\n <div style={contentStyle}>\n <Spinner size={64} />\n <h2 style={headingStyle(tokens.text)}>Depositing your money...</h2>\n\n {error && <div style={errorBannerStyle(tokens)}>{error}</div>}\n\n <div style={stepsWrapStyle}>\n <StepList steps={steps} />\n </div>\n </div>\n </ScreenLayout>\n );\n}\n\nconst contentStyle: CSSProperties = {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n textAlign: 'center',\n padding: '0 24px',\n};\n\nconst headingStyle = (color: string): CSSProperties => ({\n fontSize: '1.45rem',\n fontWeight: 700,\n letterSpacing: '-0.02em',\n color,\n margin: '20px 0 16px',\n});\n\nconst errorBannerStyle = (tokens: { error: string; errorBg: string }): CSSProperties => ({\n background: tokens.errorBg,\n border: `1px solid ${tokens.error}66`,\n borderRadius: 16,\n padding: '11px 14px',\n color: tokens.error,\n fontSize: '0.84rem',\n marginBottom: 14,\n lineHeight: 1.5,\n width: '100%',\n textAlign: 'left',\n});\n\nconst stepsWrapStyle: CSSProperties = {\n width: '100%',\n maxWidth: 280,\n textAlign: 'left',\n marginBottom: 16,\n};\n","const IFRAME_CLEANUP_DELAY_MS = 3000;\nconst LOCATION_FALLBACK_DELAY_MS = 100;\n\n/**\n * Attempts to open a native wallet app via its deeplink URI without\n * navigating the current page away. Uses two complementary techniques:\n *\n * 1. **Hidden iframe** — the OS intercepts iframe navigations to custom\n * URL schemes and opens the registered app. The main page is unaffected.\n * 2. **window.location.href** — fired after a short delay as a fallback.\n * Works for custom URL schemes in top-level contexts (the page stays\n * in place because the OS handles the scheme externally).\n *\n * If neither technique succeeds (e.g. HTTPS-based Universal Links that\n * require a real user tap), the caller should present a tappable button\n * as a final fallback.\n */\nexport function triggerDeeplink(uri: string): void {\n try {\n const iframe = document.createElement('iframe');\n iframe.style.display = 'none';\n iframe.src = uri;\n document.body.appendChild(iframe);\n setTimeout(() => {\n try {\n document.body.removeChild(iframe);\n } catch { /* iframe may already be removed */ }\n }, IFRAME_CLEANUP_DELAY_MS);\n } catch { /* iframe creation may fail in restricted contexts */ }\n\n setTimeout(() => {\n window.location.href = uri;\n }, LOCATION_FALLBACK_DELAY_MS);\n}\n","import { useCallback, useEffect, useRef, type CSSProperties } from 'react';\nimport { useSwypeConfig } from '../../context';\nimport {\n ScreenLayout,\n ScreenHeader,\n PrimaryButton,\n OutlineButton,\n InfoBanner,\n PoweredByFooter,\n} from '../ui';\nimport { Spinner } from '../Spinner';\nimport { KNOWN_LOGOS } from '../../assets/logos';\nimport { triggerDeeplink } from '../../deeplink';\n\ninterface OpenWalletScreenProps {\n walletName: string | null;\n deeplinkUri: string;\n loading: boolean;\n /** When true (mobile), auto-opens deeplinks and shows the \"Open wallet\" button.\n * When false (desktop), shows inline authorization progress instead. */\n useDeeplink?: boolean;\n error?: string | null;\n onRetryStatus?: () => void;\n onBack?: () => void;\n onLogout: () => void;\n}\n\n/**\n * Wallet authorization screen. On mobile, provides a user-tappable button\n * that triggers the deeplink via window.open. On desktop, shows inline\n * authorization progress while wallet extension popups handle the flow.\n */\nexport function OpenWalletScreen({\n walletName,\n deeplinkUri,\n loading,\n useDeeplink = true,\n error,\n onRetryStatus,\n onBack,\n onLogout,\n}: OpenWalletScreenProps) {\n const { tokens } = useSwypeConfig();\n\n const displayName = walletName ?? 'your wallet';\n const logoSrc = walletName ? KNOWN_LOGOS[walletName.toLowerCase()] : undefined;\n const autoOpenedRef = useRef<string | null>(null);\n\n useEffect(() => {\n if (!useDeeplink || loading || !deeplinkUri || autoOpenedRef.current === deeplinkUri) return;\n autoOpenedRef.current = deeplinkUri;\n\n triggerDeeplink(deeplinkUri);\n }, [useDeeplink, loading, deeplinkUri]);\n\n const handleOpen = useCallback(() => {\n // window.open works from user-initiated clicks even inside iframes.\n // For custom URL schemes (e.g. cbwallet://) it returns null even on\n // success because no browser window is created. Only fall back to\n // window.location.href when NOT inside an iframe — inside an iframe\n // the fallback would navigate the iframe itself away, destroying the\n // webview-app state.\n const opened = window.open(deeplinkUri, '_blank');\n if (!opened && window === window.parent) {\n window.location.href = deeplinkUri;\n }\n }, [deeplinkUri]);\n\n if (!useDeeplink) {\n return (\n <ScreenLayout\n footer={\n <div style={footerContentStyle}>\n {error && (\n <InfoBanner>\n {error}\n </InfoBanner>\n )}\n <PoweredByFooter />\n </div>\n }\n >\n <ScreenHeader onLogout={onLogout} />\n\n <div style={contentStyle}>\n <div style={logoCircleStyle(tokens.bgInput)}>\n {logoSrc ? (\n <img src={logoSrc} alt={displayName} style={logoStyle} />\n ) : (\n <Spinner size={32} />\n )}\n </div>\n\n <h2 style={headingStyle(tokens.text)}>\n Setting up {displayName}...\n </h2>\n <p style={subtitleStyle(tokens.textSecondary)}>\n Approve the connection in your wallet extension.\n </p>\n\n <div style={waitingBadgeStyle(tokens)}>\n <Spinner size={14} />\n <span>Waiting for authorization...</span>\n </div>\n\n <p style={waitHintStyle(tokens.textMuted)}>Usually takes a few seconds</p>\n </div>\n </ScreenLayout>\n );\n }\n\n return (\n <ScreenLayout\n footer={\n <div style={footerContentStyle}>\n {error && (\n <InfoBanner>\n {error}\n </InfoBanner>\n )}\n {!loading && (\n <PrimaryButton onClick={handleOpen}>\n Open {displayName}\n </PrimaryButton>\n )}\n {error && onRetryStatus && (\n <OutlineButton onClick={onRetryStatus}>\n Retry status check\n </OutlineButton>\n )}\n <p style={hintStyle(tokens.textMuted)}>\n {loading\n ? 'Preparing authorization...'\n : error\n ? 'Retry the status check after returning to the browser, or reopen your wallet if needed.'\n : \"If your wallet didn't open automatically, tap the button above\"}\n </p>\n <PoweredByFooter />\n </div>\n }\n >\n <ScreenHeader onBack={onBack} onLogout={onLogout} />\n\n <div style={contentStyle}>\n <div style={logoCircleStyle(tokens.bgInput)}>\n {logoSrc ? (\n <img src={logoSrc} alt={displayName} style={logoStyle} />\n ) : (\n <Spinner size={32} />\n )}\n </div>\n\n <h2 style={headingStyle(tokens.text)}>\n {loading ? 'Connecting...' : `Open ${displayName}`}\n </h2>\n <p style={subtitleStyle(tokens.textSecondary)}>\n {loading\n ? 'Creating transfer and preparing your wallet link...'\n : `Continue in ${displayName} to authorize this connection.`}\n </p>\n\n {!loading && (\n <div style={waitingBadgeStyle(tokens)}>\n <Spinner size={14} />\n <span>Waiting for authorization...</span>\n </div>\n )}\n </div>\n </ScreenLayout>\n );\n}\n\nconst contentStyle: CSSProperties = {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n textAlign: 'center',\n padding: '0 24px',\n};\n\nconst footerContentStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 12,\n};\n\nconst logoCircleStyle = (bg: string): CSSProperties => ({\n width: 80,\n height: 80,\n borderRadius: '50%',\n background: bg,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n});\n\nconst logoStyle: CSSProperties = {\n width: 48,\n height: 48,\n borderRadius: 12,\n objectFit: 'contain',\n};\n\nconst headingStyle = (color: string): CSSProperties => ({\n fontSize: '1.45rem',\n fontWeight: 700,\n letterSpacing: '-0.02em',\n color,\n margin: '20px 0 8px',\n});\n\nconst subtitleStyle = (color: string): CSSProperties => ({\n fontSize: '0.9rem',\n color,\n margin: '0 0 24px',\n lineHeight: 1.5,\n maxWidth: 280,\n});\n\nconst waitingBadgeStyle = (tokens: { bgInput: string; textMuted: string; border: string }): CSSProperties => ({\n display: 'inline-flex',\n alignItems: 'center',\n gap: 8,\n padding: '8px 16px',\n borderRadius: 20,\n background: tokens.bgInput,\n border: `1px solid ${tokens.border}`,\n color: tokens.textMuted,\n fontSize: '0.82rem',\n});\n\nconst hintStyle = (color: string): CSSProperties => ({\n textAlign: 'center',\n fontSize: '0.82rem',\n color,\n margin: '8px 0 0',\n});\n\nconst waitHintStyle = (color: string): CSSProperties => ({\n fontSize: '0.82rem',\n color,\n margin: '16px 0 0',\n});\n","import type { CSSProperties } from 'react';\nimport { useSwypeConfig } from '../../context';\nimport { ScreenLayout, ScreenHeader, PrimaryButton } from '../ui';\nimport { Spinner } from '../Spinner';\nimport { KNOWN_LOGOS } from '../../assets/logos';\n\ninterface ConfirmSignScreenProps {\n walletName: string | null;\n signing: boolean;\n error: string | null;\n onSign: () => void;\n onLogout: () => void;\n}\n\n/**\n * Shown after the user returns from wallet authorization. Requires an explicit\n * button tap to initiate passkey signing (FaceID) rather than auto-triggering.\n */\nexport function ConfirmSignScreen({\n walletName,\n signing,\n error,\n onSign,\n onLogout,\n}: ConfirmSignScreenProps) {\n const { tokens } = useSwypeConfig();\n\n const displayName = walletName ?? 'your wallet';\n const logoSrc = walletName ? KNOWN_LOGOS[walletName.toLowerCase()] : undefined;\n\n return (\n <ScreenLayout\n footer={\n <>\n <PrimaryButton onClick={onSign} disabled={signing}>\n {signing ? 'Confirming...' : 'Confirm payment'}\n </PrimaryButton>\n {error && <p style={errorStyle(tokens.textMuted)}>{error}</p>}\n {!error && (\n <p style={hintStyle(tokens.textMuted)}>\n You may be prompted for biometric verification\n </p>\n )}\n </>\n }\n >\n <ScreenHeader onLogout={onLogout} />\n\n <div style={contentStyle}>\n {logoSrc ? (\n <img src={logoSrc} alt={displayName} style={logoStyle} />\n ) : (\n <Spinner size={48} />\n )}\n\n <h2 style={headingStyle(tokens.text)}>Wallet authorized</h2>\n <p style={subtitleStyle(tokens.textSecondary)}>\n {displayName} approved the connection. Tap below to confirm your payment.\n </p>\n\n <div style={successBadgeStyle(tokens)}>\n <span style={checkmarkStyle}>✓</span>\n <span>Authorization complete</span>\n </div>\n </div>\n </ScreenLayout>\n );\n}\n\nconst contentStyle: CSSProperties = {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n textAlign: 'center',\n padding: '0 24px',\n};\n\nconst logoStyle: CSSProperties = {\n width: 56,\n height: 56,\n borderRadius: 14,\n objectFit: 'contain',\n};\n\nconst headingStyle = (color: string): CSSProperties => ({\n fontSize: '1.45rem',\n fontWeight: 700,\n letterSpacing: '-0.02em',\n color,\n margin: '20px 0 8px',\n});\n\nconst subtitleStyle = (color: string): CSSProperties => ({\n fontSize: '0.9rem',\n color,\n margin: '0 0 24px',\n lineHeight: 1.5,\n maxWidth: 280,\n});\n\nconst successBadgeStyle = (tokens: { bgInput: string; border: string }): CSSProperties => ({\n display: 'inline-flex',\n alignItems: 'center',\n gap: 8,\n padding: '8px 16px',\n borderRadius: 20,\n background: tokens.bgInput,\n border: `1px solid ${tokens.border}`,\n color: '#22c55e',\n fontSize: '0.82rem',\n});\n\nconst checkmarkStyle: CSSProperties = {\n fontWeight: 700,\n fontSize: '0.9rem',\n};\n\nconst hintStyle = (color: string): CSSProperties => ({\n textAlign: 'center',\n fontSize: '0.82rem',\n color,\n margin: '8px 0 0',\n});\n\nconst errorStyle = (color: string): CSSProperties => ({\n textAlign: 'center',\n fontSize: '0.82rem',\n color: '#ef4444',\n margin: '8px 0 0',\n});\n","import type { CSSProperties } from 'react';\nimport type { Account } from '../../types';\nimport { useSwypeConfig } from '../../context';\nimport { SWYPE_LOGO, TOKEN_LOGOS } from '../../assets/logos';\nimport {\n ScreenLayout,\n ScreenHeader,\n PoweredByFooter,\n} from '../ui';\n\ninterface TokenEntry {\n walletId: string;\n chainName: string;\n tokenSymbol: string;\n tokenAddress: string;\n balance: number;\n status: string;\n}\n\ninterface TokenPickerScreenProps {\n account: Account;\n chains: Array<{ id: string; name: string; commonId: number | null }>;\n onSelectAuthorized: (walletId: string, tokenSymbol: string) => void;\n onAuthorizeToken: (walletId: string, tokenAddress: string, chainId: number, tokenSymbol: string) => void;\n onBack: () => void;\n onLogout?: () => void;\n /** Deposit amount for the context card at top */\n depositAmount?: number;\n /** Currently selected token symbol, e.g. \"USDC\" or \"USDT\" */\n selectedTokenSymbol?: string;\n /** Currently selected wallet ID so we can identify the active token across chains */\n selectedWalletId?: string;\n}\n\nexport function TokenPickerScreen({\n account,\n chains,\n onSelectAuthorized,\n onAuthorizeToken,\n onBack,\n onLogout,\n depositAmount,\n selectedTokenSymbol,\n selectedWalletId,\n}: TokenPickerScreenProps) {\n const { tokens: t } = useSwypeConfig();\n\n const entries: TokenEntry[] = [];\n for (const wallet of account.wallets) {\n for (const source of wallet.sources) {\n if (source.balance.total.amount <= 0) continue;\n entries.push({\n walletId: wallet.id,\n chainName: wallet.chain.name,\n tokenSymbol: source.token.symbol,\n tokenAddress: source.address,\n balance: source.balance.total.amount,\n status: source.token.status,\n });\n }\n }\n\n const handleSelect = (entry: TokenEntry) => {\n if (entry.status === 'AUTHORIZED') {\n onSelectAuthorized(entry.walletId, entry.tokenSymbol);\n } else {\n const chain = chains.find((c) => c.name === entry.chainName);\n const evmChainId = chain?.commonId;\n if (evmChainId == null) return;\n onAuthorizeToken(entry.walletId, entry.tokenAddress, evmChainId, entry.tokenSymbol);\n }\n };\n\n return (\n <ScreenLayout footer={<PoweredByFooter />}>\n <ScreenHeader onBack={onBack} onLogout={onLogout} />\n\n {depositAmount != null && (\n <div>\n <div style={depositLabelStyle(t.textMuted)}>Depositing</div>\n <div style={depositAmountRowStyle}>\n <div style={depositAmountStyle(t.text)}>\n ${depositAmount.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}\n </div>\n <button\n type=\"button\"\n onClick={onBack}\n style={tokenIconButtonStyle}\n >\n <div style={tokenIconWrapStyle}>\n {selectedTokenSymbol && TOKEN_LOGOS[selectedTokenSymbol] ? (\n <img src={TOKEN_LOGOS[selectedTokenSymbol]} alt={selectedTokenSymbol} width={36} height={36} style={{ borderRadius: '50%' }} />\n ) : (\n <svg width=\"36\" height=\"36\" viewBox=\"0 0 36 36\" fill=\"none\">\n <circle cx=\"18\" cy=\"18\" r=\"18\" fill=\"#2DB84B\" />\n <text x=\"18\" y=\"23\" textAnchor=\"middle\" fontSize=\"18\" fill=\"#fff\" fontWeight=\"700\">$</text>\n </svg>\n )}\n </div>\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" style={{ opacity: 0.5 }}>\n <path d=\"M6 9l6 6 6-6\" stroke={t.textMuted} strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n </div>\n </div>\n )}\n\n <div style={sectionLabelStyle(t.textMuted)}>Choose token</div>\n\n <div style={tokenListStyle}>\n {entries.map((entry) => {\n const authorized = entry.status === 'AUTHORIZED';\n const isSelected = entry.walletId === selectedWalletId\n && entry.tokenSymbol === selectedTokenSymbol;\n\n return (\n <button\n key={`${entry.walletId}-${entry.tokenSymbol}-${entry.chainName}`}\n type=\"button\"\n onClick={() => handleSelect(entry)}\n style={tokenRowStyle(t)}\n >\n <div style={tokenIconCircleStyle(t, !!TOKEN_LOGOS[entry.tokenSymbol])}>\n {TOKEN_LOGOS[entry.tokenSymbol] ? (\n <img src={TOKEN_LOGOS[entry.tokenSymbol]} alt={entry.tokenSymbol} style={tokenLogoImgStyle} />\n ) : (\n <span style={tokenIconTextStyle(t.textMuted)}>$</span>\n )}\n </div>\n\n <div style={tokenInfoStyle}>\n <div style={tokenNameRowStyle}>\n <span style={tokenSymbolTextStyle(t.text)}>{entry.tokenSymbol}</span>\n <span style={tokenChainDotStyle(t.textMuted)}>·</span>\n <span style={tokenChainTextStyle(t.textMuted)}>{entry.chainName}</span>\n </div>\n <div style={tokenBalanceRowStyle}>\n <span style={tokenBalanceStyle(t.textMuted)}>\n ${entry.balance.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}\n </span>\n {!authorized && (\n <span style={notAuthorizedStyle(t.textMuted)}>Not authorized</span>\n )}\n </div>\n </div>\n\n <div style={isSelected ? selectCircleSelectedStyle(t.accent) : selectCircleStyle(t.border)}>\n {isSelected && (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\" fill=\"#fff\" />\n </svg>\n )}\n </div>\n </button>\n );\n })}\n </div>\n </ScreenLayout>\n );\n}\n\n/* ── Styles ──────────────────────────────────────────────────────── */\n\nconst mascotWrapStyle: CSSProperties = {\n display: 'flex',\n justifyContent: 'center',\n marginBottom: 16,\n};\n\nconst mascotImgStyle: CSSProperties = {\n width: 36,\n height: 36,\n};\n\nconst depositCardStyle = (tokens: { bgInput: string; border: string; radiusLg: string }): CSSProperties => ({\n background: tokens.bgInput,\n border: `1px solid ${tokens.border}`,\n borderRadius: tokens.radiusLg,\n padding: '16px 20px',\n marginBottom: 24,\n});\n\nconst depositLabelStyle = (color: string): CSSProperties => ({\n fontSize: '0.75rem',\n fontWeight: 500,\n color,\n marginBottom: 4,\n});\n\nconst depositAmountRowStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n};\n\nconst depositAmountStyle = (color: string): CSSProperties => ({\n fontSize: '2.4rem',\n fontWeight: 700,\n letterSpacing: '-0.02em',\n color,\n});\n\nconst tokenIconButtonStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 4,\n background: 'transparent',\n border: 'none',\n cursor: 'pointer',\n padding: 0,\n flexShrink: 0,\n};\n\nconst tokenIconWrapStyle: CSSProperties = {\n position: 'relative',\n width: 36,\n height: 36,\n flexShrink: 0,\n};\n\nconst checkBadgeStyle: CSSProperties = {\n position: 'absolute',\n bottom: -1,\n right: -3,\n};\n\nconst sectionLabelStyle = (color: string): CSSProperties => ({\n fontSize: '0.84rem',\n fontWeight: 500,\n color,\n marginBottom: 12,\n});\n\nconst tokenListStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 10,\n};\n\nconst tokenRowStyle = (tokens: { bgInput: string; border: string }): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n gap: 14,\n padding: '14px 16px',\n background: tokens.bgInput,\n border: `1px solid ${tokens.border}`,\n borderRadius: 16,\n cursor: 'pointer',\n fontFamily: 'inherit',\n textAlign: 'left' as const,\n width: '100%',\n});\n\nconst tokenIconCircleStyle = (tokens: { border: string }, hasLogo: boolean): CSSProperties => ({\n width: 36,\n height: 36,\n borderRadius: '50%',\n border: hasLogo ? 'none' : `1.5px solid ${tokens.border}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n overflow: 'hidden',\n});\n\nconst tokenLogoImgStyle: CSSProperties = {\n width: 36,\n height: 36,\n borderRadius: '50%',\n objectFit: 'cover',\n};\n\nconst tokenIconTextStyle = (color: string): CSSProperties => ({\n fontSize: '1rem',\n fontWeight: 700,\n color,\n});\n\nconst tokenInfoStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n flex: 1,\n minWidth: 0,\n};\n\nconst tokenNameRowStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 4,\n};\n\nconst tokenSymbolTextStyle = (color: string): CSSProperties => ({\n fontSize: '0.92rem',\n fontWeight: 600,\n color,\n});\n\nconst tokenChainDotStyle = (color: string): CSSProperties => ({\n fontSize: '0.8rem',\n color,\n});\n\nconst tokenChainTextStyle = (color: string): CSSProperties => ({\n fontSize: '0.84rem',\n fontWeight: 400,\n color,\n});\n\nconst tokenBalanceRowStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n};\n\nconst tokenBalanceStyle = (color: string): CSSProperties => ({\n fontSize: '0.78rem',\n color,\n});\n\nconst notAuthorizedStyle = (color: string): CSSProperties => ({\n fontSize: '0.7rem',\n fontWeight: 500,\n color,\n});\n\nconst selectCircleStyle = (borderColor: string): CSSProperties => ({\n width: 28,\n height: 28,\n borderRadius: '50%',\n border: `2px solid ${borderColor}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n});\n\nconst selectCircleSelectedStyle = (color: string): CSSProperties => ({\n width: 28,\n height: 28,\n borderRadius: '50%',\n background: color,\n border: 'none',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n});\n","import type { CSSProperties } from 'react';\nimport { useSwypeConfig } from '../../context';\nimport { ScreenLayout, ScreenHeader, PoweredByFooter, PrimaryButton } from '../ui';\n\ninterface GuestDepositScreenProps {\n amount: number;\n currency: string;\n merchantName?: string;\n onConnect: () => void;\n onSignIn: () => void;\n onBack?: () => void;\n loading?: boolean;\n error?: string | null;\n}\n\nexport function GuestDepositScreen({\n amount,\n currency,\n merchantName,\n onConnect,\n onSignIn,\n onBack,\n loading,\n error,\n}: GuestDepositScreenProps) {\n const { tokens } = useSwypeConfig();\n\n return (\n <ScreenLayout\n footer={\n <>\n <PrimaryButton onClick={onConnect} loading={loading}>\n Connect wallet\n </PrimaryButton>\n <button\n type=\"button\"\n onClick={onSignIn}\n style={signInStyle(tokens.textMuted)}\n >\n Returning user? Sign in\n </button>\n <PoweredByFooter />\n </>\n }\n >\n <ScreenHeader onBack={onBack} />\n\n <div style={contentStyle}>\n <div style={amountCircle(tokens)}>\n <span style={currencyStyle(tokens.textSecondary)}>\n {currency === 'USD' ? '$' : currency}\n </span>\n <span style={amountStyle(tokens.text)}>\n {amount.toFixed(2)}\n </span>\n </div>\n\n {merchantName && (\n <p style={merchantStyle(tokens.textSecondary)}>\n to {merchantName}\n </p>\n )}\n\n <p style={descriptionStyle(tokens.textSecondary)}>\n Connect your wallet to complete this deposit. No account required.\n </p>\n\n {error && (\n <div style={errorBanner(tokens)}>\n {error}\n </div>\n )}\n </div>\n </ScreenLayout>\n );\n}\n\nconst contentStyle: CSSProperties = {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n paddingTop: 32,\n};\n\nconst amountCircle = (tokens: { bgInput: string; border: string }): CSSProperties => ({\n display: 'flex',\n alignItems: 'baseline',\n justifyContent: 'center',\n gap: 4,\n padding: '24px 36px',\n background: tokens.bgInput,\n border: `1px solid ${tokens.border}`,\n borderRadius: 24,\n marginBottom: 12,\n});\n\nconst currencyStyle = (color: string): CSSProperties => ({\n fontSize: '1.5rem',\n fontWeight: 600,\n color,\n});\n\nconst amountStyle = (color: string): CSSProperties => ({\n fontSize: '2.5rem',\n fontWeight: 700,\n letterSpacing: '-0.02em',\n color,\n});\n\nconst merchantStyle = (color: string): CSSProperties => ({\n fontSize: '0.9rem',\n color,\n margin: '0 0 16px',\n});\n\nconst descriptionStyle = (color: string): CSSProperties => ({\n fontSize: '0.88rem',\n color,\n textAlign: 'center',\n lineHeight: 1.6,\n maxWidth: 300,\n margin: '0 0 20px',\n});\n\nconst signInStyle = (color: string): CSSProperties => ({\n background: 'transparent',\n border: 'none',\n color,\n cursor: 'pointer',\n fontFamily: 'inherit',\n fontSize: '0.84rem',\n fontWeight: 500,\n display: 'block',\n width: '100%',\n textAlign: 'center',\n padding: '14px 0 0',\n});\n\nconst errorBanner = (tokens: { errorBg: string; error: string }): CSSProperties => ({\n width: '100%',\n padding: '12px 16px',\n background: tokens.errorBg,\n color: tokens.error,\n borderRadius: 14,\n fontSize: '0.84rem',\n lineHeight: 1.5,\n});\n","import type { CSSProperties } from 'react';\nimport { useSwypeConfig } from '../../context';\nimport { ScreenLayout, ScreenHeader, PoweredByFooter, PrimaryButton } from '../ui';\nimport { Spinner } from '../Spinner';\n\ntype GuestWalletPhase =\n | 'connecting'\n | 'fetching-quote'\n | 'approving'\n | 'signing'\n | 'submitting';\n\ninterface GuestWalletScreenProps {\n phase: GuestWalletPhase;\n amount: number;\n currency: string;\n onBack?: () => void;\n error?: string | null;\n onRetry?: () => void;\n}\n\nconst PHASE_LABELS: Record<GuestWalletPhase, string> = {\n connecting: 'Connecting wallet...',\n 'fetching-quote': 'Getting best rate...',\n approving: 'Approve token access',\n signing: 'Confirm deposit in your wallet',\n submitting: 'Submitting transfer...',\n};\n\nconst PHASE_DESCRIPTIONS: Record<GuestWalletPhase, string> = {\n connecting: 'Please connect your wallet to continue.',\n 'fetching-quote': 'Finding the best route for your transfer.',\n approving: 'Your wallet will ask you to approve token access for this transfer.',\n signing: 'Sign the deposit transaction in your wallet to send funds.',\n submitting: 'Your transaction has been signed. Submitting to the network...',\n};\n\nexport function GuestWalletScreen({\n phase,\n amount,\n currency,\n onBack,\n error,\n onRetry,\n}: GuestWalletScreenProps) {\n const { tokens } = useSwypeConfig();\n\n return (\n <ScreenLayout\n footer={\n <>\n {error && onRetry && (\n <PrimaryButton onClick={onRetry}>\n Try again\n </PrimaryButton>\n )}\n <PoweredByFooter />\n </>\n }\n >\n <ScreenHeader onBack={onBack} />\n\n <div style={contentStyle}>\n {!error && <Spinner size={48} />}\n\n <h2 style={headingStyle(tokens.text)}>\n {error ? 'Something went wrong' : PHASE_LABELS[phase]}\n </h2>\n\n <p style={descriptionStyle(tokens.textSecondary)}>\n {error ?? PHASE_DESCRIPTIONS[phase]}\n </p>\n\n <div style={amountBadgeStyle(tokens)}>\n {currency === 'USD' ? '$' : currency}\n {amount.toFixed(2)}\n </div>\n </div>\n </ScreenLayout>\n );\n}\n\nconst contentStyle: CSSProperties = {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n paddingTop: 24,\n gap: 12,\n};\n\nconst headingStyle = (color: string): CSSProperties => ({\n fontSize: '1.25rem',\n fontWeight: 700,\n letterSpacing: '-0.02em',\n color,\n margin: '16px 0 4px',\n textAlign: 'center',\n});\n\nconst descriptionStyle = (color: string): CSSProperties => ({\n fontSize: '0.88rem',\n color,\n textAlign: 'center',\n lineHeight: 1.6,\n maxWidth: 300,\n margin: 0,\n});\n\nconst amountBadgeStyle = (tokens: { bgInput: string; border: string; text: string }): CSSProperties => ({\n display: 'inline-block',\n padding: '8px 20px',\n background: tokens.bgInput,\n border: `1px solid ${tokens.border}`,\n borderRadius: 999,\n fontSize: '0.95rem',\n fontWeight: 600,\n color: tokens.text,\n marginTop: 8,\n});\n","import type { CSSProperties } from 'react';\nimport { useSwypeConfig } from '../../context';\nimport { ScreenLayout, PoweredByFooter, PrimaryButton, IconCircle, OutlineButton } from '../ui';\n\ninterface OfferSetupScreenProps {\n amount: number;\n currency: string;\n onSetup: () => void;\n onDone: () => void;\n}\n\nexport function OfferSetupScreen({\n amount,\n currency,\n onSetup,\n onDone,\n}: OfferSetupScreenProps) {\n const { tokens } = useSwypeConfig();\n\n return (\n <ScreenLayout\n footer={\n <>\n <PrimaryButton onClick={onSetup}>\n Set up One-Tap\n </PrimaryButton>\n <div style={{ marginTop: 10 }}>\n <OutlineButton onClick={onDone}>\n Not now\n </OutlineButton>\n </div>\n <PoweredByFooter />\n </>\n }\n >\n <div style={contentStyle}>\n <IconCircle variant=\"success\" size={64}>\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\" fill={tokens.success} />\n </svg>\n </IconCircle>\n\n <h2 style={headingStyle(tokens.text)}>\n ${amount.toFixed(2)} deposited\n </h2>\n\n <p style={subtitleStyle(tokens.textSecondary)}>\n Your transfer is complete!\n </p>\n\n <div style={cardStyle(tokens)}>\n <div style={cardIconRow}>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M13 10V3L4 14h7v7l9-11h-7z\" fill={tokens.accent} />\n </svg>\n <strong style={{ color: tokens.text }}>Enable One-Tap deposits</strong>\n </div>\n <p style={cardBodyStyle(tokens.textSecondary)}>\n Next time, deposit with a single tap — no wallet signing needed.\n Takes about 60 seconds: verify your email, create a passkey, and link your wallet.\n </p>\n </div>\n </div>\n </ScreenLayout>\n );\n}\n\nconst contentStyle: CSSProperties = {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n paddingTop: 48,\n};\n\nconst headingStyle = (color: string): CSSProperties => ({\n fontSize: '1.5rem',\n fontWeight: 700,\n letterSpacing: '-0.02em',\n color,\n margin: '20px 0 4px',\n});\n\nconst subtitleStyle = (color: string): CSSProperties => ({\n fontSize: '0.9rem',\n color,\n margin: '0 0 28px',\n});\n\nconst cardStyle = (tokens: { bgInput: string; border: string }): CSSProperties => ({\n width: '100%',\n padding: '18px 16px',\n background: tokens.bgInput,\n border: `1px solid ${tokens.border}`,\n borderRadius: 20,\n});\n\nconst cardIconRow: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n fontSize: '0.92rem',\n marginBottom: 6,\n};\n\nconst cardBodyStyle = (color: string): CSSProperties => ({\n fontSize: '0.84rem',\n color,\n lineHeight: 1.6,\n margin: 0,\n});\n","import type { CSSProperties } from 'react';\nimport { useSwypeConfig } from '../../context';\nimport { ScreenLayout, PoweredByFooter, PrimaryButton, IconCircle } from '../ui';\n\ninterface SetupCompleteScreenProps {\n onDone: () => void;\n}\n\nexport function SetupCompleteScreen({ onDone }: SetupCompleteScreenProps) {\n const { tokens } = useSwypeConfig();\n\n return (\n <ScreenLayout\n footer={\n <>\n <PrimaryButton onClick={onDone}>\n Done\n </PrimaryButton>\n <PoweredByFooter />\n </>\n }\n >\n <div style={contentStyle}>\n <IconCircle variant=\"success\" size={64}>\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M13 10V3L4 14h7v7l9-11h-7z\" fill={tokens.accent} />\n </svg>\n </IconCircle>\n\n <h2 style={headingStyle(tokens.text)}>\n One-Tap deposits are ready!\n </h2>\n\n <p style={subtitleStyle(tokens.textSecondary)}>\n Next time you deposit, just tap confirm — no wallet signing needed.\n </p>\n </div>\n </ScreenLayout>\n );\n}\n\nconst contentStyle: CSSProperties = {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n paddingTop: 24,\n};\n\nconst headingStyle = (color: string): CSSProperties => ({\n fontSize: '1.5rem',\n fontWeight: 700,\n letterSpacing: '-0.02em',\n color,\n margin: '20px 0 8px',\n textAlign: 'center',\n});\n\nconst subtitleStyle = (color: string): CSSProperties => ({\n fontSize: '0.9rem',\n color,\n textAlign: 'center',\n lineHeight: 1.6,\n maxWidth: 300,\n margin: 0,\n});\n","import type { CSSProperties } from 'react';\nimport type { GuestSourceChain } from '../../types';\nimport { TOKEN_LOGOS } from '../../assets/logos';\nimport { useSwypeConfig } from '../../context';\nimport {\n ScreenLayout,\n ScreenHeader,\n PrimaryButton,\n PoweredByFooter,\n} from '../ui';\n\ninterface GuestSelectSourceScreenProps {\n chains: GuestSourceChain[];\n selectedChainName: string | null;\n selectedTokenSymbol: string | null;\n /** Keyed by `${chainId}:${tokenAddress}` → formatted balance string. */\n balances: Record<string, string>;\n onChainChange: (chainName: string, chainId: number) => void;\n onTokenChange: (tokenSymbol: string, tokenAddress: string, decimals: number) => void;\n onConfirm: () => void;\n onBack: () => void;\n}\n\nexport function GuestSelectSourceScreen({\n chains,\n selectedChainName,\n selectedTokenSymbol,\n balances,\n onChainChange,\n onTokenChange,\n onConfirm,\n onBack,\n}: GuestSelectSourceScreenProps) {\n const { tokens } = useSwypeConfig();\n\n const selectedChain = chains.find((c) => c.chainName === selectedChainName) ?? chains[0];\n const tokenChoices = selectedChain?.tokens ?? [];\n const canConfirm = !!selectedChainName && !!selectedTokenSymbol;\n\n return (\n <ScreenLayout\n footer={\n <>\n <PrimaryButton onClick={onConfirm} disabled={!canConfirm}>\n Confirm source\n </PrimaryButton>\n <PoweredByFooter />\n </>\n }\n >\n <ScreenHeader\n title=\"Select Source\"\n onBack={onBack}\n />\n\n <p style={subtitleStyle(tokens.textMuted)}>\n Choose which chain and token to pay from.\n </p>\n\n <label style={labelStyle(tokens.textSecondary)}>Chain</label>\n <div style={optionListStyle}>\n {chains.map((chain) => {\n const isSelected = chain.chainName === selectedChainName;\n const chainTotal = chain.tokens.reduce((sum, t) => {\n const bal = parseFloat(balances[`${chain.chainId}:${t.address}`] ?? '0');\n return sum + bal;\n }, 0);\n return (\n <button\n key={chain.chainName}\n type=\"button\"\n onClick={() => onChainChange(chain.chainName, chain.chainId)}\n style={optionButtonStyle(tokens, isSelected)}\n >\n <div style={optionContentStyle}>\n <span style={optionNameStyle(tokens.text)}>\n {chain.chainName}\n </span>\n <span style={optionDetailStyle(tokens.textMuted)}>\n {chain.tokens.length} token{chain.tokens.length !== 1 ? 's' : ''}\n {chainTotal > 0 ? ` · $${chainTotal.toFixed(2)}` : ''}\n </span>\n </div>\n <div style={radioStyle(tokens, isSelected)}>\n {isSelected && <div style={radioDotStyle(tokens.accent)} />}\n </div>\n </button>\n );\n })}\n </div>\n\n {tokenChoices.length > 0 && (\n <>\n <label style={labelStyle(tokens.textSecondary)}>Token</label>\n <div style={optionListStyle}>\n {tokenChoices.map((token) => {\n const isSelected = token.symbol === selectedTokenSymbol;\n const tokenLogo = TOKEN_LOGOS[token.symbol];\n const balKey = `${selectedChain.chainId}:${token.address}`;\n const bal = balances[balKey];\n const balNum = parseFloat(bal ?? '0');\n return (\n <button\n key={token.symbol}\n type=\"button\"\n onClick={() => onTokenChange(token.symbol, token.address, token.decimals)}\n style={optionButtonStyle(tokens, isSelected)}\n >\n <div style={optionMainStyle}>\n <div style={tokenIconCircleStyle(tokens, !!tokenLogo)}>\n {tokenLogo ? (\n <img src={tokenLogo} alt={token.symbol} style={tokenLogoImgStyle} />\n ) : (\n <span style={tokenIconTextStyle(tokens.textMuted)}>$</span>\n )}\n </div>\n <div style={optionContentStyle}>\n <span style={optionNameStyle(tokens.text)}>\n {token.symbol}\n </span>\n <span style={optionDetailStyle(balNum > 0 ? tokens.text : tokens.textMuted)}>\n {balNum > 0 ? `${bal} available` : 'No balance'}\n </span>\n </div>\n </div>\n <div style={radioStyle(tokens, isSelected)}>\n {isSelected && <div style={radioDotStyle(tokens.accent)} />}\n </div>\n </button>\n );\n })}\n </div>\n </>\n )}\n </ScreenLayout>\n );\n}\n\nconst subtitleStyle = (color: string): CSSProperties => ({\n fontSize: '0.85rem',\n color,\n margin: '0 0 20px',\n lineHeight: 1.5,\n});\n\nconst labelStyle = (color: string): CSSProperties => ({\n display: 'block',\n fontSize: '0.75rem',\n fontWeight: 600,\n color,\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n marginBottom: 8,\n});\n\nconst optionListStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 8,\n marginBottom: 20,\n};\n\nconst optionButtonStyle = (\n tokens: { bgInput: string; border: string; accent: string },\n selected: boolean,\n): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '14px 16px',\n background: tokens.bgInput,\n border: `1.5px solid ${selected ? tokens.accent : tokens.border}`,\n borderRadius: 14,\n cursor: 'pointer',\n fontFamily: 'inherit',\n textAlign: 'left',\n transition: 'border-color 0.15s ease',\n});\n\nconst optionContentStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n};\n\nconst optionMainStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n};\n\nconst optionNameStyle = (color: string): CSSProperties => ({\n fontSize: '0.9rem',\n fontWeight: 600,\n color,\n});\n\nconst optionDetailStyle = (color: string): CSSProperties => ({\n fontSize: '0.78rem',\n color,\n});\n\nconst tokenIconCircleStyle = (\n tokens: { border: string },\n hasLogo: boolean,\n): CSSProperties => ({\n width: 36,\n height: 36,\n borderRadius: '50%',\n border: hasLogo ? 'none' : `1.5px solid ${tokens.border}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n overflow: 'hidden',\n});\n\nconst tokenLogoImgStyle: CSSProperties = {\n width: 36,\n height: 36,\n borderRadius: '50%',\n objectFit: 'cover',\n};\n\nconst tokenIconTextStyle = (color: string): CSSProperties => ({\n fontSize: '1rem',\n fontWeight: 700,\n color,\n});\n\nconst radioStyle = (\n tokens: { border: string; accent: string },\n selected: boolean,\n): CSSProperties => ({\n width: 20,\n height: 20,\n borderRadius: '50%',\n border: `2px solid ${selected ? tokens.accent : tokens.border}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n});\n\nconst radioDotStyle = (color: string): CSSProperties => ({\n width: 10,\n height: 10,\n borderRadius: '50%',\n background: color,\n});\n","import type { Account, PaymentStep, SourceType, Transfer, WalletSource } from './types';\nimport type { NormalizedAuthIdentifier } from './auth';\nimport { maskAuthIdentifier } from './auth';\nimport type { PaymentState } from './paymentReducer';\nimport { DEFAULT_DEPOSIT_AMOUNT_USD, type SelectSourceChainChoice } from './paymentHelpers';\nimport type { PreparedSession } from './hooks/useProviderHandlers';\nimport { shouldUseWalletConnector } from './walletFlow';\nimport { SwypeLoadingScreen } from './components/SwypeLoadingScreen';\nimport {\n LoginScreen,\n OtpVerifyScreen,\n PasskeyScreen,\n VerifyPasskeyScreen,\n WalletPickerScreen,\n SetupScreen,\n SetupStatusScreen,\n DepositScreen,\n SuccessScreen,\n SelectSourceScreen,\n TransferStatusScreen,\n OpenWalletScreen,\n ConfirmSignScreen,\n TokenPickerScreen,\n GuestDepositScreen,\n GuestWalletScreen,\n GuestSelectSourceScreen,\n OfferSetupScreen,\n SetupCompleteScreen,\n} from './components/screens';\nimport type { TransferPhase } from './components/screens';\nimport { FlowPhaseProvider } from './FlowPhaseContext';\nimport type { FlowPhase } from './components/ui/StepProgress';\n\nconst GUEST_STEPS: ReadonlySet<PaymentStep> = new Set([\n 'guest-deposit',\n 'guest-select-source',\n 'guest-connecting',\n 'guest-fetching-quote',\n 'guest-approving',\n 'guest-signing',\n 'offer-setup',\n 'setup-complete',\n]);\n\nconst LINK_STEPS: ReadonlySet<PaymentStep> = new Set([\n 'create-passkey',\n 'verify-passkey',\n 'wallet-picker',\n 'open-wallet',\n 'setup-status',\n 'setup',\n 'confirm-sign',\n]);\n\nconst DEPOSIT_STEPS: ReadonlySet<PaymentStep> = new Set([\n 'deposit',\n 'low-balance',\n 'processing',\n 'success',\n]);\n\nfunction getFlowPhase(step: PaymentStep, previousStep: PaymentStep | null): FlowPhase | null {\n if (GUEST_STEPS.has(step)) return null;\n if (LINK_STEPS.has(step)) return 'link';\n if (DEPOSIT_STEPS.has(step)) return 'deposit';\n if (step === 'token-picker' || step === 'select-source') {\n return previousStep === 'setup' ? 'link' : 'deposit';\n }\n return null;\n}\n\n// ── Handler contracts ──────────────────────────────────────────────────\n\nexport interface StepHandlers {\n onSendLoginCode: () => void;\n onVerifyLoginCode: () => void;\n onResendLoginCode: () => void;\n onBackFromOtp: () => void;\n onRegisterPasskey: () => void;\n onCreatePasskeyViaPopup: () => void;\n onVerifyPasskeyViaPopup: () => void;\n onPrepareProvider: (providerId: string) => Promise<PreparedSession | null>;\n onSelectProvider: (providerId: string, preparedSession?: PreparedSession) => Promise<void>;\n onContinueConnection: (accountId: string) => void;\n onSelectAccount: (accountId: string) => void;\n onPay: (amount: number, overrides?: { sourceType: SourceType; sourceId: string }) => void;\n onIncreaseLimit: () => void;\n onConfirmSign: () => void;\n onRetryMobileStatus: () => void;\n onLogout: () => void;\n onNewPayment: () => void;\n onNavigate: (step: PaymentStep) => void;\n onSetAuthInput: (value: string) => void;\n onSetOtpCode: (code: string) => void;\n onSelectSourceChainChange: (chainName: string) => void;\n onSetSelectSourceTokenSymbol: (symbol: string) => void;\n onConfirmSelectSource: () => void;\n onSetupOneTap: (limit: number) => void;\n onSelectToken: () => void;\n onSelectAuthorizedToken: (walletId: string, tokenSymbol: string) => void;\n onAuthorizeToken: (walletId: string, tokenAddress: string, chainId: number, tokenSymbol: string) => void;\n // Guest flow handlers\n onGuestConnect: () => void;\n onGuestConfirm: () => void;\n onGuestSignIn: () => void;\n onGuestRetry: () => void;\n onOfferSetup: () => void;\n onSetupComplete: () => void;\n onGuestSelectChain: (chainName: string, chainId: number) => void;\n onGuestSelectToken: (tokenSymbol: string, tokenAddress: string, decimals: number) => void;\n onGuestConfirmSource: () => void;\n}\n\n// ── Props ──────────────────────────────────────────────────────────────\n\nexport interface StepRendererProps {\n state: PaymentState;\n\n ready: boolean;\n authenticated: boolean;\n activeOtpStatus: string;\n\n pollingTransfer: Transfer | null;\n pollingError: string | null;\n authExecutorError: string | null;\n transferSigningSigning: boolean;\n transferSigningError: string | null;\n\n pendingConnections: Account[];\n depositEligibleAccounts: Account[];\n sourceName: string;\n maxSourceBalance: number;\n tokenCount: number;\n selectedAccount: Account | undefined;\n selectedSource: WalletSource | null;\n selectSourceChoices: SelectSourceChainChoice[];\n selectSourceRecommended: { chainName: string; tokenSymbol: string } | null;\n selectSourceAvailableBalance: number;\n\n authInput: string;\n otpCode: string;\n selectSourceChainName: string;\n selectSourceTokenSymbol: string;\n savingOneTapLimit: boolean;\n\n merchantName?: string;\n onBack?: () => void;\n onDismiss?: () => void;\n autoCloseSeconds?: number;\n depositAmount: number | null;\n\n handlers: StepHandlers;\n}\n\n// ── Component ──────────────────────────────────────────────────────────\n\nexport function StepRenderer(props: StepRendererProps) {\n const phase = getFlowPhase(props.state.step, props.state.previousStep);\n\n return (\n <FlowPhaseProvider phase={phase}>\n <StepRendererContent {...props} />\n </FlowPhaseProvider>\n );\n}\n\nfunction StepRendererContent({\n state,\n ready,\n authenticated,\n activeOtpStatus,\n pollingTransfer,\n pollingError,\n authExecutorError,\n transferSigningSigning,\n transferSigningError,\n pendingConnections,\n depositEligibleAccounts,\n sourceName,\n maxSourceBalance,\n tokenCount,\n selectedAccount,\n selectedSource,\n selectSourceChoices,\n selectSourceRecommended,\n selectSourceAvailableBalance,\n authInput,\n otpCode,\n selectSourceChainName,\n selectSourceTokenSymbol,\n savingOneTapLimit,\n merchantName,\n onBack,\n onDismiss,\n autoCloseSeconds,\n depositAmount,\n handlers,\n}: StepRendererProps) {\n const { step } = state;\n\n const selectedWallet = selectedAccount?.wallets.find((w) => w.id === state.selectedWalletId);\n const selectedSourceLabel = selectedSource && selectedWallet\n ? `${selectedSource.token.symbol} on ${selectedWallet.chain.name}`\n : undefined;\n\n if (!ready) {\n return <SwypeLoadingScreen />;\n }\n\n // Guest Deposit\n if (step === 'guest-deposit') {\n const parsedAmt = depositAmount ?? DEFAULT_DEPOSIT_AMOUNT_USD;\n return (\n <GuestDepositScreen\n amount={parsedAmt}\n currency=\"USD\"\n merchantName={merchantName}\n onConnect={handlers.onGuestConnect}\n onSignIn={handlers.onGuestSignIn}\n onBack={onBack}\n loading={state.guestSourceOptionsLoading || state.guestBalancesLoading}\n error={state.error ?? state.guestSourceOptionsError}\n />\n );\n }\n\n // Guest Select Source (shown after wallet connection with balances)\n if (step === 'guest-select-source') {\n return (\n <GuestSelectSourceScreen\n chains={state.guestSourceOptions}\n selectedChainName={state.selectedGuestChainName}\n selectedTokenSymbol={state.selectedGuestTokenSymbol}\n balances={state.guestTokenBalances}\n onChainChange={handlers.onGuestSelectChain}\n onTokenChange={handlers.onGuestSelectToken}\n onConfirm={handlers.onGuestConfirmSource}\n onBack={() => handlers.onNavigate('guest-deposit')}\n />\n );\n }\n\n // Guest Wallet Connection / Quote / Approval / Signing\n if (step === 'guest-connecting' || step === 'guest-fetching-quote' || step === 'guest-approving' || step === 'guest-signing') {\n const parsedAmt = depositAmount ?? DEFAULT_DEPOSIT_AMOUNT_USD;\n const phaseMap = {\n 'guest-connecting': 'connecting' as const,\n 'guest-fetching-quote': 'fetching-quote' as const,\n 'guest-approving': 'approving' as const,\n 'guest-signing': 'signing' as const,\n };\n return (\n <GuestWalletScreen\n phase={phaseMap[step]}\n amount={parsedAmt}\n currency=\"USD\"\n onBack={state.guestFlowInProgress ? undefined : () => handlers.onNavigate('guest-deposit')}\n error={state.error}\n onRetry={handlers.onGuestRetry}\n />\n );\n }\n\n // Offer Setup\n if (step === 'offer-setup') {\n const displayAmount = parseFloat(state.amount) || (depositAmount ?? 5);\n return (\n <OfferSetupScreen\n amount={displayAmount}\n currency=\"USD\"\n onSetup={handlers.onOfferSetup}\n onDone={onDismiss ?? handlers.onNewPayment}\n />\n );\n }\n\n // Setup Complete\n if (step === 'setup-complete') {\n return (\n <SetupCompleteScreen\n onDone={onDismiss ?? handlers.onNewPayment}\n />\n );\n }\n\n // Login\n if (step === 'login') {\n if (authenticated) {\n return <SwypeLoadingScreen />;\n }\n return (\n <LoginScreen\n authInput={authInput}\n onAuthInputChange={handlers.onSetAuthInput}\n onSubmit={handlers.onSendLoginCode}\n sending={activeOtpStatus === 'sending-code'}\n error={state.error}\n onBack={onBack}\n merchantInitials={merchantName ? merchantName.slice(0, 2).toUpperCase() : undefined}\n />\n );\n }\n\n // OTP Verify\n if (step === 'otp-verify') {\n return (\n <OtpVerifyScreen\n maskedIdentifier={\n state.verificationTarget ? maskAuthIdentifier(state.verificationTarget) : ''\n }\n otpCode={otpCode}\n onOtpChange={(code: string) => {\n handlers.onSetOtpCode(code);\n }}\n onVerify={handlers.onVerifyLoginCode}\n onResend={handlers.onResendLoginCode}\n onBack={handlers.onBackFromOtp}\n verifying={activeOtpStatus === 'submitting-code' || authenticated}\n error={state.error}\n />\n );\n }\n\n\n // Create Passkey\n if (step === 'create-passkey') {\n return (\n <PasskeyScreen\n onCreatePasskey={handlers.onRegisterPasskey}\n onBack={handlers.onLogout}\n onLogout={handlers.onLogout}\n creating={state.registeringPasskey}\n error={state.error}\n popupFallback={state.passkeyPopupNeeded}\n onCreatePasskeyViaPopup={handlers.onCreatePasskeyViaPopup}\n />\n );\n }\n\n // Verify Passkey (Safari iframe popup — uses the same unified screen)\n if (step === 'verify-passkey') {\n return (\n <PasskeyScreen\n onCreatePasskey={handlers.onRegisterPasskey}\n onBack={handlers.onLogout}\n onLogout={handlers.onLogout}\n creating={state.verifyingPasskeyPopup}\n error={state.error}\n popupFallback\n onCreatePasskeyViaPopup={handlers.onVerifyPasskeyViaPopup}\n />\n );\n }\n\n // Wallet Picker\n if (step === 'wallet-picker') {\n return (\n <WalletPickerScreen\n providers={state.providers}\n pendingConnections={pendingConnections}\n loading={state.creatingTransfer}\n useDeeplink={!shouldUseWalletConnector({\n userAgent: typeof navigator === 'undefined' ? undefined : navigator.userAgent,\n })}\n onPrepareProvider={handlers.onPrepareProvider}\n onSelectProvider={handlers.onSelectProvider}\n onContinueConnection={handlers.onContinueConnection}\n onBack={() =>\n handlers.onNavigate(state.activeCredentialId ? 'deposit' : 'create-passkey')\n }\n onLogout={handlers.onLogout}\n />\n );\n }\n\n // Open Wallet (mobile deeplink or desktop inline authorization)\n if (step === 'open-wallet') {\n const providerName =\n state.providers.find((p) => p.id === state.selectedProviderId)?.name ?? null;\n const useDeeplink = !shouldUseWalletConnector({\n userAgent: typeof navigator === 'undefined' ? undefined : navigator.userAgent,\n });\n return (\n <OpenWalletScreen\n walletName={providerName}\n deeplinkUri={state.deeplinkUri ?? ''}\n loading={useDeeplink ? (state.creatingTransfer || !state.deeplinkUri) : state.creatingTransfer}\n useDeeplink={useDeeplink}\n error={state.error || (useDeeplink ? pollingError : authExecutorError)}\n onRetryStatus={useDeeplink ? handlers.onRetryMobileStatus : undefined}\n onBack={useDeeplink ? () => handlers.onNavigate('wallet-picker') : undefined}\n onLogout={handlers.onLogout}\n />\n );\n }\n\n // Setup Status (desktop — inline wallet authorization in progress)\n if (step === 'setup-status') {\n return (\n <SetupStatusScreen\n complete={false}\n limit={state.oneTapLimit}\n tokensApproved={0}\n merchantName={merchantName}\n onContinue={() => handlers.onNavigate('setup')}\n onLogout={handlers.onLogout}\n error={state.error || authExecutorError}\n />\n );\n }\n\n // Setup (one-tap configuration)\n if (step === 'setup') {\n const selectSourceTokenCount = selectSourceChoices.reduce(\n (sum, chain) => sum + chain.tokens.length, 0,\n );\n const effectiveTokenCount = tokenCount > 0 ? tokenCount : selectSourceTokenCount;\n const effectiveSourceLabel = selectedSourceLabel\n ?? (selectSourceChainName && selectSourceTokenSymbol\n ? `${selectSourceTokenSymbol} on ${selectSourceChainName}`\n : undefined);\n\n return (\n <SetupScreen\n availableBalance={selectedSource\n ? selectedSource.balance.available.amount\n : selectSourceAvailableBalance > 0\n ? selectSourceAvailableBalance\n : selectedAccount\n ? selectedAccount.wallets.reduce((sum, w) => sum + w.balance.available.amount, 0)\n : maxSourceBalance}\n tokenCount={effectiveTokenCount}\n sourceName={sourceName}\n onSetupOneTap={handlers.onSetupOneTap}\n onBack={() => handlers.onNavigate('deposit')}\n onLogout={handlers.onLogout}\n onAdvanced={handlers.onSelectToken}\n selectedSourceLabel={effectiveSourceLabel}\n loading={savingOneTapLimit}\n error={state.error}\n selectedTokenSymbol={selectedSource?.token.symbol ?? selectSourceTokenSymbol}\n />\n );\n }\n\n // Confirm Sign (mobile — user must tap to trigger passkey)\n if (step === 'confirm-sign') {\n const providerName =\n state.providers.find((p) => p.id === state.selectedProviderId)?.name ?? null;\n return (\n <ConfirmSignScreen\n walletName={providerName}\n signing={transferSigningSigning}\n error={state.error || transferSigningError}\n onSign={handlers.onConfirmSign}\n onLogout={handlers.onLogout}\n />\n );\n }\n\n // Deposit\n if (step === 'deposit') {\n if (state.loadingData) {\n return <SwypeLoadingScreen />;\n }\n\n const parsedAmt = depositAmount ?? DEFAULT_DEPOSIT_AMOUNT_USD;\n return (\n <DepositScreen\n merchantName={merchantName}\n availableBalance={selectedSource\n ? selectedSource.balance.available.amount\n : selectedAccount\n ? selectedAccount.wallets.reduce((sum, w) => sum + w.balance.available.amount, 0)\n : maxSourceBalance}\n remainingLimit={\n selectedSource != null\n ? (selectedSource.remainingAllowance ?? null)\n : (selectedAccount?.remainingAllowance ?? null)\n }\n tokenCount={tokenCount}\n initialAmount={parsedAmt}\n processing={state.creatingTransfer}\n error={state.error}\n onDeposit={handlers.onPay}\n onSwitchWallet={() => handlers.onNavigate('wallet-picker')}\n onBack={onBack ?? (() => handlers.onLogout())}\n onLogout={handlers.onLogout}\n onIncreaseLimit={handlers.onIncreaseLimit}\n increasingLimit={state.increasingLimit}\n accounts={depositEligibleAccounts}\n selectedAccountId={state.selectedAccountId}\n onSelectAccount={handlers.onSelectAccount}\n onAuthorizeAccount={handlers.onContinueConnection}\n onAddProvider={() => handlers.onNavigate('wallet-picker')}\n onSelectToken={handlers.onSelectToken}\n selectedSourceLabel={selectedSourceLabel}\n selectedTokenSymbol={selectedSource?.token.symbol}\n />\n );\n }\n\n // Token Picker\n if (step === 'token-picker') {\n if (!selectedAccount) {\n return <SwypeLoadingScreen />;\n }\n return (\n <TokenPickerScreen\n account={selectedAccount}\n chains={state.chains}\n onSelectAuthorized={handlers.onSelectAuthorizedToken}\n onAuthorizeToken={handlers.onAuthorizeToken}\n onBack={() => handlers.onNavigate(state.previousStep === 'setup' ? 'setup' : 'deposit')}\n onLogout={handlers.onLogout}\n depositAmount={depositAmount ?? undefined}\n selectedTokenSymbol={selectedSource?.token.symbol}\n selectedWalletId={state.selectedWalletId}\n />\n );\n }\n\n // Processing\n if (step === 'processing') {\n const polledStatus = pollingTransfer?.status;\n const transferPhase: TransferPhase = state.creatingTransfer\n ? 'creating'\n : polledStatus === 'SENDING' || polledStatus === 'SENT'\n ? 'sent'\n : 'verifying';\n\n return (\n <TransferStatusScreen\n phase={transferPhase}\n error={state.error || authExecutorError || transferSigningError || pollingError}\n onLogout={handlers.onLogout}\n />\n );\n }\n\n // Select Source\n if (step === 'select-source') {\n const cameFromSetup = state.previousStep === 'setup';\n return (\n <SelectSourceScreen\n choices={selectSourceChoices}\n selectedChainName={selectSourceChainName}\n selectedTokenSymbol={selectSourceTokenSymbol}\n recommended={selectSourceRecommended}\n onChainChange={handlers.onSelectSourceChainChange}\n onTokenChange={handlers.onSetSelectSourceTokenSymbol}\n onConfirm={cameFromSetup\n ? () => handlers.onNavigate('setup')\n : handlers.onConfirmSelectSource}\n onBack={cameFromSetup ? () => handlers.onNavigate('setup') : undefined}\n onLogout={handlers.onLogout}\n />\n );\n }\n\n // Success\n if (step === 'success') {\n const isGuest = state.isGuestFlow && state.guestTransferComplete;\n const succeeded = isGuest ? !state.error : state.transfer?.status === 'COMPLETED';\n const displayAmount = isGuest\n ? (parseFloat(state.amount) || (depositAmount ?? 0))\n : (state.transfer?.amount?.amount ?? 0);\n const displayCurrency = state.transfer?.amount?.currency ?? 'USD';\n\n return (\n <SuccessScreen\n amount={displayAmount}\n currency={displayCurrency}\n succeeded={succeeded}\n error={state.error}\n merchantName={merchantName}\n sourceName={isGuest ? undefined : sourceName}\n remainingLimit={!isGuest && succeeded ? (() => {\n const limit = selectedSource != null\n ? (selectedSource.remainingAllowance ?? null)\n : (selectedAccount?.remainingAllowance ?? null);\n if (limit == null) return null;\n return limit > displayAmount ? limit - displayAmount : 0;\n })() : undefined}\n onDone={onDismiss ?? handlers.onNewPayment}\n onLogout={handlers.onLogout}\n autoCloseSeconds={isGuest ? undefined : autoCloseSeconds}\n isGuestTransfer={isGuest}\n onOfferSetup={() => handlers.onNavigate('offer-setup')}\n />\n );\n }\n\n // Low Balance (fallback)\n if (step === 'low-balance') {\n return (\n <DepositScreen\n merchantName={merchantName}\n availableBalance={0}\n remainingLimit={\n selectedSource != null\n ? (selectedSource.remainingAllowance ?? null)\n : (selectedAccount?.remainingAllowance ?? null)\n }\n tokenCount={tokenCount}\n initialAmount={depositAmount ?? 5}\n processing={false}\n error={state.error}\n onDeposit={handlers.onPay}\n onSwitchWallet={() => handlers.onNavigate('wallet-picker')}\n onBack={onBack ?? (() => handlers.onLogout())}\n onLogout={handlers.onLogout}\n accounts={depositEligibleAccounts}\n selectedAccountId={state.selectedAccountId}\n onSelectAccount={handlers.onSelectAccount}\n onAuthorizeAccount={handlers.onContinueConnection}\n onAddProvider={() => handlers.onNavigate('wallet-picker')}\n selectedSourceLabel={selectedSourceLabel}\n selectedTokenSymbol={selectedSource?.token.symbol}\n />\n );\n }\n\n return null;\n}\n","// Safe Sentry wrapper for optional @sentry/react peer dependency.\n// Reports errors when Sentry is installed and initialized by the host app;\n// silently no-ops otherwise.\n\ntype SentryLike = { captureException: (error: unknown) => string };\n\nlet _mod: SentryLike | null | undefined;\n\nexport function captureException(error: unknown): void {\n if (_mod === null) return;\n\n if (_mod) {\n _mod.captureException(error);\n return;\n }\n\n import('@sentry/react')\n .then((m) => {\n _mod = m;\n m.captureException(error);\n })\n .catch(() => {\n _mod = null;\n });\n}\n","import { Component, type ErrorInfo, type ReactNode } from 'react';\nimport { captureException } from '../sentry';\nimport type { ThemeTokens } from '../theme';\n\ninterface Props {\n onReset: () => void;\n children: ReactNode;\n tokens?: ThemeTokens;\n}\n\ninterface State {\n hasError: boolean;\n}\n\nexport class PaymentErrorBoundary extends Component<Props, State> {\n constructor(props: Props) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError(): State {\n return { hasError: true };\n }\n\n componentDidCatch(error: Error, _info: ErrorInfo) {\n captureException(error);\n }\n\n private handleReset = () => {\n this.setState({ hasError: false });\n this.props.onReset();\n };\n\n render() {\n if (!this.state.hasError) {\n return this.props.children;\n }\n\n const t = this.props.tokens;\n const textColor = t?.text ?? '#1a1a1a';\n const mutedColor = t?.textMuted ?? '#666';\n const bgColor = t?.accent ?? '#1a1a1a';\n\n return (\n <div style={containerStyle}>\n <div style={iconStyle}>\n <svg width=\"48\" height=\"48\" viewBox=\"0 0 24 24\" fill=\"none\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"#ef4444\" strokeWidth=\"1.5\" />\n <path d=\"M12 8v5\" stroke=\"#ef4444\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n <circle cx=\"12\" cy=\"16\" r=\"0.75\" fill=\"#ef4444\" />\n </svg>\n </div>\n <h2 style={{ ...headingStyle, color: textColor }}>Something went wrong</h2>\n <p style={{ ...messageStyle, color: mutedColor }}>\n An unexpected error occurred. Please try again.\n </p>\n <button type=\"button\" onClick={this.handleReset} style={{ ...buttonStyle, background: bgColor }}>\n Try again\n </button>\n </div>\n );\n }\n}\n\nconst containerStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n textAlign: 'center',\n padding: '48px 24px',\n minHeight: '100%',\n maxWidth: 420,\n margin: '0 auto',\n};\n\nconst iconStyle: React.CSSProperties = {\n marginBottom: 20,\n};\n\nconst headingStyle: React.CSSProperties = {\n fontSize: '1.25rem',\n fontWeight: 700,\n margin: '0 0 8px',\n};\n\nconst messageStyle: React.CSSProperties = {\n fontSize: '0.9rem',\n margin: '0 0 28px',\n lineHeight: 1.5,\n};\n\nconst buttonStyle: React.CSSProperties = {\n color: '#fff',\n border: 'none',\n borderRadius: 12,\n padding: '12px 32px',\n fontSize: '0.95rem',\n fontWeight: 600,\n fontFamily: 'inherit',\n cursor: 'pointer',\n};\n","import { useMemo } from 'react';\n\nimport type { Account, WalletSource } from '../types';\nimport type { PaymentState } from '../paymentReducer';\nimport { deriveSourceTypeAndId } from '../paymentReducer';\nimport { getDepositEligibleAccounts } from '../paymentHelpers';\n\nexport interface DerivedState {\n sourceType: ReturnType<typeof deriveSourceTypeAndId>['sourceType'];\n sourceId: string;\n selectedAccount: Account | undefined;\n selectedWallet: Account['wallets'][number] | undefined;\n selectedSource: WalletSource | null;\n sourceName: string;\n pendingConnections: Account[];\n depositEligibleAccounts: Account[];\n maxSourceBalance: number;\n tokenCount: number;\n}\n\nexport function useDerivedState(state: PaymentState): DerivedState {\n const { sourceType, sourceId } = deriveSourceTypeAndId(state);\n\n const selectedAccount = state.accounts.find((a) => a.id === state.selectedAccountId);\n const selectedWallet = selectedAccount?.wallets.find(\n (w) => w.id === state.selectedWalletId,\n );\n\n const selectedSource = useMemo(() => {\n if (!selectedWallet) return null;\n if (state.selectedTokenSymbol) {\n return selectedWallet.sources.find(\n (s) => s.token.symbol === state.selectedTokenSymbol,\n ) ?? null;\n }\n return selectedWallet.sources.find((s) => s.token.status === 'AUTHORIZED')\n ?? selectedWallet.sources[0] ?? null;\n }, [selectedWallet, state.selectedTokenSymbol]);\n\n const sourceName = selectedAccount?.name ?? selectedWallet?.chain.name ?? 'Wallet';\n\n const pendingConnections = useMemo(\n () =>\n state.accounts.filter(\n (a) => a.wallets.length > 0 && !a.wallets.some((w) => w.status === 'ACTIVE'),\n ),\n [state.accounts],\n );\n\n const depositEligibleAccounts = useMemo(\n () => getDepositEligibleAccounts(state.accounts),\n [state.accounts],\n );\n\n const maxSourceBalance = useMemo(() => {\n let max = 0;\n for (const acct of state.accounts) {\n for (const wallet of acct.wallets) {\n for (const source of wallet.sources) {\n if (source.balance.available.amount > max) {\n max = source.balance.available.amount;\n }\n }\n }\n }\n return max;\n }, [state.accounts]);\n\n const tokenCount = useMemo(() => {\n let count = 0;\n for (const acct of state.accounts) {\n for (const wallet of acct.wallets) {\n count += wallet.sources.filter(\n (s) => s.balance.available.amount > 0,\n ).length;\n }\n }\n return count;\n }, [state.accounts]);\n\n return {\n sourceType,\n sourceId,\n selectedAccount,\n selectedWallet,\n selectedSource,\n sourceName,\n pendingConnections,\n depositEligibleAccounts,\n maxSourceBalance,\n tokenCount,\n };\n}\n","import { useCallback, useState, type Dispatch } from 'react';\nimport { useLoginWithEmail, useLoginWithSms } from '@privy-io/react-auth';\n\nimport type { PaymentAction } from '../paymentReducer';\nimport type { NormalizedAuthIdentifier } from '../auth';\nimport { normalizeAuthIdentifier } from '../auth';\nimport { captureException } from '../sentry';\n\nexport interface AuthHandlersResult {\n authInput: string;\n otpCode: string;\n activeOtpStatus: string;\n activeOtpErrorMessage: string | null;\n setAuthInput: (value: string) => void;\n setOtpCode: (code: string) => void;\n handleSendLoginCode: () => Promise<void>;\n handleVerifyLoginCode: () => Promise<void>;\n handleResendLoginCode: () => Promise<void>;\n}\n\nexport function useAuthHandlers(\n dispatch: Dispatch<PaymentAction>,\n verificationTarget: NormalizedAuthIdentifier | null,\n): AuthHandlersResult {\n const {\n sendCode: sendEmailCode,\n loginWithCode: loginWithEmailCode,\n state: emailLoginState,\n } = useLoginWithEmail();\n const {\n sendCode: sendSmsCode,\n loginWithCode: loginWithSmsCode,\n state: smsLoginState,\n } = useLoginWithSms();\n\n const [authInput, setAuthInput] = useState('');\n const [otpCode, setOtpCode] = useState('');\n\n const activeOtpStatus = verificationTarget?.kind === 'email'\n ? emailLoginState.status\n : verificationTarget?.kind === 'phone'\n ? smsLoginState.status\n : 'initial';\n\n const activeOtpErrorMessage =\n verificationTarget?.kind === 'email' && emailLoginState.status === 'error'\n ? emailLoginState.error?.message ?? 'Failed to continue with email.'\n : verificationTarget?.kind === 'phone' && smsLoginState.status === 'error'\n ? smsLoginState.error?.message ?? 'Failed to continue with phone number.'\n : null;\n\n const handleSendLoginCode = useCallback(async () => {\n const normalizedIdentifier = normalizeAuthIdentifier(authInput);\n if (!normalizedIdentifier) {\n dispatch({ type: 'SET_ERROR', error: 'Enter a valid email address or phone number.' });\n return;\n }\n setOtpCode('');\n try {\n if (normalizedIdentifier.kind === 'email') {\n await sendEmailCode({ email: normalizedIdentifier.value });\n } else {\n await sendSmsCode({ phoneNumber: normalizedIdentifier.value });\n }\n dispatch({ type: 'CODE_SENT', target: normalizedIdentifier });\n } catch (err) {\n captureException(err);\n dispatch({\n type: 'SET_ERROR',\n error: err instanceof Error ? err.message : 'Failed to send verification code',\n });\n }\n }, [authInput, sendEmailCode, sendSmsCode, dispatch]);\n\n const handleVerifyLoginCode = useCallback(async () => {\n if (!verificationTarget) return;\n const trimmedCode = otpCode.trim();\n if (!/^\\d{6}$/.test(trimmedCode)) {\n dispatch({ type: 'SET_ERROR', error: 'Enter the 6-digit verification code.' });\n return;\n }\n dispatch({ type: 'SET_ERROR', error: null });\n try {\n if (verificationTarget.kind === 'email') {\n await loginWithEmailCode({ code: trimmedCode });\n } else {\n await loginWithSmsCode({ code: trimmedCode });\n }\n } catch (err) {\n captureException(err);\n dispatch({\n type: 'SET_ERROR',\n error: err instanceof Error ? err.message : 'Failed to verify code',\n });\n }\n }, [verificationTarget, otpCode, loginWithEmailCode, loginWithSmsCode, dispatch]);\n\n const handleResendLoginCode = useCallback(async () => {\n if (!verificationTarget) return;\n dispatch({ type: 'SET_ERROR', error: null });\n try {\n if (verificationTarget.kind === 'email') {\n await sendEmailCode({ email: verificationTarget.value });\n } else {\n await sendSmsCode({ phoneNumber: verificationTarget.value });\n }\n } catch (err) {\n captureException(err);\n dispatch({\n type: 'SET_ERROR',\n error: err instanceof Error ? err.message : 'Failed to resend code',\n });\n }\n }, [verificationTarget, sendEmailCode, sendSmsCode, dispatch]);\n\n return {\n authInput,\n otpCode,\n activeOtpStatus,\n activeOtpErrorMessage,\n setAuthInput,\n setOtpCode,\n handleSendLoginCode,\n handleVerifyLoginCode,\n handleResendLoginCode,\n };\n}\n","import type { Account, PaymentStep } from './types';\n\nexport interface PersistedMobileFlow {\n transferId?: string;\n accountId?: string;\n sessionId?: string;\n deeplinkUri: string;\n providerId: string | null;\n isSetup: boolean;\n /** True when the deeplink is for re-authorization (token auth or limit increase) on an already-active wallet. */\n isReauthorization?: boolean;\n /** Token context for restoring the selection after a reauthorization round-trip. */\n reauthorizationToken?: {\n walletId: string;\n tokenSymbol: string;\n };\n}\n\ninterface StepResolutionState {\n hasPasskey: boolean;\n accounts: Account[];\n persistedMobileFlow: PersistedMobileFlow | null;\n mobileSetupInProgress: boolean;\n connectingNewAccount: boolean;\n}\n\nexport interface StepResolutionResult {\n step: PaymentStep;\n clearPersistedFlow: boolean;\n}\n\nexport type RestoredMobileFlowResult =\n | { kind: 'resume-open-wallet'; step: 'open-wallet'; clearPersistedFlow: false }\n | { kind: 'resume-setup-deposit'; step: 'deposit'; clearPersistedFlow: true }\n | { kind: 'resume-confirm-sign'; step: 'confirm-sign'; clearPersistedFlow: true }\n | { kind: 'resume-processing'; step: 'processing'; clearPersistedFlow: true }\n | { kind: 'resume-success'; step: 'success'; clearPersistedFlow: true }\n | { kind: 'resume-failed'; step: 'success'; clearPersistedFlow: true }\n | { kind: 'resume-stale-setup'; step: 'wallet-picker'; clearPersistedFlow: true };\n\nfunction hasActiveWallet(accounts: Account[]): boolean {\n return accounts.some((account) => account.wallets.some((wallet) => wallet.status === 'ACTIVE'));\n}\n\nexport function resolvePostAuthStep(state: StepResolutionState): StepResolutionResult {\n if (!state.hasPasskey) {\n return { step: 'create-passkey', clearPersistedFlow: false };\n }\n\n if (state.persistedMobileFlow) {\n if (state.persistedMobileFlow.isReauthorization) {\n return { step: 'open-wallet', clearPersistedFlow: false };\n }\n if (state.persistedMobileFlow.isSetup && hasActiveWallet(state.accounts)) {\n return { step: 'deposit', clearPersistedFlow: true };\n }\n return { step: 'open-wallet', clearPersistedFlow: false };\n }\n\n // Defensive: if a mobile setup is actively in progress but the persisted\n // flow was lost (e.g. sessionStorage cleared), keep the user on the\n // open-wallet screen rather than resetting them to wallet-picker.\n if (state.mobileSetupInProgress && !hasActiveWallet(state.accounts)) {\n return { step: 'open-wallet', clearPersistedFlow: false };\n }\n\n if (\n (state.accounts.length === 0 || !hasActiveWallet(state.accounts)) &&\n !state.connectingNewAccount\n ) {\n return { step: 'wallet-picker', clearPersistedFlow: false };\n }\n\n return { step: 'deposit', clearPersistedFlow: false };\n}\n\nexport function resolveRestoredMobileFlow(\n transferStatus: string,\n isSetup: boolean,\n): RestoredMobileFlowResult {\n if (transferStatus === 'AUTHORIZED') {\n return isSetup\n ? { kind: 'resume-setup-deposit', step: 'deposit', clearPersistedFlow: true }\n : { kind: 'resume-confirm-sign', step: 'confirm-sign', clearPersistedFlow: true };\n }\n\n if (transferStatus === 'COMPLETED') {\n return { kind: 'resume-success', step: 'success', clearPersistedFlow: true };\n }\n\n if (transferStatus === 'FAILED') {\n return { kind: 'resume-failed', step: 'success', clearPersistedFlow: true };\n }\n\n if (transferStatus === 'SENDING' || transferStatus === 'SENT') {\n return { kind: 'resume-processing', step: 'processing', clearPersistedFlow: true };\n }\n\n if (isSetup) {\n return { kind: 'resume-stale-setup', step: 'wallet-picker', clearPersistedFlow: true };\n }\n\n return { kind: 'resume-open-wallet', step: 'open-wallet', clearPersistedFlow: false };\n}\n","import { useCallback, useRef, type Dispatch, type MutableRefObject } from 'react';\nimport { usePrivy } from '@privy-io/react-auth';\n\nimport type { Account } from '../types';\nimport type { PaymentAction } from '../paymentReducer';\nimport * as api from '../api';\nimport { captureException } from '../sentry';\nimport {\n createPasskeyCredential,\n buildPasskeyPopupOptions,\n createPasskeyViaPopup,\n findDevicePasskey,\n findDevicePasskeyViaPopup,\n resolvePasskeyRpId,\n PasskeyIframeBlockedError,\n} from '../hooks';\nimport { resolvePostAuthStep } from '../mobileFlow';\nimport {\n ACTIVE_CREDENTIAL_STORAGE_KEY,\n clearMobileFlowState,\n loadMobileFlowState,\n} from '../paymentHelpers';\n\nexport interface PasskeyHandlersResult {\n handleRegisterPasskey: () => Promise<void>;\n handleCreatePasskeyViaPopup: () => Promise<void>;\n handleVerifyPasskeyViaPopup: () => Promise<void>;\n checkingPasskeyRef: MutableRefObject<boolean>;\n}\n\nexport function usePasskeyHandlers(\n dispatch: Dispatch<PaymentAction>,\n apiBaseUrl: string,\n accounts: Account[],\n knownCredentialIds: string[],\n mobileSetupFlowRef: MutableRefObject<boolean>,\n): PasskeyHandlersResult {\n const { user, getAccessToken } = usePrivy();\n const checkingPasskeyRef = useRef(false);\n\n const activateExistingCredential = useCallback(async (credentialId: string) => {\n dispatch({ type: 'PASSKEY_ACTIVATED', credentialId });\n window.localStorage.setItem(ACTIVE_CREDENTIAL_STORAGE_KEY, credentialId);\n\n const token = await getAccessToken();\n if (token) {\n api.reportPasskeyActivity(apiBaseUrl, token, credentialId).catch(() => {});\n }\n\n const resolved = resolvePostAuthStep({\n hasPasskey: true,\n accounts,\n persistedMobileFlow: loadMobileFlowState(),\n mobileSetupInProgress: mobileSetupFlowRef.current,\n connectingNewAccount: false,\n });\n if (resolved.clearPersistedFlow) clearMobileFlowState();\n dispatch({ type: 'NAVIGATE', step: resolved.step });\n }, [getAccessToken, apiBaseUrl, accounts, mobileSetupFlowRef, dispatch]);\n\n const completePasskeyRegistration = useCallback(async (\n credentialId: string,\n publicKey: string,\n ) => {\n const token = await getAccessToken();\n if (!token) throw new Error('Not authenticated');\n await api.registerPasskey(apiBaseUrl, token, credentialId, publicKey);\n dispatch({ type: 'PASSKEY_ACTIVATED', credentialId });\n window.localStorage.setItem(ACTIVE_CREDENTIAL_STORAGE_KEY, credentialId);\n\n const resolved = resolvePostAuthStep({\n hasPasskey: true,\n accounts,\n persistedMobileFlow: loadMobileFlowState(),\n mobileSetupInProgress: mobileSetupFlowRef.current,\n connectingNewAccount: false,\n });\n if (resolved.clearPersistedFlow) clearMobileFlowState();\n dispatch({ type: 'NAVIGATE', step: resolved.step });\n }, [getAccessToken, apiBaseUrl, accounts, mobileSetupFlowRef, dispatch]);\n\n const handleRegisterPasskey = useCallback(async () => {\n dispatch({ type: 'SET_REGISTERING_PASSKEY', value: true });\n dispatch({ type: 'SET_ERROR', error: null });\n try {\n if (knownCredentialIds.length > 0) {\n const matched = await findDevicePasskey(knownCredentialIds);\n if (matched) {\n await activateExistingCredential(matched);\n return;\n }\n }\n\n const passkeyDisplayName =\n user?.email?.address ?? user?.google?.name ?? user?.id ?? 'Swype User';\n const { credentialId, publicKey } = await createPasskeyCredential({\n userId: user?.id ?? 'unknown',\n displayName: passkeyDisplayName,\n });\n await completePasskeyRegistration(credentialId, publicKey);\n } catch (err) {\n if (err instanceof PasskeyIframeBlockedError) {\n dispatch({ type: 'SET_PASSKEY_POPUP_NEEDED', needed: true });\n } else {\n captureException(err);\n dispatch({\n type: 'SET_ERROR',\n error: err instanceof Error ? err.message : 'Failed to register passkey',\n });\n }\n } finally {\n dispatch({ type: 'SET_REGISTERING_PASSKEY', value: false });\n }\n }, [user, knownCredentialIds, activateExistingCredential, completePasskeyRegistration, dispatch]);\n\n const handleCreatePasskeyViaPopup = useCallback(async () => {\n dispatch({ type: 'SET_REGISTERING_PASSKEY', value: true });\n dispatch({ type: 'SET_ERROR', error: null });\n try {\n const token = await getAccessToken();\n\n if (knownCredentialIds.length > 0) {\n const directMatch = await findDevicePasskey(knownCredentialIds).catch(() => null);\n if (directMatch) {\n await activateExistingCredential(directMatch);\n return;\n }\n\n const popupMatch = await findDevicePasskeyViaPopup({\n credentialIds: knownCredentialIds,\n rpId: resolvePasskeyRpId(),\n authToken: token ?? undefined,\n apiBaseUrl,\n });\n if (popupMatch) {\n await activateExistingCredential(popupMatch);\n return;\n }\n }\n\n const passkeyDisplayName =\n user?.email?.address ?? user?.google?.name ?? user?.id ?? 'Swype User';\n const popupOptions = buildPasskeyPopupOptions({\n userId: user?.id ?? 'unknown',\n displayName: passkeyDisplayName,\n authToken: token ?? undefined,\n apiBaseUrl,\n });\n const { credentialId } = await createPasskeyViaPopup(popupOptions);\n\n dispatch({ type: 'PASSKEY_ACTIVATED', credentialId });\n localStorage.setItem(ACTIVE_CREDENTIAL_STORAGE_KEY, credentialId);\n\n const resolved = resolvePostAuthStep({\n hasPasskey: true,\n accounts,\n persistedMobileFlow: loadMobileFlowState(),\n mobileSetupInProgress: mobileSetupFlowRef.current,\n connectingNewAccount: false,\n });\n if (resolved.clearPersistedFlow) clearMobileFlowState();\n dispatch({ type: 'NAVIGATE', step: resolved.step });\n } catch (err) {\n captureException(err);\n dispatch({\n type: 'SET_ERROR',\n error: err instanceof Error ? err.message : 'Failed to register passkey',\n });\n } finally {\n dispatch({ type: 'SET_REGISTERING_PASSKEY', value: false });\n }\n }, [user, knownCredentialIds, getAccessToken, apiBaseUrl, activateExistingCredential, accounts, mobileSetupFlowRef, dispatch]);\n\n const handleVerifyPasskeyViaPopup = useCallback(async () => {\n dispatch({ type: 'SET_VERIFYING_PASSKEY', value: true });\n dispatch({ type: 'SET_ERROR', error: null });\n try {\n const token = await getAccessToken();\n const matched = await findDevicePasskeyViaPopup({\n credentialIds: knownCredentialIds,\n rpId: resolvePasskeyRpId(),\n authToken: token ?? undefined,\n apiBaseUrl,\n });\n if (matched) {\n dispatch({ type: 'PASSKEY_ACTIVATED', credentialId: matched });\n window.localStorage.setItem(ACTIVE_CREDENTIAL_STORAGE_KEY, matched);\n if (token) {\n api.reportPasskeyActivity(apiBaseUrl, token, matched).catch(() => {});\n }\n\n const resolved = resolvePostAuthStep({\n hasPasskey: true,\n accounts,\n persistedMobileFlow: loadMobileFlowState(),\n mobileSetupInProgress: mobileSetupFlowRef.current,\n connectingNewAccount: false,\n });\n if (resolved.clearPersistedFlow) clearMobileFlowState();\n dispatch({ type: 'NAVIGATE', step: resolved.step });\n } else {\n dispatch({\n type: 'SET_ERROR',\n error: 'Passkey verification was not completed. Please try again.',\n });\n }\n } catch (err) {\n captureException(err);\n dispatch({\n type: 'SET_ERROR',\n error: err instanceof Error ? err.message : 'Passkey verification failed. Please try again.',\n });\n } finally {\n dispatch({ type: 'SET_VERIFYING_PASSKEY', value: false });\n }\n }, [knownCredentialIds, getAccessToken, apiBaseUrl, accounts, mobileSetupFlowRef, dispatch]);\n\n return {\n handleRegisterPasskey,\n handleCreatePasskeyViaPopup,\n handleVerifyPasskeyViaPopup,\n checkingPasskeyRef,\n };\n}\n","import { useCallback, useRef, type Dispatch } from 'react';\n\nimport type { Destination, SourceType, Transfer } from '../types';\nimport type { PaymentAction } from '../paymentReducer';\nimport type { UseTransferPollingResult, UseTransferSigningResult } from '../hooks';\nimport * as api from '../api';\nimport { captureException } from '../sentry';\nimport {\n MIN_SEND_AMOUNT_USD,\n getPreferredDepositWallet,\n resolveDepositSelection,\n clearMobileFlowState,\n} from '../paymentHelpers';\n\nexport interface TransferHandlersDeps {\n dispatch: Dispatch<PaymentAction>;\n getAccessToken: () => Promise<string | null>;\n apiBaseUrl: string;\n depositAmount: number | null;\n destination: Destination;\n idempotencyKey?: string;\n merchantAuthorization?: api.CreateTransferParams['merchantAuthorization'];\n onComplete?: (transfer: Transfer) => void;\n onError?: (error: string) => void;\n polling: UseTransferPollingResult;\n transferSigning: UseTransferSigningResult;\n sourceType: SourceType;\n sourceId: string;\n sourceTokenAddress: string | undefined;\n activeCredentialId: string | null;\n selectedAccountId: string | null;\n transfer: Transfer | null;\n accounts: import('../types').Account[];\n}\n\nexport interface TransferHandlersResult {\n reloadAccounts: () => Promise<void>;\n handlePay: (amount: number, overrides?: { sourceType: SourceType; sourceId: string }) => Promise<void>;\n handleConfirmSign: () => Promise<void>;\n processingStartedAtRef: React.MutableRefObject<number | null>;\n pollingTransferIdRef: React.MutableRefObject<string | null>;\n}\n\nexport function useTransferHandlers(deps: TransferHandlersDeps): TransferHandlersResult {\n const {\n dispatch, getAccessToken, apiBaseUrl, depositAmount, destination,\n idempotencyKey, merchantAuthorization, onComplete, onError,\n polling, transferSigning, sourceType, sourceId, sourceTokenAddress,\n activeCredentialId, selectedAccountId, transfer, accounts,\n } = deps;\n\n const processingStartedAtRef = useRef<number | null>(null);\n const pollingTransferIdRef = useRef<string | null>(null);\n\n const reloadAccounts = useCallback(async () => {\n const token = await getAccessToken();\n if (!token || !activeCredentialId) return;\n const [accts, prov] = await Promise.all([\n api.fetchAccounts(apiBaseUrl, token, activeCredentialId),\n api.fetchProviders(apiBaseUrl, token),\n ]);\n const parsedAmt = depositAmount != null ? depositAmount : 0;\n const defaults = resolveDepositSelection(accts, parsedAmt, selectedAccountId);\n dispatch({ type: 'ACCOUNTS_RELOADED', accounts: accts, providers: prov, defaults });\n }, [getAccessToken, activeCredentialId, selectedAccountId, apiBaseUrl, depositAmount, dispatch]);\n\n const handlePay = useCallback(async (\n payAmount: number,\n sourceOverrides?: { sourceType: SourceType; sourceId: string },\n ) => {\n if (isNaN(payAmount) || payAmount < MIN_SEND_AMOUNT_USD) {\n dispatch({ type: 'SET_ERROR', error: `Minimum amount is $${MIN_SEND_AMOUNT_USD.toFixed(2)}.` });\n return;\n }\n if (!sourceOverrides?.sourceId && !sourceId) {\n dispatch({ type: 'SET_ERROR', error: 'No account or provider selected.' });\n return;\n }\n if (!activeCredentialId) {\n dispatch({ type: 'SET_ERROR', error: 'Create or verify a passkey on this device before continuing.' });\n dispatch({ type: 'NAVIGATE', step: 'create-passkey' });\n return;\n }\n\n dispatch({ type: 'PAY_STARTED', isSetupRedirect: false });\n processingStartedAtRef.current = Date.now();\n\n try {\n if (transfer?.status === 'AUTHORIZED') {\n const signedTransfer = await transferSigning.signTransfer(transfer.id);\n dispatch({ type: 'TRANSFER_SIGNED', transfer: signedTransfer });\n polling.startPolling(transfer.id);\n return;\n }\n\n const token = await getAccessToken();\n if (!token) throw new Error('Not authenticated');\n\n let effectiveSourceType = sourceOverrides?.sourceType ?? sourceType;\n let effectiveSourceId = sourceOverrides?.sourceId ?? sourceId;\n\n if (effectiveSourceType === 'accountId') {\n const acct = accounts.find((a) => a.id === effectiveSourceId);\n const preferredWallet = acct\n ? getPreferredDepositWallet(acct, payAmount)\n : null;\n if (preferredWallet?.status === 'ACTIVE') {\n effectiveSourceType = 'walletId';\n effectiveSourceId = preferredWallet.id;\n }\n }\n\n const t = await api.createTransfer(apiBaseUrl, token, {\n id: idempotencyKey,\n credentialId: activeCredentialId,\n merchantAuthorization,\n sourceType: effectiveSourceType,\n sourceId: effectiveSourceId,\n sourceTokenAddress,\n destination,\n amount: payAmount,\n });\n dispatch({ type: 'TRANSFER_CREATED', transfer: t });\n\n if (t.status === 'COMPLETED') {\n dispatch({ type: 'TRANSFER_COMPLETED', transfer: t });\n onComplete?.(t);\n return;\n }\n if (t.status === 'FAILED') {\n dispatch({ type: 'TRANSFER_FAILED', transfer: t, error: 'Transfer failed.' });\n return;\n }\n\n const signedTransfer = await transferSigning.signTransfer(t.id);\n dispatch({ type: 'TRANSFER_SIGNED', transfer: signedTransfer });\n polling.startPolling(t.id);\n } catch (err) {\n captureException(err);\n const msg = err instanceof Error ? err.message : 'Transfer failed';\n dispatch({ type: 'PAY_ERROR', error: msg, fallbackStep: 'deposit' });\n onError?.(msg);\n } finally {\n dispatch({ type: 'PAY_ENDED' });\n }\n }, [\n sourceId, sourceType, sourceTokenAddress, activeCredentialId, transfer,\n accounts, destination, apiBaseUrl,\n getAccessToken, transferSigning, polling, onError, onComplete,\n idempotencyKey, merchantAuthorization, dispatch,\n ]);\n\n const handleConfirmSign = useCallback(async () => {\n const t = transfer ?? polling.transfer;\n if (!t) return;\n try {\n const signedTransfer = await transferSigning.signTransfer(t.id);\n clearMobileFlowState();\n dispatch({ type: 'CONFIRM_SIGN_SUCCESS', transfer: signedTransfer });\n polling.startPolling(t.id);\n } catch (err) {\n captureException(err);\n const msg = err instanceof Error ? err.message : 'Failed to sign transfer';\n dispatch({ type: 'SET_ERROR', error: msg });\n onError?.(msg);\n }\n }, [transfer, polling.transfer, polling.startPolling, transferSigning, onError, dispatch]);\n\n return {\n reloadAccounts,\n handlePay,\n handleConfirmSign,\n processingStartedAtRef,\n pollingTransferIdRef,\n };\n}\n","import { useCallback, useMemo, useRef, useState, type Dispatch } from 'react';\n\nimport type { AuthorizationAction, PaymentStep, SourceOption } from '../types';\nimport type { PaymentAction } from '../paymentReducer';\nimport type { UseAuthorizationExecutorResult } from '../hooks';\nimport { buildSelectSourceChoices, type SelectSourceChainChoice } from '../paymentHelpers';\n\nexport interface SourceSelectionHandlersResult {\n selectSourceChainName: string;\n selectSourceTokenSymbol: string;\n setSelectSourceChainName: (value: string) => void;\n setSelectSourceTokenSymbol: (value: string) => void;\n selectSourceChoices: SelectSourceChainChoice[];\n selectSourceRecommended: { chainName: string; tokenSymbol: string } | null;\n selectSourceAvailableBalance: number;\n handleSelectSourceChainChange: (chainName: string) => void;\n handleConfirmSelectSource: () => void;\n pendingSelectSourceAction: AuthorizationAction | null;\n initializedSelectSourceActionRef: React.MutableRefObject<string | null>;\n preSelectSourceStepRef: React.MutableRefObject<PaymentStep | null>;\n}\n\nexport function useSourceSelectionHandlers(\n dispatch: Dispatch<PaymentAction>,\n authExecutor: UseAuthorizationExecutorResult,\n): SourceSelectionHandlersResult {\n const [selectSourceChainName, setSelectSourceChainName] = useState('');\n const [selectSourceTokenSymbol, setSelectSourceTokenSymbol] = useState('');\n const initializedSelectSourceActionRef = useRef<string | null>(null);\n const preSelectSourceStepRef = useRef<PaymentStep | null>(null);\n\n const pendingSelectSourceAction = authExecutor.pendingSelectSource;\n\n const selectSourceChoices = useMemo<SelectSourceChainChoice[]>(() => {\n if (!pendingSelectSourceAction) return [];\n const options = (pendingSelectSourceAction.metadata?.options ?? []) as SourceOption[];\n return buildSelectSourceChoices(options);\n }, [pendingSelectSourceAction]);\n\n const selectSourceRecommended = useMemo(() => {\n if (!pendingSelectSourceAction) return null;\n return (pendingSelectSourceAction.metadata?.recommended as {\n chainName: string;\n tokenSymbol: string;\n } | undefined) ?? null;\n }, [pendingSelectSourceAction]);\n\n const selectSourceAvailableBalance = useMemo(() => {\n if (!pendingSelectSourceAction) return 0;\n const options = (pendingSelectSourceAction.metadata?.options ?? []) as SourceOption[];\n const recommended = selectSourceRecommended;\n if (recommended) {\n const match = options.find(\n (opt) => opt.chainName === recommended.chainName && opt.tokenSymbol === recommended.tokenSymbol,\n );\n if (match) return Number(match.rawBalance) / Math.pow(10, match.decimals);\n }\n let max = 0;\n for (const opt of options) {\n const bal = Number(opt.rawBalance) / Math.pow(10, opt.decimals);\n if (bal > max) max = bal;\n }\n return max;\n }, [pendingSelectSourceAction, selectSourceRecommended]);\n\n const handleSelectSourceChainChange = useCallback(\n (chainName: string) => {\n setSelectSourceChainName(chainName);\n const chain = selectSourceChoices.find((c) => c.chainName === chainName);\n if (!chain || chain.tokens.length === 0) return;\n\n const recommendedToken =\n selectSourceRecommended?.chainName === chainName\n ? selectSourceRecommended.tokenSymbol\n : null;\n const hasRecommended =\n !!recommendedToken &&\n chain.tokens.some((t) => t.tokenSymbol === recommendedToken);\n\n setSelectSourceTokenSymbol(\n hasRecommended ? recommendedToken! : chain.tokens[0].tokenSymbol,\n );\n },\n [selectSourceChoices, selectSourceRecommended],\n );\n\n const handleConfirmSelectSource = useCallback(() => {\n authExecutor.resolveSelectSource({\n chainName: selectSourceChainName,\n tokenSymbol: selectSourceTokenSymbol,\n });\n }, [authExecutor, selectSourceChainName, selectSourceTokenSymbol]);\n\n return {\n selectSourceChainName,\n selectSourceTokenSymbol,\n setSelectSourceChainName,\n setSelectSourceTokenSymbol,\n selectSourceChoices,\n selectSourceRecommended,\n selectSourceAvailableBalance,\n handleSelectSourceChainChange,\n handleConfirmSelectSource,\n pendingSelectSourceAction,\n initializedSelectSourceActionRef,\n preSelectSourceStepRef,\n };\n}\n","import { useCallback, type Dispatch, type MutableRefObject } from 'react';\n\nimport type { Transfer } from '../types';\nimport type { PaymentAction } from '../paymentReducer';\nimport type { UseTransferPollingResult } from '../hooks';\nimport { clearMobileFlowState } from '../paymentHelpers';\n\nexport interface MobileFlowRefs {\n mobileSetupFlowRef: MutableRefObject<boolean>;\n handlingMobileReturnRef: MutableRefObject<boolean>;\n setupAccountIdRef: MutableRefObject<string | null>;\n reauthSessionIdRef: MutableRefObject<string | null>;\n reauthTokenRef: MutableRefObject<{ walletId: string; tokenSymbol: string } | null>;\n loadingDataRef: MutableRefObject<boolean>;\n}\n\nexport interface MobileFlowHandlersResult {\n handleAuthorizedMobileReturn: (transfer: Transfer, isSetup: boolean) => Promise<void>;\n handleRetryMobileStatus: () => void;\n}\n\nexport function useMobileFlowHandlers(\n dispatch: Dispatch<PaymentAction>,\n polling: UseTransferPollingResult,\n reloadAccounts: () => Promise<void>,\n pollingTransferIdRef: MutableRefObject<string | null>,\n stateTransfer: Transfer | null,\n refs: MobileFlowRefs,\n): MobileFlowHandlersResult {\n const {\n mobileSetupFlowRef, handlingMobileReturnRef, setupAccountIdRef,\n reauthSessionIdRef, reauthTokenRef, loadingDataRef,\n } = refs;\n\n const handleAuthorizedMobileReturn = useCallback(async (\n authorizedTransfer: Transfer,\n isSetup: boolean,\n ) => {\n if (handlingMobileReturnRef.current) return;\n handlingMobileReturnRef.current = true;\n polling.stopPolling();\n\n if (isSetup) {\n mobileSetupFlowRef.current = false;\n clearMobileFlowState();\n try {\n await reloadAccounts();\n } catch { /* best-effort; data load effect will retry on deposit screen */ }\n loadingDataRef.current = false;\n dispatch({ type: 'MOBILE_SETUP_COMPLETE', transfer: authorizedTransfer });\n return;\n }\n\n mobileSetupFlowRef.current = false;\n clearMobileFlowState();\n dispatch({ type: 'MOBILE_SIGN_READY', transfer: authorizedTransfer });\n }, [polling.stopPolling, reloadAccounts, dispatch]);\n\n const handleRetryMobileStatus = useCallback(() => {\n dispatch({ type: 'SET_ERROR', error: null });\n handlingMobileReturnRef.current = false;\n\n const currentTransfer = polling.transfer ?? stateTransfer;\n if (currentTransfer?.status === 'AUTHORIZED') {\n void handleAuthorizedMobileReturn(currentTransfer, mobileSetupFlowRef.current);\n return;\n }\n\n const transferIdToResume = pollingTransferIdRef.current ?? currentTransfer?.id;\n if (transferIdToResume) {\n polling.startPolling(transferIdToResume);\n }\n }, [handleAuthorizedMobileReturn, polling, stateTransfer, pollingTransferIdRef, dispatch]);\n\n return {\n handleAuthorizedMobileReturn,\n handleRetryMobileStatus,\n };\n}\n","import { useCallback, type Dispatch, type MutableRefObject } from 'react';\n\nimport type { Account, Chain, Provider } from '../types';\nimport type { PaymentAction } from '../paymentReducer';\nimport type { UseAuthorizationExecutorResult } from '../hooks';\nimport * as api from '../api';\nimport { captureException } from '../sentry';\nimport { shouldUseWalletConnector } from '../walletFlow';\nimport { triggerDeeplink } from '../deeplink';\nimport {\n persistMobileFlowState,\n getPreferredDepositWallet,\n} from '../paymentHelpers';\n\nexport interface ProviderHandlersDeps {\n dispatch: Dispatch<PaymentAction>;\n getAccessToken: () => Promise<string | null>;\n apiBaseUrl: string;\n depositAmount: number | null;\n useWalletConnectorProp?: boolean;\n activeCredentialId: string | null;\n selectedAccountId: string | null;\n selectedWalletId: string | null;\n selectedTokenSymbol: string | null;\n chains: Chain[];\n accounts: Account[];\n providers: Provider[];\n authExecutor: UseAuthorizationExecutorResult;\n reloadAccounts: () => Promise<void>;\n onError?: (error: string) => void;\n mobileSetupFlowRef: MutableRefObject<boolean>;\n handlingMobileReturnRef: MutableRefObject<boolean>;\n setupAccountIdRef: MutableRefObject<string | null>;\n reauthSessionIdRef: MutableRefObject<string | null>;\n reauthTokenRef: MutableRefObject<{ walletId: string; tokenSymbol: string } | null>;\n}\n\nexport interface PreparedSession {\n accountId: string;\n sessionId: string;\n uri: string;\n}\n\nexport interface ProviderHandlersResult {\n handlePrepareProvider: (providerId: string) => Promise<PreparedSession | null>;\n handleSelectProvider: (providerId: string, preparedSession?: PreparedSession) => Promise<void>;\n handleContinueConnection: (accountId: string) => void;\n handleSelectAccount: (accountId: string) => void;\n handleIncreaseLimit: () => Promise<void>;\n handleNavigateToTokenPicker: () => void;\n handleSelectAuthorizedToken: (walletId: string, tokenSymbol: string) => void;\n handleAuthorizeToken: (walletId: string, tokenAddress: string, chainId: number, tokenSymbol: string) => Promise<void>;\n}\n\nexport function useProviderHandlers(deps: ProviderHandlersDeps): ProviderHandlersResult {\n const {\n dispatch, getAccessToken, apiBaseUrl, depositAmount,\n useWalletConnectorProp, activeCredentialId, selectedAccountId,\n selectedWalletId, selectedTokenSymbol, chains,\n accounts, providers, authExecutor, reloadAccounts, onError,\n mobileSetupFlowRef, handlingMobileReturnRef, setupAccountIdRef,\n reauthSessionIdRef, reauthTokenRef,\n } = deps;\n\n const handlePrepareProvider = useCallback(async (providerId: string): Promise<PreparedSession | null> => {\n if (!activeCredentialId) {\n dispatch({ type: 'SET_ERROR', error: 'Create or verify a passkey on this device before continuing.' });\n dispatch({ type: 'NAVIGATE', step: 'create-passkey' });\n return null;\n }\n\n const provider = providers.find((p) => p.id === providerId);\n const providerName = provider?.name ?? 'Wallet';\n\n try {\n const token = await getAccessToken();\n if (!token) throw new Error('Not authenticated');\n\n const accountId = crypto.randomUUID();\n const account = await api.createAccount(apiBaseUrl, token, {\n id: accountId,\n name: providerName,\n credentialId: activeCredentialId,\n providerId,\n });\n\n const session = account.authorizationSessions?.[0];\n if (!session) throw new Error('No authorization session returned.');\n\n return { accountId: account.id, sessionId: session.id, uri: session.uri };\n } catch (err) {\n captureException(err);\n const msg = err instanceof Error ? err.message : 'Failed to set up wallet';\n dispatch({ type: 'PAY_ERROR', error: msg, fallbackStep: 'wallet-picker' });\n onError?.(msg);\n return null;\n }\n }, [activeCredentialId, providers, apiBaseUrl, getAccessToken, onError, dispatch]);\n\n const handleSelectProvider = useCallback(async (providerId: string, preparedSession?: PreparedSession) => {\n dispatch({ type: 'SELECT_PROVIDER', providerId });\n\n if (!activeCredentialId) {\n dispatch({ type: 'SET_ERROR', error: 'Create or verify a passkey on this device before continuing.' });\n dispatch({ type: 'NAVIGATE', step: 'create-passkey' });\n return;\n }\n\n const provider = providers.find((p) => p.id === providerId);\n const providerName = provider?.name ?? 'Wallet';\n\n const isMobile = !shouldUseWalletConnector({\n useWalletConnector: useWalletConnectorProp,\n userAgent: typeof navigator === 'undefined' ? undefined : navigator.userAgent,\n });\n\n if (!isMobile) {\n dispatch({ type: 'PAY_STARTED', isSetupRedirect: false });\n dispatch({ type: 'NAVIGATE', step: 'open-wallet' });\n }\n\n try {\n let accountId: string;\n let sessionId: string;\n let sessionUri: string;\n\n if (preparedSession) {\n accountId = preparedSession.accountId;\n sessionId = preparedSession.sessionId;\n sessionUri = preparedSession.uri;\n } else {\n const token = await getAccessToken();\n if (!token) throw new Error('Not authenticated');\n\n const newAccountId = crypto.randomUUID();\n const account = await api.createAccount(apiBaseUrl, token, {\n id: newAccountId,\n name: providerName,\n credentialId: activeCredentialId,\n providerId,\n });\n\n const session = account.authorizationSessions?.[0];\n if (!session) throw new Error('No authorization session returned.');\n\n accountId = account.id;\n sessionId = session.id;\n sessionUri = session.uri;\n }\n\n if (isMobile) {\n handlingMobileReturnRef.current = false;\n mobileSetupFlowRef.current = true;\n setupAccountIdRef.current = accountId;\n persistMobileFlowState({\n accountId,\n sessionId,\n deeplinkUri: sessionUri,\n providerId,\n isSetup: true,\n });\n triggerDeeplink(sessionUri);\n dispatch({ type: 'MOBILE_DEEPLINK_READY', deeplinkUri: sessionUri });\n } else {\n await authExecutor.executeSessionById(sessionId);\n await reloadAccounts();\n dispatch({ type: 'NAVIGATE', step: 'deposit' });\n }\n } catch (err) {\n captureException(err);\n const msg = err instanceof Error ? err.message : 'Failed to set up wallet';\n dispatch({ type: 'PAY_ERROR', error: msg, fallbackStep: 'wallet-picker' });\n onError?.(msg);\n } finally {\n if (!isMobile) {\n dispatch({ type: 'PAY_ENDED' });\n }\n }\n }, [\n activeCredentialId, providers, apiBaseUrl,\n getAccessToken, authExecutor, useWalletConnectorProp,\n reloadAccounts, onError, dispatch,\n mobileSetupFlowRef, handlingMobileReturnRef, setupAccountIdRef,\n ]);\n\n const handleContinueConnection = useCallback(\n (accountId: string) => {\n const acct = accounts.find((a) => a.id === accountId);\n if (!acct) return;\n const matchedProvider = providers.find((p) => p.name === acct.name);\n if (!matchedProvider) return;\n\n const pendingSession = acct.authorizationSessions?.find(\n (s) => s.status === 'PENDING',\n );\n if (pendingSession) {\n handleSelectProvider(matchedProvider.id, {\n accountId: acct.id,\n sessionId: pendingSession.id,\n uri: pendingSession.uri,\n });\n } else {\n handleSelectProvider(matchedProvider.id);\n }\n },\n [accounts, providers, handleSelectProvider],\n );\n\n const handleSelectAccount = useCallback(\n (accountId: string) => {\n const acct = accounts.find((a) => a.id === accountId);\n if (!acct) return;\n const activeWallet = getPreferredDepositWallet(acct, depositAmount ?? 0);\n dispatch({\n type: 'SELECT_ACCOUNT',\n accountId,\n walletId: activeWallet?.id ?? null,\n });\n },\n [accounts, depositAmount, dispatch],\n );\n\n const handleIncreaseLimit = useCallback(async () => {\n if (!selectedAccountId) {\n dispatch({ type: 'SET_ERROR', error: 'No account selected.' });\n return;\n }\n if (!activeCredentialId) {\n dispatch({ type: 'SET_ERROR', error: 'Create or verify a passkey on this device before continuing.' });\n dispatch({ type: 'NAVIGATE', step: 'create-passkey' });\n return;\n }\n\n const acct = accounts.find((a) => a.id === selectedAccountId);\n const matchedProvider = acct\n ? providers.find((p) => p.name === acct.name)\n : undefined;\n if (matchedProvider) {\n dispatch({ type: 'SELECT_PROVIDER', providerId: matchedProvider.id });\n }\n\n dispatch({ type: 'SET_ERROR', error: null });\n dispatch({ type: 'SET_INCREASING_LIMIT', value: true });\n\n try {\n const token = await getAccessToken();\n if (!token) throw new Error('Not authenticated');\n\n const wallet = acct?.wallets.find((w) => w.id === selectedWalletId);\n const source = wallet?.sources.find((s) =>\n selectedTokenSymbol\n ? s.token.symbol === selectedTokenSymbol\n : s.token.status === 'AUTHORIZED',\n );\n const evmChainId = chains.find((c) => c.name === wallet?.chain.name)?.commonId ?? undefined;\n\n const session = await api.createAccountAuthorizationSession(\n apiBaseUrl, token, selectedAccountId, activeCredentialId,\n { tokenAddress: source?.address, chainId: evmChainId },\n );\n\n const isMobile = !shouldUseWalletConnector({\n useWalletConnector: useWalletConnectorProp,\n userAgent: typeof navigator === 'undefined' ? undefined : navigator.userAgent,\n });\n\n if (isMobile) {\n handlingMobileReturnRef.current = false;\n mobileSetupFlowRef.current = true;\n setupAccountIdRef.current = selectedAccountId;\n reauthSessionIdRef.current = session.id;\n reauthTokenRef.current = null;\n persistMobileFlowState({\n accountId: selectedAccountId,\n sessionId: session.id,\n deeplinkUri: session.uri,\n providerId: matchedProvider?.id ?? null,\n isSetup: true,\n isReauthorization: true,\n });\n dispatch({ type: 'MOBILE_DEEPLINK_READY', deeplinkUri: session.uri });\n triggerDeeplink(session.uri);\n } else {\n dispatch({ type: 'NAVIGATE', step: 'open-wallet' });\n await authExecutor.executeSessionById(session.id);\n await reloadAccounts();\n dispatch({ type: 'NAVIGATE', step: 'deposit' });\n }\n } catch (err) {\n captureException(err);\n const msg = err instanceof Error ? err.message : 'Failed to increase limit';\n dispatch({ type: 'SET_ERROR', error: msg });\n onError?.(msg);\n } finally {\n dispatch({ type: 'SET_INCREASING_LIMIT', value: false });\n }\n }, [\n selectedAccountId, selectedWalletId, selectedTokenSymbol, chains,\n activeCredentialId, accounts, providers, apiBaseUrl,\n getAccessToken, authExecutor, useWalletConnectorProp, reloadAccounts, onError, dispatch,\n mobileSetupFlowRef, handlingMobileReturnRef, setupAccountIdRef,\n reauthSessionIdRef, reauthTokenRef,\n ]);\n\n const handleNavigateToTokenPicker = useCallback(() => {\n if (authExecutor.pendingSelectSource) {\n dispatch({ type: 'NAVIGATE', step: 'select-source' });\n } else {\n dispatch({ type: 'NAVIGATE', step: 'token-picker' });\n }\n }, [dispatch, authExecutor.pendingSelectSource]);\n\n const handleSelectAuthorizedToken = useCallback((walletId: string, tokenSymbol: string) => {\n dispatch({ type: 'SELECT_TOKEN', walletId, tokenSymbol });\n }, [dispatch]);\n\n const handleAuthorizeToken = useCallback(async (\n _walletId: string,\n tokenAddress: string,\n chainId: number,\n tokenSymbol: string,\n ) => {\n if (!selectedAccountId) {\n dispatch({ type: 'SET_ERROR', error: 'No account selected.' });\n return;\n }\n if (!activeCredentialId) {\n dispatch({ type: 'SET_ERROR', error: 'Create or verify a passkey on this device before continuing.' });\n dispatch({ type: 'NAVIGATE', step: 'create-passkey' });\n return;\n }\n\n const acct = accounts.find((a) => a.id === selectedAccountId);\n const matchedProvider = acct\n ? providers.find((p) => p.name === acct.name)\n : undefined;\n if (matchedProvider) {\n dispatch({ type: 'SELECT_PROVIDER', providerId: matchedProvider.id });\n }\n\n dispatch({ type: 'SET_ERROR', error: null });\n dispatch({ type: 'SET_INCREASING_LIMIT', value: true });\n\n try {\n const token = await getAccessToken();\n if (!token) throw new Error('Not authenticated');\n\n const session = await api.createAccountAuthorizationSession(\n apiBaseUrl, token, selectedAccountId, activeCredentialId,\n { tokenAddress, chainId },\n );\n\n const isMobile = !shouldUseWalletConnector({\n useWalletConnector: useWalletConnectorProp,\n userAgent: typeof navigator === 'undefined' ? undefined : navigator.userAgent,\n });\n\n if (isMobile) {\n handlingMobileReturnRef.current = false;\n mobileSetupFlowRef.current = true;\n setupAccountIdRef.current = selectedAccountId;\n reauthSessionIdRef.current = session.id;\n reauthTokenRef.current = { walletId: _walletId, tokenSymbol };\n persistMobileFlowState({\n accountId: selectedAccountId,\n sessionId: session.id,\n deeplinkUri: session.uri,\n providerId: matchedProvider?.id ?? null,\n isSetup: true,\n isReauthorization: true,\n reauthorizationToken: { walletId: _walletId, tokenSymbol },\n });\n dispatch({ type: 'MOBILE_DEEPLINK_READY', deeplinkUri: session.uri });\n triggerDeeplink(session.uri);\n } else {\n dispatch({ type: 'NAVIGATE', step: 'open-wallet' });\n await authExecutor.executeSessionById(session.id);\n await reloadAccounts();\n dispatch({ type: 'SELECT_TOKEN', walletId: _walletId, tokenSymbol });\n }\n } catch (err) {\n captureException(err);\n const msg = err instanceof Error ? err.message : 'Failed to authorize token';\n dispatch({ type: 'SET_ERROR', error: msg });\n onError?.(msg);\n } finally {\n dispatch({ type: 'SET_INCREASING_LIMIT', value: false });\n }\n }, [\n selectedAccountId, activeCredentialId, accounts, providers, apiBaseUrl,\n getAccessToken, authExecutor, useWalletConnectorProp, reloadAccounts, onError, dispatch,\n mobileSetupFlowRef, handlingMobileReturnRef, setupAccountIdRef,\n reauthSessionIdRef, reauthTokenRef,\n ]);\n\n return {\n handlePrepareProvider,\n handleSelectProvider,\n handleContinueConnection,\n handleSelectAccount,\n handleIncreaseLimit,\n handleNavigateToTokenPicker,\n handleSelectAuthorizedToken,\n handleAuthorizeToken,\n };\n}\n","import { useCallback, useRef, useState, type Dispatch, type MutableRefObject } from 'react';\n\nimport type { SourceOption } from '../types';\nimport type { PaymentAction } from '../paymentReducer';\nimport type { UseAuthorizationExecutorResult } from '../hooks';\nimport * as api from '../api';\nimport { captureException } from '../sentry';\nimport { buildSelectSourceChoices } from '../paymentHelpers';\n\nexport interface OneTapSetupHandlersDeps {\n dispatch: Dispatch<PaymentAction>;\n getAccessToken: () => Promise<string | null>;\n apiBaseUrl: string;\n authExecutor: UseAuthorizationExecutorResult;\n selectSourceChainName: string;\n selectSourceTokenSymbol: string;\n}\n\nexport interface OneTapSetupHandlersResult {\n handleSetupOneTap: (limit: number) => Promise<void>;\n savingOneTapLimit: boolean;\n oneTapLimitSavedDuringSetupRef: MutableRefObject<boolean>;\n}\n\nexport function useOneTapSetupHandlers(deps: OneTapSetupHandlersDeps): OneTapSetupHandlersResult {\n const {\n dispatch, getAccessToken, apiBaseUrl, authExecutor,\n selectSourceChainName, selectSourceTokenSymbol,\n } = deps;\n\n const [savingOneTapLimit, setSavingOneTapLimit] = useState(false);\n const oneTapLimitSavedDuringSetupRef = useRef(false);\n\n const handleSetupOneTap = useCallback(async (limit: number) => {\n setSavingOneTapLimit(true);\n try {\n const token = await getAccessToken();\n if (!token) throw new Error('Not authenticated');\n await api.updateUserConfig(apiBaseUrl, token, { defaultAllowance: limit });\n\n if (authExecutor.pendingSelectSource) {\n const action = authExecutor.pendingSelectSource;\n const recommended = action.metadata?.recommended as\n | { chainName: string; tokenSymbol: string }\n | undefined;\n\n let chainName: string;\n let tokenSymbol: string;\n\n if (selectSourceChainName && selectSourceTokenSymbol) {\n chainName = selectSourceChainName;\n tokenSymbol = selectSourceTokenSymbol;\n } else {\n const options = (action.metadata?.options ?? []) as SourceOption[];\n const choices = buildSelectSourceChoices(options);\n chainName = recommended?.chainName ?? choices[0]?.chainName ?? 'Base';\n tokenSymbol = recommended?.tokenSymbol ?? choices[0]?.tokens[0]?.tokenSymbol ?? 'USDC';\n }\n\n oneTapLimitSavedDuringSetupRef.current = true;\n authExecutor.resolveSelectSource({ chainName, tokenSymbol });\n dispatch({ type: 'NAVIGATE', step: 'open-wallet' });\n } else if (authExecutor.pendingOneTapSetup) {\n authExecutor.resolveOneTapSetup();\n } else {\n dispatch({ type: 'NAVIGATE', step: 'deposit' });\n }\n } catch (err) {\n captureException(err);\n dispatch({\n type: 'SET_ERROR',\n error: err instanceof Error ? err.message : 'Failed to save One-Tap limit',\n });\n } finally {\n setSavingOneTapLimit(false);\n }\n }, [getAccessToken, apiBaseUrl, authExecutor, dispatch, selectSourceChainName, selectSourceTokenSymbol]);\n\n return {\n handleSetupOneTap,\n savingOneTapLimit,\n oneTapLimitSavedDuringSetupRef,\n };\n}\n","import type { PaymentStep } from './types';\n\nexport type DataLoadAction = 'load' | 'wait' | 'reset';\n\ninterface ResolveDataLoadActionInput {\n authenticated: boolean;\n step: PaymentStep;\n accountsCount: number;\n hasActiveCredential: boolean;\n loading: boolean;\n}\n\nexport function resolveDataLoadAction({\n authenticated,\n step,\n accountsCount,\n hasActiveCredential,\n loading,\n}: ResolveDataLoadActionInput): DataLoadAction {\n if (\n !authenticated ||\n step === 'login' ||\n step === 'otp-verify' ||\n accountsCount > 0 ||\n !hasActiveCredential\n ) {\n return 'reset';\n }\n\n if (loading) {\n return 'wait';\n }\n\n return 'load';\n}\n","import type { Transfer } from './types';\n\nexport const PROCESSING_TIMEOUT_MS = 180000;\n\nfunction resolvePreferredTransfer(\n polledTransfer: Transfer | null,\n localTransfer: Transfer | null,\n): Transfer | null {\n return polledTransfer ?? localTransfer;\n}\n\nexport function getTransferStatus(\n polledTransfer: Transfer | null,\n localTransfer: Transfer | null,\n): string {\n const transfer = resolvePreferredTransfer(polledTransfer, localTransfer);\n return transfer?.status ?? 'UNKNOWN';\n}\n\nexport function getDisplayTransferStatus(\n polledTransfer: Transfer | null,\n localTransfer: Transfer | null,\n): string {\n return getTransferStatus(polledTransfer, localTransfer).toUpperCase();\n}\n\nexport function getTransferIdSuffix(\n polledTransfer: Transfer | null,\n localTransfer: Transfer | null,\n): string {\n const transfer = resolvePreferredTransfer(polledTransfer, localTransfer);\n if (!transfer?.id) return 'n/a';\n return transfer.id.slice(-8);\n}\n\nexport function hasProcessingTimedOut(\n processingStartedAtMs: number | null,\n nowMs: number,\n): boolean {\n if (!processingStartedAtMs) return false;\n return nowMs - processingStartedAtMs >= PROCESSING_TIMEOUT_MS;\n}\n\nconst STATUS_DISPLAY_LABELS: Record<string, string> = {\n CREATED: 'created',\n AUTHORIZED: 'authorized',\n SENDING: 'sending',\n SENT: 'confirming delivery',\n COMPLETED: 'completed',\n FAILED: 'failed',\n};\n\nexport function getStatusDisplayLabel(status: string): string {\n return STATUS_DISPLAY_LABELS[status] ?? status;\n}\n\nexport function buildProcessingTimeoutMessage(status: string): string {\n const label = getStatusDisplayLabel(status);\n return `Payment is taking longer than expected (status: ${label}). Please try again.`;\n}\n","import { useEffect, useRef, type Dispatch, type MutableRefObject } from 'react';\nimport { usePrivy } from '@privy-io/react-auth';\n\nimport type { Account, PaymentStep, Transfer } from '../types';\nimport type { PaymentState, PaymentAction } from '../paymentReducer';\nimport type { UseTransferPollingResult, UseAuthorizationExecutorResult } from '../hooks';\nimport type { SelectSourceChainChoice } from '../paymentHelpers';\nimport * as api from '../api';\nimport { captureException } from '../sentry';\nimport {\n isSafari,\n isInCrossOriginIframe,\n findDevicePasskeyViaPopup,\n resolvePasskeyRpId,\n findDevicePasskey,\n} from '../hooks';\nimport { resolvePostAuthStep, resolveRestoredMobileFlow } from '../mobileFlow';\nimport { resolveDataLoadAction } from '../dataLoading';\nimport {\n ACTIVE_CREDENTIAL_STORAGE_KEY,\n clearMobileFlowState,\n loadMobileFlowState,\n resolveDepositSelection,\n} from '../paymentHelpers';\nimport {\n PROCESSING_TIMEOUT_MS,\n buildProcessingTimeoutMessage,\n getTransferStatus,\n hasProcessingTimedOut,\n} from '../processingStatus';\nimport { shouldUseWalletConnector } from '../walletFlow';\n\nexport interface PaymentEffectsDeps {\n state: PaymentState;\n dispatch: Dispatch<PaymentAction>;\n ready: boolean;\n authenticated: boolean;\n apiBaseUrl: string;\n depositAmount: number | null;\n useWalletConnectorProp?: boolean;\n onComplete?: (transfer: Transfer) => void;\n onError?: (error: string) => void;\n\n polling: UseTransferPollingResult;\n authExecutor: UseAuthorizationExecutorResult;\n reloadAccounts: () => Promise<void>;\n\n // Auth handlers\n activeOtpStatus: string;\n activeOtpErrorMessage: string | null;\n otpCode: string;\n handleVerifyLoginCode: () => Promise<void>;\n setAuthInput: (value: string) => void;\n setOtpCode: (code: string) => void;\n\n // Mobile flow refs\n mobileSetupFlowRef: MutableRefObject<boolean>;\n handlingMobileReturnRef: MutableRefObject<boolean>;\n setupAccountIdRef: MutableRefObject<string | null>;\n reauthSessionIdRef: MutableRefObject<string | null>;\n reauthTokenRef: MutableRefObject<{ walletId: string; tokenSymbol: string } | null>;\n loadingDataRef: MutableRefObject<boolean>;\n pollingTransferIdRef: MutableRefObject<string | null>;\n processingStartedAtRef: MutableRefObject<number | null>;\n checkingPasskeyRef: MutableRefObject<boolean>;\n\n // Source selection\n pendingSelectSourceAction: import('../types').AuthorizationAction | null;\n selectSourceChoices: SelectSourceChainChoice[];\n selectSourceRecommended: { chainName: string; tokenSymbol: string } | null;\n setSelectSourceChainName: (value: string) => void;\n setSelectSourceTokenSymbol: (value: string) => void;\n initializedSelectSourceActionRef: MutableRefObject<string | null>;\n preSelectSourceStepRef: MutableRefObject<PaymentStep | null>;\n\n // One-tap\n oneTapLimitSavedDuringSetupRef: MutableRefObject<boolean>;\n\n // Mobile return handler\n handleAuthorizedMobileReturn: (transfer: Transfer, isSetup: boolean) => Promise<void>;\n}\n\nexport function usePaymentEffects(deps: PaymentEffectsDeps): void {\n const {\n state, dispatch, ready, authenticated, apiBaseUrl, depositAmount,\n useWalletConnectorProp, onComplete, onError,\n polling, authExecutor, reloadAccounts,\n activeOtpStatus, activeOtpErrorMessage, otpCode,\n handleVerifyLoginCode, setAuthInput, setOtpCode,\n mobileSetupFlowRef, handlingMobileReturnRef, setupAccountIdRef,\n reauthSessionIdRef, reauthTokenRef, loadingDataRef,\n pollingTransferIdRef, processingStartedAtRef, checkingPasskeyRef,\n pendingSelectSourceAction, selectSourceChoices, selectSourceRecommended,\n setSelectSourceChainName, setSelectSourceTokenSymbol,\n initializedSelectSourceActionRef, preSelectSourceStepRef,\n oneTapLimitSavedDuringSetupRef,\n handleAuthorizedMobileReturn,\n } = deps;\n\n const { getAccessToken } = usePrivy();\n const onCompleteRef = useRef(onComplete);\n onCompleteRef.current = onComplete;\n const getAccessTokenRef = useRef(getAccessToken);\n getAccessTokenRef.current = getAccessToken;\n const pollingRef = useRef(polling);\n pollingRef.current = polling;\n const handleAuthorizedMobileReturnRef = useRef(handleAuthorizedMobileReturn);\n handleAuthorizedMobileReturnRef.current = handleAuthorizedMobileReturn;\n\n const lastAccountFetchRef = useRef<number>(0);\n\n // Sync deposit amount\n useEffect(() => {\n if (depositAmount != null) {\n dispatch({ type: 'SYNC_AMOUNT', amount: depositAmount.toString() });\n }\n }, [depositAmount, dispatch]);\n\n // OTP error forwarding\n useEffect(() => {\n if (authenticated || state.step !== 'otp-verify') return;\n if (activeOtpErrorMessage) dispatch({ type: 'SET_ERROR', error: activeOtpErrorMessage });\n }, [activeOtpErrorMessage, authenticated, state.step, dispatch]);\n\n // OTP auto-submit\n useEffect(() => {\n if (\n state.step === 'otp-verify' &&\n /^\\d{6}$/.test(otpCode.trim()) &&\n activeOtpStatus === 'awaiting-code-input'\n ) {\n handleVerifyLoginCode();\n }\n }, [otpCode, state.step, activeOtpStatus, handleVerifyLoginCode]);\n\n // Auth state -> passkey check\n useEffect(() => {\n if (!ready || !authenticated) {\n checkingPasskeyRef.current = false;\n return;\n }\n if (state.step !== 'login' && state.step !== 'otp-verify') return;\n if (checkingPasskeyRef.current) return;\n\n checkingPasskeyRef.current = true;\n let cancelled = false;\n dispatch({ type: 'SET_ERROR', error: null });\n setAuthInput('');\n setOtpCode('');\n\n const restoreOrDeposit = async (credId: string, token: string) => {\n const persisted = loadMobileFlowState();\n\n let accts: Account[] = [];\n try {\n accts = await api.fetchAccounts(apiBaseUrl, token, credId);\n if (cancelled) return;\n } catch {\n /* Proceed with empty accounts */\n }\n\n const resolved = resolvePostAuthStep({\n hasPasskey: true,\n accounts: accts,\n persistedMobileFlow: persisted,\n mobileSetupInProgress: false,\n connectingNewAccount: false,\n });\n\n if (resolved.clearPersistedFlow) clearMobileFlowState();\n\n if (resolved.step === 'deposit' && persisted && persisted.isSetup && persisted.transferId) {\n try {\n const existingTransfer = await api.fetchTransfer(apiBaseUrl, token, persisted.transferId);\n if (cancelled) return;\n if (existingTransfer.status === 'AUTHORIZED') {\n await handleAuthorizedMobileReturnRef.current(existingTransfer, true);\n return;\n }\n } catch { /* fall through */ }\n }\n\n if (resolved.step === 'open-wallet' && persisted && persisted.isReauthorization && persisted.sessionId) {\n try {\n const session = await api.fetchAuthorizationSession(apiBaseUrl, persisted.sessionId);\n if (cancelled) return;\n if (session.status === 'AUTHORIZED') {\n clearMobileFlowState();\n dispatch({ type: 'NAVIGATE', step: 'deposit' });\n if (persisted.reauthorizationToken) {\n dispatch({ type: 'SELECT_TOKEN', walletId: persisted.reauthorizationToken.walletId, tokenSymbol: persisted.reauthorizationToken.tokenSymbol });\n }\n return;\n }\n } catch { /* fall through to resume polling */ }\n\n reauthSessionIdRef.current = persisted.sessionId;\n reauthTokenRef.current = persisted.reauthorizationToken ?? null;\n mobileSetupFlowRef.current = true;\n setupAccountIdRef.current = persisted.accountId ?? null;\n dispatch({\n type: 'ENTER_MOBILE_FLOW',\n deeplinkUri: persisted.deeplinkUri,\n providerId: persisted.providerId,\n });\n return;\n }\n\n if (resolved.step === 'open-wallet' && persisted && persisted.accountId && !persisted.transferId) {\n if (persisted.sessionId) {\n try {\n const session = await api.fetchAuthorizationSession(apiBaseUrl, persisted.sessionId);\n if (cancelled) return;\n if (session.status === 'AUTHORIZED') {\n clearMobileFlowState();\n dispatch({ type: 'NAVIGATE', step: 'deposit' });\n return;\n }\n } catch { /* fall through to re-enter mobile flow */ }\n }\n mobileSetupFlowRef.current = true;\n setupAccountIdRef.current = persisted.accountId;\n dispatch({\n type: 'ENTER_MOBILE_FLOW',\n deeplinkUri: persisted.deeplinkUri,\n providerId: persisted.providerId,\n });\n return;\n }\n\n if (resolved.step === 'open-wallet' && persisted && persisted.transferId) {\n try {\n const existingTransfer = await api.fetchTransfer(apiBaseUrl, token, persisted.transferId);\n if (cancelled) return;\n\n const mobileResolution = resolveRestoredMobileFlow(\n existingTransfer.status,\n persisted.isSetup,\n );\n\n if (mobileResolution.kind === 'resume-setup-deposit') {\n await handleAuthorizedMobileReturnRef.current(existingTransfer, true);\n return;\n }\n if (mobileResolution.kind === 'resume-confirm-sign') {\n await handleAuthorizedMobileReturnRef.current(existingTransfer, false);\n return;\n }\n if (mobileResolution.kind === 'resume-success') {\n clearMobileFlowState();\n dispatch({ type: 'MOBILE_RESUME_SUCCESS', transfer: existingTransfer });\n onCompleteRef.current?.(existingTransfer);\n return;\n }\n if (mobileResolution.kind === 'resume-failed') {\n clearMobileFlowState();\n dispatch({ type: 'MOBILE_RESUME_FAILED', transfer: existingTransfer });\n return;\n }\n if (mobileResolution.kind === 'resume-processing') {\n clearMobileFlowState();\n dispatch({ type: 'MOBILE_RESUME_PROCESSING', transfer: existingTransfer });\n pollingRef.current.startPolling(existingTransfer.id);\n return;\n }\n if (mobileResolution.kind === 'resume-stale-setup') {\n clearMobileFlowState();\n if (!cancelled) dispatch({ type: 'NAVIGATE', step: 'wallet-picker' });\n return;\n }\n } catch (err) {\n if (cancelled) return;\n dispatch({\n type: 'ENTER_MOBILE_FLOW',\n deeplinkUri: persisted.deeplinkUri,\n providerId: persisted.providerId,\n error: err instanceof Error\n ? err.message\n : 'Unable to refresh wallet authorization status.',\n });\n pollingTransferIdRef.current = persisted.transferId ?? null;\n mobileSetupFlowRef.current = persisted.isSetup;\n setupAccountIdRef.current = persisted.accountId ?? null;\n if (persisted.transferId) pollingRef.current.startPolling(persisted.transferId);\n return;\n }\n\n dispatch({\n type: 'ENTER_MOBILE_FLOW',\n deeplinkUri: persisted.deeplinkUri,\n providerId: persisted.providerId,\n });\n pollingTransferIdRef.current = persisted.transferId ?? null;\n mobileSetupFlowRef.current = persisted.isSetup;\n setupAccountIdRef.current = persisted.accountId ?? null;\n if (persisted.transferId) pollingRef.current.startPolling(persisted.transferId);\n return;\n }\n\n dispatch({ type: 'NAVIGATE', step: resolved.step });\n };\n\n const checkPasskey = async () => {\n try {\n let token: string | null = null;\n for (let attempt = 0; attempt < 3; attempt++) {\n token = await getAccessTokenRef.current();\n if (token || cancelled) break;\n await new Promise((r) => setTimeout(r, 1000));\n }\n if (!token) {\n if (!cancelled) dispatch({ type: 'NAVIGATE', step: 'create-passkey' });\n return;\n }\n if (cancelled) return;\n\n const { config } = await api.fetchUserConfig(apiBaseUrl, token);\n if (cancelled) return;\n\n const allPasskeys = config.passkeys ?? (config.passkey ? [config.passkey] : []);\n dispatch({\n type: 'PASSKEY_CONFIG_LOADED',\n knownIds: allPasskeys.map((p) => p.credentialId),\n oneTapLimit: config.defaultAllowance ?? undefined,\n });\n\n if (allPasskeys.length === 0) {\n dispatch({ type: 'NAVIGATE', step: 'create-passkey' });\n return;\n }\n\n if (\n state.activeCredentialId &&\n allPasskeys.some((p) => p.credentialId === state.activeCredentialId)\n ) {\n await restoreOrDeposit(state.activeCredentialId, token);\n return;\n }\n\n if (cancelled) return;\n\n const credentialIds = allPasskeys.map((p) => p.credentialId);\n let matched: string | null = null;\n\n if (isSafari() && isInCrossOriginIframe()) {\n matched = await findDevicePasskeyViaPopup({\n credentialIds,\n rpId: resolvePasskeyRpId(),\n authToken: token ?? undefined,\n apiBaseUrl,\n });\n } else {\n matched = await findDevicePasskey(credentialIds);\n }\n if (cancelled) return;\n\n if (matched) {\n dispatch({ type: 'PASSKEY_ACTIVATED', credentialId: matched });\n window.localStorage.setItem(ACTIVE_CREDENTIAL_STORAGE_KEY, matched);\n api.reportPasskeyActivity(apiBaseUrl, token, matched).catch(() => {});\n await restoreOrDeposit(matched, token);\n return;\n }\n\n dispatch({ type: 'NAVIGATE', step: 'create-passkey' });\n } catch {\n if (!cancelled) dispatch({ type: 'NAVIGATE', step: 'create-passkey' });\n }\n };\n\n checkPasskey();\n return () => {\n cancelled = true;\n checkingPasskeyRef.current = false;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ready, authenticated, state.step, apiBaseUrl, state.activeCredentialId]);\n\n // Load providers + accounts + chains when authenticated\n useEffect(() => {\n const loadAction = resolveDataLoadAction({\n authenticated,\n step: state.step,\n accountsCount: state.accounts.length,\n hasActiveCredential: !!state.activeCredentialId,\n loading: loadingDataRef.current,\n });\n\n if (loadAction === 'reset') {\n loadingDataRef.current = false;\n dispatch({ type: 'DATA_LOAD_END' });\n return;\n }\n if (loadAction === 'wait') return;\n\n const credentialId = state.activeCredentialId;\n if (!credentialId) {\n loadingDataRef.current = false;\n dispatch({ type: 'DATA_LOAD_END' });\n return;\n }\n\n let cancelled = false;\n loadingDataRef.current = true;\n\n const load = async () => {\n dispatch({ type: 'DATA_LOAD_START' });\n try {\n const token = await getAccessTokenRef.current();\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, credentialId),\n api.fetchChains(apiBaseUrl, token),\n ]);\n if (cancelled) return;\n\n const parsedAmt = depositAmount != null ? depositAmount : 0;\n const defaults = resolveDepositSelection(accts, parsedAmt, state.selectedAccountId);\n\n const persisted = loadMobileFlowState();\n const resolved = resolvePostAuthStep({\n hasPasskey: !!state.activeCredentialId,\n accounts: accts,\n persistedMobileFlow: persisted,\n mobileSetupInProgress: mobileSetupFlowRef.current,\n connectingNewAccount: false,\n });\n\n const correctableSteps: PaymentStep[] = ['deposit', 'wallet-picker', 'open-wallet'];\n dispatch({\n type: 'DATA_LOADED',\n providers: prov,\n accounts: accts,\n chains: chn,\n defaults,\n resolvedStep:\n correctableSteps.includes(state.step) && !state.creatingTransfer\n ? resolved.step\n : undefined,\n clearMobileState: resolved.clearPersistedFlow,\n });\n\n if (resolved.clearPersistedFlow) clearMobileFlowState();\n } catch (err) {\n if (!cancelled) {\n captureException(err);\n dispatch({\n type: 'SET_ERROR',\n error: err instanceof Error ? err.message : 'Failed to load data',\n });\n }\n } finally {\n if (!cancelled) {\n loadingDataRef.current = false;\n dispatch({ type: 'DATA_LOAD_END' });\n }\n }\n };\n load();\n return () => {\n cancelled = true;\n loadingDataRef.current = false;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n authenticated, state.step, state.accounts.length, apiBaseUrl,\n state.activeCredentialId, state.selectedAccountId, depositAmount,\n ]);\n\n // Poll completion\n useEffect(() => {\n if (!polling.transfer) return;\n if (polling.transfer.status === 'COMPLETED') {\n clearMobileFlowState();\n dispatch({ type: 'TRANSFER_COMPLETED', transfer: polling.transfer });\n onComplete?.(polling.transfer);\n reloadAccounts();\n } else if (polling.transfer.status === 'FAILED') {\n clearMobileFlowState();\n dispatch({ type: 'TRANSFER_FAILED', transfer: polling.transfer, error: 'Transfer failed.' });\n }\n }, [polling.transfer, onComplete, dispatch, reloadAccounts]);\n\n // Redirect to setup-complete when guest-to-setup flow finishes\n useEffect(() => {\n if (state.step === 'deposit' && state.cameFromGuestSetup && !state.loadingData) {\n dispatch({ type: 'SETUP_FLOW_COMPLETE' });\n }\n }, [state.step, state.cameFromGuestSetup, state.loadingData, dispatch]);\n\n // Re-fetch accounts when returning to the deposit screen with stale data\n useEffect(() => {\n if (\n state.step === 'deposit' &&\n state.accounts.length > 0 &&\n authenticated &&\n Date.now() - lastAccountFetchRef.current > 15_000\n ) {\n lastAccountFetchRef.current = Date.now();\n reloadAccounts();\n }\n }, [state.step, state.accounts.length, authenticated, reloadAccounts]);\n\n // Processing timeout\n useEffect(() => {\n if (state.step !== 'processing') {\n processingStartedAtRef.current = null;\n return;\n }\n if (!processingStartedAtRef.current) {\n processingStartedAtRef.current = Date.now();\n }\n const elapsedMs = Date.now() - processingStartedAtRef.current;\n const remainingMs = PROCESSING_TIMEOUT_MS - elapsedMs;\n\n const handleTimeout = () => {\n if (!hasProcessingTimedOut(processingStartedAtRef.current, Date.now())) return;\n const status = getTransferStatus(polling.transfer, state.transfer);\n const msg = buildProcessingTimeoutMessage(status);\n captureException(new Error(msg));\n polling.stopPolling();\n dispatch({ type: 'PROCESSING_TIMEOUT', error: msg });\n onError?.(msg);\n };\n\n if (remainingMs <= 0) {\n handleTimeout();\n return;\n }\n\n const timeoutId = window.setTimeout(handleTimeout, remainingMs);\n return () => window.clearTimeout(timeoutId);\n }, [state.step, polling.transfer, state.transfer, polling.stopPolling, onError, dispatch, processingStartedAtRef]);\n\n // Mobile flow: handle transfer reaching AUTHORIZED\n useEffect(() => {\n if (!state.mobileFlow) {\n handlingMobileReturnRef.current = false;\n return;\n }\n if (handlingMobileReturnRef.current) return;\n const polledTransfer = polling.transfer;\n if (!polledTransfer || polledTransfer.status !== 'AUTHORIZED') return;\n void handleAuthorizedMobileReturn(polledTransfer, mobileSetupFlowRef.current);\n }, [state.mobileFlow, polling.transfer, handleAuthorizedMobileReturn, handlingMobileReturnRef, mobileSetupFlowRef]);\n\n // Mobile setup flow: poll until the setup/reauthorization completes\n useEffect(() => {\n if (!state.mobileFlow || !mobileSetupFlowRef.current) return;\n if (state.step !== 'open-wallet') return;\n if (!state.activeCredentialId || !setupAccountIdRef.current) return;\n\n const accountId = setupAccountIdRef.current;\n const credentialId = state.activeCredentialId;\n const isReauth = !!reauthSessionIdRef.current;\n const sessionId = reauthSessionIdRef.current;\n const tokenSelection = reauthTokenRef.current;\n const persistedFlow = loadMobileFlowState();\n const setupSessionId = !isReauth ? persistedFlow?.sessionId : undefined;\n let cancelled = false;\n const POLL_INTERVAL_MS = 3000;\n\n const pollReauthorization = async () => {\n try {\n if (!sessionId || cancelled) return;\n const session = await api.fetchAuthorizationSession(apiBaseUrl, sessionId);\n if (cancelled) return;\n if (session.status === 'AUTHORIZED') {\n cancelled = true;\n mobileSetupFlowRef.current = false;\n setupAccountIdRef.current = null;\n reauthSessionIdRef.current = null;\n reauthTokenRef.current = null;\n clearMobileFlowState();\n try {\n await reloadAccounts();\n } catch { /* best-effort */ }\n dispatch({ type: 'MOBILE_SETUP_COMPLETE' });\n if (tokenSelection) {\n dispatch({ type: 'SELECT_TOKEN', walletId: tokenSelection.walletId, tokenSymbol: tokenSelection.tokenSymbol });\n }\n }\n } catch { /* silently retry */ }\n };\n\n const completeSetup = async () => {\n cancelled = true;\n mobileSetupFlowRef.current = false;\n setupAccountIdRef.current = null;\n clearMobileFlowState();\n try {\n await reloadAccounts();\n } catch { /* best-effort */ }\n dispatch({ type: 'MOBILE_SETUP_COMPLETE' });\n };\n\n const pollWalletActive = async () => {\n try {\n const token = await getAccessTokenRef.current();\n if (!token || cancelled) return;\n const acct = await api.fetchAccount(apiBaseUrl, token, accountId, credentialId);\n if (cancelled) return;\n const hasActive = acct.wallets.some((w) => w.status === 'ACTIVE');\n if (hasActive) {\n await completeSetup();\n return;\n }\n\n if (setupSessionId) {\n try {\n const session = await api.fetchAuthorizationSession(apiBaseUrl, setupSessionId);\n if (cancelled) return;\n if (session.status === 'AUTHORIZED') {\n await completeSetup();\n }\n } catch { /* rely on wallet status check next cycle */ }\n }\n } catch { /* silently retry */ }\n };\n\n const poll = isReauth ? pollReauthorization : pollWalletActive;\n\n poll();\n const intervalId = window.setInterval(poll, POLL_INTERVAL_MS);\n\n const handleVisibility = () => {\n if (document.visibilityState === 'visible' && !cancelled) {\n poll();\n }\n };\n document.addEventListener('visibilitychange', handleVisibility);\n\n return () => {\n cancelled = true;\n window.clearInterval(intervalId);\n document.removeEventListener('visibilitychange', handleVisibility);\n };\n }, [state.mobileFlow, state.step, state.activeCredentialId, apiBaseUrl, reloadAccounts,\n dispatch, mobileSetupFlowRef, setupAccountIdRef, reauthSessionIdRef, reauthTokenRef]);\n\n // Resume polling on visibility change (mobile)\n useEffect(() => {\n if (!state.mobileFlow) return;\n if (handlingMobileReturnRef.current) return;\n const transferIdToResume = pollingTransferIdRef.current ?? state.transfer?.id;\n if (!transferIdToResume) return;\n if (!polling.isPolling) polling.startPolling(transferIdToResume);\n\n const handleVisibility = () => {\n if (document.visibilityState === 'visible' && !handlingMobileReturnRef.current) {\n polling.startPolling(transferIdToResume);\n }\n };\n document.addEventListener('visibilitychange', handleVisibility);\n return () => document.removeEventListener('visibilitychange', handleVisibility);\n }, [state.mobileFlow, state.transfer?.id, polling.isPolling, polling.startPolling,\n handlingMobileReturnRef, pollingTransferIdRef]);\n\n // Select source action handling\n useEffect(() => {\n if (!pendingSelectSourceAction) {\n initializedSelectSourceActionRef.current = null;\n setSelectSourceChainName('');\n setSelectSourceTokenSymbol('');\n return;\n }\n if (initializedSelectSourceActionRef.current === pendingSelectSourceAction.id) return;\n\n const hasRecommended =\n !!selectSourceRecommended &&\n selectSourceChoices.some(\n (chain) =>\n chain.chainName === selectSourceRecommended.chainName &&\n chain.tokens.some((t) => t.tokenSymbol === selectSourceRecommended.tokenSymbol),\n );\n\n if (hasRecommended && selectSourceRecommended) {\n setSelectSourceChainName(selectSourceRecommended.chainName);\n setSelectSourceTokenSymbol(selectSourceRecommended.tokenSymbol);\n } else if (selectSourceChoices.length > 0 && selectSourceChoices[0].tokens.length > 0) {\n setSelectSourceChainName(selectSourceChoices[0].chainName);\n setSelectSourceTokenSymbol(selectSourceChoices[0].tokens[0].tokenSymbol);\n } else {\n setSelectSourceChainName('Base');\n setSelectSourceTokenSymbol('USDC');\n }\n\n initializedSelectSourceActionRef.current = pendingSelectSourceAction.id;\n }, [pendingSelectSourceAction, selectSourceChoices, selectSourceRecommended,\n setSelectSourceChainName, setSelectSourceTokenSymbol, initializedSelectSourceActionRef]);\n\n // Transition to/from the select-source screen\n useEffect(() => {\n if (pendingSelectSourceAction && (state.step === 'processing' || state.step === 'open-wallet' || state.step === 'setup-status')) {\n const isDesktop = shouldUseWalletConnector({\n useWalletConnector: useWalletConnectorProp,\n userAgent: typeof navigator === 'undefined' ? undefined : navigator.userAgent,\n });\n\n if (isDesktop && (state.step === 'setup-status' || state.step === 'open-wallet')) {\n preSelectSourceStepRef.current = state.step;\n dispatch({ type: 'NAVIGATE', step: 'setup' });\n return;\n }\n\n preSelectSourceStepRef.current = state.step;\n dispatch({ type: 'NAVIGATE', step: 'select-source' });\n } else if (!pendingSelectSourceAction && state.step === 'select-source') {\n dispatch({ type: 'NAVIGATE', step: preSelectSourceStepRef.current ?? 'processing' });\n preSelectSourceStepRef.current = null;\n }\n }, [pendingSelectSourceAction, state.step, useWalletConnectorProp, dispatch, preSelectSourceStepRef, authExecutor]);\n\n // One-Tap setup pause: navigate to/from setup screen during authorization\n const pendingOneTapSetupAction = authExecutor.pendingOneTapSetup;\n const preOneTapSetupStepRef = useRef<PaymentStep | null>(null);\n\n useEffect(() => {\n if (pendingOneTapSetupAction && (state.step === 'setup-status' || state.step === 'open-wallet')) {\n if (oneTapLimitSavedDuringSetupRef.current) {\n oneTapLimitSavedDuringSetupRef.current = false;\n authExecutor.resolveOneTapSetup();\n } else {\n preOneTapSetupStepRef.current = state.step;\n reloadAccounts().then(() => {\n dispatch({ type: 'NAVIGATE', step: 'setup' });\n });\n }\n } else if (!pendingOneTapSetupAction && state.step === 'setup' && preOneTapSetupStepRef.current) {\n dispatch({ type: 'NAVIGATE', step: preOneTapSetupStepRef.current });\n preOneTapSetupStepRef.current = null;\n }\n }, [pendingOneTapSetupAction, state.step, reloadAccounts, authExecutor, dispatch, oneTapLimitSavedDuringSetupRef]);\n}\n","import { useCallback, useRef, type Dispatch } from 'react';\nimport { useAccount, useConnect, useSendTransaction, useSwitchChain, useConfig } from 'wagmi';\nimport { readContract, waitForTransactionReceipt } from '@wagmi/core';\nimport type { PaymentAction } from '../paymentReducer';\nimport type { Destination, GuestSourceChain, MerchantAuthorization } from '../types';\nimport * as api from '../api';\n\nexport interface GuestTransferHandlersDeps {\n dispatch: Dispatch<PaymentAction>;\n apiBaseUrl: string;\n destination: Destination;\n depositAmount: number | null;\n idempotencyKey?: string;\n merchantAuthorization?: MerchantAuthorization;\n onComplete?: (transfer: { id: string; status: string }) => void;\n onError?: (error: string) => void;\n sourceChainId?: number;\n sourceToken?: string;\n destinationChainId?: number;\n sourceTokenDecimals?: number | null;\n guestSourceOptions: GuestSourceChain[];\n}\n\nexport interface GuestTransferHandlersResult {\n handleGuestConnect: () => void;\n handleGuestConfirm: () => void;\n handleGuestRetry: () => void;\n guestPollingRef: React.MutableRefObject<boolean>;\n}\n\nconst CHAIN_NAMES: Record<number, string> = {\n 1: 'Ethereum',\n 10: 'Optimism',\n 56: 'BNB Chain',\n 137: 'Polygon',\n 8453: 'Base',\n 42161: 'Arbitrum',\n 43114: 'Avalanche',\n};\n\nfunction getChainDisplayName(chainId: number): string {\n return CHAIN_NAMES[chainId] ?? `Chain ${chainId}`;\n}\n\nconst ERC20_BALANCE_OF_ABI = [\n {\n inputs: [{ name: 'account', type: 'address' }],\n name: 'balanceOf',\n outputs: [{ name: '', type: 'uint256' }],\n stateMutability: 'view',\n type: 'function',\n },\n] as const;\n\nconst GUEST_POLL_BASE_INTERVAL_MS = 2000;\nconst GUEST_POLL_SLOW_INTERVAL_MS = 5000;\nconst GUEST_POLL_SLOWEST_INTERVAL_MS = 10000;\nconst GUEST_POLL_SLOW_AFTER = 15;\nconst GUEST_POLL_SLOWEST_AFTER = 60;\nconst GUEST_POLL_MAX_ATTEMPTS = 180;\n\nexport function useGuestTransferHandlers(\n deps: GuestTransferHandlersDeps,\n): GuestTransferHandlersResult {\n const {\n dispatch,\n apiBaseUrl,\n destination,\n depositAmount,\n idempotencyKey,\n merchantAuthorization,\n onComplete,\n onError,\n sourceChainId,\n sourceToken,\n destinationChainId,\n sourceTokenDecimals,\n guestSourceOptions,\n } = deps;\n\n const wagmiConfig = useConfig();\n const { connectAsync, connectors } = useConnect();\n const { address, chainId: connectedChainId, isConnected } = useAccount();\n const { sendTransactionAsync } = useSendTransaction();\n const { switchChainAsync } = useSwitchChain();\n const guestPollingRef = useRef(false);\n const flowInProgressRef = useRef(false);\n\n const fetchTokenBalances = useCallback(async (\n walletAddress: string,\n options: GuestSourceChain[],\n ): Promise<Record<string, string>> => {\n const balances: Record<string, string> = {};\n const reads: Promise<void>[] = [];\n\n for (const chain of options) {\n for (const token of chain.tokens) {\n const key = `${chain.chainId}:${token.address}`;\n reads.push(\n readContract(wagmiConfig, {\n address: token.address as `0x${string}`,\n abi: ERC20_BALANCE_OF_ABI,\n functionName: 'balanceOf',\n args: [walletAddress as `0x${string}`],\n chainId: chain.chainId,\n }).then((raw) => {\n const value = Number(raw) / 10 ** token.decimals;\n balances[key] = value.toFixed(token.decimals > 6 ? 6 : token.decimals);\n }).catch(() => {\n balances[key] = '0';\n }),\n );\n }\n }\n\n await Promise.allSettled(reads);\n return balances;\n }, [wagmiConfig]);\n\n const connectWallet = useCallback(async () => {\n dispatch({ type: 'NAVIGATE', step: 'guest-connecting' });\n\n let walletAddress = address;\n let walletChainId = connectedChainId;\n\n if (!isConnected || !walletAddress) {\n const injectedConnector = connectors.find((c) => c.id === 'injected' || c.id === 'metaMask');\n const wcConnector = connectors.find((c) => c.id === 'walletConnect');\n const connector = injectedConnector ?? wcConnector;\n\n if (!connector) {\n dispatch({ type: 'GUEST_FLOW_ERROR', error: 'No wallet found. Please install a browser wallet.' });\n return;\n }\n\n const result = await connectAsync({ connector });\n walletAddress = result.accounts[0];\n walletChainId = result.chainId;\n }\n\n if (!walletAddress) {\n dispatch({ type: 'GUEST_FLOW_ERROR', error: 'Failed to connect wallet.' });\n return;\n }\n\n dispatch({ type: 'GUEST_WALLET_CONNECTED', address: walletAddress, chainId: walletChainId ?? 1 });\n dispatch({ type: 'GUEST_BALANCES_LOADING' });\n\n const balances = await fetchTokenBalances(walletAddress, guestSourceOptions);\n dispatch({ type: 'GUEST_BALANCES_LOADED', balances });\n }, [\n address, connectAsync, connectedChainId, connectors, dispatch,\n fetchTokenBalances, guestSourceOptions, isConnected,\n ]);\n\n const handleGuestConnect = useCallback(() => {\n void connectWallet().catch((err) => {\n const message = err instanceof Error ? err.message : 'Failed to connect wallet.';\n if (message.includes('rejected') || message.includes('denied') || message.includes('User rejected')) {\n dispatch({ type: 'GUEST_FLOW_ERROR', error: 'Connection was rejected.' });\n } else {\n dispatch({ type: 'GUEST_FLOW_ERROR', error: message });\n }\n });\n }, [connectWallet, dispatch]);\n\n const pollGuestTransfer = useCallback(async (transferId: string) => {\n if (guestPollingRef.current) return;\n guestPollingRef.current = true;\n\n try {\n for (let i = 0; i < GUEST_POLL_MAX_ATTEMPTS; i++) {\n let interval = GUEST_POLL_BASE_INTERVAL_MS;\n if (i >= GUEST_POLL_SLOWEST_AFTER) interval = GUEST_POLL_SLOWEST_INTERVAL_MS;\n else if (i >= GUEST_POLL_SLOW_AFTER) interval = GUEST_POLL_SLOW_INTERVAL_MS;\n\n await new Promise((r) => setTimeout(r, interval));\n if (!guestPollingRef.current) return;\n\n try {\n const result = await api.fetchGuestTransfer(apiBaseUrl, transferId);\n\n if (result.status === 'COMPLETED') {\n dispatch({ type: 'GUEST_TRANSFER_COMPLETED', transferId });\n onComplete?.(result);\n return;\n }\n\n if (result.status === 'FAILED') {\n dispatch({ type: 'GUEST_TRANSFER_FAILED', error: 'Transfer failed.' });\n onError?.('Transfer failed.');\n return;\n }\n } catch {\n // Network error during poll — continue with backoff\n }\n }\n\n dispatch({ type: 'GUEST_TRANSFER_FAILED', error: 'Transfer timed out.' });\n onError?.('Transfer timed out.');\n } finally {\n guestPollingRef.current = false;\n }\n }, [apiBaseUrl, dispatch, onComplete, onError]);\n\n const executeGuestTransfer = useCallback(async () => {\n if (flowInProgressRef.current) return;\n flowInProgressRef.current = true;\n\n if (!merchantAuthorization) {\n dispatch({ type: 'GUEST_FLOW_ERROR', error: 'Missing merchant authorization.' });\n flowInProgressRef.current = false;\n return;\n }\n\n const walletAddress = address;\n if (!walletAddress) {\n dispatch({ type: 'GUEST_FLOW_ERROR', error: 'Wallet not connected.' });\n flowInProgressRef.current = false;\n return;\n }\n\n const amount = depositAmount ?? 5;\n const decimals = sourceTokenDecimals ?? 6;\n\n try {\n dispatch({ type: 'NAVIGATE', step: 'guest-fetching-quote' });\n\n const effectiveSourceChainId = sourceChainId ?? connectedChainId ?? 8453;\n const effectiveDestChainId = destinationChainId ?? 8453;\n const effectiveSourceToken = sourceToken ?? destination.token.address;\n\n const amountSmallestUnit = String(Math.round(amount * 10 ** decimals));\n\n const quote = await api.fetchGuestQuote(apiBaseUrl, {\n merchantAuthorization,\n sourceAddress: walletAddress,\n sourceChainId: effectiveSourceChainId,\n sourceToken: effectiveSourceToken,\n destinationChainId: effectiveDestChainId,\n destinationAddress: destination.address,\n destinationToken: destination.token.address,\n amount: amountSmallestUnit,\n });\n\n dispatch({ type: 'GUEST_QUOTE_RECEIVED', quote });\n\n if (quote.steps.length === 0) {\n dispatch({ type: 'GUEST_FLOW_ERROR', error: 'No bridge route available.' });\n flowInProgressRef.current = false;\n return;\n }\n\n const targetChainId = quote.steps[0].chainId;\n if (connectedChainId !== targetChainId) {\n try {\n await switchChainAsync({ chainId: targetChainId });\n } catch {\n const chainName = getChainDisplayName(targetChainId);\n dispatch({ type: 'GUEST_FLOW_ERROR', error: `Please switch your wallet to ${chainName}.` });\n flowInProgressRef.current = false;\n return;\n }\n }\n\n // Balance validation\n if (effectiveSourceToken && effectiveSourceToken !== '0x0000000000000000000000000000000000000000') {\n try {\n const rawBal = await readContract(wagmiConfig, {\n address: effectiveSourceToken as `0x${string}`,\n abi: ERC20_BALANCE_OF_ABI,\n functionName: 'balanceOf',\n args: [walletAddress as `0x${string}`],\n chainId: targetChainId,\n });\n const balance = Number(rawBal) / 10 ** decimals;\n if (balance < amount) {\n dispatch({\n type: 'GUEST_FLOW_ERROR',\n error: `Insufficient balance. You have ${balance.toFixed(2)} but need ${amount.toFixed(2)}.`,\n });\n flowInProgressRef.current = false;\n return;\n }\n } catch {\n // If balance read fails, proceed and let the tx revert naturally\n }\n }\n\n let lastTxHash: string | undefined;\n for (let i = 0; i < quote.steps.length; i++) {\n const step = quote.steps[i];\n const isLastStep = i === quote.steps.length - 1;\n\n if (!isLastStep) {\n dispatch({ type: 'GUEST_APPROVING' });\n }\n\n const txHash = await sendTransactionAsync({\n to: step.to as `0x${string}`,\n data: (step.data || '0x') as `0x${string}`,\n value: step.value ? BigInt(step.value) : 0n,\n chainId: step.chainId,\n });\n\n if (!isLastStep) {\n await waitForTransactionReceipt(wagmiConfig, {\n hash: txHash,\n chainId: step.chainId,\n });\n }\n\n lastTxHash = txHash;\n }\n\n if (!lastTxHash) {\n dispatch({ type: 'GUEST_FLOW_ERROR', error: 'Transaction was not submitted.' });\n flowInProgressRef.current = false;\n return;\n }\n\n dispatch({ type: 'GUEST_DEPOSIT_SIGNED', txHash: lastTxHash });\n\n const transferIdForRequest = idempotencyKey ?? `${quote.requestId}-${lastTxHash}`.slice(0, 36);\n const stableId = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(transferIdForRequest)\n ? transferIdForRequest\n : crypto.randomUUID();\n\n const transferResult = await api.createGuestTransfer(apiBaseUrl, {\n id: stableId,\n merchantAuthorization,\n requestId: quote.requestId,\n originTxHash: lastTxHash,\n sourceChainId: effectiveSourceChainId,\n sourceAddress: walletAddress,\n destinationChainId: effectiveDestChainId,\n destinationAddress: destination.address,\n destinationToken: destination.token.address,\n amount: { amount, currency: 'USD' },\n });\n\n dispatch({ type: 'GUEST_TRANSFER_SUBMITTED', transferId: transferResult.id });\n\n await pollGuestTransfer(transferResult.id);\n\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Transaction failed.';\n if (message.includes('rejected') || message.includes('denied') || message.includes('User rejected')) {\n dispatch({ type: 'GUEST_FLOW_ERROR', error: 'Transaction was rejected.' });\n } else {\n dispatch({ type: 'GUEST_FLOW_ERROR', error: message });\n }\n onError?.(message);\n } finally {\n flowInProgressRef.current = false;\n }\n }, [\n address, apiBaseUrl, connectedChainId, depositAmount, destination,\n destinationChainId, dispatch, idempotencyKey, merchantAuthorization,\n onError, pollGuestTransfer, sendTransactionAsync, sourceChainId,\n sourceToken, sourceTokenDecimals, switchChainAsync, wagmiConfig,\n ]);\n\n const handleGuestConfirm = useCallback(() => {\n if (flowInProgressRef.current) return;\n void executeGuestTransfer();\n }, [executeGuestTransfer]);\n\n const handleGuestRetry = useCallback(() => {\n dispatch({ type: 'SET_ERROR', error: null });\n dispatch({ type: 'NAVIGATE', step: 'guest-deposit' });\n }, [dispatch]);\n\n return {\n handleGuestConnect,\n handleGuestConfirm,\n handleGuestRetry,\n guestPollingRef,\n };\n}\n","// ── Swype Payment Widget ───────────────────────────────────────────────\n//\n// v6 flow: Login -> OTP -> Passkey -> Wallet Picker -> Setup -> Deposit -> Success\n//\n// This file is the composition root. It wires together focused hooks\n// that each own a single concern (auth, passkeys, transfers, etc.)\n// and passes their outputs to StepRenderer.\n\nimport { useCallback, useEffect, useMemo, useReducer, useRef } from 'react';\nimport { useLoginWithOAuth, usePrivy } from '@privy-io/react-auth';\nimport { useDisconnect } from 'wagmi';\n\nimport type { Destination, PaymentStep, Transfer } from './types';\nimport * as api from './api';\nimport { useSwypeConfig } from './context';\nimport {\n useAuthorizationExecutor,\n useTransferPolling,\n useTransferSigning,\n isSafari,\n isInCrossOriginIframe,\n} from './hooks';\nimport { clearMobileFlowState, ACTIVE_CREDENTIAL_STORAGE_KEY } from './paymentHelpers';\nimport { paymentReducer, createInitialState } from './paymentReducer';\nimport { StepRenderer } from './StepRenderer';\nimport type { StepHandlers } from './StepRenderer';\nimport { PaymentErrorBoundary } from './components/ErrorBoundary';\nimport type { MobileFlowRefs } from './hooks/useMobileFlowHandlers';\n\nimport {\n useDerivedState,\n useAuthHandlers,\n usePasskeyHandlers,\n useTransferHandlers,\n useSourceSelectionHandlers,\n useMobileFlowHandlers,\n useProviderHandlers,\n useOneTapSetupHandlers,\n usePaymentEffects,\n useGuestTransferHandlers,\n} from './hooks/index';\n\n// ── Props ──────────────────────────────────────────────────────────────\n\nexport interface SwypePaymentProps {\n destination: Destination;\n onComplete?: (transfer: Transfer) => void;\n onError?: (error: string) => void;\n useWalletConnector?: boolean;\n idempotencyKey?: string;\n merchantAuthorization?: api.CreateTransferParams['merchantAuthorization'];\n merchantName?: string;\n onBack?: () => void;\n onDismiss?: () => void;\n autoCloseSeconds?: number;\n /** EVM numeric chain ID for the source chain (guest flow). */\n sourceChainId?: number;\n /** Source token contract address (guest flow). */\n sourceToken?: string;\n /** Destination EVM numeric chain ID (guest flow). */\n destinationChainId?: number;\n}\n\n// ── Component ──────────────────────────────────────────────────────────\n\nexport function SwypePayment(props: SwypePaymentProps) {\n const { tokens } = useSwypeConfig();\n const resetKey = useRef(0);\n const handleBoundaryReset = useCallback(() => {\n resetKey.current += 1;\n }, []);\n\n return (\n <PaymentErrorBoundary key={resetKey.current} onReset={handleBoundaryReset} tokens={tokens}>\n <SwypePaymentInner {...props} />\n </PaymentErrorBoundary>\n );\n}\n\n// ── Inner component ────────────────────────────────────────────────────\n\nfunction SwypePaymentInner({\n destination,\n onComplete,\n onError,\n useWalletConnector: useWalletConnectorProp,\n idempotencyKey,\n merchantAuthorization,\n merchantName,\n onBack,\n onDismiss,\n autoCloseSeconds,\n sourceChainId,\n sourceToken,\n destinationChainId,\n}: SwypePaymentProps) {\n const { apiBaseUrl, depositAmount } = useSwypeConfig();\n const { ready, authenticated, logout, getAccessToken } = usePrivy();\n const { disconnectAsync } = useDisconnect();\n useLoginWithOAuth();\n\n // ── Reducer ─────────────────────────────────────────────────────\n\n const [state, dispatch] = useReducer(\n paymentReducer,\n {\n depositAmount,\n passkeyPopupNeeded: isSafari() && isInCrossOriginIframe(),\n activeCredentialId:\n typeof window === 'undefined'\n ? null\n : window.localStorage.getItem(ACTIVE_CREDENTIAL_STORAGE_KEY),\n },\n createInitialState,\n );\n\n // ── SDK hooks ───────────────────────────────────────────────────\n\n const authExecutor = useAuthorizationExecutor();\n const polling = useTransferPolling();\n const transferSigning = useTransferSigning();\n\n // ── Shared refs (created here so they can be passed to multiple hooks) ──\n\n const mobileFlowRefs: MobileFlowRefs = {\n mobileSetupFlowRef: useRef(false),\n handlingMobileReturnRef: useRef(false),\n setupAccountIdRef: useRef<string | null>(null),\n reauthSessionIdRef: useRef<string | null>(null),\n reauthTokenRef: useRef<{ walletId: string; tokenSymbol: string } | null>(null),\n loadingDataRef: useRef(false),\n };\n\n // ── Derived values ──────────────────────────────────────────────\n\n const derived = useDerivedState(state);\n\n // ── Handler hooks ───────────────────────────────────────────────\n\n const auth = useAuthHandlers(dispatch, state.verificationTarget);\n\n const passkey = usePasskeyHandlers(\n dispatch, apiBaseUrl, state.accounts, state.knownCredentialIds,\n mobileFlowRefs.mobileSetupFlowRef,\n );\n\n const transfer = useTransferHandlers({\n dispatch, getAccessToken, apiBaseUrl, depositAmount, destination,\n idempotencyKey, merchantAuthorization, onComplete, onError,\n polling, transferSigning,\n sourceType: derived.sourceType,\n sourceId: derived.sourceId,\n sourceTokenAddress: derived.selectedSource?.address,\n activeCredentialId: state.activeCredentialId,\n selectedAccountId: state.selectedAccountId,\n transfer: state.transfer,\n accounts: state.accounts,\n });\n\n const mobileFlow = useMobileFlowHandlers(\n dispatch, polling, transfer.reloadAccounts,\n transfer.pollingTransferIdRef, state.transfer, mobileFlowRefs,\n );\n\n const sourceSelection = useSourceSelectionHandlers(dispatch, authExecutor);\n\n const provider = useProviderHandlers({\n dispatch, getAccessToken, apiBaseUrl, depositAmount,\n useWalletConnectorProp,\n activeCredentialId: state.activeCredentialId,\n selectedAccountId: state.selectedAccountId,\n selectedWalletId: state.selectedWalletId,\n selectedTokenSymbol: state.selectedTokenSymbol,\n chains: state.chains,\n accounts: state.accounts,\n providers: state.providers,\n authExecutor,\n reloadAccounts: transfer.reloadAccounts,\n onError,\n mobileSetupFlowRef: mobileFlowRefs.mobileSetupFlowRef,\n handlingMobileReturnRef: mobileFlowRefs.handlingMobileReturnRef,\n setupAccountIdRef: mobileFlowRefs.setupAccountIdRef,\n reauthSessionIdRef: mobileFlowRefs.reauthSessionIdRef,\n reauthTokenRef: mobileFlowRefs.reauthTokenRef,\n });\n\n const oneTapSetup = useOneTapSetupHandlers({\n dispatch, getAccessToken, apiBaseUrl, authExecutor,\n selectSourceChainName: sourceSelection.selectSourceChainName,\n selectSourceTokenSymbol: sourceSelection.selectSourceTokenSymbol,\n });\n\n const guest = useGuestTransferHandlers({\n dispatch,\n apiBaseUrl,\n destination,\n depositAmount,\n idempotencyKey,\n merchantAuthorization,\n onComplete: onComplete as ((t: { id: string; status: string }) => void) | undefined,\n onError,\n sourceChainId: state.selectedGuestChainId ?? sourceChainId,\n sourceToken: state.selectedGuestTokenAddress ?? sourceToken,\n destinationChainId,\n sourceTokenDecimals: state.selectedGuestTokenDecimals,\n guestSourceOptions: state.guestSourceOptions,\n });\n\n // ── Load guest source options on mount ─────────────────────────\n\n const sourceOptionsLoadedRef = useRef(false);\n useEffect(() => {\n if (sourceOptionsLoadedRef.current) return;\n if (!state.isGuestFlow) return;\n sourceOptionsLoadedRef.current = true;\n\n dispatch({ type: 'GUEST_SOURCE_OPTIONS_LOADING' });\n api.fetchGuestSourceOptions(apiBaseUrl)\n .then((options) => {\n dispatch({ type: 'GUEST_SOURCE_OPTIONS_LOADED', options });\n })\n .catch((err) => {\n dispatch({\n type: 'GUEST_SOURCE_OPTIONS_FAILED',\n error: err instanceof Error ? err.message : 'Failed to load payment options. Please try again.',\n });\n });\n }, [apiBaseUrl, state.isGuestFlow, dispatch]);\n\n // ── Lifecycle handlers ──────────────────────────────────────────\n\n const handleNewPayment = useCallback(() => {\n clearMobileFlowState();\n transfer.processingStartedAtRef.current = null;\n transfer.pollingTransferIdRef.current = null;\n sourceSelection.preSelectSourceStepRef.current = null;\n oneTapSetup.oneTapLimitSavedDuringSetupRef.current = false;\n dispatch({\n type: 'NEW_PAYMENT',\n depositAmount,\n firstAccountId: state.accounts.length > 0 ? state.accounts[0].id : null,\n });\n }, [depositAmount, state.accounts, transfer, sourceSelection, provider, oneTapSetup]);\n\n const handleLogout = useCallback(async () => {\n try { await logout(); } catch { /* clear local state anyway */ }\n clearMobileFlowState();\n if (typeof window !== 'undefined') {\n window.localStorage.removeItem(ACTIVE_CREDENTIAL_STORAGE_KEY);\n }\n polling.stopPolling();\n sourceSelection.preSelectSourceStepRef.current = null;\n passkey.checkingPasskeyRef.current = false;\n oneTapSetup.oneTapLimitSavedDuringSetupRef.current = false;\n auth.setAuthInput('');\n auth.setOtpCode('');\n dispatch({ type: 'LOGOUT', depositAmount });\n }, [logout, polling, depositAmount, auth, sourceSelection, provider, passkey, oneTapSetup]);\n\n // ── Effects ─────────────────────────────────────────────────────\n\n usePaymentEffects({\n state, dispatch, ready, authenticated, apiBaseUrl, depositAmount,\n useWalletConnectorProp, onComplete, onError,\n polling, authExecutor,\n reloadAccounts: transfer.reloadAccounts,\n activeOtpStatus: auth.activeOtpStatus,\n activeOtpErrorMessage: auth.activeOtpErrorMessage,\n otpCode: auth.otpCode,\n handleVerifyLoginCode: auth.handleVerifyLoginCode,\n setAuthInput: auth.setAuthInput,\n setOtpCode: auth.setOtpCode,\n mobileSetupFlowRef: mobileFlowRefs.mobileSetupFlowRef,\n handlingMobileReturnRef: mobileFlowRefs.handlingMobileReturnRef,\n setupAccountIdRef: mobileFlowRefs.setupAccountIdRef,\n reauthSessionIdRef: mobileFlowRefs.reauthSessionIdRef,\n reauthTokenRef: mobileFlowRefs.reauthTokenRef,\n loadingDataRef: mobileFlowRefs.loadingDataRef,\n pollingTransferIdRef: transfer.pollingTransferIdRef,\n processingStartedAtRef: transfer.processingStartedAtRef,\n checkingPasskeyRef: passkey.checkingPasskeyRef,\n pendingSelectSourceAction: sourceSelection.pendingSelectSourceAction,\n selectSourceChoices: sourceSelection.selectSourceChoices,\n selectSourceRecommended: sourceSelection.selectSourceRecommended,\n setSelectSourceChainName: sourceSelection.setSelectSourceChainName,\n setSelectSourceTokenSymbol: sourceSelection.setSelectSourceTokenSymbol,\n initializedSelectSourceActionRef: sourceSelection.initializedSelectSourceActionRef,\n preSelectSourceStepRef: sourceSelection.preSelectSourceStepRef,\n oneTapLimitSavedDuringSetupRef: oneTapSetup.oneTapLimitSavedDuringSetupRef,\n handleAuthorizedMobileReturn: mobileFlow.handleAuthorizedMobileReturn,\n });\n\n // ── Build handlers ──────────────────────────────────────────────\n\n const handlers: StepHandlers = useMemo(() => ({\n onSendLoginCode: auth.handleSendLoginCode,\n onVerifyLoginCode: auth.handleVerifyLoginCode,\n onResendLoginCode: auth.handleResendLoginCode,\n onBackFromOtp: () => {\n auth.setOtpCode('');\n dispatch({ type: 'BACK_TO_LOGIN' });\n },\n onRegisterPasskey: passkey.handleRegisterPasskey,\n onCreatePasskeyViaPopup: passkey.handleCreatePasskeyViaPopup,\n onVerifyPasskeyViaPopup: passkey.handleVerifyPasskeyViaPopup,\n onPrepareProvider: provider.handlePrepareProvider,\n onSelectProvider: provider.handleSelectProvider,\n onContinueConnection: provider.handleContinueConnection,\n onSelectAccount: provider.handleSelectAccount,\n onPay: transfer.handlePay,\n onIncreaseLimit: provider.handleIncreaseLimit,\n onConfirmSign: transfer.handleConfirmSign,\n onRetryMobileStatus: mobileFlow.handleRetryMobileStatus,\n onLogout: handleLogout,\n onNewPayment: handleNewPayment,\n onNavigate: (step: PaymentStep) => dispatch({ type: 'NAVIGATE', step }),\n onSetAuthInput: auth.setAuthInput,\n onSetOtpCode: (code: string) => {\n auth.setOtpCode(code);\n dispatch({ type: 'SET_ERROR', error: null });\n },\n onSelectSourceChainChange: sourceSelection.handleSelectSourceChainChange,\n onSetSelectSourceTokenSymbol: sourceSelection.setSelectSourceTokenSymbol,\n onConfirmSelectSource: sourceSelection.handleConfirmSelectSource,\n onSetupOneTap: oneTapSetup.handleSetupOneTap,\n onSelectToken: provider.handleNavigateToTokenPicker,\n onSelectAuthorizedToken: provider.handleSelectAuthorizedToken,\n onAuthorizeToken: provider.handleAuthorizeToken,\n onGuestConnect: guest.handleGuestConnect,\n onGuestConfirm: guest.handleGuestConfirm,\n onGuestSignIn: () => {\n disconnectAsync().catch(() => {});\n dispatch({ type: 'START_SETUP_FLOW' });\n },\n onGuestRetry: guest.handleGuestRetry,\n onOfferSetup: () => dispatch({ type: 'START_SETUP_FLOW' }),\n onSetupComplete: () => dispatch({ type: 'SETUP_FLOW_COMPLETE' }),\n onGuestSelectChain: (chainName: string, chainId: number) =>\n dispatch({ type: 'GUEST_SELECT_CHAIN', chainName, chainId }),\n onGuestSelectToken: (tokenSymbol: string, tokenAddress: string, decimals: number) =>\n dispatch({ type: 'GUEST_SELECT_TOKEN', tokenSymbol, tokenAddress, decimals }),\n onGuestConfirmSource: () => guest.handleGuestConfirm(),\n }), [\n auth, passkey, provider, transfer, mobileFlow, sourceSelection, oneTapSetup,\n guest, handleLogout, handleNewPayment,\n ]);\n\n // ── Render ──────────────────────────────────────────────────────\n\n return (\n <StepRenderer\n state={state}\n ready={ready}\n authenticated={authenticated}\n activeOtpStatus={auth.activeOtpStatus}\n pollingTransfer={polling.transfer}\n pollingError={polling.error}\n authExecutorError={authExecutor.error}\n transferSigningSigning={transferSigning.signing}\n transferSigningError={transferSigning.error}\n pendingConnections={derived.pendingConnections}\n depositEligibleAccounts={derived.depositEligibleAccounts}\n sourceName={derived.sourceName}\n maxSourceBalance={derived.maxSourceBalance}\n tokenCount={derived.tokenCount}\n selectedAccount={derived.selectedAccount}\n selectedSource={derived.selectedSource}\n selectSourceChoices={sourceSelection.selectSourceChoices}\n selectSourceRecommended={sourceSelection.selectSourceRecommended}\n selectSourceAvailableBalance={sourceSelection.selectSourceAvailableBalance}\n authInput={auth.authInput}\n otpCode={auth.otpCode}\n selectSourceChainName={sourceSelection.selectSourceChainName}\n selectSourceTokenSymbol={sourceSelection.selectSourceTokenSymbol}\n savingOneTapLimit={oneTapSetup.savingOneTapLimit}\n merchantName={merchantName}\n onBack={onBack}\n onDismiss={onDismiss}\n autoCloseSeconds={autoCloseSeconds}\n depositAmount={depositAmount}\n handlers={handlers}\n />\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/theme.ts","../src/context.tsx","../src/passkey-delegation.ts","../src/credentialIdEncoding.ts","../src/passkeyRpId.ts","../src/hooks/passkeyPublic.ts","../src/api.ts","../src/transferPolling.ts","../src/hooks/useTransferPolling.ts","../src/signature.ts","../src/authorizationErrors.ts","../src/hooks/authorizationExecutor.ts","../src/hooks/useTransferSigning.ts","../src/paymentHelpers.ts","../src/walletFlow.ts","../src/processingStatus.ts","../src/paymentResolvePhase.ts","../src/paymentReducer.ts","../src/resolveScreen.ts","../src/depositTokenSelection.ts","../src/components/BlinkLoadingScreen.tsx","../src/assets/logos.ts","../src/components/ui/ScreenLayout.tsx","../src/FlowPhaseContext.tsx","../src/components/ui/StepProgress.tsx","../src/components/ui/SettingsMenu.tsx","../src/components/ui/ScreenHeader.tsx","../src/components/ui/PoweredByFooter.tsx","../src/components/ui/PrimaryButton.tsx","../src/components/ui/OutlineButton.tsx","../src/components/ui/InfoBanner.tsx","../src/components/ui/WarningBanner.tsx","../src/components/ui/IconCircle.tsx","../src/components/ui/OtpInput.tsx","../src/components/ui/StepList.tsx","../src/deviceBiometricUnlockText.ts","../src/components/screens/LoginScreen.tsx","../src/components/screens/OtpVerifyScreen.tsx","../src/components/screens/PasskeyScreen.tsx","../src/components/screens/VerifyPasskeyScreen.tsx","../src/components/Spinner.tsx","../src/deeplink.ts","../src/components/screens/WalletPickerScreen.tsx","../src/setupScreenSelection.ts","../src/components/screens/SetupScreen.tsx","../src/components/screens/SetupStatusScreen.tsx","../src/feeFormat.ts","../src/components/screens/DepositScreen.tsx","../src/components/screens/SuccessScreen.tsx","../src/components/screens/SelectSourceScreen.tsx","../src/components/screens/AdvancedSourceScreen.tsx","../src/components/screens/TransferStatusScreen.tsx","../src/components/screens/OpenWalletScreen.tsx","../src/components/screens/ConfirmSignScreen.tsx","../src/components/screens/TokenPickerScreen.tsx","../src/components/screens/GuestTokenPickerScreen.tsx","../src/components/screens/GuestPreauthSetupCompleteScreen.tsx","../src/components/screens/GuestPreauthLinkingScreen.tsx","../src/stepHeaderFlowPhase.ts","../src/StepRenderer.tsx","../src/sentry.ts","../src/components/ErrorBoundary.tsx","../src/hooks/useDerivedState.ts","../src/hooks/useAuthHandlers.ts","../src/hooks/usePasskeyHandlers.ts","../src/hooks/useTransferHandlers.ts","../src/hooks/useSourceSelectionHandlers.ts","../src/hooks/useMobileFlowHandlers.ts","../src/hooks/useProviderHandlers.ts","../src/guestTokens.ts","../src/hooks/useGuestTransferHandlers.ts","../src/hooks/useOneTapSetupHandlers.ts","../src/hooks/usePrivySessionSyncEffect.ts","../src/hooks/usePasskeyCheckEffect.ts","../src/dataLoading.ts","../src/hooks/useDataLoadEffect.ts","../src/hooks/useProcessingEffect.ts","../src/hooks/useMobilePollingEffect.ts","../src/hooks/useGuestPreauthMobileRestoreEffect.ts","../src/hooks/useSelectSourceEffect.ts","../src/hooks/useOneTapAutoResolveEffect.ts","../src/guestPreauthClaimWait.ts","../src/hooks/useGuestPreauthEffect.ts","../src/hooks/useGuestDesktopPreauthSessionEffect.ts","../src/hooks/useGuestPreauthPhaseSyncEffect.ts","../src/hooks/useGuestPreauthWalletSetupEffect.ts","../src/hooks/useStandardDesktopInlineOpenWalletEffect.ts","../src/hooks/useGuestAccountAutoPollingEffect.ts","../src/hooks/usePageResume.ts","../src/hooks/usePageResumeEffect.ts","../src/hooks/useGuestAccountPolling.ts","../src/hooks/useDepositFeeEstimate.ts","../src/BlinkPayment.tsx"],"names":["fetchTransfer","useState","useRef","useCallback","wagmiConfig","hexChainId","waitForDocumentFocus","toBase64","usePrivy","signTransfer","jsx","jsxs","containerStyle","createContext","useContext","labelStyle","useEffect","Fragment","buttonStyle","headerStyle","iconStyle","bodyStyle","rowStyle","badgeStyle","contentStyle","headingStyle","subtitleStyle","errorBannerStyle","mascotStyle","tokenIconWrapStyle","radioStyle","radioDotStyle","stepsWrapStyle","logoStyle","waitHintStyle","errorStyle","hintStyle","depositLabelStyle","tokenIconButtonStyle","tokenListStyle","tokenRowStyle","tokenIconCircleStyle","tokenLogoImgStyle","tokenIconTextStyle","tokenInfoStyle","feeRowContainerStyle","feeRowLabelStyle","feeRowAmountStyle","depositAmountStyle","accountDropdownLabelStyle","tokenDropdownInnerStyle","tokenNameRowStyle","tokenSymbolTextStyle","tokenChainDotStyle","tokenChainTextStyle","tokenBalanceStyle","radioEmptyStyle","useMemo","signedTransfer","options","useConfig","useConnect","getAccount","isUserRejection","useSwitchChain","getWalletClient"],"mappings":"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","file":"index.js","sourcesContent":["// ── Blink 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 warning: string;\n warningBg: string;\n warningText: 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: '#071216',\n bgCard: '#101c22',\n bgInput: '#17272f',\n bgHover: '#20343d',\n bgOverlay: 'rgba(3, 10, 13, 0.7)',\n\n text: '#ecfeff',\n textSecondary: '#b7d3dd',\n textMuted: '#7fa4b0',\n textInverse: '#052027',\n\n border: '#2b4551',\n borderFocus: '#28b67a',\n\n accent: '#B2FF93',\n accentHover: '#8FD974',\n accentText: '#1B4332',\n\n success: '#0f9d73',\n successBg: '#0f2f2a',\n error: '#d46a72',\n errorBg: '#301d21',\n warning: '#F57C00',\n warningBg: '#3D2E00',\n warningText: '#FFB74D',\n\n shadow: '0 1px 4px rgba(0,0,0,0.35)',\n shadowLg: '0 18px 44px rgba(0,0,0,0.42)',\n\n radius: '14px',\n radiusLg: '24px',\n};\n\nexport const lightTheme: ThemeTokens = {\n bg: '#ebf9fb',\n bgCard: '#f9fdff',\n bgInput: '#f1f8fb',\n bgHover: '#e7f4f7',\n bgOverlay: 'rgba(7, 18, 22, 0.18)',\n\n text: '#12222b',\n textSecondary: '#4b6772',\n textMuted: '#7d97a1',\n textInverse: '#ffffff',\n\n border: '#d2e4ea',\n borderFocus: '#28b67a',\n\n accent: '#B2FF93',\n accentHover: '#8FD974',\n accentText: '#1B4332',\n\n success: '#0f9d73',\n successBg: '#e6f7f1',\n error: '#ce6670',\n errorBg: '#fdf1f2',\n warning: '#F57C00',\n warningBg: '#FFF8E1',\n warningText: '#5D4037',\n\n shadow: '0 1px 3px rgba(12, 31, 39, 0.08)',\n shadowLg: '0 20px 48px rgba(19, 61, 75, 0.14)',\n\n radius: '14px',\n radiusLg: '24px',\n};\n\nexport function getTheme(mode: ThemeMode): ThemeTokens {\n return mode === 'dark' ? darkTheme : lightTheme;\n}\n","// ── Blink 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, baseSepolia, polygon, bsc } from 'wagmi/chains';\nimport { injected } from 'wagmi/connectors';\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport type { ThemeMode } from './types';\nimport { getTheme, type ThemeTokens } from './theme';\n\n// ── Blink-owned Privy credentials ─────────────────────────────────────\n// These are internal to the SDK. Integrators never need to know about them.\n\n/** Blink's Privy App ID — all SDK users authenticate against this app. */\nconst BLINK_PRIVY_APP_ID = 'cmlil87uv004n0ck0blwumwek';\n\n/**\n * Session isolation: Because the SDK uses Blink'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 BlinkProvider\n// instances (there should only ever be one, but this is safe either way).\n\nconst wagmiConfig = createConfig({\n // baseSepolia: guest/testnet flows (e.g. smokebox e2e) call switchChain to the source chain from the API.\n chains: [mainnet, arbitrum, base, polygon, bsc, baseSepolia],\n connectors: [injected({ shimDisconnect: true, unstable_shimAsyncInject: 2_000 })],\n transports: {\n [mainnet.id]: http(),\n [arbitrum.id]: http(),\n [base.id]: http(),\n [polygon.id]: http(),\n [bsc.id]: http(),\n [baseSepolia.id]: http(),\n },\n});\n\n// ── Blink SDK context ─────────────────────────────────────────────────\n\nexport interface BlinkConfig {\n apiBaseUrl: string;\n theme: ThemeMode;\n tokens: ThemeTokens;\n /** Pre-set deposit amount (controlled by host app via useBlinkDepositAmount) */\n depositAmount: number | null;\n /** Update the deposit amount from a host-app component */\n setDepositAmount: (amount: number | null) => void;\n}\n\nconst BlinkContext = createContext<BlinkConfig | null>(null);\n\nexport interface BlinkProviderProps {\n /** Base URL for the Blink API (e.g. \"http://localhost:3000\") */\n apiBaseUrl: string;\n /** Light or dark mode */\n theme?: ThemeMode;\n /**\n * Override the Privy App ID used for authentication.\n * @internal Blink-internal only — used for dev/test environments (e.g. smokebox).\n * Not intended for merchant integrations.\n */\n privyAppId?: string;\n children: React.ReactNode;\n}\n\n/**\n * Provides Blink SDK configuration and all required infrastructure\n * (Privy auth, wagmi, React Query) to child components.\n *\n * Must wrap any `<BlinkPayment>` 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 * <BlinkProvider apiBaseUrl=\"https://api.blink.com\">\n * <BlinkPayment destination={dest} onComplete={handler} />\n * </BlinkProvider>\n * ```\n */\nexport function BlinkProvider({\n apiBaseUrl,\n theme = 'dark',\n privyAppId,\n children,\n}: BlinkProviderProps) {\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 useBlinkDepositAmount()\n // Deposit amount state — host apps set this via useBlinkDepositAmount()\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<BlinkConfig>(\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={privyAppId ?? BLINK_PRIVY_APP_ID}\n config={{\n appearance: {\n theme,\n accentColor: getTheme(theme).accent as `#${string}`,\n },\n intl: {\n defaultCountry: 'US',\n },\n embeddedWallets: {\n showWalletUIs: false,\n },\n }}\n >\n <BlinkContext.Provider value={value}>\n {children}\n </BlinkContext.Provider>\n </PrivyProvider>\n </WagmiProvider>\n </QueryClientProvider>\n );\n}\n\n/**\n * Minimal config provider for unit tests (no Privy, wagmi, or React Query).\n * @internal\n */\nexport function BlinkConfigTestProvider({\n children,\n apiBaseUrl = 'https://api.test',\n theme = 'light',\n}: {\n children: React.ReactNode;\n apiBaseUrl?: string;\n theme?: ThemeMode;\n}) {\n const [depositAmount, setDepositAmountRaw] = useState<number | null>(null);\n const setDepositAmount = useCallback((amount: number | null) => {\n setDepositAmountRaw(amount);\n }, []);\n const value = useMemo<BlinkConfig>(\n () => ({\n apiBaseUrl,\n theme,\n tokens: getTheme(theme),\n depositAmount,\n setDepositAmount,\n }),\n [apiBaseUrl, theme, depositAmount, setDepositAmount],\n );\n return <BlinkContext.Provider value={value}>{children}</BlinkContext.Provider>;\n}\n\n/** Access the Blink SDK configuration. Throws if used outside BlinkProvider. */\nexport function useBlinkConfig(): BlinkConfig {\n const ctx = useContext(BlinkContext);\n if (!ctx) {\n throw new Error('useBlinkConfig must be used within a <BlinkProvider>');\n }\n return ctx;\n}\n\n/** Access Blink SDK configuration when available (returns null outside provider). */\nexport function useOptionalBlinkConfig(): BlinkConfig | null {\n return useContext(BlinkContext);\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 BlinkPayment is\n * auto-populated.\n *\n * @example\n * ```tsx\n * function ProductPage() {\n * const { setAmount } = useBlinkDepositAmount();\n * useEffect(() => { setAmount(25.00); }, []);\n * return <BlinkPayment destination={dest} />;\n * }\n * ```\n */\nexport function useBlinkDepositAmount() {\n const ctx = useContext(BlinkContext);\n if (!ctx) {\n throw new Error(\n 'useBlinkDepositAmount must be used within a <BlinkProvider>',\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","/**\n * Cross-origin iframe passkey helpers.\n *\n * When the webview-app runs inside a cross-origin iframe, WebAuthn\n * ceremonies cannot execute from within the iframe on Safari. For passkey\n * verification (signing) and signup (credential creation), we open a\n * same-origin pop-up window on the Blink domain to perform the ceremony.\n */\n\n/**\n * Thrown when `navigator.credentials.create()` fails inside a\n * cross-origin iframe (Safari). The UI layer should catch this and\n * offer the user a button that opens the Blink passkey pop-up.\n */\nexport class PasskeyIframeBlockedError extends Error {\n constructor(message = 'Passkey creation is not supported in this browser context.') {\n super(message);\n this.name = 'PasskeyIframeBlockedError';\n }\n}\n\nexport function isInCrossOriginIframe(): boolean {\n if (typeof window === 'undefined') return false;\n if (window.parent === window) return false;\n try {\n void window.parent.location.origin;\n return false;\n } catch {\n return true;\n }\n}\n\nexport function isSafari(): boolean {\n if (typeof navigator === 'undefined') return false;\n const ua = navigator.userAgent;\n return /Safari/i.test(ua) && !/Chrome|CriOS|Chromium|Edg|OPR|Firefox/i.test(ua);\n}\n\n// ── Pop-up based passkey verification (Safari fallback) ───────────────\n\nconst VERIFY_POPUP_TIMEOUT_MS = 60_000;\nconst POPUP_CLOSED_POLL_MS = 500;\nconst POPUP_CLOSED_GRACE_MS = 1_000;\n\nexport interface PasskeyVerifyPopupOptions {\n credentialIds: string[];\n rpId: string;\n /** Populated by `findDevicePasskeyViaPopup`; not set by callers. */\n verificationToken?: string;\n /** Privy JWT so the popup can report verification server-side. */\n authToken?: string;\n /** Core API base URL for server-side passkey activity reporting. */\n apiBaseUrl?: string;\n}\n\n/**\n * Opens a same-origin pop-up window on the Blink domain to check whether\n * any of the given passkey credential IDs exist on this device.\n *\n * Used as a fallback when Safari blocks `navigator.credentials.get()`\n * inside a cross-origin iframe. The popup runs on the Blink domain where\n * the rpId matches, so WebAuthn works.\n *\n * Must be called from a user-gesture handler (e.g. button click) to\n * avoid the browser's pop-up blocker.\n *\n * @returns The matching credential ID, or `null` if none matched or the\n * popup was closed before completing.\n */\nexport function findDevicePasskeyViaPopup(\n options: PasskeyVerifyPopupOptions,\n): Promise<string | null> {\n return new Promise((resolve, reject) => {\n const verificationToken = crypto.randomUUID();\n const payload: PasskeyVerifyPopupOptions = {\n ...options,\n verificationToken,\n };\n const encoded = btoa(JSON.stringify(payload));\n const popupUrl = `${window.location.origin}/passkey-verify#${encoded}`;\n\n const popup = window.open(popupUrl, 'blink-passkey-verify');\n if (!popup) {\n reject(new Error('Pop-up blocked. Please allow pop-ups for this site and try again.'));\n return;\n }\n\n let settled = false;\n\n const timer = setTimeout(() => {\n cleanup();\n resolve(null);\n }, VERIFY_POPUP_TIMEOUT_MS);\n\n const closedPoll = setInterval(() => {\n if (popup.closed && !settled) {\n clearInterval(closedPoll);\n setTimeout(() => {\n if (!settled) {\n settled = true;\n cleanup();\n checkServerForPasskeyByToken(\n options.authToken,\n options.apiBaseUrl,\n verificationToken,\n ).then((result) => {\n resolve(result?.credentialId ?? null);\n }).catch(() => {\n resolve(null);\n });\n }\n }, POPUP_CLOSED_GRACE_MS);\n }\n }, POPUP_CLOSED_POLL_MS);\n\n function cleanup() {\n clearTimeout(timer);\n clearInterval(closedPoll);\n }\n });\n}\n\nasync function checkServerForPasskeyByToken(\n authToken: string | undefined,\n apiBaseUrl: string | undefined,\n verificationToken: string,\n): Promise<{ credentialId: string; publicKey: string } | null> {\n if (!authToken || !apiBaseUrl) return null;\n\n const res = await fetch(`${apiBaseUrl}/v1/users/config`, {\n headers: { Authorization: `Bearer ${authToken}` },\n });\n if (!res.ok) return null;\n\n const body = (await res.json()) as {\n config: {\n passkeys?: Array<{ credentialId: string; publicKey: string; lastVerificationToken?: string | null }>;\n };\n };\n\n const passkeys = body.config.passkeys ?? [];\n const matched = passkeys.find((p) => p.lastVerificationToken === verificationToken);\n return matched ? { credentialId: matched.credentialId, publicKey: matched.publicKey } : null;\n}\n\n// ── Pop-up based passkey signup (Safari fallback) ─────────────────────\n\nexport interface PasskeySignupPopupResult {\n accessToken: string;\n credentialId: string;\n publicKey: string;\n}\n\n/**\n * Returns `true` when the current context is known to block\n * `navigator.credentials.create()` — Safari inside a cross-origin iframe.\n * When this returns `true`, callers should use {@link signupWithPasskeyViaPopup}\n * instead of Privy's inline `signupWithPasskey()`.\n */\nexport function shouldUsePasskeySignupPopup(): boolean {\n return isSafari() && isInCrossOriginIframe();\n}\n\nexport function shouldUsePasskeyLoginPopup(): boolean {\n return isSafari() && isInCrossOriginIframe();\n}\n\nconst SIGNUP_POPUP_TIMEOUT_MS = 120_000;\n\n/**\n * Opens a same-origin pop-up at `/passkey-signup` where the user can\n * complete Privy signup in a top-level browsing context (WebAuthn is not\n * blocked). The popup sends the result back via `postMessage`.\n *\n * Must be called from a user-gesture handler (e.g. button click) to\n * avoid the browser's pop-up blocker.\n *\n * @returns The access token + credential info, or `null` if the popup\n * was closed before completing.\n */\nexport function signupWithPasskeyViaPopup(): Promise<PasskeySignupPopupResult | null> {\n return new Promise((resolve, reject) => {\n const popupUrl = `${window.location.origin}/passkey-signup`;\n const popup = window.open(popupUrl, 'blink-passkey-signup');\n if (!popup) {\n reject(new Error('Pop-up blocked. Please allow pop-ups for this site and try again.'));\n return;\n }\n\n let settled = false;\n\n const timer = setTimeout(() => {\n cleanup();\n resolve(null);\n }, SIGNUP_POPUP_TIMEOUT_MS);\n\n function onMessage(event: MessageEvent) {\n if (event.origin !== window.location.origin) return;\n if (event.source !== popup) return;\n\n const data = event.data as Record<string, unknown> | undefined;\n if (!data || data.type !== 'blink:passkey-signup-complete') return;\n if (\n typeof data.accessToken !== 'string'\n || typeof data.credentialId !== 'string'\n || typeof data.publicKey !== 'string'\n ) return;\n\n settled = true;\n cleanup();\n resolve({\n accessToken: data.accessToken,\n credentialId: data.credentialId,\n publicKey: data.publicKey,\n });\n }\n\n window.addEventListener('message', onMessage);\n\n const closedPoll = setInterval(() => {\n if (popup.closed && !settled) {\n settled = true;\n cleanup();\n resolve(null);\n }\n }, POPUP_CLOSED_POLL_MS);\n\n function cleanup() {\n clearTimeout(timer);\n clearInterval(closedPoll);\n window.removeEventListener('message', onMessage);\n }\n });\n}\n\n// ── Pop-up based passkey login (Safari fallback) ──────────────────────\n\nconst LOGIN_POPUP_TIMEOUT_MS = 120_000;\n\n/**\n * Opens a same-origin pop-up at `/passkey-login` where the user can\n * complete Privy passkey login in a top-level browsing context. Used\n * when `navigator.credentials.get()` is blocked in a cross-origin iframe\n * on Safari. The popup sends the result back via `postMessage`.\n *\n * Must be called from a user-gesture handler to avoid the pop-up blocker.\n */\nexport function loginWithPasskeyViaPopup(): Promise<PasskeySignupPopupResult | null> {\n return new Promise((resolve, reject) => {\n const popupUrl = `${window.location.origin}/passkey-login`;\n const popup = window.open(popupUrl, 'blink-passkey-login');\n if (!popup) {\n reject(new Error('Pop-up blocked. Please allow pop-ups for this site and try again.'));\n return;\n }\n\n let settled = false;\n\n const timer = setTimeout(() => {\n cleanup();\n resolve(null);\n }, LOGIN_POPUP_TIMEOUT_MS);\n\n function onMessage(event: MessageEvent) {\n if (event.origin !== window.location.origin) return;\n if (event.source !== popup) return;\n\n const data = event.data as Record<string, unknown> | undefined;\n if (!data || data.type !== 'blink:passkey-login-complete') return;\n if (\n typeof data.accessToken !== 'string'\n || typeof data.credentialId !== 'string'\n || typeof data.publicKey !== 'string'\n ) return;\n\n settled = true;\n cleanup();\n resolve({\n accessToken: data.accessToken,\n credentialId: data.credentialId,\n publicKey: data.publicKey,\n });\n }\n\n window.addEventListener('message', onMessage);\n\n const closedPoll = setInterval(() => {\n if (popup.closed && !settled) {\n settled = true;\n cleanup();\n resolve(null);\n }\n }, POPUP_CLOSED_POLL_MS);\n\n function cleanup() {\n clearTimeout(timer);\n clearInterval(closedPoll);\n window.removeEventListener('message', onMessage);\n }\n });\n}\n","/**\n * Decodes a WebAuthn credential id from the same base64 (or base64url) encoding\n * used when registering passkeys and returned by the API as `passkeyCredentialId`.\n */\nexport function credentialIdBase64ToBytes(value: string): Uint8Array<ArrayBuffer> {\n const normalized = value.replace(/-/g, '+').replace(/_/g, '/');\n const padded = normalized + '='.repeat((4 - (normalized.length % 4)) % 4);\n const raw = atob(padded);\n const bytes = new Uint8Array(raw.length);\n for (let i = 0; i < raw.length; i++) {\n bytes[i] = raw.charCodeAt(i);\n }\n return bytes as Uint8Array<ArrayBuffer>;\n}\n","export function normalizeConfiguredDomain(value: string): string {\n return value\n .replace(/^https?:\\/\\//, '')\n .replace(/\\/.*$/, '')\n .replace(/^\\./, '')\n .trim();\n}\n\nexport function resolveRootDomainFromHostname(hostname: string): string {\n const trimmedHostname = hostname.trim().toLowerCase();\n if (!trimmedHostname) {\n return 'localhost';\n }\n\n if (trimmedHostname === 'localhost' || /^\\d{1,3}(?:\\.\\d{1,3}){3}$/.test(trimmedHostname)) {\n return trimmedHostname;\n }\n\n const parts = trimmedHostname.split('.').filter(Boolean);\n if (parts.length < 2) {\n return trimmedHostname;\n }\n\n return parts.slice(-2).join('.');\n}\n","import { credentialIdBase64ToBytes } from '../credentialIdEncoding.ts';\nimport { normalizeConfiguredDomain, resolveRootDomainFromHostname } from '../passkeyRpId';\n\n// ── Passkey helpers (public SDK API) ──────────────────────────────────\nfunction waitForDocumentFocus(timeoutMs = 5000, intervalMs = 100): Promise<void> {\n return new Promise((resolve) => {\n if (typeof document === 'undefined') {\n resolve();\n return;\n }\n\n if (document.hasFocus()) {\n resolve();\n return;\n }\n\n const deadline = Date.now() + timeoutMs;\n\n const timer = setInterval(() => {\n if (document.hasFocus()) {\n clearInterval(timer);\n resolve();\n } else if (Date.now() >= deadline) {\n clearInterval(timer);\n resolve();\n }\n }, intervalMs);\n });\n}\n\nfunction toBase64(buffer: ArrayBuffer | ArrayBufferLike): string {\n return btoa(String.fromCharCode(...new Uint8Array(buffer)));\n}\n\nexport { credentialIdBase64ToBytes };\n\nfunction readEnvValue(name: string): string | undefined {\n const meta = import.meta as unknown as { env?: Record<string, string | undefined> };\n const metaValue = meta.env?.[name];\n if (typeof metaValue === 'string' && metaValue.trim().length > 0) {\n return metaValue.trim();\n }\n\n const processValue = (\n globalThis as { process?: { env?: Record<string, string | undefined> } }\n ).process?.env?.[name];\n if (typeof processValue === 'string' && processValue.trim().length > 0) {\n return processValue.trim();\n }\n\n return undefined;\n}\n\nexport function resolvePasskeyRpId(): string {\n const configuredDomain = readEnvValue('VITE_DOMAIN') ?? readEnvValue('BLINK_DOMAIN');\n if (configuredDomain) {\n return normalizeConfiguredDomain(configuredDomain);\n }\n\n if (typeof window !== 'undefined') {\n return resolveRootDomainFromHostname(window.location.hostname);\n }\n\n return 'localhost';\n}\n\n/**\n * @deprecated Use {@link findDevicePasskey} instead, which checks all\n * credentials in a single WebAuthn call.\n */\nexport async function deviceHasPasskey(credentialId: string): Promise<boolean> {\n const found = await findDevicePasskey([credentialId]);\n return found != null;\n}\n\n/**\n * Determines which (if any) of the given server-registered passkeys exists on\n * the current device. All credential IDs are passed in a single\n * `navigator.credentials.get()` call so the browser shows at most one prompt\n * and the platform authenticator automatically selects the matching key.\n *\n * @param credentialIds - Base64-encoded WebAuthn credential IDs from the server.\n * @returns The matching credential ID, or `null` if none are on this device.\n */\nexport async function findDevicePasskey(credentialIds: string[]): Promise<string | null> {\n if (credentialIds.length === 0) return null;\n\n try {\n const challenge = new Uint8Array(32);\n crypto.getRandomValues(challenge);\n\n await waitForDocumentFocus();\n\n const assertion = await navigator.credentials.get({\n publicKey: {\n challenge,\n rpId: resolvePasskeyRpId(),\n allowCredentials: credentialIds.map(id => ({\n type: 'public-key' as const,\n id: credentialIdBase64ToBytes(id),\n })),\n userVerification: 'discouraged',\n timeout: 30000,\n },\n }) as PublicKeyCredential | null;\n\n if (!assertion) return null;\n return toBase64(assertion.rawId);\n } catch {\n return null;\n }\n}\n","// ── Blink React SDK API Client ─────────────────────────────────────────\nimport type {\n Provider,\n Chain,\n Account,\n Transfer,\n AuthorizationSessionDetail,\n ErrorResponse,\n ListResponse,\n SourceType,\n SourceOption,\n Destination,\n UserConfig,\n MerchantAuthorization,\n MerchantPublicKey,\n PreciseMoney,\n GuestTransferFee,\n SetTransferSenderResponse,\n GuestTransferBalanceItem,\n} from './types.ts';\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 | null,\n): Promise<Provider[]> {\n const headers: Record<string, string> = {};\n if (token) {\n headers.Authorization = `Bearer ${token}`;\n }\n const res = await fetch(`${apiBaseUrl}/v1/providers`, { headers });\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 credentialId: string,\n): Promise<Account[]> {\n const params = new URLSearchParams({ credentialId });\n const res = await fetch(`${apiBaseUrl}/v1/accounts?${params.toString()}`, {\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\nexport async function fetchAccount(\n apiBaseUrl: string,\n token: string,\n accountId: string,\n credentialId: string,\n): Promise<Account> {\n const params = new URLSearchParams({ credentialId });\n const res = await fetch(`${apiBaseUrl}/v1/accounts/${accountId}?${params.toString()}`, {\n headers: { Authorization: `Bearer ${token}` },\n });\n if (!res.ok) await throwApiError(res);\n return (await res.json()) as Account;\n}\n\nexport interface CreateAccountParams {\n /** Caller-supplied UUID v4 for idempotency. If omitted, a random UUID is generated. */\n id?: string;\n name: string;\n credentialId: string;\n providerId: string;\n /** Optional user-chosen display name. */\n nickname?: string;\n}\n\nexport async function createAccount(\n apiBaseUrl: string,\n token: string,\n params: CreateAccountParams,\n): Promise<Account> {\n const body: Record<string, string> = {\n id: params.id ?? crypto.randomUUID(),\n name: params.name,\n credentialId: params.credentialId,\n providerId: params.providerId,\n };\n if (params.nickname) {\n body.nickname = params.nickname;\n }\n const res = await fetch(`${apiBaseUrl}/v1/accounts`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify(body),\n });\n if (!res.ok) await throwApiError(res);\n return (await res.json()) as Account;\n}\n\n// ── Account Authorization Sessions ─────────────────────────────────────\n\nexport async function createAccountAuthorizationSession(\n apiBaseUrl: string,\n token: string,\n accountId: string,\n credentialId: string,\n options?: { tokenAddress?: string; chainId?: number },\n): Promise<{ id: string; status: string; uri: string }> {\n const body: Record<string, unknown> = { credentialId };\n if (options?.tokenAddress) body.tokenAddress = options.tokenAddress;\n if (options?.chainId != null) body.chainId = options.chainId;\n\n const res = await fetch(\n `${apiBaseUrl}/v1/accounts/${accountId}/authorization-sessions`,\n {\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 { id: string; status: string; uri: string };\n}\n\n// ── Transfers ──────────────────────────────────────────────────────────\n\nexport interface CreateTransferParams {\n /** Caller-supplied UUID v4 for idempotency. If omitted, a random UUID is generated. */\n id?: string;\n credentialId: string;\n merchantAuthorization?: MerchantAuthorization;\n sourceType: SourceType;\n sourceId: string;\n /** ERC-20 contract address of the selected source token. */\n sourceTokenAddress?: string;\n destination: Destination;\n amount: number;\n currency?: string;\n /** Pre-transfer fee quote ID for advisory linkage. */\n quoteId?: string;\n}\n\nexport async function createTransfer(\n apiBaseUrl: string,\n token: string,\n params: CreateTransferParams,\n): Promise<Transfer> {\n if (!params.merchantAuthorization) {\n throw new Error('merchantAuthorization is required for transfer creation.');\n }\n\n const body = {\n type: 'standard' as const,\n id: params.id ?? crypto.randomUUID(),\n credentialId: params.credentialId,\n merchantAuthorization: params.merchantAuthorization,\n sources: [{\n [params.sourceType]: params.sourceId,\n ...(params.sourceTokenAddress ? { tokenAddress: params.sourceTokenAddress } : {}),\n }],\n destinations: [\n {\n chainId: params.destination.chainId,\n token: { address: params.destination.token.address },\n address: params.destination.address,\n },\n ],\n amount: {\n amount: params.amount,\n currency: params.currency ?? 'USD',\n },\n ...(params.quoteId ? { quoteId: params.quoteId } : {}),\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\n// ── Transfer Quotes ───────────────────────────────────────────────────\n\nexport interface TransferQuote {\n id: string;\n fee: PreciseMoney;\n expiresAt: string;\n}\n\nexport async function postTransferQuote(\n apiBaseUrl: string,\n bearerToken: string,\n params: {\n walletId: string;\n sourceTokenAddress?: string;\n destination: Destination;\n amount: { amount: number; currency: string };\n },\n): Promise<TransferQuote> {\n const body = {\n walletId: params.walletId,\n ...(params.sourceTokenAddress ? { sourceTokenAddress: params.sourceTokenAddress } : {}),\n destination: {\n chainId: params.destination.chainId,\n token: { address: params.destination.token.address },\n address: params.destination.address,\n },\n amount: params.amount,\n };\n const res = await fetch(`${apiBaseUrl}/v1/transfers/quotes`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${bearerToken}`,\n },\n body: JSON.stringify(body),\n });\n if (!res.ok) await throwApiError(res);\n return (await res.json()) as TransferQuote;\n}\n\nexport async function fetchMerchantPublicKey(\n apiBaseUrl: string,\n merchantId: string,\n): Promise<MerchantPublicKey> {\n const res = await fetch(\n `${apiBaseUrl}/v1/merchants/${encodeURIComponent(merchantId)}/public-key`,\n );\n if (!res.ok) await throwApiError(res);\n return (await res.json()) as MerchantPublicKey;\n}\n\nexport async function fetchTransfer(\n apiBaseUrl: string,\n token: string,\n transferId: string,\n authorizationSessionToken?: string,\n): Promise<Transfer> {\n if (!token && !authorizationSessionToken) {\n throw new Error('Missing auth credentials for transfer fetch.');\n }\n const res = await fetch(`${apiBaseUrl}/v1/transfers/${transferId}`, {\n headers: {\n ...(token ? { Authorization: `Bearer ${token}` } : {}),\n ...(authorizationSessionToken\n ? { 'x-authorization-session-token': authorizationSessionToken }\n : {}),\n },\n });\n if (!res.ok) await throwApiError(res);\n return (await res.json()) as Transfer;\n}\n\n/**\n * Submit a passkey-signed UserOperation for a transfer.\n * PATCH /v1/transfers/{transferId}\n */\nexport async function signTransfer(\n apiBaseUrl: string,\n token: string,\n transferId: string,\n signedUserOp: Record<string, unknown>,\n authorizationSessionToken?: string,\n): Promise<Transfer> {\n if (!token && !authorizationSessionToken) {\n throw new Error('Missing auth credentials for transfer signing.');\n }\n\n const res = await fetch(`${apiBaseUrl}/v1/transfers/${transferId}`, {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json',\n ...(token ? { Authorization: `Bearer ${token}` } : {}),\n ...(authorizationSessionToken\n ? { 'x-authorization-session-token': authorizationSessionToken }\n : {}),\n },\n body: JSON.stringify({ signedUserOp }),\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 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\nexport async function fetchAuthorizationSessionByToken(\n apiBaseUrl: string,\n token: string,\n): Promise<AuthorizationSessionDetail> {\n const res = await fetch(\n `${apiBaseUrl}/v1/authorization-sessions?token=${encodeURIComponent(token)}`,\n );\n if (!res.ok) await throwApiError(res);\n return (await res.json()) as AuthorizationSessionDetail;\n}\n\n// ── Register Passkey ────────────────────────────────────────────────────\n\n/**\n * Registers a WebAuthn passkey for the authenticated user.\n * POST /v1/users/config/passkey\n */\nexport async function registerPasskey(\n apiBaseUrl: string,\n token: string,\n credentialId: string,\n publicKey: string,\n): Promise<void> {\n const res = await fetch(`${apiBaseUrl}/v1/users/config/passkey`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify({ credentialId, publicKey }),\n });\n if (!res.ok) await throwApiError(res);\n}\n\n// ── Passkey Activity ────────────────────────────────────────────────────\n\n/**\n * Reports passkey activity (verification) to update the last_active\n * timestamp server-side. Fire-and-forget — callers should not block on\n * the result.\n * PATCH /v1/users/config/passkey\n */\nexport async function reportPasskeyActivity(\n apiBaseUrl: string,\n token: string,\n credentialId: string,\n): Promise<void> {\n const res = await fetch(`${apiBaseUrl}/v1/users/config/passkey`, {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify({ credentialId }),\n });\n if (!res.ok) await throwApiError(res);\n}\n\n// ── User Config ─────────────────────────────────────────────────────────\n\n/**\n * Fetches the authenticated user's config, including passkey status.\n * GET /v1/users/config\n */\nexport async function fetchUserConfig(\n apiBaseUrl: string,\n token: string,\n): Promise<{ id: string; config: UserConfig }> {\n const res = await fetch(`${apiBaseUrl}/v1/users/config`, {\n headers: { Authorization: `Bearer ${token}` },\n });\n if (!res.ok) await throwApiError(res);\n return (await res.json()) as { id: string; config: UserConfig };\n}\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 default allowance for the authorization session.\n * PATCH /v1/authorization-sessions/{id}/user-config\n *\n * No bearer token — the session ID is the credential. When the session has no\n * linked user yet (e.g. guest account setup), config is stored on the session\n * and used as the account allowance until the user is claimed.\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\n// ── Guest Transfers ────────────────────────────────────────────────────\n\nexport interface CreateGuestTransferParams {\n id?: string;\n merchantAuthorization: MerchantAuthorization;\n destinations: Array<{\n chainId: number;\n token: { address: string };\n address: string;\n }>;\n amount: number;\n currency?: string;\n providerId: string;\n}\n\nexport interface GuestTransferResult {\n id: string;\n status: string;\n guestSessionToken: string;\n uri: string | null;\n expiresAt: string | null;\n amount: { amount: number; currency: string };\n destinations: Transfer['destinations'];\n sources: Transfer['sources'];\n createDate: string;\n updateDate: string;\n}\n\n/**\n * Create a guest transfer (no Privy auth required).\n * POST /v1/transfers with type=guest\n */\nexport async function createGuestTransfer(\n apiBaseUrl: string,\n params: CreateGuestTransferParams,\n): Promise<GuestTransferResult> {\n const body = {\n id: params.id ?? crypto.randomUUID(),\n type: 'guest' as const,\n merchantAuthorization: params.merchantAuthorization,\n destinations: params.destinations,\n amount: {\n amount: params.amount,\n currency: params.currency ?? 'USD',\n },\n providerId: params.providerId,\n };\n\n const res = await fetch(`${apiBaseUrl}/v1/transfers`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n });\n if (!res.ok) await throwApiError(res);\n return (await res.json()) as GuestTransferResult;\n}\n\n/**\n * Look up a guest transfer by session token.\n * GET /v1/transfers?guestToken=...\n */\nexport async function getTransferByGuestToken(\n apiBaseUrl: string,\n guestToken: string,\n): Promise<Transfer> {\n const params = new URLSearchParams({ guestToken });\n const res = await fetch(`${apiBaseUrl}/v1/transfers?${params.toString()}`);\n if (!res.ok) await throwApiError(res);\n return (await res.json()) as Transfer;\n}\n\n/**\n * Set the sender's wallet address and selected source token on a guest transfer.\n * PUT /v1/transfers/:id/sender\n */\n/**\n * Guest fee preview before PUT /sender (non-recommended token or refresh).\n * POST /v1/transfers/:id/quotes\n */\nexport async function postGuestTransferFeeQuote(\n apiBaseUrl: string,\n transferId: string,\n guestSessionToken: string,\n senderAddress: string,\n sourceChainId: number,\n sourceToken: string,\n): Promise<GuestTransferFee> {\n const res = await fetch(`${apiBaseUrl}/v1/transfers/${transferId}/quotes`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-guest-session-token': guestSessionToken,\n },\n body: JSON.stringify({ senderAddress, sourceChainId, sourceToken }),\n });\n if (!res.ok) await throwApiError(res);\n return (await res.json()) as GuestTransferFee;\n}\n\n/**\n * PUT /v1/transfers/:id/sender — guest probe (`senderAddress` only) or commit (full body).\n */\nexport async function putGuestTransferSender(\n apiBaseUrl: string,\n transferId: string,\n guestSessionToken: string,\n body: { senderAddress: string; sourceChainId?: number; sourceToken?: string },\n): Promise<SetTransferSenderResponse> {\n const res = await fetch(`${apiBaseUrl}/v1/transfers/${transferId}/sender`, {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json',\n 'x-guest-session-token': guestSessionToken,\n },\n body: JSON.stringify(body),\n });\n if (!res.ok) await throwApiError(res);\n return (await res.json()) as SetTransferSenderResponse;\n}\n\nexport async function setTransferSender(\n apiBaseUrl: string,\n transferId: string,\n guestSessionToken: string,\n senderAddress: string,\n sourceChainId: number,\n sourceToken: string,\n): Promise<SetTransferSenderResponse> {\n return putGuestTransferSender(apiBaseUrl, transferId, guestSessionToken, {\n senderAddress,\n sourceChainId,\n sourceToken,\n });\n}\n\n/**\n * Submit the origin chain tx hash for a guest transfer.\n * PATCH /v1/transfers/:id with { originTxHash }\n */\nexport async function signGuestTransfer(\n apiBaseUrl: string,\n transferId: string,\n guestSessionToken: string,\n originTxHash: string,\n): Promise<Transfer> {\n const res = await fetch(`${apiBaseUrl}/v1/transfers/${transferId}`, {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json',\n 'x-guest-session-token': guestSessionToken,\n },\n body: JSON.stringify({ originTxHash }),\n });\n if (!res.ok) await throwApiError(res);\n return (await res.json()) as Transfer;\n}\n\n/**\n * Poll a guest transfer by ID using the guest session token.\n * GET /v1/transfers/:id with x-guest-session-token header\n */\nexport async function getGuestTransfer(\n apiBaseUrl: string,\n transferId: string,\n guestSessionToken: string,\n): Promise<Transfer> {\n const res = await fetch(`${apiBaseUrl}/v1/transfers/${transferId}`, {\n headers: {\n 'x-guest-session-token': guestSessionToken,\n },\n });\n if (!res.ok) await throwApiError(res);\n return (await res.json()) as Transfer;\n}\n\n/** @alias GuestTransferBalanceItem */\nexport type GuestBalanceOption = GuestTransferBalanceItem;\n\n// ── Guest Accounts ────────────────────────────────────────────────────\n\nexport async function fetchGuestAccount(\n apiBaseUrl: string,\n guestToken: string,\n): Promise<{ accountId: string; hasPasskey: boolean; walletAddress: string | null } | null> {\n const params = new URLSearchParams({ guestToken });\n const res = await fetch(`${apiBaseUrl}/v1/accounts?${params.toString()}`);\n if (!res.ok) await throwApiError(res);\n const data = (await res.json()) as { items: { accountId: string; hasPasskey: boolean; walletAddress: string | null }[] };\n return data.items[0] ?? null;\n}\n\nexport async function createGuestAccount(\n apiBaseUrl: string,\n guestSessionToken: string,\n providerId: string,\n name: string,\n): Promise<{ accountId: string; sessionToken: string; sessionUri: string }> {\n const res = await fetch(`${apiBaseUrl}/v1/accounts`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-guest-session-token': guestSessionToken,\n },\n body: JSON.stringify({ providerId, name }),\n });\n if (!res.ok) await throwApiError(res);\n return (await res.json()) as { accountId: string; sessionToken: string; sessionUri: string };\n}\n\nexport async function setAccountOwner(\n apiBaseUrl: string,\n accessToken: string,\n accountId: string,\n guestSessionToken: string,\n body: { credentialId: string; publicKey: string },\n): Promise<{ accountId: string; smartAccountAddress: string; userOpHash: string }> {\n const res = await fetch(`${apiBaseUrl}/v1/accounts/${accountId}/owner`, {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${accessToken}`,\n 'x-guest-session-token': guestSessionToken,\n },\n body: JSON.stringify(body),\n });\n if (!res.ok) await throwApiError(res);\n return (await res.json()) as { accountId: string; smartAccountAddress: string; userOpHash: string };\n}\n\n// ── Authorization Actions ──────────────────────────────────────────────\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","import type { Transfer } from './types.ts';\nimport * as api from './api.ts';\n\nexport type PollTransferTickResult =\n | { kind: 'retry' }\n | { kind: 'success'; transfer: Transfer }\n | { kind: 'error'; message: string };\n\n/**\n * Single poll tick for authenticated transfer polling.\n *\n * Returns `retry` when `getAccessToken()` yields null — this handles the\n * transient window during Privy token refresh where the token is momentarily\n * unavailable. The caller (`useTransferPolling`) keeps the interval alive so\n * the next tick succeeds once the token is refreshed.\n *\n * Guest flows never reach this function. Guest transfer polling is handled\n * by `useGuestTransferHandlers` (inline loop using `api.getGuestTransfer`\n * with `x-guest-session-token`), and guest account polling by\n * `useGuestAccountPolling` (uses `api.fetchGuestAccount`).\n */\nexport async function pollTransferTick(params: {\n apiBaseUrl: string;\n transferId: string;\n getAccessToken: () => Promise<string | null>;\n fetchTransfer?: typeof api.fetchTransfer;\n}): Promise<PollTransferTickResult> {\n const fetchTransfer = params.fetchTransfer ?? api.fetchTransfer;\n const token = await params.getAccessToken();\n if (!token) {\n return { kind: 'retry' };\n }\n\n try {\n const transfer = await fetchTransfer(params.apiBaseUrl, token, params.transferId);\n return { kind: 'success', transfer };\n } catch (err) {\n return {\n kind: 'error',\n message: err instanceof Error ? err.message : 'Polling error',\n };\n }\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport { usePrivy } from '@privy-io/react-auth';\n\nimport type { Transfer } from '../types';\nimport { useBlinkConfig } from '../context';\nimport { pollTransferTick } from '../transferPolling';\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(\n intervalMs = 3000,\n overrideGetAccessToken?: () => Promise<string | null>,\n): UseTransferPollingResult {\n const { apiBaseUrl } = useBlinkConfig();\n const { getAccessToken: privyGetAccessToken } = usePrivy();\n const getAccessToken = overrideGetAccessToken ?? privyGetAccessToken;\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 const result = await pollTransferTick({\n apiBaseUrl,\n transferId: transferIdRef.current,\n getAccessToken,\n });\n\n if (result.kind === 'retry') {\n return;\n }\n\n if (result.kind === 'error') {\n setError(result.message);\n stopPolling();\n return;\n }\n\n setError(null);\n setTransfer(result.transfer);\n\n if (result.transfer.status === 'COMPLETED' || result.transfer.status === 'FAILED') {\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 poll();\n intervalRef.current = setInterval(poll, intervalMs);\n },\n [poll, intervalMs, stopPolling],\n );\n\n useEffect(() => () => stopPolling(), [stopPolling]);\n\n return { transfer, error, isPolling, startPolling, stopPolling };\n}\n","import { parseErc6492Signature } from 'viem/utils';\nimport { decodeAbiParameters } from 'viem';\n\nconst ERC_6492_MAGIC_SUFFIX =\n '6492649264926492649264926492649264926492649264926492649264926492';\n\n/**\n * Normalizes a wallet signature into the standard 65-byte `r || s || v`\n * format expected by viem and on-chain `ecrecover`.\n *\n * Handles the following formats transparently:\n *\n * - **65 bytes** (standard) — returned as-is.\n * - **64 bytes** (EIP-2098 compact) — `v` is extracted from the high bit\n * of `s` and appended.\n * - **ERC-6492 wrapped** — the magic suffix is detected and stripped via\n * viem's `parseErc6492Signature`, then the inner signature is\n * re-normalized.\n * - **ABI-encoded `SignatureWrapper(uint8 ownerIndex, bytes signatureData)`**\n * — used by Coinbase Smart Wallet / Base Wallet. The inner\n * `signatureData` is extracted and re-normalized.\n * - **Other >65-byte formats** — passed through as-is for EIP-1271\n * on-chain validation by smart contract account wallets.\n */\nexport function normalizeSignature(sig: string): `0x${string}` {\n const hex = sig.startsWith('0x') ? sig.slice(2) : sig;\n\n // 65 bytes — standard ECDSA (r=32 + s=32 + v=1)\n if (hex.length === 130) {\n return `0x${hex}` as `0x${string}`;\n }\n\n // 64 bytes — EIP-2098 compact (r=32 + yParityAndS=32)\n if (hex.length === 128) {\n const r = hex.slice(0, 64);\n const yParityAndS = hex.slice(64, 128);\n\n const highByte = parseInt(yParityAndS.slice(0, 2), 16);\n const v = (highByte & 0x80) !== 0 ? 28 : 27;\n\n const sFirstByte = (highByte & 0x7f).toString(16).padStart(2, '0');\n const s = sFirstByte + yParityAndS.slice(2);\n\n return `0x${r}${s}${v.toString(16)}` as `0x${string}`;\n }\n\n // ERC-6492 wrapped — ends with 32-byte magic suffix\n if (hex.length > 64 && hex.endsWith(ERC_6492_MAGIC_SUFFIX)) {\n const { signature: inner } = parseErc6492Signature(\n `0x${hex}` as `0x${string}`,\n );\n return normalizeSignature(inner);\n }\n\n // ABI-encoded SignatureWrapper(uint8 ownerIndex, bytes signatureData)\n // produced by Coinbase Smart Wallet / Base Wallet.\n if (hex.length > 130) {\n try {\n const [, innerBytes] = decodeAbiParameters(\n [{ type: 'uint256' }, { type: 'bytes' }],\n `0x${hex}` as `0x${string}`,\n );\n return normalizeSignature(innerBytes as string);\n } catch {\n // Try alternate ABI layout: abi.encode((uint8,bytes)).\n // This includes a top-level offset and is commonly 224 bytes.\n try {\n const [wrapper] = decodeAbiParameters(\n [{\n type: 'tuple',\n components: [{ type: 'uint8' }, { type: 'bytes' }],\n }],\n `0x${hex}` as `0x${string}`,\n );\n return normalizeSignature((wrapper as readonly [number, string])[1]);\n } catch {\n // Not a known wrapper — pass through for EIP-1271 on-chain validation.\n // SCA wallets may produce arbitrary-length contract signatures.\n return `0x${hex}` as `0x${string}`;\n }\n }\n }\n\n throw new Error(\n `Invalid signature: unable to normalize. Length=${hex.length / 2} bytes. ` +\n `Expected 65, 64, ERC-6492 wrapped, or ABI-encoded SignatureWrapper.`,\n );\n}\n","/** Thrown when `cancelPendingExecution()` rejects an in-flight session (user left funding UI). */\nexport class AuthorizationSessionCancelledError extends Error {\n constructor() {\n super('Authorization session cancelled');\n this.name = 'AuthorizationSessionCancelledError';\n }\n}\n\n/** True for client cancel or duplicate bundle copies where `instanceof` may fail. */\nexport function isAuthorizationSessionCancelled(err: unknown): boolean {\n if (err instanceof AuthorizationSessionCancelledError) return true;\n return (\n typeof err === 'object'\n && err !== null\n && 'name' in err\n && (err as { name: string }).name === 'AuthorizationSessionCancelledError'\n );\n}\n\n/**\n * Backend / wallet may surface user-dismissal with this wording; treat like cancel so deposit\n * does not keep a red banner after backing out of setup.\n */\nexport function isUserDismissedAuthorizationError(err: unknown): boolean {\n if (!(err instanceof Error)) return false;\n const m = err.message.toLowerCase();\n return m.includes('authorization session aborted') || m.includes('aborted by user');\n}\n\n/** True when the error represents any expected user-initiated cancellation of an authorization flow. */\nexport function isExpectedAuthorizationCancellation(err: unknown): boolean {\n return isAuthorizationSessionCancelled(err) || isUserDismissedAuthorizationError(err);\n}\n","import { useCallback, useRef, useState } from 'react';\nimport { useConfig, useConnect, useSwitchChain } from 'wagmi';\nimport { getAccount, getWalletClient } from '@wagmi/core';\nimport { recoverTypedDataAddress } from 'viem';\n\nimport type {\n AuthorizationAction,\n AuthorizationSessionDetail,\n ActionExecutionResult,\n SourceSelection,\n} from '../types';\nimport * as api from '../api';\nimport { useOptionalBlinkConfig } from '../context';\nimport { normalizeSignature } from '../signature';\nimport {\n AuthorizationSessionCancelledError,\n isAuthorizationSessionCancelled,\n isExpectedAuthorizationCancellation,\n} from '../authorizationErrors';\n\n// ── Authorization executor + action runners ───────────────────────────\n// ── Constants ──────────────────────────────────────────────────────────\n\nconst WALLET_CLIENT_MAX_ATTEMPTS = 25;\nconst WALLET_CLIENT_POLL_MS = 400;\n\nconst ACTION_POLL_INTERVAL_MS = 500;\nconst ACTION_POLL_MAX_RETRIES = 20;\n\nconst SIGN_PERMIT2_POLL_MS = 1000;\nconst SIGN_PERMIT2_MAX_POLLS = 15;\n\n\n// ── Types ──────────────────────────────────────────────────────────────\n\ntype WagmiConfig = Parameters<typeof getWalletClient>[0];\ntype Connectors = ReturnType<typeof useConnect>['connectors'];\ntype ConnectAsync = ReturnType<typeof useConnect>['connectAsync'];\ntype SwitchChainAsync = ReturnType<typeof useSwitchChain>['switchChainAsync'];\ntype SignTypedDataPayload = {\n domain: Record<string, unknown>;\n types: Record<string, Array<{ name: string; type: string }>>;\n primaryType: string;\n message: Record<string, unknown>;\n};\n\nfunction actionSuccess(\n action: AuthorizationAction,\n message: string,\n data?: unknown,\n): ActionExecutionResult {\n return { actionId: action.id, type: action.type, status: 'success', message, data };\n}\n\nfunction actionError(\n action: AuthorizationAction,\n message: string,\n): ActionExecutionResult {\n return { actionId: action.id, type: action.type, status: 'error', message };\n}\n\nfunction isUserRejection(msg: string): boolean {\n const lower = msg.toLowerCase();\n return lower.includes('rejected') || lower.includes('denied');\n}\n\nasync function waitForWalletClient(\n wagmiConfig: WagmiConfig,\n params: Parameters<typeof getWalletClient>[1] = {},\n) {\n for (let i = 0; i < WALLET_CLIENT_MAX_ATTEMPTS; i++) {\n try {\n const account = getAccount(wagmiConfig);\n const enrichedParams = account.connector\n ? { ...params, connector: account.connector }\n : params;\n return await getWalletClient(wagmiConfig, enrichedParams);\n } catch {\n if (i === WALLET_CLIENT_MAX_ATTEMPTS - 1) {\n throw new Error('Wallet not ready. Please try again.');\n }\n await new Promise((r) => setTimeout(r, WALLET_CLIENT_POLL_MS));\n }\n }\n throw new Error('Wallet not ready. Please try again.');\n}\n\nfunction parseSignTypedDataPayload(\n typedData: Record<string, unknown>,\n): SignTypedDataPayload {\n const { domain, types, primaryType, message } = typedData;\n\n if (!domain || typeof domain !== 'object' || Array.isArray(domain)) {\n throw new Error('SIGN_PERMIT2 typedData is missing a valid domain object.');\n }\n if (!types || typeof types !== 'object' || Array.isArray(types)) {\n throw new Error('SIGN_PERMIT2 typedData is missing a valid types object.');\n }\n if (typeof primaryType !== 'string') {\n throw new Error('SIGN_PERMIT2 typedData is missing primaryType.');\n }\n if (!message || typeof message !== 'object' || Array.isArray(message)) {\n throw new Error('SIGN_PERMIT2 typedData is missing a valid message object.');\n }\n\n return {\n domain: domain as Record<string, unknown>,\n types: types as Record<string, Array<{ name: string; type: string }>>,\n primaryType,\n message: message as Record<string, unknown>,\n };\n}\n\n/** Extract sorted pending actions from a session, excluding already-completed ones. */\nfunction getPendingActions(\n session: AuthorizationSessionDetail,\n completedIds: Set<string>,\n): AuthorizationAction[] {\n return session.actions\n .filter((a) => a.status === 'PENDING' && !completedIds.has(a.id))\n .sort((a, b) => a.orderIndex - b.orderIndex);\n}\n\n// ── Action executors ──────────────────────────────────────────────────\n//\n// Each function handles a single authorization action type. They are\n// standalone (not hooks) so they can be tested and reasoned about\n// independently. The useAuthorizationExecutor hook wires them together\n// with React state.\n\nasync function executeOpenProvider(\n action: AuthorizationAction,\n wagmiConfig: WagmiConfig,\n connectors: Connectors,\n connectAsync: ConnectAsync,\n): Promise<ActionExecutionResult> {\n try {\n const account = getAccount(wagmiConfig);\n\n if (account.isConnected && account.address) {\n const hexChainId = account.chainId\n ? `0x${account.chainId.toString(16)}`\n : undefined;\n return actionSuccess(action,\n `Connected. Account: ${account.address}, Chain: ${hexChainId}`,\n { accounts: [account.address], chainId: hexChainId },\n );\n }\n\n const targetId = action.metadata?.wagmiConnectorId as string | undefined;\n const metaMaskConnector = connectors.find((c) => {\n const id = c.id.toLowerCase();\n const name = c.name.toLowerCase();\n return id.includes('metamask') || name.includes('metamask');\n });\n const connector = targetId\n ? connectors.find((c) => c.id === targetId) ?? metaMaskConnector ?? connectors[0]\n : metaMaskConnector ?? connectors[0];\n\n if (!connector) {\n return actionError(action, 'No wallet connector found. Please install a supported wallet.');\n }\n\n const result = await connectAsync({ connector });\n const hexChainId = `0x${result.chainId.toString(16)}`;\n return actionSuccess(action,\n `Connected to ${connector.name}. Account: ${result.accounts[0]}, Chain: ${hexChainId}`,\n { accounts: [...result.accounts], chainId: hexChainId },\n );\n } catch (err) {\n return actionError(action,\n err instanceof Error ? err.message : 'Failed to connect wallet',\n );\n }\n}\n\nasync function executeSelectSource(\n action: AuthorizationAction,\n waitForSelection: (action: AuthorizationAction) => Promise<SourceSelection>,\n): 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 (!options || options.length === 0) {\n return actionError(\n action,\n 'No selectable source options returned by backend.',\n );\n }\n\n // Always pause for explicit user confirmation, including single-option cases.\n const selection = await waitForSelection(action);\n const isValidSelection = options.some(\n (option) => (\n option.chainName === selection.chainName\n && option.tokenSymbol === selection.tokenSymbol\n ),\n );\n\n if (!isValidSelection) {\n return actionError(\n action,\n 'Invalid source selection. Please choose one of the provided options.',\n );\n }\n\n return actionSuccess(action,\n `Selected ${selection.tokenSymbol} on ${selection.chainName}.`,\n { selectedChainName: selection.chainName, selectedTokenSymbol: selection.tokenSymbol },\n );\n } catch (err) {\n if (isAuthorizationSessionCancelled(err)) throw err;\n return actionError(action,\n err instanceof Error ? err.message : 'Failed to select source',\n );\n }\n}\n\nasync function executeSwitchChain(\n action: AuthorizationAction,\n wagmiConfig: WagmiConfig,\n switchChainAsync: SwitchChainAsync,\n): Promise<ActionExecutionResult> {\n try {\n const account = getAccount(wagmiConfig);\n const targetChainIdHex = action.metadata?.targetChainId as string | undefined;\n if (!targetChainIdHex) {\n return actionError(action, 'No targetChainId in action metadata.');\n }\n\n if (!/^0x[0-9a-fA-F]+$/.test(targetChainIdHex)) {\n return actionError(\n action,\n `Invalid targetChainId in action metadata: ${targetChainIdHex}`,\n );\n }\n\n const targetChainIdNum = parseInt(targetChainIdHex, 16);\n if (Number.isNaN(targetChainIdNum)) {\n return actionError(\n action,\n `Invalid targetChainId in action metadata: ${targetChainIdHex}`,\n );\n }\n const hexChainId = `0x${targetChainIdNum.toString(16)}`;\n\n if (account.chainId === targetChainIdNum) {\n return actionSuccess(action,\n `Already on chain ${hexChainId}. Skipped.`,\n { chainId: hexChainId, switched: false },\n );\n }\n\n await switchChainAsync({ chainId: targetChainIdNum });\n return actionSuccess(action,\n `Switched to chain ${hexChainId}.`,\n { chainId: hexChainId, switched: true },\n );\n } catch (err) {\n return actionError(action,\n err instanceof Error ? err.message : 'Failed to switch chain',\n );\n }\n}\n\n/**\n * Sends an ERC-20 `approve(permit2, maxUint256)` transaction from the\n * user's EOA so the Permit2 contract can manage their token allowances.\n */\nasync function executeApprovePermit2(\n action: AuthorizationAction,\n wagmiConfig: WagmiConfig,\n): Promise<ActionExecutionResult> {\n try {\n const walletClient = await waitForWalletClient(wagmiConfig);\n const account = getAccount(wagmiConfig);\n const sender = account.address ?? walletClient.account?.address;\n const expectedWallet = action.metadata?.walletAddress as string | undefined;\n\n if (!sender) {\n throw new Error('Wallet account not available. Please connect your wallet.');\n }\n\n if (expectedWallet && sender.toLowerCase() !== expectedWallet.toLowerCase()) {\n return actionError(action,\n `Connected wallet ${sender} does not match the required source wallet ` +\n `${expectedWallet}. Please switch accounts in your wallet and retry.`,\n );\n }\n\n const to = action.metadata?.to as string | undefined;\n const data = action.metadata?.data as string | undefined;\n const tokenSymbol = action.metadata?.tokenSymbol as string | undefined;\n\n if (!to || !data) {\n return actionError(action,\n 'APPROVE_PERMIT2 metadata is missing transaction parameters (to, data).',\n );\n }\n\n const txHash = await walletClient.request({\n method: 'eth_sendTransaction',\n params: [{\n from: sender,\n to: to as `0x${string}`,\n data: data as `0x${string}`,\n value: '0x0',\n }],\n });\n\n console.info(\n `[blink-sdk][approve-permit2] ERC-20 approve tx sent. ` +\n `token=${tokenSymbol ?? to}, txHash=${txHash}`,\n );\n\n return actionSuccess(action,\n `Approved Permit2 to spend ${tokenSymbol ?? 'tokens'}.`,\n { txHash },\n );\n } catch (err) {\n const msg = err instanceof Error ? err.message : 'Failed to approve Permit2';\n return actionError(action,\n isUserRejection(msg)\n ? 'You rejected the approval transaction. Please approve the Permit2 spending allowance in your wallet to continue.'\n : msg,\n );\n }\n}\n\n/**\n * Signs an EIP-712 typed-data message granting the user's smart account\n * a Permit2 allowance to pull tokens from their EOA.\n *\n * If typedData isn't available yet (smart account still deploying), polls\n * the session until it appears.\n */\nasync function executeSignPermit2(\n action: AuthorizationAction,\n wagmiConfig: WagmiConfig,\n apiBaseUrl: string,\n sessionId: string | null,\n): Promise<ActionExecutionResult> {\n try {\n const expectedWallet = action.metadata?.walletAddress as string | undefined;\n const walletClient = await waitForWalletClient(\n wagmiConfig,\n expectedWallet ? { account: expectedWallet as `0x${string}` } : {},\n );\n const account = getAccount(wagmiConfig);\n const connectedAddress = account.address ?? walletClient.account?.address;\n const sender = expectedWallet ?? connectedAddress;\n\n if (!sender) {\n throw new Error('Wallet account not available. Please connect your wallet.');\n }\n\n if (\n expectedWallet &&\n connectedAddress &&\n connectedAddress.toLowerCase() !== expectedWallet.toLowerCase()\n ) {\n return actionError(action,\n `Connected wallet ${connectedAddress} does not match the required source wallet ` +\n `${expectedWallet}. Please switch accounts in your wallet and retry.`,\n );\n }\n\n let typedData = action.metadata?.typedData as Record<string, unknown> | undefined;\n const tokenSymbol = action.metadata?.tokenSymbol as string | undefined;\n const ownerIsSCA = action.metadata?.ownerIsSCA === true;\n\n // Poll for typedData if the server hasn't populated it yet\n if (!typedData && sessionId) {\n for (let i = 0; i < SIGN_PERMIT2_MAX_POLLS; i++) {\n await new Promise((r) => setTimeout(r, SIGN_PERMIT2_POLL_MS));\n const session = await api.fetchAuthorizationSession(apiBaseUrl, sessionId);\n const updated = session.actions.find((a) => a.id === action.id);\n typedData = updated?.metadata?.typedData as Record<string, unknown> | undefined;\n if (typedData) break;\n }\n }\n\n if (!typedData) {\n return actionError(action,\n 'SIGN_PERMIT2 metadata is missing typedData. The server may still be preparing the signing payload.',\n );\n }\n\n const parsed = parseSignTypedDataPayload(typedData);\n\n console.info(\n `[blink-sdk][sign-permit2] Signing typed data. ` +\n `expectedOwner=${expectedWallet ?? 'N/A'}, senderParam=${sender}, ` +\n `connectedAddress=${connectedAddress ?? 'N/A'}, primaryType=${parsed.primaryType}, ` +\n `domainChainId=${String(parsed.domain.chainId ?? 'N/A')}, ` +\n `verifyingContract=${String(parsed.domain.verifyingContract ?? 'N/A')}`,\n );\n\n const rawSignature = await walletClient.signTypedData({\n account: sender as `0x${string}`,\n domain: parsed.domain as Parameters<typeof walletClient.signTypedData>[0]['domain'],\n types: parsed.types as Parameters<typeof walletClient.signTypedData>[0]['types'],\n primaryType: parsed.primaryType as Parameters<typeof walletClient.signTypedData>[0]['primaryType'],\n message: parsed.message as Parameters<typeof walletClient.signTypedData>[0]['message'],\n });\n\n // SCA owners: preserve the raw signature so the server and Permit2 contract\n // can forward it unchanged to the SCA's on-chain validator (e.g. Kernel\n // WebAuthn). Normalizing would strip the wrapper the validator expects.\n // EOA owners: normalize EIP-2098 compact / SignatureWrapper formats.\n const signature = ownerIsSCA\n ? ((rawSignature.startsWith('0x')\n ? rawSignature\n : `0x${rawSignature}`) as `0x${string}`)\n : normalizeSignature(rawSignature);\n\n if (ownerIsSCA) {\n console.info(\n `[blink-sdk][sign-permit2] Owner is SCA — preserving raw signature (${rawSignature.length / 2 - 1}B). ` +\n `Server will validate via EIP-1271.`,\n );\n } else {\n const recoverInput = {\n domain: parsed.domain,\n types: parsed.types,\n primaryType: parsed.primaryType,\n message: parsed.message,\n signature,\n } as unknown as Parameters<typeof recoverTypedDataAddress>[0];\n const recoveredSigner = await recoverTypedDataAddress(recoverInput);\n const expectedSigner = (expectedWallet ?? sender).toLowerCase();\n\n console.info(\n `[blink-sdk][sign-permit2] Signature recovered. ` +\n `recoveredSigner=${recoveredSigner}, expectedSigner=${expectedSigner}`,\n );\n\n if (recoveredSigner.toLowerCase() !== expectedSigner) {\n return actionError(action,\n `Wallet signed with ${recoveredSigner}, but source wallet is ` +\n `${expectedWallet ?? sender}. Please switch to the source wallet in MetaMask and retry.`,\n );\n }\n }\n\n console.info(\n `[blink-sdk][sign-permit2] Permit2 EIP-712 signature obtained. token=${tokenSymbol ?? 'unknown'}`,\n );\n\n return actionSuccess(action,\n `Permit2 allowance signed for ${tokenSymbol ?? 'tokens'}.`,\n { signature },\n );\n } catch (err) {\n const msg = err instanceof Error ? err.message : 'Failed to sign Permit2 allowance';\n return actionError(action,\n isUserRejection(msg)\n ? 'You rejected the Permit2 signature request. Please approve the signature in your wallet to allow fund transfers.'\n : msg,\n );\n }\n}\n\n// ── Authorization executor ─────────────────────────────────────────────\n\nexport { AuthorizationSessionCancelledError } from '../authorizationErrors';\n\nexport interface UseAuthorizationExecutorResult {\n executing: boolean;\n results: ActionExecutionResult[];\n error: string | null;\n /** The current action being executed (for UI display). */\n currentAction: AuthorizationAction | 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 One-Tap limit setup, null otherwise. */\n pendingOneTapSetup: AuthorizationAction | null;\n /** Call this from the UI after the user has set their One-Tap limit. */\n resolveOneTapSetup: () => void;\n /** Execute authorization by session id. Returns `false` if the user cancelled. */\n executeSessionById: (sessionId: string) => Promise<boolean>;\n /**\n * Number of nested `executeSessionById` runs on the stack (1 = single session).\n * Used to show OpenWallet during token reauthorization while the parent session is paused\n * on the One-Tap limit step (`pendingOneTapSetup`).\n */\n authorizationSessionStackDepth: number;\n /** Reject paused SELECT_SOURCE / One-Tap waits and reset executor flags (e.g. user backed to deposit). */\n cancelPendingExecution: () => void;\n}\n\nexport interface UseAuthorizationExecutorOptions {\n /** Optional API base URL override when used outside BlinkProvider. */\n apiBaseUrl?: string;\n}\n\n/**\n * Executes the full authorization flow for a transfer's first session:\n * fetches the session, walks through PENDING actions, reports each\n * completion to the server, and chains new actions that appear.\n *\n * Supported action types:\n * - OPEN_PROVIDER — connect the user's wallet\n * - SELECT_SOURCE — pause for user chain+token selection\n * - SWITCH_CHAIN — switch the wallet to the required chain\n * - CREATE_SMART_ACCOUNT — server-side smart account creation (legacy)\n * - DEPLOY_SMART_ACCOUNT — server-side on-chain deployment via no-op UserOp\n * - APPROVE_PERMIT2 — ERC-20 approve(permit2, maxUint256) from EOA\n * - SIGN_PERMIT2 — EIP-712 Permit2 allowance signature from EOA\n *\n * Transfer signing (passkey) is handled separately via\n * `useTransferSigning()` after the authorization flow completes.\n */\nexport function useAuthorizationExecutor(\n options?: UseAuthorizationExecutorOptions,\n): UseAuthorizationExecutorResult {\n const blinkConfig = useOptionalBlinkConfig();\n const apiBaseUrl = options?.apiBaseUrl ?? blinkConfig?.apiBaseUrl;\n const wagmiConfig = useConfig();\n const { connectAsync, connectors } = useConnect();\n const { switchChainAsync } = useSwitchChain();\n\n const [executing, setExecuting] = useState(false);\n const [results, setResults] = useState<ActionExecutionResult[]>([]);\n const [error, setError] = useState<string | null>(null);\n const [currentAction, setCurrentAction] = useState<AuthorizationAction | null>(null);\n const executingRef = useRef(false);\n /** True while paused in `waitForOneTapSetup` (SIGN_PERMIT2 awaiting limit). Allows nested token reauth. */\n const oneTapPauseActiveRef = useRef(false);\n const sessionStackRef = useRef<string[]>([]);\n const [authorizationSessionStackDepth, setAuthorizationSessionStackDepth] = useState(0);\n\n // SELECT_SOURCE pause mechanism\n const [pendingSelectSource, setPendingSelectSource] = useState<AuthorizationAction | null>(null);\n const selectSourceResolverRef = useRef<((selection: SourceSelection) => void) | null>(null);\n const selectSourceRejectRef = useRef<((reason?: unknown) => void) | null>(null);\n const sessionIdRef = useRef<string | null>(null);\n\n const resolveSelectSource = useCallback((selection: SourceSelection) => {\n if (selectSourceResolverRef.current) {\n selectSourceResolverRef.current(selection);\n selectSourceResolverRef.current = null;\n selectSourceRejectRef.current = null;\n setPendingSelectSource(null);\n }\n }, []);\n\n const waitForSelection = useCallback(\n (action: AuthorizationAction) =>\n new Promise<SourceSelection>((resolve, reject) => {\n selectSourceResolverRef.current = (selection: SourceSelection) => {\n resolve(selection);\n selectSourceResolverRef.current = null;\n selectSourceRejectRef.current = null;\n };\n selectSourceRejectRef.current = reject;\n setPendingSelectSource(action);\n }),\n [],\n );\n\n // One-Tap setup pause mechanism (pauses before SIGN_PERMIT2 when awaitingLimit)\n const [pendingOneTapSetup, setPendingOneTapSetup] = useState<AuthorizationAction | null>(null);\n const oneTapSetupResolverRef = useRef<(() => void) | null>(null);\n const oneTapSetupRejectRef = useRef<((reason?: unknown) => void) | null>(null);\n\n const resolveOneTapSetup = useCallback(() => {\n if (oneTapSetupResolverRef.current) {\n oneTapSetupResolverRef.current();\n oneTapSetupResolverRef.current = null;\n oneTapSetupRejectRef.current = null;\n setPendingOneTapSetup(null);\n }\n }, []);\n\n const waitForOneTapSetup = useCallback(\n (action: AuthorizationAction) =>\n new Promise<void>((resolve, reject) => {\n oneTapPauseActiveRef.current = true;\n oneTapSetupResolverRef.current = () => {\n oneTapPauseActiveRef.current = false;\n resolve();\n oneTapSetupResolverRef.current = null;\n oneTapSetupRejectRef.current = null;\n };\n oneTapSetupRejectRef.current = (reason?: unknown) => {\n oneTapPauseActiveRef.current = false;\n reject(reason);\n };\n setPendingOneTapSetup(action);\n }),\n [],\n );\n\n const cancelPendingExecution = useCallback(() => {\n if (selectSourceRejectRef.current) {\n selectSourceRejectRef.current(new AuthorizationSessionCancelledError());\n selectSourceRejectRef.current = null;\n selectSourceResolverRef.current = null;\n setPendingSelectSource(null);\n }\n if (oneTapSetupRejectRef.current) {\n oneTapPauseActiveRef.current = false;\n oneTapSetupRejectRef.current(new AuthorizationSessionCancelledError());\n oneTapSetupRejectRef.current = null;\n oneTapSetupResolverRef.current = null;\n setPendingOneTapSetup(null);\n }\n setError(null);\n setCurrentAction(null);\n setExecuting(false);\n executingRef.current = false;\n }, []);\n\n // ── Dispatch a single action to the appropriate executor ───────────\n\n const dispatchAction = useCallback(\n async (action: AuthorizationAction): Promise<ActionExecutionResult> => {\n setCurrentAction(action);\n switch (action.type) {\n case 'OPEN_PROVIDER':\n return executeOpenProvider(action, wagmiConfig, connectors, connectAsync);\n case 'SELECT_SOURCE':\n return executeSelectSource(action, waitForSelection);\n case 'SWITCH_CHAIN':\n return executeSwitchChain(action, wagmiConfig, switchChainAsync);\n case 'APPROVE_PERMIT2':\n return executeApprovePermit2(action, wagmiConfig);\n case 'DEPLOY_SMART_ACCOUNT':\n return actionSuccess(action, 'Smart account deployment acknowledged.');\n case 'SIGN_PERMIT2': {\n let resolvedAction = action;\n if (action.metadata?.awaitingLimit) {\n await waitForOneTapSetup(action);\n if (apiBaseUrl && sessionIdRef.current) {\n const session = await api.fetchAuthorizationSession(apiBaseUrl, sessionIdRef.current);\n const refreshed = session.actions.find((a) => a.id === action.id);\n if (refreshed) resolvedAction = refreshed;\n }\n }\n return executeSignPermit2(resolvedAction, wagmiConfig, apiBaseUrl ?? '', sessionIdRef.current);\n }\n default:\n return actionError(action, `Unsupported action type: ${action.type}`);\n }\n },\n [wagmiConfig, connectors, connectAsync, switchChainAsync, apiBaseUrl, waitForSelection, waitForOneTapSetup],\n );\n\n // ── Main session executor ──────────────────────────────────────────\n\n const executeSessionById = useCallback(\n async (sessionId: string) => {\n if (!sessionId) {\n throw new Error('No authorization session id provided.');\n }\n\n if (!apiBaseUrl) {\n throw new Error('Missing apiBaseUrl. Provide useAuthorizationExecutor({ apiBaseUrl }) or wrap in <BlinkProvider>.');\n }\n\n const allowNested = executingRef.current && oneTapPauseActiveRef.current;\n if (executingRef.current && !allowNested) {\n return false;\n }\n\n const isNestedRun = allowNested;\n if (!isNestedRun) {\n executingRef.current = true;\n setExecuting(true);\n setResults([]);\n }\n\n setError(null);\n sessionStackRef.current.push(sessionId);\n setAuthorizationSessionStackDepth(sessionStackRef.current.length);\n sessionIdRef.current = sessionId;\n\n try {\n let session = await api.fetchAuthorizationSession(apiBaseUrl, sessionId);\n const allResults: ActionExecutionResult[] = [];\n const completedIds = new Set<string>();\n\n // Wait for the server to create initial actions\n let pending = getPendingActions(session, completedIds);\n let retries = 0;\n\n while (\n pending.length === 0 &&\n session.status !== 'AUTHORIZED' &&\n retries < ACTION_POLL_MAX_RETRIES\n ) {\n await new Promise((r) => setTimeout(r, ACTION_POLL_INTERVAL_MS));\n session = await api.fetchAuthorizationSession(apiBaseUrl, sessionId);\n pending = getPendingActions(session, completedIds);\n retries++;\n }\n\n if (pending.length === 0 && session.status !== 'AUTHORIZED') {\n throw new Error('Authorization actions were not created in time. Please try again.');\n }\n\n // Execute actions one by one, re-fetching pending after each report\n while (pending.length > 0) {\n const action = pending[0];\n if (completedIds.has(action.id)) break;\n\n const result = await dispatchAction(action);\n\n if (result.status === 'error') {\n allResults.push(result);\n setResults([...allResults]);\n throw new Error(result.message);\n }\n\n completedIds.add(action.id);\n allResults.push(result);\n\n session = await api.reportActionCompletion(\n apiBaseUrl,\n action.id,\n (result.data as Record<string, unknown>) ?? {},\n );\n\n setResults([...allResults]);\n pending = getPendingActions(session, completedIds);\n }\n\n return true;\n } catch (err) {\n if (isExpectedAuthorizationCancellation(err)) {\n setError(null);\n return false;\n }\n const msg = err instanceof Error ? err.message : 'Authorization failed';\n setError(msg);\n throw err;\n } finally {\n sessionStackRef.current.pop();\n const depth = sessionStackRef.current.length;\n setAuthorizationSessionStackDepth(depth);\n sessionIdRef.current =\n depth > 0 ? sessionStackRef.current[depth - 1]! : null;\n setCurrentAction(null);\n if (depth === 0) {\n setExecuting(false);\n executingRef.current = false;\n }\n }\n },\n [apiBaseUrl, dispatchAction],\n );\n\n return {\n executing,\n results,\n error,\n currentAction,\n pendingSelectSource,\n resolveSelectSource,\n pendingOneTapSetup,\n resolveOneTapSetup,\n executeSessionById,\n cancelPendingExecution,\n authorizationSessionStackDepth,\n };\n}\n","import { useCallback, useState } from 'react';\nimport { usePrivy } from '@privy-io/react-auth';\n\nimport type { Transfer, TransferSignPayload } from '../types';\nimport * as api from '../api';\nimport { useOptionalBlinkConfig } from '../context';\nimport { credentialIdBase64ToBytes } from '../credentialIdEncoding.ts';\nimport { resolvePasskeyRpId } from './passkeyPublic';\n\ntype AccessTokenGetter = () => Promise<string | null | undefined>;\n\n// ── Transfer signing (post-auth passkey flow) ─────────────────────────\nconst TRANSFER_SIGN_MAX_POLLS = 60;\nfunction waitForDocumentFocus(timeoutMs = 5000, intervalMs = 100): Promise<void> {\n return new Promise((resolve, reject) => {\n if (typeof document === 'undefined') {\n resolve();\n return;\n }\n\n if (document.hasFocus()) {\n resolve();\n return;\n }\n\n const deadline = Date.now() + timeoutMs;\n\n const timer = setInterval(() => {\n if (document.hasFocus()) {\n clearInterval(timer);\n resolve();\n } else if (Date.now() >= deadline) {\n clearInterval(timer);\n // Attempt the WebAuthn call anyway — some browsers report hasFocus()\n // as false even when the user is actively interacting with the page.\n resolve();\n }\n }, intervalMs);\n });\n}\nfunction hexToBytes(hex: string): Uint8Array<ArrayBuffer> {\n const clean = hex.startsWith('0x') ? hex.slice(2) : hex;\n const bytes = clean.match(/.{1,2}/g)!.map((b) => parseInt(b, 16));\n return new Uint8Array(bytes) as Uint8Array<ArrayBuffer>;\n}\n\nfunction toBase64(buffer: ArrayBuffer | ArrayBufferLike): string {\n return btoa(String.fromCharCode(...new Uint8Array(buffer)));\n}\n\nexport interface UseTransferSigningResult {\n signing: boolean;\n signPayload: TransferSignPayload | null;\n error: string | null;\n /**\n * Starts the signing flow:\n * 1. Polls GET /v1/transfers/{id} until signPayload is present\n * 2. Triggers WebAuthn passkey prompt\n * 3. Submits signed UserOp via PATCH /v1/transfers/{id}\n */\n signTransfer: (transferId: string) => Promise<Transfer>;\n}\n\nexport interface UseTransferSigningOptions {\n /** Optional API base URL override when used outside BlinkProvider. */\n apiBaseUrl?: string;\n /** Optional access-token getter override (e.g. deeplink query token). */\n getAccessToken?: AccessTokenGetter;\n /** Optional authorization-session token for session-authenticated transfer signing. */\n authorizationSessionToken?: string;\n}\n\n/**\n * Post-authorization transfer signing hook.\n *\n * After the auth session completes and the transfer reaches AUTHORIZED,\n * the backend prepares a signPayload containing the unsigned UserOp.\n * This hook polls for it, prompts the user's passkey via WebAuthn, and\n * submits the signed UserOp back to the API.\n */\nexport function useTransferSigning(\n pollIntervalMs = 2000,\n options?: UseTransferSigningOptions,\n): UseTransferSigningResult {\n const blinkConfig = useOptionalBlinkConfig();\n const apiBaseUrl = options?.apiBaseUrl ?? blinkConfig?.apiBaseUrl;\n const authorizationSessionToken = options?.authorizationSessionToken;\n\n let privyGetAccessToken: AccessTokenGetter | undefined;\n try {\n ({ getAccessToken: privyGetAccessToken } = usePrivy());\n } catch {\n privyGetAccessToken = undefined;\n }\n const getAccessToken = options?.getAccessToken ?? privyGetAccessToken;\n const [signing, setSigning] = useState(false);\n const [signPayload, setSignPayload] = useState<TransferSignPayload | null>(null);\n const [error, setError] = useState<string | null>(null);\n\n const signTransfer = useCallback(\n async (transferId: string): Promise<Transfer> => {\n setSigning(true);\n setError(null);\n setSignPayload(null);\n\n try {\n if (!apiBaseUrl) {\n throw new Error('Missing apiBaseUrl. Provide useTransferSigning(_, { apiBaseUrl }) or wrap in <BlinkProvider>.');\n }\n if (!getAccessToken && !authorizationSessionToken) {\n throw new Error('Missing getAccessToken provider. Provide useTransferSigning(_, { getAccessToken }).');\n }\n const token = getAccessToken ? await getAccessToken() : null;\n if (!token && !authorizationSessionToken) {\n throw new Error('Could not get access token');\n }\n\n // 1. Poll for sign payload\n let payload: TransferSignPayload | null = null;\n\n for (let i = 0; i < TRANSFER_SIGN_MAX_POLLS; i++) {\n const transfer = await api.fetchTransfer(\n apiBaseUrl,\n token ?? '',\n transferId,\n authorizationSessionToken,\n );\n\n if (transfer.signPayload) {\n payload = transfer.signPayload;\n setSignPayload(payload);\n break;\n }\n\n // CREATED is a valid intermediate state — the backend may still\n // be transitioning to AUTHORIZED after the auth session completes.\n if (transfer.status !== 'AUTHORIZED' && transfer.status !== 'CREATED') {\n throw new Error(`Unexpected transfer status: ${transfer.status}`);\n }\n\n await new Promise((r) => setTimeout(r, pollIntervalMs));\n }\n\n if (!payload) {\n throw new Error('Timed out waiting for sign payload. Please try again.');\n }\n\n const passkeyCredentialId =\n typeof payload.passkeyCredentialId === 'string'\n ? payload.passkeyCredentialId.trim()\n : '';\n if (!passkeyCredentialId) {\n throw new Error(\n 'Sign payload is missing passkeyCredentialId. Cannot request passkey signing without it.',\n );\n }\n\n // 2. Prompt passkey via WebAuthn\n // The challenge MUST be the UserOp hash so the on-chain P-256\n // verifier can reconstruct the signed message via the EntryPoint.\n const hashBytes = hexToBytes(payload.userOpHash);\n\n let signedUserOp: typeof payload.userOp & {\n credentialId: string;\n signature: string;\n authenticatorData: string;\n clientDataJSON: string;\n };\n\n const allowCredentials = [{\n type: 'public-key' as const,\n id: credentialIdBase64ToBytes(passkeyCredentialId),\n }];\n\n const signingRpId = typeof window !== 'undefined'\n ? window.location.hostname\n : resolvePasskeyRpId();\n console.info('[blink-sdk] Transfer signing WebAuthn request', {\n signingRpId,\n resolvedRpId: resolvePasskeyRpId(),\n hostname: typeof window !== 'undefined' ? window.location.hostname : 'N/A',\n origin: typeof window !== 'undefined' ? window.location.origin : 'N/A',\n passkeyCredentialId,\n transferId,\n });\n\n await waitForDocumentFocus();\n\n const assertion = await navigator.credentials.get({\n publicKey: {\n challenge: hashBytes,\n rpId: signingRpId,\n allowCredentials,\n userVerification: 'required',\n timeout: 60000,\n },\n }) as PublicKeyCredential | null;\n\n if (!assertion) {\n throw new Error('Passkey authentication was cancelled.');\n }\n\n const response = assertion.response as AuthenticatorAssertionResponse;\n signedUserOp = {\n ...payload.userOp,\n credentialId: toBase64(assertion.rawId),\n signature: toBase64(response.signature),\n authenticatorData: toBase64(response.authenticatorData),\n clientDataJSON: toBase64(response.clientDataJSON),\n };\n\n // 3. Submit signed UserOp via PATCH\n return await api.signTransfer(\n apiBaseUrl,\n token ?? '',\n transferId,\n signedUserOp,\n authorizationSessionToken,\n );\n } catch (err) {\n const msg = err instanceof Error ? err.message : 'Failed to sign transfer';\n setError(msg);\n throw err;\n } finally {\n setSigning(false);\n }\n },\n [apiBaseUrl, getAccessToken, pollIntervalMs, authorizationSessionToken],\n );\n\n return { signing, signPayload, error, signTransfer };\n}\n","import type { Account, SourceOption, Wallet } from './types';\nimport type { PersistedMobileFlow } from './mobileFlow';\n\n// ── Constants ──────────────────────────────────────────────────────────\n\nexport const ACTIVE_CREDENTIAL_STORAGE_KEY = 'blink_active_credential_id';\nexport const MOBILE_FLOW_STORAGE_KEY = 'blink_mobile_flow';\nexport const POPUP_AUTH_STORAGE_KEY = 'blink_popup_auth';\n/** Default floor when the host has not set `depositAmount` on BlinkProvider. */\nexport const DEFAULT_MIN_SEND_AMOUNT_USD = 0.25;\n\nexport const MIN_SEND_AMOUNT_USD = DEFAULT_MIN_SEND_AMOUNT_USD;\n\n/**\n * Minimum transfer amount (USD) for client-side validation, aligned with\n * DepositScreen / StepRenderer: use the configured deposit when set,\n * otherwise the default floor.\n */\nexport function effectiveMinTransferAmountUsd(depositAmount: number | null): number {\n return depositAmount != null ? depositAmount : DEFAULT_MIN_SEND_AMOUNT_USD;\n}\n\n// ── Iframe detection ───────────────────────────────────────────────────\n\nexport function isInIframe(): boolean {\n try {\n return typeof window !== 'undefined' && window !== window.top;\n } catch {\n // Cross-origin access to window.top can throw; if it does we're in an iframe.\n return true;\n }\n}\n\n// ── Mobile flow sessionStorage persistence ─────────────────────────────\n//\n// On mobile, navigating to the wallet app can cause the browser to evict\n// the page from memory. When the user returns the page reloads from\n// scratch, losing all React state. These helpers persist the minimum\n// state needed to restore the OpenWalletScreen so the user can retry\n// or see the flow advance once authorization is detected.\n\nexport function persistMobileFlowState(data: PersistedMobileFlow): void {\n try {\n console.info('[blink-sdk] persistMobileFlowState', {\n isGuestPreauth: data.isGuestPreauth ?? false,\n isGuestCheckout: data.isGuestCheckout ?? false,\n isReauthorization: data.isReauthorization ?? false,\n isSetup: data.isSetup,\n hasGuestSessionToken: !!data.guestSessionToken,\n hasSessionId: !!data.sessionId,\n hasAccountId: !!data.accountId,\n hasTransferId: !!data.transferId,\n caller: new Error().stack?.split('\\n')[2]?.trim(),\n });\n sessionStorage.setItem(MOBILE_FLOW_STORAGE_KEY, JSON.stringify(data));\n } catch { /* sessionStorage may be unavailable */ }\n}\n\nexport function loadMobileFlowState(): PersistedMobileFlow | null {\n try {\n const raw = sessionStorage.getItem(MOBILE_FLOW_STORAGE_KEY);\n if (!raw) return null;\n return JSON.parse(raw) as PersistedMobileFlow;\n } catch {\n return null;\n }\n}\n\nexport function clearMobileFlowState(): void {\n try {\n console.info('[blink-sdk] clearMobileFlowState', {\n hadState: sessionStorage.getItem(MOBILE_FLOW_STORAGE_KEY) != null,\n caller: new Error().stack?.split('\\n')[2]?.trim(),\n });\n sessionStorage.removeItem(MOBILE_FLOW_STORAGE_KEY);\n } catch { /* sessionStorage may be unavailable */ }\n}\n\n// ── Popup auth localStorage persistence ─────────────────────────────────\n//\n// In Safari cross-origin iframes, passkey signup uses a popup window that\n// returns a Privy JWT. This token must survive component remount (e.g.\n// merchant calling requestDeposit() again) because Privy's own session\n// cannot persist across the ITP storage partition boundary.\n\nexport interface PersistedPopupAuth {\n accessToken: string;\n credentialId: string;\n publicKey: string;\n}\n\nconst JWT_EXPIRY_BUFFER_S = 30;\n\nfunction isJwtExpired(token: string): boolean {\n try {\n const parts = token.split('.');\n if (parts.length !== 3) return true;\n const payload = JSON.parse(atob(parts[1].replace(/-/g, '+').replace(/_/g, '/')));\n if (typeof payload.exp !== 'number') return true;\n return payload.exp - JWT_EXPIRY_BUFFER_S <= Date.now() / 1000;\n } catch {\n return true;\n }\n}\n\nexport function persistPopupAuth(data: PersistedPopupAuth): void {\n try {\n localStorage.setItem(POPUP_AUTH_STORAGE_KEY, JSON.stringify(data));\n } catch { /* localStorage may be unavailable */ }\n}\n\nexport function loadPopupAuth(): PersistedPopupAuth | null {\n try {\n const raw = localStorage.getItem(POPUP_AUTH_STORAGE_KEY);\n if (!raw) return null;\n const parsed = JSON.parse(raw) as PersistedPopupAuth;\n if (\n typeof parsed.accessToken !== 'string'\n || typeof parsed.credentialId !== 'string'\n || typeof parsed.publicKey !== 'string'\n ) {\n return null;\n }\n if (isJwtExpired(parsed.accessToken)) {\n clearPopupAuth();\n return null;\n }\n return parsed;\n } catch {\n return null;\n }\n}\n\nexport function clearPopupAuth(): void {\n try {\n localStorage.removeItem(POPUP_AUTH_STORAGE_KEY);\n } catch { /* localStorage may be unavailable */ }\n}\n\nexport function isPopupAuthExpired(accessToken: string): boolean {\n return isJwtExpired(accessToken);\n}\n\n// ── Smart default selection ────────────────────────────────────────────\n\nexport interface SmartDefaults {\n accountId: string;\n walletId: string | null;\n}\n\nexport function getWalletAddress(wallet: Pick<Wallet, 'name'>): string | null {\n const address = wallet.name.trim();\n return address.length > 0 ? address : null;\n}\n\nexport function getAddressableWallets(account: Account): Wallet[] {\n return account.wallets.filter((wallet) => getWalletAddress(wallet) != null);\n}\n\nexport function hasActiveDepositWallet(account: Account): boolean {\n return getAddressableWallets(account).some((wallet) => wallet.status === 'ACTIVE');\n}\n\nexport function getPreferredDepositWallet(\n account: Account,\n transferAmount: number,\n): Wallet | null {\n const wallets = getAddressableWallets(account);\n if (wallets.length === 0) return null;\n\n let bestWithAllowance: Wallet | null = null;\n let bestWithAllowanceBal = -1;\n let bestActive: Wallet | null = null;\n let bestActiveBal = -1;\n let bestAny: Wallet | null = null;\n let bestAnyBal = -1;\n\n for (const wallet of wallets) {\n const isActive = wallet.status === 'ACTIVE';\n const walletBal = wallet.balance.available.amount;\n\n if (isActive) {\n const hasFullyEligibleSource = wallet.sources.some(\n (s) =>\n s.balance.available.amount >= transferAmount\n && s.remainingAllowance != null\n && s.remainingAllowance >= transferAmount,\n );\n if (hasFullyEligibleSource && walletBal > bestWithAllowanceBal) {\n bestWithAllowance = wallet;\n bestWithAllowanceBal = walletBal;\n }\n if (walletBal > bestActiveBal) {\n bestActive = wallet;\n bestActiveBal = walletBal;\n }\n }\n if (walletBal > bestAnyBal) {\n bestAny = wallet;\n bestAnyBal = walletBal;\n }\n }\n\n return bestWithAllowance ?? bestActive ?? bestAny ?? wallets[0];\n}\n\nexport function getDepositEligibleAccounts(accounts: Account[]): Account[] {\n return accounts.filter((account) => getAddressableWallets(account).length > 0);\n}\n\nexport interface ReloadSelectionPrev {\n selectedAccountId: string | null;\n selectedWalletId: string | null;\n selectedTokenSymbol: string | null;\n}\n\n/**\n * After `fetchAccounts`, keep wallet+token coherent with pre-reload selection when possible.\n * Otherwise falls back to `resolveDepositSelection` and may request clearing `selectedTokenSymbol`.\n */\nexport function resolveDepositSelectionAfterRefresh(\n accounts: Account[],\n transferAmount: number,\n prev: ReloadSelectionPrev,\n): { defaults: SmartDefaults | null; resetSelectedTokenSymbol: boolean } {\n const { selectedAccountId, selectedWalletId, selectedTokenSymbol } = prev;\n\n if (selectedAccountId && selectedWalletId) {\n const acct = accounts.find((a) => a.id === selectedAccountId);\n const wallet = acct?.wallets.find((w) => w.id === selectedWalletId);\n if (wallet) {\n if (selectedTokenSymbol) {\n const hasToken = wallet.sources.some((s) => s.token.symbol === selectedTokenSymbol);\n if (hasToken) {\n return {\n defaults: { accountId: selectedAccountId, walletId: selectedWalletId },\n resetSelectedTokenSymbol: false,\n };\n }\n const fallback = resolveDepositSelection(accounts, transferAmount, selectedAccountId);\n return {\n defaults: fallback,\n resetSelectedTokenSymbol: true,\n };\n }\n return {\n defaults: { accountId: selectedAccountId, walletId: selectedWalletId },\n resetSelectedTokenSymbol: false,\n };\n }\n }\n\n return {\n defaults: resolveDepositSelection(accounts, transferAmount, selectedAccountId),\n resetSelectedTokenSymbol: false,\n };\n}\n\nexport function resolveDepositSelection(\n accounts: Account[],\n transferAmount: number,\n selectedAccountId?: string | null,\n): SmartDefaults | null {\n const eligibleAccounts = getDepositEligibleAccounts(accounts);\n if (eligibleAccounts.length === 0) return null;\n\n if (selectedAccountId) {\n const selectedAccount = eligibleAccounts.find((account) => account.id === selectedAccountId);\n if (selectedAccount) {\n const preferredWallet = getPreferredDepositWallet(selectedAccount, transferAmount);\n return {\n accountId: selectedAccount.id,\n walletId: preferredWallet?.id ?? null,\n };\n }\n }\n\n for (const account of eligibleAccounts) {\n const fullyEligibleWallet = getAddressableWallets(account).find(\n (wallet) =>\n wallet.status === 'ACTIVE'\n && wallet.sources.some(\n (source) =>\n source.balance.available.amount >= transferAmount\n && source.remainingAllowance != null\n && source.remainingAllowance >= transferAmount,\n ),\n );\n if (fullyEligibleWallet) {\n return {\n accountId: account.id,\n walletId: fullyEligibleWallet.id,\n };\n }\n }\n\n const fallbackAccount = eligibleAccounts[0];\n const fallbackWallet = getPreferredDepositWallet(fallbackAccount, transferAmount);\n return {\n accountId: fallbackAccount.id,\n walletId: fallbackWallet?.id ?? null,\n };\n}\n\nexport function computeSmartDefaults(\n accts: Account[],\n transferAmount: number,\n): SmartDefaults | null {\n if (accts.length === 0) return null;\n\n for (const acct of accts) {\n for (const wallet of acct.wallets) {\n if (wallet.status === 'ACTIVE') {\n const bestSource = wallet.sources.find(\n (s) => s.balance.available.amount >= transferAmount,\n );\n if (bestSource) {\n return { accountId: acct.id, walletId: wallet.id };\n }\n }\n }\n }\n\n let bestAccount: Account | null = null;\n let bestWallet: Wallet | null = null;\n let bestBalance = -1;\n let bestIsActive = false;\n\n for (const acct of accts) {\n for (const wallet of acct.wallets) {\n const walletBal = wallet.balance.available.amount;\n const isActive = wallet.status === 'ACTIVE';\n if (\n walletBal > bestBalance ||\n (walletBal === bestBalance && isActive && !bestIsActive)\n ) {\n bestBalance = walletBal;\n bestAccount = acct;\n bestWallet = wallet;\n bestIsActive = isActive;\n }\n }\n }\n\n if (bestAccount) {\n return {\n accountId: bestAccount.id,\n walletId: bestWallet?.id ?? null,\n };\n }\n\n return { accountId: accts[0].id, walletId: null };\n}\n\n// ── Source option helpers ───────────────────────────────────────────────\n\nexport function parseRawBalance(rawBalance: string, decimals: number): number {\n const parsed = Number(rawBalance);\n if (!Number.isFinite(parsed)) return 0;\n return parsed / 10 ** decimals;\n}\n\nexport interface SelectSourceChainChoice {\n chainName: string;\n balance: number;\n tokens: { tokenSymbol: string; balance: number }[];\n}\n\nexport function buildSelectSourceChoices(options: SourceOption[]): SelectSourceChainChoice[] {\n const chainChoices: SelectSourceChainChoice[] = [];\n const chainIndexByName = new Map<string, number>();\n\n for (const option of options) {\n const { chainName, tokenSymbol } = option;\n const balance = parseRawBalance(option.rawBalance, option.decimals);\n\n let chainChoice: SelectSourceChainChoice;\n const existingIdx = chainIndexByName.get(chainName);\n\n if (existingIdx === undefined) {\n chainChoice = { chainName, balance: 0, tokens: [] };\n chainIndexByName.set(chainName, chainChoices.length);\n chainChoices.push(chainChoice);\n } else {\n chainChoice = chainChoices[existingIdx];\n }\n\n chainChoice.balance += balance;\n const existing = chainChoice.tokens.find((t) => t.tokenSymbol === tokenSymbol);\n if (existing) {\n existing.balance += balance;\n } else {\n chainChoice.tokens.push({ tokenSymbol, balance });\n }\n }\n\n return chainChoices\n .map((chain) => ({\n ...chain,\n tokens: chain.tokens.filter((t) => t.balance > 0).sort((a, b) => b.balance - a.balance),\n }))\n .filter((chain) => chain.tokens.length > 0)\n .sort((a, b) => b.balance - a.balance);\n}\n\n/**\n * Spendable balance for SELECT_SOURCE / one-tap setup when source comes from session metadata.\n * Uses the row matching `chainName` + `tokenSymbol` when both are set; otherwise recommended\n * pair or the maximum balance across options (for initialization before selection is set).\n */\nexport function resolveSelectSourceAvailableBalance(\n choices: SelectSourceChainChoice[],\n options: SourceOption[],\n chainName: string,\n tokenSymbol: string,\n recommended: { chainName: string; tokenSymbol: string } | null,\n): number {\n const chain = chainName.trim();\n const token = tokenSymbol.trim();\n if (chain && token) {\n const chainChoice = choices.find((c) => c.chainName === chain);\n const row = chainChoice?.tokens.find((t) => t.tokenSymbol === token);\n if (row !== undefined) return row.balance;\n const direct = options.find(\n (opt) => opt.chainName === chain && opt.tokenSymbol === token,\n );\n if (direct) return parseRawBalance(direct.rawBalance, direct.decimals);\n return 0;\n }\n if (recommended) {\n const match = options.find(\n (opt) => opt.chainName === recommended.chainName && opt.tokenSymbol === recommended.tokenSymbol,\n );\n if (match) return parseRawBalance(match.rawBalance, match.decimals);\n }\n let max = 0;\n for (const opt of options) {\n const bal = parseRawBalance(opt.rawBalance, opt.decimals);\n if (bal > max) max = bal;\n }\n return max;\n}\n","const MOBILE_USER_AGENT_PATTERN =\n /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i;\n\nexport function isMobileUserAgent(userAgent: string | null | undefined): boolean {\n if (!userAgent) {\n return false;\n }\n\n return MOBILE_USER_AGENT_PATTERN.test(userAgent);\n}\n\nexport function shouldUseWalletConnector(options: {\n useWalletConnector?: boolean;\n userAgent: string | null | undefined;\n}): boolean {\n return options.useWalletConnector ?? !isMobileUserAgent(options.userAgent);\n}\n","import type { Transfer } from './types';\n\nexport const PROCESSING_TIMEOUT_MS = 180000;\n\n/** Transfer statuses that end the deposit flow (success, failure, or abandoned). */\nconst TERMINAL_TRANSFER_STATUSES = new Set<string>(['COMPLETED', 'FAILED', 'EXPIRED']);\n\nexport function isTerminalTransferStatus(status: string): boolean {\n return TERMINAL_TRANSFER_STATUSES.has(status);\n}\n\n/**\n * True when reducer `transfer` should keep the processing screen until a terminal status.\n * Aligns `resolvePhase` c6 and processing-timeout tracking with all pre-terminal API statuses\n * (e.g. AUTHORIZED after PATCH while jobs advance to SENDING).\n */\nexport function isTransferAwaitingCompletion(transfer: Transfer | null): boolean {\n if (!transfer) return false;\n return !isTerminalTransferStatus(transfer.status);\n}\n\nfunction resolvePreferredTransfer(\n polledTransfer: Transfer | null,\n localTransfer: Transfer | null,\n): Transfer | null {\n return polledTransfer ?? localTransfer;\n}\n\nexport function getTransferStatus(\n polledTransfer: Transfer | null,\n localTransfer: Transfer | null,\n): string {\n const transfer = resolvePreferredTransfer(polledTransfer, localTransfer);\n return transfer?.status ?? 'UNKNOWN';\n}\n\nexport function getDisplayTransferStatus(\n polledTransfer: Transfer | null,\n localTransfer: Transfer | null,\n): string {\n return getTransferStatus(polledTransfer, localTransfer).toUpperCase();\n}\n\nexport function getTransferIdSuffix(\n polledTransfer: Transfer | null,\n localTransfer: Transfer | null,\n): string {\n const transfer = resolvePreferredTransfer(polledTransfer, localTransfer);\n if (!transfer?.id) return 'n/a';\n return transfer.id.slice(-8);\n}\n\nexport function hasProcessingTimedOut(\n processingStartedAtMs: number | null,\n nowMs: number,\n): boolean {\n if (!processingStartedAtMs) return false;\n return nowMs - processingStartedAtMs >= PROCESSING_TIMEOUT_MS;\n}\n\nconst STATUS_DISPLAY_LABELS: Record<string, string> = {\n CREATED: 'created',\n AUTHORIZED: 'authorized',\n SENDING: 'sending',\n SENT: 'confirming delivery',\n COMPLETED: 'completed',\n FAILED: 'failed',\n};\n\nexport function getStatusDisplayLabel(status: string): string {\n return STATUS_DISPLAY_LABELS[status] ?? status;\n}\n\nexport function buildProcessingTimeoutMessage(status: string): string {\n const label = getStatusDisplayLabel(status);\n return `Payment is taking longer than expected (status: ${label}). Please try again.`;\n}\n","import type { PaymentPhase } from './resolveScreen.ts';\nimport type { PaymentState } from './paymentReducer.ts';\nimport { isTransferAwaitingCompletion } from './processingStatus.ts';\n\nfunction hasActiveWallet(accounts: PaymentState['accounts']): boolean {\n return accounts.some((a) => a.wallets.some((w) => w.status === 'ACTIVE'));\n}\n\n/**\n * Phases to preserve while guest desktop preauth runs against a still-COMPLETED guest payment transfer.\n * `processing` is included for inline one-tap: the bridge completes (transfer COMPLETED) but Permit2\n * executor hasn't started yet — keep the processing screen pinned instead of flashing to success.\n */\nfunction isGuestPreauthCompletedTransferPinPhase(phase: PaymentState['phase']): boolean {\n switch (phase.step) {\n case 'completed':\n case 'select-source':\n case 'one-tap-setup':\n case 'token-picker':\n case 'login':\n case 'data-loading':\n case 'processing':\n return true;\n case 'wallet-setup':\n return phase.mobile == null;\n default:\n return false;\n }\n}\n\n/**\n * Derives the correct phase from domain state after every action.\n * The phase is authoritative and stored in state; StepRenderer maps it via `screenForPhase`.\n *\n * Resolution uses mutually exclusive guards (`branch*` booleans). At most one should match; if more\n * than one is true, domain state is inconsistent and we log in development.\n */\nexport function resolvePhase(state: PaymentState): PaymentPhase {\n const currentPhase = state.phase;\n\n const transferCompleted = state.transfer?.status === 'COMPLETED';\n const needsPasskeyBootstrap = state.privyAuthenticated && !state.activeCredentialId;\n\n const guestPreauthPinsCurrentPhase =\n transferCompleted\n && state.guestPreauthorizing\n && isGuestPreauthCompletedTransferPinPhase(currentPhase);\n\n const guestPostPayLogin =\n transferCompleted\n && state.isGuestFlow\n && state.guestPreauthSessionId != null\n && !state.guestPreauthorizing\n && !state.privyAuthenticated;\n\n const guestTokenPickerEligible =\n state.isGuestFlow\n && state.selectedProviderId != null\n && !state.transfer\n && !state.guestPreauthAccountId;\n\n /** Pin guest-token-picker only while domain state still qualifies; avoids stale pin after GUEST_BACK. */\n const isFundingSourceSubflow =\n !state.loginRequested\n && (currentPhase.step === 'token-picker' || currentPhase.step === 'one-tap-setup'\n || currentPhase.step === 'select-source' || currentPhase.step === 'confirm-sign'\n || (currentPhase.step === 'guest-token-picker' && guestTokenPickerEligible));\n\n const walletPickerSwitchEligible =\n currentPhase.step === 'wallet-picker'\n && currentPhase.reason === 'switch'\n && !state.creatingTransfer\n && !(state.mobileFlow && state.deeplinkUri);\n\n const guestPreauthClaimPending =\n state.guestPreauthAccountId != null\n && state.guestSessionToken != null\n && state.privyAuthenticated\n && state.activeCredentialId != null\n && !state.guestPreauthSetupCompletePending\n && !state.error;\n\n // Mutually exclusive chain: each branch is gated by prior branches being false.\n const branchGuestSetupComplete =\n state.guestPreauthSetupCompletePending\n && state.privyReady\n && state.privyAuthenticated;\n\n const branchKeepGuestPreauthPin = !branchGuestSetupComplete && guestPreauthPinsCurrentPhase;\n\n const branchGuestPostPayLogin = !branchGuestSetupComplete && !branchKeepGuestPreauthPin\n && guestPostPayLogin;\n\n const branchCompleted =\n !branchGuestSetupComplete && !branchKeepGuestPreauthPin && !branchGuestPostPayLogin\n && transferCompleted\n && !needsPasskeyBootstrap\n && !guestPreauthClaimPending\n && !state.loginRequested;\n\n const branchFailed =\n !branchGuestSetupComplete && !branchKeepGuestPreauthPin && !branchGuestPostPayLogin\n && !branchCompleted && state.transfer?.status === 'FAILED';\n\n const branchProcessing =\n !branchGuestSetupComplete && !branchKeepGuestPreauthPin && !branchGuestPostPayLogin\n && !branchCompleted && !branchFailed\n && (state.creatingTransfer || isTransferAwaitingCompletion(state.transfer));\n\n /** Standard desktop: OpenWalletScreen while authorization executor runs (Permit2, etc.). */\n const branchStandardDesktopInlineOpenWallet =\n !branchGuestSetupComplete && !branchKeepGuestPreauthPin && !branchGuestPostPayLogin\n && !branchCompleted && !branchFailed && !branchProcessing\n && state.standardDesktopInlineOpenWallet\n && state.privyAuthenticated\n && state.activeCredentialId != null\n && state.selectedAccountId != null\n && !state.loginRequested\n && !state.guestPreauthorizing;\n\n const branchKeepFundingSubflow =\n !branchGuestSetupComplete && !branchKeepGuestPreauthPin && !branchGuestPostPayLogin\n && !branchCompleted && !branchFailed && !branchProcessing && !branchStandardDesktopInlineOpenWallet\n && isFundingSourceSubflow;\n\n const branchMobileWalletSetup =\n !branchGuestSetupComplete && !branchKeepGuestPreauthPin && !branchGuestPostPayLogin\n && !branchCompleted && !branchFailed && !branchProcessing && !branchKeepFundingSubflow\n && !branchStandardDesktopInlineOpenWallet\n && state.mobileFlow\n && state.deeplinkUri != null;\n\n const branchKeepGuestPreauthDesktopOpenWallet =\n !branchGuestSetupComplete && !branchKeepGuestPreauthPin && !branchGuestPostPayLogin\n && !branchCompleted && !branchFailed && !branchProcessing && !branchKeepFundingSubflow\n && !branchStandardDesktopInlineOpenWallet\n && !branchMobileWalletSetup\n && currentPhase.step === 'wallet-setup'\n && currentPhase.mobile == null\n && currentPhase.guestDesktopExtension === true\n && state.guestPreauthorizing\n && !state.privyAuthenticated\n && !state.loginRequested;\n\n const branchKeepGuestWalletSetup =\n !branchGuestSetupComplete && !branchKeepGuestPreauthPin && !branchGuestPostPayLogin\n && !branchCompleted && !branchFailed && !branchProcessing && !branchKeepFundingSubflow\n && !branchMobileWalletSetup\n && !branchStandardDesktopInlineOpenWallet\n && !branchKeepGuestPreauthDesktopOpenWallet\n && currentPhase.step === 'wallet-setup'\n && currentPhase.mobile == null\n && state.guestPreauthorizing\n && state.privyAuthenticated\n && state.activeCredentialId != null;\n\n const branchGuestTokenPicker =\n !branchGuestSetupComplete && !branchKeepGuestPreauthPin && !branchGuestPostPayLogin\n && !branchCompleted && !branchFailed && !branchProcessing && !branchKeepFundingSubflow\n && !branchMobileWalletSetup && !branchStandardDesktopInlineOpenWallet\n && !branchKeepGuestPreauthDesktopOpenWallet\n && !branchKeepGuestWalletSetup && guestTokenPickerEligible;\n\n const branchKeepWalletPickerSwitch =\n !branchGuestSetupComplete && !branchKeepGuestPreauthPin && !branchGuestPostPayLogin\n && !branchCompleted && !branchFailed && !branchProcessing && !branchKeepFundingSubflow\n && !branchMobileWalletSetup && !branchStandardDesktopInlineOpenWallet\n && !branchKeepGuestPreauthDesktopOpenWallet\n && !branchKeepGuestWalletSetup && !branchGuestTokenPicker\n && walletPickerSwitchEligible;\n\n const branchInitializingPrivy =\n !branchGuestSetupComplete && !branchKeepGuestPreauthPin && !branchGuestPostPayLogin\n && !branchCompleted && !branchFailed && !branchProcessing && !branchKeepFundingSubflow\n && !branchMobileWalletSetup && !branchStandardDesktopInlineOpenWallet\n && !branchKeepGuestPreauthDesktopOpenWallet\n && !branchKeepGuestWalletSetup && !branchGuestTokenPicker\n && !branchKeepWalletPickerSwitch\n && !state.privyReady;\n\n const priorBranchesBeforeLogin =\n !branchGuestSetupComplete && !branchKeepGuestPreauthPin && !branchGuestPostPayLogin\n && !branchCompleted && !branchFailed && !branchProcessing && !branchKeepFundingSubflow\n && !branchMobileWalletSetup && !branchStandardDesktopInlineOpenWallet\n && !branchKeepGuestPreauthDesktopOpenWallet\n && !branchKeepGuestWalletSetup && !branchGuestTokenPicker\n && !branchKeepWalletPickerSwitch && !branchInitializingPrivy;\n\n // After Privy passkey auth, credential is auto-registered; brief gap covered by initializing.\n const branchInitializingPasskeyConfig =\n priorBranchesBeforeLogin\n && state.privyAuthenticated\n && !state.activeCredentialId\n && !state.passkeyConfigLoaded;\n\n const branchLoginRequested =\n priorBranchesBeforeLogin\n && !branchInitializingPasskeyConfig\n && state.loginRequested;\n\n /** Guest post-pay preauth: after passkey, orphan account is not listed until `PUT .../owner` completes. */\n const branchGuestPreauthClaiming =\n priorBranchesBeforeLogin\n && !branchInitializingPasskeyConfig\n && !branchLoginRequested\n && guestPreauthClaimPending;\n\n const branchDataLoading =\n priorBranchesBeforeLogin\n && !branchInitializingPasskeyConfig\n && !branchLoginRequested\n && !branchGuestPreauthClaiming\n && state.loadingData\n && state.activeCredentialId != null;\n\n const branchWalletPickerLink =\n priorBranchesBeforeLogin\n && !branchInitializingPasskeyConfig\n && !branchLoginRequested\n && !branchGuestPreauthClaiming\n && !branchDataLoading\n && state.activeCredentialId != null\n && !hasActiveWallet(state.accounts)\n && !state.mobileFlow;\n\n const branchDeposit =\n priorBranchesBeforeLogin\n && !branchInitializingPasskeyConfig\n && !branchLoginRequested\n && !branchGuestPreauthClaiming\n && !branchDataLoading\n && !branchWalletPickerLink\n && state.activeCredentialId != null\n && hasActiveWallet(state.accounts)\n && !state.loadingData;\n\n const branchWalletPickerGuestEntry =\n priorBranchesBeforeLogin\n && !branchInitializingPasskeyConfig\n && !branchLoginRequested\n && !branchGuestPreauthClaiming\n && !branchDataLoading\n && !branchWalletPickerLink\n && !branchDeposit\n && state.isGuestFlow;\n\n const exclusiveBranchFlags = [\n branchGuestSetupComplete,\n branchKeepGuestPreauthPin,\n branchGuestPostPayLogin,\n branchCompleted,\n branchFailed,\n branchProcessing,\n branchStandardDesktopInlineOpenWallet,\n branchKeepFundingSubflow,\n branchMobileWalletSetup,\n branchKeepGuestPreauthDesktopOpenWallet,\n branchKeepGuestWalletSetup,\n branchGuestTokenPicker,\n branchKeepWalletPickerSwitch,\n branchInitializingPrivy,\n branchInitializingPasskeyConfig,\n branchLoginRequested,\n branchGuestPreauthClaiming,\n branchDataLoading,\n branchWalletPickerLink,\n branchDeposit,\n branchWalletPickerGuestEntry,\n ];\n const matchCount = exclusiveBranchFlags.filter(Boolean).length;\n if (matchCount > 1) {\n console.error('resolvePhase: multiple exclusive branches matched', {\n branches: {\n branchGuestSetupComplete,\n branchKeepGuestPreauthPin,\n branchGuestPostPayLogin,\n branchCompleted,\n branchFailed,\n branchProcessing,\n branchStandardDesktopInlineOpenWallet,\n branchKeepFundingSubflow,\n branchMobileWalletSetup,\n branchKeepGuestPreauthDesktopOpenWallet,\n branchKeepGuestWalletSetup,\n branchGuestTokenPicker,\n branchKeepWalletPickerSwitch,\n branchInitializingPrivy,\n branchInitializingPasskeyConfig,\n branchLoginRequested,\n branchGuestPreauthClaiming,\n branchDataLoading,\n branchWalletPickerLink,\n branchDeposit,\n branchWalletPickerGuestEntry,\n },\n });\n }\n\n let nextPhase: PaymentPhase;\n\n if (branchGuestSetupComplete) {\n nextPhase = { step: 'guest-setup-complete' };\n } else if (branchKeepGuestPreauthPin) {\n nextPhase = currentPhase;\n } else if (branchGuestPostPayLogin) {\n nextPhase = { step: 'login' };\n } else if (branchCompleted) {\n nextPhase = { step: 'completed', transfer: state.transfer! };\n } else if (branchFailed) {\n nextPhase = {\n step: 'failed',\n transfer: state.transfer!,\n error: state.error ?? 'Transfer failed.',\n };\n } else if (branchProcessing) {\n nextPhase = { step: 'processing', transfer: state.transfer };\n } else if (branchStandardDesktopInlineOpenWallet) {\n nextPhase = {\n step: 'wallet-setup',\n mobile: null,\n accountId: state.selectedAccountId!,\n guestDesktopExtension: true,\n };\n } else if (branchKeepFundingSubflow) {\n nextPhase = currentPhase;\n } else if (branchMobileWalletSetup) {\n nextPhase = {\n step: 'wallet-setup',\n mobile: { deeplinkUri: state.deeplinkUri!, providerId: state.selectedProviderId },\n accountId: null,\n };\n } else if (branchKeepGuestPreauthDesktopOpenWallet) {\n nextPhase = currentPhase;\n } else if (branchKeepGuestWalletSetup) {\n nextPhase = currentPhase;\n } else if (branchGuestTokenPicker) {\n nextPhase = { step: 'guest-token-picker' };\n } else if (branchKeepWalletPickerSwitch) {\n nextPhase = currentPhase;\n } else if (branchInitializingPrivy) {\n nextPhase = { step: 'initializing' };\n } else if (branchInitializingPasskeyConfig) {\n nextPhase = { step: 'initializing' };\n } else if (branchLoginRequested) {\n nextPhase = { step: 'login' };\n } else if (branchGuestPreauthClaiming) {\n nextPhase = { step: 'guest-preauth-linking' };\n } else if (branchDataLoading) {\n nextPhase = { step: 'data-loading' };\n } else if (branchWalletPickerLink) {\n nextPhase = { step: 'wallet-picker', reason: 'link' };\n } else if (branchDeposit) {\n nextPhase = { step: 'deposit' };\n } else if (branchWalletPickerGuestEntry) {\n nextPhase = { step: 'wallet-picker', reason: 'guest-entry' };\n } else {\n nextPhase = { step: 'wallet-picker', reason: 'entry' };\n }\n\n if (state.guestPreauthSessionId != null) {\n console.info('[blink-sdk] resolvePhase (guest preauth context)', {\n resolvedStep: nextPhase.step,\n currentStep: currentPhase.step,\n branchGuestPostPayLogin,\n branchMobileWalletSetup,\n branchLoginRequested,\n branchCompleted,\n branchKeepGuestPreauthPin,\n branchGuestSetupComplete,\n transferStatus: state.transfer?.status ?? null,\n mobileFlow: state.mobileFlow,\n deeplinkUri: state.deeplinkUri != null,\n loginRequested: state.loginRequested,\n guestPreauthorizing: state.guestPreauthorizing,\n privyAuthenticated: state.privyAuthenticated,\n isGuestFlow: state.isGuestFlow,\n });\n }\n\n return nextPhase;\n}\n","import type {\n Account,\n Chain,\n Provider,\n SourceType,\n Transfer,\n} from './types';\nimport type { SmartDefaults } from './paymentHelpers';\nimport type { PaymentPhase } from './resolveScreen.ts';\nimport { resolvePhase } from './paymentResolvePhase.ts';\n\nconst DEFAULT_GUEST_ONE_TAP_LIMIT = 10_000;\n\n// ── State ──────────────────────────────────────────────────────────────\n\n/** Snapshot for restoring deposit source after cancelling token reauth / increase-limit subflows. */\nexport interface SavedDepositSelection {\n selectedProviderId: string | null;\n selectedAccountId: string | null;\n selectedWalletId: string | null;\n selectedTokenSymbol: string | null;\n}\n\nexport interface PaymentState {\n phase: PaymentPhase;\n error: string | null;\n\n providers: Provider[];\n accounts: Account[];\n chains: Chain[];\n loadingData: boolean;\n\n selectedProviderId: string | null;\n selectedAccountId: string | null;\n selectedWalletId: string | null;\n selectedTokenSymbol: string | null;\n\n /** Non-null while a funding detour may clear selection (e.g. before `SELECT_PROVIDER` in reauth). */\n savedSelection: SavedDepositSelection | null;\n\n amount: string;\n\n transfer: Transfer | null;\n creatingTransfer: boolean;\n\n passkeyConfigLoaded: boolean;\n activeCredentialId: string | null;\n knownCredentialIds: string[];\n\n oneTapLimit: number;\n /** True after saving one-tap limit mid select-source flow; drives auto-resolve of pending one-tap setup. */\n oneTapLimitSavedDuringSetup: boolean;\n\n mobileFlow: boolean;\n deeplinkUri: string | null;\n\n increasingLimit: boolean;\n\n isGuestFlow: boolean;\n guestTransferId: string | null;\n guestSessionToken: string | null;\n\n guestPreauthAccountId: string | null;\n guestPreauthSessionId: string | null;\n activePublicKey: string | null;\n\n loginRequested: boolean;\n\n /** True while guest is running post-payment preauthorize (create account + auth session) on desktop. */\n guestPreauthorizing: boolean;\n\n /** Guest opted in to one-tap deposits on the guest deposit screen (inline Permit2 setup). */\n guestOneTapOptIn: boolean;\n /** Per-deposit limit chosen by the guest on the deposit screen (USD). */\n guestOneTapLimit: number;\n\n /**\n * Desktop standard flow: pin OpenWalletScreen while the authorization executor runs inline\n * (after setup Approve / token reauth). Cleared when the executor idles.\n */\n standardDesktopInlineOpenWallet: boolean;\n\n /**\n * After guest preauth account owner is set: show “Setup complete” + Close before deposit.\n * Cleared by `GUEST_PREAUTH_SETUP_COMPLETE_DISMISSED`.\n */\n guestPreauthSetupCompletePending: boolean;\n\n /** Mirrored from Privy `ready` — drives “initializing” until the auth client has booted. */\n privyReady: boolean;\n /** Mirrored from Privy `authenticated` — gates passkey bootstrap vs guest entry in resolvePhase. */\n privyAuthenticated: boolean;\n\n /** Timestamp of the most recent page resume (tab visible after freeze/background). Effect hooks\n * can include this in dependency arrays to re-poll when the page wakes up. */\n lastResumedAt: number;\n}\n\n// ── Actions ────────────────────────────────────────────────────────────\n\nexport type PaymentAction =\n // Passkey\n | { type: 'PASSKEY_CONFIG_LOADED'; knownIds: string[]; oneTapLimit?: number }\n | { type: 'PASSKEY_ACTIVATED'; credentialId: string; publicKey?: string }\n\n // Data loading\n | { type: 'DATA_LOAD_START' }\n | {\n type: 'DATA_LOADED';\n providers: Provider[];\n accounts: Account[];\n chains: Chain[];\n defaults: SmartDefaults | null;\n clearMobileState?: boolean;\n /** When true, clear `selectedTokenSymbol` so derived source can fall back after reload. */\n resetSelectedTokenSymbol?: boolean;\n }\n | { type: 'DATA_LOAD_END' }\n | {\n type: 'ACCOUNTS_RELOADED';\n accounts: Account[];\n providers: Provider[];\n defaults: SmartDefaults | null;\n resetSelectedTokenSymbol?: boolean;\n }\n\n // Deposit / funding subflow (save–restore around destructive `SELECT_PROVIDER` during reauth)\n | { type: 'SAVE_SELECTION' }\n | { type: 'RESTORE_SELECTION' }\n | { type: 'DISCARD_SAVED_SELECTION' }\n\n // Source selection\n | { type: 'SELECT_PROVIDER'; providerId: string }\n | { type: 'SELECT_ACCOUNT'; accountId: string; walletId: string | null }\n | { type: 'SELECT_TOKEN'; walletId: string; tokenSymbol: string }\n\n // Transfer lifecycle\n | { type: 'PAY_STARTED' }\n | { type: 'PAY_ENDED' }\n | { type: 'PAY_ERROR'; error: string }\n | { type: 'TRANSFER_CREATED'; transfer: Transfer }\n | { type: 'TRANSFER_SIGNED'; transfer: Transfer }\n | { type: 'TRANSFER_COMPLETED'; transfer: Transfer }\n | { type: 'TRANSFER_FAILED'; transfer: Transfer; error: string }\n | { type: 'PROCESSING_TIMEOUT'; error: string }\n | { type: 'CONFIRM_SIGN_SUCCESS'; transfer: Transfer }\n\n // Mobile flow\n | { type: 'MOBILE_DEEPLINK_READY'; deeplinkUri: string; guestTransferId?: string; guestSessionToken?: string }\n /** `transfer: null` clears terminal transfer; omit field to leave reducer `transfer` unchanged. */\n | { type: 'MOBILE_SETUP_COMPLETE'; transfer?: Transfer | null }\n | { type: 'MOBILE_SIGN_READY'; transfer: Transfer }\n | { type: 'CLEAR_MOBILE_STATE' }\n | {\n type: 'ENTER_MOBILE_FLOW';\n deeplinkUri: string;\n providerId: string | null;\n error?: string;\n }\n | {\n type: 'MOBILE_RESUME_SUCCESS';\n transfer: Transfer;\n /** Guest payment resume: keep guest session context when no orphaned preauth account exists. */\n guestCheckoutResume?: { guestSessionToken: string };\n }\n | { type: 'MOBILE_RESUME_FAILED'; transfer: Transfer }\n | { type: 'MOBILE_RESUME_PROCESSING'; transfer: Transfer }\n\n // Increase limit\n | { type: 'SET_INCREASING_LIMIT'; value: boolean }\n | { type: 'INCREASE_LIMIT_DEEPLINK'; transfer: Transfer; deeplinkUri: string }\n\n // User intent & error\n | { type: 'SET_USER_INTENT'; intent: PaymentPhase }\n /** Clears completed guest transfer during desktop preauth without forcing login (OpenWalletScreen first). */\n | { type: 'GUEST_PREAUTH_CLEAR_TRANSFER' }\n | { type: 'REQUEST_LOGIN' }\n | { type: 'SET_ERROR'; error: string | null }\n | { type: 'SET_ONE_TAP_LIMIT_SAVED_DURING_SETUP'; saved: boolean }\n | { type: 'SET_STANDARD_DESKTOP_INLINE_OPEN_WALLET'; value: boolean }\n\n // Guest inline one-tap opt-in\n | { type: 'SET_GUEST_ONE_TAP'; enabled: boolean }\n | { type: 'SET_GUEST_ONE_TAP_LIMIT'; limit: number }\n\n // Guest checkout\n | { type: 'GUEST_PROVIDER_SELECTED'; providerId: string; transferId: string; guestSessionToken: string }\n /** Leave guest token picker and return to guest wallet list (clears in-flight guest transfer). */\n | { type: 'GUEST_BACK_FROM_TOKEN_PICKER' }\n | { type: 'GUEST_TRANSFER_COMPLETED'; transfer: Transfer; guestSessionToken?: string }\n | { type: 'GUEST_PREAUTH_DETECTED'; accountId: string; sessionId?: string }\n | { type: 'GUEST_PREAUTH_BEGIN' }\n | { type: 'GUEST_PREAUTH_END' }\n | { type: 'ACCOUNT_OWNER_SET' }\n | { type: 'GUEST_PREAUTH_SETUP_COMPLETE_DISMISSED' }\n | {\n type: 'RESTORE_GUEST_PREAUTH_MOBILE';\n transfer: Transfer;\n guestSessionToken: string;\n guestPreauthAccountId: string;\n guestPreauthSessionId: string;\n selectedProviderId: string | null;\n deeplinkUri: string;\n mobileOpen: boolean;\n }\n /** Authenticated reload: COMPLETED guest transfer + guest preauth ids for `useGuestPreauthEffect`. */\n | {\n type: 'GUEST_PREAUTH_RESUME_WITH_TRANSFER';\n transfer: Transfer;\n guestSessionToken: string;\n guestPreauthAccountId: string;\n guestPreauthSessionId: string | null;\n selectedProviderId: string | null;\n }\n\n // Page lifecycle\n | { type: 'PAGE_RESUMED'; frozenDurationMs: number }\n\n // Lifecycle\n | {\n type: 'NEW_PAYMENT';\n depositAmount: number | null;\n firstAccountId: string | null;\n }\n | { type: 'LOGOUT'; depositAmount: number | null; privyReady: boolean }\n | { type: 'SYNC_PRIVY_SESSION'; ready: boolean; authenticated: boolean }\n | { type: 'SYNC_AMOUNT'; amount: string };\n\n// ── Derived values ─────────────────────────────────────────────────────\n\nexport function deriveSourceTypeAndId(state: PaymentState): {\n sourceType: SourceType;\n sourceId: string;\n} {\n if (state.selectedWalletId) {\n return { sourceType: 'walletId', sourceId: state.selectedWalletId };\n }\n if (state.selectedAccountId) {\n return { sourceType: 'accountId', sourceId: state.selectedAccountId };\n }\n return { sourceType: 'accountId', sourceId: '' };\n}\n\nexport { resolvePhase };\n\n// ── Initial state ──────────────────────────────────────────────────────\n\nexport interface InitialStateConfig {\n depositAmount: number | null;\n activeCredentialId: string | null;\n}\n\nexport function createInitialState(config: InitialStateConfig): PaymentState {\n return {\n phase: { step: 'initializing' },\n error: null,\n providers: [],\n accounts: [],\n chains: [],\n loadingData: false,\n selectedProviderId: null,\n selectedAccountId: null,\n selectedWalletId: null,\n selectedTokenSymbol: null,\n savedSelection: null,\n amount: config.depositAmount != null ? config.depositAmount.toString() : '',\n transfer: null,\n creatingTransfer: false,\n passkeyConfigLoaded: false,\n activeCredentialId: config.activeCredentialId,\n knownCredentialIds: [],\n oneTapLimit: 100,\n oneTapLimitSavedDuringSetup: false,\n mobileFlow: false,\n deeplinkUri: null,\n increasingLimit: false,\n isGuestFlow: false,\n guestTransferId: null,\n guestSessionToken: null,\n guestPreauthAccountId: null,\n guestPreauthSessionId: null,\n activePublicKey: null,\n loginRequested: false,\n guestPreauthorizing: false,\n guestOneTapOptIn: false,\n guestOneTapLimit: DEFAULT_GUEST_ONE_TAP_LIMIT,\n standardDesktopInlineOpenWallet: false,\n guestPreauthSetupCompletePending: false,\n privyReady: false,\n privyAuthenticated: false,\n lastResumedAt: 0,\n };\n}\n\n// ── Reducer ────────────────────────────────────────────────────────────\n//\n// Each case mutates domain state, then resolvePhase derives the phase.\n// Handlers can also set the phase explicitly for user-intent navigations\n// (e.g. SET_USER_INTENT dispatches a PaymentPhase directly).\n\nexport function paymentReducer(\n state: PaymentState,\n action: PaymentAction,\n): PaymentState {\n const next = applyAction(state, action);\n const phase = resolvePhase(next);\n if (action.type === 'REQUEST_LOGIN') {\n console.info('[blink-sdk] reducer REQUEST_LOGIN', {\n resolvedPhase: phase.step,\n mobileFlow: next.mobileFlow,\n loginRequested: next.loginRequested,\n guestPreauthSessionId: next.guestPreauthSessionId,\n guestPreauthAccountId: next.guestPreauthAccountId,\n transferStatus: next.transfer?.status ?? null,\n isGuestFlow: next.isGuestFlow,\n privyReady: next.privyReady,\n privyAuthenticated: next.privyAuthenticated,\n });\n }\n if (action.type === 'MOBILE_SETUP_COMPLETE') {\n console.info('[blink-sdk] reducer MOBILE_SETUP_COMPLETE', {\n resolvedPhase: phase.step,\n mobileFlow: next.mobileFlow,\n deeplinkUri: next.deeplinkUri,\n loginRequested: next.loginRequested,\n guestPreauthSessionId: next.guestPreauthSessionId,\n transferStatus: next.transfer?.status ?? null,\n isGuestFlow: next.isGuestFlow,\n });\n }\n return { ...next, phase };\n}\n\nfunction applyAction(\n state: PaymentState,\n action: PaymentAction,\n): PaymentState {\n switch (action.type) {\n // ── Passkey ──────────────────────────────────────────────────\n\n case 'PASSKEY_CONFIG_LOADED':\n return {\n ...state,\n knownCredentialIds: action.knownIds,\n passkeyConfigLoaded: true,\n oneTapLimit: action.oneTapLimit ?? state.oneTapLimit,\n };\n\n case 'PASSKEY_ACTIVATED':\n return {\n ...state,\n activeCredentialId: action.credentialId,\n activePublicKey: action.publicKey ?? state.activePublicKey,\n loadingData: true,\n };\n\n // ── Data loading ─────────────────────────────────────────────\n\n case 'DATA_LOAD_START':\n return { ...state, loadingData: true, error: null };\n\n case 'DATA_LOADED': {\n const next: PaymentState = {\n ...state,\n providers: action.providers,\n accounts: action.accounts,\n chains: action.chains,\n };\n\n if (action.defaults) {\n next.selectedAccountId = action.defaults.accountId;\n next.selectedWalletId = action.defaults.walletId;\n }\n\n if (action.clearMobileState) {\n next.mobileFlow = false;\n next.deeplinkUri = null;\n }\n\n if (action.resetSelectedTokenSymbol) {\n next.selectedTokenSymbol = null;\n }\n\n return next;\n }\n\n case 'DATA_LOAD_END':\n return { ...state, loadingData: false };\n\n case 'ACCOUNTS_RELOADED': {\n const next: PaymentState = {\n ...state,\n accounts: action.accounts,\n providers: action.providers,\n };\n if (action.defaults) {\n next.selectedAccountId = action.defaults.accountId;\n next.selectedWalletId = action.defaults.walletId;\n }\n if (action.resetSelectedTokenSymbol) {\n next.selectedTokenSymbol = null;\n }\n return next;\n }\n\n case 'SAVE_SELECTION':\n return {\n ...state,\n savedSelection: {\n selectedProviderId: state.selectedProviderId,\n selectedAccountId: state.selectedAccountId,\n selectedWalletId: state.selectedWalletId,\n selectedTokenSymbol: state.selectedTokenSymbol,\n },\n };\n\n case 'RESTORE_SELECTION': {\n const snap = state.savedSelection;\n if (!snap) {\n return {\n ...state,\n error: null,\n increasingLimit: false,\n };\n }\n return {\n ...state,\n selectedProviderId: snap.selectedProviderId,\n selectedAccountId: snap.selectedAccountId,\n selectedWalletId: snap.selectedWalletId,\n selectedTokenSymbol: snap.selectedTokenSymbol,\n savedSelection: null,\n error: null,\n increasingLimit: false,\n };\n }\n\n case 'DISCARD_SAVED_SELECTION':\n return { ...state, savedSelection: null };\n\n // ── Source selection ──────────────────────────────────────────\n\n case 'SELECT_PROVIDER':\n return {\n ...state,\n selectedProviderId: action.providerId,\n selectedAccountId: null,\n selectedWalletId: null,\n selectedTokenSymbol: null,\n };\n\n case 'SELECT_ACCOUNT':\n return {\n ...state,\n selectedAccountId: action.accountId,\n selectedWalletId: action.walletId,\n selectedTokenSymbol: null,\n };\n\n case 'SELECT_TOKEN':\n return {\n ...state,\n selectedWalletId: action.walletId,\n selectedTokenSymbol: action.tokenSymbol,\n };\n\n // ── Transfer lifecycle ───────────────────────────────────────\n\n case 'PAY_STARTED':\n return {\n ...state,\n error: null,\n creatingTransfer: true,\n deeplinkUri: null,\n mobileFlow: false,\n };\n\n case 'PAY_ENDED':\n return { ...state, creatingTransfer: false };\n\n case 'PAY_ERROR':\n return {\n ...state,\n error: action.error,\n creatingTransfer: false,\n };\n\n case 'TRANSFER_CREATED':\n return { ...state, transfer: action.transfer };\n\n case 'TRANSFER_SIGNED':\n return { ...state, transfer: action.transfer };\n\n case 'TRANSFER_COMPLETED':\n return {\n ...state,\n transfer: action.transfer,\n mobileFlow: false,\n deeplinkUri: null,\n };\n\n case 'TRANSFER_FAILED':\n return {\n ...state,\n transfer: action.transfer,\n error: action.error,\n mobileFlow: false,\n deeplinkUri: null,\n };\n\n case 'PROCESSING_TIMEOUT':\n return {\n ...state,\n error: action.error,\n transfer: null,\n creatingTransfer: false,\n };\n\n case 'CONFIRM_SIGN_SUCCESS':\n return {\n ...state,\n transfer: action.transfer,\n mobileFlow: false,\n deeplinkUri: null,\n };\n\n // ── Mobile flow ──────────────────────────────────────────────\n\n case 'MOBILE_DEEPLINK_READY':\n return {\n ...state,\n mobileFlow: true,\n deeplinkUri: action.deeplinkUri,\n ...(action.guestTransferId != null && {\n guestTransferId: action.guestTransferId,\n guestSessionToken: action.guestSessionToken ?? null,\n isGuestFlow: true,\n }),\n };\n\n case 'MOBILE_SETUP_COMPLETE':\n return {\n ...state,\n // Do not use `??`: explicit `null` must clear the transfer (guest preauth → login / claim).\n transfer: action.transfer !== undefined ? action.transfer : state.transfer,\n error: null,\n mobileFlow: false,\n deeplinkUri: null,\n };\n\n case 'MOBILE_SIGN_READY':\n return {\n ...state,\n transfer: action.transfer,\n error: null,\n mobileFlow: false,\n deeplinkUri: null,\n phase: { step: 'confirm-sign', transfer: action.transfer },\n };\n\n case 'CLEAR_MOBILE_STATE':\n return { ...state, mobileFlow: false, deeplinkUri: null };\n\n case 'ENTER_MOBILE_FLOW':\n return {\n ...state,\n mobileFlow: true,\n deeplinkUri: action.deeplinkUri,\n selectedProviderId: action.providerId ?? state.selectedProviderId,\n error: action.error ?? null,\n };\n\n case 'MOBILE_RESUME_SUCCESS': {\n const guestResume = action.guestCheckoutResume;\n return {\n ...state,\n transfer: action.transfer,\n error: null,\n mobileFlow: false,\n deeplinkUri: null,\n ...(guestResume\n ? {\n isGuestFlow: true,\n guestSessionToken: guestResume.guestSessionToken,\n guestTransferId: action.transfer.id,\n }\n : {}),\n };\n }\n\n case 'GUEST_PREAUTH_RESUME_WITH_TRANSFER':\n return {\n ...state,\n transfer: action.transfer,\n error: null,\n mobileFlow: false,\n deeplinkUri: null,\n isGuestFlow: true,\n guestSessionToken: action.guestSessionToken,\n guestTransferId: action.transfer.id,\n guestPreauthAccountId: action.guestPreauthAccountId,\n guestPreauthSessionId: action.guestPreauthSessionId ?? state.guestPreauthSessionId,\n selectedProviderId: action.selectedProviderId,\n selectedAccountId: action.guestPreauthAccountId,\n selectedWalletId: null,\n selectedTokenSymbol: null,\n };\n\n case 'MOBILE_RESUME_FAILED':\n return {\n ...state,\n transfer: action.transfer,\n error: 'Transfer failed.',\n mobileFlow: false,\n deeplinkUri: null,\n };\n\n case 'MOBILE_RESUME_PROCESSING':\n return {\n ...state,\n transfer: action.transfer,\n error: null,\n mobileFlow: false,\n deeplinkUri: null,\n };\n\n // ── Increase limit ───────────────────────────────────────────\n\n case 'SET_INCREASING_LIMIT':\n return { ...state, increasingLimit: action.value };\n\n case 'INCREASE_LIMIT_DEEPLINK':\n return {\n ...state,\n transfer: action.transfer,\n mobileFlow: true,\n deeplinkUri: action.deeplinkUri,\n };\n\n // ── Guest inline one-tap opt-in ──────────────────────────────\n\n case 'SET_GUEST_ONE_TAP':\n return { ...state, guestOneTapOptIn: action.enabled };\n\n case 'SET_GUEST_ONE_TAP_LIMIT':\n return { ...state, guestOneTapLimit: action.limit };\n\n // ── Guest checkout ────────────────────────────────────────────\n\n case 'GUEST_PROVIDER_SELECTED':\n return {\n ...state,\n isGuestFlow: true,\n selectedProviderId: action.providerId,\n guestTransferId: action.transferId,\n guestSessionToken: action.guestSessionToken,\n selectedAccountId: null,\n selectedWalletId: null,\n selectedTokenSymbol: null,\n };\n\n case 'GUEST_BACK_FROM_TOKEN_PICKER':\n return {\n ...state,\n selectedProviderId: null,\n guestTransferId: null,\n guestSessionToken: null,\n selectedAccountId: null,\n selectedWalletId: null,\n selectedTokenSymbol: null,\n guestOneTapOptIn: false,\n guestOneTapLimit: DEFAULT_GUEST_ONE_TAP_LIMIT,\n error: null,\n };\n\n case 'GUEST_TRANSFER_COMPLETED':\n return {\n ...state,\n transfer: action.transfer,\n mobileFlow: false,\n deeplinkUri: null,\n isGuestFlow: true,\n guestTransferId: null,\n guestSessionToken: action.guestSessionToken ?? state.guestSessionToken,\n };\n\n case 'GUEST_PREAUTH_DETECTED':\n return {\n ...state,\n guestPreauthAccountId: action.accountId,\n guestPreauthSessionId: action.sessionId ?? state.guestPreauthSessionId,\n selectedAccountId: action.accountId,\n selectedWalletId: null,\n selectedTokenSymbol: null,\n };\n\n case 'GUEST_PREAUTH_BEGIN':\n return { ...state, guestPreauthorizing: true, error: null };\n\n case 'GUEST_PREAUTH_END':\n return { ...state, guestPreauthorizing: false };\n\n case 'ACCOUNT_OWNER_SET':\n return {\n ...state,\n transfer: null,\n guestPreauthAccountId: null,\n guestPreauthSessionId: null,\n activePublicKey: null,\n error: null,\n guestPreauthorizing: false,\n isGuestFlow: false,\n selectedProviderId: null,\n guestTransferId: null,\n guestSessionToken: null,\n guestPreauthSetupCompletePending: true,\n };\n\n case 'GUEST_PREAUTH_SETUP_COMPLETE_DISMISSED':\n return { ...state, guestPreauthSetupCompletePending: false };\n\n case 'RESTORE_GUEST_PREAUTH_MOBILE':\n return {\n ...state,\n transfer: action.transfer,\n isGuestFlow: true,\n guestSessionToken: action.guestSessionToken,\n guestTransferId: action.transfer.id,\n guestPreauthAccountId: action.guestPreauthAccountId,\n guestPreauthSessionId: action.guestPreauthSessionId,\n selectedProviderId: action.selectedProviderId,\n selectedAccountId: action.guestPreauthAccountId,\n selectedWalletId: null,\n selectedTokenSymbol: null,\n mobileFlow: action.mobileOpen,\n deeplinkUri: action.mobileOpen ? action.deeplinkUri : null,\n error: null,\n };\n\n // ── User intent & error ──────────────────────────────────────\n\n case 'SET_USER_INTENT':\n return { ...state, phase: action.intent };\n\n case 'GUEST_PREAUTH_CLEAR_TRANSFER':\n return {\n ...state,\n transfer: null,\n creatingTransfer: false,\n };\n\n case 'REQUEST_LOGIN':\n return {\n ...state,\n loginRequested: true,\n transfer: null,\n creatingTransfer: false,\n };\n\n case 'SET_ERROR':\n return { ...state, error: action.error };\n\n case 'SET_ONE_TAP_LIMIT_SAVED_DURING_SETUP':\n return { ...state, oneTapLimitSavedDuringSetup: action.saved };\n\n case 'SET_STANDARD_DESKTOP_INLINE_OPEN_WALLET':\n return { ...state, standardDesktopInlineOpenWallet: action.value };\n\n // ── Lifecycle ────────────────────────────────────────────────\n\n case 'NEW_PAYMENT':\n return {\n ...state,\n transfer: null,\n error: null,\n amount:\n action.depositAmount != null\n ? action.depositAmount.toString()\n : '',\n mobileFlow: false,\n deeplinkUri: null,\n selectedProviderId: null,\n selectedWalletId: null,\n selectedAccountId: action.firstAccountId,\n isGuestFlow: false,\n guestTransferId: null,\n guestSessionToken: null,\n guestPreauthAccountId: null,\n guestPreauthSessionId: null,\n activePublicKey: null,\n loginRequested: false,\n oneTapLimitSavedDuringSetup: false,\n guestPreauthorizing: false,\n guestOneTapOptIn: false,\n guestOneTapLimit: DEFAULT_GUEST_ONE_TAP_LIMIT,\n guestPreauthSetupCompletePending: false,\n standardDesktopInlineOpenWallet: false,\n savedSelection: null,\n };\n\n case 'LOGOUT':\n return {\n ...createInitialState({\n depositAmount: action.depositAmount,\n activeCredentialId: null,\n }),\n privyReady: action.privyReady,\n privyAuthenticated: false,\n };\n\n case 'SYNC_PRIVY_SESSION':\n return {\n ...state,\n privyReady: action.ready,\n privyAuthenticated: action.authenticated,\n ...(action.authenticated\n ? { loginRequested: false }\n : {}),\n };\n\n case 'SYNC_AMOUNT':\n return { ...state, amount: action.amount };\n\n case 'PAGE_RESUMED':\n return { ...state, lastResumedAt: Date.now() };\n\n default:\n return state;\n }\n}\n","import type { AuthorizationAction, Transfer } from './types';\n\n// ── Screen names ────────────────────────────────────────────────────────\n\nexport type ScreenName =\n | 'loading'\n | 'login'\n | 'success'\n | 'processing'\n | 'confirm-sign'\n | 'select-source'\n | 'setup'\n | 'open-wallet'\n | 'setup-status'\n | 'guest-token-picker'\n | 'wallet-picker'\n | 'token-picker'\n | 'deposit'\n | 'guest-setup-complete'\n | 'guest-preauth-linking';\n\n// ── Payment phase (explicit state machine) ──────────────────────────────\n\nexport interface MobileFlowState {\n deeplinkUri: string;\n providerId: string | null;\n}\n\nexport type PaymentPhase =\n | { step: 'initializing' }\n | { step: 'login' }\n | { step: 'data-loading' }\n | { step: 'wallet-picker'; reason: 'link' | 'switch' | 'entry' | 'guest-entry' }\n | {\n step: 'wallet-setup';\n mobile: MobileFlowState | null;\n accountId: string | null;\n /** Desktop: use OpenWalletScreen (extension popups) instead of SetupStatusScreen. */\n guestDesktopExtension?: boolean;\n }\n | { step: 'select-source'; action: AuthorizationAction; isDesktop: boolean }\n | { step: 'one-tap-setup'; action: AuthorizationAction | null }\n | { step: 'guest-token-picker' }\n | { step: 'token-picker' }\n | { step: 'deposit' }\n | { step: 'processing'; transfer: Transfer | null }\n | { step: 'confirm-sign'; transfer: Transfer }\n | { step: 'completed'; transfer: Transfer }\n | { step: 'failed'; transfer: Transfer; error: string }\n | { step: 'guest-setup-complete' }\n | { step: 'guest-preauth-linking' };\n\nexport function screenForPhase(phase: PaymentPhase): ScreenName {\n switch (phase.step) {\n case 'initializing':\n case 'data-loading':\n return 'loading';\n case 'login':\n return 'login';\n case 'wallet-picker':\n return 'wallet-picker';\n case 'wallet-setup':\n if (phase.mobile || phase.guestDesktopExtension) {\n return 'open-wallet';\n }\n return 'setup-status';\n case 'select-source':\n return phase.isDesktop ? 'setup' : 'select-source';\n case 'one-tap-setup':\n return 'setup';\n case 'guest-token-picker':\n return 'guest-token-picker';\n case 'token-picker':\n return 'token-picker';\n case 'deposit':\n return 'deposit';\n case 'processing':\n return 'processing';\n case 'confirm-sign':\n return 'confirm-sign';\n case 'completed':\n case 'failed':\n return 'success';\n case 'guest-setup-complete':\n return 'guest-setup-complete';\n case 'guest-preauth-linking':\n return 'guest-preauth-linking';\n }\n}\n","import type { Account, Chain } from './types';\nimport type { SetupTokenOption } from './components/screens/SetupScreen';\n\n/** Handlers invoked when the user picks a token on the deposit inline dropdown. */\nexport interface InlineTokenSelectionHandlers {\n onAuthorizeToken: (\n walletId: string,\n tokenAddress: string,\n chainId: number,\n tokenSymbol: string,\n ) => void | Promise<void>;\n onSelectAuthorizedToken: (walletId: string, tokenSymbol: string) => void;\n onSelectSourceChainChange: (chainName: string) => void;\n onSetSelectSourceTokenSymbol: (symbol: string) => void;\n}\n\n/** Positive-balance sources across wallets for Setup / Deposit inline token dropdowns. */\nexport function tokenOptionsForLinkedAccount(\n selectedAccount: Account | undefined,\n chains: Chain[],\n): SetupTokenOption[] {\n if (!selectedAccount) return [];\n return selectedAccount.wallets.flatMap((w) => {\n const evmChainId = chains.find((c) => c.name === w.chain.name)?.commonId ?? undefined;\n return w.sources\n .filter((s) => s.balance.total.amount > 0)\n .map((s) => ({\n symbol: s.token.symbol,\n chainName: w.chain.name,\n balance: s.balance.available.amount,\n walletId: w.id,\n status: s.token.status,\n tokenAddress: s.address,\n chainId: evmChainId,\n }));\n });\n}\n\nexport function handleInlineTokenSelection(\n handlers: InlineTokenSelectionHandlers,\n chains: Chain[],\n selectedAccount: Account | undefined,\n symbol: string,\n chainName: string,\n walletId?: string,\n): void {\n if (walletId && selectedAccount) {\n const wallet = selectedAccount.wallets.find((w) => w.id === walletId);\n if (wallet && wallet.chain.name === chainName) {\n const source = wallet.sources.find((s) => s.token.symbol === symbol);\n const evmChainId = chains.find((c) => c.name === chainName)?.commonId ?? undefined;\n const authorized = !source?.token.status || source.token.status === 'AUTHORIZED';\n if (source && !authorized && source.address && evmChainId != null) {\n void handlers.onAuthorizeToken(walletId, source.address, evmChainId, symbol);\n return;\n }\n }\n handlers.onSelectAuthorizedToken(walletId, symbol);\n return;\n }\n handlers.onSelectSourceChainChange(chainName);\n handlers.onSetSelectSourceTokenSymbol(symbol);\n}\n","// ── Branded Blink Loading Screen ───────────────────────────────────────\n//\n// Context-free loading screen that can be rendered both inside and outside\n// BlinkProvider. Uses hardcoded Blink brand colours so the loading\n// experience is visually identical regardless of where it's mounted.\n\nimport type { CSSProperties } from 'react';\n\nconst MUTED = '#7fa4b0';\nconst LOGO_SIZE = 48;\n\nexport function BlinkLoadingScreen() {\n return (\n <div style={containerStyle}>\n <svg\n width={LOGO_SIZE}\n height={LOGO_SIZE}\n viewBox=\"0 0 100 100\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{ borderRadius: 10 }}\n >\n <g clipPath=\"url(#blink-loading-clip)\">\n {/* Background */}\n <rect width=\"100\" height=\"100\" rx=\"18.5874\" fill=\"white\" />\n\n {/* Detail paths */}\n <path d=\"M64.0138 36.6191C68.3952 36.7025 70.2512 42.3038 65.1932 44.0399C61.4251 44.2617 60.8419 41.8557 61.3059 38.6113C62.3258 37.4916 62.6562 37.2326 64.0138 36.6191Z\" fill=\"white\" />\n <path d=\"M34.7441 36.6714C36.6646 36.3309 38.4839 37.6898 38.813 39.71C39.1407 41.7302 37.8542 43.6499 35.9352 43.9994C34.7427 44.2169 33.5274 43.7774 32.7154 42.8325C31.8492 41.8262 31.5728 40.4029 31.9959 39.1191C32.419 37.8367 33.4719 36.8979 34.7441 36.6714Z\" fill=\"white\" />\n\n {/* Legs — animated group */}\n <g style={{ transformOrigin: '50px 62px', animation: 'blink-legs-walk 0.8s ease-in-out infinite' }}>\n <path d=\"M37.719 72.0299C39.0372 70.605 40.611 68.9843 41.7888 67.4312L50.1528 61.6651L57.6601 61.4468C57.4965 63.5289 61.7342 75.3729 61.6981 77.5158C62.154 77.0628 63.0658 76.3318 63.567 75.9876C65.9954 74.3365 68.8384 73.8223 71.4833 74.5554C72.8167 74.9328 73.9331 75.9251 74.58 77.3075C75.2967 78.8451 75.3771 80.3207 74.9127 82.0281C73.8912 85.7844 71.5792 88.6365 68.624 90.5357C66.125 92.1415 61.7077 93.9276 58.9822 93.0828C58.078 92.7956 56.4567 92.015 55.9204 91.1399C55.1385 89.8648 54.5613 88.8907 54.1469 87.3736C53.3686 84.4709 53.3459 86.0793 52.7439 77.9085C52.8102 75.0919 52.9961 69.1199 52.9088 66.782C52.1044 67.8121 48.6686 72.1053 47.7896 73.7937L43.7186 79.5555C45.2316 79.4947 47.0626 79.5314 48.354 80.4535C49.2813 81.1277 49.9192 82.2144 50.1273 83.4755C50.2332 83.8294 50.3132 84.6855 50.3258 85.0634C50.4307 88.2051 49.4337 91.7462 46.8974 93.4764C45.8189 94.2126 44.2654 94.598 43.01 94.7341C37.9909 95.3115 33.0817 93.5835 29.3502 89.9257C28.3222 88.8994 27.4875 87.705 27.4333 86.0333C27.4046 85.1165 27.6099 84.1963 28.0241 83.3859C28.6301 82.2147 30.2471 80.3005 31.0794 79.3156C33.2057 76.7997 35.4975 74.4306 37.719 72.0299Z\" fill=\"black\" />\n </g>\n\n {/* Body */}\n <path d=\"M25.2815 30.5666C25.6441 30.6182 25.869 30.0928 25.5864 29.8598C23.1701 27.868 21.5484 25.4469 21.0444 22.6545C20.3641 19.1251 21.516 15.5212 24.2422 12.6488C26.8514 9.91783 30.7518 8.12575 35.0552 7.68041C40.5681 7.11357 44.9544 9.44386 49.0355 11.908C49.1016 11.9479 49.1793 11.964 49.2559 11.9535L49.6641 11.8975C49.7772 11.882 49.8729 11.8099 49.9313 11.7118C50.7042 10.4132 53.3609 9.13558 54.9428 8.55183C63.274 5.47733 72.1015 8.67608 75.6217 15.0543C77.4169 18.3043 77.4637 21.9922 75.7515 25.2845C74.8719 26.99 73.8277 28.1868 72.3742 29.4156C72.1074 29.6412 72.3057 30.099 72.652 30.0534C78.3434 29.3036 83.6958 29.6535 88.1602 33.0995C88.1743 33.1104 88.1896 33.1204 88.2051 33.1289C94.9326 36.8336 95.4063 45.4019 90.8735 50.5016C88.6438 53.0434 85.3883 54.9193 81.641 55.8268C81.4786 55.8662 81.3675 56.017 81.3778 56.1837C81.627 60.2197 80.6407 63.7049 77.0957 66.8558C74.3594 69.31 72.2572 70.905 68.1242 71.1594C66.1317 71.2671 64.5824 71.0823 61.0405 69.4728C57.7759 67.9894 53.6996 61.9918 52.509 57.7058C52.4204 57.3871 51.9326 57.3204 51.7644 57.6052C49.4075 61.5961 43.2088 67.6787 38.7227 69.4728C35.1404 70.8919 32.2895 71.8779 28.5005 70.8789C24.3706 69.7951 20.9698 67.4623 19.0499 64.3964C18.0021 62.7282 16.7577 59.3144 17.4723 57.5087C17.4921 57.4587 17.5023 57.4056 17.4951 57.3522C17.4647 57.1259 17.359 56.7067 17.1377 56.6504C8.17592 54.367 2.58735 48.0815 5.03045 40.4013C6.14562 36.9784 8.95444 34.0395 12.8321 32.2381C16.7957 30.3763 20.9323 29.9475 25.2815 30.5666Z\" fill=\"black\" />\n\n {/* Connector */}\n <rect x=\"44.3433\" y=\"56.4863\" width=\"10.1195\" height=\"9.10751\" fill=\"black\" />\n\n {/* Eyes */}\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M45.6929 25.6221C49.2323 25.6223 52.1021 31.512 52.1021 38.7773C52.102 46.0426 49.2323 51.9323 45.6929 51.9326C42.2373 51.9326 39.4213 46.3188 39.2896 39.292C41.4308 38.8166 43.9097 38.7264 46.1079 39.1299C47.0121 39.2956 47.8949 38.5389 47.4956 37.7109C46.0273 34.6668 42.4111 34.0327 39.686 34.1816C40.5942 29.1824 42.9408 25.6221 45.6929 25.6221Z\" fill=\"white\" />\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M63.2471 25.6216C66.7865 25.6219 69.6562 31.5116 69.6562 38.7769C69.6562 46.0422 66.7865 51.9319 63.2471 51.9321C59.7916 51.9321 56.9756 46.319 56.8438 39.2925C58.985 38.8171 61.4639 38.7259 63.6621 39.1294C64.5663 39.2952 65.4491 38.5394 65.0498 37.7114C63.5816 34.6669 59.9654 34.0322 57.2402 34.1812C58.1484 29.1821 60.4951 25.6216 63.2471 25.6216Z\" fill=\"white\" />\n </g>\n <defs>\n <clipPath id=\"blink-loading-clip\">\n <rect width=\"100\" height=\"100\" rx=\"18.5874\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n\n <span style={labelStyle}>Loading...</span>\n\n <style>{`\n @keyframes blink-legs-walk {\n 0%, 100% { transform: rotate(0deg); }\n 25% { transform: rotate(5deg); }\n 75% { transform: rotate(-5deg); }\n }\n `}</style>\n </div>\n );\n}\n\nconst containerStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 12,\n height: '100%',\n flex: 1,\n background: 'transparent',\n};\n\nconst labelStyle: CSSProperties = {\n color: MUTED,\n fontSize: 13,\n fontFamily: 'system-ui, -apple-system, sans-serif',\n letterSpacing: '0.02em',\n};\n","// Inline SVG logos encoded as data URIs so they bundle with zero config.\n\nfunction svgToDataUri(svg: string): string {\n return `data:image/svg+xml,${encodeURIComponent(svg)}`;\n}\n\nconst BASE_SVG = `<svg id=\"Layer_1\" data-name=\"Layer 1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1280 1280\">\n <defs>\n <style>\n .cls-1 {\n fill: blue;\n }\n </style>\n </defs>\n <path class=\"cls-1\" d=\"M0,101.12c0-34.64,0-51.95,6.53-65.28,6.25-12.76,16.56-23.07,29.32-29.32C49.17,0,66.48,0,101.12,0h1077.76c34.63,0,51.96,0,65.28,6.53,12.75,6.25,23.06,16.56,29.32,29.32,6.52,13.32,6.52,30.64,6.52,65.28v1077.76c0,34.63,0,51.96-6.52,65.28-6.26,12.75-16.57,23.06-29.32,29.32-13.32,6.52-30.65,6.52-65.28,6.52H101.12c-34.64,0-51.95,0-65.28-6.52-12.76-6.26-23.07-16.57-29.32-29.32-6.53-13.32-6.53-30.65-6.53-65.28V101.12Z\"/>\n</svg>`;\n\nconst METAMASK_SVG = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 142 136.878\">\n<path fill=\"#FF5C16\" d=\"M132.682,132.192l-30.583-9.106l-23.063,13.787l-16.092-0.007l-23.077-13.78l-30.569,9.106L0,100.801l9.299-34.839L0,36.507L9.299,0l47.766,28.538h27.85L132.682,0l9.299,36.507l-9.299,29.455l9.299,34.839L132.682,132.192L132.682,132.192z\"/>\n<path fill=\"#FF5C16\" d=\"M9.305,0l47.767,28.558l-1.899,19.599L9.305,0z M39.875,100.814l21.017,16.01l-21.017,6.261C39.875,123.085,39.875,100.814,39.875,100.814z M59.212,74.345l-4.039-26.174L29.317,65.97l-0.014-0.007v0.013l0.08,18.321l10.485-9.951L59.212,74.345L59.212,74.345z M132.682,0L84.915,28.558l1.893,19.599L132.682,0z M102.113,100.814l-21.018,16.01l21.018,6.261V100.814z M112.678,65.975h0.007H112.678v-0.013l-0.006,0.007L86.815,48.171l-4.039,26.174h19.336l10.492,9.95C112.604,84.295,112.678,65.975,112.678,65.975z\"/>\n<path fill=\"#E34807\" d=\"M39.868,123.085l-30.569,9.106L0,100.814h39.868C39.868,100.814,39.868,123.085,39.868,123.085z M59.205,74.338l5.839,37.84l-8.093-21.04L29.37,84.295l10.491-9.956h19.344L59.205,74.338z M102.112,123.085l30.57,9.106l9.299-31.378h-39.869C102.112,100.814,102.112,123.085,102.112,123.085z M82.776,74.338l-5.839,37.84l8.092-21.04l27.583-6.843l-10.498-9.956H82.776V74.338z\"/>\n<path fill=\"#FF8D5D\" d=\"M0,100.801l9.299-34.839h19.997l0.073,18.327l27.584,6.843l8.092,21.039l-4.16,4.633l-21.017-16.01H0V100.801z M141.981,100.801l-9.299-34.839h-19.998l-0.073,18.327l-27.582,6.843l-8.093,21.039l4.159,4.633l21.018-16.01h39.868V100.801z M84.915,28.538h-27.85l-1.891,19.599l9.872,64.013h11.891l9.878-64.013L84.915,28.538z\"/>\n<path fill=\"#661800\" d=\"M9.299,0L0,36.507l9.299,29.455h19.997l25.87-17.804L9.299,0z M53.426,81.938h-9.059l-4.932,4.835l17.524,4.344l-3.533-9.186V81.938z M132.682,0l9.299,36.507l-9.299,29.455h-19.998L86.815,48.158L132.682,0z M88.568,81.938h9.072l4.932,4.841l-17.544,4.353l3.54-9.201V81.938z M79.029,124.385l2.067-7.567l-4.16-4.633h-11.9l-4.159,4.633l2.066,7.567\"/>\n<path fill=\"#C0C4CD\" d=\"M79.029,124.384v12.495H62.945v-12.495L79.029,124.384L79.029,124.384z\"/>\n<path fill=\"#E7EBF6\" d=\"M39.875,123.072l23.083,13.8v-12.495l-2.067-7.566C60.891,116.811,39.875,123.072,39.875,123.072z M102.113,123.072l-23.084,13.8v-12.495l2.067-7.566C81.096,116.811,102.113,123.072,102.113,123.072z\"/>\n</svg>`;\n\nconst TRUST_WALLET_SVG = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"729 341 463 521\">\n<defs>\n<linearGradient id=\"tw-grad\" x1=\"1123.26\" y1=\"1865.78\" x2=\"954.61\" y2=\"1337.5\" gradientTransform=\"translate(0 2182) scale(1 -1)\" gradientUnits=\"userSpaceOnUse\">\n<stop offset=\".02\" stop-color=\"blue\"/>\n<stop offset=\".08\" stop-color=\"#0094ff\"/>\n<stop offset=\".16\" stop-color=\"#48ff91\"/>\n<stop offset=\".42\" stop-color=\"#0094ff\"/>\n<stop offset=\".68\" stop-color=\"#0038ff\"/>\n<stop offset=\".9\" stop-color=\"#0500ff\"/>\n</linearGradient>\n</defs>\n<path fill=\"#0500ff\" d=\"m738.71,423.41l221.45-72.3v500.52c-158.18-66.74-221.45-194.65-221.45-266.94v-161.28Z\"/>\n<path fill=\"url(#tw-grad)\" d=\"m1181.62,423.41l-221.45-72.3v500.52c158.18-66.74,221.45-194.65,221.45-266.94v-161.28Z\"/>\n</svg>`;\n\nconst BLINK_SVG = `<svg width=\"100\" height=\"100\" viewBox=\"0 0 100 100\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<g clip-path=\"url(#clip0_125_480)\">\n<rect width=\"100\" height=\"100\" rx=\"18.5874\" fill=\"black\"/>\n<path d=\"M64.0138 36.6191C68.3952 36.7025 70.2512 42.3038 65.1932 44.0399C61.4251 44.2617 60.8419 41.8557 61.3059 38.6113C62.3258 37.4916 62.6562 37.2326 64.0138 36.6191Z\" fill=\"black\"/>\n<path d=\"M34.7441 36.6714C36.6646 36.3309 38.4839 37.6898 38.813 39.71C39.1407 41.7302 37.8542 43.6499 35.9352 43.9994C34.7427 44.2169 33.5274 43.7774 32.7154 42.8325C31.8492 41.8262 31.5728 40.4029 31.9959 39.1191C32.419 37.8367 33.4719 36.8979 34.7441 36.6714Z\" fill=\"black\"/>\n<path d=\"M37.719 72.0299C39.0372 70.605 40.611 68.9843 41.7888 67.4312L50.1528 61.6651L57.6601 61.4468C57.4965 63.5289 61.7342 75.3729 61.6981 77.5158C62.154 77.0628 63.0658 76.3318 63.567 75.9876C65.9954 74.3365 68.8384 73.8223 71.4833 74.5554C72.8167 74.9328 73.9331 75.9251 74.58 77.3075C75.2967 78.8451 75.3771 80.3207 74.9127 82.0281C73.8912 85.7844 71.5792 88.6365 68.624 90.5357C66.125 92.1415 61.7077 93.9276 58.9822 93.0828C58.078 92.7956 56.4567 92.015 55.9204 91.1399C55.1385 89.8648 54.5613 88.8907 54.1469 87.3736C53.3686 84.4709 53.3459 86.0793 52.7439 77.9085C52.8102 75.0919 52.9961 69.1199 52.9088 66.782C52.1044 67.8121 48.6686 72.1053 47.7896 73.7937L43.7186 79.5555C45.2316 79.4947 47.0626 79.5314 48.354 80.4535C49.2813 81.1277 49.9192 82.2144 50.1273 83.4755C50.2332 83.8294 50.3132 84.6855 50.3258 85.0634C50.4307 88.2051 49.4337 91.7462 46.8974 93.4764C45.8189 94.2126 44.2654 94.598 43.01 94.7341C37.9909 95.3115 33.0817 93.5835 29.3502 89.9257C28.3222 88.8994 27.4875 87.705 27.4333 86.0333C27.4046 85.1165 27.6099 84.1963 28.0241 83.3859C28.6301 82.2147 30.2471 80.3005 31.0794 79.3156C33.2057 76.7997 35.4975 74.4306 37.719 72.0299Z\" fill=\"white\"/>\n<path d=\"M25.2815 30.5666C25.6441 30.6182 25.869 30.0928 25.5864 29.8598C23.1701 27.868 21.5484 25.4469 21.0444 22.6545C20.3641 19.1251 21.516 15.5212 24.2422 12.6488C26.8514 9.91783 30.7518 8.12575 35.0552 7.68041C40.5681 7.11357 44.9544 9.44386 49.0355 11.908C49.1016 11.9479 49.1793 11.964 49.2559 11.9535L49.6641 11.8975C49.7772 11.882 49.8729 11.8099 49.9313 11.7118C50.7042 10.4132 53.3609 9.13558 54.9428 8.55183C63.274 5.47733 72.1015 8.67608 75.6217 15.0543C77.4169 18.3043 77.4637 21.9922 75.7515 25.2845C74.8719 26.99 73.8277 28.1868 72.3742 29.4156C72.1074 29.6412 72.3057 30.099 72.652 30.0534C78.3434 29.3036 83.6958 29.6535 88.1602 33.0995C88.1743 33.1104 88.1896 33.1204 88.2051 33.1289C94.9326 36.8336 95.4063 45.4019 90.8735 50.5016C88.6438 53.0434 85.3883 54.9193 81.641 55.8268C81.4786 55.8662 81.3675 56.017 81.3778 56.1837C81.627 60.2197 80.6407 63.7049 77.0957 66.8558C74.3594 69.31 72.2572 70.905 68.1242 71.1594C66.1317 71.2671 64.5824 71.0823 61.0405 69.4728C57.7759 67.9894 53.6996 61.9918 52.509 57.7058C52.4204 57.3871 51.9326 57.3204 51.7644 57.6052C49.4075 61.5961 43.2088 67.6787 38.7227 69.4728C35.1404 70.8919 32.2895 71.8779 28.5005 70.8789C24.3706 69.7951 20.9698 67.4623 19.0499 64.3964C18.0021 62.7282 16.7577 59.3144 17.4723 57.5087C17.4921 57.4587 17.5023 57.4056 17.4951 57.3522C17.4647 57.1259 17.359 56.7067 17.1377 56.6504C8.17592 54.367 2.58735 48.0815 5.03045 40.4013C6.14562 36.9784 8.95444 34.0395 12.8321 32.2381C16.7957 30.3763 20.9323 29.9475 25.2815 30.5666Z\" fill=\"white\"/>\n<rect x=\"44.3433\" y=\"56.4863\" width=\"10.1195\" height=\"9.10751\" fill=\"white\"/>\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M45.6929 25.6221C49.2323 25.6223 52.1021 31.512 52.1021 38.7773C52.102 46.0426 49.2323 51.9323 45.6929 51.9326C42.2373 51.9326 39.4213 46.3188 39.2896 39.292C41.4308 38.8166 43.9097 38.7264 46.1079 39.1299C47.0121 39.2956 47.8949 38.5389 47.4956 37.7109C46.0273 34.6668 42.4111 34.0327 39.686 34.1816C40.5942 29.1824 42.9408 25.6221 45.6929 25.6221Z\" fill=\"black\"/>\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M63.2471 25.6216C66.7865 25.6219 69.6562 31.5116 69.6562 38.7769C69.6562 46.0422 66.7865 51.9319 63.2471 51.9321C59.7916 51.9321 56.9756 46.319 56.8438 39.2925C58.985 38.8171 61.4639 38.7259 63.6621 39.1294C64.5663 39.2952 65.4491 38.5394 65.0498 37.7114C63.5816 34.6669 59.9654 34.0322 57.2402 34.1812C58.1484 29.1821 60.4951 25.6216 63.2471 25.6216Z\" fill=\"black\"/>\n</g>\n<defs>\n<clipPath id=\"clip0_125_480\">\n<rect width=\"100\" height=\"100\" rx=\"18.5874\" fill=\"white\"/>\n</clipPath>\n</defs>\n</svg>`;\n\nconst USDC_SVG = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 2000 2000\">\n<path d=\"M1000 2000c554.17 0 1000-445.83 1000-1000S1554.17 0 1000 0 0 445.83 0 1000s445.83 1000 1000 1000z\" fill=\"#2775ca\"/>\n<path d=\"M1275 1158.33c0-145.83-87.5-195.83-262.5-216.66-125-16.67-150-50-150-108.34s41.67-95.83 125-95.83c75 0 116.67 25 137.5 87.5 4.17 12.5 16.67 20.83 29.17 20.83h66.66c16.67 0 29.17-12.5 29.17-29.16v-4.17c-16.67-91.67-91.67-162.5-187.5-170.83v-100c0-16.67-12.5-29.17-33.33-33.34h-62.5c-16.67 0-29.17 12.5-33.34 33.34v95.83c-125 16.67-204.16 100-204.16 204.17 0 137.5 83.33 191.66 258.33 212.5 116.67 20.83 154.17 45.83 154.17 112.5s-58.34 112.5-137.5 112.5c-108.34 0-145.84-45.84-158.34-108.34-4.16-16.66-16.66-25-29.16-25h-70.84c-16.66 0-29.16 12.5-29.16 29.17v4.17c16.66 104.16 83.33 179.16 220.83 200v100c0 16.66 12.5 29.16 33.33 33.33h62.5c16.67 0 29.17-12.5 33.34-33.33v-100c125-20.84 208.33-108.34 208.33-220.84z\" fill=\"#fff\"/>\n<path d=\"M787.5 1595.83c-325-116.66-491.67-479.16-370.83-800 62.5-175 200-308.33 370.83-370.83 16.67-8.33 25-20.83 25-41.67V325c0-16.67-8.33-29.17-25-33.33-4.17 0-12.5 0-16.67 4.16-395.83 125-612.5 545.84-487.5 941.67 75 233.33 254.17 412.5 487.5 487.5 16.67 8.33 33.34 0 37.5-16.67 4.17-4.16 4.17-8.33 4.17-16.66v-58.34c0-12.5-12.5-29.16-25-37.5zM1229.17 295.83c-16.67-8.33-33.34 0-37.5 16.67-4.17 4.17-4.17 8.33-4.17 16.67v58.33c0 16.67 12.5 33.33 25 41.67 325 116.66 491.67 479.16 370.83 800-62.5 175-200 308.33-370.83 370.83-16.67 8.33-25 20.83-25 41.67V1700c0 16.67 8.33 29.17 25 33.33 4.17 0 12.5 0 16.67-4.16 395.83-125 612.5-545.84 487.5-941.67-75-237.5-258.34-416.67-487.5-491.67z\" fill=\"#fff\"/>\n</svg>`;\n\nconst TETHER_SVG = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 800 800\">\n<circle fill=\"#009393\" cx=\"400\" cy=\"400\" r=\"400\"/>\n<path fill=\"#fff\" fill-rule=\"evenodd\" d=\"M400.49,428.59c68.79,0,126.28-11.63,140.33-27.17-11.93-13.18-55.08-23.56-109.88-26.4v32.83c-9.81.51-20.01.76-30.46.76s-20.65-.25-30.48-.76v-32.83c-54.78,2.84-97.95,13.22-109.88,26.4,14.07,15.54,71.57,27.17,140.36,27.17ZM522.71,274.06v45.21h-91.77v31.35c64.46,3.35,112.83,17.13,113.19,33.62v34.38c-.36,16.49-48.73,30.24-113.19,33.6v76.94h-60.93v-76.94c-64.46-3.35-112.81-17.11-113.17-33.6v-34.38c.36-16.49,48.71-30.27,113.17-33.62v-31.35h-91.77v-45.21h244.48ZM242.15,202.11h322.16c7.7,0,14.79,4.05,18.63,10.63l93.85,161.16c4.86,8.36,3.42,18.91-3.52,25.68l-258.34,252.18c-8.38,8.17-21.84,8.17-30.2,0L126.71,399.92c-7.09-6.94-8.43-17.79-3.2-26.19l100.33-161.49c3.91-6.28,10.85-10.12,18.32-10.12Z\"/>\n</svg>`;\n\nexport const BLINK_LOGO = svgToDataUri(BLINK_SVG);\n\n/** @deprecated Use BLINK_LOGO instead. Kept for backward compatibility. */\nexport const BLINK_MASCOT = BLINK_LOGO;\n\nexport const BASE_LOGO = svgToDataUri(BASE_SVG);\n\nexport const METAMASK_LOGO = svgToDataUri(METAMASK_SVG);\n\nexport const TRUST_WALLET_LOGO = svgToDataUri(TRUST_WALLET_SVG);\n\nexport const USDC_LOGO = svgToDataUri(USDC_SVG);\n\nexport const TETHER_LOGO = svgToDataUri(TETHER_SVG);\n\n/** Lookup by lowercased provider/wallet name. */\nexport const KNOWN_LOGOS: Record<string, string> = {\n metamask: METAMASK_LOGO,\n base: BASE_LOGO,\n 'trust wallet': TRUST_WALLET_LOGO,\n};\n\n/** Lookup by token symbol (case-sensitive). */\nexport const TOKEN_LOGOS: Record<string, string> = {\n USDC: USDC_LOGO,\n 'USDC.e': USDC_LOGO,\n USDT: TETHER_LOGO,\n};\n","import type { CSSProperties, ReactNode } from 'react';\nimport { useBlinkConfig } from '../../context';\n\ninterface ScreenLayoutProps {\n children: ReactNode;\n /** Content pinned to the bottom of the screen (buttons, footer) */\n footer?: ReactNode;\n}\n\nconst FOOTER_CSS = `\n.blink-screen-footer {\n padding-bottom: max(32px, env(safe-area-inset-bottom, 32px));\n}`;\n\nexport function ScreenLayout({ children, footer }: ScreenLayoutProps) {\n const { tokens } = useBlinkConfig();\n\n return (\n <div style={containerStyle(tokens.bgCard)}>\n <div style={bodyStyle}>{children}</div>\n {footer && (\n <div className=\"blink-screen-footer\" style={footerStyle}>\n {footer}\n </div>\n )}\n <style>{FOOTER_CSS}</style>\n </div>\n );\n}\n\nconst containerStyle = (bg: string): CSSProperties => ({\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n maxWidth: 420,\n width: '100%',\n margin: '0 auto',\n background: `linear-gradient(to top, rgba(178, 255, 147, 0.15), transparent 40%), ${bg}`,\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n boxSizing: 'border-box',\n});\n\nconst bodyStyle: CSSProperties = {\n flex: 1,\n minHeight: 0,\n padding: '0 24px',\n display: 'flex',\n flexDirection: 'column',\n overflowY: 'auto',\n};\n\nconst footerStyle: CSSProperties = {\n paddingTop: 16,\n paddingLeft: 24,\n paddingRight: 24,\n marginTop: 'auto',\n};\n","import { createContext, useContext } from 'react';\nimport type { ReactNode } from 'react';\nimport type { FlowPhase } from './components/ui/StepProgress';\n\nconst FlowPhaseContext = createContext<FlowPhase | null>(null);\n\nexport function FlowPhaseProvider({\n phase,\n children,\n}: {\n phase: FlowPhase | null;\n children: ReactNode;\n}) {\n return (\n <FlowPhaseContext.Provider value={phase}>\n {children}\n </FlowPhaseContext.Provider>\n );\n}\n\nexport function useFlowPhase(): FlowPhase | null {\n return useContext(FlowPhaseContext);\n}\n","import type { CSSProperties } from 'react';\nimport { useBlinkConfig } from '../../context';\nimport { BLINK_LOGO } from '../../assets/logos';\n\nexport type FlowPhase = 'link' | 'deposit';\n\ninterface StepProgressProps {\n phase: FlowPhase;\n}\n\nexport function StepProgress({ phase }: StepProgressProps) {\n const { tokens } = useBlinkConfig();\n\n if (phase === 'deposit') {\n return (\n <img src={BLINK_LOGO} alt=\"Blink\" style={mascotStyle} />\n );\n }\n\n return (\n <div style={containerStyle}>\n <div style={sectionStyle('flex-end')}>\n <span style={labelStyle(tokens.text)}>Link</span>\n <span style={dotStyle(tokens.accent)} />\n </div>\n <span style={lineStyle(tokens.textMuted)} />\n <div style={sectionStyle('flex-start')}>\n <span style={dotStyle(tokens.textMuted)} />\n <span style={labelStyle(tokens.textMuted)}>Deposit</span>\n </div>\n </div>\n );\n}\n\nconst containerStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n width: '100%',\n};\n\nconst sectionStyle = (justify: 'flex-start' | 'flex-end'): CSSProperties => ({\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: justify,\n gap: 6,\n});\n\nconst dotStyle = (color: string): CSSProperties => ({\n width: 8,\n height: 8,\n borderRadius: '50%',\n backgroundColor: color,\n flexShrink: 0,\n});\n\nconst lineStyle = (color: string): CSSProperties => ({\n width: 32,\n height: 0,\n borderTop: `2px solid ${color}`,\n opacity: 0.4,\n flexShrink: 0,\n});\n\nconst labelStyle = (color: string): CSSProperties => ({\n fontSize: '0.82rem',\n fontWeight: 600,\n color,\n whiteSpace: 'nowrap',\n});\n\nconst mascotStyle: CSSProperties = {\n width: 28,\n height: 28,\n};\n","import { useCallback, useEffect, useRef, useState, type CSSProperties } from 'react';\nimport { useBlinkConfig } from '../../context';\n\ninterface SettingsMenuProps {\n onLogout: () => void;\n}\n\nexport function SettingsMenu({ onLogout }: SettingsMenuProps) {\n const { tokens } = useBlinkConfig();\n const [open, setOpen] = useState(false);\n const menuRef = useRef<HTMLDivElement>(null);\n\n const toggle = useCallback(() => setOpen((prev) => !prev), []);\n\n useEffect(() => {\n if (!open) return;\n const handleClickOutside = (e: MouseEvent) => {\n if (menuRef.current && !menuRef.current.contains(e.target as Node)) {\n setOpen(false);\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [open]);\n\n return (\n <div ref={menuRef} style={containerStyle}>\n <button type=\"button\" onClick={toggle} style={triggerStyle(tokens.text)} aria-label=\"Settings\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n <circle cx=\"12\" cy=\"5\" r=\"2\" fill=\"currentColor\" />\n <circle cx=\"12\" cy=\"12\" r=\"2\" fill=\"currentColor\" />\n <circle cx=\"12\" cy=\"19\" r=\"2\" fill=\"currentColor\" />\n </svg>\n </button>\n\n {open && (\n <div style={dropdownStyle(tokens)}>\n <button\n type=\"button\"\n onClick={() => { setOpen(false); onLogout(); }}\n style={menuItemStyle(tokens)}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" style={{ marginRight: 8, flexShrink: 0 }}>\n <path d=\"M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4\" stroke={tokens.error} strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <polyline points=\"16 17 21 12 16 7\" stroke={tokens.error} strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <line x1=\"21\" y1=\"12\" x2=\"9\" y2=\"12\" stroke={tokens.error} strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n Log out\n </button>\n </div>\n )}\n </div>\n );\n}\n\nconst containerStyle: CSSProperties = {\n position: 'relative',\n};\n\nconst triggerStyle = (color: string): CSSProperties => ({\n background: 'transparent',\n border: 'none',\n cursor: 'pointer',\n padding: 4,\n color,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n});\n\nconst dropdownStyle = (tokens: {\n bgCard: string;\n border: string;\n shadow: string;\n}): CSSProperties => ({\n position: 'absolute',\n right: 0,\n top: '100%',\n marginTop: 4,\n minWidth: 140,\n background: tokens.bgCard,\n border: `1px solid ${tokens.border}`,\n borderRadius: 12,\n boxShadow: tokens.shadow,\n zIndex: 100,\n overflow: 'hidden',\n});\n\nconst menuItemStyle = (tokens: {\n error: string;\n bgHover: string;\n}): CSSProperties => ({\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n padding: '12px 16px',\n background: 'transparent',\n border: 'none',\n cursor: 'pointer',\n fontFamily: 'inherit',\n fontSize: '0.85rem',\n fontWeight: 500,\n color: tokens.error,\n});\n","import type { CSSProperties, ReactNode } from 'react';\nimport { useBlinkConfig } from '../../context';\nimport { useFlowPhase } from '../../FlowPhaseContext';\nimport { StepProgress } from './StepProgress';\nimport { SettingsMenu } from './SettingsMenu';\n\ninterface ScreenHeaderProps {\n /** Center title text */\n title?: string;\n /** Right-aligned element (avatar, close button, etc.) */\n right?: ReactNode;\n /** Called when back arrow is pressed. Omit to hide the back arrow. */\n onBack?: () => void;\n /** Optional secondary label next to the title (e.g. \"Simple\") */\n badge?: string;\n /** When provided, renders the three-dot settings menu with a logout action in the right slot. */\n onLogout?: () => void;\n}\n\nexport function ScreenHeader({ title, right, onBack, badge, onLogout }: ScreenHeaderProps) {\n const { tokens } = useBlinkConfig();\n const flowPhase = useFlowPhase();\n\n const rightContent = onLogout ? <SettingsMenu onLogout={onLogout} /> : right;\n\n return (\n <div style={headerStyle}>\n <div style={leftSlotStyle}>\n {onBack && (\n <button type=\"button\" onClick={onBack} style={backButtonStyle(tokens.text)} aria-label=\"Go back\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M15 18l-6-6 6-6\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n )}\n </div>\n <div style={centerSlotStyle}>\n {flowPhase ? (\n <StepProgress phase={flowPhase} />\n ) : (\n <>\n {title && <span style={titleStyle(tokens.text)}>{title}</span>}\n {badge && <span style={badgeStyle(tokens.textMuted)}>{badge}</span>}\n </>\n )}\n </div>\n <div style={rightSlotStyle}>{rightContent}</div>\n </div>\n );\n}\n\nconst headerStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n padding: '12px 0',\n minHeight: 44,\n};\n\nconst leftSlotStyle: CSSProperties = { flex: '0 0 40px' };\nconst rightSlotStyle: CSSProperties = { flex: '0 0 40px', display: 'flex', justifyContent: 'flex-end' };\n\nconst centerSlotStyle: CSSProperties = {\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 8,\n};\n\nconst backButtonStyle = (color: string): CSSProperties => ({\n background: 'transparent',\n border: 'none',\n cursor: 'pointer',\n padding: 4,\n color,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n});\n\nconst titleStyle = (color: string): CSSProperties => ({\n fontSize: '0.9rem',\n fontWeight: 600,\n color,\n letterSpacing: '-0.01em',\n});\n\nconst badgeStyle = (color: string): CSSProperties => ({\n fontSize: '0.78rem',\n fontWeight: 500,\n color,\n});\n","import type { CSSProperties } from 'react';\nimport { useBlinkConfig } from '../../context';\n\nexport function PoweredByFooter() {\n const { tokens } = useBlinkConfig();\n\n return (\n <div style={containerStyle(tokens.textMuted)}>\n <div style={rowStyle}>\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zM12 17c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3-9H9V6c0-1.66 1.34-3 3-3s3 1.34 3 3v2z\"\n fill=\"currentColor\"\n />\n </svg>\n <span>Powered by Blink</span>\n </div>\n </div>\n );\n}\n\nconst containerStyle = (color: string): CSSProperties => ({\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 6,\n fontSize: '0.75rem',\n color,\n padding: '12px 0 4px',\n});\n\nconst rowStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n};\n\nconst pillStyle = (color: string, border: string): CSSProperties => ({\n fontSize: '0.65rem',\n fontWeight: 600,\n padding: '2px 8px',\n borderRadius: 999,\n border: `1px solid ${border}`,\n color,\n});\n\n","import type { CSSProperties, ReactNode } from 'react';\nimport { useBlinkConfig } from '../../context';\n\ninterface PrimaryButtonProps {\n children: ReactNode;\n onClick?: () => void;\n disabled?: boolean;\n loading?: boolean;\n /** Override the default \"Please wait...\" text shown while loading. */\n loadingText?: string;\n /** Optional icon element rendered left of the label */\n icon?: ReactNode;\n /** 0-1 fractional progress. When set, the button renders in progress mode with a fill bar. */\n progress?: number;\n /** Text shown during progress mode (overrides children and loadingText). */\n progressText?: string;\n /** When true, the fill bar pulses to signal the user needs to take action (e.g. confirm in wallet). */\n progressPaused?: boolean;\n}\n\nexport function PrimaryButton({\n children,\n onClick,\n disabled,\n loading,\n loadingText = 'Please wait...',\n icon,\n progress,\n progressText,\n progressPaused,\n}: PrimaryButtonProps) {\n const { tokens } = useBlinkConfig();\n\n const inProgress = progress != null;\n const isDisabled = disabled || loading || inProgress;\n const done = inProgress && progress >= 1;\n\n if (inProgress) {\n return (\n <button\n type=\"button\"\n disabled\n style={progressButtonStyle(tokens, progressPaused)}\n >\n <div style={progressFillStyle(tokens, progress)} />\n <span style={progressContentStyle}>\n {done && (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M5 13l4 4L19 7\"\n stroke={tokens.accentText}\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n {progressText}\n </span>\n <style>{`\n @keyframes blink-spin {\n to { transform: rotate(360deg); }\n }\n @keyframes blink-btn-breathe {\n 0%, 100% { opacity: 0.85; }\n 50% { opacity: 1; }\n }\n `}</style>\n </button>\n );\n }\n\n return (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={isDisabled}\n style={buttonStyle(tokens, { disabled: !!disabled, loading: !!loading })}\n >\n {loading && (\n <>\n <span style={inlineSpinnerStyle(tokens.accentText)} />\n <style>{`\n @keyframes blink-spin {\n to { transform: rotate(360deg); }\n }\n @keyframes blink-btn-pulse {\n 0%, 100% { box-shadow: 0 6px 20px rgba(178, 255, 147, 0.15); }\n 50% { box-shadow: 0 6px 24px rgba(178, 255, 147, 0.4); }\n }\n `}</style>\n </>\n )}\n {!loading && icon && <span style={iconWrapStyle}>{icon}</span>}\n {loading ? loadingText : children}\n </button>\n );\n}\n\nconst progressButtonStyle = (\n tokens: { accent: string; accentHover: string; accentText: string },\n paused?: boolean,\n): CSSProperties => ({\n position: 'relative',\n width: '100%',\n padding: '18px 24px',\n background: `linear-gradient(180deg, ${tokens.accent}88, ${tokens.accentHover}88)`,\n color: tokens.accentText,\n border: 'none',\n borderRadius: 999,\n fontSize: '1rem',\n fontWeight: 700,\n cursor: 'default',\n overflow: 'hidden',\n fontFamily: 'inherit',\n boxShadow: '0 6px 20px rgba(178, 255, 147, 0.25)',\n animation: paused ? 'blink-btn-breathe 2s ease-in-out infinite' : undefined,\n});\n\nconst progressFillStyle = (\n tokens: { accent: string; accentHover: string },\n progress: number,\n): CSSProperties => ({\n position: 'absolute',\n left: 0,\n top: 0,\n bottom: 0,\n width: `${Math.min(progress, 1) * 100}%`,\n background: `linear-gradient(180deg, ${tokens.accent}, ${tokens.accentHover})`,\n borderRadius: 'inherit',\n transition: 'width 0.4s ease',\n});\n\nconst progressContentStyle: CSSProperties = {\n position: 'relative',\n zIndex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 8,\n};\n\nconst buttonStyle = (\n tokens: { accent: string; accentHover: string; accentText: string },\n state: { disabled: boolean; loading: boolean },\n): CSSProperties => {\n const inactive = state.disabled && !state.loading;\n return {\n width: '100%',\n padding: '18px 24px',\n background: `linear-gradient(180deg, ${tokens.accent}, ${tokens.accentHover})`,\n color: tokens.accentText,\n border: 'none',\n borderRadius: 999,\n fontSize: '1rem',\n fontWeight: 700,\n cursor: inactive ? 'not-allowed' : state.loading ? 'default' : 'pointer',\n opacity: inactive ? 0.5 : 1,\n transition: 'filter 0.15s ease, transform 0.15s ease',\n fontFamily: 'inherit',\n boxShadow: '0 6px 20px rgba(178, 255, 147, 0.25)',\n animation: state.loading ? 'blink-btn-pulse 1.5s ease-in-out infinite' : undefined,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 8,\n };\n};\n\nconst inlineSpinnerStyle = (color: string): CSSProperties => ({\n width: 16,\n height: 16,\n border: `2px solid ${color}44`,\n borderTopColor: color,\n borderRadius: '50%',\n animation: 'blink-spin 0.9s linear infinite',\n flexShrink: 0,\n});\n\nconst iconWrapStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n};\n","import type { CSSProperties, ReactNode } from 'react';\nimport { useBlinkConfig } from '../../context';\n\ninterface OutlineButtonProps {\n children: ReactNode;\n onClick?: () => void;\n disabled?: boolean;\n}\n\nexport function OutlineButton({ children, onClick, disabled }: OutlineButtonProps) {\n const { tokens } = useBlinkConfig();\n\n return (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={disabled}\n style={buttonStyle(tokens, disabled)}\n >\n {children}\n </button>\n );\n}\n\nconst buttonStyle = (\n tokens: { text: string; border: string; bgCard: string },\n disabled?: boolean,\n): CSSProperties => ({\n width: '100%',\n padding: '16px 24px',\n background: tokens.bgCard,\n color: tokens.text,\n border: `1.5px solid ${tokens.border}`,\n borderRadius: 999,\n fontSize: '0.95rem',\n fontWeight: 600,\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.5 : 1,\n fontFamily: 'inherit',\n transition: 'opacity 0.15s ease',\n});\n","import type { CSSProperties, ReactNode } from 'react';\nimport { useBlinkConfig } from '../../context';\n\ninterface InfoBannerProps {\n children: ReactNode;\n /** SVG icon element. Defaults to a shield icon. */\n icon?: ReactNode;\n}\n\nconst defaultIcon = (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm0 10.99h7c-.53 4.12-3.28 7.79-7 8.94V12H5V6.3l7-3.11v8.8z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n\nexport function InfoBanner({ children, icon }: InfoBannerProps) {\n const { tokens } = useBlinkConfig();\n\n return (\n <div style={containerStyle(tokens.accent)}>\n <span style={iconStyle}>{icon ?? defaultIcon}</span>\n <span style={textStyle}>{children}</span>\n </div>\n );\n}\n\nconst containerStyle = (accent: string): CSSProperties => ({\n display: 'flex',\n alignItems: 'flex-start',\n gap: 10,\n padding: '14px 16px',\n background: `${accent}0D`,\n borderRadius: 16,\n fontSize: '0.82rem',\n lineHeight: 1.5,\n color: 'inherit',\n});\n\nconst iconStyle: CSSProperties = {\n flexShrink: 0,\n marginTop: 1,\n display: 'flex',\n};\n\nconst textStyle: CSSProperties = { flex: 1 };\n","import type { CSSProperties, ReactNode } from 'react';\n\ninterface WarningBannerProps {\n title: string;\n children: ReactNode;\n}\n\nexport function WarningBanner({ title, children }: WarningBannerProps) {\n return (\n <div style={containerStyle}>\n <div style={headerStyle}>\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" style={iconStyle}>\n <path d=\"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z\" fill=\"#F57C00\" />\n </svg>\n <strong>{title}</strong>\n </div>\n <div style={bodyStyle}>{children}</div>\n </div>\n );\n}\n\nconst containerStyle: CSSProperties = {\n padding: '14px 16px',\n background: '#FFF8E1',\n border: '1px solid #FFE082',\n borderRadius: 16,\n fontSize: '0.84rem',\n lineHeight: 1.5,\n color: '#5D4037',\n};\n\nconst headerStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n marginBottom: 4,\n fontWeight: 600,\n color: '#37474F',\n};\n\nconst iconStyle: CSSProperties = { flexShrink: 0 };\n\nconst bodyStyle: CSSProperties = { color: '#6D4C41' };\n","import type { CSSProperties, ReactNode } from 'react';\nimport { useBlinkConfig } from '../../context';\n\ntype IconCircleVariant = 'accent' | 'success' | 'error';\n\ninterface IconCircleProps {\n children: ReactNode;\n variant?: IconCircleVariant;\n size?: number;\n}\n\nexport function IconCircle({ children, variant = 'accent', size = 56 }: IconCircleProps) {\n const { tokens } = useBlinkConfig();\n\n const bgMap: Record<IconCircleVariant, string> = {\n accent: `${tokens.accent}18`,\n success: tokens.successBg,\n error: tokens.errorBg,\n };\n\n return (\n <div style={circleStyle(bgMap[variant], size)}>\n {children}\n </div>\n );\n}\n\nconst circleStyle = (bg: string, size: number): CSSProperties => ({\n width: size,\n height: size,\n borderRadius: '50%',\n background: bg,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n margin: '0 auto',\n flexShrink: 0,\n});\n","import { useCallback, useRef, type CSSProperties, type KeyboardEvent } from 'react';\nimport { useBlinkConfig } from '../../context';\n\ninterface OtpInputProps {\n value: string;\n onChange: (value: string) => void;\n length?: number;\n disabled?: boolean;\n}\n\nexport function OtpInput({ value, onChange, length = 6, disabled }: OtpInputProps) {\n const { tokens } = useBlinkConfig();\n const inputsRef = useRef<(HTMLInputElement | null)[]>([]);\n\n const digits = value.padEnd(length).split('').slice(0, length);\n\n const focusInput = useCallback((index: number) => {\n const clamped = Math.max(0, Math.min(index, length - 1));\n inputsRef.current[clamped]?.focus();\n }, [length]);\n\n const handleChange = useCallback((index: number, char: string) => {\n const cleaned = char.replace(/\\D/g, '');\n if (cleaned.length > 1) {\n const filled = cleaned.slice(0, length);\n onChange(filled);\n focusInput(Math.min(filled.length, length - 1));\n return;\n }\n const digit = cleaned.slice(0, 1);\n const next = digits.slice();\n next[index] = digit;\n const joined = next.join('').replace(/\\s/g, '');\n onChange(joined);\n if (digit && index < length - 1) {\n focusInput(index + 1);\n }\n }, [digits, onChange, length, focusInput]);\n\n const handleKeyDown = useCallback((index: number, e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Backspace' && !digits[index] && index > 0) {\n focusInput(index - 1);\n } else if (e.key === 'ArrowLeft' && index > 0) {\n focusInput(index - 1);\n } else if (e.key === 'ArrowRight' && index < length - 1) {\n focusInput(index + 1);\n }\n }, [digits, focusInput, length]);\n\n const handlePaste = useCallback((e: React.ClipboardEvent) => {\n e.preventDefault();\n const pasted = e.clipboardData.getData('text').replace(/\\D/g, '').slice(0, length);\n onChange(pasted);\n focusInput(Math.min(pasted.length, length - 1));\n }, [onChange, length, focusInput]);\n\n return (\n <div style={containerStyle}>\n {digits.map((digit, i) => (\n <input\n key={i}\n ref={(el) => { inputsRef.current[i] = el; }}\n type=\"text\"\n inputMode=\"numeric\"\n autoComplete={i === 0 ? 'one-time-code' : 'off'}\n maxLength={1}\n value={digit.trim()}\n disabled={disabled}\n onChange={(e) => handleChange(i, e.target.value)}\n onKeyDown={(e) => handleKeyDown(i, e)}\n onPaste={handlePaste}\n onFocus={(e) => e.target.select()}\n style={inputStyle(tokens, !!digit.trim())}\n />\n ))}\n </div>\n );\n}\n\nconst containerStyle: CSSProperties = {\n display: 'flex',\n gap: 8,\n justifyContent: 'center',\n width: '100%',\n};\n\nconst inputStyle = (\n tokens: { border: string; bgInput: string; text: string; borderFocus: string },\n filled: boolean,\n): CSSProperties => ({\n boxSizing: 'border-box',\n width: 44,\n maxWidth: 'calc((100% - 40px) / 6)',\n height: 52,\n borderRadius: 12,\n border: `1.5px solid ${filled ? tokens.borderFocus : tokens.border}`,\n background: tokens.bgInput,\n color: tokens.text,\n fontSize: '1.25rem',\n fontWeight: 600,\n fontFamily: 'inherit',\n textAlign: 'center',\n outline: 'none',\n caretColor: tokens.borderFocus,\n transition: 'border-color 0.15s ease',\n});\n","import type { CSSProperties } from 'react';\nimport { useBlinkConfig } from '../../context';\n\nexport interface StepItem {\n label: string;\n /** Optional sublabel (e.g. \"$100 limit · 2 tokens approved\") */\n detail?: string;\n status: 'pending' | 'active' | 'complete';\n}\n\ninterface StepListProps {\n steps: StepItem[];\n}\n\nexport function StepList({ steps }: StepListProps) {\n const { tokens } = useBlinkConfig();\n\n return (\n <div style={listStyle}>\n {steps.map((step, i) => {\n const isComplete = step.status === 'complete';\n const isActive = step.status === 'active';\n\n return (\n <div key={i} style={rowStyle}>\n <div\n style={badgeStyle(\n isComplete || isActive ? tokens.accent : tokens.border,\n isComplete,\n )}\n >\n {isComplete ? (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\" fill=\"#fff\" />\n </svg>\n ) : (\n <span style={isActive ? activeBadgeNumberStyle(tokens.accent) : badgeNumberStyle}>{i + 1}</span>\n )}\n </div>\n <div style={labelContainerStyle}>\n <span style={labelStyle(isComplete || isActive ? tokens.text : tokens.textMuted)}>\n {step.label}\n </span>\n {step.detail && (\n <span style={detailStyle(tokens.textMuted)}>{step.detail}</span>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n\nconst listStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 12,\n};\n\nconst rowStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n};\n\nconst badgeStyle = (color: string, filled: boolean): CSSProperties => ({\n width: 28,\n height: 28,\n borderRadius: '50%',\n background: filled ? color : 'transparent',\n border: filled ? 'none' : `1.5px solid ${color}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n});\n\nconst badgeNumberStyle: CSSProperties = {\n fontSize: '0.75rem',\n fontWeight: 600,\n color: 'inherit',\n};\n\nconst activeBadgeNumberStyle = (color: string): CSSProperties => ({\n fontSize: '0.75rem',\n fontWeight: 600,\n color,\n});\n\nconst labelContainerStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n};\n\nconst labelStyle = (color: string): CSSProperties => ({\n fontSize: '0.9rem',\n fontWeight: 500,\n color,\n});\n\nconst detailStyle = (color: string): CSSProperties => ({\n fontSize: '0.75rem',\n color,\n});\n","/**\n * Best-effort UI label for device biometrics (Face ID, Touch ID, Windows Hello, etc.).\n * The web platform does not expose the exact modality; this uses coarse `userAgent`\n * detection only — synchronous so it can run during render with no effects.\n */\n\nconst FALLBACK = 'Biometric verification';\n\n/**\n * Returns short copy for passkey / biometric prompts based on the current environment.\n * Does not call WebAuthn (no async); suitable for direct use in render.\n */\nexport function getDeviceBiometricUnlockText(): string {\n const ua =\n typeof navigator !== 'undefined' && typeof navigator.userAgent === 'string'\n ? navigator.userAgent\n : '';\n\n if (/iPhone|iPad|iPod/i.test(ua)) {\n return 'Face ID or Touch ID';\n }\n if (/Android/i.test(ua)) {\n return 'Fingerprint or face unlock';\n }\n if (/Windows NT/i.test(ua)) {\n return 'Windows Hello';\n }\n if (/Macintosh|Mac OS X/i.test(ua)) {\n return 'Touch ID';\n }\n\n return FALLBACK;\n}\n","import type { CSSProperties } from 'react';\nimport { useBlinkConfig } from '../../context';\nimport { BLINK_LOGO } from '../../assets/logos';\nimport { ScreenLayout, ScreenHeader, PoweredByFooter, PrimaryButton } from '../ui';\nimport { getDeviceBiometricUnlockText } from '../../deviceBiometricUnlockText';\n\ninterface LoginScreenProps {\n onLoginWithPasskey: () => void;\n onSignupWithPasskey: () => void;\n loading: boolean;\n error: string | null;\n onBack?: () => void;\n merchantInitials?: string;\n /** Overrides default hero heading (e.g. guest preauth flow). */\n heroTitle?: string;\n /** Optional line below the hero heading. */\n heroSubtitle?: string;\n /** When true, signup is the primary action (guest preauth flow). */\n preferSignup?: boolean;\n}\n\nexport function LoginScreen({\n onLoginWithPasskey,\n onSignupWithPasskey,\n loading,\n error,\n onBack,\n merchantInitials,\n heroTitle,\n heroSubtitle,\n preferSignup = false,\n}: LoginScreenProps) {\n const { tokens } = useBlinkConfig();\n const heading = heroTitle ?? 'Your Money. Any App.\\nOne Tap.';\n\n const primaryAction = preferSignup ? onSignupWithPasskey : onLoginWithPasskey;\n const primaryLabel = preferSignup ? `Register your ${getDeviceBiometricUnlockText()}` : 'Sign in';\n const secondaryAction = preferSignup ? onLoginWithPasskey : onSignupWithPasskey;\n const secondaryLabel = preferSignup ? 'I already have an account' : 'Create an account';\n\n return (\n <ScreenLayout\n footer={\n <>\n <PrimaryButton onClick={primaryAction} disabled={loading} loading={loading}>\n {primaryLabel}\n </PrimaryButton>\n <button\n type=\"button\"\n onClick={secondaryAction}\n disabled={loading}\n style={createAccountStyle(tokens.textMuted)}\n >\n {secondaryLabel}\n </button>\n <PoweredByFooter />\n </>\n }\n >\n <ScreenHeader\n onBack={onBack}\n right={\n merchantInitials ? (\n <div style={avatarStyle(tokens)}>{merchantInitials}</div>\n ) : undefined\n }\n />\n\n <div style={contentStyle}>\n <img src={BLINK_LOGO} alt=\"Blink\" style={logoStyle} />\n\n <h2 style={headingStyle(tokens.text)}>{heading}</h2>\n\n {heroSubtitle ? (\n <p style={subtitleStyle(tokens.textMuted)}>{heroSubtitle}</p>\n ) : null}\n\n {error && <div style={errorStyle(tokens)}>{error}</div>}\n </div>\n </ScreenLayout>\n );\n}\n\n/* ── Styles ──────────────────────────────────────────────────────── */\n\nconst contentStyle: CSSProperties = {\n textAlign: 'center',\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n};\n\nconst logoStyle: CSSProperties = {\n width: 50,\n height: 50,\n};\n\nconst headingStyle = (color: string): CSSProperties => ({\n fontSize: '1.45rem',\n fontWeight: 700,\n lineHeight: 1.25,\n letterSpacing: '-0.02em',\n color,\n margin: '20px 0 8px',\n whiteSpace: 'pre-line',\n});\n\nconst subtitleStyle = (color: string): CSSProperties => ({\n fontSize: '0.9rem',\n fontWeight: 500,\n lineHeight: 1.45,\n color,\n margin: '0 0 16px',\n maxWidth: 320,\n});\n\nconst errorStyle = (tokens: { error: string; errorBg: string }): CSSProperties => ({\n background: tokens.errorBg,\n border: `1px solid ${tokens.error}66`,\n borderRadius: 16,\n padding: '11px 14px',\n color: tokens.error,\n fontSize: '0.84rem',\n marginBottom: 14,\n lineHeight: 1.5,\n width: '100%',\n textAlign: 'left',\n});\n\nconst createAccountStyle = (color: string): CSSProperties => ({\n background: 'none',\n border: 'none',\n color,\n fontSize: '0.85rem',\n cursor: 'pointer',\n padding: '8px 16px',\n textDecoration: 'underline',\n fontFamily: 'inherit',\n width: '100%',\n});\n\nconst avatarStyle = (tokens: { border: string; textMuted: string }): CSSProperties => ({\n width: 28,\n height: 28,\n borderRadius: '50%',\n border: `1px solid ${tokens.border}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '0.6rem',\n fontWeight: 700,\n color: tokens.textMuted,\n background: 'transparent',\n});\n","import { useCallback, useEffect, useRef, useState, type CSSProperties } from 'react';\nimport { useBlinkConfig } from '../../context';\nimport { ScreenLayout, ScreenHeader, PoweredByFooter, PrimaryButton, OtpInput } from '../ui';\n\nconst RESEND_COOLDOWN_SECONDS = 30;\n\ninterface OtpVerifyScreenProps {\n /** Masked identifier displayed to the user (e.g. \"user@email.com\") */\n maskedIdentifier: string;\n otpCode: string;\n onOtpChange: (code: string) => void;\n onVerify: () => void;\n onResend: () => void;\n onBack: () => void;\n verifying: boolean;\n error: string | null;\n}\n\nexport function OtpVerifyScreen({\n maskedIdentifier,\n otpCode,\n onOtpChange,\n onVerify,\n onResend,\n onBack,\n verifying,\n error,\n}: OtpVerifyScreenProps) {\n const { tokens } = useBlinkConfig();\n const disabled = otpCode.trim().length !== 6 || verifying;\n\n const [cooldown, setCooldown] = useState(RESEND_COOLDOWN_SECONDS);\n const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n\n useEffect(() => {\n setCooldown(RESEND_COOLDOWN_SECONDS);\n intervalRef.current = setInterval(() => {\n setCooldown((prev) => {\n if (prev <= 1) {\n if (intervalRef.current) clearInterval(intervalRef.current);\n return 0;\n }\n return prev - 1;\n });\n }, 1000);\n return () => {\n if (intervalRef.current) clearInterval(intervalRef.current);\n };\n }, []);\n\n const handleResend = useCallback(() => {\n if (cooldown > 0) return;\n onResend();\n setCooldown(RESEND_COOLDOWN_SECONDS);\n intervalRef.current = setInterval(() => {\n setCooldown((prev) => {\n if (prev <= 1) {\n if (intervalRef.current) clearInterval(intervalRef.current);\n return 0;\n }\n return prev - 1;\n });\n }, 1000);\n }, [cooldown, onResend]);\n\n return (\n <ScreenLayout\n footer={\n <>\n <PrimaryButton onClick={onVerify} disabled={disabled} loading={verifying}>\n Verify\n </PrimaryButton>\n <PoweredByFooter />\n </>\n }\n >\n <ScreenHeader onBack={onBack} />\n\n <div style={contentStyle}>\n <h2 style={headingStyle(tokens.text)}>Confirm it is you</h2>\n <p style={subtitleStyle(tokens.textSecondary)}>\n We sent a 6-digit code to{'\\n'}\n <strong>{maskedIdentifier}</strong>\n </p>\n\n {error && <div style={errorBannerStyle(tokens)}>{error}</div>}\n\n <OtpInput value={otpCode} onChange={onOtpChange} disabled={verifying} />\n\n <button\n type=\"button\"\n onClick={handleResend}\n disabled={cooldown > 0}\n style={resendStyle(tokens.textMuted, cooldown > 0)}\n >\n {cooldown > 0 ? `Resend code in ${cooldown}s` : 'Resend code'}\n </button>\n </div>\n </ScreenLayout>\n );\n}\n\nconst contentStyle: CSSProperties = {\n textAlign: 'center',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n paddingTop: 24,\n};\n\nconst headingStyle = (color: string): CSSProperties => ({\n fontSize: '1.5rem',\n fontWeight: 700,\n letterSpacing: '-0.02em',\n color,\n margin: '20px 0 8px',\n});\n\nconst subtitleStyle = (color: string): CSSProperties => ({\n fontSize: '0.88rem',\n color,\n margin: '0 0 28px',\n lineHeight: 1.5,\n whiteSpace: 'pre-line',\n});\n\nconst errorBannerStyle = (tokens: { error: string; errorBg: string }): CSSProperties => ({\n background: tokens.errorBg,\n border: `1px solid ${tokens.error}66`,\n borderRadius: 16,\n padding: '11px 14px',\n color: tokens.error,\n fontSize: '0.84rem',\n marginBottom: 14,\n lineHeight: 1.5,\n width: '100%',\n textAlign: 'left',\n});\n\nconst resendStyle = (color: string, disabled: boolean): CSSProperties => ({\n background: 'transparent',\n border: 'none',\n color,\n cursor: disabled ? 'default' : 'pointer',\n fontFamily: 'inherit',\n fontSize: '0.82rem',\n marginTop: 16,\n padding: 0,\n opacity: disabled ? 0.6 : 1,\n});\n\n","import type { CSSProperties } from 'react';\nimport { useBlinkConfig } from '../../context';\nimport { ScreenLayout, ScreenHeader, PoweredByFooter, PrimaryButton } from '../ui';\n\ninterface PasskeyScreenProps {\n onCreatePasskey: () => void;\n onBack?: () => void;\n onLogout?: () => void;\n creating: boolean;\n error: string | null;\n /** When true, direct passkey creation failed (Safari iframe restriction). */\n popupFallback?: boolean;\n /** Opens a pop-up window on the Blink domain for passkey registration. */\n onCreatePasskeyViaPopup?: () => void;\n /** Creates a brand-new passkey on this device (for users who already have one on another device). */\n onCreateNewPasskey?: () => void;\n /** Popup fallback variant of onCreateNewPasskey. */\n onCreateNewPasskeyViaPopup?: () => void;\n /** When set, overrides `popupFallback` for the create-new link only. */\n createNewPopupFallback?: boolean;\n /** Loading state while a new passkey is being created. */\n creatingNewPasskey?: boolean;\n}\n\nexport function PasskeyScreen({\n onCreatePasskey,\n onBack,\n onLogout,\n creating,\n error,\n popupFallback = false,\n onCreatePasskeyViaPopup,\n onCreateNewPasskey,\n onCreateNewPasskeyViaPopup,\n createNewPopupFallback,\n creatingNewPasskey,\n}: PasskeyScreenProps) {\n const { tokens } = useBlinkConfig();\n\n const handleCreate = popupFallback && onCreatePasskeyViaPopup\n ? onCreatePasskeyViaPopup\n : onCreatePasskey;\n\n const buttonLabel = popupFallback\n ? 'Open Passkey Window'\n : 'Verify Passkey';\n\n const showCreateNewLink = onCreateNewPasskey != null;\n const usePopupForNew = createNewPopupFallback ?? popupFallback;\n const handleCreateNew = usePopupForNew && onCreateNewPasskeyViaPopup\n ? onCreateNewPasskeyViaPopup\n : onCreateNewPasskey;\n\n return (\n <ScreenLayout\n footer={\n <>\n <PrimaryButton onClick={handleCreate} disabled={creating || creatingNewPasskey} loading={creating}>\n {buttonLabel}\n </PrimaryButton>\n {showCreateNewLink && (\n <button\n type=\"button\"\n onClick={handleCreateNew}\n disabled={creatingNewPasskey || creating}\n style={createNewLinkStyle(tokens.textMuted)}\n >\n {creatingNewPasskey ? 'Creating passkey…' : 'Create a new passkey for this device'}\n </button>\n )}\n <PoweredByFooter />\n </>\n }\n >\n <ScreenHeader onBack={onBack} onLogout={onLogout} />\n\n <div style={contentStyle}>\n <h2 style={headingStyle(tokens.text)}>Secure your account with a passkey</h2>\n <p style={subtitleStyle(tokens.textSecondary)}>This enables secure one-tap deposits on this device</p>\n\n {error && <div style={errorBannerStyle(tokens)}>{error}</div>}\n </div>\n </ScreenLayout>\n );\n}\n\nconst contentStyle: CSSProperties = {\n textAlign: 'center',\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n};\n\nconst headingStyle = (color: string): CSSProperties => ({\n fontSize: '1.45rem',\n fontWeight: 700,\n letterSpacing: '-0.02em',\n color,\n margin: '24px 0 8px',\n});\n\nconst subtitleStyle = (color: string): CSSProperties => ({\n fontSize: '0.86rem',\n color,\n margin: '0 0 20px',\n lineHeight: 1.5,\n});\n\nconst createNewLinkStyle = (color: string): CSSProperties => ({\n background: 'none',\n border: 'none',\n color,\n fontSize: '0.85rem',\n cursor: 'pointer',\n padding: '8px 16px',\n textDecoration: 'underline',\n fontFamily: 'inherit',\n width: '100%',\n});\n\nconst errorBannerStyle = (tokens: { error: string; errorBg: string }): CSSProperties => ({\n background: tokens.errorBg,\n border: `1px solid ${tokens.error}66`,\n borderRadius: 16,\n padding: '11px 14px',\n color: tokens.error,\n fontSize: '0.84rem',\n marginBottom: 14,\n lineHeight: 1.5,\n width: '100%',\n textAlign: 'left',\n});\n","import type { CSSProperties } from 'react';\nimport { useBlinkConfig } from '../../context';\nimport { ScreenLayout, ScreenHeader, PoweredByFooter, PrimaryButton, IconCircle, InfoBanner } from '../ui';\n\ninterface VerifyPasskeyScreenProps {\n onVerify: () => void;\n onBack?: () => void;\n verifying: boolean;\n error: string | null;\n /** Override the default subtitle text (useful when rendering inside a popup). */\n subtitle?: string;\n}\n\nconst DEFAULT_SUBTITLE =\n 'Your browser requires a separate window to verify your passkey. Tap the button below to continue.';\n\nexport function VerifyPasskeyScreen({\n onVerify,\n onBack,\n verifying,\n error,\n subtitle = DEFAULT_SUBTITLE,\n}: VerifyPasskeyScreenProps) {\n const { tokens } = useBlinkConfig();\n\n return (\n <ScreenLayout\n footer={\n <>\n <PrimaryButton onClick={onVerify} disabled={verifying} loading={verifying}>\n Verify passkey\n </PrimaryButton>\n <PoweredByFooter />\n </>\n }\n >\n <ScreenHeader onBack={onBack} />\n\n <div style={contentStyle}>\n <IconCircle variant=\"accent\" size={64}>\n <svg width=\"36\" height=\"36\" viewBox=\"0 0 24 24\" fill=\"none\">\n <rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"3\" stroke={tokens.accent} strokeWidth=\"1.5\" strokeDasharray=\"3 2\" />\n <circle cx=\"9\" cy=\"10\" r=\"1\" fill={tokens.accent} />\n <circle cx=\"15\" cy=\"10\" r=\"1\" fill={tokens.accent} />\n <path d=\"M9 14c0 1.5 1.34 2.5 3 2.5s3-1 3-2.5\" stroke={tokens.accent} strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n </svg>\n </IconCircle>\n\n <h2 style={headingStyle(tokens.text)}>Verify your passkey</h2>\n <p style={subtitleStyle(tokens.textSecondary)}>\n {subtitle}\n </p>\n\n {error && <div style={errorBannerStyle(tokens)}>{error}</div>}\n\n <InfoBanner>\n Your passkey is stored securely on your device. Blink never sees your biometric data.\n </InfoBanner>\n </div>\n </ScreenLayout>\n );\n}\n\nconst contentStyle: CSSProperties = {\n textAlign: 'center',\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n paddingTop: 32,\n};\n\nconst headingStyle = (color: string): CSSProperties => ({\n fontSize: '1.45rem',\n fontWeight: 700,\n letterSpacing: '-0.02em',\n color,\n margin: '24px 0 8px',\n});\n\nconst subtitleStyle = (color: string): CSSProperties => ({\n fontSize: '0.9rem',\n color,\n margin: '0 0 28px',\n lineHeight: 1.5,\n maxWidth: 280,\n});\n\nconst errorBannerStyle = (tokens: { error: string; errorBg: string }): CSSProperties => ({\n background: tokens.errorBg,\n border: `1px solid ${tokens.error}66`,\n borderRadius: 16,\n padding: '11px 14px',\n color: tokens.error,\n fontSize: '0.84rem',\n marginBottom: 14,\n lineHeight: 1.5,\n width: '100%',\n textAlign: 'left',\n});\n","// ── Animated Spinner ───────────────────────────────────────────────────\nimport { useBlinkConfig } from '../context';\n\ninterface SpinnerProps {\n size?: number;\n label?: string;\n}\n\nexport function Spinner({ size = 40, label }: SpinnerProps) {\n const { tokens } = useBlinkConfig();\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: `4px solid ${tokens.bgInput}`,\n borderTopColor: tokens.accent,\n borderRightColor: tokens.accent + '66',\n borderRadius: '50%',\n boxShadow: 'inset 0 0 0 1px rgba(255,255,255,0.1)',\n animation: 'blink-spin 0.9s 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 blink-spin {\n to { transform: rotate(360deg); }\n }\n `}</style>\n </div>\n );\n}\n","const IFRAME_CLEANUP_DELAY_MS = 3000;\n\n/**\n * Returns `true` when the URI uses a custom URL scheme (e.g. `cbwallet://`,\n * `wc:`) rather than a standard `https://` or `http://` Universal Link.\n *\n * Custom-scheme deeplinks can safely be opened via `window.open` because the\n * OS intercepts them without creating a new browser tab. Universal Links\n * (`https://`) opened with `window.open(_blank)` create a stale blank tab in\n * Safari that becomes the active tab when the user returns from the wallet.\n */\nexport function isCustomSchemeUri(uri: string): boolean {\n try {\n return !uri.startsWith('https://') && !uri.startsWith('http://');\n } catch {\n return false;\n }\n}\n\n/**\n * Attempts to open a native wallet app via its deeplink URI without\n * navigating the current page away.\n *\n * Creates a **hidden iframe** whose `src` is set to the deeplink URI.\n * The OS intercepts iframe navigations to custom URL schemes (e.g.\n * `wc:`, `cbwallet:`) and opens the registered app while the main page\n * stays in place.\n *\n * This function intentionally does **not** fall back to\n * `window.location.href` because that navigates the page away, which\n * destroys the payment UI in both iframe and in-app browser contexts\n * (SFSafariViewController / Chrome Custom Tabs). For HTTPS-based\n * Universal Links that require a real user tap, the caller should\n * present a tappable button as a fallback (e.g. the \"Open wallet\"\n * button in OpenWalletScreen).\n */\nexport function triggerDeeplink(uri: string): void {\n try {\n const iframe = document.createElement('iframe');\n iframe.style.display = 'none';\n iframe.src = uri;\n document.body.appendChild(iframe);\n setTimeout(() => {\n try {\n document.body.removeChild(iframe);\n } catch { /* iframe may already be removed */ }\n }, IFRAME_CLEANUP_DELAY_MS);\n } catch { /* iframe creation may fail in restricted contexts */ }\n}\n","import { useCallback, useRef, useState, type CSSProperties } from 'react';\nimport type { Account, Provider } from '../../types';\nimport type { PreparedSession } from '../../hooks/useProviderHandlers';\nimport { useBlinkConfig } from '../../context';\nimport { ScreenLayout, ScreenHeader, PrimaryButton } from '../ui';\nimport { Spinner } from '../Spinner';\nimport { KNOWN_LOGOS } from '../../assets/logos';\nimport { isCustomSchemeUri } from '../../deeplink';\n\nconst WALLET_EMOJIS: Record<string, string> = {\n rabby: '\\uD83D\\uDC30',\n ora: '\\u2666\\uFE0F',\n phantom: '\\uD83D\\uDC7B',\n};\n\nfunction truncateAddress(address: string): string {\n if (address.length <= 10) return address;\n return `${address.slice(0, 6)}...${address.slice(-4)}`;\n}\n\ninterface StoredSession extends PreparedSession {\n providerId: string;\n}\n\ninterface WalletPickerScreenProps {\n providers: Provider[];\n pendingConnections?: Account[];\n loading?: boolean;\n useDeeplink?: boolean;\n onPrepareProvider: (providerId: string) => Promise<PreparedSession | null>;\n onSelectProvider: (providerId: string, preparedSession?: PreparedSession) => Promise<void>;\n onContinueConnection?: (accountId: string) => void;\n onBack?: () => void;\n onLogout?: () => void;\n onLogin?: () => void;\n showLoginOption?: boolean;\n isDesktop?: boolean;\n}\n\nexport function WalletPickerScreen({\n providers,\n pendingConnections,\n loading,\n useDeeplink,\n onPrepareProvider,\n onSelectProvider,\n onContinueConnection,\n onBack,\n onLogout,\n onLogin,\n showLoginOption,\n isDesktop,\n}: WalletPickerScreenProps) {\n const { tokens } = useBlinkConfig();\n const [hoveredId, setHoveredId] = useState<string | null>(null);\n const [selectedProviderId, setSelectedProviderId] = useState<string | null>(null);\n const [cryptoExpanded, setCryptoExpanded] = useState(true);\n const [connecting, setConnecting] = useState(false);\n const [preparedSession, setPreparedSession] = useState<StoredSession | null>(null);\n const [preparing, setPreparing] = useState(false);\n const prepareIdRef = useRef(0);\n\n const handleCardClick = useCallback(async (providerId: string) => {\n setSelectedProviderId(providerId);\n setPreparedSession(null);\n setPreparing(true);\n\n const id = ++prepareIdRef.current;\n try {\n const session = await onPrepareProvider(providerId);\n if (prepareIdRef.current !== id) return;\n if (session) {\n setPreparedSession({ ...session, providerId });\n }\n } finally {\n if (prepareIdRef.current === id) {\n setPreparing(false);\n }\n }\n }, [onPrepareProvider]);\n\n const hasPending = pendingConnections != null && pendingConnections.length > 0;\n\n const providersLoading = providers.length === 0;\n\n const selectedProvider = providers.find((p) => p.id === selectedProviderId);\n\n if (loading) {\n return (\n <ScreenLayout>\n <ScreenHeader title=\"Set a Provider\" onBack={onBack} onLogout={onLogout} />\n <div style={{ textAlign: 'center', padding: '48px 0', flex: 1, display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <Spinner label=\"Connecting...\" />\n </div>\n </ScreenLayout>\n );\n }\n\n return (\n <ScreenLayout\n footer={\n <>\n {selectedProvider && (\n <PrimaryButton\n onClick={() => {\n const session = preparedSession?.providerId === selectedProvider.id\n ? preparedSession\n : undefined;\n if (session && useDeeplink && isCustomSchemeUri(session.uri)) {\n window.open(session.uri, '_blank');\n }\n setConnecting(true);\n onSelectProvider(selectedProvider.id, session).finally(() => setConnecting(false));\n }}\n loading={connecting || preparing}\n disabled={preparing}\n >\n {preparing ? 'Preparing...' : isDesktop ? 'Continue to Deposit' : `Open ${selectedProvider.name} to Deposit`}\n </PrimaryButton>\n )}\n {showLoginOption && onLogin && (\n <div style={loginOptionStyle}>\n <span style={loginTextStyle(tokens.textSecondary)}>Already have an account?</span>\n <button\n type=\"button\"\n onClick={onLogin}\n style={loginButtonStyle(tokens.accent)}\n >\n Log in\n </button>\n </div>\n )}\n </>\n }\n >\n <ScreenHeader title=\"Where is your money?\" onBack={onBack} onLogout={onLogout} />\n\n {hasPending && (\n <>\n <h2 style={headingStyle(tokens.text)}>Continue where you left off</h2>\n <p style={subtitleStyle(tokens.textSecondary)}>\n You have a wallet that still needs setup\n </p>\n\n <div style={pendingListStyle}>\n {pendingConnections.map((acct) => {\n const wallet = acct.wallets[0];\n const address = wallet ? truncateAddress(wallet.name) : undefined;\n const isHovered = hoveredId === `pending-${acct.id}`;\n return (\n <button\n key={acct.id}\n onClick={() => onContinueConnection?.(acct.id)}\n onMouseEnter={() => setHoveredId(`pending-${acct.id}`)}\n onMouseLeave={() => setHoveredId(null)}\n style={pendingCardStyle(tokens, isHovered)}\n >\n <div style={pendingCardContentStyle}>\n <div style={pendingIconStyle}>\n {KNOWN_LOGOS[acct.name.toLowerCase()] ? (\n <img\n src={KNOWN_LOGOS[acct.name.toLowerCase()]}\n alt={acct.name}\n style={logoImgStyle}\n />\n ) : (\n <span style={emojiStyle}>\n {WALLET_EMOJIS[acct.name.toLowerCase()] ?? acct.name.charAt(0)}\n </span>\n )}\n </div>\n <div style={pendingInfoStyle}>\n <span style={pendingNameStyle(tokens.text)}>{acct.name}</span>\n {address && (\n <span style={pendingAddressStyle(tokens.textMuted)}>{address}</span>\n )}\n </div>\n <span style={pendingBadgeStyle(tokens)}>Setup incomplete</span>\n </div>\n <div style={continueRowStyle(tokens)}>\n Continue setup\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z\" fill=\"currentColor\" />\n </svg>\n </div>\n </button>\n );\n })}\n </div>\n\n <div style={dividerStyle(tokens.border)}>\n <span style={dividerTextStyle(tokens.textMuted)}>Or connect a new wallet</span>\n </div>\n </>\n )}\n\n <button\n type=\"button\"\n onClick={() => setCryptoExpanded((v) => !v)}\n style={categoryRowStyle(tokens, cryptoExpanded)}\n >\n <span style={categoryLabelStyle}>Crypto Wallet</span>\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n style={{ transform: cryptoExpanded ? 'rotate(180deg)' : 'none', transition: 'transform 0.2s ease' }}\n >\n <path d=\"M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z\" fill=\"currentColor\" />\n </svg>\n </button>\n\n {cryptoExpanded && providersLoading && (\n <div style={{ textAlign: 'center', padding: '24px 0' }}>\n <Spinner label=\"Loading wallets...\" />\n </div>\n )}\n\n {cryptoExpanded && !providersLoading && (\n <div style={gridStyle}>\n {providers.map((p) => {\n const logoSrc = ('logoURI' in p && (p as Provider).logoURI)\n || KNOWN_LOGOS[p.name.toLowerCase()];\n const emoji = WALLET_EMOJIS[p.name.toLowerCase()] ?? p.name.charAt(0);\n const isSelected = selectedProviderId === p.id;\n const isHovered = hoveredId === p.id;\n return (\n <button\n key={p.id}\n onClick={() => handleCardClick(p.id)}\n onMouseEnter={() => setHoveredId(p.id)}\n onMouseLeave={() => setHoveredId(null)}\n style={cardStyle(tokens, isHovered, isSelected)}\n >\n {logoSrc ? (\n <img\n src={logoSrc}\n alt={p.name}\n style={logoImgStyle}\n />\n ) : (\n <span style={emojiStyle}>{emoji}</span>\n )}\n <span style={nameStyle(tokens.text)}>{p.name}</span>\n </button>\n );\n })}\n </div>\n )}\n\n <div style={categoryRowStyle(tokens, false, true)}>\n <span style={categoryLabelStyle}>Bank Account</span>\n <span style={comingSoonBadgeStyle(tokens)}>Coming Soon</span>\n </div>\n\n </ScreenLayout>\n );\n}\n\nconst headingStyle = (color: string): CSSProperties => ({\n fontSize: '1.35rem',\n fontWeight: 700,\n letterSpacing: '-0.02em',\n color,\n margin: '8px 0 4px',\n});\n\nconst subtitleStyle = (color: string): CSSProperties => ({\n fontSize: '0.88rem',\n color,\n margin: '0 0 24px',\n});\n\nconst gridStyle: CSSProperties = {\n display: 'grid',\n gridTemplateColumns: '1fr 1fr',\n gap: 8,\n marginBottom: 8,\n};\n\nconst SELECTED_GREEN = '#22c55e';\n\nconst cardStyle = (\n tokens: { bgInput: string; border: string; bgHover: string },\n hovered: boolean,\n selected: boolean,\n): CSSProperties => ({\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 6,\n padding: '10px 8px',\n background: hovered ? tokens.bgHover : tokens.bgInput,\n border: `2px solid ${selected ? SELECTED_GREEN : tokens.border}`,\n boxShadow: selected ? `0 0 0 2px ${SELECTED_GREEN}44` : 'none',\n borderRadius: 12,\n cursor: 'pointer',\n fontFamily: 'inherit',\n transition: 'background 0.15s ease, border 0.15s ease, box-shadow 0.15s ease',\n outline: 'none',\n});\n\nconst emojiStyle: CSSProperties = {\n fontSize: '1.2rem',\n lineHeight: 1,\n};\n\nconst logoImgStyle: CSSProperties = {\n width: 24,\n height: 24,\n borderRadius: 6,\n objectFit: 'contain',\n};\n\nconst nameStyle = (color: string): CSSProperties => ({\n fontSize: '0.82rem',\n fontWeight: 600,\n color,\n});\n\n// ── Category row styles ──────────────────────────────────────────────\n\nconst categoryRowStyle = (\n tokens: { bgInput: string; border: string; text: string; textMuted: string },\n expanded: boolean,\n disabled?: boolean,\n): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n padding: '10px 12px',\n background: tokens.bgInput,\n border: `1.5px solid ${tokens.border}`,\n borderRadius: 10,\n cursor: disabled ? 'default' : 'pointer',\n fontFamily: 'inherit',\n fontSize: '0.88rem',\n fontWeight: 600,\n color: disabled ? tokens.textMuted : tokens.text,\n opacity: disabled ? 0.6 : 1,\n outline: 'none',\n marginBottom: expanded ? 8 : 8,\n boxSizing: 'border-box',\n});\n\nconst categoryLabelStyle: CSSProperties = {\n lineHeight: 1,\n};\n\nconst comingSoonBadgeStyle = (tokens: { textMuted: string; border: string }): CSSProperties => ({\n fontSize: '0.72rem',\n fontWeight: 600,\n color: tokens.textMuted,\n background: `${tokens.border}88`,\n padding: '3px 10px',\n borderRadius: 6,\n whiteSpace: 'nowrap',\n});\n\n// ── Pending connection styles ────────────────────────────────────────\n\nconst pendingListStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 10,\n marginBottom: 20,\n};\n\nconst pendingCardStyle = (\n tokens: { bgInput: string; border: string; bgHover: string; warning: string },\n hovered: boolean,\n): CSSProperties => ({\n display: 'flex',\n flexDirection: 'column',\n gap: 0,\n padding: 0,\n background: hovered ? tokens.bgHover : tokens.bgInput,\n border: `1.5px solid ${tokens.warning}44`,\n borderRadius: 16,\n cursor: 'pointer',\n fontFamily: 'inherit',\n transition: 'background 0.15s ease',\n outline: 'none',\n overflow: 'hidden',\n textAlign: 'left',\n});\n\nconst pendingCardContentStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n padding: '14px 16px',\n};\n\nconst pendingIconStyle: CSSProperties = {\n flexShrink: 0,\n};\n\nconst pendingInfoStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n flex: 1,\n minWidth: 0,\n};\n\nconst pendingNameStyle = (color: string): CSSProperties => ({\n fontSize: '0.92rem',\n fontWeight: 600,\n color,\n});\n\nconst pendingAddressStyle = (color: string): CSSProperties => ({\n fontSize: '0.78rem',\n color,\n fontFamily: 'monospace',\n});\n\nconst pendingBadgeStyle = (tokens: { warningBg?: string; warningText?: string; warning: string }): CSSProperties => ({\n fontSize: '0.72rem',\n fontWeight: 600,\n color: tokens.warningText ?? tokens.warning,\n background: tokens.warningBg ?? `${tokens.warning}1a`,\n padding: '3px 8px',\n borderRadius: 6,\n whiteSpace: 'nowrap',\n flexShrink: 0,\n});\n\nconst continueRowStyle = (tokens: { accent: string; bgHover: string, text: string }): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 4,\n padding: '10px 16px',\n fontSize: '0.84rem',\n fontWeight: 600,\n color: tokens.text,\n background: `${tokens.accent}0d`,\n borderTop: `1px solid ${tokens.accent}22`,\n});\n\nconst dividerStyle = (borderColor: string): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n margin: '4px 0 16px',\n});\n\nconst dividerTextStyle = (color: string): CSSProperties => ({\n fontSize: '0.82rem',\n color,\n whiteSpace: 'nowrap',\n});\n\nconst loginOptionStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 6,\n padding: '8px 0 2px',\n};\n\nconst loginTextStyle = (color: string): CSSProperties => ({\n fontSize: '0.85rem',\n color,\n});\n\nconst loginButtonStyle = (accentColor: string): CSSProperties => ({\n fontSize: '0.85rem',\n fontWeight: 600,\n color: accentColor,\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n padding: 0,\n fontFamily: 'inherit',\n textDecoration: 'underline',\n});\n","/** Minimal shape for one row in the setup / one-tap token dropdown. */\nexport interface SetupTokenSelectionOption {\n symbol: string;\n chainName: string;\n}\n\n/**\n * Single-select: match symbol + chain when chain is known; if chain is unset, only\n * highlight when one row has that symbol (avoids marking every same-symbol chain as selected).\n */\nexport function matchesSetupTokenSelection(\n opt: SetupTokenSelectionOption,\n selectedTokenSymbol: string | undefined,\n selectedChainName: string | undefined,\n allOptions: SetupTokenSelectionOption[],\n): boolean {\n if (!selectedTokenSymbol || opt.symbol !== selectedTokenSymbol) {\n return false;\n }\n const chain = selectedChainName?.trim();\n if (chain) {\n return opt.chainName === chain;\n }\n const sameSymbol = allOptions.filter((o) => o.symbol === selectedTokenSymbol);\n if (sameSymbol.length === 1) {\n return opt.chainName === sameSymbol[0].chainName;\n }\n return false;\n}\n","import { useState, useRef, useCallback, useEffect, type CSSProperties } from 'react';\nimport { useBlinkConfig } from '../../context';\nimport { TOKEN_LOGOS, BLINK_LOGO } from '../../assets/logos';\nimport { matchesSetupTokenSelection } from '../../setupScreenSelection';\nimport { ScreenLayout, ScreenHeader, PoweredByFooter, PrimaryButton } from '../ui';\n\nconst DEFAULT_MAX = 10_000_000;\nconst ABSOLUTE_MIN = 0.01;\n\nconst PRESETS = [100, 250, 1000] as const;\n\nexport interface SetupTokenOption {\n symbol: string;\n chainName: string;\n balance?: number;\n walletId?: string;\n status?: string;\n tokenAddress?: string;\n chainId?: number;\n}\n\ninterface SetupScreenProps {\n availableBalance: number;\n /** Number of tokens/chains available */\n tokenCount: number;\n /** Source wallet/account name */\n sourceName?: string;\n onSetupOneTap: (limit: number) => void;\n onBack: () => void;\n onLogout: () => void;\n /** Navigate to the advanced source picker (fallback when no tokenOptions). */\n onAdvanced?: () => void;\n /** Human-readable label for the currently selected source (e.g. \"USDC on Base\"). */\n selectedSourceLabel?: string;\n loading?: boolean;\n error: string | null;\n /** Token symbol for the selected source, e.g. \"USDC\" or \"USDT\" */\n selectedTokenSymbol?: string;\n /** Chain name for the selected source, used alongside selectedTokenSymbol to disambiguate same-symbol tokens on different chains. */\n selectedChainName?: string;\n /** Available tokens for the inline dropdown. When provided, the token row opens a dropdown instead of navigating. */\n tokenOptions?: SetupTokenOption[];\n /** Called when the user picks a token from the inline dropdown. */\n onSelectToken?: (symbol: string, chainName: string, walletId?: string) => void;\n}\n\nfunction tokenOptionKey(opt: SetupTokenOption): string {\n return `${opt.chainName}-${opt.symbol}`;\n}\n\nexport function SetupScreen({\n availableBalance,\n onSetupOneTap,\n onBack,\n onLogout,\n onAdvanced,\n loading,\n error,\n selectedTokenSymbol,\n selectedChainName,\n tokenOptions,\n onSelectToken,\n}: SetupScreenProps) {\n const { tokens } = useBlinkConfig();\n\n const effectiveMax = DEFAULT_MAX;\n const effectiveMin = Math.min(ABSOLUTE_MIN, effectiveMax);\n\n const autoLimit = Math.min(Math.max(availableBalance, 0), effectiveMax);\n /** Non-null after user sets preset, Max, or commits Advanced edit; null = follow `autoLimit` when token/balance changes. */\n const [userChosenLimit, setUserChosenLimit] = useState<number | null>(null);\n const limit = userChosenLimit ?? autoLimit;\n\n const [activePreset, setActivePreset] = useState<number | 'max' | null>(null);\n const [showAdvanced, setShowAdvanced] = useState(false);\n const [editing, setEditing] = useState(false);\n const [inputValue, setInputValue] = useState('');\n const inputRef = useRef<HTMLInputElement>(null);\n\n const hasDropdown = tokenOptions != null && tokenOptions.length > 0 && onSelectToken != null;\n const [tokenDropdownOpen, setTokenDropdownOpen] = useState(false);\n const pickerRef = useRef<HTMLDivElement>(null);\n\n // Close token dropdown on outside click (document).\n useEffect(() => {\n if (!tokenDropdownOpen) return;\n const handleMouseDown = (e: MouseEvent) => {\n if (pickerRef.current && !pickerRef.current.contains(e.target as Node)) {\n setTokenDropdownOpen(false);\n }\n };\n document.addEventListener('mousedown', handleMouseDown);\n return () => document.removeEventListener('mousedown', handleMouseDown);\n }, [tokenDropdownOpen]);\n\n const handleTokenRowClick = useCallback(() => {\n if (hasDropdown) {\n setTokenDropdownOpen((v) => !v);\n } else {\n onAdvanced?.();\n }\n }, [hasDropdown, onAdvanced]);\n\n const handlePickToken = useCallback((opt: SetupTokenOption) => {\n onSelectToken?.(opt.symbol, opt.chainName, opt.walletId);\n setTokenDropdownOpen(false);\n }, [onSelectToken]);\n\n const startEditing = useCallback(() => {\n setInputValue(limit.toFixed(2));\n setEditing(true);\n setActivePreset(null);\n requestAnimationFrame(() => inputRef.current?.focus());\n }, [limit]);\n\n const commitEdit = useCallback(() => {\n const parsed = parseFloat(inputValue);\n if (!isNaN(parsed)) {\n setUserChosenLimit(\n Math.min(effectiveMax, Math.max(effectiveMin, Math.round(parsed * 100) / 100)),\n );\n }\n setActivePreset(null);\n setEditing(false);\n }, [inputValue, effectiveMax, effectiveMin]);\n\n const selectPreset = (value: number) => {\n setUserChosenLimit(Math.min(value, effectiveMax));\n setActivePreset(value);\n };\n\n const selectMax = () => {\n setUserChosenLimit(autoLimit);\n setActivePreset('max');\n };\n\n const options = tokenOptions ?? [];\n\n return (\n <ScreenLayout\n footer={\n <>\n <PrimaryButton\n onClick={() => onSetupOneTap(limit)}\n disabled={loading}\n loading={loading}\n >\n Continue\n </PrimaryButton>\n <PoweredByFooter />\n </>\n }\n >\n <ScreenHeader onBack={onBack} onLogout={onLogout} />\n\n <img src={BLINK_LOGO} alt=\"Blink\" width={56} height={56} style={mascotStyle} />\n\n <p style={descriptionStyle(tokens.text)}>\n Set a limit for one-tap deposits. You'll still confirm each one with your passkey.\n </p>\n\n {error && <div style={errorBannerStyle(tokens)}>{error}</div>}\n\n {/* Token selector row + dropdown */}\n <div ref={pickerRef}>\n <button\n type=\"button\"\n onClick={handleTokenRowClick}\n style={tokenRowTriggerStyle(tokens, hasDropdown || !!onAdvanced)}\n aria-expanded={hasDropdown ? tokenDropdownOpen : undefined}\n aria-haspopup={hasDropdown ? 'listbox' : undefined}\n >\n <span style={tokenRowLabelStyle(tokens.text)}>Token for one tap</span>\n <div style={tokenRowRightStyle}>\n <div style={tokenIconWrapStyle}>\n {selectedTokenSymbol && TOKEN_LOGOS[selectedTokenSymbol] ? (\n <img src={TOKEN_LOGOS[selectedTokenSymbol]} alt=\"\" width={36} height={36} style={{ borderRadius: '50%' }} />\n ) : (\n <svg width=\"36\" height=\"36\" viewBox=\"0 0 36 36\" fill=\"none\">\n <circle cx=\"18\" cy=\"18\" r=\"18\" fill=\"#2DB84B\" />\n <text x=\"18\" y=\"23\" textAnchor=\"middle\" fontSize=\"18\" fill=\"#fff\" fontWeight=\"700\">$</text>\n </svg>\n )}\n </div>\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" style={{ opacity: 0.5 }}>\n {tokenDropdownOpen ? (\n <path d=\"M18 15l-6-6-6 6\" stroke={tokens.textMuted} strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n ) : (\n <path d=\"M6 9l6 6 6-6\" stroke={tokens.textMuted} strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n )}\n </svg>\n </div>\n </button>\n\n {tokenDropdownOpen && tokenOptions && tokenOptions.length > 0 && (\n <div style={dropdownOuterStyle(tokens)}>\n <div style={dropdownLabelStyle(tokens.textMuted)}>Choose token</div>\n <div style={dropdownInnerStyle(tokens)}>\n {tokenOptions.map((opt, index) => {\n const selected = matchesSetupTokenSelection(\n opt,\n selectedTokenSymbol,\n selectedChainName,\n options,\n );\n const isLast = index === tokenOptions.length - 1;\n const authorized = !opt.status || opt.status === 'AUTHORIZED';\n return (\n <button\n key={tokenOptionKey(opt)}\n type=\"button\"\n onClick={() => handlePickToken(opt)}\n style={dropdownRowStyle(tokens, selected, isLast)}\n aria-label={\n opt.balance != null\n ? `${opt.symbol} on ${opt.chainName}, $${opt.balance.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })} balance${!authorized ? ', not authorized' : ''}`\n : `${opt.symbol} on ${opt.chainName}${!authorized ? ', not authorized' : ''}`\n }\n >\n <div style={dropdownRowLeftStyle}>\n <div style={dropdownTokenIconStyle(tokens, !!TOKEN_LOGOS[opt.symbol])}>\n {TOKEN_LOGOS[opt.symbol] ? (\n <img src={TOKEN_LOGOS[opt.symbol]} alt={opt.symbol} style={dropdownTokenLogoStyle} />\n ) : (\n <span style={dropdownTokenFallbackStyle(tokens.textMuted)}>$</span>\n )}\n </div>\n <div style={dropdownTokenInfoStyle}>\n <div style={dropdownTokenNameRowStyle}>\n <span style={dropdownTokenSymbolStyle(tokens.text)}>{opt.symbol}</span>\n <span style={dropdownTokenDotStyle(tokens.textMuted)}>·</span>\n <span style={dropdownTokenChainStyle(tokens.textMuted)}>{opt.chainName}</span>\n </div>\n <div style={dropdownTokenBalanceRowStyle}>\n {opt.balance != null && (\n <span style={dropdownTokenBalanceStyle(tokens.textMuted)}>\n ${opt.balance.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}\n </span>\n )}\n {!authorized && (\n <span style={dropdownNotAuthorizedStyle(tokens.textMuted)}>Not authorized</span>\n )}\n </div>\n </div>\n </div>\n {selected ? (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 22 22\" fill=\"none\">\n <circle cx=\"11\" cy=\"11\" r=\"11\" fill={tokens.success} />\n <path d=\"M7 11l3 3 5-5\" stroke=\"#fff\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n ) : (\n <div style={dropdownRadioEmptyStyle(tokens.border)} />\n )}\n </button>\n );\n })}\n </div>\n </div>\n )}\n </div>\n\n {/* Advanced toggle */}\n <button\n type=\"button\"\n onClick={() => setShowAdvanced((v) => !v)}\n style={advancedToggleStyle(tokens.accent)}\n >\n Advanced\n </button>\n\n {showAdvanced && (\n <>\n {/* Amount display */}\n <div style={amountSectionStyle}>\n {editing ? (\n <div style={limitValueStyle(tokens.text)}>\n $<input\n ref={inputRef}\n type=\"text\"\n inputMode=\"decimal\"\n pattern=\"[0-9]*\"\n value={inputValue}\n onChange={(e) => setInputValue(e.target.value)}\n onBlur={commitEdit}\n onKeyDown={(e) => { if (e.key === 'Enter') commitEdit(); }}\n style={limitInputStyle(tokens.text)}\n />\n </div>\n ) : (\n <div\n style={editableLimitStyle(tokens.text)}\n onClick={startEditing}\n >\n ${limit.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" style={{ marginLeft: 8, opacity: 0.45 }}>\n <path d=\"M16.47 3.53a2.74 2.74 0 0 1 3.88 0l.12.12a2.74 2.74 0 0 1 0 3.88L8.84 19.16a2 2 0 0 1-.9.52l-4.56 1.3a.75.75 0 0 1-.93-.93l1.3-4.56a2 2 0 0 1 .52-.9L16.47 3.53Z\" stroke={tokens.textMuted} strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </div>\n )}\n </div>\n\n {/* Preset amount buttons */}\n <div style={presetsRowStyle}>\n {PRESETS.map((value) => (\n <button\n key={value}\n type=\"button\"\n onClick={() => selectPreset(value)}\n style={presetButtonStyle(tokens, activePreset === value)}\n >\n ${value.toLocaleString()}\n </button>\n ))}\n <button\n type=\"button\"\n onClick={selectMax}\n style={presetButtonStyle(tokens, activePreset === 'max')}\n >\n Max\n </button>\n </div>\n </>\n )}\n\n </ScreenLayout>\n );\n}\n\nconst mascotStyle: CSSProperties = {\n display: 'block',\n margin: '0 auto 12px',\n};\n\nconst descriptionStyle = (color: string): CSSProperties => ({\n fontSize: '1.05rem',\n fontWeight: 600,\n lineHeight: 1.45,\n color,\n margin: '0 0 24px',\n textAlign: 'center',\n});\n\nconst tokenRowTriggerStyle = (\n themeTokens: { bgCard: string; border: string },\n clickable: boolean,\n): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n padding: '10px 14px',\n borderRadius: 999,\n background: themeTokens.bgCard,\n border: `1px solid ${themeTokens.border}`,\n cursor: clickable ? 'pointer' : 'default',\n fontFamily: 'inherit',\n marginBottom: 8,\n});\n\nconst tokenRowLabelStyle = (color: string): CSSProperties => ({\n fontSize: '0.95rem',\n fontWeight: 500,\n color,\n});\n\nconst tokenRowRightStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n flexShrink: 0,\n};\n\nconst tokenRowSymbolStyle = (color: string): CSSProperties => ({\n fontSize: '0.84rem',\n fontWeight: 500,\n color,\n});\n\nconst advancedToggleStyle = (accentColor: string): CSSProperties => ({\n display: 'block',\n margin: '4px auto 24px',\n background: 'transparent',\n border: 'none',\n color: accentColor,\n fontSize: '0.92rem',\n fontWeight: 600,\n fontFamily: 'inherit',\n cursor: 'pointer',\n padding: '4px 8px',\n});\n\nconst errorBannerStyle = (tokens: { error: string; errorBg: string }): CSSProperties => ({\n background: tokens.errorBg,\n border: `1px solid ${tokens.error}66`,\n borderRadius: 16,\n padding: '11px 14px',\n color: tokens.error,\n fontSize: '0.84rem',\n marginBottom: 14,\n lineHeight: 1.5,\n});\n\nconst amountSectionStyle: CSSProperties = {\n textAlign: 'center',\n marginBottom: 16,\n};\n\nconst limitValueStyle = (color: string): CSSProperties => ({\n fontSize: '2.8rem',\n fontWeight: 700,\n color,\n letterSpacing: '-0.02em',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n});\n\nconst editableLimitStyle = (color: string): CSSProperties => ({\n ...limitValueStyle(color),\n cursor: 'pointer',\n});\n\nconst limitInputStyle = (color: string): CSSProperties => ({\n fontSize: '2.8rem',\n fontWeight: 700,\n color,\n background: 'transparent',\n border: 'none',\n borderBottom: '2px solid currentColor',\n outline: 'none',\n width: '6ch',\n fontFamily: 'inherit',\n padding: 0,\n letterSpacing: '-0.02em',\n textAlign: 'center',\n});\n\nconst tokenIconWrapStyle: CSSProperties = {\n position: 'relative',\n width: 36,\n height: 36,\n};\n\nconst dropdownOuterStyle = (themeTokens: { bgCard: string; border: string; radiusLg: string; shadowLg: string }): CSSProperties => ({\n marginTop: 4,\n marginBottom: 12,\n background: themeTokens.bgCard,\n border: `1px solid ${themeTokens.border}`,\n borderRadius: themeTokens.radiusLg,\n boxShadow: themeTokens.shadowLg,\n padding: '12px 14px 14px',\n});\n\nconst dropdownLabelStyle = (color: string): CSSProperties => ({\n fontSize: '0.78rem',\n fontWeight: 500,\n color,\n marginBottom: 8,\n});\n\nconst dropdownInnerStyle = (themeTokens: { bgInput: string; border: string; radiusLg: string }): CSSProperties => ({\n background: themeTokens.bgInput,\n border: `1px solid ${themeTokens.border}`,\n borderRadius: themeTokens.radiusLg,\n overflow: 'hidden',\n});\n\nconst dropdownRowStyle = (\n themeTokens: { accent: string; border: string },\n isSelected: boolean,\n isLast: boolean,\n): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n padding: '14px 16px',\n background: isSelected ? `${themeTokens.accent}18` : 'transparent',\n border: 'none',\n borderBottom: isLast ? 'none' : `1px solid ${themeTokens.border}`,\n cursor: 'pointer',\n fontFamily: 'inherit',\n textAlign: 'left' as const,\n outline: 'none',\n});\n\nconst dropdownRowLeftStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n minWidth: 0,\n flex: 1,\n};\n\nconst dropdownTokenIconStyle = (\n themeTokens: { border: string },\n hasLogo: boolean,\n): CSSProperties => ({\n width: 36,\n height: 36,\n borderRadius: '50%',\n border: hasLogo ? 'none' : `1.5px solid ${themeTokens.border}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n overflow: 'hidden',\n});\n\nconst dropdownTokenLogoStyle: CSSProperties = {\n width: 36,\n height: 36,\n borderRadius: '50%',\n objectFit: 'cover',\n};\n\nconst dropdownTokenFallbackStyle = (color: string): CSSProperties => ({\n fontSize: '1rem',\n fontWeight: 700,\n color,\n});\n\nconst dropdownTokenInfoStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n minWidth: 0,\n};\n\nconst dropdownTokenNameRowStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 4,\n};\n\nconst dropdownTokenSymbolStyle = (color: string): CSSProperties => ({\n fontSize: '0.92rem',\n fontWeight: 600,\n color,\n});\n\nconst dropdownTokenDotStyle = (color: string): CSSProperties => ({\n fontSize: '0.8rem',\n color,\n});\n\nconst dropdownTokenChainStyle = (color: string): CSSProperties => ({\n fontSize: '0.84rem',\n fontWeight: 400,\n color,\n});\n\nconst dropdownTokenBalanceRowStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n};\n\nconst dropdownTokenBalanceStyle = (color: string): CSSProperties => ({\n fontSize: '0.78rem',\n color,\n});\n\nconst dropdownNotAuthorizedStyle = (color: string): CSSProperties => ({\n fontSize: '0.7rem',\n fontWeight: 500,\n color,\n});\n\nconst dropdownRadioEmptyStyle = (borderColor: string): CSSProperties => ({\n width: 22,\n height: 22,\n borderRadius: '50%',\n border: `2px solid ${borderColor}`,\n flexShrink: 0,\n});\n\nconst presetsRowStyle: CSSProperties = {\n display: 'flex',\n justifyContent: 'center',\n gap: 10,\n marginBottom: 24,\n};\n\nconst presetButtonStyle = (\n tokens: { accent: string; border: string; text: string; accentText: string },\n active: boolean,\n): CSSProperties => ({\n flex: 1,\n padding: '10px 0',\n borderRadius: 999,\n fontSize: '0.88rem',\n fontWeight: 600,\n fontFamily: 'inherit',\n cursor: 'pointer',\n transition: 'background 0.15s ease, border-color 0.15s ease',\n ...(active\n ? {\n background: `${tokens.accent}30`,\n border: `1.5px solid ${tokens.accent}`,\n color: tokens.text,\n }\n : {\n background: 'transparent',\n border: `1.5px solid ${tokens.border}`,\n color: tokens.text,\n }),\n});\n","import type { CSSProperties } from 'react';\nimport { useBlinkConfig } from '../../context';\nimport { BLINK_LOGO } from '../../assets/logos';\nimport { ScreenLayout, ScreenHeader, PoweredByFooter, StepList } from '../ui';\nimport type { StepItem } from '../ui';\nimport { Spinner } from '../Spinner';\n\ninterface SetupStatusScreenProps {\n /** Whether setup has completed */\n complete: boolean;\n /** The approved One-Tap limit */\n limit: number;\n /** Number of tokens approved */\n tokensApproved: number;\n /** Merchant name for the \"Return to ...\" button */\n merchantName?: string;\n /** Called when user taps the primary action on the complete screen */\n onContinue: () => void;\n onLogout: () => void;\n error: string | null;\n}\n\nexport function SetupStatusScreen({\n complete,\n onContinue,\n onLogout,\n error,\n}: SetupStatusScreenProps) {\n const { tokens } = useBlinkConfig();\n\n if (complete) {\n return (\n <ScreenLayout footer={<PoweredByFooter />}>\n <ScreenHeader onBack={onContinue} />\n <div style={contentStyle}>\n <img src={BLINK_LOGO} alt=\"Blink\" style={mascotStyle} />\n <h2 style={headingStyle(tokens.text)}>Done!</h2>\n <p style={subtitleStyle(tokens.textSecondary)}>\n Return to the app to try one-tap deposits.\n </p>\n </div>\n </ScreenLayout>\n );\n }\n\n const steps: StepItem[] = [\n { label: 'Setting up Wallet', status: 'active' },\n { label: 'Done', status: 'pending' },\n ];\n\n return (\n <ScreenLayout>\n <ScreenHeader onLogout={onLogout} />\n <div style={contentStyle}>\n <Spinner size={48} />\n <h2 style={headingStyle(tokens.text)}>Setting up One-Tap...</h2>\n\n {error && <div style={errorBannerStyle(tokens)}>{error}</div>}\n\n <div style={stepsWrapStyle}>\n <StepList steps={steps} />\n </div>\n\n <p style={waitHintStyle(tokens.textMuted)}>Usually takes a few seconds</p>\n </div>\n </ScreenLayout>\n );\n}\n\nconst contentStyle: CSSProperties = {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n textAlign: 'center',\n padding: '0 24px 32px',\n};\n\nconst mascotStyle: CSSProperties = {\n width: 56,\n height: 56,\n};\n\nconst headingStyle = (color: string): CSSProperties => ({\n fontSize: '1.45rem',\n fontWeight: 700,\n letterSpacing: '-0.02em',\n color,\n margin: '20px 0 8px',\n});\n\nconst subtitleStyle = (color: string): CSSProperties => ({\n fontSize: '0.9rem',\n color,\n margin: '0 0 28px',\n lineHeight: 1.5,\n maxWidth: 260,\n});\n\nconst errorBannerStyle = (tokens: { error: string; errorBg: string }): CSSProperties => ({\n background: tokens.errorBg,\n border: `1px solid ${tokens.error}66`,\n borderRadius: 16,\n padding: '11px 14px',\n color: tokens.error,\n fontSize: '0.84rem',\n marginBottom: 14,\n lineHeight: 1.5,\n width: '100%',\n textAlign: 'left',\n});\n\nconst stepsWrapStyle: CSSProperties = {\n width: '100%',\n maxWidth: 280,\n textAlign: 'left',\n marginBottom: 16,\n};\n\nconst waitHintStyle = (color: string): CSSProperties => ({\n fontSize: '0.82rem',\n color,\n margin: 0,\n});\n","import type { PreciseMoney } from './types';\n\n/** True when the decimal string parses to a finite number <= 0. */\nexport function isPreciseMoneyNonPositive(fee: PreciseMoney): boolean {\n const raw = fee.value.trim();\n if (!/^-?\\d+(\\.\\d*)?$/.test(raw)) return false;\n const n = Number(raw);\n return Number.isFinite(n) && n <= 0;\n}\n\n/** Wording when the quoted fee rounds to zero or is non-positive. */\nexport function formatNonPositiveFeeDisplay(fee: PreciseMoney): string {\n return '< $0.01';\n}\n\n/** Display PreciseMoney without floating-point conversion of the decimal string. */\nexport function formatPreciseMoneyForDisplay(fee: PreciseMoney): string {\n const raw = fee.value.trim();\n if (fee.currency === 'USD') {\n if (!/^\\d+(\\.\\d*)?$/.test(raw)) {\n return `$${raw}`;\n }\n const [whole, frac = ''] = raw.split('.');\n const dec = `${frac}00`.slice(0, 2);\n const intFmt = whole.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n return `$${intFmt}.${dec}`;\n }\n return `${raw} ${fee.currency}`;\n}\n","import { useState, useEffect, useRef, useCallback, type CSSProperties } from 'react';\nimport type { Account, PreciseMoney } from '../../types';\nimport type { SetupTokenOption } from './SetupScreen';\nimport { useBlinkConfig } from '../../context';\nimport { KNOWN_LOGOS, TOKEN_LOGOS } from '../../assets/logos';\nimport {\n getPreferredDepositWallet,\n getWalletAddress,\n hasActiveDepositWallet,\n} from '../../paymentHelpers';\nimport {\n isPreciseMoneyNonPositive,\n formatNonPositiveFeeDisplay,\n formatPreciseMoneyForDisplay,\n} from '../../feeFormat';\nimport {\n ScreenLayout,\n ScreenHeader,\n PoweredByFooter,\n PrimaryButton,\n WarningBanner,\n} from '../ui';\n\n/** USD with grouping and exactly two fraction digits; coerces numeric strings (plain strings ignore Intl fraction options). */\nfunction formatUsdTwoDecimals(value: number): string {\n const n = Number(value);\n return (Number.isFinite(n) ? n : 0).toLocaleString('en-US', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n });\n}\n\ninterface DepositScreenProps {\n merchantName?: string;\n /** Total available balance from source */\n availableBalance: number;\n /** Remaining One-Tap allowance from the API, or null when not configured */\n remainingLimit: number | null;\n /** Number of tokens/chains available */\n tokenCount: number;\n /** Pre-populated amount */\n initialAmount: number;\n /** Pre-transfer fee estimate from POST /v1/transfers/quotes */\n quoteFee?: PreciseMoney | null;\n /** Whether a fee quote is being fetched */\n quoteLoading?: boolean;\n /** User-facing error when the fee quote fails (e.g. amount too low) */\n quoteError?: string | null;\n /** Whether the deposit is currently processing */\n processing?: boolean;\n error: string | null;\n onDeposit: (amount: number) => void;\n onSwitchWallet: () => void;\n onBack: () => void;\n onLogout: () => void;\n /** Called when the user taps \"Increase Limit\" to re-authorize via wallet deeplink */\n onIncreaseLimit?: () => void;\n /** Whether a limit-increase flow is currently in progress */\n increasingLimit?: boolean;\n /** All user accounts for the source dropdown */\n accounts?: Account[];\n /** Currently selected account ID */\n selectedAccountId?: string | null;\n /** Called when an active account is selected from the dropdown */\n onSelectAccount?: (accountId: string) => void;\n /** Called when an inactive account is clicked (to authorize it) */\n onAuthorizeAccount?: (accountId: string) => void;\n /** Called when \"+ Add Provider\" is clicked in the dropdown */\n onAddProvider?: () => void;\n /** Fallback: navigate to the full-page token picker when no inline options. */\n onSelectToken?: () => void;\n /** Available tokens for the inline dropdown. When provided, the token badge opens a dropdown instead of navigating. */\n tokenOptions?: SetupTokenOption[];\n /** Called when the user picks a token from the inline dropdown. */\n onPickToken?: (symbol: string, chainName: string, walletId?: string) => void;\n /** Label for the selected chain/token, e.g. \"USDC on Base\" */\n selectedSourceLabel?: string;\n /** Token symbol for the selected source, e.g. \"USDC\" or \"USDT\" */\n selectedTokenSymbol?: string;\n /** Chain name for the selected source, used to disambiguate same-symbol tokens on different chains. */\n selectedChainName?: string;\n /**\n * Minimum USD amount required for One-Tap on this screen. When the host sets\n * `depositAmount`, this should match it; otherwise the default floor ($0.25)\n * applies (see StepRenderer).\n */\n minDepositFloor: number;\n}\n\nexport function DepositScreen({\n merchantName,\n availableBalance,\n remainingLimit,\n tokenCount,\n initialAmount,\n minDepositFloor,\n quoteFee,\n quoteLoading,\n quoteError,\n processing,\n error,\n onDeposit,\n onSwitchWallet,\n onBack,\n onLogout,\n onIncreaseLimit,\n increasingLimit,\n accounts,\n selectedAccountId,\n onSelectAccount,\n onAuthorizeAccount,\n onAddProvider,\n onSelectToken,\n tokenOptions,\n onPickToken,\n selectedSourceLabel,\n selectedTokenSymbol,\n selectedChainName,\n}: DepositScreenProps) {\n const { tokens } = useBlinkConfig();\n const amount = initialAmount;\n const [accountPickerOpen, setAccountPickerOpen] = useState(false);\n const [tokenPickerOpen, setTokenPickerOpen] = useState(false);\n const pickerRef = useRef<HTMLDivElement>(null);\n const tokenPickerRef = useRef<HTMLDivElement>(null);\n\n const hasTokenDropdown = tokenOptions != null && tokenOptions.length > 0 && onPickToken != null;\n\n // Close account dropdown on outside click (document).\n useEffect(() => {\n if (!accountPickerOpen) return;\n const handleClick = (e: MouseEvent) => {\n if (pickerRef.current && !pickerRef.current.contains(e.target as Node)) {\n setAccountPickerOpen(false);\n }\n };\n document.addEventListener('mousedown', handleClick);\n return () => document.removeEventListener('mousedown', handleClick);\n }, [accountPickerOpen]);\n\n // Close token dropdown on outside click (document).\n useEffect(() => {\n if (!tokenPickerOpen) return;\n const handleMouseDown = (e: MouseEvent) => {\n if (tokenPickerRef.current && !tokenPickerRef.current.contains(e.target as Node)) {\n setTokenPickerOpen(false);\n }\n };\n document.addEventListener('mousedown', handleMouseDown);\n return () => document.removeEventListener('mousedown', handleMouseDown);\n }, [tokenPickerOpen]);\n\n const handleTokenBadgeClick = useCallback(() => {\n if (hasTokenDropdown) {\n setTokenPickerOpen((v) => !v);\n setAccountPickerOpen(false);\n } else {\n onSelectToken?.();\n }\n }, [hasTokenDropdown, onSelectToken]);\n\n const handlePickToken = useCallback((opt: SetupTokenOption) => {\n onPickToken?.(opt.symbol, opt.chainName, opt.walletId);\n setTokenPickerOpen(false);\n }, [onPickToken]);\n\n const selectedAccount = accounts?.find((a) => a.id === selectedAccountId);\n const selectedProviderName = selectedAccount?.name ?? 'Wallet';\n const selectedProviderLogo = KNOWN_LOGOS[selectedProviderName.toLowerCase()];\n const totalAccountBalance = selectedAccount\n ? selectedAccount.wallets.reduce((sum, w) => sum + w.balance.available.amount, 0)\n : availableBalance;\n const isLowBalance = availableBalance < minDepositFloor;\n const insufficientFunds = availableBalance < amount;\n const exceedsLimit = remainingLimit != null && amount > remainingLimit && !isLowBalance;\n const canDeposit = amount >= minDepositFloor && !exceedsLimit && !isLowBalance && !insufficientFunds && !processing;\n\n return (\n <ScreenLayout\n footer={\n <>\n {!accountPickerOpen && !tokenPickerOpen && (\n exceedsLimit && onIncreaseLimit ? (\n <PrimaryButton onClick={onIncreaseLimit} loading={increasingLimit}>\n Increase limit\n </PrimaryButton>\n ) : (\n <PrimaryButton onClick={() => onDeposit(amount)} disabled={!canDeposit} loading={processing}>\n {insufficientFunds ? 'Insufficient Funds' : 'Deposit'}\n </PrimaryButton>\n )\n )}\n <PoweredByFooter />\n </>\n }\n >\n <ScreenHeader onBack={onBack} onLogout={onLogout} />\n\n {/* Deposit card with inline balance row + account dropdown */}\n <div ref={pickerRef} style={depositCardWrapStyle}>\n <div style={depositCardStyle(tokens)}>\n <div style={depositLabelStyle(tokens.textMuted)}>Depositing</div>\n\n <div ref={tokenPickerRef}>\n <div style={amountRowStyle}>\n <div style={amountValueStyle(tokens.text)}>\n ${formatUsdTwoDecimals(amount)}\n </div>\n <button\n type=\"button\"\n data-testid=\"deposit-token-badge\"\n onClick={handleTokenBadgeClick}\n style={tokenIconButtonStyle(hasTokenDropdown || !!onSelectToken)}\n aria-expanded={hasTokenDropdown ? tokenPickerOpen : undefined}\n aria-haspopup={hasTokenDropdown ? 'listbox' : undefined}\n >\n <div style={tokenIconWrapStyle}>\n {selectedTokenSymbol && TOKEN_LOGOS[selectedTokenSymbol] ? (\n <img src={TOKEN_LOGOS[selectedTokenSymbol]} alt={selectedTokenSymbol} width={36} height={36} style={{ borderRadius: '50%' }} />\n ) : (\n <svg width=\"36\" height=\"36\" viewBox=\"0 0 36 36\" fill=\"none\">\n <circle cx=\"18\" cy=\"18\" r=\"18\" fill=\"#2DB84B\" />\n <text x=\"18\" y=\"23\" textAnchor=\"middle\" fontSize=\"18\" fill=\"#fff\" fontWeight=\"700\">$</text>\n </svg>\n )}\n </div>\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" style={{ opacity: 0.5 }}>\n {tokenPickerOpen ? (\n <path d=\"M18 15l-6-6-6 6\" stroke={tokens.textMuted} strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n ) : (\n <path d=\"M6 9l6 6 6-6\" stroke={tokens.textMuted} strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n )}\n </svg>\n </button>\n </div>\n\n {tokenPickerOpen && tokenOptions && tokenOptions.length > 0 && (\n <div style={tokenDropdownStyle(tokens)}>\n <div style={tokenDropdownLabelStyle(tokens.textMuted)}>Choose token</div>\n <div style={tokenDropdownInnerStyle(tokens)}>\n {tokenOptions.map((opt, index) => {\n const selected = opt.symbol === selectedTokenSymbol\n && (!selectedChainName || opt.chainName === selectedChainName);\n const isLast = index === tokenOptions.length - 1;\n const authorized = !opt.status || opt.status === 'AUTHORIZED';\n return (\n <button\n key={`${opt.chainName}-${opt.symbol}`}\n type=\"button\"\n onClick={() => handlePickToken(opt)}\n style={tokenDropdownRowStyle(tokens, selected, isLast)}\n aria-label={\n opt.balance != null\n ? `${opt.symbol} on ${opt.chainName}, $${formatUsdTwoDecimals(opt.balance)} balance${!authorized ? ', not authorized' : ''}`\n : `${opt.symbol} on ${opt.chainName}${!authorized ? ', not authorized' : ''}`\n }\n >\n <div style={tokenDropdownRowLeftStyle}>\n <div style={tokenDropdownIconStyle(tokens, !!TOKEN_LOGOS[opt.symbol])}>\n {TOKEN_LOGOS[opt.symbol] ? (\n <img src={TOKEN_LOGOS[opt.symbol]} alt={opt.symbol} style={tokenDropdownLogoStyle} />\n ) : (\n <span style={tokenDropdownFallbackStyle(tokens.textMuted)}>$</span>\n )}\n </div>\n <div style={tokenDropdownInfoStyle}>\n <div style={tokenDropdownNameRowStyle}>\n <span style={tokenDropdownSymbolStyle(tokens.text)}>{opt.symbol}</span>\n <span style={tokenDropdownDotStyle(tokens.textMuted)}>·</span>\n <span style={tokenDropdownChainStyle(tokens.textMuted)}>{opt.chainName}</span>\n </div>\n <div style={tokenDropdownBalanceRowStyle}>\n {opt.balance != null && (\n <span style={tokenDropdownBalanceStyle(tokens.textMuted)}>\n ${formatUsdTwoDecimals(opt.balance)}\n </span>\n )}\n {!authorized && (\n <span style={tokenDropdownNotAuthStyle(tokens.textMuted)}>Not authorized</span>\n )}\n </div>\n </div>\n </div>\n {selected ? (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 22 22\" fill=\"none\">\n <circle cx=\"11\" cy=\"11\" r=\"11\" fill={tokens.success} />\n <path d=\"M7 11l3 3 5-5\" stroke=\"#fff\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n ) : (\n <div style={tokenDropdownRadioStyle(tokens.border)} />\n )}\n </button>\n );\n })}\n </div>\n </div>\n )}\n </div>\n\n {!accountPickerOpen && !tokenPickerOpen && (() => {\n if (quoteLoading) {\n return (\n <div style={feeRowContainerStyle} aria-live=\"polite\">\n <span style={feeRowLabelStyle(tokens.textMuted)}>Getting fee estimate…</span>\n </div>\n );\n }\n if (quoteError) {\n return (\n <WarningBanner title=\"Fee estimate unavailable\">\n {quoteError}\n </WarningBanner>\n );\n }\n if (quoteFee) {\n const feeText = isPreciseMoneyNonPositive(quoteFee)\n ? formatNonPositiveFeeDisplay(quoteFee)\n : formatPreciseMoneyForDisplay(quoteFee);\n return (\n <div style={feeRowContainerStyle} aria-live=\"polite\">\n <span style={feeRowLabelStyle(tokens.textMuted)}>Fee estimate: </span>\n <span style={feeRowAmountStyle(tokens.textSecondary)}>{feeText}</span>\n </div>\n );\n }\n return null;\n })()}\n\n {!accountPickerOpen && !tokenPickerOpen && (\n <button\n type=\"button\"\n onClick={() => setAccountPickerOpen(!accountPickerOpen)}\n style={walletBalanceRowStyle}\n >\n {selectedProviderLogo ? (\n <img src={selectedProviderLogo} alt={selectedProviderName} style={providerLogoStyle} />\n ) : (\n <div style={providerFallbackStyle(tokens.textMuted)}>\n {selectedProviderName.charAt(0)}\n </div>\n )}\n <span style={walletBalanceStyle(tokens.text)}>\n ${formatUsdTwoDecimals(totalAccountBalance)}\n </span>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" style={{ opacity: 0.4 }}>\n <path d=\"M7 10l5-5 5 5M7 14l5 5 5-5\" stroke={tokens.textMuted} strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n )}\n </div>\n\n {accountPickerOpen && accounts && accounts.length > 0 && (\n <div style={accountDropdownOuterStyle(tokens)}>\n <div style={accountDropdownLabelStyle(tokens.textMuted)}>Choose account</div>\n <div style={accountDropdownInnerStyle(tokens)}>\n {accounts.map((account) => {\n const preferredWallet = getPreferredDepositWallet(account, amount);\n const active = hasActiveDepositWallet(account);\n const isSelected = account.id === selectedAccountId;\n const walletAddress = preferredWallet\n ? getWalletAddress(preferredWallet)\n : null;\n const truncatedAddress = walletAddress\n ? `${walletAddress.slice(0, 6)}...${walletAddress.slice(-4)}`\n : null;\n const accountBalance = account.wallets.reduce(\n (sum, w) => sum + w.balance.available.amount,\n 0,\n );\n const providerLogo = KNOWN_LOGOS[account.name.toLowerCase()];\n\n return (\n <button\n key={account.id}\n type=\"button\"\n onClick={() => {\n if (active) {\n onSelectAccount?.(account.id);\n } else {\n onAuthorizeAccount?.(account.id);\n }\n setAccountPickerOpen(false);\n }}\n style={accountRowStyle(tokens, isSelected)}\n >\n <div style={accountRowLeftStyle}>\n {providerLogo ? (\n <img src={providerLogo} alt={account.name} style={accountLogoStyle} />\n ) : (\n <div style={accountFallbackIconStyle(tokens.textMuted)}>\n {account.name.charAt(0)}\n </div>\n )}\n <div style={accountInfoStyle}>\n <span style={accountAddressStyle(tokens.text)}>\n {truncatedAddress ?? account.nickname ?? account.name}\n </span>\n <span style={accountBalanceTextStyle(tokens.textMuted)}>\n ${formatUsdTwoDecimals(accountBalance)}\n </span>\n </div>\n </div>\n {isSelected ? (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 22 22\" fill=\"none\">\n <circle cx=\"11\" cy=\"11\" r=\"11\" fill={tokens.success} />\n <path d=\"M7 11l3 3 5-5\" stroke=\"#fff\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n ) : (\n <div style={radioEmptyStyle(tokens.border)} />\n )}\n </button>\n );\n })}\n\n {onAddProvider && (\n <button\n type=\"button\"\n onClick={() => {\n onAddProvider();\n setAccountPickerOpen(false);\n }}\n style={addAccountBtnStyle(tokens)}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M12 5v14M5 12h14\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" />\n </svg>\n Add Account\n </button>\n )}\n </div>\n </div>\n )}\n </div>\n\n {!accountPickerOpen && remainingLimit != null && (\n <div style={spendingLimitStyle(tokens.textMuted)}>\n Spending Limit{' '}\n <strong style={{ color: tokens.text }}>\n ${formatUsdTwoDecimals(remainingLimit)}\n </strong>\n {exceedsLimit && (\n <p style={limitExceededHintStyle(tokens.warning)}>\n Your deposit of ${formatUsdTwoDecimals(amount)} exceeds your One-Tap limit of ${remainingLimit != null ? formatUsdTwoDecimals(remainingLimit) : '0.00'}.\n Increase your limit to continue.\n </p>\n )}\n </div>\n )}\n\n {!accountPickerOpen && isLowBalance && (\n <WarningBanner title=\"Not enough funds\">\n Your wallet balance is ${formatUsdTwoDecimals(availableBalance)} — you need at least\n ${formatUsdTwoDecimals(minDepositFloor)} to deposit via One-Tap.\n </WarningBanner>\n )}\n\n {error && <div style={errorBannerStyle(tokens)}>{error}</div>}\n </ScreenLayout>\n );\n}\n\n/* ── Styles ──────────────────────────────────────────────────────── */\n\nconst depositCardWrapStyle: CSSProperties = {\n position: 'relative',\n marginBottom: 20,\n};\n\nconst depositCardStyle = (tokens: {border: string; radiusLg: string }): CSSProperties => ({\n border: `1px solid ${tokens.border}`,\n borderRadius: tokens.radiusLg,\n padding: '16px 20px',\n});\n\nconst depositLabelStyle = (color: string): CSSProperties => ({\n fontSize: '0.75rem',\n fontWeight: 500,\n color,\n marginBottom: 4,\n});\n\nconst amountRowStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: 12,\n};\n\nconst amountValueStyle = (color: string): CSSProperties => ({\n fontSize: '2.4rem',\n fontWeight: 700,\n letterSpacing: '-0.02em',\n color,\n});\n\nconst tokenIconButtonStyle = (clickable: boolean): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n gap: 4,\n background: 'transparent',\n border: 'none',\n cursor: clickable ? 'pointer' : 'default',\n padding: 0,\n flexShrink: 0,\n});\n\nconst tokenIconWrapStyle: CSSProperties = {\n position: 'relative',\n width: 36,\n height: 36,\n};\n\nconst checkBadgeStyle: CSSProperties = {\n position: 'absolute',\n bottom: -1,\n right: -3,\n};\n\n/* ── Token dropdown styles ───────────────────────────────────────── */\n\nconst tokenDropdownStyle = (t: { bgCard: string; border: string; radiusLg: string; shadowLg: string }): CSSProperties => ({\n marginTop: 4,\n marginBottom: 12,\n background: t.bgCard,\n border: `1px solid ${t.border}`,\n borderRadius: t.radiusLg,\n boxShadow: t.shadowLg,\n padding: '12px 14px 14px',\n});\n\nconst tokenDropdownLabelStyle = (color: string): CSSProperties => ({\n fontSize: '0.78rem',\n fontWeight: 500,\n color,\n marginBottom: 8,\n});\n\nconst tokenDropdownInnerStyle = (t: { bgInput: string; border: string; radiusLg: string }): CSSProperties => ({\n background: t.bgInput,\n border: `1px solid ${t.border}`,\n borderRadius: t.radiusLg,\n overflow: 'hidden',\n});\n\nconst tokenDropdownRowStyle = (\n t: { accent: string; border: string },\n isSelected: boolean,\n isLast: boolean,\n): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n padding: '14px 16px',\n background: isSelected ? `${t.accent}18` : 'transparent',\n border: 'none',\n borderBottom: isLast ? 'none' : `1px solid ${t.border}`,\n cursor: 'pointer',\n fontFamily: 'inherit',\n textAlign: 'left' as const,\n outline: 'none',\n});\n\nconst tokenDropdownRowLeftStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n minWidth: 0,\n flex: 1,\n};\n\nconst tokenDropdownIconStyle = (\n t: { border: string },\n hasLogo: boolean,\n): CSSProperties => ({\n width: 36,\n height: 36,\n borderRadius: '50%',\n border: hasLogo ? 'none' : `1.5px solid ${t.border}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n overflow: 'hidden',\n});\n\nconst tokenDropdownLogoStyle: CSSProperties = {\n width: 36,\n height: 36,\n borderRadius: '50%',\n objectFit: 'cover',\n};\n\nconst tokenDropdownFallbackStyle = (color: string): CSSProperties => ({\n fontSize: '1rem',\n fontWeight: 700,\n color,\n});\n\nconst tokenDropdownInfoStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n minWidth: 0,\n};\n\nconst tokenDropdownNameRowStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 4,\n};\n\nconst tokenDropdownSymbolStyle = (color: string): CSSProperties => ({\n fontSize: '0.92rem',\n fontWeight: 600,\n color,\n});\n\nconst tokenDropdownDotStyle = (color: string): CSSProperties => ({\n fontSize: '0.8rem',\n color,\n});\n\nconst tokenDropdownChainStyle = (color: string): CSSProperties => ({\n fontSize: '0.84rem',\n fontWeight: 400,\n color,\n});\n\nconst tokenDropdownBalanceRowStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n};\n\nconst tokenDropdownBalanceStyle = (color: string): CSSProperties => ({\n fontSize: '0.78rem',\n color,\n});\n\nconst tokenDropdownNotAuthStyle = (color: string): CSSProperties => ({\n fontSize: '0.7rem',\n fontWeight: 500,\n color,\n});\n\nconst tokenDropdownRadioStyle = (borderColor: string): CSSProperties => ({\n width: 22,\n height: 22,\n borderRadius: '50%',\n border: `2px solid ${borderColor}`,\n flexShrink: 0,\n});\n\n/* ── Wallet balance row ──────────────────────────────────────────── */\n\nconst walletBalanceRowStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 8,\n background: 'transparent',\n border: 'none',\n padding: 0,\n width: '100%',\n cursor: 'pointer',\n fontFamily: 'inherit',\n outline: 'none',\n};\n\nconst providerLogoStyle: CSSProperties = {\n width: 18,\n height: 18,\n borderRadius: '50%',\n objectFit: 'contain',\n};\n\nconst providerFallbackStyle = (color: string): CSSProperties => ({\n width: 18,\n height: 18,\n borderRadius: '50%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '0.65rem',\n fontWeight: 700,\n color,\n flexShrink: 0,\n});\n\nconst walletBalanceStyle = (color: string): CSSProperties => ({\n fontSize: '0.9rem',\n fontWeight: 600,\n color,\n});\n\n/* ── Account dropdown styles ─────────────────────────────────────── */\n\nconst accountDropdownOuterStyle = (tokens: { bgCard: string; shadowLg: string; radiusLg: string; border: string }): CSSProperties => ({\n marginTop: 4,\n background: tokens.bgCard,\n border: `1px solid ${tokens.border}`,\n borderRadius: tokens.radiusLg,\n boxShadow: tokens.shadowLg,\n padding: '12px 14px 14px',\n});\n\nconst accountDropdownLabelStyle = (color: string): CSSProperties => ({\n fontSize: '0.78rem',\n fontWeight: 500,\n color,\n marginBottom: 8,\n});\n\nconst accountDropdownInnerStyle = (tokens: { bgInput: string; border: string; radiusLg: string }): CSSProperties => ({\n background: tokens.bgInput,\n border: `1px solid ${tokens.border}`,\n borderRadius: tokens.radiusLg,\n overflow: 'hidden',\n});\n\nconst accountRowStyle = (\n tokens: { border: string; accent: string },\n isSelected: boolean,\n): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n padding: '14px 16px',\n background: isSelected ? `${tokens.accent}10` : 'transparent',\n border: 'none',\n borderBottom: `1px solid ${tokens.border}`,\n cursor: 'pointer',\n fontFamily: 'inherit',\n textAlign: 'left',\n outline: 'none',\n});\n\nconst accountRowLeftStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n minWidth: 0,\n flex: 1,\n};\n\nconst accountLogoStyle: CSSProperties = {\n width: 28,\n height: 28,\n borderRadius: '50%',\n objectFit: 'contain',\n flexShrink: 0,\n};\n\nconst accountFallbackIconStyle = (color: string): CSSProperties => ({\n width: 28,\n height: 28,\n borderRadius: '50%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '0.75rem',\n fontWeight: 700,\n color,\n flexShrink: 0,\n});\n\nconst accountInfoStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n minWidth: 0,\n};\n\nconst accountAddressStyle = (color: string): CSSProperties => ({\n fontWeight: 600,\n fontSize: '0.88rem',\n color,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n});\n\nconst accountBalanceTextStyle = (color: string): CSSProperties => ({\n fontSize: '0.76rem',\n color,\n fontWeight: 500,\n});\n\nconst radioEmptyStyle = (borderColor: string): CSSProperties => ({\n width: 22,\n height: 22,\n borderRadius: '50%',\n border: `2px solid ${borderColor}`,\n flexShrink: 0,\n});\n\nconst addAccountBtnStyle = (tokens: { textMuted: string }): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n width: '100%',\n padding: '12px 16px',\n background: 'transparent',\n border: 'none',\n color: tokens.textMuted,\n fontWeight: 600,\n fontSize: '0.85rem',\n cursor: 'pointer',\n fontFamily: 'inherit',\n textAlign: 'left',\n outline: 'none',\n});\n\nconst spendingLimitStyle = (color: string): CSSProperties => ({\n textAlign: 'center',\n fontSize: '0.84rem',\n color,\n marginBottom: 8,\n});\n\nconst errorBannerStyle = (tokens: { error: string; errorBg: string }): CSSProperties => ({\n background: tokens.errorBg,\n border: `1px solid ${tokens.error}66`,\n borderRadius: 16,\n padding: '11px 14px',\n color: tokens.error,\n fontSize: '0.84rem',\n marginTop: 8,\n lineHeight: 1.5,\n});\n\nconst limitExceededHintStyle = (color: string): CSSProperties => ({\n textAlign: 'center',\n fontSize: '0.78rem',\n color,\n margin: '12px 0 2px',\n lineHeight: 1.5,\n});\n\n/* ── Fee estimate row ────────────────────────────────────────────── */\n\nconst feeRowContainerStyle: CSSProperties = {\n fontSize: '0.84rem',\n fontWeight: 500,\n marginTop: 6,\n marginBottom: 4,\n};\n\nconst feeRowLabelStyle = (color: string): CSSProperties => ({ color });\n\nconst feeRowAmountStyle = (color: string): CSSProperties => ({\n color,\n fontVariantNumeric: 'tabular-nums',\n});\n\n","import { type CSSProperties } from 'react';\nimport { useBlinkConfig } from '../../context';\nimport { ScreenLayout, ScreenHeader, PoweredByFooter, PrimaryButton, IconCircle } from '../ui';\n\ninterface SuccessScreenProps {\n amount: number;\n currency: string;\n succeeded: boolean;\n error?: string | null;\n merchantName?: string;\n sourceName?: string;\n remainingLimit?: number | null;\n onDone?: () => void;\n onLogout?: () => void;\n onIncreaseLimits?: () => void;\n onManageAccount?: () => void;\n}\n\nexport function SuccessScreen({\n amount,\n currency: _currency,\n succeeded,\n error,\n merchantName,\n sourceName,\n remainingLimit,\n onDone,\n onLogout,\n onIncreaseLimits,\n onManageAccount,\n}: SuccessScreenProps) {\n const { tokens } = useBlinkConfig();\n\n return (\n <ScreenLayout\n footer={\n <>\n {onDone ? (\n <PrimaryButton onClick={onDone}>\n {succeeded ? 'Done' : 'Try again'}\n </PrimaryButton>\n ) : null}\n {onManageAccount && (\n <button type=\"button\" onClick={onManageAccount} style={manageStyle(tokens.textMuted)}>\n Manage Blink account →\n </button>\n )}\n <PoweredByFooter />\n </>\n }\n >\n <ScreenHeader onLogout={onLogout} />\n\n <div style={screenContentStyle}>\n {succeeded ? (\n <div style={contentStyleCompact}>\n <h2 style={headingStyle(tokens.text)}>\n ${amount.toFixed(2)} deposited\n </h2>\n {merchantName && (\n <p style={subtitleStyle(tokens.textSecondary)}>to {merchantName}</p>\n )}\n </div>\n ) : (\n <>\n <IconCircle variant=\"error\" size={64}>\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\" fill={tokens.error} />\n </svg>\n </IconCircle>\n\n <h2 style={failureHeadingStyle(tokens.text)}>\n Transfer failed\n </h2>\n {error && (\n <p style={failureSubtitleStyle(tokens.error)}>{error}</p>\n )}\n </>\n )}\n\n <div style={summaryCardStyle(tokens)}>\n {sourceName && (\n <div style={summaryRowStyle}>\n <span style={summaryLabelStyle(tokens.textMuted)}>From</span>\n <span style={summaryValueStyle(tokens.text)}>{sourceName}</span>\n </div>\n )}\n {succeeded && (\n <div style={summaryRowStyle}>\n <span style={summaryLabelStyle(tokens.textMuted)}>Time</span>\n <span style={summaryValueStyle(tokens.text)}>just now</span>\n </div>\n )}\n {succeeded && remainingLimit != null && (\n <div style={summaryRowStyle}>\n <span style={summaryLabelStyle(tokens.textMuted)}>Remaining limit</span>\n <span style={{ ...summaryValueStyle(tokens.text), color: tokens.accent }}>\n ${remainingLimit.toFixed(2)}\n </span>\n </div>\n )}\n </div>\n\n {succeeded && onIncreaseLimits && (\n <div style={upsellCardStyle(tokens)}>\n <div style={upsellHeaderStyle}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" style={{ marginRight: 6 }}>\n <path d=\"M7 14l5-5 5 5\" stroke={tokens.accent} strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n <strong>Want higher limits?</strong>\n </div>\n <p style={upsellBodyStyle(tokens.textSecondary)}>\n Increase your One-Tap limit to deposit more without re-approving.\n </p>\n <button type=\"button\" onClick={onIncreaseLimits} style={upsellLinkStyle(tokens.accent)}>\n Increase One-Tap limit\n </button>\n </div>\n )}\n </div>\n </ScreenLayout>\n );\n}\n\n/** Outer column for hero + summary; top padding matches auth-app `contentStyleCompact`. */\nconst screenContentStyle: CSSProperties = {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n paddingTop: 16,\n};\n\n/** Mirrors auth-app `contentStyle` + `contentStyleCompact` (centered column; top offset is on `screenContentStyle`). */\nconst contentStyleCompact: CSSProperties = {\n textAlign: 'center',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n width: '100%',\n};\n\n/** Matches auth-app `headingStyle` for deposit complete. */\nconst headingStyle = (color: string): CSSProperties => ({\n fontSize: '1.45rem',\n fontWeight: 700,\n letterSpacing: '-0.02em',\n color,\n margin: '20px 0 8px',\n});\n\n/** Matches auth-app `subtitleStyle`. */\nconst subtitleStyle = (color: string): CSSProperties => ({\n fontSize: '0.9rem',\n color,\n margin: '0 0 28px',\n lineHeight: 1.5,\n maxWidth: 280,\n});\n\nconst failureHeadingStyle = (color: string): CSSProperties => ({\n fontSize: '1.5rem',\n fontWeight: 700,\n letterSpacing: '-0.02em',\n color,\n margin: '20px 0 4px',\n});\n\nconst failureSubtitleStyle = (color: string): CSSProperties => ({\n fontSize: '0.9rem',\n color,\n margin: '0 0 20px',\n});\n\nconst summaryCardStyle = (tokens: { bgInput: string; border: string }): CSSProperties => ({\n width: '100%',\n padding: '14px 16px',\n background: tokens.bgInput,\n border: `1px solid ${tokens.border}`,\n borderRadius: 20,\n marginBottom: 16,\n});\n\nconst summaryRowStyle: CSSProperties = {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: '6px 0',\n};\n\nconst summaryLabelStyle = (color: string): CSSProperties => ({\n fontSize: '0.84rem',\n color,\n});\n\nconst summaryValueStyle = (color: string): CSSProperties => ({\n fontSize: '0.88rem',\n fontWeight: 600,\n color,\n});\n\nconst upsellCardStyle = (tokens: { bgInput: string; border: string }): CSSProperties => ({\n width: '100%',\n padding: '16px',\n background: tokens.bgInput,\n border: `1px solid ${tokens.border}`,\n borderRadius: 20,\n marginBottom: 16,\n});\n\nconst upsellHeaderStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n fontSize: '0.88rem',\n marginBottom: 4,\n};\n\nconst upsellBodyStyle = (color: string): CSSProperties => ({\n fontSize: '0.8rem',\n color,\n margin: '4px 0 10px',\n lineHeight: 1.5,\n});\n\nconst upsellLinkStyle = (color: string): CSSProperties => ({\n background: 'transparent',\n border: 'none',\n color,\n fontWeight: 600,\n fontSize: '0.84rem',\n cursor: 'pointer',\n fontFamily: 'inherit',\n padding: 0,\n});\n\nconst manageStyle = (color: string): CSSProperties => ({\n background: 'transparent',\n border: 'none',\n color,\n cursor: 'pointer',\n fontFamily: 'inherit',\n fontSize: '0.84rem',\n fontWeight: 500,\n display: 'block',\n width: '100%',\n textAlign: 'center',\n padding: '12px 0 0',\n});\n\n","import type { CSSProperties } from 'react';\nimport { TOKEN_LOGOS } from '../../assets/logos';\nimport { useBlinkConfig } from '../../context';\nimport {\n ScreenLayout,\n ScreenHeader,\n PrimaryButton,\n PoweredByFooter,\n} from '../ui';\n\ninterface ChainChoice {\n chainName: string;\n balance: number;\n tokens: { tokenSymbol: string; balance: number }[];\n}\n\ninterface SelectSourceScreenProps {\n choices: ChainChoice[];\n selectedChainName: string;\n selectedTokenSymbol: string;\n recommended: { chainName: string; tokenSymbol: string } | null;\n onChainChange: (chainName: string) => void;\n onTokenChange: (tokenSymbol: string) => void;\n onConfirm: () => void;\n /** Primary footer button label (default: \"Confirm source\"). */\n confirmLabel?: string;\n onBack?: () => void;\n onLogout: () => void;\n}\n\nexport function SelectSourceScreen({\n choices,\n selectedChainName,\n selectedTokenSymbol,\n recommended,\n onChainChange,\n onTokenChange,\n onConfirm,\n confirmLabel = 'Confirm source',\n onBack,\n onLogout,\n}: SelectSourceScreenProps) {\n const { tokens } = useBlinkConfig();\n\n const selectedChain = choices.find((c) => c.chainName === selectedChainName) ?? choices[0];\n const tokenChoices = selectedChain?.tokens ?? [];\n const canConfirm = !!selectedChainName && !!selectedTokenSymbol;\n\n return (\n <ScreenLayout\n footer={\n <>\n <PrimaryButton onClick={onConfirm} disabled={!canConfirm}>\n {confirmLabel}\n </PrimaryButton>\n <PoweredByFooter />\n </>\n }\n >\n <ScreenHeader\n title=\"Select Source\"\n onBack={onBack}\n onLogout={onLogout}\n />\n\n <p style={subtitleStyle(tokens.textMuted)}>\n Choose which chain and token to pay from.\n </p>\n\n {/* Chain selector */}\n <label style={labelStyle(tokens.textSecondary)}>Chain</label>\n <div style={optionListStyle}>\n {choices.map((chain) => {\n const isSelected = chain.chainName === selectedChainName;\n const isRecommended = chain.chainName === recommended?.chainName;\n return (\n <button\n key={chain.chainName}\n type=\"button\"\n onClick={() => onChainChange(chain.chainName)}\n style={optionButtonStyle(tokens, isSelected)}\n >\n <div style={optionContentStyle}>\n <span style={optionNameStyle(tokens.text)}>\n {chain.chainName}\n {isRecommended && (\n <span style={recommendedBadgeStyle(tokens.textMuted)}> recommended</span>\n )}\n </span>\n <span style={optionBalanceStyle(tokens.textMuted)}>\n ${chain.balance.toFixed(2)}\n </span>\n </div>\n <div style={radioStyle(tokens, isSelected)}>\n {isSelected && <div style={radioDotStyle(tokens.accent)} />}\n </div>\n </button>\n );\n })}\n </div>\n\n {/* Token selector */}\n {tokenChoices.length > 0 && (\n <>\n <label style={labelStyle(tokens.textSecondary)}>Token</label>\n <div style={optionListStyle}>\n {tokenChoices.map((token) => {\n const isSelected = token.tokenSymbol === selectedTokenSymbol;\n const tokenLogo = TOKEN_LOGOS[token.tokenSymbol];\n return (\n <button\n key={token.tokenSymbol}\n type=\"button\"\n onClick={() => onTokenChange(token.tokenSymbol)}\n style={optionButtonStyle(tokens, isSelected)}\n >\n <div style={optionMainStyle}>\n <div style={tokenIconCircleStyle(tokens, !!tokenLogo)}>\n {tokenLogo ? (\n <img src={tokenLogo} alt={token.tokenSymbol} style={tokenLogoImgStyle} />\n ) : (\n <span style={tokenIconTextStyle(tokens.textMuted)}>$</span>\n )}\n </div>\n <div style={optionContentStyle}>\n <span style={optionNameStyle(tokens.text)}>\n {token.tokenSymbol}\n </span>\n <span style={optionBalanceStyle(tokens.textMuted)}>\n ${token.balance.toFixed(2)}\n </span>\n </div>\n </div>\n <div style={radioStyle(tokens, isSelected)}>\n {isSelected && <div style={radioDotStyle(tokens.accent)} />}\n </div>\n </button>\n );\n })}\n </div>\n </>\n )}\n </ScreenLayout>\n );\n}\n\n/* ── Styles ────────────────────────────────────────────────────────── */\n\nconst subtitleStyle = (color: string): CSSProperties => ({\n fontSize: '0.85rem',\n color,\n margin: '0 0 20px',\n lineHeight: 1.5,\n});\n\nconst labelStyle = (color: string): CSSProperties => ({\n display: 'block',\n fontSize: '0.75rem',\n fontWeight: 600,\n color,\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n marginBottom: 8,\n});\n\nconst optionListStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 8,\n marginBottom: 20,\n};\n\nconst optionButtonStyle = (\n tokens: { bgInput: string; border: string; accent: string },\n selected: boolean,\n): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '14px 16px',\n background: tokens.bgInput,\n border: `1.5px solid ${selected ? tokens.accent : tokens.border}`,\n borderRadius: 14,\n cursor: 'pointer',\n fontFamily: 'inherit',\n textAlign: 'left',\n transition: 'border-color 0.15s ease',\n});\n\nconst optionContentStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n};\n\nconst optionMainStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n};\n\nconst optionNameStyle = (color: string): CSSProperties => ({\n fontSize: '0.9rem',\n fontWeight: 600,\n color,\n});\n\nconst recommendedBadgeStyle = (color: string): CSSProperties => ({\n fontSize: '0.7rem',\n fontWeight: 500,\n color,\n marginLeft: 6,\n});\n\nconst optionBalanceStyle = (color: string): CSSProperties => ({\n fontSize: '0.78rem',\n color,\n});\n\nconst tokenIconCircleStyle = (\n tokens: { border: string },\n hasLogo: boolean,\n): CSSProperties => ({\n width: 36,\n height: 36,\n borderRadius: '50%',\n border: hasLogo ? 'none' : `1.5px solid ${tokens.border}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n overflow: 'hidden',\n});\n\nconst tokenLogoImgStyle: CSSProperties = {\n width: 36,\n height: 36,\n borderRadius: '50%',\n objectFit: 'cover',\n};\n\nconst tokenIconTextStyle = (color: string): CSSProperties => ({\n fontSize: '1rem',\n fontWeight: 700,\n color,\n});\n\nconst radioStyle = (\n tokens: { border: string; accent: string },\n selected: boolean,\n): CSSProperties => ({\n width: 20,\n height: 20,\n borderRadius: '50%',\n border: `2px solid ${selected ? tokens.accent : tokens.border}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n});\n\nconst radioDotStyle = (color: string): CSSProperties => ({\n width: 10,\n height: 10,\n borderRadius: '50%',\n background: color,\n});\n","import { useState, type CSSProperties } from 'react';\nimport { useBlinkConfig } from '../../context';\nimport {\n ScreenLayout,\n ScreenHeader,\n PrimaryButton,\n PoweredByFooter,\n} from '../ui';\n\ninterface ChainChoice {\n chainName: string;\n balance: number;\n tokens: { tokenSymbol: string; balance: number }[];\n}\n\ninterface AdvancedSourceScreenProps {\n choices: ChainChoice[];\n selectedChainName: string;\n selectedTokenSymbol: string;\n onSelectSource: (chainName: string, tokenSymbol: string) => void;\n onBack: () => void;\n}\n\nexport function AdvancedSourceScreen({\n choices,\n selectedChainName,\n selectedTokenSymbol,\n onSelectSource,\n onBack,\n}: AdvancedSourceScreenProps) {\n const { tokens } = useBlinkConfig();\n\n const [expandedChain, setExpandedChain] = useState<string | null>(\n selectedChainName || (choices[0]?.chainName ?? null),\n );\n const [localChain, setLocalChain] = useState(selectedChainName);\n const [localToken, setLocalToken] = useState(selectedTokenSymbol);\n\n const canConfirm = !!localChain && !!localToken;\n\n const handleChainToggle = (chainName: string) => {\n setExpandedChain((prev) => (prev === chainName ? null : chainName));\n };\n\n const handleTokenSelect = (chainName: string, tokenSymbol: string) => {\n setLocalChain(chainName);\n setLocalToken(tokenSymbol);\n setExpandedChain(chainName);\n };\n\n return (\n <ScreenLayout\n footer={\n <>\n <PrimaryButton\n onClick={() => onSelectSource(localChain, localToken)}\n disabled={!canConfirm}\n >\n Select Source\n </PrimaryButton>\n <PoweredByFooter />\n </>\n }\n >\n <ScreenHeader\n title=\"Blink Setup\"\n onBack={onBack}\n right={<span style={advancedBadgeStyle(tokens.accent)}>Advanced</span>}\n />\n\n <h2 style={headingStyle(tokens.text)}>Set up One-Tap deposits</h2>\n <p style={subtitleStyle(tokens.textSecondary)}>\n Select a token source for your One-Tap deposits.\n </p>\n\n <label style={labelStyle(tokens.textSecondary)}>Select tokens to approve</label>\n\n <div style={chainListStyle}>\n {choices.map((chain) => {\n const isExpanded = expandedChain === chain.chainName;\n const chainHasSelection = localChain === chain.chainName;\n\n return (\n <div key={chain.chainName} style={chainCardStyle(tokens)}>\n {/* Chain header */}\n <button\n type=\"button\"\n onClick={() => handleChainToggle(chain.chainName)}\n style={chainHeaderStyle(tokens, isExpanded)}\n >\n <div style={chainHeaderLeftStyle}>\n <span style={chainNameStyle(tokens.text)}>\n {chain.chainName}\n </span>\n <span style={chainBalanceStyle(tokens.textMuted)}>\n ${chain.balance.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}\n </span>\n </div>\n <span style={chevronIconStyle(isExpanded, tokens.textMuted)}>\n {isExpanded ? '▾' : '▸'}\n </span>\n </button>\n\n {/* Token rows */}\n {isExpanded && (\n <div style={tokenListStyle}>\n {chain.tokens.map((token) => {\n const isSelected =\n chainHasSelection && localToken === token.tokenSymbol;\n\n return (\n <button\n key={token.tokenSymbol}\n type=\"button\"\n onClick={() => handleTokenSelect(chain.chainName, token.tokenSymbol)}\n style={tokenRowStyle(tokens, isSelected)}\n >\n <div style={tokenInfoStyle}>\n <span style={tokenSymbolStyle(tokens.text)}>\n {token.tokenSymbol}\n </span>\n <span style={tokenBalStyle(tokens.textMuted)}>\n Balance: {token.balance.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })} {token.tokenSymbol}\n </span>\n </div>\n <div style={radioStyle(tokens, isSelected)}>\n {isSelected && <div style={radioDotStyle(tokens.accent)} />}\n </div>\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n })}\n </div>\n </ScreenLayout>\n );\n}\n\n/* ── Styles ────────────────────────────────────────────────────────── */\n\nconst advancedBadgeStyle = (color: string): CSSProperties => ({\n fontSize: '0.72rem',\n fontWeight: 600,\n color,\n border: `1px solid ${color}`,\n borderRadius: 999,\n padding: '3px 10px',\n letterSpacing: '0.02em',\n});\n\nconst headingStyle = (color: string): CSSProperties => ({\n fontSize: '1.3rem',\n fontWeight: 700,\n letterSpacing: '-0.02em',\n color,\n margin: '8px 0 4px',\n});\n\nconst subtitleStyle = (color: string): CSSProperties => ({\n fontSize: '0.86rem',\n color,\n margin: '0 0 20px',\n lineHeight: 1.5,\n});\n\nconst labelStyle = (color: string): CSSProperties => ({\n display: 'block',\n fontSize: '0.75rem',\n fontWeight: 600,\n color,\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n marginBottom: 10,\n});\n\nconst chainListStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 10,\n};\n\nconst chainCardStyle = (tokens: { border: string; bgInput: string }): CSSProperties => ({\n border: `1px solid ${tokens.border}`,\n borderRadius: 14,\n overflow: 'hidden',\n background: tokens.bgInput,\n});\n\nconst chainHeaderStyle = (\n tokens: { bgInput: string },\n _expanded: boolean,\n): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n padding: '14px 16px',\n background: tokens.bgInput,\n border: 'none',\n cursor: 'pointer',\n fontFamily: 'inherit',\n textAlign: 'left',\n});\n\nconst chainHeaderLeftStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n};\n\nconst chainNameStyle = (color: string): CSSProperties => ({\n fontSize: '0.92rem',\n fontWeight: 600,\n color,\n});\n\nconst chainBalanceStyle = (color: string): CSSProperties => ({\n fontSize: '0.76rem',\n color,\n});\n\nconst chevronIconStyle = (_expanded: boolean, color: string): CSSProperties => ({\n fontSize: '0.9rem',\n color,\n transition: 'transform 0.15s ease',\n});\n\nconst tokenListStyle: CSSProperties = {\n padding: '0 12px 12px',\n display: 'flex',\n flexDirection: 'column',\n gap: 6,\n};\n\nconst tokenRowStyle = (\n tokens: { bgCard: string; border: string; accent: string },\n selected: boolean,\n): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '12px 14px',\n background: tokens.bgCard,\n border: `1.5px solid ${selected ? tokens.accent : tokens.border}`,\n borderRadius: 10,\n cursor: 'pointer',\n fontFamily: 'inherit',\n textAlign: 'left',\n transition: 'border-color 0.15s ease',\n});\n\nconst tokenInfoStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n};\n\nconst tokenSymbolStyle = (color: string): CSSProperties => ({\n fontSize: '0.88rem',\n fontWeight: 600,\n color,\n});\n\nconst tokenBalStyle = (color: string): CSSProperties => ({\n fontSize: '0.74rem',\n color,\n});\n\nconst radioStyle = (\n tokens: { border: string; accent: string },\n selected: boolean,\n): CSSProperties => ({\n width: 20,\n height: 20,\n borderRadius: '50%',\n border: `2px solid ${selected ? tokens.accent : tokens.border}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n});\n\nconst radioDotStyle = (color: string): CSSProperties => ({\n width: 10,\n height: 10,\n borderRadius: '50%',\n background: color,\n});\n","import type { CSSProperties } from 'react';\nimport { useBlinkConfig } from '../../context';\nimport { ScreenLayout, ScreenHeader, StepList, PoweredByFooter } from '../ui';\nimport type { StepItem } from '../ui';\nimport { Spinner } from '../Spinner';\n\nexport type TransferPhase = 'creating' | 'verifying' | 'sent';\n\ninterface TransferStatusScreenProps {\n phase: TransferPhase;\n error: string | null;\n onLogout: () => void;\n}\n\nconst STEP_LABELS = ['Creating transfer', 'Verifying', 'Sent'] as const;\n\nconst PHASE_ACTIVE_INDEX: Record<TransferPhase, number> = {\n creating: 0,\n verifying: 1,\n sent: 2,\n};\n\nfunction buildSteps(phase: TransferPhase): StepItem[] {\n const activeIdx = PHASE_ACTIVE_INDEX[phase];\n return STEP_LABELS.map((label, i) => ({\n label,\n status: i < activeIdx ? 'complete' : i === activeIdx ? 'active' : 'pending',\n }));\n}\n\nexport function TransferStatusScreen({\n phase,\n error,\n onLogout,\n}: TransferStatusScreenProps) {\n const { tokens } = useBlinkConfig();\n\n const steps = buildSteps(phase);\n\n return (\n <ScreenLayout footer={<PoweredByFooter />}>\n <ScreenHeader onLogout={onLogout} />\n <div style={contentStyle}>\n <Spinner size={64} />\n <h2 style={headingStyle(tokens.text)}>Depositing your money...</h2>\n\n {error && <div style={errorBannerStyle(tokens)}>{error}</div>}\n\n <div style={stepsWrapStyle}>\n <StepList steps={steps} />\n </div>\n </div>\n </ScreenLayout>\n );\n}\n\nconst contentStyle: CSSProperties = {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n textAlign: 'center',\n padding: '0 24px',\n};\n\nconst headingStyle = (color: string): CSSProperties => ({\n fontSize: '1.45rem',\n fontWeight: 700,\n letterSpacing: '-0.02em',\n color,\n margin: '20px 0 16px',\n});\n\nconst errorBannerStyle = (tokens: { error: string; errorBg: string }): CSSProperties => ({\n background: tokens.errorBg,\n border: `1px solid ${tokens.error}66`,\n borderRadius: 16,\n padding: '11px 14px',\n color: tokens.error,\n fontSize: '0.84rem',\n marginBottom: 14,\n lineHeight: 1.5,\n width: '100%',\n textAlign: 'left',\n});\n\nconst stepsWrapStyle: CSSProperties = {\n width: '100%',\n maxWidth: 280,\n textAlign: 'left',\n marginBottom: 16,\n};\n","import { useCallback, useEffect, useRef, type CSSProperties } from 'react';\nimport { useBlinkConfig } from '../../context';\nimport {\n ScreenLayout,\n ScreenHeader,\n PrimaryButton,\n OutlineButton,\n InfoBanner,\n PoweredByFooter,\n} from '../ui';\nimport { Spinner } from '../Spinner';\nimport { KNOWN_LOGOS } from '../../assets/logos';\nimport { triggerDeeplink, isCustomSchemeUri } from '../../deeplink';\n\ninterface OpenWalletScreenProps {\n walletName: string | null;\n deeplinkUri: string;\n loading: boolean;\n /** When true (mobile), auto-opens deeplinks and shows the \"Open wallet\" button.\n * When false (desktop), shows inline authorization progress instead. */\n useDeeplink?: boolean;\n error?: string | null;\n onRetryStatus?: () => void;\n onBack?: () => void;\n onLogout: () => void;\n}\n\n/**\n * Wallet authorization screen. On mobile, provides a user-tappable button\n * that triggers the deeplink via window.open. On desktop, shows inline\n * authorization progress while wallet extension popups handle the flow.\n */\nexport function OpenWalletScreen({\n walletName,\n deeplinkUri,\n loading,\n useDeeplink = true,\n error,\n onRetryStatus,\n onBack,\n onLogout,\n}: OpenWalletScreenProps) {\n const { tokens } = useBlinkConfig();\n\n const displayName = walletName ?? 'your wallet';\n const logoSrc = walletName ? KNOWN_LOGOS[walletName.toLowerCase()] : undefined;\n const autoOpenedRef = useRef<string | null>(null);\n\n useEffect(() => {\n if (!useDeeplink || loading || !deeplinkUri || autoOpenedRef.current === deeplinkUri) return;\n autoOpenedRef.current = deeplinkUri;\n\n triggerDeeplink(deeplinkUri);\n }, [useDeeplink, loading, deeplinkUri]);\n\n const handleOpen = useCallback(() => {\n if (isCustomSchemeUri(deeplinkUri)) {\n // Custom schemes (e.g. cbwallet://) don't create a new browser tab;\n // the OS intercepts and opens the registered app directly.\n window.open(deeplinkUri, '_blank');\n } else {\n // Universal Links (https://) would create a stale blank tab in Safari\n // if opened via window.open(_blank). Navigate the current page instead;\n // state is already persisted to sessionStorage so the flow survives a\n // page reload when the user returns.\n window.location.href = deeplinkUri;\n }\n }, [deeplinkUri]);\n\n if (!useDeeplink) {\n return (\n <ScreenLayout\n footer={\n <div style={footerContentStyle}>\n {error && (\n <InfoBanner>\n {error}\n </InfoBanner>\n )}\n <PoweredByFooter />\n </div>\n }\n >\n <ScreenHeader onLogout={onLogout} />\n\n <div style={contentStyle}>\n <div style={logoCircleStyle(tokens.bgInput)}>\n {logoSrc ? (\n <img src={logoSrc} alt={displayName} style={logoStyle} />\n ) : (\n <Spinner size={32} />\n )}\n </div>\n\n <h2 style={headingStyle(tokens.text)}>\n Setting up {displayName}...\n </h2>\n <p style={subtitleStyle(tokens.textSecondary)}>\n Approve the connection in your wallet extension.\n </p>\n\n <div style={waitingBadgeStyle(tokens)}>\n <Spinner size={14} />\n <span>Waiting for authorization...</span>\n </div>\n\n <p style={waitHintStyle(tokens.textMuted)}>Usually takes a few seconds</p>\n </div>\n </ScreenLayout>\n );\n }\n\n return (\n <ScreenLayout\n footer={\n <div style={footerContentStyle}>\n {error && (\n <InfoBanner>\n {error}\n </InfoBanner>\n )}\n {!loading && (\n <PrimaryButton onClick={handleOpen}>\n Open {displayName}\n </PrimaryButton>\n )}\n {error && onRetryStatus && (\n <OutlineButton onClick={onRetryStatus}>\n Retry status check\n </OutlineButton>\n )}\n <p style={hintStyle(tokens.textMuted)}>\n {loading\n ? 'Preparing authorization...'\n : error\n ? 'Retry the status check after returning to the browser, or reopen your wallet if needed.'\n : \"If your wallet didn't open automatically, tap the button above\"}\n </p>\n <PoweredByFooter />\n </div>\n }\n >\n <ScreenHeader onBack={onBack} onLogout={onLogout} />\n\n <div style={contentStyle}>\n <div style={logoCircleStyle(tokens.bgInput)}>\n {logoSrc ? (\n <img src={logoSrc} alt={displayName} style={logoStyle} />\n ) : (\n <Spinner size={32} />\n )}\n </div>\n\n <h2 style={headingStyle(tokens.text)}>\n {loading ? 'Connecting...' : `Open ${displayName}`}\n </h2>\n <p style={subtitleStyle(tokens.textSecondary)}>\n {loading\n ? 'Creating transfer and preparing your wallet link...'\n : `Continue in ${displayName} to authorize this connection.`}\n </p>\n\n {!loading && (\n <div style={waitingBadgeStyle(tokens)}>\n <Spinner size={14} />\n <span>Waiting for authorization...</span>\n </div>\n )}\n </div>\n </ScreenLayout>\n );\n}\n\nconst contentStyle: CSSProperties = {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n textAlign: 'center',\n padding: '0 24px',\n};\n\nconst footerContentStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 12,\n};\n\nconst logoCircleStyle = (bg: string): CSSProperties => ({\n width: 80,\n height: 80,\n borderRadius: '50%',\n background: bg,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n});\n\nconst logoStyle: CSSProperties = {\n width: 48,\n height: 48,\n borderRadius: 12,\n objectFit: 'contain',\n};\n\nconst headingStyle = (color: string): CSSProperties => ({\n fontSize: '1.45rem',\n fontWeight: 700,\n letterSpacing: '-0.02em',\n color,\n margin: '20px 0 8px',\n});\n\nconst subtitleStyle = (color: string): CSSProperties => ({\n fontSize: '0.9rem',\n color,\n margin: '0 0 24px',\n lineHeight: 1.5,\n maxWidth: 280,\n});\n\nconst waitingBadgeStyle = (tokens: { bgInput: string; textMuted: string; border: string }): CSSProperties => ({\n display: 'inline-flex',\n alignItems: 'center',\n gap: 8,\n padding: '8px 16px',\n borderRadius: 20,\n background: tokens.bgInput,\n border: `1px solid ${tokens.border}`,\n color: tokens.textMuted,\n fontSize: '0.82rem',\n});\n\nconst hintStyle = (color: string): CSSProperties => ({\n textAlign: 'center',\n fontSize: '0.82rem',\n color,\n margin: '8px 0 0',\n});\n\nconst waitHintStyle = (color: string): CSSProperties => ({\n fontSize: '0.82rem',\n color,\n margin: '16px 0 0',\n});\n","import type { CSSProperties } from 'react';\nimport { useBlinkConfig } from '../../context';\nimport { ScreenLayout, ScreenHeader, PrimaryButton } from '../ui';\nimport { Spinner } from '../Spinner';\nimport { KNOWN_LOGOS } from '../../assets/logos';\n\ninterface ConfirmSignScreenProps {\n walletName: string | null;\n signing: boolean;\n error: string | null;\n onSign: () => void;\n onLogout: () => void;\n}\n\n/**\n * Shown after the user returns from wallet authorization. Requires an explicit\n * button tap to initiate passkey signing (FaceID) rather than auto-triggering.\n */\nexport function ConfirmSignScreen({\n walletName,\n signing,\n error,\n onSign,\n onLogout,\n}: ConfirmSignScreenProps) {\n const { tokens } = useBlinkConfig();\n\n const displayName = walletName ?? 'your wallet';\n const logoSrc = walletName ? KNOWN_LOGOS[walletName.toLowerCase()] : undefined;\n\n return (\n <ScreenLayout\n footer={\n <>\n <PrimaryButton onClick={onSign} disabled={signing}>\n {signing ? 'Confirming...' : 'Confirm payment'}\n </PrimaryButton>\n {error && <p style={errorStyle(tokens.textMuted)}>{error}</p>}\n {!error && (\n <p style={hintStyle(tokens.textMuted)}>\n You may be prompted for biometric verification\n </p>\n )}\n </>\n }\n >\n <ScreenHeader onLogout={onLogout} />\n\n <div style={contentStyle}>\n {logoSrc ? (\n <img src={logoSrc} alt={displayName} style={logoStyle} />\n ) : (\n <Spinner size={48} />\n )}\n\n <h2 style={headingStyle(tokens.text)}>Wallet authorized</h2>\n <p style={subtitleStyle(tokens.textSecondary)}>\n {displayName} approved the connection. Tap below to confirm your payment.\n </p>\n\n <div style={successBadgeStyle(tokens)}>\n <span style={checkmarkStyle}>✓</span>\n <span>Authorization complete</span>\n </div>\n </div>\n </ScreenLayout>\n );\n}\n\nconst contentStyle: CSSProperties = {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n textAlign: 'center',\n padding: '0 24px',\n};\n\nconst logoStyle: CSSProperties = {\n width: 56,\n height: 56,\n borderRadius: 14,\n objectFit: 'contain',\n};\n\nconst headingStyle = (color: string): CSSProperties => ({\n fontSize: '1.45rem',\n fontWeight: 700,\n letterSpacing: '-0.02em',\n color,\n margin: '20px 0 8px',\n});\n\nconst subtitleStyle = (color: string): CSSProperties => ({\n fontSize: '0.9rem',\n color,\n margin: '0 0 24px',\n lineHeight: 1.5,\n maxWidth: 280,\n});\n\nconst successBadgeStyle = (tokens: { bgInput: string; border: string }): CSSProperties => ({\n display: 'inline-flex',\n alignItems: 'center',\n gap: 8,\n padding: '8px 16px',\n borderRadius: 20,\n background: tokens.bgInput,\n border: `1px solid ${tokens.border}`,\n color: '#22c55e',\n fontSize: '0.82rem',\n});\n\nconst checkmarkStyle: CSSProperties = {\n fontWeight: 700,\n fontSize: '0.9rem',\n};\n\nconst hintStyle = (color: string): CSSProperties => ({\n textAlign: 'center',\n fontSize: '0.82rem',\n color,\n margin: '8px 0 0',\n});\n\nconst errorStyle = (color: string): CSSProperties => ({\n textAlign: 'center',\n fontSize: '0.82rem',\n color: '#ef4444',\n margin: '8px 0 0',\n});\n","import type { CSSProperties } from 'react';\nimport type { Account } from '../../types';\nimport { useBlinkConfig } from '../../context';\nimport { BLINK_LOGO, TOKEN_LOGOS } from '../../assets/logos';\nimport {\n ScreenLayout,\n ScreenHeader,\n PoweredByFooter,\n} from '../ui';\n\ninterface TokenEntry {\n walletId: string;\n chainName: string;\n tokenSymbol: string;\n tokenAddress: string;\n balance: number;\n status: string;\n}\n\ninterface TokenPickerScreenProps {\n account: Account;\n chains: Array<{ id: string; name: string; commonId: number | null }>;\n onSelectAuthorized: (walletId: string, tokenSymbol: string) => void;\n onAuthorizeToken: (walletId: string, tokenAddress: string, chainId: number, tokenSymbol: string) => void;\n onBack: () => void;\n onLogout?: () => void;\n /** Deposit amount for the context card at top */\n depositAmount?: number;\n /** Currently selected token symbol, e.g. \"USDC\" or \"USDT\" */\n selectedTokenSymbol?: string;\n /** Currently selected wallet ID so we can identify the active token across chains */\n selectedWalletId?: string;\n}\n\nexport function TokenPickerScreen({\n account,\n chains,\n onSelectAuthorized,\n onAuthorizeToken,\n onBack,\n onLogout,\n depositAmount,\n selectedTokenSymbol,\n selectedWalletId,\n}: TokenPickerScreenProps) {\n const { tokens: t } = useBlinkConfig();\n\n const entries: TokenEntry[] = [];\n for (const wallet of account.wallets) {\n for (const source of wallet.sources) {\n if (source.balance.total.amount <= 0) continue;\n entries.push({\n walletId: wallet.id,\n chainName: wallet.chain.name,\n tokenSymbol: source.token.symbol,\n tokenAddress: source.address,\n balance: source.balance.total.amount,\n status: source.token.status,\n });\n }\n }\n\n const handleSelect = (entry: TokenEntry) => {\n if (entry.status === 'AUTHORIZED') {\n onSelectAuthorized(entry.walletId, entry.tokenSymbol);\n } else {\n const chain = chains.find((c) => c.name === entry.chainName);\n const evmChainId = chain?.commonId;\n if (evmChainId == null) return;\n onAuthorizeToken(entry.walletId, entry.tokenAddress, evmChainId, entry.tokenSymbol);\n }\n };\n\n return (\n <ScreenLayout footer={<PoweredByFooter />}>\n <ScreenHeader onBack={onBack} onLogout={onLogout} />\n\n {depositAmount != null && (\n <div>\n <div style={depositLabelStyle(t.textMuted)}>Depositing</div>\n <div style={depositAmountRowStyle}>\n <div style={depositAmountStyle(t.text)}>\n ${depositAmount.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}\n </div>\n <button\n type=\"button\"\n onClick={onBack}\n style={tokenIconButtonStyle}\n >\n <div style={tokenIconWrapStyle}>\n {selectedTokenSymbol && TOKEN_LOGOS[selectedTokenSymbol] ? (\n <img src={TOKEN_LOGOS[selectedTokenSymbol]} alt={selectedTokenSymbol} width={36} height={36} style={{ borderRadius: '50%' }} />\n ) : (\n <svg width=\"36\" height=\"36\" viewBox=\"0 0 36 36\" fill=\"none\">\n <circle cx=\"18\" cy=\"18\" r=\"18\" fill=\"#2DB84B\" />\n <text x=\"18\" y=\"23\" textAnchor=\"middle\" fontSize=\"18\" fill=\"#fff\" fontWeight=\"700\">$</text>\n </svg>\n )}\n </div>\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" style={{ opacity: 0.5 }}>\n <path d=\"M6 9l6 6 6-6\" stroke={t.textMuted} strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n </div>\n </div>\n )}\n\n <div style={sectionLabelStyle(t.textMuted)}>Choose token</div>\n\n <div style={tokenListStyle}>\n {entries.map((entry) => {\n const authorized = entry.status === 'AUTHORIZED';\n const isSelected = entry.walletId === selectedWalletId\n && entry.tokenSymbol === selectedTokenSymbol;\n\n return (\n <button\n key={`${entry.walletId}-${entry.tokenSymbol}-${entry.chainName}`}\n type=\"button\"\n onClick={() => handleSelect(entry)}\n style={tokenRowStyle(t)}\n >\n <div style={tokenIconCircleStyle(t, !!TOKEN_LOGOS[entry.tokenSymbol])}>\n {TOKEN_LOGOS[entry.tokenSymbol] ? (\n <img src={TOKEN_LOGOS[entry.tokenSymbol]} alt={entry.tokenSymbol} style={tokenLogoImgStyle} />\n ) : (\n <span style={tokenIconTextStyle(t.textMuted)}>$</span>\n )}\n </div>\n\n <div style={tokenInfoStyle}>\n <div style={tokenNameRowStyle}>\n <span style={tokenSymbolTextStyle(t.text)}>{entry.tokenSymbol}</span>\n <span style={tokenChainDotStyle(t.textMuted)}>·</span>\n <span style={tokenChainTextStyle(t.textMuted)}>{entry.chainName}</span>\n </div>\n <div style={tokenBalanceRowStyle}>\n <span style={tokenBalanceStyle(t.textMuted)}>\n ${entry.balance.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}\n </span>\n {!authorized && (\n <span style={notAuthorizedStyle(t.textMuted)}>Not authorized</span>\n )}\n </div>\n </div>\n\n <div style={isSelected ? selectCircleSelectedStyle(t.accent) : selectCircleStyle(t.border)}>\n {isSelected && (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\" fill=\"#fff\" />\n </svg>\n )}\n </div>\n </button>\n );\n })}\n </div>\n </ScreenLayout>\n );\n}\n\n/* ── Styles ──────────────────────────────────────────────────────── */\n\nconst mascotWrapStyle: CSSProperties = {\n display: 'flex',\n justifyContent: 'center',\n marginBottom: 16,\n};\n\nconst mascotImgStyle: CSSProperties = {\n width: 36,\n height: 36,\n};\n\nconst depositCardStyle = (tokens: { bgInput: string; border: string; radiusLg: string }): CSSProperties => ({\n background: tokens.bgInput,\n border: `1px solid ${tokens.border}`,\n borderRadius: tokens.radiusLg,\n padding: '16px 20px',\n marginBottom: 24,\n});\n\nconst depositLabelStyle = (color: string): CSSProperties => ({\n fontSize: '0.75rem',\n fontWeight: 500,\n color,\n marginBottom: 4,\n});\n\nconst depositAmountRowStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n};\n\nconst depositAmountStyle = (color: string): CSSProperties => ({\n fontSize: '2.4rem',\n fontWeight: 700,\n letterSpacing: '-0.02em',\n color,\n});\n\nconst tokenIconButtonStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 4,\n background: 'transparent',\n border: 'none',\n cursor: 'pointer',\n padding: 0,\n flexShrink: 0,\n};\n\nconst tokenIconWrapStyle: CSSProperties = {\n position: 'relative',\n width: 36,\n height: 36,\n flexShrink: 0,\n};\n\nconst checkBadgeStyle: CSSProperties = {\n position: 'absolute',\n bottom: -1,\n right: -3,\n};\n\nconst sectionLabelStyle = (color: string): CSSProperties => ({\n fontSize: '0.84rem',\n fontWeight: 500,\n color,\n marginBottom: 12,\n});\n\nconst tokenListStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 10,\n};\n\nconst tokenRowStyle = (tokens: { bgInput: string; border: string }): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n gap: 14,\n padding: '14px 16px',\n background: tokens.bgInput,\n border: `1px solid ${tokens.border}`,\n borderRadius: 16,\n cursor: 'pointer',\n fontFamily: 'inherit',\n textAlign: 'left' as const,\n width: '100%',\n});\n\nconst tokenIconCircleStyle = (tokens: { border: string }, hasLogo: boolean): CSSProperties => ({\n width: 36,\n height: 36,\n borderRadius: '50%',\n border: hasLogo ? 'none' : `1.5px solid ${tokens.border}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n overflow: 'hidden',\n});\n\nconst tokenLogoImgStyle: CSSProperties = {\n width: 36,\n height: 36,\n borderRadius: '50%',\n objectFit: 'cover',\n};\n\nconst tokenIconTextStyle = (color: string): CSSProperties => ({\n fontSize: '1rem',\n fontWeight: 700,\n color,\n});\n\nconst tokenInfoStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n flex: 1,\n minWidth: 0,\n};\n\nconst tokenNameRowStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 4,\n};\n\nconst tokenSymbolTextStyle = (color: string): CSSProperties => ({\n fontSize: '0.92rem',\n fontWeight: 600,\n color,\n});\n\nconst tokenChainDotStyle = (color: string): CSSProperties => ({\n fontSize: '0.8rem',\n color,\n});\n\nconst tokenChainTextStyle = (color: string): CSSProperties => ({\n fontSize: '0.84rem',\n fontWeight: 400,\n color,\n});\n\nconst tokenBalanceRowStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n};\n\nconst tokenBalanceStyle = (color: string): CSSProperties => ({\n fontSize: '0.78rem',\n color,\n});\n\nconst notAuthorizedStyle = (color: string): CSSProperties => ({\n fontSize: '0.7rem',\n fontWeight: 500,\n color,\n});\n\nconst selectCircleStyle = (borderColor: string): CSSProperties => ({\n width: 28,\n height: 28,\n borderRadius: '50%',\n border: `2px solid ${borderColor}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n});\n\nconst selectCircleSelectedStyle = (color: string): CSSProperties => ({\n width: 28,\n height: 28,\n borderRadius: '50%',\n background: color,\n border: 'none',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n});\n","import { useState, useEffect, useRef, useCallback, type CSSProperties } from 'react';\nimport { TOKEN_LOGOS } from '../../assets/logos';\nimport { useBlinkConfig } from '../../context';\nimport { getDeviceBiometricUnlockText } from '../../deviceBiometricUnlockText';\nimport type { ThemeTokens } from '../../theme';\nimport {\n ScreenLayout,\n ScreenHeader,\n PoweredByFooter,\n PrimaryButton,\n} from '../ui';\nimport { Spinner } from '../Spinner';\nimport type { GuestTokenEntry } from '../../guestTokens';\nimport type { PreciseMoney } from '../../types';\nimport type { GuestBridgePhase } from '../../hooks/useGuestTransferHandlers';\nimport {\n isPreciseMoneyNonPositive,\n formatNonPositiveFeeDisplay,\n formatPreciseMoneyForDisplay,\n} from '../../feeFormat';\n\nfunction entryKey(entry: GuestTokenEntry): string {\n return `${entry.sourceChainId}-${entry.tokenAddress.toLowerCase()}`;\n}\n\ninterface GuestTokenPickerScreenProps {\n entries: GuestTokenEntry[];\n loading: boolean;\n depositAmount?: number;\n error?: string | null;\n pendingEntry: GuestTokenEntry | null;\n quoteFee: PreciseMoney | null;\n quoteLoading: boolean;\n onSelect: (entry: GuestTokenEntry) => void;\n onConfirm: () => void | Promise<void>;\n onBack: () => void;\n /** For gallery capture: start with the token list expanded (A06). */\n defaultTokenListExpanded?: boolean;\n /** Wallet provider name for the CTA (e.g. \"MetaMask\"). */\n providerName?: string;\n /** Whether the user has opted in to one-tap deposits. */\n oneTapEnabled: boolean;\n /** Toggle one-tap opt-in. */\n onToggleOneTap: (enabled: boolean) => void;\n /** Per-deposit limit (USD) for one-tap. */\n oneTapLimit: number;\n /** Update the per-deposit limit. */\n onSetOneTapLimit: (limit: number) => void;\n /** Shared screen mode for guest deposit or auth setup. */\n variant?: 'guest-deposit' | 'auth-setup';\n /** Override the primary CTA label. */\n confirmLabel?: string;\n /** Override the token card label. */\n selectionLabel?: string;\n /** Require a fee quote before enabling the primary CTA. */\n requireQuoteForConfirm?: boolean;\n /** Close the token list immediately after selection. */\n closeListOnSelect?: boolean;\n /** Override the empty-state copy below the picker. */\n emptyMessage?: string;\n /** Current bridge execution phase. When set, the CTA renders as a progress bar. */\n bridgePhase?: GuestBridgePhase | null;\n}\n\nconst LIMIT_MIN = 0.01;\nconst LIMIT_MAX = 10_000_000;\n\nfunction getProgressInfo(\n phase: GuestBridgePhase,\n providerName?: string,\n): { progress: number; text: string; paused: boolean } {\n switch (phase) {\n case 'preparing': return { progress: 0.15, text: 'Preparing...', paused: false };\n case 'building': return { progress: 0.30, text: 'Setting up...', paused: false };\n case 'wallet': return { progress: 0.35, text: `Confirm in ${providerName ?? 'wallet'}`, paused: true };\n case 'sending': return { progress: 0.60, text: 'Sending...', paused: false };\n case 'completing': return { progress: 0.90, text: 'Almost done...', paused: false };\n case 'done': return { progress: 1.0, text: 'Done', paused: false };\n }\n}\n\nexport function GuestTokenPickerScreen({\n entries,\n loading,\n depositAmount,\n error,\n pendingEntry,\n quoteFee,\n quoteLoading,\n onSelect,\n onConfirm,\n onBack,\n defaultTokenListExpanded = false,\n providerName,\n oneTapEnabled,\n onToggleOneTap,\n oneTapLimit,\n onSetOneTapLimit,\n variant = 'guest-deposit',\n confirmLabel,\n selectionLabel,\n requireQuoteForConfirm,\n closeListOnSelect = false,\n emptyMessage = 'No supported tokens found in your wallet. Please ensure you have USDC or USDT.',\n bridgePhase,\n}: GuestTokenPickerScreenProps) {\n const { tokens: t } = useBlinkConfig();\n const pendingKey = pendingEntry ? entryKey(pendingEntry) : null;\n const [tokenListOpen, setTokenListOpen] = useState(defaultTokenListExpanded);\n const pickerRef = useRef<HTMLDivElement>(null);\n\n const [editingLimit, setEditingLimit] = useState(false);\n const [limitInputValue, setLimitInputValue] = useState('');\n const limitInputRef = useRef<HTMLInputElement>(null);\n const [managingAllowance, setManagingAllowance] = useState(false);\n\n const biometricText = getDeviceBiometricUnlockText();\n\n // Close token list on outside click (document).\n useEffect(() => {\n if (!tokenListOpen) return;\n const handleMouseDown = (e: MouseEvent) => {\n if (pickerRef.current && !pickerRef.current.contains(e.target as Node)) {\n setTokenListOpen(false);\n }\n };\n document.addEventListener('mousedown', handleMouseDown);\n return () => document.removeEventListener('mousedown', handleMouseDown);\n }, [tokenListOpen]);\n\n const commitLimitEdit = useCallback(() => {\n const parsed = parseFloat(limitInputValue);\n if (!isNaN(parsed)) {\n onSetOneTapLimit(\n Math.min(LIMIT_MAX, Math.max(LIMIT_MIN, Math.round(parsed * 100) / 100)),\n );\n }\n setEditingLimit(false);\n }, [limitInputValue, onSetOneTapLimit]);\n\n if (loading) {\n return (\n <ScreenLayout>\n <ScreenHeader onBack={onBack} />\n <div style={loadingWrapStyle}>\n <Spinner label=\"Loading balances...\" />\n </div>\n </ScreenLayout>\n );\n }\n\n const isBridging = bridgePhase != null;\n const rowBusy = isBridging || quoteLoading;\n const progressInfo = bridgePhase ? getProgressInfo(bridgePhase, providerName) : null;\n const displayEntry = pendingEntry ?? entries[0] ?? null;\n const confirmNeedsQuote = requireQuoteForConfirm ?? (variant === 'guest-deposit');\n const canConfirm = Boolean(pendingEntry && !quoteLoading && (!confirmNeedsQuote || quoteFee));\n const ctaLabel = confirmLabel\n ?? (\n variant === 'auth-setup'\n ? 'Continue'\n : providerName\n ? `Open ${providerName} to Deposit`\n : 'Open Wallet to Deposit'\n );\n const tokenCardLabel = selectionLabel ?? (variant === 'auth-setup' ? 'Token for one-tap' : 'Deposit');\n const oneTapSubtitle = variant === 'auth-setup'\n ? `Skip wallet next time — just ${biometricText}`\n : `Skip ${providerName ?? 'wallet'} next time — just ${biometricText}`;\n const oneTapBody = variant === 'auth-setup'\n ? `Future deposits up to your allowance are confirmed with just ${biometricText} — no wallet pop-up.`\n : `Future deposits up to your allowance are confirmed with just ${biometricText} — no wallet pop-up. You'll re-authorize with ${providerName ?? 'your wallet'} when you need to top up.`;\n\n const feeLine = (() => {\n if (quoteLoading && pendingEntry) {\n return (\n <div style={feeRowContainerStyle} aria-live=\"polite\">\n <span style={feeRowLabelStyle(t.textMuted)}>Getting fee estimate…</span>\n </div>\n );\n }\n if (quoteFee) {\n const feeText = isPreciseMoneyNonPositive(quoteFee)\n ? formatNonPositiveFeeDisplay(quoteFee)\n : formatPreciseMoneyForDisplay(quoteFee);\n return (\n <div style={feeRowContainerStyle} aria-live=\"polite\">\n <span style={feeRowLabelStyle(t.textMuted)}>Network fee: </span>\n <span style={feeRowAmountStyle(t.textSecondary)}>{feeText}</span>\n </div>\n );\n }\n return null;\n })();\n\n return (\n <ScreenLayout\n footer={\n <>\n {progressInfo ? (\n <PrimaryButton\n progress={progressInfo.progress}\n progressText={progressInfo.text}\n progressPaused={progressInfo.paused}\n >\n {ctaLabel}\n </PrimaryButton>\n ) : canConfirm ? (\n <PrimaryButton onClick={() => void onConfirm()}>\n {ctaLabel}\n </PrimaryButton>\n ) : null}\n <PoweredByFooter />\n </>\n }\n >\n <ScreenHeader onBack={isBridging ? undefined : onBack} />\n\n {/* ── Token selection card ──────────────────────────────── */}\n <div ref={pickerRef}>\n {variant === 'auth-setup' ? (\n <div style={authSelectionCardStyle(t, tokenListOpen)}>\n <div style={authSelectionLabelStyle(t.textMuted)}>{tokenCardLabel}</div>\n <button\n type=\"button\"\n onClick={() => entries.length > 0 && setTokenListOpen((o) => !o)}\n disabled={entries.length <= 1 || rowBusy}\n style={authSelectionTriggerStyle(t, entries.length > 1)}\n aria-expanded={tokenListOpen}\n aria-haspopup=\"listbox\"\n >\n <span style={authSelectionValueStyle(t.text)}>\n {displayEntry ? `${displayEntry.tokenSymbol} on ${displayEntry.chainName}` : 'Select token'}\n </span>\n {entries.length > 1 && (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" style={{ opacity: 0.5 }}>\n {tokenListOpen ? (\n <path\n d=\"M18 15l-6-6-6 6\"\n stroke={t.textMuted}\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n ) : (\n <path\n d=\"M6 9l6 6 6-6\"\n stroke={t.textMuted}\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n )}\n </svg>\n )}\n </button>\n </div>\n ) : (\n <div style={depositCardSurfaceStyle(t, tokenListOpen)}>\n <div style={depositLabelStyle(t.textMuted)}>{tokenCardLabel}</div>\n\n <div style={amountBandStyle}>\n <div style={amountLeftColStyle}>\n {depositAmount != null && (\n <div style={depositAmountStyle(t.text)}>\n $\n {depositAmount.toLocaleString('en-US', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n })}\n </div>\n )}\n {feeLine}\n </div>\n\n <button\n type=\"button\"\n onClick={() => entries.length > 0 && setTokenListOpen((o) => !o)}\n disabled={entries.length === 0 || rowBusy}\n style={tokenTriggerStyle(t, entries.length > 0 && !rowBusy)}\n aria-expanded={tokenListOpen}\n aria-haspopup=\"listbox\"\n >\n <div style={tokenTriggerIconsStyle}>\n {pendingEntry && TOKEN_LOGOS[pendingEntry.tokenSymbol] ? (\n <img\n src={TOKEN_LOGOS[pendingEntry.tokenSymbol]}\n alt=\"\"\n width={28}\n height={28}\n style={triggerLogoStyle(0)}\n />\n ) : entries[0] && entries[1] && TOKEN_LOGOS[entries[0].tokenSymbol] && TOKEN_LOGOS[entries[1].tokenSymbol] ? (\n <>\n <img\n src={TOKEN_LOGOS[entries[0].tokenSymbol]}\n alt=\"\"\n width={28}\n height={28}\n style={triggerLogoStyle(0)}\n />\n <img\n src={TOKEN_LOGOS[entries[1].tokenSymbol]}\n alt=\"\"\n width={28}\n height={28}\n style={triggerLogoStyle(14)}\n />\n </>\n ) : displayEntry && TOKEN_LOGOS[displayEntry.tokenSymbol] ? (\n <img\n src={TOKEN_LOGOS[displayEntry.tokenSymbol]}\n alt=\"\"\n width={28}\n height={28}\n style={triggerLogoStyle(0)}\n />\n ) : null}\n </div>\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" style={{ opacity: 0.5 }}>\n {tokenListOpen ? (\n <path\n d=\"M18 15l-6-6-6 6\"\n stroke={t.textMuted}\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n ) : (\n <path\n d=\"M6 9l6 6 6-6\"\n stroke={t.textMuted}\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n )}\n </svg>\n </button>\n </div>\n </div>\n )}\n\n {tokenListOpen && entries.length > 0 && (\n <div style={tokenDropdownOuterStyle(t)}>\n <div style={accountDropdownLabelStyle(t.textMuted)}>Choose token</div>\n <div style={tokenDropdownInnerStyle(t)}>\n {entries.map((entry, index) => {\n const selected = pendingKey === entryKey(entry);\n const isLast = index === entries.length - 1;\n return (\n <button\n key={entryKey(entry)}\n type=\"button\"\n onClick={() => {\n if (closeListOnSelect) setTokenListOpen(false);\n void onSelect(entry);\n }}\n disabled={rowBusy}\n style={pickerRowStyle(t, selected, isLast)}\n >\n <div style={pickerRowLeftStyle}>\n <div style={tokenIconCircleStyle(t, !!TOKEN_LOGOS[entry.tokenSymbol])}>\n {TOKEN_LOGOS[entry.tokenSymbol] ? (\n <img\n src={TOKEN_LOGOS[entry.tokenSymbol]}\n alt={entry.tokenSymbol}\n style={tokenLogoImgStyle}\n />\n ) : (\n <span style={tokenIconTextStyle(t.textMuted)}>$</span>\n )}\n </div>\n <div style={pickerRowInfoStyle}>\n <div style={tokenNameRowStyle}>\n <span style={tokenSymbolTextStyle(t.text)}>{entry.tokenSymbol}</span>\n <span style={tokenChainDotStyle(t.textMuted)}>·</span>\n <span style={tokenChainTextStyle(t.textMuted)}>{entry.chainName}</span>\n </div>\n <span style={tokenBalanceStyle(t.textMuted)}>\n $\n {entry.balance.toLocaleString('en-US', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n })}\n </span>\n </div>\n </div>\n {selected ? (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 22 22\" fill=\"none\">\n <circle cx=\"11\" cy=\"11\" r=\"11\" fill={t.success} />\n <path\n d=\"M7 11l3 3 5-5\"\n stroke=\"#fff\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n ) : (\n <div style={radioEmptyStyle(t.border)} />\n )}\n </button>\n );\n })}\n </div>\n </div>\n )}\n </div>\n\n {/* ── One-tap deposits card ─────────────────────────────── */}\n {!tokenListOpen && !isBridging && (\n <div style={oneTapCardStyle(t, oneTapEnabled)}>\n <div style={oneTapHeaderRowStyle}>\n <div style={oneTapHeaderLeftStyle}>\n <div style={lightningIconStyle}>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M13 2L3 14h9l-1 8 10-12h-9l1-8z\" fill=\"#F5A623\" stroke=\"#F5A623\" strokeWidth=\"1\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </div>\n <div>\n <div style={oneTapTitleStyle(t.text)}>Enable one-tap deposits</div>\n <div style={oneTapSubtitleStyle(t.textMuted)}>\n {oneTapSubtitle}\n </div>\n </div>\n </div>\n <button\n type=\"button\"\n onClick={() => onToggleOneTap(!oneTapEnabled)}\n style={toggleTrackStyle(oneTapEnabled, t)}\n role=\"switch\"\n aria-checked={oneTapEnabled}\n aria-label=\"Enable one-tap deposits\"\n >\n <div style={toggleThumbStyle(oneTapEnabled)} />\n </button>\n </div>\n\n {oneTapEnabled && (\n <>\n <p style={oneTapBodyStyle(t.textMuted)}>\n {oneTapBody}\n </p>\n\n <button\n type=\"button\"\n onClick={() => {\n setManagingAllowance((o) => !o);\n setEditingLimit(false);\n }}\n style={manageAllowanceBtnStyle(t.textMuted)}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" style={{ flexShrink: 0 }}>\n <circle cx=\"12\" cy=\"12\" r=\"3\" stroke={t.textMuted} strokeWidth=\"2\" />\n <path\n d=\"M12.22 2h-.44a2 2 0 00-2 2v.18a2 2 0 01-1 1.73l-.43.25a2 2 0 01-2 0l-.15-.08a2 2 0 00-2.73.73l-.22.38a2 2 0 00.73 2.73l.15.1a2 2 0 011 1.72v.51a2 2 0 01-1 1.74l-.15.09a2 2 0 00-.73 2.73l.22.38a2 2 0 002.73.73l.15-.08a2 2 0 012 0l.43.25a2 2 0 011 1.73V20a2 2 0 002 2h.44a2 2 0 002-2v-.18a2 2 0 011-1.73l.43-.25a2 2 0 012 0l.15.08a2 2 0 002.73-.73l.22-.39a2 2 0 00-.73-2.73l-.15-.08a2 2 0 01-1-1.74v-.5a2 2 0 011-1.74l.15-.09a2 2 0 00.73-2.73l-.22-.38a2 2 0 00-2.73-.73l-.15.08a2 2 0 01-2 0l-.43-.25a2 2 0 01-1-1.73V4a2 2 0 00-2-2z\"\n stroke={t.textMuted}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n Manage allowance\n </button>\n\n {managingAllowance && (\n <div style={manageSectionStyle(t)}>\n <span style={manageSectionLabelStyle(t.textMuted)}>One-tap allowance</span>\n <div style={allowanceRowStyle}>\n <div style={customInputWrapStyle(t)}>\n <span style={customInputPrefixStyle(t.text)}>$</span>\n <input\n ref={limitInputRef}\n type=\"text\"\n inputMode=\"decimal\"\n pattern=\"[0-9]*\"\n value={editingLimit ? limitInputValue : (oneTapLimit >= LIMIT_MAX ? 'Unlimited' : oneTapLimit.toFixed(2))}\n readOnly={!editingLimit}\n onClick={() => {\n if (!editingLimit) {\n setLimitInputValue(oneTapLimit >= LIMIT_MAX ? '' : oneTapLimit.toFixed(2));\n setEditingLimit(true);\n requestAnimationFrame(() => limitInputRef.current?.focus());\n }\n }}\n onChange={(e) => {\n const filtered = e.target.value.replace(/[^0-9.]/g, '');\n setLimitInputValue(filtered);\n }}\n onBlur={commitLimitEdit}\n onKeyDown={(e) => { if (e.key === 'Enter') commitLimitEdit(); }}\n style={customInputFieldStyle(t.text)}\n />\n </div>\n <button\n type=\"button\"\n onClick={() => {\n onSetOneTapLimit(LIMIT_MAX);\n setEditingLimit(false);\n }}\n style={maxButtonStyle(t, oneTapLimit >= LIMIT_MAX && !editingLimit)}\n >\n MAX\n </button>\n </div>\n </div>\n )}\n </>\n )}\n </div>\n )}\n\n {error && <p style={errorStyle(t.error)}>{error}</p>}\n\n {entries.length === 0 && (\n <p style={emptyStyle(t.textMuted)}>\n {emptyMessage}\n </p>\n )}\n </ScreenLayout>\n );\n}\n\n/* ── Styles ──────────────────────────────────────────────────────── */\n\nconst loadingWrapStyle: CSSProperties = {\n textAlign: 'center',\n padding: '48px 0',\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n};\n\nconst depositCardSurfaceStyle = (tokens: ThemeTokens, listOpen: boolean): CSSProperties => ({\n background: tokens.bgCard,\n border: `1px solid ${tokens.border}`,\n borderRadius: tokens.radiusLg,\n padding: '16px 20px',\n marginBottom: listOpen ? 4 : 16,\n});\n\nconst depositLabelStyle = (color: string): CSSProperties => ({\n fontSize: '0.75rem',\n fontWeight: 500,\n color,\n marginBottom: 4,\n});\n\nconst authSelectionCardStyle = (tokens: ThemeTokens, listOpen: boolean): CSSProperties => ({\n background: tokens.bgCard,\n border: `1px solid ${tokens.border}`,\n borderRadius: tokens.radiusLg,\n padding: '16px 20px',\n marginBottom: listOpen ? 4 : 16,\n});\n\nconst authSelectionLabelStyle = (color: string): CSSProperties => ({\n fontSize: '0.75rem',\n fontWeight: 500,\n color,\n marginBottom: 8,\n});\n\nconst authSelectionTriggerStyle = (tokens: ThemeTokens, interactive: boolean): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n gap: 6,\n padding: '10px 14px',\n background: tokens.bgInput,\n border: `1px solid ${tokens.border}`,\n borderRadius: 999,\n cursor: interactive ? 'pointer' : 'default',\n fontFamily: 'inherit',\n});\n\nconst authSelectionValueStyle = (color: string): CSSProperties => ({\n fontSize: '0.95rem',\n fontWeight: 600,\n color,\n});\n\nconst amountBandStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n gap: 12,\n};\n\nconst amountLeftColStyle: CSSProperties = {\n flex: 1,\n minWidth: 0,\n};\n\nconst depositAmountStyle = (color: string): CSSProperties => ({\n fontSize: '2.4rem',\n fontWeight: 700,\n letterSpacing: '-0.02em',\n color,\n lineHeight: 1.05,\n});\n\nconst feeRowContainerStyle: CSSProperties = {\n fontSize: '0.84rem',\n fontWeight: 500,\n marginTop: 6,\n};\n\nconst feeRowLabelStyle = (color: string): CSSProperties => ({ color });\n\nconst feeRowAmountStyle = (color: string): CSSProperties => ({\n color,\n fontVariantNumeric: 'tabular-nums',\n});\n\nconst tokenTriggerStyle = (tokens: ThemeTokens, interactive: boolean): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n flexShrink: 0,\n marginTop: 4,\n padding: '6px 10px',\n background: tokens.bgInput,\n border: `1px solid ${tokens.border}`,\n borderRadius: 999,\n cursor: interactive ? 'pointer' : 'default',\n fontFamily: 'inherit',\n});\n\nconst tokenTriggerIconsStyle: CSSProperties = {\n position: 'relative',\n width: 40,\n height: 28,\n};\n\nconst triggerLogoStyle = (left: number): CSSProperties => ({\n position: 'absolute',\n left,\n top: 0,\n borderRadius: '50%',\n objectFit: 'cover',\n border: '2px solid rgba(255,255,255,0.9)',\n boxSizing: 'content-box',\n});\n\nconst tokenDropdownOuterStyle = (tokens: ThemeTokens): CSSProperties => ({\n marginTop: 4,\n marginBottom: 16,\n background: tokens.bgCard,\n border: `1px solid ${tokens.border}`,\n borderRadius: tokens.radiusLg,\n boxShadow: tokens.shadowLg,\n padding: '12px 14px 14px',\n});\n\nconst accountDropdownLabelStyle = (color: string): CSSProperties => ({\n fontSize: '0.78rem',\n fontWeight: 500,\n color,\n marginBottom: 8,\n});\n\nconst tokenDropdownInnerStyle = (tokens: ThemeTokens): CSSProperties => ({\n background: tokens.bgInput,\n border: `1px solid ${tokens.border}`,\n borderRadius: tokens.radiusLg,\n overflow: 'hidden',\n});\n\nconst pickerRowStyle = (\n tokens: ThemeTokens,\n isSelected: boolean,\n isLast: boolean,\n): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n padding: '14px 16px',\n background: isSelected ? `${tokens.accent}18` : 'transparent',\n border: 'none',\n borderBottom: isLast ? 'none' : `1px solid ${tokens.border}`,\n cursor: 'pointer',\n fontFamily: 'inherit',\n textAlign: 'left',\n outline: 'none',\n});\n\nconst pickerRowLeftStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n minWidth: 0,\n flex: 1,\n};\n\nconst pickerRowInfoStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n minWidth: 0,\n};\n\nconst radioEmptyStyle = (borderColor: string): CSSProperties => ({\n width: 22,\n height: 22,\n borderRadius: '50%',\n border: `2px solid ${borderColor}`,\n flexShrink: 0,\n});\n\nconst errorStyle = (color: string): CSSProperties => ({\n fontSize: '0.84rem',\n color,\n margin: '0 0 12px',\n lineHeight: 1.5,\n});\n\nconst tokenIconCircleStyle = (\n tokens: { border: string },\n hasLogo: boolean,\n): CSSProperties => ({\n width: 36,\n height: 36,\n borderRadius: '50%',\n border: hasLogo ? 'none' : `1.5px solid ${tokens.border}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n overflow: 'hidden',\n});\n\nconst tokenLogoImgStyle: CSSProperties = {\n width: 36,\n height: 36,\n borderRadius: '50%',\n objectFit: 'cover',\n};\n\nconst tokenIconTextStyle = (color: string): CSSProperties => ({\n fontSize: '1rem',\n fontWeight: 700,\n color,\n});\n\nconst tokenNameRowStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 4,\n};\n\nconst tokenSymbolTextStyle = (color: string): CSSProperties => ({\n fontSize: '0.92rem',\n fontWeight: 600,\n color,\n});\n\nconst tokenChainDotStyle = (color: string): CSSProperties => ({\n fontSize: '0.8rem',\n color,\n});\n\nconst tokenChainTextStyle = (color: string): CSSProperties => ({\n fontSize: '0.84rem',\n fontWeight: 400,\n color,\n});\n\nconst tokenBalanceStyle = (color: string): CSSProperties => ({\n fontSize: '0.78rem',\n color,\n});\n\nconst emptyStyle = (color: string): CSSProperties => ({\n fontSize: '0.88rem',\n color,\n textAlign: 'center',\n padding: '32px 0',\n lineHeight: 1.5,\n});\n\n/* ── One-tap card styles ─────────────────────────────────────────── */\n\nconst oneTapCardStyle = (tokens: ThemeTokens, enabled: boolean): CSSProperties => ({\n background: tokens.bgCard,\n border: `1.5px solid ${enabled ? tokens.accent : tokens.border}`,\n borderRadius: tokens.radiusLg,\n padding: '16px',\n marginBottom: 16,\n});\n\nconst oneTapHeaderRowStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n gap: 12,\n};\n\nconst oneTapHeaderLeftStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'flex-start',\n gap: 10,\n flex: 1,\n minWidth: 0,\n};\n\nconst lightningIconStyle: CSSProperties = {\n width: 36,\n height: 36,\n borderRadius: 10,\n background: 'linear-gradient(135deg, #e8f5e9 0%, #fffde7 100%)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n};\n\nconst oneTapTitleStyle = (color: string): CSSProperties => ({\n fontSize: '0.92rem',\n fontWeight: 700,\n color,\n lineHeight: 1.3,\n});\n\nconst oneTapSubtitleStyle = (color: string): CSSProperties => ({\n fontSize: '0.78rem',\n fontWeight: 400,\n color,\n lineHeight: 1.4,\n marginTop: 2,\n});\n\nconst toggleTrackStyle = (on: boolean, tokens: ThemeTokens): CSSProperties => ({\n width: 48,\n height: 28,\n borderRadius: 14,\n background: on ? tokens.accent : tokens.border,\n border: 'none',\n cursor: 'pointer',\n padding: 2,\n display: 'flex',\n alignItems: on ? 'center' : 'center',\n justifyContent: on ? 'flex-end' : 'flex-start',\n transition: 'background 0.2s ease',\n flexShrink: 0,\n});\n\nconst toggleThumbStyle = (on: boolean): CSSProperties => ({\n width: 24,\n height: 24,\n borderRadius: '50%',\n background: '#fff',\n boxShadow: '0 1px 3px rgba(0,0,0,0.2)',\n transition: 'transform 0.2s ease',\n transform: on ? 'translateX(0)' : 'translateX(0)',\n});\n\nconst oneTapBodyStyle = (color: string): CSSProperties => ({\n fontSize: '0.84rem',\n color,\n lineHeight: 1.55,\n margin: '10px 0 0',\n});\n\nconst manageAllowanceBtnStyle = (color: string): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n background: 'none',\n border: 'none',\n padding: 0,\n marginTop: 8,\n fontSize: '0.82rem',\n fontWeight: 500,\n color,\n cursor: 'pointer',\n fontFamily: 'inherit',\n});\n\nconst manageSectionStyle = (tokens: ThemeTokens): CSSProperties => ({\n marginTop: 8,\n padding: '10px 12px',\n background: tokens.bgInput,\n border: `1px solid ${tokens.border}`,\n borderRadius: 12,\n});\n\nconst manageSectionLabelStyle = (color: string): CSSProperties => ({\n fontSize: '0.75rem',\n fontWeight: 500,\n color,\n marginBottom: 6,\n display: 'block',\n});\n\nconst allowanceRowStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n};\n\nconst maxButtonStyle = (tokens: ThemeTokens, isActive: boolean): CSSProperties => ({\n padding: '6px 14px',\n fontSize: '0.78rem',\n fontWeight: 700,\n borderRadius: 999,\n border: `1.5px solid ${isActive ? tokens.accent : tokens.border}`,\n background: isActive ? `${tokens.accent}18` : 'transparent',\n color: isActive ? tokens.accent : tokens.text,\n cursor: 'pointer',\n fontFamily: 'inherit',\n flexShrink: 0,\n});\n\nconst customInputWrapStyle = (tokens: ThemeTokens): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n gap: 2,\n padding: '6px 10px',\n background: tokens.bgCard,\n border: `1px solid ${tokens.border}`,\n borderRadius: 10,\n flex: 1,\n minWidth: 0,\n});\n\nconst customInputPrefixStyle = (color: string): CSSProperties => ({\n fontSize: '0.92rem',\n fontWeight: 700,\n color,\n});\n\nconst customInputFieldStyle = (color: string): CSSProperties => ({\n fontSize: '0.92rem',\n fontWeight: 700,\n color,\n background: 'transparent',\n border: 'none',\n outline: 'none',\n width: '100%',\n fontFamily: 'inherit',\n padding: 0,\n});\n","import type { CSSProperties } from 'react';\nimport { useBlinkConfig } from '../../context';\nimport { ScreenLayout, ScreenHeader, PoweredByFooter, PrimaryButton, IconCircle } from '../ui';\n\nexport interface GuestPreauthSetupCompleteScreenProps {\n onClose: () => void;\n onLogout: () => void;\n}\n\nexport function GuestPreauthSetupCompleteScreen({\n onClose,\n onLogout,\n}: GuestPreauthSetupCompleteScreenProps) {\n const { tokens } = useBlinkConfig();\n\n return (\n <ScreenLayout\n footer={\n <>\n <PrimaryButton onClick={onClose}>Close</PrimaryButton>\n <PoweredByFooter />\n </>\n }\n >\n <ScreenHeader onLogout={onLogout} />\n\n <div style={contentStyle}>\n <IconCircle variant=\"success\" size={64}>\n <svg width=\"32\" height=\"32\" 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 </IconCircle>\n\n <h2 style={headingStyle(tokens.text)}>Setup complete</h2>\n <p style={subtitleStyle(tokens.textSecondary)}>\n Your account is linked and ready. You can close this window.\n </p>\n </div>\n </ScreenLayout>\n );\n}\n\nconst contentStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n textAlign: 'center',\n gap: 12,\n paddingTop: 8,\n};\n\nfunction headingStyle(color: string): CSSProperties {\n return {\n margin: 0,\n fontSize: 22,\n fontWeight: 600,\n color,\n };\n}\n\nfunction subtitleStyle(color: string): CSSProperties {\n return {\n margin: 0,\n fontSize: 15,\n lineHeight: 1.45,\n color,\n maxWidth: 320,\n };\n}\n","import type { CSSProperties } from 'react';\nimport { useBlinkConfig } from '../../context';\nimport { ScreenLayout, ScreenHeader } from '../ui';\nimport { Spinner } from '../Spinner';\n\nexport interface GuestPreauthLinkingScreenProps {\n onLogout: () => void;\n}\n\nexport function GuestPreauthLinkingScreen({ onLogout }: GuestPreauthLinkingScreenProps) {\n const { tokens } = useBlinkConfig();\n\n return (\n <ScreenLayout>\n <ScreenHeader onLogout={onLogout} />\n <div style={contentStyle}>\n <Spinner size={48} />\n <h2 style={headingStyle(tokens.text)}>Setting up your account...</h2>\n <p style={subtitleStyle(tokens.textSecondary)}>\n Linking your wallet to your Blink account. This usually takes a few seconds.\n </p>\n </div>\n </ScreenLayout>\n );\n}\n\nconst contentStyle: CSSProperties = {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n textAlign: 'center',\n padding: '0 24px 32px',\n};\n\nfunction headingStyle(color: string): CSSProperties {\n return {\n margin: '20px 0 8px',\n fontSize: '1.45rem',\n fontWeight: 700,\n letterSpacing: '-0.02em',\n color,\n };\n}\n\nfunction subtitleStyle(color: string): CSSProperties {\n return {\n margin: 0,\n fontSize: '0.9rem',\n lineHeight: 1.5,\n color,\n maxWidth: 280,\n };\n}\n","import type { ScreenName, PaymentPhase } from './resolveScreen';\n\n/** Matches `FlowPhase` in StepProgress — kept here so this module stays `.ts`-only (tests, no TSX loader). */\ntype FlowPhase = 'link' | 'deposit';\n\nconst LINK_SCREENS: ReadonlySet<ScreenName> = new Set([\n 'wallet-picker',\n 'open-wallet',\n 'setup-status',\n 'setup',\n 'confirm-sign',\n]);\n\nconst DEPOSIT_SCREENS: ReadonlySet<ScreenName> = new Set([\n 'deposit',\n 'processing',\n 'success',\n]);\n\nfunction getFlowPhase(screen: ScreenName, phase: PaymentPhase): FlowPhase | null {\n if (LINK_SCREENS.has(screen)) return 'link';\n if (DEPOSIT_SCREENS.has(screen)) return 'deposit';\n if (screen === 'token-picker' || screen === 'select-source' || screen === 'guest-token-picker') {\n return phase.step === 'one-tap-setup' ? 'link' : 'deposit';\n }\n return null;\n}\n\n/** Link/Deposit step header: show the two-step indicator only after Privy auth. */\nexport function resolveHeaderFlowPhase(\n screen: ScreenName,\n phase: PaymentPhase,\n authenticated: boolean,\n): FlowPhase | null {\n const raw = getFlowPhase(screen, phase);\n if (raw === 'link' && !authenticated) return null;\n return raw;\n}\n","import type { Account, SourceType, Transfer, WalletSource } from './types';\nimport type { PaymentState } from './paymentReducer';\nimport type { SelectSourceChainChoice } from './paymentHelpers';\nimport type { PreparedSession } from './hooks/useProviderHandlers';\nimport type { GuestTokenEntry } from './guestTokens';\nimport type { GuestBridgePhase } from './hooks/useGuestTransferHandlers';\nimport type { PreciseMoney } from './types';\nimport type { AuthorizationAction } from './types';\nimport { screenForPhase, type ScreenName, type PaymentPhase } from './resolveScreen';\nimport { handleInlineTokenSelection, tokenOptionsForLinkedAccount } from './depositTokenSelection';\nimport { BlinkLoadingScreen } from './components/BlinkLoadingScreen';\nimport {\n LoginScreen,\n WalletPickerScreen,\n SetupScreen,\n SetupStatusScreen,\n DepositScreen,\n SuccessScreen,\n SelectSourceScreen,\n TransferStatusScreen,\n OpenWalletScreen,\n ConfirmSignScreen,\n TokenPickerScreen,\n GuestTokenPickerScreen,\n GuestPreauthSetupCompleteScreen,\n GuestPreauthLinkingScreen,\n} from './components/screens';\nimport type { TransferPhase, SetupTokenOption } from './components/screens';\nimport { FlowPhaseProvider } from './FlowPhaseContext';\nimport { resolveHeaderFlowPhase } from './stepHeaderFlowPhase';\nimport { getDeviceBiometricUnlockText } from './deviceBiometricUnlockText';\n\n/** When `depositAmount` is unset, One-Tap still enforces this USD floor. */\nconst DEFAULT_MIN_DEPOSIT_USD = 0.25;\n\n/** Login headline after guest payment preauthorization (wallet work done; Privy + passkey next). */\nconst GUEST_PREAUTH_LOGIN_HERO_TITLE = `Register your ${getDeviceBiometricUnlockText()} to complete one tap setup`;\n\nfunction isGuestPreauthLogin(state: PaymentState): boolean {\n return (\n state.isGuestFlow\n && (state.guestPreauthSessionId != null || state.guestPreauthAccountId != null)\n );\n}\n\n// ── Handler contracts ──────────────────────────────────────────────────\n\nexport interface StepHandlers {\n onLoginWithPasskey: () => void;\n onSignupWithPasskey: () => void;\n onPrepareProvider: (providerId: string) => Promise<PreparedSession | null>;\n onSelectProvider: (providerId: string, preparedSession?: PreparedSession) => Promise<void>;\n onContinueConnection: (accountId: string) => void;\n onSelectAccount: (accountId: string) => void;\n onPay: (amount: number, overrides?: { sourceType: SourceType; sourceId: string }) => void;\n onIncreaseLimit: () => void;\n onConfirmSign: () => void;\n onRetryMobileStatus: () => void;\n onBackFromOpenWallet: () => void;\n onLogout: () => void;\n onNewPayment: () => void;\n onSetPhase: (phase: PaymentPhase) => void;\n onSelectSourceChainChange: (chainName: string) => void;\n onSetSelectSourceTokenSymbol: (symbol: string) => void;\n onConfirmSelectSource: () => void;\n onSetupOneTap: (limit: number) => void;\n onSelectToken: () => void;\n onSelectAuthorizedToken: (walletId: string, tokenSymbol: string) => void;\n onAuthorizeToken: (walletId: string, tokenAddress: string, chainId: number, tokenSymbol: string) => void;\n onSelectGuestToken: (entry: GuestTokenEntry) => Promise<void>;\n onConfirmGuestToken: () => Promise<void>;\n onGuestBackFromTokenPicker: () => void;\n onToggleGuestOneTap: (enabled: boolean) => void;\n onSetGuestOneTapLimit: (limit: number) => void;\n /** Leave funding subflow (setup / token picker) back to deposit: restore selection, cancel executor. */\n onBackFromSubflow: () => void;\n onLogin: () => void;\n onGuestSetupCompleteClose: () => void;\n}\n\n// ── Props (grouped view models) ────────────────────────────────────────\n\n/** Flow identity: reducer state, auth, layout. */\nexport interface StepRendererFlowProps {\n state: PaymentState;\n authenticated: boolean;\n passkeyLoading: boolean;\n isDesktop: boolean;\n merchantName?: string;\n onBack?: () => void;\n onDismiss?: () => void;\n depositAmount: number | null;\n}\n\n/** Polling, signing, and auth-executor surface. */\nexport interface StepRendererRemoteProps {\n pollingTransfer: Transfer | null;\n pollingError: string | null;\n guestAccountPollingError: string | null;\n authExecutorError: string | null;\n /** True while `executeSessionById` is running (desktop inline wallet steps). */\n authExecutorExecuting: boolean;\n transferSigningSigning: boolean;\n transferSigningError: string | null;\n pendingSelectSource: AuthorizationAction | null;\n pendingOneTapSetup: AuthorizationAction | null;\n}\n\n/** Values derived from accounts / selection (plus select-source picker data). */\nexport interface StepRendererDerivedProps {\n pendingConnections: Account[];\n depositEligibleAccounts: Account[];\n sourceName: string;\n maxSourceBalance: number;\n tokenCount: number;\n selectedAccount: Account | undefined;\n selectedSource: WalletSource | null;\n selectSourceChoices: SelectSourceChainChoice[];\n selectSourceRecommended: { chainName: string; tokenSymbol: string } | null;\n selectSourceAvailableBalance: number;\n}\n\n/** Ephemeral form and guest-picker UI state. */\nexport interface StepRendererFormProps {\n selectSourceChainName: string;\n selectSourceTokenSymbol: string;\n savingOneTapLimit: boolean;\n guestTokenEntries: GuestTokenEntry[];\n guestLoadingBalances: boolean;\n guestBridgePhase: GuestBridgePhase | null;\n guestPendingEntry: GuestTokenEntry | null;\n guestQuoteFee: PreciseMoney | null;\n guestQuoteLoading: boolean;\n depositQuoteId: string | null;\n depositQuoteFee: PreciseMoney | null;\n depositQuoteLoading: boolean;\n depositQuoteError: string | null;\n}\n\nexport interface StepRendererProps {\n flow: StepRendererFlowProps;\n remote: StepRendererRemoteProps;\n derived: StepRendererDerivedProps;\n forms: StepRendererFormProps;\n handlers: StepHandlers;\n}\n\n// ── Component ──────────────────────────────────────────────────────────\n\nexport function StepRenderer(props: StepRendererProps) {\n const screen = screenForPhase(props.flow.state.phase);\n const flowPhase = resolveHeaderFlowPhase(\n screen,\n props.flow.state.phase,\n props.flow.authenticated,\n );\n\n return (\n <FlowPhaseProvider phase={flowPhase}>\n <StepRendererContent {...props} screen={screen} />\n </FlowPhaseProvider>\n );\n}\n\nfunction StepRendererContent({\n flow,\n remote,\n derived,\n forms,\n handlers,\n screen,\n}: StepRendererProps & { screen: ScreenName }) {\n const {\n state,\n authenticated,\n passkeyLoading,\n isDesktop,\n merchantName,\n onBack,\n onDismiss,\n depositAmount,\n } = flow;\n const {\n pollingTransfer,\n pollingError,\n guestAccountPollingError,\n authExecutorError,\n authExecutorExecuting,\n transferSigningSigning,\n transferSigningError,\n pendingSelectSource,\n } = remote;\n const {\n pendingConnections,\n depositEligibleAccounts,\n sourceName,\n maxSourceBalance,\n tokenCount,\n selectedAccount,\n selectedSource,\n selectSourceChoices,\n selectSourceRecommended,\n selectSourceAvailableBalance,\n } = derived;\n const {\n guestTokenEntries,\n guestLoadingBalances,\n guestBridgePhase,\n guestPendingEntry,\n guestQuoteFee,\n guestQuoteLoading,\n selectSourceChainName,\n selectSourceTokenSymbol,\n savingOneTapLimit,\n } = forms;\n const selectedWallet = selectedAccount?.wallets.find((w) => w.id === state.selectedWalletId);\n const selectedSourceLabel = selectedSource && selectedWallet\n ? `${selectedSource.token.symbol} on ${selectedWallet.chain.name}`\n : undefined;\n\n switch (screen) {\n case 'loading':\n return <BlinkLoadingScreen />;\n\n case 'guest-preauth-linking':\n return <GuestPreauthLinkingScreen onLogout={handlers.onLogout} />;\n\n case 'login':\n return (\n <LoginScreen\n onLoginWithPasskey={handlers.onLoginWithPasskey}\n onSignupWithPasskey={handlers.onSignupWithPasskey}\n loading={passkeyLoading}\n error={state.error}\n onBack={onBack}\n merchantInitials={merchantName ? merchantName.slice(0, 2).toUpperCase() : undefined}\n heroTitle={isGuestPreauthLogin(state) ? GUEST_PREAUTH_LOGIN_HERO_TITLE : undefined}\n preferSignup={isGuestPreauthLogin(state)}\n />\n );\n\n case 'wallet-picker': {\n const isEntryPoint = !state.isGuestFlow && !authenticated;\n return (\n <WalletPickerScreen\n providers={state.providers}\n pendingConnections={pendingConnections}\n loading={state.creatingTransfer}\n useDeeplink={!isDesktop}\n onPrepareProvider={handlers.onPrepareProvider}\n onSelectProvider={handlers.onSelectProvider}\n onContinueConnection={handlers.onContinueConnection}\n onBack={isEntryPoint\n ? onBack\n : () => handlers.onSetPhase({ step: 'deposit' })\n }\n onLogout={authenticated ? handlers.onLogout : undefined}\n onLogin={handlers.onLogin}\n showLoginOption={isEntryPoint}\n isDesktop={isDesktop}\n />\n );\n }\n\n case 'open-wallet': {\n const providerName =\n state.providers.find((p) => p.id === state.selectedProviderId)?.name ?? null;\n return (\n <OpenWalletScreen\n walletName={providerName}\n deeplinkUri={state.deeplinkUri ?? ''}\n loading={\n !isDesktop\n ? (state.creatingTransfer || !state.deeplinkUri)\n : (state.creatingTransfer || authExecutorExecuting)\n }\n useDeeplink={!isDesktop}\n error={state.error || guestAccountPollingError || (!isDesktop ? pollingError : authExecutorError)}\n onRetryStatus={!isDesktop ? handlers.onRetryMobileStatus : undefined}\n onBack={!isDesktop ? handlers.onBackFromOpenWallet : undefined}\n onLogout={handlers.onLogout}\n />\n );\n }\n\n case 'setup-status':\n return (\n <SetupStatusScreen\n complete={false}\n limit={state.oneTapLimit}\n tokensApproved={0}\n merchantName={merchantName}\n onContinue={() => handlers.onSetPhase({ step: 'one-tap-setup', action: null })}\n onLogout={handlers.onLogout}\n error={state.error || authExecutorError}\n />\n );\n\n case 'setup': {\n const selectSourceTokenCount = selectSourceChoices.reduce(\n (sum, chain) => sum + chain.tokens.length, 0,\n );\n const effectiveTokenCount = tokenCount > 0 ? tokenCount : selectSourceTokenCount;\n\n /** Pending SELECT_SOURCE: UI must match executor resolution, not linked-wallet defaults. */\n const setupFromPendingSelectSource = pendingSelectSource != null;\n const setupSelectedTokenSymbol = setupFromPendingSelectSource\n ? (selectSourceTokenSymbol || selectSourceRecommended?.tokenSymbol || '')\n : (selectedSource?.token.symbol ?? selectSourceTokenSymbol);\n const setupSelectedChainName = setupFromPendingSelectSource\n ? (selectSourceChainName || selectSourceRecommended?.chainName || '')\n : (selectedWallet?.chain.name ?? selectSourceChainName);\n\n const effectiveSourceLabel = setupFromPendingSelectSource\n ? (\n setupSelectedTokenSymbol && setupSelectedChainName\n ? `${setupSelectedTokenSymbol} on ${setupSelectedChainName}`\n : undefined\n )\n : (\n selectedSourceLabel\n ?? (selectSourceChainName && selectSourceTokenSymbol\n ? `${selectSourceTokenSymbol} on ${selectSourceChainName}`\n : undefined)\n );\n\n const setupTokenOptions: SetupTokenOption[] = selectedAccount\n ? tokenOptionsForLinkedAccount(selectedAccount, state.chains)\n : selectSourceChoices.flatMap((chain) =>\n chain.tokens.map((t) => ({\n symbol: t.tokenSymbol,\n chainName: chain.chainName,\n balance: t.balance,\n })),\n );\n\n const handleSetupSelectToken = (symbol: string, chainName: string, walletId?: string) => {\n handleInlineTokenSelection(handlers, state.chains, selectedAccount, symbol, chainName, walletId);\n if (pendingSelectSource) {\n handlers.onSelectSourceChainChange(chainName);\n handlers.onSetSelectSourceTokenSymbol(symbol);\n }\n };\n\n return (\n <SetupScreen\n availableBalance={selectedSource\n ? selectedSource.balance.available.amount\n : setupFromPendingSelectSource\n ? selectSourceAvailableBalance\n : selectSourceAvailableBalance > 0\n ? selectSourceAvailableBalance\n : selectedAccount\n ? selectedAccount.wallets.reduce((sum, w) => sum + w.balance.available.amount, 0)\n : maxSourceBalance}\n tokenCount={effectiveTokenCount}\n sourceName={sourceName}\n onSetupOneTap={handlers.onSetupOneTap}\n onBack={handlers.onBackFromSubflow}\n onLogout={handlers.onLogout}\n onAdvanced={handlers.onSelectToken}\n selectedSourceLabel={effectiveSourceLabel}\n loading={savingOneTapLimit}\n error={state.error}\n selectedTokenSymbol={setupSelectedTokenSymbol}\n selectedChainName={setupSelectedChainName}\n tokenOptions={setupTokenOptions}\n onSelectToken={handleSetupSelectToken}\n />\n );\n }\n\n case 'confirm-sign': {\n const providerName =\n state.providers.find((p) => p.id === state.selectedProviderId)?.name ?? null;\n return (\n <ConfirmSignScreen\n walletName={providerName}\n signing={transferSigningSigning}\n error={state.error || transferSigningError}\n onSign={handlers.onConfirmSign}\n onLogout={handlers.onLogout}\n />\n );\n }\n\n case 'deposit': {\n const parsedAmt = depositAmount != null ? depositAmount : 5;\n const minDepositFloor = depositAmount != null ? depositAmount : DEFAULT_MIN_DEPOSIT_USD;\n const depositTokenOptions = tokenOptionsForLinkedAccount(selectedAccount, state.chains);\n return (\n <DepositScreen\n merchantName={merchantName}\n availableBalance={selectedSource\n ? selectedSource.balance.available.amount\n : selectedAccount\n ? selectedAccount.wallets.reduce((sum, w) => sum + w.balance.available.amount, 0)\n : maxSourceBalance}\n remainingLimit={\n selectedSource != null\n ? (selectedSource.remainingAllowance ?? null)\n : (selectedAccount?.remainingAllowance ?? null)\n }\n tokenCount={tokenCount}\n initialAmount={parsedAmt}\n quoteFee={forms.depositQuoteFee}\n quoteLoading={forms.depositQuoteLoading}\n quoteError={forms.depositQuoteError}\n processing={state.creatingTransfer}\n error={state.error}\n onDeposit={handlers.onPay}\n onSwitchWallet={() => handlers.onSetPhase({ step: 'wallet-picker', reason: 'switch' })}\n onBack={onBack ?? (() => handlers.onLogout())}\n onLogout={handlers.onLogout}\n onIncreaseLimit={handlers.onIncreaseLimit}\n increasingLimit={state.increasingLimit}\n accounts={depositEligibleAccounts}\n selectedAccountId={state.selectedAccountId}\n onSelectAccount={handlers.onSelectAccount}\n onAuthorizeAccount={handlers.onContinueConnection}\n onAddProvider={() => handlers.onSetPhase({ step: 'wallet-picker', reason: 'switch' })}\n onSelectToken={handlers.onSelectToken}\n tokenOptions={depositTokenOptions}\n onPickToken={(symbol, chainName, walletId) => {\n handleInlineTokenSelection(handlers, state.chains, selectedAccount, symbol, chainName, walletId);\n }}\n selectedSourceLabel={selectedSourceLabel}\n selectedTokenSymbol={selectedSource?.token.symbol}\n selectedChainName={selectedWallet?.chain.name}\n minDepositFloor={minDepositFloor}\n />\n );\n }\n\n case 'token-picker': {\n if (!selectedAccount) {\n // Guest desktop preauth (no Privy) never loads `accounts`, so `selectedAccount` is\n // undefined — use session action metadata instead of TokenPickerScreen (account wallets).\n if (pendingSelectSource && selectSourceChoices.length > 0) {\n return (\n <SelectSourceScreen\n choices={selectSourceChoices}\n selectedChainName={selectSourceChainName}\n selectedTokenSymbol={selectSourceTokenSymbol}\n recommended={selectSourceRecommended}\n onChainChange={handlers.onSelectSourceChainChange}\n onTokenChange={handlers.onSetSelectSourceTokenSymbol}\n onConfirm={\n isDesktop\n ? () => handlers.onSetPhase({\n step: 'select-source',\n action: pendingSelectSource,\n isDesktop,\n })\n : handlers.onConfirmSelectSource\n }\n confirmLabel={isDesktop ? 'Done' : undefined}\n onBack={() => handlers.onSetPhase({\n step: 'select-source',\n action: pendingSelectSource,\n isDesktop,\n })}\n onLogout={handlers.onLogout}\n />\n );\n }\n return <BlinkLoadingScreen />;\n }\n return (\n <TokenPickerScreen\n account={selectedAccount}\n chains={state.chains}\n onSelectAuthorized={handlers.onSelectAuthorizedToken}\n onAuthorizeToken={handlers.onAuthorizeToken}\n onBack={handlers.onBackFromSubflow}\n onLogout={handlers.onLogout}\n depositAmount={depositAmount ?? undefined}\n selectedTokenSymbol={selectedSource?.token.symbol}\n selectedWalletId={state.selectedWalletId ?? undefined}\n />\n );\n }\n\n case 'guest-token-picker': {\n const guestProviderName =\n state.providers.find((p) => p.id === state.selectedProviderId)?.name ?? undefined;\n return (\n <GuestTokenPickerScreen\n entries={guestTokenEntries}\n loading={guestLoadingBalances}\n bridgePhase={guestBridgePhase}\n depositAmount={depositAmount ?? undefined}\n error={state.error}\n pendingEntry={forms.guestPendingEntry}\n quoteFee={forms.guestQuoteFee}\n quoteLoading={forms.guestQuoteLoading}\n onSelect={handlers.onSelectGuestToken}\n onConfirm={handlers.onConfirmGuestToken}\n onBack={handlers.onGuestBackFromTokenPicker}\n providerName={guestProviderName}\n oneTapEnabled={state.guestOneTapOptIn}\n onToggleOneTap={handlers.onToggleGuestOneTap}\n oneTapLimit={state.guestOneTapLimit}\n onSetOneTapLimit={handlers.onSetGuestOneTapLimit}\n />\n );\n }\n\n case 'guest-setup-complete':\n return (\n <GuestPreauthSetupCompleteScreen\n onClose={handlers.onGuestSetupCompleteClose}\n onLogout={handlers.onLogout}\n />\n );\n\n case 'processing': {\n const polledStatus = pollingTransfer?.status;\n const transferPhase: TransferPhase = state.creatingTransfer\n ? 'creating'\n : polledStatus === 'SENDING' || polledStatus === 'SENT'\n ? 'sent'\n : 'verifying';\n\n return (\n <TransferStatusScreen\n phase={transferPhase}\n error={state.error || authExecutorError || transferSigningError || pollingError}\n onLogout={handlers.onLogout}\n />\n );\n }\n\n case 'select-source':\n return (\n <SelectSourceScreen\n choices={selectSourceChoices}\n selectedChainName={selectSourceChainName}\n selectedTokenSymbol={selectSourceTokenSymbol}\n recommended={selectSourceRecommended}\n onChainChange={handlers.onSelectSourceChainChange}\n onTokenChange={handlers.onSetSelectSourceTokenSymbol}\n onConfirm={handlers.onConfirmSelectSource}\n onLogout={handlers.onLogout}\n />\n );\n\n case 'success': {\n const succeeded = state.transfer?.status === 'COMPLETED';\n const displayAmount = state.transfer?.amount?.amount ?? 0;\n const displayCurrency = state.transfer?.amount?.currency ?? 'USD';\n\n return (\n <SuccessScreen\n amount={displayAmount}\n currency={displayCurrency}\n succeeded={succeeded}\n error={state.error}\n merchantName={merchantName}\n sourceName={sourceName}\n remainingLimit={succeeded ? (() => {\n const limit = selectedSource != null\n ? (selectedSource.remainingAllowance ?? null)\n : (selectedAccount?.remainingAllowance ?? null);\n if (limit == null) return null;\n return limit > displayAmount ? limit - displayAmount : 0;\n })() : undefined}\n onDone={onDismiss ?? handlers.onNewPayment}\n onLogout={authenticated ? handlers.onLogout : undefined}\n />\n );\n }\n }\n}\n","// Safe Sentry wrapper for optional @sentry/react peer dependency.\n// Reports errors when Sentry is installed and initialized by the host app;\n// silently no-ops otherwise.\n\ntype SentryLike = { captureException: (error: unknown) => string };\n\nlet _mod: SentryLike | null | undefined;\n\nexport function captureException(error: unknown): void {\n if (_mod === null) return;\n\n if (_mod) {\n _mod.captureException(error);\n return;\n }\n\n import('@sentry/react')\n .then((m) => {\n _mod = m;\n m.captureException(error);\n })\n .catch(() => {\n _mod = null;\n });\n}\n","import { Component, type ErrorInfo, type ReactNode } from 'react';\nimport { captureException } from '../sentry';\n\ninterface Props {\n onReset: () => void;\n children: ReactNode;\n}\n\ninterface State {\n hasError: boolean;\n}\n\nexport class PaymentErrorBoundary extends Component<Props, State> {\n constructor(props: Props) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError(): State {\n return { hasError: true };\n }\n\n componentDidCatch(error: Error, _info: ErrorInfo) {\n captureException(error);\n }\n\n private handleReset = () => {\n this.setState({ hasError: false });\n this.props.onReset();\n };\n\n render() {\n if (!this.state.hasError) {\n return this.props.children;\n }\n\n return (\n <div style={containerStyle}>\n <div style={iconStyle}>\n <svg width=\"48\" height=\"48\" viewBox=\"0 0 24 24\" fill=\"none\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"#ef4444\" strokeWidth=\"1.5\" />\n <path d=\"M12 8v5\" stroke=\"#ef4444\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n <circle cx=\"12\" cy=\"16\" r=\"0.75\" fill=\"#ef4444\" />\n </svg>\n </div>\n <h2 style={headingStyle}>Something went wrong</h2>\n <p style={messageStyle}>\n An unexpected error occurred. Please try again.\n </p>\n <button type=\"button\" onClick={this.handleReset} style={buttonStyle}>\n Try again\n </button>\n </div>\n );\n }\n}\n\nconst containerStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n textAlign: 'center',\n padding: '48px 24px',\n minHeight: '100%',\n maxWidth: 420,\n margin: '0 auto',\n};\n\nconst iconStyle: React.CSSProperties = {\n marginBottom: 20,\n};\n\nconst headingStyle: React.CSSProperties = {\n fontSize: '1.25rem',\n fontWeight: 700,\n color: '#1a1a1a',\n margin: '0 0 8px',\n};\n\nconst messageStyle: React.CSSProperties = {\n fontSize: '0.9rem',\n color: '#666',\n margin: '0 0 28px',\n lineHeight: 1.5,\n};\n\nconst buttonStyle: React.CSSProperties = {\n background: '#1a1a1a',\n color: '#fff',\n border: 'none',\n borderRadius: 12,\n padding: '12px 32px',\n fontSize: '0.95rem',\n fontWeight: 600,\n fontFamily: 'inherit',\n cursor: 'pointer',\n};\n","import { useMemo } from 'react';\n\nimport type { Account, WalletSource } from '../types.ts';\nimport type { PaymentState } from '../paymentReducer.ts';\nimport { deriveSourceTypeAndId } from '../paymentReducer.ts';\nimport { getDepositEligibleAccounts } from '../paymentHelpers.ts';\n\nexport interface DerivedState {\n sourceType: ReturnType<typeof deriveSourceTypeAndId>['sourceType'];\n sourceId: string;\n selectedAccount: Account | undefined;\n selectedWallet: Account['wallets'][number] | undefined;\n selectedSource: WalletSource | null;\n sourceName: string;\n pendingConnections: Account[];\n depositEligibleAccounts: Account[];\n maxSourceBalance: number;\n tokenCount: number;\n}\n\nfunction selectedSourceForWallet(\n selectedWallet: Account['wallets'][number] | undefined,\n selectedTokenSymbol: string | null,\n): WalletSource | null {\n if (!selectedWallet) return null;\n if (selectedTokenSymbol) {\n return selectedWallet.sources.find((s) => s.token.symbol === selectedTokenSymbol) ?? null;\n }\n return (\n selectedWallet.sources.find((s) => s.token.status === 'AUTHORIZED')\n ?? selectedWallet.sources[0]\n ?? null\n );\n}\n\n/** Pure derivation from payment state; used by `useDerivedState` and unit tests. */\nexport function computeDerivedState(state: PaymentState): DerivedState {\n const { sourceType, sourceId } = deriveSourceTypeAndId(state);\n\n const selectedAccount = state.accounts.find((a) => a.id === state.selectedAccountId);\n const selectedWallet = selectedAccount?.wallets.find(\n (w) => w.id === state.selectedWalletId,\n );\n\n const selectedSource = selectedSourceForWallet(selectedWallet, state.selectedTokenSymbol);\n\n const sourceName = selectedAccount?.name ?? selectedWallet?.chain.name ?? 'Wallet';\n\n const pendingConnections = state.accounts.filter(\n (a) => a.wallets.length > 0 && !a.wallets.some((w) => w.status === 'ACTIVE'),\n );\n\n const depositEligibleAccounts = getDepositEligibleAccounts(state.accounts);\n\n let maxSourceBalance = 0;\n for (const acct of state.accounts) {\n for (const wallet of acct.wallets) {\n for (const source of wallet.sources) {\n if (source.balance.available.amount > maxSourceBalance) {\n maxSourceBalance = source.balance.available.amount;\n }\n }\n }\n }\n\n let tokenCount = 0;\n for (const acct of state.accounts) {\n for (const wallet of acct.wallets) {\n tokenCount += wallet.sources.filter((s) => s.balance.available.amount > 0).length;\n }\n }\n\n return {\n sourceType,\n sourceId,\n selectedAccount,\n selectedWallet,\n selectedSource,\n sourceName,\n pendingConnections,\n depositEligibleAccounts,\n maxSourceBalance,\n tokenCount,\n };\n}\n\nexport function useDerivedState(state: PaymentState): DerivedState {\n return useMemo(() => computeDerivedState(state), [state]);\n}\n","import { useCallback, useState, type Dispatch, type MutableRefObject } from 'react';\nimport { useLoginWithPasskey, useSignupWithPasskey, usePrivy, type User } from '@privy-io/react-auth';\n\nimport type { PaymentAction } from '../paymentReducer';\nimport * as api from '../api';\nimport { captureException } from '../sentry';\nimport { ACTIVE_CREDENTIAL_STORAGE_KEY, persistPopupAuth } from '../paymentHelpers';\nimport {\n shouldUsePasskeySignupPopup,\n shouldUsePasskeyLoginPopup,\n signupWithPasskeyViaPopup,\n loginWithPasskeyViaPopup,\n isInCrossOriginIframe,\n type PasskeySignupPopupResult,\n} from '../passkey-delegation';\nimport { resolvePasskeyRpId } from './passkeyPublic';\n\ntype PrivyPasskeyStatus =\n | 'initial'\n | 'generating-challenge'\n | 'awaiting-passkey'\n | 'submitting-response'\n | 'done'\n | 'error';\n\nexport type PopupAuth = PasskeySignupPopupResult;\n\nexport interface AuthHandlersResult {\n passkeyLoginStatus: PrivyPasskeyStatus;\n passkeySignupStatus: PrivyPasskeyStatus;\n passkeySignupPopupActive: boolean;\n passkeyAuthError: string | null;\n handleLoginWithPasskey: () => void;\n handleSignupWithPasskey: () => void;\n}\n\nexport function extractPasskeyCredential(\n user: User | null,\n): { credentialId: string; publicKey: string } | null {\n if (!user?.linkedAccounts) return null;\n const passkey = user.linkedAccounts.find(\n (acct): acct is Extract<typeof acct, { type: 'passkey' }> => acct.type === 'passkey',\n );\n if (!passkey || !passkey.credentialId) return null;\n return {\n credentialId: passkey.credentialId,\n publicKey: passkey.publicKey ?? '',\n };\n}\n\nexport function useAuthHandlers(\n dispatch: Dispatch<PaymentAction>,\n apiBaseUrl: string,\n popupAuthRef: MutableRefObject<PopupAuth | null>,\n): AuthHandlersResult {\n const { getAccessToken, user } = usePrivy();\n const [popupActive, setPopupActive] = useState(false);\n\n const registerCredentialOnBackend = useCallback(async (\n credentialId: string,\n publicKey: string,\n ) => {\n dispatch({ type: 'SET_ERROR', error: null });\n try {\n const token = await getAccessToken();\n if (!token) throw new Error('Not authenticated');\n\n let alreadyRegistered = false;\n try {\n const { config } = await api.fetchUserConfig(apiBaseUrl, token);\n const allPasskeys = config.passkeys ?? (config.passkey ? [config.passkey] : []);\n alreadyRegistered = allPasskeys.some((p) => p.credentialId === credentialId);\n } catch { /* proceed to register */ }\n\n if (!alreadyRegistered) {\n await api.registerPasskey(apiBaseUrl, token, credentialId, publicKey);\n }\n\n dispatch({ type: 'PASSKEY_ACTIVATED', credentialId, publicKey });\n window.localStorage.setItem(ACTIVE_CREDENTIAL_STORAGE_KEY, credentialId);\n\n console.info('[blink-sdk] Passkey registered/activated (Privy)', {\n registrationRpId: resolvePasskeyRpId(),\n hostname: typeof window !== 'undefined' ? window.location.hostname : 'N/A',\n origin: typeof window !== 'undefined' ? window.location.origin : 'N/A',\n credentialId,\n });\n\n api.reportPasskeyActivity(apiBaseUrl, token, credentialId).catch(() => {});\n } catch (err) {\n captureException(err);\n dispatch({\n type: 'SET_ERROR',\n error: err instanceof Error ? err.message : 'Failed to register passkey',\n });\n }\n }, [getAccessToken, apiBaseUrl, dispatch]);\n\n const handleAuthComplete = useCallback(async (privyUser?: User) => {\n const credential = extractPasskeyCredential(privyUser ?? user);\n if (credential) {\n await registerCredentialOnBackend(credential.credentialId, credential.publicKey);\n }\n }, [user, registerCredentialOnBackend]);\n\n const handlePopupLogin = useCallback(async () => {\n setPopupActive(true);\n dispatch({ type: 'SET_ERROR', error: null });\n\n try {\n const result = await loginWithPasskeyViaPopup();\n if (!result) {\n dispatch({\n type: 'SET_ERROR',\n error: 'Login was not completed. Please try again.',\n });\n return;\n }\n\n popupAuthRef.current = result;\n persistPopupAuth(result);\n dispatch({ type: 'PASSKEY_CONFIG_LOADED', knownIds: [result.credentialId] });\n dispatch({ type: 'PASSKEY_ACTIVATED', credentialId: result.credentialId, publicKey: result.publicKey });\n dispatch({ type: 'SYNC_PRIVY_SESSION', ready: true, authenticated: true });\n window.localStorage.setItem(ACTIVE_CREDENTIAL_STORAGE_KEY, result.credentialId);\n } catch (err) {\n captureException(err);\n dispatch({\n type: 'SET_ERROR',\n error: err instanceof Error ? err.message : 'Passkey login failed. Please try again.',\n });\n } finally {\n setPopupActive(false);\n }\n }, [dispatch, popupAuthRef]);\n\n const { loginWithPasskey, state: loginState } = useLoginWithPasskey({\n onComplete: (params) => { handleAuthComplete(params.user); },\n onError: (error) => {\n captureException(new Error(String(error)));\n\n if (isInCrossOriginIframe()) {\n handlePopupLogin();\n return;\n }\n\n dispatch({\n type: 'SET_ERROR',\n error: typeof error === 'string' ? error : 'Passkey login failed. Try again or create an account.',\n });\n },\n });\n\n const handlePopupSignup = useCallback(async () => {\n setPopupActive(true);\n dispatch({ type: 'SET_ERROR', error: null });\n\n try {\n const result = await signupWithPasskeyViaPopup();\n if (!result) {\n dispatch({\n type: 'SET_ERROR',\n error: 'Signup was not completed. Please try again.',\n });\n return;\n }\n\n popupAuthRef.current = result;\n persistPopupAuth(result);\n dispatch({ type: 'PASSKEY_CONFIG_LOADED', knownIds: [result.credentialId] });\n dispatch({ type: 'PASSKEY_ACTIVATED', credentialId: result.credentialId, publicKey: result.publicKey });\n dispatch({ type: 'SYNC_PRIVY_SESSION', ready: true, authenticated: true });\n window.localStorage.setItem(ACTIVE_CREDENTIAL_STORAGE_KEY, result.credentialId);\n } catch (err) {\n captureException(err);\n dispatch({\n type: 'SET_ERROR',\n error: err instanceof Error ? err.message : 'Passkey signup failed. Please try again.',\n });\n } finally {\n setPopupActive(false);\n }\n }, [dispatch, popupAuthRef]);\n\n const { signupWithPasskey, state: signupState } = useSignupWithPasskey({\n onComplete: (params) => { handleAuthComplete(params.user); },\n onError: (error) => {\n captureException(new Error(String(error)));\n\n // Reactive fallback: if inline signup failed and we're in a cross-origin\n // iframe, try the popup approach instead of showing a generic error.\n if (isInCrossOriginIframe()) {\n handlePopupSignup();\n return;\n }\n\n dispatch({\n type: 'SET_ERROR',\n error: typeof error === 'string' ? error : 'Passkey signup failed. Please try again.',\n });\n },\n });\n\n const passkeyAuthError =\n loginState.status === 'error'\n ? (loginState.error?.message ?? 'Passkey login failed.')\n : signupState.status === 'error'\n ? (signupState.error?.message ?? 'Passkey signup failed.')\n : null;\n\n const handleLoginWithPasskey = useCallback(() => {\n dispatch({ type: 'SET_ERROR', error: null });\n\n if (shouldUsePasskeyLoginPopup()) {\n handlePopupLogin();\n return;\n }\n\n loginWithPasskey();\n }, [loginWithPasskey, dispatch, handlePopupLogin]);\n\n const handleSignupWithPasskey = useCallback(() => {\n dispatch({ type: 'SET_ERROR', error: null });\n\n // Proactive: on Safari in a cross-origin iframe, skip inline signup\n // entirely and go straight to the popup.\n if (shouldUsePasskeySignupPopup()) {\n handlePopupSignup();\n return;\n }\n\n signupWithPasskey();\n }, [signupWithPasskey, dispatch, handlePopupSignup]);\n\n return {\n passkeyLoginStatus: loginState.status as PrivyPasskeyStatus,\n passkeySignupStatus: signupState.status as PrivyPasskeyStatus,\n passkeySignupPopupActive: popupActive,\n passkeyAuthError,\n handleLoginWithPasskey,\n handleSignupWithPasskey,\n };\n}\n","import { useCallback, useRef, type Dispatch, type MutableRefObject } from 'react';\nimport { usePrivy } from '@privy-io/react-auth';\n\nimport type { PaymentAction } from '../paymentReducer';\nimport * as api from '../api';\nimport {\n ACTIVE_CREDENTIAL_STORAGE_KEY,\n} from '../paymentHelpers';\n\nexport interface PasskeyHandlersResult {\n activateExistingCredential: (credentialId: string) => Promise<void>;\n completePasskeyRegistration: (credentialId: string, publicKey: string) => Promise<void>;\n checkingPasskeyRef: MutableRefObject<boolean>;\n}\n\nexport function usePasskeyHandlers(\n dispatch: Dispatch<PaymentAction>,\n apiBaseUrl: string,\n): PasskeyHandlersResult {\n const { getAccessToken } = usePrivy();\n const checkingPasskeyRef = useRef(false);\n\n const activateExistingCredential = useCallback(async (credentialId: string) => {\n const token = await getAccessToken();\n let publicKey: string | undefined;\n if (token) {\n try {\n const { config } = await api.fetchUserConfig(apiBaseUrl, token);\n const allPasskeys = config.passkeys ?? (config.passkey ? [config.passkey] : []);\n publicKey = allPasskeys.find((p) => p.credentialId === credentialId)?.publicKey;\n } catch { /* reportPasskey below still runs */ }\n }\n dispatch({ type: 'PASSKEY_ACTIVATED', credentialId, publicKey });\n window.localStorage.setItem(ACTIVE_CREDENTIAL_STORAGE_KEY, credentialId);\n\n if (token) {\n api.reportPasskeyActivity(apiBaseUrl, token, credentialId).catch(() => {});\n }\n }, [getAccessToken, apiBaseUrl, dispatch]);\n\n const completePasskeyRegistration = useCallback(async (\n credentialId: string,\n publicKey: string,\n ) => {\n const token = await getAccessToken();\n if (!token) throw new Error('Not authenticated');\n await api.registerPasskey(apiBaseUrl, token, credentialId, publicKey);\n dispatch({ type: 'PASSKEY_ACTIVATED', credentialId, publicKey });\n window.localStorage.setItem(ACTIVE_CREDENTIAL_STORAGE_KEY, credentialId);\n }, [getAccessToken, apiBaseUrl, dispatch]);\n\n return {\n activateExistingCredential,\n completePasskeyRegistration,\n checkingPasskeyRef,\n };\n}\n","import { useCallback, useRef, type Dispatch } from 'react';\n\nimport type { Destination, SourceType, Transfer } from '../types';\nimport type { PaymentAction } from '../paymentReducer';\nimport type { UseTransferPollingResult, UseTransferSigningResult } from '../hooks';\nimport * as api from '../api';\nimport { captureException } from '../sentry';\nimport {\n effectiveMinTransferAmountUsd,\n getPreferredDepositWallet,\n resolveDepositSelectionAfterRefresh,\n clearMobileFlowState,\n} from '../paymentHelpers';\n\nexport interface TransferHandlersDeps {\n dispatch: Dispatch<PaymentAction>;\n getAccessToken: () => Promise<string | null>;\n apiBaseUrl: string;\n depositAmount: number | null;\n destination: Destination;\n idempotencyKey?: string;\n merchantAuthorization?: api.CreateTransferParams['merchantAuthorization'];\n onComplete?: (transfer: Transfer) => void;\n onError?: (error: string) => void;\n polling: UseTransferPollingResult;\n transferSigning: UseTransferSigningResult;\n sourceType: SourceType;\n sourceId: string;\n sourceTokenAddress: string | undefined;\n activeCredentialId: string | null;\n selectedAccountId: string | null;\n selectedWalletId: string | null;\n selectedTokenSymbol: string | null;\n quoteId?: string | null;\n transfer: Transfer | null;\n accounts: import('../types').Account[];\n}\n\nexport interface TransferHandlersResult {\n reloadAccounts: () => Promise<void>;\n handlePay: (amount: number, overrides?: { sourceType: SourceType; sourceId: string }) => Promise<void>;\n handleConfirmSign: () => Promise<void>;\n processingStartedAtRef: React.MutableRefObject<number | null>;\n pollingTransferIdRef: React.MutableRefObject<string | null>;\n}\n\nexport function useTransferHandlers(deps: TransferHandlersDeps): TransferHandlersResult {\n const {\n dispatch, getAccessToken, apiBaseUrl, depositAmount, destination,\n idempotencyKey, merchantAuthorization, onComplete, onError,\n polling, transferSigning, sourceType, sourceId, sourceTokenAddress,\n activeCredentialId, selectedAccountId, selectedWalletId, selectedTokenSymbol,\n quoteId, transfer, accounts,\n } = deps;\n\n const processingStartedAtRef = useRef<number | null>(null);\n const pollingTransferIdRef = useRef<string | null>(null);\n\n const reloadAccounts = useCallback(async () => {\n const token = await getAccessToken();\n if (!token || !activeCredentialId) return;\n const [accts, prov] = await Promise.all([\n api.fetchAccounts(apiBaseUrl, token, activeCredentialId),\n api.fetchProviders(apiBaseUrl, token),\n ]);\n const parsedAmt = depositAmount != null ? depositAmount : 0;\n const { defaults, resetSelectedTokenSymbol } = resolveDepositSelectionAfterRefresh(\n accts,\n parsedAmt,\n {\n selectedAccountId,\n selectedWalletId,\n selectedTokenSymbol,\n },\n );\n dispatch({\n type: 'ACCOUNTS_RELOADED',\n accounts: accts,\n providers: prov,\n defaults,\n resetSelectedTokenSymbol,\n });\n }, [\n getAccessToken, activeCredentialId, selectedAccountId, selectedWalletId, selectedTokenSymbol,\n apiBaseUrl, depositAmount, dispatch,\n ]);\n\n const handlePay = useCallback(async (\n payAmount: number,\n sourceOverrides?: { sourceType: SourceType; sourceId: string },\n ) => {\n const minUsd = effectiveMinTransferAmountUsd(depositAmount);\n if (isNaN(payAmount) || payAmount < minUsd) {\n dispatch({ type: 'SET_ERROR', error: `Minimum amount is $${minUsd.toFixed(2)}.` });\n return;\n }\n if (!sourceOverrides?.sourceId && !sourceId) {\n dispatch({ type: 'SET_ERROR', error: 'No account or provider selected.' });\n return;\n }\n if (!activeCredentialId) {\n dispatch({ type: 'SET_ERROR', error: 'Create or verify a passkey on this device before continuing.' });\n return;\n }\n\n dispatch({ type: 'PAY_STARTED' });\n processingStartedAtRef.current = Date.now();\n\n try {\n if (transfer?.status === 'AUTHORIZED') {\n const signedTransfer = await transferSigning.signTransfer(transfer.id);\n dispatch({ type: 'TRANSFER_SIGNED', transfer: signedTransfer });\n polling.startPolling(transfer.id);\n return;\n }\n\n const token = await getAccessToken();\n if (!token) throw new Error('Not authenticated');\n\n let effectiveSourceType = sourceOverrides?.sourceType ?? sourceType;\n let effectiveSourceId = sourceOverrides?.sourceId ?? sourceId;\n\n if (effectiveSourceType === 'accountId') {\n const acct = accounts.find((a) => a.id === effectiveSourceId);\n const preferredWallet = acct\n ? getPreferredDepositWallet(acct, payAmount)\n : null;\n if (preferredWallet?.status === 'ACTIVE') {\n effectiveSourceType = 'walletId';\n effectiveSourceId = preferredWallet.id;\n }\n }\n\n const t = await api.createTransfer(apiBaseUrl, token, {\n id: idempotencyKey,\n credentialId: activeCredentialId,\n merchantAuthorization,\n sourceType: effectiveSourceType,\n sourceId: effectiveSourceId,\n sourceTokenAddress,\n destination,\n amount: payAmount,\n ...(quoteId ? { quoteId } : {}),\n });\n dispatch({ type: 'TRANSFER_CREATED', transfer: t });\n\n if (t.status === 'COMPLETED') {\n dispatch({ type: 'TRANSFER_COMPLETED', transfer: t });\n onComplete?.(t);\n return;\n }\n if (t.status === 'FAILED') {\n dispatch({ type: 'TRANSFER_FAILED', transfer: t, error: 'Transfer failed.' });\n return;\n }\n\n const signedTransfer = await transferSigning.signTransfer(t.id);\n dispatch({ type: 'TRANSFER_SIGNED', transfer: signedTransfer });\n polling.startPolling(t.id);\n } catch (err) {\n captureException(err);\n const msg = err instanceof Error ? err.message : 'Transfer failed';\n dispatch({ type: 'PAY_ERROR', error: msg });\n onError?.(msg);\n } finally {\n dispatch({ type: 'PAY_ENDED' });\n }\n }, [\n sourceId, sourceType, sourceTokenAddress, activeCredentialId, transfer,\n accounts, destination, apiBaseUrl, quoteId,\n getAccessToken, transferSigning, polling, onError, onComplete,\n idempotencyKey, merchantAuthorization, dispatch, depositAmount,\n ]);\n\n const handleConfirmSign = useCallback(async () => {\n const t = transfer ?? polling.transfer;\n if (!t) return;\n try {\n const signedTransfer = await transferSigning.signTransfer(t.id);\n clearMobileFlowState();\n dispatch({ type: 'CONFIRM_SIGN_SUCCESS', transfer: signedTransfer });\n polling.startPolling(t.id);\n } catch (err) {\n captureException(err);\n const msg = err instanceof Error ? err.message : 'Failed to sign transfer';\n dispatch({ type: 'SET_ERROR', error: msg });\n onError?.(msg);\n }\n }, [transfer, polling.transfer, polling.startPolling, transferSigning, onError, dispatch]);\n\n return {\n reloadAccounts,\n handlePay,\n handleConfirmSign,\n processingStartedAtRef,\n pollingTransferIdRef,\n };\n}\n","import { useCallback, useMemo, useRef, useState, type Dispatch } from 'react';\n\nimport type { AuthorizationAction, SourceOption } from '../types';\nimport type { PaymentAction } from '../paymentReducer';\nimport type { UseAuthorizationExecutorResult } from '../hooks';\nimport {\n buildSelectSourceChoices,\n resolveSelectSourceAvailableBalance,\n type SelectSourceChainChoice,\n} from '../paymentHelpers';\n\nexport interface SourceSelectionHandlersOptions {\n /** Guest post-pay account linking: after confirming SELECT_SOURCE, dispatch `REQUEST_LOGIN`. */\n guestPreauthSessionId?: string | null;\n isGuestFlow?: boolean;\n guestPreauthorizing?: boolean;\n isDesktop?: boolean;\n}\n\nexport interface SourceSelectionHandlersResult {\n selectSourceChainName: string;\n selectSourceTokenSymbol: string;\n setSelectSourceChainName: (value: string) => void;\n setSelectSourceTokenSymbol: (value: string) => void;\n selectSourceChoices: SelectSourceChainChoice[];\n selectSourceRecommended: { chainName: string; tokenSymbol: string } | null;\n selectSourceAvailableBalance: number;\n handleSelectSourceChainChange: (chainName: string) => void;\n handleConfirmSelectSource: () => void;\n pendingSelectSourceAction: AuthorizationAction | null;\n initializedSelectSourceActionRef: React.MutableRefObject<string | null>;\n}\n\nexport function useSourceSelectionHandlers(\n dispatch: Dispatch<PaymentAction>,\n authExecutor: UseAuthorizationExecutorResult,\n options?: SourceSelectionHandlersOptions,\n): SourceSelectionHandlersResult {\n const [selectSourceChainName, setSelectSourceChainName] = useState('');\n const [selectSourceTokenSymbol, setSelectSourceTokenSymbol] = useState('');\n const initializedSelectSourceActionRef = useRef<string | null>(null);\n\n const pendingSelectSourceAction = authExecutor.pendingSelectSource;\n\n const selectSourceChoices = useMemo<SelectSourceChainChoice[]>(() => {\n if (!pendingSelectSourceAction) return [];\n const options = (pendingSelectSourceAction.metadata?.options ?? []) as SourceOption[];\n return buildSelectSourceChoices(options);\n }, [pendingSelectSourceAction]);\n\n const selectSourceRecommended = useMemo(() => {\n if (!pendingSelectSourceAction) return null;\n return (pendingSelectSourceAction.metadata?.recommended as {\n chainName: string;\n tokenSymbol: string;\n } | undefined) ?? null;\n }, [pendingSelectSourceAction]);\n\n const selectSourceAvailableBalance = useMemo(() => {\n if (!pendingSelectSourceAction) return 0;\n const options = (pendingSelectSourceAction.metadata?.options ?? []) as SourceOption[];\n return resolveSelectSourceAvailableBalance(\n selectSourceChoices,\n options,\n selectSourceChainName,\n selectSourceTokenSymbol,\n selectSourceRecommended,\n );\n }, [\n pendingSelectSourceAction,\n selectSourceChoices,\n selectSourceChainName,\n selectSourceTokenSymbol,\n selectSourceRecommended,\n ]);\n\n const handleSelectSourceChainChange = useCallback(\n (chainName: string) => {\n setSelectSourceChainName(chainName);\n const chain = selectSourceChoices.find((c) => c.chainName === chainName);\n if (!chain || chain.tokens.length === 0) return;\n\n const recommendedToken =\n selectSourceRecommended?.chainName === chainName\n ? selectSourceRecommended.tokenSymbol\n : null;\n const hasRecommended =\n !!recommendedToken &&\n chain.tokens.some((t) => t.tokenSymbol === recommendedToken);\n\n setSelectSourceTokenSymbol(\n hasRecommended ? recommendedToken! : chain.tokens[0].tokenSymbol,\n );\n },\n [selectSourceChoices, selectSourceRecommended],\n );\n\n const handleConfirmSelectSource = useCallback(() => {\n const guestPostPayPreauth =\n (!!options?.guestPreauthSessionId && !!options?.isGuestFlow)\n || (!!options?.guestPreauthorizing && !!options?.isDesktop);\n\n // Clear transfer before the executor continues (microtasks), so resolvePhase cannot map\n // COMPLETED → success if GUEST_PREAUTH_END races ahead of this handler. Desktop guest\n // preauth defers login until inline auth completes (OpenWalletScreen); mobile still requests\n // login immediately.\n if (guestPostPayPreauth) {\n if (options?.guestPreauthorizing && options?.isDesktop) {\n dispatch({ type: 'GUEST_PREAUTH_CLEAR_TRANSFER' });\n } else {\n dispatch({ type: 'REQUEST_LOGIN' });\n }\n }\n\n authExecutor.resolveSelectSource({\n chainName: selectSourceChainName,\n tokenSymbol: selectSourceTokenSymbol,\n });\n }, [\n authExecutor,\n dispatch,\n options?.guestPreauthSessionId,\n options?.guestPreauthorizing,\n options?.isDesktop,\n options?.isGuestFlow,\n selectSourceChainName,\n selectSourceTokenSymbol,\n ]);\n\n return {\n selectSourceChainName,\n selectSourceTokenSymbol,\n setSelectSourceChainName,\n setSelectSourceTokenSymbol,\n selectSourceChoices,\n selectSourceRecommended,\n selectSourceAvailableBalance,\n handleSelectSourceChainChange,\n handleConfirmSelectSource,\n pendingSelectSourceAction,\n initializedSelectSourceActionRef,\n };\n}\n","import { useCallback, useEffect, useRef, type Dispatch, type MutableRefObject } from 'react';\n\nimport type { Transfer } from '../types';\nimport type { PaymentAction } from '../paymentReducer';\nimport type { UseTransferPollingResult } from '../hooks';\nimport { clearMobileFlowState } from '../paymentHelpers';\nimport * as api from '../api';\nimport { useBlinkConfig } from '../context';\n\nexport interface MobileFlowRefs {\n mobileSetupFlowRef: MutableRefObject<boolean>;\n handlingMobileReturnRef: MutableRefObject<boolean>;\n setupAccountIdRef: MutableRefObject<string | null>;\n reauthSessionIdRef: MutableRefObject<string | null>;\n reauthTokenRef: MutableRefObject<{ walletId: string; tokenSymbol: string } | null>;\n loadingDataRef: MutableRefObject<boolean>;\n}\n\nexport interface GuestCheckoutState {\n mobileFlow: boolean;\n isGuestFlow: boolean;\n guestTransferId: string | null;\n guestSessionToken: string | null;\n}\n\nexport interface MobileFlowHandlersResult {\n handleAuthorizedMobileReturn: (transfer: Transfer, isSetup: boolean) => Promise<void>;\n handleRetryMobileStatus: () => void;\n}\n\nexport function useMobileFlowHandlers(\n dispatch: Dispatch<PaymentAction>,\n polling: UseTransferPollingResult,\n reloadAccounts: () => Promise<void>,\n pollingTransferIdRef: MutableRefObject<string | null>,\n stateTransfer: Transfer | null,\n refs: MobileFlowRefs,\n guestCheckout: GuestCheckoutState,\n onComplete?: (transfer: Transfer) => void,\n lastResumedAt?: number,\n): MobileFlowHandlersResult {\n const {\n mobileSetupFlowRef, handlingMobileReturnRef, setupAccountIdRef,\n reauthSessionIdRef, reauthTokenRef, loadingDataRef,\n } = refs;\n\n const { apiBaseUrl } = useBlinkConfig();\n const onCompleteRef = useRef(onComplete);\n onCompleteRef.current = onComplete;\n const guestPollingActiveRef = useRef(false);\n const guestPollingCleanupRef = useRef<(() => void) | null>(null);\n\n // Keep refs in sync with state so visibility listeners read current values\n // without re-subscribing on every state change.\n const mobileFlowRef = useRef(guestCheckout.mobileFlow);\n mobileFlowRef.current = guestCheckout.mobileFlow;\n const guestTransferIdRef = useRef(guestCheckout.guestTransferId);\n guestTransferIdRef.current = guestCheckout.guestTransferId;\n const guestSessionTokenRef = useRef(guestCheckout.guestSessionToken);\n guestSessionTokenRef.current = guestCheckout.guestSessionToken;\n\n // ── Guest checkout mobile return ──────────────────────────────────────\n //\n // Polls a guest transfer until COMPLETED or FAILED. Guest checkout does\n // not persist to sessionStorage — the page stays alive during the ~30s\n // wallet round-trip, so React state is the sole source of truth.\n const startGuestPolling = useCallback((transferId: string, guestSessionToken: string) => {\n if (guestPollingActiveRef.current) return;\n guestPollingActiveRef.current = true;\n\n let cancelled = false;\n const POLL_INTERVAL_MS = 3000;\n\n dispatch({ type: 'SET_ERROR', error: null });\n\n const poll = async () => {\n if (cancelled) return;\n try {\n const transfer = await api.getGuestTransfer(apiBaseUrl, transferId, guestSessionToken);\n if (cancelled) return;\n\n if (transfer.status === 'COMPLETED') {\n cancelled = true;\n guestPollingActiveRef.current = false;\n guestPollingCleanupRef.current = null;\n dispatch({ type: 'GUEST_TRANSFER_COMPLETED', transfer, guestSessionToken });\n onCompleteRef.current?.(transfer);\n } else if (transfer.status === 'FAILED') {\n cancelled = true;\n guestPollingActiveRef.current = false;\n guestPollingCleanupRef.current = null;\n dispatch({ type: 'TRANSFER_FAILED', transfer, error: 'Transfer failed.' });\n }\n } catch {\n // Silently retry on next interval\n }\n };\n\n poll();\n const intervalId = window.setInterval(poll, POLL_INTERVAL_MS);\n\n const cleanup = () => {\n cancelled = true;\n guestPollingActiveRef.current = false;\n guestPollingCleanupRef.current = null;\n window.clearInterval(intervalId);\n };\n guestPollingCleanupRef.current = cleanup;\n }, [apiBaseUrl, dispatch]);\n\n // Start guest polling when reducer state indicates an active guest checkout.\n useEffect(() => {\n if (\n guestCheckout.mobileFlow\n && guestCheckout.isGuestFlow\n && guestCheckout.guestTransferId\n && guestCheckout.guestSessionToken\n ) {\n startGuestPolling(guestCheckout.guestTransferId, guestCheckout.guestSessionToken);\n }\n return () => { guestPollingCleanupRef.current?.(); };\n }, [\n guestCheckout.mobileFlow,\n guestCheckout.isGuestFlow,\n guestCheckout.guestTransferId,\n guestCheckout.guestSessionToken,\n startGuestPolling,\n ]);\n\n // Resume polling on page resume (driven by `lastResumedAt` from\n // `usePageResumeEffect`). Replaces the old per-hook visibilitychange /\n // pageshow listeners.\n useEffect(() => {\n if (!lastResumedAt) return;\n if (guestPollingActiveRef.current) return;\n if (!mobileFlowRef.current) return;\n const transferId = guestTransferIdRef.current;\n const token = guestSessionTokenRef.current;\n if (transferId && token) {\n startGuestPolling(transferId, token);\n }\n }, [lastResumedAt, startGuestPolling]);\n\n const handleAuthorizedMobileReturn = useCallback(async (\n authorizedTransfer: Transfer,\n isSetup: boolean,\n ) => {\n if (handlingMobileReturnRef.current) return;\n handlingMobileReturnRef.current = true;\n polling.stopPolling();\n\n if (isSetup) {\n mobileSetupFlowRef.current = false;\n clearMobileFlowState();\n try {\n await reloadAccounts();\n } catch { /* best-effort; data load effect will retry on deposit screen */ }\n loadingDataRef.current = false;\n dispatch({ type: 'MOBILE_SETUP_COMPLETE', transfer: authorizedTransfer });\n return;\n }\n\n mobileSetupFlowRef.current = false;\n clearMobileFlowState();\n dispatch({ type: 'MOBILE_SIGN_READY', transfer: authorizedTransfer });\n }, [polling.stopPolling, reloadAccounts, dispatch]);\n\n const handleRetryMobileStatus = useCallback(() => {\n dispatch({ type: 'SET_ERROR', error: null });\n handlingMobileReturnRef.current = false;\n\n const currentTransfer = polling.transfer ?? stateTransfer;\n if (currentTransfer?.status === 'AUTHORIZED') {\n void handleAuthorizedMobileReturn(currentTransfer, mobileSetupFlowRef.current);\n return;\n }\n\n const transferIdToResume = pollingTransferIdRef.current ?? currentTransfer?.id;\n if (transferIdToResume) {\n polling.startPolling(transferIdToResume);\n }\n }, [handleAuthorizedMobileReturn, polling, stateTransfer, pollingTransferIdRef, dispatch]);\n\n return {\n handleAuthorizedMobileReturn,\n handleRetryMobileStatus,\n };\n}\n","import { useCallback, type Dispatch, type MutableRefObject } from 'react';\nimport { useConnect, useConfig } from 'wagmi';\nimport { getAccount } from '@wagmi/core';\n\nimport type { Account, Chain, Destination, MerchantAuthorization, Provider } from '../types';\nimport type { PaymentAction } from '../paymentReducer';\nimport type { UseAuthorizationExecutorResult } from '../hooks';\nimport * as api from '../api';\nimport { captureException } from '../sentry';\nimport { shouldUseWalletConnector } from '../walletFlow';\nimport { triggerDeeplink } from '../deeplink';\nimport {\n persistMobileFlowState,\n getPreferredDepositWallet,\n} from '../paymentHelpers';\n\nexport interface ProviderHandlersDeps {\n dispatch: Dispatch<PaymentAction>;\n getAccessToken: () => Promise<string | null>;\n apiBaseUrl: string;\n depositAmount: number | null;\n useWalletConnectorProp?: boolean;\n activeCredentialId: string | null;\n selectedAccountId: string | null;\n selectedWalletId: string | null;\n selectedTokenSymbol: string | null;\n chains: Chain[];\n accounts: Account[];\n providers: Provider[];\n authExecutor: UseAuthorizationExecutorResult;\n reloadAccounts: () => Promise<void>;\n onError?: (error: string) => void;\n mobileSetupFlowRef: MutableRefObject<boolean>;\n handlingMobileReturnRef: MutableRefObject<boolean>;\n setupAccountIdRef: MutableRefObject<string | null>;\n reauthSessionIdRef: MutableRefObject<string | null>;\n reauthTokenRef: MutableRefObject<{ walletId: string; tokenSymbol: string } | null>;\n authenticated: boolean;\n merchantAuthorization?: MerchantAuthorization;\n destination?: Destination;\n guestSessionToken: string | null;\n guestTransferId: string | null;\n selectedProviderId: string | null;\n startGuestAccountPolling: (guestToken: string, sessionId?: string) => void;\n}\n\nexport interface PreparedSession {\n accountId: string;\n sessionId: string;\n uri: string;\n}\n\nexport interface ProviderHandlersResult {\n handlePrepareProvider: (providerId: string) => Promise<PreparedSession | null>;\n handleSelectProvider: (providerId: string, preparedSession?: PreparedSession) => Promise<void>;\n handleContinueConnection: (accountId: string) => void;\n handleSelectAccount: (accountId: string) => void;\n handleIncreaseLimit: () => Promise<void>;\n handleNavigateToTokenPicker: () => void;\n handleSelectAuthorizedToken: (walletId: string, tokenSymbol: string) => void;\n handleAuthorizeToken: (walletId: string, tokenAddress: string, chainId: number, tokenSymbol: string) => Promise<void>;\n handlePreauthorize: () => Promise<void>;\n}\n\nexport function useProviderHandlers(deps: ProviderHandlersDeps): ProviderHandlersResult {\n const {\n dispatch, getAccessToken, apiBaseUrl, depositAmount,\n useWalletConnectorProp, activeCredentialId, selectedAccountId,\n selectedWalletId, selectedTokenSymbol, chains,\n accounts, providers, authExecutor, reloadAccounts, onError,\n mobileSetupFlowRef, handlingMobileReturnRef, setupAccountIdRef,\n reauthSessionIdRef, reauthTokenRef,\n authenticated, merchantAuthorization, destination,\n guestSessionToken, guestTransferId, selectedProviderId,\n startGuestAccountPolling,\n } = deps;\n\n const wagmiConfig = useConfig();\n const { connectAsync, connectors } = useConnect();\n\n const handlePrepareProvider = useCallback(async (providerId: string): Promise<PreparedSession | null> => {\n if (!authenticated) {\n return null;\n }\n\n if (!activeCredentialId) {\n dispatch({ type: 'SET_ERROR', error: 'Create or verify a passkey on this device before continuing.' });\n return null;\n }\n\n const provider = providers.find((p) => p.id === providerId);\n const providerName = provider?.name ?? 'Wallet';\n\n try {\n const token = await getAccessToken();\n if (!token) throw new Error('Not authenticated');\n\n const accountId = crypto.randomUUID();\n const account = await api.createAccount(apiBaseUrl, token, {\n id: accountId,\n name: providerName,\n credentialId: activeCredentialId,\n providerId,\n });\n\n const session = account.authorizationSessions?.[0];\n if (!session) throw new Error('No authorization session returned.');\n\n return { accountId: account.id, sessionId: session.id, uri: session.uri };\n } catch (err) {\n captureException(err);\n const msg = err instanceof Error ? err.message : 'Failed to set up wallet';\n dispatch({ type: 'PAY_ERROR', error: msg });\n onError?.(msg);\n return null;\n }\n }, [authenticated, activeCredentialId, providers, apiBaseUrl, getAccessToken, onError, dispatch]);\n\n const handleGuestSelectProvider = useCallback(async (providerId: string) => {\n if (!merchantAuthorization || !destination) {\n const msg = 'Missing payment configuration for guest checkout.';\n dispatch({ type: 'PAY_ERROR', error: msg });\n onError?.(msg);\n return;\n }\n\n const isMobile = !shouldUseWalletConnector({\n useWalletConnector: useWalletConnectorProp,\n userAgent: typeof navigator === 'undefined' ? undefined : navigator.userAgent,\n });\n\n dispatch({ type: 'SELECT_PROVIDER', providerId });\n\n try {\n const result = await api.createGuestTransfer(apiBaseUrl, {\n merchantAuthorization,\n destinations: [{\n chainId: destination.chainId,\n token: { address: destination.token.address },\n address: destination.address,\n }],\n amount: depositAmount ?? 0,\n providerId,\n });\n\n if (isMobile) {\n if (!result.uri) {\n dispatch({ type: 'PAY_ERROR', error: 'This wallet is not available on mobile.' });\n return;\n }\n triggerDeeplink(result.uri);\n dispatch({\n type: 'MOBILE_DEEPLINK_READY',\n deeplinkUri: result.uri,\n guestTransferId: result.id,\n guestSessionToken: result.guestSessionToken,\n });\n } else {\n const account = getAccount(wagmiConfig);\n if (!account.isConnected) {\n const connector = connectors.find(c => c.type === 'injected') ?? connectors[0];\n if (!connector) {\n dispatch({ type: 'PAY_ERROR', error: 'No wallet extension found. Please install a supported wallet.' });\n return;\n }\n await connectAsync({ connector });\n }\n\n dispatch({\n type: 'GUEST_PROVIDER_SELECTED',\n providerId,\n transferId: result.id,\n guestSessionToken: result.guestSessionToken,\n });\n }\n } catch (err) {\n captureException(err);\n const msg = err instanceof Error ? err.message : 'Failed to start guest checkout';\n dispatch({ type: 'PAY_ERROR', error: msg });\n onError?.(msg);\n }\n }, [\n merchantAuthorization, destination, apiBaseUrl, depositAmount,\n useWalletConnectorProp, wagmiConfig, connectors, connectAsync,\n onError, dispatch,\n ]);\n\n const handleSelectProvider = useCallback(async (providerId: string, preparedSession?: PreparedSession) => {\n if (!authenticated) {\n await handleGuestSelectProvider(providerId);\n return;\n }\n\n dispatch({ type: 'SELECT_PROVIDER', providerId });\n\n if (!activeCredentialId) {\n dispatch({ type: 'SET_ERROR', error: 'Create or verify a passkey on this device before continuing.' });\n return;\n }\n\n const provider = providers.find((p) => p.id === providerId);\n const providerName = provider?.name ?? 'Wallet';\n\n const isMobile = !shouldUseWalletConnector({\n useWalletConnector: useWalletConnectorProp,\n userAgent: typeof navigator === 'undefined' ? undefined : navigator.userAgent,\n });\n\n try {\n let accountId: string;\n let sessionId: string;\n let sessionUri: string;\n\n if (preparedSession) {\n accountId = preparedSession.accountId;\n sessionId = preparedSession.sessionId;\n sessionUri = preparedSession.uri;\n } else {\n const token = await getAccessToken();\n if (!token) throw new Error('Not authenticated');\n\n const newAccountId = crypto.randomUUID();\n const account = await api.createAccount(apiBaseUrl, token, {\n id: newAccountId,\n name: providerName,\n credentialId: activeCredentialId,\n providerId,\n });\n\n const session = account.authorizationSessions?.[0];\n if (!session) throw new Error('No authorization session returned.');\n\n accountId = account.id;\n sessionId = session.id;\n sessionUri = session.uri;\n }\n\n if (isMobile) {\n handlingMobileReturnRef.current = false;\n mobileSetupFlowRef.current = true;\n setupAccountIdRef.current = accountId;\n persistMobileFlowState({\n accountId,\n sessionId,\n deeplinkUri: sessionUri,\n providerId,\n isSetup: true,\n });\n triggerDeeplink(sessionUri);\n dispatch({ type: 'MOBILE_DEEPLINK_READY', deeplinkUri: sessionUri });\n } else {\n dispatch({\n type: 'SELECT_ACCOUNT',\n accountId,\n walletId: null,\n });\n const completed = await authExecutor.executeSessionById(sessionId);\n if (!completed) return;\n await reloadAccounts();\n }\n } catch (err) {\n captureException(err);\n const msg = err instanceof Error ? err.message : 'Failed to set up wallet';\n dispatch({ type: 'PAY_ERROR', error: msg });\n onError?.(msg);\n }\n }, [\n authenticated, handleGuestSelectProvider,\n activeCredentialId, providers, apiBaseUrl,\n getAccessToken, authExecutor, useWalletConnectorProp,\n reloadAccounts, onError, dispatch,\n mobileSetupFlowRef, handlingMobileReturnRef, setupAccountIdRef,\n ]);\n\n const handleContinueConnection = useCallback(\n (accountId: string) => {\n const acct = accounts.find((a) => a.id === accountId);\n if (!acct) return;\n const matchedProvider = providers.find((p) => p.name === acct.name);\n if (!matchedProvider) return;\n\n const pendingSession = acct.authorizationSessions?.find(\n (s) => s.status === 'PENDING',\n );\n if (pendingSession) {\n handleSelectProvider(matchedProvider.id, {\n accountId: acct.id,\n sessionId: pendingSession.id,\n uri: pendingSession.uri,\n });\n } else {\n handleSelectProvider(matchedProvider.id);\n }\n },\n [accounts, providers, handleSelectProvider],\n );\n\n const handleSelectAccount = useCallback(\n (accountId: string) => {\n const acct = accounts.find((a) => a.id === accountId);\n if (!acct) return;\n const activeWallet = getPreferredDepositWallet(acct, depositAmount ?? 0);\n dispatch({\n type: 'SELECT_ACCOUNT',\n accountId,\n walletId: activeWallet?.id ?? null,\n });\n },\n [accounts, depositAmount, dispatch],\n );\n\n const handleIncreaseLimit = useCallback(async () => {\n if (!selectedAccountId) {\n dispatch({ type: 'SET_ERROR', error: 'No account selected.' });\n return;\n }\n if (!activeCredentialId) {\n dispatch({ type: 'SET_ERROR', error: 'Create or verify a passkey on this device before continuing.' });\n return;\n }\n\n const acct = accounts.find((a) => a.id === selectedAccountId);\n const matchedProvider = acct\n ? providers.find((p) => p.name === acct.name)\n : undefined;\n\n const isMobile = !shouldUseWalletConnector({\n useWalletConnector: useWalletConnectorProp,\n userAgent: typeof navigator === 'undefined' ? undefined : navigator.userAgent,\n });\n\n if (matchedProvider && isMobile) {\n dispatch({ type: 'SAVE_SELECTION' });\n dispatch({ type: 'SELECT_PROVIDER', providerId: matchedProvider.id });\n }\n\n dispatch({ type: 'SET_ERROR', error: null });\n dispatch({ type: 'SET_INCREASING_LIMIT', value: true });\n\n try {\n const token = await getAccessToken();\n if (!token) throw new Error('Not authenticated');\n\n const wallet = acct?.wallets.find((w) => w.id === selectedWalletId);\n const source = wallet?.sources.find((s) =>\n selectedTokenSymbol\n ? s.token.symbol === selectedTokenSymbol\n : s.token.status === 'AUTHORIZED',\n );\n const evmChainId = chains.find((c) => c.name === wallet?.chain.name)?.commonId ?? undefined;\n\n const session = await api.createAccountAuthorizationSession(\n apiBaseUrl, token, selectedAccountId, activeCredentialId,\n { tokenAddress: source?.address, chainId: evmChainId },\n );\n\n if (isMobile) {\n handlingMobileReturnRef.current = false;\n mobileSetupFlowRef.current = true;\n setupAccountIdRef.current = selectedAccountId;\n reauthSessionIdRef.current = session.id;\n reauthTokenRef.current = null;\n persistMobileFlowState({\n accountId: selectedAccountId,\n sessionId: session.id,\n deeplinkUri: session.uri,\n providerId: matchedProvider?.id ?? null,\n isSetup: true,\n isReauthorization: true,\n });\n dispatch({ type: 'MOBILE_DEEPLINK_READY', deeplinkUri: session.uri });\n triggerDeeplink(session.uri);\n dispatch({ type: 'DISCARD_SAVED_SELECTION' });\n } else {\n const completed = await authExecutor.executeSessionById(session.id);\n if (!completed) return;\n await reloadAccounts();\n dispatch({ type: 'DISCARD_SAVED_SELECTION' });\n }\n } catch (err) {\n captureException(err);\n if (isMobile) {\n dispatch({ type: 'RESTORE_SELECTION' });\n }\n const msg = err instanceof Error ? err.message : 'Failed to increase limit';\n dispatch({ type: 'SET_ERROR', error: msg });\n onError?.(msg);\n } finally {\n dispatch({ type: 'SET_INCREASING_LIMIT', value: false });\n }\n }, [\n selectedAccountId, selectedWalletId, selectedTokenSymbol, chains,\n activeCredentialId, accounts, providers, apiBaseUrl,\n getAccessToken, authExecutor, useWalletConnectorProp, reloadAccounts, onError, dispatch,\n mobileSetupFlowRef, handlingMobileReturnRef, setupAccountIdRef,\n reauthSessionIdRef, reauthTokenRef,\n ]);\n\n const handleNavigateToTokenPicker = useCallback(() => {\n dispatch({ type: 'SET_USER_INTENT', intent: { step: 'token-picker' } });\n }, [dispatch]);\n\n const handleSelectAuthorizedToken = useCallback((walletId: string, tokenSymbol: string) => {\n dispatch({ type: 'SELECT_TOKEN', walletId, tokenSymbol });\n }, [dispatch]);\n\n const handleAuthorizeToken = useCallback(async (\n _walletId: string,\n tokenAddress: string,\n chainId: number,\n tokenSymbol: string,\n ) => {\n if (!selectedAccountId) {\n dispatch({ type: 'SET_ERROR', error: 'No account selected.' });\n return;\n }\n if (!activeCredentialId) {\n dispatch({ type: 'SET_ERROR', error: 'Create or verify a passkey on this device before continuing.' });\n return;\n }\n\n const acct = accounts.find((a) => a.id === selectedAccountId);\n const matchedProvider = acct\n ? providers.find((p) => p.name === acct.name)\n : undefined;\n\n const isMobile = !shouldUseWalletConnector({\n useWalletConnector: useWalletConnectorProp,\n userAgent: typeof navigator === 'undefined' ? undefined : navigator.userAgent,\n });\n\n if (matchedProvider && isMobile) {\n dispatch({ type: 'SAVE_SELECTION' });\n dispatch({ type: 'SELECT_PROVIDER', providerId: matchedProvider.id });\n }\n\n dispatch({ type: 'SET_ERROR', error: null });\n dispatch({ type: 'SET_INCREASING_LIMIT', value: true });\n\n try {\n const token = await getAccessToken();\n if (!token) throw new Error('Not authenticated');\n\n const session = await api.createAccountAuthorizationSession(\n apiBaseUrl, token, selectedAccountId, activeCredentialId,\n { tokenAddress, chainId },\n );\n\n if (isMobile) {\n handlingMobileReturnRef.current = false;\n mobileSetupFlowRef.current = true;\n setupAccountIdRef.current = selectedAccountId;\n reauthSessionIdRef.current = session.id;\n reauthTokenRef.current = { walletId: _walletId, tokenSymbol };\n persistMobileFlowState({\n accountId: selectedAccountId,\n sessionId: session.id,\n deeplinkUri: session.uri,\n providerId: matchedProvider?.id ?? null,\n isSetup: true,\n isReauthorization: true,\n reauthorizationToken: { walletId: _walletId, tokenSymbol },\n });\n dispatch({ type: 'MOBILE_DEEPLINK_READY', deeplinkUri: session.uri });\n triggerDeeplink(session.uri);\n dispatch({ type: 'DISCARD_SAVED_SELECTION' });\n } else {\n const completed = await authExecutor.executeSessionById(session.id);\n if (!completed) return;\n await reloadAccounts();\n dispatch({ type: 'SELECT_TOKEN', walletId: _walletId, tokenSymbol });\n dispatch({ type: 'DISCARD_SAVED_SELECTION' });\n }\n } catch (err) {\n captureException(err);\n if (isMobile) {\n dispatch({ type: 'RESTORE_SELECTION' });\n }\n const msg = err instanceof Error ? err.message : 'Failed to authorize token';\n dispatch({ type: 'SET_ERROR', error: msg });\n onError?.(msg);\n } finally {\n dispatch({ type: 'SET_INCREASING_LIMIT', value: false });\n }\n }, [\n selectedAccountId, activeCredentialId, accounts, providers, apiBaseUrl,\n getAccessToken, authExecutor, useWalletConnectorProp, reloadAccounts, onError, dispatch,\n mobileSetupFlowRef, handlingMobileReturnRef, setupAccountIdRef,\n reauthSessionIdRef, reauthTokenRef,\n ]);\n\n const handlePreauthorize = useCallback(async () => {\n if (!guestSessionToken || !selectedProviderId) {\n dispatch({\n type: 'SET_ERROR',\n error: 'Missing guest session or wallet provider. Try again from the payment screen.',\n });\n return;\n }\n\n const isMobile = !shouldUseWalletConnector({\n useWalletConnector: useWalletConnectorProp,\n userAgent: typeof navigator === 'undefined' ? undefined : navigator.userAgent,\n });\n\n console.info('[blink-sdk] handlePreauthorize', {\n isMobile,\n useWalletConnectorProp,\n hasGuestSessionToken: !!guestSessionToken,\n selectedProviderId,\n guestTransferId,\n userAgent: typeof navigator === 'undefined' ? null : navigator.userAgent,\n });\n\n const providerName =\n providers.find((p) => p.id === selectedProviderId)?.name ?? 'Wallet';\n\n if (!isMobile) {\n dispatch({ type: 'GUEST_PREAUTH_BEGIN' });\n }\n\n try {\n const created = await api.createGuestAccount(\n apiBaseUrl, guestSessionToken, selectedProviderId, providerName,\n );\n const session = await api.fetchAuthorizationSessionByToken(\n apiBaseUrl, created.sessionToken,\n );\n\n if (isMobile) {\n handlingMobileReturnRef.current = false;\n mobileSetupFlowRef.current = true;\n setupAccountIdRef.current = created.accountId;\n persistMobileFlowState({\n accountId: created.accountId,\n sessionId: session.id,\n deeplinkUri: created.sessionUri,\n providerId: selectedProviderId,\n isSetup: true,\n guestSessionToken,\n transferId: guestTransferId ?? undefined,\n isGuestPreauth: true,\n });\n triggerDeeplink(created.sessionUri);\n dispatch({ type: 'MOBILE_DEEPLINK_READY', deeplinkUri: created.sessionUri });\n }\n\n startGuestAccountPolling(guestSessionToken, session.id);\n\n dispatch({\n type: 'GUEST_PREAUTH_DETECTED',\n accountId: created.accountId,\n sessionId: session.id,\n });\n } catch (err) {\n captureException(err);\n if (!isMobile) {\n dispatch({ type: 'GUEST_PREAUTH_END' });\n }\n dispatch({\n type: 'SET_ERROR',\n error: err instanceof Error ? err.message : 'Failed to start preauthorization',\n });\n onError?.(err instanceof Error ? err.message : 'Failed to start preauthorization');\n }\n }, [\n guestSessionToken, guestTransferId, selectedProviderId, providers, apiBaseUrl, dispatch, onError,\n useWalletConnectorProp, mobileSetupFlowRef, handlingMobileReturnRef, setupAccountIdRef,\n startGuestAccountPolling,\n ]);\n\n return {\n handlePrepareProvider,\n handleSelectProvider,\n handleContinueConnection,\n handleSelectAccount,\n handleIncreaseLimit,\n handleNavigateToTokenPicker,\n handleSelectAuthorizedToken,\n handleAuthorizeToken,\n handlePreauthorize,\n };\n}\n","export interface GuestTokenEntry {\n chainId: string;\n /** Standard EVM numeric chain ID — used in PUT /sender sourceChainId. */\n sourceChainId: number;\n chainName: string;\n tokenSymbol: string;\n tokenAddress: string;\n balance: number;\n decimals: number;\n rawBalance: string;\n}\n\nexport interface GuestBalanceOptionInput {\n chainId: string;\n sourceChainId: number;\n chainName: string;\n tokenSymbol: string;\n tokenAddress: string;\n decimals: number;\n rawBalance: string;\n}\n\n/**\n * Maps raw backend balance options to GuestTokenEntry[], converting\n * rawBalance to a human-readable number. Filters out zero balances\n * and sorts by balance descending.\n */\nexport function mapBalancesToGuestTokenEntries(\n options: GuestBalanceOptionInput[],\n): GuestTokenEntry[] {\n return options\n .map((opt): GuestTokenEntry => ({\n chainId: opt.chainId,\n sourceChainId: opt.sourceChainId,\n chainName: opt.chainName,\n tokenSymbol: opt.tokenSymbol,\n tokenAddress: opt.tokenAddress,\n decimals: opt.decimals,\n rawBalance: opt.rawBalance,\n balance: Number(opt.rawBalance) / 10 ** opt.decimals,\n }))\n .filter((entry) => entry.balance > 0)\n .sort((a, b) => b.balance - a.balance);\n}\n\n/**\n * Picker list: positive balances first (by amount); if none, show zero-balance\n * rows so the user can still choose a catalog token.\n */\nexport function mapGuestPickerEntries(options: GuestBalanceOptionInput[]): GuestTokenEntry[] {\n const mapped = options.map((opt): GuestTokenEntry => ({\n chainId: opt.chainId,\n sourceChainId: opt.sourceChainId,\n chainName: opt.chainName,\n tokenSymbol: opt.tokenSymbol,\n tokenAddress: opt.tokenAddress,\n decimals: opt.decimals,\n rawBalance: opt.rawBalance,\n balance: Number(opt.rawBalance) / 10 ** opt.decimals,\n }));\n const positive = mapped.filter((e) => e.balance > 0).sort((a, b) => b.balance - a.balance);\n if (positive.length > 0) return positive;\n return mapped.sort((a, b) => b.balance - a.balance);\n}\n\nexport function guestEntryMatchingRecommended(\n balances: GuestBalanceOptionInput[],\n recommended: { sourceChainId: number; tokenAddress: string },\n): GuestTokenEntry | null {\n const raw = balances.find(\n (b) =>\n b.sourceChainId === recommended.sourceChainId\n && b.tokenAddress.toLowerCase() === recommended.tokenAddress.toLowerCase(),\n );\n if (!raw) return null;\n return {\n chainId: raw.chainId,\n sourceChainId: raw.sourceChainId,\n chainName: raw.chainName,\n tokenSymbol: raw.tokenSymbol,\n tokenAddress: raw.tokenAddress,\n decimals: raw.decimals,\n rawBalance: raw.rawBalance,\n balance: Number(raw.rawBalance) / 10 ** raw.decimals,\n };\n}\n","import { useCallback, useEffect, useRef, useState, type Dispatch } from 'react';\nimport { useConfig, useSwitchChain } from 'wagmi';\nimport { getAccount, getWalletClient, waitForTransactionReceipt } from '@wagmi/core';\n\nimport type { Transfer, GuestSignPayload, GuestTransferFee, Provider } from '../types';\nimport type { PaymentAction } from '../paymentReducer';\nimport type { UseAuthorizationExecutorResult } from './authorizationExecutor';\nimport * as api from '../api';\nimport { captureException } from '../sentry';\nimport {\n mapGuestPickerEntries,\n guestEntryMatchingRecommended,\n type GuestTokenEntry,\n} from '../guestTokens';\nimport { useBlinkConfig } from '../context';\n\nconst GUEST_SIGN_POLL_MS = 2000;\nconst GUEST_SIGN_MAX_POLLS = 90;\nconst GUEST_COMPLETION_POLL_MS = 3000;\nconst GUEST_COMPLETION_MAX_POLLS = 120;\nconst DONE_HOLD_MS = 600;\n\nexport type GuestBridgePhase =\n | 'preparing'\n | 'building'\n | 'wallet'\n | 'sending'\n | 'completing'\n | 'done';\n\nexport interface GuestTransferHandlersDeps {\n dispatch: Dispatch<PaymentAction>;\n isGuestFlow: boolean;\n guestTransferId: string | null;\n guestSessionToken: string | null;\n onComplete?: (transfer: Transfer) => void;\n onError?: (error: string) => void;\n authExecutor: UseAuthorizationExecutorResult;\n guestOneTapOptIn: boolean;\n guestOneTapLimit: number;\n selectedProviderId: string | null;\n providers: Provider[];\n startGuestAccountPolling: (guestToken: string, sessionId?: string) => void;\n}\n\nexport interface GuestTransferHandlersResult {\n guestTokenEntries: GuestTokenEntry[];\n loadingBalances: boolean;\n bridgePhase: GuestBridgePhase | null;\n /** Token row the user selected; fee quote is loaded for this row before confirm. */\n pendingGuestEntry: GuestTokenEntry | null;\n guestFee: GuestTransferFee | null;\n guestQuoteLoading: boolean;\n /** Fetch fee preview for the selected token via POST /quotes (does not call PUT /sender). */\n handleSelectGuestToken: (entry: GuestTokenEntry) => Promise<void>;\n /** Commit sender after user reviews the quoted fee. */\n handleConfirmGuestToken: () => Promise<void>;\n /** Clears guest provider + in-flight guest transfer; `resolvePhase` returns guest wallet list. */\n handleGuestBackFromTokenPicker: () => void;\n}\n\nfunction isUserRejection(msg: string): boolean {\n const lower = msg.toLowerCase();\n return lower.includes('rejected') || lower.includes('denied') || lower.includes('cancelled');\n}\n\nfunction mapQuoteErrorMessage(err: unknown): string {\n const raw = err instanceof Error ? err.message : '';\n if (raw.includes('AMOUNT_TOO_LOW')) return 'Amount is too low to cover network fees';\n return 'Failed to load fee estimate';\n}\n\nexport function useGuestTransferHandlers(\n deps: GuestTransferHandlersDeps,\n): GuestTransferHandlersResult {\n const {\n dispatch, isGuestFlow, guestTransferId,\n guestSessionToken, onComplete, onError,\n authExecutor, guestOneTapOptIn, guestOneTapLimit,\n selectedProviderId, providers, startGuestAccountPolling,\n } = deps;\n\n const { apiBaseUrl } = useBlinkConfig();\n const wagmiConfig = useConfig();\n const { switchChainAsync } = useSwitchChain();\n\n const [guestTokenEntries, setGuestTokenEntries] = useState<GuestTokenEntry[]>([]);\n const [loadingBalances, setLoadingBalances] = useState(false);\n const [bridgePhase, setBridgePhase] = useState<GuestBridgePhase | null>(null);\n const [pendingGuestEntry, setPendingGuestEntry] = useState<GuestTokenEntry | null>(null);\n const [guestFee, setGuestFee] = useState<GuestTransferFee | null>(null);\n const [guestQuoteLoading, setGuestQuoteLoading] = useState(false);\n\n const fetchedRef = useRef(false);\n const inlinePreauthSessionIdRef = useRef<string | null>(null);\n\n useEffect(() => {\n if (guestTransferId != null) return;\n fetchedRef.current = false;\n setGuestTokenEntries([]);\n setPendingGuestEntry(null);\n setGuestFee(null);\n setGuestQuoteLoading(false);\n setLoadingBalances(false);\n }, [guestTransferId]);\n\n // ── Probe PUT /sender: persist EOA, load ranked balances + recommended + fee ──\n useEffect(() => {\n if (!isGuestFlow || !guestTransferId || !guestSessionToken || fetchedRef.current) return;\n\n const account = getAccount(wagmiConfig);\n const senderAddress = account.address;\n if (!senderAddress) return;\n\n fetchedRef.current = true;\n setLoadingBalances(true);\n\n api.putGuestTransferSender(apiBaseUrl, guestTransferId, guestSessionToken, {\n senderAddress,\n })\n .then(async (res) => {\n const balances = res.source?.balances;\n if (!balances?.length) {\n dispatch({ type: 'SET_ERROR', error: 'No supported tokens found for this transfer.' });\n return;\n }\n\n const entries = mapGuestPickerEntries(balances);\n setGuestTokenEntries(entries);\n\n if (entries.length === 0) {\n dispatch({ type: 'SET_ERROR', error: 'No supported tokens found in your wallet.' });\n return;\n }\n\n const recommended = res.source?.recommended;\n const autoEntry = recommended\n ? guestEntryMatchingRecommended(balances, recommended)\n : null;\n const pick = autoEntry && entries.some(\n (e) => e.sourceChainId === autoEntry.sourceChainId\n && e.tokenAddress.toLowerCase() === autoEntry.tokenAddress.toLowerCase(),\n )\n ? autoEntry\n : entries[0];\n\n setPendingGuestEntry(pick);\n setGuestFee(null);\n if (res.fee?.quote != null) {\n setGuestFee(res.fee);\n return;\n }\n\n setGuestQuoteLoading(true);\n try {\n const quote = await api.postGuestTransferFeeQuote(\n apiBaseUrl,\n guestTransferId,\n guestSessionToken,\n senderAddress,\n pick.sourceChainId,\n pick.tokenAddress,\n );\n setGuestFee(quote);\n } catch (err) {\n captureException(err);\n setPendingGuestEntry(null);\n setGuestFee(null);\n const msg = mapQuoteErrorMessage(err);\n dispatch({ type: 'SET_ERROR', error: msg });\n onError?.(msg);\n } finally {\n setGuestQuoteLoading(false);\n }\n })\n .catch((err) => {\n captureException(err);\n dispatch({ type: 'SET_ERROR', error: 'Failed to load payment sources.' });\n })\n .finally(() => setLoadingBalances(false));\n }, [isGuestFlow, guestTransferId, guestSessionToken, apiBaseUrl, wagmiConfig, dispatch, onError]);\n\n // ── Reset state when leaving guest flow ──\n useEffect(() => {\n if (!isGuestFlow) {\n fetchedRef.current = false;\n setGuestTokenEntries([]);\n setPendingGuestEntry(null);\n setGuestFee(null);\n setGuestQuoteLoading(false);\n }\n }, [isGuestFlow]);\n\n // ── Token row → POST /quotes (fee preview) ──\n const handleSelectGuestToken = useCallback(async (entry: GuestTokenEntry) => {\n if (!guestTransferId || !guestSessionToken) return;\n const account = getAccount(wagmiConfig);\n if (!account.address) {\n dispatch({ type: 'SET_ERROR', error: 'Wallet not connected.' });\n return;\n }\n\n setGuestQuoteLoading(true);\n dispatch({ type: 'SET_ERROR', error: null });\n setPendingGuestEntry(entry);\n setGuestFee(null);\n\n try {\n console.info(\n `[blink-sdk] type=guest Fee quote preview: address=${account.address}, ` +\n `chain=${entry.sourceChainId}, token=${entry.tokenSymbol}`,\n );\n\n const quote = await api.postGuestTransferFeeQuote(\n apiBaseUrl,\n guestTransferId,\n guestSessionToken,\n account.address,\n entry.sourceChainId,\n entry.tokenAddress,\n );\n setGuestFee(quote);\n } catch (err) {\n captureException(err);\n setPendingGuestEntry(null);\n setGuestFee(null);\n const msg = mapQuoteErrorMessage(err);\n dispatch({ type: 'SET_ERROR', error: msg });\n onError?.(msg);\n } finally {\n setGuestQuoteLoading(false);\n }\n }, [guestTransferId, guestSessionToken, wagmiConfig, apiBaseUrl, dispatch, onError]);\n\n // ── Confirm: commit sender, execute bridge steps, poll for completion ──\n const handleConfirmGuestToken = useCallback(async () => {\n if (!guestTransferId || !guestSessionToken || !pendingGuestEntry) return;\n const account = getAccount(wagmiConfig);\n if (!account.address) {\n dispatch({ type: 'SET_ERROR', error: 'Wallet not connected.' });\n return;\n }\n\n const entry = pendingGuestEntry;\n setBridgePhase('preparing');\n dispatch({ type: 'SET_ERROR', error: null });\n\n try {\n // ── 1. Commit sender + optional one-tap (parallelized) ──\n if (guestOneTapOptIn && selectedProviderId) {\n dispatch({ type: 'GUEST_PREAUTH_BEGIN' });\n\n const providerName = providers.find((p) => p.id === selectedProviderId)?.name ?? selectedProviderId;\n console.info(`[blink-sdk] type=guest Creating inline preauth account for ${providerName}`);\n\n const oneTapSetup = async () => {\n const created = await api.createGuestAccount(apiBaseUrl, guestSessionToken, selectedProviderId, providerName);\n const session = await api.fetchAuthorizationSessionByToken(apiBaseUrl, created.sessionToken);\n await api.updateUserConfigBySession(apiBaseUrl, session.id, { defaultAllowance: guestOneTapLimit });\n startGuestAccountPolling(guestSessionToken, session.id);\n dispatch({ type: 'GUEST_PREAUTH_DETECTED', accountId: created.accountId, sessionId: session.id });\n inlinePreauthSessionIdRef.current = session.id;\n };\n\n await Promise.all([\n oneTapSetup(),\n api.setTransferSender(\n apiBaseUrl, guestTransferId, guestSessionToken,\n account.address, entry.sourceChainId, entry.tokenAddress,\n ),\n ]);\n } else {\n console.info(\n `[blink-sdk] type=guest Setting sender: address=${account.address}, ` +\n `chain=${entry.sourceChainId}, token=${entry.tokenSymbol}`,\n );\n\n await api.setTransferSender(\n apiBaseUrl, guestTransferId, guestSessionToken,\n account.address, entry.sourceChainId, entry.tokenAddress,\n );\n }\n\n // ── 2. Poll for signPayload with bridgeSteps ──\n setBridgePhase('building');\n\n let signPayload: GuestSignPayload | null = null;\n for (let i = 0; i < GUEST_SIGN_MAX_POLLS; i++) {\n const transfer = await api.getGuestTransfer(apiBaseUrl, guestTransferId, guestSessionToken);\n const payload = transfer.signPayload as unknown as GuestSignPayload | null;\n if (payload?.bridgeSteps && payload.bridgeSteps.length > 0) {\n signPayload = payload;\n break;\n }\n if (transfer.status === 'FAILED') {\n setBridgePhase(null);\n dispatch({ type: 'SET_ERROR', error: 'Transfer failed.' });\n return;\n }\n await new Promise((r) => setTimeout(r, GUEST_SIGN_POLL_MS));\n }\n\n if (!signPayload) {\n setBridgePhase(null);\n dispatch({ type: 'SET_ERROR', error: 'Timed out waiting for bridge quote. Please try again.' });\n return;\n }\n\n console.info(\n `[blink-sdk] type=guest Bridge quote ready: ` +\n `${signPayload.bridgeSteps.length} step(s), ` +\n `token=${signPayload.tokenSymbol}, chain=${signPayload.chainName}`,\n );\n\n // ── 3. Switch to the source chain if needed ──\n const targetChainId = entry.chainId;\n if (targetChainId) {\n const numericChainId = Number(targetChainId);\n if (!isNaN(numericChainId) && account.chainId !== numericChainId) {\n console.info(`[blink-sdk] type=guest Switching chain to ${numericChainId}`);\n setBridgePhase('wallet');\n await switchChainAsync({ chainId: numericChainId });\n }\n }\n\n // ── 4. Execute each bridge step ──\n const walletClient = await getWalletClient(wagmiConfig);\n const sender = account.address;\n if (!sender) {\n setBridgePhase(null);\n dispatch({ type: 'SET_ERROR', error: 'Wallet not connected.' });\n return;\n }\n\n let lastTxHash: string | null = null;\n for (let stepIdx = 0; stepIdx < signPayload.bridgeSteps.length; stepIdx++) {\n const bridgeStep = signPayload.bridgeSteps[stepIdx];\n console.info(\n `[blink-sdk] type=guest Executing bridge step ${stepIdx + 1}/${signPayload.bridgeSteps.length} ` +\n `to=${bridgeStep.to}`,\n );\n\n setBridgePhase('wallet');\n\n const txHash = await walletClient.request({\n method: 'eth_sendTransaction',\n params: [{\n from: sender,\n to: bridgeStep.to as `0x${string}`,\n data: bridgeStep.data as `0x${string}`,\n value: bridgeStep.value as `0x${string}`,\n }],\n });\n\n console.info(`[blink-sdk] type=guest Bridge step ${stepIdx + 1} tx sent: ${txHash}`);\n\n setBridgePhase('sending');\n\n await waitForTransactionReceipt(wagmiConfig, {\n hash: txHash as `0x${string}`,\n });\n\n lastTxHash = txHash;\n }\n\n if (!lastTxHash) {\n setBridgePhase(null);\n dispatch({ type: 'SET_ERROR', error: 'No bridge transactions were executed.' });\n return;\n }\n\n // ── 5. Submit the origin tx hash ──\n setBridgePhase('completing');\n\n console.info(`[blink-sdk] type=guest Submitting originTxHash: ${lastTxHash}`);\n await api.signGuestTransfer(apiBaseUrl, guestTransferId, guestSessionToken, lastTxHash);\n\n // ── 6. Poll for completion ──\n for (let i = 0; i < GUEST_COMPLETION_MAX_POLLS; i++) {\n const transfer = await api.getGuestTransfer(apiBaseUrl, guestTransferId, guestSessionToken);\n\n if (transfer.status === 'COMPLETED') {\n console.info(`[blink-sdk] type=guest Transfer completed`);\n\n setBridgePhase('done');\n await new Promise((r) => setTimeout(r, DONE_HOLD_MS));\n\n dispatch({ type: 'GUEST_TRANSFER_COMPLETED', transfer });\n onComplete?.(transfer);\n\n const preauthSessionId = inlinePreauthSessionIdRef.current;\n if (preauthSessionId) {\n inlinePreauthSessionIdRef.current = null;\n console.info(`[blink-sdk] type=guest Starting inline Permit2 executor for session ${preauthSessionId}`);\n authExecutor.executeSessionById(preauthSessionId);\n }\n return;\n }\n\n if (transfer.status === 'FAILED') {\n setBridgePhase(null);\n dispatch({ type: 'TRANSFER_FAILED', transfer, error: 'Transfer failed.' });\n return;\n }\n\n await new Promise((r) => setTimeout(r, GUEST_COMPLETION_POLL_MS));\n }\n\n setBridgePhase(null);\n dispatch({\n type: 'SET_ERROR',\n error: 'Transfer is taking longer than expected. It may still complete.',\n });\n } catch (err) {\n captureException(err);\n const msg = err instanceof Error ? err.message : 'Bridge execution failed';\n console.error('[blink-sdk] type=guest Bridge execution error:', err);\n\n const displayMsg = isUserRejection(msg)\n ? 'You rejected the transaction. Please approve in your wallet to continue.'\n : msg;\n\n setBridgePhase(null);\n dispatch({ type: 'SET_ERROR', error: displayMsg });\n if (guestOneTapOptIn) {\n dispatch({ type: 'GUEST_PREAUTH_END' });\n inlinePreauthSessionIdRef.current = null;\n }\n onError?.(displayMsg);\n }\n }, [\n guestTransferId,\n guestSessionToken,\n pendingGuestEntry,\n wagmiConfig,\n apiBaseUrl,\n dispatch,\n onComplete,\n onError,\n guestOneTapOptIn,\n guestOneTapLimit,\n selectedProviderId,\n providers,\n startGuestAccountPolling,\n switchChainAsync,\n authExecutor,\n ]);\n\n const handleGuestBackFromTokenPicker = useCallback(() => {\n setPendingGuestEntry(null);\n setGuestFee(null);\n dispatch({ type: 'GUEST_BACK_FROM_TOKEN_PICKER' });\n }, [dispatch]);\n\n return {\n guestTokenEntries,\n loadingBalances,\n bridgePhase,\n pendingGuestEntry,\n guestFee,\n guestQuoteLoading,\n handleSelectGuestToken,\n handleConfirmGuestToken,\n handleGuestBackFromTokenPicker,\n };\n}\n","import { useCallback, useState, type Dispatch } from 'react';\n\nimport type { SourceOption } from '../types';\nimport type { PaymentAction } from '../paymentReducer';\nimport type { UseAuthorizationExecutorResult } from '../hooks';\nimport * as api from '../api';\nimport { captureException } from '../sentry';\nimport { buildSelectSourceChoices } from '../paymentHelpers';\n\nexport interface OneTapSetupHandlersDeps {\n dispatch: Dispatch<PaymentAction>;\n getAccessToken: () => Promise<string | null>;\n apiBaseUrl: string;\n authExecutor: UseAuthorizationExecutorResult;\n selectSourceChainName: string;\n selectSourceTokenSymbol: string;\n /**\n * When set (e.g. guest preauthorize), saves defaultAllowance on the authorization session\n * via PATCH /v1/authorization-sessions/{id}/user-config — not on the Privy user row.\n */\n authorizationSessionIdForGuest: string | null;\n /**\n * Same predicate as `useSourceSelectionHandlers` guest post-pay preauth: desktop Setup **Approve**\n * must clear the COMPLETED guest transfer before `resolveSelectSource` (mobile still uses\n * `handleConfirmSelectSource` for immediate confirm).\n */\n guestPostPayPreauth: boolean;\n /** When true, clear transfer without `REQUEST_LOGIN` until inline preauth session completes. */\n deferGuestPreauthLogin?: boolean;\n}\n\nexport interface OneTapSetupHandlersResult {\n handleSetupOneTap: (limit: number) => Promise<void>;\n savingOneTapLimit: boolean;\n}\n\nexport function useOneTapSetupHandlers(deps: OneTapSetupHandlersDeps): OneTapSetupHandlersResult {\n const {\n dispatch, getAccessToken, apiBaseUrl, authExecutor,\n selectSourceChainName, selectSourceTokenSymbol,\n authorizationSessionIdForGuest,\n guestPostPayPreauth,\n deferGuestPreauthLogin = false,\n } = deps;\n\n const [savingOneTapLimit, setSavingOneTapLimit] = useState(false);\n\n const handleSetupOneTap = useCallback(async (limit: number) => {\n setSavingOneTapLimit(true);\n try {\n if (authorizationSessionIdForGuest) {\n await api.updateUserConfigBySession(\n apiBaseUrl,\n authorizationSessionIdForGuest,\n { defaultAllowance: limit },\n );\n } else {\n const token = await getAccessToken();\n if (!token) throw new Error('Not authenticated');\n await api.updateUserConfig(apiBaseUrl, token, { defaultAllowance: limit });\n }\n\n const willResolveSession =\n authExecutor.pendingSelectSource != null || authExecutor.pendingOneTapSetup != null;\n\n // Match `handleConfirmSelectSource`: desktop Setup uses only `handleSetupOneTap`, so without\n // this, COMPLETED guest transfer stays in state and resolvePhase maps to deposit success.\n if (guestPostPayPreauth && willResolveSession) {\n if (deferGuestPreauthLogin) {\n dispatch({ type: 'GUEST_PREAUTH_CLEAR_TRANSFER' });\n } else {\n dispatch({ type: 'REQUEST_LOGIN' });\n }\n }\n\n if (authExecutor.pendingSelectSource) {\n const action = authExecutor.pendingSelectSource;\n const recommended = action.metadata?.recommended as\n | { chainName: string; tokenSymbol: string }\n | undefined;\n\n let chainName: string;\n let tokenSymbol: string;\n\n if (selectSourceChainName && selectSourceTokenSymbol) {\n chainName = selectSourceChainName;\n tokenSymbol = selectSourceTokenSymbol;\n } else {\n const options = (action.metadata?.options ?? []) as SourceOption[];\n const choices = buildSelectSourceChoices(options);\n chainName = recommended?.chainName ?? choices[0]?.chainName ?? 'Base';\n tokenSymbol = recommended?.tokenSymbol ?? choices[0]?.tokens[0]?.tokenSymbol ?? 'USDC';\n }\n\n dispatch({ type: 'SET_ONE_TAP_LIMIT_SAVED_DURING_SETUP', saved: true });\n authExecutor.resolveSelectSource({ chainName, tokenSymbol });\n } else if (authExecutor.pendingOneTapSetup) {\n authExecutor.resolveOneTapSetup();\n }\n if (!willResolveSession) {\n dispatch({ type: 'SET_USER_INTENT', intent: { step: 'deposit' } });\n }\n } catch (err) {\n captureException(err);\n dispatch({\n type: 'SET_ERROR',\n error: err instanceof Error ? err.message : 'Failed to save One-Tap limit',\n });\n } finally {\n setSavingOneTapLimit(false);\n }\n }, [\n getAccessToken, apiBaseUrl, authExecutor, dispatch,\n selectSourceChainName, selectSourceTokenSymbol, authorizationSessionIdForGuest,\n guestPostPayPreauth,\n deferGuestPreauthLogin,\n ]);\n\n return {\n handleSetupOneTap,\n savingOneTapLimit,\n };\n}\n","import { useEffect, type Dispatch } from 'react';\n\nimport type { PaymentAction } from '../paymentReducer';\n\nexport interface PrivySessionSyncDeps {\n dispatch: Dispatch<PaymentAction>;\n ready: boolean;\n authenticated: boolean;\n}\n\n/**\n * Synchronizes with the Privy auth client: mirrors `ready` and `authenticated`\n * into the payment reducer so resolvePhase can show loading until Privy boots\n * and can send guests to wallet entry without waiting for passkey config.\n */\nexport function usePrivySessionSyncEffect(deps: PrivySessionSyncDeps): void {\n const { dispatch, ready, authenticated } = deps;\n\n useEffect(() => {\n dispatch({\n type: 'SYNC_PRIVY_SESSION',\n ready,\n authenticated,\n });\n }, [dispatch, ready, authenticated]);\n}\n","import { useEffect, useRef, type Dispatch, type MutableRefObject } from 'react';\nimport { usePrivy } from '@privy-io/react-auth';\n\nimport type { Account, Transfer } from '../types';\nimport type { PaymentAction } from '../paymentReducer';\nimport type { UseTransferPollingResult } from '../hooks';\nimport * as api from '../api';\nimport {\n ACTIVE_CREDENTIAL_STORAGE_KEY,\n clearMobileFlowState,\n loadMobileFlowState,\n persistMobileFlowState,\n} from '../paymentHelpers';\nimport { extractPasskeyCredential } from './useAuthHandlers';\n\nexport interface PasskeyCheckDeps {\n dispatch: Dispatch<PaymentAction>;\n ready: boolean;\n authenticated: boolean;\n apiBaseUrl: string;\n activeCredentialId: string | null;\n passkeyConfigLoaded: boolean;\n checkingPasskeyRef: MutableRefObject<boolean>;\n polling: UseTransferPollingResult;\n mobileSetupFlowRef: MutableRefObject<boolean>;\n handlingMobileReturnRef: MutableRefObject<boolean>;\n setupAccountIdRef: MutableRefObject<string | null>;\n reauthSessionIdRef: MutableRefObject<string | null>;\n reauthTokenRef: MutableRefObject<{ walletId: string; tokenSymbol: string } | null>;\n pollingTransferIdRef: MutableRefObject<string | null>;\n handleAuthorizedMobileReturn: (transfer: Transfer, isSetup: boolean) => Promise<void>;\n onComplete?: (transfer: Transfer) => void;\n startGuestAccountPolling: (guestToken: string, sessionId?: string) => void;\n getAccessToken?: () => Promise<string | null>;\n}\n\n/**\n * After Privy authenticates the user, fetches passkey config from the API\n * and tries to activate a device credential. Handles restoring persisted\n * mobile flow state from before a redirect.\n *\n * If no credential is registered on the Swype backend but the Privy user\n * has a passkey linked account, auto-registers it.\n */\nexport function usePasskeyCheckEffect(deps: PasskeyCheckDeps): void {\n const {\n dispatch, ready, authenticated, apiBaseUrl,\n activeCredentialId, passkeyConfigLoaded,\n checkingPasskeyRef,\n polling, mobileSetupFlowRef, handlingMobileReturnRef,\n setupAccountIdRef, reauthSessionIdRef, reauthTokenRef,\n pollingTransferIdRef, startGuestAccountPolling,\n } = deps;\n\n const { getAccessToken: privyGetAccessToken, user } = usePrivy();\n const effectiveGetAccessToken = deps.getAccessToken ?? privyGetAccessToken;\n const onCompleteRef = useRef(deps.onComplete);\n onCompleteRef.current = deps.onComplete;\n const getAccessTokenRef = useRef(effectiveGetAccessToken);\n getAccessTokenRef.current = effectiveGetAccessToken;\n const pollingRef = useRef(polling);\n pollingRef.current = polling;\n const handleAuthorizedMobileReturnRef = useRef(deps.handleAuthorizedMobileReturn);\n handleAuthorizedMobileReturnRef.current = deps.handleAuthorizedMobileReturn;\n const userRef = useRef(user);\n userRef.current = user;\n\n // Synchronize with Swype backend passkey config after Privy authentication.\n useEffect(() => {\n if (!ready || !authenticated) {\n checkingPasskeyRef.current = false;\n return;\n }\n if (passkeyConfigLoaded || activeCredentialId) return;\n if (checkingPasskeyRef.current) return;\n\n checkingPasskeyRef.current = true;\n let cancelled = false;\n dispatch({ type: 'SET_ERROR', error: null });\n\n const startGuestAccountPollingRef = startGuestAccountPolling;\n\n const restoreState = async (credId: string, token: string) => {\n const persisted = loadMobileFlowState();\n\n if (persisted?.isGuestPreauth && persisted.guestSessionToken && persisted.sessionId) {\n mobileSetupFlowRef.current = true;\n if (persisted.accountId) {\n setupAccountIdRef.current = persisted.accountId;\n dispatch({\n type: 'GUEST_PREAUTH_DETECTED',\n accountId: persisted.accountId,\n sessionId: persisted.sessionId,\n });\n }\n dispatch({ type: 'MOBILE_DEEPLINK_READY', deeplinkUri: persisted.deeplinkUri });\n startGuestAccountPollingRef(persisted.guestSessionToken, persisted.sessionId);\n return;\n }\n\n let accts: Account[] = [];\n try {\n accts = await api.fetchAccounts(apiBaseUrl, token, credId);\n if (cancelled) return;\n } catch { /* Proceed with empty accounts */ }\n\n if (persisted) {\n if (persisted.isReauthorization && persisted.sessionId) {\n try {\n const session = await api.fetchAuthorizationSession(apiBaseUrl, persisted.sessionId);\n if (cancelled) return;\n if (session.status === 'AUTHORIZED') {\n clearMobileFlowState();\n if (persisted.reauthorizationToken) {\n dispatch({ type: 'SELECT_TOKEN', walletId: persisted.reauthorizationToken.walletId, tokenSymbol: persisted.reauthorizationToken.tokenSymbol });\n }\n return;\n }\n } catch { /* fall through */ }\n\n reauthSessionIdRef.current = persisted.sessionId;\n reauthTokenRef.current = persisted.reauthorizationToken ?? null;\n mobileSetupFlowRef.current = true;\n setupAccountIdRef.current = persisted.accountId ?? null;\n dispatch({\n type: 'ENTER_MOBILE_FLOW',\n deeplinkUri: persisted.deeplinkUri,\n providerId: persisted.providerId,\n });\n return;\n }\n\n if (persisted.isSetup && persisted.transferId) {\n try {\n const existingTransfer = await api.fetchTransfer(apiBaseUrl, token, persisted.transferId);\n if (cancelled) return;\n if (existingTransfer.status === 'AUTHORIZED') {\n await handleAuthorizedMobileReturnRef.current(existingTransfer, true);\n return;\n }\n } catch { /* fall through */ }\n }\n\n if (persisted.isSetup && accts.some((a) => a.wallets.some((w) => w.status === 'ACTIVE'))) {\n clearMobileFlowState();\n return;\n }\n\n if (persisted.accountId && !persisted.transferId) {\n if (persisted.sessionId) {\n try {\n const session = await api.fetchAuthorizationSession(apiBaseUrl, persisted.sessionId);\n if (cancelled) return;\n if (session.status === 'AUTHORIZED') {\n clearMobileFlowState();\n return;\n }\n } catch { /* fall through */ }\n }\n mobileSetupFlowRef.current = true;\n setupAccountIdRef.current = persisted.accountId;\n dispatch({\n type: 'ENTER_MOBILE_FLOW',\n deeplinkUri: persisted.deeplinkUri,\n providerId: persisted.providerId,\n });\n return;\n }\n\n if (persisted.transferId) {\n try {\n const existingTransfer = await api.fetchTransfer(apiBaseUrl, token, persisted.transferId);\n if (cancelled) return;\n\n if (existingTransfer.status === 'COMPLETED') {\n if (persisted.isGuestPreauth && persisted.guestSessionToken) {\n let guestLookup: Awaited<ReturnType<typeof api.fetchGuestAccount>> = null;\n try {\n guestLookup = await api.fetchGuestAccount(\n apiBaseUrl,\n persisted.guestSessionToken,\n );\n } catch {\n persistMobileFlowState({\n deeplinkUri: persisted.deeplinkUri,\n providerId: persisted.providerId ?? null,\n isSetup: persisted.isSetup ?? true,\n guestSessionToken: persisted.guestSessionToken,\n transferId: persisted.transferId,\n isGuestPreauth: true,\n accountId: persisted.accountId,\n sessionId: persisted.sessionId,\n });\n return;\n }\n if (guestLookup == null) {\n persistMobileFlowState({\n deeplinkUri: persisted.deeplinkUri,\n providerId: persisted.providerId ?? null,\n isSetup: persisted.isSetup ?? true,\n guestSessionToken: persisted.guestSessionToken,\n transferId: persisted.transferId,\n isGuestPreauth: true,\n accountId: persisted.accountId,\n sessionId: persisted.sessionId,\n });\n return;\n }\n clearMobileFlowState();\n dispatch({\n type: 'GUEST_PREAUTH_RESUME_WITH_TRANSFER',\n transfer: existingTransfer,\n guestSessionToken: persisted.guestSessionToken,\n guestPreauthAccountId: guestLookup.accountId,\n guestPreauthSessionId: persisted.sessionId ?? null,\n selectedProviderId: persisted.providerId,\n });\n onCompleteRef.current?.(existingTransfer);\n return;\n }\n clearMobileFlowState();\n dispatch({ type: 'MOBILE_RESUME_SUCCESS', transfer: existingTransfer });\n onCompleteRef.current?.(existingTransfer);\n return;\n }\n if (existingTransfer.status === 'FAILED') {\n clearMobileFlowState();\n dispatch({ type: 'MOBILE_RESUME_FAILED', transfer: existingTransfer });\n return;\n }\n if (existingTransfer.status === 'SENDING' || existingTransfer.status === 'SENT') {\n clearMobileFlowState();\n dispatch({ type: 'MOBILE_RESUME_PROCESSING', transfer: existingTransfer });\n pollingRef.current.startPolling(existingTransfer.id);\n return;\n }\n if (existingTransfer.status === 'AUTHORIZED') {\n await handleAuthorizedMobileReturnRef.current(existingTransfer, !!persisted.isSetup);\n return;\n }\n\n if (persisted.isSetup) {\n clearMobileFlowState();\n return;\n }\n } catch (err) {\n if (cancelled) return;\n dispatch({\n type: 'ENTER_MOBILE_FLOW',\n deeplinkUri: persisted.deeplinkUri,\n providerId: persisted.providerId,\n error: err instanceof Error\n ? err.message\n : 'Unable to refresh wallet authorization status.',\n });\n pollingTransferIdRef.current = persisted.transferId ?? null;\n mobileSetupFlowRef.current = persisted.isSetup;\n setupAccountIdRef.current = persisted.accountId ?? null;\n if (persisted.transferId) pollingRef.current.startPolling(persisted.transferId);\n return;\n }\n\n dispatch({\n type: 'ENTER_MOBILE_FLOW',\n deeplinkUri: persisted.deeplinkUri,\n providerId: persisted.providerId,\n });\n pollingTransferIdRef.current = persisted.transferId ?? null;\n mobileSetupFlowRef.current = persisted.isSetup;\n setupAccountIdRef.current = persisted.accountId ?? null;\n if (persisted.transferId) pollingRef.current.startPolling(persisted.transferId);\n return;\n }\n }\n };\n\n const autoRegisterFromPrivy = async (token: string) => {\n const credential = extractPasskeyCredential(userRef.current);\n if (!credential) return;\n\n try {\n await api.registerPasskey(apiBaseUrl, token, credential.credentialId, credential.publicKey);\n } catch {\n // May already be registered; try to activate anyway\n }\n if (cancelled) return;\n dispatch({ type: 'PASSKEY_ACTIVATED', credentialId: credential.credentialId, publicKey: credential.publicKey });\n window.localStorage.setItem(ACTIVE_CREDENTIAL_STORAGE_KEY, credential.credentialId);\n api.reportPasskeyActivity(apiBaseUrl, token, credential.credentialId).catch(() => {});\n await restoreState(credential.credentialId, token);\n };\n\n const checkPasskey = async () => {\n try {\n let token: string | null = null;\n for (let attempt = 0; attempt < 3; attempt++) {\n token = await getAccessTokenRef.current();\n if (token || cancelled) break;\n await new Promise((r) => setTimeout(r, 1000));\n }\n if (cancelled) return;\n if (!token) {\n dispatch({\n type: 'PASSKEY_CONFIG_LOADED',\n knownIds: [],\n });\n dispatch({\n type: 'SET_ERROR',\n error: 'Could not refresh your session. Try signing in again.',\n });\n return;\n }\n\n const { config } = await api.fetchUserConfig(apiBaseUrl, token);\n if (cancelled) return;\n\n const allPasskeys = config.passkeys ?? (config.passkey ? [config.passkey] : []);\n\n if (allPasskeys.length === 0) {\n // Defer PASSKEY_CONFIG_LOADED until after registration to avoid\n // dep-change cleanup cancelling autoRegisterFromPrivy mid-await.\n await autoRegisterFromPrivy(token);\n if (cancelled) return;\n dispatch({\n type: 'PASSKEY_CONFIG_LOADED',\n knownIds: [],\n oneTapLimit: config.defaultAllowance ?? undefined,\n });\n return;\n }\n\n dispatch({\n type: 'PASSKEY_CONFIG_LOADED',\n knownIds: allPasskeys.map((p) => p.credentialId),\n oneTapLimit: config.defaultAllowance ?? undefined,\n });\n\n if (\n activeCredentialId &&\n allPasskeys.some((p) => p.credentialId === activeCredentialId)\n ) {\n const pk = allPasskeys.find((p) => p.credentialId === activeCredentialId)?.publicKey;\n if (pk) {\n dispatch({ type: 'PASSKEY_ACTIVATED', credentialId: activeCredentialId, publicKey: pk });\n }\n await restoreState(activeCredentialId, token);\n return;\n }\n\n const privyCredential = extractPasskeyCredential(userRef.current);\n if (privyCredential) {\n const matchingBackendKey = allPasskeys.find(\n (p) => p.credentialId === privyCredential.credentialId,\n );\n if (matchingBackendKey) {\n dispatch({\n type: 'PASSKEY_ACTIVATED',\n credentialId: privyCredential.credentialId,\n publicKey: matchingBackendKey.publicKey,\n });\n window.localStorage.setItem(ACTIVE_CREDENTIAL_STORAGE_KEY, privyCredential.credentialId);\n api.reportPasskeyActivity(apiBaseUrl, token, privyCredential.credentialId).catch(() => {});\n await restoreState(privyCredential.credentialId, token);\n return;\n }\n // Privy credential not registered on backend — register it\n await autoRegisterFromPrivy(token);\n return;\n }\n\n } catch (err) {\n dispatch({\n type: 'PASSKEY_CONFIG_LOADED',\n knownIds: [],\n });\n dispatch({\n type: 'SET_ERROR',\n error:\n err instanceof Error\n ? err.message\n : 'Unable to load passkey settings.',\n });\n }\n };\n\n checkPasskey();\n return () => {\n cancelled = true;\n checkingPasskeyRef.current = false;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ready, authenticated, apiBaseUrl, activeCredentialId, passkeyConfigLoaded]);\n}\n","export type DataLoadAction = 'load' | 'wait' | 'reset';\n\ninterface ResolveDataLoadActionInput {\n authenticated: boolean;\n accountsCount: number;\n hasActiveCredential: boolean;\n loading: boolean;\n}\n\nexport function resolveDataLoadAction({\n authenticated,\n accountsCount,\n hasActiveCredential,\n loading,\n}: ResolveDataLoadActionInput): DataLoadAction {\n if (!authenticated || accountsCount > 0 || !hasActiveCredential) {\n return 'reset';\n }\n\n if (loading) {\n return 'wait';\n }\n\n return 'load';\n}\n","import { useEffect, useRef, type Dispatch, type MutableRefObject } from 'react';\nimport { usePrivy } from '@privy-io/react-auth';\n\nimport type { PaymentAction, PaymentState } from '../paymentReducer';\nimport * as api from '../api';\nimport { captureException } from '../sentry';\nimport { resolveDataLoadAction } from '../dataLoading';\nimport {\n clearMobileFlowState,\n loadMobileFlowState,\n resolveDepositSelectionAfterRefresh,\n} from '../paymentHelpers';\n\nexport interface DataLoadDeps {\n state: PaymentState;\n dispatch: Dispatch<PaymentAction>;\n authenticated: boolean;\n apiBaseUrl: string;\n depositAmount: number | null;\n loadingDataRef: MutableRefObject<boolean>;\n reloadAccounts: () => Promise<void>;\n getAccessToken?: () => Promise<string | null>;\n}\n\n/**\n * Loads providers, accounts, and chains when the user is authenticated\n * and has an active credential. Also fetches providers without auth for\n * the guest entry point.\n */\nexport function useDataLoadEffect(deps: DataLoadDeps): void {\n const {\n state, dispatch, authenticated, apiBaseUrl, depositAmount, loadingDataRef,\n } = deps;\n\n const { getAccessToken: privyGetAccessToken } = usePrivy();\n const effectiveGetAccessToken = deps.getAccessToken ?? privyGetAccessToken;\n const getAccessTokenRef = useRef(effectiveGetAccessToken);\n getAccessTokenRef.current = effectiveGetAccessToken;\n\n const lastAccountFetchRef = useRef<number>(0);\n\n // Load providers + accounts + chains for authenticated users\n useEffect(() => {\n const loadAction = resolveDataLoadAction({\n authenticated,\n accountsCount: state.accounts.length,\n hasActiveCredential: !!state.activeCredentialId,\n loading: loadingDataRef.current,\n });\n\n if (loadAction === 'reset') {\n loadingDataRef.current = false;\n dispatch({ type: 'DATA_LOAD_END' });\n return;\n }\n if (loadAction === 'wait') return;\n\n const credentialId = state.activeCredentialId;\n if (!credentialId) {\n loadingDataRef.current = false;\n dispatch({ type: 'DATA_LOAD_END' });\n return;\n }\n\n let cancelled = false;\n loadingDataRef.current = true;\n\n const load = async () => {\n dispatch({ type: 'DATA_LOAD_START' });\n try {\n const token = await getAccessTokenRef.current();\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, credentialId),\n api.fetchChains(apiBaseUrl, token),\n ]);\n if (cancelled) return;\n\n const parsedAmt = depositAmount != null ? depositAmount : 0;\n const { defaults, resetSelectedTokenSymbol } = resolveDepositSelectionAfterRefresh(\n accts,\n parsedAmt,\n {\n selectedAccountId: state.selectedAccountId,\n selectedWalletId: state.selectedWalletId,\n selectedTokenSymbol: state.selectedTokenSymbol,\n },\n );\n\n const persisted = loadMobileFlowState();\n const clearMobile = persisted?.isSetup &&\n accts.some((a) => a.wallets.some((w) => w.status === 'ACTIVE'));\n\n dispatch({\n type: 'DATA_LOADED',\n providers: prov,\n accounts: accts,\n chains: chn,\n defaults,\n clearMobileState: clearMobile,\n resetSelectedTokenSymbol,\n });\n\n if (clearMobile) clearMobileFlowState();\n } catch (err) {\n if (!cancelled) {\n captureException(err);\n dispatch({\n type: 'SET_ERROR',\n error: err instanceof Error ? err.message : 'Failed to load data',\n });\n }\n } finally {\n if (!cancelled) {\n loadingDataRef.current = false;\n dispatch({ type: 'DATA_LOAD_END' });\n }\n }\n };\n load();\n return () => {\n cancelled = true;\n loadingDataRef.current = false;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n authenticated, state.accounts.length, apiBaseUrl,\n state.activeCredentialId, state.selectedAccountId, state.selectedWalletId,\n state.selectedTokenSymbol, depositAmount,\n ]);\n\n // Fetch providers without auth for the guest entry point\n useEffect(() => {\n if (authenticated || state.providers.length > 0) return;\n if (state.activeCredentialId) return;\n\n let cancelled = false;\n const loadProviders = async () => {\n try {\n const providers = await api.fetchProviders(apiBaseUrl);\n if (cancelled) return;\n dispatch({\n type: 'DATA_LOADED',\n providers,\n accounts: state.accounts,\n chains: state.chains,\n defaults: null,\n });\n } catch (err) {\n if (!cancelled) {\n captureException(err);\n }\n }\n };\n loadProviders();\n return () => { cancelled = true; };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [authenticated, state.providers.length, state.activeCredentialId, apiBaseUrl]);\n\n // Re-fetch accounts periodically on the deposit screen\n useEffect(() => {\n if (\n state.accounts.length > 0 &&\n state.activeCredentialId &&\n !state.loadingData &&\n !state.transfer &&\n authenticated &&\n Date.now() - lastAccountFetchRef.current > 15_000\n ) {\n lastAccountFetchRef.current = Date.now();\n deps.reloadAccounts();\n }\n }, [state.accounts.length, state.activeCredentialId, state.loadingData,\n state.transfer, authenticated, deps]);\n}\n","import { useEffect, type Dispatch, type MutableRefObject } from 'react';\n\nimport type { Transfer } from '../types';\nimport type { PaymentAction, PaymentState } from '../paymentReducer';\nimport type { UseTransferPollingResult } from '../hooks';\nimport { captureException } from '../sentry';\nimport { clearMobileFlowState } from '../paymentHelpers';\nimport {\n PROCESSING_TIMEOUT_MS,\n buildProcessingTimeoutMessage,\n getTransferStatus,\n hasProcessingTimedOut,\n isTransferAwaitingCompletion,\n} from '../processingStatus';\n\nexport interface ProcessingEffectDeps {\n state: PaymentState;\n dispatch: Dispatch<PaymentAction>;\n polling: UseTransferPollingResult;\n processingStartedAtRef: MutableRefObject<number | null>;\n onComplete?: (transfer: Transfer) => void;\n onError?: (error: string) => void;\n reloadAccounts: () => Promise<void>;\n}\n\n/**\n * Handles three concerns for in-flight transfers:\n * 1. Forwarding COMPLETED/FAILED polling results to the reducer\n * 2. Processing timeout detection\n */\nexport function useProcessingEffect(deps: ProcessingEffectDeps): void {\n const {\n state, dispatch, polling, processingStartedAtRef,\n onComplete, onError, reloadAccounts,\n } = deps;\n\n // Forward COMPLETED/FAILED from polling to reducer\n useEffect(() => {\n if (!polling.transfer) return;\n // Do not re-apply transfer while user is in email/SMS login (REQUEST_LOGIN / OTP); avoids\n // racing REQUEST_LOGIN (transfer cleared) and keeps guest recovery / passkey ordering stable.\n if (state.loginRequested) return;\n // Reducer intentionally cleared transfer (e.g. REQUEST_LOGIN during guest preauth); do not\n // re-apply a stale terminal result still held in polling state after OTP clears the guards above.\n if (\n !state.transfer\n && (polling.transfer.status === 'COMPLETED' || polling.transfer.status === 'FAILED')\n ) {\n return;\n }\n // Guest checkout completion is dispatched as GUEST_TRANSFER_COMPLETED by guest handlers only.\n // Forwarding TRANSFER_COMPLETED here also calls clearMobileFlowState(), which wipes\n // blink_mobile_flow (including isGuestPreauth) when resume polling re-fetches the same\n // completed guest transfer after MOBILE_DEEPLINK_READY.\n if (state.isGuestFlow) return;\n if (polling.transfer.status === 'COMPLETED') {\n clearMobileFlowState();\n dispatch({ type: 'TRANSFER_COMPLETED', transfer: polling.transfer });\n onComplete?.(polling.transfer);\n reloadAccounts();\n } else if (polling.transfer.status === 'FAILED') {\n clearMobileFlowState();\n dispatch({ type: 'TRANSFER_FAILED', transfer: polling.transfer, error: 'Transfer failed.' });\n }\n }, [\n polling.transfer,\n state.transfer,\n state.loginRequested,\n state.isGuestFlow,\n onComplete,\n dispatch,\n reloadAccounts,\n ]);\n\n // Processing timeout\n useEffect(() => {\n const isProcessing =\n state.creatingTransfer || isTransferAwaitingCompletion(state.transfer);\n\n if (!isProcessing) {\n processingStartedAtRef.current = null;\n return;\n }\n if (!processingStartedAtRef.current) {\n processingStartedAtRef.current = Date.now();\n }\n const elapsedMs = Date.now() - processingStartedAtRef.current;\n const remainingMs = PROCESSING_TIMEOUT_MS - elapsedMs;\n\n const handleTimeout = () => {\n if (!hasProcessingTimedOut(processingStartedAtRef.current, Date.now())) return;\n const status = getTransferStatus(polling.transfer, state.transfer);\n const msg = buildProcessingTimeoutMessage(status);\n captureException(new Error(msg));\n polling.stopPolling();\n dispatch({ type: 'PROCESSING_TIMEOUT', error: msg });\n onError?.(msg);\n };\n\n if (remainingMs <= 0) {\n handleTimeout();\n return;\n }\n\n const timeoutId = window.setTimeout(handleTimeout, remainingMs);\n return () => window.clearTimeout(timeoutId);\n }, [state.creatingTransfer, state.transfer, polling.transfer,\n polling.stopPolling, onError, dispatch, processingStartedAtRef]);\n}\n","import { useEffect, useRef, type Dispatch, type MutableRefObject } from 'react';\nimport { usePrivy } from '@privy-io/react-auth';\n\nimport type { Transfer } from '../types';\nimport type { PaymentAction, PaymentState } from '../paymentReducer';\nimport type { UseTransferPollingResult } from '../hooks';\nimport * as api from '../api';\nimport {\n clearMobileFlowState,\n loadMobileFlowState,\n} from '../paymentHelpers';\n\nexport interface MobilePollingDeps {\n state: PaymentState;\n dispatch: Dispatch<PaymentAction>;\n polling: UseTransferPollingResult;\n mobileSetupFlowRef: MutableRefObject<boolean>;\n handlingMobileReturnRef: MutableRefObject<boolean>;\n setupAccountIdRef: MutableRefObject<string | null>;\n reauthSessionIdRef: MutableRefObject<string | null>;\n reauthTokenRef: MutableRefObject<{ walletId: string; tokenSymbol: string } | null>;\n pollingTransferIdRef: MutableRefObject<string | null>;\n reloadAccounts: () => Promise<void>;\n handleAuthorizedMobileReturn: (transfer: Transfer, isSetup: boolean) => Promise<void>;\n apiBaseUrl: string;\n getAccessToken?: () => Promise<string | null>;\n}\n\n/**\n * Mobile-specific effects:\n * 1. Handle transfer reaching AUTHORIZED during mobile flow\n * 2. Poll for setup/reauthorization completion (non-guest-preauth paths)\n * 3. Resume transfer polling on page resume (`lastResumedAt` change)\n *\n * Visibility / pageshow listeners are no longer registered here. The\n * centralized `usePageResumeEffect` dispatches `PAGE_RESUMED` which updates\n * `state.lastResumedAt`; effects that include it in their dependency arrays\n * automatically re-run on resume.\n *\n * Guest post-pay preauth account polling is handled by `useGuestAccountPolling` (dedicated hook).\n */\nexport function useMobilePollingEffect(deps: MobilePollingDeps): void {\n const {\n state, dispatch, polling,\n mobileSetupFlowRef, handlingMobileReturnRef, setupAccountIdRef,\n reauthSessionIdRef, reauthTokenRef, pollingTransferIdRef,\n reloadAccounts, apiBaseUrl,\n } = deps;\n\n const { getAccessToken: privyGetAccessToken } = usePrivy();\n const effectiveGetAccessToken = deps.getAccessToken ?? privyGetAccessToken;\n const getAccessTokenRef = useRef(effectiveGetAccessToken);\n getAccessTokenRef.current = effectiveGetAccessToken;\n const handleAuthorizedMobileReturnRef = useRef(deps.handleAuthorizedMobileReturn);\n handleAuthorizedMobileReturnRef.current = deps.handleAuthorizedMobileReturn;\n\n // Handle transfer reaching AUTHORIZED during mobile flow\n useEffect(() => {\n if (!state.mobileFlow) {\n handlingMobileReturnRef.current = false;\n return;\n }\n // Guest post-pay preauthorize: do not complete here — guest account polling (fetchGuestAccount) owns\n // completion (avoids MOBILE_SETUP_COMPLETE without login when a stale device credential exists).\n if (state.isGuestFlow && state.guestPreauthSessionId != null) {\n return;\n }\n if (handlingMobileReturnRef.current) return;\n const polledTransfer = polling.transfer;\n if (!polledTransfer || polledTransfer.status !== 'AUTHORIZED') return;\n void handleAuthorizedMobileReturnRef.current(polledTransfer, mobileSetupFlowRef.current);\n }, [\n state.mobileFlow,\n state.isGuestFlow,\n state.guestPreauthSessionId,\n polling.transfer,\n handlingMobileReturnRef,\n mobileSetupFlowRef,\n ]);\n\n // Poll until setup/reauthorization completes.\n // `lastResumedAt` in the dependency array triggers an immediate re-poll on\n // page resume (replaces the old per-effect visibilitychange / pageshow listeners).\n useEffect(() => {\n if (!state.mobileFlow || !mobileSetupFlowRef.current) return;\n // Guest preauth (orphan account) must not use this path — it completes via the guest preauth\n // session poll + fetchGuestAccount even when Privy + device credential are present.\n if (state.isGuestFlow && state.guestPreauthSessionId != null) return;\n if (!state.activeCredentialId || !setupAccountIdRef.current) return;\n\n const accountId = setupAccountIdRef.current;\n const credentialId = state.activeCredentialId;\n const isReauth = !!reauthSessionIdRef.current;\n const sessionId = reauthSessionIdRef.current;\n const tokenSelection = reauthTokenRef.current;\n const persistedFlow = loadMobileFlowState();\n const setupSessionId = !isReauth ? persistedFlow?.sessionId : undefined;\n let cancelled = false;\n const POLL_INTERVAL_MS = 3000;\n\n const pollReauthorization = async () => {\n try {\n if (!sessionId || cancelled) return;\n const session = await api.fetchAuthorizationSession(apiBaseUrl, sessionId);\n if (cancelled) return;\n if (session.status === 'AUTHORIZED') {\n cancelled = true;\n mobileSetupFlowRef.current = false;\n setupAccountIdRef.current = null;\n reauthSessionIdRef.current = null;\n reauthTokenRef.current = null;\n clearMobileFlowState();\n try { await reloadAccounts(); } catch { /* best-effort */ }\n dispatch({ type: 'MOBILE_SETUP_COMPLETE' });\n if (tokenSelection) {\n dispatch({ type: 'SELECT_TOKEN', walletId: tokenSelection.walletId, tokenSymbol: tokenSelection.tokenSymbol });\n }\n }\n } catch { /* silently retry */ }\n };\n\n const completeSetup = async () => {\n cancelled = true;\n mobileSetupFlowRef.current = false;\n setupAccountIdRef.current = null;\n clearMobileFlowState();\n try { await reloadAccounts(); } catch { /* best-effort */ }\n dispatch({ type: 'MOBILE_SETUP_COMPLETE' });\n };\n\n const pollWalletActive = async () => {\n try {\n const token = await getAccessTokenRef.current();\n if (!token || cancelled) return;\n const acct = await api.fetchAccount(apiBaseUrl, token, accountId, credentialId);\n if (cancelled) return;\n const hasActive = acct.wallets.some((w) => w.status === 'ACTIVE');\n if (hasActive) {\n await completeSetup();\n return;\n }\n\n if (setupSessionId) {\n try {\n const session = await api.fetchAuthorizationSession(apiBaseUrl, setupSessionId);\n if (cancelled) return;\n if (session.status === 'AUTHORIZED') {\n await completeSetup();\n }\n } catch { /* rely on wallet status check next cycle */ }\n }\n } catch { /* silently retry */ }\n };\n\n const poll = isReauth ? pollReauthorization : pollWalletActive;\n\n poll();\n const intervalId = window.setInterval(poll, POLL_INTERVAL_MS);\n\n return () => {\n cancelled = true;\n window.clearInterval(intervalId);\n };\n }, [state.mobileFlow, state.isGuestFlow, state.guestPreauthSessionId, state.activeCredentialId,\n state.lastResumedAt,\n apiBaseUrl, reloadAccounts, dispatch, mobileSetupFlowRef, setupAccountIdRef, reauthSessionIdRef,\n reauthTokenRef]);\n\n // Resume generic transfer polling on page resume.\n // Guest post-pay preauth: transfer is already COMPLETED; account completion is owned by\n // fetchGuestAccount polling above — do not restart GET /transfers here (it hides the real issue\n // and competes with account polling).\n useEffect(() => {\n if (!state.mobileFlow) return;\n if (handlingMobileReturnRef.current) return;\n const isGuestPostPayPreauthMobile =\n state.isGuestFlow\n && state.guestPreauthSessionId != null\n && state.guestPreauthAccountId != null;\n if (isGuestPostPayPreauthMobile) return;\n\n const transferIdToResume = pollingTransferIdRef.current ?? state.transfer?.id;\n if (!transferIdToResume) return;\n if (!polling.isPolling) polling.startPolling(transferIdToResume);\n }, [\n state.mobileFlow,\n state.transfer?.id,\n state.isGuestFlow,\n state.guestPreauthSessionId,\n state.guestPreauthAccountId,\n state.lastResumedAt,\n polling.isPolling,\n polling.startPolling,\n handlingMobileReturnRef,\n pollingTransferIdRef,\n ]);\n}\n","import { useEffect, useRef, type Dispatch, type MutableRefObject } from 'react';\n\nimport type { PaymentAction } from '../paymentReducer';\nimport { loadMobileFlowState } from '../paymentHelpers';\n\nexport interface GuestPreauthMobileRestoreDeps {\n dispatch: Dispatch<PaymentAction>;\n apiBaseUrl: string;\n privyReady: boolean;\n lastResumedAt: number;\n mobileSetupFlowRef: MutableRefObject<boolean>;\n setupAccountIdRef: MutableRefObject<string | null>;\n startGuestAccountPolling: (guestToken: string, sessionId?: string) => void;\n}\n\n/**\n * After a full page reload during guest mobile preauthorize, reads `sessionStorage`\n * and calls `startGuestAccountPolling` so the dedicated polling hook takes over.\n * Completion dispatches (`REQUEST_LOGIN`, `MOBILE_SETUP_COMPLETE`) are handled by\n * the effect in `BlinkPaymentInner` that watches `guestAccountPolling.guestAccount`.\n *\n * Also dispatches `GUEST_PREAUTH_DETECTED` + `MOBILE_DEEPLINK_READY` to restore\n * reducer state so the UI shows `open-wallet` while polling runs.\n *\n * Bootstrap runs on `privyReady`, and again when `lastResumedAt` changes (page\n * resume from `usePageResumeEffect`) so that if the first effect run happened\n * before `persistMobileFlowState` wrote data, we still start polling when the\n * tab becomes visible again.\n */\nexport function useGuestPreauthMobileRestoreEffect(deps: GuestPreauthMobileRestoreDeps): void {\n const {\n dispatch, privyReady, lastResumedAt, mobileSetupFlowRef, setupAccountIdRef,\n startGuestAccountPolling,\n } = deps;\n\n const startedRef = useRef(false);\n\n // `lastResumedAt` in the dependency array replaces the old visibilitychange /\n // pageshow listeners — when `usePageResumeEffect` dispatches `PAGE_RESUMED`,\n // this effect re-runs and retries bootstrap if needed.\n useEffect(() => {\n if (!privyReady) {\n console.info('[blink-sdk] guestPreauthMobileRestore: skipping, privyReady=false');\n return;\n }\n\n if (startedRef.current) {\n console.info('[blink-sdk] guestPreauthMobileRestore: already started');\n return;\n }\n\n const persisted = loadMobileFlowState();\n console.info('[blink-sdk] guestPreauthMobileRestore.tryStart', {\n trigger: lastResumedAt ? 'page-resume' : 'initial',\n hasPersistedState: !!persisted,\n isGuestPreauth: persisted?.isGuestPreauth ?? false,\n hasGuestSessionToken: !!persisted?.guestSessionToken,\n hasSessionId: !!persisted?.sessionId,\n accountId: persisted?.accountId ?? null,\n });\n if (!persisted?.isGuestPreauth || !persisted.guestSessionToken || !persisted.sessionId) {\n return;\n }\n\n startedRef.current = true;\n\n mobileSetupFlowRef.current = true;\n if (persisted.accountId) {\n setupAccountIdRef.current = persisted.accountId;\n }\n\n if (persisted.accountId) {\n dispatch({\n type: 'GUEST_PREAUTH_DETECTED',\n accountId: persisted.accountId,\n sessionId: persisted.sessionId,\n });\n }\n dispatch({\n type: 'MOBILE_DEEPLINK_READY',\n deeplinkUri: persisted.deeplinkUri,\n });\n\n console.info('[blink-sdk] guestPreauthMobileRestore: starting guest account polling', {\n sessionId: persisted.sessionId,\n });\n startGuestAccountPolling(persisted.guestSessionToken, persisted.sessionId);\n }, [privyReady, lastResumedAt, dispatch, mobileSetupFlowRef, setupAccountIdRef, startGuestAccountPolling]);\n}\n","import { useEffect, type MutableRefObject } from 'react';\n\nimport type { AuthorizationAction } from '../types';\nimport type { SelectSourceChainChoice } from '../paymentHelpers';\n\nexport interface SelectSourceEffectDeps {\n pendingSelectSourceAction: AuthorizationAction | null;\n selectSourceChoices: SelectSourceChainChoice[];\n selectSourceRecommended: { chainName: string; tokenSymbol: string } | null;\n setSelectSourceChainName: (value: string) => void;\n setSelectSourceTokenSymbol: (value: string) => void;\n initializedSelectSourceActionRef: MutableRefObject<string | null>;\n}\n\n/**\n * Initializes select-source form values when a SELECT_SOURCE action\n * appears from the authorization executor.\n */\nexport function useSelectSourceEffect(deps: SelectSourceEffectDeps): void {\n const {\n pendingSelectSourceAction, selectSourceChoices, selectSourceRecommended,\n setSelectSourceChainName, setSelectSourceTokenSymbol, initializedSelectSourceActionRef,\n } = deps;\n\n useEffect(() => {\n if (!pendingSelectSourceAction) {\n initializedSelectSourceActionRef.current = null;\n setSelectSourceChainName('');\n setSelectSourceTokenSymbol('');\n return;\n }\n if (initializedSelectSourceActionRef.current === pendingSelectSourceAction.id) return;\n\n const hasRecommended =\n !!selectSourceRecommended &&\n selectSourceChoices.some(\n (chain) =>\n chain.chainName === selectSourceRecommended.chainName &&\n chain.tokens.some((t) => t.tokenSymbol === selectSourceRecommended.tokenSymbol),\n );\n\n if (hasRecommended && selectSourceRecommended) {\n setSelectSourceChainName(selectSourceRecommended.chainName);\n setSelectSourceTokenSymbol(selectSourceRecommended.tokenSymbol);\n } else if (selectSourceChoices.length > 0 && selectSourceChoices[0].tokens.length > 0) {\n setSelectSourceChainName(selectSourceChoices[0].chainName);\n setSelectSourceTokenSymbol(selectSourceChoices[0].tokens[0].tokenSymbol);\n } else {\n setSelectSourceChainName('Base');\n setSelectSourceTokenSymbol('USDC');\n }\n\n initializedSelectSourceActionRef.current = pendingSelectSourceAction.id;\n }, [pendingSelectSourceAction, selectSourceChoices, selectSourceRecommended,\n setSelectSourceChainName, setSelectSourceTokenSymbol, initializedSelectSourceActionRef]);\n}\n","import { useEffect, type Dispatch } from 'react';\n\nimport type { UseAuthorizationExecutorResult } from '../hooks';\nimport type { PaymentAction } from '../paymentReducer';\n\nexport interface OneTapAutoResolveDeps {\n authExecutor: UseAuthorizationExecutorResult;\n dispatch: Dispatch<PaymentAction>;\n oneTapLimitSavedDuringSetup: boolean;\n reloadAccounts: () => Promise<void>;\n}\n\n/**\n * Two small effects for one-tap setup:\n * 1. Auto-resolve one-tap setup when the limit was already saved earlier\n * 2. Reload accounts when one-tap setup action appears (fresh data for setup screen)\n */\nexport function useOneTapAutoResolveEffect(deps: OneTapAutoResolveDeps): void {\n const { authExecutor, dispatch, oneTapLimitSavedDuringSetup, reloadAccounts } = deps;\n\n const pendingOneTapSetupAction = authExecutor.pendingOneTapSetup;\n\n useEffect(() => {\n if (pendingOneTapSetupAction && oneTapLimitSavedDuringSetup) {\n dispatch({ type: 'SET_ONE_TAP_LIMIT_SAVED_DURING_SETUP', saved: false });\n authExecutor.resolveOneTapSetup();\n }\n }, [pendingOneTapSetupAction, authExecutor, dispatch, oneTapLimitSavedDuringSetup]);\n\n useEffect(() => {\n if (pendingOneTapSetupAction && !oneTapLimitSavedDuringSetup) {\n reloadAccounts();\n }\n }, [pendingOneTapSetupAction, reloadAccounts, oneTapLimitSavedDuringSetup]);\n}\n","import type { AuthorizationSessionDetail } from './types.ts';\n\n/** Visible for unit tests — poll until session is ready to claim (matches server `setAccountOwner` checks). */\nexport const GUEST_PREAUTH_SESSION_POLL_INTERVAL_MS = 1000;\nexport const GUEST_PREAUTH_SESSION_POLL_TIMEOUT_MS = 120_000;\n\nexport type FetchAuthorizationSessionFn = (\n apiBaseUrl: string,\n sessionId: string,\n) => Promise<AuthorizationSessionDetail>;\n\n/**\n * Polls `GET /v1/authorization-sessions/{id}` until `status === 'AUTHORIZED'` or timeout/abort.\n * The orphaned guest-preauth account is not listed on `GET /v1/accounts?credentialId=` until after claim,\n * so the client cannot infer readiness from `state.accounts`.\n */\nexport async function waitForGuestPreauthAuthorizationSession(\n apiBaseUrl: string,\n sessionId: string,\n fetchSession: FetchAuthorizationSessionFn,\n signal: AbortSignal,\n options?: { intervalMs?: number; timeoutMs?: number },\n): Promise<void> {\n const intervalMs = options?.intervalMs ?? GUEST_PREAUTH_SESSION_POLL_INTERVAL_MS;\n const timeoutMs = options?.timeoutMs ?? GUEST_PREAUTH_SESSION_POLL_TIMEOUT_MS;\n const deadline = Date.now() + timeoutMs;\n\n const sleepAbortable = (ms: number): Promise<void> =>\n new Promise((resolve, reject) => {\n if (signal.aborted) {\n reject(new DOMException('Aborted', 'AbortError'));\n return;\n }\n const t = setTimeout(() => {\n signal.removeEventListener('abort', onAbort);\n resolve();\n }, ms);\n const onAbort = () => {\n clearTimeout(t);\n signal.removeEventListener('abort', onAbort);\n reject(new DOMException('Aborted', 'AbortError'));\n };\n signal.addEventListener('abort', onAbort, { once: true });\n });\n\n while (Date.now() < deadline) {\n if (signal.aborted) {\n throw new DOMException('Aborted', 'AbortError');\n }\n const session = await fetchSession(apiBaseUrl, sessionId);\n if (session.status === 'AUTHORIZED') return;\n await sleepAbortable(intervalMs);\n }\n\n throw new Error('Authorization session did not become AUTHORIZED in time.');\n}\n","import { useEffect, useRef, type Dispatch } from 'react';\nimport { usePrivy } from '@privy-io/react-auth';\n\nimport type { PaymentAction, PaymentState } from '../paymentReducer';\nimport * as api from '../api';\nimport { captureException } from '../sentry';\nimport {\n waitForGuestPreauthAuthorizationSession,\n} from '../guestPreauthClaimWait.ts';\n\nexport type {\n FetchAuthorizationSessionFn,\n} from '../guestPreauthClaimWait.ts';\nexport {\n GUEST_PREAUTH_SESSION_POLL_INTERVAL_MS,\n GUEST_PREAUTH_SESSION_POLL_TIMEOUT_MS,\n waitForGuestPreauthAuthorizationSession,\n} from '../guestPreauthClaimWait.ts';\n\nexport interface GuestPreauthDeps {\n state: PaymentState;\n dispatch: Dispatch<PaymentAction>;\n authenticated: boolean;\n apiBaseUrl: string;\n reloadAccounts: () => Promise<void>;\n getAccessToken?: () => Promise<string | null>;\n}\n\n/**\n * After guest checkout, links the server-side preauth account to the Privy user:\n * waits for the guest preauthorization session to be `AUTHORIZED`, then calls `setAccountOwner`.\n * Readiness is derived from the authorization session (and server validation), not from listing accounts\n * (the orphaned account is excluded from user-scoped account lists until after claim).\n */\nexport function useGuestPreauthEffect(deps: GuestPreauthDeps): void {\n const { state, dispatch, authenticated, apiBaseUrl, reloadAccounts } = deps;\n\n const { getAccessToken: privyGetAccessToken } = usePrivy();\n const effectiveGetAccessToken = deps.getAccessToken ?? privyGetAccessToken;\n const getAccessTokenRef = useRef(effectiveGetAccessToken);\n getAccessTokenRef.current = effectiveGetAccessToken;\n\n const settingOwnerRef = useRef(false);\n useEffect(() => {\n if (!state.guestPreauthAccountId) return;\n if (!state.activeCredentialId) return;\n if (!state.activePublicKey) return;\n if (!authenticated) return;\n if (!state.guestSessionToken) return;\n if (settingOwnerRef.current) return;\n\n settingOwnerRef.current = true;\n const abort = new AbortController();\n let cancelled = false;\n\n const setOwner = async () => {\n try {\n if (state.guestPreauthSessionId) {\n try {\n await waitForGuestPreauthAuthorizationSession(\n apiBaseUrl,\n state.guestPreauthSessionId,\n api.fetchAuthorizationSession,\n abort.signal,\n );\n } catch (waitErr) {\n if (waitErr instanceof DOMException && waitErr.name === 'AbortError') return;\n throw waitErr;\n }\n }\n\n if (cancelled) return;\n\n const token = await getAccessTokenRef.current();\n if (!token || cancelled) return;\n await api.setAccountOwner(apiBaseUrl, token, state.guestPreauthAccountId!, state.guestSessionToken!, {\n credentialId: state.activeCredentialId!,\n publicKey: state.activePublicKey!,\n });\n if (cancelled) return;\n try { await reloadAccounts(); } catch { /* best-effort */ }\n if (cancelled) return;\n dispatch({ type: 'ACCOUNT_OWNER_SET' });\n } catch (err) {\n if (cancelled) return;\n captureException(err);\n dispatch({\n type: 'SET_ERROR',\n error: err instanceof Error ? err.message : 'Failed to set account owner',\n });\n } finally {\n settingOwnerRef.current = false;\n }\n };\n void setOwner();\n return () => {\n cancelled = true;\n abort.abort();\n };\n }, [\n state.guestPreauthAccountId,\n state.guestPreauthSessionId,\n state.activeCredentialId,\n state.activePublicKey,\n state.guestSessionToken,\n authenticated,\n apiBaseUrl,\n dispatch,\n reloadAccounts,\n ]);\n}\n","import { useEffect, useRef, type Dispatch, type MutableRefObject } from 'react';\n\nimport type { PaymentAction, PaymentState } from '../paymentReducer';\nimport type { UseAuthorizationExecutorResult } from './authorizationExecutor';\n\nexport interface GuestDesktopPreauthSessionDeps {\n state: PaymentState;\n authExecutor: UseAuthorizationExecutorResult;\n reloadAccounts: () => Promise<void>;\n dispatch: Dispatch<PaymentAction>;\n /** When false (e.g. mobile deeplink flow), session execution happens outside the browser tab. */\n desktopGuestPreauth: boolean;\n /** Latest Privy `authenticated` for async `finally` (avoid stale closure). */\n privyAuthenticatedRef: MutableRefObject<boolean>;\n}\n\n/**\n * Runs the guest preauthorization session on desktop: fetches actions, executes them\n * (including SELECT_SOURCE via useGuestPreauthPhaseSyncEffect), reloads accounts, then ends\n * preauth and requests Privy login when the user is still unauthenticated.\n */\nexport function useGuestDesktopPreauthSessionEffect(\n deps: GuestDesktopPreauthSessionDeps,\n): void {\n const { state, authExecutor, reloadAccounts, dispatch, desktopGuestPreauth, privyAuthenticatedRef } =\n deps;\n const preauthExecutingRef = useRef(false);\n\n useEffect(() => {\n if (!desktopGuestPreauth) return;\n if (!state.guestPreauthorizing) return;\n if (!state.guestPreauthSessionId || preauthExecutingRef.current) return;\n\n preauthExecutingRef.current = true;\n\n const runPreauthSession = async () => {\n try {\n const completed = await authExecutor.executeSessionById(state.guestPreauthSessionId!);\n if (completed) await reloadAccounts();\n } catch {\n // Auth executor sets its own error state for non-cancellation failures\n } finally {\n preauthExecutingRef.current = false;\n dispatch({ type: 'GUEST_PREAUTH_END' });\n if (!privyAuthenticatedRef.current) {\n dispatch({ type: 'REQUEST_LOGIN' });\n }\n }\n };\n void runPreauthSession();\n }, [\n desktopGuestPreauth,\n state.guestPreauthorizing,\n state.guestPreauthSessionId,\n authExecutor,\n reloadAccounts,\n dispatch,\n privyAuthenticatedRef,\n ]);\n}\n","import { useEffect, type Dispatch } from 'react';\n\nimport type { PaymentAction, PaymentState } from '../paymentReducer';\nimport type { UseAuthorizationExecutorResult } from './authorizationExecutor';\nimport type { PaymentPhase } from '../resolveScreen';\n\nexport interface GuestPreauthPhaseSyncDeps {\n state: PaymentState;\n dispatch: Dispatch<PaymentAction>;\n authExecutor: UseAuthorizationExecutorResult;\n isDesktop: boolean;\n privyAuthenticated: boolean;\n /** Token chain/symbol chosen on the guest deposit screen; used for inline one-tap auto-resolve. */\n inlineOneTapSource?: { chainName: string; tokenSymbol: string } | null;\n}\n\n/**\n * Synchronizes desktop authorization UI with the executor: select-source, one-tap-setup, and\n * post-confirm transitions. Guest post-pay preauth (before Privy) also pins open-wallet here;\n * standard One-Tap uses the same select-source / one-tap paths when Privy + passkey are ready.\n */\nexport function useGuestPreauthPhaseSyncEffect(deps: GuestPreauthPhaseSyncDeps): void {\n const { state, dispatch, authExecutor, isDesktop, privyAuthenticated, inlineOneTapSource } = deps;\n\n useEffect(() => {\n if (!isDesktop) return;\n const standardDesktopAuth =\n privyAuthenticated && state.activeCredentialId != null && !state.guestPreauthorizing;\n if (!state.guestPreauthorizing && !standardDesktopAuth) return;\n\n const inlineAutoResolve = state.guestOneTapOptIn && inlineOneTapSource;\n\n const pending = authExecutor.pendingSelectSource;\n if (pending) {\n // Inline one-tap: auto-resolve SELECT_SOURCE with the token from the deposit screen.\n if (inlineAutoResolve) {\n authExecutor.resolveSelectSource(inlineOneTapSource);\n return;\n }\n // User opened advanced token picker — do not clobber token-picker back to select-source.\n if (state.phase.step === 'token-picker') {\n return;\n }\n const intent: PaymentPhase = {\n step: 'select-source',\n action: pending,\n isDesktop,\n };\n if (state.phase.step === 'select-source' && state.phase.action.id === pending.id) {\n return;\n }\n dispatch({ type: 'SET_USER_INTENT', intent });\n return;\n }\n\n if (authExecutor.pendingOneTapSetup) {\n // Inline one-tap: limit was already saved — auto-resolve.\n if (inlineAutoResolve) {\n authExecutor.resolveOneTapSetup();\n return;\n }\n if (state.phase.step === 'one-tap-setup') {\n return;\n }\n dispatch({ type: 'SET_USER_INTENT', intent: { step: 'one-tap-setup', action: null } });\n return;\n }\n\n if (\n state.guestPreauthorizing\n && !privyAuthenticated\n && authExecutor.executing\n && state.guestPreauthAccountId\n ) {\n const accountId = state.guestPreauthAccountId;\n const p = state.phase;\n if (\n p.step === 'wallet-setup'\n && p.mobile == null\n && p.guestDesktopExtension\n && p.accountId === accountId\n ) {\n return;\n }\n dispatch({\n type: 'SET_USER_INTENT',\n intent: {\n step: 'wallet-setup',\n mobile: null,\n accountId,\n guestDesktopExtension: true,\n },\n });\n return;\n }\n\n if (state.phase.step === 'select-source') {\n dispatch({ type: 'SET_USER_INTENT', intent: { step: 'one-tap-setup', action: null } });\n return;\n }\n\n // Advanced token-picker path: after confirm, pending clears while phase is still token-picker.\n if (state.phase.step === 'token-picker') {\n dispatch({ type: 'SET_USER_INTENT', intent: { step: 'one-tap-setup', action: null } });\n }\n }, [\n state.guestPreauthorizing,\n state.guestOneTapOptIn,\n state.phase,\n state.guestPreauthAccountId,\n state.activeCredentialId,\n isDesktop,\n privyAuthenticated,\n authExecutor.pendingSelectSource,\n authExecutor.pendingOneTapSetup,\n authExecutor.executing,\n dispatch,\n inlineOneTapSource,\n ]);\n}\n","import { useEffect, type Dispatch } from 'react';\n\nimport type { PaymentAction, PaymentState } from '../paymentReducer';\nimport type { UseAuthorizationExecutorResult } from './authorizationExecutor';\n\nexport interface GuestPreauthWalletSetupEffectDeps {\n state: PaymentState;\n dispatch: Dispatch<PaymentAction>;\n authExecutor: UseAuthorizationExecutorResult;\n isDesktop: boolean;\n}\n\n/**\n * After Privy + Swype passkey are ready, re-pins guest desktop `wallet-setup` with\n * `guestDesktopExtension` while the inline authorization session is still running so the UI\n * stays on OpenWalletScreen (unusual once login is deferred until session end on desktop preauth).\n */\nexport function useGuestPreauthWalletSetupEffect(\n deps: GuestPreauthWalletSetupEffectDeps,\n): void {\n const { state, dispatch, authExecutor, isDesktop } = deps;\n\n useEffect(() => {\n if (!isDesktop || !state.guestPreauthorizing || !state.guestPreauthSessionId) return;\n if (!state.guestPreauthAccountId) return;\n if (!state.privyAuthenticated || state.activeCredentialId == null) return;\n if (!authExecutor.executing || authExecutor.pendingSelectSource) return;\n const p = state.phase;\n if (\n p.step === 'wallet-setup'\n && p.mobile == null\n && p.guestDesktopExtension\n && p.accountId === state.guestPreauthAccountId\n ) {\n return;\n }\n\n dispatch({\n type: 'SET_USER_INTENT',\n intent: {\n step: 'wallet-setup',\n mobile: null,\n accountId: state.guestPreauthAccountId,\n guestDesktopExtension: true,\n },\n });\n }, [\n isDesktop,\n state.guestPreauthorizing,\n state.guestPreauthSessionId,\n state.guestPreauthAccountId,\n state.privyAuthenticated,\n state.activeCredentialId,\n state.phase,\n authExecutor.executing,\n authExecutor.pendingSelectSource,\n dispatch,\n ]);\n}\n","import { useEffect, type Dispatch } from 'react';\n\nimport type { PaymentAction, PaymentState } from '../paymentReducer';\nimport type { UseAuthorizationExecutorResult } from './authorizationExecutor';\n\nexport interface StandardDesktopInlineOpenWalletEffectDeps {\n isDesktop: boolean;\n state: PaymentState;\n dispatch: Dispatch<PaymentAction>;\n authExecutor: Pick<\n UseAuthorizationExecutorResult,\n | 'executing'\n | 'pendingSelectSource'\n | 'pendingOneTapSetup'\n | 'authorizationSessionStackDepth'\n >;\n}\n\n/**\n * Synchronizes standard (Privy-authenticated) desktop UI with the authorization executor: pins\n * OpenWalletScreen (`wallet-setup` + `guestDesktopExtension`) while `executeSessionById` runs\n * inline. Guest desktop preauth uses `useGuestPreauthPhaseSyncEffect` instead.\n */\nexport function useStandardDesktopInlineOpenWalletEffect(\n deps: StandardDesktopInlineOpenWalletEffectDeps,\n): void {\n const { isDesktop, state, dispatch, authExecutor } = deps;\n\n useEffect(() => {\n if (!isDesktop || state.guestPreauthorizing) return;\n if (!state.privyAuthenticated || !state.activeCredentialId || !state.selectedAccountId) return;\n\n // During One-Tap limit pause, stay on Setup unless a nested session is authorizing a token\n // (`authorizationSessionStackDepth > 1`).\n const shouldPin =\n authExecutor.executing\n && !authExecutor.pendingSelectSource\n && (!authExecutor.pendingOneTapSetup || authExecutor.authorizationSessionStackDepth > 1);\n\n if (shouldPin && !state.standardDesktopInlineOpenWallet) {\n dispatch({ type: 'SET_STANDARD_DESKTOP_INLINE_OPEN_WALLET', value: true });\n return;\n }\n\n if (!shouldPin && state.standardDesktopInlineOpenWallet) {\n dispatch({ type: 'SET_STANDARD_DESKTOP_INLINE_OPEN_WALLET', value: false });\n }\n }, [\n isDesktop,\n state.guestPreauthorizing,\n state.privyAuthenticated,\n state.activeCredentialId,\n state.selectedAccountId,\n state.standardDesktopInlineOpenWallet,\n authExecutor.executing,\n authExecutor.pendingSelectSource,\n authExecutor.pendingOneTapSetup,\n authExecutor.authorizationSessionStackDepth,\n dispatch,\n ]);\n}\n","import { useEffect } from 'react';\n\nimport type { GuestAccountResult } from './useGuestAccountPolling';\n\nexport interface GuestAccountAutoPollingDeps {\n mobileFlow: boolean;\n isGuestFlow: boolean;\n guestSessionToken: string | null;\n isPolling: boolean;\n guestAccount: GuestAccountResult | null;\n startPolling: (guestToken: string, sessionId?: string) => void;\n}\n\n/**\n * Auto-starts guest account polling when the guest transfer mobile flow is\n * active (OpenWalletScreen). Polls GET /v1/accounts?guestToken= without a\n * sessionId so the hook completes as soon as any account exists for the token.\n * When found, the existing completion effect in BlinkPaymentInner dispatches\n * REQUEST_LOGIN to redirect the user.\n *\n * Synchronizes with external system: core-api guest account creation\n * (may happen in a wallet's in-app browser or via preauthorize).\n */\nexport function useGuestAccountAutoPollingEffect(deps: GuestAccountAutoPollingDeps): void {\n const {\n mobileFlow, isGuestFlow, guestSessionToken,\n isPolling, guestAccount, startPolling,\n } = deps;\n\n useEffect(() => {\n if (!mobileFlow || !isGuestFlow || !guestSessionToken) return;\n if (isPolling || guestAccount) return;\n startPolling(guestSessionToken);\n }, [mobileFlow, isGuestFlow, guestSessionToken, isPolling, guestAccount, startPolling]);\n}\n","import { useEffect, useRef } from 'react';\n\nexport interface PageResumeInfo {\n /** Estimated wall-clock time the page was unresponsive (ms). */\n frozenDurationMs: number;\n source: 'visibilitychange' | 'pageshow' | 'focus' | 'watchdog';\n}\n\nexport type PageResumeCallback = (info: PageResumeInfo) => void;\n\nconst WATCHDOG_INTERVAL_MS = 1000;\nconst WATCHDOG_THRESHOLD_MS = 3000;\nconst DEDUP_COOLDOWN_MS = 500;\n\n/**\n * Centralized detection of page \"wake-up\" after being backgrounded or frozen.\n *\n * Combines four signals into a single deduplicated callback:\n * - **Watchdog timer** (`setInterval` at 1 s): if the gap between ticks\n * exceeds 3 s, the page was likely frozen by the OS.\n * - **`visibilitychange`**: fires when the tab becomes visible again.\n * - **`pageshow`**: catches bfcache restores and some edge cases where\n * `visibilitychange` does not fire on mobile Safari.\n * - **`focus`**: supplementary signal for app-switch on some browsers.\n *\n * A 500 ms cooldown deduplicates simultaneous events (e.g. `visibilitychange`\n * + `focus` firing together) so the callback is invoked at most once per\n * resume.\n */\nexport function usePageResume(callback: PageResumeCallback): void {\n const callbackRef = useRef(callback);\n callbackRef.current = callback;\n\n useEffect(() => {\n let lastTickAt = Date.now();\n let lastFiredAt = 0;\n\n const fire = (source: PageResumeInfo['source'], frozenDurationMs: number) => {\n const now = Date.now();\n if (now - lastFiredAt < DEDUP_COOLDOWN_MS) return;\n lastFiredAt = now;\n callbackRef.current({ frozenDurationMs, source });\n };\n\n // Watchdog: detect timer suspension via wall-clock gap\n const watchdogId = window.setInterval(() => {\n const now = Date.now();\n const elapsed = now - lastTickAt;\n lastTickAt = now;\n if (elapsed > WATCHDOG_THRESHOLD_MS) {\n fire('watchdog', elapsed);\n }\n }, WATCHDOG_INTERVAL_MS);\n\n const handleVisibility = () => {\n const now = Date.now();\n if (document.visibilityState === 'visible') {\n fire('visibilitychange', now - lastTickAt);\n }\n lastTickAt = now;\n };\n\n const handlePageShow = (_e: PageTransitionEvent) => {\n const now = Date.now();\n if (document.visibilityState === 'visible') {\n fire('pageshow', now - lastTickAt);\n }\n lastTickAt = now;\n };\n\n const handleFocus = () => {\n const now = Date.now();\n const elapsed = now - lastTickAt;\n lastTickAt = now;\n if (elapsed > WATCHDOG_THRESHOLD_MS) {\n fire('focus', elapsed);\n }\n };\n\n document.addEventListener('visibilitychange', handleVisibility);\n window.addEventListener('pageshow', handlePageShow);\n window.addEventListener('focus', handleFocus);\n\n return () => {\n window.clearInterval(watchdogId);\n document.removeEventListener('visibilitychange', handleVisibility);\n window.removeEventListener('pageshow', handlePageShow);\n window.removeEventListener('focus', handleFocus);\n };\n }, []);\n}\n","import { useRef, type Dispatch, type MutableRefObject } from 'react';\n\nimport type { PaymentAction } from '../paymentReducer';\nimport { usePageResume, type PageResumeInfo } from './usePageResume';\n\nconst STUCK_REF_THRESHOLD_MS = 5000;\n\nexport interface PageResumeEffectDeps {\n dispatch: Dispatch<PaymentAction>;\n handlingMobileReturnRef: MutableRefObject<boolean>;\n}\n\n/**\n * Centralized page-resume orchestration. Wired once in `BlinkPaymentInner`.\n *\n * On every detected resume (visibility, pageshow, focus, or watchdog):\n * 1. Dispatches `PAGE_RESUMED` so `state.lastResumedAt` updates and\n * downstream effects that include it in their dependency arrays re-run.\n * 2. When the page was frozen for longer than `STUCK_REF_THRESHOLD_MS`,\n * clears guard refs that may have been left `true` by interrupted async\n * handlers (e.g. `handlingMobileReturnRef`). Without this, visibility-\n * based resume polling in other hooks stays permanently blocked.\n */\nexport function usePageResumeEffect(deps: PageResumeEffectDeps): void {\n const { dispatch, handlingMobileReturnRef } = deps;\n\n const dispatchRef = useRef(dispatch);\n dispatchRef.current = dispatch;\n\n usePageResume((info: PageResumeInfo) => {\n console.info('[blink-sdk] PAGE_RESUMED', {\n source: info.source,\n frozenDurationMs: info.frozenDurationMs,\n });\n\n dispatchRef.current({ type: 'PAGE_RESUMED', frozenDurationMs: info.frozenDurationMs });\n\n if (info.frozenDurationMs > STUCK_REF_THRESHOLD_MS) {\n if (handlingMobileReturnRef.current) {\n console.info('[blink-sdk] PAGE_RESUMED: clearing stuck handlingMobileReturnRef', {\n frozenDurationMs: info.frozenDurationMs,\n });\n handlingMobileReturnRef.current = false;\n }\n }\n });\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { useBlinkConfig } from '../context';\nimport * as api from '../api';\n\nexport type GuestAccountResult = {\n accountId: string;\n hasPasskey: boolean;\n walletAddress: string | null;\n};\n\nexport interface UseGuestAccountPollingResult {\n guestAccount: GuestAccountResult | null;\n isPolling: boolean;\n error: string | null;\n startPolling: (guestToken: string, sessionId?: string) => void;\n stopPolling: () => void;\n}\n\n/**\n * Polls GET /v1/accounts?guestToken= every `intervalMs` until the account\n * exists. When a `sessionId` is provided, also checks\n * GET /v1/authorization-sessions/{id} and only completes when the session is\n * AUTHORIZED. Without a sessionId (account-only mode), completes as soon as\n * the account is found — used by useGuestAccountAutoPollingEffect to detect\n * accounts created externally (e.g. in a wallet's in-app browser) without\n * requiring the user to click \"Preauthorize.\"\n *\n * Modeled on `useTransferPolling`: owns its interval via ref, exposes explicit\n * startPolling/stopPolling, and adds visibility/pageshow listeners so polling\n * resumes reliably after an app-switch on mobile Safari.\n */\nexport function useGuestAccountPolling(intervalMs = 3000, lastResumedAt = 0): UseGuestAccountPollingResult {\n const { apiBaseUrl } = useBlinkConfig();\n\n const [guestAccount, setGuestAccount] = useState<GuestAccountResult | null>(null);\n const [isPolling, setIsPolling] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const consecutiveFailuresRef = useRef(0);\n\n const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const guestTokenRef = useRef<string | null>(null);\n const sessionIdRef = useRef<string | null>(null);\n const apiBaseUrlRef = useRef(apiBaseUrl);\n apiBaseUrlRef.current = apiBaseUrl;\n\n const stopPolling = useCallback(() => {\n console.info('[blink-sdk] useGuestAccountPolling.stopPolling called', {\n hadInterval: !!intervalRef.current,\n hadToken: !!guestTokenRef.current,\n });\n if (intervalRef.current) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n guestTokenRef.current = null;\n sessionIdRef.current = null;\n setIsPolling(false);\n }, []);\n\n const poll = useCallback(async () => {\n const token = guestTokenRef.current;\n const sessionId = sessionIdRef.current;\n if (!token) {\n console.info('[blink-sdk] useGuestAccountPolling.poll skipped (no token)');\n return;\n }\n\n console.info('[blink-sdk] useGuestAccountPolling.poll executing', {\n apiBaseUrl: apiBaseUrlRef.current,\n tokenPrefix: token.slice(0, 8),\n sessionId: sessionId ?? '(none — account-only mode)',\n });\n\n try {\n const lookup = await api.fetchGuestAccount(apiBaseUrlRef.current, token);\n if (!guestTokenRef.current) return;\n consecutiveFailuresRef.current = 0;\n setError(null);\n if (lookup == null) {\n console.info('[blink-sdk] useGuestAccountPolling.poll: account not found yet');\n return;\n }\n\n // When no sessionId was provided, complete as soon as the account exists.\n if (!sessionId) {\n console.info('[blink-sdk] useGuestAccountPolling.poll: COMPLETE — account found (no session check)');\n setGuestAccount(lookup);\n stopPolling();\n return;\n }\n\n console.info('[blink-sdk] useGuestAccountPolling.poll: account found, checking session');\n try {\n const session = await api.fetchAuthorizationSession(apiBaseUrlRef.current, sessionId);\n if (!guestTokenRef.current) return;\n if (session.status !== 'AUTHORIZED') {\n console.info('[blink-sdk] useGuestAccountPolling.poll: session not AUTHORIZED yet', session.status);\n return;\n }\n } catch (sessionErr) {\n consecutiveFailuresRef.current += 1;\n console.info('[blink-sdk] useGuestAccountPolling.poll: session fetch failed', sessionErr);\n if (consecutiveFailuresRef.current >= 3) {\n setError(sessionErr instanceof Error ? sessionErr.message : 'Failed to check authorization status');\n }\n return;\n }\n\n console.info('[blink-sdk] useGuestAccountPolling.poll: COMPLETE — account + AUTHORIZED');\n setGuestAccount(lookup);\n stopPolling();\n } catch (err) {\n consecutiveFailuresRef.current += 1;\n console.info('[blink-sdk] useGuestAccountPolling.poll: fetch error, will retry', err);\n if (consecutiveFailuresRef.current >= 3) {\n setError(err instanceof Error ? err.message : 'Failed to check account status');\n }\n }\n }, [stopPolling]);\n\n const startPolling = useCallback(\n (guestToken: string, sessionId?: string) => {\n console.info('[blink-sdk] useGuestAccountPolling.startPolling called', {\n tokenPrefix: guestToken.slice(0, 8),\n sessionId: sessionId ?? '(none — account-only mode)',\n intervalMs,\n });\n stopPolling();\n guestTokenRef.current = guestToken;\n sessionIdRef.current = sessionId ?? null;\n setGuestAccount(null);\n setError(null);\n consecutiveFailuresRef.current = 0;\n setIsPolling(true);\n poll();\n intervalRef.current = setInterval(poll, intervalMs);\n },\n [poll, intervalMs, stopPolling],\n );\n\n // Extra poll on page resume (driven by `lastResumedAt` from\n // `usePageResumeEffect`). Replaces the old per-hook visibilitychange /\n // pageshow listeners.\n useEffect(() => {\n if (!lastResumedAt || !guestTokenRef.current) return;\n console.info('[blink-sdk] useGuestAccountPolling: page resumed, triggering poll', {\n lastResumedAt,\n hasToken: !!guestTokenRef.current,\n hasSessionId: !!sessionIdRef.current,\n });\n void poll();\n }, [lastResumedAt, poll]);\n\n useEffect(() => () => stopPolling(), [stopPolling]);\n\n return { guestAccount, error, isPolling, startPolling, stopPolling };\n}\n","import { useState, useEffect, useRef, useCallback } from 'react';\nimport type { PreciseMoney, Destination } from '../types';\nimport * as api from '../api';\n\nexport interface UseDepositFeeEstimateParams {\n apiBaseUrl: string;\n getAccessToken: () => Promise<string | null>;\n walletId: string | null;\n sourceTokenAddress: string | undefined;\n destination: Destination;\n amount: number;\n enabled: boolean;\n}\n\nexport interface UseDepositFeeEstimateResult {\n quoteId: string | null;\n quoteFee: PreciseMoney | null;\n quoteLoading: boolean;\n quoteError: string | null;\n}\n\nexport function useDepositFeeEstimate({\n apiBaseUrl,\n getAccessToken,\n walletId,\n sourceTokenAddress,\n destination,\n amount,\n enabled,\n}: UseDepositFeeEstimateParams): UseDepositFeeEstimateResult {\n const [quoteId, setQuoteId] = useState<string | null>(null);\n const [quoteFee, setQuoteFee] = useState<PreciseMoney | null>(null);\n const [quoteLoading, setQuoteLoading] = useState(false);\n const [quoteError, setQuoteError] = useState<string | null>(null);\n const abortRef = useRef<AbortController | null>(null);\n\n const fetchQuote = useCallback(async () => {\n if (!enabled || !walletId || !sourceTokenAddress) {\n setQuoteId(null);\n setQuoteFee(null);\n setQuoteLoading(false);\n setQuoteError(null);\n return;\n }\n\n abortRef.current?.abort();\n const controller = new AbortController();\n abortRef.current = controller;\n\n setQuoteLoading(true);\n setQuoteError(null);\n\n try {\n const token = await getAccessToken();\n if (!token || controller.signal.aborted) return;\n\n const quote = await api.postTransferQuote(apiBaseUrl, token, {\n walletId,\n sourceTokenAddress,\n destination,\n amount: { amount, currency: 'USD' },\n });\n\n if (controller.signal.aborted) return;\n\n setQuoteId(quote.id);\n setQuoteFee(quote.fee);\n } catch (err) {\n if (controller.signal.aborted) return;\n console.warn('[blink-sdk] Fee quote failed:', err);\n setQuoteId(null);\n setQuoteFee(null);\n const msg = err instanceof Error ? err.message : '';\n setQuoteError(\n msg.includes('AMOUNT_TOO_LOW')\n ? 'Amount is too low to cover network fees'\n : 'Unable to estimate fee',\n );\n } finally {\n if (!controller.signal.aborted) {\n setQuoteLoading(false);\n }\n }\n }, [enabled, walletId, sourceTokenAddress, destination, amount, apiBaseUrl, getAccessToken]);\n\n useEffect(() => {\n fetchQuote();\n return () => {\n abortRef.current?.abort();\n };\n }, [fetchQuote]);\n\n return { quoteId, quoteFee, quoteLoading, quoteError };\n}\n","// ── Blink Payment Widget ───────────────────────────────────────────────\n//\n// v8 flow: Screen derived from phase state machine. All screen\n// navigation is driven by the PaymentPhase discriminated union stored\n// in the reducer state. Phase is resolved automatically after every\n// action; handlers set it explicitly for user-intent navigations.\n\nimport { useCallback, useEffect, useMemo, useReducer, useRef } from 'react';\nimport { usePrivy } from '@privy-io/react-auth';\n\nimport type { Destination, Transfer } from './types';\nimport type { PaymentPhase } from './resolveScreen';\nimport * as api from './api';\nimport { useBlinkConfig } from './context';\nimport {\n useAuthorizationExecutor,\n useTransferPolling,\n useTransferSigning,\n} from './hooks';\nimport {\n clearMobileFlowState,\n ACTIVE_CREDENTIAL_STORAGE_KEY,\n loadPopupAuth,\n clearPopupAuth,\n isPopupAuthExpired,\n} from './paymentHelpers';\nimport { shouldUseWalletConnector } from './walletFlow';\nimport { paymentReducer, createInitialState } from './paymentReducer';\nimport { StepRenderer } from './StepRenderer';\nimport type { StepHandlers } from './StepRenderer';\nimport { PaymentErrorBoundary } from './components/ErrorBoundary';\nimport type { MobileFlowRefs } from './hooks/useMobileFlowHandlers';\nimport type { PopupAuth } from './hooks/useAuthHandlers';\n\nimport {\n useDerivedState,\n useAuthHandlers,\n usePasskeyHandlers,\n useTransferHandlers,\n useSourceSelectionHandlers,\n useMobileFlowHandlers,\n useProviderHandlers,\n useOneTapSetupHandlers,\n useGuestTransferHandlers,\n usePrivySessionSyncEffect,\n} from './hooks/index';\n\nimport { usePasskeyCheckEffect } from './hooks/usePasskeyCheckEffect';\nimport { useDataLoadEffect } from './hooks/useDataLoadEffect';\nimport { useProcessingEffect } from './hooks/useProcessingEffect';\nimport { useMobilePollingEffect } from './hooks/useMobilePollingEffect';\nimport { useGuestPreauthMobileRestoreEffect } from './hooks/useGuestPreauthMobileRestoreEffect';\nimport { useGuestAccountPolling } from './hooks/useGuestAccountPolling';\nimport { useSelectSourceEffect } from './hooks/useSelectSourceEffect';\nimport { useOneTapAutoResolveEffect } from './hooks/useOneTapAutoResolveEffect';\nimport { useGuestPreauthEffect } from './hooks/useGuestPreauthEffect';\nimport { useGuestDesktopPreauthSessionEffect } from './hooks/useGuestDesktopPreauthSessionEffect';\nimport { useGuestPreauthPhaseSyncEffect } from './hooks/useGuestPreauthPhaseSyncEffect';\nimport { useGuestPreauthWalletSetupEffect } from './hooks/useGuestPreauthWalletSetupEffect';\nimport { useStandardDesktopInlineOpenWalletEffect } from './hooks/useStandardDesktopInlineOpenWalletEffect';\nimport { useGuestAccountAutoPollingEffect } from './hooks/useGuestAccountAutoPollingEffect';\nimport { useDepositFeeEstimate } from './hooks/useDepositFeeEstimate';\nimport { usePageResumeEffect } from './hooks/usePageResumeEffect';\n\n// ── Props ──────────────────────────────────────────────────────────────\n\nexport interface BlinkPaymentProps {\n destination: Destination;\n onComplete?: (transfer: Transfer) => void;\n onError?: (error: string) => void;\n useWalletConnector?: boolean;\n idempotencyKey?: string;\n merchantAuthorization?: api.CreateTransferParams['merchantAuthorization'];\n merchantName?: string;\n onBack?: () => void;\n onDismiss?: () => void;\n}\n\n// ── Component ──────────────────────────────────────────────────────────\n\nexport function BlinkPayment(props: BlinkPaymentProps) {\n const resetKey = useRef(0);\n const handleBoundaryReset = useCallback(() => {\n resetKey.current += 1;\n }, []);\n\n return (\n <PaymentErrorBoundary key={resetKey.current} onReset={handleBoundaryReset}>\n <BlinkPaymentInner {...props} />\n </PaymentErrorBoundary>\n );\n}\n\n// ── Inner component ────────────────────────────────────────────────────\n\nfunction BlinkPaymentInner({\n destination,\n onComplete,\n onError,\n useWalletConnector: useWalletConnectorProp,\n idempotencyKey,\n merchantAuthorization,\n merchantName,\n onBack,\n onDismiss,\n}: BlinkPaymentProps) {\n const { apiBaseUrl, depositAmount } = useBlinkConfig();\n const { ready, authenticated, logout, getAccessToken } = usePrivy();\n\n // Safari cross-origin iframe passkey signup: the popup returns a Privy\n // access token that we use in place of Privy's own session management.\n // Restored from localStorage so the token survives component remount.\n const popupAuthRef = useRef<PopupAuth | null>(loadPopupAuth());\n\n const popupAuthValid = (() => {\n if (!popupAuthRef.current) return false;\n if (isPopupAuthExpired(popupAuthRef.current.accessToken)) {\n popupAuthRef.current = null;\n clearPopupAuth();\n return false;\n }\n return true;\n })();\n\n const effectiveAuthenticated = authenticated || popupAuthValid;\n\n const effectiveGetAccessToken = useCallback(async () => {\n if (popupAuthRef.current) {\n if (isPopupAuthExpired(popupAuthRef.current.accessToken)) {\n popupAuthRef.current = null;\n clearPopupAuth();\n } else {\n return popupAuthRef.current.accessToken;\n }\n }\n return getAccessToken();\n }, [getAccessToken]);\n\n const privyAuthenticatedRef = useRef(false);\n privyAuthenticatedRef.current = effectiveAuthenticated;\n\n const isDesktop = shouldUseWalletConnector({\n useWalletConnector: useWalletConnectorProp,\n userAgent: typeof navigator === 'undefined' ? undefined : navigator.userAgent,\n });\n\n // ── Reducer ─────────────────────────────────────────────────────\n\n const [state, dispatch] = useReducer(\n paymentReducer,\n {\n depositAmount,\n activeCredentialId:\n typeof window === 'undefined'\n ? null\n : window.localStorage.getItem(ACTIVE_CREDENTIAL_STORAGE_KEY),\n },\n createInitialState,\n );\n\n // ── SDK hooks ───────────────────────────────────────────────────\n\n const authExecutor = useAuthorizationExecutor();\n const polling = useTransferPolling(3000, effectiveGetAccessToken);\n const guestAccountPolling = useGuestAccountPolling(3000, state.lastResumedAt);\n const transferSigning = useTransferSigning(2000, { getAccessToken: effectiveGetAccessToken });\n\n // ── Shared refs ─────────────────────────────────────────────────\n\n const mobileFlowRefs: MobileFlowRefs = {\n mobileSetupFlowRef: useRef(false),\n handlingMobileReturnRef: useRef(false),\n setupAccountIdRef: useRef<string | null>(null),\n reauthSessionIdRef: useRef<string | null>(null),\n reauthTokenRef: useRef<{ walletId: string; tokenSymbol: string } | null>(null),\n loadingDataRef: useRef(false),\n };\n\n // ── Derived values ──────────────────────────────────────────────\n\n const derived = useDerivedState(state);\n\n // ── Handler hooks ───────────────────────────────────────────────\n\n const auth = useAuthHandlers(dispatch, apiBaseUrl, popupAuthRef);\n\n const passkey = usePasskeyHandlers(dispatch, apiBaseUrl);\n\n const depositFee = useDepositFeeEstimate({\n apiBaseUrl,\n getAccessToken: effectiveGetAccessToken,\n walletId: state.selectedWalletId,\n sourceTokenAddress: derived.selectedSource?.address,\n destination,\n amount: depositAmount ?? 5,\n enabled: state.phase.step === 'deposit' && !state.isGuestFlow && effectiveAuthenticated,\n });\n\n const transfer = useTransferHandlers({\n dispatch, getAccessToken: effectiveGetAccessToken, apiBaseUrl, depositAmount, destination,\n idempotencyKey, merchantAuthorization, onComplete, onError,\n polling, transferSigning,\n sourceType: derived.sourceType,\n sourceId: derived.sourceId,\n sourceTokenAddress: derived.selectedSource?.address,\n activeCredentialId: state.activeCredentialId,\n selectedAccountId: state.selectedAccountId,\n selectedWalletId: state.selectedWalletId,\n selectedTokenSymbol: state.selectedTokenSymbol,\n quoteId: depositFee.quoteId,\n transfer: state.transfer,\n accounts: state.accounts,\n });\n\n const mobileFlow = useMobileFlowHandlers(\n dispatch, polling, transfer.reloadAccounts,\n transfer.pollingTransferIdRef, state.transfer, mobileFlowRefs,\n {\n mobileFlow: state.mobileFlow,\n isGuestFlow: state.isGuestFlow,\n guestTransferId: state.guestTransferId,\n guestSessionToken: state.guestSessionToken,\n },\n onComplete,\n state.lastResumedAt,\n );\n\n const sourceSelection = useSourceSelectionHandlers(dispatch, authExecutor, {\n guestPreauthSessionId: state.guestPreauthSessionId,\n isGuestFlow: state.isGuestFlow,\n guestPreauthorizing: state.guestPreauthorizing,\n isDesktop,\n });\n\n const provider = useProviderHandlers({\n dispatch, getAccessToken: effectiveGetAccessToken, apiBaseUrl, depositAmount,\n useWalletConnectorProp,\n activeCredentialId: state.activeCredentialId,\n selectedAccountId: state.selectedAccountId,\n selectedWalletId: state.selectedWalletId,\n selectedTokenSymbol: state.selectedTokenSymbol,\n chains: state.chains,\n accounts: state.accounts,\n providers: state.providers,\n authExecutor,\n reloadAccounts: transfer.reloadAccounts,\n onError,\n mobileSetupFlowRef: mobileFlowRefs.mobileSetupFlowRef,\n handlingMobileReturnRef: mobileFlowRefs.handlingMobileReturnRef,\n setupAccountIdRef: mobileFlowRefs.setupAccountIdRef,\n reauthSessionIdRef: mobileFlowRefs.reauthSessionIdRef,\n reauthTokenRef: mobileFlowRefs.reauthTokenRef,\n authenticated: effectiveAuthenticated,\n merchantAuthorization,\n destination,\n guestSessionToken: state.guestSessionToken,\n guestTransferId: state.guestTransferId,\n selectedProviderId: state.selectedProviderId,\n startGuestAccountPolling: guestAccountPolling.startPolling,\n });\n\n const guestPostPayPreauth = useMemo(\n () =>\n (!!state.guestPreauthSessionId && state.isGuestFlow)\n || (state.guestPreauthorizing && isDesktop),\n [\n state.guestPreauthSessionId,\n state.isGuestFlow,\n state.guestPreauthorizing,\n isDesktop,\n ],\n );\n\n const deferGuestPreauthLogin = state.guestPreauthorizing && isDesktop;\n\n const oneTapSetup = useOneTapSetupHandlers({\n dispatch, getAccessToken: effectiveGetAccessToken, apiBaseUrl, authExecutor,\n selectSourceChainName: sourceSelection.selectSourceChainName,\n selectSourceTokenSymbol: sourceSelection.selectSourceTokenSymbol,\n authorizationSessionIdForGuest: state.guestPreauthSessionId,\n guestPostPayPreauth,\n deferGuestPreauthLogin,\n });\n\n const guestTransfer = useGuestTransferHandlers({\n dispatch,\n isGuestFlow: state.isGuestFlow,\n guestTransferId: state.guestTransferId,\n guestSessionToken: state.guestSessionToken,\n onComplete,\n onError,\n authExecutor,\n guestOneTapOptIn: state.guestOneTapOptIn,\n guestOneTapLimit: state.guestOneTapLimit,\n selectedProviderId: state.selectedProviderId,\n providers: state.providers,\n startGuestAccountPolling: guestAccountPolling.startPolling,\n });\n\n // ── Lifecycle handlers ──────────────────────────────────────────\n\n const handleNewPayment = useCallback(() => {\n clearMobileFlowState();\n transfer.processingStartedAtRef.current = null;\n transfer.pollingTransferIdRef.current = null;\n dispatch({\n type: 'NEW_PAYMENT',\n depositAmount,\n firstAccountId: state.accounts.length > 0 ? state.accounts[0].id : null,\n });\n }, [depositAmount, state.accounts, transfer]);\n\n const handleLogout = useCallback(async () => {\n try { await logout(); } catch { /* clear local state anyway */ }\n popupAuthRef.current = null;\n clearPopupAuth();\n clearMobileFlowState();\n if (typeof window !== 'undefined') {\n window.localStorage.removeItem(ACTIVE_CREDENTIAL_STORAGE_KEY);\n }\n polling.stopPolling();\n passkey.checkingPasskeyRef.current = false;\n dispatch({ type: 'LOGOUT', depositAmount, privyReady: ready });\n }, [logout, polling, depositAmount, passkey, ready]);\n\n // ── Deposit amount sync ─────────────────────────────────────────\n useEffect(() => {\n if (depositAmount != null) {\n dispatch({ type: 'SYNC_AMOUNT', amount: depositAmount.toString() });\n }\n }, [depositAmount, dispatch]);\n\n // ── Split effects ───────────────────────────────────────────────\n\n usePageResumeEffect({\n dispatch,\n handlingMobileReturnRef: mobileFlowRefs.handlingMobileReturnRef,\n });\n\n usePrivySessionSyncEffect({ dispatch, ready, authenticated: effectiveAuthenticated });\n\n useGuestPreauthMobileRestoreEffect({\n dispatch,\n apiBaseUrl,\n privyReady: state.privyReady,\n lastResumedAt: state.lastResumedAt,\n mobileSetupFlowRef: mobileFlowRefs.mobileSetupFlowRef,\n setupAccountIdRef: mobileFlowRefs.setupAccountIdRef,\n startGuestAccountPolling: guestAccountPolling.startPolling,\n });\n\n useGuestAccountAutoPollingEffect({\n mobileFlow: state.mobileFlow,\n isGuestFlow: state.isGuestFlow,\n guestSessionToken: state.guestSessionToken,\n isPolling: guestAccountPolling.isPolling,\n guestAccount: guestAccountPolling.guestAccount,\n startPolling: guestAccountPolling.startPolling,\n });\n\n // Warm-return safety net: if React state has a guest session token but\n // polling isn't running, restart it. Covers cases where the interval was\n // lost (Safari throttling, effect cleanup) and sessionStorage restore\n // didn't fire. Triggered by `lastResumedAt` from `usePageResumeEffect`\n // instead of a per-hook visibilitychange listener.\n useEffect(() => {\n if (!state.lastResumedAt) return;\n const token = state.guestSessionToken;\n const sessionId = state.guestPreauthSessionId;\n if (!token) return;\n if (guestAccountPolling.isPolling || guestAccountPolling.guestAccount) return;\n console.info('[blink-sdk] warm-return: restarting guest account polling from React state', {\n sessionId: sessionId ?? '(none — account-only mode)',\n });\n guestAccountPolling.startPolling(token, sessionId ?? undefined);\n }, [state.lastResumedAt, state.guestSessionToken, state.guestPreauthSessionId,\n guestAccountPolling.isPolling, guestAccountPolling.guestAccount, guestAccountPolling.startPolling]);\n\n // Guest preauth account polling completion: when the hook reports a result,\n // dispatch login + clear mobile state so the user can claim the account.\n useEffect(() => {\n console.info('[blink-sdk] guestPreauthCompletion effect', {\n hasGuestAccount: !!guestAccountPolling.guestAccount,\n guestAccountId: guestAccountPolling.guestAccount?.accountId ?? null,\n currentPreauthAccountId: state.guestPreauthAccountId,\n currentPhase: state.phase.step,\n mobileFlow: state.mobileFlow,\n loginRequested: state.loginRequested,\n });\n if (!guestAccountPolling.guestAccount) return;\n const acct = guestAccountPolling.guestAccount;\n const needsDetect = acct.accountId !== state.guestPreauthAccountId;\n console.info('[blink-sdk] guestPreauthCompletion: dispatching REQUEST_LOGIN + MOBILE_SETUP_COMPLETE', {\n accountId: acct.accountId,\n dispatchingGuestPreauthDetected: needsDetect,\n });\n if (needsDetect) {\n dispatch({\n type: 'GUEST_PREAUTH_DETECTED',\n accountId: acct.accountId,\n sessionId: state.guestPreauthSessionId ?? undefined,\n });\n }\n mobileFlowRefs.mobileSetupFlowRef.current = false;\n mobileFlowRefs.setupAccountIdRef.current = null;\n clearMobileFlowState();\n dispatch({ type: 'REQUEST_LOGIN' });\n dispatch({ type: 'MOBILE_SETUP_COMPLETE' });\n }, [guestAccountPolling.guestAccount]);\n\n usePasskeyCheckEffect({\n dispatch, ready, authenticated: effectiveAuthenticated, apiBaseUrl,\n activeCredentialId: state.activeCredentialId,\n passkeyConfigLoaded: state.passkeyConfigLoaded,\n checkingPasskeyRef: passkey.checkingPasskeyRef,\n polling,\n mobileSetupFlowRef: mobileFlowRefs.mobileSetupFlowRef,\n handlingMobileReturnRef: mobileFlowRefs.handlingMobileReturnRef,\n setupAccountIdRef: mobileFlowRefs.setupAccountIdRef,\n reauthSessionIdRef: mobileFlowRefs.reauthSessionIdRef,\n reauthTokenRef: mobileFlowRefs.reauthTokenRef,\n pollingTransferIdRef: transfer.pollingTransferIdRef,\n handleAuthorizedMobileReturn: mobileFlow.handleAuthorizedMobileReturn,\n onComplete,\n startGuestAccountPolling: guestAccountPolling.startPolling,\n getAccessToken: effectiveGetAccessToken,\n });\n\n useDataLoadEffect({\n state, dispatch, authenticated: effectiveAuthenticated, apiBaseUrl, depositAmount,\n loadingDataRef: mobileFlowRefs.loadingDataRef,\n reloadAccounts: transfer.reloadAccounts,\n getAccessToken: effectiveGetAccessToken,\n });\n\n useProcessingEffect({\n state, dispatch, polling,\n processingStartedAtRef: transfer.processingStartedAtRef,\n onComplete, onError,\n reloadAccounts: transfer.reloadAccounts,\n });\n\n useMobilePollingEffect({\n state, dispatch, polling,\n mobileSetupFlowRef: mobileFlowRefs.mobileSetupFlowRef,\n handlingMobileReturnRef: mobileFlowRefs.handlingMobileReturnRef,\n setupAccountIdRef: mobileFlowRefs.setupAccountIdRef,\n reauthSessionIdRef: mobileFlowRefs.reauthSessionIdRef,\n reauthTokenRef: mobileFlowRefs.reauthTokenRef,\n pollingTransferIdRef: transfer.pollingTransferIdRef,\n reloadAccounts: transfer.reloadAccounts,\n handleAuthorizedMobileReturn: mobileFlow.handleAuthorizedMobileReturn,\n apiBaseUrl,\n getAccessToken: effectiveGetAccessToken,\n });\n\n useSelectSourceEffect({\n pendingSelectSourceAction: sourceSelection.pendingSelectSourceAction,\n selectSourceChoices: sourceSelection.selectSourceChoices,\n selectSourceRecommended: sourceSelection.selectSourceRecommended,\n setSelectSourceChainName: sourceSelection.setSelectSourceChainName,\n setSelectSourceTokenSymbol: sourceSelection.setSelectSourceTokenSymbol,\n initializedSelectSourceActionRef: sourceSelection.initializedSelectSourceActionRef,\n });\n\n useOneTapAutoResolveEffect({\n authExecutor,\n dispatch,\n oneTapLimitSavedDuringSetup: state.oneTapLimitSavedDuringSetup,\n reloadAccounts: transfer.reloadAccounts,\n });\n\n useGuestPreauthEffect({\n state, dispatch, authenticated: effectiveAuthenticated, apiBaseUrl,\n reloadAccounts: transfer.reloadAccounts,\n getAccessToken: effectiveGetAccessToken,\n });\n\n const inlineOneTapSource = useMemo(() => {\n if (!state.guestOneTapOptIn) return null;\n const entry = guestTransfer.pendingGuestEntry;\n if (!entry) return null;\n return { chainName: entry.chainName, tokenSymbol: entry.tokenSymbol };\n }, [state.guestOneTapOptIn, guestTransfer.pendingGuestEntry]);\n\n useGuestPreauthPhaseSyncEffect({\n state,\n dispatch,\n authExecutor,\n isDesktop,\n privyAuthenticated: effectiveAuthenticated,\n inlineOneTapSource,\n });\n\n useGuestDesktopPreauthSessionEffect({\n state,\n authExecutor,\n reloadAccounts: transfer.reloadAccounts,\n dispatch,\n desktopGuestPreauth: isDesktop,\n privyAuthenticatedRef,\n });\n\n useGuestPreauthWalletSetupEffect({\n state,\n dispatch,\n authExecutor,\n isDesktop,\n });\n\n useStandardDesktopInlineOpenWalletEffect({\n isDesktop,\n state,\n dispatch,\n authExecutor,\n });\n\n // ── Build handlers ──────────────────────────────────────────────\n\n const handlers: StepHandlers = useMemo(() => ({\n onLoginWithPasskey: auth.handleLoginWithPasskey,\n onSignupWithPasskey: auth.handleSignupWithPasskey,\n onPrepareProvider: provider.handlePrepareProvider,\n onSelectProvider: provider.handleSelectProvider,\n onContinueConnection: provider.handleContinueConnection,\n onSelectAccount: provider.handleSelectAccount,\n onPay: transfer.handlePay,\n onIncreaseLimit: provider.handleIncreaseLimit,\n onConfirmSign: transfer.handleConfirmSign,\n onRetryMobileStatus: mobileFlow.handleRetryMobileStatus,\n onBackFromOpenWallet: () => dispatch({ type: 'CLEAR_MOBILE_STATE' }),\n onLogout: handleLogout,\n onNewPayment: handleNewPayment,\n onSetPhase: (phase: PaymentPhase) => dispatch({ type: 'SET_USER_INTENT', intent: phase }),\n onBackFromSubflow: () => {\n authExecutor.cancelPendingExecution();\n dispatch({ type: 'RESTORE_SELECTION' });\n dispatch({ type: 'SET_USER_INTENT', intent: { step: 'deposit' } });\n },\n onSelectSourceChainChange: sourceSelection.handleSelectSourceChainChange,\n onSetSelectSourceTokenSymbol: sourceSelection.setSelectSourceTokenSymbol,\n onConfirmSelectSource: sourceSelection.handleConfirmSelectSource,\n onSetupOneTap: oneTapSetup.handleSetupOneTap,\n onSelectToken: provider.handleNavigateToTokenPicker,\n onSelectAuthorizedToken: provider.handleSelectAuthorizedToken,\n onAuthorizeToken: provider.handleAuthorizeToken,\n onSelectGuestToken: guestTransfer.handleSelectGuestToken,\n onConfirmGuestToken: guestTransfer.handleConfirmGuestToken,\n onGuestBackFromTokenPicker: guestTransfer.handleGuestBackFromTokenPicker,\n onToggleGuestOneTap: (enabled: boolean) => dispatch({ type: 'SET_GUEST_ONE_TAP', enabled }),\n onSetGuestOneTapLimit: (limit: number) => dispatch({ type: 'SET_GUEST_ONE_TAP_LIMIT', limit }),\n onLogin: () => dispatch({ type: 'REQUEST_LOGIN' }),\n onGuestSetupCompleteClose: () => {\n dispatch({ type: 'GUEST_PREAUTH_SETUP_COMPLETE_DISMISSED' });\n onDismiss?.();\n },\n }), [\n auth, provider, transfer, mobileFlow, sourceSelection, oneTapSetup,\n guestTransfer, handleLogout, handleNewPayment, onDismiss, dispatch, authExecutor,\n ]);\n\n // ── Render ──────────────────────────────────────────────────────\n\n return (\n <StepRenderer\n flow={{\n state,\n authenticated: effectiveAuthenticated,\n passkeyLoading:\n auth.passkeyLoginStatus !== 'initial' && auth.passkeyLoginStatus !== 'done' && auth.passkeyLoginStatus !== 'error'\n || auth.passkeySignupStatus !== 'initial' && auth.passkeySignupStatus !== 'done' && auth.passkeySignupStatus !== 'error'\n || auth.passkeySignupPopupActive,\n isDesktop,\n merchantName,\n onBack,\n onDismiss,\n depositAmount,\n }}\n remote={{\n pollingTransfer: polling.transfer,\n pollingError: polling.error,\n guestAccountPollingError: guestAccountPolling.error,\n authExecutorError: authExecutor.error,\n authExecutorExecuting: authExecutor.executing,\n transferSigningSigning: transferSigning.signing,\n transferSigningError: transferSigning.error,\n pendingSelectSource: authExecutor.pendingSelectSource,\n pendingOneTapSetup: authExecutor.pendingOneTapSetup,\n }}\n derived={{\n pendingConnections: derived.pendingConnections,\n depositEligibleAccounts: derived.depositEligibleAccounts,\n sourceName: derived.sourceName,\n maxSourceBalance: derived.maxSourceBalance,\n tokenCount: derived.tokenCount,\n selectedAccount: derived.selectedAccount,\n selectedSource: derived.selectedSource,\n selectSourceChoices: sourceSelection.selectSourceChoices,\n selectSourceRecommended: sourceSelection.selectSourceRecommended,\n selectSourceAvailableBalance: sourceSelection.selectSourceAvailableBalance,\n }}\n forms={{\n selectSourceChainName: sourceSelection.selectSourceChainName,\n selectSourceTokenSymbol: sourceSelection.selectSourceTokenSymbol,\n savingOneTapLimit: oneTapSetup.savingOneTapLimit,\n guestTokenEntries: guestTransfer.guestTokenEntries,\n guestLoadingBalances: guestTransfer.loadingBalances,\n guestBridgePhase: guestTransfer.bridgePhase,\n guestPendingEntry: guestTransfer.pendingGuestEntry,\n guestQuoteFee: guestTransfer.guestFee?.quote ?? null,\n guestQuoteLoading: guestTransfer.guestQuoteLoading,\n depositQuoteId: depositFee.quoteId,\n depositQuoteFee: depositFee.quoteFee,\n depositQuoteLoading: depositFee.quoteLoading,\n depositQuoteError: depositFee.quoteError,\n }}\n handlers={handlers}\n />\n );\n}\n"]}
|