@swype-org/react-sdk 0.1.0
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 +1845 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +277 -0
- package/dist/index.d.ts +277 -0
- package/dist/index.js +1835 -0
- package/dist/index.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/theme.ts","../src/context.tsx","../src/api.ts","../src/hooks.ts","../src/components/Spinner.tsx","../src/components/ProviderCard.tsx","../src/components/AccountWalletSelector.tsx","../src/SwypePayment.tsx"],"names":["useRef","hexChainId","jsx","useState","jsxs","usePrivy","useEffect","useCallback"],"mappings":"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","file":"index.js","sourcesContent":["// ── Swype React SDK Theme Tokens ───────────────────────────────────────\nimport type { ThemeMode } from './types';\n\nexport interface ThemeTokens {\n // Surfaces\n bg: string;\n bgCard: string;\n bgInput: string;\n bgHover: string;\n bgOverlay: string;\n\n // Text\n text: string;\n textSecondary: string;\n textMuted: string;\n textInverse: string;\n\n // Borders\n border: string;\n borderFocus: string;\n\n // Accent\n accent: string;\n accentHover: string;\n accentText: string;\n\n // Semantic\n success: string;\n successBg: string;\n error: string;\n errorBg: string;\n\n // Shadows\n shadow: string;\n shadowLg: string;\n\n // Radius\n radius: string;\n radiusLg: string;\n}\n\nexport const darkTheme: ThemeTokens = {\n bg: '#0a0a0a',\n bgCard: '#141414',\n bgInput: '#1e1e1e',\n bgHover: '#252525',\n bgOverlay: 'rgba(0, 0, 0, 0.6)',\n\n text: '#f5f5f5',\n textSecondary: '#a1a1aa',\n textMuted: '#71717a',\n textInverse: '#09090b',\n\n border: '#27272a',\n borderFocus: '#3b82f6',\n\n accent: '#3b82f6',\n accentHover: '#2563eb',\n accentText: '#ffffff',\n\n success: '#22c55e',\n successBg: '#052e16',\n error: '#ef4444',\n errorBg: '#450a0a',\n\n shadow: '0 1px 3px rgba(0,0,0,0.4)',\n shadowLg: '0 8px 32px rgba(0,0,0,0.5)',\n\n radius: '10px',\n radiusLg: '16px',\n};\n\nexport const lightTheme: ThemeTokens = {\n bg: '#f8fafc',\n bgCard: '#ffffff',\n bgInput: '#f1f5f9',\n bgHover: '#e2e8f0',\n bgOverlay: 'rgba(0, 0, 0, 0.3)',\n\n text: '#0f172a',\n textSecondary: '#475569',\n textMuted: '#94a3b8',\n textInverse: '#ffffff',\n\n border: '#e2e8f0',\n borderFocus: '#3b82f6',\n\n accent: '#3b82f6',\n accentHover: '#2563eb',\n accentText: '#ffffff',\n\n success: '#16a34a',\n successBg: '#f0fdf4',\n error: '#dc2626',\n errorBg: '#fef2f2',\n\n shadow: '0 1px 3px rgba(0,0,0,0.08)',\n shadowLg: '0 8px 32px rgba(0,0,0,0.12)',\n\n radius: '10px',\n radiusLg: '16px',\n};\n\nexport function getTheme(mode: ThemeMode): ThemeTokens {\n return mode === 'dark' ? darkTheme : lightTheme;\n}\n","// ── Swype React SDK Context & Provider ─────────────────────────────────\nimport { createContext, useContext, useMemo, useRef } from 'react';\nimport { PrivyProvider } from '@privy-io/react-auth';\nimport { WagmiProvider, createConfig, http } from 'wagmi';\nimport { mainnet, arbitrum, base } from 'wagmi/chains';\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport type { ThemeMode } from './types';\nimport { getTheme, type ThemeTokens } from './theme';\n\n// ── Swype-owned Privy credentials ─────────────────────────────────────\n// These are internal to the SDK. Integrators never need to know about them.\n\n/** Swype's Privy App ID — all SDK users authenticate against this app. */\nconst SWYPE_PRIVY_APP_ID = 'cmlil87uv004n0ck0blwumwek';\n\n/**\n * Session isolation: Because the SDK uses Swype's own `appId` (distinct\n * from any integrator's `appId`), Privy automatically scopes storage\n * per app. If additional scoping within the same `appId` is ever needed,\n * create an App Client in the Privy dashboard and set `clientId` here.\n */\n\n// ── Default wagmi config ──────────────────────────────────────────────\n// Created once at module level so it's shared across all SwypeProvider\n// instances (there should only ever be one, but this is safe either way).\n\nconst wagmiConfig = createConfig({\n chains: [mainnet, arbitrum, base],\n transports: {\n [mainnet.id]: http(),\n [arbitrum.id]: http(),\n [base.id]: http(),\n },\n});\n\n// ── Swype SDK context ─────────────────────────────────────────────────\n\nexport interface SwypeConfig {\n apiBaseUrl: string;\n theme: ThemeMode;\n tokens: ThemeTokens;\n}\n\nconst SwypeContext = createContext<SwypeConfig | null>(null);\n\nexport interface SwypeProviderProps {\n /** Base URL for the Swype API (e.g. \"http://localhost:3000\") */\n apiBaseUrl: string;\n /** Light or dark mode */\n theme?: ThemeMode;\n children: React.ReactNode;\n}\n\n/**\n * Provides Swype SDK configuration and all required infrastructure\n * (Privy auth, wagmi, React Query) to child components.\n *\n * Must wrap any `<SwypePayment>` usage. The integrator does **not** need\n * to set up Privy, wagmi, or React Query — this provider handles it all.\n *\n * @example\n * ```tsx\n * <SwypeProvider apiBaseUrl=\"https://api.swype.com\">\n * <SwypePayment destination={dest} onComplete={handler} />\n * </SwypeProvider>\n * ```\n */\nexport function SwypeProvider({\n apiBaseUrl,\n theme = 'dark',\n children,\n}: SwypeProviderProps) {\n // Stable QueryClient across re-renders (created once per provider mount)\n const queryClientRef = useRef<QueryClient | null>(null);\n if (!queryClientRef.current) {\n queryClientRef.current = new QueryClient();\n }\n\n const value = useMemo<SwypeConfig>(\n () => ({\n apiBaseUrl,\n theme,\n tokens: getTheme(theme),\n }),\n [apiBaseUrl, theme],\n );\n\n return (\n <QueryClientProvider client={queryClientRef.current}>\n <WagmiProvider config={wagmiConfig}>\n <PrivyProvider\n appId={SWYPE_PRIVY_APP_ID}\n config={{\n appearance: {\n theme,\n },\n }}\n >\n <SwypeContext.Provider value={value}>\n {children}\n </SwypeContext.Provider>\n </PrivyProvider>\n </WagmiProvider>\n </QueryClientProvider>\n );\n}\n\n/** Access the Swype SDK configuration. Throws if used outside SwypeProvider. */\nexport function useSwypeConfig(): SwypeConfig {\n const ctx = useContext(SwypeContext);\n if (!ctx) {\n throw new Error('useSwypeConfig must be used within a <SwypeProvider>');\n }\n return ctx;\n}\n","// ── Swype React SDK API Client ─────────────────────────────────────────\nimport type {\n Provider,\n Chain,\n Account,\n Transfer,\n AuthorizationSessionDetail,\n ErrorResponse,\n ListResponse,\n SourceType,\n Destination,\n} from './types';\n\n/** Throw a descriptive error from an API response */\nasync function throwApiError(res: Response): Promise<never> {\n const body = (await res.json().catch(() => null)) as\n | (ErrorResponse & { error?: ErrorResponse })\n | null;\n const detail = body?.error ?? body;\n const msg = detail?.message ?? res.statusText;\n const code = detail?.code ?? String(res.status);\n throw new Error(`${res.status} — ${code}: ${msg}`);\n}\n\n// ── Providers ──────────────────────────────────────────────────────────\n\nexport async function fetchProviders(\n apiBaseUrl: string,\n token: string,\n): Promise<Provider[]> {\n const res = await fetch(`${apiBaseUrl}/v1/providers`, {\n headers: { Authorization: `Bearer ${token}` },\n });\n if (!res.ok) await throwApiError(res);\n const data = (await res.json()) as ListResponse<Provider>;\n return data.items;\n}\n\n// ── Chains ─────────────────────────────────────────────────────────────\n\nexport async function fetchChains(\n apiBaseUrl: string,\n token: string,\n): Promise<Chain[]> {\n const res = await fetch(`${apiBaseUrl}/v1/chains`, {\n headers: { Authorization: `Bearer ${token}` },\n });\n if (!res.ok) await throwApiError(res);\n const data = (await res.json()) as ListResponse<Chain>;\n return data.items;\n}\n\n// ── Accounts ───────────────────────────────────────────────────────────\n\nexport async function fetchAccounts(\n apiBaseUrl: string,\n token: string,\n): Promise<Account[]> {\n const res = await fetch(`${apiBaseUrl}/v1/accounts`, {\n headers: { Authorization: `Bearer ${token}` },\n });\n if (!res.ok) await throwApiError(res);\n const data = (await res.json()) as ListResponse<Account>;\n return data.items;\n}\n\n// ── Transfers ──────────────────────────────────────────────────────────\n\nexport interface CreateTransferParams {\n sourceType: SourceType;\n sourceId: string;\n destination: Destination;\n amount: number;\n currency?: string;\n}\n\nexport async function createTransfer(\n apiBaseUrl: string,\n token: string,\n params: CreateTransferParams,\n): Promise<Transfer> {\n const body = {\n id: crypto.randomUUID(),\n sources: [{ [params.sourceType]: params.sourceId }],\n destinations: [\n {\n chainId: params.destination.chainId,\n token: { symbol: params.destination.token.symbol },\n address: params.destination.address,\n },\n ],\n amount: {\n amount: params.amount,\n currency: params.currency ?? 'USD',\n },\n };\n\n const res = await fetch(`${apiBaseUrl}/v1/transfers`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify(body),\n });\n\n if (!res.ok) await throwApiError(res);\n return (await res.json()) as Transfer;\n}\n\nexport async function fetchTransfer(\n apiBaseUrl: string,\n token: string,\n transferId: string,\n): Promise<Transfer> {\n const res = await fetch(`${apiBaseUrl}/v1/transfers/${transferId}`, {\n headers: { Authorization: `Bearer ${token}` },\n });\n if (!res.ok) await throwApiError(res);\n return (await res.json()) as Transfer;\n}\n\n// ── Authorization Sessions & Actions ───────────────────────────────────\n\nexport async function fetchAuthorizationSession(\n apiBaseUrl: string,\n sessionId: string,\n): Promise<AuthorizationSessionDetail> {\n // This endpoint is unauthenticated\n const res = await fetch(\n `${apiBaseUrl}/v1/authorization-sessions/${sessionId}`,\n );\n if (!res.ok) await throwApiError(res);\n return (await res.json()) as AuthorizationSessionDetail;\n}\n\n// ── User Config ─────────────────────────────────────────────────────────\n\nexport async function updateUserConfig(\n apiBaseUrl: string,\n token: string,\n config: { defaultAllowance: number },\n): Promise<void> {\n const res = await fetch(`${apiBaseUrl}/v1/users`, {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify({ config }),\n });\n if (!res.ok) await throwApiError(res);\n}\n\nexport async function reportActionCompletion(\n apiBaseUrl: string,\n actionId: string,\n result: Record<string, unknown>,\n): Promise<AuthorizationSessionDetail> {\n const res = await fetch(\n `${apiBaseUrl}/v1/authorization-actions/${actionId}`,\n {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ status: 'COMPLETED', result }),\n },\n );\n if (!res.ok) await throwApiError(res);\n return (await res.json()) as AuthorizationSessionDetail;\n}\n","// ── Swype React SDK Hooks ──────────────────────────────────────────────\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useAccount, useConnect, useSwitchChain, useSignTypedData, usePublicClient, useWalletClient } from 'wagmi';\nimport { usePrivy } from '@privy-io/react-auth';\n\nimport type {\n AuthorizationAction,\n AuthorizationSessionDetail,\n ActionExecutionResult,\n Transfer,\n} from './types';\nimport * as api from './api';\nimport { useSwypeConfig } from './context';\n\n// Re-export useSwypeConfig for convenience\nexport { useSwypeConfig } from './context';\n\n// ── Transfer polling ───────────────────────────────────────────────────\n\nexport interface UseTransferPollingResult {\n transfer: Transfer | null;\n error: string | null;\n isPolling: boolean;\n startPolling: (transferId: string) => void;\n stopPolling: () => void;\n}\n\n/**\n * Polls GET /v1/transfers/{id} every `intervalMs` until status is\n * COMPLETED or FAILED.\n */\nexport function useTransferPolling(intervalMs = 3000): UseTransferPollingResult {\n const { apiBaseUrl } = useSwypeConfig();\n const { getAccessToken } = usePrivy();\n const [transfer, setTransfer] = useState<Transfer | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [isPolling, setIsPolling] = useState(false);\n const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const transferIdRef = useRef<string | null>(null);\n\n const stopPolling = useCallback(() => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n setIsPolling(false);\n }, []);\n\n const poll = useCallback(async () => {\n if (!transferIdRef.current) return;\n try {\n const token = await getAccessToken();\n if (!token) {\n setError('Could not get access token');\n stopPolling();\n return;\n }\n const t = await api.fetchTransfer(apiBaseUrl, token, transferIdRef.current);\n setTransfer(t);\n\n if (t.status === 'COMPLETED' || t.status === 'FAILED') {\n stopPolling();\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Polling error');\n stopPolling();\n }\n }, [apiBaseUrl, getAccessToken, stopPolling]);\n\n const startPolling = useCallback(\n (transferId: string) => {\n stopPolling();\n transferIdRef.current = transferId;\n setIsPolling(true);\n setError(null);\n // Fire immediately, then repeat\n poll();\n intervalRef.current = setInterval(poll, intervalMs);\n },\n [poll, intervalMs, stopPolling],\n );\n\n // Cleanup on unmount\n useEffect(() => () => stopPolling(), [stopPolling]);\n\n return { transfer, error, isPolling, startPolling, stopPolling };\n}\n\n// ── Authorization executor ─────────────────────────────────────────────\n\nexport interface UseAuthorizationExecutorResult {\n executing: boolean;\n results: ActionExecutionResult[];\n error: string | null;\n executeSession: (transfer: Transfer) => Promise<void>;\n}\n\n/**\n * Executes the full authorization flow for a transfer's first session:\n * fetches the session, walks through PENDING actions (OPEN_PROVIDER,\n * SWITCH_CHAIN, APPROVE_PERMIT_2, SIGN_PERMIT2), reports each completion\n * to the server, and chains new actions that appear.\n */\nexport function useAuthorizationExecutor(): UseAuthorizationExecutorResult {\n const { apiBaseUrl } = useSwypeConfig();\n const { address, chainId: currentChainId, isConnected } = useAccount();\n const { connectAsync, connectors } = useConnect();\n const { switchChainAsync } = useSwitchChain();\n const { signTypedDataAsync } = useSignTypedData();\n const publicClient = usePublicClient();\n const { data: walletClient } = useWalletClient();\n\n const [executing, setExecuting] = useState(false);\n const [results, setResults] = useState<ActionExecutionResult[]>([]);\n const [error, setError] = useState<string | null>(null);\n const executingRef = useRef(false);\n\n // ── Individual action executors ────────────────────────────────────\n\n const executeOpenProvider = useCallback(\n async (action: AuthorizationAction): Promise<ActionExecutionResult> => {\n try {\n if (isConnected && address) {\n const hexChainId = currentChainId\n ? `0x${currentChainId.toString(16)}`\n : undefined;\n return {\n actionId: action.id,\n type: action.type,\n status: 'success',\n message: `Connected. Account: ${address}, Chain: ${hexChainId}`,\n data: { accounts: [address], chainId: hexChainId },\n };\n }\n\n // Use the connector specified by the server (matches the user's chosen provider)\n const targetId = action.metadata?.wagmiConnectorId as string | undefined;\n const connector = targetId\n ? connectors.find((c) => c.id === targetId) ?? connectors[0]\n : connectors[0];\n\n if (!connector) {\n return {\n actionId: action.id,\n type: action.type,\n status: 'error',\n message: 'No wallet connector found. Please install a supported wallet.',\n };\n }\n\n const result = await connectAsync({ connector });\n const hexChainId = `0x${result.chainId.toString(16)}`;\n return {\n actionId: action.id,\n type: action.type,\n status: 'success',\n message: `Connected to ${connector.name}. Account: ${result.accounts[0]}, Chain: ${hexChainId}`,\n data: { accounts: [...result.accounts], chainId: hexChainId },\n };\n } catch (err) {\n return {\n actionId: action.id,\n type: action.type,\n status: 'error',\n message: err instanceof Error ? err.message : 'Failed to connect wallet',\n };\n }\n },\n [isConnected, address, currentChainId, connectors, connectAsync],\n );\n\n const executeSwitchChain = useCallback(\n async (action: AuthorizationAction): Promise<ActionExecutionResult> => {\n try {\n const targetChainIdHex = action.metadata?.targetChainId as string | undefined;\n if (!targetChainIdHex) {\n return {\n actionId: action.id,\n type: action.type,\n status: 'error',\n message: 'No targetChainId in action metadata.',\n };\n }\n const targetChainIdNum = parseInt(targetChainIdHex, 16);\n await switchChainAsync({ chainId: targetChainIdNum });\n const hexChainId = `0x${targetChainIdNum.toString(16)}`;\n return {\n actionId: action.id,\n type: action.type,\n status: 'success',\n message: `Switched to chain ${hexChainId}.`,\n data: { chainId: hexChainId, switched: true },\n };\n } catch (err) {\n return {\n actionId: action.id,\n type: action.type,\n status: 'error',\n message: err instanceof Error ? err.message : 'Failed to switch chain',\n };\n }\n },\n [switchChainAsync],\n );\n\n const executeApprovePermit2 = useCallback(\n async (action: AuthorizationAction): Promise<ActionExecutionResult> => {\n try {\n const tokenAddress = action.metadata?.tokenAddress as `0x${string}` | undefined;\n const permit2Address = action.metadata?.permit2Address as `0x${string}` | undefined;\n\n if (!tokenAddress || !permit2Address) {\n return {\n actionId: action.id,\n type: action.type,\n status: 'error',\n message: 'Missing tokenAddress or permit2Address in action metadata.',\n };\n }\n if (!address) {\n return {\n actionId: action.id,\n type: action.type,\n status: 'error',\n message: 'Wallet not connected.',\n };\n }\n\n const ERC20_ABI = [\n {\n name: 'allowance',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'owner', type: 'address' },\n { name: 'spender', type: 'address' },\n ],\n outputs: [{ name: '', type: 'uint256' }],\n },\n {\n name: 'approve',\n type: 'function',\n stateMutability: 'nonpayable',\n inputs: [\n { name: 'spender', type: 'address' },\n { name: 'amount', type: 'uint256' },\n ],\n outputs: [{ name: '', type: 'bool' }],\n },\n ] as const;\n\n if (publicClient) {\n const currentAllowance = await publicClient.readContract({\n address: tokenAddress,\n abi: ERC20_ABI,\n functionName: 'allowance',\n args: [address, permit2Address],\n });\n if (currentAllowance > 0n) {\n return {\n actionId: action.id,\n type: action.type,\n status: 'success',\n message: `Permit2 already approved (allowance: ${currentAllowance.toString()}). Skipped.`,\n data: { skipped: true, existingAllowance: currentAllowance.toString() },\n };\n }\n }\n\n if (!walletClient) {\n return {\n actionId: action.id,\n type: action.type,\n status: 'error',\n message: 'Wallet client not available.',\n };\n }\n\n const MAX_UINT256 = 2n ** 256n - 1n;\n const txHash = await walletClient.writeContract({\n address: tokenAddress,\n abi: ERC20_ABI,\n functionName: 'approve',\n args: [permit2Address, MAX_UINT256],\n });\n\n if (publicClient) {\n await publicClient.waitForTransactionReceipt({ hash: txHash });\n }\n\n return {\n actionId: action.id,\n type: action.type,\n status: 'success',\n message: `Permit2 approved. Tx: ${txHash}`,\n data: { txHash, approved: true },\n };\n } catch (err) {\n return {\n actionId: action.id,\n type: action.type,\n status: 'error',\n message: err instanceof Error ? err.message : 'Failed to approve Permit2',\n };\n }\n },\n [address, publicClient, walletClient],\n );\n\n const executeSignPermit2 = useCallback(\n async (action: AuthorizationAction): Promise<ActionExecutionResult> => {\n try {\n const PERMIT2_ADDRESS = '0x000000000022D473030F116dDEE9F6B43aC78BA3' as const;\n\n const PERMIT2_ALLOWANCE_ABI = [\n {\n name: 'allowance',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'owner', type: 'address' },\n { name: 'token', type: 'address' },\n { name: 'spender', type: 'address' },\n ],\n outputs: [\n { name: 'amount', type: 'uint160' },\n { name: 'expiration', type: 'uint48' },\n { name: 'nonce', type: 'uint48' },\n ],\n },\n ] as const;\n\n const spenderAddress = action.metadata?.spenderAddress as `0x${string}` | undefined;\n const tokenAddress = action.metadata?.tokenAddress as `0x${string}` | undefined;\n const metadataChainId = action.metadata?.chainId as string | undefined;\n const metadataAmount = action.metadata?.amount as number | null | undefined;\n\n if (!spenderAddress || !tokenAddress) {\n return {\n actionId: action.id,\n type: action.type,\n status: 'error',\n message: 'Missing spenderAddress or tokenAddress in action metadata.',\n };\n }\n\n // Check whether the Permit2 contract already has a sufficient\n // on-chain allowance for the spender. When it does, skip the\n // signature entirely — the server can pull tokens directly.\n if (publicClient && address && metadataAmount) {\n try {\n const [existingAmount, existingExpiration] = await publicClient.readContract({\n address: PERMIT2_ADDRESS,\n abi: PERMIT2_ALLOWANCE_ABI,\n functionName: 'allowance',\n args: [address, tokenAddress, spenderAddress],\n });\n\n // Convert the dollar amount to USDC smallest units (6 decimals).\n const requiredSmallestUnit = BigInt(\n Math.ceil(metadataAmount * 1_000_000),\n );\n const now = Math.floor(Date.now() / 1000);\n\n if (\n existingAmount >= requiredSmallestUnit &&\n existingExpiration > now\n ) {\n return {\n actionId: action.id,\n type: action.type,\n status: 'success',\n message: `Permit2 allowance already sufficient (${existingAmount.toString()}). Skipped.`,\n data: { skipped: true, existingAllowance: existingAmount.toString() },\n };\n }\n } catch {\n // If the on-chain check fails, fall through to signing.\n }\n }\n\n // The server computes the total Permit2 allowance (transfer amount\n // + user's top-up preference) and sends it as metadata.allowance.\n // The SDK uses that value directly, falling back to the transfer\n // amount or a legacy 5 USDC default.\n const metadataAllowance = action.metadata?.allowance as number | null | undefined;\n const permitAmount = metadataAllowance\n ? BigInt(Math.ceil(metadataAllowance * 1_000_000))\n : metadataAmount\n ? BigInt(Math.ceil(metadataAmount * 1_000_000))\n : BigInt(5_000_000);\n const permit2ChainId = metadataChainId\n ? parseInt(metadataChainId, 16)\n : currentChainId;\n const nonce = Number(action.metadata?.nonce ?? 0);\n const sigDeadline = BigInt(Math.floor(Date.now() / 1000) + 3600);\n const expiration = Math.floor(Date.now() / 1000) + 30 * 24 * 60 * 60;\n\n const signature = await signTypedDataAsync({\n domain: {\n name: 'Permit2',\n chainId: permit2ChainId,\n verifyingContract: PERMIT2_ADDRESS,\n },\n types: {\n PermitSingle: [\n { name: 'details', type: 'PermitDetails' },\n { name: 'spender', type: 'address' },\n { name: 'sigDeadline', type: 'uint256' },\n ],\n PermitDetails: [\n { name: 'token', type: 'address' },\n { name: 'amount', type: 'uint160' },\n { name: 'expiration', type: 'uint48' },\n { name: 'nonce', type: 'uint48' },\n ],\n },\n primaryType: 'PermitSingle',\n message: {\n details: {\n token: tokenAddress,\n amount: permitAmount,\n expiration,\n nonce,\n },\n spender: spenderAddress,\n sigDeadline,\n },\n });\n\n return {\n actionId: action.id,\n type: action.type,\n status: 'success',\n message: 'Permit2 allowance signature obtained.',\n data: {\n signature,\n signer: address,\n nonce: nonce.toString(),\n sigDeadline: sigDeadline.toString(),\n expiration: expiration.toString(),\n amount: permitAmount.toString(),\n },\n };\n } catch (err) {\n return {\n actionId: action.id,\n type: action.type,\n status: 'error',\n message: err instanceof Error ? err.message : 'Failed to sign Permit2',\n };\n }\n },\n [address, currentChainId, publicClient, signTypedDataAsync],\n );\n\n const executeAction = useCallback(\n async (action: AuthorizationAction): Promise<ActionExecutionResult> => {\n switch (action.type) {\n case 'OPEN_PROVIDER':\n return executeOpenProvider(action);\n case 'SWITCH_CHAIN':\n return executeSwitchChain(action);\n case 'APPROVE_PERMIT_2':\n return executeApprovePermit2(action);\n case 'SIGN_PERMIT2':\n return executeSignPermit2(action);\n default:\n return {\n actionId: action.id,\n type: action.type,\n status: 'error',\n message: `Unsupported action type: ${action.type}`,\n };\n }\n },\n [executeOpenProvider, executeSwitchChain, executeApprovePermit2, executeSignPermit2],\n );\n\n // ── Main session executor ──────────────────────────────────────────\n\n const executeSession = useCallback(\n async (transfer: Transfer) => {\n // Synchronous guard: prevent concurrent invocations so we never send\n // two wallet signing requests at the same time (wallets reject this).\n if (executingRef.current) return;\n executingRef.current = true;\n\n if (\n !transfer.authorizationSessions ||\n transfer.authorizationSessions.length === 0\n ) {\n setError('No authorization sessions available.');\n executingRef.current = false;\n return;\n }\n\n const sessionId = transfer.authorizationSessions[0].id;\n setExecuting(true);\n setError(null);\n setResults([]);\n\n try {\n let currentSession: AuthorizationSessionDetail =\n await api.fetchAuthorizationSession(apiBaseUrl, sessionId);\n\n const allResults: ActionExecutionResult[] = [];\n const completedActionIds = new Set<string>();\n\n let pendingActions = currentSession.actions\n .filter((a) => a.status === 'PENDING')\n .sort((a, b) => a.orderIndex - b.orderIndex);\n\n while (pendingActions.length > 0) {\n const action = pendingActions[0];\n if (completedActionIds.has(action.id)) break;\n\n const result = await executeAction(action);\n\n if (result.status === 'error') {\n allResults.push(result);\n setResults([...allResults]);\n setError(result.message);\n break;\n }\n\n completedActionIds.add(action.id);\n\n const updatedSession = await api.reportActionCompletion(\n apiBaseUrl,\n action.id,\n (result.data as Record<string, unknown>) ?? {},\n );\n\n currentSession = updatedSession;\n\n pendingActions = currentSession.actions\n .filter((a) => a.status === 'PENDING' && !completedActionIds.has(a.id))\n .sort((a, b) => a.orderIndex - b.orderIndex);\n\n // Chain remaining actions seamlessly after OPEN_PROVIDER\n if (action.type === 'OPEN_PROVIDER' && pendingActions.length > 0) {\n const chainResults: ActionExecutionResult[] = [result];\n let chainBroken = false;\n\n while (pendingActions.length > 0) {\n const nextAction = pendingActions[0];\n const nextResult = await executeAction(nextAction);\n\n if (nextResult.status === 'error') {\n chainResults.push(nextResult);\n allResults.push(...chainResults);\n setResults([...allResults]);\n setError(nextResult.message);\n chainBroken = true;\n break;\n }\n\n completedActionIds.add(nextAction.id);\n\n const nextSession = await api.reportActionCompletion(\n apiBaseUrl,\n nextAction.id,\n (nextResult.data as Record<string, unknown>) ?? {},\n );\n\n currentSession = nextSession;\n chainResults.push(nextResult);\n\n pendingActions = currentSession.actions\n .filter((a) => a.status === 'PENDING' && !completedActionIds.has(a.id))\n .sort((a, b) => a.orderIndex - b.orderIndex);\n }\n\n if (chainBroken) break;\n allResults.push(...chainResults);\n setResults([...allResults]);\n continue;\n }\n\n allResults.push(result);\n setResults([...allResults]);\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Authorization failed');\n } finally {\n setExecuting(false);\n executingRef.current = false;\n }\n },\n [apiBaseUrl, executeAction],\n );\n\n return { executing, results, error, executeSession };\n}\n","// ── Animated Spinner ───────────────────────────────────────────────────\nimport { useSwypeConfig } from '../context';\n\ninterface SpinnerProps {\n size?: number;\n label?: string;\n}\n\nexport function Spinner({ size = 40, label }: SpinnerProps) {\n const { tokens } = useSwypeConfig();\n\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '12px',\n }}\n >\n <div\n style={{\n width: size,\n height: size,\n border: `3px solid ${tokens.border}`,\n borderTopColor: tokens.accent,\n borderRadius: '50%',\n animation: 'swype-spin 0.8s linear infinite',\n }}\n />\n {label && (\n <p style={{ color: tokens.textSecondary, fontSize: '0.875rem', margin: 0 }}>\n {label}\n </p>\n )}\n <style>{`\n @keyframes swype-spin {\n to { transform: rotate(360deg); }\n }\n `}</style>\n </div>\n );\n}\n","// ── Provider Selection Card ────────────────────────────────────────────\nimport { useState } from 'react';\nimport type { Provider } from '../types';\nimport { useSwypeConfig } from '../context';\n\ninterface ProviderCardProps {\n provider: Provider;\n selected: boolean;\n onClick: () => void;\n}\n\nexport function ProviderCard({ provider, selected, onClick }: ProviderCardProps) {\n const { tokens } = useSwypeConfig();\n const [hovered, setHovered] = useState(false);\n\n return (\n <button\n onClick={onClick}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n width: '100%',\n padding: '14px 16px',\n background: selected\n ? tokens.accent + '18'\n : hovered\n ? tokens.bgHover\n : tokens.bgInput,\n border: `1.5px solid ${selected ? tokens.accent : tokens.border}`,\n borderRadius: tokens.radius,\n cursor: 'pointer',\n transition: 'all 0.15s ease',\n color: tokens.text,\n fontFamily: 'inherit',\n fontSize: '0.95rem',\n fontWeight: 500,\n textAlign: 'left',\n outline: 'none',\n }}\n >\n {provider.logoURI ? (\n <img\n src={provider.logoURI}\n alt={provider.name}\n style={{\n width: 32,\n height: 32,\n borderRadius: '8px',\n objectFit: 'contain',\n }}\n />\n ) : (\n <div\n style={{\n width: 32,\n height: 32,\n borderRadius: '8px',\n background: tokens.accent + '30',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '0.875rem',\n fontWeight: 700,\n color: tokens.accent,\n flexShrink: 0,\n }}\n >\n {provider.name.charAt(0).toUpperCase()}\n </div>\n )}\n <span>{provider.name}</span>\n {selected && (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n style={{ marginLeft: 'auto', flexShrink: 0 }}\n >\n <path\n d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\"\n fill={tokens.accent}\n />\n </svg>\n )}\n </button>\n );\n}\n","// ── Account & Wallet Selector ──────────────────────────────────────────\nimport { useState } from 'react';\nimport type { Account, Wallet } from '../types';\nimport { useSwypeConfig } from '../context';\n\nexport interface WalletSelection {\n accountId: string;\n walletId: string;\n accountName: string;\n walletName: string;\n chainName: string;\n}\n\ninterface AccountWalletSelectorProps {\n accounts: Account[];\n selection: WalletSelection | null;\n onSelect: (selection: WalletSelection | null) => void;\n}\n\n/**\n * Shows accounts with ACTIVE wallets. User expands an account to see\n * individual wallets with their chain name and balance, then picks one.\n */\nexport function AccountWalletSelector({\n accounts,\n selection,\n onSelect,\n}: AccountWalletSelectorProps) {\n const { tokens } = useSwypeConfig();\n const [expandedAccountId, setExpandedAccountId] = useState<string | null>(null);\n\n // Filter to accounts that have at least one ACTIVE wallet\n const activeAccounts = accounts.filter((a) =>\n a.wallets.some((w) => w.status === 'ACTIVE'),\n );\n\n if (activeAccounts.length === 0) return null;\n\n const handleAccountClick = (accountId: string) => {\n if (expandedAccountId === accountId) {\n setExpandedAccountId(null);\n } else {\n setExpandedAccountId(accountId);\n }\n };\n\n const handleWalletClick = (account: Account, wallet: Wallet) => {\n const isAlreadySelected =\n selection?.accountId === account.id && selection?.walletId === wallet.id;\n if (isAlreadySelected) {\n onSelect(null);\n } else {\n onSelect({\n accountId: account.id,\n walletId: wallet.id,\n accountName: account.name,\n walletName: wallet.name,\n chainName: wallet.chain.name,\n });\n }\n };\n\n const formatBalance = (wallet: Wallet): string => {\n const parts: string[] = [];\n for (const src of wallet.sources) {\n if (src.token.status === 'ACTIVE') {\n parts.push(\n `${src.balance.available.amount.toFixed(2)} ${src.balance.available.currency} (${src.token.symbol})`,\n );\n }\n }\n if (parts.length === 0 && wallet.balance) {\n return `${wallet.balance.available.amount.toFixed(2)} ${wallet.balance.available.currency}`;\n }\n return parts.join(', ') || 'No balance';\n };\n\n return (\n <div style={{ width: '100%' }}>\n <label\n style={{\n display: 'block',\n fontSize: '0.8rem',\n color: tokens.textMuted,\n marginBottom: '8px',\n fontWeight: 500,\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n }}\n >\n Or use a connected account\n </label>\n\n <div style={{ display: 'flex', flexDirection: 'column', gap: '6px' }}>\n {activeAccounts.map((account) => {\n const isExpanded = expandedAccountId === account.id;\n const activeWallets = account.wallets.filter((w) => w.status === 'ACTIVE');\n const hasSelection = selection?.accountId === account.id;\n\n return (\n <div\n key={account.id}\n style={{\n border: `1px solid ${hasSelection ? tokens.accent : tokens.border}`,\n borderRadius: tokens.radius,\n overflow: 'hidden',\n transition: 'border-color 0.15s ease',\n }}\n >\n {/* Account header */}\n <button\n onClick={() => handleAccountClick(account.id)}\n style={{\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '12px 14px',\n background: hasSelection\n ? tokens.accent + '10'\n : tokens.bgInput,\n border: 'none',\n cursor: 'pointer',\n color: tokens.text,\n fontFamily: 'inherit',\n fontSize: '0.9rem',\n fontWeight: 500,\n textAlign: 'left',\n outline: 'none',\n transition: 'background 0.15s ease',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '10px' }}>\n <div\n style={{\n width: 28,\n height: 28,\n borderRadius: '6px',\n background: tokens.accent + '25',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '0.75rem',\n fontWeight: 700,\n color: tokens.accent,\n flexShrink: 0,\n }}\n >\n {account.name.charAt(0).toUpperCase()}\n </div>\n <div>\n <div>{account.name}</div>\n <div\n style={{\n fontSize: '0.75rem',\n color: tokens.textMuted,\n marginTop: '2px',\n }}\n >\n {activeWallets.length} wallet{activeWallets.length !== 1 ? 's' : ''}\n </div>\n </div>\n </div>\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n style={{\n transform: isExpanded ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 0.2s ease',\n flexShrink: 0,\n }}\n >\n <path\n d=\"M7 10l5 5 5-5\"\n stroke={tokens.textMuted}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n\n {/* Wallet list (expanded) */}\n {isExpanded && (\n <div\n style={{\n borderTop: `1px solid ${tokens.border}`,\n background: tokens.bgCard,\n }}\n >\n {activeWallets.map((wallet) => {\n const isSelected = selection?.walletId === wallet.id;\n return (\n <button\n key={wallet.id}\n onClick={() => handleWalletClick(account, wallet)}\n style={{\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '10px 14px 10px 24px',\n background: isSelected\n ? tokens.accent + '12'\n : 'transparent',\n border: 'none',\n borderBottom: `1px solid ${tokens.border}`,\n cursor: 'pointer',\n color: tokens.text,\n fontFamily: 'inherit',\n fontSize: '0.85rem',\n textAlign: 'left',\n outline: 'none',\n transition: 'background 0.1s ease',\n }}\n >\n <div style={{ minWidth: 0, flex: 1 }}>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n }}\n >\n <span style={{ fontWeight: 500 }}>{wallet.name}</span>\n <span\n style={{\n fontSize: '0.7rem',\n color: tokens.textMuted,\n background: tokens.bgHover,\n padding: '1px 6px',\n borderRadius: '4px',\n }}\n >\n {wallet.chain.name}\n </span>\n </div>\n <div\n style={{\n fontSize: '0.75rem',\n color: tokens.textSecondary,\n marginTop: '3px',\n }}\n >\n {formatBalance(wallet)}\n </div>\n </div>\n\n {/* Selection indicator */}\n {isSelected && (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n style={{ flexShrink: 0, marginLeft: '8px' }}\n >\n <path\n d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\"\n fill={tokens.accent}\n />\n </svg>\n )}\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n })}\n </div>\n\n {/* Selected wallet summary */}\n {selection && (\n <div\n style={{\n marginTop: '8px',\n fontSize: '0.8rem',\n color: tokens.accent,\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n }}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\"\n fill={tokens.accent}\n />\n </svg>\n Using {selection.walletName} on {selection.chainName}\n </div>\n )}\n </div>\n );\n}\n","// ── Swype Payment Widget ───────────────────────────────────────────────\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { usePrivy } from '@privy-io/react-auth';\n\nimport type {\n Account,\n Destination,\n PaymentStep,\n Provider,\n SourceType,\n Transfer,\n} from './types';\nimport * as api from './api';\nimport { useSwypeConfig } from './context';\nimport { useAuthorizationExecutor, useTransferPolling } from './hooks';\nimport { Spinner } from './components/Spinner';\nimport { ProviderCard } from './components/ProviderCard';\nimport {\n AccountWalletSelector,\n type WalletSelection,\n} from './components/AccountWalletSelector';\n\n// ── Mobile detection ────────────────────────────────────────────────────\n\nfunction isMobile(): boolean {\n if (typeof navigator === 'undefined') return false;\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator.userAgent,\n );\n}\n\n// ── Props ──────────────────────────────────────────────────────────────\n\nexport interface SwypePaymentProps {\n /**\n * Where the funds go -- controlled by the host app (merchant).\n *\n * The merchant sets this prop and can update it at any time; the SDK\n * reads it reactively whenever a transfer is created.\n */\n destination: Destination;\n /** Called when the transfer reaches COMPLETED status */\n onComplete?: (transfer: Transfer) => void;\n /** Called on unrecoverable error */\n onError?: (error: string) => void;\n}\n\n// ── Component ──────────────────────────────────────────────────────────\n\nexport function SwypePayment({\n destination,\n onComplete,\n onError,\n}: SwypePaymentProps) {\n const { apiBaseUrl, tokens } = useSwypeConfig();\n const { ready, authenticated, login, getAccessToken } = usePrivy();\n\n // Flow state\n const [step, setStep] = useState<PaymentStep>('login');\n const [error, setError] = useState<string | null>(null);\n\n // Data\n const [providers, setProviders] = useState<Provider[]>([]);\n const [accounts, setAccounts] = useState<Account[]>([]);\n const [loadingData, setLoadingData] = useState(false);\n\n // Source selection\n const [selectedProviderId, setSelectedProviderId] = useState<string | null>(\n null,\n );\n const [walletSelection, setWalletSelection] =\n useState<WalletSelection | null>(null);\n\n // Amount\n const [amount, setAmount] = useState<string>('0.10');\n const [topUpBalance, setTopUpBalance] = useState<string>('');\n\n // Transfer\n const [transfer, setTransfer] = useState<Transfer | null>(null);\n const [creatingTransfer, setCreatingTransfer] = useState(false);\n\n // Mobile flow — when true the user was redirected to the wallet app\n // and we are waiting for them to return.\n const [mobileFlow, setMobileFlow] = useState(false);\n const pollingTransferIdRef = useRef<string | null>(null);\n\n // Hooks\n const authExecutor = useAuthorizationExecutor();\n const polling = useTransferPolling();\n\n // Determine effective source\n const sourceType: SourceType = walletSelection ? 'walletId' : 'providerId';\n const sourceId = walletSelection?.walletId ?? selectedProviderId ?? '';\n\n // ── Step transitions based on auth state ─────────────────────────\n\n useEffect(() => {\n if (ready && authenticated && step === 'login') {\n setStep('select-source');\n }\n }, [ready, authenticated, step]);\n\n // ── Load providers + accounts when entering source step ──────────\n\n useEffect(() => {\n if (step !== 'select-source') return;\n if (providers.length > 0) return;\n\n let cancelled = false;\n const load = async () => {\n setLoadingData(true);\n setError(null);\n try {\n const token = await getAccessToken();\n if (!token) throw new Error('Not authenticated');\n const [prov, accts] = await Promise.all([\n api.fetchProviders(apiBaseUrl, token),\n api.fetchAccounts(apiBaseUrl, token),\n ]);\n if (cancelled) return;\n setProviders(prov);\n setAccounts(accts);\n if (prov.length > 0) setSelectedProviderId(prov[0].id);\n } catch (err) {\n if (!cancelled) {\n const msg =\n err instanceof Error ? err.message : 'Failed to load data';\n setError(msg);\n }\n } finally {\n if (!cancelled) setLoadingData(false);\n }\n };\n load();\n return () => {\n cancelled = true;\n };\n }, [step, providers.length, apiBaseUrl, getAccessToken]);\n\n // ── Poll completion handler ──────────────────────────────────────\n\n useEffect(() => {\n if (!polling.transfer) return;\n if (polling.transfer.status === 'COMPLETED') {\n setStep('complete');\n setTransfer(polling.transfer);\n onComplete?.(polling.transfer);\n } else if (polling.transfer.status === 'FAILED') {\n setStep('complete');\n setTransfer(polling.transfer);\n setError('Transfer failed.');\n }\n }, [polling.transfer, onComplete]);\n\n // ── Resume polling when the user returns from the wallet app ────\n //\n // On mobile, the browser tab may be suspended while the user is in the\n // wallet app. When the tab becomes visible again we fire an immediate\n // poll so the UI updates right away instead of waiting for the next\n // interval tick.\n\n useEffect(() => {\n if (!mobileFlow || !polling.isPolling) return;\n\n const handleVisibility = () => {\n if (document.visibilityState === 'visible') {\n // Re-start polling which fires an immediate fetch, then resumes\n // the interval. Use the stored transfer id so we don't depend on\n // React state that may be stale after a background suspension.\n if (pollingTransferIdRef.current) {\n polling.startPolling(pollingTransferIdRef.current);\n }\n }\n };\n\n document.addEventListener('visibilitychange', handleVisibility);\n return () => {\n document.removeEventListener('visibilitychange', handleVisibility);\n };\n }, [mobileFlow, polling]);\n\n // ── Create transfer + execute auth + start polling ───────────────\n\n const handlePay = useCallback(async () => {\n const parsedAmount = parseFloat(amount);\n if (isNaN(parsedAmount) || parsedAmount <= 0) {\n setError('Enter a valid amount.');\n return;\n }\n if (!sourceId) {\n setError('Select a source.');\n return;\n }\n\n setStep('processing');\n setError(null);\n setCreatingTransfer(true);\n setMobileFlow(false);\n\n try {\n const token = await getAccessToken();\n if (!token) throw new Error('Not authenticated');\n\n // Persist the user's top-up balance as their default allowance\n // before creating the transfer so the SIGN_PERMIT2 action picks\n // it up from the user config.\n const parsedTopUp = parseFloat(topUpBalance);\n if (!isNaN(parsedTopUp) && parsedTopUp > 0) {\n await api.updateUserConfig(apiBaseUrl, token, {\n defaultAllowance: parsedTopUp,\n });\n }\n\n const t = await api.createTransfer(apiBaseUrl, token, {\n sourceType,\n sourceId,\n destination,\n amount: parsedAmount,\n });\n setTransfer(t);\n\n if (t.authorizationSessions && t.authorizationSessions.length > 0) {\n if (isMobile()) {\n // Mobile: redirect to the wallet deeplink and poll for completion.\n // The auth-app running inside the wallet's in-app browser will\n // handle the full authorization flow. Start polling *before*\n // redirecting so the interval is active when the user returns.\n setMobileFlow(true);\n pollingTransferIdRef.current = t.id;\n polling.startPolling(t.id);\n window.location.href = t.authorizationSessions[0].uri;\n return; // skip finally — we don't clear creatingTransfer so the\n // processing UI stays visible when the user comes back\n } else {\n // Desktop: execute the authorization session in-browser via\n // the Chrome extension wallet (injected provider).\n await authExecutor.executeSession(t);\n }\n }\n\n polling.startPolling(t.id);\n } catch (err) {\n const msg =\n err instanceof Error ? err.message : 'Transfer creation failed';\n setError(msg);\n onError?.(msg);\n setStep('enter-amount');\n } finally {\n setCreatingTransfer(false);\n }\n }, [\n amount,\n sourceId,\n sourceType,\n destination,\n apiBaseUrl,\n getAccessToken,\n authExecutor,\n polling,\n onError,\n topUpBalance,\n ]);\n\n // ── Restart ──────────────────────────────────────────────────────\n\n const handleNewPayment = () => {\n setStep('select-source');\n setTransfer(null);\n setError(null);\n setAmount('0.10');\n setTopUpBalance('');\n setMobileFlow(false);\n pollingTransferIdRef.current = null;\n setWalletSelection(null);\n if (providers.length > 0) setSelectedProviderId(providers[0].id);\n };\n\n // ── Shared styles ────────────────────────────────────────────────\n\n const cardStyle: React.CSSProperties = {\n background: tokens.bgCard,\n borderRadius: tokens.radiusLg,\n border: `1px solid ${tokens.border}`,\n padding: '28px 24px',\n maxWidth: 420,\n width: '100%',\n boxShadow: tokens.shadowLg,\n fontFamily:\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n color: tokens.text,\n };\n\n const headingStyle: React.CSSProperties = {\n fontSize: '1.2rem',\n fontWeight: 600,\n margin: '0 0 20px 0',\n color: tokens.text,\n textAlign: 'center',\n };\n\n const btnPrimary: React.CSSProperties = {\n width: '100%',\n padding: '14px',\n background: tokens.accent,\n color: tokens.accentText,\n border: 'none',\n borderRadius: tokens.radius,\n fontSize: '1rem',\n fontWeight: 600,\n cursor: 'pointer',\n transition: 'background 0.15s ease',\n fontFamily: 'inherit',\n };\n\n const btnDisabled: React.CSSProperties = {\n ...btnPrimary,\n opacity: 0.5,\n cursor: 'not-allowed',\n };\n\n const btnSecondary: React.CSSProperties = {\n ...btnPrimary,\n background: 'transparent',\n color: tokens.textSecondary,\n border: `1px solid ${tokens.border}`,\n width: 'auto',\n flex: '0 0 auto',\n padding: '14px 20px',\n };\n\n const errorStyle: React.CSSProperties = {\n background: tokens.errorBg,\n border: `1px solid ${tokens.error}`,\n borderRadius: tokens.radius,\n padding: '10px 14px',\n color: tokens.error,\n fontSize: '0.825rem',\n marginBottom: '14px',\n lineHeight: 1.5,\n };\n\n const stepBadge = (label: string) => (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n marginBottom: '20px',\n }}\n >\n <div\n style={{\n width: 6,\n height: 6,\n borderRadius: '50%',\n background: tokens.accent,\n }}\n />\n <span\n style={{\n fontSize: '0.75rem',\n textTransform: 'uppercase',\n letterSpacing: '0.06em',\n color: tokens.textMuted,\n fontWeight: 600,\n }}\n >\n {label}\n </span>\n </div>\n );\n\n // ── Render ───────────────────────────────────────────────────────\n\n if (!ready) {\n return (\n <div style={cardStyle}>\n <div style={{ textAlign: 'center', padding: '24px 0' }}>\n <Spinner label=\"Initializing...\" />\n </div>\n </div>\n );\n }\n\n // ── Step: Login ──────────────────────────────────────────────────\n\n if (step === 'login' && !authenticated) {\n return (\n <div style={cardStyle}>\n <div style={{ textAlign: 'center' }}>\n <svg\n width=\"48\"\n height=\"48\"\n viewBox=\"0 0 48 48\"\n fill=\"none\"\n style={{ margin: '0 auto 16px' }}\n >\n <rect width=\"48\" height=\"48\" rx=\"12\" fill={tokens.accent + '20'} />\n <path\n d=\"M24 14v20M14 24h20\"\n stroke={tokens.accent}\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n <h2 style={{ ...headingStyle, marginBottom: '8px' }}>\n Pay with Swype\n </h2>\n <p\n style={{\n fontSize: '0.875rem',\n color: tokens.textSecondary,\n margin: '0 0 24px 0',\n lineHeight: 1.5,\n }}\n >\n Connect your account to continue\n </p>\n <button style={btnPrimary} onClick={login}>\n Connect to Swype\n </button>\n </div>\n </div>\n );\n }\n\n // ── Step: Select Source ───────────────────────────────────────────\n\n if (step === 'select-source') {\n return (\n <div style={cardStyle}>\n {stepBadge('Select payment source')}\n <h2 style={headingStyle}>Choose a provider</h2>\n\n {error && <div style={errorStyle}>{error}</div>}\n\n {loadingData ? (\n <div style={{ padding: '24px 0', textAlign: 'center' }}>\n <Spinner label=\"Loading providers...\" />\n </div>\n ) : (\n <>\n {/* Account & wallet selector */}\n {accounts.length > 0 && (\n <div style={{ marginBottom: '16px' }}>\n <AccountWalletSelector\n accounts={accounts}\n selection={walletSelection}\n onSelect={(sel) => {\n setWalletSelection(sel);\n if (sel) setSelectedProviderId(null);\n }}\n />\n </div>\n )}\n\n {/* Provider list (hidden when a wallet is selected) */}\n {!walletSelection && (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n marginBottom: '20px',\n }}\n >\n {providers.map((p) => (\n <ProviderCard\n key={p.id}\n provider={p}\n selected={selectedProviderId === p.id}\n onClick={() => {\n setSelectedProviderId(p.id);\n setWalletSelection(null);\n }}\n />\n ))}\n </div>\n )}\n\n <button\n style={sourceId ? btnPrimary : btnDisabled}\n disabled={!sourceId}\n onClick={() => {\n setError(null);\n setStep('enter-amount');\n }}\n >\n Continue\n </button>\n </>\n )}\n </div>\n );\n }\n\n // ── Step: Enter Amount ───────────────────────────────────────────\n\n if (step === 'enter-amount') {\n return (\n <div style={cardStyle}>\n {stepBadge('Enter amount')}\n <h2 style={headingStyle}>How much?</h2>\n\n {error && <div style={errorStyle}>{error}</div>}\n\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n background: tokens.bgInput,\n border: `1px solid ${tokens.border}`,\n borderRadius: tokens.radius,\n padding: '4px 14px 4px 4px',\n marginBottom: '20px',\n }}\n >\n <span\n style={{\n fontSize: '1.5rem',\n fontWeight: 600,\n color: tokens.textMuted,\n paddingLeft: '10px',\n userSelect: 'none',\n }}\n >\n $\n </span>\n <input\n type=\"number\"\n min=\"0.01\"\n step=\"0.01\"\n value={amount}\n onChange={(e) => setAmount(e.target.value)}\n style={{\n flex: 1,\n background: 'transparent',\n border: 'none',\n outline: 'none',\n color: tokens.text,\n fontSize: '1.5rem',\n fontWeight: 600,\n fontFamily: 'inherit',\n padding: '10px 0',\n }}\n autoFocus\n />\n <span\n style={{\n fontSize: '0.825rem',\n fontWeight: 600,\n color: tokens.textMuted,\n background: tokens.bgHover,\n padding: '4px 10px',\n borderRadius: '6px',\n }}\n >\n USD\n </span>\n </div>\n\n {/* Top Up Balance */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n background: tokens.bgInput,\n border: `1px solid ${tokens.border}`,\n borderRadius: tokens.radius,\n padding: '4px 14px 4px 4px',\n marginBottom: '20px',\n }}\n >\n <span\n style={{\n fontSize: '1rem',\n fontWeight: 600,\n color: tokens.textMuted,\n paddingLeft: '10px',\n userSelect: 'none',\n }}\n >\n $\n </span>\n <input\n type=\"number\"\n min=\"0\"\n step=\"1\"\n placeholder=\"Top up balance (optional)\"\n value={topUpBalance}\n onChange={(e) => setTopUpBalance(e.target.value)}\n style={{\n flex: 1,\n background: 'transparent',\n border: 'none',\n outline: 'none',\n color: tokens.text,\n fontSize: '1rem',\n fontWeight: 600,\n fontFamily: 'inherit',\n padding: '10px 0',\n }}\n />\n <span\n style={{\n fontSize: '0.75rem',\n fontWeight: 600,\n color: tokens.textMuted,\n background: tokens.bgHover,\n padding: '4px 10px',\n borderRadius: '6px',\n whiteSpace: 'nowrap',\n }}\n >\n USD\n </span>\n </div>\n <p\n style={{\n fontSize: '0.75rem',\n color: tokens.textMuted,\n margin: '-12px 0 16px 0',\n lineHeight: 1.4,\n }}\n >\n Set a higher allowance to skip wallet prompts on future payments\n under this amount.\n </p>\n\n {/* Summary */}\n <div\n style={{\n fontSize: '0.825rem',\n color: tokens.textSecondary,\n marginBottom: '20px',\n padding: '12px 14px',\n background: tokens.bgInput,\n borderRadius: tokens.radius,\n lineHeight: 1.7,\n }}\n >\n <div style={{ display: 'flex', justifyContent: 'space-between' }}>\n <span>To</span>\n <span\n style={{\n fontFamily: '\"SF Mono\", \"Fira Code\", monospace',\n fontSize: '0.8rem',\n }}\n >\n {destination.address.slice(0, 6)}...\n {destination.address.slice(-4)}\n </span>\n </div>\n <div style={{ display: 'flex', justifyContent: 'space-between' }}>\n <span>Token</span>\n <span style={{ fontWeight: 600 }}>{destination.token.symbol}</span>\n </div>\n <div style={{ display: 'flex', justifyContent: 'space-between' }}>\n <span>Source</span>\n <span style={{ fontWeight: 600 }}>\n {walletSelection\n ? `${walletSelection.walletName} (${walletSelection.chainName})`\n : providers.find((p) => p.id === selectedProviderId)?.name ??\n 'Provider'}\n </span>\n </div>\n </div>\n\n <div style={{ display: 'flex', gap: '10px' }}>\n <button\n style={btnSecondary}\n onClick={() => {\n setError(null);\n setStep('select-source');\n }}\n >\n Back\n </button>\n <button\n style={parseFloat(amount) > 0 ? btnPrimary : btnDisabled}\n disabled={!(parseFloat(amount) > 0)}\n onClick={handlePay}\n >\n Pay ${parseFloat(amount || '0').toFixed(2)}\n </button>\n </div>\n </div>\n );\n }\n\n // ── Step: Processing ─────────────────────────────────────────────\n\n if (step === 'processing') {\n const statusLabel = creatingTransfer\n ? 'Creating transfer...'\n : mobileFlow\n ? 'Waiting for authorization...'\n : authExecutor.executing\n ? 'Authorizing...'\n : polling.isPolling\n ? 'Processing payment...'\n : 'Please wait...';\n\n const statusDescription = creatingTransfer\n ? 'Setting up your transfer...'\n : mobileFlow\n ? 'Complete the authorization in your wallet app, then return here.'\n : authExecutor.executing\n ? 'Complete the wallet prompts to authorize this payment.'\n : polling.isPolling\n ? 'Your payment is being processed. This usually takes a few moments.'\n : 'Hang tight...';\n\n return (\n <div style={cardStyle}>\n <div style={{ textAlign: 'center', padding: '16px 0' }}>\n <Spinner size={48} />\n <h2\n style={{\n ...headingStyle,\n marginTop: '20px',\n marginBottom: '8px',\n }}\n >\n {statusLabel}\n </h2>\n <p\n style={{\n fontSize: '0.85rem',\n color: tokens.textSecondary,\n margin: 0,\n lineHeight: 1.5,\n }}\n >\n {statusDescription}\n </p>\n\n {/* Desktop: show action-by-action progress */}\n {!mobileFlow && authExecutor.results.length > 0 && (\n <div style={{ marginTop: '20px', textAlign: 'left' }}>\n {authExecutor.results.map((r) => (\n <div\n key={r.actionId}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '6px 0',\n fontSize: '0.8rem',\n color:\n r.status === 'success' ? tokens.success : tokens.error,\n }}\n >\n <span>\n {r.status === 'success' ? '\\u2713' : '\\u2717'}\n </span>\n <span>{r.type.replace(/_/g, ' ')}</span>\n </div>\n ))}\n </div>\n )}\n\n {(error || authExecutor.error || polling.error) && (\n <div\n style={{ ...errorStyle, marginTop: '16px', textAlign: 'left' }}\n >\n {error || authExecutor.error || polling.error}\n </div>\n )}\n </div>\n </div>\n );\n }\n\n // ── Step: Complete ───────────────────────────────────────────────\n\n if (step === 'complete') {\n const succeeded = transfer?.status === 'COMPLETED';\n\n return (\n <div style={cardStyle}>\n <div style={{ textAlign: 'center' }}>\n <div\n style={{\n width: 56,\n height: 56,\n borderRadius: '50%',\n background: succeeded\n ? tokens.success + '20'\n : tokens.error + '20',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n margin: '0 auto 16px',\n }}\n >\n {succeeded ? (\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\"\n fill={tokens.success}\n />\n </svg>\n ) : (\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M18.3 5.71L12 12.01 5.7 5.71 4.29 7.12l6.3 6.3-6.3 6.29 1.41 1.41 6.3-6.29 6.29 6.29 1.41-1.41-6.29-6.29 6.29-6.3-1.41-1.41z\"\n fill={tokens.error}\n />\n </svg>\n )}\n </div>\n\n <h2\n style={{\n ...headingStyle,\n marginBottom: '8px',\n color: succeeded ? tokens.success : tokens.error,\n }}\n >\n {succeeded ? 'Payment Complete' : 'Payment Failed'}\n </h2>\n\n {transfer && (\n <div\n style={{\n fontSize: '0.825rem',\n color: tokens.textSecondary,\n margin: '0 0 24px 0',\n padding: '14px',\n background: tokens.bgInput,\n borderRadius: tokens.radius,\n textAlign: 'left',\n lineHeight: 1.8,\n }}\n >\n <div\n style={{ display: 'flex', justifyContent: 'space-between' }}\n >\n <span>Amount</span>\n <span style={{ fontWeight: 600, color: tokens.text }}>\n ${transfer.amount?.amount?.toFixed(2)}{' '}\n {transfer.amount?.currency}\n </span>\n </div>\n <div\n style={{ display: 'flex', justifyContent: 'space-between' }}\n >\n <span>Status</span>\n <span\n style={{\n fontWeight: 600,\n color: succeeded ? tokens.success : tokens.error,\n }}\n >\n {transfer.status}\n </span>\n </div>\n <div\n style={{ display: 'flex', justifyContent: 'space-between' }}\n >\n <span>Transfer ID</span>\n <span\n style={{\n fontFamily: '\"SF Mono\", \"Fira Code\", monospace',\n fontSize: '0.75rem',\n }}\n >\n {transfer.id.slice(0, 8)}...\n </span>\n </div>\n </div>\n )}\n\n {error && (\n <div style={{ ...errorStyle, textAlign: 'left' }}>{error}</div>\n )}\n\n <button style={btnPrimary} onClick={handleNewPayment}>\n {succeeded ? 'Make Another Payment' : 'Try Again'}\n </button>\n </div>\n </div>\n );\n }\n\n // Fallback\n return null;\n}\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@swype-org/react-sdk",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Swype React SDK — drop-in payment widget and hooks for integrating Swype payments",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.cjs",
|
|
7
|
+
"module": "dist/index.js",
|
|
8
|
+
"types": "dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"import": {
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"default": "./dist/index.js"
|
|
14
|
+
},
|
|
15
|
+
"require": {
|
|
16
|
+
"types": "./dist/index.d.cts",
|
|
17
|
+
"default": "./dist/index.cjs"
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"files": [
|
|
22
|
+
"dist"
|
|
23
|
+
],
|
|
24
|
+
"scripts": {
|
|
25
|
+
"build": "tsup",
|
|
26
|
+
"prepublishOnly": "npm run build"
|
|
27
|
+
},
|
|
28
|
+
"peerDependencies": {
|
|
29
|
+
"react": ">=18",
|
|
30
|
+
"react-dom": ">=18"
|
|
31
|
+
},
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"@privy-io/react-auth": "3.13.1",
|
|
34
|
+
"@tanstack/react-query": "^5.90.21",
|
|
35
|
+
"wagmi": "^2.19.5",
|
|
36
|
+
"viem": "^2.45.3"
|
|
37
|
+
},
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"@types/react": "18.3.18",
|
|
40
|
+
"@types/react-dom": "18.3.5",
|
|
41
|
+
"react": "18.3.1",
|
|
42
|
+
"react-dom": "18.3.1",
|
|
43
|
+
"tsup": "^8.4.0",
|
|
44
|
+
"typescript": "5.7.3"
|
|
45
|
+
},
|
|
46
|
+
"license": "MIT",
|
|
47
|
+
"repository": {
|
|
48
|
+
"type": "git",
|
|
49
|
+
"url": "https://github.com/swype-org/swype.git",
|
|
50
|
+
"directory": "swype-sdk"
|
|
51
|
+
},
|
|
52
|
+
"keywords": [
|
|
53
|
+
"swype",
|
|
54
|
+
"payments",
|
|
55
|
+
"react",
|
|
56
|
+
"sdk",
|
|
57
|
+
"web3",
|
|
58
|
+
"crypto"
|
|
59
|
+
]
|
|
60
|
+
}
|