@cavos/kit 0.0.3 → 0.0.5
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/{Cavos-BH2_tOQ2.d.mts → Cavos-D20EtgOK.d.mts} +312 -182
- package/dist/{Cavos-BH2_tOQ2.d.ts → Cavos-D20EtgOK.d.ts} +312 -182
- package/dist/{chunk-BNGLH3Q3.mjs → chunk-M5BGBODC.mjs} +1660 -582
- package/dist/chunk-M5BGBODC.mjs.map +1 -0
- package/dist/index.d.mts +293 -89
- package/dist/index.d.ts +293 -89
- package/dist/index.js +1601 -593
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -88
- package/dist/index.mjs.map +1 -1
- package/dist/react/index.d.mts +42 -29
- package/dist/react/index.d.ts +42 -29
- package/dist/react/index.js +2002 -655
- package/dist/react/index.js.map +1 -1
- package/dist/react/index.mjs +353 -92
- package/dist/react/index.mjs.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-BNGLH3Q3.mjs.map +0 -1
package/dist/react/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/react/CavosAuthModal.tsx","../../src/react/CavosProvider.tsx"],"names":["e","useState","useRef","useEffect","useCallback","jsxs","jsx"],"mappings":"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","file":"index.mjs","sourcesContent":["'use client';\n\nimport React, {\n useState,\n useEffect,\n useCallback,\n useRef,\n type CSSProperties,\n} from 'react';\nimport { useCavos } from './CavosProvider';\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface CavosAuthModalProps {\n open: boolean;\n onClose: () => void;\n onSuccess?: (address: string) => void;\n appName?: string;\n appLogo?: string;\n providers?: ('google' | 'apple' | 'email')[];\n emailMode?: 'magic-link' | 'otp';\n primaryColor?: string;\n /** 'light' (default) or 'dark' */\n theme?: 'light' | 'dark';\n}\n\nconst cavosLogoBase64 = \"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\";\n\ntype Screen = 'select' | 'magic-link' | 'verify' | 'otp-code' | 'deploying' | 'device-approval' | 'recover';\n\n// ─── Style injection ──────────────────────────────────────────────────────────\n\nconst STYLE_ID = 'cavos-modal-styles-v2';\n\nfunction injectStyles() {\n if (typeof document === 'undefined') return;\n if (document.getElementById(STYLE_ID)) return;\n const el = document.createElement('style');\n el.id = STYLE_ID;\n el.textContent = `\n @keyframes cavos-fade { from { opacity:0; } to { opacity:1; } }\n @keyframes cavos-up {\n from { opacity:0; transform:translateY(12px) scale(0.985); }\n to { opacity:1; transform:translateY(0) scale(1); }\n }\n @keyframes cavos-sheet {\n from { transform:translateY(100%); }\n to { transform:translateY(0); }\n }\n @keyframes cavos-spin {\n from { transform:rotate(0deg); } to { transform:rotate(360deg); }\n }\n @keyframes cavos-pop {\n 0% { transform:scale(0.5); opacity:0; }\n 60% { transform:scale(1.12); opacity:1; }\n 100% { transform:scale(1); opacity:1; }\n }\n @keyframes cavos-check-draw {\n from { stroke-dashoffset: 30; }\n to { stroke-dashoffset: 0; }\n }\n @keyframes cavos-ring-glow {\n 0%,100% { box-shadow: 0 0 0 0 rgba(34,197,94,0.4); }\n 50% { box-shadow: 0 0 0 10px rgba(34,197,94,0); }\n }\n .cavos-check-circle {\n animation: cavos-pop 0.45s cubic-bezier(.22,1,.36,1) forwards;\n }\n .cavos-check-path {\n stroke-dasharray: 30;\n stroke-dashoffset: 30;\n animation: cavos-check-draw 0.35s 0.2s cubic-bezier(.22,1,.36,1) forwards;\n }\n .cavos-input-inner:focus { outline:none; }\n .cavos-provider:active { transform:scale(0.99); }\n .cavos-primary-btn:active { transform:scale(0.98); }\n .cavos-otp-input {\n width: 100%;\n text-align: center;\n font-size: 22px;\n font-weight: 600;\n background: transparent;\n border: none;\n outline: none;\n color: inherit;\n font-family: inherit;\n caret-color: transparent;\n }\n .cavos-otp-box {\n transition: border-color 0.15s, box-shadow 0.15s, transform 0.1s;\n }\n .cavos-otp-box-filled {\n transform: scale(1.04);\n }\n .cavos-divider-line {\n flex: 1;\n height: 1px;\n }\n /* Theme-aware interaction styles. The overlay carries data-cavos-theme so\n hovers/focus rings stay legible in both light and dark — the previous\n rgba(0,0,0,…) rules disappeared against the dark background. */\n [data-cavos-theme=\"light\"] .cavos-input-row:focus-within {\n border-color: rgba(0,0,0,0.35) !important;\n box-shadow: 0 0 0 3px rgba(0,0,0,0.06) !important;\n }\n [data-cavos-theme=\"dark\"] .cavos-input-row:focus-within {\n border-color: rgba(255,255,255,0.45) !important;\n box-shadow: 0 0 0 3px rgba(255,255,255,0.08) !important;\n }\n [data-cavos-theme=\"light\"] .cavos-provider:hover { background: rgba(0,0,0,0.035) !important; }\n [data-cavos-theme=\"dark\"] .cavos-provider:hover { background: rgba(255,255,255,0.07) !important; }\n [data-cavos-theme=\"light\"] .cavos-close:hover { background: rgba(0,0,0,0.05) !important; }\n [data-cavos-theme=\"dark\"] .cavos-close:hover { background: rgba(255,255,255,0.08) !important; }\n [data-cavos-theme=\"light\"] .cavos-sub-btn:hover { color: rgba(0,0,0,0.6) !important; }\n [data-cavos-theme=\"dark\"] .cavos-sub-btn:hover { color: rgba(255,255,255,0.65) !important; }\n [data-cavos-theme=\"light\"] .cavos-submit-btn:hover { color: rgba(0,0,0,0.8) !important; }\n [data-cavos-theme=\"dark\"] .cavos-submit-btn:hover { color: rgba(255,255,255,0.85) !important; }\n [data-cavos-theme=\"light\"] .cavos-primary-btn:hover { opacity: 0.88; }\n [data-cavos-theme=\"dark\"] .cavos-primary-btn:hover { opacity: 0.9; }\n [data-cavos-theme=\"light\"] .cavos-divider-line { background: rgba(0,0,0,0.08); }\n [data-cavos-theme=\"dark\"] .cavos-divider-line { background: rgba(255,255,255,0.1); }\n `;\n document.head.appendChild(el);\n}\n\n// ─── Icons ────────────────────────────────────────────────────────────────────\n\nconst GoogleIcon = () => (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\n <path d=\"M17.64 9.2c0-.637-.057-1.251-.164-1.84H9v3.481h4.844c-.209 1.125-.843 2.078-1.796 2.717v2.258h2.908c1.702-1.567 2.684-3.875 2.684-6.615z\" fill=\"#4285F4\"/>\n <path d=\"M9 18c2.43 0 4.467-.806 5.956-2.184l-2.908-2.258c-.806.54-1.837.86-3.048.86-2.344 0-4.328-1.584-5.036-3.711H.957v2.332A8.997 8.997 0 009 18z\" fill=\"#34A853\"/>\n <path d=\"M3.964 10.707A5.41 5.41 0 013.682 9c0-.593.102-1.17.282-1.707V4.961H.957A8.996 8.996 0 000 9c0 1.452.348 2.827.957 4.039l3.007-2.332z\" fill=\"#FBBC05\"/>\n <path d=\"M9 3.58c1.321 0 2.508.454 3.44 1.345l2.582-2.58C13.463.891 11.426 0 9 0A8.997 8.997 0 00.957 4.961L3.964 7.293C4.672 5.163 6.656 3.58 9 3.58z\" fill=\"#EA4335\"/>\n </svg>\n);\n\nconst AppleIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 814 1000\" fill=\"currentColor\">\n <path d=\"M788.1 340.9c-5.8 4.5-108.2 62.2-108.2 190.5 0 148.4 130.3 200.9 134.2 202.2-.6 3.2-20.7 71.9-68.7 141.9-42.8 61.6-87.5 123.1-155.5 123.1s-85.5-39.5-164-39.5c-76 0-103.7 40.8-165.9 40.8s-105-57.8-155.5-127.4C46 790.7 0 663 0 541.8c0-194.3 126.4-297.5 250.8-297.5 66.1 0 121.2 43.4 162.7 43.4 39.5 0 101.1-46 176.3-46 28.5 0 130.9 2.6 198.3 99.2zm-234-181.5c31.1-36.9 53.1-88.1 53.1-139.3 0-7.1-.6-14.3-1.9-20.1-50.6 1.9-110.8 33.7-147.1 75.8-28.5 32.4-55.1 83.6-55.1 135.5 0 7.8 1.3 15.6 1.9 18.1 3.2.6 8.4 1.3 13.6 1.3 45.4 0 102.5-30.4 135.5-71.3z\"/>\n </svg>\n);\n\nconst EmailIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\"/>\n <path d=\"m22 7-8.97 5.7a1.94 1.94 0 01-2.06 0L2 7\"/>\n </svg>\n);\n\nconst CavosLogo = ({ invert }: { invert?: boolean }) => (\n <img src={`data:image/png;base64,${cavosLogoBase64}`} alt=\"Cavos\" style={{ width: 'auto', height: '16px', objectFit: 'contain', opacity: 0.55, flexShrink: 0, filter: invert ? 'invert(1)' : 'none' }} />\n);\n\nfunction Spinner({ size = 16, color = '#888' }: { size?: number; color?: string }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\"\n style={{ animation: 'cavos-spin 0.75s linear infinite', flexShrink: 0 }}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke={color} strokeOpacity=\"0.2\" strokeWidth=\"2.5\"/>\n <path d=\"M12 2a10 10 0 0110 10\" stroke={color} strokeWidth=\"2.5\" strokeLinecap=\"round\"/>\n </svg>\n );\n}\n\n// ─── Mobile detection hook ────────────────────────────────────────────────────\n\nfunction useIsMobile() {\n const [isMobile, setIsMobile] = useState(false);\n useEffect(() => {\n const mq = window.matchMedia('(max-width: 640px)');\n setIsMobile(mq.matches);\n const handler = (e: MediaQueryListEvent) => setIsMobile(e.matches);\n mq.addEventListener('change', handler);\n return () => mq.removeEventListener('change', handler);\n }, []);\n return isMobile;\n}\n\n// ─── Style helpers ────────────────────────────────────────────────────────────\n\nconst FONT = '-apple-system, BlinkMacSystemFont, \"Segoe UI\", system-ui, sans-serif';\n\nfunction baseOverlay(isMobile: boolean): CSSProperties {\n return {\n position: 'fixed', inset: 0,\n background: 'rgba(0,0,0,0.5)',\n backdropFilter: 'blur(10px)',\n WebkitBackdropFilter: 'blur(10px)',\n zIndex: 9999,\n display: 'flex',\n alignItems: isMobile ? 'flex-end' : 'center',\n justifyContent: 'center',\n padding: isMobile ? '0' : '16px',\n animation: 'cavos-fade 0.18s ease',\n fontFamily: FONT,\n };\n}\n\nfunction lightCard(isMobile: boolean, bg: string): CSSProperties {\n return isMobile ? {\n background: bg,\n borderRadius: '20px 20px 0 0',\n width: '100%',\n maxWidth: '100%',\n boxShadow: '0 -8px 40px rgba(0,0,0,0.18)',\n animation: 'cavos-sheet 0.32s cubic-bezier(0.22,1,0.36,1)',\n overflow: 'hidden',\n } : {\n background: bg,\n borderRadius: '22px',\n width: '100%',\n maxWidth: '400px',\n boxShadow: '0 24px 60px rgba(0,0,0,0.22), 0 0 0 1px rgba(0,0,0,0.05)',\n animation: 'cavos-up 0.25s cubic-bezier(0.22,1,0.36,1)',\n overflow: 'hidden',\n };\n}\n\nfunction providerBtn(textColor: string): CSSProperties {\n const isLight = textColor === '#111111' || textColor === '#111';\n return {\n width: '100%',\n display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '10px',\n padding: '12px 16px',\n background: isLight ? '#fff' : 'rgba(255,255,255,0.04)',\n border: `1px solid ${isLight ? 'rgba(0,0,0,0.12)' : 'rgba(255,255,255,0.12)'}`,\n borderRadius: '12px',\n cursor: 'pointer',\n fontSize: '14px',\n fontWeight: 500,\n color: textColor,\n fontFamily: 'inherit',\n transition: 'background 0.15s, transform 0.1s, border-color 0.15s',\n position: 'relative',\n };\n}\n\nfunction footerBar(textColor: string): CSSProperties {\n const isLight = textColor === '#111111' || textColor === '#111';\n return {\n borderTop: `1px solid ${isLight ? 'rgba(0,0,0,0.06)' : 'rgba(255,255,255,0.06)'}`,\n padding: '12px 20px',\n display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '5px',\n fontSize: '11px',\n color: isLight ? 'rgba(0,0,0,0.28)' : 'rgba(255,255,255,0.28)',\n };\n}\n\nfunction closeBtn(textColor: string): CSSProperties {\n return {\n position: 'absolute', top: '16px', right: '16px',\n width: '28px', height: '28px', borderRadius: '50%',\n border: 'none', background: 'transparent',\n cursor: 'pointer', display: 'flex', alignItems: 'center', justifyContent: 'center',\n color: textColor === '#111111' || textColor === '#111' ? 'rgba(0,0,0,0.3)' : 'rgba(255,255,255,0.4)',\n padding: 0, transition: 'background 0.15s',\n };\n}\n\nfunction mobileHandle(): CSSProperties {\n return {\n width: '36px', height: '4px', borderRadius: '2px',\n background: 'rgba(0,0,0,0.15)', margin: '12px auto 0',\n };\n}\n\nconst CloseX = () => (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/>\n </svg>\n);\n\n// ─── Main component ───────────────────────────────────────────────────────────\n\nexport function CavosAuthModal({\n open,\n onClose,\n appName,\n providers = ['google', 'apple', 'email'],\n emailMode = 'magic-link',\n primaryColor = '#0A0908',\n theme = 'light',\n}: CavosAuthModalProps) {\n const {\n login,\n sendMagicLink,\n sendOtp,\n verifyOtp,\n isAuthenticated,\n address,\n walletStatus,\n authError,\n clearAuthError,\n resendDeviceApproval,\n recover,\n } = useCavos();\n const isMobile = useIsMobile();\n\n // Theme-derived values\n const isLight = theme !== 'dark';\n const backgroundColor = isLight ? '#ffffff' : '#111111';\n const textColor = isLight ? '#111111' : '#ffffff';\n const subTextColor = isLight ? 'rgba(0,0,0,0.4)' : 'rgba(255,255,255,0.4)';\n const inputBg = isLight ? '#fff' : 'rgba(255,255,255,0.06)';\n const inputBorder = isLight ? '1px solid rgba(0,0,0,0.12)' : '1px solid rgba(255,255,255,0.12)';\n const errBg = isLight ? 'rgba(239,68,68,0.06)' : 'rgba(239,68,68,0.08)';\n const errColor = isLight ? '#dc2626' : '#f87171';\n const errBorder = isLight ? 'rgba(239,68,68,0.18)' : 'rgba(239,68,68,0.2)';\n const card = lightCard(isMobile, backgroundColor);\n const overlay = baseOverlay(isMobile);\n const handle = mobileHandle();\n const footer = footerBar(textColor);\n const close = closeBtn(textColor);\n const pBtn = providerBtn(textColor);\n\n const [screen, setScreen] = useState<Screen>('select');\n const [email, setEmail] = useState('');\n const [otpCode, setOtpCode] = useState('');\n const [error, setError] = useState('');\n const [busy, setBusy] = useState(false);\n const [deployState, setDeployState] = useState<'loading' | 'done'>('loading');\n const [resendCountdown, setResendCountdown] = useState(0);\n const [deviceResendBusy, setDeviceResendBusy] = useState(false);\n const [recoverCode, setRecoverCode] = useState('');\n const [recoverBusy, setRecoverBusy] = useState(false);\n\n const doneHandledRef = useRef(false);\n const closeTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n // One ref per OTP box for focus management / auto-advance.\n const otpBoxRefs = useRef<Array<HTMLInputElement | null>>([null, null, null, null, null, null]);\n\n // Segmented OTP input helpers: keep `otpCode` (6-digit string) as the single\n // source of truth, drive focus by index, and handle paste/keystrokes cleanly.\n const setOtpDigit = (i: number, raw: string) => {\n const digit = raw.replace(/\\D/g, '').slice(-1);\n setOtpCode(prev => {\n const chars = prev.split('');\n while (chars.length < 6) chars.push('');\n chars[i] = digit;\n const next = chars.join('').slice(0, 6);\n // Auto-advance to the next empty box when a digit is typed.\n if (digit && i < 5) {\n const target = i + 1;\n otpBoxRefs.current[target]?.focus();\n }\n return next;\n });\n };\n\n const onOtpKeyDown = (i: number, e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Backspace' && !otpCode[i] && i > 0) {\n // Empty box + backspace → move focus back instead of clearing nothing.\n otpBoxRefs.current[i - 1]?.focus();\n e.preventDefault();\n } else if (e.key === 'ArrowLeft' && i > 0) {\n otpBoxRefs.current[i - 1]?.focus();\n e.preventDefault();\n } else if (e.key === 'ArrowRight' && i < 5) {\n otpBoxRefs.current[i + 1]?.focus();\n e.preventDefault();\n }\n };\n\n const onOtpPaste = (e: React.ClipboardEvent<HTMLInputElement>) => {\n const text = e.clipboardData.getData('text').replace(/\\D/g, '').slice(0, 6);\n if (!text) return;\n e.preventDefault();\n setOtpCode(text);\n // Focus the box after the last pasted digit (or the last box).\n const focusIdx = Math.min(text.length, 5);\n otpBoxRefs.current[focusIdx]?.focus();\n };\n\n useEffect(() => { injectStyles(); }, []);\n\n // When the provider surfaces an unrecoverable connect error (e.g. a failed\n // OAuth callback), drop the user back on the provider-selection screen with\n // the message + a retry, instead of leaving the modal closed with no feedback.\n useEffect(() => {\n if (!authError) return;\n setBusy(false);\n setDeployState('loading');\n if (screen !== 'device-approval') setScreen('select');\n setError(authError);\n // The provider owns the error; once surfaced here it's \"consumed\" by the UI.\n clearAuthError();\n }, [authError, clearAuthError, screen]);\n\n const triggerDone = useCallback((addr: string) => {\n if (doneHandledRef.current) return;\n doneHandledRef.current = true;\n\n setScreen('deploying');\n setDeployState('done');\n\n closeTimerRef.current = setTimeout(() => {\n onClose();\n setScreen('select');\n setDeployState('loading');\n setEmail(''); setOtpCode(''); setError('');\n doneHandledRef.current = false;\n }, 1600);\n // addr unused beyond guarding the transition; keep the param for clarity.\n void addr;\n }, [onClose]);\n\n // Show the \"deploying\" screen whenever a deploy is in progress (e.g. while\n // returning from an OAuth redirect), or once authenticated, then flip to\n // \"done\" when the account is ready.\n useEffect(() => {\n if (!open) return;\n\n if (walletStatus.isDeploying && screen !== 'deploying' && screen !== 'verify') {\n setScreen('deploying');\n setDeployState('loading');\n doneHandledRef.current = false;\n }\n\n if (isAuthenticated && address && walletStatus.isReady) {\n triggerDone(address);\n }\n\n // This device needs approval: show the \"check your email\" screen. Don't\n // override the recover screen — the user navigated there intentionally from\n // device-approval to restore access with their recovery phrase.\n if (walletStatus.awaitingApproval && screen !== 'device-approval' && screen !== 'recover') {\n setScreen('device-approval');\n doneHandledRef.current = false;\n }\n }, [open, isAuthenticated, address, walletStatus.isReady, walletStatus.isDeploying, walletStatus.awaitingApproval, screen, triggerDone]);\n\n useEffect(() => () => {\n if (closeTimerRef.current) clearTimeout(closeTimerRef.current);\n }, []);\n\n const handleClose = () => {\n if (screen === 'deploying') return;\n setScreen('select'); setEmail(''); setOtpCode(''); setError('');\n doneHandledRef.current = false;\n onClose();\n };\n\n const handleOAuth = async (provider: 'google' | 'apple') => {\n setError(''); setBusy(true);\n try {\n await login(provider);\n } catch (e: unknown) {\n const msg = e instanceof Error ? e.message : 'Authentication failed.';\n setError(msg); setBusy(false);\n }\n };\n\n const handleMagicLinkSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n if (!email) return;\n setError(''); setBusy(true);\n try {\n await sendMagicLink(email);\n setScreen('verify');\n setResendCountdown(60);\n } catch (e: unknown) {\n setError(e instanceof Error ? e.message : 'Failed to send magic link.');\n } finally {\n setBusy(false);\n }\n };\n\n const handleOtpRequestSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n if (!email) return;\n setError(''); setBusy(true);\n try {\n await sendOtp(email);\n setOtpCode('');\n setScreen('otp-code');\n setResendCountdown(60);\n } catch (e: unknown) {\n setError(e instanceof Error ? e.message : 'Failed to send code.');\n } finally {\n setBusy(false);\n }\n };\n\n const handleOtpVerifySubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n if (!email || otpCode.length !== 6) return;\n setError(''); setBusy(true);\n try {\n await verifyOtp(email, otpCode);\n setScreen('deploying');\n setDeployState('loading');\n } catch (e: unknown) {\n setError(e instanceof Error ? e.message : 'Invalid or expired code.');\n setBusy(false);\n }\n };\n\n const handleResend = async () => {\n if (resendCountdown > 0) return;\n setError('');\n try {\n if (emailMode === 'otp') {\n await sendOtp(email);\n setOtpCode('');\n } else {\n await sendMagicLink(email);\n }\n setResendCountdown(60);\n } catch (e: unknown) {\n setError(e instanceof Error ? e.message : 'Failed to resend.');\n }\n };\n\n useEffect(() => {\n if (resendCountdown <= 0) return;\n const t = setTimeout(() => setResendCountdown(c => c - 1), 1000);\n return () => clearTimeout(t);\n }, [resendCountdown]);\n\n if (!open) return null;\n\n // ── Device approval (waiting for the owner to approve from another device) ─\n\n const handleDeviceResend = async () => {\n if (resendCountdown > 0 || deviceResendBusy) return;\n setDeviceResendBusy(true);\n setError('');\n try {\n await resendDeviceApproval();\n setResendCountdown(60);\n } catch (e: unknown) {\n setError(e instanceof Error ? e.message : 'Failed to resend. Try again.');\n } finally {\n setDeviceResendBusy(false);\n }\n };\n\n if (screen === 'device-approval') {\n // The provider nulls pendingRequestId when the request expires (while the\n // device is still awaiting approval) — that's our signal to switch copy.\n const expired = walletStatus.awaitingApproval && !walletStatus.pendingRequestId;\n return (\n <div style={overlay} data-cavos-theme={theme} role=\"dialog\" aria-modal>\n <div style={{ ...card, position: 'relative' }}>\n {isMobile && <div style={handle} />}\n <button className=\"cavos-close\" style={close} onClick={handleClose} aria-label=\"Close\"><CloseX /></button>\n <div style={{ padding: isMobile ? '28px 24px 32px' : '48px 24px 32px', textAlign: 'center' }}>\n <div style={{ width: 48, height: 48, borderRadius: '50%', margin: '0 auto 16px', background: expired ? 'rgba(239,68,68,0.08)' : 'rgba(59,130,246,0.08)', border: `1px solid ${expired ? 'rgba(239,68,68,0.18)' : 'rgba(59,130,246,0.18)'}`, display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke={expired ? '#dc2626' : '#3b82f6'} strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"5\" y=\"2\" width=\"14\" height=\"20\" rx=\"2.5\" />\n <path d=\"M12 18h.01\" />\n </svg>\n </div>\n <h2 style={{ margin: '0 0 8px', fontSize: '17px', fontWeight: 600, color: textColor, letterSpacing: '-0.02em' }}>\n {expired ? 'Approval link expired' : 'Approve this device'}\n </h2>\n <p style={{ margin: '0 0 20px', fontSize: '13px', color: subTextColor, lineHeight: 1.55 }}>\n {expired\n ? 'The approval link is no longer valid. Request a new one below.'\n : <>For your security, we sent an email to approve this device.{appName ? <> Open it on a device where you're already signed in to your {appName} account.</> : null}</>}\n </p>\n {error && <div style={{ background: errBg, border: `1px solid ${errBorder}`, borderRadius: '10px', padding: '9px 13px', fontSize: '13px', color: errColor, marginBottom: '14px' }}>{error}</div>}\n {expired ? (\n <button className=\"cavos-primary-btn\" style={{ width: '100%', padding: '12px', borderRadius: '12px', border: 'none', background: primaryColor, color: '#fff', fontSize: '14px', fontWeight: 500, cursor: 'pointer', fontFamily: 'inherit', display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '8px', opacity: deviceResendBusy ? 0.65 : 1 }} onClick={handleDeviceResend} disabled={deviceResendBusy}>\n {deviceResendBusy && <Spinner size={15} color=\"#fff\" />}\n {deviceResendBusy ? 'Sending…' : 'Request a new link'}\n </button>\n ) : (\n <div style={{ background: isLight ? 'rgba(0,0,0,0.03)' : 'rgba(255,255,255,0.04)', border: `1px solid ${isLight ? 'rgba(0,0,0,0.06)' : 'rgba(255,255,255,0.06)'}`, borderRadius: '12px', padding: '14px 16px', display: 'flex', alignItems: 'center', gap: 10, justifyContent: 'center', marginBottom: '14px' }}>\n <Spinner size={14} color={subTextColor} />\n <span style={{ fontSize: '12px', color: subTextColor }}>Waiting for approval…</span>\n </div>\n )}\n {!expired && (\n <button className=\"cavos-sub-btn\" style={{ background: 'none', border: 'none', cursor: resendCountdown > 0 ? 'default' : 'pointer', fontSize: '13px', color: subTextColor, width: '100%', textAlign: 'center', padding: 0, fontFamily: 'inherit', transition: 'color 0.15s', opacity: resendCountdown > 0 ? 0.6 : 1 }} onClick={handleDeviceResend} disabled={resendCountdown > 0 || deviceResendBusy}>\n {resendCountdown > 0 ? `Resend email in ${resendCountdown}s` : 'Resend approval email'}\n </button>\n )}\n <button className=\"cavos-sub-btn\" style={{ background: 'none', border: 'none', cursor: 'pointer', fontSize: '13px', color: subTextColor, width: '100%', textAlign: 'center', padding: '14px 0 0', fontFamily: 'inherit', transition: 'color 0.15s' }} onClick={() => { setScreen('recover'); setError(''); }}>\n Sign in with recovery phrase instead\n </button>\n </div>\n <div style={footer}><CavosLogo invert={!isLight} /><span>Secured by Cavos</span></div>\n </div>\n </div>\n );\n }\n\n // ── Recover (lost all devices — restore access with the recovery code) ────\n\n const handleRecoverSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n if (!recoverCode.trim()) return;\n setRecoverBusy(true);\n setError('');\n try {\n await recover(recoverCode);\n // The provider flips to ready; the existing effect drives triggerDone.\n setScreen('deploying');\n setDeployState('loading');\n } catch (e2) {\n setError(e2 instanceof Error ? e2.message : 'Sign-in failed. Check your recovery phrase and try again.');\n setRecoverBusy(false);\n }\n };\n\n if (screen === 'recover') {\n return (\n <div style={overlay} data-cavos-theme={theme} role=\"dialog\" aria-modal onClick={e => { if (e.target === e.currentTarget) handleClose(); }}>\n <div style={{ ...card, position: 'relative' }}>\n {isMobile && <div style={handle} />}\n <button className=\"cavos-close\" style={{ ...close, left: '16px', right: 'auto' }} onClick={() => { setScreen('device-approval'); setError(''); setRecoverCode(''); }} aria-label=\"Back\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"M19 12H5M12 5l-7 7 7 7\"/></svg>\n </button>\n <button className=\"cavos-close\" style={close} onClick={handleClose} aria-label=\"Close\"><CloseX /></button>\n <div style={{ padding: isMobile ? '28px 22px 32px' : '52px 22px 22px' }}>\n <h2 style={{ margin: '0 0 6px', fontSize: '17px', fontWeight: 600, color: textColor, letterSpacing: '-0.02em', textAlign: 'center' }}>Sign in with recovery phrase</h2>\n <p style={{ margin: '0 0 20px', fontSize: '13px', color: subTextColor, textAlign: 'center', lineHeight: 1.5 }}>\n Enter the recovery phrase you saved when you set up this account.\n </p>\n {error && <div style={{ background: errBg, border: `1px solid ${errBorder}`, borderRadius: '10px', padding: '10px 14px', fontSize: '13px', color: errColor, marginBottom: '14px' }}>{error}</div>}\n <form onSubmit={handleRecoverSubmit} style={{ display: 'flex', flexDirection: 'column', gap: '10px' }}>\n <textarea\n className=\"cavos-input-inner\"\n style={{ width: '100%', padding: '12px 14px', border: inputBorder, borderRadius: '12px', fontSize: '14px', color: textColor, background: inputBg, fontFamily: 'inherit', boxSizing: 'border-box', resize: 'vertical', minHeight: 72, lineHeight: 1.5 }}\n placeholder=\"Enter your recovery phrase\"\n value={recoverCode}\n onChange={e => setRecoverCode(e.target.value)}\n required\n disabled={recoverBusy}\n autoFocus\n />\n <button type=\"submit\" className=\"cavos-primary-btn\" style={{ width: '100%', padding: '12px', marginTop: '4px', borderRadius: '12px', border: 'none', background: primaryColor, color: '#fff', fontSize: '14px', fontWeight: 500, cursor: 'pointer', fontFamily: 'inherit', display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '8px', transition: 'opacity 0.15s, transform 0.1s', opacity: recoverBusy ? 0.65 : 1 }} disabled={recoverBusy}>\n {recoverBusy && <Spinner size={15} color=\"#fff\" />}\n {recoverBusy ? 'Restoring access…' : 'Restore access'}\n </button>\n </form>\n </div>\n <div style={footer}><CavosLogo invert={!isLight} /><span>Secured by Cavos</span></div>\n </div>\n </div>\n );\n }\n\n // ── Deploying ─────────────────────────────────────────────────────────────\n\n if (screen === 'deploying') {\n const isDone = deployState === 'done';\n return (\n <div style={overlay} data-cavos-theme={theme} role=\"dialog\" aria-modal>\n <div style={card}>\n {isMobile && <div style={handle} />}\n <div style={{ padding: '52px 28px 44px', display: 'flex', flexDirection: 'column', alignItems: 'center', textAlign: 'center', gap: '16px' }}>\n {isDone ? (\n <div className=\"cavos-check-circle\" style={{ width: 64, height: 64, borderRadius: '50%', background: 'rgba(34,197,94,0.12)', border: '1.5px solid rgba(34,197,94,0.35)', display: 'flex', alignItems: 'center', justifyContent: 'center', animation: 'cavos-ring-glow 1.5s ease-out' }}>\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\">\n <polyline className=\"cavos-check-path\" points=\"20 6 9 17 4 12\" stroke=\"#22c55e\" strokeWidth=\"2.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </div>\n ) : (\n <div style={{ width: 64, height: 64, borderRadius: '50%', background: isLight ? 'rgba(0,0,0,0.04)' : 'rgba(255,255,255,0.04)', border: `1.5px solid ${isLight ? 'rgba(0,0,0,0.08)' : 'rgba(255,255,255,0.08)'}`, display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <Spinner size={26} color={isLight ? 'rgba(0,0,0,0.4)' : 'rgba(255,255,255,0.6)'} />\n </div>\n )}\n <div>\n <h2 style={{ margin: 0, fontSize: '17px', fontWeight: 600, color: textColor, letterSpacing: '-0.02em' }}>\n {isDone ? \"You're all set\" : 'Setting up your account'}\n </h2>\n <p style={{ margin: '6px 0 0', fontSize: '13px', color: subTextColor }}>\n {isDone ? 'Your account is ready' : 'This only takes a moment…'}\n </p>\n </div>\n </div>\n <div style={footer}><CavosLogo invert={!isLight} /><span>Secured by Cavos</span></div>\n </div>\n </div>\n );\n }\n\n // ── Check your inbox ───────────────────────────────────────────────────────\n\n if (screen === 'verify') {\n return (\n <div style={overlay} data-cavos-theme={theme} role=\"dialog\" aria-modal onClick={e => { if (e.target === e.currentTarget) handleClose(); }}>\n <div style={{ ...card, position: 'relative' }}>\n {isMobile && <div style={handle} />}\n <button className=\"cavos-close\" style={close} onClick={handleClose} aria-label=\"Close\"><CloseX /></button>\n <div style={{ padding: isMobile ? '28px 24px 32px' : '40px 24px 24px', textAlign: 'center' }}>\n <div style={{ width: 48, height: 48, borderRadius: '50%', margin: '0 auto 16px', background: 'rgba(34,197,94,0.08)', border: '1px solid rgba(34,197,94,0.18)', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#22c55e\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"/>\n </svg>\n </div>\n <h2 style={{ margin: '0 0 8px', fontSize: '17px', fontWeight: 600, color: textColor, letterSpacing: '-0.02em' }}>Check your inbox</h2>\n <p style={{ margin: '0 0 22px', fontSize: '13px', color: subTextColor, lineHeight: 1.55 }}>\n We sent a sign-in link to <strong style={{ color: textColor, fontWeight: 500 }}>{email}</strong>.<br />Open it on this device to continue.\n </p>\n {error && <div style={{ background: errBg, border: `1px solid ${errBorder}`, borderRadius: '10px', padding: '9px 13px', fontSize: '13px', color: errColor, marginBottom: '14px' }}>{error}</div>}\n <button className=\"cavos-primary-btn\" style={{ width: '100%', padding: '12px', borderRadius: '12px', border: 'none', background: resendCountdown > 0 ? (isLight ? 'rgba(0,0,0,0.06)' : 'rgba(255,255,255,0.08)') : primaryColor, color: resendCountdown > 0 ? subTextColor : '#fff', fontSize: '14px', fontWeight: 500, cursor: resendCountdown > 0 ? 'default' : 'pointer', fontFamily: 'inherit', transition: 'opacity 0.15s', marginBottom: '8px' }} onClick={handleResend} disabled={resendCountdown > 0}>\n {resendCountdown > 0 ? `Resend in ${resendCountdown}s` : 'Resend link'}\n </button>\n <button className=\"cavos-sub-btn\" style={{ background: 'none', border: 'none', cursor: 'pointer', fontSize: '13px', color: subTextColor, width: '100%', textAlign: 'center', padding: '8px 0 0', fontFamily: 'inherit', transition: 'color 0.15s' }} onClick={() => { setScreen('magic-link'); setError(''); }}>\n Use a different email\n </button>\n </div>\n <div style={footer}><CavosLogo invert={!isLight} /><span>Secured by Cavos</span></div>\n </div>\n </div>\n );\n }\n\n // ── OTP code entry ─────────────────────────────────────────────────────────\n\n if (screen === 'otp-code') {\n return (\n <div style={overlay} data-cavos-theme={theme} role=\"dialog\" aria-modal onClick={e => { if (e.target === e.currentTarget) handleClose(); }}>\n <div style={{ ...card, position: 'relative' }}>\n {isMobile && <div style={handle} />}\n <button className=\"cavos-close\" style={{ ...close, left: '16px', right: 'auto' }} onClick={() => { setScreen('magic-link'); setError(''); setOtpCode(''); }} aria-label=\"Back\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"M19 12H5M12 5l-7 7 7 7\"/></svg>\n </button>\n <button className=\"cavos-close\" style={close} onClick={handleClose} aria-label=\"Close\"><CloseX /></button>\n <div style={{ padding: isMobile ? '28px 22px 32px' : '52px 22px 22px', textAlign: 'center' }}>\n <h2 style={{ margin: '0 0 8px', fontSize: '17px', fontWeight: 600, color: textColor, letterSpacing: '-0.02em' }}>Enter your code</h2>\n <p style={{ margin: '0 0 20px', fontSize: '13px', color: subTextColor, lineHeight: 1.5 }}>\n We sent a 6-digit code to <strong style={{ color: textColor, fontWeight: 500 }}>{email}</strong>.\n </p>\n {error && <div style={{ background: errBg, border: `1px solid ${errBorder}`, borderRadius: '10px', padding: '10px 14px', fontSize: '13px', color: errColor, marginBottom: '14px', textAlign: 'left' }}>{error}</div>}\n <form onSubmit={handleOtpVerifySubmit} style={{ display: 'flex', flexDirection: 'column', gap: '16px' }}>\n <div style={{ display: 'flex', gap: '8px', justifyContent: 'center' }} onPaste={onOtpPaste}>\n {[0, 1, 2, 3, 4, 5].map(i => (\n <input\n key={i}\n ref={el => { otpBoxRefs.current[i] = el; }}\n className={`cavos-input-inner cavos-otp-box ${otpCode[i] ? 'cavos-otp-box-filled' : ''}`}\n style={{\n width: '44px',\n height: '52px',\n padding: 0,\n border: inputBorder,\n borderRadius: '12px',\n fontSize: '22px',\n fontWeight: 600,\n color: textColor,\n background: inputBg,\n fontFamily: 'inherit',\n boxSizing: 'border-box',\n textAlign: 'center',\n }}\n type=\"text\"\n inputMode=\"numeric\"\n autoComplete={i === 0 ? 'one-time-code' : 'off'}\n maxLength={1}\n value={otpCode[i] ?? ''}\n onChange={e => setOtpDigit(i, e.target.value)}\n onKeyDown={e => onOtpKeyDown(i, e)}\n onFocus={e => e.target.select()}\n disabled={busy}\n autoFocus={i === 0}\n />\n ))}\n </div>\n <button type=\"submit\" className=\"cavos-primary-btn\" style={{ width: '100%', padding: '12px', marginTop: '4px', borderRadius: '12px', border: 'none', background: primaryColor, color: '#fff', fontSize: '14px', fontWeight: 500, cursor: 'pointer', fontFamily: 'inherit', display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '8px', transition: 'opacity 0.15s, transform 0.1s', opacity: busy || otpCode.length !== 6 ? 0.65 : 1 }} disabled={busy || otpCode.length !== 6}>\n {busy && <Spinner size={15} color=\"#fff\" />}\n {busy ? 'Verifying…' : 'Continue'}\n </button>\n </form>\n <button className=\"cavos-primary-btn\" style={{ width: '100%', padding: '12px', borderRadius: '12px', border: 'none', background: resendCountdown > 0 ? (isLight ? 'rgba(0,0,0,0.06)' : 'rgba(255,255,255,0.08)') : 'transparent', color: resendCountdown > 0 ? subTextColor : primaryColor, fontSize: '14px', fontWeight: 500, cursor: resendCountdown > 0 ? 'default' : 'pointer', fontFamily: 'inherit', transition: 'opacity 0.15s', marginTop: '8px' }} onClick={handleResend} disabled={resendCountdown > 0 || busy}>\n {resendCountdown > 0 ? `Resend in ${resendCountdown}s` : 'Resend code'}\n </button>\n <button className=\"cavos-sub-btn\" style={{ background: 'none', border: 'none', cursor: 'pointer', fontSize: '13px', color: subTextColor, width: '100%', textAlign: 'center', padding: '8px 0 0', fontFamily: 'inherit', transition: 'color 0.15s' }} onClick={() => { setScreen('magic-link'); setError(''); setOtpCode(''); }}>\n Use a different email\n </button>\n </div>\n <div style={footer}><CavosLogo invert={!isLight} /><span>Secured by Cavos</span></div>\n </div>\n </div>\n );\n }\n\n // ── Email form ─────────────────────────────────────────────────────────────\n\n if (screen === 'magic-link') {\n const isOtp = emailMode === 'otp';\n return (\n <div style={overlay} data-cavos-theme={theme} role=\"dialog\" aria-modal onClick={e => { if (e.target === e.currentTarget) handleClose(); }}>\n <div style={{ ...card, position: 'relative' }}>\n {isMobile && <div style={handle} />}\n <button className=\"cavos-close\" style={{ ...close, left: '16px', right: 'auto' }} onClick={() => { setScreen('select'); setError(''); }} aria-label=\"Back\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"M19 12H5M12 5l-7 7 7 7\"/></svg>\n </button>\n <button className=\"cavos-close\" style={close} onClick={handleClose} aria-label=\"Close\"><CloseX /></button>\n <div style={{ padding: isMobile ? '28px 22px 32px' : '52px 22px 22px' }}>\n <h2 style={{ margin: '0 0 6px', fontSize: '17px', fontWeight: 600, color: textColor, letterSpacing: '-0.02em', textAlign: 'center' }}>Sign in with email</h2>\n <p style={{ margin: '0 0 20px', fontSize: '13px', color: subTextColor, textAlign: 'center', lineHeight: 1.5 }}>\n {isOtp ? \"We'll send a secure sign-in code to your inbox.\" : \"We'll send a secure sign-in link to your inbox.\"}\n </p>\n {error && <div style={{ background: errBg, border: `1px solid ${errBorder}`, borderRadius: '10px', padding: '10px 14px', fontSize: '13px', color: errColor, marginBottom: '14px' }}>{error}</div>}\n <form onSubmit={isOtp ? handleOtpRequestSubmit : handleMagicLinkSubmit} style={{ display: 'flex', flexDirection: 'column', gap: '10px' }}>\n <input className=\"cavos-input-inner\" style={{ width: '100%', padding: '12px 14px', border: inputBorder, borderRadius: '12px', fontSize: '14px', color: textColor, background: inputBg, fontFamily: 'inherit', boxSizing: 'border-box', transition: 'border-color 0.15s' }} type=\"email\" placeholder=\"your@email.com\" value={email} onChange={e => setEmail(e.target.value)} required disabled={busy} autoFocus />\n <button type=\"submit\" className=\"cavos-primary-btn\" style={{ width: '100%', padding: '12px', marginTop: '4px', borderRadius: '12px', border: 'none', background: primaryColor, color: '#fff', fontSize: '14px', fontWeight: 500, cursor: 'pointer', fontFamily: 'inherit', display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '8px', transition: 'opacity 0.15s, transform 0.1s', opacity: busy ? 0.65 : 1 }} disabled={busy}>\n {busy && <Spinner size={15} color=\"#fff\" />}\n {busy ? 'Sending…' : (isOtp ? 'Send code' : 'Send magic link')}\n </button>\n </form>\n </div>\n <div style={footer}><CavosLogo invert={!isLight} /><span>Secured by Cavos</span></div>\n </div>\n </div>\n );\n }\n\n // ── Provider selection ─────────────────────────────────────────────────────\n\n const showEmail = providers.includes('email');\n const showGoogle = providers.includes('google');\n const showApple = providers.includes('apple');\n const hasSocial = showGoogle || showApple;\n // Absolute-positioned icon so the label stays optically centered (matches the\n // Privy/Clerk full-width button look) instead of shifting when text changes.\n // No background box — the brand logos render clean, like native sign-in buttons.\n const btnIcon = (icon: React.ReactNode, busyIcon: React.ReactNode, color: string) => (\n <span style={{ position: 'absolute', left: '16px', width: 20, height: 20, display: 'flex', alignItems: 'center', justifyContent: 'center', color, flexShrink: 0 }}>\n {busy ? busyIcon : icon}\n </span>\n );\n\n return (\n <div style={overlay} data-cavos-theme={theme} role=\"dialog\" aria-modal onClick={e => { if (e.target === e.currentTarget) handleClose(); }}>\n <div style={{ ...card, position: 'relative' }}>\n {isMobile && <div style={handle} />}\n <button className=\"cavos-close\" style={close} onClick={handleClose} aria-label=\"Close\"><CloseX /></button>\n\n <div style={{ padding: isMobile ? '24px 20px 32px' : '40px 24px 24px' }}>\n <h2 style={{ margin: '0 0 22px', fontSize: '17px', fontWeight: 600, color: textColor, letterSpacing: '-0.02em', textAlign: 'center' }}>\n {appName ? `Sign in to ${appName}` : 'Log in or sign up'}\n </h2>\n\n <div style={{ display: 'flex', flexDirection: 'column', gap: '10px' }}>\n {showGoogle && (\n <button className=\"cavos-provider\" style={{ ...pBtn, ...(busy ? { opacity: 0.55, cursor: 'not-allowed' } : {}) }} onClick={() => handleOAuth('google')} disabled={busy}>\n {btnIcon(<GoogleIcon />, <Spinner size={14} color=\"#888\" />, '#4285F4')}\n <span>Continue with Google</span>\n </button>\n )}\n\n {showApple && (\n <button className=\"cavos-provider\" style={{ ...pBtn, ...(busy ? { opacity: 0.55, cursor: 'not-allowed' } : {}) }} onClick={() => handleOAuth('apple')} disabled={busy}>\n {btnIcon(<AppleIcon />, <Spinner size={14} color={isLight ? '#111' : '#fff'} />, isLight ? '#111' : '#fff')}\n <span>Continue with Apple</span>\n </button>\n )}\n\n {showEmail && hasSocial && (\n <div style={{ display: 'flex', alignItems: 'center', gap: '12px', margin: '6px 0 2px' }}>\n <span className=\"cavos-divider-line\" style={{ background: isLight ? 'rgba(0,0,0,0.08)' : 'rgba(255,255,255,0.08)' }} />\n <span style={{ fontSize: '12px', color: subTextColor, textTransform: 'uppercase', letterSpacing: '0.05em' }}>or</span>\n <span className=\"cavos-divider-line\" style={{ background: isLight ? 'rgba(0,0,0,0.08)' : 'rgba(255,255,255,0.08)' }} />\n </div>\n )}\n\n {showEmail && (\n <button className=\"cavos-provider\" style={{ ...pBtn, cursor: busy ? 'not-allowed' : 'pointer' }} onClick={() => setScreen('magic-link')} disabled={busy}>\n {btnIcon(<EmailIcon />, <Spinner size={14} color={subTextColor} />, subTextColor)}\n <span>Continue with email</span>\n </button>\n )}\n </div>\n\n {error && <div style={{ marginTop: '14px', background: errBg, border: `1px solid ${errBorder}`, borderRadius: '10px', padding: '9px 13px', fontSize: '13px', color: errColor }}>{error}</div>}\n\n <p style={{ margin: '18px 0 0', fontSize: '11px', color: subTextColor, textAlign: 'center', lineHeight: 1.55 }}>\n By continuing you agree to the{' '}\n <a href=\"https://cavos.xyz/user-privacy\" target=\"_blank\" rel=\"noopener noreferrer\" style={{ color: isLight ? 'rgba(0,0,0,0.45)' : 'rgba(255,255,255,0.45)', textDecoration: 'underline' }}>Privacy Policy</a>\n{' & '}\n <a href=\"https://cavos.xyz/user-terms\" target=\"_blank\" rel=\"noopener noreferrer\" style={{ color: isLight ? 'rgba(0,0,0,0.45)' : 'rgba(255,255,255,0.45)', textDecoration: 'underline' }}>Terms</a>.\n </p>\n </div>\n\n <div style={footer}><CavosLogo invert={!isLight} /><span>Secured by Cavos</span></div>\n </div>\n </div>\n );\n}\n\n// ─── useCavosAuth hook ────────────────────────────────────────────────────────\n\nexport function useCavosAuth() {\n const { openModal, closeModal, isAuthenticated, address, user, walletStatus, logout } = useCavos();\n return { openModal, closeModal, isAuthenticated, address, user, walletStatus, logout };\n}\n","'use client';\n\nimport {\n createContext,\n useContext,\n useEffect,\n useState,\n useCallback,\n useRef,\n type ReactNode,\n} from 'react';\nimport { Cavos } from '../Cavos';\nimport type { Chain, NetworkEnv, CavosWallet } from '../Cavos';\nimport { CavosSolana } from '../chains/solana/CavosSolana';\nimport type { SolanaNetwork } from '../chains/solana/constants';\nimport { CavosAuth } from '../auth/CavosAuth';\nimport type { Identity } from '../auth/AuthProvider';\nimport type { ChainCall } from '../chains/ChainAdapter';\nimport type { PasskeySigner, PasskeyEnrollParams } from '../signer/PasskeySigner';\nimport { HttpRecoveryClient } from '../recovery/HttpRecoveryClient';\nimport { generateRecoveryCode } from '../recovery/BackupSigner';\nimport { CavosAuthModal } from './CavosAuthModal';\n\nexport interface CavosConfig {\n /** Cavos App ID from the dashboard. */\n appId?: string;\n /** Target chain. Defaults to 'starknet'. */\n chain?: Chain;\n /** Environment: 'testnet' (sepolia/devnet) or 'mainnet'. */\n network: NetworkEnv;\n /** Per-app salt so the same user has distinct wallets per app. */\n appSalt: string;\n /** Cavos paymaster API key (sponsors deploy + execute). Required for Starknet. */\n paymasterApiKey?: string;\n /** Override the Cavos auth backend (self-hosted / staging). */\n authBackendUrl?: string;\n /** Override the chain RPC. */\n rpcUrl?: string;\n}\n\nexport interface CavosModalConfig {\n appName?: string;\n appLogo?: string;\n providers?: ('google' | 'apple' | 'email')[];\n /** How the built-in email provider authenticates. Defaults to magic link. */\n emailMode?: 'magic-link' | 'otp';\n primaryColor?: string;\n /** 'light' (default) or 'dark'. */\n theme?: 'light' | 'dark';\n onSuccess?: (address: string) => void;\n}\n\n/** Minimal wallet-status surface the React layer (and modal) needs. */\nexport interface WalletStatus {\n /** True while the device-signer account is being deployed. */\n isDeploying: boolean;\n /** True once deployed and this device is an authorized signer. */\n isReady: boolean;\n /** True if this device still needs approval to operate the wallet. */\n needsDeviceApproval: boolean;\n /** True while waiting for the owner to approve this device from another device. */\n awaitingApproval: boolean;\n /** The pending device-addition request id, when awaitingApproval. */\n pendingRequestId: string | null;\n}\n\nexport interface UserInfo {\n userId: string;\n email?: string;\n provider?: string;\n}\n\nexport interface CavosContextValue {\n /** Open / close the built-in auth modal. */\n openModal: () => void;\n closeModal: () => void;\n isAuthenticated: boolean;\n user: UserInfo | null;\n /** The active chain ('starknet' | 'solana'). */\n chain: Chain;\n /**\n * The raw connected wallet, discriminated by `wallet.chain`. Use this for\n * chain-native calls (e.g. Solana `wallet.execute(amount, dest)`); narrow on\n * `wallet.chain` first. Null until connected.\n */\n wallet: CavosWallet | null;\n address: string | null;\n walletStatus: WalletStatus;\n isLoading: boolean;\n /** Last unrecoverable auth/connect error surfaced to the UI (e.g. a failed\n * OAuth callback). Null while things are healthy. Cleared on a new attempt. */\n authError: string | null;\n /** Clear `authError` (e.g. when the user starts a new login attempt). */\n clearAuthError: () => void;\n /** OAuth social login — opens the provider's hosted flow. */\n login: (provider: 'google' | 'apple') => Promise<void>;\n /** Send a passwordless magic-link email. */\n sendMagicLink: (email: string) => Promise<void>;\n /** Send an email OTP code. */\n sendOtp: (email: string) => Promise<void>;\n /** Verify an email OTP / complete a magic link and deploy the wallet. */\n verifyOtp: (email: string, code: string) => Promise<void>;\n /** Resolve identity from an OAuth callback (?auth_data=…) and deploy. */\n handleCallback: (authData: string) => Promise<void>;\n /** Execute a sponsored (gasless) multicall, signed by the device key. */\n execute: (calls: ChainCall[]) => Promise<{ transactionHash: string }>;\n /** Authorize another device signer on this wallet (sponsored add_signer). */\n addSigner: (pubkey: { x: bigint; y: bigint }) => Promise<{ transactionHash: string }>;\n /** Re-request the device-approval email for the current pending request. */\n resendDeviceApproval: () => Promise<void>;\n /**\n * Enroll a passkey as an approver (2FA-style step-up). Works on every chain.\n * Call this when you want to let users approve new devices from any browser.\n * Requires a ready device; returns the passkey's public key.\n */\n enrollPasskey: (\n passkey: PasskeySigner,\n params: PasskeyEnrollParams,\n ) => Promise<{ publicKey: { x: bigint; y: bigint }; transactionHash?: string }>;\n /**\n * From a fresh browser (status `needs-device-approval`), approve adding THIS\n * device using the user's synced passkey. Works on every chain (Starknet\n * requires a `submit` relayer callback; Solana/Stellar go through the\n * configured relayer). Returns the tx hash.\n */\n approveThisDeviceWithPasskey: (\n passkey: PasskeySigner,\n submit?: (call: ChainCall) => Promise<{ transactionHash: string }>,\n ) => Promise<{ transactionHash: string }>;\n /**\n * Register a backup signer derived from `code` on the current account\n * (gasless). The code is generated by the kit and shown to the user once.\n * Resolves with the code so the caller can display it.\n */\n setupRecovery: () => Promise<string>;\n /**\n * Recover access after losing every device. Requires the recovery code. Runs\n * the full Cavos.recover flow and brings the provider to a ready state.\n */\n recover: (code: string) => Promise<void>;\n logout: () => void;\n}\n\nconst CavosContext = createContext<CavosContextValue | null>(null);\n\nexport interface CavosProviderProps {\n config: CavosConfig;\n modal?: CavosModalConfig;\n children: ReactNode;\n}\n\nconst INITIAL_STATUS: WalletStatus = {\n isDeploying: false,\n isReady: false,\n needsDeviceApproval: false,\n awaitingApproval: false,\n pendingRequestId: null,\n};\n\n/**\n * Drop-in Cavos provider. Wrap your app once; descendants call `useCavos()`.\n *\n * <CavosProvider config={{ network: 'sepolia', appSalt, paymasterApiKey }}\n * modal={{ appName: 'My App', theme: 'dark', emailMode: 'otp' }}>\n * <App />\n * </CavosProvider>\n *\n * Behind the scenes: login (social / email) resolves a stable identity, the kit\n * deploys a device-signer smart account gaslessly, and `execute()` submits\n * gasless multicalls signed silently by the browser's device key.\n */\nexport function CavosProvider({ config, modal, children }: CavosProviderProps) {\n const [auth] = useState(\n () => new CavosAuth({ appId: config.appId, backendUrl: config.authBackendUrl }),\n );\n const [cavos, setCavos] = useState<CavosWallet | null>(null);\n const [identity, setIdentity] = useState<Identity | null>(null);\n const [walletStatus, setWalletStatus] = useState<WalletStatus>(INITIAL_STATUS);\n const [isLoading, setIsLoading] = useState(false);\n const [authError, setAuthError] = useState<string | null>(null);\n const [modalOpen, setModalOpen] = useState(false);\n /** App name/logo fetched from the backend; overrides manual modal props when present. */\n const [branding, setBranding] = useState<{ appName?: string; appLogo?: string }>({});\n\n // Keep the latest config for callbacks that run after async gaps.\n const configRef = useRef(config);\n useEffect(() => {\n configRef.current = config;\n }, [config]);\n\n // Fetch app branding (name, logo) from the backend so the modal shows the\n // integrating app's identity without manual props.\n useEffect(() => {\n if (!config.appId || typeof window === 'undefined') return;\n const base = config.authBackendUrl ?? 'https://cavos.xyz';\n fetch(`${base}/api/oauth/firebase/app-branding?app_id=${encodeURIComponent(config.appId)}`)\n .then((r) => (r.ok ? r.json() : null))\n .then((d) => {\n if (d?.name) setBranding((b) => ({ ...b, appName: d.name }));\n if (d?.logo_url) setBranding((b) => ({ ...b, appLogo: d.logo_url }));\n })\n .catch(() => {});\n }, [config.appId, config.authBackendUrl]);\n\n const openModal = useCallback(() => setModalOpen(true), []);\n const closeModal = useCallback(() => setModalOpen(false), []);\n const clearAuthError = useCallback(() => setAuthError(null), []);\n\n // Re-request the device-approval email for the current pending request. The\n // backend dedups within its TTL; calling again re-sends the owner email so the\n // user can recover from a lost/spam-filtered message.\n const resendDeviceApproval = useCallback(async () => {\n if (!identity || !cavos || cavos.chain !== 'starknet' || !cavos.pendingRequestId) return;\n const backendUrl = configRef.current.authBackendUrl ?? 'https://cavos.xyz';\n if (!configRef.current.appId) return;\n const recovery = new HttpRecoveryClient({ baseUrl: backendUrl, appId: configRef.current.appId });\n await recovery.requestDeviceAddition({\n userId: identity.userId,\n accountAddress: cavos.address,\n newSigner: cavos.publicKey,\n ...(identity.email ? { email: identity.email } : {}),\n });\n }, [identity, cavos]);\n\n // Bring the wallet online for an identity: Cavos.connect deploys if needed.\n const connect = useCallback(async (id: Identity): Promise<CavosWallet> => {\n setWalletStatus({ ...INITIAL_STATUS, isDeploying: true });\n const c = await Cavos.connect({\n chain: configRef.current.chain ?? 'starknet',\n network: configRef.current.network,\n identity: id,\n appSalt: configRef.current.appSalt,\n ...(configRef.current.paymasterApiKey ? { paymasterApiKey: configRef.current.paymasterApiKey } : {}),\n ...(configRef.current.appId ? { appId: configRef.current.appId } : {}),\n ...(configRef.current.authBackendUrl ? { backendUrl: configRef.current.authBackendUrl } : {}),\n ...(configRef.current.rpcUrl ? { rpcUrl: configRef.current.rpcUrl } : {}),\n });\n setCavos(c);\n setIdentity(id);\n // Only Starknet wallets surface a pending device-addition request id.\n const pendingRequestId = c.chain === 'starknet' ? c.pendingRequestId : null;\n setWalletStatus({\n isDeploying: false,\n isReady: c.status === 'ready',\n needsDeviceApproval: c.status === 'needs-device-approval',\n awaitingApproval: c.status === 'needs-device-approval' && !!pendingRequestId,\n pendingRequestId,\n });\n modal?.onSuccess?.(c.address);\n return c;\n }, [modal]);\n\n // On mount: if we're returning from OAuth (?auth_data=…), finish the login.\n // Open the modal immediately so the user sees the \"deploying\" state while the\n // wallet is being brought online — it flips to \"done\" once `isReady`.\n useEffect(() => {\n if (typeof window === 'undefined') return;\n const params = new URLSearchParams(window.location.search);\n const authData = params.get('auth_data') || params.get('zk_auth_data');\n if (!authData) return;\n setModalOpen(true);\n setWalletStatus({ ...INITIAL_STATUS, isDeploying: true });\n let cancelled = false;\n (async () => {\n setIsLoading(true);\n try {\n await handleCallback(authData);\n if (!cancelled) window.history.replaceState({}, document.title, window.location.pathname);\n } catch (e) {\n console.error('[CavosProvider] OAuth callback error:', e);\n if (!cancelled) {\n // Surface the failure instead of closing the modal silently: the user\n // sees an actionable error with a retry, rather than the modal vanishing.\n const msg = e instanceof Error ? e.message : 'Sign-in failed. Please try again.';\n setAuthError(msg);\n setWalletStatus(INITIAL_STATUS);\n }\n } finally {\n if (!cancelled) setIsLoading(false);\n }\n })();\n return () => {\n cancelled = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const handleCallback = useCallback(async (authData: string) => {\n const id = await auth.handleCallback(authData);\n await connect(id);\n }, [auth, connect]);\n\n const login = useCallback(async (provider: 'google' | 'apple') => {\n if (typeof window === 'undefined') throw new Error('OAuth requires a browser');\n setAuthError(null);\n const url = await (provider === 'google'\n ? auth.getGoogleOAuthUrl(window.location.origin + window.location.pathname)\n : auth.getAppleOAuthUrl(window.location.origin + window.location.pathname));\n window.location.href = url;\n }, [auth]);\n\n const sendMagicLink = useCallback(async (email: string) => {\n await auth.sendMagicLink(email);\n }, [auth]);\n\n const sendOtp = useCallback(async (email: string) => {\n await auth.sendOtp(email);\n }, [auth]);\n\n const verifyOtp = useCallback(async (email: string, code: string) => {\n setAuthError(null);\n const id = await auth.verifyOtp(email, code);\n await connect(id);\n }, [auth, connect]);\n\n const execute = useCallback(async (calls: ChainCall[]) => {\n if (!cavos) throw new Error('Not logged in');\n if (cavos.chain !== 'starknet') {\n throw new Error(\n \"kit: useCavos().execute(calls) is Starknet-only. On Solana use the `wallet` handle: wallet.execute(amount, dest).\",\n );\n }\n return cavos.execute(calls);\n }, [cavos]);\n\n const addSigner = useCallback(\n async (pubkey: { x: bigint; y: bigint }) => {\n if (!cavos) throw new Error('Not logged in');\n if (cavos.chain !== 'starknet') {\n throw new Error('kit: addSigner via useCavos() is Starknet-only; use the `wallet` handle on Solana.');\n }\n return cavos.addSigner(pubkey);\n },\n [cavos],\n );\n\n const enrollPasskey = useCallback(\n async (passkey: PasskeySigner, params: PasskeyEnrollParams) => {\n if (!cavos) throw new Error('Not logged in');\n // Present on every chain's wallet handle.\n return cavos.enrollPasskey(passkey, params);\n },\n [cavos],\n );\n\n const approveThisDeviceWithPasskey = useCallback(\n async (\n passkey: PasskeySigner,\n submit?: (call: ChainCall) => Promise<{ transactionHash: string }>,\n ) => {\n if (!cavos) throw new Error('Not logged in');\n if (cavos.chain === 'starknet') {\n // Sponsored through the Cavos paymaster by default; `submit` overrides.\n return cavos.approveThisDeviceWithPasskey({ passkey, ...(submit ? { submit } : {}) });\n }\n // Solana / Stellar submit through their configured relayer.\n const transactionHash = await cavos.approveThisDeviceWithPasskey(passkey);\n return { transactionHash };\n },\n [cavos],\n );\n\n // Generate a recovery code and register its derived backup signer on-chain.\n // The code is returned so the UI can display it once — the kit never persists\n // it and the backend never sees it.\n const setupRecovery = useCallback(async (): Promise<string> => {\n if (!cavos) throw new Error('Not logged in');\n const code = generateRecoveryCode();\n // Both chains expose setupRecovery(code) on the wallet handle.\n await cavos.setupRecovery(code);\n return code;\n }, [cavos]);\n\n // Recover access after losing every device. The caller passes the recovery\n // code; the backup key it derives authorises adding this new device. Brings\n // the provider straight to a ready state. Works on both chains.\n const recover = useCallback(async (code: string) => {\n if (!identity) throw new Error('Sign in first so we know which account to recover.');\n setAuthError(null);\n setWalletStatus({ ...INITIAL_STATUS, isDeploying: true });\n try {\n const chain = configRef.current.chain ?? 'starknet';\n const c: CavosWallet =\n chain === 'solana'\n ? await CavosSolana.recover({\n code,\n identity,\n network: (configRef.current.network === 'mainnet'\n ? 'solana-mainnet'\n : 'solana-devnet') as SolanaNetwork,\n appSalt: configRef.current.appSalt,\n ...(configRef.current.appId ? { appId: configRef.current.appId } : {}),\n ...(configRef.current.authBackendUrl ? { backendUrl: configRef.current.authBackendUrl } : {}),\n ...(configRef.current.rpcUrl ? { rpcUrl: configRef.current.rpcUrl } : {}),\n })\n : await Cavos.recover({\n code,\n identity,\n network: configRef.current.network,\n appSalt: configRef.current.appSalt,\n paymasterApiKey: configRef.current.paymasterApiKey ?? '',\n ...(configRef.current.appId ? { appId: configRef.current.appId } : {}),\n ...(configRef.current.authBackendUrl ? { backendUrl: configRef.current.authBackendUrl } : {}),\n ...(configRef.current.rpcUrl ? { rpcUrl: configRef.current.rpcUrl } : {}),\n });\n setCavos(c);\n setWalletStatus({ ...INITIAL_STATUS, isReady: true });\n modal?.onSuccess?.(c.address);\n } catch (e) {\n const msg = e instanceof Error ? e.message : 'Recovery failed. Check your code and try again.';\n setAuthError(msg);\n setWalletStatus(INITIAL_STATUS);\n throw e;\n }\n }, [identity, modal]);\n\n // Poll the pending device-addition request while this device is awaiting the\n // owner's approval. Once the owner approves (status === 'approved'), the new\n // signer is authorized on-chain, so reconnecting flips the device to \"ready\"\n // automatically — the requester no longer has to sign out and back in.\n useEffect(() => {\n if (!walletStatus.awaitingApproval || !walletStatus.pendingRequestId || !identity) return;\n if (!configRef.current.appId) return;\n const backendUrl = configRef.current.authBackendUrl ?? 'https://cavos.xyz';\n const recovery = new HttpRecoveryClient({ baseUrl: backendUrl, appId: configRef.current.appId });\n const requestId = walletStatus.pendingRequestId;\n let cancelled = false;\n const tick = async () => {\n try {\n const r = await recovery.getPendingRequest(requestId);\n if (cancelled || !r) return;\n if (r.status === 'expired') {\n // Surface expiry so the modal can offer \"request a new one\".\n setWalletStatus((s) => ({ ...s, pendingRequestId: null }));\n return;\n }\n if (r.status === 'approved') {\n // The owner added this device's signer on-chain — reconnect to flip\n // to \"ready\" without making the user log in again.\n await connect(identity);\n }\n } catch {\n /* transient network errors are fine; the next tick retries */\n }\n };\n const interval = setInterval(tick, 4000);\n return () => {\n cancelled = true;\n clearInterval(interval);\n };\n }, [walletStatus.awaitingApproval, walletStatus.pendingRequestId, identity, connect]);\n\n const logout = useCallback(() => {\n setCavos(null);\n setIdentity(null);\n setWalletStatus(INITIAL_STATUS);\n setAuthError(null);\n }, []);\n\n const value: CavosContextValue = {\n openModal,\n closeModal,\n isAuthenticated: !!cavos,\n user: identity\n ? { userId: identity.userId, email: identity.email, provider: identity.provider }\n : null,\n chain: config.chain ?? 'starknet',\n wallet: cavos,\n address: cavos?.address ?? null,\n walletStatus,\n isLoading,\n authError,\n clearAuthError,\n login,\n sendMagicLink,\n sendOtp,\n verifyOtp,\n handleCallback,\n execute,\n addSigner,\n enrollPasskey,\n approveThisDeviceWithPasskey,\n resendDeviceApproval,\n setupRecovery,\n recover,\n logout,\n };\n\n return (\n <CavosContext.Provider value={value}>\n {children}\n {modal !== undefined && (\n <CavosAuthModal\n open={modalOpen}\n onClose={closeModal}\n appName={branding.appName ?? modal.appName}\n appLogo={branding.appLogo ?? modal.appLogo}\n providers={modal.providers}\n emailMode={modal.emailMode}\n primaryColor={modal.primaryColor}\n theme={modal.theme}\n />\n )}\n </CavosContext.Provider>\n );\n}\n\nexport function useCavos(): CavosContextValue {\n const ctx = useContext(CavosContext);\n if (!ctx) throw new Error('useCavos must be used within a CavosProvider');\n return ctx;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/react/CavosAuthModal.tsx","../../src/react/CavosProvider.tsx"],"names":["e","useState","useEffect","useRef","useCallback","jsxs","jsx"],"mappings":"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","file":"index.mjs","sourcesContent":["'use client';\n\nimport React, {\n useState,\n useEffect,\n useCallback,\n useRef,\n type CSSProperties,\n} from 'react';\nimport { useCavos } from './CavosProvider';\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface CavosAuthModalProps {\n open: boolean;\n onClose: () => void;\n onSuccess?: (address: string) => void;\n appName?: string;\n appLogo?: string;\n providers?: ('google' | 'apple' | 'email')[];\n emailMode?: 'magic-link' | 'otp';\n primaryColor?: string;\n /** 'light' (default) or 'dark' */\n theme?: 'light' | 'dark';\n}\n\nconst cavosLogoBase64 = \"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\";\n\ntype Screen =\n | 'select'\n | 'magic-link'\n | 'verify'\n | 'otp-code'\n | 'deploying'\n | 'device-approval'\n | 'passkey-approval'\n | 'recover'\n | 'secure-account'\n | 'recovery-code';\n\n// ─── Style injection ──────────────────────────────────────────────────────────\n\nconst STYLE_ID = 'cavos-modal-styles-v2';\n\nfunction injectStyles() {\n if (typeof document === 'undefined') return;\n if (document.getElementById(STYLE_ID)) return;\n const el = document.createElement('style');\n el.id = STYLE_ID;\n el.textContent = `\n @keyframes cavos-fade { from { opacity:0; } to { opacity:1; } }\n @keyframes cavos-up {\n from { opacity:0; transform:translateY(12px) scale(0.985); }\n to { opacity:1; transform:translateY(0) scale(1); }\n }\n @keyframes cavos-sheet {\n from { transform:translateY(100%); }\n to { transform:translateY(0); }\n }\n @keyframes cavos-spin {\n from { transform:rotate(0deg); } to { transform:rotate(360deg); }\n }\n @keyframes cavos-pop {\n 0% { transform:scale(0.5); opacity:0; }\n 60% { transform:scale(1.12); opacity:1; }\n 100% { transform:scale(1); opacity:1; }\n }\n @keyframes cavos-check-draw {\n from { stroke-dashoffset: 30; }\n to { stroke-dashoffset: 0; }\n }\n @keyframes cavos-ring-glow {\n 0%,100% { box-shadow: 0 0 0 0 rgba(34,197,94,0.4); }\n 50% { box-shadow: 0 0 0 10px rgba(34,197,94,0); }\n }\n .cavos-check-circle {\n animation: cavos-pop 0.45s cubic-bezier(.22,1,.36,1) forwards;\n }\n .cavos-check-path {\n stroke-dasharray: 30;\n stroke-dashoffset: 30;\n animation: cavos-check-draw 0.35s 0.2s cubic-bezier(.22,1,.36,1) forwards;\n }\n .cavos-input-inner:focus { outline:none; }\n .cavos-provider:active { transform:scale(0.99); }\n .cavos-primary-btn:active { transform:scale(0.98); }\n .cavos-otp-input {\n width: 100%;\n text-align: center;\n font-size: 22px;\n font-weight: 600;\n background: transparent;\n border: none;\n outline: none;\n color: inherit;\n font-family: inherit;\n caret-color: transparent;\n }\n .cavos-otp-box {\n transition: border-color 0.15s, box-shadow 0.15s, transform 0.1s;\n }\n .cavos-otp-box-filled {\n transform: scale(1.04);\n }\n .cavos-divider-line {\n flex: 1;\n height: 1px;\n }\n /* Theme-aware interaction styles. The overlay carries data-cavos-theme so\n hovers/focus rings stay legible in both light and dark — the previous\n rgba(0,0,0,…) rules disappeared against the dark background. */\n [data-cavos-theme=\"light\"] .cavos-input-row:focus-within {\n border-color: rgba(0,0,0,0.35) !important;\n box-shadow: 0 0 0 3px rgba(0,0,0,0.06) !important;\n }\n [data-cavos-theme=\"dark\"] .cavos-input-row:focus-within {\n border-color: rgba(255,255,255,0.45) !important;\n box-shadow: 0 0 0 3px rgba(255,255,255,0.08) !important;\n }\n [data-cavos-theme=\"light\"] .cavos-provider:hover { background: rgba(0,0,0,0.035) !important; }\n [data-cavos-theme=\"dark\"] .cavos-provider:hover { background: rgba(255,255,255,0.07) !important; }\n [data-cavos-theme=\"light\"] .cavos-close:hover { background: rgba(0,0,0,0.05) !important; }\n [data-cavos-theme=\"dark\"] .cavos-close:hover { background: rgba(255,255,255,0.08) !important; }\n [data-cavos-theme=\"light\"] .cavos-sub-btn:hover { color: rgba(0,0,0,0.6) !important; }\n [data-cavos-theme=\"dark\"] .cavos-sub-btn:hover { color: rgba(255,255,255,0.65) !important; }\n [data-cavos-theme=\"light\"] .cavos-submit-btn:hover { color: rgba(0,0,0,0.8) !important; }\n [data-cavos-theme=\"dark\"] .cavos-submit-btn:hover { color: rgba(255,255,255,0.85) !important; }\n [data-cavos-theme=\"light\"] .cavos-primary-btn:hover { opacity: 0.88; }\n [data-cavos-theme=\"dark\"] .cavos-primary-btn:hover { opacity: 0.9; }\n [data-cavos-theme=\"light\"] .cavos-divider-line { background: rgba(0,0,0,0.08); }\n [data-cavos-theme=\"dark\"] .cavos-divider-line { background: rgba(255,255,255,0.1); }\n `;\n document.head.appendChild(el);\n}\n\n// ─── Icons ────────────────────────────────────────────────────────────────────\n\nconst GoogleIcon = () => (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\n <path d=\"M17.64 9.2c0-.637-.057-1.251-.164-1.84H9v3.481h4.844c-.209 1.125-.843 2.078-1.796 2.717v2.258h2.908c1.702-1.567 2.684-3.875 2.684-6.615z\" fill=\"#4285F4\"/>\n <path d=\"M9 18c2.43 0 4.467-.806 5.956-2.184l-2.908-2.258c-.806.54-1.837.86-3.048.86-2.344 0-4.328-1.584-5.036-3.711H.957v2.332A8.997 8.997 0 009 18z\" fill=\"#34A853\"/>\n <path d=\"M3.964 10.707A5.41 5.41 0 013.682 9c0-.593.102-1.17.282-1.707V4.961H.957A8.996 8.996 0 000 9c0 1.452.348 2.827.957 4.039l3.007-2.332z\" fill=\"#FBBC05\"/>\n <path d=\"M9 3.58c1.321 0 2.508.454 3.44 1.345l2.582-2.58C13.463.891 11.426 0 9 0A8.997 8.997 0 00.957 4.961L3.964 7.293C4.672 5.163 6.656 3.58 9 3.58z\" fill=\"#EA4335\"/>\n </svg>\n);\n\nconst AppleIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 814 1000\" fill=\"currentColor\">\n <path d=\"M788.1 340.9c-5.8 4.5-108.2 62.2-108.2 190.5 0 148.4 130.3 200.9 134.2 202.2-.6 3.2-20.7 71.9-68.7 141.9-42.8 61.6-87.5 123.1-155.5 123.1s-85.5-39.5-164-39.5c-76 0-103.7 40.8-165.9 40.8s-105-57.8-155.5-127.4C46 790.7 0 663 0 541.8c0-194.3 126.4-297.5 250.8-297.5 66.1 0 121.2 43.4 162.7 43.4 39.5 0 101.1-46 176.3-46 28.5 0 130.9 2.6 198.3 99.2zm-234-181.5c31.1-36.9 53.1-88.1 53.1-139.3 0-7.1-.6-14.3-1.9-20.1-50.6 1.9-110.8 33.7-147.1 75.8-28.5 32.4-55.1 83.6-55.1 135.5 0 7.8 1.3 15.6 1.9 18.1 3.2.6 8.4 1.3 13.6 1.3 45.4 0 102.5-30.4 135.5-71.3z\"/>\n </svg>\n);\n\nconst EmailIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\"/>\n <path d=\"m22 7-8.97 5.7a1.94 1.94 0 01-2.06 0L2 7\"/>\n </svg>\n);\n\n// Clean monochrome fingerprint (Lucide). Inherits the surrounding ink color so\n// it stays on-brand in both themes — no colored circles.\nconst FingerprintIcon = ({ size = 22, color = 'currentColor' }: { size?: number; color?: string }) => (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke={color} strokeWidth=\"1.7\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M2 12C2 6.5 6.5 2 12 2a10 10 0 0 1 8 4\" />\n <path d=\"M5 19.5C5.5 18 6 15 6 12c0-.7.12-1.37.34-2\" />\n <path d=\"M17.29 21.02c.12-.6.43-2.3.5-3.02\" />\n <path d=\"M12 10a2 2 0 0 0-2 2c0 1.02-.1 2.51-.26 4\" />\n <path d=\"M8.65 22c.21-.66.45-1.32.57-2\" />\n <path d=\"M14 13.12c0 2.38 0 6.38-1 8.88\" />\n <path d=\"M2 16h.01\" />\n <path d=\"M21.8 16c.2-2 .131-5.354 0-6\" />\n <path d=\"M9 6.8a6 6 0 0 1 9 5.2c0 .47 0 1.17-.02 2\" />\n </svg>\n);\n\nconst CavosLogo = ({ invert }: { invert?: boolean }) => (\n <img src={`data:image/png;base64,${cavosLogoBase64}`} alt=\"Cavos\" style={{ width: 'auto', height: '16px', objectFit: 'contain', opacity: 0.55, flexShrink: 0, filter: invert ? 'invert(1)' : 'none' }} />\n);\n\nfunction Spinner({ size = 16, color = '#888' }: { size?: number; color?: string }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\"\n style={{ animation: 'cavos-spin 0.75s linear infinite', flexShrink: 0 }}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke={color} strokeOpacity=\"0.2\" strokeWidth=\"2.5\"/>\n <path d=\"M12 2a10 10 0 0110 10\" stroke={color} strokeWidth=\"2.5\" strokeLinecap=\"round\"/>\n </svg>\n );\n}\n\n// ─── Mobile detection hook ────────────────────────────────────────────────────\n\nfunction useIsMobile() {\n const [isMobile, setIsMobile] = useState(false);\n useEffect(() => {\n const mq = window.matchMedia('(max-width: 640px)');\n setIsMobile(mq.matches);\n const handler = (e: MediaQueryListEvent) => setIsMobile(e.matches);\n mq.addEventListener('change', handler);\n return () => mq.removeEventListener('change', handler);\n }, []);\n return isMobile;\n}\n\n// ─── Style helpers ────────────────────────────────────────────────────────────\n\nconst FONT = '-apple-system, BlinkMacSystemFont, \"Segoe UI\", system-ui, sans-serif';\n\nfunction baseOverlay(isMobile: boolean): CSSProperties {\n return {\n position: 'fixed', inset: 0,\n background: 'rgba(0,0,0,0.5)',\n backdropFilter: 'blur(10px)',\n WebkitBackdropFilter: 'blur(10px)',\n zIndex: 9999,\n display: 'flex',\n alignItems: isMobile ? 'flex-end' : 'center',\n justifyContent: 'center',\n padding: isMobile ? '0' : '16px',\n animation: 'cavos-fade 0.18s ease',\n fontFamily: FONT,\n };\n}\n\nfunction lightCard(isMobile: boolean, bg: string): CSSProperties {\n return isMobile ? {\n background: bg,\n borderRadius: '20px 20px 0 0',\n width: '100%',\n maxWidth: '100%',\n boxShadow: '0 -8px 40px rgba(0,0,0,0.18)',\n animation: 'cavos-sheet 0.32s cubic-bezier(0.22,1,0.36,1)',\n overflow: 'hidden',\n } : {\n background: bg,\n borderRadius: '22px',\n width: '100%',\n maxWidth: '400px',\n boxShadow: '0 24px 60px rgba(0,0,0,0.22), 0 0 0 1px rgba(0,0,0,0.05)',\n animation: 'cavos-up 0.25s cubic-bezier(0.22,1,0.36,1)',\n overflow: 'hidden',\n };\n}\n\nfunction providerBtn(textColor: string): CSSProperties {\n const isLight = textColor === '#111111' || textColor === '#111';\n return {\n width: '100%',\n display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '10px',\n padding: '12px 16px',\n background: isLight ? '#fff' : 'rgba(255,255,255,0.04)',\n border: `1px solid ${isLight ? 'rgba(0,0,0,0.12)' : 'rgba(255,255,255,0.12)'}`,\n borderRadius: '12px',\n cursor: 'pointer',\n fontSize: '14px',\n fontWeight: 500,\n color: textColor,\n fontFamily: 'inherit',\n transition: 'background 0.15s, transform 0.1s, border-color 0.15s',\n position: 'relative',\n };\n}\n\nfunction footerBar(textColor: string): CSSProperties {\n const isLight = textColor === '#111111' || textColor === '#111';\n return {\n borderTop: `1px solid ${isLight ? 'rgba(0,0,0,0.06)' : 'rgba(255,255,255,0.06)'}`,\n padding: '12px 20px',\n display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '5px',\n fontSize: '11px',\n color: isLight ? 'rgba(0,0,0,0.28)' : 'rgba(255,255,255,0.28)',\n };\n}\n\nfunction closeBtn(textColor: string): CSSProperties {\n return {\n position: 'absolute', top: '16px', right: '16px',\n width: '28px', height: '28px', borderRadius: '50%',\n border: 'none', background: 'transparent',\n cursor: 'pointer', display: 'flex', alignItems: 'center', justifyContent: 'center',\n color: textColor === '#111111' || textColor === '#111' ? 'rgba(0,0,0,0.3)' : 'rgba(255,255,255,0.4)',\n padding: 0, transition: 'background 0.15s',\n };\n}\n\nfunction mobileHandle(): CSSProperties {\n return {\n width: '36px', height: '4px', borderRadius: '2px',\n background: 'rgba(0,0,0,0.15)', margin: '12px auto 0',\n };\n}\n\nconst CloseX = () => (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/>\n </svg>\n);\n\n// ─── Main component ───────────────────────────────────────────────────────────\n\nexport function CavosAuthModal({\n open,\n onClose,\n appName,\n providers = ['google', 'apple', 'email'],\n emailMode = 'magic-link',\n primaryColor = '#0A0908',\n theme = 'light',\n}: CavosAuthModalProps) {\n const {\n login,\n sendMagicLink,\n sendOtp,\n verifyOtp,\n isAuthenticated,\n address,\n walletStatus,\n authError,\n clearAuthError,\n resendDeviceApproval,\n recover,\n passkeySupported,\n enrollPasskeyDefault,\n approveDeviceWithPasskey,\n setupRecovery,\n } = useCavos();\n const isMobile = useIsMobile();\n\n // Theme-derived values\n const isLight = theme !== 'dark';\n const backgroundColor = isLight ? '#ffffff' : '#111111';\n const textColor = isLight ? '#111111' : '#ffffff';\n const subTextColor = isLight ? 'rgba(0,0,0,0.4)' : 'rgba(255,255,255,0.4)';\n const inputBg = isLight ? '#fff' : 'rgba(255,255,255,0.06)';\n const inputBorder = isLight ? '1px solid rgba(0,0,0,0.12)' : '1px solid rgba(255,255,255,0.12)';\n const errBg = isLight ? 'rgba(239,68,68,0.06)' : 'rgba(239,68,68,0.08)';\n const errColor = isLight ? '#dc2626' : '#f87171';\n const errBorder = isLight ? 'rgba(239,68,68,0.18)' : 'rgba(239,68,68,0.2)';\n const card = lightCard(isMobile, backgroundColor);\n const overlay = baseOverlay(isMobile);\n const handle = mobileHandle();\n const footer = footerBar(textColor);\n const close = closeBtn(textColor);\n const pBtn = providerBtn(textColor);\n\n const [screen, setScreen] = useState<Screen>('select');\n const [email, setEmail] = useState('');\n const [otpCode, setOtpCode] = useState('');\n const [error, setError] = useState('');\n const [busy, setBusy] = useState(false);\n const [deployState, setDeployState] = useState<'loading' | 'done'>('loading');\n const [resendCountdown, setResendCountdown] = useState(0);\n const [deviceResendBusy, setDeviceResendBusy] = useState(false);\n const [recoverCode, setRecoverCode] = useState('');\n const [recoverBusy, setRecoverBusy] = useState(false);\n // Passkey / account-security flows (new-device approval + first-time upsell).\n const [pkBusy, setPkBusy] = useState(false);\n const [pkError, setPkError] = useState('');\n const [savedRecoveryCode, setSavedRecoveryCode] = useState('');\n const [copied, setCopied] = useState(false);\n\n const doneHandledRef = useRef(false);\n // True once the first-time \"secure your account\" step has been shown & handled\n // (completed or skipped) this session, so we don't loop back into it.\n const secureHandledRef = useRef(false);\n const closeTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n // One ref per OTP box for focus management / auto-advance.\n const otpBoxRefs = useRef<Array<HTMLInputElement | null>>([null, null, null, null, null, null]);\n\n // Segmented OTP input helpers: keep `otpCode` (6-digit string) as the single\n // source of truth, drive focus by index, and handle paste/keystrokes cleanly.\n const setOtpDigit = (i: number, raw: string) => {\n const digit = raw.replace(/\\D/g, '').slice(-1);\n setOtpCode(prev => {\n const chars = prev.split('');\n while (chars.length < 6) chars.push('');\n chars[i] = digit;\n const next = chars.join('').slice(0, 6);\n // Auto-advance to the next empty box when a digit is typed.\n if (digit && i < 5) {\n const target = i + 1;\n otpBoxRefs.current[target]?.focus();\n }\n return next;\n });\n };\n\n const onOtpKeyDown = (i: number, e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Backspace' && !otpCode[i] && i > 0) {\n // Empty box + backspace → move focus back instead of clearing nothing.\n otpBoxRefs.current[i - 1]?.focus();\n e.preventDefault();\n } else if (e.key === 'ArrowLeft' && i > 0) {\n otpBoxRefs.current[i - 1]?.focus();\n e.preventDefault();\n } else if (e.key === 'ArrowRight' && i < 5) {\n otpBoxRefs.current[i + 1]?.focus();\n e.preventDefault();\n }\n };\n\n const onOtpPaste = (e: React.ClipboardEvent<HTMLInputElement>) => {\n const text = e.clipboardData.getData('text').replace(/\\D/g, '').slice(0, 6);\n if (!text) return;\n e.preventDefault();\n setOtpCode(text);\n // Focus the box after the last pasted digit (or the last box).\n const focusIdx = Math.min(text.length, 5);\n otpBoxRefs.current[focusIdx]?.focus();\n };\n\n useEffect(() => { injectStyles(); }, []);\n\n // When the provider surfaces an unrecoverable connect error (e.g. a failed\n // OAuth callback), drop the user back on the provider-selection screen with\n // the message + a retry, instead of leaving the modal closed with no feedback.\n useEffect(() => {\n if (!authError) return;\n setBusy(false);\n setDeployState('loading');\n if (screen !== 'device-approval') setScreen('select');\n setError(authError);\n // The provider owns the error; once surfaced here it's \"consumed\" by the UI.\n clearAuthError();\n }, [authError, clearAuthError, screen]);\n\n const triggerDone = useCallback((addr: string) => {\n if (doneHandledRef.current) return;\n doneHandledRef.current = true;\n\n setScreen('deploying');\n setDeployState('done');\n\n closeTimerRef.current = setTimeout(() => {\n onClose();\n setScreen('select');\n setDeployState('loading');\n setEmail(''); setOtpCode(''); setError('');\n doneHandledRef.current = false;\n secureHandledRef.current = false;\n }, 1600);\n // addr unused beyond guarding the transition; keep the param for clarity.\n void addr;\n }, [onClose]);\n\n // Show the \"deploying\" screen whenever a deploy is in progress (e.g. while\n // returning from an OAuth redirect), or once authenticated, then flip to\n // \"done\" when the account is ready.\n useEffect(() => {\n if (!open) return;\n\n if (walletStatus.isDeploying && screen !== 'deploying' && screen !== 'verify') {\n setScreen('deploying');\n setDeployState('loading');\n doneHandledRef.current = false;\n }\n\n if (isAuthenticated && address && walletStatus.isReady) {\n // First sign-up: offer a one-time \"secure your account\" step (passkey /\n // recovery phrase) before finishing. Stay put once we've shown it.\n if (walletStatus.isNewAccount && !secureHandledRef.current) {\n if (screen !== 'secure-account' && screen !== 'recovery-code' && !doneHandledRef.current) {\n setScreen('secure-account');\n }\n } else {\n triggerDone(address);\n }\n }\n\n // This device needs approval. If the account has a passkey enrolled, offer\n // the passkey path (works on any browser); otherwise fall back to the email\n // approval flow. Don't override the recover screen — the user navigated there\n // intentionally to restore access with their recovery phrase.\n if (\n walletStatus.needsDeviceApproval &&\n // A deploy in progress owns the screen; never fight the deploying branch\n // above (both flags true would oscillate deploying ↔ approval → loop).\n !walletStatus.isDeploying &&\n screen !== 'recover' &&\n screen !== 'device-approval' &&\n screen !== 'passkey-approval'\n ) {\n if (walletStatus.hasPasskey && passkeySupported) {\n setScreen('passkey-approval');\n doneHandledRef.current = false;\n } else if (walletStatus.awaitingApproval) {\n setScreen('device-approval');\n doneHandledRef.current = false;\n }\n }\n }, [open, isAuthenticated, address, walletStatus.isReady, walletStatus.isDeploying, walletStatus.awaitingApproval, walletStatus.needsDeviceApproval, walletStatus.hasPasskey, walletStatus.isNewAccount, passkeySupported, screen, triggerDone]);\n\n useEffect(() => () => {\n if (closeTimerRef.current) clearTimeout(closeTimerRef.current);\n }, []);\n\n const handleClose = () => {\n if (screen === 'deploying') return;\n setScreen('select'); setEmail(''); setOtpCode(''); setError('');\n setPkError(''); setSavedRecoveryCode(''); setCopied(false);\n doneHandledRef.current = false;\n secureHandledRef.current = false;\n onClose();\n };\n\n // ── Passkey / account-security handlers ────────────────────────────────────\n\n const finishSecureStep = () => {\n secureHandledRef.current = true;\n if (address) triggerDone(address);\n };\n\n const handleSetupPasskey = async () => {\n setPkBusy(true); setPkError('');\n try {\n await enrollPasskeyDefault();\n finishSecureStep();\n } catch (e: unknown) {\n setPkError(e instanceof Error ? e.message : \"We couldn't set up your passkey. Try again.\");\n } finally {\n setPkBusy(false);\n }\n };\n\n const handleSaveRecovery = async () => {\n setPkBusy(true); setPkError('');\n try {\n const code = await setupRecovery();\n setSavedRecoveryCode(code);\n setScreen('recovery-code');\n } catch (e: unknown) {\n setPkError(e instanceof Error ? e.message : \"We couldn't create your recovery phrase. Try again.\");\n } finally {\n setPkBusy(false);\n }\n };\n\n const handleCopyRecovery = async () => {\n try {\n await navigator.clipboard.writeText(savedRecoveryCode);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch {\n /* clipboard blocked — the user can still select the text manually */\n }\n };\n\n const handlePasskeyApprove = async () => {\n setPkBusy(true); setPkError('');\n try {\n await approveDeviceWithPasskey();\n // approveDeviceWithPasskey reconnects → walletStatus flips to ready and the\n // status effect drives the \"deploying\" → done transition. Always drop the\n // busy flag so we never freeze on \"Verifying…\" if the modal lands back on\n // the passkey screen (e.g. on-chain indexing lag) — the user can retry.\n setPkBusy(false);\n } catch (e: unknown) {\n setPkError(e instanceof Error ? e.message : \"We couldn't verify your passkey. Try again or use email.\");\n setPkBusy(false);\n }\n };\n\n const handleOAuth = async (provider: 'google' | 'apple') => {\n setError(''); setBusy(true);\n try {\n await login(provider);\n } catch (e: unknown) {\n const msg = e instanceof Error ? e.message : 'Authentication failed.';\n setError(msg); setBusy(false);\n }\n };\n\n const handleMagicLinkSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n if (!email) return;\n setError(''); setBusy(true);\n try {\n await sendMagicLink(email);\n setScreen('verify');\n setResendCountdown(60);\n } catch (e: unknown) {\n setError(e instanceof Error ? e.message : 'Failed to send magic link.');\n } finally {\n setBusy(false);\n }\n };\n\n const handleOtpRequestSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n if (!email) return;\n setError(''); setBusy(true);\n try {\n await sendOtp(email);\n setOtpCode('');\n setScreen('otp-code');\n setResendCountdown(60);\n } catch (e: unknown) {\n setError(e instanceof Error ? e.message : 'Failed to send code.');\n } finally {\n setBusy(false);\n }\n };\n\n const handleOtpVerifySubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n if (!email || otpCode.length !== 6) return;\n setError(''); setBusy(true);\n try {\n await verifyOtp(email, otpCode);\n setScreen('deploying');\n setDeployState('loading');\n } catch (e: unknown) {\n setError(e instanceof Error ? e.message : 'Invalid or expired code.');\n setBusy(false);\n }\n };\n\n const handleResend = async () => {\n if (resendCountdown > 0) return;\n setError('');\n try {\n if (emailMode === 'otp') {\n await sendOtp(email);\n setOtpCode('');\n } else {\n await sendMagicLink(email);\n }\n setResendCountdown(60);\n } catch (e: unknown) {\n setError(e instanceof Error ? e.message : 'Failed to resend.');\n }\n };\n\n useEffect(() => {\n if (resendCountdown <= 0) return;\n const t = setTimeout(() => setResendCountdown(c => c - 1), 1000);\n return () => clearTimeout(t);\n }, [resendCountdown]);\n\n if (!open) return null;\n\n // ── Device approval (waiting for the owner to approve from another device) ─\n\n const handleDeviceResend = async () => {\n if (resendCountdown > 0 || deviceResendBusy) return;\n setDeviceResendBusy(true);\n setError('');\n try {\n await resendDeviceApproval();\n setResendCountdown(60);\n } catch (e: unknown) {\n setError(e instanceof Error ? e.message : 'Failed to resend. Try again.');\n } finally {\n setDeviceResendBusy(false);\n }\n };\n\n // ── Secure your account (one-time, first sign-up) ─────────────────────────\n\n if (screen === 'secure-account') {\n return (\n <div style={overlay} data-cavos-theme={theme} role=\"dialog\" aria-modal>\n <div style={{ ...card, position: 'relative' }}>\n {isMobile && <div style={handle} />}\n <div style={{ padding: isMobile ? '28px 24px 28px' : '44px 24px 28px', textAlign: 'center' }}>\n <div style={{ width: 48, height: 48, borderRadius: '50%', margin: '0 auto 16px', background: isLight ? 'rgba(0,0,0,0.04)' : 'rgba(255,255,255,0.06)', border: `1px solid ${isLight ? 'rgba(0,0,0,0.08)' : 'rgba(255,255,255,0.1)'}`, display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke={textColor} strokeWidth=\"1.7\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\" />\n <path d=\"M9 12l2 2 4-4\" />\n </svg>\n </div>\n <h2 style={{ margin: '0 0 8px', fontSize: '17px', fontWeight: 600, color: textColor, letterSpacing: '-0.02em' }}>\n Keep your account safe\n </h2>\n <p style={{ margin: '0 0 24px', fontSize: '13px', color: subTextColor, lineHeight: 1.55 }}>\n Set up a passkey so you can sign in on a new phone or computer in one tap. It takes a few seconds.\n </p>\n {pkError && <div style={{ background: errBg, border: `1px solid ${errBorder}`, borderRadius: '10px', padding: '9px 13px', fontSize: '13px', color: errColor, marginBottom: '14px', textAlign: 'left' }}>{pkError}</div>}\n\n {passkeySupported ? (\n <>\n <button className=\"cavos-primary-btn\" style={{ width: '100%', padding: '13px', borderRadius: '12px', border: 'none', background: primaryColor, color: '#fff', fontSize: '14px', fontWeight: 600, cursor: pkBusy ? 'default' : 'pointer', fontFamily: 'inherit', display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '9px', opacity: pkBusy ? 0.65 : 1, transition: 'opacity 0.15s, transform 0.1s' }} onClick={handleSetupPasskey} disabled={pkBusy}>\n {pkBusy ? <Spinner size={16} color=\"#fff\" /> : <FingerprintIcon size={18} color=\"#fff\" />}\n {pkBusy ? 'Setting up…' : 'Set up a passkey'}\n </button>\n <p style={{ margin: '10px 0 0', fontSize: '12px', color: subTextColor, lineHeight: 1.5 }}>\n Uses Face ID, Touch ID, or your device PIN.\n </p>\n <div style={{ display: 'flex', alignItems: 'center', gap: '12px', margin: '18px 0' }}>\n <span className=\"cavos-divider-line\" style={{ background: isLight ? 'rgba(0,0,0,0.08)' : 'rgba(255,255,255,0.1)' }} />\n <span style={{ fontSize: '11px', color: subTextColor, textTransform: 'uppercase', letterSpacing: '0.06em' }}>or</span>\n <span className=\"cavos-divider-line\" style={{ background: isLight ? 'rgba(0,0,0,0.08)' : 'rgba(255,255,255,0.1)' }} />\n </div>\n <button className=\"cavos-submit-btn\" style={{ width: '100%', padding: '12px', borderRadius: '12px', border: inputBorder, background: 'transparent', color: textColor, fontSize: '14px', fontWeight: 500, cursor: pkBusy ? 'default' : 'pointer', fontFamily: 'inherit', transition: 'background 0.15s', opacity: pkBusy ? 0.6 : 1 }} onClick={handleSaveRecovery} disabled={pkBusy}>\n Save a recovery phrase instead\n </button>\n </>\n ) : (\n <button className=\"cavos-primary-btn\" style={{ width: '100%', padding: '13px', borderRadius: '12px', border: 'none', background: primaryColor, color: '#fff', fontSize: '14px', fontWeight: 600, cursor: pkBusy ? 'default' : 'pointer', fontFamily: 'inherit', display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '9px', opacity: pkBusy ? 0.65 : 1, transition: 'opacity 0.15s' }} onClick={handleSaveRecovery} disabled={pkBusy}>\n {pkBusy && <Spinner size={16} color=\"#fff\" />}\n {pkBusy ? 'Setting up…' : 'Save a recovery phrase'}\n </button>\n )}\n\n <button className=\"cavos-sub-btn\" style={{ background: 'none', border: 'none', cursor: pkBusy ? 'default' : 'pointer', fontSize: '13px', color: subTextColor, width: '100%', textAlign: 'center', padding: '18px 0 0', fontFamily: 'inherit', transition: 'color 0.15s', opacity: pkBusy ? 0.6 : 1 }} onClick={finishSecureStep} disabled={pkBusy}>\n Skip for now\n </button>\n </div>\n <div style={footer}><CavosLogo invert={!isLight} /><span>Secured by Cavos</span></div>\n </div>\n </div>\n );\n }\n\n // ── Recovery phrase reveal (save it once) ─────────────────────────────────\n\n if (screen === 'recovery-code') {\n return (\n <div style={overlay} data-cavos-theme={theme} role=\"dialog\" aria-modal>\n <div style={{ ...card, position: 'relative' }}>\n {isMobile && <div style={handle} />}\n <div style={{ padding: isMobile ? '28px 24px 28px' : '44px 24px 28px', textAlign: 'center' }}>\n <h2 style={{ margin: '0 0 8px', fontSize: '17px', fontWeight: 600, color: textColor, letterSpacing: '-0.02em' }}>\n Save your recovery phrase\n </h2>\n <p style={{ margin: '0 0 18px', fontSize: '13px', color: subTextColor, lineHeight: 1.55 }}>\n Write this down and keep it somewhere safe. It's the only way to get back in if you lose your devices, and we can't recover it for you.\n </p>\n <div style={{ background: isLight ? 'rgba(0,0,0,0.03)' : 'rgba(255,255,255,0.05)', border: `1px solid ${isLight ? 'rgba(0,0,0,0.08)' : 'rgba(255,255,255,0.1)'}`, borderRadius: '12px', padding: '16px', marginBottom: '12px', fontSize: '14px', fontWeight: 500, color: textColor, wordBreak: 'break-word', lineHeight: 1.6, fontFamily: 'ui-monospace, SFMono-Regular, Menlo, monospace', textAlign: 'center' }}>\n {savedRecoveryCode}\n </div>\n <button className=\"cavos-provider\" style={{ ...pBtn, marginBottom: '10px' }} onClick={handleCopyRecovery}>\n <span>{copied ? 'Copied ✓' : 'Copy to clipboard'}</span>\n </button>\n <button className=\"cavos-primary-btn\" style={{ width: '100%', padding: '12px', borderRadius: '12px', border: 'none', background: primaryColor, color: '#fff', fontSize: '14px', fontWeight: 500, cursor: 'pointer', fontFamily: 'inherit', transition: 'opacity 0.15s' }} onClick={finishSecureStep}>\n I've saved it\n </button>\n </div>\n <div style={footer}><CavosLogo invert={!isLight} /><span>Secured by Cavos</span></div>\n </div>\n </div>\n );\n }\n\n // ── Passkey approval (returning user, new device, passkey enrolled) ───────\n\n if (screen === 'passkey-approval') {\n return (\n <div style={overlay} data-cavos-theme={theme} role=\"dialog\" aria-modal>\n <div style={{ ...card, position: 'relative' }}>\n {isMobile && <div style={handle} />}\n <button className=\"cavos-close\" style={close} onClick={handleClose} aria-label=\"Close\"><CloseX /></button>\n <div style={{ padding: isMobile ? '28px 24px 32px' : '48px 24px 32px', textAlign: 'center' }}>\n <div style={{ width: 48, height: 48, borderRadius: '50%', margin: '0 auto 16px', background: isLight ? 'rgba(0,0,0,0.04)' : 'rgba(255,255,255,0.06)', border: `1px solid ${isLight ? 'rgba(0,0,0,0.08)' : 'rgba(255,255,255,0.1)'}`, display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <FingerprintIcon size={24} color={textColor} />\n </div>\n <h2 style={{ margin: '0 0 8px', fontSize: '17px', fontWeight: 600, color: textColor, letterSpacing: '-0.02em' }}>\n Verify it's you\n </h2>\n <p style={{ margin: '0 0 20px', fontSize: '13px', color: subTextColor, lineHeight: 1.55 }}>\n Confirm with Face ID, Touch ID, or your device PIN to add this device to your account.\n </p>\n {pkError && <div style={{ background: errBg, border: `1px solid ${errBorder}`, borderRadius: '10px', padding: '9px 13px', fontSize: '13px', color: errColor, marginBottom: '14px' }}>{pkError}</div>}\n <button className=\"cavos-primary-btn\" style={{ width: '100%', padding: '12px', borderRadius: '12px', border: 'none', background: primaryColor, color: '#fff', fontSize: '14px', fontWeight: 500, cursor: pkBusy ? 'default' : 'pointer', fontFamily: 'inherit', display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '8px', opacity: pkBusy ? 0.65 : 1 }} onClick={handlePasskeyApprove} disabled={pkBusy}>\n {pkBusy && <Spinner size={15} color=\"#fff\" />}\n {pkBusy ? 'Verifying…' : 'Continue with passkey'}\n </button>\n {walletStatus.awaitingApproval && (\n <button className=\"cavos-sub-btn\" style={{ background: 'none', border: 'none', cursor: 'pointer', fontSize: '13px', color: subTextColor, width: '100%', textAlign: 'center', padding: '16px 0 0', fontFamily: 'inherit', transition: 'color 0.15s' }} onClick={() => { setScreen('device-approval'); setPkError(''); }}>\n Approve by email instead\n </button>\n )}\n <button className=\"cavos-sub-btn\" style={{ background: 'none', border: 'none', cursor: 'pointer', fontSize: '13px', color: subTextColor, width: '100%', textAlign: 'center', padding: `${walletStatus.awaitingApproval ? '10px' : '16px'} 0 0`, fontFamily: 'inherit', transition: 'color 0.15s' }} onClick={() => { setScreen('recover'); setPkError(''); }}>\n Use a recovery phrase\n </button>\n </div>\n <div style={footer}><CavosLogo invert={!isLight} /><span>Secured by Cavos</span></div>\n </div>\n </div>\n );\n }\n\n if (screen === 'device-approval') {\n // The provider nulls pendingRequestId when the request expires (while the\n // device is still awaiting approval) — that's our signal to switch copy.\n const expired = walletStatus.awaitingApproval && !walletStatus.pendingRequestId;\n return (\n <div style={overlay} data-cavos-theme={theme} role=\"dialog\" aria-modal>\n <div style={{ ...card, position: 'relative' }}>\n {isMobile && <div style={handle} />}\n <button className=\"cavos-close\" style={close} onClick={handleClose} aria-label=\"Close\"><CloseX /></button>\n <div style={{ padding: isMobile ? '28px 24px 32px' : '48px 24px 32px', textAlign: 'center' }}>\n <div style={{ width: 48, height: 48, borderRadius: '50%', margin: '0 auto 16px', background: expired ? 'rgba(239,68,68,0.08)' : 'rgba(59,130,246,0.08)', border: `1px solid ${expired ? 'rgba(239,68,68,0.18)' : 'rgba(59,130,246,0.18)'}`, display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke={expired ? '#dc2626' : '#3b82f6'} strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"5\" y=\"2\" width=\"14\" height=\"20\" rx=\"2.5\" />\n <path d=\"M12 18h.01\" />\n </svg>\n </div>\n <h2 style={{ margin: '0 0 8px', fontSize: '17px', fontWeight: 600, color: textColor, letterSpacing: '-0.02em' }}>\n {expired ? 'Approval link expired' : 'Approve this device'}\n </h2>\n <p style={{ margin: '0 0 20px', fontSize: '13px', color: subTextColor, lineHeight: 1.55 }}>\n {expired\n ? 'The approval link is no longer valid. Request a new one below.'\n : <>For your security, we sent an email to approve this device.{appName ? <> Open it on a device where you're already signed in to your {appName} account.</> : null}</>}\n </p>\n {error && <div style={{ background: errBg, border: `1px solid ${errBorder}`, borderRadius: '10px', padding: '9px 13px', fontSize: '13px', color: errColor, marginBottom: '14px' }}>{error}</div>}\n {expired ? (\n <button className=\"cavos-primary-btn\" style={{ width: '100%', padding: '12px', borderRadius: '12px', border: 'none', background: primaryColor, color: '#fff', fontSize: '14px', fontWeight: 500, cursor: 'pointer', fontFamily: 'inherit', display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '8px', opacity: deviceResendBusy ? 0.65 : 1 }} onClick={handleDeviceResend} disabled={deviceResendBusy}>\n {deviceResendBusy && <Spinner size={15} color=\"#fff\" />}\n {deviceResendBusy ? 'Sending…' : 'Request a new link'}\n </button>\n ) : (\n <div style={{ background: isLight ? 'rgba(0,0,0,0.03)' : 'rgba(255,255,255,0.04)', border: `1px solid ${isLight ? 'rgba(0,0,0,0.06)' : 'rgba(255,255,255,0.06)'}`, borderRadius: '12px', padding: '14px 16px', display: 'flex', alignItems: 'center', gap: 10, justifyContent: 'center', marginBottom: '14px' }}>\n <Spinner size={14} color={subTextColor} />\n <span style={{ fontSize: '12px', color: subTextColor }}>Waiting for approval…</span>\n </div>\n )}\n {!expired && (\n <button className=\"cavos-sub-btn\" style={{ background: 'none', border: 'none', cursor: resendCountdown > 0 ? 'default' : 'pointer', fontSize: '13px', color: subTextColor, width: '100%', textAlign: 'center', padding: 0, fontFamily: 'inherit', transition: 'color 0.15s', opacity: resendCountdown > 0 ? 0.6 : 1 }} onClick={handleDeviceResend} disabled={resendCountdown > 0 || deviceResendBusy}>\n {resendCountdown > 0 ? `Resend email in ${resendCountdown}s` : 'Resend approval email'}\n </button>\n )}\n <button className=\"cavos-sub-btn\" style={{ background: 'none', border: 'none', cursor: 'pointer', fontSize: '13px', color: subTextColor, width: '100%', textAlign: 'center', padding: '14px 0 0', fontFamily: 'inherit', transition: 'color 0.15s' }} onClick={() => { setScreen('recover'); setError(''); }}>\n Sign in with recovery phrase instead\n </button>\n </div>\n <div style={footer}><CavosLogo invert={!isLight} /><span>Secured by Cavos</span></div>\n </div>\n </div>\n );\n }\n\n // ── Recover (lost all devices — restore access with the recovery code) ────\n\n const handleRecoverSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n if (!recoverCode.trim()) return;\n setRecoverBusy(true);\n setError('');\n try {\n await recover(recoverCode);\n // The provider flips to ready; the existing effect drives triggerDone.\n setScreen('deploying');\n setDeployState('loading');\n } catch (e2) {\n setError(e2 instanceof Error ? e2.message : 'Sign-in failed. Check your recovery phrase and try again.');\n setRecoverBusy(false);\n }\n };\n\n if (screen === 'recover') {\n return (\n <div style={overlay} data-cavos-theme={theme} role=\"dialog\" aria-modal onClick={e => { if (e.target === e.currentTarget) handleClose(); }}>\n <div style={{ ...card, position: 'relative' }}>\n {isMobile && <div style={handle} />}\n <button className=\"cavos-close\" style={{ ...close, left: '16px', right: 'auto' }} onClick={() => { setScreen(walletStatus.hasPasskey && passkeySupported ? 'passkey-approval' : 'device-approval'); setError(''); setRecoverCode(''); }} aria-label=\"Back\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"M19 12H5M12 5l-7 7 7 7\"/></svg>\n </button>\n <button className=\"cavos-close\" style={close} onClick={handleClose} aria-label=\"Close\"><CloseX /></button>\n <div style={{ padding: isMobile ? '28px 22px 32px' : '52px 22px 22px' }}>\n <h2 style={{ margin: '0 0 6px', fontSize: '17px', fontWeight: 600, color: textColor, letterSpacing: '-0.02em', textAlign: 'center' }}>Sign in with recovery phrase</h2>\n <p style={{ margin: '0 0 20px', fontSize: '13px', color: subTextColor, textAlign: 'center', lineHeight: 1.5 }}>\n Enter the recovery phrase you saved when you set up this account.\n </p>\n {error && <div style={{ background: errBg, border: `1px solid ${errBorder}`, borderRadius: '10px', padding: '10px 14px', fontSize: '13px', color: errColor, marginBottom: '14px' }}>{error}</div>}\n <form onSubmit={handleRecoverSubmit} style={{ display: 'flex', flexDirection: 'column', gap: '10px' }}>\n <textarea\n className=\"cavos-input-inner\"\n style={{ width: '100%', padding: '12px 14px', border: inputBorder, borderRadius: '12px', fontSize: '14px', color: textColor, background: inputBg, fontFamily: 'inherit', boxSizing: 'border-box', resize: 'vertical', minHeight: 72, lineHeight: 1.5 }}\n placeholder=\"Enter your recovery phrase\"\n value={recoverCode}\n onChange={e => setRecoverCode(e.target.value)}\n required\n disabled={recoverBusy}\n autoFocus\n />\n <button type=\"submit\" className=\"cavos-primary-btn\" style={{ width: '100%', padding: '12px', marginTop: '4px', borderRadius: '12px', border: 'none', background: primaryColor, color: '#fff', fontSize: '14px', fontWeight: 500, cursor: 'pointer', fontFamily: 'inherit', display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '8px', transition: 'opacity 0.15s, transform 0.1s', opacity: recoverBusy ? 0.65 : 1 }} disabled={recoverBusy}>\n {recoverBusy && <Spinner size={15} color=\"#fff\" />}\n {recoverBusy ? 'Restoring access…' : 'Restore access'}\n </button>\n </form>\n </div>\n <div style={footer}><CavosLogo invert={!isLight} /><span>Secured by Cavos</span></div>\n </div>\n </div>\n );\n }\n\n // ── Deploying ─────────────────────────────────────────────────────────────\n\n if (screen === 'deploying') {\n const isDone = deployState === 'done';\n return (\n <div style={overlay} data-cavos-theme={theme} role=\"dialog\" aria-modal>\n <div style={card}>\n {isMobile && <div style={handle} />}\n <div style={{ padding: '52px 28px 44px', display: 'flex', flexDirection: 'column', alignItems: 'center', textAlign: 'center', gap: '16px' }}>\n {isDone ? (\n <div className=\"cavos-check-circle\" style={{ width: 64, height: 64, borderRadius: '50%', background: 'rgba(34,197,94,0.12)', border: '1.5px solid rgba(34,197,94,0.35)', display: 'flex', alignItems: 'center', justifyContent: 'center', animation: 'cavos-ring-glow 1.5s ease-out' }}>\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\">\n <polyline className=\"cavos-check-path\" points=\"20 6 9 17 4 12\" stroke=\"#22c55e\" strokeWidth=\"2.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </div>\n ) : (\n <div style={{ width: 64, height: 64, borderRadius: '50%', background: isLight ? 'rgba(0,0,0,0.04)' : 'rgba(255,255,255,0.04)', border: `1.5px solid ${isLight ? 'rgba(0,0,0,0.08)' : 'rgba(255,255,255,0.08)'}`, display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <Spinner size={26} color={isLight ? 'rgba(0,0,0,0.4)' : 'rgba(255,255,255,0.6)'} />\n </div>\n )}\n <div>\n <h2 style={{ margin: 0, fontSize: '17px', fontWeight: 600, color: textColor, letterSpacing: '-0.02em' }}>\n {isDone ? \"You're all set\" : 'Setting up your account'}\n </h2>\n <p style={{ margin: '6px 0 0', fontSize: '13px', color: subTextColor }}>\n {isDone ? 'Your account is ready' : 'This only takes a moment…'}\n </p>\n </div>\n </div>\n <div style={footer}><CavosLogo invert={!isLight} /><span>Secured by Cavos</span></div>\n </div>\n </div>\n );\n }\n\n // ── Check your inbox ───────────────────────────────────────────────────────\n\n if (screen === 'verify') {\n return (\n <div style={overlay} data-cavos-theme={theme} role=\"dialog\" aria-modal onClick={e => { if (e.target === e.currentTarget) handleClose(); }}>\n <div style={{ ...card, position: 'relative' }}>\n {isMobile && <div style={handle} />}\n <button className=\"cavos-close\" style={close} onClick={handleClose} aria-label=\"Close\"><CloseX /></button>\n <div style={{ padding: isMobile ? '28px 24px 32px' : '40px 24px 24px', textAlign: 'center' }}>\n <div style={{ width: 48, height: 48, borderRadius: '50%', margin: '0 auto 16px', background: 'rgba(34,197,94,0.08)', border: '1px solid rgba(34,197,94,0.18)', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#22c55e\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"/>\n </svg>\n </div>\n <h2 style={{ margin: '0 0 8px', fontSize: '17px', fontWeight: 600, color: textColor, letterSpacing: '-0.02em' }}>Check your inbox</h2>\n <p style={{ margin: '0 0 22px', fontSize: '13px', color: subTextColor, lineHeight: 1.55 }}>\n We sent a sign-in link to <strong style={{ color: textColor, fontWeight: 500 }}>{email}</strong>.<br />Open it on this device to continue.\n </p>\n {error && <div style={{ background: errBg, border: `1px solid ${errBorder}`, borderRadius: '10px', padding: '9px 13px', fontSize: '13px', color: errColor, marginBottom: '14px' }}>{error}</div>}\n <button className=\"cavos-primary-btn\" style={{ width: '100%', padding: '12px', borderRadius: '12px', border: 'none', background: resendCountdown > 0 ? (isLight ? 'rgba(0,0,0,0.06)' : 'rgba(255,255,255,0.08)') : primaryColor, color: resendCountdown > 0 ? subTextColor : '#fff', fontSize: '14px', fontWeight: 500, cursor: resendCountdown > 0 ? 'default' : 'pointer', fontFamily: 'inherit', transition: 'opacity 0.15s', marginBottom: '8px' }} onClick={handleResend} disabled={resendCountdown > 0}>\n {resendCountdown > 0 ? `Resend in ${resendCountdown}s` : 'Resend link'}\n </button>\n <button className=\"cavos-sub-btn\" style={{ background: 'none', border: 'none', cursor: 'pointer', fontSize: '13px', color: subTextColor, width: '100%', textAlign: 'center', padding: '8px 0 0', fontFamily: 'inherit', transition: 'color 0.15s' }} onClick={() => { setScreen('magic-link'); setError(''); }}>\n Use a different email\n </button>\n </div>\n <div style={footer}><CavosLogo invert={!isLight} /><span>Secured by Cavos</span></div>\n </div>\n </div>\n );\n }\n\n // ── OTP code entry ─────────────────────────────────────────────────────────\n\n if (screen === 'otp-code') {\n return (\n <div style={overlay} data-cavos-theme={theme} role=\"dialog\" aria-modal onClick={e => { if (e.target === e.currentTarget) handleClose(); }}>\n <div style={{ ...card, position: 'relative' }}>\n {isMobile && <div style={handle} />}\n <button className=\"cavos-close\" style={{ ...close, left: '16px', right: 'auto' }} onClick={() => { setScreen('magic-link'); setError(''); setOtpCode(''); }} aria-label=\"Back\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"M19 12H5M12 5l-7 7 7 7\"/></svg>\n </button>\n <button className=\"cavos-close\" style={close} onClick={handleClose} aria-label=\"Close\"><CloseX /></button>\n <div style={{ padding: isMobile ? '28px 22px 32px' : '52px 22px 22px', textAlign: 'center' }}>\n <h2 style={{ margin: '0 0 8px', fontSize: '17px', fontWeight: 600, color: textColor, letterSpacing: '-0.02em' }}>Enter your code</h2>\n <p style={{ margin: '0 0 20px', fontSize: '13px', color: subTextColor, lineHeight: 1.5 }}>\n We sent a 6-digit code to <strong style={{ color: textColor, fontWeight: 500 }}>{email}</strong>.\n </p>\n {error && <div style={{ background: errBg, border: `1px solid ${errBorder}`, borderRadius: '10px', padding: '10px 14px', fontSize: '13px', color: errColor, marginBottom: '14px', textAlign: 'left' }}>{error}</div>}\n <form onSubmit={handleOtpVerifySubmit} style={{ display: 'flex', flexDirection: 'column', gap: '16px' }}>\n <div style={{ display: 'flex', gap: '8px', justifyContent: 'center' }} onPaste={onOtpPaste}>\n {[0, 1, 2, 3, 4, 5].map(i => (\n <input\n key={i}\n ref={el => { otpBoxRefs.current[i] = el; }}\n className={`cavos-input-inner cavos-otp-box ${otpCode[i] ? 'cavos-otp-box-filled' : ''}`}\n style={{\n width: '44px',\n height: '52px',\n padding: 0,\n border: inputBorder,\n borderRadius: '12px',\n fontSize: '22px',\n fontWeight: 600,\n color: textColor,\n background: inputBg,\n fontFamily: 'inherit',\n boxSizing: 'border-box',\n textAlign: 'center',\n }}\n type=\"text\"\n inputMode=\"numeric\"\n autoComplete={i === 0 ? 'one-time-code' : 'off'}\n maxLength={1}\n value={otpCode[i] ?? ''}\n onChange={e => setOtpDigit(i, e.target.value)}\n onKeyDown={e => onOtpKeyDown(i, e)}\n onFocus={e => e.target.select()}\n disabled={busy}\n autoFocus={i === 0}\n />\n ))}\n </div>\n <button type=\"submit\" className=\"cavos-primary-btn\" style={{ width: '100%', padding: '12px', marginTop: '4px', borderRadius: '12px', border: 'none', background: primaryColor, color: '#fff', fontSize: '14px', fontWeight: 500, cursor: 'pointer', fontFamily: 'inherit', display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '8px', transition: 'opacity 0.15s, transform 0.1s', opacity: busy || otpCode.length !== 6 ? 0.65 : 1 }} disabled={busy || otpCode.length !== 6}>\n {busy && <Spinner size={15} color=\"#fff\" />}\n {busy ? 'Verifying…' : 'Continue'}\n </button>\n </form>\n <button className=\"cavos-primary-btn\" style={{ width: '100%', padding: '12px', borderRadius: '12px', border: 'none', background: resendCountdown > 0 ? (isLight ? 'rgba(0,0,0,0.06)' : 'rgba(255,255,255,0.08)') : 'transparent', color: resendCountdown > 0 ? subTextColor : primaryColor, fontSize: '14px', fontWeight: 500, cursor: resendCountdown > 0 ? 'default' : 'pointer', fontFamily: 'inherit', transition: 'opacity 0.15s', marginTop: '8px' }} onClick={handleResend} disabled={resendCountdown > 0 || busy}>\n {resendCountdown > 0 ? `Resend in ${resendCountdown}s` : 'Resend code'}\n </button>\n <button className=\"cavos-sub-btn\" style={{ background: 'none', border: 'none', cursor: 'pointer', fontSize: '13px', color: subTextColor, width: '100%', textAlign: 'center', padding: '8px 0 0', fontFamily: 'inherit', transition: 'color 0.15s' }} onClick={() => { setScreen('magic-link'); setError(''); setOtpCode(''); }}>\n Use a different email\n </button>\n </div>\n <div style={footer}><CavosLogo invert={!isLight} /><span>Secured by Cavos</span></div>\n </div>\n </div>\n );\n }\n\n // ── Email form ─────────────────────────────────────────────────────────────\n\n if (screen === 'magic-link') {\n const isOtp = emailMode === 'otp';\n return (\n <div style={overlay} data-cavos-theme={theme} role=\"dialog\" aria-modal onClick={e => { if (e.target === e.currentTarget) handleClose(); }}>\n <div style={{ ...card, position: 'relative' }}>\n {isMobile && <div style={handle} />}\n <button className=\"cavos-close\" style={{ ...close, left: '16px', right: 'auto' }} onClick={() => { setScreen('select'); setError(''); }} aria-label=\"Back\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"M19 12H5M12 5l-7 7 7 7\"/></svg>\n </button>\n <button className=\"cavos-close\" style={close} onClick={handleClose} aria-label=\"Close\"><CloseX /></button>\n <div style={{ padding: isMobile ? '28px 22px 32px' : '52px 22px 22px' }}>\n <h2 style={{ margin: '0 0 6px', fontSize: '17px', fontWeight: 600, color: textColor, letterSpacing: '-0.02em', textAlign: 'center' }}>Sign in with email</h2>\n <p style={{ margin: '0 0 20px', fontSize: '13px', color: subTextColor, textAlign: 'center', lineHeight: 1.5 }}>\n {isOtp ? \"We'll send a secure sign-in code to your inbox.\" : \"We'll send a secure sign-in link to your inbox.\"}\n </p>\n {error && <div style={{ background: errBg, border: `1px solid ${errBorder}`, borderRadius: '10px', padding: '10px 14px', fontSize: '13px', color: errColor, marginBottom: '14px' }}>{error}</div>}\n <form onSubmit={isOtp ? handleOtpRequestSubmit : handleMagicLinkSubmit} style={{ display: 'flex', flexDirection: 'column', gap: '10px' }}>\n <input className=\"cavos-input-inner\" style={{ width: '100%', padding: '12px 14px', border: inputBorder, borderRadius: '12px', fontSize: '14px', color: textColor, background: inputBg, fontFamily: 'inherit', boxSizing: 'border-box', transition: 'border-color 0.15s' }} type=\"email\" placeholder=\"your@email.com\" value={email} onChange={e => setEmail(e.target.value)} required disabled={busy} autoFocus />\n <button type=\"submit\" className=\"cavos-primary-btn\" style={{ width: '100%', padding: '12px', marginTop: '4px', borderRadius: '12px', border: 'none', background: primaryColor, color: '#fff', fontSize: '14px', fontWeight: 500, cursor: 'pointer', fontFamily: 'inherit', display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '8px', transition: 'opacity 0.15s, transform 0.1s', opacity: busy ? 0.65 : 1 }} disabled={busy}>\n {busy && <Spinner size={15} color=\"#fff\" />}\n {busy ? 'Sending…' : (isOtp ? 'Send code' : 'Send magic link')}\n </button>\n </form>\n </div>\n <div style={footer}><CavosLogo invert={!isLight} /><span>Secured by Cavos</span></div>\n </div>\n </div>\n );\n }\n\n // ── Provider selection ─────────────────────────────────────────────────────\n\n const showEmail = providers.includes('email');\n const showGoogle = providers.includes('google');\n const showApple = providers.includes('apple');\n const hasSocial = showGoogle || showApple;\n // Absolute-positioned icon so the label stays optically centered (matches the\n // Privy/Clerk full-width button look) instead of shifting when text changes.\n // No background box — the brand logos render clean, like native sign-in buttons.\n const btnIcon = (icon: React.ReactNode, busyIcon: React.ReactNode, color: string) => (\n <span style={{ position: 'absolute', left: '16px', width: 20, height: 20, display: 'flex', alignItems: 'center', justifyContent: 'center', color, flexShrink: 0 }}>\n {busy ? busyIcon : icon}\n </span>\n );\n\n return (\n <div style={overlay} data-cavos-theme={theme} role=\"dialog\" aria-modal onClick={e => { if (e.target === e.currentTarget) handleClose(); }}>\n <div style={{ ...card, position: 'relative' }}>\n {isMobile && <div style={handle} />}\n <button className=\"cavos-close\" style={close} onClick={handleClose} aria-label=\"Close\"><CloseX /></button>\n\n <div style={{ padding: isMobile ? '24px 20px 32px' : '40px 24px 24px' }}>\n <h2 style={{ margin: '0 0 22px', fontSize: '17px', fontWeight: 600, color: textColor, letterSpacing: '-0.02em', textAlign: 'center' }}>\n {appName ? `Sign in to ${appName}` : 'Log in or sign up'}\n </h2>\n\n <div style={{ display: 'flex', flexDirection: 'column', gap: '10px' }}>\n {showGoogle && (\n <button className=\"cavos-provider\" style={{ ...pBtn, ...(busy ? { opacity: 0.55, cursor: 'not-allowed' } : {}) }} onClick={() => handleOAuth('google')} disabled={busy}>\n {btnIcon(<GoogleIcon />, <Spinner size={14} color=\"#888\" />, '#4285F4')}\n <span>Continue with Google</span>\n </button>\n )}\n\n {showApple && (\n <button className=\"cavos-provider\" style={{ ...pBtn, ...(busy ? { opacity: 0.55, cursor: 'not-allowed' } : {}) }} onClick={() => handleOAuth('apple')} disabled={busy}>\n {btnIcon(<AppleIcon />, <Spinner size={14} color={isLight ? '#111' : '#fff'} />, isLight ? '#111' : '#fff')}\n <span>Continue with Apple</span>\n </button>\n )}\n\n {showEmail && hasSocial && (\n <div style={{ display: 'flex', alignItems: 'center', gap: '12px', margin: '6px 0 2px' }}>\n <span className=\"cavos-divider-line\" style={{ background: isLight ? 'rgba(0,0,0,0.08)' : 'rgba(255,255,255,0.08)' }} />\n <span style={{ fontSize: '12px', color: subTextColor, textTransform: 'uppercase', letterSpacing: '0.05em' }}>or</span>\n <span className=\"cavos-divider-line\" style={{ background: isLight ? 'rgba(0,0,0,0.08)' : 'rgba(255,255,255,0.08)' }} />\n </div>\n )}\n\n {showEmail && (\n <button className=\"cavos-provider\" style={{ ...pBtn, cursor: busy ? 'not-allowed' : 'pointer' }} onClick={() => setScreen('magic-link')} disabled={busy}>\n {btnIcon(<EmailIcon />, <Spinner size={14} color={subTextColor} />, subTextColor)}\n <span>Continue with email</span>\n </button>\n )}\n </div>\n\n {error && <div style={{ marginTop: '14px', background: errBg, border: `1px solid ${errBorder}`, borderRadius: '10px', padding: '9px 13px', fontSize: '13px', color: errColor }}>{error}</div>}\n\n <p style={{ margin: '18px 0 0', fontSize: '11px', color: subTextColor, textAlign: 'center', lineHeight: 1.55 }}>\n By continuing you agree to the{' '}\n <a href=\"https://cavos.xyz/user-privacy\" target=\"_blank\" rel=\"noopener noreferrer\" style={{ color: isLight ? 'rgba(0,0,0,0.45)' : 'rgba(255,255,255,0.45)', textDecoration: 'underline' }}>Privacy Policy</a>\n{' & '}\n <a href=\"https://cavos.xyz/user-terms\" target=\"_blank\" rel=\"noopener noreferrer\" style={{ color: isLight ? 'rgba(0,0,0,0.45)' : 'rgba(255,255,255,0.45)', textDecoration: 'underline' }}>Terms</a>.\n </p>\n </div>\n\n <div style={footer}><CavosLogo invert={!isLight} /><span>Secured by Cavos</span></div>\n </div>\n </div>\n );\n}\n\n// ─── useCavosAuth hook ────────────────────────────────────────────────────────\n\nexport function useCavosAuth() {\n const { openModal, closeModal, isAuthenticated, address, user, walletStatus, logout } = useCavos();\n return { openModal, closeModal, isAuthenticated, address, user, walletStatus, logout };\n}\n","'use client';\n\nimport {\n createContext,\n useContext,\n useEffect,\n useState,\n useCallback,\n useRef,\n type ReactNode,\n} from 'react';\nimport { Cavos } from '../Cavos';\nimport type { Chain, NetworkEnv, CavosWallet } from '../Cavos';\nimport { CavosSolana } from '../chains/solana/CavosSolana';\nimport type { SolanaNetwork } from '../chains/solana/constants';\nimport { PasskeyPrf } from '../chains/stellar/PasskeyPrf';\nimport { CavosAuth } from '../auth/CavosAuth';\nimport type { Identity } from '../auth/AuthProvider';\nimport type { ChainCall, ExecuteOptions } from '../chains/ChainAdapter';\nimport { PasskeySigner } from '../signer/PasskeySigner';\nimport type { PasskeyEnrollParams } from '../signer/PasskeySigner';\nimport { HttpRecoveryClient } from '../recovery/HttpRecoveryClient';\nimport { generateRecoveryCode } from '../recovery/BackupSigner';\nimport { CavosAuthModal } from './CavosAuthModal';\n\nexport interface CavosConfig {\n /** Cavos App ID from the dashboard. */\n appId?: string;\n /** Target chain. Defaults to 'starknet'. */\n chain?: Chain;\n /** Environment: 'testnet' (sepolia/devnet) or 'mainnet'. */\n network: NetworkEnv;\n /** Per-app salt so the same user has distinct wallets per app. */\n appSalt: string;\n /** Cavos paymaster API key (sponsors deploy + execute). Required for Starknet. */\n paymasterApiKey?: string;\n /** Override the Cavos auth backend (self-hosted / staging). */\n authBackendUrl?: string;\n /** Override the chain RPC. */\n rpcUrl?: string;\n}\n\nexport interface CavosModalConfig {\n appName?: string;\n appLogo?: string;\n providers?: ('google' | 'apple' | 'email')[];\n /** How the built-in email provider authenticates. Defaults to magic link. */\n emailMode?: 'magic-link' | 'otp';\n primaryColor?: string;\n /** 'light' (default) or 'dark'. */\n theme?: 'light' | 'dark';\n onSuccess?: (address: string) => void;\n}\n\n/** Minimal wallet-status surface the React layer (and modal) needs. */\nexport interface WalletStatus {\n /** True while the device-signer account is being deployed. */\n isDeploying: boolean;\n /** True once deployed and this device is an authorized signer. */\n isReady: boolean;\n /** True if this device still needs approval to operate the wallet. */\n needsDeviceApproval: boolean;\n /** True while waiting for the owner to approve this device from another device. */\n awaitingApproval: boolean;\n /** The pending device-addition request id, when awaitingApproval. */\n pendingRequestId: string | null;\n /** True if the account already has a passkey enrolled as an approver, so the\n * modal can offer passkey approval over email on the new-device path. */\n hasPasskey: boolean;\n /** True right after a brand-new account is created (first sign-up), so the UI\n * can offer a one-time \"secure your account\" step. Cleared once handled. */\n isNewAccount: boolean;\n}\n\nexport interface UserInfo {\n userId: string;\n email?: string;\n provider?: string;\n}\n\nexport interface CavosContextValue {\n /** Open / close the built-in auth modal. */\n openModal: () => void;\n closeModal: () => void;\n isAuthenticated: boolean;\n user: UserInfo | null;\n /** The active chain ('starknet' | 'solana' | 'stellar'). */\n chain: Chain;\n /**\n * The connected wallet, discriminated by `wallet.chain`. Narrow on\n * `wallet.chain` before chain-native calls (e.g. Solana `wallet.execute(amount,\n * dest)`). Null until connected.\n */\n wallet: CavosWallet | null;\n address: string | null;\n walletStatus: WalletStatus;\n isLoading: boolean;\n /** Last unrecoverable auth/connect error surfaced to the UI (e.g. a failed\n * OAuth callback). Null while things are healthy. Cleared on a new attempt. */\n authError: string | null;\n /** Clear `authError` (e.g. when the user starts a new login attempt). */\n clearAuthError: () => void;\n /** OAuth social login — opens the provider's hosted flow. */\n login: (provider: 'google' | 'apple') => Promise<void>;\n /** Send a passwordless magic-link email. */\n sendMagicLink: (email: string) => Promise<void>;\n /** Send an email OTP code. */\n sendOtp: (email: string) => Promise<void>;\n /** Verify an email OTP / complete a magic link and deploy the wallet. */\n verifyOtp: (email: string, code: string) => Promise<void>;\n /** Resolve identity from an OAuth callback (?auth_data=…) and deploy. */\n handleCallback: (authData: string) => Promise<void>;\n /**\n * Execute a multicall signed by the device key (Starknet-only — on Solana /\n * Stellar call `wallet.execute(...)` directly). Sponsored (gasless) by default;\n * pass `{ sponsored: false }` to submit directly with the account paying its\n * own fee.\n */\n execute: (calls: ChainCall[], opts?: ExecuteOptions) => Promise<{ transactionHash: string }>;\n /** Authorize another device signer on this wallet (sponsored add_signer). */\n addSigner: (pubkey: { x: bigint; y: bigint }) => Promise<{ transactionHash: string }>;\n /** Re-request the device-approval email for the current pending request. */\n resendDeviceApproval: () => Promise<void>;\n /**\n * Enroll a passkey as an approver (2FA-style step-up). Requires a ready device;\n * returns the passkey's public key.\n */\n enrollPasskey: (\n passkey: PasskeySigner,\n params: PasskeyEnrollParams,\n ) => Promise<{ publicKey: { x: bigint; y: bigint }; transactionHash?: string }>;\n /** Whether this device can use a platform passkey (Face ID / Touch ID / PIN). */\n passkeySupported: boolean;\n /**\n * Modal-friendly wrapper: enroll a synced passkey as an approver using the\n * signed-in user's identity + the app name. Requires a ready device.\n */\n enrollPasskeyDefault: () => Promise<void>;\n /**\n * Modal-friendly wrapper for the new-device flow: prompt the user's synced\n * passkey to approve THIS device, then refresh to a ready state. Sponsored by\n * the default paymaster/relayer.\n */\n approveDeviceWithPasskey: () => Promise<void>;\n /**\n * Register a backup signer derived from a generated recovery code (gasless).\n * Resolves with the code so the caller can display it once.\n */\n setupRecovery: () => Promise<string>;\n /**\n * Recover access after losing every device. Requires the recovery code. Brings\n * the provider to a ready state.\n */\n recover: (code: string) => Promise<void>;\n logout: () => void;\n}\n\nconst CavosContext = createContext<CavosContextValue | null>(null);\n\nexport interface CavosProviderProps {\n /** A single chain config. The provider manages exactly one chain. */\n config: CavosConfig;\n modal?: CavosModalConfig;\n children: ReactNode;\n}\n\nconst INITIAL_STATUS: WalletStatus = {\n isDeploying: false,\n isReady: false,\n needsDeviceApproval: false,\n awaitingApproval: false,\n pendingRequestId: null,\n hasPasskey: false,\n isNewAccount: false,\n};\n\n/**\n * Drop-in Cavos provider for ONE chain. Wrap your app once; descendants call\n * `useCavos()`.\n *\n * <CavosProvider config={{ chain: 'solana', network: 'testnet', appId, appSalt }}\n * modal={{ appName: 'My App', theme: 'dark' }}>\n * <App />\n * </CavosProvider>\n *\n * Behind the scenes: login (social / email) resolves a stable identity, the kit\n * deploys a device-signer smart account gaslessly, and the wallet handle submits\n * gasless transactions signed silently by the browser's device key.\n */\nexport function CavosProvider({ config, modal, children }: CavosProviderProps) {\n const [auth] = useState(\n () => new CavosAuth({ appId: config.appId, backendUrl: config.authBackendUrl }),\n );\n const [wallet, setWallet] = useState<CavosWallet | null>(null);\n const [identity, setIdentity] = useState<Identity | null>(null);\n const [walletStatus, setWalletStatus] = useState<WalletStatus>(INITIAL_STATUS);\n const [isLoading, setIsLoading] = useState(false);\n const [authError, setAuthError] = useState<string | null>(null);\n const [modalOpen, setModalOpen] = useState(false);\n const [passkeySupported, setPasskeySupported] = useState(false);\n /** App name/logo fetched from the backend; overrides manual modal props when present. */\n const [branding, setBranding] = useState<{ appName?: string; appLogo?: string }>({});\n\n // Detect platform-passkey support once, so the modal can hide passkey options\n // on devices/browsers that can't offer them.\n useEffect(() => {\n let cancelled = false;\n PasskeySigner.isSupported()\n .then((ok) => { if (!cancelled) setPasskeySupported(ok); })\n .catch(() => {});\n return () => { cancelled = true; };\n }, []);\n\n // Keep the latest config for callbacks that run after async gaps.\n const configRef = useRef(config);\n useEffect(() => {\n configRef.current = config;\n });\n\n // Fetch app branding (name, logo) from the backend so the modal shows the\n // integrating app's identity without manual props.\n useEffect(() => {\n if (!config.appId || typeof window === 'undefined') return;\n const base = config.authBackendUrl ?? 'https://cavos.xyz';\n fetch(`${base}/api/oauth/firebase/app-branding?app_id=${encodeURIComponent(config.appId)}`)\n .then((r) => (r.ok ? r.json() : null))\n .then((d) => {\n if (d?.name) setBranding((b) => ({ ...b, appName: d.name }));\n if (d?.logo_url) setBranding((b) => ({ ...b, appLogo: d.logo_url }));\n })\n .catch(() => {});\n }, [config.appId, config.authBackendUrl]);\n\n const openModal = useCallback(() => setModalOpen(true), []);\n const closeModal = useCallback(() => setModalOpen(false), []);\n const clearAuthError = useCallback(() => setAuthError(null), []);\n\n // Re-request the device-approval email for the current pending request\n // (Starknet-only email flow). The backend dedups within its TTL.\n const resendDeviceApproval = useCallback(async () => {\n const cfg = configRef.current;\n if (!identity || !wallet || wallet.chain !== 'starknet' || !wallet.pendingRequestId) return;\n const backendUrl = cfg.authBackendUrl ?? 'https://cavos.xyz';\n if (!cfg.appId) return;\n const recovery = new HttpRecoveryClient({ baseUrl: backendUrl, appId: cfg.appId });\n await recovery.requestDeviceAddition({\n userId: identity.userId,\n accountAddress: wallet.address,\n newSigner: wallet.publicKey,\n ...(identity.email ? { email: identity.email } : {}),\n });\n }, [identity, wallet]);\n\n // Connect the configured chain for an identity (deploys if needed), then\n // publish its status. `silent` reconnects keep the current screen instead of\n // resetting to the deploying state (used right after a passkey approval).\n const connect = useCallback(async (id: Identity, opts?: { silent?: boolean }): Promise<CavosWallet> => {\n const cfg = configRef.current;\n if (!opts?.silent) setWalletStatus({ ...INITIAL_STATUS, isDeploying: true });\n const w = await Cavos.connect({\n chain: cfg.chain ?? 'starknet',\n network: cfg.network,\n identity: id,\n appSalt: cfg.appSalt,\n ...(cfg.paymasterApiKey ? { paymasterApiKey: cfg.paymasterApiKey } : {}),\n ...(cfg.appId ? { appId: cfg.appId } : {}),\n ...(cfg.authBackendUrl ? { backendUrl: cfg.authBackendUrl } : {}),\n ...(cfg.rpcUrl ? { rpcUrl: cfg.rpcUrl } : {}),\n });\n setWallet(w);\n setIdentity(id);\n\n const pendingRequestId = w.chain === 'starknet' ? w.pendingRequestId : null;\n let hasPasskey = false;\n if (w.status === 'needs-device-approval') {\n try { hasPasskey = await w.hasPasskey(); } catch { /* leave false → email flow */ }\n }\n\n setWalletStatus({\n isDeploying: false,\n isReady: w.status === 'ready',\n needsDeviceApproval: w.status === 'needs-device-approval',\n awaitingApproval: w.status === 'needs-device-approval' && !!pendingRequestId,\n pendingRequestId,\n hasPasskey,\n isNewAccount: w.isNewAccount,\n });\n modal?.onSuccess?.(w.address);\n return w;\n }, [modal]);\n\n // On mount: if we're returning from OAuth (?auth_data=…), finish the login.\n useEffect(() => {\n if (typeof window === 'undefined') return;\n const params = new URLSearchParams(window.location.search);\n const authData = params.get('auth_data') || params.get('zk_auth_data');\n if (!authData) return;\n setModalOpen(true);\n setWalletStatus({ ...INITIAL_STATUS, isDeploying: true });\n let cancelled = false;\n (async () => {\n setIsLoading(true);\n try {\n await handleCallback(authData);\n if (!cancelled) window.history.replaceState({}, document.title, window.location.pathname);\n } catch (e) {\n console.error('[CavosProvider] OAuth callback error:', e);\n if (!cancelled) {\n const msg = e instanceof Error ? e.message : 'Sign-in failed. Please try again.';\n setAuthError(msg);\n setWalletStatus(INITIAL_STATUS);\n }\n } finally {\n if (!cancelled) setIsLoading(false);\n }\n })();\n return () => {\n cancelled = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const handleCallback = useCallback(async (authData: string) => {\n const id = await auth.handleCallback(authData);\n await connect(id);\n }, [auth, connect]);\n\n const login = useCallback(async (provider: 'google' | 'apple') => {\n if (typeof window === 'undefined') throw new Error('OAuth requires a browser');\n setAuthError(null);\n const url = await (provider === 'google'\n ? auth.getGoogleOAuthUrl(window.location.origin + window.location.pathname)\n : auth.getAppleOAuthUrl(window.location.origin + window.location.pathname));\n window.location.href = url;\n }, [auth]);\n\n const sendMagicLink = useCallback(async (email: string) => {\n await auth.sendMagicLink(email);\n }, [auth]);\n\n const sendOtp = useCallback(async (email: string) => {\n await auth.sendOtp(email);\n }, [auth]);\n\n const verifyOtp = useCallback(async (email: string, code: string) => {\n setAuthError(null);\n const id = await auth.verifyOtp(email, code);\n await connect(id);\n }, [auth, connect]);\n\n const execute = useCallback(async (calls: ChainCall[], opts?: ExecuteOptions) => {\n if (!wallet) throw new Error('Not logged in');\n if (wallet.chain !== 'starknet') {\n throw new Error(\n \"kit: useCavos().execute(calls) is Starknet-only. On Solana/Stellar use the `wallet` handle: wallet.execute(amount, dest).\",\n );\n }\n return wallet.execute(calls, opts);\n }, [wallet]);\n\n const addSigner = useCallback(\n async (pubkey: { x: bigint; y: bigint }) => {\n if (!wallet) throw new Error('Not logged in');\n if (wallet.chain !== 'starknet') {\n throw new Error('kit: addSigner via useCavos() is Starknet-only; use the `wallet` handle on other chains.');\n }\n return wallet.addSigner(pubkey);\n },\n [wallet],\n );\n\n const enrollPasskey = useCallback(\n async (passkey: PasskeySigner, params: PasskeyEnrollParams) => {\n if (!wallet) throw new Error('Not logged in');\n if (wallet.chain === 'stellar') {\n throw new Error(\n 'kit: on Stellar, use enrollPasskeyDefault() — the passkey factor is a WebAuthn PRF secret, not a signer object.',\n );\n }\n return wallet.enrollPasskey(passkey, params);\n },\n [wallet],\n );\n\n const rpName = branding.appName ?? modal?.appName ?? 'Cavos';\n\n // Enroll a synced passkey as an approver on the connected chain (single OS prompt).\n const enrollPasskeyDefault = useCallback(async () => {\n if (!wallet || !identity) throw new Error('Not logged in');\n if (wallet.status !== 'ready') throw new Error('kit: no ready device to enroll a passkey on');\n if (wallet.chain === 'stellar') {\n // Classic Stellar uses a WebAuthn PRF secret (not an on-chain assertion) as\n // the passkey factor that wraps the account DEK.\n const prf = new PasskeyPrf({ rpName });\n const { secret } = await prf.enroll({\n userId: identity.userId,\n userName: identity.email ?? identity.userId,\n ...(identity.email ? { displayName: identity.email } : {}),\n });\n await wallet.enrollPasskey(secret ?? (await prf.getSecret()));\n return;\n }\n const passkey = new PasskeySigner({ rpName });\n await wallet.enrollPasskey(passkey, {\n userId: identity.userId,\n userName: identity.email ?? identity.userId,\n ...(identity.email ? { displayName: identity.email } : {}),\n });\n }, [wallet, identity, rpName]);\n\n // New-device flow: ONE passkey prompt approves THIS device on the connected\n // chain, then poll readiness and reconnect once.\n const approveDeviceWithPasskey = useCallback(async () => {\n if (!wallet || !identity) throw new Error('Not logged in');\n if (wallet.status !== 'needs-device-approval') {\n await connect(identity);\n return;\n }\n if (wallet.chain === 'stellar') {\n const prf = new PasskeyPrf({ rpName });\n await wallet.approveThisDeviceWithPasskey(await prf.getSecret());\n } else if (wallet.chain === 'starknet') {\n const passkey = new PasskeySigner({ rpName });\n await wallet.approveThisDeviceWithPasskey({ passkey });\n } else {\n const passkey = new PasskeySigner({ rpName });\n await wallet.approveThisDeviceWithPasskey(passkey);\n }\n // The on-chain add_signer isn't indexed the instant the tx submits — show the\n // deploying state and poll readiness (cheap, side-effect free) until it lands.\n setWalletStatus((s) => ({ ...s, isDeploying: true, needsDeviceApproval: false, awaitingApproval: false }));\n const deadline = Date.now() + 60_000;\n for (;;) {\n let ready = false;\n try { ready = await wallet.isReady(); } catch { /* transient RPC — retry */ }\n if (ready) break;\n if (Date.now() > deadline) {\n setWalletStatus((s) => ({ ...s, isDeploying: false, needsDeviceApproval: true }));\n throw new Error(\n \"Your device is being added, but it's taking longer than usual. Please try again in a moment.\",\n );\n }\n await new Promise((r) => setTimeout(r, 3000));\n }\n await connect(identity, { silent: true });\n }, [wallet, identity, rpName, connect]);\n\n // Generate a recovery code and register its derived backup signer (gasless).\n // The code is returned so the UI can display it once — never persisted.\n const setupRecovery = useCallback(async (): Promise<string> => {\n if (!wallet) throw new Error('Not logged in');\n const code = generateRecoveryCode();\n await wallet.setupRecovery(code);\n return code;\n }, [wallet]);\n\n // Recover access after losing every device on the configured chain.\n const recover = useCallback(async (code: string) => {\n if (!identity) throw new Error('Sign in first so we know which account to recover.');\n const cfg = configRef.current;\n setAuthError(null);\n setWalletStatus({ ...INITIAL_STATUS, isDeploying: true });\n try {\n const chain = cfg.chain ?? 'starknet';\n let w: CavosWallet;\n if (chain === 'solana') {\n w = await CavosSolana.recover({\n code,\n identity,\n network: (cfg.network === 'mainnet' ? 'solana-mainnet' : 'solana-devnet') as SolanaNetwork,\n appSalt: cfg.appSalt,\n ...(cfg.appId ? { appId: cfg.appId } : {}),\n ...(cfg.authBackendUrl ? { backendUrl: cfg.authBackendUrl } : {}),\n ...(cfg.rpcUrl ? { rpcUrl: cfg.rpcUrl } : {}),\n });\n } else if (chain === 'stellar') {\n // Classic `G…`: reconnect this (fresh) device, then use the recovery code\n // to approve it — the code unlocks the control key which authorizes adding\n // this device's slot. The account already exists, so no funder is needed.\n const sw = await Cavos.connect({\n chain: 'stellar',\n network: cfg.network,\n identity,\n appSalt: cfg.appSalt,\n ...(cfg.appId ? { appId: cfg.appId } : {}),\n ...(cfg.authBackendUrl ? { backendUrl: cfg.authBackendUrl } : {}),\n });\n if (sw.chain === 'stellar' && sw.status === 'needs-device-approval') {\n await sw.approveThisDeviceWithRecovery(code);\n }\n w = sw;\n } else {\n w = await Cavos.recover({\n code,\n identity,\n network: cfg.network,\n appSalt: cfg.appSalt,\n paymasterApiKey: cfg.paymasterApiKey ?? '',\n ...(cfg.appId ? { appId: cfg.appId } : {}),\n ...(cfg.authBackendUrl ? { backendUrl: cfg.authBackendUrl } : {}),\n ...(cfg.rpcUrl ? { rpcUrl: cfg.rpcUrl } : {}),\n });\n }\n setWallet(w);\n setWalletStatus({ ...INITIAL_STATUS, isReady: true });\n modal?.onSuccess?.(w.address);\n } catch (e) {\n const msg = e instanceof Error ? e.message : 'Recovery failed. Check your code and try again.';\n setAuthError(msg);\n setWalletStatus(INITIAL_STATUS);\n throw e;\n }\n }, [identity, modal]);\n\n // Poll the pending device-addition request while awaiting the owner's approval\n // (Starknet email flow). Once approved, reconnect to flip to \"ready\".\n useEffect(() => {\n if (!walletStatus.awaitingApproval || !walletStatus.pendingRequestId || !identity) return;\n const cfg = configRef.current;\n if (!cfg.appId) return;\n const backendUrl = cfg.authBackendUrl ?? 'https://cavos.xyz';\n const recovery = new HttpRecoveryClient({ baseUrl: backendUrl, appId: cfg.appId });\n const requestId = walletStatus.pendingRequestId;\n let cancelled = false;\n const tick = async () => {\n try {\n const r = await recovery.getPendingRequest(requestId);\n if (cancelled || !r) return;\n if (r.status === 'expired') {\n setWalletStatus((s) => ({ ...s, pendingRequestId: null }));\n return;\n }\n if (r.status === 'approved') {\n await connect(identity);\n }\n } catch {\n /* transient network errors are fine; the next tick retries */\n }\n };\n const interval = setInterval(tick, 4000);\n return () => {\n cancelled = true;\n clearInterval(interval);\n };\n }, [walletStatus.awaitingApproval, walletStatus.pendingRequestId, identity, connect]);\n\n const logout = useCallback(() => {\n setWallet(null);\n setIdentity(null);\n setWalletStatus(INITIAL_STATUS);\n setAuthError(null);\n }, []);\n\n const value: CavosContextValue = {\n openModal,\n closeModal,\n isAuthenticated: !!wallet,\n user: identity\n ? { userId: identity.userId, email: identity.email, provider: identity.provider }\n : null,\n chain: config.chain ?? 'starknet',\n wallet,\n address: wallet?.address ?? null,\n walletStatus,\n isLoading,\n authError,\n clearAuthError,\n login,\n sendMagicLink,\n sendOtp,\n verifyOtp,\n handleCallback,\n execute,\n addSigner,\n enrollPasskey,\n passkeySupported,\n enrollPasskeyDefault,\n approveDeviceWithPasskey,\n resendDeviceApproval,\n setupRecovery,\n recover,\n logout,\n };\n\n return (\n <CavosContext.Provider value={value}>\n {children}\n {modal !== undefined && (\n <CavosAuthModal\n open={modalOpen}\n onClose={closeModal}\n appName={branding.appName ?? modal.appName}\n appLogo={branding.appLogo ?? modal.appLogo}\n providers={modal.providers}\n emailMode={modal.emailMode}\n primaryColor={modal.primaryColor}\n theme={modal.theme}\n />\n )}\n </CavosContext.Provider>\n );\n}\n\nexport function useCavos(): CavosContextValue {\n const ctx = useContext(CavosContext);\n if (!ctx) throw new Error('useCavos must be used within a CavosProvider');\n return ctx;\n}\n"]}
|