@privy-io/expo 0.29.0 → 0.29.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- "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 gt=Object.defineProperty,Et=Object.defineProperties;var _t=Object.getOwnPropertyDescriptors;var oe=Object.getOwnPropertySymbols;var Oe=Object.prototype.hasOwnProperty,xe=Object.prototype.propertyIsEnumerable;var Pe=(e,t,r)=>t in e?gt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,_= exports.a =(e,t)=>{for(var r in t||(t={}))Oe.call(t,r)&&Pe(e,r,t[r]);if(oe)for(var r of oe(t))xe.call(t,r)&&Pe(e,r,t[r]);return e},O= exports.b =(e,t)=>Et(e,_t(t));var Er=(e,t)=>{var r={};for(var o in e)Oe.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(e!=null&&oe)for(var o of oe(e))t.indexOf(o)<0&&xe.call(e,o)&&(r[o]=e[o]);return r};var y=(e,t,r)=>new Promise((o,l)=>{var a=i=>{try{s(r.next(i))}catch(d){l(d)}},c=i=>{try{s(r.throw(i))}catch(d){l(d)}},s=i=>i.done?o(i.value):Promise.resolve(i.value).then(a,c);s((r=r.apply(e,t)).next())});var _expoappleauthentication = require('expo-apple-authentication'); var ut = _interopRequireWildcard(_expoappleauthentication);var _expoapplication = require('expo-application');var _expolinking = require('expo-linking'); var B = _interopRequireWildcard(_expolinking); var se = _interopRequireWildcard(_expolinking); var H = _interopRequireWildcard(_expolinking); var z = _interopRequireWildcard(_expolinking);var _exposecurestore = require('expo-secure-store'); var U = _interopRequireWildcard(_exposecurestore);var _expowebbrowser = require('expo-web-browser'); var re = _interopRequireWildcard(_expowebbrowser); var He = _interopRequireWildcard(_expowebbrowser);var _react = require('react'); var _react2 = _interopRequireDefault(_react);var _reactnative = require('react-native');var _jssdkcore = require('@privy-io/js-sdk-core'); var _jssdkcore2 = _interopRequireDefault(_jssdkcore);var _expocrypto = require('expo-crypto');var Ue={name:"@privy-io/expo",version:"0.29.0",description:"Expo client for the Privy Auth API",keywords:["authentication","authorization","identity","privacy","privy","user data","react-native","expo","web3"],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"}},main:"./dist/esm/index.js",source:"./src/index.ts",types:"./dist/index.d.ts",files:["dist/**/*","LICENSE","README.md"],scripts:{build:"npx tsup --clean --minify","check-types":"npx tsc --noEmit",clean:"rm -rf dist .turbo",dev:"npx tsup --watch",format:'eslint "src/**/*.{ts,tsx,js,jsx}" --fix',"generate-types":"npx tsup --dts-only",lint:'npx eslint "src/**/*.{ts,tsx,js,jsx}"',test:'jest --testMatch "**/test/**/*.test.ts"',"test:ci":"npm run test"},browserslist:["defaults","node >= 18","not op_mini all"],dependencies:{"@privy-io/js-sdk-core":"0.30.0","react-fast-compare":"^3.2.2",zustand:"^4.4.1"},devDependencies:{"@privy-io/eslint-config-custom":"*","@privy-io/tsconfig":"*","@simplewebauthn/types":"9.0.1","@svgr/core":"^8.1.0","@svgr/plugin-jsx":"^8.1.0","@svgr/plugin-svgo":"^8.1.0","@tsconfig/node16-strictest-esm":"^1.0.3","eslint-plugin-react-hooks":"^5.0.0-canary-7118f5dd7-20230705",tsup:"^6.2.3",typescript:"~5.5.3"},peerDependencies:{"@expo-google-fonts/inter":"*","@privy-io/expo-native-extensions":"0.0.3","expo-apple-authentication":"*","expo-application":"*","expo-constants":"*","expo-crypto":"*","expo-font":"*","expo-linking":"*","expo-secure-store":"*","expo-web-browser":"*",react:"*","react-native":"*","react-native-passkeys":"^0.3.0","react-native-safe-area-context":"*","react-native-svg":"*","react-native-webview":"*"},peerDependenciesMeta:{"@expo-google-fonts/inter":{optional:!0},"expo-font":{optional:!0}},publishConfig:{access:"public"}};var _reactnativewebview = require('react-native-webview'); var _reactnativewebview2 = _interopRequireDefault(_reactnativewebview);var Le=({client:e,isClientReady:t,setWebViewState:r,webViewState:o,logLevel:l})=>{let a=_react.useRef.call(void 0, null);_react.useEffect.call(void 0, ()=>{a.current&&o==="loaded"&&e.setMessagePoster(a.current)},[e,a.current,o==="loaded"]),_react.useEffect.call(void 0, ()=>_reactnative.AppState.addEventListener("change",i=>y(void 0,null,function*(){a.current&&i==="active"&&((yield e.embeddedWallet.ping(500))||(a.current.reload(),r("reloading")))})).remove,[]);let c=_react.useCallback.call(void 0, s=>y(void 0,null,function*(){let{data:i}=s.nativeEvent;e.embeddedWallet.onMessage(JSON.parse(i))}),[e]);return t?_react2.default.createElement(_reactnativewebview2.default,{style:{flex:1},ref:a,cacheEnabled:!1,cacheMode:"LOAD_NO_CACHE",source:{uri:e.embeddedWallet.getURL()},webviewDebuggingEnabled:l==="DEBUG",onLoad:()=>r("loaded"),onError:console.error,onMessage:c}):null};function Te(a){return y(this,arguments,function*({client:e,setSolanaWallet:t,createSolanaWalletCallbacks:r,setSolanaRecoveryFlowState:o,opts:l}){var c,s,i;t({status:"creating"});try{let{user:d}=yield e.user.get(),n=_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, d),u=n[0];if(l!=null&&l.recoveryMethod&&l.recoveryMethod!=="privy")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Unsupported recovery method for solana wallet."});if(!(l!=null&&l.createAdditional)&&u)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 v,f;if(u){let w=Math.max(...n.map(g=>g.wallet_index),0)+1,m=yield e.embeddedWallet.createAdditionalSolana({primaryPublicKey:u.address,hdWalletIndex:w});v=m.provider,f=m.user}else{let w=(c=_jssdkcore.getUserEmbeddedWallet.call(void 0, d))!=null?c:void 0;if(w&&w.recovery_method!=="privy")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Existing wallet uses unsupported recovery method for solana wallet."});let m=yield e.embeddedWallet.createSolana({ethereumAccount:w});v=m.provider,f=m.user}let p=_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, f)[0];if(!p)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Unknown error creating solana wallet"});return(i=(s=r.current)==null?void 0:s.onSuccess)==null||i.call(s,v),t({status:"connected",publicKey:p.public_key}),o({status:"initial"}),v}catch(d){let n=d instanceof Error?d.message:"Error creating embedded wallet";throw t({status:"error",error:n}),o({status:"initial"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:n})}})}function ae(d){return y(this,arguments,function*({client:e,account:t,setWallet:r,recoverWalletCallbacks:o,recoveryMethod:l,setRecoveryFlowState:a,password:c,recoveryToken:s,recoverySecretOverride:i}){var n,u,v,f;if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});switch(l){case"user-passcode":if(!c)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(!i)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Record name is required for icloud recovery method"});break}r({status:"connecting",account:t});try{let p=yield e.embeddedWallet.getProvider(t,c,s,i);return r({status:"connected",provider:p,account:t}),a({status:"initial"}),(u=(n=o.current)==null?void 0:n.onSuccess)==null||u.call(n,p),p}catch(p){r({status:"needs-recovery",account:t}),a({status:"initial"});let w=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:p instanceof Error?p.message:"Error recovering embedded wallet"});throw(f=(v=o.current)==null?void 0:v.onError)==null||f.call(v,w),w}})}function Fe(a){return y(this,arguments,function*({client:e,primaryAcount:t,setSolanaWallet:r,recoverSolanaWalletCallbacks:o,setSolanaRecoveryFlowState:l}){var c,s,i,d;if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});r({status:"connecting"});try{let n=yield e.embeddedWallet.getSolanaProvider(t);return r({status:"connected",publicKey:n._publicKey}),l({status:"initial"}),(s=(c=o.current)==null?void 0:c.onSuccess)==null||s.call(c,n),n}catch(n){r({status:"needs-recovery"}),l({status:"initial"});let u=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:n instanceof Error?n.message:"Error recovering embedded wallet"});throw(d=(i=o.current)==null?void 0:i.onError)==null||d.call(i,u),u}})}var Ne=({client:e,user:t,solanaWallet:r,setSolanaWallet:o,setSolanaRecoveryFlowState:l,webViewState:a,createSolanaWalletCallbacks:c,recoverSolanaWalletCallbacks:s})=>{let i=_react.useMemo.call(void 0, ()=>_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, t),[t]),d=_react.useMemo.call(void 0, ()=>i[0],[i]),n=_react.useMemo.call(void 0, ()=>i.map(p=>({address:p.address,publicKey:p.address,walletIndex:p.wallet_index,getProvider:()=>e.embeddedWallet.getSolanaProvider(p,d==null?void 0:d.public_key)})),[i,d,e]),u=_react.useCallback.call(void 0, p=>y(void 0,null,function*(){return yield Te({client:e,setSolanaWallet:o,createSolanaWalletCallbacks:c,setSolanaRecoveryFlowState:l,opts:p})}),[e,c]),v=_react.useCallback.call(void 0, ()=>y(void 0,null,function*(){if(!d)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});return Fe({client:e,primaryAcount:d,setSolanaWallet:o,recoverSolanaWalletCallbacks:s,setSolanaRecoveryFlowState:l})}),[e,d]),f=_react.useCallback.call(void 0, ()=>y(void 0,null,function*(){if(!d)throw o({status:"not-created"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});o(p=>p.status==="connected"?{status:"reconnecting"}:{status:"connecting"});try{let p=yield e.embeddedWallet.getSolanaProvider(d);return o({status:"connected",publicKey:d.public_key}),p}catch(p){throw _jssdkcore.errorIndicatesRecoveryIsNeeded.call(void 0, p)?(o({status:"needs-recovery"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):p instanceof Error?(o({status:"error",error:p.message}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:p.message})):(o({status:"error",error:"Error loading embedded wallet"}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,d]);return _react.useEffect.call(void 0, ()=>{if(!t&&r.status!=="disconnected")return o({status:"disconnected"});a==="loaded"&&f().catch(()=>{})},[a,t,d]),_react.useEffect.call(void 0, ()=>{r.status==="error"&&r.error.includes("User must be logged in")&&f()},[r.status]),{create:u,recover:v,getProvider:f,wallets:n}};function ie(n){return y(this,arguments,function*({client:e,setWallet:t,createWalletCallbacks:r,recoveryMethod:o,setRecoveryFlowState:l,password:a,recoveryToken:c,recoverySecretOverride:s,iCloudRecordNameOverride:i,solanaAccount:d}){var v,f;switch(o){case"user-passcode":if(!a)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode 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||!i)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 u=o==="icloud"?"icloud-native":o;try{let{provider:p,user:w}=yield e.embeddedWallet.create(a,u,c,s,i,d),m=_jssdkcore.getUserEmbeddedWallet.call(void 0, w);return(f=(v=r.current)==null?void 0:v.onSuccess)==null||f.call(v,p),t({status:"connected",provider:p,account:m}),l({status:"initial"}),p}catch(p){let w=p instanceof Error?p.message:"Error creating embedded wallet";throw t({status:"error",error:w,account:null}),l({status:"initial"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:w})}})}function Ve(){return y(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 fe(o){return y(this,arguments,function*({user:e,appId:t,client:r}){var s;if(_reactnative.Platform.OS==="android")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let l=yield Ve(),a=yield r.recovery.icloudAuth.getICloudConfiguration("expo-ios");if(!(a==null?void 0:a.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:i,iCloudRecordName:d}=yield l.writeRecoverySecretToICloud({containerId:a.container_identifier,appId:t,userId:e.id});return{recoverySecret:i,iCloudRecordName:d}}catch(i){if(i instanceof Error){let d=(s=i.message.split("Caused by: ")[1])!=null?s:"Error writing to iCloud";throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:d})}throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}function Ke(r){return y(this,arguments,function*({walletAddress:e,client:t}){var i;if(_reactnative.Platform.OS==="android")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let o=yield Ve(),a=(yield t.recovery.getRecoveryKeyMaterial(e)).icloud_record_name;if(!a)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:d}=yield o.readRecoverySecretFromICloud({containerId:s,recordName:a});return{recoverySecret:d}}catch(d){if(d instanceof Error){let n=(i=d.message.split("Caused by: ")[1])!=null?i:"Error writing to iCloud";throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:n})}throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}var _reactfastcompare = require('react-fast-compare'); var _reactfastcompare2 = _interopRequireDefault(_reactfastcompare);var qe=e=>t=>e(r=>_reactfastcompare2.default.call(void 0, r,t)?r:t);function x(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 ro=e=>new Promise(t=>setTimeout(t,e));function so(){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 de(l){return y(this,arguments,function*({provider:e,redirectUri:t,client:r,onError:o}){try{let a;switch(e){case"google-drive":{let{url:d}=yield r.recovery.auth.generateURL(se.createURL(t||"/"));a=d;break}default:throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid provider",code:"embedded_wallet_recovery_error"})}let c=yield He.openAuthSessionAsync(a);if(_reactnative.Platform.OS==="android")return;if(c.type!=="success")throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth session failed",code:"embedded_wallet_recovery_error"});let{queryParams:s}=se.parse(c.url),i;switch(e){case"google-drive":{let{privy_oauth_state:d,privy_oauth_code:n}=s;if(!n||!d)throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth invalid credentials",code:"embedded_wallet_recovery_error"});i=yield we({oAuthCode:n,oAuthState:d,client:r});break}default:throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth invalid provider",code:"embedded_wallet_recovery_error"})}return i}catch(a){throw o==null||o(x(a)),a}})}function we(o){return y(this,arguments,function*({oAuthCode:e,oAuthState:t,client:r}){let{access_token:l}=yield r.recovery.auth.authorize(e,t);if(!l)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:"login_with_oauth_returned_with_invalid_credentials"});return l})}function le(a){return y(this,arguments,function*({client:e,recoveryInput:t,setWalletRecoveryCallbacks:r,setRecoveryFlowState:o,setWallet:l}){var c,s,i,d;try{let{provider:n,user:u}=yield e.embeddedWallet.setRecovery(t),v=_jssdkcore.getUserEmbeddedWallet.call(void 0, u);return l({status:"connected",provider:n,account:v}),(s=(c=r.current)==null?void 0:c.onSuccess)==null||s.call(c,n),o({status:"initial"}),n}catch(n){let u=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_set_recovery_error",error:n instanceof Error?n.message:"Error setting password on embedded wallet"});throw(d=(i=r.current)==null?void 0:i.onError)==null||d.call(i,u),o({status:"initial"}),u}})}function Je(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}:{recoveryMethod:e.recoveryMethod}}var Ge=({client:e,user:t,appId:r,wallet:o,setWallet:l,setRecoveryFlowState:a,webViewState:c,createWalletCallbacks:s,recoverWalletCallbacks:i,setWalletRecoveryCallbacks:d})=>{let n=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedWallet.call(void 0, t),[t]),u=_react.useCallback.call(void 0, m=>y(void 0,null,function*(){var k,q;if(n)throw new (0, _jssdkcore.PrivyClientError)({error:"This user already has an embedded wallet",code:"embedded_wallet_already_exists"});let{user:g}=yield e.user.get(),{password:h,recoveryMethod:b}=Je(m),S,E,P;if(b==="google-drive"&&(S=yield de({provider:b,client:e,onError:(k=s.current)==null?void 0:k.onError}),a({status:"creating-wallet"}),!S))return null;if(b==="icloud"){if(!g)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before creating a wallet with iCloud."});let{recoverySecret:T,iCloudRecordName:N}=yield fe({user:g,appId:r,client:e});E=T,P=N}return yield ie({client:e,setWallet:l,createWalletCallbacks:s,recoveryMethod:b,setRecoveryFlowState:a,password:h,recoverySecretOverride:E,iCloudRecordNameOverride:P,solanaAccount:(q=_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, g))!=null?q:void 0})}),[e,n,t]),v=_react.useCallback.call(void 0, m=>y(void 0,null,function*(){var b;if(o.status!=="connected")throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"});if(!n)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});if(_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, t))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."});_jssdkcore.throwIfInvalidRecoveryUpgradePath.call(void 0, {currentRecoveryMethod:n.recovery_method,upgradeToRecoveryMethod:m.recoveryMethod});let g,h;switch(m.recoveryMethod){case"privy":h=O(_({},m),{wallet:n});break;case"user-passcode":h=O(_({},m),{wallet:n,password:m.password});break;case"google-drive":if(g=yield de({provider:m.recoveryMethod,client:e,onError:(b=d.current)==null?void 0:b.onError}),a({status:"upgrading-recovery"}),!g)return null;h={recoveryMethod:"google-drive",wallet:n,recoveryAccessToken:g};break;case"icloud":if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before backing up to iCloud."});let{recoverySecret:S,iCloudRecordName:E}=yield fe({user:t,appId:r,client:e});h={recoveryMethod:"icloud-native",recoverySecretOverride:S,iCloudRecordNameOverride:E,wallet:n};break;default:throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}return le({client:e,recoveryInput:h,setWalletRecoveryCallbacks:d,setRecoveryFlowState:a,setWallet:l})}),[e,n,o.status,t]),f=_react.useCallback.call(void 0, m=>y(void 0,null,function*(){return v({recoveryMethod:"user-passcode",password:m})}),[e,n,o.status]),p=_react.useCallback.call(void 0, m=>y(void 0,null,function*(){var E;if(!n)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{password:g,recoveryMethod:h}=Je(m),b,S;if(h==="google-drive"&&(b=yield de({provider:h,client:e,onError:(E=i.current)==null?void 0:E.onError}),a({status:"recovering"}),!b))return null;if(h==="icloud"){if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before recovering via iCloud."});let{recoverySecret:P}=yield Ke({client:e,walletAddress:n.address});S=P}return ae({client:e,account:n,setWallet:l,recoverWalletCallbacks:i,recoveryMethod:h,setRecoveryFlowState:a,password:g,recoveryToken:b,recoverySecretOverride:S})}),[e,n]),w=_react.useCallback.call(void 0, ()=>y(void 0,null,function*(){if(!n)throw l({status:"not-created",account:null}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});l(m=>m.status==="connected"?{status:"reconnecting",account:n}:{status:"connecting",account:n});try{let m=yield e.embeddedWallet.getProvider(n);return l({status:"connected",provider:m,account:n}),m}catch(m){throw _jssdkcore.errorIndicatesRecoveryIsNeeded.call(void 0, m)?(l({status:"needs-recovery",account:n}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):m instanceof Error?(l({status:"error",error:m.message,account:n}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:m.message})):(l({status:"error",error:"Error loading embedded wallet",account:n}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,n]);return _react.useEffect.call(void 0, ()=>{if(!t&&o.status!=="disconnected")return l({status:"disconnected",account:null});c==="loaded"&&w().catch(()=>{})},[c,t,n]),_react.useEffect.call(void 0, ()=>{o.status==="error"&&o.error.includes("User must be logged in")&&w()},[o.status]),{create:u,recover:p,setPassword:f,setRecovery:v,getProvider:w}};var Xe=({client:e,user:t,isReady:r,customAuth:o})=>{let[l,a]=_react.useState.call(void 0, {status:"initial"});return _react.useEffect.call(void 0, ()=>{(()=>y(void 0,null,function*(){if(!(o!=null&&o.enabled)){a({status:"not-enabled"});return}a({status:"loading"});let{getCustomAccessToken:s,isLoading:i}=o;if(!(!r||i))try{let d=yield s();if(!d&&t){yield e.auth.logout(),a({status:"done"});return}if(!d){a({status:"done"});return}if(t){a({status:"done"});return}if(!(yield e.auth.customProvider.syncWithToken(d))){yield e.auth.logout(),a({status:"error",error:new (0, _jssdkcore.PrivyClientError)({error:"Failed to sync with custom auth provider",code:"third_party_auth_error"})});return}a({status:"done"})}catch(d){if(console.log("Error syncing with custom auth provider",d),a({status:"error",error:d}),t)throw yield e.auth.logout(),new (0, _jssdkcore.PrivyClientError)({error:"Third-party auth failed",code:"third_party_auth_error"})}}))()},[e,t,r,o==null?void 0:o.enabled,o==null?void 0:o.getCustomAccessToken,o==null?void 0:o.isLoading]),{customAuthState:l,customAuthStateIsSettled:l.status!=="loading"&&l.status!=="initial"}};var Qe=({client:e,user:t,isUserInitialized:r,oAuthState:o,oAuthCallbacks:l,setOAuthState:a,recoveryFlowState:c,oAuthStateRef:s})=>{let i=H.useURL(),d=_react.useCallback.call(void 0, n=>{var v,f;let u=x(n);a({status:"error",error:u}),(f=(v=l.current).onError)==null||f.call(v,u)},[a]);return _react.useEffect.call(void 0, ()=>{function n(){return y(this,null,function*(){var p,w;if(!i||o.status!=="loading"||c.status!=="initial")return;let{queryParams:u}=H.parse(i),{privy_oauth_state:v,privy_oauth_code:f}=u;if(!f||!v){a({status:"done"});return}try{let m,g;if(t)m=yield e.auth.oauth.linkWithCode(f,v);else{let h=yield e.auth.oauth.loginWithCode(f,v,void 0,void 0,s.current.disableSignup?"no-signup":"login-or-sign-up");m=h.user,g=!!h.is_new_user}return(w=(p=l.current).onSuccess)==null||w.call(p,m,g),s.current={},a({status:"done"}),yield H.openURL(i.split("?")[0])}catch(m){s.current={},d(m)}})}_reactnative.Platform.OS==="android"&&r&&n()},[i,r])};var $e=({client:e,user:t,createWalletCallbacks:r,recoverWalletCallbacks:o,setWalletRecoveryCallbacks:l,recoveryFlowState:a,oAuthState:c,setRecoveryFlowState:s,setWallet:i,appStateVisible:d,webViewLoaded:n})=>{let u=z.useURL(),v=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedWallet.call(void 0, t),[t]),f=_react.useCallback.call(void 0, p=>{var m,g,h,b;let w=x(p);a.status==="creating-wallet"?(g=(m=r.current).onError)==null||g.call(m,x(w)):(b=(h=o.current).onError)==null||b.call(h,x(w)),s({status:"initial"})},[a]);return _react.useEffect.call(void 0, ()=>{function p(){return y(this,null,function*(){var h;if(!u&&a.status!=="initial"&&d&&f(new Error("Recovery OAuth session failed")),!u||a.status==="initial"||c.status!=="initial"||!d||!n)return;let{queryParams:w}=z.parse(u),{privy_oauth_state:m,privy_oauth_code:g}=w;if(!(!g||!m)){yield z.openURL(u.split("?")[0]);try{let b=yield we({oAuthCode:g,oAuthState:m,client:e});if(a.status==="creating-wallet"){let S=(h=_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, t))!=null?h:void 0;yield ie({client:e,setWallet:i,createWalletCallbacks:r,recoveryMethod:"google-drive",setRecoveryFlowState:s,recoveryToken:b,solanaAccount:S})}else if(a.status==="upgrading-recovery"){if(!v)throw new Error("Embedded wallet not found");yield le({client:e,recoveryInput:{recoveryMethod:"google-drive",wallet:v,recoveryAccessToken:b},setWalletRecoveryCallbacks:l,setRecoveryFlowState:s,setWallet:i})}else yield ae({client:e,account:v,setWallet:i,recoverWalletCallbacks:o,recoveryMethod:"google-drive",setRecoveryFlowState:s,recoveryToken:b})}catch(b){f(b)}}})}_reactnative.Platform.OS==="android"&&p()},[u,a.status,d,n])};var Ze=({client:e,isUserInitialized:t,setIsUserInitialized:r,setError:o})=>{_react.useEffect.call(void 0, ()=>{t||(()=>y(void 0,null,function*(){try{yield e.initialize()}catch(a){o(a instanceof Error?a:new Error(String(a)))}try{yield e.user.get()}catch(a){}finally{r(!0)}}))()},[e,t,o,r])};var _zustand = require('zustand');var A=class extends Error{constructor(r,o){super(o);this.code=r,this.error=o}};var he={success:e=>({value:e}),error:e=>({error:e})};var et=e=>{let t=Array.from(new Set(e));return t.length===0?he.error(new A("no_login_methods_available","No login methods available")):he.success(t)},Se=e=>{let t=e.length,r=e.every(o=>o==="sms"||o==="email");return t<=2&&r?e[0]:null},ia= exports.p =(e,t)=>{if(e.length!==2)return null;let[r,o]=e;return t===r?o:r},sa= exports.q ={email:"email",sms:"phone",google:"Google",apple:"Apple",discord:"Discord",twitter:"X",github:"Github",spotify:"Spotify",instagram:"Instagram",tiktok:"Tiktok",linkedin:"LinkedIn"};function tt(e){return new Promise((t,r)=>{e({resolve:t,reject:r})})}function ar(e,t){return{resolve:r=>{t(),e.resolve(r)},reject:r=>{t(),e.reject(r)}}}function rt(e,t,r){let o=setTimeout(()=>{e.reject(t())},r);return ar(e,()=>{clearTimeout(o)})}var sr=1e3*60*5,F=_zustand.create.call(void 0, )((e,t)=>({privyElementsConfig:null,loginPromiseResolvers:null,isUIMounted:!1,activeLoginMethod:null,updateUIMounted:r=>e({isUIMounted:r}),openLoginFlow:(r,o,l,a)=>tt(c=>{var u,v,f;let s=o.getAppConfig();if(!s)return c.reject(new A("privy_not_ready","Privy is not ready"));if(l!==null)return c.reject(new A("user_already_logged_in","User is already logged in"));if(!t().isUIMounted)return c.reject(new A("privy_elements_not_ready","Privy Elements is not mounted"));if(t().loginPromiseResolvers!==null)return c.reject(new A("existing_login_flow_in_progress","A login flow is already in progress"));let i=et(r.loginMethods);if(i.error)return c.reject(i.error);let d={loginMethods:i.value,appearance:{logo:(f=(v=(u=r.appearance)==null?void 0:u.logo)!=null?v:s.logo_url)!=null?f:void 0}},n=rt(c,()=>(e({privyElementsConfig:null,loginPromiseResolvers:null}),new A("login_flow_timeout","The login flow timed out")),sr);a(),e({loginPromiseResolvers:n,privyElementsConfig:d,activeLoginMethod:Se(d.loginMethods)})}),closeLoginFlow:()=>{var r;return(r=t().loginPromiseResolvers)==null||r.reject(new A("login_flow_closed","The login flow was closed")),e({privyElementsConfig:null,loginPromiseResolvers:null})},goBack:()=>{let{activeLoginMethod:r,privyElementsConfig:o,updateActiveLoginMethod:l,closeLoginFlow:a}=t();if(!o){a();return}let c=Se(o.loginMethods)===null;r===null||!c?a():l(null)},updateActiveLoginMethod:r=>e({activeLoginMethod:r})})),va= exports.r =()=>F(e=>e.privyElementsConfig),fa= exports.s =()=>F(e=>e.openLoginFlow),ba= exports.t =()=>F(e=>e.closeLoginFlow),wa= exports.u =()=>F(e=>e.goBack),ha= exports.v =()=>F(e=>[e.activeLoginMethod,e.updateActiveLoginMethod]),dr=e=>{let{loginPromiseResolvers:t}=F.getState();t==null||t.resolve(e)},ot=()=>dr,Sa= exports.w =()=>{let e=F(t=>t.updateUIMounted);_react.useEffect.call(void 0, ()=>(e(!0),()=>{e(!1)}),[e])},ga= exports.x =()=>F(e=>e.privyElementsConfig!==null);var ge=_react.createContext.call(void 0, {}),K;function ja(e){return K?K.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 Na=e=>{var Ae;let[t,r]=_react.useState.call(void 0, _reactnative.AppState.currentState==="active");_react.useEffect.call(void 0, ()=>{let L=_reactnative.AppState.addEventListener("change",St=>{r(St==="active")});return()=>{L.remove()}},[]);let[o,l]=_react.useState.call(void 0, !1),[a,c]=_react.useState.call(void 0, null),[s,i]=_react.useState.call(void 0, "loading"),[d,n]=_react.useState.call(void 0, !1),[u,v]=_react.useState.call(void 0, null),[f,p]=_react.useState.call(void 0, {status:"disconnected",account:null}),[w,m]=_react.useState.call(void 0, {status:"disconnected"}),[g,h]=_react.useState.call(void 0, {status:"initial"}),[b,S]=_react.useState.call(void 0, {status:"initial"}),E=_react.useRef.call(void 0, {}),[P,k]=_react.useState.call(void 0, {status:"initial"}),[q,T]=_react.useState.call(void 0, {status:"initial"}),[N,J]=_react.useState.call(void 0, {status:"initial"}),[G,Y]=_react.useState.call(void 0, {status:"initial"}),[I,pt]=_react.useState.call(void 0, {status:"initial"}),Ce=_react.useRef.call(void 0, {}),ue=_react.useRef.call(void 0, {}),pe=_react.useRef.call(void 0, {}),me=_react.useRef.call(void 0, {}),Re=_react.useRef.call(void 0, {}),ke=_react.useRef.call(void 0, {}),mt=ot(),X=_react.useCallback.call(void 0, L=>{if(L){mt(L),qe(v)(L);return}v(null),h({status:"initial"}),S({status:"initial"}),p({status:"disconnected",account:null})},[]),C=_react.useMemo.call(void 0, ()=>{let L=e.storage||dt;return e.client?(K=e.client,K.setCallbacks({setUser:X,setIsReady:n}),K):(K=new (0, _jssdkcore2.default)({storage:st(L),appId:e.appId,clientId:e.clientId,supportedChains:e.supportedChains,nativeAppIdentifier:it(),baseUrl:e.baseUrl,sdkVersion:`expo:${Ue.version}`,callbacks:{setUser:X,setIsReady:n},logLevel:e.logLevel,crypto:{digest:_expocrypto.digest}}),K)},[e.client,e.storage,e.appId,e.clientId,e.baseUrl,e.supportedChains,e.logLevel,X]),yt=_react.useCallback.call(void 0, ()=>(X(null),C.auth.logout()),[X,C]),vt=_react.useCallback.call(void 0, ()=>y(void 0,null,function*(){try{return yield C.getAccessToken()}catch(L){return console.debug(L),null}}),[C]),ft=_react.useCallback.call(void 0, ()=>C.getIdentityToken(),[C]);Ze({client:C,isUserInitialized:o,setIsUserInitialized:l,setError:c});let bt=Ge({client:C,user:u,appId:e.appId,webViewState:s,createWalletCallbacks:ue,recoverWalletCallbacks:pe,setWalletRecoveryCallbacks:me,setRecoveryFlowState:k,wallet:f,setWallet:p}),wt=Ne({client:C,user:u,webViewState:s,createSolanaWalletCallbacks:Re,recoverSolanaWalletCallbacks:ke,setSolanaRecoveryFlowState:T,solanaWallet:w,setSolanaWallet:m});Qe({client:C,isUserInitialized:o,user:u,oAuthState:b,setOAuthState:S,oAuthCallbacks:Ce,recoveryFlowState:P,oAuthStateRef:E}),$e({client:C,user:u,webViewLoaded:s==="loaded",createWalletCallbacks:ue,recoverWalletCallbacks:pe,setWalletRecoveryCallbacks:me,recoveryFlowState:P,oAuthState:b,setRecoveryFlowState:k,setWallet:p,appStateVisible:t});let{customAuthStateIsSettled:ht}=Xe({client:C,user:u,isReady:o,customAuth:(Ae=e.config)==null?void 0:Ae.customAuth});return _react2.default.createElement(_react2.default.Fragment,null,_react2.default.createElement(ge.Provider,{value:{client:C,user:u,isReady:s!=="loading"&&o&&nt(b)&&ht,error:a,logout:yt,getAccessToken:vt,getIdentityToken:ft,wallet:_(_({},f),bt),solanaWallet:_(_({},w),wt),oAuthState:b,oAuthCallbacks:Ce,recoveryFlowState:P,setRecoveryFlowState:k,solanaRecoveryFlowState:q,setSolanaRecoveryFlowState:T,createWalletCallbacks:ue,recoverWalletCallbacks:pe,setWalletRecoveryCallbacks:me,createSolanaWalletCallbacks:Re,recoverSolanaWalletCallbacks:ke,setOAuthState:S,siweState:N,setSiweState:J,otpState:g,setOtpState:h,passkeyState:G,setPasskeyState:Y,farcasterState:I,setFarcasterState:pt,oAuthStateRef:E}},e.children),_react2.default.createElement(_reactnative.View,{style:{width:0,height:0,overflow:"hidden"}},_react2.default.createElement(Le,{logLevel:e.logLevel,client:C,isClientReady:d,setWebViewState:i,webViewState:s})))};var nt=e=>e.status!=="loading",_e=(e={})=>{let{user:t,oAuthState:r,setOAuthState:o,oAuthCallbacks:l,client:a,oAuthStateRef:c}=_react.useContext.call(void 0, ge),s=e.action?e.action==="login":!t;_react.useEffect.call(void 0, ()=>{l.current={onSuccess:e.onSuccess,onError:e.onError}},[e.onSuccess,e.onError]);let i=_react.useCallback.call(void 0, n=>{var v;let u=x(n);return o({status:"error",error:u}),(v=e==null?void 0:e.onError)==null||v.call(e,u),u},[e==null?void 0:e.onError]);return{start:_react.useCallback.call(void 0, function(w){return y(this,arguments,function*({provider:u,redirectUri:v,isLegacyAppleIosBehaviorEnabled:f=!1,disableSignup:p}){var m,g,h;o({status:"loading"}),c.current={disableSignup:p};try{if(t&&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(!t&&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{url:b}=yield a.auth.oauth.generateURL(u,B.createURL(v||"/")),S,E;if(_reactnative.Platform.OS==="ios"&&u==="apple"&&!f){let G=(m=new URL(b).searchParams.get("state"))!=null?m:"",Y=yield ut.signInAsync({state:G}).catch(I=>{throw I instanceof Error&&"code"in I&&I.code==="ERR_REQUEST_CANCELED"?new (0, _jssdkcore.PrivyClientError)({error:"Apple login was cancelled",code:s?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):I});if(!Y.authorizationCode)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:s?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(s){let I=yield a.auth.oauth.loginWithCode(Y.authorizationCode,G,u,"raw",p?"no-signup":"login-or-sign-up");S=I.user,E=I.is_new_user}else S=yield a.auth.oauth.linkWithCode(Y.authorizationCode,G,u,"raw");return(g=e==null?void 0:e.onSuccess)==null||g.call(e,S,E),o({status:"done"}),S!=null?S:void 0}let P=_reactnative.Platform.OS==="android"?b.replace("x.com","twitter.com"):b,k=yield re.openAuthSessionAsync(P);if(_reactnative.Platform.OS==="android")return;if(k.type!=="success")throw[re.WebBrowserResultType.CANCEL,re.WebBrowserResultType.DISMISS].includes(k.type)?new (0, _jssdkcore.PrivyClientError)({error:"OAuth was cancelled",code:s?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):new (0, _jssdkcore.PrivyClientError)({error:"OAuth session failed",code:s?"failed_to_complete_login_with_oauth":"failed_to_complete_link_with_oauth"});let{queryParams:q}=B.parse(k.url),{privy_oauth_state:T,privy_oauth_code:N}=q;if(!N||!T)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:s?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(s){let J=yield a.auth.oauth.loginWithCode(N,T,u,void 0,p?"no-signup":"login-or-sign-up");S=J.user,E=J.is_new_user}else S=yield a.auth.oauth.linkWithCode(N,T,u);return(h=e==null?void 0:e.onSuccess)==null||h.call(e,S,E),yield B.openURL(k.url.split("?")[0]),o({status:"done"}),S!=null?S:void 0}catch(b){i(b)}})},[t,a,o,i]),state:r}};function Ga(e){let{state:t,start:r}=_e(O(_({},e),{action:"login"}));return{state:t,login:r}}function Ya(e){let{state:t,start:r}=_e(O(_({},e),{action:"link"}));return{state:t,link:r}}function Xa(e){return _e(e)}var it=()=>{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 st(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:()=>y(this,null,function*(){return[]})}}var dt={get(e){return U.getItemAsync(e,{keychainAccessible:U.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},put(e,t){return U.setItemAsync(e,t,{keychainAccessible:U.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},del(e){return U.deleteItemAsync(e,{keychainAccessible:U.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},getKeys:()=>y(void 0,null,function*(){return[]})};function Za(e){return e.status==="connected"}function en(e){return e.status==="reconnecting"}function tn(e){return e.status==="connecting"}function rn(e){return e.status==="disconnected"}function on(e){return e.status==="not-created"}function an(e){return e.status==="creating"}function nn(e){return e.status==="error"}function sn(e){return e.status==="needs-recovery"}var hr=e=>y(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 O(_({},r),{type:(o=r.type)!=null?o:"public-key",clientExtensionResults:{}})});var gr=e=>y(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 O(_({},r),{type:(o=r.type)!=null?o:"public-key",clientExtensionResults:{}})});function En(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 _n(e){var t,r,o,l;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:(l=e.allow_credentials)==null?void 0:l.map(({id:a,type:c,transports:s})=>({id:a,type:c,transports:s})),userVerification:e.user_verification}}exports.a = _; exports.b = O; exports.c = Er; exports.d = y; exports.e = Ue; exports.f = x; exports.g = ro; exports.h = so; exports.i = Ga; exports.j = Ya; exports.k = Xa; exports.l = it; exports.m = st; exports.n = dt; exports.o = A; exports.p = ia; exports.q = sa; exports.r = va; exports.s = fa; exports.t = ba; exports.u = wa; exports.v = ha; exports.w = Sa; exports.x = ga; exports.y = ge; exports.z = ja; exports.A = Na; exports.B = Za; exports.C = en; exports.D = tn; exports.E = rn; exports.F = on; exports.G = an; exports.H = nn; exports.I = sn; exports.J = hr; exports.K = gr; exports.L = En; exports.M = _n;
1
+ "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 gt=Object.defineProperty,Et=Object.defineProperties;var _t=Object.getOwnPropertyDescriptors;var oe=Object.getOwnPropertySymbols;var Oe=Object.prototype.hasOwnProperty,xe=Object.prototype.propertyIsEnumerable;var Pe=(e,t,r)=>t in e?gt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,_= exports.a =(e,t)=>{for(var r in t||(t={}))Oe.call(t,r)&&Pe(e,r,t[r]);if(oe)for(var r of oe(t))xe.call(t,r)&&Pe(e,r,t[r]);return e},O= exports.b =(e,t)=>Et(e,_t(t));var Er=(e,t)=>{var r={};for(var o in e)Oe.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(e!=null&&oe)for(var o of oe(e))t.indexOf(o)<0&&xe.call(e,o)&&(r[o]=e[o]);return r};var y=(e,t,r)=>new Promise((o,l)=>{var a=i=>{try{s(r.next(i))}catch(d){l(d)}},c=i=>{try{s(r.throw(i))}catch(d){l(d)}},s=i=>i.done?o(i.value):Promise.resolve(i.value).then(a,c);s((r=r.apply(e,t)).next())});var _expoappleauthentication = require('expo-apple-authentication'); var ut = _interopRequireWildcard(_expoappleauthentication);var _expoapplication = require('expo-application');var _expolinking = require('expo-linking'); var B = _interopRequireWildcard(_expolinking); var se = _interopRequireWildcard(_expolinking); var H = _interopRequireWildcard(_expolinking); var z = _interopRequireWildcard(_expolinking);var _exposecurestore = require('expo-secure-store'); var U = _interopRequireWildcard(_exposecurestore);var _expowebbrowser = require('expo-web-browser'); var re = _interopRequireWildcard(_expowebbrowser); var He = _interopRequireWildcard(_expowebbrowser);var _react = require('react'); var _react2 = _interopRequireDefault(_react);var _reactnative = require('react-native');var _jssdkcore = require('@privy-io/js-sdk-core'); var _jssdkcore2 = _interopRequireDefault(_jssdkcore);var _expocrypto = require('expo-crypto');var Ue={name:"@privy-io/expo",version:"0.29.2",description:"Expo client for the Privy Auth API",keywords:["authentication","authorization","identity","privacy","privy","user data","react-native","expo","web3"],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"}},main:"./dist/esm/index.js",source:"./src/index.ts",types:"./dist/index.d.ts",files:["dist/**/*","LICENSE","README.md"],scripts:{build:"npx tsup --clean --minify","check-types":"npx tsc --noEmit",clean:"rm -rf dist .turbo",dev:"npx tsup --watch",format:'eslint "src/**/*.{ts,tsx,js,jsx}" --fix',"generate-types":"npx tsup --dts-only",lint:'npx eslint "src/**/*.{ts,tsx,js,jsx}"',test:'jest --testMatch "**/test/**/*.test.ts"',"test:ci":"npm run test"},browserslist:["defaults","node >= 18","not op_mini all"],dependencies:{"@privy-io/js-sdk-core":"0.30.2","react-fast-compare":"^3.2.2",zustand:"^4.4.1"},devDependencies:{"@privy-io/eslint-config-custom":"*","@privy-io/tsconfig":"*","@simplewebauthn/types":"9.0.1","@svgr/core":"^8.1.0","@svgr/plugin-jsx":"^8.1.0","@svgr/plugin-svgo":"^8.1.0","@tsconfig/node16-strictest-esm":"^1.0.3","eslint-plugin-react-hooks":"^5.0.0-canary-7118f5dd7-20230705",tsup:"^6.2.3",typescript:"~5.5.3"},peerDependencies:{"@expo-google-fonts/inter":"*","@privy-io/expo-native-extensions":"0.0.3","expo-apple-authentication":"*","expo-application":"*","expo-constants":"*","expo-crypto":"*","expo-font":"*","expo-linking":"*","expo-secure-store":"*","expo-web-browser":"*",react:"*","react-native":"*","react-native-passkeys":"^0.3.0","react-native-safe-area-context":"*","react-native-svg":"*","react-native-webview":"*"},peerDependenciesMeta:{"@expo-google-fonts/inter":{optional:!0},"expo-font":{optional:!0}},publishConfig:{access:"public"}};var _reactnativewebview = require('react-native-webview'); var _reactnativewebview2 = _interopRequireDefault(_reactnativewebview);var Le=({client:e,isClientReady:t,setWebViewState:r,webViewState:o,logLevel:l})=>{let a=_react.useRef.call(void 0, null);_react.useEffect.call(void 0, ()=>{a.current&&o==="loaded"&&e.setMessagePoster(a.current)},[e,a.current,o==="loaded"]),_react.useEffect.call(void 0, ()=>_reactnative.AppState.addEventListener("change",i=>y(void 0,null,function*(){a.current&&i==="active"&&((yield e.embeddedWallet.ping(500))||(a.current.reload(),r("reloading")))})).remove,[]);let c=_react.useCallback.call(void 0, s=>y(void 0,null,function*(){let{data:i}=s.nativeEvent;e.embeddedWallet.onMessage(JSON.parse(i))}),[e]);return t?_react2.default.createElement(_reactnativewebview2.default,{style:{flex:1},ref:a,cacheEnabled:!1,cacheMode:"LOAD_NO_CACHE",source:{uri:e.embeddedWallet.getURL()},webviewDebuggingEnabled:l==="DEBUG",onLoad:()=>r("loaded"),onError:console.error,onMessage:c}):null};function Te(a){return y(this,arguments,function*({client:e,setSolanaWallet:t,createSolanaWalletCallbacks:r,setSolanaRecoveryFlowState:o,opts:l}){var c,s,i;t({status:"creating"});try{let{user:d}=yield e.user.get(),n=_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, d),u=n[0];if(l!=null&&l.recoveryMethod&&l.recoveryMethod!=="privy")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Unsupported recovery method for solana wallet."});if(!(l!=null&&l.createAdditional)&&u)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 v,f;if(u){let w=Math.max(...n.map(g=>g.wallet_index),0)+1,m=yield e.embeddedWallet.createAdditionalSolana({primaryPublicKey:u.address,hdWalletIndex:w});v=m.provider,f=m.user}else{let w=(c=_jssdkcore.getUserEmbeddedWallet.call(void 0, d))!=null?c:void 0;if(w&&w.recovery_method!=="privy")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Existing wallet uses unsupported recovery method for solana wallet."});let m=yield e.embeddedWallet.createSolana({ethereumAccount:w});v=m.provider,f=m.user}let p=_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, f)[0];if(!p)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Unknown error creating solana wallet"});return(i=(s=r.current)==null?void 0:s.onSuccess)==null||i.call(s,v),t({status:"connected",publicKey:p.public_key}),o({status:"initial"}),v}catch(d){let n=d instanceof Error?d.message:"Error creating embedded wallet";throw t({status:"error",error:n}),o({status:"initial"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:n})}})}function ae(d){return y(this,arguments,function*({client:e,account:t,setWallet:r,recoverWalletCallbacks:o,recoveryMethod:l,setRecoveryFlowState:a,password:c,recoveryToken:s,recoverySecretOverride:i}){var n,u,v,f;if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});switch(l){case"user-passcode":if(!c)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(!i)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Record name is required for icloud recovery method"});break}r({status:"connecting",account:t});try{let p=yield e.embeddedWallet.getProvider(t,c,s,i);return r({status:"connected",provider:p,account:t}),a({status:"initial"}),(u=(n=o.current)==null?void 0:n.onSuccess)==null||u.call(n,p),p}catch(p){r({status:"needs-recovery",account:t}),a({status:"initial"});let w=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:p instanceof Error?p.message:"Error recovering embedded wallet"});throw(f=(v=o.current)==null?void 0:v.onError)==null||f.call(v,w),w}})}function Fe(a){return y(this,arguments,function*({client:e,primaryAcount:t,setSolanaWallet:r,recoverSolanaWalletCallbacks:o,setSolanaRecoveryFlowState:l}){var c,s,i,d;if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});r({status:"connecting"});try{let n=yield e.embeddedWallet.getSolanaProvider(t);return r({status:"connected",publicKey:n._publicKey}),l({status:"initial"}),(s=(c=o.current)==null?void 0:c.onSuccess)==null||s.call(c,n),n}catch(n){r({status:"needs-recovery"}),l({status:"initial"});let u=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:n instanceof Error?n.message:"Error recovering embedded wallet"});throw(d=(i=o.current)==null?void 0:i.onError)==null||d.call(i,u),u}})}var Ne=({client:e,user:t,solanaWallet:r,setSolanaWallet:o,setSolanaRecoveryFlowState:l,webViewState:a,createSolanaWalletCallbacks:c,recoverSolanaWalletCallbacks:s})=>{let i=_react.useMemo.call(void 0, ()=>_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, t),[t]),d=_react.useMemo.call(void 0, ()=>i[0],[i]),n=_react.useMemo.call(void 0, ()=>i.map(p=>({address:p.address,publicKey:p.address,walletIndex:p.wallet_index,getProvider:()=>e.embeddedWallet.getSolanaProvider(p,d==null?void 0:d.public_key)})),[i,d,e]),u=_react.useCallback.call(void 0, p=>y(void 0,null,function*(){return yield Te({client:e,setSolanaWallet:o,createSolanaWalletCallbacks:c,setSolanaRecoveryFlowState:l,opts:p})}),[e,c]),v=_react.useCallback.call(void 0, ()=>y(void 0,null,function*(){if(!d)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});return Fe({client:e,primaryAcount:d,setSolanaWallet:o,recoverSolanaWalletCallbacks:s,setSolanaRecoveryFlowState:l})}),[e,d]),f=_react.useCallback.call(void 0, ()=>y(void 0,null,function*(){if(!d)throw o({status:"not-created"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});o(p=>p.status==="connected"?{status:"reconnecting"}:{status:"connecting"});try{let p=yield e.embeddedWallet.getSolanaProvider(d);return o({status:"connected",publicKey:d.public_key}),p}catch(p){throw _jssdkcore.errorIndicatesRecoveryIsNeeded.call(void 0, p)?(o({status:"needs-recovery"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):p instanceof Error?(o({status:"error",error:p.message}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:p.message})):(o({status:"error",error:"Error loading embedded wallet"}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,d]);return _react.useEffect.call(void 0, ()=>{if(!t&&r.status!=="disconnected")return o({status:"disconnected"});a==="loaded"&&f().catch(()=>{})},[a,t,d]),_react.useEffect.call(void 0, ()=>{r.status==="error"&&r.error.includes("User must be logged in")&&f()},[r.status]),{create:u,recover:v,getProvider:f,wallets:n}};function ie(n){return y(this,arguments,function*({client:e,setWallet:t,createWalletCallbacks:r,recoveryMethod:o,setRecoveryFlowState:l,password:a,recoveryToken:c,recoverySecretOverride:s,iCloudRecordNameOverride:i,solanaAccount:d}){var v,f;switch(o){case"user-passcode":if(!a)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode 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||!i)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 u=o==="icloud"?"icloud-native":o;try{let{provider:p,user:w}=yield e.embeddedWallet.create(a,u,c,s,i,d),m=_jssdkcore.getUserEmbeddedWallet.call(void 0, w);return(f=(v=r.current)==null?void 0:v.onSuccess)==null||f.call(v,p),t({status:"connected",provider:p,account:m}),l({status:"initial"}),p}catch(p){let w=p instanceof Error?p.message:"Error creating embedded wallet";throw t({status:"error",error:w,account:null}),l({status:"initial"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:w})}})}function Ve(){return y(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 fe(o){return y(this,arguments,function*({user:e,appId:t,client:r}){var s;if(_reactnative.Platform.OS==="android")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let l=yield Ve(),a=yield r.recovery.icloudAuth.getICloudConfiguration("expo-ios");if(!(a==null?void 0:a.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:i,iCloudRecordName:d}=yield l.writeRecoverySecretToICloud({containerId:a.container_identifier,appId:t,userId:e.id});return{recoverySecret:i,iCloudRecordName:d}}catch(i){if(i instanceof Error){let d=(s=i.message.split("Caused by: ")[1])!=null?s:"Error writing to iCloud";throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:d})}throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}function Ke(r){return y(this,arguments,function*({walletAddress:e,client:t}){var i;if(_reactnative.Platform.OS==="android")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let o=yield Ve(),a=(yield t.recovery.getRecoveryKeyMaterial(e)).icloud_record_name;if(!a)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:d}=yield o.readRecoverySecretFromICloud({containerId:s,recordName:a});return{recoverySecret:d}}catch(d){if(d instanceof Error){let n=(i=d.message.split("Caused by: ")[1])!=null?i:"Error writing to iCloud";throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:n})}throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}var _reactfastcompare = require('react-fast-compare'); var _reactfastcompare2 = _interopRequireDefault(_reactfastcompare);var qe=e=>t=>e(r=>_reactfastcompare2.default.call(void 0, r,t)?r:t);function x(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 ro=e=>new Promise(t=>setTimeout(t,e));function so(){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 de(l){return y(this,arguments,function*({provider:e,redirectUri:t,client:r,onError:o}){try{let a;switch(e){case"google-drive":{let{url:d}=yield r.recovery.auth.generateURL(se.createURL(t||"/"));a=d;break}default:throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid provider",code:"embedded_wallet_recovery_error"})}let c=yield He.openAuthSessionAsync(a);if(_reactnative.Platform.OS==="android")return;if(c.type!=="success")throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth session failed",code:"embedded_wallet_recovery_error"});let{queryParams:s}=se.parse(c.url),i;switch(e){case"google-drive":{let{privy_oauth_state:d,privy_oauth_code:n}=s;if(!n||!d)throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth invalid credentials",code:"embedded_wallet_recovery_error"});i=yield we({oAuthCode:n,oAuthState:d,client:r});break}default:throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth invalid provider",code:"embedded_wallet_recovery_error"})}return i}catch(a){throw o==null||o(x(a)),a}})}function we(o){return y(this,arguments,function*({oAuthCode:e,oAuthState:t,client:r}){let{access_token:l}=yield r.recovery.auth.authorize(e,t);if(!l)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:"login_with_oauth_returned_with_invalid_credentials"});return l})}function le(a){return y(this,arguments,function*({client:e,recoveryInput:t,setWalletRecoveryCallbacks:r,setRecoveryFlowState:o,setWallet:l}){var c,s,i,d;try{let{provider:n,user:u}=yield e.embeddedWallet.setRecovery(t),v=_jssdkcore.getUserEmbeddedWallet.call(void 0, u);return l({status:"connected",provider:n,account:v}),(s=(c=r.current)==null?void 0:c.onSuccess)==null||s.call(c,n),o({status:"initial"}),n}catch(n){let u=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_set_recovery_error",error:n instanceof Error?n.message:"Error setting password on embedded wallet"});throw(d=(i=r.current)==null?void 0:i.onError)==null||d.call(i,u),o({status:"initial"}),u}})}function Je(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}:{recoveryMethod:e.recoveryMethod}}var Ge=({client:e,user:t,appId:r,wallet:o,setWallet:l,setRecoveryFlowState:a,webViewState:c,createWalletCallbacks:s,recoverWalletCallbacks:i,setWalletRecoveryCallbacks:d})=>{let n=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedWallet.call(void 0, t),[t]),u=_react.useCallback.call(void 0, m=>y(void 0,null,function*(){var k,q;if(n)throw new (0, _jssdkcore.PrivyClientError)({error:"This user already has an embedded wallet",code:"embedded_wallet_already_exists"});let{user:g}=yield e.user.get(),{password:h,recoveryMethod:b}=Je(m),S,E,P;if(b==="google-drive"&&(S=yield de({provider:b,client:e,onError:(k=s.current)==null?void 0:k.onError}),a({status:"creating-wallet"}),!S))return null;if(b==="icloud"){if(!g)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before creating a wallet with iCloud."});let{recoverySecret:T,iCloudRecordName:N}=yield fe({user:g,appId:r,client:e});E=T,P=N}return yield ie({client:e,setWallet:l,createWalletCallbacks:s,recoveryMethod:b,setRecoveryFlowState:a,password:h,recoverySecretOverride:E,iCloudRecordNameOverride:P,solanaAccount:(q=_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, g))!=null?q:void 0})}),[e,n,t]),v=_react.useCallback.call(void 0, m=>y(void 0,null,function*(){var b;if(o.status!=="connected")throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"});if(!n)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});if(_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, t))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."});_jssdkcore.throwIfInvalidRecoveryUpgradePath.call(void 0, {currentRecoveryMethod:n.recovery_method,upgradeToRecoveryMethod:m.recoveryMethod});let g,h;switch(m.recoveryMethod){case"privy":h=O(_({},m),{wallet:n});break;case"user-passcode":h=O(_({},m),{wallet:n,password:m.password});break;case"google-drive":if(g=yield de({provider:m.recoveryMethod,client:e,onError:(b=d.current)==null?void 0:b.onError}),a({status:"upgrading-recovery"}),!g)return null;h={recoveryMethod:"google-drive",wallet:n,recoveryAccessToken:g};break;case"icloud":if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before backing up to iCloud."});let{recoverySecret:S,iCloudRecordName:E}=yield fe({user:t,appId:r,client:e});h={recoveryMethod:"icloud-native",recoverySecretOverride:S,iCloudRecordNameOverride:E,wallet:n};break;default:throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}return le({client:e,recoveryInput:h,setWalletRecoveryCallbacks:d,setRecoveryFlowState:a,setWallet:l})}),[e,n,o.status,t]),f=_react.useCallback.call(void 0, m=>y(void 0,null,function*(){return v({recoveryMethod:"user-passcode",password:m})}),[e,n,o.status]),p=_react.useCallback.call(void 0, m=>y(void 0,null,function*(){var E;if(!n)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{password:g,recoveryMethod:h}=Je(m),b,S;if(h==="google-drive"&&(b=yield de({provider:h,client:e,onError:(E=i.current)==null?void 0:E.onError}),a({status:"recovering"}),!b))return null;if(h==="icloud"){if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before recovering via iCloud."});let{recoverySecret:P}=yield Ke({client:e,walletAddress:n.address});S=P}return ae({client:e,account:n,setWallet:l,recoverWalletCallbacks:i,recoveryMethod:h,setRecoveryFlowState:a,password:g,recoveryToken:b,recoverySecretOverride:S})}),[e,n]),w=_react.useCallback.call(void 0, ()=>y(void 0,null,function*(){if(!n)throw l({status:"not-created",account:null}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});l(m=>m.status==="connected"?{status:"reconnecting",account:n}:{status:"connecting",account:n});try{let m=yield e.embeddedWallet.getProvider(n);return l({status:"connected",provider:m,account:n}),m}catch(m){throw _jssdkcore.errorIndicatesRecoveryIsNeeded.call(void 0, m)?(l({status:"needs-recovery",account:n}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):m instanceof Error?(l({status:"error",error:m.message,account:n}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:m.message})):(l({status:"error",error:"Error loading embedded wallet",account:n}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,n]);return _react.useEffect.call(void 0, ()=>{if(!t&&o.status!=="disconnected")return l({status:"disconnected",account:null});c==="loaded"&&w().catch(()=>{})},[c,t,n]),_react.useEffect.call(void 0, ()=>{o.status==="error"&&o.error.includes("User must be logged in")&&w()},[o.status]),{create:u,recover:p,setPassword:f,setRecovery:v,getProvider:w}};var Xe=({client:e,user:t,isReady:r,customAuth:o})=>{let[l,a]=_react.useState.call(void 0, {status:"initial"});return _react.useEffect.call(void 0, ()=>{(()=>y(void 0,null,function*(){if(!(o!=null&&o.enabled)){a({status:"not-enabled"});return}a({status:"loading"});let{getCustomAccessToken:s,isLoading:i}=o;if(!(!r||i))try{let d=yield s();if(!d&&t){yield e.auth.logout(),a({status:"done"});return}if(!d){a({status:"done"});return}if(t){a({status:"done"});return}if(!(yield e.auth.customProvider.syncWithToken(d))){yield e.auth.logout(),a({status:"error",error:new (0, _jssdkcore.PrivyClientError)({error:"Failed to sync with custom auth provider",code:"third_party_auth_error"})});return}a({status:"done"})}catch(d){if(console.log("Error syncing with custom auth provider",d),a({status:"error",error:d}),t)throw yield e.auth.logout(),new (0, _jssdkcore.PrivyClientError)({error:"Third-party auth failed",code:"third_party_auth_error"})}}))()},[e,t,r,o==null?void 0:o.enabled,o==null?void 0:o.getCustomAccessToken,o==null?void 0:o.isLoading]),{customAuthState:l,customAuthStateIsSettled:l.status!=="loading"&&l.status!=="initial"}};var Qe=({client:e,user:t,isUserInitialized:r,oAuthState:o,oAuthCallbacks:l,setOAuthState:a,recoveryFlowState:c,oAuthStateRef:s})=>{let i=H.useURL(),d=_react.useCallback.call(void 0, n=>{var v,f;let u=x(n);a({status:"error",error:u}),(f=(v=l.current).onError)==null||f.call(v,u)},[a]);return _react.useEffect.call(void 0, ()=>{function n(){return y(this,null,function*(){var p,w;if(!i||o.status!=="loading"||c.status!=="initial")return;let{queryParams:u}=H.parse(i),{privy_oauth_state:v,privy_oauth_code:f}=u;if(!f||!v){a({status:"done"});return}try{let m,g;if(t)m=yield e.auth.oauth.linkWithCode(f,v);else{let h=yield e.auth.oauth.loginWithCode(f,v,void 0,void 0,s.current.disableSignup?"no-signup":"login-or-sign-up");m=h.user,g=!!h.is_new_user}return(w=(p=l.current).onSuccess)==null||w.call(p,m,g),s.current={},a({status:"done"}),yield H.openURL(i.split("?")[0])}catch(m){s.current={},d(m)}})}_reactnative.Platform.OS==="android"&&r&&n()},[i,r])};var $e=({client:e,user:t,createWalletCallbacks:r,recoverWalletCallbacks:o,setWalletRecoveryCallbacks:l,recoveryFlowState:a,oAuthState:c,setRecoveryFlowState:s,setWallet:i,appStateVisible:d,webViewLoaded:n})=>{let u=z.useURL(),v=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedWallet.call(void 0, t),[t]),f=_react.useCallback.call(void 0, p=>{var m,g,h,b;let w=x(p);a.status==="creating-wallet"?(g=(m=r.current).onError)==null||g.call(m,x(w)):(b=(h=o.current).onError)==null||b.call(h,x(w)),s({status:"initial"})},[a]);return _react.useEffect.call(void 0, ()=>{function p(){return y(this,null,function*(){var h;if(!u&&a.status!=="initial"&&d&&f(new Error("Recovery OAuth session failed")),!u||a.status==="initial"||c.status!=="initial"||!d||!n)return;let{queryParams:w}=z.parse(u),{privy_oauth_state:m,privy_oauth_code:g}=w;if(!(!g||!m)){yield z.openURL(u.split("?")[0]);try{let b=yield we({oAuthCode:g,oAuthState:m,client:e});if(a.status==="creating-wallet"){let S=(h=_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, t))!=null?h:void 0;yield ie({client:e,setWallet:i,createWalletCallbacks:r,recoveryMethod:"google-drive",setRecoveryFlowState:s,recoveryToken:b,solanaAccount:S})}else if(a.status==="upgrading-recovery"){if(!v)throw new Error("Embedded wallet not found");yield le({client:e,recoveryInput:{recoveryMethod:"google-drive",wallet:v,recoveryAccessToken:b},setWalletRecoveryCallbacks:l,setRecoveryFlowState:s,setWallet:i})}else yield ae({client:e,account:v,setWallet:i,recoverWalletCallbacks:o,recoveryMethod:"google-drive",setRecoveryFlowState:s,recoveryToken:b})}catch(b){f(b)}}})}_reactnative.Platform.OS==="android"&&p()},[u,a.status,d,n])};var Ze=({client:e,isUserInitialized:t,setIsUserInitialized:r,setError:o})=>{_react.useEffect.call(void 0, ()=>{t||(()=>y(void 0,null,function*(){try{yield e.initialize()}catch(a){o(a instanceof Error?a:new Error(String(a)))}try{yield e.user.get()}catch(a){}finally{r(!0)}}))()},[e,t,o,r])};var _zustand = require('zustand');var A=class extends Error{constructor(r,o){super(o);this.code=r,this.error=o}};var he={success:e=>({value:e}),error:e=>({error:e})};var et=e=>{let t=Array.from(new Set(e));return t.length===0?he.error(new A("no_login_methods_available","No login methods available")):he.success(t)},Se=e=>{let t=e.length,r=e.every(o=>o==="sms"||o==="email");return t<=2&&r?e[0]:null},ia= exports.p =(e,t)=>{if(e.length!==2)return null;let[r,o]=e;return t===r?o:r},sa= exports.q ={email:"email",sms:"phone",google:"Google",apple:"Apple",discord:"Discord",twitter:"X",github:"Github",spotify:"Spotify",instagram:"Instagram",tiktok:"Tiktok",linkedin:"LinkedIn"};function tt(e){return new Promise((t,r)=>{e({resolve:t,reject:r})})}function ar(e,t){return{resolve:r=>{t(),e.resolve(r)},reject:r=>{t(),e.reject(r)}}}function rt(e,t,r){let o=setTimeout(()=>{e.reject(t())},r);return ar(e,()=>{clearTimeout(o)})}var sr=1e3*60*5,F=_zustand.create.call(void 0, )((e,t)=>({privyElementsConfig:null,loginPromiseResolvers:null,isUIMounted:!1,activeLoginMethod:null,updateUIMounted:r=>e({isUIMounted:r}),openLoginFlow:(r,o,l,a)=>tt(c=>{var u,v,f;let s=o.getAppConfig();if(!s)return c.reject(new A("privy_not_ready","Privy is not ready"));if(l!==null)return c.reject(new A("user_already_logged_in","User is already logged in"));if(!t().isUIMounted)return c.reject(new A("privy_elements_not_ready","Privy Elements is not mounted"));if(t().loginPromiseResolvers!==null)return c.reject(new A("existing_login_flow_in_progress","A login flow is already in progress"));let i=et(r.loginMethods);if(i.error)return c.reject(i.error);let d={loginMethods:i.value,appearance:{logo:(f=(v=(u=r.appearance)==null?void 0:u.logo)!=null?v:s.logo_url)!=null?f:void 0}},n=rt(c,()=>(e({privyElementsConfig:null,loginPromiseResolvers:null}),new A("login_flow_timeout","The login flow timed out")),sr);a(),e({loginPromiseResolvers:n,privyElementsConfig:d,activeLoginMethod:Se(d.loginMethods)})}),closeLoginFlow:()=>{var r;return(r=t().loginPromiseResolvers)==null||r.reject(new A("login_flow_closed","The login flow was closed")),e({privyElementsConfig:null,loginPromiseResolvers:null})},goBack:()=>{let{activeLoginMethod:r,privyElementsConfig:o,updateActiveLoginMethod:l,closeLoginFlow:a}=t();if(!o){a();return}let c=Se(o.loginMethods)===null;r===null||!c?a():l(null)},updateActiveLoginMethod:r=>e({activeLoginMethod:r})})),va= exports.r =()=>F(e=>e.privyElementsConfig),fa= exports.s =()=>F(e=>e.openLoginFlow),ba= exports.t =()=>F(e=>e.closeLoginFlow),wa= exports.u =()=>F(e=>e.goBack),ha= exports.v =()=>F(e=>[e.activeLoginMethod,e.updateActiveLoginMethod]),dr=e=>{let{loginPromiseResolvers:t}=F.getState();t==null||t.resolve(e)},ot=()=>dr,Sa= exports.w =()=>{let e=F(t=>t.updateUIMounted);_react.useEffect.call(void 0, ()=>(e(!0),()=>{e(!1)}),[e])},ga= exports.x =()=>F(e=>e.privyElementsConfig!==null);var ge=_react.createContext.call(void 0, {}),K;function ja(e){return K?K.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 Na=e=>{var Ae;let[t,r]=_react.useState.call(void 0, _reactnative.AppState.currentState==="active");_react.useEffect.call(void 0, ()=>{let L=_reactnative.AppState.addEventListener("change",St=>{r(St==="active")});return()=>{L.remove()}},[]);let[o,l]=_react.useState.call(void 0, !1),[a,c]=_react.useState.call(void 0, null),[s,i]=_react.useState.call(void 0, "loading"),[d,n]=_react.useState.call(void 0, !1),[u,v]=_react.useState.call(void 0, null),[f,p]=_react.useState.call(void 0, {status:"disconnected",account:null}),[w,m]=_react.useState.call(void 0, {status:"disconnected"}),[g,h]=_react.useState.call(void 0, {status:"initial"}),[b,S]=_react.useState.call(void 0, {status:"initial"}),E=_react.useRef.call(void 0, {}),[P,k]=_react.useState.call(void 0, {status:"initial"}),[q,T]=_react.useState.call(void 0, {status:"initial"}),[N,J]=_react.useState.call(void 0, {status:"initial"}),[G,Y]=_react.useState.call(void 0, {status:"initial"}),[I,pt]=_react.useState.call(void 0, {status:"initial"}),Ce=_react.useRef.call(void 0, {}),ue=_react.useRef.call(void 0, {}),pe=_react.useRef.call(void 0, {}),me=_react.useRef.call(void 0, {}),Re=_react.useRef.call(void 0, {}),ke=_react.useRef.call(void 0, {}),mt=ot(),X=_react.useCallback.call(void 0, L=>{if(L){mt(L),qe(v)(L);return}v(null),h({status:"initial"}),S({status:"initial"}),p({status:"disconnected",account:null})},[]),C=_react.useMemo.call(void 0, ()=>{let L=e.storage||dt;return e.client?(K=e.client,K.setCallbacks({setUser:X,setIsReady:n}),K):(K=new (0, _jssdkcore2.default)({storage:st(L),appId:e.appId,clientId:e.clientId,supportedChains:e.supportedChains,nativeAppIdentifier:it(),baseUrl:e.baseUrl,sdkVersion:`expo:${Ue.version}`,callbacks:{setUser:X,setIsReady:n},logLevel:e.logLevel,crypto:{digest:_expocrypto.digest}}),K)},[e.client,e.storage,e.appId,e.clientId,e.baseUrl,e.supportedChains,e.logLevel,X]),yt=_react.useCallback.call(void 0, ()=>(X(null),C.auth.logout()),[X,C]),vt=_react.useCallback.call(void 0, ()=>y(void 0,null,function*(){try{return yield C.getAccessToken()}catch(L){return console.debug(L),null}}),[C]),ft=_react.useCallback.call(void 0, ()=>C.getIdentityToken(),[C]);Ze({client:C,isUserInitialized:o,setIsUserInitialized:l,setError:c});let bt=Ge({client:C,user:u,appId:e.appId,webViewState:s,createWalletCallbacks:ue,recoverWalletCallbacks:pe,setWalletRecoveryCallbacks:me,setRecoveryFlowState:k,wallet:f,setWallet:p}),wt=Ne({client:C,user:u,webViewState:s,createSolanaWalletCallbacks:Re,recoverSolanaWalletCallbacks:ke,setSolanaRecoveryFlowState:T,solanaWallet:w,setSolanaWallet:m});Qe({client:C,isUserInitialized:o,user:u,oAuthState:b,setOAuthState:S,oAuthCallbacks:Ce,recoveryFlowState:P,oAuthStateRef:E}),$e({client:C,user:u,webViewLoaded:s==="loaded",createWalletCallbacks:ue,recoverWalletCallbacks:pe,setWalletRecoveryCallbacks:me,recoveryFlowState:P,oAuthState:b,setRecoveryFlowState:k,setWallet:p,appStateVisible:t});let{customAuthStateIsSettled:ht}=Xe({client:C,user:u,isReady:o,customAuth:(Ae=e.config)==null?void 0:Ae.customAuth});return _react2.default.createElement(_react2.default.Fragment,null,_react2.default.createElement(ge.Provider,{value:{client:C,user:u,isReady:s!=="loading"&&o&&nt(b)&&ht,error:a,logout:yt,getAccessToken:vt,getIdentityToken:ft,wallet:_(_({},f),bt),solanaWallet:_(_({},w),wt),oAuthState:b,oAuthCallbacks:Ce,recoveryFlowState:P,setRecoveryFlowState:k,solanaRecoveryFlowState:q,setSolanaRecoveryFlowState:T,createWalletCallbacks:ue,recoverWalletCallbacks:pe,setWalletRecoveryCallbacks:me,createSolanaWalletCallbacks:Re,recoverSolanaWalletCallbacks:ke,setOAuthState:S,siweState:N,setSiweState:J,otpState:g,setOtpState:h,passkeyState:G,setPasskeyState:Y,farcasterState:I,setFarcasterState:pt,oAuthStateRef:E}},e.children),_react2.default.createElement(_reactnative.View,{style:{width:0,height:0,overflow:"hidden"}},_react2.default.createElement(Le,{logLevel:e.logLevel,client:C,isClientReady:d,setWebViewState:i,webViewState:s})))};var nt=e=>e.status!=="loading",_e=(e={})=>{let{user:t,oAuthState:r,setOAuthState:o,oAuthCallbacks:l,client:a,oAuthStateRef:c}=_react.useContext.call(void 0, ge),s=e.action?e.action==="login":!t;_react.useEffect.call(void 0, ()=>{l.current={onSuccess:e.onSuccess,onError:e.onError}},[e.onSuccess,e.onError]);let i=_react.useCallback.call(void 0, n=>{var v;let u=x(n);return o({status:"error",error:u}),(v=e==null?void 0:e.onError)==null||v.call(e,u),u},[e==null?void 0:e.onError]);return{start:_react.useCallback.call(void 0, function(w){return y(this,arguments,function*({provider:u,redirectUri:v,isLegacyAppleIosBehaviorEnabled:f=!1,disableSignup:p}){var m,g,h;o({status:"loading"}),c.current={disableSignup:p};try{if(t&&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(!t&&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{url:b}=yield a.auth.oauth.generateURL(u,B.createURL(v||"/")),S,E;if(_reactnative.Platform.OS==="ios"&&u==="apple"&&!f){let G=(m=new URL(b).searchParams.get("state"))!=null?m:"",Y=yield ut.signInAsync({state:G}).catch(I=>{throw I instanceof Error&&"code"in I&&I.code==="ERR_REQUEST_CANCELED"?new (0, _jssdkcore.PrivyClientError)({error:"Apple login was cancelled",code:s?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):I});if(!Y.authorizationCode)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:s?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(s){let I=yield a.auth.oauth.loginWithCode(Y.authorizationCode,G,u,"raw",p?"no-signup":"login-or-sign-up");S=I.user,E=I.is_new_user}else S=yield a.auth.oauth.linkWithCode(Y.authorizationCode,G,u,"raw");return(g=e==null?void 0:e.onSuccess)==null||g.call(e,S,E),o({status:"done"}),S!=null?S:void 0}let P=_reactnative.Platform.OS==="android"?b.replace("x.com","twitter.com"):b,k=yield re.openAuthSessionAsync(P);if(_reactnative.Platform.OS==="android")return;if(k.type!=="success")throw[re.WebBrowserResultType.CANCEL,re.WebBrowserResultType.DISMISS].includes(k.type)?new (0, _jssdkcore.PrivyClientError)({error:"OAuth was cancelled",code:s?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):new (0, _jssdkcore.PrivyClientError)({error:"OAuth session failed",code:s?"failed_to_complete_login_with_oauth":"failed_to_complete_link_with_oauth"});let{queryParams:q}=B.parse(k.url),{privy_oauth_state:T,privy_oauth_code:N}=q;if(!N||!T)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:s?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(s){let J=yield a.auth.oauth.loginWithCode(N,T,u,void 0,p?"no-signup":"login-or-sign-up");S=J.user,E=J.is_new_user}else S=yield a.auth.oauth.linkWithCode(N,T,u);return(h=e==null?void 0:e.onSuccess)==null||h.call(e,S,E),yield B.openURL(k.url.split("?")[0]),o({status:"done"}),S!=null?S:void 0}catch(b){i(b)}})},[t,a,o,i]),state:r}};function Ga(e){let{state:t,start:r}=_e(O(_({},e),{action:"login"}));return{state:t,login:r}}function Ya(e){let{state:t,start:r}=_e(O(_({},e),{action:"link"}));return{state:t,link:r}}function Xa(e){return _e(e)}var it=()=>{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 st(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:()=>y(this,null,function*(){return[]})}}var dt={get(e){return U.getItemAsync(e,{keychainAccessible:U.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},put(e,t){return U.setItemAsync(e,t,{keychainAccessible:U.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},del(e){return U.deleteItemAsync(e,{keychainAccessible:U.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},getKeys:()=>y(void 0,null,function*(){return[]})};function Za(e){return e.status==="connected"}function en(e){return e.status==="reconnecting"}function tn(e){return e.status==="connecting"}function rn(e){return e.status==="disconnected"}function on(e){return e.status==="not-created"}function an(e){return e.status==="creating"}function nn(e){return e.status==="error"}function sn(e){return e.status==="needs-recovery"}var hr=e=>y(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 O(_({},r),{type:(o=r.type)!=null?o:"public-key",clientExtensionResults:{}})});var gr=e=>y(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 O(_({},r),{type:(o=r.type)!=null?o:"public-key",clientExtensionResults:{}})});function En(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 _n(e){var t,r,o,l;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:(l=e.allow_credentials)==null?void 0:l.map(({id:a,type:c,transports:s})=>({id:a,type:c,transports:s})),userVerification:e.user_verification}}exports.a = _; exports.b = O; exports.c = Er; exports.d = y; exports.e = Ue; exports.f = x; exports.g = ro; exports.h = so; exports.i = Ga; exports.j = Ya; exports.k = Xa; exports.l = it; exports.m = st; exports.n = dt; exports.o = A; exports.p = ia; exports.q = sa; exports.r = va; exports.s = fa; exports.t = ba; exports.u = wa; exports.v = ha; exports.w = Sa; exports.x = ga; exports.y = ge; exports.z = ja; exports.A = Na; exports.B = Za; exports.C = en; exports.D = tn; exports.E = rn; exports.F = on; exports.G = an; exports.H = nn; exports.I = sn; exports.J = hr; exports.K = gr; exports.L = En; exports.M = _n;
@@ -1 +1 @@
1
- var gt=Object.defineProperty,Et=Object.defineProperties;var _t=Object.getOwnPropertyDescriptors;var oe=Object.getOwnPropertySymbols;var Oe=Object.prototype.hasOwnProperty,xe=Object.prototype.propertyIsEnumerable;var Pe=(e,t,r)=>t in e?gt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,_=(e,t)=>{for(var r in t||(t={}))Oe.call(t,r)&&Pe(e,r,t[r]);if(oe)for(var r of oe(t))xe.call(t,r)&&Pe(e,r,t[r]);return e},O=(e,t)=>Et(e,_t(t));var Er=(e,t)=>{var r={};for(var o in e)Oe.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(e!=null&&oe)for(var o of oe(e))t.indexOf(o)<0&&xe.call(e,o)&&(r[o]=e[o]);return r};var y=(e,t,r)=>new Promise((o,l)=>{var a=i=>{try{s(r.next(i))}catch(d){l(d)}},c=i=>{try{s(r.throw(i))}catch(d){l(d)}},s=i=>i.done?o(i.value):Promise.resolve(i.value).then(a,c);s((r=r.apply(e,t)).next())});import*as ut from"expo-apple-authentication";import{applicationId as lt}from"expo-application";import*as B from"expo-linking";import*as U from"expo-secure-store";import*as re from"expo-web-browser";import{useCallback as ct,useContext as fr,useEffect as br}from"react";import{Platform as Ee}from"react-native";import{PrivyClientError as j}from"@privy-io/js-sdk-core";import{digest as lr}from"expo-crypto";import te,{useState as W,useMemo as cr,createContext as ur,useCallback as ce,useRef as V,useEffect as pr}from"react";import{AppState as at,View as mr}from"react-native";import yr,{PrivyClientError as vr}from"@privy-io/js-sdk-core";var Ue={name:"@privy-io/expo",version:"0.29.0",description:"Expo client for the Privy Auth API",keywords:["authentication","authorization","identity","privacy","privy","user data","react-native","expo","web3"],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"}},main:"./dist/esm/index.js",source:"./src/index.ts",types:"./dist/index.d.ts",files:["dist/**/*","LICENSE","README.md"],scripts:{build:"npx tsup --clean --minify","check-types":"npx tsc --noEmit",clean:"rm -rf dist .turbo",dev:"npx tsup --watch",format:'eslint "src/**/*.{ts,tsx,js,jsx}" --fix',"generate-types":"npx tsup --dts-only",lint:'npx eslint "src/**/*.{ts,tsx,js,jsx}"',test:'jest --testMatch "**/test/**/*.test.ts"',"test:ci":"npm run test"},browserslist:["defaults","node >= 18","not op_mini all"],dependencies:{"@privy-io/js-sdk-core":"0.30.0","react-fast-compare":"^3.2.2",zustand:"^4.4.1"},devDependencies:{"@privy-io/eslint-config-custom":"*","@privy-io/tsconfig":"*","@simplewebauthn/types":"9.0.1","@svgr/core":"^8.1.0","@svgr/plugin-jsx":"^8.1.0","@svgr/plugin-svgo":"^8.1.0","@tsconfig/node16-strictest-esm":"^1.0.3","eslint-plugin-react-hooks":"^5.0.0-canary-7118f5dd7-20230705",tsup:"^6.2.3",typescript:"~5.5.3"},peerDependencies:{"@expo-google-fonts/inter":"*","@privy-io/expo-native-extensions":"0.0.3","expo-apple-authentication":"*","expo-application":"*","expo-constants":"*","expo-crypto":"*","expo-font":"*","expo-linking":"*","expo-secure-store":"*","expo-web-browser":"*",react:"*","react-native":"*","react-native-passkeys":"^0.3.0","react-native-safe-area-context":"*","react-native-svg":"*","react-native-webview":"*"},peerDependenciesMeta:{"@expo-google-fonts/inter":{optional:!0},"expo-font":{optional:!0}},publishConfig:{access:"public"}};import Ct from"react";import{useCallback as Rt,useEffect as Ie,useRef as kt}from"react";import{AppState as At}from"react-native";import Pt from"react-native-webview";var Le=({client:e,isClientReady:t,setWebViewState:r,webViewState:o,logLevel:l})=>{let a=kt(null);Ie(()=>{a.current&&o==="loaded"&&e.setMessagePoster(a.current)},[e,a.current,o==="loaded"]),Ie(()=>At.addEventListener("change",i=>y(void 0,null,function*(){a.current&&i==="active"&&((yield e.embeddedWallet.ping(500))||(a.current.reload(),r("reloading")))})).remove,[]);let c=Rt(s=>y(void 0,null,function*(){let{data:i}=s.nativeEvent;e.embeddedWallet.onMessage(JSON.parse(i))}),[e]);return t?Ct.createElement(Pt,{style:{flex:1},ref:a,cacheEnabled:!1,cacheMode:"LOAD_NO_CACHE",source:{uri:e.embeddedWallet.getURL()},webviewDebuggingEnabled:l==="DEBUG",onLoad:()=>r("loaded"),onError:console.error,onMessage:c}):null};import{useCallback as ye,useEffect as je,useMemo as ve}from"react";import{errorIndicatesRecoveryIsNeeded as xt,getAllUserEmbeddedSolanaWallets as Ut,PrivyClientError as $}from"@privy-io/js-sdk-core";import{getAllUserEmbeddedSolanaWallets as Me,getUserEmbeddedWallet as Ot}from"@privy-io/js-sdk-core";import{PrivyClientError as Q}from"@privy-io/js-sdk-core";function Te(a){return y(this,arguments,function*({client:e,setSolanaWallet:t,createSolanaWalletCallbacks:r,setSolanaRecoveryFlowState:o,opts:l}){var c,s,i;t({status:"creating"});try{let{user:d}=yield e.user.get(),n=Me(d),u=n[0];if(l!=null&&l.recoveryMethod&&l.recoveryMethod!=="privy")throw new Q({code:"embedded_wallet_creation_error",error:"Unsupported recovery method for solana wallet."});if(!(l!=null&&l.createAdditional)&&u)throw new Q({code:"embedded_wallet_creation_error",error:"Solana wallet already exists for this user. Set `createAdditional` to `true` to create another wallet"});let v,f;if(u){let w=Math.max(...n.map(g=>g.wallet_index),0)+1,m=yield e.embeddedWallet.createAdditionalSolana({primaryPublicKey:u.address,hdWalletIndex:w});v=m.provider,f=m.user}else{let w=(c=Ot(d))!=null?c:void 0;if(w&&w.recovery_method!=="privy")throw new Q({code:"embedded_wallet_creation_error",error:"Existing wallet uses unsupported recovery method for solana wallet."});let m=yield e.embeddedWallet.createSolana({ethereumAccount:w});v=m.provider,f=m.user}let p=Me(f)[0];if(!p)throw new Q({code:"embedded_wallet_creation_error",error:"Unknown error creating solana wallet"});return(i=(s=r.current)==null?void 0:s.onSuccess)==null||i.call(s,v),t({status:"connected",publicKey:p.public_key}),o({status:"initial"}),v}catch(d){let n=d instanceof Error?d.message:"Error creating embedded wallet";throw t({status:"error",error:n}),o({status:"initial"}),new Q({code:"embedded_wallet_creation_error",error:n})}})}import{PrivyClientError as D}from"@privy-io/js-sdk-core";function ae(d){return y(this,arguments,function*({client:e,account:t,setWallet:r,recoverWalletCallbacks:o,recoveryMethod:l,setRecoveryFlowState:a,password:c,recoveryToken:s,recoverySecretOverride:i}){var n,u,v,f;if(!t)throw new D({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});switch(l){case"user-passcode":if(!c)throw new D({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!s)throw new D({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!i)throw new D({code:"embedded_wallet_recovery_error",error:"Record name is required for icloud recovery method"});break}r({status:"connecting",account:t});try{let p=yield e.embeddedWallet.getProvider(t,c,s,i);return r({status:"connected",provider:p,account:t}),a({status:"initial"}),(u=(n=o.current)==null?void 0:n.onSuccess)==null||u.call(n,p),p}catch(p){r({status:"needs-recovery",account:t}),a({status:"initial"});let w=new D({code:"embedded_wallet_recovery_error",error:p instanceof Error?p.message:"Error recovering embedded wallet"});throw(f=(v=o.current)==null?void 0:v.onError)==null||f.call(v,w),w}})}function Fe(a){return y(this,arguments,function*({client:e,primaryAcount:t,setSolanaWallet:r,recoverSolanaWalletCallbacks:o,setSolanaRecoveryFlowState:l}){var c,s,i,d;if(!t)throw new D({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});r({status:"connecting"});try{let n=yield e.embeddedWallet.getSolanaProvider(t);return r({status:"connected",publicKey:n._publicKey}),l({status:"initial"}),(s=(c=o.current)==null?void 0:c.onSuccess)==null||s.call(c,n),n}catch(n){r({status:"needs-recovery"}),l({status:"initial"});let u=new D({code:"embedded_wallet_recovery_error",error:n instanceof Error?n.message:"Error recovering embedded wallet"});throw(d=(i=o.current)==null?void 0:i.onError)==null||d.call(i,u),u}})}var Ne=({client:e,user:t,solanaWallet:r,setSolanaWallet:o,setSolanaRecoveryFlowState:l,webViewState:a,createSolanaWalletCallbacks:c,recoverSolanaWalletCallbacks:s})=>{let i=ve(()=>Ut(t),[t]),d=ve(()=>i[0],[i]),n=ve(()=>i.map(p=>({address:p.address,publicKey:p.address,walletIndex:p.wallet_index,getProvider:()=>e.embeddedWallet.getSolanaProvider(p,d==null?void 0:d.public_key)})),[i,d,e]),u=ye(p=>y(void 0,null,function*(){return yield Te({client:e,setSolanaWallet:o,createSolanaWalletCallbacks:c,setSolanaRecoveryFlowState:l,opts:p})}),[e,c]),v=ye(()=>y(void 0,null,function*(){if(!d)throw new $({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});return Fe({client:e,primaryAcount:d,setSolanaWallet:o,recoverSolanaWalletCallbacks:s,setSolanaRecoveryFlowState:l})}),[e,d]),f=ye(()=>y(void 0,null,function*(){if(!d)throw o({status:"not-created"}),new $({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});o(p=>p.status==="connected"?{status:"reconnecting"}:{status:"connecting"});try{let p=yield e.embeddedWallet.getSolanaProvider(d);return o({status:"connected",publicKey:d.public_key}),p}catch(p){throw xt(p)?(o({status:"needs-recovery"}),new $({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):p instanceof Error?(o({status:"error",error:p.message}),new $({code:"unknown_embedded_wallet_error",error:p.message})):(o({status:"error",error:"Error loading embedded wallet"}),new $({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,d]);return je(()=>{if(!t&&r.status!=="disconnected")return o({status:"disconnected"});a==="loaded"&&f().catch(()=>{})},[a,t,d]),je(()=>{r.status==="error"&&r.error.includes("User must be logged in")&&f()},[r.status]),{create:u,recover:v,getProvider:f,wallets:n}};import{useCallback as ee,useEffect as ze,useMemo as Kt}from"react";import{getUserEmbeddedSolanaWallet as Be,throwIfInvalidRecoveryUpgradePath as qt}from"@privy-io/js-sdk-core";import{errorIndicatesRecoveryIsNeeded as Ht,getUserEmbeddedWallet as zt,PrivyClientError as R}from"@privy-io/js-sdk-core";import{getUserEmbeddedWallet as It}from"@privy-io/js-sdk-core";import{PrivyClientError as ne}from"@privy-io/js-sdk-core";function ie(n){return y(this,arguments,function*({client:e,setWallet:t,createWalletCallbacks:r,recoveryMethod:o,setRecoveryFlowState:l,password:a,recoveryToken:c,recoverySecretOverride:s,iCloudRecordNameOverride:i,solanaAccount:d}){var v,f;switch(o){case"user-passcode":if(!a)throw new ne({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!c)throw new ne({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!s||!i)throw new ne({code:"embedded_wallet_recovery_error",error:"iCloud recovery failed due to inability to store credentials"});break}t({status:"creating",account:null});let u=o==="icloud"?"icloud-native":o;try{let{provider:p,user:w}=yield e.embeddedWallet.create(a,u,c,s,i,d),m=It(w);return(f=(v=r.current)==null?void 0:v.onSuccess)==null||f.call(v,p),t({status:"connected",provider:p,account:m}),l({status:"initial"}),p}catch(p){let w=p instanceof Error?p.message:"Error creating embedded wallet";throw t({status:"error",error:w,account:null}),l({status:"initial"}),new ne({code:"embedded_wallet_creation_error",error:w})}})}import{Platform as De}from"react-native";import{PrivyClientError as M}from"@privy-io/js-sdk-core";function Ve(){return y(this,null,function*(){try{return yield import("@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 fe(o){return y(this,arguments,function*({user:e,appId:t,client:r}){var s;if(De.OS==="android")throw new M({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let l=yield Ve(),a=yield r.recovery.icloudAuth.getICloudConfiguration("expo-ios");if(!(a==null?void 0:a.container_identifier))throw new M({code:"embedded_wallet_recovery_error",error:"An iCloud Container ID must be specified in the Privy Dashboard."});try{let{recoverySecret:i,iCloudRecordName:d}=yield l.writeRecoverySecretToICloud({containerId:a.container_identifier,appId:t,userId:e.id});return{recoverySecret:i,iCloudRecordName:d}}catch(i){if(i instanceof Error){let d=(s=i.message.split("Caused by: ")[1])!=null?s:"Error writing to iCloud";throw new M({code:"embedded_wallet_recovery_error",error:d})}throw new M({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}function Ke(r){return y(this,arguments,function*({walletAddress:e,client:t}){var i;if(De.OS==="android")throw new M({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let o=yield Ve(),a=(yield t.recovery.getRecoveryKeyMaterial(e)).icloud_record_name;if(!a)throw new M({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 M({code:"embedded_wallet_recovery_error",error:"An iCloud Container ID must be specified in the Privy Dashboard."});try{let{recoverySecret:d}=yield o.readRecoverySecretFromICloud({containerId:s,recordName:a});return{recoverySecret:d}}catch(d){if(d instanceof Error){let n=(i=d.message.split("Caused by: ")[1])!=null?i:"Error writing to iCloud";throw new M({code:"embedded_wallet_recovery_error",error:n})}throw new M({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}import*as se from"expo-linking";import*as He from"expo-web-browser";import{Platform as Nt}from"react-native";import{PrivyClientError as Z}from"@privy-io/js-sdk-core";import Lt from"react-fast-compare";var qe=e=>t=>e(r=>Lt(r,t)?r:t);import{PrivyApiError as Mt,PrivyClientError as Tt}from"@privy-io/js-sdk-core";function x(e){return e instanceof Error||e instanceof Mt||e instanceof Tt?e:typeof e=="string"?new Error(e):new Error("Unknown error")}var ro=e=>new Promise(t=>setTimeout(t,e));import{useEffect as Ft,useRef as jt}from"react";import{AppState as be}from"react-native";function so(){let e=jt(be.currentState);Ft(()=>be.addEventListener("change",o=>{e.current=o}).remove,[]);function t(){return be.currentState}return{appState:e,getCurrentAppState:t}}function de(l){return y(this,arguments,function*({provider:e,redirectUri:t,client:r,onError:o}){try{let a;switch(e){case"google-drive":{let{url:d}=yield r.recovery.auth.generateURL(se.createURL(t||"/"));a=d;break}default:throw new Z({error:"OAuth invalid provider",code:"embedded_wallet_recovery_error"})}let c=yield He.openAuthSessionAsync(a);if(Nt.OS==="android")return;if(c.type!=="success")throw new Z({error:"Recovery OAuth session failed",code:"embedded_wallet_recovery_error"});let{queryParams:s}=se.parse(c.url),i;switch(e){case"google-drive":{let{privy_oauth_state:d,privy_oauth_code:n}=s;if(!n||!d)throw new Z({error:"Recovery OAuth invalid credentials",code:"embedded_wallet_recovery_error"});i=yield we({oAuthCode:n,oAuthState:d,client:r});break}default:throw new Z({error:"Recovery OAuth invalid provider",code:"embedded_wallet_recovery_error"})}return i}catch(a){throw o==null||o(x(a)),a}})}function we(o){return y(this,arguments,function*({oAuthCode:e,oAuthState:t,client:r}){let{access_token:l}=yield r.recovery.auth.authorize(e,t);if(!l)throw new Z({error:"OAuth invalid credentials",code:"login_with_oauth_returned_with_invalid_credentials"});return l})}import{getUserEmbeddedWallet as Dt,PrivyClientError as Vt}from"@privy-io/js-sdk-core";function le(a){return y(this,arguments,function*({client:e,recoveryInput:t,setWalletRecoveryCallbacks:r,setRecoveryFlowState:o,setWallet:l}){var c,s,i,d;try{let{provider:n,user:u}=yield e.embeddedWallet.setRecovery(t),v=Dt(u);return l({status:"connected",provider:n,account:v}),(s=(c=r.current)==null?void 0:c.onSuccess)==null||s.call(c,n),o({status:"initial"}),n}catch(n){let u=new Vt({code:"embedded_wallet_set_recovery_error",error:n instanceof Error?n.message:"Error setting password on embedded wallet"});throw(d=(i=r.current)==null?void 0:i.onError)==null||d.call(i,u),o({status:"initial"}),u}})}function Je(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}:{recoveryMethod:e.recoveryMethod}}var Ge=({client:e,user:t,appId:r,wallet:o,setWallet:l,setRecoveryFlowState:a,webViewState:c,createWalletCallbacks:s,recoverWalletCallbacks:i,setWalletRecoveryCallbacks:d})=>{let n=Kt(()=>zt(t),[t]),u=ee(m=>y(void 0,null,function*(){var k,q;if(n)throw new R({error:"This user already has an embedded wallet",code:"embedded_wallet_already_exists"});let{user:g}=yield e.user.get(),{password:h,recoveryMethod:b}=Je(m),S,E,P;if(b==="google-drive"&&(S=yield de({provider:b,client:e,onError:(k=s.current)==null?void 0:k.onError}),a({status:"creating-wallet"}),!S))return null;if(b==="icloud"){if(!g)throw new R({code:"embedded_wallet_recovery_error",error:"User must be loaded before creating a wallet with iCloud."});let{recoverySecret:T,iCloudRecordName:N}=yield fe({user:g,appId:r,client:e});E=T,P=N}return yield ie({client:e,setWallet:l,createWalletCallbacks:s,recoveryMethod:b,setRecoveryFlowState:a,password:h,recoverySecretOverride:E,iCloudRecordNameOverride:P,solanaAccount:(q=Be(g))!=null?q:void 0})}),[e,n,t]),v=ee(m=>y(void 0,null,function*(){var b;if(o.status!=="connected")throw new R({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"});if(!n)throw new R({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});if(Be(t))throw new R({code:"embedded_wallet_set_recovery_error",error:"Cannot set user-controlled recovery for a user with an embedded Solana wallet."});qt({currentRecoveryMethod:n.recovery_method,upgradeToRecoveryMethod:m.recoveryMethod});let g,h;switch(m.recoveryMethod){case"privy":h=O(_({},m),{wallet:n});break;case"user-passcode":h=O(_({},m),{wallet:n,password:m.password});break;case"google-drive":if(g=yield de({provider:m.recoveryMethod,client:e,onError:(b=d.current)==null?void 0:b.onError}),a({status:"upgrading-recovery"}),!g)return null;h={recoveryMethod:"google-drive",wallet:n,recoveryAccessToken:g};break;case"icloud":if(!t)throw new R({code:"embedded_wallet_recovery_error",error:"User must be loaded before backing up to iCloud."});let{recoverySecret:S,iCloudRecordName:E}=yield fe({user:t,appId:r,client:e});h={recoveryMethod:"icloud-native",recoverySecretOverride:S,iCloudRecordNameOverride:E,wallet:n};break;default:throw new R({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}return le({client:e,recoveryInput:h,setWalletRecoveryCallbacks:d,setRecoveryFlowState:a,setWallet:l})}),[e,n,o.status,t]),f=ee(m=>y(void 0,null,function*(){return v({recoveryMethod:"user-passcode",password:m})}),[e,n,o.status]),p=ee(m=>y(void 0,null,function*(){var E;if(!n)throw new R({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{password:g,recoveryMethod:h}=Je(m),b,S;if(h==="google-drive"&&(b=yield de({provider:h,client:e,onError:(E=i.current)==null?void 0:E.onError}),a({status:"recovering"}),!b))return null;if(h==="icloud"){if(!t)throw new R({code:"embedded_wallet_recovery_error",error:"User must be loaded before recovering via iCloud."});let{recoverySecret:P}=yield Ke({client:e,walletAddress:n.address});S=P}return ae({client:e,account:n,setWallet:l,recoverWalletCallbacks:i,recoveryMethod:h,setRecoveryFlowState:a,password:g,recoveryToken:b,recoverySecretOverride:S})}),[e,n]),w=ee(()=>y(void 0,null,function*(){if(!n)throw l({status:"not-created",account:null}),new R({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});l(m=>m.status==="connected"?{status:"reconnecting",account:n}:{status:"connecting",account:n});try{let m=yield e.embeddedWallet.getProvider(n);return l({status:"connected",provider:m,account:n}),m}catch(m){throw Ht(m)?(l({status:"needs-recovery",account:n}),new R({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):m instanceof Error?(l({status:"error",error:m.message,account:n}),new R({code:"unknown_embedded_wallet_error",error:m.message})):(l({status:"error",error:"Error loading embedded wallet",account:n}),new R({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,n]);return ze(()=>{if(!t&&o.status!=="disconnected")return l({status:"disconnected",account:null});c==="loaded"&&w().catch(()=>{})},[c,t,n]),ze(()=>{o.status==="error"&&o.error.includes("User must be logged in")&&w()},[o.status]),{create:u,recover:p,setPassword:f,setRecovery:v,getProvider:w}};import{useEffect as Bt,useState as Jt}from"react";import{PrivyClientError as Ye}from"@privy-io/js-sdk-core";var Xe=({client:e,user:t,isReady:r,customAuth:o})=>{let[l,a]=Jt({status:"initial"});return Bt(()=>{(()=>y(void 0,null,function*(){if(!(o!=null&&o.enabled)){a({status:"not-enabled"});return}a({status:"loading"});let{getCustomAccessToken:s,isLoading:i}=o;if(!(!r||i))try{let d=yield s();if(!d&&t){yield e.auth.logout(),a({status:"done"});return}if(!d){a({status:"done"});return}if(t){a({status:"done"});return}if(!(yield e.auth.customProvider.syncWithToken(d))){yield e.auth.logout(),a({status:"error",error:new Ye({error:"Failed to sync with custom auth provider",code:"third_party_auth_error"})});return}a({status:"done"})}catch(d){if(console.log("Error syncing with custom auth provider",d),a({status:"error",error:d}),t)throw yield e.auth.logout(),new Ye({error:"Third-party auth failed",code:"third_party_auth_error"})}}))()},[e,t,r,o==null?void 0:o.enabled,o==null?void 0:o.getCustomAccessToken,o==null?void 0:o.isLoading]),{customAuthState:l,customAuthStateIsSettled:l.status!=="loading"&&l.status!=="initial"}};import*as H from"expo-linking";import{useCallback as Gt,useEffect as Yt}from"react";import{Platform as Xt}from"react-native";var Qe=({client:e,user:t,isUserInitialized:r,oAuthState:o,oAuthCallbacks:l,setOAuthState:a,recoveryFlowState:c,oAuthStateRef:s})=>{let i=H.useURL(),d=Gt(n=>{var v,f;let u=x(n);a({status:"error",error:u}),(f=(v=l.current).onError)==null||f.call(v,u)},[a]);return Yt(()=>{function n(){return y(this,null,function*(){var p,w;if(!i||o.status!=="loading"||c.status!=="initial")return;let{queryParams:u}=H.parse(i),{privy_oauth_state:v,privy_oauth_code:f}=u;if(!f||!v){a({status:"done"});return}try{let m,g;if(t)m=yield e.auth.oauth.linkWithCode(f,v);else{let h=yield e.auth.oauth.loginWithCode(f,v,void 0,void 0,s.current.disableSignup?"no-signup":"login-or-sign-up");m=h.user,g=!!h.is_new_user}return(w=(p=l.current).onSuccess)==null||w.call(p,m,g),s.current={},a({status:"done"}),yield H.openURL(i.split("?")[0])}catch(m){s.current={},d(m)}})}Xt.OS==="android"&&r&&n()},[i,r])};import*as z from"expo-linking";import{useCallback as Qt,useEffect as $t,useMemo as Zt}from"react";import{Platform as er}from"react-native";import{getUserEmbeddedSolanaWallet as tr,getUserEmbeddedWallet as rr}from"@privy-io/js-sdk-core";var $e=({client:e,user:t,createWalletCallbacks:r,recoverWalletCallbacks:o,setWalletRecoveryCallbacks:l,recoveryFlowState:a,oAuthState:c,setRecoveryFlowState:s,setWallet:i,appStateVisible:d,webViewLoaded:n})=>{let u=z.useURL(),v=Zt(()=>rr(t),[t]),f=Qt(p=>{var m,g,h,b;let w=x(p);a.status==="creating-wallet"?(g=(m=r.current).onError)==null||g.call(m,x(w)):(b=(h=o.current).onError)==null||b.call(h,x(w)),s({status:"initial"})},[a]);return $t(()=>{function p(){return y(this,null,function*(){var h;if(!u&&a.status!=="initial"&&d&&f(new Error("Recovery OAuth session failed")),!u||a.status==="initial"||c.status!=="initial"||!d||!n)return;let{queryParams:w}=z.parse(u),{privy_oauth_state:m,privy_oauth_code:g}=w;if(!(!g||!m)){yield z.openURL(u.split("?")[0]);try{let b=yield we({oAuthCode:g,oAuthState:m,client:e});if(a.status==="creating-wallet"){let S=(h=tr(t))!=null?h:void 0;yield ie({client:e,setWallet:i,createWalletCallbacks:r,recoveryMethod:"google-drive",setRecoveryFlowState:s,recoveryToken:b,solanaAccount:S})}else if(a.status==="upgrading-recovery"){if(!v)throw new Error("Embedded wallet not found");yield le({client:e,recoveryInput:{recoveryMethod:"google-drive",wallet:v,recoveryAccessToken:b},setWalletRecoveryCallbacks:l,setRecoveryFlowState:s,setWallet:i})}else yield ae({client:e,account:v,setWallet:i,recoverWalletCallbacks:o,recoveryMethod:"google-drive",setRecoveryFlowState:s,recoveryToken:b})}catch(b){f(b)}}})}er.OS==="android"&&p()},[u,a.status,d,n])};import{useEffect as or}from"react";var Ze=({client:e,isUserInitialized:t,setIsUserInitialized:r,setError:o})=>{or(()=>{t||(()=>y(void 0,null,function*(){try{yield e.initialize()}catch(a){o(a instanceof Error?a:new Error(String(a)))}try{yield e.user.get()}catch(a){}finally{r(!0)}}))()},[e,t,o,r])};import{useEffect as nr}from"react";import{create as ir}from"zustand";var A=class extends Error{constructor(r,o){super(o);this.code=r,this.error=o}};var he={success:e=>({value:e}),error:e=>({error:e})};var et=e=>{let t=Array.from(new Set(e));return t.length===0?he.error(new A("no_login_methods_available","No login methods available")):he.success(t)},Se=e=>{let t=e.length,r=e.every(o=>o==="sms"||o==="email");return t<=2&&r?e[0]:null},ia=(e,t)=>{if(e.length!==2)return null;let[r,o]=e;return t===r?o:r},sa={email:"email",sms:"phone",google:"Google",apple:"Apple",discord:"Discord",twitter:"X",github:"Github",spotify:"Spotify",instagram:"Instagram",tiktok:"Tiktok",linkedin:"LinkedIn"};function tt(e){return new Promise((t,r)=>{e({resolve:t,reject:r})})}function ar(e,t){return{resolve:r=>{t(),e.resolve(r)},reject:r=>{t(),e.reject(r)}}}function rt(e,t,r){let o=setTimeout(()=>{e.reject(t())},r);return ar(e,()=>{clearTimeout(o)})}var sr=1e3*60*5,F=ir()((e,t)=>({privyElementsConfig:null,loginPromiseResolvers:null,isUIMounted:!1,activeLoginMethod:null,updateUIMounted:r=>e({isUIMounted:r}),openLoginFlow:(r,o,l,a)=>tt(c=>{var u,v,f;let s=o.getAppConfig();if(!s)return c.reject(new A("privy_not_ready","Privy is not ready"));if(l!==null)return c.reject(new A("user_already_logged_in","User is already logged in"));if(!t().isUIMounted)return c.reject(new A("privy_elements_not_ready","Privy Elements is not mounted"));if(t().loginPromiseResolvers!==null)return c.reject(new A("existing_login_flow_in_progress","A login flow is already in progress"));let i=et(r.loginMethods);if(i.error)return c.reject(i.error);let d={loginMethods:i.value,appearance:{logo:(f=(v=(u=r.appearance)==null?void 0:u.logo)!=null?v:s.logo_url)!=null?f:void 0}},n=rt(c,()=>(e({privyElementsConfig:null,loginPromiseResolvers:null}),new A("login_flow_timeout","The login flow timed out")),sr);a(),e({loginPromiseResolvers:n,privyElementsConfig:d,activeLoginMethod:Se(d.loginMethods)})}),closeLoginFlow:()=>{var r;return(r=t().loginPromiseResolvers)==null||r.reject(new A("login_flow_closed","The login flow was closed")),e({privyElementsConfig:null,loginPromiseResolvers:null})},goBack:()=>{let{activeLoginMethod:r,privyElementsConfig:o,updateActiveLoginMethod:l,closeLoginFlow:a}=t();if(!o){a();return}let c=Se(o.loginMethods)===null;r===null||!c?a():l(null)},updateActiveLoginMethod:r=>e({activeLoginMethod:r})})),va=()=>F(e=>e.privyElementsConfig),fa=()=>F(e=>e.openLoginFlow),ba=()=>F(e=>e.closeLoginFlow),wa=()=>F(e=>e.goBack),ha=()=>F(e=>[e.activeLoginMethod,e.updateActiveLoginMethod]),dr=e=>{let{loginPromiseResolvers:t}=F.getState();t==null||t.resolve(e)},ot=()=>dr,Sa=()=>{let e=F(t=>t.updateUIMounted);nr(()=>(e(!0),()=>{e(!1)}),[e])},ga=()=>F(e=>e.privyElementsConfig!==null);var ge=ur({}),K;function ja(e){return K?K.getAccessToken():e!=null&&e.strict?Promise.reject(new vr({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 Na=e=>{var Ae;let[t,r]=W(at.currentState==="active");pr(()=>{let L=at.addEventListener("change",St=>{r(St==="active")});return()=>{L.remove()}},[]);let[o,l]=W(!1),[a,c]=W(null),[s,i]=W("loading"),[d,n]=W(!1),[u,v]=W(null),[f,p]=W({status:"disconnected",account:null}),[w,m]=W({status:"disconnected"}),[g,h]=W({status:"initial"}),[b,S]=W({status:"initial"}),E=V({}),[P,k]=W({status:"initial"}),[q,T]=W({status:"initial"}),[N,J]=W({status:"initial"}),[G,Y]=W({status:"initial"}),[I,pt]=W({status:"initial"}),Ce=V({}),ue=V({}),pe=V({}),me=V({}),Re=V({}),ke=V({}),mt=ot(),X=ce(L=>{if(L){mt(L),qe(v)(L);return}v(null),h({status:"initial"}),S({status:"initial"}),p({status:"disconnected",account:null})},[]),C=cr(()=>{let L=e.storage||dt;return e.client?(K=e.client,K.setCallbacks({setUser:X,setIsReady:n}),K):(K=new yr({storage:st(L),appId:e.appId,clientId:e.clientId,supportedChains:e.supportedChains,nativeAppIdentifier:it(),baseUrl:e.baseUrl,sdkVersion:`expo:${Ue.version}`,callbacks:{setUser:X,setIsReady:n},logLevel:e.logLevel,crypto:{digest:lr}}),K)},[e.client,e.storage,e.appId,e.clientId,e.baseUrl,e.supportedChains,e.logLevel,X]),yt=ce(()=>(X(null),C.auth.logout()),[X,C]),vt=ce(()=>y(void 0,null,function*(){try{return yield C.getAccessToken()}catch(L){return console.debug(L),null}}),[C]),ft=ce(()=>C.getIdentityToken(),[C]);Ze({client:C,isUserInitialized:o,setIsUserInitialized:l,setError:c});let bt=Ge({client:C,user:u,appId:e.appId,webViewState:s,createWalletCallbacks:ue,recoverWalletCallbacks:pe,setWalletRecoveryCallbacks:me,setRecoveryFlowState:k,wallet:f,setWallet:p}),wt=Ne({client:C,user:u,webViewState:s,createSolanaWalletCallbacks:Re,recoverSolanaWalletCallbacks:ke,setSolanaRecoveryFlowState:T,solanaWallet:w,setSolanaWallet:m});Qe({client:C,isUserInitialized:o,user:u,oAuthState:b,setOAuthState:S,oAuthCallbacks:Ce,recoveryFlowState:P,oAuthStateRef:E}),$e({client:C,user:u,webViewLoaded:s==="loaded",createWalletCallbacks:ue,recoverWalletCallbacks:pe,setWalletRecoveryCallbacks:me,recoveryFlowState:P,oAuthState:b,setRecoveryFlowState:k,setWallet:p,appStateVisible:t});let{customAuthStateIsSettled:ht}=Xe({client:C,user:u,isReady:o,customAuth:(Ae=e.config)==null?void 0:Ae.customAuth});return te.createElement(te.Fragment,null,te.createElement(ge.Provider,{value:{client:C,user:u,isReady:s!=="loading"&&o&&nt(b)&&ht,error:a,logout:yt,getAccessToken:vt,getIdentityToken:ft,wallet:_(_({},f),bt),solanaWallet:_(_({},w),wt),oAuthState:b,oAuthCallbacks:Ce,recoveryFlowState:P,setRecoveryFlowState:k,solanaRecoveryFlowState:q,setSolanaRecoveryFlowState:T,createWalletCallbacks:ue,recoverWalletCallbacks:pe,setWalletRecoveryCallbacks:me,createSolanaWalletCallbacks:Re,recoverSolanaWalletCallbacks:ke,setOAuthState:S,siweState:N,setSiweState:J,otpState:g,setOtpState:h,passkeyState:G,setPasskeyState:Y,farcasterState:I,setFarcasterState:pt,oAuthStateRef:E}},e.children),te.createElement(mr,{style:{width:0,height:0,overflow:"hidden"}},te.createElement(Le,{logLevel:e.logLevel,client:C,isClientReady:d,setWebViewState:i,webViewState:s})))};var nt=e=>e.status!=="loading",_e=(e={})=>{let{user:t,oAuthState:r,setOAuthState:o,oAuthCallbacks:l,client:a,oAuthStateRef:c}=fr(ge),s=e.action?e.action==="login":!t;br(()=>{l.current={onSuccess:e.onSuccess,onError:e.onError}},[e.onSuccess,e.onError]);let i=ct(n=>{var v;let u=x(n);return o({status:"error",error:u}),(v=e==null?void 0:e.onError)==null||v.call(e,u),u},[e==null?void 0:e.onError]);return{start:ct(function(w){return y(this,arguments,function*({provider:u,redirectUri:v,isLegacyAppleIosBehaviorEnabled:f=!1,disableSignup:p}){var m,g,h;o({status:"loading"}),c.current={disableSignup:p};try{if(t&&e.action==="login")throw new j({code:"attempted_login_with_oauth_while_already_logged_in",error:"Already logged in, if trying to link an OAuth account use `useLinkWithOAuth`"});if(!t&&e.action==="link")throw new j({code:"attempted_link_oauth_before_logged_in",error:"Must be logged in to link an OAuth account, use `useLoginWithOAuth`"});let{url:b}=yield a.auth.oauth.generateURL(u,B.createURL(v||"/")),S,E;if(Ee.OS==="ios"&&u==="apple"&&!f){let G=(m=new URL(b).searchParams.get("state"))!=null?m:"",Y=yield ut.signInAsync({state:G}).catch(I=>{throw I instanceof Error&&"code"in I&&I.code==="ERR_REQUEST_CANCELED"?new j({error:"Apple login was cancelled",code:s?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):I});if(!Y.authorizationCode)throw new j({error:"OAuth invalid credentials",code:s?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(s){let I=yield a.auth.oauth.loginWithCode(Y.authorizationCode,G,u,"raw",p?"no-signup":"login-or-sign-up");S=I.user,E=I.is_new_user}else S=yield a.auth.oauth.linkWithCode(Y.authorizationCode,G,u,"raw");return(g=e==null?void 0:e.onSuccess)==null||g.call(e,S,E),o({status:"done"}),S!=null?S:void 0}let P=Ee.OS==="android"?b.replace("x.com","twitter.com"):b,k=yield re.openAuthSessionAsync(P);if(Ee.OS==="android")return;if(k.type!=="success")throw[re.WebBrowserResultType.CANCEL,re.WebBrowserResultType.DISMISS].includes(k.type)?new j({error:"OAuth was cancelled",code:s?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):new j({error:"OAuth session failed",code:s?"failed_to_complete_login_with_oauth":"failed_to_complete_link_with_oauth"});let{queryParams:q}=B.parse(k.url),{privy_oauth_state:T,privy_oauth_code:N}=q;if(!N||!T)throw new j({error:"OAuth invalid credentials",code:s?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(s){let J=yield a.auth.oauth.loginWithCode(N,T,u,void 0,p?"no-signup":"login-or-sign-up");S=J.user,E=J.is_new_user}else S=yield a.auth.oauth.linkWithCode(N,T,u);return(h=e==null?void 0:e.onSuccess)==null||h.call(e,S,E),yield B.openURL(k.url.split("?")[0]),o({status:"done"}),S!=null?S:void 0}catch(b){i(b)}})},[t,a,o,i]),state:r}};function Ga(e){let{state:t,start:r}=_e(O(_({},e),{action:"login"}));return{state:t,login:r}}function Ya(e){let{state:t,start:r}=_e(O(_({},e),{action:"link"}));return{state:t,link:r}}function Xa(e){return _e(e)}var it=()=>{if(typeof lt!="string")throw new j({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 lt};function st(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:()=>y(this,null,function*(){return[]})}}var dt={get(e){return U.getItemAsync(e,{keychainAccessible:U.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},put(e,t){return U.setItemAsync(e,t,{keychainAccessible:U.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},del(e){return U.deleteItemAsync(e,{keychainAccessible:U.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},getKeys:()=>y(void 0,null,function*(){return[]})};function Za(e){return e.status==="connected"}function en(e){return e.status==="reconnecting"}function tn(e){return e.status==="connecting"}function rn(e){return e.status==="disconnected"}function on(e){return e.status==="not-created"}function an(e){return e.status==="creating"}function nn(e){return e.status==="error"}function sn(e){return e.status==="needs-recovery"}import{PrivyClientError as wr}from"@privy-io/js-sdk-core";var hr=e=>y(void 0,null,function*(){var o;let r=yield(yield import("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 wr({code:"failed_to_create_passkey",error:"Could not create passkey"});return O(_({},r),{type:(o=r.type)!=null?o:"public-key",clientExtensionResults:{}})});import{PrivyClientError as Sr}from"@privy-io/js-sdk-core";var gr=e=>y(void 0,null,function*(){var o;let r=yield(yield import("react-native-passkeys")).get({rpId:e.rpId,challenge:e.challenge,allowCredentials:e.allowCredentials,timeout:12e4});if(!r)throw new Sr({code:"no_passkey_found_for_challenge",error:"Could not find a matching passkey to login with"});return O(_({},r),{type:(o=r.type)!=null?o:"public-key",clientExtensionResults:{}})});function En(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 _n(e){var t,r,o,l;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:(l=e.allow_credentials)==null?void 0:l.map(({id:a,type:c,transports:s})=>({id:a,type:c,transports:s})),userVerification:e.user_verification}}export{_ as a,O as b,Er as c,y as d,Ue as e,x as f,ro as g,so as h,Ga as i,Ya as j,Xa as k,it as l,st as m,dt as n,A as o,ia as p,sa as q,va as r,fa as s,ba as t,wa as u,ha as v,Sa as w,ga as x,ge as y,ja as z,Na as A,Za as B,en as C,tn as D,rn as E,on as F,an as G,nn as H,sn as I,hr as J,gr as K,En as L,_n as M};
1
+ var gt=Object.defineProperty,Et=Object.defineProperties;var _t=Object.getOwnPropertyDescriptors;var oe=Object.getOwnPropertySymbols;var Oe=Object.prototype.hasOwnProperty,xe=Object.prototype.propertyIsEnumerable;var Pe=(e,t,r)=>t in e?gt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,_=(e,t)=>{for(var r in t||(t={}))Oe.call(t,r)&&Pe(e,r,t[r]);if(oe)for(var r of oe(t))xe.call(t,r)&&Pe(e,r,t[r]);return e},O=(e,t)=>Et(e,_t(t));var Er=(e,t)=>{var r={};for(var o in e)Oe.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(e!=null&&oe)for(var o of oe(e))t.indexOf(o)<0&&xe.call(e,o)&&(r[o]=e[o]);return r};var y=(e,t,r)=>new Promise((o,l)=>{var a=i=>{try{s(r.next(i))}catch(d){l(d)}},c=i=>{try{s(r.throw(i))}catch(d){l(d)}},s=i=>i.done?o(i.value):Promise.resolve(i.value).then(a,c);s((r=r.apply(e,t)).next())});import*as ut from"expo-apple-authentication";import{applicationId as lt}from"expo-application";import*as B from"expo-linking";import*as U from"expo-secure-store";import*as re from"expo-web-browser";import{useCallback as ct,useContext as fr,useEffect as br}from"react";import{Platform as Ee}from"react-native";import{PrivyClientError as j}from"@privy-io/js-sdk-core";import{digest as lr}from"expo-crypto";import te,{useState as W,useMemo as cr,createContext as ur,useCallback as ce,useRef as V,useEffect as pr}from"react";import{AppState as at,View as mr}from"react-native";import yr,{PrivyClientError as vr}from"@privy-io/js-sdk-core";var Ue={name:"@privy-io/expo",version:"0.29.2",description:"Expo client for the Privy Auth API",keywords:["authentication","authorization","identity","privacy","privy","user data","react-native","expo","web3"],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"}},main:"./dist/esm/index.js",source:"./src/index.ts",types:"./dist/index.d.ts",files:["dist/**/*","LICENSE","README.md"],scripts:{build:"npx tsup --clean --minify","check-types":"npx tsc --noEmit",clean:"rm -rf dist .turbo",dev:"npx tsup --watch",format:'eslint "src/**/*.{ts,tsx,js,jsx}" --fix',"generate-types":"npx tsup --dts-only",lint:'npx eslint "src/**/*.{ts,tsx,js,jsx}"',test:'jest --testMatch "**/test/**/*.test.ts"',"test:ci":"npm run test"},browserslist:["defaults","node >= 18","not op_mini all"],dependencies:{"@privy-io/js-sdk-core":"0.30.2","react-fast-compare":"^3.2.2",zustand:"^4.4.1"},devDependencies:{"@privy-io/eslint-config-custom":"*","@privy-io/tsconfig":"*","@simplewebauthn/types":"9.0.1","@svgr/core":"^8.1.0","@svgr/plugin-jsx":"^8.1.0","@svgr/plugin-svgo":"^8.1.0","@tsconfig/node16-strictest-esm":"^1.0.3","eslint-plugin-react-hooks":"^5.0.0-canary-7118f5dd7-20230705",tsup:"^6.2.3",typescript:"~5.5.3"},peerDependencies:{"@expo-google-fonts/inter":"*","@privy-io/expo-native-extensions":"0.0.3","expo-apple-authentication":"*","expo-application":"*","expo-constants":"*","expo-crypto":"*","expo-font":"*","expo-linking":"*","expo-secure-store":"*","expo-web-browser":"*",react:"*","react-native":"*","react-native-passkeys":"^0.3.0","react-native-safe-area-context":"*","react-native-svg":"*","react-native-webview":"*"},peerDependenciesMeta:{"@expo-google-fonts/inter":{optional:!0},"expo-font":{optional:!0}},publishConfig:{access:"public"}};import Ct from"react";import{useCallback as Rt,useEffect as Ie,useRef as kt}from"react";import{AppState as At}from"react-native";import Pt from"react-native-webview";var Le=({client:e,isClientReady:t,setWebViewState:r,webViewState:o,logLevel:l})=>{let a=kt(null);Ie(()=>{a.current&&o==="loaded"&&e.setMessagePoster(a.current)},[e,a.current,o==="loaded"]),Ie(()=>At.addEventListener("change",i=>y(void 0,null,function*(){a.current&&i==="active"&&((yield e.embeddedWallet.ping(500))||(a.current.reload(),r("reloading")))})).remove,[]);let c=Rt(s=>y(void 0,null,function*(){let{data:i}=s.nativeEvent;e.embeddedWallet.onMessage(JSON.parse(i))}),[e]);return t?Ct.createElement(Pt,{style:{flex:1},ref:a,cacheEnabled:!1,cacheMode:"LOAD_NO_CACHE",source:{uri:e.embeddedWallet.getURL()},webviewDebuggingEnabled:l==="DEBUG",onLoad:()=>r("loaded"),onError:console.error,onMessage:c}):null};import{useCallback as ye,useEffect as je,useMemo as ve}from"react";import{errorIndicatesRecoveryIsNeeded as xt,getAllUserEmbeddedSolanaWallets as Ut,PrivyClientError as $}from"@privy-io/js-sdk-core";import{getAllUserEmbeddedSolanaWallets as Me,getUserEmbeddedWallet as Ot}from"@privy-io/js-sdk-core";import{PrivyClientError as Q}from"@privy-io/js-sdk-core";function Te(a){return y(this,arguments,function*({client:e,setSolanaWallet:t,createSolanaWalletCallbacks:r,setSolanaRecoveryFlowState:o,opts:l}){var c,s,i;t({status:"creating"});try{let{user:d}=yield e.user.get(),n=Me(d),u=n[0];if(l!=null&&l.recoveryMethod&&l.recoveryMethod!=="privy")throw new Q({code:"embedded_wallet_creation_error",error:"Unsupported recovery method for solana wallet."});if(!(l!=null&&l.createAdditional)&&u)throw new Q({code:"embedded_wallet_creation_error",error:"Solana wallet already exists for this user. Set `createAdditional` to `true` to create another wallet"});let v,f;if(u){let w=Math.max(...n.map(g=>g.wallet_index),0)+1,m=yield e.embeddedWallet.createAdditionalSolana({primaryPublicKey:u.address,hdWalletIndex:w});v=m.provider,f=m.user}else{let w=(c=Ot(d))!=null?c:void 0;if(w&&w.recovery_method!=="privy")throw new Q({code:"embedded_wallet_creation_error",error:"Existing wallet uses unsupported recovery method for solana wallet."});let m=yield e.embeddedWallet.createSolana({ethereumAccount:w});v=m.provider,f=m.user}let p=Me(f)[0];if(!p)throw new Q({code:"embedded_wallet_creation_error",error:"Unknown error creating solana wallet"});return(i=(s=r.current)==null?void 0:s.onSuccess)==null||i.call(s,v),t({status:"connected",publicKey:p.public_key}),o({status:"initial"}),v}catch(d){let n=d instanceof Error?d.message:"Error creating embedded wallet";throw t({status:"error",error:n}),o({status:"initial"}),new Q({code:"embedded_wallet_creation_error",error:n})}})}import{PrivyClientError as D}from"@privy-io/js-sdk-core";function ae(d){return y(this,arguments,function*({client:e,account:t,setWallet:r,recoverWalletCallbacks:o,recoveryMethod:l,setRecoveryFlowState:a,password:c,recoveryToken:s,recoverySecretOverride:i}){var n,u,v,f;if(!t)throw new D({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});switch(l){case"user-passcode":if(!c)throw new D({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!s)throw new D({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!i)throw new D({code:"embedded_wallet_recovery_error",error:"Record name is required for icloud recovery method"});break}r({status:"connecting",account:t});try{let p=yield e.embeddedWallet.getProvider(t,c,s,i);return r({status:"connected",provider:p,account:t}),a({status:"initial"}),(u=(n=o.current)==null?void 0:n.onSuccess)==null||u.call(n,p),p}catch(p){r({status:"needs-recovery",account:t}),a({status:"initial"});let w=new D({code:"embedded_wallet_recovery_error",error:p instanceof Error?p.message:"Error recovering embedded wallet"});throw(f=(v=o.current)==null?void 0:v.onError)==null||f.call(v,w),w}})}function Fe(a){return y(this,arguments,function*({client:e,primaryAcount:t,setSolanaWallet:r,recoverSolanaWalletCallbacks:o,setSolanaRecoveryFlowState:l}){var c,s,i,d;if(!t)throw new D({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});r({status:"connecting"});try{let n=yield e.embeddedWallet.getSolanaProvider(t);return r({status:"connected",publicKey:n._publicKey}),l({status:"initial"}),(s=(c=o.current)==null?void 0:c.onSuccess)==null||s.call(c,n),n}catch(n){r({status:"needs-recovery"}),l({status:"initial"});let u=new D({code:"embedded_wallet_recovery_error",error:n instanceof Error?n.message:"Error recovering embedded wallet"});throw(d=(i=o.current)==null?void 0:i.onError)==null||d.call(i,u),u}})}var Ne=({client:e,user:t,solanaWallet:r,setSolanaWallet:o,setSolanaRecoveryFlowState:l,webViewState:a,createSolanaWalletCallbacks:c,recoverSolanaWalletCallbacks:s})=>{let i=ve(()=>Ut(t),[t]),d=ve(()=>i[0],[i]),n=ve(()=>i.map(p=>({address:p.address,publicKey:p.address,walletIndex:p.wallet_index,getProvider:()=>e.embeddedWallet.getSolanaProvider(p,d==null?void 0:d.public_key)})),[i,d,e]),u=ye(p=>y(void 0,null,function*(){return yield Te({client:e,setSolanaWallet:o,createSolanaWalletCallbacks:c,setSolanaRecoveryFlowState:l,opts:p})}),[e,c]),v=ye(()=>y(void 0,null,function*(){if(!d)throw new $({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});return Fe({client:e,primaryAcount:d,setSolanaWallet:o,recoverSolanaWalletCallbacks:s,setSolanaRecoveryFlowState:l})}),[e,d]),f=ye(()=>y(void 0,null,function*(){if(!d)throw o({status:"not-created"}),new $({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});o(p=>p.status==="connected"?{status:"reconnecting"}:{status:"connecting"});try{let p=yield e.embeddedWallet.getSolanaProvider(d);return o({status:"connected",publicKey:d.public_key}),p}catch(p){throw xt(p)?(o({status:"needs-recovery"}),new $({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):p instanceof Error?(o({status:"error",error:p.message}),new $({code:"unknown_embedded_wallet_error",error:p.message})):(o({status:"error",error:"Error loading embedded wallet"}),new $({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,d]);return je(()=>{if(!t&&r.status!=="disconnected")return o({status:"disconnected"});a==="loaded"&&f().catch(()=>{})},[a,t,d]),je(()=>{r.status==="error"&&r.error.includes("User must be logged in")&&f()},[r.status]),{create:u,recover:v,getProvider:f,wallets:n}};import{useCallback as ee,useEffect as ze,useMemo as Kt}from"react";import{getUserEmbeddedSolanaWallet as Be,throwIfInvalidRecoveryUpgradePath as qt}from"@privy-io/js-sdk-core";import{errorIndicatesRecoveryIsNeeded as Ht,getUserEmbeddedWallet as zt,PrivyClientError as R}from"@privy-io/js-sdk-core";import{getUserEmbeddedWallet as It}from"@privy-io/js-sdk-core";import{PrivyClientError as ne}from"@privy-io/js-sdk-core";function ie(n){return y(this,arguments,function*({client:e,setWallet:t,createWalletCallbacks:r,recoveryMethod:o,setRecoveryFlowState:l,password:a,recoveryToken:c,recoverySecretOverride:s,iCloudRecordNameOverride:i,solanaAccount:d}){var v,f;switch(o){case"user-passcode":if(!a)throw new ne({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!c)throw new ne({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!s||!i)throw new ne({code:"embedded_wallet_recovery_error",error:"iCloud recovery failed due to inability to store credentials"});break}t({status:"creating",account:null});let u=o==="icloud"?"icloud-native":o;try{let{provider:p,user:w}=yield e.embeddedWallet.create(a,u,c,s,i,d),m=It(w);return(f=(v=r.current)==null?void 0:v.onSuccess)==null||f.call(v,p),t({status:"connected",provider:p,account:m}),l({status:"initial"}),p}catch(p){let w=p instanceof Error?p.message:"Error creating embedded wallet";throw t({status:"error",error:w,account:null}),l({status:"initial"}),new ne({code:"embedded_wallet_creation_error",error:w})}})}import{Platform as De}from"react-native";import{PrivyClientError as M}from"@privy-io/js-sdk-core";function Ve(){return y(this,null,function*(){try{return yield import("@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 fe(o){return y(this,arguments,function*({user:e,appId:t,client:r}){var s;if(De.OS==="android")throw new M({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let l=yield Ve(),a=yield r.recovery.icloudAuth.getICloudConfiguration("expo-ios");if(!(a==null?void 0:a.container_identifier))throw new M({code:"embedded_wallet_recovery_error",error:"An iCloud Container ID must be specified in the Privy Dashboard."});try{let{recoverySecret:i,iCloudRecordName:d}=yield l.writeRecoverySecretToICloud({containerId:a.container_identifier,appId:t,userId:e.id});return{recoverySecret:i,iCloudRecordName:d}}catch(i){if(i instanceof Error){let d=(s=i.message.split("Caused by: ")[1])!=null?s:"Error writing to iCloud";throw new M({code:"embedded_wallet_recovery_error",error:d})}throw new M({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}function Ke(r){return y(this,arguments,function*({walletAddress:e,client:t}){var i;if(De.OS==="android")throw new M({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let o=yield Ve(),a=(yield t.recovery.getRecoveryKeyMaterial(e)).icloud_record_name;if(!a)throw new M({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 M({code:"embedded_wallet_recovery_error",error:"An iCloud Container ID must be specified in the Privy Dashboard."});try{let{recoverySecret:d}=yield o.readRecoverySecretFromICloud({containerId:s,recordName:a});return{recoverySecret:d}}catch(d){if(d instanceof Error){let n=(i=d.message.split("Caused by: ")[1])!=null?i:"Error writing to iCloud";throw new M({code:"embedded_wallet_recovery_error",error:n})}throw new M({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}import*as se from"expo-linking";import*as He from"expo-web-browser";import{Platform as Nt}from"react-native";import{PrivyClientError as Z}from"@privy-io/js-sdk-core";import Lt from"react-fast-compare";var qe=e=>t=>e(r=>Lt(r,t)?r:t);import{PrivyApiError as Mt,PrivyClientError as Tt}from"@privy-io/js-sdk-core";function x(e){return e instanceof Error||e instanceof Mt||e instanceof Tt?e:typeof e=="string"?new Error(e):new Error("Unknown error")}var ro=e=>new Promise(t=>setTimeout(t,e));import{useEffect as Ft,useRef as jt}from"react";import{AppState as be}from"react-native";function so(){let e=jt(be.currentState);Ft(()=>be.addEventListener("change",o=>{e.current=o}).remove,[]);function t(){return be.currentState}return{appState:e,getCurrentAppState:t}}function de(l){return y(this,arguments,function*({provider:e,redirectUri:t,client:r,onError:o}){try{let a;switch(e){case"google-drive":{let{url:d}=yield r.recovery.auth.generateURL(se.createURL(t||"/"));a=d;break}default:throw new Z({error:"OAuth invalid provider",code:"embedded_wallet_recovery_error"})}let c=yield He.openAuthSessionAsync(a);if(Nt.OS==="android")return;if(c.type!=="success")throw new Z({error:"Recovery OAuth session failed",code:"embedded_wallet_recovery_error"});let{queryParams:s}=se.parse(c.url),i;switch(e){case"google-drive":{let{privy_oauth_state:d,privy_oauth_code:n}=s;if(!n||!d)throw new Z({error:"Recovery OAuth invalid credentials",code:"embedded_wallet_recovery_error"});i=yield we({oAuthCode:n,oAuthState:d,client:r});break}default:throw new Z({error:"Recovery OAuth invalid provider",code:"embedded_wallet_recovery_error"})}return i}catch(a){throw o==null||o(x(a)),a}})}function we(o){return y(this,arguments,function*({oAuthCode:e,oAuthState:t,client:r}){let{access_token:l}=yield r.recovery.auth.authorize(e,t);if(!l)throw new Z({error:"OAuth invalid credentials",code:"login_with_oauth_returned_with_invalid_credentials"});return l})}import{getUserEmbeddedWallet as Dt,PrivyClientError as Vt}from"@privy-io/js-sdk-core";function le(a){return y(this,arguments,function*({client:e,recoveryInput:t,setWalletRecoveryCallbacks:r,setRecoveryFlowState:o,setWallet:l}){var c,s,i,d;try{let{provider:n,user:u}=yield e.embeddedWallet.setRecovery(t),v=Dt(u);return l({status:"connected",provider:n,account:v}),(s=(c=r.current)==null?void 0:c.onSuccess)==null||s.call(c,n),o({status:"initial"}),n}catch(n){let u=new Vt({code:"embedded_wallet_set_recovery_error",error:n instanceof Error?n.message:"Error setting password on embedded wallet"});throw(d=(i=r.current)==null?void 0:i.onError)==null||d.call(i,u),o({status:"initial"}),u}})}function Je(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}:{recoveryMethod:e.recoveryMethod}}var Ge=({client:e,user:t,appId:r,wallet:o,setWallet:l,setRecoveryFlowState:a,webViewState:c,createWalletCallbacks:s,recoverWalletCallbacks:i,setWalletRecoveryCallbacks:d})=>{let n=Kt(()=>zt(t),[t]),u=ee(m=>y(void 0,null,function*(){var k,q;if(n)throw new R({error:"This user already has an embedded wallet",code:"embedded_wallet_already_exists"});let{user:g}=yield e.user.get(),{password:h,recoveryMethod:b}=Je(m),S,E,P;if(b==="google-drive"&&(S=yield de({provider:b,client:e,onError:(k=s.current)==null?void 0:k.onError}),a({status:"creating-wallet"}),!S))return null;if(b==="icloud"){if(!g)throw new R({code:"embedded_wallet_recovery_error",error:"User must be loaded before creating a wallet with iCloud."});let{recoverySecret:T,iCloudRecordName:N}=yield fe({user:g,appId:r,client:e});E=T,P=N}return yield ie({client:e,setWallet:l,createWalletCallbacks:s,recoveryMethod:b,setRecoveryFlowState:a,password:h,recoverySecretOverride:E,iCloudRecordNameOverride:P,solanaAccount:(q=Be(g))!=null?q:void 0})}),[e,n,t]),v=ee(m=>y(void 0,null,function*(){var b;if(o.status!=="connected")throw new R({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"});if(!n)throw new R({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});if(Be(t))throw new R({code:"embedded_wallet_set_recovery_error",error:"Cannot set user-controlled recovery for a user with an embedded Solana wallet."});qt({currentRecoveryMethod:n.recovery_method,upgradeToRecoveryMethod:m.recoveryMethod});let g,h;switch(m.recoveryMethod){case"privy":h=O(_({},m),{wallet:n});break;case"user-passcode":h=O(_({},m),{wallet:n,password:m.password});break;case"google-drive":if(g=yield de({provider:m.recoveryMethod,client:e,onError:(b=d.current)==null?void 0:b.onError}),a({status:"upgrading-recovery"}),!g)return null;h={recoveryMethod:"google-drive",wallet:n,recoveryAccessToken:g};break;case"icloud":if(!t)throw new R({code:"embedded_wallet_recovery_error",error:"User must be loaded before backing up to iCloud."});let{recoverySecret:S,iCloudRecordName:E}=yield fe({user:t,appId:r,client:e});h={recoveryMethod:"icloud-native",recoverySecretOverride:S,iCloudRecordNameOverride:E,wallet:n};break;default:throw new R({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}return le({client:e,recoveryInput:h,setWalletRecoveryCallbacks:d,setRecoveryFlowState:a,setWallet:l})}),[e,n,o.status,t]),f=ee(m=>y(void 0,null,function*(){return v({recoveryMethod:"user-passcode",password:m})}),[e,n,o.status]),p=ee(m=>y(void 0,null,function*(){var E;if(!n)throw new R({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{password:g,recoveryMethod:h}=Je(m),b,S;if(h==="google-drive"&&(b=yield de({provider:h,client:e,onError:(E=i.current)==null?void 0:E.onError}),a({status:"recovering"}),!b))return null;if(h==="icloud"){if(!t)throw new R({code:"embedded_wallet_recovery_error",error:"User must be loaded before recovering via iCloud."});let{recoverySecret:P}=yield Ke({client:e,walletAddress:n.address});S=P}return ae({client:e,account:n,setWallet:l,recoverWalletCallbacks:i,recoveryMethod:h,setRecoveryFlowState:a,password:g,recoveryToken:b,recoverySecretOverride:S})}),[e,n]),w=ee(()=>y(void 0,null,function*(){if(!n)throw l({status:"not-created",account:null}),new R({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});l(m=>m.status==="connected"?{status:"reconnecting",account:n}:{status:"connecting",account:n});try{let m=yield e.embeddedWallet.getProvider(n);return l({status:"connected",provider:m,account:n}),m}catch(m){throw Ht(m)?(l({status:"needs-recovery",account:n}),new R({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):m instanceof Error?(l({status:"error",error:m.message,account:n}),new R({code:"unknown_embedded_wallet_error",error:m.message})):(l({status:"error",error:"Error loading embedded wallet",account:n}),new R({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,n]);return ze(()=>{if(!t&&o.status!=="disconnected")return l({status:"disconnected",account:null});c==="loaded"&&w().catch(()=>{})},[c,t,n]),ze(()=>{o.status==="error"&&o.error.includes("User must be logged in")&&w()},[o.status]),{create:u,recover:p,setPassword:f,setRecovery:v,getProvider:w}};import{useEffect as Bt,useState as Jt}from"react";import{PrivyClientError as Ye}from"@privy-io/js-sdk-core";var Xe=({client:e,user:t,isReady:r,customAuth:o})=>{let[l,a]=Jt({status:"initial"});return Bt(()=>{(()=>y(void 0,null,function*(){if(!(o!=null&&o.enabled)){a({status:"not-enabled"});return}a({status:"loading"});let{getCustomAccessToken:s,isLoading:i}=o;if(!(!r||i))try{let d=yield s();if(!d&&t){yield e.auth.logout(),a({status:"done"});return}if(!d){a({status:"done"});return}if(t){a({status:"done"});return}if(!(yield e.auth.customProvider.syncWithToken(d))){yield e.auth.logout(),a({status:"error",error:new Ye({error:"Failed to sync with custom auth provider",code:"third_party_auth_error"})});return}a({status:"done"})}catch(d){if(console.log("Error syncing with custom auth provider",d),a({status:"error",error:d}),t)throw yield e.auth.logout(),new Ye({error:"Third-party auth failed",code:"third_party_auth_error"})}}))()},[e,t,r,o==null?void 0:o.enabled,o==null?void 0:o.getCustomAccessToken,o==null?void 0:o.isLoading]),{customAuthState:l,customAuthStateIsSettled:l.status!=="loading"&&l.status!=="initial"}};import*as H from"expo-linking";import{useCallback as Gt,useEffect as Yt}from"react";import{Platform as Xt}from"react-native";var Qe=({client:e,user:t,isUserInitialized:r,oAuthState:o,oAuthCallbacks:l,setOAuthState:a,recoveryFlowState:c,oAuthStateRef:s})=>{let i=H.useURL(),d=Gt(n=>{var v,f;let u=x(n);a({status:"error",error:u}),(f=(v=l.current).onError)==null||f.call(v,u)},[a]);return Yt(()=>{function n(){return y(this,null,function*(){var p,w;if(!i||o.status!=="loading"||c.status!=="initial")return;let{queryParams:u}=H.parse(i),{privy_oauth_state:v,privy_oauth_code:f}=u;if(!f||!v){a({status:"done"});return}try{let m,g;if(t)m=yield e.auth.oauth.linkWithCode(f,v);else{let h=yield e.auth.oauth.loginWithCode(f,v,void 0,void 0,s.current.disableSignup?"no-signup":"login-or-sign-up");m=h.user,g=!!h.is_new_user}return(w=(p=l.current).onSuccess)==null||w.call(p,m,g),s.current={},a({status:"done"}),yield H.openURL(i.split("?")[0])}catch(m){s.current={},d(m)}})}Xt.OS==="android"&&r&&n()},[i,r])};import*as z from"expo-linking";import{useCallback as Qt,useEffect as $t,useMemo as Zt}from"react";import{Platform as er}from"react-native";import{getUserEmbeddedSolanaWallet as tr,getUserEmbeddedWallet as rr}from"@privy-io/js-sdk-core";var $e=({client:e,user:t,createWalletCallbacks:r,recoverWalletCallbacks:o,setWalletRecoveryCallbacks:l,recoveryFlowState:a,oAuthState:c,setRecoveryFlowState:s,setWallet:i,appStateVisible:d,webViewLoaded:n})=>{let u=z.useURL(),v=Zt(()=>rr(t),[t]),f=Qt(p=>{var m,g,h,b;let w=x(p);a.status==="creating-wallet"?(g=(m=r.current).onError)==null||g.call(m,x(w)):(b=(h=o.current).onError)==null||b.call(h,x(w)),s({status:"initial"})},[a]);return $t(()=>{function p(){return y(this,null,function*(){var h;if(!u&&a.status!=="initial"&&d&&f(new Error("Recovery OAuth session failed")),!u||a.status==="initial"||c.status!=="initial"||!d||!n)return;let{queryParams:w}=z.parse(u),{privy_oauth_state:m,privy_oauth_code:g}=w;if(!(!g||!m)){yield z.openURL(u.split("?")[0]);try{let b=yield we({oAuthCode:g,oAuthState:m,client:e});if(a.status==="creating-wallet"){let S=(h=tr(t))!=null?h:void 0;yield ie({client:e,setWallet:i,createWalletCallbacks:r,recoveryMethod:"google-drive",setRecoveryFlowState:s,recoveryToken:b,solanaAccount:S})}else if(a.status==="upgrading-recovery"){if(!v)throw new Error("Embedded wallet not found");yield le({client:e,recoveryInput:{recoveryMethod:"google-drive",wallet:v,recoveryAccessToken:b},setWalletRecoveryCallbacks:l,setRecoveryFlowState:s,setWallet:i})}else yield ae({client:e,account:v,setWallet:i,recoverWalletCallbacks:o,recoveryMethod:"google-drive",setRecoveryFlowState:s,recoveryToken:b})}catch(b){f(b)}}})}er.OS==="android"&&p()},[u,a.status,d,n])};import{useEffect as or}from"react";var Ze=({client:e,isUserInitialized:t,setIsUserInitialized:r,setError:o})=>{or(()=>{t||(()=>y(void 0,null,function*(){try{yield e.initialize()}catch(a){o(a instanceof Error?a:new Error(String(a)))}try{yield e.user.get()}catch(a){}finally{r(!0)}}))()},[e,t,o,r])};import{useEffect as nr}from"react";import{create as ir}from"zustand";var A=class extends Error{constructor(r,o){super(o);this.code=r,this.error=o}};var he={success:e=>({value:e}),error:e=>({error:e})};var et=e=>{let t=Array.from(new Set(e));return t.length===0?he.error(new A("no_login_methods_available","No login methods available")):he.success(t)},Se=e=>{let t=e.length,r=e.every(o=>o==="sms"||o==="email");return t<=2&&r?e[0]:null},ia=(e,t)=>{if(e.length!==2)return null;let[r,o]=e;return t===r?o:r},sa={email:"email",sms:"phone",google:"Google",apple:"Apple",discord:"Discord",twitter:"X",github:"Github",spotify:"Spotify",instagram:"Instagram",tiktok:"Tiktok",linkedin:"LinkedIn"};function tt(e){return new Promise((t,r)=>{e({resolve:t,reject:r})})}function ar(e,t){return{resolve:r=>{t(),e.resolve(r)},reject:r=>{t(),e.reject(r)}}}function rt(e,t,r){let o=setTimeout(()=>{e.reject(t())},r);return ar(e,()=>{clearTimeout(o)})}var sr=1e3*60*5,F=ir()((e,t)=>({privyElementsConfig:null,loginPromiseResolvers:null,isUIMounted:!1,activeLoginMethod:null,updateUIMounted:r=>e({isUIMounted:r}),openLoginFlow:(r,o,l,a)=>tt(c=>{var u,v,f;let s=o.getAppConfig();if(!s)return c.reject(new A("privy_not_ready","Privy is not ready"));if(l!==null)return c.reject(new A("user_already_logged_in","User is already logged in"));if(!t().isUIMounted)return c.reject(new A("privy_elements_not_ready","Privy Elements is not mounted"));if(t().loginPromiseResolvers!==null)return c.reject(new A("existing_login_flow_in_progress","A login flow is already in progress"));let i=et(r.loginMethods);if(i.error)return c.reject(i.error);let d={loginMethods:i.value,appearance:{logo:(f=(v=(u=r.appearance)==null?void 0:u.logo)!=null?v:s.logo_url)!=null?f:void 0}},n=rt(c,()=>(e({privyElementsConfig:null,loginPromiseResolvers:null}),new A("login_flow_timeout","The login flow timed out")),sr);a(),e({loginPromiseResolvers:n,privyElementsConfig:d,activeLoginMethod:Se(d.loginMethods)})}),closeLoginFlow:()=>{var r;return(r=t().loginPromiseResolvers)==null||r.reject(new A("login_flow_closed","The login flow was closed")),e({privyElementsConfig:null,loginPromiseResolvers:null})},goBack:()=>{let{activeLoginMethod:r,privyElementsConfig:o,updateActiveLoginMethod:l,closeLoginFlow:a}=t();if(!o){a();return}let c=Se(o.loginMethods)===null;r===null||!c?a():l(null)},updateActiveLoginMethod:r=>e({activeLoginMethod:r})})),va=()=>F(e=>e.privyElementsConfig),fa=()=>F(e=>e.openLoginFlow),ba=()=>F(e=>e.closeLoginFlow),wa=()=>F(e=>e.goBack),ha=()=>F(e=>[e.activeLoginMethod,e.updateActiveLoginMethod]),dr=e=>{let{loginPromiseResolvers:t}=F.getState();t==null||t.resolve(e)},ot=()=>dr,Sa=()=>{let e=F(t=>t.updateUIMounted);nr(()=>(e(!0),()=>{e(!1)}),[e])},ga=()=>F(e=>e.privyElementsConfig!==null);var ge=ur({}),K;function ja(e){return K?K.getAccessToken():e!=null&&e.strict?Promise.reject(new vr({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 Na=e=>{var Ae;let[t,r]=W(at.currentState==="active");pr(()=>{let L=at.addEventListener("change",St=>{r(St==="active")});return()=>{L.remove()}},[]);let[o,l]=W(!1),[a,c]=W(null),[s,i]=W("loading"),[d,n]=W(!1),[u,v]=W(null),[f,p]=W({status:"disconnected",account:null}),[w,m]=W({status:"disconnected"}),[g,h]=W({status:"initial"}),[b,S]=W({status:"initial"}),E=V({}),[P,k]=W({status:"initial"}),[q,T]=W({status:"initial"}),[N,J]=W({status:"initial"}),[G,Y]=W({status:"initial"}),[I,pt]=W({status:"initial"}),Ce=V({}),ue=V({}),pe=V({}),me=V({}),Re=V({}),ke=V({}),mt=ot(),X=ce(L=>{if(L){mt(L),qe(v)(L);return}v(null),h({status:"initial"}),S({status:"initial"}),p({status:"disconnected",account:null})},[]),C=cr(()=>{let L=e.storage||dt;return e.client?(K=e.client,K.setCallbacks({setUser:X,setIsReady:n}),K):(K=new yr({storage:st(L),appId:e.appId,clientId:e.clientId,supportedChains:e.supportedChains,nativeAppIdentifier:it(),baseUrl:e.baseUrl,sdkVersion:`expo:${Ue.version}`,callbacks:{setUser:X,setIsReady:n},logLevel:e.logLevel,crypto:{digest:lr}}),K)},[e.client,e.storage,e.appId,e.clientId,e.baseUrl,e.supportedChains,e.logLevel,X]),yt=ce(()=>(X(null),C.auth.logout()),[X,C]),vt=ce(()=>y(void 0,null,function*(){try{return yield C.getAccessToken()}catch(L){return console.debug(L),null}}),[C]),ft=ce(()=>C.getIdentityToken(),[C]);Ze({client:C,isUserInitialized:o,setIsUserInitialized:l,setError:c});let bt=Ge({client:C,user:u,appId:e.appId,webViewState:s,createWalletCallbacks:ue,recoverWalletCallbacks:pe,setWalletRecoveryCallbacks:me,setRecoveryFlowState:k,wallet:f,setWallet:p}),wt=Ne({client:C,user:u,webViewState:s,createSolanaWalletCallbacks:Re,recoverSolanaWalletCallbacks:ke,setSolanaRecoveryFlowState:T,solanaWallet:w,setSolanaWallet:m});Qe({client:C,isUserInitialized:o,user:u,oAuthState:b,setOAuthState:S,oAuthCallbacks:Ce,recoveryFlowState:P,oAuthStateRef:E}),$e({client:C,user:u,webViewLoaded:s==="loaded",createWalletCallbacks:ue,recoverWalletCallbacks:pe,setWalletRecoveryCallbacks:me,recoveryFlowState:P,oAuthState:b,setRecoveryFlowState:k,setWallet:p,appStateVisible:t});let{customAuthStateIsSettled:ht}=Xe({client:C,user:u,isReady:o,customAuth:(Ae=e.config)==null?void 0:Ae.customAuth});return te.createElement(te.Fragment,null,te.createElement(ge.Provider,{value:{client:C,user:u,isReady:s!=="loading"&&o&&nt(b)&&ht,error:a,logout:yt,getAccessToken:vt,getIdentityToken:ft,wallet:_(_({},f),bt),solanaWallet:_(_({},w),wt),oAuthState:b,oAuthCallbacks:Ce,recoveryFlowState:P,setRecoveryFlowState:k,solanaRecoveryFlowState:q,setSolanaRecoveryFlowState:T,createWalletCallbacks:ue,recoverWalletCallbacks:pe,setWalletRecoveryCallbacks:me,createSolanaWalletCallbacks:Re,recoverSolanaWalletCallbacks:ke,setOAuthState:S,siweState:N,setSiweState:J,otpState:g,setOtpState:h,passkeyState:G,setPasskeyState:Y,farcasterState:I,setFarcasterState:pt,oAuthStateRef:E}},e.children),te.createElement(mr,{style:{width:0,height:0,overflow:"hidden"}},te.createElement(Le,{logLevel:e.logLevel,client:C,isClientReady:d,setWebViewState:i,webViewState:s})))};var nt=e=>e.status!=="loading",_e=(e={})=>{let{user:t,oAuthState:r,setOAuthState:o,oAuthCallbacks:l,client:a,oAuthStateRef:c}=fr(ge),s=e.action?e.action==="login":!t;br(()=>{l.current={onSuccess:e.onSuccess,onError:e.onError}},[e.onSuccess,e.onError]);let i=ct(n=>{var v;let u=x(n);return o({status:"error",error:u}),(v=e==null?void 0:e.onError)==null||v.call(e,u),u},[e==null?void 0:e.onError]);return{start:ct(function(w){return y(this,arguments,function*({provider:u,redirectUri:v,isLegacyAppleIosBehaviorEnabled:f=!1,disableSignup:p}){var m,g,h;o({status:"loading"}),c.current={disableSignup:p};try{if(t&&e.action==="login")throw new j({code:"attempted_login_with_oauth_while_already_logged_in",error:"Already logged in, if trying to link an OAuth account use `useLinkWithOAuth`"});if(!t&&e.action==="link")throw new j({code:"attempted_link_oauth_before_logged_in",error:"Must be logged in to link an OAuth account, use `useLoginWithOAuth`"});let{url:b}=yield a.auth.oauth.generateURL(u,B.createURL(v||"/")),S,E;if(Ee.OS==="ios"&&u==="apple"&&!f){let G=(m=new URL(b).searchParams.get("state"))!=null?m:"",Y=yield ut.signInAsync({state:G}).catch(I=>{throw I instanceof Error&&"code"in I&&I.code==="ERR_REQUEST_CANCELED"?new j({error:"Apple login was cancelled",code:s?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):I});if(!Y.authorizationCode)throw new j({error:"OAuth invalid credentials",code:s?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(s){let I=yield a.auth.oauth.loginWithCode(Y.authorizationCode,G,u,"raw",p?"no-signup":"login-or-sign-up");S=I.user,E=I.is_new_user}else S=yield a.auth.oauth.linkWithCode(Y.authorizationCode,G,u,"raw");return(g=e==null?void 0:e.onSuccess)==null||g.call(e,S,E),o({status:"done"}),S!=null?S:void 0}let P=Ee.OS==="android"?b.replace("x.com","twitter.com"):b,k=yield re.openAuthSessionAsync(P);if(Ee.OS==="android")return;if(k.type!=="success")throw[re.WebBrowserResultType.CANCEL,re.WebBrowserResultType.DISMISS].includes(k.type)?new j({error:"OAuth was cancelled",code:s?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):new j({error:"OAuth session failed",code:s?"failed_to_complete_login_with_oauth":"failed_to_complete_link_with_oauth"});let{queryParams:q}=B.parse(k.url),{privy_oauth_state:T,privy_oauth_code:N}=q;if(!N||!T)throw new j({error:"OAuth invalid credentials",code:s?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(s){let J=yield a.auth.oauth.loginWithCode(N,T,u,void 0,p?"no-signup":"login-or-sign-up");S=J.user,E=J.is_new_user}else S=yield a.auth.oauth.linkWithCode(N,T,u);return(h=e==null?void 0:e.onSuccess)==null||h.call(e,S,E),yield B.openURL(k.url.split("?")[0]),o({status:"done"}),S!=null?S:void 0}catch(b){i(b)}})},[t,a,o,i]),state:r}};function Ga(e){let{state:t,start:r}=_e(O(_({},e),{action:"login"}));return{state:t,login:r}}function Ya(e){let{state:t,start:r}=_e(O(_({},e),{action:"link"}));return{state:t,link:r}}function Xa(e){return _e(e)}var it=()=>{if(typeof lt!="string")throw new j({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 lt};function st(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:()=>y(this,null,function*(){return[]})}}var dt={get(e){return U.getItemAsync(e,{keychainAccessible:U.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},put(e,t){return U.setItemAsync(e,t,{keychainAccessible:U.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},del(e){return U.deleteItemAsync(e,{keychainAccessible:U.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},getKeys:()=>y(void 0,null,function*(){return[]})};function Za(e){return e.status==="connected"}function en(e){return e.status==="reconnecting"}function tn(e){return e.status==="connecting"}function rn(e){return e.status==="disconnected"}function on(e){return e.status==="not-created"}function an(e){return e.status==="creating"}function nn(e){return e.status==="error"}function sn(e){return e.status==="needs-recovery"}import{PrivyClientError as wr}from"@privy-io/js-sdk-core";var hr=e=>y(void 0,null,function*(){var o;let r=yield(yield import("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 wr({code:"failed_to_create_passkey",error:"Could not create passkey"});return O(_({},r),{type:(o=r.type)!=null?o:"public-key",clientExtensionResults:{}})});import{PrivyClientError as Sr}from"@privy-io/js-sdk-core";var gr=e=>y(void 0,null,function*(){var o;let r=yield(yield import("react-native-passkeys")).get({rpId:e.rpId,challenge:e.challenge,allowCredentials:e.allowCredentials,timeout:12e4});if(!r)throw new Sr({code:"no_passkey_found_for_challenge",error:"Could not find a matching passkey to login with"});return O(_({},r),{type:(o=r.type)!=null?o:"public-key",clientExtensionResults:{}})});function En(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 _n(e){var t,r,o,l;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:(l=e.allow_credentials)==null?void 0:l.map(({id:a,type:c,transports:s})=>({id:a,type:c,transports:s})),userVerification:e.user_verification}}export{_ as a,O as b,Er as c,y as d,Ue as e,x as f,ro as g,so as h,Ga as i,Ya as j,Xa as k,it as l,st as m,dt as n,A as o,ia as p,sa as q,va as r,fa as s,ba as t,wa as u,ha as v,Sa as w,ga as x,ge as y,ja as z,Na as A,Za as B,en as C,tn as D,rn as E,on as F,an as G,nn as H,sn as I,hr as J,gr as K,En as L,_n as M};