UNPKG

@privy-io/expo

Version:

Expo client for the Privy Auth API

2 lines (1 loc) • 45.5 kB
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var _chunkOWCFWPALjs = require('./chunk-OWCFWPAL.js');var _react = require('react'); var _react2 = _interopRequireDefault(_react);var _zustand = require('zustand');var We=_zustand.create.call(void 0, ()=>({status:"disconnected"})),xe= exports.f =()=>We.getState().onNeedsRecovery,Ar= exports.g =e=>{_react.useEffect.call(void 0, ()=>{We.setState({onNeedsRecovery:e==null?void 0:e.onNeedsRecovery})},[e==null?void 0:e.onNeedsRecovery])};var _expoapplication = require('expo-application');var _expolinking = require('expo-linking'); var te = _interopRequireWildcard(_expolinking); var J = _interopRequireWildcard(_expolinking); var $ = _interopRequireWildcard(_expolinking);var _exposecurestore = require('expo-secure-store'); var x = _interopRequireWildcard(_exposecurestore); var W = _interopRequireWildcard(_exposecurestore);var _expowebbrowser = require('expo-web-browser'); var ce = _interopRequireWildcard(_expowebbrowser); var Be = _interopRequireWildcard(_expowebbrowser);var _reactnative = require('react-native');var _jssdkcore = require('@privy-io/js-sdk-core'); var _jssdkcore2 = _interopRequireDefault(_jssdkcore);var _reactfastcompare = require('react-fast-compare'); var _reactfastcompare2 = _interopRequireDefault(_reactfastcompare);var ue=_zustand.create.call(void 0, ()=>{}),Ie=e=>ue.setState(t=>_reactfastcompare2.default.call(void 0, t,e)?t:e),oe= exports.a =ue.getState;var _reactnativewebview = require('react-native-webview'); var _reactnativewebview2 = _interopRequireDefault(_reactnativewebview);function Ue(e){return typeof e!="object"||e===null||!("event"in e&&typeof e.event=="string")||!("id"in e&&typeof e.id=="string")||!("data"in e&&typeof e.data=="object")||e.data===null?!1:e.event.startsWith("app:secure-storage:")}function Le(e){return _chunkOWCFWPALjs.d.call(void 0, this,null,function*(){switch(e.event){case"app:secure-storage:get":{let{key:t}=e.data,r=yield W.getItemAsync(ge(t),{keychainAccessible:W.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY}).catch(o=>(console.warn("Failed to get the value from secure store",o),null));return{event:e.event,id:e.id,data:{value:r}}}case"app:secure-storage:remove":{let{key:t}=e.data,r=yield W.deleteItemAsync(ge(t),{keychainAccessible:W.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY}).then(()=>!0).catch(o=>(console.warn("Failed to remove the value from secure store",o),!1));return{event:e.event,id:e.id,data:{success:r}}}case"app:secure-storage:set":{let{key:t,value:r}=e.data,o=yield W.setItemAsync(ge(t),r,{keychainAccessible:W.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY}).then(()=>!0).catch(n=>(console.warn("Failed to write the value to secure store",n),!1));return{event:e.event,id:e.id,data:{success:o}}}}})}var ge=e=>e.replaceAll(":","-");var N=_zustand.createStore.call(void 0, )(()=>({user:null,proxyStatus:"loading"}));function Te(){return N.getState().user}var Ur=N.subscribe.bind(N);function _e(e){N.setState(({user:t})=>_reactfastcompare2.default.call(void 0, t,e)?{}:{user:e})}var Ee=e=>N.setState({proxyStatus:e});function j(){return _zustand.useStore.call(void 0, N,e=>e.user)}function Fe(){return _zustand.useStore.call(void 0, N,e=>!!e.user)}function D(){return _zustand.useStore.call(void 0, N,e=>e.proxyStatus!=="loading")}var Lt={shouldUseAppBackedStorage:!0},Me=({client:e,isClientReady:t})=>{let r=_react.useRef.call(void 0, null);_react.useEffect.call(void 0, ()=>_reactnative.AppState.addEventListener("change",d=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){d==="active"&&((yield e.embeddedWallet.ping(500))||(Ee("reloading"),e.embeddedWallet.reload()))})).remove,[e]);let o=_react.useCallback.call(void 0, n=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){var c;let{data:d}=n.nativeEvent,i=JSON.parse(d);if(Ue(i)){let s=yield Le(i);(c=r.current)==null||c.postMessage(JSON.stringify(s));return}e.embeddedWallet.onMessage(i)}),[e]);return t?_react2.default.createElement(_reactnativewebview2.default,{style:{flex:1},ref:n=>{n&&(e.setMessagePoster(n),r.current=n)},cacheEnabled:!1,cacheMode:"LOAD_NO_CACHE",injectedJavaScriptObject:Lt,source:{uri:e.embeddedWallet.getURL()},webviewDebuggingEnabled:e.logger.level==="DEBUG",onLoad:()=>Ee("loaded"),onError:console.error,onMessage:o}):null};function je(d){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({client:e,setSolanaWallet:t,createSolanaWalletCallbacks:r,setSolanaRecoveryFlowState:o,opts:n}){var i,c,s;t({status:"creating"});try{let{user:a}=yield e.user.get(),l=_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, a),v=l[0],f=(i=_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, a))!=null?i:void 0;if(n!=null&&n.recoveryMethod&&n.recoveryMethod!=="privy")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Unsupported recovery method for solana wallet."});if(!(n!=null&&n.createAdditional)&&v)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Solana wallet already exists for this user. Set `createAdditional` to `true` to create another wallet"});let g,w;if(v){let u=f!=null?f:v,{entropyId:b,entropyIdVerifier:y}=_jssdkcore.getEntropyDetailsFromAccount.call(void 0, u),m=Math.max(...l.map(E=>E.wallet_index),0)+1,_=yield e.embeddedWallet.add({chainType:"solana",entropyId:b,entropyIdVerifier:y,hdWalletIndex:m}),S=_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, _.user).find(E=>E.wallet_index===m);if(!S)throw new (0, _jssdkcore.PrivyClientError)({error:"Embedded wallet account not created",code:"embedded_wallet_creation_error"});g=yield e.embeddedWallet.getSolanaProvider(S,b,y),w=_.user}else{let u=yield e.embeddedWallet.createSolana({ethereumAccount:f}),b=_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, u.user).find(S=>S.wallet_index===0);if(!b)throw new (0, _jssdkcore.PrivyClientError)({error:"Embedded wallet account not created",code:"embedded_wallet_creation_error"});let y=f!=null?f:b,{entropyId:m,entropyIdVerifier:_}=_jssdkcore.getEntropyDetailsFromAccount.call(void 0, y);g=yield e.embeddedWallet.getSolanaProvider(b,m,_),w=u.user}let h=_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, w)[0];if(!h)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Unknown error creating solana wallet"});return(s=(c=r.current)==null?void 0:c.onSuccess)==null||s.call(c,g),t({status:"connected",publicKey:h.public_key}),o({status:"initial"}),g}catch(a){let l=a instanceof Error?a.message:"Error creating embedded wallet";throw t({status:"error",error:l}),o({status:"initial"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:l})}})}function ye(l){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({client:e,account:t,setWallet:r,recoverWalletCallbacks:o,recoveryMethod:n,setRecoveryFlowState:d,password:i,recoveryKey:c,recoveryToken:s,recoverySecretOverride:a}){var v,f,g,w;if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});switch(n){case"user-passcode":if(!i)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!s)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!a)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Record name is required for icloud recovery method"});break;case"recovery-encryption-key":if(!c)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"recoveryKey is required for recovery-encryption-key recovery method"});break}r({status:"connecting",account:t});try{let h=yield e.embeddedWallet.getProvider(t,i,s,a,c);return r({status:"connected",provider:h,account:t}),d({status:"initial"}),(f=(v=o.current)==null?void 0:v.onSuccess)==null||f.call(v,h),h}catch(h){r({status:"needs-recovery",account:t}),d({status:"initial"});let u=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:h instanceof Error?h.message:"Error recovering embedded wallet"});throw(w=(g=o.current)==null?void 0:g.onError)==null||w.call(g,u),u}})}function De(c){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({client:e,account:t,entropyId:r,entropyIdVerifier:o,setSolanaWallet:n,recoverSolanaWalletCallbacks:d,setSolanaRecoveryFlowState:i}){var s,a,l,v;n({status:"connecting"});try{let f=yield e.embeddedWallet.getSolanaProvider(t,r,o);return n({status:"connected",publicKey:f._publicKey}),i({status:"initial"}),(a=(s=d.current)==null?void 0:s.onSuccess)==null||a.call(s,f),f}catch(f){n({status:"needs-recovery"}),i({status:"initial"});let g=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:f instanceof Error?f.message:"Error recovering embedded wallet"});throw(v=(l=d.current)==null?void 0:l.onError)==null||v.call(l,g),g}})}var qe=({client:e,solanaWallet:t,setSolanaWallet:r,setSolanaRecoveryFlowState:o,createSolanaWalletCallbacks:n,recoverSolanaWalletCallbacks:d})=>{let i=j(),c=_react.useMemo.call(void 0, ()=>_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, i),[i]),s=D(),a=_react.useMemo.call(void 0, ()=>c.length===0?null:_jssdkcore.getEntropyDetailsFromUser.call(void 0, i),[i,c]),l=_react.useMemo.call(void 0, ()=>{let w=c.map(y=>{let m=_jssdkcore.getEntropyDetailsFromUser.call(void 0, i,y);return m?{account:y,entropy:m}:null});if(w.some(y=>y===null))return[];let h=void 0,u=void 0,b=void 0;return w.filter(y=>y!==null).map(({account:y,entropy:{entropyId:m,entropyIdVerifier:_}})=>({address:y.address,publicKey:y.address,walletIndex:y.wallet_index,getProvider:()=>e.embeddedWallet.getSolanaProvider(y,m,_,h,u,b,S=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){var E;yield(E=xe())==null?void 0:E(S)}))}))},[c,i,e]),v=_react.useCallback.call(void 0, w=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){return yield je({client:e,setSolanaWallet:r,createSolanaWalletCallbacks:n,setSolanaRecoveryFlowState:o,opts:w})}),[e,n]),f=_react.useCallback.call(void 0, ()=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){if(!a)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{entropyId:w,entropyIdVerifier:h}=a;return De({client:e,account:c[0],entropyId:w,entropyIdVerifier:h,setSolanaWallet:r,recoverSolanaWalletCallbacks:d,setSolanaRecoveryFlowState:o})}),[e,a,c,d,o,r]),g=_react.useCallback.call(void 0, ()=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){if(!a)throw r({status:"not-created"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});r(w=>w.status==="connected"?{status:"reconnecting"}:{status:"connecting"});try{let{entropyId:w,entropyIdVerifier:h}=a,u=yield e.embeddedWallet.getSolanaProvider(c[0],w,h);return r({status:"connected",publicKey:c[0].public_key}),u}catch(w){throw _jssdkcore.errorIndicatesRecoveryIsNeeded.call(void 0, w)?(r({status:"needs-recovery"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):w instanceof Error?(r({status:"error",error:w.message}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:w.message})):(r({status:"error",error:"Error loading embedded wallet"}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[c,e,a,r]);return _react.useEffect.call(void 0, ()=>{if(!i&&t.status!=="disconnected")return r({status:"disconnected"});s&&g().catch(()=>{})},[s,i]),_react.useEffect.call(void 0, ()=>{t.status==="error"&&t.error.includes("User must be logged in")&&g()},[t.status]),{create:v,recover:f,getProvider:g,wallets:l}};function me(v){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({client:e,setWallet:t,createWalletCallbacks:r,recoveryMethod:o,setRecoveryFlowState:n,password:d,recoveryKey:i,recoveryToken:c,recoverySecretOverride:s,iCloudRecordNameOverride:a,solanaAccount:l}){var g,w;switch(o){case"user-passcode":if(!d)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"recovery-encryption-key":if(!i)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"key is required for recovery-encryption-key recovery method"});break;case"google-drive":if(!c)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!s||!a)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery failed due to inability to store credentials"});break}t({status:"creating",account:null});let f=o==="icloud"?"icloud-native":o;try{let{user:h}=yield e.embeddedWallet.create({password:d,recoveryMethod:f,recoveryKey:i,recoveryToken:c,recoverySecretOverride:s,iCloudRecordNameOverride:a,solanaAccount:l}),u=_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, h);if(!u)throw new (0, _jssdkcore.PrivyClientError)({error:"Embedded wallet account not created",code:"embedded_wallet_creation_error"});let b=yield e.embeddedWallet.getProvider(u);return(w=(g=r.current)==null?void 0:g.onSuccess)==null||w.call(g,b),t({status:"connected",provider:b,account:u}),n({status:"initial"}),b}catch(h){let u=h instanceof Error?h.message:"Error creating embedded wallet";throw t({status:"error",error:u,account:null}),n({status:"initial"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:u})}})}function Je(){return _chunkOWCFWPALjs.d.call(void 0, this,null,function*(){try{return yield Promise.resolve().then(() => _interopRequireWildcard(require("@privy-io/expo-native-extensions")))}catch(e){throw new Error("@privy-io/expo-native-extensions not found. Ensure that you're explicitly including as a dependency, and running an Expo development build")}})}function ke(o){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({user:e,appId:t,client:r}){var c;if(_reactnative.Platform.OS==="android")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let n=yield Je(),d=yield r.recovery.icloudAuth.getICloudConfiguration("expo-ios");if(!(d==null?void 0:d.container_identifier))throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"An iCloud Container ID must be specified in the Privy Dashboard."});try{let{recoverySecret:s,iCloudRecordName:a}=yield n.writeRecoverySecretToICloud({containerId:d.container_identifier,appId:t,userId:e.id});return{recoverySecret:s,iCloudRecordName:a}}catch(s){if(s instanceof Error){let a=(c=s.message.split("Caused by: ")[1])!=null?c:"Error writing to iCloud";throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:a})}throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}function He(o){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({walletAddress:e,client:t,chainType:r}){var a;if(_reactnative.Platform.OS==="android")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let n=yield Je(),i=(yield t.recovery.getRecoveryKeyMaterial(e,r)).icloud_record_name;if(!i)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery not properly backed up."});let c=yield t.recovery.icloudAuth.getICloudConfiguration("expo-ios"),s=c==null?void 0:c.container_identifier;if(!s)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"An iCloud Container ID must be specified in the Privy Dashboard."});try{let{recoverySecret:l}=yield n.readRecoverySecretFromICloud({containerId:s,recordName:i});return{recoverySecret:l}}catch(l){if(l instanceof Error){let v=(a=l.message.split("Caused by: ")[1])!=null?a:"Error writing to iCloud";throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:v})}throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}function K(e){return e instanceof Error||e instanceof _jssdkcore.PrivyApiError||e instanceof _jssdkcore.PrivyClientError?e:typeof e=="string"?new Error(e):new Error("Unknown error")}var ho=e=>new Promise(t=>setTimeout(t,e));function _o(){let e=_react.useRef.call(void 0, _reactnative.AppState.currentState);_react.useEffect.call(void 0, ()=>_reactnative.AppState.addEventListener("change",o=>{e.current=o}).remove,[]);function t(){return _reactnative.AppState.currentState}return{appState:e,getCurrentAppState:t}}function ne(n){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({provider:e,redirectUri:t,client:r,onError:o}){try{let d;switch(e){case"google-drive":{let{url:a}=yield r.recovery.auth.generateURL(J.createURL(t||"/"));d=a;break}default:throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid provider",code:"embedded_wallet_recovery_error"})}let i=yield Be.openAuthSessionAsync(d);if(_reactnative.Platform.OS==="android")return;if(i.type!=="success")throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth session failed",code:"embedded_wallet_recovery_error"});let{queryParams:c}=J.parse(i.url),s;switch(e){case"google-drive":{let{privy_oauth_state:a,privy_oauth_code:l}=c;if(!l||!a)throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth invalid credentials",code:"embedded_wallet_recovery_error"});s=yield ve({oAuthCode:l,oAuthState:a,client:r});break}default:throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth invalid provider",code:"embedded_wallet_recovery_error"})}return s}catch(d){throw o==null||o(K(d)),d}})}function ve(o){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({oAuthCode:e,oAuthState:t,client:r}){let{access_token:n}=yield r.recovery.auth.authorize(e,t);if(!n)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:"login_with_oauth_returned_with_invalid_credentials"});return n})}var qt=2*60*1e3;function zt(e){let t;return new Promise((r,o)=>{t=J.addEventListener("url",d=>_chunkOWCFWPALjs.d.call(void 0, this,[d],function*({url:n}){if(!n)return;let{queryParams:i}=J.parse(n),{privy_oauth_state:c,privy_oauth_code:s}=i!=null?i:{};if(typeof s!="string"||typeof c!="string")return;let a=yield ve({client:e,oAuthCode:s,oAuthState:c});r(a)})),setTimeout(()=>{o(new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_set_recovery_error",error:"Failed to complete Google Drive recovery flow"}))},qt)}).finally(()=>{t==null||t.remove()})}function Uo(e){return _chunkOWCFWPALjs.d.call(void 0, this,null,function*(){let t;_reactnative.Platform.OS==="android"&&(t=zt(e));let r=yield ne({provider:"google-drive",client:e});return r!=null?r:yield t})}function fe(d){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({client:e,recoveryInput:t,setWalletRecoveryCallbacks:r,setRecoveryFlowState:o,setWallet:n}){var i,c,s,a;try{let{provider:l,user:v}=yield e.embeddedWallet.setRecovery(t),f=l,g=_jssdkcore.getUserEmbeddedWallet.call(void 0, v);return n({status:"connected",provider:f,account:g}),(c=(i=r.current)==null?void 0:i.onSuccess)==null||c.call(i,f),o({status:"initial"}),f}catch(l){let v=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_set_recovery_error",error:l instanceof Error?l.message:"Error setting password on embedded wallet"});throw(a=(s=r.current)==null?void 0:s.onError)==null||a.call(s,v),o({status:"initial"}),v}})}function Qe(e){return e===void 0?{recoveryMethod:"privy"}:typeof e=="string"?{recoveryMethod:"user-passcode",password:e}:e.recoveryMethod==="user-passcode"?{recoveryMethod:"user-passcode",password:e.password}:e.recoveryMethod==="recovery-encryption-key"?{recoveryMethod:"recovery-encryption-key",recoveryKey:e.recoveryKey}:{recoveryMethod:e.recoveryMethod}}var $e=({client:e,appId:t,wallet:r,setWallet:o,setRecoveryFlowState:n,createWalletCallbacks:d,recoverWalletCallbacks:i,setWalletRecoveryCallbacks:c})=>{let s=j(),a=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, s),[s]),l=D(),v=_react.useCallback.call(void 0, u=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){var I,B;if(a)throw new (0, _jssdkcore.PrivyClientError)({error:"This user already has an embedded wallet",code:"embedded_wallet_already_exists"});let{user:b}=yield e.user.get(),{password:y,recoveryMethod:m,recoveryKey:_}=Qe(u),S,E,L;if(m==="google-drive"&&(S=yield ne({provider:m,client:e,onError:(I=d.current)==null?void 0:I.onError}),n({status:"creating-wallet"}),!S))return null;if(m==="icloud"){if(!b)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before creating a wallet with iCloud."});let{recoverySecret:V,iCloudRecordName:q}=yield ke({user:b,appId:t,client:e});E=V,L=q}return yield me({client:e,setWallet:o,createWalletCallbacks:d,recoveryMethod:m,recoveryKey:_,setRecoveryFlowState:n,password:y,recoverySecretOverride:E,iCloudRecordNameOverride:L,solanaAccount:(B=_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, b))!=null?B:void 0})}),[e,a,s]),f=_react.useCallback.call(void 0, u=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){var m;if(r.status!=="connected")throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"});if(!a)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});if(_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, s))throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_set_recovery_error",error:"Cannot set user-controlled recovery for a user with an embedded Solana wallet."});if(_jssdkcore.isUnifiedWallet.call(void 0, a))throw new (0, _jssdkcore.PrivyClientError)({code:"unsupported_wallet_type",error:"Embedded wallet recovery is only supported for on-device execution and this app uses TEE execution. Learn more https://docs.privy.io/recipes/tee-wallet-migration-guide"});_jssdkcore.throwIfInvalidRecoveryUpgradePath.call(void 0, {currentRecoveryMethod:a.recovery_method,upgradeToRecoveryMethod:u.recoveryMethod});let b,y;switch(u.recoveryMethod){case"privy":y=_chunkOWCFWPALjs.b.call(void 0, _chunkOWCFWPALjs.a.call(void 0, {},u),{wallet:a});break;case"user-passcode":y=_chunkOWCFWPALjs.b.call(void 0, _chunkOWCFWPALjs.a.call(void 0, {},u),{wallet:a,password:u.password});break;case"google-drive":if(b=yield ne({provider:u.recoveryMethod,client:e,onError:(m=c.current)==null?void 0:m.onError}),n({status:"upgrading-recovery"}),!b)return null;y={recoveryMethod:"google-drive",wallet:a,recoveryAccessToken:b};break;case"icloud":if(!s)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before backing up to iCloud."});let{recoverySecret:_,iCloudRecordName:S}=yield ke({user:s,appId:t,client:e});y={recoveryMethod:"icloud-native",recoverySecretOverride:_,iCloudRecordNameOverride:S,wallet:a};break;default:throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}return fe({client:e,recoveryInput:y,setWalletRecoveryCallbacks:c,setRecoveryFlowState:n,setWallet:o})}),[e,a,r.status,s]),g=_react.useCallback.call(void 0, u=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){return f({recoveryMethod:"user-passcode",password:u})}),[e,a,r.status]),w=_react.useCallback.call(void 0, u=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){var E;if(!a)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{password:b,recoveryMethod:y,recoveryKey:m}=Qe(u),_,S;if(y==="google-drive"&&(_=yield ne({provider:y,client:e,onError:(E=i.current)==null?void 0:E.onError}),n({status:"recovering"}),!_))return null;if(y==="icloud"){if(!s)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before recovering via iCloud."});let{recoverySecret:L}=yield He({client:e,walletAddress:a.address});S=L}return ye({client:e,account:a,setWallet:o,recoverWalletCallbacks:i,recoveryMethod:y,setRecoveryFlowState:n,recoveryKey:m,password:b,recoveryToken:_,recoverySecretOverride:S})}),[e,a]),h=_react.useCallback.call(void 0, ()=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){if(!a)throw o({status:"not-created",account:null}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});o(u=>u.status==="connected"?{status:"reconnecting",account:a}:{status:"connecting",account:a});try{let u=yield e.embeddedWallet.getProvider(a);return o({status:"connected",provider:u,account:a}),u}catch(u){throw _jssdkcore.errorIndicatesRecoveryIsNeeded.call(void 0, u)?(o({status:"needs-recovery",account:a}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):u instanceof Error?(o({status:"error",error:u.message,account:a}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:u.message})):(o({status:"error",error:"Error loading embedded wallet",account:a}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,a]);return _react.useEffect.call(void 0, ()=>{if(!s&&r.status!=="disconnected")return o({status:"disconnected",account:null});l&&h().catch(()=>{})},[l,s,a]),_react.useEffect.call(void 0, ()=>{r.status==="error"&&r.error.includes("User must be logged in")&&h()},[r.status]),{create:v,recover:w,setPassword:g,setRecovery:f,getProvider:h}};var et=({client:e,isReady:t})=>{let r=j(),o=ue(i=>i==null?void 0:i.customAuth),[n,d]=_react.useState.call(void 0, {status:"initial"});return _react.useEffect.call(void 0, ()=>{(()=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){if(!(o!=null&&o.enabled)){d({status:"not-enabled"});return}d({status:"loading"});let{getCustomAccessToken:c,isLoading:s}=o;if(!(!t||s))try{let a=yield c();if(!a&&r){yield e.auth.logout(),d({status:"done"});return}if(!a){d({status:"done"});return}if(r){d({status:"done"});return}let l=oe();if(!(yield e.auth.customProvider.syncWithToken(a,{embedded:l==null?void 0:l.embedded}))){yield e.auth.logout(),d({status:"error",error:new (0, _jssdkcore.PrivyClientError)({error:"Failed to sync with custom auth provider",code:"third_party_auth_error"})});return}d({status:"done"})}catch(a){if(console.log("Error syncing with custom auth provider",a),d({status:"error",error:a}),r)throw yield e.auth.logout(),new (0, _jssdkcore.PrivyClientError)({error:"Third-party auth failed",code:"third_party_auth_error"})}}))()},[e,r,t,o==null?void 0:o.enabled,o==null?void 0:o.getCustomAccessToken,o==null?void 0:o.isLoading]),{customAuthState:n,customAuthStateIsSettled:n.status!=="loading"&&n.status!=="initial"}};var tt=({client:e,createWalletCallbacks:t,recoverWalletCallbacks:r,setWalletRecoveryCallbacks:o,recoveryFlowState:n,oAuthState:d,setRecoveryFlowState:i,setWallet:c,appStateVisible:s})=>{let a=$.useURL(),l=j(),v=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedWallet.call(void 0, l),[l]),f=D(),g=_react.useCallback.call(void 0, w=>{var u,b,y,m;let h=K(w);n.status==="creating-wallet"?(b=(u=t.current).onError)==null||b.call(u,K(h)):(m=(y=r.current).onError)==null||m.call(y,K(h)),i({status:"initial"})},[n]);return _react.useEffect.call(void 0, ()=>{function w(){return _chunkOWCFWPALjs.d.call(void 0, this,null,function*(){var y;if(!a&&n.status!=="initial"&&s&&g(new Error("Recovery OAuth session failed")),!a||n.status==="initial"||d.status!=="initial"||!s||!f)return;let{queryParams:h}=$.parse(a),{privy_oauth_state:u,privy_oauth_code:b}=h;if(!(!b||!u)){yield $.openURL(a.split("?")[0]);try{let m=yield ve({oAuthCode:b,oAuthState:u,client:e});if(n.status==="creating-wallet"){let _=(y=_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, l))!=null?y:void 0;yield me({client:e,setWallet:c,createWalletCallbacks:t,recoveryMethod:"google-drive",setRecoveryFlowState:i,recoveryToken:m,solanaAccount:_})}else if(n.status==="upgrading-recovery"){if(!v)throw new Error("Embedded wallet not found");yield fe({client:e,recoveryInput:{recoveryMethod:"google-drive",wallet:v,recoveryAccessToken:m},setWalletRecoveryCallbacks:o,setRecoveryFlowState:i,setWallet:c})}else yield ye({client:e,account:v,setWallet:c,recoverWalletCallbacks:r,recoveryMethod:"google-drive",setRecoveryFlowState:i,recoveryToken:m})}catch(m){g(m)}}})}_reactnative.Platform.OS==="android"&&w()},[a,n.status,s,f])};var rt=({client:e,isUserInitialized:t,setIsUserInitialized:r,setError:o})=>{_react.useEffect.call(void 0, ()=>{t||(()=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){try{yield e.initialize()}catch(d){o(d instanceof Error?d:new Error(String(d)))}try{yield e.user.get()}catch(d){}finally{r(!0)}}))()},[e,t,o,r])};var _expocrypto = require('expo-crypto');var ot={name:"@privy-io/expo",version:"0.55.0",description:"Expo client for the Privy Auth API",keywords:["authentication","authorization","identity","privacy","privy","user data","react-native","expo","web3"],homepage:"https://docs.privy.io",bugs:{url:"https://privy.io/slack"},license:"Apache-2.0",author:"privy.io",exports:{".":{require:"./dist/index.js",import:"./dist/esm/index.js",types:"./dist/index.d.ts"},"./passkey":{require:"./dist/passkey.js",import:"./dist/esm/passkey.js",types:"./dist/passkey.d.ts"},"./smart-wallets":{require:"./dist/smart-wallets.js",import:"./dist/esm/smart-wallets.js",types:"./dist/smart-wallets.d.ts"},"./extended-chains":{require:"./dist/extended-chains.js",import:"./dist/esm/extended-chains.js",types:"./dist/extended-chains.d.ts"},"./ui":{require:"./dist/ui.js",import:"./dist/esm/ui.js",types:"./dist/ui.d.ts"},"./connectors":{require:"./dist/connectors.js",import:"./dist/esm/connectors.js",types:"./dist/connectors.d.ts"}},main:"./dist/esm/index.js",source:"./src/index.ts",types:"./dist/index.d.ts",files:["dist/**/*","LICENSE","README.md"],scripts:{build:"tsup --clean --minify","check-types":"tsc --noEmit",clean:"rm -rf dist .turbo",dev:"tsup --watch",format:'eslint "src/**/*.{ts,tsx,js,jsx}" --fix',"generate-types":"tsup --dts-only",lint:'eslint "src/**/*.{ts,tsx,js,jsx}"',test:"jest"},browserslist:["defaults","node >= 18","not op_mini all"],dependencies:{"@privy-io/js-sdk-core":"0.52.0","@scure/base":"^1.2.4",tweetnacl:"^1.0.3","react-fast-compare":"^3.2.2",zustand:"^5.0.4"},devDependencies:{"@privy-io/eslint-config-custom":"*","@privy-io/tsconfig":"*","@simplewebauthn/types":"9.0.1","@solana/web3.js":"^1.98.0","@svgr/core":"^8.1.0","@svgr/plugin-jsx":"^8.1.0","@svgr/plugin-svgo":"^8.1.0","@testing-library/react-native":"^13.1.0","@tsconfig/node16-strictest-esm":"^1.0.3","@types/jest":"^29.1.2",buffer:"^5.4.3","eslint-plugin-react-hooks":"^5.0.0-canary-7118f5dd7-20230705",expo:"52.0.37","expo-apple-authentication":"7.1.3","expo-application":"6.0.2","expo-clipboard":"7.0.1","expo-crypto":"14.0.2",jest:"^29.7.0","jest-expo":"52.0.5","lucide-react-native":"^0.474.0",react:"^18.3.1","react-native":"0.77.1","react-test-renderer":"^18.3.1",tsup:"^6.2.3",typescript:"~5.5.3"},peerDependencies:{"@expo-google-fonts/inter":"*","@privy-io/expo-native-extensions":"0.0.5","expo-apple-authentication":"*","expo-application":"*","expo-clipboard":"*","expo-crypto":"*","expo-font":"*","expo-linking":"*","expo-secure-store":"*","expo-web-browser":"*",permissionless:"^0.2.47",react:"*","react-native":"*","react-native-passkeys":"^0.3.0","react-native-qrcode-styled":"*","react-native-safe-area-context":"*","react-native-svg":"*","react-native-webview":"*",viem:"^2.30.6"},peerDependenciesMeta:{"@expo-google-fonts/inter":{optional:!0},"expo-font":{optional:!0},permissionless:{optional:!0},viem:{optional:!0},"react-native-svg":{optional:!0},"expo-clipboard":{optional:!0},"react-native-qrcode-styled":{optional:!0},"react-native-safe-area-context":{optional:!0}},publishConfig:{access:"public"}};var it=({appId:e,clientId:t,storage:r=he,supportedChains:o,baseUrl:n,logLevel:d})=>new (0, _jssdkcore2.default)({appId:e,clientId:t,supportedChains:o,storage:nt(r),sdkVersion:`expo:${ot.version}`,nativeAppIdentifier:at(),crypto:{digest:_expocrypto.digest},baseUrl:n,logLevel:d});var be=_react.createContext.call(void 0, null),ee;function Ta(e){return ee?ee.getAccessToken():e!=null&&e.strict?Promise.reject(new (0, _jssdkcore.PrivyClientError)({code:"attempted_to_read_storage_before_client_initialized",error:"Called `getAccessToken` before client initialized"})):(console.warn("Called `getAccessToken` before client initialized"),Promise.resolve(null))}var Fa=e=>{mr();let[t,r]=_react.useState.call(void 0, _reactnative.AppState.currentState==="active");_react.useEffect.call(void 0, ()=>{let M=_reactnative.AppState.addEventListener("change",St=>{r(St==="active")});return()=>{M.remove()}},[]),_react.useEffect.call(void 0, ()=>Ie(e.config),[e.config]);let[o,n]=_react.useState.call(void 0, !1),[d,i]=_react.useState.call(void 0, null),[c,s]=_react.useState.call(void 0, !1),[a,l]=_react.useState.call(void 0, {status:"disconnected",account:null}),[v,f]=_react.useState.call(void 0, {status:"disconnected"}),[g,w]=_react.useState.call(void 0, {status:"initial"}),[h,u]=_react.useState.call(void 0, {status:"initial"}),[b,y]=_react.useState.call(void 0, {status:"initial"}),[m,_]=_react.useState.call(void 0, {status:"initial"}),[S,E]=_react.useState.call(void 0, {status:"initial"}),[L,I]=_react.useState.call(void 0, {status:"initial"}),[B,V]=_react.useState.call(void 0, {status:"initial"}),q=_react.useRef.call(void 0, {}),T=_react.useRef.call(void 0, {}),F=_react.useRef.call(void 0, {}),P=_react.useRef.call(void 0, {}),G=_react.useRef.call(void 0, {}),re=_react.useRef.call(void 0, {}),le=_react.useCallback.call(void 0, M=>{if(M){_e(M),i(null);return}_e(null),w({status:"initial"}),u({status:"initial"}),l({status:"disconnected",account:null})},[]),k=_react.useMemo.call(void 0, ()=>{let M=e.storage||he;return e.client?ee=e.client:ee=it({appId:e.appId,clientId:e.clientId,supportedChains:e.supportedChains,storage:M,baseUrl:e.baseUrl,logLevel:e.logLevel}),ee.setCallbacks({setUser:le,setIsReady:s}),ee},[e.client,e.storage,e.appId,e.clientId,e.baseUrl,e.supportedChains,e.logLevel,le]),mt=_react.useCallback.call(void 0, ()=>(le(null),k.auth.logout()),[le,k]),vt=_react.useCallback.call(void 0, ()=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){try{return yield k.getAccessToken()}catch(M){return console.debug(M),null}}),[k]),ft=_react.useCallback.call(void 0, ()=>k.getIdentityToken(),[k]);rt({client:k,isUserInitialized:o,setIsUserInitialized:n,setError:i});let ht=$e({client:k,appId:e.appId,createWalletCallbacks:T,recoverWalletCallbacks:F,setWalletRecoveryCallbacks:P,setRecoveryFlowState:y,wallet:a,setWallet:l}),wt=qe({client:k,createSolanaWalletCallbacks:G,recoverSolanaWalletCallbacks:re,setSolanaRecoveryFlowState:_,solanaWallet:v,setSolanaWallet:f});tt({client:k,createWalletCallbacks:T,recoverWalletCallbacks:F,setWalletRecoveryCallbacks:P,recoveryFlowState:b,oAuthState:h,setRecoveryFlowState:y,setWallet:l,appStateVisible:t});let{customAuthStateIsSettled:bt}=et({client:k,isReady:o}),gt=D();return _react2.default.createElement(_react2.default.Fragment,null,_react2.default.createElement(be.Provider,{value:{client:k,isReady:gt&&o&&bt,error:d,logout:mt,getAccessToken:vt,getIdentityToken:ft,wallet:_chunkOWCFWPALjs.a.call(void 0, _chunkOWCFWPALjs.a.call(void 0, {},a),ht),solanaWallet:_chunkOWCFWPALjs.a.call(void 0, _chunkOWCFWPALjs.a.call(void 0, {},v),wt),oAuthState:h,oAuthCallbacks:q,recoveryFlowState:b,setRecoveryFlowState:y,solanaRecoveryFlowState:m,setSolanaRecoveryFlowState:_,createWalletCallbacks:T,recoverWalletCallbacks:F,setWalletRecoveryCallbacks:P,createSolanaWalletCallbacks:G,recoverSolanaWalletCallbacks:re,setOAuthState:u,siweState:S,setSiweState:E,otpState:g,setOtpState:w,passkeyState:L,setPasskeyState:I,farcasterState:B,setFarcasterState:V}},e.children),_react2.default.createElement(_reactnative.View,{style:{width:0,height:0,overflow:"hidden"}},_react2.default.createElement(Me,{client:k,isClientReady:c})))},mr=()=>{if(_react.useContext.call(void 0, be))throw new (0, _jssdkcore.PrivyClientError)({code:"configuration_error",error:"Found multiple instances of PrivyProvider, ensure there is only one mounted in your application tree."})};var _expoappleauthentication = require('expo-apple-authentication'); var de = _interopRequireWildcard(_expoappleauthentication);function lt(e){return _chunkOWCFWPALjs.d.call(void 0, this,null,function*(){try{return yield de.signInAsync({state:e.state,requestedScopes:[de.AppleAuthenticationScope.EMAIL,de.AppleAuthenticationScope.FULL_NAME]})}catch(t){throw t instanceof Error&&"code"in t&&t.code==="ERR_REQUEST_CANCELED"?new (0, _jssdkcore.PrivyClientError)({error:"Apple login was cancelled",code:e.isLogin?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):t}})}var Pe=(e={})=>{let{oAuthState:t,setOAuthState:r,oAuthCallbacks:o,client:n}=_react.useContext.call(void 0, be),d=Fe(),i=e.action?e.action==="login":!d;_react.useEffect.call(void 0, ()=>{o.current={onSuccess:e.onSuccess,onError:e.onError}},[e.onSuccess,e.onError]);let c=_react.useCallback.call(void 0, a=>{var v;let l=K(a);return r({status:"error",error:l}),(v=e==null?void 0:e.onError)==null||v.call(e,l),l},[e==null?void 0:e.onError]);return{start:_react.useCallback.call(void 0, function(w){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({provider:l,redirectUri:v,isLegacyAppleIosBehaviorEnabled:f=!1,disableSignup:g}){var u,b,y;r({status:"loading"});let h=Te();try{if(h&&e.action==="login")throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_login_with_oauth_while_already_logged_in",error:"Already logged in, if trying to link an OAuth account use `useLinkWithOAuth`"});if(!h&&e.action==="link")throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_link_oauth_before_logged_in",error:"Must be logged in to link an OAuth account, use `useLoginWithOAuth`"});let m=te.createURL(v||"/"),{url:_}=yield n.auth.oauth.generateURL(l,m),S,E;if(_reactnative.Platform.OS==="ios"&&l==="apple"&&!f){let F=(u=new URL(_).searchParams.get("state"))!=null?u:"",P=yield lt({state:F,isLogin:i});if(!P.authorizationCode||!P.state)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:i?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(i){let G=oe(),re=yield n.auth.oauth.loginWithCode(P.authorizationCode,P.state,l,"raw",g?"no-signup":"login-or-sign-up",{embedded:G==null?void 0:G.embedded});S=re.user,E=re.is_new_user}else({user:S}=yield n.auth.oauth.linkWithCode(P.authorizationCode,P.state,l,"raw"));return(b=e==null?void 0:e.onSuccess)==null||b.call(e,S,E),r({status:"done"}),S!=null?S:void 0}let L=_reactnative.Platform.OS==="android"?_.replace("x.com","twitter.com"):_,I=yield ce.openAuthSessionAsync(L,m);if(I.type!=="success")throw[ce.WebBrowserResultType.CANCEL,ce.WebBrowserResultType.DISMISS].includes(I.type)?new (0, _jssdkcore.PrivyClientError)({error:"OAuth was cancelled",code:i?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):new (0, _jssdkcore.PrivyClientError)({error:"OAuth session failed",code:i?"failed_to_complete_login_with_oauth":"failed_to_complete_link_with_oauth"});let{queryParams:B}=te.parse(I.url),{privy_oauth_state:V,privy_oauth_code:q}=B;if(!q||!V)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:i?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(i){let T=oe(),F=yield n.auth.oauth.loginWithCode(q,V,l,void 0,g?"no-signup":"login-or-sign-up",{embedded:T==null?void 0:T.embedded});S=F.user,E=F.is_new_user}else({user:S}=yield n.auth.oauth.linkWithCode(q,V,l));return(y=e==null?void 0:e.onSuccess)==null||y.call(e,S,E),yield te.openURL(I.url.split("?")[0]),r({status:"done"}),S!=null?S:void 0}catch(m){throw c(m),m}})},[n,r,c]),state:t}};function Qa(e){let{state:t,start:r}=Pe(_chunkOWCFWPALjs.b.call(void 0, _chunkOWCFWPALjs.a.call(void 0, {},e),{action:"login"}));return{state:t,login:r}}function $a(e){let{state:t,start:r}=Pe(_chunkOWCFWPALjs.b.call(void 0, _chunkOWCFWPALjs.a.call(void 0, {},e),{action:"link"}));return{state:t,link:r}}function Za(e){return Pe(e)}var at=()=>{if(typeof _expoapplication.applicationId!="string")throw new (0, _jssdkcore.PrivyClientError)({error:"Cannot determine native application ID. Please make sure `expo-application` is installed as a dependency and that `ios.bundleId` or `android.package` is set.",code:"invalid_native_app_id"});return _expoapplication.applicationId};function nt(e){return{get(t){return e.get(t.replaceAll(":","-"))},put(t,r){return e.put(t.replaceAll(":","-"),r)},del(t){return e.del(t.replaceAll(":","-"))},getKeys:()=>_chunkOWCFWPALjs.d.call(void 0, this,null,function*(){return[]})}}var he={get(e){return x.getItemAsync(e,{keychainAccessible:x.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},put(e,t){return x.setItemAsync(e,t,{keychainAccessible:x.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},del(e){return x.deleteItemAsync(e,{keychainAccessible:x.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},getKeys:()=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){return[]})};var br=e=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){var o;let r=yield(yield Promise.resolve().then(() => _interopRequireWildcard(require("react-native-passkeys")))).create({rp:e.rp,user:e.user,challenge:e.challenge,pubKeyCredParams:e.pubKeyCredParams,excludeCredentials:e.excludeCredentials,authenticatorSelection:e.authenticatorSelection,timeout:12e4});if(!r)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_create_passkey",error:"Could not create passkey"});return _chunkOWCFWPALjs.b.call(void 0, _chunkOWCFWPALjs.a.call(void 0, {},r),{type:(o=r.type)!=null?o:"public-key",clientExtensionResults:{}})});var Sr=e=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){var o;let r=yield(yield Promise.resolve().then(() => _interopRequireWildcard(require("react-native-passkeys")))).get({rpId:e.rpId,challenge:e.challenge,allowCredentials:e.allowCredentials,timeout:12e4});if(!r)throw new (0, _jssdkcore.PrivyClientError)({code:"no_passkey_found_for_challenge",error:"Could not find a matching passkey to login with"});return _chunkOWCFWPALjs.b.call(void 0, _chunkOWCFWPALjs.a.call(void 0, {},r),{type:(o=r.type)!=null?o:"public-key",clientExtensionResults:{}})});function mn(e){var t;return{id:e.id,client_extension_results:{app_id:e.clientExtensionResults.appid,cred_props:e.clientExtensionResults.credProps,hmac_create_secret:e.clientExtensionResults.hmacCreateSecret},raw_id:e.rawId,type:e.type,authenticator_attachment:(t=e.authenticatorAttachment)!=null?t:"platform",response:{authenticator_data:e.response.authenticatorData,client_data_json:e.response.clientDataJSON,signature:e.response.signature,user_handle:e.response.userHandle}}}function vn(e){var t,r,o,n;return{challenge:e.challenge,rpId:e.rp_id,extensions:{appid:(t=e.extensions)==null?void 0:t.app_id,credProps:(r=e.extensions)==null?void 0:r.cred_props,hmacCreateSecret:(o=e.extensions)==null?void 0:o.hmac_create_secret},timeout:e.timeout,allowCredentials:(n=e.allow_credentials)==null?void 0:n.map(({id:d,type:i,transports:c})=>({id:d,type:i,transports:c})),userVerification:e.user_verification}}function fn(e){var t,r,o,n,d,i,c,s;return{rp:e.rp,user:{id:e.user.id,name:e.user.name,displayName:e.user.display_name},challenge:e.challenge,pubKeyCredParams:e.pub_key_cred_params,extensions:{hmacCreateSecret:(t=e.extensions)==null?void 0:t.hmac_create_secret,credProps:(o=(r=e.extensions)==null?void 0:r.cred_props)==null?void 0:o.rk,appid:(n=e.extensions)==null?void 0:n.app_id},attestation:e.attestation,excludeCredentials:e.exclude_credentials,authenticatorSelection:{authenticatorAttachment:(d=e.authenticator_selection)==null?void 0:d.authenticator_attachment,residentKey:(i=e.authenticator_selection)==null?void 0:i.resident_key,userVerification:(c=e.authenticator_selection)==null?void 0:c.user_verification,requireResidentKey:(s=e.authenticator_selection)==null?void 0:s.require_resident_key}}}exports.a = oe; exports.b = Te; exports.c = Ur; exports.d = j; exports.e = Fe; exports.f = xe; exports.g = Ar; exports.h = ke; exports.i = He; exports.j = K; exports.k = ho; exports.l = _o; exports.m = Uo; exports.n = Qa; exports.o = $a; exports.p = Za; exports.q = he; exports.r = it; exports.s = be; exports.t = Ta; exports.u = Fa; exports.v = br; exports.w = Sr; exports.x = mn; exports.y = vn; exports.z = fn;