Passkeys provide native biometric authentication using Face ID, Touch ID, or fingerprint — no browser needed for the passkey step itself. This is an optional enhancement on top of the default email/phone login flow. When enabled, the SDK calls the device’s native passkey APIs directly instead of opening a portal URL.
Select your target and go to “Signing & Capabilities”
Click ”+ Capability” and add “Associated Domains”
Add the following domains:
webcredentials:app.beta.usecapsule.com
webcredentials:app.usecapsule.com
For additional information on associated domains, refer to the .
Important: Your teamId + bundleIdentifier must be registered with the Para team to set up associated domains. For example, if your Team ID is A1B2C3D4E5 and Bundle Identifier is com.yourdomain.yourapp, provide A1B2C3D4E5.com.yourdomain.yourapp to Para. This is required by Apple for passkey security. Note: Allow up to 24 hours for domain propagation.
Getting ready for App Review? See for Para-specific review tips.
For Android setup, you need to provide your app’s SHA-256 certificate fingerprint to Para.
Quick Testing Option: You can use com.getpara.example.reactnative as your package name for immediate testing. This package name is pre-registered and works with the SHA-256 certificate from the default debug.keystore.
The debug keystore at ~/.android/debug.keystore is auto-generated by the Android SDK on your first build. You do not need to create it manually. Use keytool -list to read the existing keystore — do not use keytool -genkey which creates a new one and may cause a fingerprint mismatch.
For release builds: keytool -list -v -keystore <your_keystore_path>
Debug and release builds use different signing keys. The SHA-256 fingerprint you register in the Developer Portal must match the keystore used to sign the build you are testing. If you register your release fingerprint but test with a debug build (or vice versa), passkeys will fail with an RP ID validation error. For development, register your debug keystore fingerprint. For production, register your release keystore fingerprint. You can register both in the Developer Portal.
For production apps, you’ll need to: 1. Upgrade your plan in the Developer Portal 2. Register your actual package name 3. Provide your app’s SHA-256 fingerprint 4. Wait up to 24 hours for the Digital Asset Links to propagate
After registering your package name and SHA-256 fingerprint, check the verification status in the under your API key’s Native Passkey Configuration. The portal automatically polls Google’s Digital Asset Links service and will update the status once verification completes. Allow up to 24 hours for propagation.
Important: Your teamId + bundleIdentifier must be registered with the Para team to set up associated domains. For example, if your Team ID is A1B2C3D4E5 and Bundle Identifier is com.yourdomain.yourapp, provide A1B2C3D4E5.com.yourdomain.yourapp to Para. This is required by Apple for passkey security. Allow up to 24 hours for domain propagation. You can find this setting in the Developer Portal under the ‘Configuration’ tab of the API key label as Native Passkey Configuration.
Prepping for App Review? Check for Sign in with Apple tips, reviewer notes, and account deletion requirements.
For Android setup in Expo, you’ll need to configure your package name and provide your SHA-256 certificate fingerprint.
Quick Testing Option: You can use com.getpara.example.expo as your package name in app.json for immediate testing. This package name is pre-registered but only works with the default debug.keystore generated by Expo.
The debug keystore at ~/.android/debug.keystore is auto-generated by the Android SDK on your first build. You do not need to create it manually. Use keytool -list to read the existing keystore — do not use keytool -genkey which creates a new one and may cause a fingerprint mismatch.
Configure your app.json:
app.json
{ "expo": { "android": { "package": "com.getpara.example.expo" // For testing // or your actual package name for production } }}
For release builds: keytool -list -v -keystore <your_keystore_path>
Important: Your SHA-256 certificate fingerprint must be registered with the Para team to set up associated domains. This is required by Google for passkey security. Allow up to 24 hours for domain propagation. You can find this setting in the Developer Portal under the ‘Configuration’ tab of the API key label as Native Passkey Configuration.
Debug and release builds use different signing keys. The SHA-256 fingerprint you register in the Developer Portal must match the keystore used to sign the build you are testing. If you register your release fingerprint but test with a debug build (or vice versa), passkeys will fail with an RP ID validation error ([50152]). For development, register your debug keystore fingerprint. For production, register your release keystore fingerprint. You can register both in the Developer Portal.
Modify the state listener to intercept passkey states and call registerPasskey() or loginWithPasskey() natively, falling back to portal URLs only for password/PIN users:
Native passkeys use the device’s biometric prompt (Face ID, Touch ID, fingerprint) directly — no browser or portal needed. For users with a password or PIN instead of a passkey, the listener falls back to opening the portal URL.
ParaMobile sets isNativePasskey = true internally when initializing the React Native SDK. This causes the SDK to suppress passkeyUrl from auth states. Instead:
Signup: passkeyId is provided in the auth state. Pass it to registerPasskey() to trigger native credential creation.
Login: hasPasskey is true in the auth state. Call loginWithPasskey() to trigger the device’s native biometric prompt.
These methods interact with the OS passkey APIs directly, so the user sees a native Face ID, Touch ID, or fingerprint prompt rather than a browser-based flow.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Para Docs","description":"Para is the most comprehensive wallet and authentication suite for crypto applications.","colors":{"primary":"#FF4E00","light":"#FF4E00","dark":"#FF4E00"},"logo":{"light":"https://mintcdn.com/getpara/30lQMU2mHiFlT8O0/logo/light.svg?fit=max\u0026auto=format\u0026n=30lQMU2mHiFlT8O0\u0026q=85\u0026s=342b25f634bb7c26fefb0769da8f0555","dark":"https://mintcdn.com/getpara/30lQMU2mHiFlT8O0/logo/dark.svg?fit=max\u0026auto=format\u0026n=30lQMU2mHiFlT8O0\u0026q=85\u0026s=6404d8529516f7e178e3781b864656c9"},"favicon":"https://mintcdn.com/getpara/K-Gy3Q2JkFCvA3gr/favicon.svg?fit=max\u0026auto=format\u0026n=K-Gy3Q2JkFCvA3gr\u0026q=85\u0026s=877317a7a2973b619ffca0cc05e46195","api":{"playground":{"display":"interactive"}},"appearance":{"default":"light","strict":true},"background":{"decoration":"windows","color":{"light":"#FFFFFF","dark":"#000000"}},"navbar":{"links":[{"icon":"slack","href":"https://join.slack.com/t/para-community/shared_invite/zt-304keeulc-Oqs4eusCUAJEpE9DBwAqrg","label":"Community"}],"primary":{"type":"button","label":"Get Access","href":"https://developer.getpara.com/"}},"footer":{"socials":{"x":"https://x.com/get_para","github":"https://github.com/getpara","linkedin":"https://www.linkedin.com/company/parahq","slack":"https://join.slack.com/t/para-community/shared_invite/zt-304keeulc-Oqs4eusCUAJEpE9DBwAqrg","website":"https://getpara.com"}},"search":{"prompt":"Search Para Docs..."},"seo":{"indexing":"all"},"icons":{"library":"fontawesome"},"styling":{"eyebrows":"section","latex":false},"integrations":{"ga4":{"measurementId":"G-J2BJTJZW8H"}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"navigation":{"global":{"anchors":[]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"getpara","hasAudioNarration":false,"actualSubdomain":"getpara","customDomains":["docs.getpara.com"],"gitSource":{"type":"github","owner":"capsule-org","repo":"docs-mintlify","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aedf7e4fb71aa062f1160ab","clientVersion":"0.0.4088","searchFilterCounts":[{"language":"default","tag":"API Reference","count":730},{"language":"default","tag":"Reference","count":575},{"language":"default","tag":"Build","count":436},{"language":"default","tag":"React \u0026 Web","count":273},{"language":"default","tag":"React Native","count":224},{"language":"default","tag":"React Hooks","count":139},{"language":"default","tag":"Types \u0026 Configuration","count":130},{"language":"default","tag":"Client Methods","count":122},{"language":"default","tag":"Transact on Chains","count":103},{"language":"default","tag":"REST API","count":100}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"v2/react-native/guides/add-passkeys","slug":"/v2/react-native/guides/add-passkeys","pageMetadata":{"title":"Add Native Passkeys","sidebarTitle":"Add Passkeys","description":"Add native passkey authentication to your React Native or Expo app for enhanced security","icon":"fingerprint","keywords":["react native passkeys","expo passkeys","native biometric auth","face id","touch id","fingerprint","passkey registration","registerPasskey","loginWithPasskey","mobile passkeys"],"canonical":"https://docs.getpara.com/v3/react-native/guides/add-passkeys","href":"/v2/react-native/guides/add-passkeys"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Add native passkey authentication to your React Native or Expo app for enhanced security\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];const Link=({href,label,newTab=false})=>{const _components={a:`a`,..._provideComponents()};const[isHovered,setIsHovered]=useState(false);return _jsxs(_components.a,{href,target:newTab?`_blank`:`_self`,rel:newTab?`noopener noreferrer`:undefined,className:`not-prose mint-inline-block mint-relative mint-text-black mint-font-semibold mint-cursor-pointer mint-border-b-0 mint-no-underline`,onMouseEnter:()=>setIsHovered(true),onMouseLeave:()=>setIsHovered(false),children:[label,_jsx(`span`,{className:`mint-absolute mint-left-0 mint-bottom-0 mint-w-full mint-rounded-sm mint-bg-gradient-to-r mint-from-orange-600 mint-to-purple-600 mint-transition-all mint-duration-300 ${isHovered?`mint-h-0.5`:`mint-h-px`}`})]})};const Card=({imgUrl,title,description,href,horizontal=false,newTab=false})=>{const _components={a:`a`,..._provideComponents()};const[isHovered,setIsHovered]=useState(false);const handleClick=e=>{e.preventDefault();if(newTab){window.open(href,`_blank`,`noopener,noreferrer`)}else{window.location.href=href}};return _jsx(`div`,{className:`not-prose mint-relative mint-my-2 mint-p-[1px] mint-rounded-xl mint-transition-all mint-duration-300 ${isHovered?`mint-bg-gradient-to-r mint-from-[#FF4E00] mint-to-[#874AE3]`:`mint-bg-gray-200`}`,onMouseEnter:()=>setIsHovered(true),onMouseLeave:()=>setIsHovered(false),children:_jsxs(_components.a,{href,onClick:handleClick,className:`not-prose mint-flex ${horizontal?`mint-flex-row`:`mint-flex-col`} mint-font-normal mint-h-full mint-bg-white mint-overflow-hidden mint-w-full mint-cursor-pointer mint-rounded-[11px] mint-no-underline`,children:[imgUrl\u0026\u0026_jsxs(`div`,{className:`mint-relative mint-overflow-hidden mint-flex-shrink-0 ${horizontal?`mint-w-[30%] mint-rounded-l-[11px]`:`mint-w-full`}`,onClick:e=>e.stopPropagation(),children:[_jsx(`img`,{src:imgUrl,alt:title,className:`mint-w-full mint-h-full mint-object-cover mint-pointer-events-none mint-select-none`,draggable:`false`}),_jsx(`div`,{className:`mint-absolute mint-inset-0 mint-pointer-events-none`})]}),_jsxs(`div`,{className:`mint-flex-grow mint-px-6 mint-py-5 ${horizontal?`mint-w-[70%]`:`mint-w-full`} mint-flex mint-flex-col ${horizontal\u0026\u0026imgUrl?`mint-justify-center`:`mint-justify-start`}`,children:[title\u0026\u0026_jsx(`h2`,{className:`mint-font-semibold mint-text-base mint-text-gray-800 mint-m-0`,children:title}),description\u0026\u0026_jsx(`div`,{className:`mint-font-normal mint-text-gray-500 mint-re mint-leading-6 ${horizontal||!imgUrl?`mint-mt-0`:`mint-mt-1`}`,children:_jsx(`p`,{className:`mint-m-0 mint-text-xs`,children:description})})]})]})})};function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CardGroup,CodeBlock,Frame,Heading,Info,Note,OptimizedImage,Tab,Tabs,Warning,_MdxComponentBoundary}=_components;if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);if(!Warning)_missingMdxReference(`Warning`,true);if(!_MdxComponentBoundary)_missingMdxReference(`_MdxComponentBoundary`,true);return _jsxs(_Fragment,{children:[_jsxs(Note,{children:[`You’re viewing the 2.0 (LTS) docs. `,_jsx(_components.a,{href:`/v3/react-native/guides/add-passkeys`,children:`View the current 3.0 version of this page`}),`.`]}),`\n`,_jsx(_components.p,{children:`Passkeys provide native biometric authentication using Face ID, Touch ID, or fingerprint — no browser needed for the passkey step itself. This is an optional enhancement on top of the default email/phone login flow. When enabled, the SDK calls the device’s native passkey APIs directly instead of opening a portal URL.`}),`\n`,_jsx(Heading,{level:`2`,id:`prerequisites`,children:`Prerequisites`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(_MdxComponentBoundary,{name:`Card`,children:_jsx(Card,{horizontal:true,title:`Email \u0026 Phone Login`,imgUrl:`/images/v2/custom-ui-social.png`,href:`/v2/react-native/guides/add-email-phone`,description:`Complete the basic authentication setup first.`})}),_jsx(_MdxComponentBoundary,{name:`Card`,children:_jsx(Card,{horizontal:true,title:`Framework Setup`,imgUrl:`/images/v2/framework-react-native.png`,href:`/v2/react-native/setup/react-native`,description:`Set up your React Native or Expo project with Para.`})})]}),`\n`,_jsx(Heading,{level:`2`,id:`platform-configuration`,children:`Platform Configuration`}),`\n`,_jsx(_components.p,{children:`Configure your app’s passkey credentials so the OS can associate your app with Para’s domain.`}),`\n`,_jsxs(Tabs,{children:[_jsx(Tab,{title:`React Native (Bare)`,id:`react-native-bare`,\"data-child-tab-ids\":`[\"ios\",\"android\"]`,\"data-child-heading-ids\":`[\"set-up-associated-domains\",\"install-cocoapods-for-native-dependencies%3A\",\"set-up-digital-asset-links\",\"verify-digital-asset-links\",\"device-requirements\"]`,children:_jsxs(Tabs,{children:[_jsxs(Tab,{title:`iOS`,id:`ios`,\"data-child-heading-ids\":`[\"set-up-associated-domains\",\"install-cocoapods-for-native-dependencies%3A\"]`,children:[_jsx(_components.p,{children:`In order for passkeys to work, you need to set up associated domains in your Xcode project linked to the Para domain.`}),_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/getpara/DroPU3PvC58divoD/images/v2/supporting-associated-domains.png?fit=max\u0026auto=format\u0026n=DroPU3PvC58divoD\u0026q=85\u0026s=ff9134103d1e3646c4d0014d4e56088f`,alt:`Associated Domains`,\"data-og-width\":`1436`,width:`1436`,\"data-og-height\":`272`,height:`272`,\"data-path\":`images/v2/supporting-associated-domains.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/getpara/DroPU3PvC58divoD/images/v2/supporting-associated-domains.png?w=280\u0026fit=max\u0026auto=format\u0026n=DroPU3PvC58divoD\u0026q=85\u0026s=01de7b27242ba80cc2034bb3d791c085 280w, https://mintcdn.com/getpara/DroPU3PvC58divoD/images/v2/supporting-associated-domains.png?w=560\u0026fit=max\u0026auto=format\u0026n=DroPU3PvC58divoD\u0026q=85\u0026s=fa51a0b3bc4f4900d008d1dd9c4568bc 560w, https://mintcdn.com/getpara/DroPU3PvC58divoD/images/v2/supporting-associated-domains.png?w=840\u0026fit=max\u0026auto=format\u0026n=DroPU3PvC58divoD\u0026q=85\u0026s=350fcab0c9236af9320cbed52799bb2d 840w, https://mintcdn.com/getpara/DroPU3PvC58divoD/images/v2/supporting-associated-domains.png?w=1100\u0026fit=max\u0026auto=format\u0026n=DroPU3PvC58divoD\u0026q=85\u0026s=5318c754806a6fec390a20c82a64db0b 1100w, https://mintcdn.com/getpara/DroPU3PvC58divoD/images/v2/supporting-associated-domains.png?w=1650\u0026fit=max\u0026auto=format\u0026n=DroPU3PvC58divoD\u0026q=85\u0026s=b6dff57c91bc6fdaeaea3dd1f7dc10a7 1650w, https://mintcdn.com/getpara/DroPU3PvC58divoD/images/v2/supporting-associated-domains.png?w=2500\u0026fit=max\u0026auto=format\u0026n=DroPU3PvC58divoD\u0026q=85\u0026s=c944f910292ac913a86bdb73198287f0 2500w`})}),_jsx(Heading,{level:`4`,id:`set-up-associated-domains`,children:`Set Up Associated Domains`}),_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Open your project in Xcode`}),`\n`,_jsx(_components.li,{children:`Select your target and go to “Signing \u0026 Capabilities”`}),`\n`,_jsx(_components.li,{children:`Click ”+ Capability” and add “Associated Domains”`}),`\n`,_jsxs(_components.li,{children:[`Add the following domains:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`webcredentials:app.beta.usecapsule.com`}),`\n`,_jsx(_components.li,{children:`webcredentials:app.usecapsule.com`}),`\n`]}),`\n`]}),`\n`]}),_jsxs(_components.p,{children:[`For additional information on associated domains, refer to the `,_jsx(_MdxComponentBoundary,{name:`Link`,children:_jsx(Link,{label:`Apple Developer documentation`,href:`https://developer.apple.com/documentation/xcode/supporting-associated-domains#Add-the-associated-domains-entitlement-to-your-app`})}),`.`]}),_jsxs(Warning,{children:[_jsx(_components.strong,{children:`Important`}),`: Your `,_jsx(_components.code,{children:`teamId + bundleIdentifier`}),` must be registered with the Para team to set up associated domains. For example, if your Team ID is `,_jsx(_components.code,{children:`A1B2C3D4E5`}),` and Bundle Identifier is `,_jsx(_components.code,{children:`com.yourdomain.yourapp`}),`, provide `,_jsx(_components.code,{children:`A1B2C3D4E5.com.yourdomain.yourapp`}),` to Para. This is required by Apple for passkey security. `,_jsx(_components.strong,{children:`Note:`}),` Allow up to 24 hours for domain propagation.`]}),_jsx(Note,{children:_jsxs(_components.p,{children:[`Getting ready for App Review? See `,_jsx(_MdxComponentBoundary,{name:`Link`,children:_jsx(Link,{label:`iOS App Store Submission`,href:`/v2/general/ios-app-store-submission`})}),` for Para-specific review tips.`]})}),_jsx(Heading,{level:`4`,id:`install-cocoapods-for-native-dependencies`,children:`Install CocoaPods for native dependencies:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`cd`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ios`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`bundle`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` install`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`bundle`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` exec`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` pod`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` install`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`cd`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ..`})]}),`\n`]})})}),_jsxs(Note,{children:[`Remember to run `,_jsx(_components.code,{children:`pod install`}),` after adding new dependencies to your project.`]})]}),_jsxs(Tab,{title:`Android`,id:`android`,\"data-child-heading-ids\":`[\"set-up-digital-asset-links\",\"verify-digital-asset-links\",\"device-requirements\"]`,children:[_jsx(Heading,{level:`4`,id:`set-up-digital-asset-links`,children:`Set Up Digital Asset Links`}),_jsx(_components.p,{children:`For Android setup, you need to provide your app’s SHA-256 certificate fingerprint to Para.`}),_jsxs(Info,{children:[_jsx(_components.strong,{children:`Quick Testing Option`}),`: You can use `,_jsx(_components.code,{children:`com.getpara.example.reactnative`}),` as your package name for immediate testing. This package name is pre-registered and works with the SHA-256 certificate from the default debug.keystore.`]}),_jsxs(Info,{children:[`The debug keystore at `,_jsx(_components.code,{children:`~/.android/debug.keystore`}),` is auto-generated by the Android SDK on your first build. You do not need to create it manually. Use `,_jsx(_components.code,{children:`keytool -list`}),` to `,_jsx(_components.strong,{children:`read`}),` the existing keystore — do not use `,_jsx(_components.code,{children:`keytool -genkey`}),` which creates a new one and may cause a fingerprint mismatch.`]}),_jsx(_components.p,{children:`To get your SHA-256 fingerprint:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`For debug builds: `,_jsx(_components.code,{children:`keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android`})]}),`\n`,_jsxs(_components.li,{children:[`For release builds: `,_jsx(_components.code,{children:`keytool -list -v -keystore \u003cyour_keystore_path>`})]}),`\n`]}),_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Debug and release builds use different signing keys.`}),` The SHA-256 fingerprint you register in the Developer Portal must match the keystore used to sign the build you are testing. If you register your release fingerprint but test with a debug build (or vice versa), passkeys will fail with an RP ID validation error. For development, register your debug keystore fingerprint. For production, register your release keystore fingerprint. You can register both in the Developer Portal.`]})}),_jsx(Warning,{children:`For production apps, you’ll need to: 1. Upgrade your plan in the Developer Portal 2. Register your actual package name 3. Provide your app’s SHA-256 fingerprint 4. Wait up to 24 hours for the Digital Asset Links to propagate`}),_jsx(Heading,{level:`4`,id:`verify-digital-asset-links`,children:`Verify Digital Asset Links`}),_jsxs(_components.p,{children:[`After registering your package name and SHA-256 fingerprint, check the verification status in the `,_jsx(_MdxComponentBoundary,{name:`Link`,children:_jsx(Link,{label:`Developer Portal`,href:`https://developer.getpara.com`})}),` under your API key’s Native Passkey Configuration. The portal automatically polls Google’s Digital Asset Links service and will update the status once verification completes. Allow up to 24 hours for propagation.`]}),_jsx(Heading,{level:`4`,id:`device-requirements`,children:`Device Requirements`}),_jsxs(Note,{children:[_jsx(_components.p,{children:`To ensure passkey functionality works correctly:`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Enable biometric or device unlock settings (fingerprint, face unlock, or PIN)`}),`\n`,_jsx(_components.li,{children:`Sign in to a Google account on the device (required for Google Play Services passkey management)`}),`\n`]})]})]})]})}),_jsx(Tab,{title:`Expo`,id:`expo`,\"data-child-tab-ids\":`[\"ios-2\",\"android-2\"]`,children:_jsxs(Tabs,{children:[_jsxs(Tab,{title:`iOS`,id:`ios-2`,children:[_jsxs(_components.p,{children:[`Configure your `,_jsx(_components.code,{children:`app.json`}),` file to enable passkey functionality and secure communication:`]}),_jsx(CodeBlock,{filename:`app.json`,numberOfLines:`11`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`11`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"expo\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"ios\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"bundleIdentifier\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"your.app.bundleIdentifier\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"associatedDomains\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"webcredentials:app.beta.usecapsule.com?mode=developer\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"webcredentials:app.usecapsule.com\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsxs(Warning,{children:[_jsx(_components.strong,{children:`Important`}),`: Your `,_jsx(_components.code,{children:`teamId + bundleIdentifier`}),` must be registered with the Para team to set up associated domains. For example, if your Team ID is `,_jsx(_components.code,{children:`A1B2C3D4E5`}),` and Bundle Identifier is `,_jsx(_components.code,{children:`com.yourdomain.yourapp`}),`, provide `,_jsx(_components.code,{children:`A1B2C3D4E5.com.yourdomain.yourapp`}),` to Para. This is required by Apple for passkey security. Allow up to 24 hours for domain propagation. You can find this setting in the Developer Portal under the ‘Configuration’ tab of the API key label as Native Passkey Configuration.`]}),_jsx(Note,{children:_jsxs(_components.p,{children:[`Prepping for App Review? Check `,_jsx(_MdxComponentBoundary,{name:`Link`,children:_jsx(Link,{label:`iOS App Store Submission`,href:`/v2/general/ios-app-store-submission`})}),` for Sign in with Apple tips, reviewer notes, and account deletion requirements.`]})})]}),_jsxs(Tab,{title:`Android`,id:`android-2`,children:[_jsx(_components.p,{children:`For Android setup in Expo, you’ll need to configure your package name and provide your SHA-256 certificate fingerprint.`}),_jsxs(Info,{children:[_jsx(_components.strong,{children:`Quick Testing Option`}),`: You can use `,_jsx(_components.code,{children:`com.getpara.example.expo`}),` as your package name in `,_jsx(_components.code,{children:`app.json`}),` for immediate testing. This package name is pre-registered but only works with the default debug.keystore generated by Expo.`]}),_jsxs(Info,{children:[`The debug keystore at `,_jsx(_components.code,{children:`~/.android/debug.keystore`}),` is auto-generated by the Android SDK on your first build. You do not need to create it manually. Use `,_jsx(_components.code,{children:`keytool -list`}),` to `,_jsx(_components.strong,{children:`read`}),` the existing keystore — do not use `,_jsx(_components.code,{children:`keytool -genkey`}),` which creates a new one and may cause a fingerprint mismatch.`]}),_jsxs(_components.p,{children:[`Configure your `,_jsx(_components.code,{children:`app.json`}),`:`]}),_jsx(CodeBlock,{filename:`app.json`,numberOfLines:`8`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"expo\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"android\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"package\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"com.getpara.example.expo\"`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // For testing`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // or your actual package name for production`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsx(_components.p,{children:`To get your SHA-256 fingerprint:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`For debug builds: `,_jsx(_components.code,{children:`keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android`})]}),`\n`,_jsxs(_components.li,{children:[`For release builds: `,_jsx(_components.code,{children:`keytool -list -v -keystore \u003cyour_keystore_path>`})]}),`\n`]}),_jsxs(Warning,{children:[_jsx(_components.strong,{children:`Important`}),`: Your SHA-256 certificate fingerprint must be registered with the Para team to set up associated domains. This is required by Google for passkey security. Allow up to 24 hours for domain propagation. You can find this setting in the Developer Portal under the ‘Configuration’ tab of the API key label as Native Passkey Configuration.`]}),_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Debug and release builds use different signing keys.`}),` The SHA-256 fingerprint you register in the Developer Portal must match the keystore used to sign the build you are testing. If you register your release fingerprint but test with a debug build (or vice versa), passkeys will fail with an RP ID validation error (`,_jsx(_components.code,{children:`[50152]`}),`). For development, register your debug keystore fingerprint. For production, register your release keystore fingerprint. You can register both in the Developer Portal.`]})})]})]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`state-listener-with-native-passkeys`,children:`State Listener with Native Passkeys`}),`\n`,_jsxs(_components.p,{children:[`Modify the state listener to intercept passkey states and call `,_jsx(_components.code,{children:`registerPasskey()`}),` or `,_jsx(_components.code,{children:`loginWithPasskey()`}),` natively, falling back to portal URLs only for password/PIN users:`]}),`\n`,_jsxs(Tabs,{children:[_jsx(Tab,{title:`React Native`,id:`react-native`,children:_jsx(CodeBlock,{filename:``,numberOfLines:`68`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`68`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`useEffect`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`useRef`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"react\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`para`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"../your-para-client\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`InAppBrowser`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"react-native-inappbrowser-reborn\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` type`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`StateSnapshot`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"@getpara/react-native-wallet\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` APP_SCHEME`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"your-app-scheme\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`function`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` useParaAuthStateListener`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`isAuthActive`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` boolean`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` lastUrlRef`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` useRef`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`string`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` null`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`>(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`null`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` handledRef`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` useRef`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`string`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` null`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`>(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`null`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` useEffect`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(() `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`!`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`isAuthActive`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` unsubscribe`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` para`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`onStatePhaseChange`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`async`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`snapshot`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` StateSnapshot`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`authPhase`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`authStateInfo`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` snapshot`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // Native passkey signup — register using the credential ID`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` authStateInfo`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`isNewUser`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u0026\u0026`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` authStateInfo`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`passkeyId`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u0026\u0026`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` handledRef`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`current`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` !==`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` authStateInfo`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`passkeyId`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ) {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` handledRef`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`current`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` authStateInfo`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`passkeyId`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` para`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`registerPasskey`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`authStateInfo`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`passkeyId`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // Native passkey login — trigger biometric prompt directly`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` !`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`authStateInfo`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`isNewUser`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u0026\u0026`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` authStateInfo`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`hasPasskey`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u0026\u0026`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` authPhase`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` ===`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"awaiting_session_start\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u0026\u0026`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` handledRef`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`current`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` !==`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"login\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ) {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` handledRef`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`current`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"login\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` para`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`loginWithPasskey`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`();`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // Verification URL (basic login verification)`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`authStateInfo`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`verificationUrl`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u0026\u0026`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` authStateInfo`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`verificationUrl`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` !==`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` lastUrlRef`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`current`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` lastUrlRef`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`current`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` authStateInfo`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`verificationUrl`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` InAppBrowser`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`openAuth`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`authStateInfo`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`verificationUrl`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`APP_SCHEME`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` ephemeralWebSession:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` false`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` showTitle:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` false`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` });`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // Fallback: password/PIN portal URLs for non-passkey users`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` url`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` authStateInfo`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`passwordUrl`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` ||`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` authStateInfo`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`pinUrl`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`url`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u0026\u0026`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` url`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` !==`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` lastUrlRef`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`current`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` lastUrlRef`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`current`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` url`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` InAppBrowser`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`openAuth`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`url`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`APP_SCHEME`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` ephemeralWebSession:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` false`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` showTitle:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` false`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` });`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` });`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` () `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` unsubscribe`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`();`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` lastUrlRef`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`current`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` null`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` handledRef`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`current`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` null`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` };`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }, [`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`isAuthActive`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})}),_jsx(Tab,{title:`Expo`,id:`expo-2`,children:_jsx(CodeBlock,{filename:``,numberOfLines:`66`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`66`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`useEffect`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`useRef`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"react\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`para`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"../your-para-client\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`openAuthSessionAsync`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"expo-web-browser\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` type`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`StateSnapshot`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"@getpara/react-native-wallet\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` APP_SCHEME`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"your-app-scheme\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`function`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` useParaAuthStateListener`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`isAuthActive`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` boolean`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` lastUrlRef`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` useRef`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`string`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` null`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`>(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`null`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` handledRef`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` useRef`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`string`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` null`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`>(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`null`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` useEffect`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(() `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`!`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`isAuthActive`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` unsubscribe`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` para`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`onStatePhaseChange`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`async`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`snapshot`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` StateSnapshot`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`authPhase`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`authStateInfo`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` snapshot`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // Native passkey signup — register using the credential ID`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` authStateInfo`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`isNewUser`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u0026\u0026`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` authStateInfo`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`passkeyId`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u0026\u0026`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` handledRef`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`current`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` !==`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` authStateInfo`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`passkeyId`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ) {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` handledRef`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`current`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` authStateInfo`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`passkeyId`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` para`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`registerPasskey`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`authStateInfo`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`passkeyId`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // Native passkey login — trigger biometric prompt directly`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` !`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`authStateInfo`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`isNewUser`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u0026\u0026`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` authStateInfo`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`hasPasskey`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u0026\u0026`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` authPhase`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` ===`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"awaiting_session_start\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u0026\u0026`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` handledRef`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`current`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` !==`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"login\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ) {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` handledRef`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`current`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"login\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` para`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`loginWithPasskey`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`();`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // Verification URL (basic login verification)`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`authStateInfo`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`verificationUrl`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u0026\u0026`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` authStateInfo`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`verificationUrl`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` !==`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` lastUrlRef`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`current`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` lastUrlRef`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`current`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` authStateInfo`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`verificationUrl`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` openAuthSessionAsync`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`authStateInfo`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`verificationUrl`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`APP_SCHEME`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` preferEphemeralSession:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` false`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` });`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // Fallback: password/PIN portal URLs for non-passkey users`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` url`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` authStateInfo`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`passwordUrl`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` ||`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` authStateInfo`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`pinUrl`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`url`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u0026\u0026`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` url`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` !==`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` lastUrlRef`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`current`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` lastUrlRef`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`current`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` url`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` openAuthSessionAsync`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`url`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`APP_SCHEME`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` preferEphemeralSession:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` false`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` });`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` });`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` () `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` unsubscribe`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`();`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` lastUrlRef`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`current`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` null`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` handledRef`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`current`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` null`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` };`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }, [`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`isAuthActive`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})})]}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`Native passkeys use the device’s biometric prompt (Face ID, Touch ID, fingerprint) directly — no browser or portal needed. For users with a password or PIN instead of a passkey, the listener falls back to opening the portal URL.`})}),`\n`,_jsx(Heading,{level:`2`,id:`how-it-works`,children:`How It Works`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`ParaMobile`}),` sets `,_jsx(_components.code,{children:`isNativePasskey = true`}),` internally when initializing the React Native SDK. This causes the SDK to suppress `,_jsx(_components.code,{children:`passkeyUrl`}),` from auth states. Instead:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Signup`}),`: `,_jsx(_components.code,{children:`passkeyId`}),` is provided in the auth state. Pass it to `,_jsx(_components.code,{children:`registerPasskey()`}),` to trigger native credential creation.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Login`}),`: `,_jsx(_components.code,{children:`hasPasskey`}),` is `,_jsx(_components.code,{children:`true`}),` in the auth state. Call `,_jsx(_components.code,{children:`loginWithPasskey()`}),` to trigger the device’s native biometric prompt.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`These methods interact with the OS passkey APIs directly, so the user sees a native Face ID, Touch ID, or fingerprint prompt rather than a browser-based flow.`}),`\n`,_jsx(Heading,{level:`2`,id:`next-steps`,children:`Next Steps`}),`\n`,_jsxs(CardGroup,{cols:3,children:[_jsx(_MdxComponentBoundary,{name:`Card`,children:_jsx(Card,{title:`Add Password or PIN`,imgUrl:`/images/v2/general-passwords.png`,href:`/v2/react-native/guides/add-password-pin`,description:`Support password or PIN as an alternative to passkeys.`})}),_jsx(_MdxComponentBoundary,{name:`Card`,children:_jsx(Card,{title:`EVM Integration`,imgUrl:`/images/v2/network-evm.png`,href:`/v2/react-native/guides/evm`,description:`Sign transactions on EVM-compatible chains.`})}),_jsx(_MdxComponentBoundary,{name:`Card`,children:_jsx(Card,{title:`Session Management`,imgUrl:`/images/v2/general-sessions.png`,href:`/v2/react-native/guides/sessions`,description:`Manage user sessions and token refresh.`})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{Link,Card,default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Add Native Passkeys","sidebarTitle":"Add Passkeys","description":"Add native passkey authentication to your React Native or Expo app for enhanced security","icon":"fingerprint","keywords":["react native passkeys","expo passkeys","native biometric auth","face id","touch id","fingerprint","passkey registration","registerPasskey","loginWithPasskey","mobile passkeys"],"canonical":"https://docs.getpara.com/v3/react-native/guides/add-passkeys","href":"/v2/react-native/guides/add-passkeys"}}},"mdxSourceWithNoJs":null,"noJsSplices":[[140,2700,")=>null;const Card=()=>null;function _cr"]]},"mdxExtracts":{"tableOfContents":[{"title":"Prerequisites","slug":"prerequisites","depth":2,"children":[]},{"title":"Platform Configuration","slug":"platform-configuration","depth":2,"children":[{"title":"Set Up Associated Domains","slug":"set-up-associated-domains","depth":4,"children":[],"tabId":"ios"},{"title":"Install CocoaPods for native dependencies:","slug":"install-cocoapods-for-native-dependencies","depth":4,"children":[],"tabId":"ios"},{"title":"Set Up Digital Asset Links","slug":"set-up-digital-asset-links","depth":4,"children":[],"tabId":"android"},{"title":"Verify Digital Asset Links","slug":"verify-digital-asset-links","depth":4,"children":[],"tabId":"android"},{"title":"Device Requirements","slug":"device-requirements","depth":4,"children":[],"tabId":"android"}]},{"title":"State Listener with Native Passkeys","slug":"state-listener-with-native-passkeys","depth":2,"children":[]},{"title":"How It Works","slug":"how-it-works","depth":2,"children":[]},{"title":"Next Steps","slug":"next-steps","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/getpara/98686b284aa093b7/tab-sync.js"],"dynamicCss":".mint-pointer-events-none {\n pointer-events: none\n}\n.mint-absolute {\n position: absolute\n}\n.mint-relative {\n position: relative\n}\n.mint-inset-0 {\n inset: 0px\n}\n.mint-bottom-0 {\n bottom: 0px\n}\n.mint-left-0 {\n left: 0px\n}\n.mint-m-0 {\n margin: 0px\n}\n.mint-my-2 {\n margin-top: 0.5rem;\n margin-bottom: 0.5rem\n}\n.mint-mt-0 {\n margin-top: 0px\n}\n.mint-mt-1 {\n margin-top: 0.25rem\n}\n.mint-inline-block {\n display: inline-block\n}\n.mint-flex {\n display: flex\n}\n.mint-h-0\\.5 {\n height: 0.125rem\n}\n.mint-h-full {\n height: 100%\n}\n.mint-h-px {\n height: 1px\n}\n.mint-w-\\[30\\%\\] {\n width: 30%\n}\n.mint-w-\\[70\\%\\] {\n width: 70%\n}\n.mint-w-full {\n width: 100%\n}\n.mint-flex-shrink-0 {\n flex-shrink: 0\n}\n.mint-flex-grow {\n flex-grow: 1\n}\n.mint-cursor-pointer {\n cursor: pointer\n}\n.mint-select-none {\n user-select: none\n}\n.mint-flex-row {\n flex-direction: row\n}\n.mint-flex-col {\n flex-direction: column\n}\n.mint-justify-start {\n justify-content: flex-start\n}\n.mint-justify-center {\n justify-content: center\n}\n.mint-overflow-hidden {\n overflow: hidden\n}\n.mint-rounded-\\[11px\\] {\n border-radius: 11px\n}\n.mint-rounded-sm {\n border-radius: 0.125rem\n}\n.mint-rounded-xl {\n border-radius: 0.75rem\n}\n.mint-rounded-l-\\[11px\\] {\n border-top-left-radius: 11px;\n border-bottom-left-radius: 11px\n}\n.mint-border-b-0 {\n border-bottom-width: 0px\n}\n.mint-bg-gray-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1))\n}\n.mint-bg-white {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1))\n}\n.mint-bg-gradient-to-r {\n background-image: linear-gradient(to right, var(--tw-gradient-stops))\n}\n.mint-from-\\[\\#FF4E00\\] {\n --tw-gradient-from: #FF4E00 var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(255 78 0 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)\n}\n.mint-from-orange-600 {\n --tw-gradient-from: #ea580c var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(234 88 12 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)\n}\n.mint-to-\\[\\#874AE3\\] {\n --tw-gradient-to: #874AE3 var(--tw-gradient-to-position)\n}\n.mint-to-purple-600 {\n --tw-gradient-to: #9333ea var(--tw-gradient-to-position)\n}\n.mint-object-cover {\n object-fit: cover\n}\n.mint-p-\\[1px\\] {\n padding: 1px\n}\n.mint-px-6 {\n padding-left: 1.5rem;\n padding-right: 1.5rem\n}\n.mint-py-5 {\n padding-top: 1.25rem;\n padding-bottom: 1.25rem\n}\n.mint-text-base {\n font-size: 1rem;\n line-height: 1.5rem\n}\n.mint-text-xs {\n font-size: 0.75rem;\n line-height: 1rem\n}\n.mint-font-normal {\n font-weight: 400\n}\n.mint-font-semibold {\n font-weight: 600\n}\n.mint-leading-6 {\n line-height: 1.5rem\n}\n.mint-text-black {\n --tw-text-opacity: 1;\n color: rgb(0 0 0 / var(--tw-text-opacity, 1))\n}\n.mint-text-gray-500 {\n --tw-text-opacity: 1;\n color: rgb(107 114 128 / var(--tw-text-opacity, 1))\n}\n.mint-text-gray-800 {\n --tw-text-opacity: 1;\n color: rgb(31 41 55 / var(--tw-text-opacity, 1))\n}\n.mint-no-underline {\n text-decoration-line: none\n}\n.mint-transition-all {\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms\n}\n.mint-duration-300 {\n transition-duration: 300ms\n}","subdomain":"getpara","siteName":"Para Docs","title":"Add Native Passkeys - Para Docs","navMaps":{"firstHrefInVersion":{"3.0 (Current)":{"href":"/v3/react-native/guides/add-passkeys","matchLevel":1},"2.0 (LTS)":{"href":"/v2/react-native/guides/add-passkeys","matchLevel":0}},"firstHrefInLanguage":{}},"lastModified":"2026-09-25T17:52:14.372Z","originalFileLocation":"v2/react-native/guides/add-passkeys.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=\"light\";if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"light\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Add native passkey authentication to your React Native or Expo app for enhanced security\">\u003cmeta data-mint-head name=\"application-name\" content=\"Para Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/getpara/0DxXdBBXXRUUv88T/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/getpara/0DxXdBBXXRUUv88T/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/getpara/0DxXdBBXXRUUv88T/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/getpara/0DxXdBBXXRUUv88T/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/getpara/0DxXdBBXXRUUv88T/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/getpara/0DxXdBBXXRUUv88T/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/getpara/0DxXdBBXXRUUv88T/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/getpara/0DxXdBBXXRUUv88T/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/getpara/0DxXdBBXXRUUv88T/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Add Native Passkeys - Para Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Add native passkey authentication to your React Native or Expo app for enhanced security\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Para Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.getpara.com/v3/react-native/guides/add-passkeys\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://getpara.mintlify.site/_mintlify/api/og/v2?division=Add+Authentication\u0026amp;title=Add+Native+Passkeys\u0026amp;description=Add+native+passkey+authentication+to+your+React+Native+or+Expo+app+for+enhanced+security\u0026amp;theme=9bbe966b673f4a3310f46488\u0026amp;signature=78abbc729e207ea576d2afb56a8d3ea663baea2a1a116906134045cfa90bdc37\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Add Native Passkeys - Para Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Add native passkey authentication to your React Native or Expo app for enhanced security\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://getpara.mintlify.site/_mintlify/api/og/v2?division=Add+Authentication\u0026amp;title=Add+Native+Passkeys\u0026amp;description=Add+native+passkey+authentication+to+your+React+Native+or+Expo+app+for+enhanced+security\u0026amp;theme=9bbe966b673f4a3310f46488\u0026amp;signature=78abbc729e207ea576d2afb56a8d3ea663baea2a1a116906134045cfa90bdc37\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/getpara/0DxXdBBXXRUUv88T/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Para Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#FF4E00\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.getpara.com/v3/react-native/guides/add-passkeys\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/v2/react-native/guides/add-passkeys.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.getpara.com/#organization\",\"name\":\"Para Docs\",\"url\":\"https://docs.getpara.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/getpara/30lQMU2mHiFlT8O0/logo/light.svg?fit=max\u0026auto=format\u0026n=30lQMU2mHiFlT8O0\u0026q=85\u0026s=342b25f634bb7c26fefb0769da8f0555\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.getpara.com#website\",\"name\":\"Para Docs\",\"url\":\"https://docs.getpara.com\",\"publisher\":{\"@id\":\"https://docs.getpara.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.getpara.com/v3/react-native/guides/add-passkeys#webpage\",\"url\":\"https://docs.getpara.com/v3/react-native/guides/add-passkeys\",\"name\":\"Add Native Passkeys\",\"description\":\"Add native passkey authentication to your React Native or Expo app for enhanced security\",\"dateModified\":\"2026-09-25T17:52:14.372Z\",\"isPartOf\":{\"@id\":\"https://docs.getpara.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.getpara.com/v3/react-native/guides/add-passkeys#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.getpara.com/v3/react-native/guides/add-passkeys#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Add Authentication\",\"item\":\"https://docs.getpara.com/v2/react-native/guides/add-email-phone\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Add Native Passkeys\",\"item\":\"https://docs.getpara.com/v3/react-native/guides/add-passkeys\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.getpara.com/v3/react-native/guides/add-passkeys#article\",\"headline\":\"Add Native Passkeys\",\"name\":\"Add Native Passkeys\",\"description\":\"Add native passkey authentication to your React Native or Expo app for enhanced security\",\"url\":\"https://docs.getpara.com/v3/react-native/guides/add-passkeys\",\"mainEntityOfPage\":{\"@id\":\"https://docs.getpara.com/v3/react-native/guides/add-passkeys#webpage\"},\"dateModified\":\"2026-09-25T17:52:14.372Z\",\"keywords\":\"react native passkeys, expo passkeys, native biometric auth, face id, touch id, fingerprint, passkey registration, registerPasskey, loginWithPasskey, mobile passkeys\",\"publisher\":{\"@id\":\"https://docs.getpara.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.getpara.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Para Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Para Docs","nav":{"global":{"anchors":[]},"versions":[{"version":"3.0 (Current)","default":true,"tag":"Latest","pages":[{"title":"3.0 (Current)","href":"/v3/react-native/guides/add-passkeys"}]},{"version":"2.0 (LTS)","anchors":[{"anchor":"General","icon":"book-open","pages":[{"title":"General","href":"/v2/introduction/welcome"}]},{"anchor":"React \u0026 Web","icon":"react","pages":[{"title":"React \u0026 Web","href":"/v2/react/quickstart"}]},{"anchor":"REST API","icon":"server","pages":[{"title":"REST API","href":"/v2/rest/overview"}]},{"anchor":"Node \u0026 Server","icon":"server","pages":[{"title":"Node \u0026 Server","href":"/v2/server/overview"}]},{"anchor":"React Native","icon":"react","groups":[{"group":"Quick Start","pages":[{"title":"React Native Quickstart","sidebarTitle":"Quickstart","icon":"rocket","href":"/v2/react-native/quickstart"},{"title":"Overview","icon":"list","sidebarTitle":"Get Started","href":"/v2/react-native/overview"},{"title":"Mobile Examples","icon":"github","href":"/v2/react-native/examples"}]},{"group":"Set Up Your Framework","icon":"wrench","pages":[{"title":"Bare Workflow","sidebarTitle":"React Native Setup","icon":"react","href":"/v2/react-native/setup/react-native"},{"title":"Expo","sidebarTitle":"Expo Setup","icon":"react","href":"/v2/react-native/setup/expo"}]},{"group":"Add Authentication","icon":"user","pages":[{"title":"Email \u0026 Phone Authentication","sidebarTitle":"Email \u0026 Phone Login","icon":"envelope","href":"/v2/react-native/guides/add-email-phone"},{"title":"Social Login","description":"Authenticate users with OAuth providers like Google, Apple, and Discord in React Native and Expo","sidebarTitle":"Add Social Login","icon":"key","href":"/v2/react-native/guides/add-social-login"},{"title":"Add Native Passkeys","sidebarTitle":"Add Passkeys","icon":"fingerprint","href":"/v2/react-native/guides/add-passkeys"},{"title":"Add Password or PIN","sidebarTitle":"Add Password or PIN","description":"Add password or PIN authentication to your React Native or Expo app","icon":"lock","href":"/v2/react-native/guides/add-password-pin"}]},{"group":"Sign with Para","icon":"pen","pages":[{"title":"Sign Messages with Para","sidebarTitle":"Sign with Para","icon":"signature","href":"/v2/react-native/guides/web3-operations/sign-with-para"},{"title":"Get Wallet Data","sidebarTitle":"Get Wallet Data","icon":"wallet","href":"/v2/react-native/guides/web3-operations/get-wallet-address"}]},{"group":"Ethereum / EVM","icon":"ethereum","pages":[{"title":"Setup Web3 Libraries","sidebarTitle":"Setup Libraries","icon":"wrench","href":"/v2/react-native/guides/web3-operations/evm/setup-libraries"},{"title":"Configure RPC Endpoints","sidebarTitle":"Configure RPC","icon":"globe","href":"/v2/react-native/guides/web3-operations/evm/configure-rpc"},{"title":"Query Wallet Balances","sidebarTitle":"Query Balances","icon":"coins","href":"/v2/react-native/guides/web3-operations/evm/query-balances"},{"title":"Fund Testnet Wallet","sidebarTitle":"Fund Testnet Wallet","icon":"faucet-drip","href":"/v2/react-native/guides/web3-operations/evm/fund-testnet-wallet"},{"title":"Sign Messages","sidebarTitle":"Sign Messages","icon":"signature","href":"/v2/react-native/guides/web3-operations/evm/sign-messages"},{"title":"Send Tokens","sidebarTitle":"Send Tokens","icon":"paper-plane","href":"/v2/react-native/guides/web3-operations/evm/send-tokens"},{"title":"Execute Transactions","sidebarTitle":"Execute Transactions","icon":"bolt","href":"/v2/react-native/guides/web3-operations/evm/execute-transactions"},{"title":"Verify Signatures with EVM Libraries","sidebarTitle":"Verify Signatures","icon":"shield-check","href":"/v2/react-native/guides/web3-operations/evm/verify-signatures"},{"title":"Interact with Contracts","sidebarTitle":"Interact with Contracts","icon":"code","href":"/v2/react-native/guides/web3-operations/evm/interact-with-contracts"},{"title":"Estimate Gas for Transactions","sidebarTitle":"Estimate Gas","icon":"gas-pump","href":"/v2/react-native/guides/web3-operations/evm/estimate-gas"},{"title":"Manage Token Allowances","sidebarTitle":"Manage Allowances","icon":"key","href":"/v2/react-native/guides/web3-operations/evm/manage-allowances"},{"title":"Sign Typed Data (EIP-712)","sidebarTitle":"Sign Typed Data","icon":"file-signature","href":"/v2/react-native/guides/web3-operations/evm/sign-typed-data"},{"title":"Get Transaction Receipt","sidebarTitle":"Get Transaction Receipt","icon":"receipt","href":"/v2/react-native/guides/web3-operations/evm/get-transaction-receipt"},{"title":"Watch Contract Events","sidebarTitle":"Watch Events","icon":"bell","href":"/v2/react-native/guides/web3-operations/evm/watch-events"},{"title":"Account Abstraction Integrations","sidebarTitle":"Account Abstraction","icon":"puzzle-piece","href":"/v2/react-native/guides/web3-operations/evm/account-abstraction"}]},{"group":"Solana","icon":"sun-bright","pages":[{"title":"Setup Solana Libraries","sidebarTitle":"Setup Libraries","icon":"gear","href":"/v2/react-native/guides/web3-operations/solana/setup-libraries"},{"title":"Configure RPC Endpoints with Solana Libraries","sidebarTitle":"Configure RPC","icon":"network-wired","href":"/v2/react-native/guides/web3-operations/solana/configure-rpc"},{"title":"Query Wallet Balances with Solana Libraries","sidebarTitle":"Query Balances","icon":"wallet","href":"/v2/react-native/guides/web3-operations/solana/query-balances"},{"title":"Sign Messages with Solana Libraries","sidebarTitle":"Sign Messages","icon":"signature","href":"/v2/react-native/guides/web3-operations/solana/sign-messages"},{"title":"Send Tokens with Solana Libraries","sidebarTitle":"Send Tokens","icon":"paper-plane","href":"/v2/react-native/guides/web3-operations/solana/send-tokens"},{"title":"Execute Transactions with Solana Libraries","sidebarTitle":"Execute Transactions","icon":"bolt","href":"/v2/react-native/guides/web3-operations/solana/execute-transactions"},{"title":"Verify Signatures with Solana Libraries","sidebarTitle":"Verify Signatures","icon":"shield-check","href":"/v2/react-native/guides/web3-operations/solana/verify-signatures"},{"title":"Interact with Solana Programs","sidebarTitle":"Interact with Programs","icon":"code","href":"/v2/react-native/guides/web3-operations/solana/interact-with-programs"},{"title":"Get Solana Transaction Status","sidebarTitle":"Get Transaction Status","icon":"hourglass-half","href":"/v2/react-native/guides/web3-operations/solana/get-transaction-status"},{"title":"Manage SPL Token Accounts","sidebarTitle":"Manage Token Accounts","icon":"coins","href":"/v2/react-native/guides/web3-operations/solana/manage-token-accounts"},{"title":"Set Compute Units and Priority Fees","sidebarTitle":"Compute Units","icon":"microchip","href":"/v2/react-native/guides/web3-operations/solana/compute-units"}]},{"group":"Cosmos","icon":"atom","pages":[{"title":"Setup Cosmos Libraries","sidebarTitle":"Setup Libraries","icon":"gear","href":"/v2/react-native/guides/web3-operations/cosmos/setup-libraries"},{"title":"Configure RPC Nodes with Cosmos Libraries","sidebarTitle":"Configure RPC","icon":"network-wired","href":"/v2/react-native/guides/web3-operations/cosmos/configure-rpc"},{"title":"Query Wallet Balances with Cosmos Libraries","sidebarTitle":"Query Balances","icon":"wallet","href":"/v2/react-native/guides/web3-operations/cosmos/query-balances"},{"title":"Sign Messages with Cosmos Libraries","sidebarTitle":"Sign Messages","icon":"signature","href":"/v2/react-native/guides/web3-operations/cosmos/sign-messages"},{"title":"Send Tokens with Cosmos Libraries","sidebarTitle":"Send Tokens","icon":"paper-plane","href":"/v2/react-native/guides/web3-operations/cosmos/send-tokens"},{"title":"Execute Transactions with Cosmos Libraries","sidebarTitle":"Execute Transactions","icon":"bolt","href":"/v2/react-native/guides/web3-operations/cosmos/execute-transactions"},{"title":"Verify Signatures with Cosmos Libraries","sidebarTitle":"Verify Signatures","icon":"shield-check","href":"/v2/react-native/guides/web3-operations/cosmos/verify-signatures"},{"title":"Stake Tokens to Validators","sidebarTitle":"Stake Tokens","icon":"lock","href":"/v2/react-native/guides/web3-operations/cosmos/stake-tokens"},{"title":"Claim Staking Rewards","sidebarTitle":"Claim Rewards","icon":"gift","href":"/v2/react-native/guides/web3-operations/cosmos/claim-rewards"},{"title":"IBC Cross-Chain Transfers","sidebarTitle":"IBC Transfers","icon":"arrows-rotate","href":"/v2/react-native/guides/web3-operations/cosmos/ibc-transfers"},{"title":"Query Validator Information","sidebarTitle":"Query Validators","icon":"users","href":"/v2/react-native/guides/web3-operations/cosmos/query-validators"},{"title":"Sponsor Gas Fees on Cosmos","sidebarTitle":"Gas Sponsorship","icon":"gas-pump","href":"/v2/react-native/guides/web3-operations/cosmos/gas-sponsorship"}]},{"group":"Stellar","icon":"star","pages":[{"title":"Setup Stellar Libraries","sidebarTitle":"Setup Libraries","icon":"gear","href":"/v2/react-native/guides/web3-operations/stellar/setup-libraries"},{"title":"Configure Horizon Endpoints with Stellar Libraries","sidebarTitle":"Configure RPC","icon":"network-wired","href":"/v2/react-native/guides/web3-operations/stellar/configure-rpc"},{"title":"Query Wallet Balances with Stellar Libraries","sidebarTitle":"Query Balances","icon":"wallet","href":"/v2/react-native/guides/web3-operations/stellar/query-balances"},{"title":"Sign Messages with Stellar Libraries","sidebarTitle":"Sign Messages","icon":"signature","href":"/v2/react-native/guides/web3-operations/stellar/sign-messages"},{"title":"Send Tokens with Stellar Libraries","sidebarTitle":"Send Tokens","icon":"paper-plane","href":"/v2/react-native/guides/web3-operations/stellar/send-tokens"},{"title":"Execute Transactions with Stellar Libraries","sidebarTitle":"Execute Transactions","icon":"bolt","href":"/v2/react-native/guides/web3-operations/stellar/execute-transactions"},{"title":"Verify Signatures with Stellar Libraries","sidebarTitle":"Verify Signatures","icon":"shield-check","href":"/v2/react-native/guides/web3-operations/stellar/verify-signatures"}]},{"group":"Sessions \u0026 Auth","icon":"clock","pages":[{"title":"React Native Session Management","icon":"key-skeleton","sidebarTitle":"Manage Sessions","href":"/v2/react-native/guides/sessions"},{"title":"JWT Token Management","icon":"shield-check","sidebarTitle":"Generate Session JWTs","href":"/v2/react-native/guides/sessions-jwt"},{"title":"Social Login","sidebarTitle":"Add Social Login","icon":"key","href":"/v2/react-native/guides/add-social-login"},{"title":"Add Password or PIN","sidebarTitle":"Add Password or PIN","icon":"lock","href":"/v2/react-native/guides/add-password-pin"}]},{"group":"Programmatic Wallets","icon":"key","pages":[{"title":"Wallet Pregeneration","icon":"wallet","sidebarTitle":"Pregenerate Wallets","href":"/v2/react-native/guides/pregen"},{"title":"Permissions","sidebarTitle":"Transaction Permissions","icon":"receipt","href":"/v2/react-native/guides/permissions"},{"title":"Guest Mode","sidebarTitle":"Enable Guest Mode","icon":"user","href":"/v2/react-native/guides/guest-mode"},{"title":"Export Private Key","sidebarTitle":"Export Private Key","icon":"key","href":"/v2/react-native/guides/export-private-key"}]},{"group":"Storage \u0026 Configuration","icon":"database","pages":[{"title":"Custom Storage with MMKV","icon":"database","sidebarTitle":"Configure Storage","href":"/v2/react-native/guides/custom-storage"}]},{"group":"Build with Hooks","icon":"sparkles","pages":[{"title":"ParaProvider","sidebarTitle":"ParaProvider","icon":"box","href":"/v2/react-native/guides/hooks/para-provider"},{"group":"Hooks","icon":"puzzle-piece","pages":[{"title":"useAccount","sidebarTitle":"useAccount","href":"/v2/react-native/guides/hooks/use-account"},{"title":"useAuthenticateWithEmailOrPhone","sidebarTitle":"useAuthenticateWithEmailOrPhone","href":"/v2/react-native/guides/hooks/use-authenticate-with-email-or-phone"},{"title":"useAuthenticateWithOAuth","sidebarTitle":"useAuthenticateWithOAuth","href":"/v2/react-native/guides/hooks/use-authenticate-with-o-auth"},{"title":"useClaimPregenWallets","sidebarTitle":"useClaimPregenWallets","href":"/v2/react-native/guides/hooks/use-claim-pregen-wallets"},{"title":"useClient","sidebarTitle":"useClient","href":"/v2/react-native/guides/hooks/use-client"},{"title":"useCreateGuestWallets","sidebarTitle":"useCreateGuestWallets","href":"/v2/react-native/guides/hooks/use-create-guest-wallets"},{"title":"useCreatePregenWallet","sidebarTitle":"useCreatePregenWallet","href":"/v2/react-native/guides/hooks/use-create-pregen-wallet"},{"title":"useCreatePregenWalletPerType","sidebarTitle":"useCreatePregenWalletPerType","href":"/v2/react-native/guides/hooks/use-create-pregen-wallet-per-type"},{"title":"useCreateWallet","sidebarTitle":"useCreateWallet","href":"/v2/react-native/guides/hooks/use-create-wallet"},{"title":"useCreateWalletPerType","sidebarTitle":"useCreateWalletPerType","href":"/v2/react-native/guides/hooks/use-create-wallet-per-type"},{"title":"useEnable2fa","sidebarTitle":"useEnable2fa","href":"/v2/react-native/guides/hooks/use-enable-2fa"},{"title":"useExportPrivateKey","sidebarTitle":"useExportPrivateKey","href":"/v2/react-native/guides/hooks/use-export-private-key"},{"title":"useHasPregenWallet","sidebarTitle":"useHasPregenWallet","href":"/v2/react-native/guides/hooks/use-has-pregen-wallet"},{"title":"useIsFullyLoggedIn","sidebarTitle":"useIsFullyLoggedIn","href":"/v2/react-native/guides/hooks/use-is-fully-logged-in"},{"title":"useIssueJwt","sidebarTitle":"useIssueJwt","href":"/v2/react-native/guides/hooks/use-issue-jwt"},{"title":"useKeepSessionAlive","sidebarTitle":"useKeepSessionAlive","href":"/v2/react-native/guides/hooks/use-keep-session-alive"},{"title":"useLoginExternalWallet","sidebarTitle":"useLoginExternalWallet","href":"/v2/react-native/guides/hooks/use-login-external-wallet"},{"title":"useLogout","sidebarTitle":"useLogout","href":"/v2/react-native/guides/hooks/use-logout"},{"title":"useParaStatus","sidebarTitle":"useParaStatus","href":"/v2/react-native/guides/hooks/use-para-status"},{"title":"useResendVerificationCode","sidebarTitle":"useResendVerificationCode","href":"/v2/react-native/guides/hooks/use-resend-verification-code"},{"title":"useSetup2fa","sidebarTitle":"useSetup2fa","href":"/v2/react-native/guides/hooks/use-setup-2fa"},{"title":"useSignMessage","sidebarTitle":"useSignMessage","href":"/v2/react-native/guides/hooks/use-sign-message"},{"title":"useSignTransaction","sidebarTitle":"useSignTransaction","href":"/v2/react-native/guides/hooks/use-sign-transaction"},{"title":"useSignUpOrLogIn","sidebarTitle":"useSignUpOrLogIn","href":"/v2/react-native/guides/hooks/use-sign-up-or-log-in"},{"title":"useUpdatePregenWalletIdentifier","sidebarTitle":"useUpdatePregenWalletIdentifier","href":"/v2/react-native/guides/hooks/use-update-pregen-wallet-identifier"},{"title":"useVerify2fa","sidebarTitle":"useVerify2fa","href":"/v2/react-native/guides/hooks/use-verify-2fa"},{"title":"useVerifyExternalWallet","sidebarTitle":"useVerifyExternalWallet","href":"/v2/react-native/guides/hooks/use-verify-external-wallet"},{"title":"useVerifyFarcaster","sidebarTitle":"useVerifyFarcaster","href":"/v2/react-native/guides/hooks/use-verify-farcaster"},{"title":"useVerifyNewAccount","sidebarTitle":"useVerifyNewAccount","href":"/v2/react-native/guides/hooks/use-verify-new-account"},{"title":"useVerifyOAuth","sidebarTitle":"useVerifyOAuth","href":"/v2/react-native/guides/hooks/use-verify-o-auth"},{"title":"useVerifyTelegram","sidebarTitle":"useVerifyTelegram","href":"/v2/react-native/guides/hooks/use-verify-telegram"},{"title":"useWaitForLogin","sidebarTitle":"useWaitForLogin","href":"/v2/react-native/guides/hooks/use-wait-for-login"},{"title":"useWaitForSignup","sidebarTitle":"useWaitForSignup","href":"/v2/react-native/guides/hooks/use-wait-for-signup"},{"title":"useWaitForWalletCreation","sidebarTitle":"useWaitForWalletCreation","href":"/v2/react-native/guides/hooks/use-wait-for-wallet-creation"},{"title":"useWallet","sidebarTitle":"useWallet","href":"/v2/react-native/guides/hooks/use-wallet"}]}]},{"group":"Troubleshooting","icon":"wrench","pages":[{"title":"React Native and Expo Troubleshooting","sidebarTitle":"Fix Common Issues","icon":"wrench","href":"/v2/react-native/troubleshooting"},{"title":"Passkey Error Codes","sidebarTitle":"Passkey Error Codes","icon":"triangle-exclamation","href":"/v2/react-native/error-codes"},{"title":"React Native \u0026 Expo SDK","sidebarTitle":"RN \u0026 Expo API","icon":"code","href":"/v2/react-native/api/sdk"}]}]},{"anchor":"Flutter","icon":"flutter","pages":[{"title":"Flutter","href":"/v2/flutter/overview"}]},{"anchor":"Swift","icon":"swift","pages":[{"title":"Swift","href":"/v2/swift/overview"}]},{"anchor":"Developer Tools","icon":"terminal","pages":[{"title":"Developer Tools","href":"/v2/developer-tools/overview"}]},{"anchor":"API Reference","icon":"code","pages":[{"title":"API Reference","href":"/v2/references/overview"}]},{"anchor":"Partner Network","icon":"list-check","pages":[{"title":"Partner Network","href":"/v2/walkthroughs/overview"}]}]}]},"basePath":"","title":"Add Native Passkeys - Para Docs","buildId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","deploymentId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-DvzxQbD0.js","DynamicMarkdown-mQG_iQiE.js","zoom-image-lightbox-BFbLClTf.js","lightbox-handle-r17bVUz3.js"]}