@swype-org/react-sdk 0.1.183 → 0.1.189

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/theme.ts","../src/context.tsx","../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/getWalletClient.ts","../src/api.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/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/SourceCard.tsx","../src/components/ui/StepList.tsx","../src/components/ui/SettingsMenu.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/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/SwypePayment.tsx"],"names":["_BaseError_walk","connector","chainId","chain","fetchTransfer","wagmiConfig","credential","useState","useRef","useCallback","hexChainId","signTransfer","jsx","jsxs","containerStyle","createContext","useContext","buttonStyle","headerStyle","iconStyle","bodyStyle","useEffect","Fragment","rowStyle","badgeStyle","labelStyle","dropdownStyle","contentStyle","inputStyle","headingStyle","errorBannerStyle","subtitleStyle","logoImgStyle","dividerStyle","nameStyle","mascotStyle","amountRowStyle","tokenIconButtonStyle","tokenIconWrapStyle","checkBadgeStyle","radioStyle","radioDotStyle","stepsWrapStyle","logoStyle","errorStyle","hintStyle","mascotWrapStyle","depositCardStyle","depositLabelStyle","tokenListStyle","tokenRowStyle","tokenInfoStyle","useMemo","usePrivy","signedTransfer"],"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 } 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 wagmiConfig = createConfig({\n chains: [mainnet, arbitrum, base, polygon, bsc],\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 },\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","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 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","// ── 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} 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","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;\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 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\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// ── Step resolution ────────────────────────────────────────────────────\n//\n// Pure function that determines the correct step from state. Used by the\n// reducer after state-changing actions and by effects that need to\n// determine where the user should land. Does not handle auth-gated\n// steps (login / otp-verify) because the reducer doesn't track the\n// external `authenticated` flag from Privy — those are handled by the\n// effects that have access to the Privy hooks.\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: 'login',\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 };\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 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 { ...state, error: action.error, step: 'deposit' };\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 };\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 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 ACCENT = '#28b67a';\nconst BG_RING = '#d2e4ea';\n\nexport function SwypeLoadingScreen() {\n return (\n <div style={containerStyle}>\n <div style={contentStyle}>\n <p style={wordmarkStyle}>BLINK</p>\n <div style={spinnerStyle} />\n </div>\n\n <style>{`\n @keyframes swype-loading-spin {\n to { transform: rotate(360deg); }\n }\n `}</style>\n </div>\n );\n}\n\nconst containerStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n flex: 1,\n background: 'transparent',\n};\n\nconst contentStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: 16,\n};\n\nconst wordmarkStyle: CSSProperties = {\n fontSize: 28,\n fontWeight: 700,\n letterSpacing: '-0.04em',\n color: ACCENT,\n margin: 0,\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n};\n\nconst spinnerStyle: CSSProperties = {\n width: 44,\n height: 44,\n border: `4px solid ${BG_RING}`,\n borderTopColor: ACCENT,\n borderRightColor: `${ACCENT}66`,\n borderRadius: '50%',\n animation: 'swype-loading-spin 0.9s linear infinite',\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\nexport const SWYPE_LOGO = svgToDataUri(SWYPE_SVG);\n\nconst SWYPE_MASCOT_SVG = `<svg width=\"100\" height=\"100\" viewBox=\"0 0 100 100\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\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=\"#1a5c2a\"/>\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=\"#1a5c2a\"/>\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=\"#4ABA5A\"/>\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=\"#4ABA5A\"/>\n<rect x=\"44.3433\" y=\"56.4863\" width=\"10.1195\" height=\"9.10751\" fill=\"#4ABA5A\"/>\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=\"#1a5c2a\"/>\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=\"#1a5c2a\"/>\n</svg>`;\n\nexport const SWYPE_MASCOT = svgToDataUri(SWYPE_MASCOT_SVG);\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\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","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_MASCOT } 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_MASCOT} alt=\"Swype\" style={mascotStyle} />\n );\n }\n\n return (\n <div style={containerStyle}>\n <span style={dotStyle(tokens.accent)} />\n <span style={labelStyle(tokens.text)}>Link</span>\n <span style={lineStyle(tokens.textMuted)} />\n <span style={dotStyle(tokens.textMuted)} />\n <span style={labelStyle(tokens.textMuted)}>Deposit</span>\n </div>\n );\n}\n\nconst containerStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\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 type { CSSProperties, ReactNode } from 'react';\nimport { useSwypeConfig } from '../../context';\nimport { useFlowPhase } from '../../FlowPhaseContext';\nimport { StepProgress } from './StepProgress';\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}\n\nexport function ScreenHeader({ title, right, onBack, badge }: ScreenHeaderProps) {\n const { tokens } = useSwypeConfig();\n const flowPhase = useFlowPhase();\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}>{right}</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 <span style={pillStyle(tokens.textMuted, tokens.border)}>Beta Version</span>\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: '16px 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 8px 18px rgba(178, 255, 147, 0.35)',\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 { useRef, useState, useEffect, type CSSProperties } from 'react';\nimport type { Account } from '../../types';\nimport { useSwypeConfig } from '../../context';\nimport { KNOWN_LOGOS } from '../../assets/logos';\nimport {\n getPreferredDepositWallet,\n getWalletAddress,\n hasActiveDepositWallet,\n} from '../../paymentHelpers';\n\ninterface SourceCardProps {\n /** Wallet/provider name (e.g. \"Ora\") */\n name: string;\n /** Truncated address (e.g. \"0x56eb...424a\") */\n address?: string;\n /** Whether this source is verified/active */\n verified?: boolean;\n /** All user accounts for the dropdown */\n accounts?: Account[];\n /** Currently selected account ID */\n selectedAccountId?: string | null;\n /** Current deposit amount — used to determine if an account's allowance is exceeded */\n depositAmount?: number;\n /** Called when an active account is selected */\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 */\n onAddProvider?: () => void;\n}\n\nexport function SourceCard({\n name,\n address,\n verified,\n accounts,\n selectedAccountId,\n depositAmount,\n onSelectAccount,\n onAuthorizeAccount,\n onAddProvider,\n}: SourceCardProps) {\n const { tokens } = useSwypeConfig();\n const [open, setOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const hasDropdown = accounts != null && accounts.length > 0;\n\n useEffect(() => {\n if (!open) return;\n const handleClick = (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n setOpen(false);\n }\n };\n document.addEventListener('mousedown', handleClick);\n return () => document.removeEventListener('mousedown', handleClick);\n }, [open]);\n\n return (\n <div ref={containerRef} style={{ position: 'relative' }}>\n <div style={cardContainerStyle(tokens)}>\n <div style={leftStyle}>\n {KNOWN_LOGOS[name.toLowerCase()] ? (\n <img\n src={KNOWN_LOGOS[name.toLowerCase()]}\n alt={name}\n style={logoImgStyle}\n />\n ) : (\n <div style={iconStyle(tokens.textMuted)}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M21 7H3c-1.1 0-2 .9-2 2v6c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V9c0-1.1-.9-2-2-2zm0 8H3V9h18v6z\"\n fill=\"currentColor\"\n />\n </svg>\n </div>\n )}\n <div>\n <div style={nameRowStyle}>\n <span style={nameStyle(tokens.text)}>{name}</span>\n {verified && (\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={tokens.accent} />\n </svg>\n )}\n </div>\n {address && <span style={addressStyle(tokens.textMuted)}>{address}</span>}\n </div>\n </div>\n {hasDropdown && (\n <button\n type=\"button\"\n onClick={() => setOpen(!open)}\n style={changeStyle(tokens.accent)}\n >\n Change source\n <svg\n width=\"10\"\n height=\"10\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n style={{\n marginLeft: 4,\n transform: open ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 0.15s ease',\n }}\n >\n <path\n d=\"M7 10l5 5 5-5\"\n stroke={tokens.accent}\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n )}\n </div>\n\n {open && hasDropdown && (\n <div style={dropdownStyle(tokens)}>\n {accounts.map((account) => {\n const preferredWallet = getPreferredDepositWallet(account, depositAmount ?? 0);\n const active = hasActiveDepositWallet(account);\n const isSelected = account.id === selectedAccountId;\n const displayName = account.nickname ?? account.name;\n const walletAddress = preferredWallet\n ? getWalletAddress(preferredWallet)\n : null;\n const hasAllowance = active && account.remainingAllowance != null;\n const exceedsLimit = hasAllowance\n && depositAmount != null\n && depositAmount > (account.remainingAllowance as number);\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 setOpen(false);\n }}\n style={dropdownRowStyle(tokens, active, isSelected)}\n >\n <div style={dropdownRowLeftStyle}>\n {KNOWN_LOGOS[account.name.toLowerCase()] ? (\n <img\n src={KNOWN_LOGOS[account.name.toLowerCase()]}\n alt={account.name}\n style={dropdownLogoStyle}\n />\n ) : (\n <div style={dropdownFallbackIconStyle(active ? tokens.textMuted : tokens.border)}>\n {account.name.charAt(0)}\n </div>\n )}\n <div style={dropdownNameColumnStyle}>\n <span style={dropdownNameStyle(active ? tokens.text : tokens.textMuted)}>\n {displayName}\n </span>\n {walletAddress && (\n <span style={dropdownAddressStyle(active ? tokens.textMuted : tokens.border)}>\n {walletAddress}\n </span>\n )}\n {hasAllowance && (\n <span style={remainingAllowanceStyle(exceedsLimit ? tokens.warning : tokens.textMuted)}>\n ${(account.remainingAllowance as number).toFixed(2)} remaining\n </span>\n )}\n </div>\n </div>\n\n <div style={dropdownRowRightStyle}>\n {active ? (\n exceedsLimit ? (\n <span style={exceedsLimitBadgeStyle(tokens)}>Exceeds limit</span>\n ) : (\n <span style={activeBadgeStyle(tokens)}>Active</span>\n )\n ) : (\n <span style={inactiveBadgeStyle(tokens)}>Setup incomplete</span>\n )}\n </div>\n </button>\n );\n })}\n\n {onAddProvider && (\n <>\n <div style={dropdownDividerStyle(tokens.border)} />\n <button\n type=\"button\"\n onClick={() => {\n onAddProvider();\n setOpen(false);\n }}\n style={addProviderStyle(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 )}\n </div>\n )}\n </div>\n );\n}\n\nconst cardContainerStyle = (tokens: { bgInput: string; border: string }): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '12px 16px',\n background: tokens.bgInput,\n border: `1px solid ${tokens.border}`,\n borderRadius: 16,\n});\n\nconst leftStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 10,\n};\n\nconst logoImgStyle: CSSProperties = {\n width: 20,\n height: 20,\n borderRadius: '50%',\n objectFit: 'contain',\n};\n\nconst iconStyle = (color: string): CSSProperties => ({\n color,\n display: 'flex',\n alignItems: 'center',\n});\n\nconst nameRowStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 4,\n};\n\nconst nameStyle = (color: string): CSSProperties => ({\n fontWeight: 600,\n fontSize: '0.9rem',\n color,\n});\n\nconst addressStyle = (color: string): CSSProperties => ({\n fontSize: '0.72rem',\n color,\n fontFamily: '\"SF Mono\", \"Fira Code\", monospace',\n});\n\nconst changeStyle = (color: string): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n background: 'transparent',\n border: 'none',\n color,\n fontWeight: 600,\n fontSize: '0.82rem',\n cursor: 'pointer',\n fontFamily: 'inherit',\n padding: 0,\n});\n\nconst dropdownStyle = (tokens: { bgCard: string; border: string; shadowLg: string; radiusLg: string }): CSSProperties => ({\n position: 'absolute',\n top: '100%',\n left: 0,\n right: 0,\n marginTop: 4,\n background: tokens.bgCard,\n border: `1px solid ${tokens.border}`,\n borderRadius: tokens.radiusLg,\n boxShadow: tokens.shadowLg,\n zIndex: 50,\n overflow: 'hidden',\n});\n\nconst dropdownRowStyle = (\n tokens: { bgCard: string; border: string; accent: string },\n active: boolean,\n isSelected: boolean,\n): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n padding: '10px 14px',\n background: isSelected ? tokens.accent + '12' : 'transparent',\n border: 'none',\n borderBottom: `1px solid ${tokens.border}`,\n cursor: 'pointer',\n fontFamily: 'inherit',\n fontSize: '0.85rem',\n textAlign: 'left',\n outline: 'none',\n opacity: active ? 1 : 0.55,\n transition: 'background 0.1s ease',\n});\n\nconst dropdownRowLeftStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 10,\n minWidth: 0,\n flex: 1,\n};\n\nconst dropdownRowRightStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n flexShrink: 0,\n};\n\nconst dropdownLogoStyle: CSSProperties = {\n width: 20,\n height: 20,\n borderRadius: '50%',\n objectFit: 'contain',\n flexShrink: 0,\n};\n\nconst dropdownFallbackIconStyle = (color: string): CSSProperties => ({\n width: 20,\n height: 20,\n borderRadius: '50%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '0.72rem',\n fontWeight: 700,\n color,\n flexShrink: 0,\n});\n\nconst dropdownNameColumnStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n minWidth: 0,\n};\n\nconst dropdownNameStyle = (color: string): CSSProperties => ({\n fontWeight: 500,\n color,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n});\n\nconst dropdownAddressStyle = (color: string): CSSProperties => ({\n fontSize: '0.72rem',\n color,\n fontFamily: '\"SF Mono\", \"Fira Code\", monospace',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n});\n\nconst activeBadgeStyle = (tokens: { success: string; successBg: string }): CSSProperties => ({\n fontSize: '0.6rem',\n fontWeight: 600,\n color: tokens.success,\n background: tokens.successBg,\n padding: '2px 7px',\n borderRadius: 999,\n textTransform: 'uppercase',\n letterSpacing: '0.03em',\n whiteSpace: 'nowrap',\n});\n\nconst inactiveBadgeStyle = (tokens: { warning: string; warningBg?: string }): CSSProperties => ({\n fontSize: '0.6rem',\n fontWeight: 600,\n color: tokens.warning,\n background: tokens.warningBg ?? `${tokens.warning}1a`,\n padding: '2px 7px',\n borderRadius: 999,\n textTransform: 'uppercase',\n letterSpacing: '0.03em',\n whiteSpace: 'nowrap',\n});\n\nconst dropdownDividerStyle = (borderColor: string): CSSProperties => ({\n height: 0,\n borderTop: `1px solid ${borderColor}`,\n});\n\nconst remainingAllowanceStyle = (color: string): CSSProperties => ({\n fontSize: '0.68rem',\n color,\n fontWeight: 500,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n});\n\nconst exceedsLimitBadgeStyle = (tokens: { warning: string; warningBg?: string }): CSSProperties => ({\n fontSize: '0.6rem',\n fontWeight: 600,\n color: tokens.warning,\n background: tokens.warningBg ?? `${tokens.warning}1a`,\n padding: '2px 7px',\n borderRadius: 999,\n textTransform: 'uppercase',\n letterSpacing: '0.03em',\n whiteSpace: 'nowrap',\n});\n\nconst addProviderStyle = (tokens: { accent: string }): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n width: '100%',\n padding: '10px 14px',\n background: 'transparent',\n border: 'none',\n color: tokens.accent,\n fontWeight: 600,\n fontSize: '0.85rem',\n cursor: 'pointer',\n fontFamily: 'inherit',\n textAlign: 'left',\n outline: 'none',\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={isActive\n ? activeBadgeContainerStyle\n : badgeStyle(\n isComplete ? tokens.accent : tokens.border,\n isComplete,\n )\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 ) : isActive ? (\n <span style={activeDotStyle(tokens.accent)} />\n ) : (\n <span style={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 activeBadgeContainerStyle: CSSProperties = {\n width: 28,\n height: 28,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n};\n\nconst activeDotStyle = (color: string): CSSProperties => ({\n width: 8,\n height: 8,\n borderRadius: '50%',\n backgroundColor: color,\n display: 'block',\n});\n\nconst badgeNumberStyle: CSSProperties = {\n fontSize: '0.75rem',\n fontWeight: 600,\n color: 'inherit',\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 { 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 } 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 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 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} />\n\n <div style={contentStyle}>\n <h2 style={headingStyle(tokens.text)}>Secure your account with a passkey</h2>\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 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}\n\nexport function WalletPickerScreen({\n providers,\n pendingConnections,\n loading,\n useDeeplink,\n onPrepareProvider,\n onSelectProvider,\n onContinueConnection,\n onBack,\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} />\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} />\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 { 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}\n\nexport function SetupScreen({\n availableBalance,\n onSetupOneTap,\n onBack,\n onAdvanced,\n loading,\n error,\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 [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 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 setEditing(false);\n }, [inputValue, effectiveMax, effectiveMin]);\n\n const selectPreset = (value: number) => {\n setLimit(Math.min(value, effectiveMax));\n };\n\n const selectMax = () => {\n setLimit(Math.min(availableBalance, effectiveMax));\n };\n\n const isPresetActive = (value: number) => Math.abs(limit - value) < 0.005;\n const isMaxActive = Math.abs(limit - Math.min(availableBalance, effectiveMax)) < 0.005\n && !PRESETS.some((p) => isPresetActive(p));\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} />\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 <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 <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" style={checkBadgeStyle}>\n <circle cx=\"8\" cy=\"8\" r=\"8\" fill=\"#2775CA\" />\n <path d=\"M5 8l2 2 4-4\" stroke=\"#fff\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\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, isPresetActive(value))}\n >\n ${value.toLocaleString()}\n </button>\n ))}\n <button\n type=\"button\"\n onClick={selectMax}\n style={presetButtonStyle(tokens, isMaxActive)}\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_MASCOT } from '../../assets/logos';\nimport { ScreenLayout, ScreenHeader, PoweredByFooter, StepList, SettingsMenu } 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_MASCOT} 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 right={<SettingsMenu 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 { CSSProperties } from 'react';\nimport type { Account } from '../../types';\nimport { useSwypeConfig } from '../../context';\nimport { SWYPE_MASCOT, KNOWN_LOGOS } from '../../assets/logos';\nimport {\n ScreenLayout,\n ScreenHeader,\n PoweredByFooter,\n PrimaryButton,\n OutlineButton,\n SourceCard,\n WarningBanner,\n SettingsMenu,\n} from '../ui';\n\ninterface DepositScreenProps {\n merchantName?: string;\n /** Source wallet/account name */\n sourceName: string;\n /** Truncated source address */\n sourceAddress?: string;\n sourceVerified?: boolean;\n /** Total available balance from source */\n availableBalance: number;\n /** Remaining One-Tap limit */\n remainingLimit: number;\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}\n\nconst MIN_DEPOSIT = 0.25;\n\nexport function DepositScreen({\n merchantName,\n sourceName,\n sourceAddress,\n sourceVerified,\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}: DepositScreenProps) {\n const { tokens } = useSwypeConfig();\n const amount = initialAmount;\n\n const isLowBalance = availableBalance < MIN_DEPOSIT;\n const exceedsLimit = amount > remainingLimit && !isLowBalance;\n const canDeposit = amount >= MIN_DEPOSIT && !exceedsLimit && !isLowBalance && !processing;\n\n const headerTitle = merchantName ? `Deposit to ${merchantName}` : 'Deposit';\n\n if (isLowBalance) {\n return (\n <ScreenLayout\n footer={\n <>\n <PrimaryButton onClick={onSwitchWallet}>Switch wallet</PrimaryButton>\n <p style={switchHintStyle(tokens.textMuted)}>\n Use a different wallet with more balance\n </p>\n <div style={outlineBtnWrapStyle}>\n <OutlineButton onClick={onBack}>Back to deposit options</OutlineButton>\n </div>\n <PoweredByFooter />\n </>\n }\n >\n <ScreenHeader title={headerTitle} onBack={onBack} right={<SettingsMenu onLogout={onLogout} />} />\n\n <SourceCard\n name={sourceName}\n address={sourceAddress}\n verified={sourceVerified}\n accounts={accounts}\n selectedAccountId={selectedAccountId}\n depositAmount={amount}\n onSelectAccount={onSelectAccount}\n onAuthorizeAccount={onAuthorizeAccount}\n onAddProvider={onAddProvider}\n />\n\n <div style={lowBalanceAmountDisplayStyle}>\n <span style={lowBalanceAmountStyle}>\n ${amount.toFixed(2)}\n </span>\n </div>\n\n <div style={lowBalanceRowStyle}>\n <div style={lowBalanceLeftStyle}>\n <div style={lowBalanceCoinStyle(tokens.warning)}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"currentColor\" />\n <text x=\"12\" y=\"16\" textAnchor=\"middle\" fontSize=\"12\" fill=\"#fff\" fontWeight=\"700\">$</text>\n </svg>\n </div>\n <div>\n <div style={lowBalanceLabelStyle(tokens.textMuted)}>{selectedSourceLabel ?? 'Available'}</div>\n <div style={{ fontSize: '1rem', fontWeight: 700, color: tokens.warning }}>\n ${availableBalance.toFixed(2)}\n </div>\n </div>\n </div>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z\" fill={tokens.warning} />\n </svg>\n </div>\n\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 </ScreenLayout>\n );\n }\n\n const providerLogo = KNOWN_LOGOS[sourceName.toLowerCase()];\n\n return (\n <ScreenLayout\n footer={\n <>\n {exceedsLimit && onIncreaseLimit ? (\n <>\n <PrimaryButton onClick={onIncreaseLimit} loading={increasingLimit}>\n Increase limit\n </PrimaryButton>\n <p style={limitExceededHintStyle(tokens.warning)}>\n Your deposit of ${amount.toFixed(2)} exceeds your One-Tap limit of ${remainingLimit.toFixed(2)}.\n Increase your limit to continue.\n </p>\n </>\n ) : (\n <PrimaryButton onClick={() => onDeposit(amount)} disabled={!canDeposit} loading={processing}>\n Confirm\n </PrimaryButton>\n )}\n <PoweredByFooter />\n </>\n }\n >\n <ScreenHeader onBack={onBack} />\n\n <div style={mascotWrapStyle}>\n <img src={SWYPE_MASCOT} alt=\"Swype\" style={mascotStyle} />\n </div>\n\n {/* Deposit card */}\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: 0, maximumFractionDigits: 2 })}\n </div>\n <button\n type=\"button\"\n onClick={onSelectToken}\n style={tokenIconButtonStyle(!!onSelectToken)}\n >\n <div style={tokenIconWrapStyle}>\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 <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" style={checkBadgeStyle}>\n <circle cx=\"8\" cy=\"8\" r=\"8\" fill=\"#2775CA\" />\n <path d=\"M5 8l2 2 4-4\" stroke=\"#fff\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\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 <div style={walletBalanceRowStyle}>\n {providerLogo ? (\n <img src={providerLogo} alt={sourceName} style={providerLogoStyle} />\n ) : (\n <div style={providerFallbackStyle(tokens.textMuted)}>\n {sourceName.charAt(0)}\n </div>\n )}\n <span style={walletBalanceStyle(tokens.text)}>\n ${availableBalance.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 </div>\n </div>\n\n {/* Spending limit */}\n <div style={spendingLimitStyle(tokens.textMuted)}>\n Spending Limit{' '}\n <strong style={{ color: tokens.text }}>\n ${remainingLimit.toLocaleString('en-US', { minimumFractionDigits: 0, maximumFractionDigits: 0 })}\n </strong>\n </div>\n\n {error && <div style={errorBannerStyle(tokens)}>{error}</div>}\n </ScreenLayout>\n );\n}\n\n/* ── Styles ──────────────────────────────────────────────────────── */\n\nconst mascotWrapStyle: CSSProperties = {\n display: 'flex',\n justifyContent: 'center',\n marginBottom: 16,\n};\n\nconst mascotStyle: 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: 20,\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\nconst walletBalanceRowStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 8,\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\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\nconst switchHintStyle = (color: string): CSSProperties => ({\n textAlign: 'center',\n fontSize: '0.8rem',\n color,\n margin: '10px 0',\n});\n\nconst outlineBtnWrapStyle: CSSProperties = {\n marginBottom: 8,\n};\n\n/* ── Low-balance styles (kept separate) ──────────────────────────── */\n\nconst lowBalanceAmountDisplayStyle: CSSProperties = {\n textAlign: 'center',\n padding: '20px 0 8px',\n};\n\nconst lowBalanceAmountStyle: CSSProperties = {\n fontSize: '2.5rem',\n fontWeight: 700,\n color: '#ccc',\n letterSpacing: '-0.02em',\n};\n\nconst lowBalanceRowStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: 16,\n};\n\nconst lowBalanceLeftStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 10,\n};\n\nconst lowBalanceCoinStyle = (color: string): CSSProperties => ({\n color,\n display: 'flex',\n alignItems: 'center',\n});\n\nconst lowBalanceLabelStyle = (color: string): CSSProperties => ({\n fontSize: '0.72rem',\n color,\n fontWeight: 500,\n});\n","import { useCallback, useEffect, useRef, useState, type CSSProperties } from 'react';\nimport { useSwypeConfig } from '../../context';\nimport { ScreenLayout, ScreenHeader, PoweredByFooter, PrimaryButton, IconCircle, SettingsMenu } 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;\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}\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}: 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 ? 'Done' : 'Try again'}\n </PrimaryButton>\n {effectiveAutoClose != null && effectiveAutoClose > 0 && (\n <p style={countdownStyle(tokens.textMuted)}>\n Returning to app in {countdown}s&hellip;\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\n right={<SettingsMenu onLogout={onLogout} />}\n />\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 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 { useSwypeConfig } from '../../context';\nimport {\n ScreenLayout,\n ScreenHeader,\n PrimaryButton,\n PoweredByFooter,\n SettingsMenu,\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 right={<SettingsMenu 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.accent)}> 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 return (\n <button\n key={token.tokenSymbol}\n type=\"button\"\n onClick={() => onTokenChange(token.tokenSymbol)}\n style={optionButtonStyle(tokens, isSelected)}\n >\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 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 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 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}: TransferStatusScreenProps) {\n const { tokens } = useSwypeConfig();\n\n const steps = buildSteps(phase);\n\n return (\n <ScreenLayout footer={<PoweredByFooter />}>\n <ScreenHeader />\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 SettingsMenu,\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 error?: string | null;\n onRetryStatus?: () => void;\n onBack?: () => void;\n onLogout: () => void;\n}\n\n/**\n * Shown on mobile when the wallet deeplink cannot be auto-opened (e.g. inside\n * a cross-origin iframe). Provides a user-tappable button that triggers the\n * deeplink via window.open, which works for user-initiated clicks even from\n * within iframes.\n */\nexport function OpenWalletScreen({\n walletName,\n deeplinkUri,\n loading,\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 (loading || !deeplinkUri || autoOpenedRef.current === deeplinkUri) return;\n autoOpenedRef.current = deeplinkUri;\n\n triggerDeeplink(deeplinkUri);\n }, [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 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} right={<SettingsMenu 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","import type { CSSProperties } from 'react';\nimport { useSwypeConfig } from '../../context';\nimport { ScreenLayout, ScreenHeader, PrimaryButton, SettingsMenu } 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 right={<SettingsMenu 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}>&#10003;</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_MASCOT } 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 /** Deposit amount for the context card at top */\n depositAmount?: number;\n}\n\nexport function TokenPickerScreen({\n account,\n chains,\n onSelectAuthorized,\n onAuthorizeToken,\n onBack,\n depositAmount,\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} />\n\n <div style={mascotWrapStyle}>\n <img src={SWYPE_MASCOT} alt=\"Swype\" style={mascotImgStyle} />\n </div>\n\n {depositAmount != null && (\n <div style={depositCardStyle(t)}>\n <div style={depositLabelStyle(t.textMuted)}>Depositing</div>\n <div style={depositAmountRowStyle}>\n <div style={depositAmountStyle(t.text)}>\n ${depositAmount.toLocaleString('en-US', { minimumFractionDigits: 0, maximumFractionDigits: 2 })}\n </div>\n <div style={tokenIconWrapStyle}>\n <svg width=\"32\" height=\"32\" 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 <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\" style={checkBadgeStyle}>\n <circle cx=\"8\" cy=\"8\" r=\"8\" fill=\"#2775CA\" />\n <path d=\"M5 8l2 2 4-4\" stroke=\"#fff\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </div>\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\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)}>\n <span style={tokenIconTextStyle(t.textMuted)}>$</span>\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)}>&middot;</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={authorized ? selectCircleSelectedStyle(t.accent) : selectCircleStyle(t.border)}>\n {authorized && (\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.2rem',\n fontWeight: 700,\n letterSpacing: '-0.02em',\n color,\n});\n\nconst tokenIconWrapStyle: CSSProperties = {\n position: 'relative',\n width: 32,\n height: 32,\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 }): CSSProperties => ({\n width: 36,\n height: 36,\n borderRadius: '50%',\n border: `1.5px solid ${tokens.border}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\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 { Account, PaymentStep, SourceType, Transfer, WalletSource } from './types';\nimport type { NormalizedAuthIdentifier } from './auth';\nimport { maskAuthIdentifier } from './auth';\nimport type { PaymentState } from './paymentReducer';\nimport 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} from './components/screens';\nimport type { TransferPhase } from './components/screens';\nimport { FlowPhaseProvider } from './FlowPhaseContext';\nimport type { FlowPhase } from './components/ui/StepProgress';\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 (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}\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 sourceAddress: string | undefined;\n sourceVerified: boolean;\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 sourceAddress,\n sourceVerified,\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 // 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 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 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 />\n );\n }\n\n // Open Wallet (mobile deeplink)\n if (step === '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={state.creatingTransfer || !state.deeplinkUri}\n error={state.error || pollingError}\n onRetryStatus={handlers.onRetryMobileStatus}\n onBack={() => handlers.onNavigate('wallet-picker')}\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 : selectedAccount\n ? selectedAccount.wallets.reduce((sum, w) => sum + w.balance.available.amount, 0)\n : selectSourceAvailableBalance > 0\n ? selectSourceAvailableBalance\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 />\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 != null ? depositAmount : 5;\n return (\n <DepositScreen\n merchantName={merchantName}\n sourceName={sourceName}\n sourceAddress={sourceAddress}\n sourceVerified={sourceVerified}\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?.remainingAllowance\n ?? selectedAccount?.remainingAllowance\n ?? state.oneTapLimit\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 />\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 depositAmount={depositAmount ?? undefined}\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 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?.remainingAllowance\n ?? selectedAccount?.remainingAllowance\n ?? state.oneTapLimit;\n return limit > displayAmount ? limit - displayAmount : 0;\n })() : undefined}\n onDone={onDismiss ?? handlers.onNewPayment}\n onLogout={handlers.onLogout}\n autoCloseSeconds={autoCloseSeconds}\n />\n );\n }\n\n // Low Balance (fallback)\n if (step === 'low-balance') {\n return (\n <DepositScreen\n merchantName={merchantName}\n sourceName={sourceName}\n sourceAddress={sourceAddress}\n sourceVerified={sourceVerified}\n availableBalance={0}\n remainingLimit={\n selectedSource?.remainingAllowance\n ?? selectedAccount?.remainingAllowance\n ?? state.oneTapLimit\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 />\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';\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';\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 sourceAddress: string | undefined;\n sourceVerified: boolean;\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 const sourceAddress = selectedWallet\n ? `${selectedWallet.name.slice(0, 6)}...${selectedWallet.name.slice(-4)}`\n : undefined;\n const sourceVerified = selectedWallet?.status === 'ACTIVE';\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 sourceAddress,\n sourceVerified,\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: 'setup-status' });\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: 'setup-status' });\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: 'setup-status' });\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: 'setup-status' });\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: correctableSteps.includes(state.step) ? resolved.step : 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 // 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') {\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') {\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","// ── 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, useMemo, useReducer, useRef } from 'react';\nimport { useLoginWithOAuth, usePrivy } from '@privy-io/react-auth';\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} 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}\n\n// ── Component ──────────────────────────────────────────────────────────\n\nexport function SwypePayment(props: SwypePaymentProps) {\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 <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}: SwypePaymentProps) {\n const { apiBaseUrl, depositAmount } = useSwypeConfig();\n const { ready, authenticated, logout, getAccessToken } = usePrivy();\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 // ── 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 }), [\n auth, passkey, provider, transfer, mobileFlow, sourceSelection, oneTapSetup,\n 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 sourceAddress={derived.sourceAddress}\n sourceVerified={derived.sourceVerified}\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","../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/getWalletClient.ts","../src/api.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/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/SwypePayment.tsx"],"names":["_BaseError_walk","connector","chainId","chain","fetchTransfer","wagmiConfig","credential","useState","useRef","useCallback","hexChainId","signTransfer","jsx","jsxs","containerStyle","createContext","useContext","useEffect","buttonStyle","headerStyle","iconStyle","bodyStyle","rowStyle","badgeStyle","labelStyle","Fragment","contentStyle","inputStyle","headingStyle","errorBannerStyle","subtitleStyle","dividerStyle","mascotStyle","amountRowStyle","tokenIconButtonStyle","tokenIconWrapStyle","checkBadgeStyle","radioStyle","radioDotStyle","stepsWrapStyle","logoStyle","waitHintStyle","errorStyle","hintStyle","depositCardStyle","depositLabelStyle","tokenListStyle","tokenRowStyle","tokenInfoStyle","useMemo","usePrivy","signedTransfer"],"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 } 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 wagmiConfig = createConfig({\n chains: [mainnet, arbitrum, base, polygon, bsc],\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 },\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","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 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","// ── 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} 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","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;\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 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\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// ── Step resolution ────────────────────────────────────────────────────\n//\n// Pure function that determines the correct step from state. Used by the\n// reducer after state-changing actions and by effects that need to\n// determine where the user should land. Does not handle auth-gated\n// steps (login / otp-verify) because the reducer doesn't track the\n// external `authenticated` flag from Privy — those are handled by the\n// effects that have access to the Privy hooks.\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: 'login',\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 };\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 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 { ...state, error: action.error, step: 'deposit' };\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 };\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 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 ACCENT = '#28b67a';\nconst BG_RING = '#d2e4ea';\n\nexport function SwypeLoadingScreen() {\n return (\n <div style={containerStyle}>\n <div style={contentStyle}>\n <p style={wordmarkStyle}>BLINK</p>\n <div style={spinnerStyle} />\n </div>\n\n <style>{`\n @keyframes swype-loading-spin {\n to { transform: rotate(360deg); }\n }\n `}</style>\n </div>\n );\n}\n\nconst containerStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n flex: 1,\n background: 'transparent',\n};\n\nconst contentStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: 16,\n};\n\nconst wordmarkStyle: CSSProperties = {\n fontSize: 28,\n fontWeight: 700,\n letterSpacing: '-0.04em',\n color: ACCENT,\n margin: 0,\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n};\n\nconst spinnerStyle: CSSProperties = {\n width: 44,\n height: 44,\n border: `4px solid ${BG_RING}`,\n borderTopColor: ACCENT,\n borderRightColor: `${ACCENT}66`,\n borderRadius: '50%',\n animation: 'swype-loading-spin 0.9s linear infinite',\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\nexport const SWYPE_LOGO = svgToDataUri(SWYPE_SVG);\n\nconst SWYPE_MASCOT_SVG = `<svg width=\"100\" height=\"100\" viewBox=\"0 0 100 100\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\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=\"#1a5c2a\"/>\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=\"#1a5c2a\"/>\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=\"#4ABA5A\"/>\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=\"#4ABA5A\"/>\n<rect x=\"44.3433\" y=\"56.4863\" width=\"10.1195\" height=\"9.10751\" fill=\"#4ABA5A\"/>\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=\"#1a5c2a\"/>\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=\"#1a5c2a\"/>\n</svg>`;\n\nexport const SWYPE_MASCOT = svgToDataUri(SWYPE_MASCOT_SVG);\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\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","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_MASCOT } 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_MASCOT} alt=\"Swype\" style={mascotStyle} />\n );\n }\n\n return (\n <div style={containerStyle}>\n <span style={dotStyle(tokens.accent)} />\n <span style={labelStyle(tokens.text)}>Link</span>\n <span style={lineStyle(tokens.textMuted)} />\n <span style={dotStyle(tokens.textMuted)} />\n <span style={labelStyle(tokens.textMuted)}>Deposit</span>\n </div>\n );\n}\n\nconst containerStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\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 <span style={pillStyle(tokens.textMuted, tokens.border)}>Beta Version</span>\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: '16px 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 8px 18px rgba(178, 255, 147, 0.35)',\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\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 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 { 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}\n\nexport function SetupScreen({\n availableBalance,\n onSetupOneTap,\n onBack,\n onLogout,\n onAdvanced,\n loading,\n error,\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 <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 <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" style={checkBadgeStyle}>\n <circle cx=\"8\" cy=\"8\" r=\"8\" fill=\"#2775CA\" />\n <path d=\"M5 8l2 2 4-4\" stroke=\"#fff\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\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_MASCOT } 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_MASCOT} 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 type { CSSProperties } from 'react';\nimport type { Account } from '../../types';\nimport { useSwypeConfig } from '../../context';\nimport { KNOWN_LOGOS } from '../../assets/logos';\nimport {\n getPreferredDepositWallet,\n getWalletAddress,\n hasActiveDepositWallet,\n} from '../../paymentHelpers';\nimport {\n ScreenLayout,\n ScreenHeader,\n PoweredByFooter,\n PrimaryButton,\n OutlineButton,\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}\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}: DepositScreenProps) {\n const { tokens } = useSwypeConfig();\n const amount = initialAmount;\n\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 const headerTitle = merchantName ? `Deposit to ${merchantName}` : 'Deposit';\n\n if (isLowBalance) {\n return (\n <ScreenLayout\n footer={\n <>\n <PrimaryButton onClick={onSwitchWallet}>Switch wallet</PrimaryButton>\n <p style={switchHintStyle(tokens.textMuted)}>\n Use a different wallet with more balance\n </p>\n <div style={outlineBtnWrapStyle}>\n <OutlineButton onClick={onBack}>Back to deposit options</OutlineButton>\n </div>\n <PoweredByFooter />\n </>\n }\n >\n <ScreenHeader title={headerTitle} onBack={onBack} onLogout={onLogout} />\n\n <div style={lowBalanceAmountDisplayStyle}>\n <span style={lowBalanceAmountStyle}>\n ${amount.toFixed(2)}\n </span>\n </div>\n\n <div style={lowBalanceRowStyle}>\n <div style={lowBalanceLeftStyle}>\n <div style={lowBalanceCoinStyle(tokens.warning)}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"currentColor\" />\n <text x=\"12\" y=\"16\" textAnchor=\"middle\" fontSize=\"12\" fill=\"#fff\" fontWeight=\"700\">$</text>\n </svg>\n </div>\n <div>\n <div style={lowBalanceLabelStyle(tokens.textMuted)}>{selectedSourceLabel ?? 'Available'}</div>\n <div style={{ fontSize: '1rem', fontWeight: 700, color: tokens.warning }}>\n ${availableBalance.toFixed(2)}\n </div>\n </div>\n </div>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z\" fill={tokens.warning} />\n </svg>\n </div>\n\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 </ScreenLayout>\n );\n }\n\n return (\n <ScreenLayout\n footer={\n <>\n {exceedsLimit && onIncreaseLimit ? (\n <>\n <PrimaryButton onClick={onIncreaseLimit} loading={increasingLimit}>\n Increase limit\n </PrimaryButton>\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 ) : (\n <PrimaryButton onClick={() => onDeposit(amount)} disabled={!canDeposit} loading={processing}>\n Confirm\n </PrimaryButton>\n )}\n <PoweredByFooter />\n </>\n }\n >\n <ScreenHeader onBack={onBack} />\n\n {/* Deposit card */}\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: 0, maximumFractionDigits: 2 })}\n </div>\n <button\n type=\"button\"\n onClick={onSelectToken}\n style={tokenIconButtonStyle(!!onSelectToken)}\n >\n <div style={tokenIconWrapStyle}>\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 <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" style={checkBadgeStyle}>\n <circle cx=\"8\" cy=\"8\" r=\"8\" fill=\"#2775CA\" />\n <path d=\"M5 8l2 2 4-4\" stroke=\"#fff\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\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 </div>\n\n {/* Account selector */}\n {accounts && accounts.length > 0 && (\n <div style={accountSectionStyle}>\n <div style={accountSectionLabelStyle(tokens.textMuted)}>Choose account</div>\n <div style={accountListStyle(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 }}\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={onAddProvider}\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\n {remainingLimit != null && (\n <div style={spendingLimitStyle(tokens.textMuted)}>\n Spending Limit{' '}\n <strong style={{ color: tokens.text }}>\n ${remainingLimit.toLocaleString('en-US', { minimumFractionDigits: 0, maximumFractionDigits: 0 })}\n </strong>\n </div>\n )}\n\n {error && <div style={errorBannerStyle(tokens)}>{error}</div>}\n </ScreenLayout>\n );\n}\n\n/* ── Styles ──────────────────────────────────────────────────────── */\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: 20,\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/* ── Account selector styles ─────────────────────────────────────── */\n\nconst accountSectionStyle: CSSProperties = {\n marginBottom: 20,\n};\n\nconst accountSectionLabelStyle = (color: string): CSSProperties => ({\n fontSize: '0.78rem',\n fontWeight: 500,\n color,\n marginBottom: 8,\n});\n\nconst accountListStyle = (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 },\n isSelected: boolean,\n): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n padding: '14px 16px',\n background: '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: { accent: 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.accent,\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\nconst switchHintStyle = (color: string): CSSProperties => ({\n textAlign: 'center',\n fontSize: '0.8rem',\n color,\n margin: '10px 0',\n});\n\nconst outlineBtnWrapStyle: CSSProperties = {\n marginBottom: 8,\n};\n\n/* ── Low-balance styles (kept separate) ──────────────────────────── */\n\nconst lowBalanceAmountDisplayStyle: CSSProperties = {\n textAlign: 'center',\n padding: '20px 0 8px',\n};\n\nconst lowBalanceAmountStyle: CSSProperties = {\n fontSize: '2.5rem',\n fontWeight: 700,\n color: '#ccc',\n letterSpacing: '-0.02em',\n};\n\nconst lowBalanceRowStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: 16,\n};\n\nconst lowBalanceLeftStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 10,\n};\n\nconst lowBalanceCoinStyle = (color: string): CSSProperties => ({\n color,\n display: 'flex',\n alignItems: 'center',\n});\n\nconst lowBalanceLabelStyle = (color: string): CSSProperties => ({\n fontSize: '0.72rem',\n color,\n fontWeight: 500,\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}\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}: 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 ? 'Done' : 'Try again'}\n </PrimaryButton>\n {effectiveAutoClose != null && effectiveAutoClose > 0 && (\n <p style={countdownStyle(tokens.textMuted)}>\n Returning to app in {countdown}s&hellip;\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 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 { 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.accent)}> 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 return (\n <button\n key={token.tokenSymbol}\n type=\"button\"\n onClick={() => onTokenChange(token.tokenSymbol)}\n style={optionButtonStyle(tokens, isSelected)}\n >\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 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 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 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}>&#10003;</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_MASCOT } 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}\n\nexport function TokenPickerScreen({\n account,\n chains,\n onSelectAuthorized,\n onAuthorizeToken,\n onBack,\n onLogout,\n depositAmount,\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 <div style={mascotWrapStyle}>\n <img src={SWYPE_MASCOT} alt=\"Swype\" style={mascotImgStyle} />\n </div>\n\n {depositAmount != null && (\n <div style={depositCardStyle(t)}>\n <div style={depositLabelStyle(t.textMuted)}>Depositing</div>\n <div style={depositAmountRowStyle}>\n <div style={depositAmountStyle(t.text)}>\n ${depositAmount.toLocaleString('en-US', { minimumFractionDigits: 0, maximumFractionDigits: 2 })}\n </div>\n <div style={tokenIconWrapStyle}>\n <svg width=\"32\" height=\"32\" 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 <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\" style={checkBadgeStyle}>\n <circle cx=\"8\" cy=\"8\" r=\"8\" fill=\"#2775CA\" />\n <path d=\"M5 8l2 2 4-4\" stroke=\"#fff\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </div>\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\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)}>\n <span style={tokenIconTextStyle(t.textMuted)}>$</span>\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)}>&middot;</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={authorized ? selectCircleSelectedStyle(t.accent) : selectCircleStyle(t.border)}>\n {authorized && (\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.2rem',\n fontWeight: 700,\n letterSpacing: '-0.02em',\n color,\n});\n\nconst tokenIconWrapStyle: CSSProperties = {\n position: 'relative',\n width: 32,\n height: 32,\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 }): CSSProperties => ({\n width: 36,\n height: 36,\n borderRadius: '50%',\n border: `1.5px solid ${tokens.border}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\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 { Account, PaymentStep, SourceType, Transfer, WalletSource } from './types';\nimport type { NormalizedAuthIdentifier } from './auth';\nimport { maskAuthIdentifier } from './auth';\nimport type { PaymentState } from './paymentReducer';\nimport 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} from './components/screens';\nimport type { TransferPhase } from './components/screens';\nimport { FlowPhaseProvider } from './FlowPhaseContext';\nimport type { FlowPhase } from './components/ui/StepProgress';\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 (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}\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 // 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 : selectedAccount\n ? selectedAccount.wallets.reduce((sum, w) => sum + w.balance.available.amount, 0)\n : selectSourceAvailableBalance > 0\n ? selectSourceAvailableBalance\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 />\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 != null ? depositAmount : 5;\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?.remainingAllowance\n ?? selectedAccount?.remainingAllowance\n ?? 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 />\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 />\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 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?.remainingAllowance\n ?? selectedAccount?.remainingAllowance\n ?? 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={autoCloseSeconds}\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?.remainingAllowance\n ?? selectedAccount?.remainingAllowance\n ?? 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 />\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';\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';\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: correctableSteps.includes(state.step) ? resolved.step : 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 // 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","// ── 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, useMemo, useReducer, useRef } from 'react';\nimport { useLoginWithOAuth, usePrivy } from '@privy-io/react-auth';\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} 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}\n\n// ── Component ──────────────────────────────────────────────────────────\n\nexport function SwypePayment(props: SwypePaymentProps) {\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 <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}: SwypePaymentProps) {\n const { apiBaseUrl, depositAmount } = useSwypeConfig();\n const { ready, authenticated, logout, getAccessToken } = usePrivy();\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 // ── 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 }), [\n auth, passkey, provider, transfer, mobileFlow, sourceSelection, oneTapSetup,\n 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"]}