@swype-org/react-sdk 0.1.10 → 0.1.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +46 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +46 -2
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/theme.ts","../src/context.tsx","../src/api.ts","../node_modules/@wagmi/core/src/version.ts","../node_modules/@wagmi/core/src/utils/getVersion.ts","../node_modules/@wagmi/core/src/errors/base.ts","../node_modules/@wagmi/core/src/errors/config.ts","../node_modules/@wagmi/core/src/actions/getConnectorClient.ts","../node_modules/@wagmi/core/src/actions/getAccount.ts","../node_modules/@wagmi/core/src/actions/getWalletClient.ts","../src/hooks.ts","../src/components/Spinner.tsx","../src/components/ProviderCard.tsx","../src/components/AccountDropdown.tsx","../src/components/AdvancedSettings.tsx","../src/SwypePayment.tsx"],"names":["createConfig","mainnet","arbitrum","base","http","createContext","useRef","QueryClient","useState","useCallback","useMemo","jsx","QueryClientProvider","WagmiProvider","PrivyProvider","useContext","_BaseError_walk","connector","chainId","parseAccount","getAddress","chain","createClient","custom","walletActions","wagmiConfig","usePrivy","useEffect","hexChainId","recoverTypedDataAddress","useConfig","useConnect","useSwitchChain","signTransfer","jsxs","Fragment"],"mappings":"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","file":"index.cjs","sourcesContent":["// ── Swype React SDK Theme Tokens ───────────────────────────────────────\nimport type { ThemeMode } from './types';\n\nexport interface ThemeTokens {\n // Surfaces\n bg: string;\n bgCard: string;\n bgInput: string;\n bgHover: string;\n bgOverlay: string;\n\n // Text\n text: string;\n textSecondary: string;\n textMuted: string;\n textInverse: string;\n\n // Borders\n border: string;\n borderFocus: string;\n\n // Accent\n accent: string;\n accentHover: string;\n accentText: string;\n\n // Semantic\n success: string;\n successBg: string;\n error: string;\n errorBg: string;\n\n // Shadows\n shadow: string;\n shadowLg: string;\n\n // Radius\n radius: string;\n radiusLg: string;\n}\n\nexport const darkTheme: ThemeTokens = {\n bg: '#0a0a0a',\n bgCard: '#141414',\n bgInput: '#1e1e1e',\n bgHover: '#252525',\n bgOverlay: 'rgba(0, 0, 0, 0.6)',\n\n text: '#f5f5f5',\n textSecondary: '#a1a1aa',\n textMuted: '#71717a',\n textInverse: '#09090b',\n\n border: '#27272a',\n borderFocus: '#3b82f6',\n\n accent: '#3b82f6',\n accentHover: '#2563eb',\n accentText: '#ffffff',\n\n success: '#22c55e',\n successBg: '#052e16',\n error: '#ef4444',\n errorBg: '#450a0a',\n\n shadow: '0 1px 3px rgba(0,0,0,0.4)',\n shadowLg: '0 8px 32px rgba(0,0,0,0.5)',\n\n radius: '10px',\n radiusLg: '16px',\n};\n\nexport const lightTheme: ThemeTokens = {\n bg: '#f8fafc',\n bgCard: '#ffffff',\n bgInput: '#f1f5f9',\n bgHover: '#e2e8f0',\n bgOverlay: 'rgba(0, 0, 0, 0.3)',\n\n text: '#0f172a',\n textSecondary: '#475569',\n textMuted: '#94a3b8',\n textInverse: '#ffffff',\n\n border: '#e2e8f0',\n borderFocus: '#3b82f6',\n\n accent: '#3b82f6',\n accentHover: '#2563eb',\n accentText: '#ffffff',\n\n success: '#16a34a',\n successBg: '#f0fdf4',\n error: '#dc2626',\n errorBg: '#fef2f2',\n\n shadow: '0 1px 3px rgba(0,0,0,0.08)',\n shadowLg: '0 8px 32px rgba(0,0,0,0.12)',\n\n radius: '10px',\n radiusLg: '16px',\n};\n\nexport function getTheme(mode: ThemeMode): ThemeTokens {\n return mode === 'dark' ? darkTheme : lightTheme;\n}\n","// ── Swype React SDK Context & Provider ─────────────────────────────────\nimport { createContext, useCallback, useContext, useMemo, useRef, useState } from 'react';\nimport { PrivyProvider } from '@privy-io/react-auth';\nimport { WagmiProvider, createConfig, http } from 'wagmi';\nimport { mainnet, arbitrum, base } from 'wagmi/chains';\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport type { ThemeMode } from './types';\nimport { getTheme, type ThemeTokens } from './theme';\n\n// ── Swype-owned Privy credentials ─────────────────────────────────────\n// These are internal to the SDK. Integrators never need to know about them.\n\n/** Swype's Privy App ID — all SDK users authenticate against this app. */\nconst SWYPE_PRIVY_APP_ID = 'cmlil87uv004n0ck0blwumwek';\n\n/**\n * Session isolation: Because the SDK uses Swype's own `appId` (distinct\n * from any integrator's `appId`), Privy automatically scopes storage\n * per app. If additional scoping within the same `appId` is ever needed,\n * create an App Client in the Privy dashboard and set `clientId` here.\n */\n\n// ── Default wagmi config ──────────────────────────────────────────────\n// Created once at module level so it's shared across all SwypeProvider\n// instances (there should only ever be one, but this is safe either way).\n\nconst wagmiConfig = createConfig({\n chains: [mainnet, arbitrum, base],\n transports: {\n [mainnet.id]: http(),\n [arbitrum.id]: http(),\n [base.id]: http(),\n },\n});\n\n// ── Swype SDK context ─────────────────────────────────────────────────\n\nexport interface SwypeConfig {\n apiBaseUrl: string;\n theme: ThemeMode;\n tokens: ThemeTokens;\n /** Pre-set deposit amount (controlled by host app via useSwypeDepositAmount) */\n depositAmount: number | null;\n /** Update the deposit amount from a host-app component */\n setDepositAmount: (amount: number | null) => void;\n}\n\nconst SwypeContext = createContext<SwypeConfig | null>(null);\n\nexport interface SwypeProviderProps {\n /** Base URL for the Swype API (e.g. \"http://localhost:3000\") */\n apiBaseUrl: string;\n /** Light or dark mode */\n theme?: ThemeMode;\n children: React.ReactNode;\n}\n\n/**\n * Provides Swype SDK configuration and all required infrastructure\n * (Privy auth, wagmi, React Query) to child components.\n *\n * Must wrap any `<SwypePayment>` usage. The integrator does **not** need\n * to set up Privy, wagmi, or React Query — this provider handles it all.\n *\n * @example\n * ```tsx\n * <SwypeProvider apiBaseUrl=\"https://api.swype.com\">\n * <SwypePayment destination={dest} onComplete={handler} />\n * </SwypeProvider>\n * ```\n */\nexport function SwypeProvider({\n apiBaseUrl,\n theme = 'dark',\n children,\n}: SwypeProviderProps) {\n // Stable QueryClient across re-renders (created once per provider mount)\n const queryClientRef = useRef<QueryClient | null>(null);\n if (!queryClientRef.current) {\n queryClientRef.current = new QueryClient();\n }\n\n // Deposit amount state — host apps set this via useSwypeDepositAmount()\n const [depositAmount, setDepositAmountRaw] = useState<number | null>(null);\n\n const setDepositAmount = useCallback((amount: number | null) => {\n setDepositAmountRaw(amount);\n }, []);\n\n const value = useMemo<SwypeConfig>(\n () => ({\n apiBaseUrl,\n theme,\n tokens: getTheme(theme),\n depositAmount,\n setDepositAmount,\n }),\n [apiBaseUrl, theme, depositAmount, setDepositAmount],\n );\n\n return (\n <QueryClientProvider client={queryClientRef.current}>\n <WagmiProvider config={wagmiConfig}>\n <PrivyProvider\n appId={SWYPE_PRIVY_APP_ID}\n config={{\n appearance: {\n theme,\n },\n }}\n >\n <SwypeContext.Provider value={value}>\n {children}\n </SwypeContext.Provider>\n </PrivyProvider>\n </WagmiProvider>\n </QueryClientProvider>\n );\n}\n\n/** Access the Swype SDK configuration. Throws if used outside SwypeProvider. */\nexport function useSwypeConfig(): SwypeConfig {\n const ctx = useContext(SwypeContext);\n if (!ctx) {\n throw new Error('useSwypeConfig must be used within a <SwypeProvider>');\n }\n return ctx;\n}\n\n/** Access Swype SDK configuration when available (returns null outside provider). */\nexport function useOptionalSwypeConfig(): SwypeConfig | null {\n return useContext(SwypeContext);\n}\n\n/**\n * Hook for host apps to pre-set the deposit amount before showing the\n * payment widget. When set, the amount field in SwypePayment is\n * auto-populated.\n *\n * @example\n * ```tsx\n * function ProductPage() {\n * const { setAmount } = useSwypeDepositAmount();\n * useEffect(() => { setAmount(25.00); }, []);\n * return <SwypePayment destination={dest} />;\n * }\n * ```\n */\nexport function useSwypeDepositAmount() {\n const ctx = useContext(SwypeContext);\n if (!ctx) {\n throw new Error(\n 'useSwypeDepositAmount must be used within a <SwypeProvider>',\n );\n }\n return {\n /** Current deposit amount, or null if not set */\n amount: ctx.depositAmount,\n /** Set the deposit amount (pass null to clear) */\n setAmount: ctx.setDepositAmount,\n };\n}\n","// ── Swype React SDK API Client ─────────────────────────────────────────\nimport type {\n Provider,\n Chain,\n Account,\n Transfer,\n AuthorizationSessionDetail,\n ErrorResponse,\n ListResponse,\n SourceType,\n Destination,\n UserConfig,\n} 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\n// ── Transfers ──────────────────────────────────────────────────────────\n\nexport interface CreateTransferParams {\n credentialId: string;\n sourceType: SourceType;\n sourceId: string;\n destination: Destination;\n amount: number;\n currency?: string;\n}\n\nexport async function createTransfer(\n apiBaseUrl: string,\n token: string,\n params: CreateTransferParams,\n): Promise<Transfer> {\n const body = {\n id: crypto.randomUUID(),\n credentialId: params.credentialId,\n sources: [{ [params.sourceType]: params.sourceId }],\n destinations: [\n {\n chainId: params.destination.chainId,\n token: { symbol: params.destination.token.symbol },\n address: params.destination.address,\n },\n ],\n amount: {\n amount: params.amount,\n currency: params.currency ?? 'USD',\n },\n };\n\n const res = await fetch(`${apiBaseUrl}/v1/transfers`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify(body),\n });\n\n if (!res.ok) await throwApiError(res);\n return (await res.json()) as Transfer;\n}\n\nexport async function fetchTransfer(\n apiBaseUrl: string,\n token: string,\n transferId: string,\n 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// ── 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 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 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';\nexport { useSwypeConfig } from './context';\n\n// ── Constants ──────────────────────────────────────────────────────────\n\nconst WALLET_CLIENT_MAX_ATTEMPTS = 15;\nconst WALLET_CLIENT_POLL_MS = 200;\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\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\nfunction resolvePasskeyRpId(): string {\n // Mirrors infra's root domain variable (`domain`), provided to frontends as VITE_DOMAIN.\n const configuredDomain = readEnvValue('VITE_DOMAIN') ?? readEnvValue('SWYPE_DOMAIN');\n if (configuredDomain) {\n return configuredDomain\n .replace(/^https?:\\/\\//, '')\n .replace(/\\/.*$/, '')\n .replace(/^\\./, '')\n .trim();\n }\n\n if (typeof window !== 'undefined') {\n return window.location.hostname;\n }\n\n return 'localhost';\n}\n\nasync function waitForWalletClient(\n wagmiConfig: WagmiConfig,\n params: Parameters<typeof getWalletClient>[1] = {},\n) {\n for (let i = 0; i < WALLET_CLIENT_MAX_ATTEMPTS; i++) {\n try {\n return await getWalletClient(wagmiConfig, params);\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 userIdentifier - A string used to identify the user in the\n * WebAuthn ceremony (e.g. wallet address or Privy user ID).\n * @returns The base64-encoded credentialId and publicKey.\n */\nexport async function createPasskeyCredential(\n userIdentifier: string,\n): Promise<{ credentialId: string; publicKey: string }> {\n const challenge = new Uint8Array(32);\n crypto.getRandomValues(challenge);\n const rpId = resolvePasskeyRpId();\n\n const credential = await navigator.credentials.create({\n publicKey: {\n challenge,\n rp: { name: 'Swype', id: rpId },\n user: {\n id: new TextEncoder().encode(userIdentifier),\n name: userIdentifier,\n displayName: 'Swype User',\n },\n pubKeyCredParams: [\n { alg: -7, type: 'public-key' }, // ES256 (P-256)\n { alg: -257, type: 'public-key' }, // RS256\n ],\n authenticatorSelection: {\n authenticatorAttachment: 'platform',\n residentKey: 'preferred',\n userVerification: 'required',\n },\n timeout: 60000,\n },\n }) as PublicKeyCredential | null;\n\n if (!credential) {\n throw new Error('Passkey creation was cancelled.');\n }\n\n const response = credential.response as AuthenticatorAttestationResponse;\n const publicKeyBytes = response.getPublicKey?.();\n\n return {\n credentialId: toBase64(credential.rawId),\n publicKey: publicKeyBytes ? toBase64(publicKeyBytes) : '',\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 try {\n const token = await getAccessToken();\n if (!token) {\n setError('Could not get access token');\n stopPolling();\n return;\n }\n const t = await api.fetchTransfer(apiBaseUrl, token, transferIdRef.current);\n setTransfer(t);\n\n if (t.status === 'COMPLETED' || t.status === 'FAILED') {\n stopPolling();\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Polling error');\n stopPolling();\n }\n }, [apiBaseUrl, getAccessToken, stopPolling]);\n\n const startPolling = useCallback(\n (transferId: string) => {\n stopPolling();\n transferIdRef.current = transferId;\n setIsPolling(true);\n setError(null);\n 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\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 signature = 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 // Verify the recovered signer matches expectations\n const recoverInput = {\n domain: parsed.domain,\n types: parsed.types,\n primaryType: parsed.primaryType,\n message: parsed.message,\n signature: signature as `0x${string}`,\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 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 /** Execute authorization by session id. */\n executeSessionById: (sessionId: string) => Promise<void>;\n executeSession: (transfer: Transfer) => 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 deployment\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 // ── 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 'SIGN_PERMIT2':\n return executeSignPermit2(action, wagmiConfig, apiBaseUrl ?? '', sessionIdRef.current);\n default:\n return actionError(action, `Unsupported action type: ${action.type}`);\n }\n },\n [wagmiConfig, connectors, connectAsync, switchChainAsync, apiBaseUrl, waitForSelection],\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 const executeSession = useCallback(\n async (transfer: Transfer) => {\n if (!transfer.authorizationSessions?.length) {\n throw new Error('No authorization sessions available.');\n }\n await executeSessionById(transfer.authorizationSessions[0].id);\n },\n [executeSessionById],\n );\n\n return {\n executing,\n results,\n error,\n currentAction,\n pendingSelectSource,\n resolveSelectSource,\n executeSessionById,\n executeSession,\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 const allowCredentials = payload.passkeyCredentialId\n ? [{\n type: 'public-key' as const,\n id: base64ToBytes(payload.passkeyCredentialId),\n }]\n : undefined;\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 const 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","// ── Animated Spinner ───────────────────────────────────────────────────\nimport { useSwypeConfig } from '../context';\n\ninterface SpinnerProps {\n size?: number;\n label?: string;\n}\n\nexport function Spinner({ size = 40, label }: SpinnerProps) {\n const { tokens } = useSwypeConfig();\n\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '12px',\n }}\n >\n <div\n style={{\n width: size,\n height: size,\n border: `3px solid ${tokens.border}`,\n borderTopColor: tokens.accent,\n borderRadius: '50%',\n animation: 'swype-spin 0.8s linear infinite',\n }}\n />\n {label && (\n <p style={{ color: tokens.textSecondary, fontSize: '0.875rem', margin: 0 }}>\n {label}\n </p>\n )}\n <style>{`\n @keyframes swype-spin {\n to { transform: rotate(360deg); }\n }\n `}</style>\n </div>\n );\n}\n","// ── Provider Selection Card ────────────────────────────────────────────\nimport { useState } from 'react';\nimport type { Provider } from '../types';\nimport { useSwypeConfig } from '../context';\n\ninterface ProviderCardProps {\n provider: Provider;\n selected: boolean;\n onClick: () => void;\n}\n\nexport function ProviderCard({ provider, selected, onClick }: ProviderCardProps) {\n const { tokens } = useSwypeConfig();\n const [hovered, setHovered] = useState(false);\n\n return (\n <button\n onClick={onClick}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n width: '100%',\n padding: '14px 16px',\n background: selected\n ? tokens.accent + '18'\n : hovered\n ? tokens.bgHover\n : tokens.bgInput,\n border: `1.5px solid ${selected ? tokens.accent : tokens.border}`,\n borderRadius: tokens.radius,\n cursor: 'pointer',\n transition: 'all 0.15s ease',\n color: tokens.text,\n fontFamily: 'inherit',\n fontSize: '0.95rem',\n fontWeight: 500,\n textAlign: 'left',\n outline: 'none',\n }}\n >\n {provider.logoURI ? (\n <img\n src={provider.logoURI}\n alt={provider.name}\n style={{\n width: 32,\n height: 32,\n borderRadius: '8px',\n objectFit: 'contain',\n }}\n />\n ) : (\n <div\n style={{\n width: 32,\n height: 32,\n borderRadius: '8px',\n background: tokens.accent + '30',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '0.875rem',\n fontWeight: 700,\n color: tokens.accent,\n flexShrink: 0,\n }}\n >\n {provider.name.charAt(0).toUpperCase()}\n </div>\n )}\n <span>{provider.name}</span>\n {selected && (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n style={{ marginLeft: 'auto', flexShrink: 0 }}\n >\n <path\n d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\"\n fill={tokens.accent}\n />\n </svg>\n )}\n </button>\n );\n}\n","// ── Account & Wallet Dropdown ────────────────────────────────────────\n// Inline selector for switching between user accounts and wallets.\n// Shows the currently selected account name (and wallet chain) with a\n// small chevron. Expands to a dropdown with nested wallet rows on click.\n\nimport { useRef, useState, useEffect } from 'react';\nimport type { Account, Wallet } from '../types';\nimport { useSwypeConfig } from '../context';\n\ninterface AccountDropdownProps {\n accounts: Account[];\n selectedAccountId: string | null;\n onSelect: (accountId: string) => void;\n /** Currently selected wallet ID (for wallet-level selection). */\n selectedWalletId?: string | null;\n /** Called when a specific wallet is selected. Sets both account + wallet. */\n onWalletSelect?: (accountId: string, walletId: string) => void;\n}\n\nexport function AccountDropdown({\n accounts,\n selectedAccountId,\n onSelect,\n selectedWalletId,\n onWalletSelect,\n}: AccountDropdownProps) {\n const { tokens } = useSwypeConfig();\n const [open, setOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const selected = accounts.find((a) => a.id === selectedAccountId);\n\n // Resolve the currently selected wallet for display\n const selectedWallet: Wallet | undefined = selected?.wallets.find(\n (w) => w.id === selectedWalletId,\n );\n\n // Close on outside click\n useEffect(() => {\n if (!open) return;\n const handleClick = (e: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(e.target as Node)\n ) {\n setOpen(false);\n }\n };\n document.addEventListener('mousedown', handleClick);\n return () => document.removeEventListener('mousedown', handleClick);\n }, [open]);\n\n if (accounts.length === 0) return null;\n\n // Determine whether the dropdown has anything useful to show.\n // Show a static label only when there's a single account with 0-1 wallets\n // (nothing to choose from). Otherwise render the full dropdown so the\n // user can pick an account or wallet.\n const hasMultipleChoices =\n accounts.length > 1 ||\n (accounts.length === 1 &&\n onWalletSelect &&\n accounts[0].wallets.filter((w) => w.balance.available.amount > 0).length > 1);\n\n if (!hasMultipleChoices) {\n return (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n fontSize: '0.85rem',\n color: tokens.textSecondary,\n }}\n >\n <span style={{ fontWeight: 500 }}>{accounts[0].name}</span>\n {(selectedWallet ?? accounts[0].wallets[0]) && (\n <span\n style={{\n fontSize: '0.75rem',\n color: tokens.textMuted,\n fontFamily: '\"SF Mono\", \"Fira Code\", monospace',\n }}\n >\n {selectedWallet\n ? `${selectedWallet.chain.name} · ${selectedWallet.name}`\n : accounts[0].wallets[0]?.name}\n </span>\n )}\n </div>\n );\n }\n\n // Aggregate balance display\n const getAccountBalance = (account: Account): string => {\n let total = 0;\n for (const w of account.wallets) {\n total += w.balance.available.amount;\n }\n return total > 0 ? `$${total.toFixed(2)}` : '';\n };\n\n const hasActiveWallet = (account: Account): boolean =>\n account.wallets.some((w) => w.status === 'ACTIVE');\n\n return (\n <div ref={containerRef} style={{ position: 'relative' }}>\n {/* Trigger */}\n <button\n onClick={() => setOpen(!open)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n background: 'transparent',\n border: 'none',\n cursor: 'pointer',\n padding: '4px 0',\n color: tokens.textSecondary,\n fontFamily: 'inherit',\n fontSize: '0.85rem',\n outline: 'none',\n }}\n >\n <span style={{ fontWeight: 500, color: tokens.text }}>\n {selected?.name ?? 'Select account'}\n </span>\n {(selectedWallet ?? selected?.wallets?.[0]) && (\n <span\n style={{\n fontSize: '0.75rem',\n color: tokens.textMuted,\n fontFamily: '\"SF Mono\", \"Fira Code\", monospace',\n }}\n >\n {selectedWallet\n ? `${selectedWallet.chain.name} · ${selectedWallet.name}`\n : selected!.wallets[0].name}\n </span>\n )}\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n style={{\n transform: open ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 0.15s ease',\n flexShrink: 0,\n }}\n >\n <path\n d=\"M7 10l5 5 5-5\"\n stroke={tokens.textMuted}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n\n {/* Dropdown */}\n {open && (\n <div\n style={{\n position: 'absolute',\n top: '100%',\n left: 0,\n right: 0,\n marginTop: '4px',\n background: tokens.bgCard,\n border: `1px solid ${tokens.border}`,\n borderRadius: tokens.radius,\n boxShadow: tokens.shadowLg,\n zIndex: 50,\n overflow: 'hidden',\n minWidth: '220px',\n }}\n >\n {accounts.map((account) => {\n const isAcctSelected = account.id === selectedAccountId;\n const balance = getAccountBalance(account);\n const active = hasActiveWallet(account);\n const walletsWithBalance = account.wallets.filter(\n (w) => w.balance.available.amount > 0,\n );\n const showWallets =\n onWalletSelect && walletsWithBalance.length > 0;\n\n return (\n <div key={account.id}>\n {/* Account header row */}\n <button\n onClick={() => {\n onSelect(account.id);\n if (!showWallets) setOpen(false);\n }}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n padding: '10px 14px',\n background:\n isAcctSelected && !selectedWalletId\n ? tokens.accent + '12'\n : 'transparent',\n border: 'none',\n borderBottom: showWallets\n ? 'none'\n : `1px solid ${tokens.border}`,\n cursor: 'pointer',\n color: tokens.text,\n fontFamily: 'inherit',\n fontSize: '0.85rem',\n textAlign: 'left',\n outline: 'none',\n transition: 'background 0.1s ease',\n }}\n >\n <div style={{ minWidth: 0, flex: 1 }}>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n }}\n >\n <span style={{ fontWeight: 500 }}>\n {account.name}\n </span>\n {active && (\n <span\n style={{\n fontSize: '0.6rem',\n fontWeight: 600,\n color: tokens.success,\n background: tokens.successBg,\n padding: '1px 5px',\n borderRadius: '3px',\n textTransform: 'uppercase',\n letterSpacing: '0.03em',\n }}\n >\n Active\n </span>\n )}\n </div>\n {balance && (\n <div\n style={{\n fontSize: '0.75rem',\n color: tokens.textMuted,\n marginTop: '2px',\n }}\n >\n {balance}\n </div>\n )}\n </div>\n\n {isAcctSelected && !selectedWalletId && (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n style={{ flexShrink: 0, marginLeft: '8px' }}\n >\n <path\n d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\"\n fill={tokens.accent}\n />\n </svg>\n )}\n </button>\n\n {/* Nested wallet rows */}\n {showWallets &&\n walletsWithBalance.map((wallet, wIdx) => {\n const isWalletSelected =\n isAcctSelected && wallet.id === selectedWalletId;\n const walletBal =\n wallet.balance.available.amount > 0\n ? `$${wallet.balance.available.amount.toFixed(2)}`\n : '';\n const isLastWallet =\n wIdx === walletsWithBalance.length - 1;\n\n return (\n <button\n key={wallet.id}\n onClick={() => {\n onWalletSelect(account.id, wallet.id);\n setOpen(false);\n }}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n padding: '8px 14px 8px 28px',\n background: isWalletSelected\n ? tokens.accent + '12'\n : 'transparent',\n border: 'none',\n borderBottom: isLastWallet\n ? `1px solid ${tokens.border}`\n : 'none',\n cursor: 'pointer',\n color: tokens.text,\n fontFamily: 'inherit',\n fontSize: '0.8rem',\n textAlign: 'left',\n outline: 'none',\n transition: 'background 0.1s ease',\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n minWidth: 0,\n flex: 1,\n }}\n >\n <span\n style={{\n fontWeight: 500,\n fontSize: '0.8rem',\n }}\n >\n {wallet.chain.name}\n </span>\n <span\n style={{\n fontSize: '0.7rem',\n color: tokens.textMuted,\n fontFamily:\n '\"SF Mono\", \"Fira Code\", monospace',\n }}\n >\n {wallet.name}\n </span>\n {walletBal && (\n <span\n style={{\n fontSize: '0.7rem',\n color: tokens.textMuted,\n marginLeft: 'auto',\n }}\n >\n {walletBal}\n </span>\n )}\n </div>\n\n {isWalletSelected && (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n style={{\n flexShrink: 0,\n marginLeft: '8px',\n }}\n >\n <path\n d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\"\n fill={tokens.accent}\n />\n </svg>\n )}\n </button>\n );\n })}\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n","// ── Advanced Settings Panel ───────────────────────────────────────────\n// Collapsible panel that lets power users choose asset, chain, or\n// connect a new account. Hidden in basic mode.\n\nimport { useState } from 'react';\nimport type { AdvancedSettings as AdvancedSettingsType, Chain, Provider } from '../types';\nimport { useSwypeConfig } from '../context';\nimport { ProviderCard } from './ProviderCard';\n\n/** Supported stablecoin assets */\nconst ASSETS = ['USDC', 'USDT'] as const;\n\ninterface AdvancedSettingsProps {\n settings: AdvancedSettingsType;\n onChange: (settings: AdvancedSettingsType) => void;\n chains: Chain[];\n providers: Provider[];\n /** When the user picks a provider to connect a new account */\n onConnectNewAccount: (providerId: string) => void;\n /** Whether the \"connect new account\" flow is active */\n connectingNewAccount: boolean;\n}\n\nexport function AdvancedSettings({\n settings,\n onChange,\n chains,\n providers,\n onConnectNewAccount,\n connectingNewAccount,\n}: AdvancedSettingsProps) {\n const { tokens } = useSwypeConfig();\n const [open, setOpen] = useState(false);\n const [showProviders, setShowProviders] = useState(false);\n\n return (\n <div style={{ marginTop: '12px' }}>\n {/* Toggle */}\n <button\n onClick={() => setOpen(!open)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n background: 'transparent',\n border: 'none',\n cursor: 'pointer',\n padding: '4px 0',\n color: tokens.textMuted,\n fontFamily: 'inherit',\n fontSize: '0.8rem',\n fontWeight: 500,\n outline: 'none',\n letterSpacing: '0.02em',\n }}\n >\n <svg\n width=\"10\"\n height=\"10\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n style={{\n transform: open ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 0.15s ease',\n }}\n >\n <path\n d=\"M7 10l5 5 5-5\"\n stroke={tokens.textMuted}\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n Advanced options\n </button>\n\n {/* Panel */}\n {open && (\n <div\n style={{\n marginTop: '10px',\n padding: '14px',\n background: tokens.bgInput,\n borderRadius: tokens.radius,\n border: `1px solid ${tokens.border}`,\n }}\n >\n {/* Asset chips */}\n <div style={{ marginBottom: '14px' }}>\n <label\n style={{\n display: 'block',\n fontSize: '0.7rem',\n fontWeight: 600,\n color: tokens.textMuted,\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n marginBottom: '6px',\n }}\n >\n Asset\n </label>\n <div style={{ display: 'flex', gap: '6px' }}>\n {ASSETS.map((asset) => {\n const isSelected = settings.asset === asset;\n return (\n <button\n key={asset}\n onClick={() =>\n onChange({\n ...settings,\n asset: isSelected ? null : asset,\n })\n }\n style={{\n padding: '6px 14px',\n fontSize: '0.8rem',\n fontWeight: 600,\n fontFamily: 'inherit',\n borderRadius: '6px',\n border: `1.5px solid ${isSelected ? tokens.accent : tokens.border}`,\n background: isSelected\n ? tokens.accent + '18'\n : 'transparent',\n color: isSelected ? tokens.accent : tokens.text,\n cursor: 'pointer',\n outline: 'none',\n transition: 'all 0.12s ease',\n }}\n >\n {asset}\n </button>\n );\n })}\n </div>\n </div>\n\n {/* Chain chips */}\n {chains.length > 0 && (\n <div style={{ marginBottom: '14px' }}>\n <label\n style={{\n display: 'block',\n fontSize: '0.7rem',\n fontWeight: 600,\n color: tokens.textMuted,\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n marginBottom: '6px',\n }}\n >\n Chain\n </label>\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: '6px' }}>\n {chains.map((chain) => {\n const isSelected = settings.chain === chain.name;\n return (\n <button\n key={chain.id}\n onClick={() =>\n onChange({\n ...settings,\n chain: isSelected ? null : chain.name,\n })\n }\n style={{\n padding: '6px 14px',\n fontSize: '0.8rem',\n fontWeight: 600,\n fontFamily: 'inherit',\n borderRadius: '6px',\n border: `1.5px solid ${isSelected ? tokens.accent : tokens.border}`,\n background: isSelected\n ? tokens.accent + '18'\n : 'transparent',\n color: isSelected ? tokens.accent : tokens.text,\n cursor: 'pointer',\n outline: 'none',\n transition: 'all 0.12s ease',\n }}\n >\n {chain.name}\n </button>\n );\n })}\n </div>\n </div>\n )}\n\n {/* Connect new account */}\n <div>\n {!showProviders ? (\n <button\n onClick={() => setShowProviders(true)}\n disabled={connectingNewAccount}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n background: 'transparent',\n border: `1px dashed ${tokens.border}`,\n borderRadius: tokens.radius,\n padding: '10px 14px',\n width: '100%',\n cursor: connectingNewAccount ? 'not-allowed' : 'pointer',\n color: tokens.textSecondary,\n fontFamily: 'inherit',\n fontSize: '0.825rem',\n fontWeight: 500,\n outline: 'none',\n opacity: connectingNewAccount ? 0.5 : 1,\n transition: 'opacity 0.1s ease',\n }}\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <path\n d=\"M12 5v14M5 12h14\"\n stroke={tokens.textMuted}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n Connect new account\n </button>\n ) : (\n <div>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: '8px',\n }}\n >\n <label\n style={{\n fontSize: '0.7rem',\n fontWeight: 600,\n color: tokens.textMuted,\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n }}\n >\n Select provider\n </label>\n <button\n onClick={() => setShowProviders(false)}\n style={{\n background: 'transparent',\n border: 'none',\n cursor: 'pointer',\n color: tokens.textMuted,\n fontSize: '0.75rem',\n fontFamily: 'inherit',\n outline: 'none',\n padding: '2px 4px',\n }}\n >\n Cancel\n </button>\n </div>\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '6px',\n }}\n >\n {providers.map((p) => (\n <ProviderCard\n key={p.id}\n provider={p}\n selected={false}\n onClick={() => {\n onConnectNewAccount(p.id);\n setShowProviders(false);\n }}\n />\n ))}\n </div>\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n","// ── Swype Payment Widget ───────────────────────────────────────────────\n//\n// New flow: Login -> Enter Amount -> Ready (auto-select account) -> Processing -> Complete\n//\n// Basic mode: Apple Pay-style one-click pay. The backend returns accounts\n// sorted by ACTIVE status and balance, so the SDK just picks the first one.\n//\n// Advanced mode: lets power users choose asset, chain, or connect a new account.\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { usePrivy } from '@privy-io/react-auth';\n\nimport type {\n Account,\n AdvancedSettings as AdvancedSettingsType,\n Chain,\n Destination,\n PaymentStep,\n Provider,\n SourceOption,\n SourceType,\n Transfer,\n Wallet,\n} from './types';\nimport * as api from './api';\nimport { useSwypeConfig } from './context';\nimport { useAuthorizationExecutor, useTransferPolling, useTransferSigning, createPasskeyCredential } from './hooks';\nimport { Spinner } from './components/Spinner';\nimport { ProviderCard } from './components/ProviderCard';\nimport { AccountDropdown } from './components/AccountDropdown';\nimport { AdvancedSettings } from './components/AdvancedSettings';\n\nconst ACTIVE_CREDENTIAL_STORAGE_KEY = 'swype_active_credential_id';\n\n// ── Mobile detection ────────────────────────────────────────────────────\n\nfunction isMobile(): boolean {\n if (typeof navigator === 'undefined') return false;\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator.userAgent,\n );\n}\n\n// ── Smart default selection ──────────────────────────────────────────\n\n/**\n * Computes the best default account + wallet for the authorization flow.\n *\n * Priority 1: An ACTIVE wallet with a smart account type set (smart\n * account already created) whose balance covers the transfer amount.\n *\n * Priority 2: The wallet with the highest individual balance (across all\n * accounts), and its parent account.\n *\n * Returns { accountId, walletId } or null if no accounts exist.\n */\nfunction computeSmartDefaults(\n accts: Account[],\n transferAmount: number,\n): { accountId: string; walletId: string | null } | null {\n if (accts.length === 0) return null;\n\n // Priority 1: Previously authorized wallet with smart account\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 // Priority 2: Highest individual wallet balance, preferring ACTIVE wallets\n // as a tiebreaker so we don't accidentally pick a REQUIRES_AUTHORIZATION\n // wallet when balances are equal (e.g. all zero).\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\ninterface SelectSourceTokenChoice {\n tokenSymbol: string;\n balance: number;\n}\n\ninterface SelectSourceChainChoice {\n chainName: string;\n balance: number;\n tokens: SelectSourceTokenChoice[];\n}\n\nfunction 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\nfunction 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 = option.chainName;\n const tokenSymbol = option.tokenSymbol;\n const balance = parseRawBalance(option.rawBalance, option.decimals);\n\n let chainChoice: SelectSourceChainChoice;\n const existingChainIdx = chainIndexByName.get(chainName);\n\n if (existingChainIdx === undefined) {\n chainChoice = { chainName, balance: 0, tokens: [] };\n chainIndexByName.set(chainName, chainChoices.length);\n chainChoices.push(chainChoice);\n } else {\n chainChoice = chainChoices[existingChainIdx];\n }\n\n chainChoice.balance += balance;\n\n const existingToken = chainChoice.tokens.find((token) => token.tokenSymbol === tokenSymbol);\n if (existingToken) {\n existingToken.balance += balance;\n } else {\n chainChoice.tokens.push({ tokenSymbol, balance });\n }\n }\n\n return chainChoices;\n}\n\n// ── Props ──────────────────────────────────────────────────────────────\n\nexport interface SwypePaymentProps {\n /**\n * Where the funds go -- controlled by the host app (merchant).\n *\n * The merchant sets this prop and can update it at any time; the SDK\n * reads it reactively whenever a transfer is created.\n */\n destination: Destination;\n /** Called when the transfer reaches COMPLETED status */\n onComplete?: (transfer: Transfer) => void;\n /** Called on unrecoverable error */\n onError?: (error: string) => void;\n /**\n * Whether to use in-browser wallet connectors (wagmi) for authorization.\n *\n * - `true` — always use in-browser wallet connectors (desktop flow).\n * - `false` — always use deeplink redirects (webview / mobile flow).\n * - `undefined` (default) — auto-detect via user-agent (`isMobile()`).\n *\n * Set to `false` when rendering inside a WebView where browser-based\n * wallet extensions are unavailable.\n */\n useWalletConnector?: boolean;\n}\n\n// ── Component ──────────────────────────────────────────────────────────\n\nexport function SwypePayment({\n destination,\n onComplete,\n onError,\n useWalletConnector,\n}: SwypePaymentProps) {\n const { apiBaseUrl, tokens, depositAmount } = useSwypeConfig();\n const { ready, authenticated, login, getAccessToken } = usePrivy();\n\n // Flow state\n const [step, setStep] = useState<PaymentStep>('login');\n const [error, setError] = useState<string | null>(null);\n\n // Data\n const [providers, setProviders] = useState<Provider[]>([]);\n const [accounts, setAccounts] = useState<Account[]>([]);\n const [chains, setChains] = useState<Chain[]>([]);\n const [loadingData, setLoadingData] = useState(false);\n\n // Source selection\n const [selectedAccountId, setSelectedAccountId] = useState<string | null>(null);\n // Optional wallet-level selection within the selected account (for auth flow)\n const [selectedWalletId, setSelectedWalletId] = useState<string | null>(null);\n // When the user picks a provider to connect a new account\n const [selectedProviderId, setSelectedProviderId] = useState<string | null>(null);\n const [connectingNewAccount, setConnectingNewAccount] = useState(false);\n\n // Amount -- pre-populated from hook if available\n const [amount, setAmount] = useState<string>(\n depositAmount != null ? depositAmount.toString() : '',\n );\n\n // Advanced settings\n const [advancedSettings, setAdvancedSettings] = useState<AdvancedSettingsType>({\n asset: null,\n chain: null,\n });\n\n // Transfer\n const [transfer, setTransfer] = useState<Transfer | null>(null);\n const [creatingTransfer, setCreatingTransfer] = useState(false);\n\n // Passkey registration\n const [registeringPasskey, setRegisteringPasskey] = useState(false);\n const [activeCredentialId, setActiveCredentialId] = useState<string | null>(() => {\n if (typeof window === 'undefined') return null;\n return window.localStorage.getItem(ACTIVE_CREDENTIAL_STORAGE_KEY);\n });\n\n // Mobile flow\n const [mobileFlow, setMobileFlow] = useState(false);\n const pollingTransferIdRef = useRef<string | null>(null);\n const [selectSourceChainName, setSelectSourceChainName] = useState<string>('');\n const [selectSourceTokenSymbol, setSelectSourceTokenSymbol] = useState<string>('');\n const initializedSelectSourceActionRef = useRef<string | null>(null);\n\n // Hooks\n const authExecutor = useAuthorizationExecutor();\n const polling = useTransferPolling();\n const transferSigning = useTransferSigning();\n\n // Determine effective source type + id.\n // When a specific wallet is selected (wallet-level selection), use walletId\n // so the backend scopes authorization to that chain. Otherwise fall back\n // to accountId or providerId.\n const sourceType: SourceType = connectingNewAccount\n ? 'providerId'\n : selectedWalletId\n ? 'walletId'\n : selectedAccountId\n ? 'accountId'\n : 'providerId';\n const sourceId = connectingNewAccount\n ? (selectedProviderId ?? '')\n : selectedWalletId\n ? selectedWalletId\n : selectedAccountId\n ? selectedAccountId\n : (selectedProviderId ?? '');\n\n // ── Sync depositAmount from hook into local state ──────────────\n useEffect(() => {\n if (depositAmount != null) {\n setAmount(depositAmount.toString());\n }\n }, [depositAmount]);\n\n // ── Step transitions based on auth state ─────────────────────────\n\n useEffect(() => {\n if (!ready || !authenticated || step !== 'login') return;\n\n let cancelled = false;\n\n const checkPasskey = async () => {\n try {\n const token = await getAccessToken();\n if (!token || cancelled) return;\n\n const { config } = await api.fetchUserConfig(apiBaseUrl, token);\n\n if (cancelled) return;\n\n if (!config.passkey || !activeCredentialId) {\n // User has no passkey — prompt them to register one\n setStep('register-passkey');\n } else if (depositAmount != null && depositAmount > 0) {\n setStep('ready');\n } else {\n setStep('enter-amount');\n }\n } catch {\n // If config fetch fails, proceed to the normal flow so the user\n // isn't blocked. Passkey absence will be caught during transfer signing.\n if (!cancelled) {\n if (depositAmount != null && depositAmount > 0) {\n setStep('ready');\n } else {\n setStep('enter-amount');\n }\n }\n }\n };\n\n checkPasskey();\n return () => { cancelled = true; };\n }, [ready, authenticated, step, depositAmount, apiBaseUrl, getAccessToken, activeCredentialId]);\n\n // ── Load providers + accounts + chains as soon as authenticated ───\n // Fetching early (not gated on step) means balance data is available\n // on the enter-amount screen so the user can see how much they have.\n //\n // We use a ref to guard against concurrent fetches. Including\n // `loadingData` in the dependency array would cause the cleanup to\n // cancel the in-flight request when `setLoadingData(true)` triggers\n // a re-render.\n\n const loadingDataRef = useRef(false);\n\n useEffect(() => {\n if (!authenticated) return;\n if (accounts.length > 0 || loadingDataRef.current) return;\n\n let cancelled = false;\n loadingDataRef.current = true;\n\n const load = async () => {\n setLoadingData(true);\n setError(null);\n try {\n if (!activeCredentialId) {\n setStep('register-passkey');\n return;\n }\n const token = await getAccessToken();\n if (!token) throw new Error('Not authenticated');\n const [prov, accts, chn] = await Promise.all([\n api.fetchProviders(apiBaseUrl, token),\n api.fetchAccounts(apiBaseUrl, token, activeCredentialId),\n api.fetchChains(apiBaseUrl, token),\n ]);\n if (cancelled) return;\n setProviders(prov);\n setAccounts(accts);\n setChains(chn);\n\n // Smart-default: pick the best account + wallet based on\n // previous authorizations and balance.\n const parsedAmt = depositAmount != null ? depositAmount : 0;\n const defaults = computeSmartDefaults(accts, parsedAmt);\n if (defaults) {\n setSelectedAccountId(defaults.accountId);\n setSelectedWalletId(defaults.walletId);\n } else if (prov.length > 0) {\n // No accounts yet -- user needs to connect via a provider\n setSelectedProviderId(prov[0].id);\n }\n } catch (err) {\n if (!cancelled) {\n const msg =\n err instanceof Error ? err.message : 'Failed to load data';\n setError(msg);\n }\n } finally {\n if (!cancelled) {\n setLoadingData(false);\n loadingDataRef.current = false;\n }\n }\n };\n load();\n return () => {\n cancelled = true;\n loadingDataRef.current = false;\n };\n }, [authenticated, accounts.length, apiBaseUrl, getAccessToken, activeCredentialId]);\n\n // ── Poll completion handler ──────────────────────────────────────\n\n useEffect(() => {\n if (!polling.transfer) return;\n if (polling.transfer.status === 'COMPLETED') {\n setStep('complete');\n setTransfer(polling.transfer);\n onComplete?.(polling.transfer);\n } else if (polling.transfer.status === 'FAILED') {\n setStep('complete');\n setTransfer(polling.transfer);\n setError('Transfer failed.');\n }\n }, [polling.transfer, onComplete]);\n\n // ── Resume polling when user returns from wallet app (mobile) ────\n\n useEffect(() => {\n if (!mobileFlow || !polling.isPolling) return;\n\n const handleVisibility = () => {\n if (document.visibilityState === 'visible') {\n if (pollingTransferIdRef.current) {\n polling.startPolling(pollingTransferIdRef.current);\n }\n }\n };\n\n document.addEventListener('visibilitychange', handleVisibility);\n return () => {\n document.removeEventListener('visibilitychange', handleVisibility);\n };\n }, [mobileFlow, polling]);\n\n 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 useEffect(() => {\n if (!pendingSelectSourceAction) {\n initializedSelectSourceActionRef.current = null;\n setSelectSourceChainName('');\n setSelectSourceTokenSymbol('');\n return;\n }\n\n if (initializedSelectSourceActionRef.current === pendingSelectSourceAction.id) {\n return;\n }\n\n const hasRecommendedOption =\n !!selectSourceRecommended &&\n selectSourceChoices.some(\n (chain) =>\n chain.chainName === selectSourceRecommended.chainName &&\n chain.tokens.some(\n (token) => token.tokenSymbol === selectSourceRecommended.tokenSymbol,\n ),\n );\n\n if (hasRecommendedOption && 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\n // ── Create transfer + execute auth + start polling ───────────────\n\n const handlePay = useCallback(async () => {\n const parsedAmount = parseFloat(amount);\n if (isNaN(parsedAmount) || parsedAmount <= 0) {\n setError('Enter a valid amount.');\n return;\n }\n if (!sourceId) {\n setError('No account or provider selected.');\n return;\n }\n if (!activeCredentialId) {\n setError('Create a passkey on this device before continuing.');\n setStep('register-passkey');\n return;\n }\n\n setStep('processing');\n setError(null);\n setCreatingTransfer(true);\n setMobileFlow(false);\n\n try {\n const token = await getAccessToken();\n if (!token) throw new Error('Not authenticated');\n\n let effectiveSourceType = sourceType;\n let effectiveSourceId = sourceId;\n\n if (effectiveSourceType === 'accountId') {\n const acct = accounts.find((a) => a.id === effectiveSourceId);\n const activeWallet = acct?.wallets.find((w) => w.status === 'ACTIVE');\n if (activeWallet) {\n effectiveSourceType = 'walletId';\n effectiveSourceId = activeWallet.id;\n }\n }\n\n // Prefer an ACTIVE wallet with sufficient funds to avoid\n // unnecessary authorization redirects (e.g. deeplink to MetaMask).\n const isActiveWallet = effectiveSourceType === 'walletId' &&\n accounts.some((a) =>\n a.wallets.some((w) => w.id === effectiveSourceId && w.status === 'ACTIVE'),\n );\n\n if (!isActiveWallet) {\n let found = false;\n for (const acct of accounts) {\n for (const wallet of acct.wallets) {\n if (\n wallet.status === 'ACTIVE' &&\n wallet.sources.some((s) => s.balance.available.amount >= parsedAmount)\n ) {\n effectiveSourceType = 'walletId';\n effectiveSourceId = wallet.id;\n found = true;\n break;\n }\n }\n if (found) break;\n }\n }\n\n const t = await api.createTransfer(apiBaseUrl, token, {\n credentialId: activeCredentialId,\n sourceType: effectiveSourceType,\n sourceId: effectiveSourceId,\n destination,\n amount: parsedAmount,\n });\n setTransfer(t);\n\n if (t.authorizationSessions && t.authorizationSessions.length > 0) {\n const shouldUseWalletConnector = useWalletConnector ?? !isMobile();\n\n if (!shouldUseWalletConnector) {\n // Webview / mobile: redirect to the wallet deeplink and poll for completion.\n setMobileFlow(true);\n pollingTransferIdRef.current = t.id;\n polling.startPolling(t.id);\n window.location.href = t.authorizationSessions[0].uri;\n return;\n } else {\n // Desktop: execute the authorization session in-browser\n await authExecutor.executeSession(t);\n }\n }\n\n // After auth completes, sign the transfer with the user's passkey.\n // The hook polls for the signPayload, prompts WebAuthn, and submits.\n const signedTransfer = await transferSigning.signTransfer(t.id);\n setTransfer(signedTransfer);\n polling.startPolling(t.id);\n } catch (err) {\n const msg =\n err instanceof Error ? err.message : 'Transfer failed';\n setError(msg);\n onError?.(msg);\n setStep('ready');\n } finally {\n setCreatingTransfer(false);\n }\n }, [\n amount,\n sourceId,\n sourceType,\n activeCredentialId,\n destination,\n apiBaseUrl,\n getAccessToken,\n accounts,\n authExecutor,\n transferSigning,\n polling,\n onError,\n useWalletConnector,\n ]);\n\n // ── Restart ──────────────────────────────────────────────────────\n\n const handleNewPayment = () => {\n setStep('ready');\n setTransfer(null);\n setError(null);\n setAmount(depositAmount != null ? depositAmount.toString() : '');\n setMobileFlow(false);\n pollingTransferIdRef.current = null;\n setConnectingNewAccount(false);\n setSelectedWalletId(null);\n setAdvancedSettings({ asset: null, chain: null });\n if (accounts.length > 0) setSelectedAccountId(accounts[0].id);\n };\n\n // ── Handle \"connect new account\" from advanced panel ─────────────\n\n const handleConnectNewAccount = (providerId: string) => {\n setSelectedProviderId(providerId);\n setSelectedAccountId(null);\n setConnectingNewAccount(true);\n };\n\n // ── Shared styles ────────────────────────────────────────────────\n\n const cardStyle: React.CSSProperties = {\n background: tokens.bgCard,\n borderRadius: tokens.radiusLg,\n border: `1px solid ${tokens.border}`,\n padding: '28px 24px',\n maxWidth: 420,\n width: '100%',\n boxShadow: tokens.shadowLg,\n fontFamily:\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n color: tokens.text,\n };\n\n const headingStyle: React.CSSProperties = {\n fontSize: '1.2rem',\n fontWeight: 600,\n margin: '0 0 20px 0',\n color: tokens.text,\n textAlign: 'center',\n };\n\n const btnPrimary: React.CSSProperties = {\n width: '100%',\n padding: '14px',\n background: tokens.accent,\n color: tokens.accentText,\n border: 'none',\n borderRadius: tokens.radius,\n fontSize: '1rem',\n fontWeight: 600,\n cursor: 'pointer',\n transition: 'background 0.15s ease',\n fontFamily: 'inherit',\n };\n\n const btnDisabled: React.CSSProperties = {\n ...btnPrimary,\n opacity: 0.5,\n cursor: 'not-allowed',\n };\n\n const btnSecondary: React.CSSProperties = {\n ...btnPrimary,\n background: 'transparent',\n color: tokens.textSecondary,\n border: `1px solid ${tokens.border}`,\n width: 'auto',\n flex: '0 0 auto',\n padding: '14px 20px',\n };\n\n const errorStyle: React.CSSProperties = {\n background: tokens.errorBg,\n border: `1px solid ${tokens.error}`,\n borderRadius: tokens.radius,\n padding: '10px 14px',\n color: tokens.error,\n fontSize: '0.825rem',\n marginBottom: '14px',\n lineHeight: 1.5,\n };\n\n const stepBadge = (label: string) => (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n marginBottom: '20px',\n }}\n >\n <div\n style={{\n width: 6,\n height: 6,\n borderRadius: '50%',\n background: tokens.accent,\n }}\n />\n <span\n style={{\n fontSize: '0.75rem',\n textTransform: 'uppercase',\n letterSpacing: '0.06em',\n color: tokens.textMuted,\n fontWeight: 600,\n }}\n >\n {label}\n </span>\n </div>\n );\n\n const displayedSelectSourceChoices =\n selectSourceChoices.length > 0\n ? selectSourceChoices\n : [\n {\n chainName: 'Base',\n balance: 0,\n tokens: [{ tokenSymbol: 'USDC', balance: 0 }],\n },\n ];\n\n const selectedChainChoice =\n displayedSelectSourceChoices.find(\n (choice) => choice.chainName === selectSourceChainName,\n ) ?? displayedSelectSourceChoices[0];\n\n const selectSourceTokenChoices = selectedChainChoice?.tokens ?? [];\n const resolvedSelectSourceChainName =\n selectedChainChoice?.chainName ?? selectSourceChainName;\n const resolvedSelectSourceTokenSymbol =\n selectSourceTokenChoices.find(\n (token) => token.tokenSymbol === selectSourceTokenSymbol,\n )?.tokenSymbol ?? selectSourceTokenChoices[0]?.tokenSymbol ?? '';\n const canConfirmSelectSource =\n !!resolvedSelectSourceChainName && !!resolvedSelectSourceTokenSymbol;\n\n const handleSelectSourceChainChange = (chainName: string) => {\n setSelectSourceChainName(chainName);\n\n const nextChain = displayedSelectSourceChoices.find(\n (choice) => choice.chainName === chainName,\n );\n if (!nextChain || nextChain.tokens.length === 0) {\n setSelectSourceTokenSymbol('');\n return;\n }\n\n const recommendedTokenForChain =\n selectSourceRecommended?.chainName === chainName\n ? selectSourceRecommended.tokenSymbol\n : null;\n\n const hasRecommendedToken =\n !!recommendedTokenForChain &&\n nextChain.tokens.some((token) => token.tokenSymbol === recommendedTokenForChain);\n\n setSelectSourceTokenSymbol(\n hasRecommendedToken && recommendedTokenForChain\n ? recommendedTokenForChain\n : nextChain.tokens[0].tokenSymbol,\n );\n };\n\n // ── Render ───────────────────────────────────────────────────────\n\n if (!ready) {\n return (\n <div style={cardStyle}>\n <div style={{ textAlign: 'center', padding: '24px 0' }}>\n <Spinner label=\"Initializing...\" />\n </div>\n </div>\n );\n }\n\n // ── Step: Login ──────────────────────────────────────────────────\n\n if (step === 'login' && !authenticated) {\n return (\n <div style={cardStyle}>\n <div style={{ textAlign: 'center' }}>\n <svg\n width=\"48\"\n height=\"48\"\n viewBox=\"0 0 48 48\"\n fill=\"none\"\n style={{ margin: '0 auto 16px' }}\n >\n <rect width=\"48\" height=\"48\" rx=\"12\" fill={tokens.accent + '20'} />\n <path\n d=\"M24 14v20M14 24h20\"\n stroke={tokens.accent}\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n <h2 style={{ ...headingStyle, marginBottom: '8px' }}>\n Pay with Swype\n </h2>\n <p\n style={{\n fontSize: '0.875rem',\n color: tokens.textSecondary,\n margin: '0 0 24px 0',\n lineHeight: 1.5,\n }}\n >\n Connect your account to continue\n </p>\n <button style={btnPrimary} onClick={login}>\n Connect to Swype\n </button>\n </div>\n </div>\n );\n }\n\n // ── Step: Register Passkey ───────────────────────────────────────\n\n if (step === 'register-passkey') {\n const handleRegisterPasskey = async () => {\n setRegisteringPasskey(true);\n setError(null);\n try {\n const token = await getAccessToken();\n if (!token) throw new Error('Not authenticated');\n\n const { credentialId, publicKey } = await createPasskeyCredential('Swype User');\n await api.registerPasskey(apiBaseUrl, token, credentialId, publicKey);\n setActiveCredentialId(credentialId);\n window.localStorage.setItem(ACTIVE_CREDENTIAL_STORAGE_KEY, credentialId);\n\n // Passkey registered — proceed to the normal flow\n if (depositAmount != null && depositAmount > 0) {\n setStep('ready');\n } else {\n setStep('enter-amount');\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : 'Failed to register passkey';\n setError(msg);\n } finally {\n setRegisteringPasskey(false);\n }\n };\n\n return (\n <div style={cardStyle}>\n <div style={{ textAlign: 'center' }}>\n <svg\n width=\"48\"\n height=\"48\"\n viewBox=\"0 0 48 48\"\n fill=\"none\"\n style={{ margin: '0 auto 16px' }}\n >\n <rect width=\"48\" height=\"48\" rx=\"12\" fill={tokens.accent + '20'} />\n <path\n d=\"M24 16c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm0 10c-4.42 0-8 1.79-8 4v2h16v-2c0-2.21-3.58-4-8-4z\"\n fill={tokens.accent}\n />\n </svg>\n <h2 style={{ ...headingStyle, marginBottom: '8px' }}>\n Set Up Passkey\n </h2>\n <p\n style={{\n fontSize: '0.875rem',\n color: tokens.textSecondary,\n margin: '0 0 24px 0',\n lineHeight: 1.5,\n }}\n >\n Create a passkey for secure, one-touch payments. This only needs to\n be done once.\n </p>\n\n {error && <div style={errorStyle}>{error}</div>}\n\n <button\n style={registeringPasskey ? btnDisabled : btnPrimary}\n disabled={registeringPasskey}\n onClick={handleRegisterPasskey}\n >\n {registeringPasskey ? 'Creating passkey...' : 'Create Passkey'}\n </button>\n </div>\n </div>\n );\n }\n\n // ── Step: Enter Amount ───────────────────────────────────────────\n\n if (step === 'enter-amount') {\n const parsedAmount = parseFloat(amount);\n const canContinue = !isNaN(parsedAmount) && parsedAmount > 0;\n\n // Compute the max single-source balance (highest individual token\n // balance across all wallets) — the most that could be pulled in\n // one transfer.\n let maxSourceBalance: number | null = null;\n for (const acct of accounts) {\n for (const wallet of acct.wallets) {\n for (const source of wallet.sources) {\n const bal = source.balance.available.amount;\n if (maxSourceBalance === null || bal > maxSourceBalance) {\n maxSourceBalance = bal;\n }\n }\n }\n }\n\n return (\n <div style={cardStyle}>\n {stepBadge('Enter amount')}\n <h2 style={headingStyle}>How much?</h2>\n\n {error && <div style={errorStyle}>{error}</div>}\n\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n background: tokens.bgInput,\n border: `1px solid ${tokens.border}`,\n borderRadius: tokens.radius,\n padding: '4px 14px 4px 4px',\n marginBottom: '8px',\n }}\n >\n <span\n style={{\n fontSize: '1.5rem',\n fontWeight: 600,\n color: tokens.textMuted,\n paddingLeft: '10px',\n userSelect: 'none',\n }}\n >\n $\n </span>\n <input\n type=\"number\"\n min=\"0.01\"\n step=\"0.01\"\n value={amount}\n onChange={(e) => setAmount(e.target.value)}\n placeholder=\"0.00\"\n style={{\n flex: 1,\n background: 'transparent',\n border: 'none',\n outline: 'none',\n color: tokens.text,\n fontSize: '1.5rem',\n fontWeight: 600,\n fontFamily: 'inherit',\n padding: '10px 0',\n }}\n autoFocus\n />\n <span\n style={{\n fontSize: '0.825rem',\n fontWeight: 600,\n color: tokens.textMuted,\n background: tokens.bgHover,\n padding: '4px 10px',\n borderRadius: '6px',\n }}\n >\n USD\n </span>\n </div>\n\n {/* Available balance */}\n <div\n style={{\n fontSize: '0.8rem',\n color: tokens.textMuted,\n marginBottom: '20px',\n paddingLeft: '2px',\n }}\n >\n {loadingData ? (\n <span>Loading balance...</span>\n ) : maxSourceBalance !== null && maxSourceBalance > 0 ? (\n <span>\n Available: <span style={{ fontWeight: 600, color: tokens.textSecondary }}>${maxSourceBalance.toFixed(2)}</span>\n </span>\n ) : null}\n </div>\n\n <button\n style={canContinue ? btnPrimary : btnDisabled}\n disabled={!canContinue}\n onClick={() => {\n setError(null);\n setStep('ready');\n }}\n >\n Continue\n </button>\n </div>\n );\n }\n\n // ── Step: Ready ──────────────────────────────────────────────────\n\n if (step === 'ready') {\n const parsedAmount = parseFloat(amount);\n const canPay =\n !isNaN(parsedAmount) && parsedAmount > 0 && !!sourceId && !loadingData;\n\n // No accounts exist — show first-time provider selection\n const noAccounts = !loadingData && accounts.length === 0;\n\n return (\n <div style={cardStyle}>\n {stepBadge('Review & pay')}\n\n {error && <div style={errorStyle}>{error}</div>}\n\n {loadingData ? (\n <div style={{ padding: '24px 0', textAlign: 'center' }}>\n <Spinner label=\"Loading...\" />\n </div>\n ) : (\n <>\n {/* Amount display */}\n <div\n style={{\n textAlign: 'center',\n marginBottom: '20px',\n }}\n >\n <div\n style={{\n fontSize: '2rem',\n fontWeight: 700,\n color: tokens.text,\n lineHeight: 1.2,\n }}\n >\n ${parsedAmount > 0 ? parsedAmount.toFixed(2) : '0.00'}\n </div>\n <button\n onClick={() => setStep('enter-amount')}\n style={{\n background: 'transparent',\n border: 'none',\n cursor: 'pointer',\n color: tokens.textMuted,\n fontSize: '0.75rem',\n fontFamily: 'inherit',\n outline: 'none',\n padding: '4px 8px',\n marginTop: '4px',\n }}\n >\n Change amount\n </button>\n </div>\n\n {/* Source summary */}\n <div\n style={{\n fontSize: '0.825rem',\n color: tokens.textSecondary,\n marginBottom: '16px',\n padding: '12px 14px',\n background: tokens.bgInput,\n borderRadius: tokens.radius,\n lineHeight: 1.7,\n }}\n >\n {/* Destination */}\n <div\n style={{ display: 'flex', justifyContent: 'space-between' }}\n >\n <span>To</span>\n <span\n style={{\n fontFamily: '\"SF Mono\", \"Fira Code\", monospace',\n fontSize: '0.8rem',\n }}\n >\n {destination.address.slice(0, 6)}...\n {destination.address.slice(-4)}\n </span>\n </div>\n <div\n style={{ display: 'flex', justifyContent: 'space-between' }}\n >\n <span>Token</span>\n <span style={{ fontWeight: 600 }}>\n {destination.token.symbol}\n </span>\n </div>\n\n {/* Source account - subtle dropdown */}\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n }}\n >\n <span>From</span>\n {noAccounts ? (\n <span style={{ fontWeight: 500, color: tokens.textMuted }}>\n New account\n </span>\n ) : (\n <AccountDropdown\n accounts={accounts}\n selectedAccountId={selectedAccountId}\n selectedWalletId={selectedWalletId}\n onSelect={(id) => {\n setSelectedAccountId(id);\n setSelectedWalletId(null);\n setConnectingNewAccount(false);\n setSelectedProviderId(null);\n }}\n onWalletSelect={(accountId, walletId) => {\n setSelectedAccountId(accountId);\n setSelectedWalletId(walletId);\n setConnectingNewAccount(false);\n setSelectedProviderId(null);\n }}\n />\n )}\n </div>\n </div>\n\n {/* First-time user: show provider cards */}\n {noAccounts && (\n <div style={{ marginBottom: '16px' }}>\n <label\n style={{\n display: 'block',\n fontSize: '0.8rem',\n color: tokens.textMuted,\n marginBottom: '8px',\n fontWeight: 500,\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n }}\n >\n Connect a wallet\n </label>\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n }}\n >\n {providers.map((p) => (\n <ProviderCard\n key={p.id}\n provider={p}\n selected={selectedProviderId === p.id}\n onClick={() => {\n setSelectedProviderId(p.id);\n setSelectedAccountId(null);\n setConnectingNewAccount(false);\n }}\n />\n ))}\n </div>\n </div>\n )}\n\n {/* Pay button */}\n <button\n style={canPay ? btnPrimary : btnDisabled}\n disabled={!canPay}\n onClick={handlePay}\n >\n Pay ${parsedAmount > 0 ? parsedAmount.toFixed(2) : '0.00'}\n </button>\n\n {/* Advanced settings */}\n {!noAccounts && (\n <AdvancedSettings\n settings={advancedSettings}\n onChange={setAdvancedSettings}\n chains={chains}\n providers={providers}\n onConnectNewAccount={handleConnectNewAccount}\n connectingNewAccount={connectingNewAccount}\n />\n )}\n </>\n )}\n </div>\n );\n }\n\n // ── Step: Processing ─────────────────────────────────────────────\n\n if (step === 'processing') {\n if (pendingSelectSourceAction) {\n const chainValue = resolvedSelectSourceChainName;\n const tokenValue = resolvedSelectSourceTokenSymbol;\n\n return (\n <div style={cardStyle}>\n {stepBadge('Select source')}\n <div style={{ textAlign: 'center', marginBottom: '16px' }}>\n <h2 style={{ ...headingStyle, marginBottom: '8px' }}>Select payment source</h2>\n <p\n style={{\n fontSize: '0.85rem',\n color: tokens.textSecondary,\n margin: 0,\n lineHeight: 1.5,\n }}\n >\n Confirm the chain and token to use for this transfer.\n </p>\n </div>\n\n <div\n style={{\n fontSize: '0.825rem',\n color: tokens.textSecondary,\n marginBottom: '16px',\n padding: '14px',\n background: tokens.bgInput,\n borderRadius: tokens.radius,\n border: `1px solid ${tokens.border}`,\n }}\n >\n <label\n htmlFor=\"swype-select-source-chain\"\n style={{\n display: 'block',\n fontSize: '0.75rem',\n fontWeight: 600,\n marginBottom: '6px',\n color: tokens.textMuted,\n textTransform: 'uppercase',\n letterSpacing: '0.04em',\n }}\n >\n Chain\n </label>\n <select\n id=\"swype-select-source-chain\"\n value={chainValue}\n onChange={(event) => handleSelectSourceChainChange(event.target.value)}\n style={{\n width: '100%',\n marginBottom: '12px',\n padding: '10px 12px',\n borderRadius: tokens.radius,\n border: `1px solid ${tokens.border}`,\n background: tokens.bgCard,\n color: tokens.text,\n fontFamily: 'inherit',\n fontSize: '0.875rem',\n outline: 'none',\n }}\n >\n {displayedSelectSourceChoices.map((chainChoice) => (\n <option key={chainChoice.chainName} value={chainChoice.chainName}>\n {chainChoice.chainName} (${chainChoice.balance.toFixed(2)})\n </option>\n ))}\n </select>\n\n <label\n htmlFor=\"swype-select-source-token\"\n style={{\n display: 'block',\n fontSize: '0.75rem',\n fontWeight: 600,\n marginBottom: '6px',\n color: tokens.textMuted,\n textTransform: 'uppercase',\n letterSpacing: '0.04em',\n }}\n >\n Token\n </label>\n <select\n id=\"swype-select-source-token\"\n value={tokenValue}\n onChange={(event) => setSelectSourceTokenSymbol(event.target.value)}\n style={{\n width: '100%',\n padding: '10px 12px',\n borderRadius: tokens.radius,\n border: `1px solid ${tokens.border}`,\n background: tokens.bgCard,\n color: tokens.text,\n fontFamily: 'inherit',\n fontSize: '0.875rem',\n outline: 'none',\n }}\n >\n {selectSourceTokenChoices.map((tokenChoice) => (\n <option key={tokenChoice.tokenSymbol} value={tokenChoice.tokenSymbol}>\n {tokenChoice.tokenSymbol} (${tokenChoice.balance.toFixed(2)})\n </option>\n ))}\n </select>\n </div>\n\n <button\n style={canConfirmSelectSource ? btnPrimary : btnDisabled}\n disabled={!canConfirmSelectSource}\n onClick={() => {\n if (!canConfirmSelectSource) return;\n authExecutor.resolveSelectSource({\n chainName: resolvedSelectSourceChainName,\n tokenSymbol: resolvedSelectSourceTokenSymbol,\n });\n }}\n >\n Confirm source\n </button>\n </div>\n );\n }\n\n // When the signing hook has a signPayload, show the transfer details\n // and a passkey prompt.\n if (transferSigning.signing && transferSigning.signPayload) {\n const payload = transferSigning.signPayload;\n\n return (\n <div style={cardStyle}>\n <div style={{ textAlign: 'center', padding: '16px 0' }}>\n <svg width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\" style={{ margin: '0 auto 16px' }}>\n <rect width=\"48\" height=\"48\" rx=\"12\" fill={tokens.accent + '20'} />\n <path d=\"M24 14v8M20 18h8M24 26v2M24 32v2\" stroke={tokens.accent} strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n <h2 style={{ ...headingStyle, marginBottom: '8px' }}>Authorize Transfer</h2>\n <p style={{ fontSize: '0.85rem', color: tokens.textSecondary, margin: '0 0 16px 0', lineHeight: 1.5 }}>\n Use your passkey to confirm this payment.\n </p>\n\n <div style={{ fontSize: '0.825rem', color: tokens.textSecondary, padding: '12px 14px', background: tokens.bgInput, borderRadius: tokens.radius, textAlign: 'left', lineHeight: 1.7, marginBottom: '16px' }}>\n {payload.amount && payload.tokenSymbol && (\n <div style={{ display: 'flex', justifyContent: 'space-between' }}>\n <span>Amount</span>\n <span style={{ fontWeight: 600, color: tokens.text }}>{payload.amount} {payload.tokenSymbol}</span>\n </div>\n )}\n {payload.bridgeRelayAddress && (\n <div style={{ display: 'flex', justifyContent: 'space-between' }}>\n <span>Bridge relay</span>\n <span style={{ fontFamily: '\"SF Mono\", \"Fira Code\", monospace', fontSize: '0.75rem' }}>\n {payload.bridgeRelayAddress.slice(0, 6)}...{payload.bridgeRelayAddress.slice(-4)}\n </span>\n </div>\n )}\n {payload.estimatedFeeUsd && (\n <div style={{ display: 'flex', justifyContent: 'space-between' }}>\n <span>Est. fee</span>\n <span style={{ fontWeight: 600 }}>${payload.estimatedFeeUsd}</span>\n </div>\n )}\n </div>\n\n <Spinner label=\"Waiting for passkey...\" />\n </div>\n </div>\n );\n }\n\n // Determine the current registration step for informative messages\n const currentActionType = authExecutor.currentAction?.type;\n\n const getRegistrationMessage = (): { label: string; description: string } => {\n switch (currentActionType) {\n case 'CREATE_SMART_ACCOUNT':\n return {\n label: 'Creating your smart account...',\n description: 'Setting up your smart account for gasless payments.',\n };\n case 'APPROVE_PERMIT2':\n return {\n label: 'Approving token access...',\n description:\n 'Approve the prompt in your wallet to allow secure token transfers.',\n };\n case 'SIGN_PERMIT2':\n return {\n label: 'Signing transfer permission...',\n description: 'Sign the permit to allow your smart account to transfer tokens on your behalf.',\n };\n default:\n return { label: '', description: '' };\n }\n };\n\n const regMsg = getRegistrationMessage();\n\n const statusLabel = creatingTransfer\n ? 'Creating transfer...'\n : mobileFlow\n ? 'Waiting for authorization...'\n : authExecutor.executing && regMsg.label\n ? regMsg.label\n : authExecutor.executing\n ? 'Authorizing...'\n : transferSigning.signing\n ? 'Preparing transfer...'\n : polling.isPolling\n ? 'Processing payment...'\n : 'Please wait...';\n\n const statusDescription = creatingTransfer\n ? 'Setting up your transfer...'\n : mobileFlow\n ? 'Complete the authorization in your wallet app, then return here.'\n : authExecutor.executing && regMsg.description\n ? regMsg.description\n : authExecutor.executing\n ? 'Complete the wallet prompts to authorize this payment.'\n : transferSigning.signing\n ? 'Waiting for backend to prepare your transfer payload...'\n : polling.isPolling\n ? 'Your payment is being processed. This usually takes a few moments.'\n : 'Hang tight...';\n\n return (\n <div style={cardStyle}>\n <div style={{ textAlign: 'center', padding: '16px 0' }}>\n <Spinner size={48} />\n <h2\n style={{\n ...headingStyle,\n marginTop: '20px',\n marginBottom: '8px',\n }}\n >\n {statusLabel}\n </h2>\n <p\n style={{\n fontSize: '0.85rem',\n color: tokens.textSecondary,\n margin: 0,\n lineHeight: 1.5,\n }}\n >\n {statusDescription}\n </p>\n\n {/* Desktop: show action-by-action progress */}\n {!mobileFlow && authExecutor.results.length > 0 && (\n <div style={{ marginTop: '20px', textAlign: 'left' }}>\n {authExecutor.results.map((r) => (\n <div\n key={r.actionId}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '6px 0',\n fontSize: '0.8rem',\n color:\n r.status === 'success' ? tokens.success : tokens.error,\n }}\n >\n <span>\n {r.status === 'success' ? '\\u2713' : '\\u2717'}\n </span>\n <span>{r.type.replace(/_/g, ' ')}</span>\n </div>\n ))}\n </div>\n )}\n\n {(error || authExecutor.error || transferSigning.error || polling.error) && (\n <div\n style={{ ...errorStyle, marginTop: '16px', textAlign: 'left' }}\n >\n {error || authExecutor.error || transferSigning.error || polling.error}\n </div>\n )}\n </div>\n </div>\n );\n }\n\n // ── Step: Complete ───────────────────────────────────────────────\n\n if (step === 'complete') {\n const succeeded = transfer?.status === 'COMPLETED';\n\n return (\n <div style={cardStyle}>\n <div style={{ textAlign: 'center' }}>\n <div\n style={{\n width: 56,\n height: 56,\n borderRadius: '50%',\n background: succeeded\n ? tokens.success + '20'\n : tokens.error + '20',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n margin: '0 auto 16px',\n }}\n >\n {succeeded ? (\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\"\n fill={tokens.success}\n />\n </svg>\n ) : (\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M18.3 5.71L12 12.01 5.7 5.71 4.29 7.12l6.3 6.3-6.3 6.29 1.41 1.41 6.3-6.29 6.29 6.29 1.41-1.41-6.29-6.29 6.29-6.3-1.41-1.41z\"\n fill={tokens.error}\n />\n </svg>\n )}\n </div>\n\n <h2\n style={{\n ...headingStyle,\n marginBottom: '8px',\n color: succeeded ? tokens.success : tokens.error,\n }}\n >\n {succeeded ? 'Payment Complete' : 'Payment Failed'}\n </h2>\n\n {transfer && (\n <div\n style={{\n fontSize: '0.825rem',\n color: tokens.textSecondary,\n margin: '0 0 24px 0',\n padding: '14px',\n background: tokens.bgInput,\n borderRadius: tokens.radius,\n textAlign: 'left',\n lineHeight: 1.8,\n }}\n >\n <div\n style={{ display: 'flex', justifyContent: 'space-between' }}\n >\n <span>Amount</span>\n <span style={{ fontWeight: 600, color: tokens.text }}>\n ${transfer.amount?.amount?.toFixed(2)}{' '}\n {transfer.amount?.currency}\n </span>\n </div>\n <div\n style={{ display: 'flex', justifyContent: 'space-between' }}\n >\n <span>Status</span>\n <span\n style={{\n fontWeight: 600,\n color: succeeded ? tokens.success : tokens.error,\n }}\n >\n {transfer.status}\n </span>\n </div>\n <div\n style={{ display: 'flex', justifyContent: 'space-between' }}\n >\n <span>Transfer ID</span>\n <span\n style={{\n fontFamily: '\"SF Mono\", \"Fira Code\", monospace',\n fontSize: '0.75rem',\n }}\n >\n {transfer.id.slice(0, 8)}...\n </span>\n </div>\n </div>\n )}\n\n {error && (\n <div style={{ ...errorStyle, textAlign: 'left' }}>{error}</div>\n )}\n\n <button style={btnPrimary} onClick={handleNewPayment}>\n {succeeded ? 'Make Another Payment' : 'Try Again'}\n </button>\n </div>\n </div>\n );\n }\n\n // Fallback\n return null;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/theme.ts","../src/context.tsx","../src/api.ts","../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/passkeyRpId.ts","../src/hooks.ts","../src/components/Spinner.tsx","../src/components/ProviderCard.tsx","../src/components/AccountDropdown.tsx","../src/components/AdvancedSettings.tsx","../src/SwypePayment.tsx"],"names":["createConfig","mainnet","arbitrum","base","http","createContext","useRef","QueryClient","useState","useCallback","useMemo","jsx","QueryClientProvider","WagmiProvider","PrivyProvider","useContext","_BaseError_walk","connector","chainId","parseAccount","getAddress","chain","createClient","custom","walletActions","wagmiConfig","usePrivy","useEffect","hexChainId","recoverTypedDataAddress","useConfig","useConnect","useSwitchChain","signTransfer","jsxs","Fragment"],"mappings":"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","file":"index.cjs","sourcesContent":["// ── Swype React SDK Theme Tokens ───────────────────────────────────────\nimport type { ThemeMode } from './types';\n\nexport interface ThemeTokens {\n // Surfaces\n bg: string;\n bgCard: string;\n bgInput: string;\n bgHover: string;\n bgOverlay: string;\n\n // Text\n text: string;\n textSecondary: string;\n textMuted: string;\n textInverse: string;\n\n // Borders\n border: string;\n borderFocus: string;\n\n // Accent\n accent: string;\n accentHover: string;\n accentText: string;\n\n // Semantic\n success: string;\n successBg: string;\n error: string;\n errorBg: string;\n\n // Shadows\n shadow: string;\n shadowLg: string;\n\n // Radius\n radius: string;\n radiusLg: string;\n}\n\nexport const darkTheme: ThemeTokens = {\n bg: '#0a0a0a',\n bgCard: '#141414',\n bgInput: '#1e1e1e',\n bgHover: '#252525',\n bgOverlay: 'rgba(0, 0, 0, 0.6)',\n\n text: '#f5f5f5',\n textSecondary: '#a1a1aa',\n textMuted: '#71717a',\n textInverse: '#09090b',\n\n border: '#27272a',\n borderFocus: '#3b82f6',\n\n accent: '#3b82f6',\n accentHover: '#2563eb',\n accentText: '#ffffff',\n\n success: '#22c55e',\n successBg: '#052e16',\n error: '#ef4444',\n errorBg: '#450a0a',\n\n shadow: '0 1px 3px rgba(0,0,0,0.4)',\n shadowLg: '0 8px 32px rgba(0,0,0,0.5)',\n\n radius: '10px',\n radiusLg: '16px',\n};\n\nexport const lightTheme: ThemeTokens = {\n bg: '#f8fafc',\n bgCard: '#ffffff',\n bgInput: '#f1f5f9',\n bgHover: '#e2e8f0',\n bgOverlay: 'rgba(0, 0, 0, 0.3)',\n\n text: '#0f172a',\n textSecondary: '#475569',\n textMuted: '#94a3b8',\n textInverse: '#ffffff',\n\n border: '#e2e8f0',\n borderFocus: '#3b82f6',\n\n accent: '#3b82f6',\n accentHover: '#2563eb',\n accentText: '#ffffff',\n\n success: '#16a34a',\n successBg: '#f0fdf4',\n error: '#dc2626',\n errorBg: '#fef2f2',\n\n shadow: '0 1px 3px rgba(0,0,0,0.08)',\n shadowLg: '0 8px 32px rgba(0,0,0,0.12)',\n\n radius: '10px',\n radiusLg: '16px',\n};\n\nexport function getTheme(mode: ThemeMode): ThemeTokens {\n return mode === 'dark' ? darkTheme : lightTheme;\n}\n","// ── Swype React SDK Context & Provider ─────────────────────────────────\nimport { createContext, useCallback, useContext, useMemo, useRef, useState } from 'react';\nimport { PrivyProvider } from '@privy-io/react-auth';\nimport { WagmiProvider, createConfig, http } from 'wagmi';\nimport { mainnet, arbitrum, base } from 'wagmi/chains';\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport type { ThemeMode } from './types';\nimport { getTheme, type ThemeTokens } from './theme';\n\n// ── Swype-owned Privy credentials ─────────────────────────────────────\n// These are internal to the SDK. Integrators never need to know about them.\n\n/** Swype's Privy App ID — all SDK users authenticate against this app. */\nconst SWYPE_PRIVY_APP_ID = 'cmlil87uv004n0ck0blwumwek';\n\n/**\n * Session isolation: Because the SDK uses Swype's own `appId` (distinct\n * from any integrator's `appId`), Privy automatically scopes storage\n * per app. If additional scoping within the same `appId` is ever needed,\n * create an App Client in the Privy dashboard and set `clientId` here.\n */\n\n// ── Default wagmi config ──────────────────────────────────────────────\n// Created once at module level so it's shared across all SwypeProvider\n// instances (there should only ever be one, but this is safe either way).\n\nconst wagmiConfig = createConfig({\n chains: [mainnet, arbitrum, base],\n transports: {\n [mainnet.id]: http(),\n [arbitrum.id]: http(),\n [base.id]: http(),\n },\n});\n\n// ── Swype SDK context ─────────────────────────────────────────────────\n\nexport interface SwypeConfig {\n apiBaseUrl: string;\n theme: ThemeMode;\n tokens: ThemeTokens;\n /** Pre-set deposit amount (controlled by host app via useSwypeDepositAmount) */\n depositAmount: number | null;\n /** Update the deposit amount from a host-app component */\n setDepositAmount: (amount: number | null) => void;\n}\n\nconst SwypeContext = createContext<SwypeConfig | null>(null);\n\nexport interface SwypeProviderProps {\n /** Base URL for the Swype API (e.g. \"http://localhost:3000\") */\n apiBaseUrl: string;\n /** Light or dark mode */\n theme?: ThemeMode;\n children: React.ReactNode;\n}\n\n/**\n * Provides Swype SDK configuration and all required infrastructure\n * (Privy auth, wagmi, React Query) to child components.\n *\n * Must wrap any `<SwypePayment>` usage. The integrator does **not** need\n * to set up Privy, wagmi, or React Query — this provider handles it all.\n *\n * @example\n * ```tsx\n * <SwypeProvider apiBaseUrl=\"https://api.swype.com\">\n * <SwypePayment destination={dest} onComplete={handler} />\n * </SwypeProvider>\n * ```\n */\nexport function SwypeProvider({\n apiBaseUrl,\n theme = 'dark',\n children,\n}: SwypeProviderProps) {\n // Stable QueryClient across re-renders (created once per provider mount)\n const queryClientRef = useRef<QueryClient | null>(null);\n if (!queryClientRef.current) {\n queryClientRef.current = new QueryClient();\n }\n\n // Deposit amount state — host apps set this via useSwypeDepositAmount()\n const [depositAmount, setDepositAmountRaw] = useState<number | null>(null);\n\n const setDepositAmount = useCallback((amount: number | null) => {\n setDepositAmountRaw(amount);\n }, []);\n\n const value = useMemo<SwypeConfig>(\n () => ({\n apiBaseUrl,\n theme,\n tokens: getTheme(theme),\n depositAmount,\n setDepositAmount,\n }),\n [apiBaseUrl, theme, depositAmount, setDepositAmount],\n );\n\n return (\n <QueryClientProvider client={queryClientRef.current}>\n <WagmiProvider config={wagmiConfig}>\n <PrivyProvider\n appId={SWYPE_PRIVY_APP_ID}\n config={{\n appearance: {\n theme,\n },\n }}\n >\n <SwypeContext.Provider value={value}>\n {children}\n </SwypeContext.Provider>\n </PrivyProvider>\n </WagmiProvider>\n </QueryClientProvider>\n );\n}\n\n/** Access the Swype SDK configuration. Throws if used outside SwypeProvider. */\nexport function useSwypeConfig(): SwypeConfig {\n const ctx = useContext(SwypeContext);\n if (!ctx) {\n throw new Error('useSwypeConfig must be used within a <SwypeProvider>');\n }\n return ctx;\n}\n\n/** Access Swype SDK configuration when available (returns null outside provider). */\nexport function useOptionalSwypeConfig(): SwypeConfig | null {\n return useContext(SwypeContext);\n}\n\n/**\n * Hook for host apps to pre-set the deposit amount before showing the\n * payment widget. When set, the amount field in SwypePayment is\n * auto-populated.\n *\n * @example\n * ```tsx\n * function ProductPage() {\n * const { setAmount } = useSwypeDepositAmount();\n * useEffect(() => { setAmount(25.00); }, []);\n * return <SwypePayment destination={dest} />;\n * }\n * ```\n */\nexport function useSwypeDepositAmount() {\n const ctx = useContext(SwypeContext);\n if (!ctx) {\n throw new Error(\n 'useSwypeDepositAmount must be used within a <SwypeProvider>',\n );\n }\n return {\n /** Current deposit amount, or null if not set */\n amount: ctx.depositAmount,\n /** Set the deposit amount (pass null to clear) */\n setAmount: ctx.setDepositAmount,\n };\n}\n","// ── Swype React SDK API Client ─────────────────────────────────────────\nimport type {\n Provider,\n Chain,\n Account,\n Transfer,\n AuthorizationSessionDetail,\n ErrorResponse,\n ListResponse,\n SourceType,\n Destination,\n UserConfig,\n} 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\n// ── Transfers ──────────────────────────────────────────────────────────\n\nexport interface CreateTransferParams {\n credentialId: string;\n sourceType: SourceType;\n sourceId: string;\n destination: Destination;\n amount: number;\n currency?: string;\n}\n\nexport async function createTransfer(\n apiBaseUrl: string,\n token: string,\n params: CreateTransferParams,\n): Promise<Transfer> {\n const body = {\n id: crypto.randomUUID(),\n credentialId: params.credentialId,\n sources: [{ [params.sourceType]: params.sourceId }],\n destinations: [\n {\n chainId: params.destination.chainId,\n token: { symbol: params.destination.token.symbol },\n address: params.destination.address,\n },\n ],\n amount: {\n amount: params.amount,\n currency: params.currency ?? 'USD',\n },\n };\n\n const res = await fetch(`${apiBaseUrl}/v1/transfers`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify(body),\n });\n\n if (!res.ok) await throwApiError(res);\n return (await res.json()) as Transfer;\n}\n\nexport async function fetchTransfer(\n apiBaseUrl: string,\n token: string,\n transferId: string,\n 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// ── 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 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","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","// ── 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';\nexport { useSwypeConfig } from './context';\n\n// ── Constants ──────────────────────────────────────────────────────────\n\nconst WALLET_CLIENT_MAX_ATTEMPTS = 15;\nconst WALLET_CLIENT_POLL_MS = 200;\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\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\nfunction resolvePasskeyRpId(): string {\n // Mirrors infra's root domain variable (`domain`), provided to frontends as VITE_DOMAIN.\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\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 return await getWalletClient(wagmiConfig, params);\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 userIdentifier - A string used to identify the user in the\n * WebAuthn ceremony (e.g. wallet address or Privy user ID).\n * @returns The base64-encoded credentialId and publicKey.\n */\nexport async function createPasskeyCredential(\n userIdentifier: string,\n): Promise<{ credentialId: string; publicKey: string }> {\n const challenge = new Uint8Array(32);\n crypto.getRandomValues(challenge);\n const rpId = resolvePasskeyRpId();\n\n const credential = await navigator.credentials.create({\n publicKey: {\n challenge,\n rp: { name: 'Swype', id: rpId },\n user: {\n id: new TextEncoder().encode(userIdentifier),\n name: userIdentifier,\n displayName: 'Swype User',\n },\n pubKeyCredParams: [\n { alg: -7, type: 'public-key' }, // ES256 (P-256)\n { alg: -257, type: 'public-key' }, // RS256\n ],\n authenticatorSelection: {\n authenticatorAttachment: 'platform',\n residentKey: 'preferred',\n userVerification: 'required',\n },\n timeout: 60000,\n },\n }) as PublicKeyCredential | null;\n\n if (!credential) {\n throw new Error('Passkey creation was cancelled.');\n }\n\n const response = credential.response as AuthenticatorAttestationResponse;\n const publicKeyBytes = response.getPublicKey?.();\n\n return {\n credentialId: toBase64(credential.rawId),\n publicKey: publicKeyBytes ? toBase64(publicKeyBytes) : '',\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 try {\n const token = await getAccessToken();\n if (!token) {\n setError('Could not get access token');\n stopPolling();\n return;\n }\n const t = await api.fetchTransfer(apiBaseUrl, token, transferIdRef.current);\n setTransfer(t);\n\n if (t.status === 'COMPLETED' || t.status === 'FAILED') {\n stopPolling();\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Polling error');\n stopPolling();\n }\n }, [apiBaseUrl, getAccessToken, stopPolling]);\n\n const startPolling = useCallback(\n (transferId: string) => {\n stopPolling();\n transferIdRef.current = transferId;\n setIsPolling(true);\n setError(null);\n 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\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 signature = 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 // Verify the recovered signer matches expectations\n const recoverInput = {\n domain: parsed.domain,\n types: parsed.types,\n primaryType: parsed.primaryType,\n message: parsed.message,\n signature: signature as `0x${string}`,\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 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 /** Execute authorization by session id. */\n executeSessionById: (sessionId: string) => Promise<void>;\n executeSession: (transfer: Transfer) => 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 deployment\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 // ── 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 'SIGN_PERMIT2':\n return executeSignPermit2(action, wagmiConfig, apiBaseUrl ?? '', sessionIdRef.current);\n default:\n return actionError(action, `Unsupported action type: ${action.type}`);\n }\n },\n [wagmiConfig, connectors, connectAsync, switchChainAsync, apiBaseUrl, waitForSelection],\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 const executeSession = useCallback(\n async (transfer: Transfer) => {\n if (!transfer.authorizationSessions?.length) {\n throw new Error('No authorization sessions available.');\n }\n await executeSessionById(transfer.authorizationSessions[0].id);\n },\n [executeSessionById],\n );\n\n return {\n executing,\n results,\n error,\n currentAction,\n pendingSelectSource,\n resolveSelectSource,\n executeSessionById,\n executeSession,\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 const allowCredentials = payload.passkeyCredentialId\n ? [{\n type: 'public-key' as const,\n id: base64ToBytes(payload.passkeyCredentialId),\n }]\n : undefined;\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 const 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","// ── Animated Spinner ───────────────────────────────────────────────────\nimport { useSwypeConfig } from '../context';\n\ninterface SpinnerProps {\n size?: number;\n label?: string;\n}\n\nexport function Spinner({ size = 40, label }: SpinnerProps) {\n const { tokens } = useSwypeConfig();\n\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '12px',\n }}\n >\n <div\n style={{\n width: size,\n height: size,\n border: `3px solid ${tokens.border}`,\n borderTopColor: tokens.accent,\n borderRadius: '50%',\n animation: 'swype-spin 0.8s linear infinite',\n }}\n />\n {label && (\n <p style={{ color: tokens.textSecondary, fontSize: '0.875rem', margin: 0 }}>\n {label}\n </p>\n )}\n <style>{`\n @keyframes swype-spin {\n to { transform: rotate(360deg); }\n }\n `}</style>\n </div>\n );\n}\n","// ── Provider Selection Card ────────────────────────────────────────────\nimport { useState } from 'react';\nimport type { Provider } from '../types';\nimport { useSwypeConfig } from '../context';\n\ninterface ProviderCardProps {\n provider: Provider;\n selected: boolean;\n onClick: () => void;\n}\n\nexport function ProviderCard({ provider, selected, onClick }: ProviderCardProps) {\n const { tokens } = useSwypeConfig();\n const [hovered, setHovered] = useState(false);\n\n return (\n <button\n onClick={onClick}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n width: '100%',\n padding: '14px 16px',\n background: selected\n ? tokens.accent + '18'\n : hovered\n ? tokens.bgHover\n : tokens.bgInput,\n border: `1.5px solid ${selected ? tokens.accent : tokens.border}`,\n borderRadius: tokens.radius,\n cursor: 'pointer',\n transition: 'all 0.15s ease',\n color: tokens.text,\n fontFamily: 'inherit',\n fontSize: '0.95rem',\n fontWeight: 500,\n textAlign: 'left',\n outline: 'none',\n }}\n >\n {provider.logoURI ? (\n <img\n src={provider.logoURI}\n alt={provider.name}\n style={{\n width: 32,\n height: 32,\n borderRadius: '8px',\n objectFit: 'contain',\n }}\n />\n ) : (\n <div\n style={{\n width: 32,\n height: 32,\n borderRadius: '8px',\n background: tokens.accent + '30',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '0.875rem',\n fontWeight: 700,\n color: tokens.accent,\n flexShrink: 0,\n }}\n >\n {provider.name.charAt(0).toUpperCase()}\n </div>\n )}\n <span>{provider.name}</span>\n {selected && (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n style={{ marginLeft: 'auto', flexShrink: 0 }}\n >\n <path\n d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\"\n fill={tokens.accent}\n />\n </svg>\n )}\n </button>\n );\n}\n","// ── Account & Wallet Dropdown ────────────────────────────────────────\n// Inline selector for switching between user accounts and wallets.\n// Shows the currently selected account name (and wallet chain) with a\n// small chevron. Expands to a dropdown with nested wallet rows on click.\n\nimport { useRef, useState, useEffect } from 'react';\nimport type { Account, Wallet } from '../types';\nimport { useSwypeConfig } from '../context';\n\ninterface AccountDropdownProps {\n accounts: Account[];\n selectedAccountId: string | null;\n onSelect: (accountId: string) => void;\n /** Currently selected wallet ID (for wallet-level selection). */\n selectedWalletId?: string | null;\n /** Called when a specific wallet is selected. Sets both account + wallet. */\n onWalletSelect?: (accountId: string, walletId: string) => void;\n}\n\nexport function AccountDropdown({\n accounts,\n selectedAccountId,\n onSelect,\n selectedWalletId,\n onWalletSelect,\n}: AccountDropdownProps) {\n const { tokens } = useSwypeConfig();\n const [open, setOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const selected = accounts.find((a) => a.id === selectedAccountId);\n\n // Resolve the currently selected wallet for display\n const selectedWallet: Wallet | undefined = selected?.wallets.find(\n (w) => w.id === selectedWalletId,\n );\n\n // Close on outside click\n useEffect(() => {\n if (!open) return;\n const handleClick = (e: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(e.target as Node)\n ) {\n setOpen(false);\n }\n };\n document.addEventListener('mousedown', handleClick);\n return () => document.removeEventListener('mousedown', handleClick);\n }, [open]);\n\n if (accounts.length === 0) return null;\n\n // Determine whether the dropdown has anything useful to show.\n // Show a static label only when there's a single account with 0-1 wallets\n // (nothing to choose from). Otherwise render the full dropdown so the\n // user can pick an account or wallet.\n const hasMultipleChoices =\n accounts.length > 1 ||\n (accounts.length === 1 &&\n onWalletSelect &&\n accounts[0].wallets.filter((w) => w.balance.available.amount > 0).length > 1);\n\n if (!hasMultipleChoices) {\n return (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n fontSize: '0.85rem',\n color: tokens.textSecondary,\n }}\n >\n <span style={{ fontWeight: 500 }}>{accounts[0].name}</span>\n {(selectedWallet ?? accounts[0].wallets[0]) && (\n <span\n style={{\n fontSize: '0.75rem',\n color: tokens.textMuted,\n fontFamily: '\"SF Mono\", \"Fira Code\", monospace',\n }}\n >\n {selectedWallet\n ? `${selectedWallet.chain.name} · ${selectedWallet.name}`\n : accounts[0].wallets[0]?.name}\n </span>\n )}\n </div>\n );\n }\n\n // Aggregate balance display\n const getAccountBalance = (account: Account): string => {\n let total = 0;\n for (const w of account.wallets) {\n total += w.balance.available.amount;\n }\n return total > 0 ? `$${total.toFixed(2)}` : '';\n };\n\n const hasActiveWallet = (account: Account): boolean =>\n account.wallets.some((w) => w.status === 'ACTIVE');\n\n return (\n <div ref={containerRef} style={{ position: 'relative' }}>\n {/* Trigger */}\n <button\n onClick={() => setOpen(!open)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n background: 'transparent',\n border: 'none',\n cursor: 'pointer',\n padding: '4px 0',\n color: tokens.textSecondary,\n fontFamily: 'inherit',\n fontSize: '0.85rem',\n outline: 'none',\n }}\n >\n <span style={{ fontWeight: 500, color: tokens.text }}>\n {selected?.name ?? 'Select account'}\n </span>\n {(selectedWallet ?? selected?.wallets?.[0]) && (\n <span\n style={{\n fontSize: '0.75rem',\n color: tokens.textMuted,\n fontFamily: '\"SF Mono\", \"Fira Code\", monospace',\n }}\n >\n {selectedWallet\n ? `${selectedWallet.chain.name} · ${selectedWallet.name}`\n : selected!.wallets[0].name}\n </span>\n )}\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n style={{\n transform: open ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 0.15s ease',\n flexShrink: 0,\n }}\n >\n <path\n d=\"M7 10l5 5 5-5\"\n stroke={tokens.textMuted}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n\n {/* Dropdown */}\n {open && (\n <div\n style={{\n position: 'absolute',\n top: '100%',\n left: 0,\n right: 0,\n marginTop: '4px',\n background: tokens.bgCard,\n border: `1px solid ${tokens.border}`,\n borderRadius: tokens.radius,\n boxShadow: tokens.shadowLg,\n zIndex: 50,\n overflow: 'hidden',\n minWidth: '220px',\n }}\n >\n {accounts.map((account) => {\n const isAcctSelected = account.id === selectedAccountId;\n const balance = getAccountBalance(account);\n const active = hasActiveWallet(account);\n const walletsWithBalance = account.wallets.filter(\n (w) => w.balance.available.amount > 0,\n );\n const showWallets =\n onWalletSelect && walletsWithBalance.length > 0;\n\n return (\n <div key={account.id}>\n {/* Account header row */}\n <button\n onClick={() => {\n onSelect(account.id);\n if (!showWallets) setOpen(false);\n }}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n padding: '10px 14px',\n background:\n isAcctSelected && !selectedWalletId\n ? tokens.accent + '12'\n : 'transparent',\n border: 'none',\n borderBottom: showWallets\n ? 'none'\n : `1px solid ${tokens.border}`,\n cursor: 'pointer',\n color: tokens.text,\n fontFamily: 'inherit',\n fontSize: '0.85rem',\n textAlign: 'left',\n outline: 'none',\n transition: 'background 0.1s ease',\n }}\n >\n <div style={{ minWidth: 0, flex: 1 }}>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n }}\n >\n <span style={{ fontWeight: 500 }}>\n {account.name}\n </span>\n {active && (\n <span\n style={{\n fontSize: '0.6rem',\n fontWeight: 600,\n color: tokens.success,\n background: tokens.successBg,\n padding: '1px 5px',\n borderRadius: '3px',\n textTransform: 'uppercase',\n letterSpacing: '0.03em',\n }}\n >\n Active\n </span>\n )}\n </div>\n {balance && (\n <div\n style={{\n fontSize: '0.75rem',\n color: tokens.textMuted,\n marginTop: '2px',\n }}\n >\n {balance}\n </div>\n )}\n </div>\n\n {isAcctSelected && !selectedWalletId && (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n style={{ flexShrink: 0, marginLeft: '8px' }}\n >\n <path\n d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\"\n fill={tokens.accent}\n />\n </svg>\n )}\n </button>\n\n {/* Nested wallet rows */}\n {showWallets &&\n walletsWithBalance.map((wallet, wIdx) => {\n const isWalletSelected =\n isAcctSelected && wallet.id === selectedWalletId;\n const walletBal =\n wallet.balance.available.amount > 0\n ? `$${wallet.balance.available.amount.toFixed(2)}`\n : '';\n const isLastWallet =\n wIdx === walletsWithBalance.length - 1;\n\n return (\n <button\n key={wallet.id}\n onClick={() => {\n onWalletSelect(account.id, wallet.id);\n setOpen(false);\n }}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n padding: '8px 14px 8px 28px',\n background: isWalletSelected\n ? tokens.accent + '12'\n : 'transparent',\n border: 'none',\n borderBottom: isLastWallet\n ? `1px solid ${tokens.border}`\n : 'none',\n cursor: 'pointer',\n color: tokens.text,\n fontFamily: 'inherit',\n fontSize: '0.8rem',\n textAlign: 'left',\n outline: 'none',\n transition: 'background 0.1s ease',\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n minWidth: 0,\n flex: 1,\n }}\n >\n <span\n style={{\n fontWeight: 500,\n fontSize: '0.8rem',\n }}\n >\n {wallet.chain.name}\n </span>\n <span\n style={{\n fontSize: '0.7rem',\n color: tokens.textMuted,\n fontFamily:\n '\"SF Mono\", \"Fira Code\", monospace',\n }}\n >\n {wallet.name}\n </span>\n {walletBal && (\n <span\n style={{\n fontSize: '0.7rem',\n color: tokens.textMuted,\n marginLeft: 'auto',\n }}\n >\n {walletBal}\n </span>\n )}\n </div>\n\n {isWalletSelected && (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n style={{\n flexShrink: 0,\n marginLeft: '8px',\n }}\n >\n <path\n d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\"\n fill={tokens.accent}\n />\n </svg>\n )}\n </button>\n );\n })}\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n","// ── Advanced Settings Panel ───────────────────────────────────────────\n// Collapsible panel that lets power users choose asset, chain, or\n// connect a new account. Hidden in basic mode.\n\nimport { useState } from 'react';\nimport type { AdvancedSettings as AdvancedSettingsType, Chain, Provider } from '../types';\nimport { useSwypeConfig } from '../context';\nimport { ProviderCard } from './ProviderCard';\n\n/** Supported stablecoin assets */\nconst ASSETS = ['USDC', 'USDT'] as const;\n\ninterface AdvancedSettingsProps {\n settings: AdvancedSettingsType;\n onChange: (settings: AdvancedSettingsType) => void;\n chains: Chain[];\n providers: Provider[];\n /** When the user picks a provider to connect a new account */\n onConnectNewAccount: (providerId: string) => void;\n /** Whether the \"connect new account\" flow is active */\n connectingNewAccount: boolean;\n}\n\nexport function AdvancedSettings({\n settings,\n onChange,\n chains,\n providers,\n onConnectNewAccount,\n connectingNewAccount,\n}: AdvancedSettingsProps) {\n const { tokens } = useSwypeConfig();\n const [open, setOpen] = useState(false);\n const [showProviders, setShowProviders] = useState(false);\n\n return (\n <div style={{ marginTop: '12px' }}>\n {/* Toggle */}\n <button\n onClick={() => setOpen(!open)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n background: 'transparent',\n border: 'none',\n cursor: 'pointer',\n padding: '4px 0',\n color: tokens.textMuted,\n fontFamily: 'inherit',\n fontSize: '0.8rem',\n fontWeight: 500,\n outline: 'none',\n letterSpacing: '0.02em',\n }}\n >\n <svg\n width=\"10\"\n height=\"10\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n style={{\n transform: open ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 0.15s ease',\n }}\n >\n <path\n d=\"M7 10l5 5 5-5\"\n stroke={tokens.textMuted}\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n Advanced options\n </button>\n\n {/* Panel */}\n {open && (\n <div\n style={{\n marginTop: '10px',\n padding: '14px',\n background: tokens.bgInput,\n borderRadius: tokens.radius,\n border: `1px solid ${tokens.border}`,\n }}\n >\n {/* Asset chips */}\n <div style={{ marginBottom: '14px' }}>\n <label\n style={{\n display: 'block',\n fontSize: '0.7rem',\n fontWeight: 600,\n color: tokens.textMuted,\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n marginBottom: '6px',\n }}\n >\n Asset\n </label>\n <div style={{ display: 'flex', gap: '6px' }}>\n {ASSETS.map((asset) => {\n const isSelected = settings.asset === asset;\n return (\n <button\n key={asset}\n onClick={() =>\n onChange({\n ...settings,\n asset: isSelected ? null : asset,\n })\n }\n style={{\n padding: '6px 14px',\n fontSize: '0.8rem',\n fontWeight: 600,\n fontFamily: 'inherit',\n borderRadius: '6px',\n border: `1.5px solid ${isSelected ? tokens.accent : tokens.border}`,\n background: isSelected\n ? tokens.accent + '18'\n : 'transparent',\n color: isSelected ? tokens.accent : tokens.text,\n cursor: 'pointer',\n outline: 'none',\n transition: 'all 0.12s ease',\n }}\n >\n {asset}\n </button>\n );\n })}\n </div>\n </div>\n\n {/* Chain chips */}\n {chains.length > 0 && (\n <div style={{ marginBottom: '14px' }}>\n <label\n style={{\n display: 'block',\n fontSize: '0.7rem',\n fontWeight: 600,\n color: tokens.textMuted,\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n marginBottom: '6px',\n }}\n >\n Chain\n </label>\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: '6px' }}>\n {chains.map((chain) => {\n const isSelected = settings.chain === chain.name;\n return (\n <button\n key={chain.id}\n onClick={() =>\n onChange({\n ...settings,\n chain: isSelected ? null : chain.name,\n })\n }\n style={{\n padding: '6px 14px',\n fontSize: '0.8rem',\n fontWeight: 600,\n fontFamily: 'inherit',\n borderRadius: '6px',\n border: `1.5px solid ${isSelected ? tokens.accent : tokens.border}`,\n background: isSelected\n ? tokens.accent + '18'\n : 'transparent',\n color: isSelected ? tokens.accent : tokens.text,\n cursor: 'pointer',\n outline: 'none',\n transition: 'all 0.12s ease',\n }}\n >\n {chain.name}\n </button>\n );\n })}\n </div>\n </div>\n )}\n\n {/* Connect new account */}\n <div>\n {!showProviders ? (\n <button\n onClick={() => setShowProviders(true)}\n disabled={connectingNewAccount}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n background: 'transparent',\n border: `1px dashed ${tokens.border}`,\n borderRadius: tokens.radius,\n padding: '10px 14px',\n width: '100%',\n cursor: connectingNewAccount ? 'not-allowed' : 'pointer',\n color: tokens.textSecondary,\n fontFamily: 'inherit',\n fontSize: '0.825rem',\n fontWeight: 500,\n outline: 'none',\n opacity: connectingNewAccount ? 0.5 : 1,\n transition: 'opacity 0.1s ease',\n }}\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <path\n d=\"M12 5v14M5 12h14\"\n stroke={tokens.textMuted}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n Connect new account\n </button>\n ) : (\n <div>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: '8px',\n }}\n >\n <label\n style={{\n fontSize: '0.7rem',\n fontWeight: 600,\n color: tokens.textMuted,\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n }}\n >\n Select provider\n </label>\n <button\n onClick={() => setShowProviders(false)}\n style={{\n background: 'transparent',\n border: 'none',\n cursor: 'pointer',\n color: tokens.textMuted,\n fontSize: '0.75rem',\n fontFamily: 'inherit',\n outline: 'none',\n padding: '2px 4px',\n }}\n >\n Cancel\n </button>\n </div>\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '6px',\n }}\n >\n {providers.map((p) => (\n <ProviderCard\n key={p.id}\n provider={p}\n selected={false}\n onClick={() => {\n onConnectNewAccount(p.id);\n setShowProviders(false);\n }}\n />\n ))}\n </div>\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n","// ── Swype Payment Widget ───────────────────────────────────────────────\n//\n// New flow: Login -> Enter Amount -> Ready (auto-select account) -> Processing -> Complete\n//\n// Basic mode: Apple Pay-style one-click pay. The backend returns accounts\n// sorted by ACTIVE status and balance, so the SDK just picks the first one.\n//\n// Advanced mode: lets power users choose asset, chain, or connect a new account.\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { usePrivy } from '@privy-io/react-auth';\n\nimport type {\n Account,\n AdvancedSettings as AdvancedSettingsType,\n Chain,\n Destination,\n PaymentStep,\n Provider,\n SourceOption,\n SourceType,\n Transfer,\n Wallet,\n} from './types';\nimport * as api from './api';\nimport { useSwypeConfig } from './context';\nimport { useAuthorizationExecutor, useTransferPolling, useTransferSigning, createPasskeyCredential } from './hooks';\nimport { Spinner } from './components/Spinner';\nimport { ProviderCard } from './components/ProviderCard';\nimport { AccountDropdown } from './components/AccountDropdown';\nimport { AdvancedSettings } from './components/AdvancedSettings';\n\nconst ACTIVE_CREDENTIAL_STORAGE_KEY = 'swype_active_credential_id';\n\n// ── Mobile detection ────────────────────────────────────────────────────\n\nfunction isMobile(): boolean {\n if (typeof navigator === 'undefined') return false;\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator.userAgent,\n );\n}\n\n// ── Smart default selection ──────────────────────────────────────────\n\n/**\n * Computes the best default account + wallet for the authorization flow.\n *\n * Priority 1: An ACTIVE wallet with a smart account type set (smart\n * account already created) whose balance covers the transfer amount.\n *\n * Priority 2: The wallet with the highest individual balance (across all\n * accounts), and its parent account.\n *\n * Returns { accountId, walletId } or null if no accounts exist.\n */\nfunction computeSmartDefaults(\n accts: Account[],\n transferAmount: number,\n): { accountId: string; walletId: string | null } | null {\n if (accts.length === 0) return null;\n\n // Priority 1: Previously authorized wallet with smart account\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 // Priority 2: Highest individual wallet balance, preferring ACTIVE wallets\n // as a tiebreaker so we don't accidentally pick a REQUIRES_AUTHORIZATION\n // wallet when balances are equal (e.g. all zero).\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\ninterface SelectSourceTokenChoice {\n tokenSymbol: string;\n balance: number;\n}\n\ninterface SelectSourceChainChoice {\n chainName: string;\n balance: number;\n tokens: SelectSourceTokenChoice[];\n}\n\nfunction 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\nfunction 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 = option.chainName;\n const tokenSymbol = option.tokenSymbol;\n const balance = parseRawBalance(option.rawBalance, option.decimals);\n\n let chainChoice: SelectSourceChainChoice;\n const existingChainIdx = chainIndexByName.get(chainName);\n\n if (existingChainIdx === undefined) {\n chainChoice = { chainName, balance: 0, tokens: [] };\n chainIndexByName.set(chainName, chainChoices.length);\n chainChoices.push(chainChoice);\n } else {\n chainChoice = chainChoices[existingChainIdx];\n }\n\n chainChoice.balance += balance;\n\n const existingToken = chainChoice.tokens.find((token) => token.tokenSymbol === tokenSymbol);\n if (existingToken) {\n existingToken.balance += balance;\n } else {\n chainChoice.tokens.push({ tokenSymbol, balance });\n }\n }\n\n return chainChoices;\n}\n\n// ── Props ──────────────────────────────────────────────────────────────\n\nexport interface SwypePaymentProps {\n /**\n * Where the funds go -- controlled by the host app (merchant).\n *\n * The merchant sets this prop and can update it at any time; the SDK\n * reads it reactively whenever a transfer is created.\n */\n destination: Destination;\n /** Called when the transfer reaches COMPLETED status */\n onComplete?: (transfer: Transfer) => void;\n /** Called on unrecoverable error */\n onError?: (error: string) => void;\n /**\n * Whether to use in-browser wallet connectors (wagmi) for authorization.\n *\n * - `true` — always use in-browser wallet connectors (desktop flow).\n * - `false` — always use deeplink redirects (webview / mobile flow).\n * - `undefined` (default) — auto-detect via user-agent (`isMobile()`).\n *\n * Set to `false` when rendering inside a WebView where browser-based\n * wallet extensions are unavailable.\n */\n useWalletConnector?: boolean;\n}\n\n// ── Component ──────────────────────────────────────────────────────────\n\nexport function SwypePayment({\n destination,\n onComplete,\n onError,\n useWalletConnector,\n}: SwypePaymentProps) {\n const { apiBaseUrl, tokens, depositAmount } = useSwypeConfig();\n const { ready, authenticated, login, getAccessToken } = usePrivy();\n\n // Flow state\n const [step, setStep] = useState<PaymentStep>('login');\n const [error, setError] = useState<string | null>(null);\n\n // Data\n const [providers, setProviders] = useState<Provider[]>([]);\n const [accounts, setAccounts] = useState<Account[]>([]);\n const [chains, setChains] = useState<Chain[]>([]);\n const [loadingData, setLoadingData] = useState(false);\n\n // Source selection\n const [selectedAccountId, setSelectedAccountId] = useState<string | null>(null);\n // Optional wallet-level selection within the selected account (for auth flow)\n const [selectedWalletId, setSelectedWalletId] = useState<string | null>(null);\n // When the user picks a provider to connect a new account\n const [selectedProviderId, setSelectedProviderId] = useState<string | null>(null);\n const [connectingNewAccount, setConnectingNewAccount] = useState(false);\n\n // Amount -- pre-populated from hook if available\n const [amount, setAmount] = useState<string>(\n depositAmount != null ? depositAmount.toString() : '',\n );\n\n // Advanced settings\n const [advancedSettings, setAdvancedSettings] = useState<AdvancedSettingsType>({\n asset: null,\n chain: null,\n });\n\n // Transfer\n const [transfer, setTransfer] = useState<Transfer | null>(null);\n const [creatingTransfer, setCreatingTransfer] = useState(false);\n\n // Passkey registration\n const [registeringPasskey, setRegisteringPasskey] = useState(false);\n const [activeCredentialId, setActiveCredentialId] = useState<string | null>(() => {\n if (typeof window === 'undefined') return null;\n return window.localStorage.getItem(ACTIVE_CREDENTIAL_STORAGE_KEY);\n });\n\n // Mobile flow\n const [mobileFlow, setMobileFlow] = useState(false);\n const pollingTransferIdRef = useRef<string | null>(null);\n const mobileSigningTransferIdRef = useRef<string | null>(null);\n const [selectSourceChainName, setSelectSourceChainName] = useState<string>('');\n const [selectSourceTokenSymbol, setSelectSourceTokenSymbol] = useState<string>('');\n const initializedSelectSourceActionRef = useRef<string | null>(null);\n\n // Hooks\n const authExecutor = useAuthorizationExecutor();\n const polling = useTransferPolling();\n const transferSigning = useTransferSigning();\n\n // Determine effective source type + id.\n // When a specific wallet is selected (wallet-level selection), use walletId\n // so the backend scopes authorization to that chain. Otherwise fall back\n // to accountId or providerId.\n const sourceType: SourceType = connectingNewAccount\n ? 'providerId'\n : selectedWalletId\n ? 'walletId'\n : selectedAccountId\n ? 'accountId'\n : 'providerId';\n const sourceId = connectingNewAccount\n ? (selectedProviderId ?? '')\n : selectedWalletId\n ? selectedWalletId\n : selectedAccountId\n ? selectedAccountId\n : (selectedProviderId ?? '');\n\n // ── Sync depositAmount from hook into local state ──────────────\n useEffect(() => {\n if (depositAmount != null) {\n setAmount(depositAmount.toString());\n }\n }, [depositAmount]);\n\n // ── Step transitions based on auth state ─────────────────────────\n\n useEffect(() => {\n if (!ready || !authenticated || step !== 'login') return;\n\n let cancelled = false;\n\n const checkPasskey = async () => {\n try {\n const token = await getAccessToken();\n if (!token || cancelled) return;\n\n const { config } = await api.fetchUserConfig(apiBaseUrl, token);\n\n if (cancelled) return;\n\n if (!config.passkey || !activeCredentialId) {\n // User has no passkey — prompt them to register one\n setStep('register-passkey');\n } else if (depositAmount != null && depositAmount > 0) {\n setStep('ready');\n } else {\n setStep('enter-amount');\n }\n } catch {\n // If config fetch fails, proceed to the normal flow so the user\n // isn't blocked. Passkey absence will be caught during transfer signing.\n if (!cancelled) {\n if (depositAmount != null && depositAmount > 0) {\n setStep('ready');\n } else {\n setStep('enter-amount');\n }\n }\n }\n };\n\n checkPasskey();\n return () => { cancelled = true; };\n }, [ready, authenticated, step, depositAmount, apiBaseUrl, getAccessToken, activeCredentialId]);\n\n // ── Load providers + accounts + chains as soon as authenticated ───\n // Fetching early (not gated on step) means balance data is available\n // on the enter-amount screen so the user can see how much they have.\n //\n // We use a ref to guard against concurrent fetches. Including\n // `loadingData` in the dependency array would cause the cleanup to\n // cancel the in-flight request when `setLoadingData(true)` triggers\n // a re-render.\n\n const loadingDataRef = useRef(false);\n\n useEffect(() => {\n if (!authenticated) return;\n if (accounts.length > 0 || loadingDataRef.current) return;\n\n let cancelled = false;\n loadingDataRef.current = true;\n\n const load = async () => {\n setLoadingData(true);\n setError(null);\n try {\n if (!activeCredentialId) {\n setStep('register-passkey');\n return;\n }\n const token = await getAccessToken();\n if (!token) throw new Error('Not authenticated');\n const [prov, accts, chn] = await Promise.all([\n api.fetchProviders(apiBaseUrl, token),\n api.fetchAccounts(apiBaseUrl, token, activeCredentialId),\n api.fetchChains(apiBaseUrl, token),\n ]);\n if (cancelled) return;\n setProviders(prov);\n setAccounts(accts);\n setChains(chn);\n\n // Smart-default: pick the best account + wallet based on\n // previous authorizations and balance.\n const parsedAmt = depositAmount != null ? depositAmount : 0;\n const defaults = computeSmartDefaults(accts, parsedAmt);\n if (defaults) {\n setSelectedAccountId(defaults.accountId);\n setSelectedWalletId(defaults.walletId);\n } else if (prov.length > 0) {\n // No accounts yet -- user needs to connect via a provider\n setSelectedProviderId(prov[0].id);\n }\n } catch (err) {\n if (!cancelled) {\n const msg =\n err instanceof Error ? err.message : 'Failed to load data';\n setError(msg);\n }\n } finally {\n if (!cancelled) {\n setLoadingData(false);\n loadingDataRef.current = false;\n }\n }\n };\n load();\n return () => {\n cancelled = true;\n loadingDataRef.current = false;\n };\n }, [authenticated, accounts.length, apiBaseUrl, getAccessToken, activeCredentialId]);\n\n // ── Poll completion handler ──────────────────────────────────────\n\n useEffect(() => {\n if (!polling.transfer) return;\n if (polling.transfer.status === 'COMPLETED') {\n setStep('complete');\n setTransfer(polling.transfer);\n onComplete?.(polling.transfer);\n } else if (polling.transfer.status === 'FAILED') {\n setStep('complete');\n setTransfer(polling.transfer);\n setError('Transfer failed.');\n }\n }, [polling.transfer, onComplete]);\n\n // ── Mobile flow: auto-trigger passkey signing after auth ──────────\n useEffect(() => {\n if (!mobileFlow) return;\n const polledTransfer = polling.transfer;\n if (!polledTransfer) return;\n if (polledTransfer.status !== 'AUTHORIZED') return;\n if (transferSigning.signing) return;\n\n // Ensure we only prompt passkey once per transfer in mobile flow.\n if (mobileSigningTransferIdRef.current === polledTransfer.id) return;\n mobileSigningTransferIdRef.current = polledTransfer.id;\n\n const sign = async () => {\n try {\n const signedTransfer = await transferSigning.signTransfer(polledTransfer.id);\n setTransfer(signedTransfer);\n } catch (err) {\n // Allow retries if signing fails/cancels.\n mobileSigningTransferIdRef.current = null;\n const msg = err instanceof Error ? err.message : 'Failed to sign transfer';\n setError(msg);\n onError?.(msg);\n }\n };\n\n void sign();\n }, [mobileFlow, polling.transfer, transferSigning, onError]);\n\n // ── Resume polling when user returns from wallet app (mobile) ────\n\n useEffect(() => {\n if (!mobileFlow || !polling.isPolling) return;\n\n const handleVisibility = () => {\n if (document.visibilityState === 'visible') {\n if (pollingTransferIdRef.current) {\n polling.startPolling(pollingTransferIdRef.current);\n }\n }\n };\n\n document.addEventListener('visibilitychange', handleVisibility);\n return () => {\n document.removeEventListener('visibilitychange', handleVisibility);\n };\n }, [mobileFlow, polling]);\n\n 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 useEffect(() => {\n if (!pendingSelectSourceAction) {\n initializedSelectSourceActionRef.current = null;\n setSelectSourceChainName('');\n setSelectSourceTokenSymbol('');\n return;\n }\n\n if (initializedSelectSourceActionRef.current === pendingSelectSourceAction.id) {\n return;\n }\n\n const hasRecommendedOption =\n !!selectSourceRecommended &&\n selectSourceChoices.some(\n (chain) =>\n chain.chainName === selectSourceRecommended.chainName &&\n chain.tokens.some(\n (token) => token.tokenSymbol === selectSourceRecommended.tokenSymbol,\n ),\n );\n\n if (hasRecommendedOption && 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\n // ── Create transfer + execute auth + start polling ───────────────\n\n const handlePay = useCallback(async () => {\n const parsedAmount = parseFloat(amount);\n if (isNaN(parsedAmount) || parsedAmount <= 0) {\n setError('Enter a valid amount.');\n return;\n }\n if (!sourceId) {\n setError('No account or provider selected.');\n return;\n }\n if (!activeCredentialId) {\n setError('Create a passkey on this device before continuing.');\n setStep('register-passkey');\n return;\n }\n\n setStep('processing');\n setError(null);\n setCreatingTransfer(true);\n setMobileFlow(false);\n\n try {\n const token = await getAccessToken();\n if (!token) throw new Error('Not authenticated');\n\n let effectiveSourceType = sourceType;\n let effectiveSourceId = sourceId;\n\n if (effectiveSourceType === 'accountId') {\n const acct = accounts.find((a) => a.id === effectiveSourceId);\n const activeWallet = acct?.wallets.find((w) => w.status === 'ACTIVE');\n if (activeWallet) {\n effectiveSourceType = 'walletId';\n effectiveSourceId = activeWallet.id;\n }\n }\n\n // Prefer an ACTIVE wallet with sufficient funds to avoid\n // unnecessary authorization redirects (e.g. deeplink to MetaMask).\n const isActiveWallet = effectiveSourceType === 'walletId' &&\n accounts.some((a) =>\n a.wallets.some((w) => w.id === effectiveSourceId && w.status === 'ACTIVE'),\n );\n\n if (!isActiveWallet) {\n let found = false;\n for (const acct of accounts) {\n for (const wallet of acct.wallets) {\n if (\n wallet.status === 'ACTIVE' &&\n wallet.sources.some((s) => s.balance.available.amount >= parsedAmount)\n ) {\n effectiveSourceType = 'walletId';\n effectiveSourceId = wallet.id;\n found = true;\n break;\n }\n }\n if (found) break;\n }\n }\n\n const t = await api.createTransfer(apiBaseUrl, token, {\n credentialId: activeCredentialId,\n sourceType: effectiveSourceType,\n sourceId: effectiveSourceId,\n destination,\n amount: parsedAmount,\n });\n setTransfer(t);\n\n if (t.authorizationSessions && t.authorizationSessions.length > 0) {\n const shouldUseWalletConnector = useWalletConnector ?? !isMobile();\n\n if (!shouldUseWalletConnector) {\n // Webview / mobile: redirect to the wallet deeplink and poll for completion.\n setMobileFlow(true);\n pollingTransferIdRef.current = t.id;\n polling.startPolling(t.id);\n window.location.href = t.authorizationSessions[0].uri;\n return;\n } else {\n // Desktop: execute the authorization session in-browser\n await authExecutor.executeSession(t);\n }\n }\n\n // After auth completes, sign the transfer with the user's passkey.\n // The hook polls for the signPayload, prompts WebAuthn, and submits.\n const signedTransfer = await transferSigning.signTransfer(t.id);\n setTransfer(signedTransfer);\n polling.startPolling(t.id);\n } catch (err) {\n const msg =\n err instanceof Error ? err.message : 'Transfer failed';\n setError(msg);\n onError?.(msg);\n setStep('ready');\n } finally {\n setCreatingTransfer(false);\n }\n }, [\n amount,\n sourceId,\n sourceType,\n activeCredentialId,\n destination,\n apiBaseUrl,\n getAccessToken,\n accounts,\n authExecutor,\n transferSigning,\n polling,\n onError,\n useWalletConnector,\n ]);\n\n // ── Restart ──────────────────────────────────────────────────────\n\n const handleNewPayment = () => {\n setStep('ready');\n setTransfer(null);\n setError(null);\n setAmount(depositAmount != null ? depositAmount.toString() : '');\n setMobileFlow(false);\n pollingTransferIdRef.current = null;\n mobileSigningTransferIdRef.current = null;\n setConnectingNewAccount(false);\n setSelectedWalletId(null);\n setAdvancedSettings({ asset: null, chain: null });\n if (accounts.length > 0) setSelectedAccountId(accounts[0].id);\n };\n\n // ── Handle \"connect new account\" from advanced panel ─────────────\n\n const handleConnectNewAccount = (providerId: string) => {\n setSelectedProviderId(providerId);\n setSelectedAccountId(null);\n setConnectingNewAccount(true);\n };\n\n // ── Shared styles ────────────────────────────────────────────────\n\n const cardStyle: React.CSSProperties = {\n background: tokens.bgCard,\n borderRadius: tokens.radiusLg,\n border: `1px solid ${tokens.border}`,\n padding: '28px 24px',\n maxWidth: 420,\n width: '100%',\n boxShadow: tokens.shadowLg,\n fontFamily:\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n color: tokens.text,\n };\n\n const headingStyle: React.CSSProperties = {\n fontSize: '1.2rem',\n fontWeight: 600,\n margin: '0 0 20px 0',\n color: tokens.text,\n textAlign: 'center',\n };\n\n const btnPrimary: React.CSSProperties = {\n width: '100%',\n padding: '14px',\n background: tokens.accent,\n color: tokens.accentText,\n border: 'none',\n borderRadius: tokens.radius,\n fontSize: '1rem',\n fontWeight: 600,\n cursor: 'pointer',\n transition: 'background 0.15s ease',\n fontFamily: 'inherit',\n };\n\n const btnDisabled: React.CSSProperties = {\n ...btnPrimary,\n opacity: 0.5,\n cursor: 'not-allowed',\n };\n\n const btnSecondary: React.CSSProperties = {\n ...btnPrimary,\n background: 'transparent',\n color: tokens.textSecondary,\n border: `1px solid ${tokens.border}`,\n width: 'auto',\n flex: '0 0 auto',\n padding: '14px 20px',\n };\n\n const errorStyle: React.CSSProperties = {\n background: tokens.errorBg,\n border: `1px solid ${tokens.error}`,\n borderRadius: tokens.radius,\n padding: '10px 14px',\n color: tokens.error,\n fontSize: '0.825rem',\n marginBottom: '14px',\n lineHeight: 1.5,\n };\n\n const stepBadge = (label: string) => (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n marginBottom: '20px',\n }}\n >\n <div\n style={{\n width: 6,\n height: 6,\n borderRadius: '50%',\n background: tokens.accent,\n }}\n />\n <span\n style={{\n fontSize: '0.75rem',\n textTransform: 'uppercase',\n letterSpacing: '0.06em',\n color: tokens.textMuted,\n fontWeight: 600,\n }}\n >\n {label}\n </span>\n </div>\n );\n\n const displayedSelectSourceChoices =\n selectSourceChoices.length > 0\n ? selectSourceChoices\n : [\n {\n chainName: 'Base',\n balance: 0,\n tokens: [{ tokenSymbol: 'USDC', balance: 0 }],\n },\n ];\n\n const selectedChainChoice =\n displayedSelectSourceChoices.find(\n (choice) => choice.chainName === selectSourceChainName,\n ) ?? displayedSelectSourceChoices[0];\n\n const selectSourceTokenChoices = selectedChainChoice?.tokens ?? [];\n const resolvedSelectSourceChainName =\n selectedChainChoice?.chainName ?? selectSourceChainName;\n const resolvedSelectSourceTokenSymbol =\n selectSourceTokenChoices.find(\n (token) => token.tokenSymbol === selectSourceTokenSymbol,\n )?.tokenSymbol ?? selectSourceTokenChoices[0]?.tokenSymbol ?? '';\n const canConfirmSelectSource =\n !!resolvedSelectSourceChainName && !!resolvedSelectSourceTokenSymbol;\n\n const handleSelectSourceChainChange = (chainName: string) => {\n setSelectSourceChainName(chainName);\n\n const nextChain = displayedSelectSourceChoices.find(\n (choice) => choice.chainName === chainName,\n );\n if (!nextChain || nextChain.tokens.length === 0) {\n setSelectSourceTokenSymbol('');\n return;\n }\n\n const recommendedTokenForChain =\n selectSourceRecommended?.chainName === chainName\n ? selectSourceRecommended.tokenSymbol\n : null;\n\n const hasRecommendedToken =\n !!recommendedTokenForChain &&\n nextChain.tokens.some((token) => token.tokenSymbol === recommendedTokenForChain);\n\n setSelectSourceTokenSymbol(\n hasRecommendedToken && recommendedTokenForChain\n ? recommendedTokenForChain\n : nextChain.tokens[0].tokenSymbol,\n );\n };\n\n // ── Render ───────────────────────────────────────────────────────\n\n if (!ready) {\n return (\n <div style={cardStyle}>\n <div style={{ textAlign: 'center', padding: '24px 0' }}>\n <Spinner label=\"Initializing...\" />\n </div>\n </div>\n );\n }\n\n // ── Step: Login ──────────────────────────────────────────────────\n\n if (step === 'login' && !authenticated) {\n return (\n <div style={cardStyle}>\n <div style={{ textAlign: 'center' }}>\n <svg\n width=\"48\"\n height=\"48\"\n viewBox=\"0 0 48 48\"\n fill=\"none\"\n style={{ margin: '0 auto 16px' }}\n >\n <rect width=\"48\" height=\"48\" rx=\"12\" fill={tokens.accent + '20'} />\n <path\n d=\"M24 14v20M14 24h20\"\n stroke={tokens.accent}\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n <h2 style={{ ...headingStyle, marginBottom: '8px' }}>\n Pay with Swype\n </h2>\n <p\n style={{\n fontSize: '0.875rem',\n color: tokens.textSecondary,\n margin: '0 0 24px 0',\n lineHeight: 1.5,\n }}\n >\n Connect your account to continue\n </p>\n <button style={btnPrimary} onClick={login}>\n Connect to Swype\n </button>\n </div>\n </div>\n );\n }\n\n // ── Step: Register Passkey ───────────────────────────────────────\n\n if (step === 'register-passkey') {\n const handleRegisterPasskey = async () => {\n setRegisteringPasskey(true);\n setError(null);\n try {\n const token = await getAccessToken();\n if (!token) throw new Error('Not authenticated');\n\n const { credentialId, publicKey } = await createPasskeyCredential('Swype User');\n await api.registerPasskey(apiBaseUrl, token, credentialId, publicKey);\n setActiveCredentialId(credentialId);\n window.localStorage.setItem(ACTIVE_CREDENTIAL_STORAGE_KEY, credentialId);\n\n // Passkey registered — proceed to the normal flow\n if (depositAmount != null && depositAmount > 0) {\n setStep('ready');\n } else {\n setStep('enter-amount');\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : 'Failed to register passkey';\n setError(msg);\n } finally {\n setRegisteringPasskey(false);\n }\n };\n\n return (\n <div style={cardStyle}>\n <div style={{ textAlign: 'center' }}>\n <svg\n width=\"48\"\n height=\"48\"\n viewBox=\"0 0 48 48\"\n fill=\"none\"\n style={{ margin: '0 auto 16px' }}\n >\n <rect width=\"48\" height=\"48\" rx=\"12\" fill={tokens.accent + '20'} />\n <path\n d=\"M24 16c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm0 10c-4.42 0-8 1.79-8 4v2h16v-2c0-2.21-3.58-4-8-4z\"\n fill={tokens.accent}\n />\n </svg>\n <h2 style={{ ...headingStyle, marginBottom: '8px' }}>\n Set Up Passkey\n </h2>\n <p\n style={{\n fontSize: '0.875rem',\n color: tokens.textSecondary,\n margin: '0 0 24px 0',\n lineHeight: 1.5,\n }}\n >\n Create a passkey for secure, one-touch payments. This only needs to\n be done once.\n </p>\n\n {error && <div style={errorStyle}>{error}</div>}\n\n <button\n style={registeringPasskey ? btnDisabled : btnPrimary}\n disabled={registeringPasskey}\n onClick={handleRegisterPasskey}\n >\n {registeringPasskey ? 'Creating passkey...' : 'Create Passkey'}\n </button>\n </div>\n </div>\n );\n }\n\n // ── Step: Enter Amount ───────────────────────────────────────────\n\n if (step === 'enter-amount') {\n const parsedAmount = parseFloat(amount);\n const canContinue = !isNaN(parsedAmount) && parsedAmount > 0;\n\n // Compute the max single-source balance (highest individual token\n // balance across all wallets) — the most that could be pulled in\n // one transfer.\n let maxSourceBalance: number | null = null;\n for (const acct of accounts) {\n for (const wallet of acct.wallets) {\n for (const source of wallet.sources) {\n const bal = source.balance.available.amount;\n if (maxSourceBalance === null || bal > maxSourceBalance) {\n maxSourceBalance = bal;\n }\n }\n }\n }\n\n return (\n <div style={cardStyle}>\n {stepBadge('Enter amount')}\n <h2 style={headingStyle}>How much?</h2>\n\n {error && <div style={errorStyle}>{error}</div>}\n\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n background: tokens.bgInput,\n border: `1px solid ${tokens.border}`,\n borderRadius: tokens.radius,\n padding: '4px 14px 4px 4px',\n marginBottom: '8px',\n }}\n >\n <span\n style={{\n fontSize: '1.5rem',\n fontWeight: 600,\n color: tokens.textMuted,\n paddingLeft: '10px',\n userSelect: 'none',\n }}\n >\n $\n </span>\n <input\n type=\"number\"\n min=\"0.01\"\n step=\"0.01\"\n value={amount}\n onChange={(e) => setAmount(e.target.value)}\n placeholder=\"0.00\"\n style={{\n flex: 1,\n background: 'transparent',\n border: 'none',\n outline: 'none',\n color: tokens.text,\n fontSize: '1.5rem',\n fontWeight: 600,\n fontFamily: 'inherit',\n padding: '10px 0',\n }}\n autoFocus\n />\n <span\n style={{\n fontSize: '0.825rem',\n fontWeight: 600,\n color: tokens.textMuted,\n background: tokens.bgHover,\n padding: '4px 10px',\n borderRadius: '6px',\n }}\n >\n USD\n </span>\n </div>\n\n {/* Available balance */}\n <div\n style={{\n fontSize: '0.8rem',\n color: tokens.textMuted,\n marginBottom: '20px',\n paddingLeft: '2px',\n }}\n >\n {loadingData ? (\n <span>Loading balance...</span>\n ) : maxSourceBalance !== null && maxSourceBalance > 0 ? (\n <span>\n Available: <span style={{ fontWeight: 600, color: tokens.textSecondary }}>${maxSourceBalance.toFixed(2)}</span>\n </span>\n ) : null}\n </div>\n\n <button\n style={canContinue ? btnPrimary : btnDisabled}\n disabled={!canContinue}\n onClick={() => {\n setError(null);\n setStep('ready');\n }}\n >\n Continue\n </button>\n </div>\n );\n }\n\n // ── Step: Ready ──────────────────────────────────────────────────\n\n if (step === 'ready') {\n const parsedAmount = parseFloat(amount);\n const canPay =\n !isNaN(parsedAmount) && parsedAmount > 0 && !!sourceId && !loadingData;\n\n // No accounts exist — show first-time provider selection\n const noAccounts = !loadingData && accounts.length === 0;\n\n return (\n <div style={cardStyle}>\n {stepBadge('Review & pay')}\n\n {error && <div style={errorStyle}>{error}</div>}\n\n {loadingData ? (\n <div style={{ padding: '24px 0', textAlign: 'center' }}>\n <Spinner label=\"Loading...\" />\n </div>\n ) : (\n <>\n {/* Amount display */}\n <div\n style={{\n textAlign: 'center',\n marginBottom: '20px',\n }}\n >\n <div\n style={{\n fontSize: '2rem',\n fontWeight: 700,\n color: tokens.text,\n lineHeight: 1.2,\n }}\n >\n ${parsedAmount > 0 ? parsedAmount.toFixed(2) : '0.00'}\n </div>\n <button\n onClick={() => setStep('enter-amount')}\n style={{\n background: 'transparent',\n border: 'none',\n cursor: 'pointer',\n color: tokens.textMuted,\n fontSize: '0.75rem',\n fontFamily: 'inherit',\n outline: 'none',\n padding: '4px 8px',\n marginTop: '4px',\n }}\n >\n Change amount\n </button>\n </div>\n\n {/* Source summary */}\n <div\n style={{\n fontSize: '0.825rem',\n color: tokens.textSecondary,\n marginBottom: '16px',\n padding: '12px 14px',\n background: tokens.bgInput,\n borderRadius: tokens.radius,\n lineHeight: 1.7,\n }}\n >\n {/* Destination */}\n <div\n style={{ display: 'flex', justifyContent: 'space-between' }}\n >\n <span>To</span>\n <span\n style={{\n fontFamily: '\"SF Mono\", \"Fira Code\", monospace',\n fontSize: '0.8rem',\n }}\n >\n {destination.address.slice(0, 6)}...\n {destination.address.slice(-4)}\n </span>\n </div>\n <div\n style={{ display: 'flex', justifyContent: 'space-between' }}\n >\n <span>Token</span>\n <span style={{ fontWeight: 600 }}>\n {destination.token.symbol}\n </span>\n </div>\n\n {/* Source account - subtle dropdown */}\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n }}\n >\n <span>From</span>\n {noAccounts ? (\n <span style={{ fontWeight: 500, color: tokens.textMuted }}>\n New account\n </span>\n ) : (\n <AccountDropdown\n accounts={accounts}\n selectedAccountId={selectedAccountId}\n selectedWalletId={selectedWalletId}\n onSelect={(id) => {\n setSelectedAccountId(id);\n setSelectedWalletId(null);\n setConnectingNewAccount(false);\n setSelectedProviderId(null);\n }}\n onWalletSelect={(accountId, walletId) => {\n setSelectedAccountId(accountId);\n setSelectedWalletId(walletId);\n setConnectingNewAccount(false);\n setSelectedProviderId(null);\n }}\n />\n )}\n </div>\n </div>\n\n {/* First-time user: show provider cards */}\n {noAccounts && (\n <div style={{ marginBottom: '16px' }}>\n <label\n style={{\n display: 'block',\n fontSize: '0.8rem',\n color: tokens.textMuted,\n marginBottom: '8px',\n fontWeight: 500,\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n }}\n >\n Connect a wallet\n </label>\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n }}\n >\n {providers.map((p) => (\n <ProviderCard\n key={p.id}\n provider={p}\n selected={selectedProviderId === p.id}\n onClick={() => {\n setSelectedProviderId(p.id);\n setSelectedAccountId(null);\n setConnectingNewAccount(false);\n }}\n />\n ))}\n </div>\n </div>\n )}\n\n {/* Pay button */}\n <button\n style={canPay ? btnPrimary : btnDisabled}\n disabled={!canPay}\n onClick={handlePay}\n >\n Pay ${parsedAmount > 0 ? parsedAmount.toFixed(2) : '0.00'}\n </button>\n\n {/* Advanced settings */}\n {!noAccounts && (\n <AdvancedSettings\n settings={advancedSettings}\n onChange={setAdvancedSettings}\n chains={chains}\n providers={providers}\n onConnectNewAccount={handleConnectNewAccount}\n connectingNewAccount={connectingNewAccount}\n />\n )}\n </>\n )}\n </div>\n );\n }\n\n // ── Step: Processing ─────────────────────────────────────────────\n\n if (step === 'processing') {\n if (pendingSelectSourceAction) {\n const chainValue = resolvedSelectSourceChainName;\n const tokenValue = resolvedSelectSourceTokenSymbol;\n\n return (\n <div style={cardStyle}>\n {stepBadge('Select source')}\n <div style={{ textAlign: 'center', marginBottom: '16px' }}>\n <h2 style={{ ...headingStyle, marginBottom: '8px' }}>Select payment source</h2>\n <p\n style={{\n fontSize: '0.85rem',\n color: tokens.textSecondary,\n margin: 0,\n lineHeight: 1.5,\n }}\n >\n Confirm the chain and token to use for this transfer.\n </p>\n </div>\n\n <div\n style={{\n fontSize: '0.825rem',\n color: tokens.textSecondary,\n marginBottom: '16px',\n padding: '14px',\n background: tokens.bgInput,\n borderRadius: tokens.radius,\n border: `1px solid ${tokens.border}`,\n }}\n >\n <label\n htmlFor=\"swype-select-source-chain\"\n style={{\n display: 'block',\n fontSize: '0.75rem',\n fontWeight: 600,\n marginBottom: '6px',\n color: tokens.textMuted,\n textTransform: 'uppercase',\n letterSpacing: '0.04em',\n }}\n >\n Chain\n </label>\n <select\n id=\"swype-select-source-chain\"\n value={chainValue}\n onChange={(event) => handleSelectSourceChainChange(event.target.value)}\n style={{\n width: '100%',\n marginBottom: '12px',\n padding: '10px 12px',\n borderRadius: tokens.radius,\n border: `1px solid ${tokens.border}`,\n background: tokens.bgCard,\n color: tokens.text,\n fontFamily: 'inherit',\n fontSize: '0.875rem',\n outline: 'none',\n }}\n >\n {displayedSelectSourceChoices.map((chainChoice) => (\n <option key={chainChoice.chainName} value={chainChoice.chainName}>\n {chainChoice.chainName} (${chainChoice.balance.toFixed(2)})\n </option>\n ))}\n </select>\n\n <label\n htmlFor=\"swype-select-source-token\"\n style={{\n display: 'block',\n fontSize: '0.75rem',\n fontWeight: 600,\n marginBottom: '6px',\n color: tokens.textMuted,\n textTransform: 'uppercase',\n letterSpacing: '0.04em',\n }}\n >\n Token\n </label>\n <select\n id=\"swype-select-source-token\"\n value={tokenValue}\n onChange={(event) => setSelectSourceTokenSymbol(event.target.value)}\n style={{\n width: '100%',\n padding: '10px 12px',\n borderRadius: tokens.radius,\n border: `1px solid ${tokens.border}`,\n background: tokens.bgCard,\n color: tokens.text,\n fontFamily: 'inherit',\n fontSize: '0.875rem',\n outline: 'none',\n }}\n >\n {selectSourceTokenChoices.map((tokenChoice) => (\n <option key={tokenChoice.tokenSymbol} value={tokenChoice.tokenSymbol}>\n {tokenChoice.tokenSymbol} (${tokenChoice.balance.toFixed(2)})\n </option>\n ))}\n </select>\n </div>\n\n <button\n style={canConfirmSelectSource ? btnPrimary : btnDisabled}\n disabled={!canConfirmSelectSource}\n onClick={() => {\n if (!canConfirmSelectSource) return;\n authExecutor.resolveSelectSource({\n chainName: resolvedSelectSourceChainName,\n tokenSymbol: resolvedSelectSourceTokenSymbol,\n });\n }}\n >\n Confirm source\n </button>\n </div>\n );\n }\n\n // When the signing hook has a signPayload, show the transfer details\n // and a passkey prompt.\n if (transferSigning.signing && transferSigning.signPayload) {\n const payload = transferSigning.signPayload;\n\n return (\n <div style={cardStyle}>\n <div style={{ textAlign: 'center', padding: '16px 0' }}>\n <svg width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\" style={{ margin: '0 auto 16px' }}>\n <rect width=\"48\" height=\"48\" rx=\"12\" fill={tokens.accent + '20'} />\n <path d=\"M24 14v8M20 18h8M24 26v2M24 32v2\" stroke={tokens.accent} strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n <h2 style={{ ...headingStyle, marginBottom: '8px' }}>Authorize Transfer</h2>\n <p style={{ fontSize: '0.85rem', color: tokens.textSecondary, margin: '0 0 16px 0', lineHeight: 1.5 }}>\n Use your passkey to confirm this payment.\n </p>\n\n <div style={{ fontSize: '0.825rem', color: tokens.textSecondary, padding: '12px 14px', background: tokens.bgInput, borderRadius: tokens.radius, textAlign: 'left', lineHeight: 1.7, marginBottom: '16px' }}>\n {payload.amount && payload.tokenSymbol && (\n <div style={{ display: 'flex', justifyContent: 'space-between' }}>\n <span>Amount</span>\n <span style={{ fontWeight: 600, color: tokens.text }}>{payload.amount} {payload.tokenSymbol}</span>\n </div>\n )}\n {payload.bridgeRelayAddress && (\n <div style={{ display: 'flex', justifyContent: 'space-between' }}>\n <span>Bridge relay</span>\n <span style={{ fontFamily: '\"SF Mono\", \"Fira Code\", monospace', fontSize: '0.75rem' }}>\n {payload.bridgeRelayAddress.slice(0, 6)}...{payload.bridgeRelayAddress.slice(-4)}\n </span>\n </div>\n )}\n {payload.estimatedFeeUsd && (\n <div style={{ display: 'flex', justifyContent: 'space-between' }}>\n <span>Est. fee</span>\n <span style={{ fontWeight: 600 }}>${payload.estimatedFeeUsd}</span>\n </div>\n )}\n </div>\n\n <Spinner label=\"Waiting for passkey...\" />\n </div>\n </div>\n );\n }\n\n // Determine the current registration step for informative messages\n const currentActionType = authExecutor.currentAction?.type;\n\n const getRegistrationMessage = (): { label: string; description: string } => {\n switch (currentActionType) {\n case 'CREATE_SMART_ACCOUNT':\n return {\n label: 'Creating your smart account...',\n description: 'Setting up your smart account for gasless payments.',\n };\n case 'APPROVE_PERMIT2':\n return {\n label: 'Approving token access...',\n description:\n 'Approve the prompt in your wallet to allow secure token transfers.',\n };\n case 'SIGN_PERMIT2':\n return {\n label: 'Signing transfer permission...',\n description: 'Sign the permit to allow your smart account to transfer tokens on your behalf.',\n };\n default:\n return { label: '', description: '' };\n }\n };\n\n const regMsg = getRegistrationMessage();\n\n const statusLabel = creatingTransfer\n ? 'Creating transfer...'\n : mobileFlow\n ? 'Waiting for authorization...'\n : authExecutor.executing && regMsg.label\n ? regMsg.label\n : authExecutor.executing\n ? 'Authorizing...'\n : transferSigning.signing\n ? 'Preparing transfer...'\n : polling.isPolling\n ? 'Processing payment...'\n : 'Please wait...';\n\n const statusDescription = creatingTransfer\n ? 'Setting up your transfer...'\n : mobileFlow\n ? 'Complete the authorization in your wallet app, then return here.'\n : authExecutor.executing && regMsg.description\n ? regMsg.description\n : authExecutor.executing\n ? 'Complete the wallet prompts to authorize this payment.'\n : transferSigning.signing\n ? 'Waiting for backend to prepare your transfer payload...'\n : polling.isPolling\n ? 'Your payment is being processed. This usually takes a few moments.'\n : 'Hang tight...';\n\n return (\n <div style={cardStyle}>\n <div style={{ textAlign: 'center', padding: '16px 0' }}>\n <Spinner size={48} />\n <h2\n style={{\n ...headingStyle,\n marginTop: '20px',\n marginBottom: '8px',\n }}\n >\n {statusLabel}\n </h2>\n <p\n style={{\n fontSize: '0.85rem',\n color: tokens.textSecondary,\n margin: 0,\n lineHeight: 1.5,\n }}\n >\n {statusDescription}\n </p>\n\n {/* Desktop: show action-by-action progress */}\n {!mobileFlow && authExecutor.results.length > 0 && (\n <div style={{ marginTop: '20px', textAlign: 'left' }}>\n {authExecutor.results.map((r) => (\n <div\n key={r.actionId}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '6px 0',\n fontSize: '0.8rem',\n color:\n r.status === 'success' ? tokens.success : tokens.error,\n }}\n >\n <span>\n {r.status === 'success' ? '\\u2713' : '\\u2717'}\n </span>\n <span>{r.type.replace(/_/g, ' ')}</span>\n </div>\n ))}\n </div>\n )}\n\n {(error || authExecutor.error || transferSigning.error || polling.error) && (\n <div\n style={{ ...errorStyle, marginTop: '16px', textAlign: 'left' }}\n >\n {error || authExecutor.error || transferSigning.error || polling.error}\n </div>\n )}\n </div>\n </div>\n );\n }\n\n // ── Step: Complete ───────────────────────────────────────────────\n\n if (step === 'complete') {\n const succeeded = transfer?.status === 'COMPLETED';\n\n return (\n <div style={cardStyle}>\n <div style={{ textAlign: 'center' }}>\n <div\n style={{\n width: 56,\n height: 56,\n borderRadius: '50%',\n background: succeeded\n ? tokens.success + '20'\n : tokens.error + '20',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n margin: '0 auto 16px',\n }}\n >\n {succeeded ? (\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\"\n fill={tokens.success}\n />\n </svg>\n ) : (\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M18.3 5.71L12 12.01 5.7 5.71 4.29 7.12l6.3 6.3-6.3 6.29 1.41 1.41 6.3-6.29 6.29 6.29 1.41-1.41-6.29-6.29 6.29-6.3-1.41-1.41z\"\n fill={tokens.error}\n />\n </svg>\n )}\n </div>\n\n <h2\n style={{\n ...headingStyle,\n marginBottom: '8px',\n color: succeeded ? tokens.success : tokens.error,\n }}\n >\n {succeeded ? 'Payment Complete' : 'Payment Failed'}\n </h2>\n\n {transfer && (\n <div\n style={{\n fontSize: '0.825rem',\n color: tokens.textSecondary,\n margin: '0 0 24px 0',\n padding: '14px',\n background: tokens.bgInput,\n borderRadius: tokens.radius,\n textAlign: 'left',\n lineHeight: 1.8,\n }}\n >\n <div\n style={{ display: 'flex', justifyContent: 'space-between' }}\n >\n <span>Amount</span>\n <span style={{ fontWeight: 600, color: tokens.text }}>\n ${transfer.amount?.amount?.toFixed(2)}{' '}\n {transfer.amount?.currency}\n </span>\n </div>\n <div\n style={{ display: 'flex', justifyContent: 'space-between' }}\n >\n <span>Status</span>\n <span\n style={{\n fontWeight: 600,\n color: succeeded ? tokens.success : tokens.error,\n }}\n >\n {transfer.status}\n </span>\n </div>\n <div\n style={{ display: 'flex', justifyContent: 'space-between' }}\n >\n <span>Transfer ID</span>\n <span\n style={{\n fontFamily: '\"SF Mono\", \"Fira Code\", monospace',\n fontSize: '0.75rem',\n }}\n >\n {transfer.id.slice(0, 8)}...\n </span>\n </div>\n </div>\n )}\n\n {error && (\n <div style={{ ...errorStyle, textAlign: 'left' }}>{error}</div>\n )}\n\n <button style={btnPrimary} onClick={handleNewPayment}>\n {succeeded ? 'Make Another Payment' : 'Try Again'}\n </button>\n </div>\n </div>\n );\n }\n\n // Fallback\n return null;\n}\n"]}
|