@privy-io/expo 0.38.0 → 0.39.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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 Rt=Object.defineProperty,Ot=Object.defineProperties;var Wt=Object.getOwnPropertyDescriptors;var ae=Object.getOwnPropertySymbols;var Ue=Object.prototype.hasOwnProperty,Ie=Object.prototype.propertyIsEnumerable;var xe=(e,t,r)=>t in e?Rt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,E= exports.a =(e,t)=>{for(var r in t||(t={}))Ue.call(t,r)&&xe(e,r,t[r]);if(ae)for(var r of ae(t))Ie.call(t,r)&&xe(e,r,t[r]);return e},W= exports.b =(e,t)=>Ot(e,Wt(t));var Ir=(e,t)=>{var r={};for(var o in e)Ue.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(e!=null&&ae)for(var o of ae(e))t.indexOf(o)<0&&Ie.call(e,o)&&(r[o]=e[o]);return r};var y=(e,t,r)=>new Promise((o,a)=>{var n=i=>{try{s(r.next(i))}catch(c){a(c)}},d=i=>{try{s(r.throw(i))}catch(c){a(c)}},s=i=>i.done?o(i.value):Promise.resolve(i.value).then(n,d);s((r=r.apply(e,t)).next())});var _expoappleauthentication = require('expo-apple-authentication'); var ne = _interopRequireWildcard(_expoappleauthentication);var _expoapplication = require('expo-application');var _expolinking = require('expo-linking'); var X = _interopRequireWildcard(_expolinking); var D = _interopRequireWildcard(_expolinking); var B = _interopRequireWildcard(_expolinking); var G = _interopRequireWildcard(_expolinking);var _exposecurestore = require('expo-secure-store'); var U = _interopRequireWildcard(_exposecurestore);var _expowebbrowser = require('expo-web-browser'); var ie = _interopRequireWildcard(_expowebbrowser); var Be = _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 Le={name:"@privy-io/expo",version:"0.38.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"},"./smart-wallets":{require:"./dist/smart-wallets.js",import:"./dist/esm/smart-wallets.js",types:"./dist/smart-wallets.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,tsx}"'},browserslist:["defaults","node >= 18","not op_mini all"],dependencies:{"@privy-io/js-sdk-core":"0.39.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","@testing-library/react-native":"^12.8.1","@tsconfig/node16-strictest-esm":"^1.0.3","@types/jest":"^29.1.2",buffer:"^5.4.3","eslint-plugin-react-hooks":"^5.0.0-canary-7118f5dd7-20230705",jest:"^29.7.0","jest-expo":"~51.0.0",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-clipboard":"*","expo-constants":"*","expo-crypto":"*","expo-font":"*","expo-linking":"*","expo-secure-store":"*","expo-web-browser":"*",permissionless:"^0.2.10",react:"*","react-native":"*","react-native-passkeys":"^0.3.0","react-native-qrcode-styled":"*","react-native-safe-area-context":"*","react-native-svg":"*","react-native-webview":"*",viem:"^2.21.36"},peerDependenciesMeta:{"@expo-google-fonts/inter":{optional:!0},"expo-font":{optional:!0},permissionless:{optional:!0},viem:{optional:!0}},publishConfig:{access:"public"}};var _reactfastcompare = require('react-fast-compare'); var _reactfastcompare2 = _interopRequireDefault(_reactfastcompare);var _zustand = require('zustand');var se=_zustand.create.call(void 0, ()=>{}),Me=e=>se.setState(t=>_reactfastcompare2.default.call(void 0, t,e)?t:e),jr= exports.f =se.getState;var _reactnativewebview = require('react-native-webview'); var _reactnativewebview2 = _interopRequireDefault(_reactnativewebview);var Fe=({client:e,isClientReady:t,setWebViewState:r,webViewState:o,logLevel:a})=>{let n=_react.useRef.call(void 0, null);_react.useEffect.call(void 0, ()=>{n.current&&o==="loaded"&&e.setMessagePoster(n.current)},[e,n.current,o==="loaded"]),_react.useEffect.call(void 0, ()=>_reactnative.AppState.addEventListener("change",i=>y(void 0,null,function*(){n.current&&i==="active"&&((yield e.embeddedWallet.ping(500))||(n.current.reload(),r("reloading")))})).remove,[]);let d=_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:n,cacheEnabled:!1,cacheMode:"LOAD_NO_CACHE",source:{uri:e.embeddedWallet.getURL()},webviewDebuggingEnabled:a==="DEBUG",onLoad:()=>r("loaded"),onError:console.error,onMessage:d}):null};function Ne(n){return y(this,arguments,function*({client:e,setSolanaWallet:t,createSolanaWalletCallbacks:r,setSolanaRecoveryFlowState:o,opts:a}){var d,s,i;t({status:"creating"});try{let{user:c}=yield e.user.get(),l=_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, c),m=l[0],u=(d=_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, c))!=null?d:void 0;if(a!=null&&a.recoveryMethod&&a.recoveryMethod!=="privy")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Unsupported recovery method for solana wallet."});if(!(a!=null&&a.createAdditional)&&m)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(m){let p=u!=null?u:m,{entropyId:_,entropyIdVerifier:g}=_jssdkcore.getEntropyDetailsFromAccount.call(void 0, p),w=Math.max(...l.map(C=>C.wallet_index),0)+1,b=yield e.embeddedWallet.add({chainType:"solana",entropyId:_,entropyIdVerifier:g,hdWalletIndex:w}),S=_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, b.user).find(C=>C.wallet_index===w);if(!S)throw new (0, _jssdkcore.PrivyClientError)({error:"Embedded wallet account not created",code:"embedded_wallet_creation_error"});v=yield e.embeddedWallet.getSolanaProvider(S,_,g),f=b.user}else{let p=yield e.embeddedWallet.createSolana({ethereumAccount:u}),_=_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, p.user).find(S=>S.wallet_index===0);if(!_)throw new (0, _jssdkcore.PrivyClientError)({error:"Embedded wallet account not created",code:"embedded_wallet_creation_error"});let g=u!=null?u:_,{entropyId:w,entropyIdVerifier:b}=_jssdkcore.getEntropyDetailsFromAccount.call(void 0, g);v=yield e.embeddedWallet.getSolanaProvider(_,w,b),f=p.user}let h=_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, f)[0];if(!h)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:h.public_key}),o({status:"initial"}),v}catch(c){let l=c instanceof Error?c.message:"Error creating embedded wallet";throw t({status:"error",error:l}),o({status:"initial"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:l})}})}function de(c){return y(this,arguments,function*({client:e,account:t,setWallet:r,recoverWalletCallbacks:o,recoveryMethod:a,setRecoveryFlowState:n,password:d,recoveryToken:s,recoverySecretOverride:i}){var l,m,u,v;if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});switch(a){case"user-passcode":if(!d)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"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 f=yield e.embeddedWallet.getProvider(t,d,s,i);return r({status:"connected",provider:f,account:t}),n({status:"initial"}),(m=(l=o.current)==null?void 0:l.onSuccess)==null||m.call(l,f),f}catch(f){r({status:"needs-recovery",account:t}),n({status:"initial"});let h=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:f instanceof Error?f.message:"Error recovering embedded wallet"});throw(v=(u=o.current)==null?void 0:u.onError)==null||v.call(u,h),h}})}function De(s){return y(this,arguments,function*({client:e,account:t,entropyId:r,entropyIdVerifier:o,setSolanaWallet:a,recoverSolanaWalletCallbacks:n,setSolanaRecoveryFlowState:d}){var i,c,l,m;a({status:"connecting"});try{let u=yield e.embeddedWallet.getSolanaProvider(t,r,o);return a({status:"connected",publicKey:u._publicKey}),d({status:"initial"}),(c=(i=n.current)==null?void 0:i.onSuccess)==null||c.call(i,u),u}catch(u){a({status:"needs-recovery"}),d({status:"initial"});let v=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:u instanceof Error?u.message:"Error recovering embedded wallet"});throw(m=(l=n.current)==null?void 0:l.onError)==null||m.call(l,v),v}})}var Ke=({client:e,user:t,solanaWallet:r,setSolanaWallet:o,setSolanaRecoveryFlowState:a,webViewState:n,createSolanaWalletCallbacks:d,recoverSolanaWalletCallbacks:s})=>{let i=_react.useMemo.call(void 0, ()=>_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, t),[t]),c=_react.useMemo.call(void 0, ()=>i.length===0?null:_jssdkcore.getEntropyDetailsFromUser.call(void 0, t),[t,i]),l=_react.useMemo.call(void 0, ()=>{if(!c)return[];let{entropyId:f,entropyIdVerifier:h}=c;return i.map(p=>({address:p.address,publicKey:p.address,walletIndex:p.wallet_index,getProvider:()=>e.embeddedWallet.getSolanaProvider(p,f,h)}))},[i,c,e]),m=_react.useCallback.call(void 0, f=>y(void 0,null,function*(){return yield Ne({client:e,setSolanaWallet:o,createSolanaWalletCallbacks:d,setSolanaRecoveryFlowState:a,opts:f})}),[e,d]),u=_react.useCallback.call(void 0, ()=>y(void 0,null,function*(){if(!c)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{entropyId:f,entropyIdVerifier:h}=c;return De({client:e,account:i[0],entropyId:f,entropyIdVerifier:h,setSolanaWallet:o,recoverSolanaWalletCallbacks:s,setSolanaRecoveryFlowState:a})}),[e,c,i,s,a,o]),v=_react.useCallback.call(void 0, ()=>y(void 0,null,function*(){if(!c)throw o({status:"not-created"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});o(f=>f.status==="connected"?{status:"reconnecting"}:{status:"connecting"});try{let{entropyId:f,entropyIdVerifier:h}=c,p=yield e.embeddedWallet.getSolanaProvider(i[0],f,h);return o({status:"connected",publicKey:i[0].public_key}),p}catch(f){throw _jssdkcore.errorIndicatesRecoveryIsNeeded.call(void 0, f)?(o({status:"needs-recovery"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):f instanceof Error?(o({status:"error",error:f.message}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:f.message})):(o({status:"error",error:"Error loading embedded wallet"}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[i,e,c,o]);return _react.useEffect.call(void 0, ()=>{if(!t&&r.status!=="disconnected")return o({status:"disconnected"});n==="loaded"&&v().catch(()=>{})},[n,t]),_react.useEffect.call(void 0, ()=>{r.status==="error"&&r.error.includes("User must be logged in")&&v()},[r.status]),{create:m,recover:u,getProvider:v,wallets:l}};function ce(l){return y(this,arguments,function*({client:e,setWallet:t,createWalletCallbacks:r,recoveryMethod:o,setRecoveryFlowState:a,password:n,recoveryToken:d,recoverySecretOverride:s,iCloudRecordNameOverride:i,solanaAccount:c}){var u,v;switch(o){case"user-passcode":if(!n)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!d)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 m=o==="icloud"?"icloud-native":o;try{let{user:f}=yield e.embeddedWallet.create({password:n,recoveryMethod:m,recoveryToken:d,recoverySecretOverride:s,iCloudRecordNameOverride:i,solanaAccount:c}),h=_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, f);if(!h)throw new (0, _jssdkcore.PrivyClientError)({error:"Embedded wallet account not created",code:"embedded_wallet_creation_error"});let p=yield e.embeddedWallet.getProvider(h);return(v=(u=r.current)==null?void 0:u.onSuccess)==null||v.call(u,p),t({status:"connected",provider:p,account:h}),a({status:"initial"}),p}catch(f){let h=f instanceof Error?f.message:"Error creating embedded wallet";throw t({status:"error",error:h,account:null}),a({status:"initial"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:h})}})}function He(){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 be(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 a=yield He(),n=yield r.recovery.icloudAuth.getICloudConfiguration("expo-ios");if(!(n==null?void 0:n.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:c}=yield a.writeRecoverySecretToICloud({containerId:n.container_identifier,appId:t,userId:e.id});return{recoverySecret:i,iCloudRecordName:c}}catch(i){if(i instanceof Error){let c=(s=i.message.split("Caused by: ")[1])!=null?s:"Error writing to iCloud";throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:c})}throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}function ze(o){return y(this,arguments,function*({walletAddress:e,client:t,chainType:r}){var c;if(_reactnative.Platform.OS==="android")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let a=yield He(),d=(yield t.recovery.getRecoveryKeyMaterial(e,r)).icloud_record_name;if(!d)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery not properly backed up."});let s=yield t.recovery.icloudAuth.getICloudConfiguration("expo-ios"),i=s==null?void 0:s.container_identifier;if(!i)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"An iCloud Container ID must be specified in the Privy Dashboard."});try{let{recoverySecret:l}=yield a.readRecoverySecretFromICloud({containerId:i,recordName:d});return{recoverySecret:l}}catch(l){if(l instanceof Error){let m=(c=l.message.split("Caused by: ")[1])!=null?c:"Error writing to iCloud";throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:m})}throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}var Je=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 wo=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 te(a){return y(this,arguments,function*({provider:e,redirectUri:t,client:r,onError:o}){try{let n;switch(e){case"google-drive":{let{url:c}=yield r.recovery.auth.generateURL(D.createURL(t||"/"));n=c;break}default:throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid provider",code:"embedded_wallet_recovery_error"})}let d=yield Be.openAuthSessionAsync(n);if(_reactnative.Platform.OS==="android")return;if(d.type!=="success")throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth session failed",code:"embedded_wallet_recovery_error"});let{queryParams:s}=D.parse(d.url),i;switch(e){case"google-drive":{let{privy_oauth_state:c,privy_oauth_code:l}=s;if(!l||!c)throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth invalid credentials",code:"embedded_wallet_recovery_error"});i=yield ue({oAuthCode:l,oAuthState:c,client:r});break}default:throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth invalid provider",code:"embedded_wallet_recovery_error"})}return i}catch(n){throw o==null||o(x(n)),n}})}function ue(o){return y(this,arguments,function*({oAuthCode:e,oAuthState:t,client:r}){let{access_token:a}=yield r.recovery.auth.authorize(e,t);if(!a)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:"login_with_oauth_returned_with_invalid_credentials"});return a})}var Yt=2*60*1e3;function Xt(e){let t;return new Promise((r,o)=>{t=D.addEventListener("url",n=>y(this,[n],function*({url:a}){if(!a)return;let{queryParams:d}=D.parse(a),{privy_oauth_state:s,privy_oauth_code:i}=d!=null?d:{};if(typeof i!="string"||typeof s!="string")return;let c=yield ue({client:e,oAuthCode:i,oAuthState:s});r(c)})),setTimeout(()=>{o(new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_set_recovery_error",error:"Failed to complete Google Drive recovery flow"}))},Yt)}).finally(()=>{t==null||t.remove()})}function Io(e){return y(this,null,function*(){let t;_reactnative.Platform.OS==="android"&&(t=Xt(e));let r=yield te({provider:"google-drive",client:e});return r!=null?r:yield t})}function pe(n){return y(this,arguments,function*({client:e,recoveryInput:t,setWalletRecoveryCallbacks:r,setRecoveryFlowState:o,setWallet:a}){var d,s,i,c;try{let{provider:l,user:m}=yield e.embeddedWallet.setRecovery(t),u=l,v=_jssdkcore.getUserEmbeddedWallet.call(void 0, m);return a({status:"connected",provider:u,account:v}),(s=(d=r.current)==null?void 0:d.onSuccess)==null||s.call(d,u),o({status:"initial"}),u}catch(l){let m=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_set_recovery_error",error:l instanceof Error?l.message:"Error setting password on embedded wallet"});throw(c=(i=r.current)==null?void 0:i.onError)==null||c.call(i,m),o({status:"initial"}),m}})}function Qe(e){return e===void 0?{recoveryMethod:"privy"}:typeof e=="string"?{recoveryMethod:"user-passcode",password:e}:e.recoveryMethod==="user-passcode"?{recoveryMethod:"user-passcode",password:e.password}:{recoveryMethod:e.recoveryMethod}}var $e=({client:e,user:t,appId:r,wallet:o,setWallet:a,setRecoveryFlowState:n,webViewState:d,createWalletCallbacks:s,recoverWalletCallbacks:i,setWalletRecoveryCallbacks:c})=>{let l=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedWallet.call(void 0, t),[t]),m=_react.useCallback.call(void 0, p=>y(void 0,null,function*(){var O,q;if(l)throw new (0, _jssdkcore.PrivyClientError)({error:"This user already has an embedded wallet",code:"embedded_wallet_already_exists"});let{user:_}=yield e.user.get(),{password:g,recoveryMethod:w}=Qe(p),b,S,C;if(w==="google-drive"&&(b=yield te({provider:w,client:e,onError:(O=s.current)==null?void 0:O.onError}),n({status:"creating-wallet"}),!b))return null;if(w==="icloud"){if(!_)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 be({user:_,appId:r,client:e});S=T,C=N}return yield ce({client:e,setWallet:a,createWalletCallbacks:s,recoveryMethod:w,setRecoveryFlowState:n,password:g,recoverySecretOverride:S,iCloudRecordNameOverride:C,solanaAccount:(q=_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, _))!=null?q:void 0})}),[e,l,t]),u=_react.useCallback.call(void 0, p=>y(void 0,null,function*(){var w;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(!l)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:l.recovery_method,upgradeToRecoveryMethod:p.recoveryMethod});let _,g;switch(p.recoveryMethod){case"privy":g=W(E({},p),{wallet:l});break;case"user-passcode":g=W(E({},p),{wallet:l,password:p.password});break;case"google-drive":if(_=yield te({provider:p.recoveryMethod,client:e,onError:(w=c.current)==null?void 0:w.onError}),n({status:"upgrading-recovery"}),!_)return null;g={recoveryMethod:"google-drive",wallet:l,recoveryAccessToken:_};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:b,iCloudRecordName:S}=yield be({user:t,appId:r,client:e});g={recoveryMethod:"icloud-native",recoverySecretOverride:b,iCloudRecordNameOverride:S,wallet:l};break;default:throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}return pe({client:e,recoveryInput:g,setWalletRecoveryCallbacks:c,setRecoveryFlowState:n,setWallet:a})}),[e,l,o.status,t]),v=_react.useCallback.call(void 0, p=>y(void 0,null,function*(){return u({recoveryMethod:"user-passcode",password:p})}),[e,l,o.status]),f=_react.useCallback.call(void 0, p=>y(void 0,null,function*(){var S;if(!l)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{password:_,recoveryMethod:g}=Qe(p),w,b;if(g==="google-drive"&&(w=yield te({provider:g,client:e,onError:(S=i.current)==null?void 0:S.onError}),n({status:"recovering"}),!w))return null;if(g==="icloud"){if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before recovering via iCloud."});let{recoverySecret:C}=yield ze({client:e,walletAddress:l.address});b=C}return de({client:e,account:l,setWallet:a,recoverWalletCallbacks:i,recoveryMethod:g,setRecoveryFlowState:n,password:_,recoveryToken:w,recoverySecretOverride:b})}),[e,l]),h=_react.useCallback.call(void 0, ()=>y(void 0,null,function*(){if(!l)throw a({status:"not-created",account:null}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});a(p=>p.status==="connected"?{status:"reconnecting",account:l}:{status:"connecting",account:l});try{let p=yield e.embeddedWallet.getProvider(l);return a({status:"connected",provider:p,account:l}),p}catch(p){throw _jssdkcore.errorIndicatesRecoveryIsNeeded.call(void 0, p)?(a({status:"needs-recovery",account:l}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):p instanceof Error?(a({status:"error",error:p.message,account:l}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:p.message})):(a({status:"error",error:"Error loading embedded wallet",account:l}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,l]);return _react.useEffect.call(void 0, ()=>{if(!t&&o.status!=="disconnected")return a({status:"disconnected",account:null});d==="loaded"&&h().catch(()=>{})},[d,t,l]),_react.useEffect.call(void 0, ()=>{o.status==="error"&&o.error.includes("User must be logged in")&&h()},[o.status]),{create:m,recover:f,setPassword:v,setRecovery:u,getProvider:h}};var et=({client:e,user:t,isReady:r})=>{let o=se(d=>d==null?void 0:d.customAuth),[a,n]=_react.useState.call(void 0, {status:"initial"});return _react.useEffect.call(void 0, ()=>{(()=>y(void 0,null,function*(){if(!(o!=null&&o.enabled)){n({status:"not-enabled"});return}n({status:"loading"});let{getCustomAccessToken:s,isLoading:i}=o;if(!(!r||i))try{let c=yield s();if(!c&&t){yield e.auth.logout(),n({status:"done"});return}if(!c){n({status:"done"});return}if(t){n({status:"done"});return}if(!(yield e.auth.customProvider.syncWithToken(c))){yield e.auth.logout(),n({status:"error",error:new (0, _jssdkcore.PrivyClientError)({error:"Failed to sync with custom auth provider",code:"third_party_auth_error"})});return}n({status:"done"})}catch(c){if(console.log("Error syncing with custom auth provider",c),n({status:"error",error:c}),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:a,customAuthStateIsSettled:a.status!=="loading"&&a.status!=="initial"}};var tt=({client:e,user:t,isUserInitialized:r,oAuthState:o,oAuthCallbacks:a,setOAuthState:n,recoveryFlowState:d,oAuthStateRef:s})=>{let i=B.useURL(),c=_react.useCallback.call(void 0, l=>{var u,v;let m=x(l);n({status:"error",error:m}),(v=(u=a.current).onError)==null||v.call(u,m)},[n]);return _react.useEffect.call(void 0, ()=>{function l(){return y(this,null,function*(){var f,h;if(!i||o.status!=="loading"||d.status!=="initial")return;let{queryParams:m}=B.parse(i),{privy_oauth_state:u,privy_oauth_code:v}=m;if(!v||!u){n({status:"done"});return}try{let p,_;if(t)p=yield e.auth.oauth.linkWithCode(v,u);else{let g=yield e.auth.oauth.loginWithCode(v,u,void 0,void 0,s.current.disableSignup?"no-signup":"login-or-sign-up");p=g.user,_=!!g.is_new_user}return(h=(f=a.current).onSuccess)==null||h.call(f,p,_),s.current={},n({status:"done"}),yield B.openURL(i.split("?")[0])}catch(p){s.current={},c(p)}})}_reactnative.Platform.OS==="android"&&r&&l()},[i,r])};var rt=({client:e,user:t,createWalletCallbacks:r,recoverWalletCallbacks:o,setWalletRecoveryCallbacks:a,recoveryFlowState:n,oAuthState:d,setRecoveryFlowState:s,setWallet:i,appStateVisible:c,webViewLoaded:l})=>{let m=G.useURL(),u=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedWallet.call(void 0, t),[t]),v=_react.useCallback.call(void 0, f=>{var p,_,g,w;let h=x(f);n.status==="creating-wallet"?(_=(p=r.current).onError)==null||_.call(p,x(h)):(w=(g=o.current).onError)==null||w.call(g,x(h)),s({status:"initial"})},[n]);return _react.useEffect.call(void 0, ()=>{function f(){return y(this,null,function*(){var g;if(!m&&n.status!=="initial"&&c&&v(new Error("Recovery OAuth session failed")),!m||n.status==="initial"||d.status!=="initial"||!c||!l)return;let{queryParams:h}=G.parse(m),{privy_oauth_state:p,privy_oauth_code:_}=h;if(!(!_||!p)){yield G.openURL(m.split("?")[0]);try{let w=yield ue({oAuthCode:_,oAuthState:p,client:e});if(n.status==="creating-wallet"){let b=(g=_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, t))!=null?g:void 0;yield ce({client:e,setWallet:i,createWalletCallbacks:r,recoveryMethod:"google-drive",setRecoveryFlowState:s,recoveryToken:w,solanaAccount:b})}else if(n.status==="upgrading-recovery"){if(!u)throw new Error("Embedded wallet not found");yield pe({client:e,recoveryInput:{recoveryMethod:"google-drive",wallet:u,recoveryAccessToken:w},setWalletRecoveryCallbacks:a,setRecoveryFlowState:s,setWallet:i})}else yield de({client:e,account:u,setWallet:i,recoverWalletCallbacks:o,recoveryMethod:"google-drive",setRecoveryFlowState:s,recoveryToken:w})}catch(w){v(w)}}})}_reactnative.Platform.OS==="android"&&f()},[m,n.status,c,l])};var ot=({client:e,isUserInitialized:t,setIsUserInitialized:r,setError:o})=>{_react.useEffect.call(void 0, ()=>{t||(()=>y(void 0,null,function*(){try{yield e.initialize()}catch(n){o(n instanceof Error?n:new Error(String(n)))}try{yield e.user.get()}catch(n){}finally{r(!0)}}))()},[e,t,o,r])};var R=class extends Error{constructor(r,o){super(o);this.code=r,this.error=o}},nt= exports.t =class extends R{constructor(r){super("underlying_error",r instanceof Error?r.message:"An underlying error occurred");this.wrappedError=r}};var Se={success:e=>({value:e}),error:e=>({error:e})};var it=e=>{let t=Array.from(new Set(e));return t.length===0?Se.error(new R("no_login_methods_available","No login methods available")):Se.success(t)},Ee=e=>{let t=e.length,r=e.every(o=>o==="sms"||o==="email");return t<=2&&r?e[0]:null},En= exports.u =(e,t)=>{if(e.length!==2)return null;let[r,o]=e;return t===r?o:r},An= exports.v ={email:"email",sms:"phone",google:"Google",apple:"Apple",discord:"Discord",twitter:"X",github:"Github",spotify:"Spotify",instagram:"Instagram",tiktok:"Tiktok",linkedin:"LinkedIn"};var _vanilla = require('zustand/vanilla');var at=_vanilla.createStore.call(void 0, )(e=>({isUIMounted:!1,updateUIMounted:t=>e({isUIMounted:t})})),st= exports.w =()=>{let{isUIMounted:e}=at.getState();if(!e)throw new R("privy_elements_not_ready","Privy Elements is not mounted")},On= exports.x =()=>{_react.useEffect.call(void 0, ()=>{let{updateUIMounted:e}=at.getState();return e(!0),()=>{e(!1)}},[])};function lt(e){return new Promise((t,r)=>{e({resolve:t,reject:r})})}function wr(e,t){return{resolve:r=>{t(),e.resolve(r)},reject:r=>{t(),e.reject(r)}}}function dt(e,t,r){let o=setTimeout(()=>{e.reject(t())},r);return wr(e,()=>{clearTimeout(o)})}var gr=1e3*60*5,Y=_zustand.create.call(void 0, )((e,t)=>({privyElementsConfig:null,loginPromiseResolvers:null,activeLoginMethod:null,openLoginFlow:(r,o,a,n)=>lt(d=>{var m,u,v;let s=o.app.getConfig();if(!s)return d.reject(new R("privy_not_ready","Privy is not ready"));if(a!==null)return d.reject(new R("user_already_logged_in","User is already logged in"));if(st(),t().loginPromiseResolvers!==null)return d.reject(new R("existing_login_flow_in_progress","A login flow is already in progress"));let i=it(r.loginMethods);if(i.error)return d.reject(i.error);let c={loginMethods:i.value,appearance:{logo:(v=(u=(m=r.appearance)==null?void 0:m.logo)!=null?u:s.logo_url)!=null?v:void 0}},l=dt(d,()=>(e({privyElementsConfig:null,loginPromiseResolvers:null}),new R("login_flow_timeout","The login flow timed out")),gr);n(),e({loginPromiseResolvers:l,privyElementsConfig:c,activeLoginMethod:Ee(c.loginMethods)})}),closeLoginFlow:()=>{var r;return(r=t().loginPromiseResolvers)==null||r.reject(new R("login_flow_closed","The login flow was closed")),e({privyElementsConfig:null,loginPromiseResolvers:null})},goBack:()=>{let{activeLoginMethod:r,privyElementsConfig:o,updateActiveLoginMethod:a,closeLoginFlow:n}=t();if(!o){n();return}let d=Ee(o.loginMethods)===null;r===null||!d?n():a(null)},updateActiveLoginMethod:r=>e({activeLoginMethod:r})})),Fn= exports.A =()=>Y(e=>e.privyElementsConfig),jn= exports.B =()=>Y(e=>e.openLoginFlow),Nn= exports.C =()=>Y(e=>e.closeLoginFlow),Dn= exports.D =()=>Y(e=>e.goBack),Vn= exports.E =()=>Y(e=>[e.activeLoginMethod,e.updateActiveLoginMethod]),br=e=>{let{loginPromiseResolvers:t}=Y.getState();t==null||t.resolve(e)},ct=()=>br;var Ae=_react.createContext.call(void 0, {}),K;function ii(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 ai=e=>{let[t,r]=_react.useState.call(void 0, _reactnative.AppState.currentState==="active");_react.useEffect.call(void 0, ()=>{let L=_reactnative.AppState.addEventListener("change",Pt=>{r(Pt==="active")});return()=>{L.remove()}},[]),_react.useEffect.call(void 0, ()=>Me(e.config),[e.config]);let[o,a]=_react.useState.call(void 0, !1),[n,d]=_react.useState.call(void 0, null),[s,i]=_react.useState.call(void 0, "loading"),[c,l]=_react.useState.call(void 0, !1),[m,u]=_react.useState.call(void 0, null),[v,f]=_react.useState.call(void 0, {status:"disconnected",account:null}),[h,p]=_react.useState.call(void 0, {status:"disconnected"}),[_,g]=_react.useState.call(void 0, {status:"initial"}),[w,b]=_react.useState.call(void 0, {status:"initial"}),S=_react.useRef.call(void 0, {}),[C,O]=_react.useState.call(void 0, {status:"initial"}),[q,T]=_react.useState.call(void 0, {status:"initial"}),[N,Q]=_react.useState.call(void 0, {status:"initial"}),[ye,F]=_react.useState.call(void 0, {status:"initial"}),[I,gt]=_react.useState.call(void 0, {status:"initial"}),Re=_react.useRef.call(void 0, {}),fe=_react.useRef.call(void 0, {}),ve=_react.useRef.call(void 0, {}),we=_react.useRef.call(void 0, {}),Oe=_react.useRef.call(void 0, {}),We=_react.useRef.call(void 0, {}),bt=ct(),$=_react.useCallback.call(void 0, L=>{if(L){bt(L),Je(u)(L);return}u(null),g({status:"initial"}),b({status:"initial"}),f({status:"disconnected",account:null})},[]),k=_react.useMemo.call(void 0, ()=>{let L=e.storage||vt;return e.client?(K=e.client,K.setCallbacks({setUser:$,setIsReady:l}),K):(K=new (0, _jssdkcore2.default)({storage:ft(L),appId:e.appId,clientId:e.clientId,supportedChains:e.supportedChains,nativeAppIdentifier:yt(),baseUrl:e.baseUrl,sdkVersion:`expo:${Le.version}`,callbacks:{setUser:$,setIsReady:l},logLevel:e.logLevel,crypto:{digest:_expocrypto.digest}}),K)},[e.client,e.storage,e.appId,e.clientId,e.baseUrl,e.supportedChains,e.logLevel,$]),_t=_react.useCallback.call(void 0, ()=>($(null),k.auth.logout()),[$,k]),St=_react.useCallback.call(void 0, ()=>y(void 0,null,function*(){try{return yield k.getAccessToken()}catch(L){return console.debug(L),null}}),[k]),Et=_react.useCallback.call(void 0, ()=>k.getIdentityToken(),[k]);ot({client:k,isUserInitialized:o,setIsUserInitialized:a,setError:d});let At=$e({client:k,user:m,appId:e.appId,webViewState:s,createWalletCallbacks:fe,recoverWalletCallbacks:ve,setWalletRecoveryCallbacks:we,setRecoveryFlowState:O,wallet:v,setWallet:f}),Ct=Ke({client:k,user:m,webViewState:s,createSolanaWalletCallbacks:Oe,recoverSolanaWalletCallbacks:We,setSolanaRecoveryFlowState:T,solanaWallet:h,setSolanaWallet:p});tt({client:k,isUserInitialized:o,user:m,oAuthState:w,setOAuthState:b,oAuthCallbacks:Re,recoveryFlowState:C,oAuthStateRef:S}),rt({client:k,user:m,webViewLoaded:s==="loaded",createWalletCallbacks:fe,recoverWalletCallbacks:ve,setWalletRecoveryCallbacks:we,recoveryFlowState:C,oAuthState:w,setRecoveryFlowState:O,setWallet:f,appStateVisible:t});let{customAuthStateIsSettled:kt}=et({client:k,user:m,isReady:o});return _react2.default.createElement(_react2.default.Fragment,null,_react2.default.createElement(Ae.Provider,{value:{client:k,user:m,isReady:s!=="loading"&&o&&mt(w)&&kt,error:n,logout:_t,getAccessToken:St,getIdentityToken:Et,wallet:E(E({},v),At),solanaWallet:E(E({},h),Ct),oAuthState:w,oAuthCallbacks:Re,recoveryFlowState:C,setRecoveryFlowState:O,solanaRecoveryFlowState:q,setSolanaRecoveryFlowState:T,createWalletCallbacks:fe,recoverWalletCallbacks:ve,setWalletRecoveryCallbacks:we,createSolanaWalletCallbacks:Oe,recoverSolanaWalletCallbacks:We,setOAuthState:b,siweState:N,setSiweState:Q,otpState:_,setOtpState:g,passkeyState:ye,setPasskeyState:F,farcasterState:I,setFarcasterState:gt,oAuthStateRef:S}},e.children),_react2.default.createElement(_reactnative.View,{style:{width:0,height:0,overflow:"hidden"}},_react2.default.createElement(Fe,{logLevel:e.logLevel,client:k,isClientReady:c,setWebViewState:i,webViewState:s})))};var mt=e=>e.status!=="loading",ke=(e={})=>{let{user:t,oAuthState:r,setOAuthState:o,oAuthCallbacks:a,client:n,oAuthStateRef:d}=_react.useContext.call(void 0, Ae),s=e.action?e.action==="login":!t;_react.useEffect.call(void 0, ()=>{a.current={onSuccess:e.onSuccess,onError:e.onError}},[e.onSuccess,e.onError]);let i=_react.useCallback.call(void 0, l=>{var u;let m=x(l);return o({status:"error",error:m}),(u=e==null?void 0:e.onError)==null||u.call(e,m),m},[e==null?void 0:e.onError]);return{start:_react.useCallback.call(void 0, function(h){return y(this,arguments,function*({provider:m,redirectUri:u,isLegacyAppleIosBehaviorEnabled:v=!1,disableSignup:f}){var p,_,g;o({status:"loading"}),d.current={disableSignup:f};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:w}=yield n.auth.oauth.generateURL(m,X.createURL(u||"/")),b,S;if(_reactnative.Platform.OS==="ios"&&m==="apple"&&!v){let ye=(p=new URL(w).searchParams.get("state"))!=null?p:"",F=yield ne.signInAsync({state:ye,requestedScopes:[ne.AppleAuthenticationScope.EMAIL,ne.AppleAuthenticationScope.FULL_NAME]}).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(!F.authorizationCode||!F.state)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 n.auth.oauth.loginWithCode(F.authorizationCode,F.state,m,"raw",f?"no-signup":"login-or-sign-up");b=I.user,S=I.is_new_user}else b=yield n.auth.oauth.linkWithCode(F.authorizationCode,F.state,m,"raw");return(_=e==null?void 0:e.onSuccess)==null||_.call(e,b,S),o({status:"done"}),b!=null?b:void 0}let C=_reactnative.Platform.OS==="android"?w.replace("x.com","twitter.com"):w,O=yield ie.openAuthSessionAsync(C);if(_reactnative.Platform.OS==="android")return;if(O.type!=="success")throw[ie.WebBrowserResultType.CANCEL,ie.WebBrowserResultType.DISMISS].includes(O.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}=X.parse(O.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 Q=yield n.auth.oauth.loginWithCode(N,T,m,void 0,f?"no-signup":"login-or-sign-up");b=Q.user,S=Q.is_new_user}else b=yield n.auth.oauth.linkWithCode(N,T,m);return(g=e==null?void 0:e.onSuccess)==null||g.call(e,b,S),yield X.openURL(O.url.split("?")[0]),o({status:"done"}),b!=null?b:void 0}catch(w){i(w)}})},[t,n,o,i]),state:r}};function fi(e){let{state:t,start:r}=ke(W(E({},e),{action:"login"}));return{state:t,login:r}}function vi(e){let{state:t,start:r}=ke(W(E({},e),{action:"link"}));return{state:t,link:r}}function wi(e){return ke(e)}var yt=()=>{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 ft(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 vt={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[]})};var Wr=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 W(E({},r),{type:(o=r.type)!=null?o:"public-key",clientExtensionResults:{}})});var Ur=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 W(E({},r),{type:(o=r.type)!=null?o:"public-key",clientExtensionResults:{}})});function xi(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 Ui(e){var t,r,o,a;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:(a=e.allow_credentials)==null?void 0:a.map(({id:n,type:d,transports:s})=>({id:n,type:d,transports:s})),userVerification:e.user_verification}}function Ii(e){var t,r,o,a,n,d,s,i;return{rp:e.rp,user:{id:e.user.id,name:e.user.name,displayName:e.user.display_name},challenge:e.challenge,pubKeyCredParams:e.pub_key_cred_params,extensions:{hmacCreateSecret:(t=e.extensions)==null?void 0:t.hmac_create_secret,credProps:(o=(r=e.extensions)==null?void 0:r.cred_props)==null?void 0:o.rk,appid:(a=e.extensions)==null?void 0:a.app_id},attestation:e.attestation,excludeCredentials:e.exclude_credentials,authenticatorSelection:{authenticatorAttachment:(n=e.authenticator_selection)==null?void 0:n.authenticator_attachment,residentKey:(d=e.authenticator_selection)==null?void 0:d.resident_key,userVerification:(s=e.authenticator_selection)==null?void 0:s.user_verification,requireResidentKey:(i=e.authenticator_selection)==null?void 0:i.require_resident_key}}}exports.a = E; exports.b = W; exports.c = Ir; exports.d = y; exports.e = Le; exports.f = jr; exports.g = be; exports.h = ze; exports.i = x; exports.j = wo; exports.k = So; exports.l = Io; exports.m = fi; exports.n = vi; exports.o = wi; exports.p = yt; exports.q = ft; exports.r = vt; exports.s = R; exports.t = nt; exports.u = En; exports.v = An; exports.w = st; exports.x = On; exports.y = lt; exports.z = dt; exports.A = Fn; exports.B = jn; exports.C = Nn; exports.D = Dn; exports.E = Vn; exports.F = Ae; exports.G = ii; exports.H = ai; exports.I = Wr; exports.J = Ur; exports.K = xi; exports.L = Ui; exports.M = Ii;
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 Rt=Object.defineProperty,Ot=Object.defineProperties;var Wt=Object.getOwnPropertyDescriptors;var ae=Object.getOwnPropertySymbols;var Ue=Object.prototype.hasOwnProperty,Ie=Object.prototype.propertyIsEnumerable;var xe=(e,t,r)=>t in e?Rt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,E= exports.a =(e,t)=>{for(var r in t||(t={}))Ue.call(t,r)&&xe(e,r,t[r]);if(ae)for(var r of ae(t))Ie.call(t,r)&&xe(e,r,t[r]);return e},W= exports.b =(e,t)=>Ot(e,Wt(t));var Ir=(e,t)=>{var r={};for(var o in e)Ue.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(e!=null&&ae)for(var o of ae(e))t.indexOf(o)<0&&Ie.call(e,o)&&(r[o]=e[o]);return r};var y=(e,t,r)=>new Promise((o,a)=>{var n=i=>{try{s(r.next(i))}catch(c){a(c)}},d=i=>{try{s(r.throw(i))}catch(c){a(c)}},s=i=>i.done?o(i.value):Promise.resolve(i.value).then(n,d);s((r=r.apply(e,t)).next())});var _expoappleauthentication = require('expo-apple-authentication'); var ne = _interopRequireWildcard(_expoappleauthentication);var _expoapplication = require('expo-application');var _expolinking = require('expo-linking'); var X = _interopRequireWildcard(_expolinking); var D = _interopRequireWildcard(_expolinking); var B = _interopRequireWildcard(_expolinking); var G = _interopRequireWildcard(_expolinking);var _exposecurestore = require('expo-secure-store'); var U = _interopRequireWildcard(_exposecurestore);var _expowebbrowser = require('expo-web-browser'); var ie = _interopRequireWildcard(_expowebbrowser); var Be = _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 Le={name:"@privy-io/expo",version:"0.39.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"},"./smart-wallets":{require:"./dist/smart-wallets.js",import:"./dist/esm/smart-wallets.js",types:"./dist/smart-wallets.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,tsx}"'},browserslist:["defaults","node >= 18","not op_mini all"],dependencies:{"@privy-io/js-sdk-core":"0.39.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","@testing-library/react-native":"^12.8.1","@tsconfig/node16-strictest-esm":"^1.0.3","@types/jest":"^29.1.2",buffer:"^5.4.3","eslint-plugin-react-hooks":"^5.0.0-canary-7118f5dd7-20230705",jest:"^29.7.0","jest-expo":"~51.0.0",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-clipboard":"*","expo-constants":"*","expo-crypto":"*","expo-font":"*","expo-linking":"*","expo-secure-store":"*","expo-web-browser":"*",permissionless:"^0.2.10",react:"*","react-native":"*","react-native-passkeys":"^0.3.0","react-native-qrcode-styled":"*","react-native-safe-area-context":"*","react-native-svg":"*","react-native-webview":"*",viem:"^2.21.36"},peerDependenciesMeta:{"@expo-google-fonts/inter":{optional:!0},"expo-font":{optional:!0},permissionless:{optional:!0},viem:{optional:!0}},publishConfig:{access:"public"}};var _reactfastcompare = require('react-fast-compare'); var _reactfastcompare2 = _interopRequireDefault(_reactfastcompare);var _zustand = require('zustand');var se=_zustand.create.call(void 0, ()=>{}),Me=e=>se.setState(t=>_reactfastcompare2.default.call(void 0, t,e)?t:e),jr= exports.f =se.getState;var _reactnativewebview = require('react-native-webview'); var _reactnativewebview2 = _interopRequireDefault(_reactnativewebview);var Fe=({client:e,isClientReady:t,setWebViewState:r,webViewState:o,logLevel:a})=>{let n=_react.useRef.call(void 0, null);_react.useEffect.call(void 0, ()=>{n.current&&o==="loaded"&&e.setMessagePoster(n.current)},[e,n.current,o==="loaded"]),_react.useEffect.call(void 0, ()=>_reactnative.AppState.addEventListener("change",i=>y(void 0,null,function*(){n.current&&i==="active"&&((yield e.embeddedWallet.ping(500))||(n.current.reload(),r("reloading")))})).remove,[]);let d=_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:n,cacheEnabled:!1,cacheMode:"LOAD_NO_CACHE",source:{uri:e.embeddedWallet.getURL()},webviewDebuggingEnabled:a==="DEBUG",onLoad:()=>r("loaded"),onError:console.error,onMessage:d}):null};function Ne(n){return y(this,arguments,function*({client:e,setSolanaWallet:t,createSolanaWalletCallbacks:r,setSolanaRecoveryFlowState:o,opts:a}){var d,s,i;t({status:"creating"});try{let{user:c}=yield e.user.get(),l=_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, c),m=l[0],u=(d=_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, c))!=null?d:void 0;if(a!=null&&a.recoveryMethod&&a.recoveryMethod!=="privy")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Unsupported recovery method for solana wallet."});if(!(a!=null&&a.createAdditional)&&m)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(m){let p=u!=null?u:m,{entropyId:_,entropyIdVerifier:g}=_jssdkcore.getEntropyDetailsFromAccount.call(void 0, p),w=Math.max(...l.map(C=>C.wallet_index),0)+1,b=yield e.embeddedWallet.add({chainType:"solana",entropyId:_,entropyIdVerifier:g,hdWalletIndex:w}),S=_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, b.user).find(C=>C.wallet_index===w);if(!S)throw new (0, _jssdkcore.PrivyClientError)({error:"Embedded wallet account not created",code:"embedded_wallet_creation_error"});v=yield e.embeddedWallet.getSolanaProvider(S,_,g),f=b.user}else{let p=yield e.embeddedWallet.createSolana({ethereumAccount:u}),_=_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, p.user).find(S=>S.wallet_index===0);if(!_)throw new (0, _jssdkcore.PrivyClientError)({error:"Embedded wallet account not created",code:"embedded_wallet_creation_error"});let g=u!=null?u:_,{entropyId:w,entropyIdVerifier:b}=_jssdkcore.getEntropyDetailsFromAccount.call(void 0, g);v=yield e.embeddedWallet.getSolanaProvider(_,w,b),f=p.user}let h=_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, f)[0];if(!h)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:h.public_key}),o({status:"initial"}),v}catch(c){let l=c instanceof Error?c.message:"Error creating embedded wallet";throw t({status:"error",error:l}),o({status:"initial"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:l})}})}function de(c){return y(this,arguments,function*({client:e,account:t,setWallet:r,recoverWalletCallbacks:o,recoveryMethod:a,setRecoveryFlowState:n,password:d,recoveryToken:s,recoverySecretOverride:i}){var l,m,u,v;if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});switch(a){case"user-passcode":if(!d)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"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 f=yield e.embeddedWallet.getProvider(t,d,s,i);return r({status:"connected",provider:f,account:t}),n({status:"initial"}),(m=(l=o.current)==null?void 0:l.onSuccess)==null||m.call(l,f),f}catch(f){r({status:"needs-recovery",account:t}),n({status:"initial"});let h=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:f instanceof Error?f.message:"Error recovering embedded wallet"});throw(v=(u=o.current)==null?void 0:u.onError)==null||v.call(u,h),h}})}function De(s){return y(this,arguments,function*({client:e,account:t,entropyId:r,entropyIdVerifier:o,setSolanaWallet:a,recoverSolanaWalletCallbacks:n,setSolanaRecoveryFlowState:d}){var i,c,l,m;a({status:"connecting"});try{let u=yield e.embeddedWallet.getSolanaProvider(t,r,o);return a({status:"connected",publicKey:u._publicKey}),d({status:"initial"}),(c=(i=n.current)==null?void 0:i.onSuccess)==null||c.call(i,u),u}catch(u){a({status:"needs-recovery"}),d({status:"initial"});let v=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:u instanceof Error?u.message:"Error recovering embedded wallet"});throw(m=(l=n.current)==null?void 0:l.onError)==null||m.call(l,v),v}})}var Ke=({client:e,user:t,solanaWallet:r,setSolanaWallet:o,setSolanaRecoveryFlowState:a,webViewState:n,createSolanaWalletCallbacks:d,recoverSolanaWalletCallbacks:s})=>{let i=_react.useMemo.call(void 0, ()=>_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, t),[t]),c=_react.useMemo.call(void 0, ()=>i.length===0?null:_jssdkcore.getEntropyDetailsFromUser.call(void 0, t),[t,i]),l=_react.useMemo.call(void 0, ()=>{if(!c)return[];let{entropyId:f,entropyIdVerifier:h}=c;return i.map(p=>({address:p.address,publicKey:p.address,walletIndex:p.wallet_index,getProvider:()=>e.embeddedWallet.getSolanaProvider(p,f,h)}))},[i,c,e]),m=_react.useCallback.call(void 0, f=>y(void 0,null,function*(){return yield Ne({client:e,setSolanaWallet:o,createSolanaWalletCallbacks:d,setSolanaRecoveryFlowState:a,opts:f})}),[e,d]),u=_react.useCallback.call(void 0, ()=>y(void 0,null,function*(){if(!c)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{entropyId:f,entropyIdVerifier:h}=c;return De({client:e,account:i[0],entropyId:f,entropyIdVerifier:h,setSolanaWallet:o,recoverSolanaWalletCallbacks:s,setSolanaRecoveryFlowState:a})}),[e,c,i,s,a,o]),v=_react.useCallback.call(void 0, ()=>y(void 0,null,function*(){if(!c)throw o({status:"not-created"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});o(f=>f.status==="connected"?{status:"reconnecting"}:{status:"connecting"});try{let{entropyId:f,entropyIdVerifier:h}=c,p=yield e.embeddedWallet.getSolanaProvider(i[0],f,h);return o({status:"connected",publicKey:i[0].public_key}),p}catch(f){throw _jssdkcore.errorIndicatesRecoveryIsNeeded.call(void 0, f)?(o({status:"needs-recovery"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):f instanceof Error?(o({status:"error",error:f.message}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:f.message})):(o({status:"error",error:"Error loading embedded wallet"}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[i,e,c,o]);return _react.useEffect.call(void 0, ()=>{if(!t&&r.status!=="disconnected")return o({status:"disconnected"});n==="loaded"&&v().catch(()=>{})},[n,t]),_react.useEffect.call(void 0, ()=>{r.status==="error"&&r.error.includes("User must be logged in")&&v()},[r.status]),{create:m,recover:u,getProvider:v,wallets:l}};function ce(l){return y(this,arguments,function*({client:e,setWallet:t,createWalletCallbacks:r,recoveryMethod:o,setRecoveryFlowState:a,password:n,recoveryToken:d,recoverySecretOverride:s,iCloudRecordNameOverride:i,solanaAccount:c}){var u,v;switch(o){case"user-passcode":if(!n)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!d)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 m=o==="icloud"?"icloud-native":o;try{let{user:f}=yield e.embeddedWallet.create({password:n,recoveryMethod:m,recoveryToken:d,recoverySecretOverride:s,iCloudRecordNameOverride:i,solanaAccount:c}),h=_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, f);if(!h)throw new (0, _jssdkcore.PrivyClientError)({error:"Embedded wallet account not created",code:"embedded_wallet_creation_error"});let p=yield e.embeddedWallet.getProvider(h);return(v=(u=r.current)==null?void 0:u.onSuccess)==null||v.call(u,p),t({status:"connected",provider:p,account:h}),a({status:"initial"}),p}catch(f){let h=f instanceof Error?f.message:"Error creating embedded wallet";throw t({status:"error",error:h,account:null}),a({status:"initial"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:h})}})}function He(){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 be(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 a=yield He(),n=yield r.recovery.icloudAuth.getICloudConfiguration("expo-ios");if(!(n==null?void 0:n.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:c}=yield a.writeRecoverySecretToICloud({containerId:n.container_identifier,appId:t,userId:e.id});return{recoverySecret:i,iCloudRecordName:c}}catch(i){if(i instanceof Error){let c=(s=i.message.split("Caused by: ")[1])!=null?s:"Error writing to iCloud";throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:c})}throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}function ze(o){return y(this,arguments,function*({walletAddress:e,client:t,chainType:r}){var c;if(_reactnative.Platform.OS==="android")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let a=yield He(),d=(yield t.recovery.getRecoveryKeyMaterial(e,r)).icloud_record_name;if(!d)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery not properly backed up."});let s=yield t.recovery.icloudAuth.getICloudConfiguration("expo-ios"),i=s==null?void 0:s.container_identifier;if(!i)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"An iCloud Container ID must be specified in the Privy Dashboard."});try{let{recoverySecret:l}=yield a.readRecoverySecretFromICloud({containerId:i,recordName:d});return{recoverySecret:l}}catch(l){if(l instanceof Error){let m=(c=l.message.split("Caused by: ")[1])!=null?c:"Error writing to iCloud";throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:m})}throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}var Je=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 wo=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 te(a){return y(this,arguments,function*({provider:e,redirectUri:t,client:r,onError:o}){try{let n;switch(e){case"google-drive":{let{url:c}=yield r.recovery.auth.generateURL(D.createURL(t||"/"));n=c;break}default:throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid provider",code:"embedded_wallet_recovery_error"})}let d=yield Be.openAuthSessionAsync(n);if(_reactnative.Platform.OS==="android")return;if(d.type!=="success")throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth session failed",code:"embedded_wallet_recovery_error"});let{queryParams:s}=D.parse(d.url),i;switch(e){case"google-drive":{let{privy_oauth_state:c,privy_oauth_code:l}=s;if(!l||!c)throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth invalid credentials",code:"embedded_wallet_recovery_error"});i=yield ue({oAuthCode:l,oAuthState:c,client:r});break}default:throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth invalid provider",code:"embedded_wallet_recovery_error"})}return i}catch(n){throw o==null||o(x(n)),n}})}function ue(o){return y(this,arguments,function*({oAuthCode:e,oAuthState:t,client:r}){let{access_token:a}=yield r.recovery.auth.authorize(e,t);if(!a)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:"login_with_oauth_returned_with_invalid_credentials"});return a})}var Yt=2*60*1e3;function Xt(e){let t;return new Promise((r,o)=>{t=D.addEventListener("url",n=>y(this,[n],function*({url:a}){if(!a)return;let{queryParams:d}=D.parse(a),{privy_oauth_state:s,privy_oauth_code:i}=d!=null?d:{};if(typeof i!="string"||typeof s!="string")return;let c=yield ue({client:e,oAuthCode:i,oAuthState:s});r(c)})),setTimeout(()=>{o(new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_set_recovery_error",error:"Failed to complete Google Drive recovery flow"}))},Yt)}).finally(()=>{t==null||t.remove()})}function Io(e){return y(this,null,function*(){let t;_reactnative.Platform.OS==="android"&&(t=Xt(e));let r=yield te({provider:"google-drive",client:e});return r!=null?r:yield t})}function pe(n){return y(this,arguments,function*({client:e,recoveryInput:t,setWalletRecoveryCallbacks:r,setRecoveryFlowState:o,setWallet:a}){var d,s,i,c;try{let{provider:l,user:m}=yield e.embeddedWallet.setRecovery(t),u=l,v=_jssdkcore.getUserEmbeddedWallet.call(void 0, m);return a({status:"connected",provider:u,account:v}),(s=(d=r.current)==null?void 0:d.onSuccess)==null||s.call(d,u),o({status:"initial"}),u}catch(l){let m=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_set_recovery_error",error:l instanceof Error?l.message:"Error setting password on embedded wallet"});throw(c=(i=r.current)==null?void 0:i.onError)==null||c.call(i,m),o({status:"initial"}),m}})}function Qe(e){return e===void 0?{recoveryMethod:"privy"}:typeof e=="string"?{recoveryMethod:"user-passcode",password:e}:e.recoveryMethod==="user-passcode"?{recoveryMethod:"user-passcode",password:e.password}:{recoveryMethod:e.recoveryMethod}}var $e=({client:e,user:t,appId:r,wallet:o,setWallet:a,setRecoveryFlowState:n,webViewState:d,createWalletCallbacks:s,recoverWalletCallbacks:i,setWalletRecoveryCallbacks:c})=>{let l=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedWallet.call(void 0, t),[t]),m=_react.useCallback.call(void 0, p=>y(void 0,null,function*(){var O,q;if(l)throw new (0, _jssdkcore.PrivyClientError)({error:"This user already has an embedded wallet",code:"embedded_wallet_already_exists"});let{user:_}=yield e.user.get(),{password:g,recoveryMethod:w}=Qe(p),b,S,C;if(w==="google-drive"&&(b=yield te({provider:w,client:e,onError:(O=s.current)==null?void 0:O.onError}),n({status:"creating-wallet"}),!b))return null;if(w==="icloud"){if(!_)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 be({user:_,appId:r,client:e});S=T,C=N}return yield ce({client:e,setWallet:a,createWalletCallbacks:s,recoveryMethod:w,setRecoveryFlowState:n,password:g,recoverySecretOverride:S,iCloudRecordNameOverride:C,solanaAccount:(q=_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, _))!=null?q:void 0})}),[e,l,t]),u=_react.useCallback.call(void 0, p=>y(void 0,null,function*(){var w;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(!l)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:l.recovery_method,upgradeToRecoveryMethod:p.recoveryMethod});let _,g;switch(p.recoveryMethod){case"privy":g=W(E({},p),{wallet:l});break;case"user-passcode":g=W(E({},p),{wallet:l,password:p.password});break;case"google-drive":if(_=yield te({provider:p.recoveryMethod,client:e,onError:(w=c.current)==null?void 0:w.onError}),n({status:"upgrading-recovery"}),!_)return null;g={recoveryMethod:"google-drive",wallet:l,recoveryAccessToken:_};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:b,iCloudRecordName:S}=yield be({user:t,appId:r,client:e});g={recoveryMethod:"icloud-native",recoverySecretOverride:b,iCloudRecordNameOverride:S,wallet:l};break;default:throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}return pe({client:e,recoveryInput:g,setWalletRecoveryCallbacks:c,setRecoveryFlowState:n,setWallet:a})}),[e,l,o.status,t]),v=_react.useCallback.call(void 0, p=>y(void 0,null,function*(){return u({recoveryMethod:"user-passcode",password:p})}),[e,l,o.status]),f=_react.useCallback.call(void 0, p=>y(void 0,null,function*(){var S;if(!l)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{password:_,recoveryMethod:g}=Qe(p),w,b;if(g==="google-drive"&&(w=yield te({provider:g,client:e,onError:(S=i.current)==null?void 0:S.onError}),n({status:"recovering"}),!w))return null;if(g==="icloud"){if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before recovering via iCloud."});let{recoverySecret:C}=yield ze({client:e,walletAddress:l.address});b=C}return de({client:e,account:l,setWallet:a,recoverWalletCallbacks:i,recoveryMethod:g,setRecoveryFlowState:n,password:_,recoveryToken:w,recoverySecretOverride:b})}),[e,l]),h=_react.useCallback.call(void 0, ()=>y(void 0,null,function*(){if(!l)throw a({status:"not-created",account:null}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});a(p=>p.status==="connected"?{status:"reconnecting",account:l}:{status:"connecting",account:l});try{let p=yield e.embeddedWallet.getProvider(l);return a({status:"connected",provider:p,account:l}),p}catch(p){throw _jssdkcore.errorIndicatesRecoveryIsNeeded.call(void 0, p)?(a({status:"needs-recovery",account:l}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):p instanceof Error?(a({status:"error",error:p.message,account:l}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:p.message})):(a({status:"error",error:"Error loading embedded wallet",account:l}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,l]);return _react.useEffect.call(void 0, ()=>{if(!t&&o.status!=="disconnected")return a({status:"disconnected",account:null});d==="loaded"&&h().catch(()=>{})},[d,t,l]),_react.useEffect.call(void 0, ()=>{o.status==="error"&&o.error.includes("User must be logged in")&&h()},[o.status]),{create:m,recover:f,setPassword:v,setRecovery:u,getProvider:h}};var et=({client:e,user:t,isReady:r})=>{let o=se(d=>d==null?void 0:d.customAuth),[a,n]=_react.useState.call(void 0, {status:"initial"});return _react.useEffect.call(void 0, ()=>{(()=>y(void 0,null,function*(){if(!(o!=null&&o.enabled)){n({status:"not-enabled"});return}n({status:"loading"});let{getCustomAccessToken:s,isLoading:i}=o;if(!(!r||i))try{let c=yield s();if(!c&&t){yield e.auth.logout(),n({status:"done"});return}if(!c){n({status:"done"});return}if(t){n({status:"done"});return}if(!(yield e.auth.customProvider.syncWithToken(c))){yield e.auth.logout(),n({status:"error",error:new (0, _jssdkcore.PrivyClientError)({error:"Failed to sync with custom auth provider",code:"third_party_auth_error"})});return}n({status:"done"})}catch(c){if(console.log("Error syncing with custom auth provider",c),n({status:"error",error:c}),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:a,customAuthStateIsSettled:a.status!=="loading"&&a.status!=="initial"}};var tt=({client:e,user:t,isUserInitialized:r,oAuthState:o,oAuthCallbacks:a,setOAuthState:n,recoveryFlowState:d,oAuthStateRef:s})=>{let i=B.useURL(),c=_react.useCallback.call(void 0, l=>{var u,v;let m=x(l);n({status:"error",error:m}),(v=(u=a.current).onError)==null||v.call(u,m)},[n]);return _react.useEffect.call(void 0, ()=>{function l(){return y(this,null,function*(){var f,h;if(!i||o.status!=="loading"||d.status!=="initial")return;let{queryParams:m}=B.parse(i),{privy_oauth_state:u,privy_oauth_code:v}=m;if(!v||!u){n({status:"done"});return}try{let p,_;if(t)p=yield e.auth.oauth.linkWithCode(v,u);else{let g=yield e.auth.oauth.loginWithCode(v,u,void 0,void 0,s.current.disableSignup?"no-signup":"login-or-sign-up");p=g.user,_=!!g.is_new_user}return(h=(f=a.current).onSuccess)==null||h.call(f,p,_),s.current={},n({status:"done"}),yield B.openURL(i.split("?")[0])}catch(p){s.current={},c(p)}})}_reactnative.Platform.OS==="android"&&r&&l()},[i,r])};var rt=({client:e,user:t,createWalletCallbacks:r,recoverWalletCallbacks:o,setWalletRecoveryCallbacks:a,recoveryFlowState:n,oAuthState:d,setRecoveryFlowState:s,setWallet:i,appStateVisible:c,webViewLoaded:l})=>{let m=G.useURL(),u=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedWallet.call(void 0, t),[t]),v=_react.useCallback.call(void 0, f=>{var p,_,g,w;let h=x(f);n.status==="creating-wallet"?(_=(p=r.current).onError)==null||_.call(p,x(h)):(w=(g=o.current).onError)==null||w.call(g,x(h)),s({status:"initial"})},[n]);return _react.useEffect.call(void 0, ()=>{function f(){return y(this,null,function*(){var g;if(!m&&n.status!=="initial"&&c&&v(new Error("Recovery OAuth session failed")),!m||n.status==="initial"||d.status!=="initial"||!c||!l)return;let{queryParams:h}=G.parse(m),{privy_oauth_state:p,privy_oauth_code:_}=h;if(!(!_||!p)){yield G.openURL(m.split("?")[0]);try{let w=yield ue({oAuthCode:_,oAuthState:p,client:e});if(n.status==="creating-wallet"){let b=(g=_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, t))!=null?g:void 0;yield ce({client:e,setWallet:i,createWalletCallbacks:r,recoveryMethod:"google-drive",setRecoveryFlowState:s,recoveryToken:w,solanaAccount:b})}else if(n.status==="upgrading-recovery"){if(!u)throw new Error("Embedded wallet not found");yield pe({client:e,recoveryInput:{recoveryMethod:"google-drive",wallet:u,recoveryAccessToken:w},setWalletRecoveryCallbacks:a,setRecoveryFlowState:s,setWallet:i})}else yield de({client:e,account:u,setWallet:i,recoverWalletCallbacks:o,recoveryMethod:"google-drive",setRecoveryFlowState:s,recoveryToken:w})}catch(w){v(w)}}})}_reactnative.Platform.OS==="android"&&f()},[m,n.status,c,l])};var ot=({client:e,isUserInitialized:t,setIsUserInitialized:r,setError:o})=>{_react.useEffect.call(void 0, ()=>{t||(()=>y(void 0,null,function*(){try{yield e.initialize()}catch(n){o(n instanceof Error?n:new Error(String(n)))}try{yield e.user.get()}catch(n){}finally{r(!0)}}))()},[e,t,o,r])};var R=class extends Error{constructor(r,o){super(o);this.code=r,this.error=o}},nt= exports.t =class extends R{constructor(r){super("underlying_error",r instanceof Error?r.message:"An underlying error occurred");this.wrappedError=r}};var Se={success:e=>({value:e}),error:e=>({error:e})};var it=e=>{let t=Array.from(new Set(e));return t.length===0?Se.error(new R("no_login_methods_available","No login methods available")):Se.success(t)},Ee=e=>{let t=e.length,r=e.every(o=>o==="sms"||o==="email");return t<=2&&r?e[0]:null},En= exports.u =(e,t)=>{if(e.length!==2)return null;let[r,o]=e;return t===r?o:r},An= exports.v ={email:"email",sms:"phone",google:"Google",apple:"Apple",discord:"Discord",twitter:"X",github:"Github",spotify:"Spotify",instagram:"Instagram",tiktok:"Tiktok",linkedin:"LinkedIn"};var _vanilla = require('zustand/vanilla');var at=_vanilla.createStore.call(void 0, )(e=>({isUIMounted:!1,updateUIMounted:t=>e({isUIMounted:t})})),st= exports.w =()=>{let{isUIMounted:e}=at.getState();if(!e)throw new R("privy_elements_not_ready","Privy Elements is not mounted")},On= exports.x =()=>{_react.useEffect.call(void 0, ()=>{let{updateUIMounted:e}=at.getState();return e(!0),()=>{e(!1)}},[])};function lt(e){return new Promise((t,r)=>{e({resolve:t,reject:r})})}function wr(e,t){return{resolve:r=>{t(),e.resolve(r)},reject:r=>{t(),e.reject(r)}}}function dt(e,t,r){let o=setTimeout(()=>{e.reject(t())},r);return wr(e,()=>{clearTimeout(o)})}var gr=1e3*60*5,Y=_zustand.create.call(void 0, )((e,t)=>({privyElementsConfig:null,loginPromiseResolvers:null,activeLoginMethod:null,openLoginFlow:(r,o,a,n)=>lt(d=>{var m,u,v;let s=o.app.getConfig();if(!s)return d.reject(new R("privy_not_ready","Privy is not ready"));if(a!==null)return d.reject(new R("user_already_logged_in","User is already logged in"));if(st(),t().loginPromiseResolvers!==null)return d.reject(new R("existing_login_flow_in_progress","A login flow is already in progress"));let i=it(r.loginMethods);if(i.error)return d.reject(i.error);let c={loginMethods:i.value,appearance:{logo:(v=(u=(m=r.appearance)==null?void 0:m.logo)!=null?u:s.logo_url)!=null?v:void 0}},l=dt(d,()=>(e({privyElementsConfig:null,loginPromiseResolvers:null}),new R("login_flow_timeout","The login flow timed out")),gr);n(),e({loginPromiseResolvers:l,privyElementsConfig:c,activeLoginMethod:Ee(c.loginMethods)})}),closeLoginFlow:()=>{var r;return(r=t().loginPromiseResolvers)==null||r.reject(new R("login_flow_closed","The login flow was closed")),e({privyElementsConfig:null,loginPromiseResolvers:null})},goBack:()=>{let{activeLoginMethod:r,privyElementsConfig:o,updateActiveLoginMethod:a,closeLoginFlow:n}=t();if(!o){n();return}let d=Ee(o.loginMethods)===null;r===null||!d?n():a(null)},updateActiveLoginMethod:r=>e({activeLoginMethod:r})})),Fn= exports.A =()=>Y(e=>e.privyElementsConfig),jn= exports.B =()=>Y(e=>e.openLoginFlow),Nn= exports.C =()=>Y(e=>e.closeLoginFlow),Dn= exports.D =()=>Y(e=>e.goBack),Vn= exports.E =()=>Y(e=>[e.activeLoginMethod,e.updateActiveLoginMethod]),br=e=>{let{loginPromiseResolvers:t}=Y.getState();t==null||t.resolve(e)},ct=()=>br;var Ae=_react.createContext.call(void 0, {}),K;function ii(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 ai=e=>{let[t,r]=_react.useState.call(void 0, _reactnative.AppState.currentState==="active");_react.useEffect.call(void 0, ()=>{let L=_reactnative.AppState.addEventListener("change",Pt=>{r(Pt==="active")});return()=>{L.remove()}},[]),_react.useEffect.call(void 0, ()=>Me(e.config),[e.config]);let[o,a]=_react.useState.call(void 0, !1),[n,d]=_react.useState.call(void 0, null),[s,i]=_react.useState.call(void 0, "loading"),[c,l]=_react.useState.call(void 0, !1),[m,u]=_react.useState.call(void 0, null),[v,f]=_react.useState.call(void 0, {status:"disconnected",account:null}),[h,p]=_react.useState.call(void 0, {status:"disconnected"}),[_,g]=_react.useState.call(void 0, {status:"initial"}),[w,b]=_react.useState.call(void 0, {status:"initial"}),S=_react.useRef.call(void 0, {}),[C,O]=_react.useState.call(void 0, {status:"initial"}),[q,T]=_react.useState.call(void 0, {status:"initial"}),[N,Q]=_react.useState.call(void 0, {status:"initial"}),[ye,F]=_react.useState.call(void 0, {status:"initial"}),[I,gt]=_react.useState.call(void 0, {status:"initial"}),Re=_react.useRef.call(void 0, {}),fe=_react.useRef.call(void 0, {}),ve=_react.useRef.call(void 0, {}),we=_react.useRef.call(void 0, {}),Oe=_react.useRef.call(void 0, {}),We=_react.useRef.call(void 0, {}),bt=ct(),$=_react.useCallback.call(void 0, L=>{if(L){bt(L),Je(u)(L);return}u(null),g({status:"initial"}),b({status:"initial"}),f({status:"disconnected",account:null})},[]),k=_react.useMemo.call(void 0, ()=>{let L=e.storage||vt;return e.client?(K=e.client,K.setCallbacks({setUser:$,setIsReady:l}),K):(K=new (0, _jssdkcore2.default)({storage:ft(L),appId:e.appId,clientId:e.clientId,supportedChains:e.supportedChains,nativeAppIdentifier:yt(),baseUrl:e.baseUrl,sdkVersion:`expo:${Le.version}`,callbacks:{setUser:$,setIsReady:l},logLevel:e.logLevel,crypto:{digest:_expocrypto.digest}}),K)},[e.client,e.storage,e.appId,e.clientId,e.baseUrl,e.supportedChains,e.logLevel,$]),_t=_react.useCallback.call(void 0, ()=>($(null),k.auth.logout()),[$,k]),St=_react.useCallback.call(void 0, ()=>y(void 0,null,function*(){try{return yield k.getAccessToken()}catch(L){return console.debug(L),null}}),[k]),Et=_react.useCallback.call(void 0, ()=>k.getIdentityToken(),[k]);ot({client:k,isUserInitialized:o,setIsUserInitialized:a,setError:d});let At=$e({client:k,user:m,appId:e.appId,webViewState:s,createWalletCallbacks:fe,recoverWalletCallbacks:ve,setWalletRecoveryCallbacks:we,setRecoveryFlowState:O,wallet:v,setWallet:f}),Ct=Ke({client:k,user:m,webViewState:s,createSolanaWalletCallbacks:Oe,recoverSolanaWalletCallbacks:We,setSolanaRecoveryFlowState:T,solanaWallet:h,setSolanaWallet:p});tt({client:k,isUserInitialized:o,user:m,oAuthState:w,setOAuthState:b,oAuthCallbacks:Re,recoveryFlowState:C,oAuthStateRef:S}),rt({client:k,user:m,webViewLoaded:s==="loaded",createWalletCallbacks:fe,recoverWalletCallbacks:ve,setWalletRecoveryCallbacks:we,recoveryFlowState:C,oAuthState:w,setRecoveryFlowState:O,setWallet:f,appStateVisible:t});let{customAuthStateIsSettled:kt}=et({client:k,user:m,isReady:o});return _react2.default.createElement(_react2.default.Fragment,null,_react2.default.createElement(Ae.Provider,{value:{client:k,user:m,isReady:s!=="loading"&&o&&mt(w)&&kt,error:n,logout:_t,getAccessToken:St,getIdentityToken:Et,wallet:E(E({},v),At),solanaWallet:E(E({},h),Ct),oAuthState:w,oAuthCallbacks:Re,recoveryFlowState:C,setRecoveryFlowState:O,solanaRecoveryFlowState:q,setSolanaRecoveryFlowState:T,createWalletCallbacks:fe,recoverWalletCallbacks:ve,setWalletRecoveryCallbacks:we,createSolanaWalletCallbacks:Oe,recoverSolanaWalletCallbacks:We,setOAuthState:b,siweState:N,setSiweState:Q,otpState:_,setOtpState:g,passkeyState:ye,setPasskeyState:F,farcasterState:I,setFarcasterState:gt,oAuthStateRef:S}},e.children),_react2.default.createElement(_reactnative.View,{style:{width:0,height:0,overflow:"hidden"}},_react2.default.createElement(Fe,{logLevel:e.logLevel,client:k,isClientReady:c,setWebViewState:i,webViewState:s})))};var mt=e=>e.status!=="loading",ke=(e={})=>{let{user:t,oAuthState:r,setOAuthState:o,oAuthCallbacks:a,client:n,oAuthStateRef:d}=_react.useContext.call(void 0, Ae),s=e.action?e.action==="login":!t;_react.useEffect.call(void 0, ()=>{a.current={onSuccess:e.onSuccess,onError:e.onError}},[e.onSuccess,e.onError]);let i=_react.useCallback.call(void 0, l=>{var u;let m=x(l);return o({status:"error",error:m}),(u=e==null?void 0:e.onError)==null||u.call(e,m),m},[e==null?void 0:e.onError]);return{start:_react.useCallback.call(void 0, function(h){return y(this,arguments,function*({provider:m,redirectUri:u,isLegacyAppleIosBehaviorEnabled:v=!1,disableSignup:f}){var p,_,g;o({status:"loading"}),d.current={disableSignup:f};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:w}=yield n.auth.oauth.generateURL(m,X.createURL(u||"/")),b,S;if(_reactnative.Platform.OS==="ios"&&m==="apple"&&!v){let ye=(p=new URL(w).searchParams.get("state"))!=null?p:"",F=yield ne.signInAsync({state:ye,requestedScopes:[ne.AppleAuthenticationScope.EMAIL,ne.AppleAuthenticationScope.FULL_NAME]}).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(!F.authorizationCode||!F.state)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 n.auth.oauth.loginWithCode(F.authorizationCode,F.state,m,"raw",f?"no-signup":"login-or-sign-up");b=I.user,S=I.is_new_user}else b=yield n.auth.oauth.linkWithCode(F.authorizationCode,F.state,m,"raw");return(_=e==null?void 0:e.onSuccess)==null||_.call(e,b,S),o({status:"done"}),b!=null?b:void 0}let C=_reactnative.Platform.OS==="android"?w.replace("x.com","twitter.com"):w,O=yield ie.openAuthSessionAsync(C);if(_reactnative.Platform.OS==="android")return;if(O.type!=="success")throw[ie.WebBrowserResultType.CANCEL,ie.WebBrowserResultType.DISMISS].includes(O.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}=X.parse(O.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 Q=yield n.auth.oauth.loginWithCode(N,T,m,void 0,f?"no-signup":"login-or-sign-up");b=Q.user,S=Q.is_new_user}else b=yield n.auth.oauth.linkWithCode(N,T,m);return(g=e==null?void 0:e.onSuccess)==null||g.call(e,b,S),yield X.openURL(O.url.split("?")[0]),o({status:"done"}),b!=null?b:void 0}catch(w){i(w)}})},[t,n,o,i]),state:r}};function fi(e){let{state:t,start:r}=ke(W(E({},e),{action:"login"}));return{state:t,login:r}}function vi(e){let{state:t,start:r}=ke(W(E({},e),{action:"link"}));return{state:t,link:r}}function wi(e){return ke(e)}var yt=()=>{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 ft(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 vt={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[]})};var Wr=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 W(E({},r),{type:(o=r.type)!=null?o:"public-key",clientExtensionResults:{}})});var Ur=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 W(E({},r),{type:(o=r.type)!=null?o:"public-key",clientExtensionResults:{}})});function xi(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 Ui(e){var t,r,o,a;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:(a=e.allow_credentials)==null?void 0:a.map(({id:n,type:d,transports:s})=>({id:n,type:d,transports:s})),userVerification:e.user_verification}}function Ii(e){var t,r,o,a,n,d,s,i;return{rp:e.rp,user:{id:e.user.id,name:e.user.name,displayName:e.user.display_name},challenge:e.challenge,pubKeyCredParams:e.pub_key_cred_params,extensions:{hmacCreateSecret:(t=e.extensions)==null?void 0:t.hmac_create_secret,credProps:(o=(r=e.extensions)==null?void 0:r.cred_props)==null?void 0:o.rk,appid:(a=e.extensions)==null?void 0:a.app_id},attestation:e.attestation,excludeCredentials:e.exclude_credentials,authenticatorSelection:{authenticatorAttachment:(n=e.authenticator_selection)==null?void 0:n.authenticator_attachment,residentKey:(d=e.authenticator_selection)==null?void 0:d.resident_key,userVerification:(s=e.authenticator_selection)==null?void 0:s.user_verification,requireResidentKey:(i=e.authenticator_selection)==null?void 0:i.require_resident_key}}}exports.a = E; exports.b = W; exports.c = Ir; exports.d = y; exports.e = Le; exports.f = jr; exports.g = be; exports.h = ze; exports.i = x; exports.j = wo; exports.k = So; exports.l = Io; exports.m = fi; exports.n = vi; exports.o = wi; exports.p = yt; exports.q = ft; exports.r = vt; exports.s = R; exports.t = nt; exports.u = En; exports.v = An; exports.w = st; exports.x = On; exports.y = lt; exports.z = dt; exports.A = Fn; exports.B = jn; exports.C = Nn; exports.D = Dn; exports.E = Vn; exports.F = Ae; exports.G = ii; exports.H = ai; exports.I = Wr; exports.J = Ur; exports.K = xi; exports.L = Ui; exports.M = Ii;
@@ -0,0 +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; } }var _chunkKCJ7QALQjs = require('./chunk-KCJ7QALQ.js');var _react = require('react');var _jssdkcore = require('@privy-io/js-sdk-core');var Kr=e=>{let{user:t,client:s,setSiweState:i,siweState:r}=_react.useContext.call(void 0, _chunkKCJ7QALQjs.F),a=_react.useCallback.call(void 0, c=>{var m;let g=_chunkKCJ7QALQjs.i.call(void 0, c);return i({status:"error",error:g}),(m=e==null?void 0:e.onError)==null||m.call(e,g),g},[e==null?void 0:e.onError]),o=_react.useCallback.call(void 0, h=>_chunkKCJ7QALQjs.d.call(void 0, void 0,[h],function*({wallet:c,from:{domain:g,uri:m}}){var l;try{i({status:"generating-message"});let d=yield s.auth.siwe.init(c,g,m);return i({status:"awaiting-signature"}),(l=e==null?void 0:e.onGenerateMessage)==null||l.call(e,d.message),d.message}catch(d){throw a(d)}}),[s,a,e==null?void 0:e.onGenerateMessage]),n=_react.useCallback.call(void 0, m=>_chunkKCJ7QALQjs.d.call(void 0, void 0,[m],function*({signature:c,messageOverride:g}){var h;try{if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_link_siwe_before_logged_in",error:"Must be logged in to link a wallet, Use `useLoginWithSiwe` to login with a wallet"});i({status:"submitting-signature"});let l=yield s.auth.siwe.linkWithSiwe(c,void 0,g);return i({status:"done"}),(h=e==null?void 0:e.onSuccess)==null||h.call(e,l),l}catch(l){throw a(l)}}),[t,s,a,e==null?void 0:e.onSuccess]);return{generateSiweMessage:o,linkWithSiwe:n,state:r}};var Zr=e=>{let{user:t,client:s,setSiweState:i,siweState:r}=_react.useContext.call(void 0, _chunkKCJ7QALQjs.F),a=_react.useCallback.call(void 0, c=>{var m;let g=_chunkKCJ7QALQjs.i.call(void 0, c);return i({status:"error",error:g}),(m=e==null?void 0:e.onError)==null||m.call(e,g),g},[e==null?void 0:e.onError]),o=_react.useCallback.call(void 0, h=>_chunkKCJ7QALQjs.d.call(void 0, void 0,[h],function*({wallet:c,from:{domain:g,uri:m}}){var l;try{i({status:"generating-message"});let d=yield s.auth.siwe.init(c,g,m);return i({status:"awaiting-signature"}),(l=e==null?void 0:e.onGenerateMessage)==null||l.call(e,d.message),d.message}catch(d){throw a(d)}}),[s,a,e==null?void 0:e.onGenerateMessage]);return{loginWithSiwe:_react.useCallback.call(void 0, h=>_chunkKCJ7QALQjs.d.call(void 0, void 0,[h],function*({signature:c,messageOverride:g,disableSignup:m}){var l;try{if(t)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_login_with_siwe_while_already_logged_in",error:"Already logged in, use `useLinkWithSiwe` if you are trying to link a wallet to an existing account"});i({status:"submitting-signature"});let d=_chunkKCJ7QALQjs.f.call(void 0, ),y=yield s.auth.siwe.loginWithSiwe(c,void 0,g,m?"no-signup":"login-or-sign-up",{embedded:d==null?void 0:d.embedded});return i({status:"done"}),(l=e==null?void 0:e.onSuccess)==null||l.call(e,y.user,y.is_new_user),y.user}catch(d){throw a(d)}}),[t,s,a,e==null?void 0:e.onSuccess]),generateSiweMessage:o,state:r}};var at=e=>{let{user:t,client:s}=_react.useContext.call(void 0, _chunkKCJ7QALQjs.F),i=_react.useCallback.call(void 0, a=>{var n;let o=_chunkKCJ7QALQjs.i.call(void 0, a);return(n=e==null?void 0:e.onError)==null||n.call(e,o),o},[e==null?void 0:e.onError]);return{unlinkWallet:_react.useCallback.call(void 0, o=>_chunkKCJ7QALQjs.d.call(void 0, void 0,[o],function*({address:a}){var n;try{if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_unlink_siwe_before_logged_in",error:"Must be logged in to unlink a wallet, Use `useLoginWithSiwe` to login with a wallet"});let c=yield s.auth.siwe.unlinkWallet(a);return(n=e==null?void 0:e.onSuccess)==null||n.call(e,c),c}catch(c){throw i(c)}}),[t,s,i,e==null?void 0:e.onSuccess])}};var ft=e=>{let[t,s]=_react.useState.call(void 0, ""),{user:i,client:r,otpState:a,setOtpState:o}=_react.useContext.call(void 0, _chunkKCJ7QALQjs.F),n=_react.useCallback.call(void 0, m=>{var l;let h=_chunkKCJ7QALQjs.i.call(void 0, m);return o({status:"error",error:h}),(l=e==null?void 0:e.onError)==null||l.call(e,h),h},[e==null?void 0:e.onError]),c=_react.useCallback.call(void 0, h=>_chunkKCJ7QALQjs.d.call(void 0, void 0,[h],function*({email:m}){var l;s(m);try{o({status:"sending-code"});let d=yield r.auth.email.sendCode(m);return o({status:"awaiting-code-input"}),(l=e==null?void 0:e.onSendCodeSuccess)==null||l.call(e,{email:m}),d}catch(d){return n(d),{success:!1}}}),[r,n,e==null?void 0:e.onSendCodeSuccess]),g=_react.useCallback.call(void 0, l=>_chunkKCJ7QALQjs.d.call(void 0, void 0,[l],function*({code:m,email:h}){var d;try{if(!i)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_link_email_before_logged_in",error:"Must be logged in to link an email, Use `useLoginWithEmail` to login with email"});let y=h||t;if(!y)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid email before calling `linkWithCode`"});o({status:"submitting-code"});let w=yield r.auth.email.linkWithCode(y,m);return o({status:"done"}),(d=e==null?void 0:e.onLinkSuccess)==null||d.call(e,w),w}catch(y){n(y)}}),[i,r,t,n,e==null?void 0:e.onLinkSuccess]);return{sendCode:c,linkWithCode:g,state:a}};var St=e=>{let[t,s]=_react.useState.call(void 0, ""),{user:i,client:r,otpState:a,setOtpState:o}=_react.useContext.call(void 0, _chunkKCJ7QALQjs.F),n=_react.useCallback.call(void 0, m=>{var l;let h=_chunkKCJ7QALQjs.i.call(void 0, m);return o({status:"error",error:h}),(l=e==null?void 0:e.onError)==null||l.call(e,h),h},[e==null?void 0:e.onError]),c=_react.useCallback.call(void 0, h=>_chunkKCJ7QALQjs.d.call(void 0, void 0,[h],function*({email:m}){var l;s(m);try{o({status:"sending-code"});let d=yield r.auth.email.sendCode(m);return o({status:"awaiting-code-input"}),(l=e==null?void 0:e.onSendCodeSuccess)==null||l.call(e,{email:m}),d}catch(d){return n(d),{success:!1}}}),[r,n,e==null?void 0:e.onSendCodeSuccess]),g=_react.useCallback.call(void 0, d=>_chunkKCJ7QALQjs.d.call(void 0, void 0,[d],function*({code:m,email:h,disableSignup:l}){var y;try{if(i)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_login_with_email_while_already_logged_in",error:"Already logged in, use `useLinkWithEmail` if you are trying to link an email to an existing account"});let w=h||t;if(!w)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid email before calling `loginWithCode`"});o({status:"submitting-code"});let S=_chunkKCJ7QALQjs.f.call(void 0, ),v=yield r.auth.email.loginWithCode(w,m,l?"no-signup":"login-or-sign-up",{embedded:S==null?void 0:S.embedded});return o({status:"done"}),(y=e==null?void 0:e.onLoginSuccess)==null||y.call(e,v.user,v.is_new_user),v==null?void 0:v.user}catch(w){n(w)}}),[i,r,t,n,e==null?void 0:e.onLoginSuccess]);return{sendCode:c,loginWithCode:g,state:a}};var xt=e=>{let[t,s]=_react.useState.call(void 0, ""),{user:i,client:r,otpState:a,setOtpState:o}=_react.useContext.call(void 0, _chunkKCJ7QALQjs.F),n=_react.useCallback.call(void 0, m=>{var l;let h=_chunkKCJ7QALQjs.i.call(void 0, m);return o({status:"error",error:h}),(l=e==null?void 0:e.onError)==null||l.call(e,h),h},[e==null?void 0:e.onError]),c=_react.useCallback.call(void 0, h=>_chunkKCJ7QALQjs.d.call(void 0, void 0,[h],function*({phone:m}){var l;s(m);try{o({status:"sending-code"});let d=yield r.auth.phone.sendCode(m);return o({status:"awaiting-code-input"}),(l=e==null?void 0:e.onSendCodeSuccess)==null||l.call(e,{phone:m}),d}catch(d){return n(d),{success:!1}}}),[r,n,e==null?void 0:e.onSendCodeSuccess]),g=_react.useCallback.call(void 0, l=>_chunkKCJ7QALQjs.d.call(void 0, void 0,[l],function*({code:m,phone:h}){var d;try{if(!i)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_link_sms_before_logged_in",error:"Must be logged in to link a phone number, Use `useLoginWithSMS` to login with a phone number"});if(!(h||t))throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid phone number before calling `linkWithCode`"});o({status:"submitting-code"});let w=yield r.auth.phone.linkWithCode(h||t,m);return o({status:"done"}),(d=e==null?void 0:e.onLinkSuccess)==null||d.call(e,w),w}catch(y){n(y)}}),[i,r,t,n,e==null?void 0:e.onLinkSuccess]);return{sendCode:c,linkWithCode:g,state:a}};var It=e=>{let[t,s]=_react.useState.call(void 0, ""),{user:i,client:r,otpState:a,setOtpState:o}=_react.useContext.call(void 0, _chunkKCJ7QALQjs.F),n=_react.useCallback.call(void 0, m=>{var l;let h=_chunkKCJ7QALQjs.i.call(void 0, m);return o({status:"error",error:h}),(l=e==null?void 0:e.onError)==null||l.call(e,h),h},[e==null?void 0:e.onError]),c=_react.useCallback.call(void 0, h=>_chunkKCJ7QALQjs.d.call(void 0, void 0,[h],function*({phone:m}){var l;s(m);try{o({status:"sending-code"});let d=yield r.auth.phone.sendCode(m);return o({status:"awaiting-code-input"}),(l=e==null?void 0:e.onSendCodeSuccess)==null||l.call(e,{phone:m}),d}catch(d){return n(d),{success:!1}}}),[r,n,e==null?void 0:e.onSendCodeSuccess]),g=_react.useCallback.call(void 0, d=>_chunkKCJ7QALQjs.d.call(void 0, void 0,[d],function*({code:m,phone:h,disableSignup:l}){var y;try{if(i)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_login_with_sms_while_already_logged_in",error:"Already logged in, use `useLinkWithSMS` if you are trying to link a phone number to an existing account"});if(!(h||t))throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid phone number before calling `loginWithCode`"});o({status:"submitting-code"});let S=_chunkKCJ7QALQjs.f.call(void 0, ),v=yield r.auth.phone.loginWithCode(h||t,m,l?"no-signup":"login-or-sign-up",{embedded:S==null?void 0:S.embedded});return o({status:"done"}),(y=e==null?void 0:e.onLoginSuccess)==null||y.call(e,v.user,v.is_new_user),v==null?void 0:v.user}catch(w){n(w)}}),[i,r,t,n,e==null?void 0:e.onLoginSuccess]);return{sendCode:c,loginWithCode:g,state:a}};var _expolinking = require('expo-linking'); var R = _interopRequireWildcard(_expolinking); var F = _interopRequireWildcard(_expolinking); var Ee = _interopRequireWildcard(_expolinking); var I = _interopRequireWildcard(_expolinking); var We = _interopRequireWildcard(_expolinking);var jt=e=>{let{appState:t,getCurrentAppState:s}=_chunkKCJ7QALQjs.k.call(void 0, ),{client:i,user:r,farcasterState:a,setFarcasterState:o}=_react.useContext.call(void 0, _chunkKCJ7QALQjs.F),n=_react.useRef.call(void 0, !1),c=_react.useCallback.call(void 0, h=>{var d;let l=_chunkKCJ7QALQjs.i.call(void 0, h);return o({status:"error",error:l}),(d=e==null?void 0:e.onError)==null||d.call(e,l),l},[e==null?void 0:e.onError,o]),g=_react.useCallback.call(void 0, ()=>{n.current=!0},[]);return{linkWithFarcaster:_react.useCallback.call(void 0, (y,...w)=>_chunkKCJ7QALQjs.d.call(void 0, void 0,[y,...w],function*({relyingParty:h,redirectUrl:l},d={pollAttempts:10,pollIntervalMs:1e3}){var S;try{if(n.current=!1,!r)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_link_farcaster_before_logged_in",error:"Must be logged in to link a Farcaster account."});o({status:"generating-uri"});let{connect_uri:v,channel_token:b}=yield i.auth.farcaster.initializeAuth({relyingParty:h,redirectUrl:R.createURL(l!=null?l:"/")});if(!v)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_generate_farcaster_uri",error:"Failed to generate farcaster uri"});if(!b)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_generate_farcaster_channel_token",error:"Failed to generate farcaster channel token"});yield R.openURL(v),o({status:"polling-status"});let E=0;for(;E<d.pollAttempts;){if(n.current)throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_canceled",error:"Farcaster polling canceled"});if(t.current!=="active"&&s()!=="active"){yield _chunkKCJ7QALQjs.j.call(void 0, d.pollIntervalMs);continue}let P=yield i.auth.farcaster.getFarcasterStatus({channel_token:b});if(P.state==="completed"){o({status:"submitting-token"});let x=yield i.auth.farcaster.link(_chunkKCJ7QALQjs.a.call(void 0, {channel_token:b},P));return o({status:"done"}),(S=e==null?void 0:e.onSuccess)==null||S.call(e,x),x}E++,yield _chunkKCJ7QALQjs.j.call(void 0, d.pollIntervalMs)}throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(v){throw c(v)}}),[i,e==null?void 0:e.onSuccess,c,o,r]),state:a,cancel:g}};var Qt=e=>{let{client:t}=_react.useContext.call(void 0, _chunkKCJ7QALQjs.F),s=_react.useCallback.call(void 0, r=>{var o;let a=_chunkKCJ7QALQjs.i.call(void 0, r);return(o=e==null?void 0:e.onError)==null||o.call(e,a),a},[e==null?void 0:e.onError]);return{unlinkFarcaster:_react.useCallback.call(void 0, a=>_chunkKCJ7QALQjs.d.call(void 0, void 0,[a],function*({fid:r}){var o;try{let n=yield t.auth.farcaster.unlink({fid:r});return(o=e==null?void 0:e.onSuccess)==null||o.call(e,n),n}catch(n){throw s(n)}}),[t,e==null?void 0:e.onSuccess,s])}};var oo=e=>{let{appState:t,getCurrentAppState:s}=_chunkKCJ7QALQjs.k.call(void 0, ),{client:i,user:r,farcasterState:a,setFarcasterState:o}=_react.useContext.call(void 0, _chunkKCJ7QALQjs.F),n=_react.useRef.call(void 0, !1),c=_react.useCallback.call(void 0, h=>{var d;let l=_chunkKCJ7QALQjs.i.call(void 0, h);return o({status:"error",error:l}),(d=e==null?void 0:e.onError)==null||d.call(e,l),l},[e==null?void 0:e.onError,o]),g=_react.useCallback.call(void 0, ()=>{n.current=!0},[]);return{loginWithFarcaster:_react.useCallback.call(void 0, (w,...S)=>_chunkKCJ7QALQjs.d.call(void 0, void 0,[w,...S],function*({relyingParty:h,redirectUrl:l,disableSignup:d},y={pollAttempts:10,pollIntervalMs:1e3}){var v;try{if(n.current=!1,r)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_login_with_farcaster_while_already_logged_in",error:"Already logged in, use `useLinkWithFarcaster` if you are trying to link farcaster to an existing account"});o({status:"generating-uri"});let{connect_uri:b,channel_token:E}=yield i.auth.farcaster.initializeAuth({relyingParty:h,redirectUrl:F.createURL(l!=null?l:"/")});if(!b)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_generate_farcaster_uri",error:"Failed to generate farcaster uri"});if(!E)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_generate_farcaster_channel_token",error:"Failed to generate farcaster channel token"});yield F.openURL(b),o({status:"polling-status"});let P=0;for(;P<y.pollAttempts;){if(n.current)throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_canceled",error:"Farcaster polling canceled"});if(t.current!=="active"&&s()!=="active"){yield _chunkKCJ7QALQjs.j.call(void 0, y.pollIntervalMs);continue}let x=yield i.auth.farcaster.getFarcasterStatus({channel_token:E});if(x.state==="completed"){o({status:"submitting-token"});let G=_chunkKCJ7QALQjs.f.call(void 0, ),B=yield i.auth.farcaster.authenticate(_chunkKCJ7QALQjs.a.call(void 0, {channel_token:E,mode:d?"no-signup":"login-or-sign-up"},x),{embedded:G==null?void 0:G.embedded});return o({status:"done"}),(v=e==null?void 0:e.onSuccess)==null||v.call(e,B.user,B.is_new_user),B.user}P++,yield _chunkKCJ7QALQjs.j.call(void 0, y.pollIntervalMs)}throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(b){throw c(b)}}),[i,c,e==null?void 0:e.onSuccess,o,r,t]),state:a,cancel:g}};var _zustand = require('zustand');var X=_zustand.create.call(void 0, ()=>({status:"initial"})),C=e=>X.setState(e,!0),Xe=X.getState,fo= exports.k =()=>{let{client:e,user:t}=_react.useContext.call(void 0, _chunkKCJ7QALQjs.F),s=X(),i=_react.useCallback.call(void 0, ()=>_chunkKCJ7QALQjs.d.call(void 0, void 0,null,function*(){try{C({status:"fetching-nonce"});let a=yield e.auth.farcasterV2.initializeAuth();return C({status:"awaiting-signature"}),a}catch(a){let o=_chunkKCJ7QALQjs.i.call(void 0, a);throw C({status:"initial",error:o}),o}}),[e]),r=_react.useCallback.call(void 0, a=>_chunkKCJ7QALQjs.d.call(void 0, void 0,null,function*(){let o=Xe().status;try{if(t){let g=new (0, _jssdkcore.PrivyClientError)({code:"attempted_login_with_farcaster_while_already_logged_in",error:"Already logged in, use a link helper if you are trying to link farcaster to an existing account"});throw C({status:o,error:g}),g}C({status:"submitting-signature"});let n=_chunkKCJ7QALQjs.f.call(void 0, ),c=yield e.auth.farcasterV2.authenticate(a,{embedded:n==null?void 0:n.embedded});return C({status:"done"}),setTimeout(()=>C({status:"initial"}),1500),{user:c.user}}catch(n){let c=_chunkKCJ7QALQjs.i.call(void 0, n);throw C({status:o,error:c}),c}}),[e,t]);return{init:i,login:r,state:s}};var vo=e=>{let{client:t}=_react.useContext.call(void 0, _chunkKCJ7QALQjs.F),s=_react.useCallback.call(void 0, r=>{var o;let a=_chunkKCJ7QALQjs.i.call(void 0, r);return(o=e==null?void 0:e.onError)==null||o.call(e,a),a},[e==null?void 0:e.onError]);return{unlinkOAuth:_react.useCallback.call(void 0, o=>_chunkKCJ7QALQjs.d.call(void 0, void 0,[o],function*({provider:r,subject:a}){var n;try{let c=yield t.auth.oauth.unlink(r,a);return(n=e==null?void 0:e.onSuccess)==null||n.call(e,c),c}catch(c){throw s(c)}}),[t,e==null?void 0:e.onSuccess,s])}};var Eo=e=>{let{client:t}=_react.useContext.call(void 0, _chunkKCJ7QALQjs.F),s=_react.useRef.call(void 0, e.onOAuthTokenGrant);s.current=e.onOAuthTokenGrant,_react.useEffect.call(void 0, ()=>{let{unsubscribe:i}=t.addOAuthTokensListener(r=>{s.current(r)});return i},[t])};var _expowebbrowser = require('expo-web-browser'); var be = _interopRequireWildcard(_expowebbrowser);var _reactnative = require('react-native');var T=e=>_chunkKCJ7QALQjs.d.call(void 0, void 0,null,function*(){let t;_reactnative.Platform.OS==="android"&&(t=tr());let s=yield be.openAuthSessionAsync(e),i;if(_reactnative.Platform.OS==="android")i=yield t;else{if(s.type!=="success")throw new (0, _jssdkcore.PrivyClientError)({code:"oauth_session_failed",error:"OAuth session failed"});i=s.url}return or(i)});function tr(){let e;return new Promise((t,s)=>{e=I.addEventListener("url",({url:i})=>{i&&t(i)}),setTimeout(()=>{s(new (0, _jssdkcore.PrivyClientError)({code:"oauth_session_timeout",error:"OAuth session timed out"}))},nr)}).finally(()=>{e==null||e.remove()})}function or(e){let{queryParams:t}=I.parse(e);return t}var nr=2*60*1e3;var Ro=()=>{let{client:e,user:t}=_react.useContext.call(void 0, _chunkKCJ7QALQjs.F),s=_react.useMemo.call(void 0, ()=>_jssdkcore.crossApp.loginWithCrossAppAuth({client:e,openAuthSession:T}),[e]);return{loginWithCrossApp:_react.useCallback.call(void 0, o=>_chunkKCJ7QALQjs.d.call(void 0, void 0,[o],function*({appId:r,redirectUri:a}){if(t)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_login_with_cross_app_while_already_logged_in",error:"Already logged in, use `linkCrossAppAccount` if you are trying to link a cross app account to an existing account"});let{user:n}=yield s({providerAppId:r,redirectUrl:Ee.createURL(a||"/")});return{user:n}}),[t,s])}};var No=()=>{let{client:e,user:t}=_react.useContext.call(void 0, _chunkKCJ7QALQjs.F),s=_react.useMemo.call(void 0, ()=>_jssdkcore.crossApp.linkWithCrossAppAuth({client:e,openAuthSession:T}),[e]);return{linkWithCrossApp:_react.useCallback.call(void 0, o=>_chunkKCJ7QALQjs.d.call(void 0, void 0,[o],function*({appId:r,redirectUri:a}){if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_link_cross_app_before_logged_in",error:"Must be logged in to link a cross app account, Use `loginWithCrossAppAccount` to login with cross app"});return{user:yield s({providerAppId:r,redirectUrl:We.createURL(a||"/")})}}),[t,s])}};var Qo=()=>{let{user:e,client:t}=_react.useContext.call(void 0, _chunkKCJ7QALQjs.F);return{setRecovery:_react.useCallback.call(void 0, i=>_chunkKCJ7QALQjs.d.call(void 0, void 0,null,function*(){var n;let r=t.app.appId;if(!e)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before attempting to modify the recovery method."});let a=(n=_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, e))!=null?n:_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, e);if(!a)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});try{a.chain_type==="ethereum"?yield t.embeddedWallet.getProvider(a):a.chain_type==="solana"&&(yield t.embeddedWallet.getSolanaProvider(a,a.address,"solana-address-verifier"))}catch(c){throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"})}_jssdkcore.throwIfInvalidRecoveryUpgradePath.call(void 0, {currentRecoveryMethod:a.recovery_method,upgradeToRecoveryMethod:i.recoveryMethod});let o=yield kr({appId:r,client:t,user:e,primaryAccount:a,recoveryParams:i});try{let{user:c}=yield t.embeddedWallet.setRecovery(o);return{user:c}}catch(c){throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_set_recovery_error",error:c instanceof Error?c.message:"Error setting password on embedded wallet"})}}),[t,e])}},kr=a=>_chunkKCJ7QALQjs.d.call(void 0, void 0,[a],function*({appId:e,client:t,user:s,primaryAccount:i,recoveryParams:r}){switch(r.recoveryMethod){case"privy":return{recoveryMethod:"privy",wallet:i};case"user-passcode":return _chunkKCJ7QALQjs.b.call(void 0, _chunkKCJ7QALQjs.a.call(void 0, {},r),{wallet:i});case"google-drive":{let o=yield _chunkKCJ7QALQjs.l.call(void 0, t);return{recoveryMethod:"google-drive",wallet:i,recoveryAccessToken:o}}case"icloud":{let{recoverySecret:o,iCloudRecordName:n}=yield _chunkKCJ7QALQjs.g.call(void 0, {appId:e,client:t,user:s});return{recoveryMethod:"icloud-native",recoverySecretOverride:o,iCloudRecordNameOverride:n,wallet:i}}default:throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}});var on=()=>{let{user:e,client:t}=_react.useContext.call(void 0, _chunkKCJ7QALQjs.F);return{recover:_react.useCallback.call(void 0, i=>_chunkKCJ7QALQjs.d.call(void 0, void 0,null,function*(){var c;if(!e)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before attempting to modify the recovery method."});let r=(c=_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, e))!=null?c:_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, e);if(!r)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let a,o,n;switch(i.recoveryMethod){case"user-passcode":a=i.password;break;case"google-drive":o=yield _chunkKCJ7QALQjs.l.call(void 0, t);break;case"icloud":let{recoverySecret:g}=yield _chunkKCJ7QALQjs.h.call(void 0, {client:t,walletAddress:r.address,chainType:r.chain_type});n=g;break}try{r.chain_type==="ethereum"?yield t.embeddedWallet.getProvider(r,a,o,n):r.chain_type==="solana"&&(yield t.embeddedWallet.getSolanaProvider(r,r.address,"solana-address-verifier",a,o,n))}catch(g){throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"})}}),[t,e])}};var ee=(e={})=>{let{wallet:t,createWalletCallbacks:s,recoverWalletCallbacks:i,setWalletRecoveryCallbacks:r}=_react.useContext.call(void 0, _chunkKCJ7QALQjs.F),{onCreateWalletSuccess:a,onCreateWalletError:o,onRecoverWalletError:n,onRecoverWalletSuccess:c,onSetWalletRecoverySuccess:g,onSetWalletRecoveryError:m}=e;return _react.useEffect.call(void 0, ()=>{s.current={onSuccess:a,onError:o}},[a,o]),_react.useEffect.call(void 0, ()=>{i.current={onSuccess:c,onError:n}},[c,n]),_react.useEffect.call(void 0, ()=>{r.current={onSuccess:g,onError:m}},[c,n]),t};var mn=({onStateChange:e})=>{let t=ee();return _react.useEffect.call(void 0, ()=>{e(t)},[t])};var yn=()=>{let{getIdentityToken:e}=_react.useContext.call(void 0, _chunkKCJ7QALQjs.F);return{getIdentityToken:e}};var Cn=e=>{let{user:t,client:s}=_react.useContext.call(void 0, _chunkKCJ7QALQjs.F),i=_react.useCallback.call(void 0, a=>{var n;let o=_chunkKCJ7QALQjs.i.call(void 0, a);return(n=e==null?void 0:e.onError)==null||n.call(e,o),o},[e==null?void 0:e.onError]);return{create:_react.useCallback.call(void 0, ()=>_chunkKCJ7QALQjs.d.call(void 0, void 0,null,function*(){var a;try{if(t)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_to_create_guest_account_for_logged_in_user",error:"Already logged in, you cannot create a guest account"});let o=_chunkKCJ7QALQjs.f.call(void 0, ),n=yield s.auth.guest.create({embedded:o==null?void 0:o.embedded});return(a=e==null?void 0:e.onSuccess)==null||a.call(e,n.user,n.is_new_user),n.user}catch(o){throw i(o)}}),[s,i,t,e==null?void 0:e.onSuccess])}};function xn({onMfaRequired:e}){let{client:t,user:s}=_react.useContext.call(void 0, _chunkKCJ7QALQjs.F);_react.useEffect.call(void 0, ()=>{function i(){return _chunkKCJ7QALQjs.d.call(void 0, this,null,function*(){var r;yield e((r=s==null?void 0:s.mfa_methods.map(({type:a})=>a))!=null?r:[])})}return t.mfaPromises.on("mfaRequired",i),()=>{t.mfaPromises.off("mfaRequired",i)}},[t,s,e])}function In(){let{client:e}=_react.useContext.call(void 0, _chunkKCJ7QALQjs.F),t=_react.useCallback.call(void 0, r=>_chunkKCJ7QALQjs.d.call(void 0, this,null,function*(){var a,o;switch(r.method){case"sms":yield e.mfa.sms.sendCode({action:"verify"});return;case"passkey":let{options:n}=yield e.mfa.passkey.generateAuthenticationOptions({relying_party:r.relyingParty||((o=(a=_chunkKCJ7QALQjs.f.call(void 0, ))==null?void 0:a.mfa)==null?void 0:o.relyingParty)});return _chunkKCJ7QALQjs.L.call(void 0, n);case"totp":return;default:throw new Error(`Unsupported MFA method: ${r.mfaMethod}`)}}),[e]),s=_react.useCallback.call(void 0, r=>_chunkKCJ7QALQjs.d.call(void 0, this,null,function*(){var a,o,n,c,g,m,h;switch(r.method){case"totp":case"sms":if(typeof r.mfaCode!="string")throw new (0, _jssdkcore.PrivyClientError)({code:"invalid_mfa_code",error:"Invalid MFA code"});(n=e.mfaPromises.rootPromise.current)==null||n.resolve({mfaMethod:r.method,mfaCode:r.mfaCode,relyingParty:r.relyingParty||((o=(a=_chunkKCJ7QALQjs.f.call(void 0, ))==null?void 0:a.mfa)==null?void 0:o.relyingParty)||""}),yield new Promise((w,S)=>{e.mfaPromises.submitPromise.current={resolve:w,reject:S}});break;case"passkey":if(typeof r.mfaCode=="string")throw new (0, _jssdkcore.PrivyClientError)({code:"invalid_passkey_response",error:"Invalid authenticator response"});let l=yield _chunkKCJ7QALQjs.J.call(void 0, r.mfaCode),d=_chunkKCJ7QALQjs.K.call(void 0, l);(m=e.mfaPromises.rootPromise.current)==null||m.resolve({mfaMethod:r.method,relyingParty:r.relyingParty||((g=(c=_chunkKCJ7QALQjs.f.call(void 0, ))==null?void 0:c.mfa)==null?void 0:g.relyingParty)||"",mfaCode:d}),yield new Promise((w,S)=>{e.mfaPromises.submitPromise.current={resolve:w,reject:S}});break;default:let y=new (0, _jssdkcore.PrivyClientError)({code:"unsupported_mfa_method",error:"Unsupported MFA method"});throw(h=e.mfaPromises.rootPromise.current)==null||h.reject(y),y}}),[e]),i=_react.useCallback.call(void 0, ()=>{var r;(r=e.mfaPromises.rootPromise.current)==null||r.reject(new (0, _jssdkcore.PrivyClientError)({code:"mfa_canceled",error:"MFA canceled"}))},[e]);return{init:t,submit:s,cancel:i}}function Nn(){let{client:e}=_react.useContext.call(void 0, _chunkKCJ7QALQjs.F),t=_react.useCallback.call(void 0, r=>_chunkKCJ7QALQjs.d.call(void 0, this,null,function*(){switch(r.method){case"sms":case"totp":return yield e.mfa.initEnrollMfa(r);case"passkey":return;default:throw new Error(`Unsupported MFA method: ${r.mfaMethod}`)}}),[e]),s=_react.useCallback.call(void 0, r=>_chunkKCJ7QALQjs.d.call(void 0, this,null,function*(){switch(r.method){case"sms":case"totp":case"passkey":yield e.mfa.submitEnrollMfa(r);return;default:throw new Error(`Unsupported MFA method: ${r.mfaMethod}`)}}),[e]),i=_react.useCallback.call(void 0, r=>_chunkKCJ7QALQjs.d.call(void 0, this,null,function*(){switch(r.method){case"sms":case"totp":yield e.mfa.unenrollMfa(r.method);return;case"passkey":yield e.mfa.submitEnrollMfa({method:"passkey",credentialIds:[]});return;default:throw new Error(`Unsupported MFA method: ${r.method}`)}}),[e]);return{initMfaEnrollment:t,submitMfaEnrollment:s,unenrollMfa:i}}var Fr=(e={})=>{let{solanaWallet:t,createSolanaWalletCallbacks:s,recoverSolanaWalletCallbacks:i}=_react.useContext.call(void 0, _chunkKCJ7QALQjs.F),{onCreateWalletSuccess:r,onCreateWalletError:a,onRecoverWalletError:o,onRecoverWalletSuccess:n}=e;return _react.useEffect.call(void 0, ()=>{s.current={onSuccess:r,onError:a}},[r,a]),_react.useEffect.call(void 0, ()=>{i.current={onSuccess:n,onError:o}},[n,o]),t};var oe=()=>{let{user:e,isReady:t,logout:s,getAccessToken:i,error:r}=_react.useContext.call(void 0, _chunkKCJ7QALQjs.F);return{user:e,isReady:t,error:r,logout:s,getAccessToken:i}};var ne=()=>{let{client:e}=_react.useContext.call(void 0, _chunkKCJ7QALQjs.F);return e};var Br=()=>{let{user:e}=oe(),t=ne(),s=_react.useMemo.call(void 0, ()=>{let r=_jssdkcore.getEntropyDetailsFromUser.call(void 0, e);if(!r)return[];let a=_jssdkcore.getAllUserEmbeddedBitcoinWallets.call(void 0, e),{entropyId:o,entropyIdVerifier:n}=r;return a.map(c=>({address:c.address,walletIndex:c.wallet_index,publicKey:c.public_key,chainType:c.chain_type,getProvider:()=>t.embeddedWallet.getBitcoinProvider({wallet:c,entropyId:o,entropyIdVerifier:n})}))},[t,e]),i=_react.useCallback.call(void 0, o=>_chunkKCJ7QALQjs.d.call(void 0, void 0,[o],function*({chainType:r,createAdditional:a=!1}){let{user:n}=yield t.user.get(),c=_jssdkcore.getEntropyDetailsFromUser.call(void 0, n);if(!c)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"No existing wallet for this user, create an Ethereum walet first to add a Bitcoin wallet"});let{entropyId:g,entropyIdVerifier:m}=c,h=_jssdkcore.getAllUserEmbeddedBitcoinWallets.call(void 0, n).filter(w=>w.chain_type===r);if(!a&&h.length>0)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Wallet already exists for this user. Set `createAdditional` to `true` to create another wallet"});let l=h.length===0?0:Math.max(...h.map(w=>w.wallet_index),0)+1,d=yield t.embeddedWallet.add({chainType:r,hdWalletIndex:l,entropyId:g,entropyIdVerifier:m}),y=_jssdkcore.getAllUserEmbeddedBitcoinWallets.call(void 0, d.user).find(w=>w.chain_type===r&&w.wallet_index===l);if(!d.user||!y)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Unknown error creating wallet"});return{user:d.user,provider:yield t.embeddedWallet.getBitcoinProvider({wallet:y,entropyId:g,entropyIdVerifier:m})}}),[t]);return{wallets:s,create:i}};exports.a = Kr; exports.b = Zr; exports.c = at; exports.d = ft; exports.e = St; exports.f = xt; exports.g = It; exports.h = jt; exports.i = Qt; exports.j = oo; exports.k = fo; exports.l = vo; exports.m = Eo; exports.n = Ro; exports.o = No; exports.p = Qo; exports.q = on; exports.r = ee; exports.s = mn; exports.t = yn; exports.u = Cn; exports.v = xn; exports.w = In; exports.x = Nn; exports.y = Fr; exports.z = oe; exports.A = ne; exports.B = Br;
@@ -1 +1 @@
1
- var Rt=Object.defineProperty,Ot=Object.defineProperties;var Wt=Object.getOwnPropertyDescriptors;var ae=Object.getOwnPropertySymbols;var Ue=Object.prototype.hasOwnProperty,Ie=Object.prototype.propertyIsEnumerable;var xe=(e,t,r)=>t in e?Rt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,E=(e,t)=>{for(var r in t||(t={}))Ue.call(t,r)&&xe(e,r,t[r]);if(ae)for(var r of ae(t))Ie.call(t,r)&&xe(e,r,t[r]);return e},W=(e,t)=>Ot(e,Wt(t));var Ir=(e,t)=>{var r={};for(var o in e)Ue.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(e!=null&&ae)for(var o of ae(e))t.indexOf(o)<0&&Ie.call(e,o)&&(r[o]=e[o]);return r};var y=(e,t,r)=>new Promise((o,a)=>{var n=i=>{try{s(r.next(i))}catch(c){a(c)}},d=i=>{try{s(r.throw(i))}catch(c){a(c)}},s=i=>i.done?o(i.value):Promise.resolve(i.value).then(n,d);s((r=r.apply(e,t)).next())});import*as ne from"expo-apple-authentication";import{applicationId as wt}from"expo-application";import*as X from"expo-linking";import*as U from"expo-secure-store";import*as ie from"expo-web-browser";import{useCallback as ht,useContext as Pr,useEffect as Rr}from"react";import{Platform as Ce}from"react-native";import{PrivyClientError as j}from"@privy-io/js-sdk-core";import{digest as _r}from"expo-crypto";import oe,{useState as A,useMemo as Sr,createContext as Er,useCallback as me,useRef as V,useEffect as ut}from"react";import{AppState as pt,View as Ar}from"react-native";import Cr,{PrivyClientError as kr}from"@privy-io/js-sdk-core";var Le={name:"@privy-io/expo",version:"0.38.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"},"./smart-wallets":{require:"./dist/smart-wallets.js",import:"./dist/esm/smart-wallets.js",types:"./dist/smart-wallets.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,tsx}"'},browserslist:["defaults","node >= 18","not op_mini all"],dependencies:{"@privy-io/js-sdk-core":"0.39.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","@testing-library/react-native":"^12.8.1","@tsconfig/node16-strictest-esm":"^1.0.3","@types/jest":"^29.1.2",buffer:"^5.4.3","eslint-plugin-react-hooks":"^5.0.0-canary-7118f5dd7-20230705",jest:"^29.7.0","jest-expo":"~51.0.0",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-clipboard":"*","expo-constants":"*","expo-crypto":"*","expo-font":"*","expo-linking":"*","expo-secure-store":"*","expo-web-browser":"*",permissionless:"^0.2.10",react:"*","react-native":"*","react-native-passkeys":"^0.3.0","react-native-qrcode-styled":"*","react-native-safe-area-context":"*","react-native-svg":"*","react-native-webview":"*",viem:"^2.21.36"},peerDependenciesMeta:{"@expo-google-fonts/inter":{optional:!0},"expo-font":{optional:!0},permissionless:{optional:!0},viem:{optional:!0}},publishConfig:{access:"public"}};import Ut from"react-fast-compare";import{create as It}from"zustand";var se=It(()=>{}),Me=e=>se.setState(t=>Ut(t,e)?t:e),jr=se.getState;import Lt from"react";import{useCallback as Mt,useEffect as Te,useRef as Tt}from"react";import{AppState as Ft}from"react-native";import jt from"react-native-webview";var Fe=({client:e,isClientReady:t,setWebViewState:r,webViewState:o,logLevel:a})=>{let n=Tt(null);Te(()=>{n.current&&o==="loaded"&&e.setMessagePoster(n.current)},[e,n.current,o==="loaded"]),Te(()=>Ft.addEventListener("change",i=>y(void 0,null,function*(){n.current&&i==="active"&&((yield e.embeddedWallet.ping(500))||(n.current.reload(),r("reloading")))})).remove,[]);let d=Mt(s=>y(void 0,null,function*(){let{data:i}=s.nativeEvent;e.embeddedWallet.onMessage(JSON.parse(i))}),[e]);return t?Lt.createElement(jt,{style:{flex:1},ref:n,cacheEnabled:!1,cacheMode:"LOAD_NO_CACHE",source:{uri:e.embeddedWallet.getURL()},webviewDebuggingEnabled:a==="DEBUG",onLoad:()=>r("loaded"),onError:console.error,onMessage:d}):null};import{useCallback as he,useEffect as Ve,useMemo as ge}from"react";import{errorIndicatesRecoveryIsNeeded as Dt,getAllUserEmbeddedSolanaWallets as Vt,getEntropyDetailsFromUser as Kt,PrivyClientError as Z}from"@privy-io/js-sdk-core";import{getAllUserEmbeddedSolanaWallets as le,getEntropyDetailsFromAccount as je,getUserEmbeddedEthereumWallet as Nt,PrivyClientError as H}from"@privy-io/js-sdk-core";function Ne(n){return y(this,arguments,function*({client:e,setSolanaWallet:t,createSolanaWalletCallbacks:r,setSolanaRecoveryFlowState:o,opts:a}){var d,s,i;t({status:"creating"});try{let{user:c}=yield e.user.get(),l=le(c),m=l[0],u=(d=Nt(c))!=null?d:void 0;if(a!=null&&a.recoveryMethod&&a.recoveryMethod!=="privy")throw new H({code:"embedded_wallet_creation_error",error:"Unsupported recovery method for solana wallet."});if(!(a!=null&&a.createAdditional)&&m)throw new H({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(m){let p=u!=null?u:m,{entropyId:_,entropyIdVerifier:g}=je(p),w=Math.max(...l.map(C=>C.wallet_index),0)+1,b=yield e.embeddedWallet.add({chainType:"solana",entropyId:_,entropyIdVerifier:g,hdWalletIndex:w}),S=le(b.user).find(C=>C.wallet_index===w);if(!S)throw new H({error:"Embedded wallet account not created",code:"embedded_wallet_creation_error"});v=yield e.embeddedWallet.getSolanaProvider(S,_,g),f=b.user}else{let p=yield e.embeddedWallet.createSolana({ethereumAccount:u}),_=le(p.user).find(S=>S.wallet_index===0);if(!_)throw new H({error:"Embedded wallet account not created",code:"embedded_wallet_creation_error"});let g=u!=null?u:_,{entropyId:w,entropyIdVerifier:b}=je(g);v=yield e.embeddedWallet.getSolanaProvider(_,w,b),f=p.user}let h=le(f)[0];if(!h)throw new H({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:h.public_key}),o({status:"initial"}),v}catch(c){let l=c instanceof Error?c.message:"Error creating embedded wallet";throw t({status:"error",error:l}),o({status:"initial"}),new H({code:"embedded_wallet_creation_error",error:l})}})}import{PrivyClientError as z}from"@privy-io/js-sdk-core";function de(c){return y(this,arguments,function*({client:e,account:t,setWallet:r,recoverWalletCallbacks:o,recoveryMethod:a,setRecoveryFlowState:n,password:d,recoveryToken:s,recoverySecretOverride:i}){var l,m,u,v;if(!t)throw new z({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});switch(a){case"user-passcode":if(!d)throw new z({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!s)throw new z({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!i)throw new z({code:"embedded_wallet_recovery_error",error:"Record name is required for icloud recovery method"});break}r({status:"connecting",account:t});try{let f=yield e.embeddedWallet.getProvider(t,d,s,i);return r({status:"connected",provider:f,account:t}),n({status:"initial"}),(m=(l=o.current)==null?void 0:l.onSuccess)==null||m.call(l,f),f}catch(f){r({status:"needs-recovery",account:t}),n({status:"initial"});let h=new z({code:"embedded_wallet_recovery_error",error:f instanceof Error?f.message:"Error recovering embedded wallet"});throw(v=(u=o.current)==null?void 0:u.onError)==null||v.call(u,h),h}})}function De(s){return y(this,arguments,function*({client:e,account:t,entropyId:r,entropyIdVerifier:o,setSolanaWallet:a,recoverSolanaWalletCallbacks:n,setSolanaRecoveryFlowState:d}){var i,c,l,m;a({status:"connecting"});try{let u=yield e.embeddedWallet.getSolanaProvider(t,r,o);return a({status:"connected",publicKey:u._publicKey}),d({status:"initial"}),(c=(i=n.current)==null?void 0:i.onSuccess)==null||c.call(i,u),u}catch(u){a({status:"needs-recovery"}),d({status:"initial"});let v=new z({code:"embedded_wallet_recovery_error",error:u instanceof Error?u.message:"Error recovering embedded wallet"});throw(m=(l=n.current)==null?void 0:l.onError)==null||m.call(l,v),v}})}var Ke=({client:e,user:t,solanaWallet:r,setSolanaWallet:o,setSolanaRecoveryFlowState:a,webViewState:n,createSolanaWalletCallbacks:d,recoverSolanaWalletCallbacks:s})=>{let i=ge(()=>Vt(t),[t]),c=ge(()=>i.length===0?null:Kt(t),[t,i]),l=ge(()=>{if(!c)return[];let{entropyId:f,entropyIdVerifier:h}=c;return i.map(p=>({address:p.address,publicKey:p.address,walletIndex:p.wallet_index,getProvider:()=>e.embeddedWallet.getSolanaProvider(p,f,h)}))},[i,c,e]),m=he(f=>y(void 0,null,function*(){return yield Ne({client:e,setSolanaWallet:o,createSolanaWalletCallbacks:d,setSolanaRecoveryFlowState:a,opts:f})}),[e,d]),u=he(()=>y(void 0,null,function*(){if(!c)throw new Z({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{entropyId:f,entropyIdVerifier:h}=c;return De({client:e,account:i[0],entropyId:f,entropyIdVerifier:h,setSolanaWallet:o,recoverSolanaWalletCallbacks:s,setSolanaRecoveryFlowState:a})}),[e,c,i,s,a,o]),v=he(()=>y(void 0,null,function*(){if(!c)throw o({status:"not-created"}),new Z({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});o(f=>f.status==="connected"?{status:"reconnecting"}:{status:"connecting"});try{let{entropyId:f,entropyIdVerifier:h}=c,p=yield e.embeddedWallet.getSolanaProvider(i[0],f,h);return o({status:"connected",publicKey:i[0].public_key}),p}catch(f){throw Dt(f)?(o({status:"needs-recovery"}),new Z({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):f instanceof Error?(o({status:"error",error:f.message}),new Z({code:"unknown_embedded_wallet_error",error:f.message})):(o({status:"error",error:"Error loading embedded wallet"}),new Z({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[i,e,c,o]);return Ve(()=>{if(!t&&r.status!=="disconnected")return o({status:"disconnected"});n==="loaded"&&v().catch(()=>{})},[n,t]),Ve(()=>{r.status==="error"&&r.error.includes("User must be logged in")&&v()},[r.status]),{create:m,recover:u,getProvider:v,wallets:l}};import{useCallback as re,useEffect as Ye,useMemo as Zt}from"react";import{getUserEmbeddedSolanaWallet as Xe,throwIfInvalidRecoveryUpgradePath as er}from"@privy-io/js-sdk-core";import{errorIndicatesRecoveryIsNeeded as tr,getUserEmbeddedWallet as rr,PrivyClientError as P}from"@privy-io/js-sdk-core";import{getUserEmbeddedEthereumWallet as qt}from"@privy-io/js-sdk-core";import{PrivyClientError as ee}from"@privy-io/js-sdk-core";function ce(l){return y(this,arguments,function*({client:e,setWallet:t,createWalletCallbacks:r,recoveryMethod:o,setRecoveryFlowState:a,password:n,recoveryToken:d,recoverySecretOverride:s,iCloudRecordNameOverride:i,solanaAccount:c}){var u,v;switch(o){case"user-passcode":if(!n)throw new ee({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!d)throw new ee({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!s||!i)throw new ee({code:"embedded_wallet_recovery_error",error:"iCloud recovery failed due to inability to store credentials"});break}t({status:"creating",account:null});let m=o==="icloud"?"icloud-native":o;try{let{user:f}=yield e.embeddedWallet.create({password:n,recoveryMethod:m,recoveryToken:d,recoverySecretOverride:s,iCloudRecordNameOverride:i,solanaAccount:c}),h=qt(f);if(!h)throw new ee({error:"Embedded wallet account not created",code:"embedded_wallet_creation_error"});let p=yield e.embeddedWallet.getProvider(h);return(v=(u=r.current)==null?void 0:u.onSuccess)==null||v.call(u,p),t({status:"connected",provider:p,account:h}),a({status:"initial"}),p}catch(f){let h=f instanceof Error?f.message:"Error creating embedded wallet";throw t({status:"error",error:h,account:null}),a({status:"initial"}),new ee({code:"embedded_wallet_creation_error",error:h})}})}import{Platform as qe}from"react-native";import{PrivyClientError as M}from"@privy-io/js-sdk-core";function He(){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 be(o){return y(this,arguments,function*({user:e,appId:t,client:r}){var s;if(qe.OS==="android")throw new M({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let a=yield He(),n=yield r.recovery.icloudAuth.getICloudConfiguration("expo-ios");if(!(n==null?void 0:n.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:c}=yield a.writeRecoverySecretToICloud({containerId:n.container_identifier,appId:t,userId:e.id});return{recoverySecret:i,iCloudRecordName:c}}catch(i){if(i instanceof Error){let c=(s=i.message.split("Caused by: ")[1])!=null?s:"Error writing to iCloud";throw new M({code:"embedded_wallet_recovery_error",error:c})}throw new M({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}function ze(o){return y(this,arguments,function*({walletAddress:e,client:t,chainType:r}){var c;if(qe.OS==="android")throw new M({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let a=yield He(),d=(yield t.recovery.getRecoveryKeyMaterial(e,r)).icloud_record_name;if(!d)throw new M({code:"embedded_wallet_recovery_error",error:"iCloud recovery not properly backed up."});let s=yield t.recovery.icloudAuth.getICloudConfiguration("expo-ios"),i=s==null?void 0:s.container_identifier;if(!i)throw new M({code:"embedded_wallet_recovery_error",error:"An iCloud Container ID must be specified in the Privy Dashboard."});try{let{recoverySecret:l}=yield a.readRecoverySecretFromICloud({containerId:i,recordName:d});return{recoverySecret:l}}catch(l){if(l instanceof Error){let m=(c=l.message.split("Caused by: ")[1])!=null?c:"Error writing to iCloud";throw new M({code:"embedded_wallet_recovery_error",error:m})}throw new M({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}import*as D from"expo-linking";import*as Be from"expo-web-browser";import{Platform as Ge}from"react-native";import{PrivyClientError as J}from"@privy-io/js-sdk-core";import Ht from"react-fast-compare";var Je=e=>t=>e(r=>Ht(r,t)?r:t);import{PrivyApiError as zt,PrivyClientError as Jt}from"@privy-io/js-sdk-core";function x(e){return e instanceof Error||e instanceof zt||e instanceof Jt?e:typeof e=="string"?new Error(e):new Error("Unknown error")}var wo=e=>new Promise(t=>setTimeout(t,e));import{useEffect as Bt,useRef as Gt}from"react";import{AppState as _e}from"react-native";function So(){let e=Gt(_e.currentState);Bt(()=>_e.addEventListener("change",o=>{e.current=o}).remove,[]);function t(){return _e.currentState}return{appState:e,getCurrentAppState:t}}function te(a){return y(this,arguments,function*({provider:e,redirectUri:t,client:r,onError:o}){try{let n;switch(e){case"google-drive":{let{url:c}=yield r.recovery.auth.generateURL(D.createURL(t||"/"));n=c;break}default:throw new J({error:"OAuth invalid provider",code:"embedded_wallet_recovery_error"})}let d=yield Be.openAuthSessionAsync(n);if(Ge.OS==="android")return;if(d.type!=="success")throw new J({error:"Recovery OAuth session failed",code:"embedded_wallet_recovery_error"});let{queryParams:s}=D.parse(d.url),i;switch(e){case"google-drive":{let{privy_oauth_state:c,privy_oauth_code:l}=s;if(!l||!c)throw new J({error:"Recovery OAuth invalid credentials",code:"embedded_wallet_recovery_error"});i=yield ue({oAuthCode:l,oAuthState:c,client:r});break}default:throw new J({error:"Recovery OAuth invalid provider",code:"embedded_wallet_recovery_error"})}return i}catch(n){throw o==null||o(x(n)),n}})}function ue(o){return y(this,arguments,function*({oAuthCode:e,oAuthState:t,client:r}){let{access_token:a}=yield r.recovery.auth.authorize(e,t);if(!a)throw new J({error:"OAuth invalid credentials",code:"login_with_oauth_returned_with_invalid_credentials"});return a})}var Yt=2*60*1e3;function Xt(e){let t;return new Promise((r,o)=>{t=D.addEventListener("url",n=>y(this,[n],function*({url:a}){if(!a)return;let{queryParams:d}=D.parse(a),{privy_oauth_state:s,privy_oauth_code:i}=d!=null?d:{};if(typeof i!="string"||typeof s!="string")return;let c=yield ue({client:e,oAuthCode:i,oAuthState:s});r(c)})),setTimeout(()=>{o(new J({code:"embedded_wallet_set_recovery_error",error:"Failed to complete Google Drive recovery flow"}))},Yt)}).finally(()=>{t==null||t.remove()})}function Io(e){return y(this,null,function*(){let t;Ge.OS==="android"&&(t=Xt(e));let r=yield te({provider:"google-drive",client:e});return r!=null?r:yield t})}import{getUserEmbeddedWallet as Qt,PrivyClientError as $t}from"@privy-io/js-sdk-core";function pe(n){return y(this,arguments,function*({client:e,recoveryInput:t,setWalletRecoveryCallbacks:r,setRecoveryFlowState:o,setWallet:a}){var d,s,i,c;try{let{provider:l,user:m}=yield e.embeddedWallet.setRecovery(t),u=l,v=Qt(m);return a({status:"connected",provider:u,account:v}),(s=(d=r.current)==null?void 0:d.onSuccess)==null||s.call(d,u),o({status:"initial"}),u}catch(l){let m=new $t({code:"embedded_wallet_set_recovery_error",error:l instanceof Error?l.message:"Error setting password on embedded wallet"});throw(c=(i=r.current)==null?void 0:i.onError)==null||c.call(i,m),o({status:"initial"}),m}})}function Qe(e){return e===void 0?{recoveryMethod:"privy"}:typeof e=="string"?{recoveryMethod:"user-passcode",password:e}:e.recoveryMethod==="user-passcode"?{recoveryMethod:"user-passcode",password:e.password}:{recoveryMethod:e.recoveryMethod}}var $e=({client:e,user:t,appId:r,wallet:o,setWallet:a,setRecoveryFlowState:n,webViewState:d,createWalletCallbacks:s,recoverWalletCallbacks:i,setWalletRecoveryCallbacks:c})=>{let l=Zt(()=>rr(t),[t]),m=re(p=>y(void 0,null,function*(){var O,q;if(l)throw new P({error:"This user already has an embedded wallet",code:"embedded_wallet_already_exists"});let{user:_}=yield e.user.get(),{password:g,recoveryMethod:w}=Qe(p),b,S,C;if(w==="google-drive"&&(b=yield te({provider:w,client:e,onError:(O=s.current)==null?void 0:O.onError}),n({status:"creating-wallet"}),!b))return null;if(w==="icloud"){if(!_)throw new P({code:"embedded_wallet_recovery_error",error:"User must be loaded before creating a wallet with iCloud."});let{recoverySecret:T,iCloudRecordName:N}=yield be({user:_,appId:r,client:e});S=T,C=N}return yield ce({client:e,setWallet:a,createWalletCallbacks:s,recoveryMethod:w,setRecoveryFlowState:n,password:g,recoverySecretOverride:S,iCloudRecordNameOverride:C,solanaAccount:(q=Xe(_))!=null?q:void 0})}),[e,l,t]),u=re(p=>y(void 0,null,function*(){var w;if(o.status!=="connected")throw new P({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"});if(!l)throw new P({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});if(Xe(t))throw new P({code:"embedded_wallet_set_recovery_error",error:"Cannot set user-controlled recovery for a user with an embedded Solana wallet."});er({currentRecoveryMethod:l.recovery_method,upgradeToRecoveryMethod:p.recoveryMethod});let _,g;switch(p.recoveryMethod){case"privy":g=W(E({},p),{wallet:l});break;case"user-passcode":g=W(E({},p),{wallet:l,password:p.password});break;case"google-drive":if(_=yield te({provider:p.recoveryMethod,client:e,onError:(w=c.current)==null?void 0:w.onError}),n({status:"upgrading-recovery"}),!_)return null;g={recoveryMethod:"google-drive",wallet:l,recoveryAccessToken:_};break;case"icloud":if(!t)throw new P({code:"embedded_wallet_recovery_error",error:"User must be loaded before backing up to iCloud."});let{recoverySecret:b,iCloudRecordName:S}=yield be({user:t,appId:r,client:e});g={recoveryMethod:"icloud-native",recoverySecretOverride:b,iCloudRecordNameOverride:S,wallet:l};break;default:throw new P({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}return pe({client:e,recoveryInput:g,setWalletRecoveryCallbacks:c,setRecoveryFlowState:n,setWallet:a})}),[e,l,o.status,t]),v=re(p=>y(void 0,null,function*(){return u({recoveryMethod:"user-passcode",password:p})}),[e,l,o.status]),f=re(p=>y(void 0,null,function*(){var S;if(!l)throw new P({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{password:_,recoveryMethod:g}=Qe(p),w,b;if(g==="google-drive"&&(w=yield te({provider:g,client:e,onError:(S=i.current)==null?void 0:S.onError}),n({status:"recovering"}),!w))return null;if(g==="icloud"){if(!t)throw new P({code:"embedded_wallet_recovery_error",error:"User must be loaded before recovering via iCloud."});let{recoverySecret:C}=yield ze({client:e,walletAddress:l.address});b=C}return de({client:e,account:l,setWallet:a,recoverWalletCallbacks:i,recoveryMethod:g,setRecoveryFlowState:n,password:_,recoveryToken:w,recoverySecretOverride:b})}),[e,l]),h=re(()=>y(void 0,null,function*(){if(!l)throw a({status:"not-created",account:null}),new P({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});a(p=>p.status==="connected"?{status:"reconnecting",account:l}:{status:"connecting",account:l});try{let p=yield e.embeddedWallet.getProvider(l);return a({status:"connected",provider:p,account:l}),p}catch(p){throw tr(p)?(a({status:"needs-recovery",account:l}),new P({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):p instanceof Error?(a({status:"error",error:p.message,account:l}),new P({code:"unknown_embedded_wallet_error",error:p.message})):(a({status:"error",error:"Error loading embedded wallet",account:l}),new P({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,l]);return Ye(()=>{if(!t&&o.status!=="disconnected")return a({status:"disconnected",account:null});d==="loaded"&&h().catch(()=>{})},[d,t,l]),Ye(()=>{o.status==="error"&&o.error.includes("User must be logged in")&&h()},[o.status]),{create:m,recover:f,setPassword:v,setRecovery:u,getProvider:h}};import{useEffect as or,useState as nr}from"react";import{PrivyClientError as Ze}from"@privy-io/js-sdk-core";var et=({client:e,user:t,isReady:r})=>{let o=se(d=>d==null?void 0:d.customAuth),[a,n]=nr({status:"initial"});return or(()=>{(()=>y(void 0,null,function*(){if(!(o!=null&&o.enabled)){n({status:"not-enabled"});return}n({status:"loading"});let{getCustomAccessToken:s,isLoading:i}=o;if(!(!r||i))try{let c=yield s();if(!c&&t){yield e.auth.logout(),n({status:"done"});return}if(!c){n({status:"done"});return}if(t){n({status:"done"});return}if(!(yield e.auth.customProvider.syncWithToken(c))){yield e.auth.logout(),n({status:"error",error:new Ze({error:"Failed to sync with custom auth provider",code:"third_party_auth_error"})});return}n({status:"done"})}catch(c){if(console.log("Error syncing with custom auth provider",c),n({status:"error",error:c}),t)throw yield e.auth.logout(),new Ze({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:a,customAuthStateIsSettled:a.status!=="loading"&&a.status!=="initial"}};import*as B from"expo-linking";import{useCallback as ir,useEffect as ar}from"react";import{Platform as sr}from"react-native";var tt=({client:e,user:t,isUserInitialized:r,oAuthState:o,oAuthCallbacks:a,setOAuthState:n,recoveryFlowState:d,oAuthStateRef:s})=>{let i=B.useURL(),c=ir(l=>{var u,v;let m=x(l);n({status:"error",error:m}),(v=(u=a.current).onError)==null||v.call(u,m)},[n]);return ar(()=>{function l(){return y(this,null,function*(){var f,h;if(!i||o.status!=="loading"||d.status!=="initial")return;let{queryParams:m}=B.parse(i),{privy_oauth_state:u,privy_oauth_code:v}=m;if(!v||!u){n({status:"done"});return}try{let p,_;if(t)p=yield e.auth.oauth.linkWithCode(v,u);else{let g=yield e.auth.oauth.loginWithCode(v,u,void 0,void 0,s.current.disableSignup?"no-signup":"login-or-sign-up");p=g.user,_=!!g.is_new_user}return(h=(f=a.current).onSuccess)==null||h.call(f,p,_),s.current={},n({status:"done"}),yield B.openURL(i.split("?")[0])}catch(p){s.current={},c(p)}})}sr.OS==="android"&&r&&l()},[i,r])};import*as G from"expo-linking";import{useCallback as lr,useEffect as dr,useMemo as cr}from"react";import{Platform as ur}from"react-native";import{getUserEmbeddedSolanaWallet as pr,getUserEmbeddedWallet as mr}from"@privy-io/js-sdk-core";var rt=({client:e,user:t,createWalletCallbacks:r,recoverWalletCallbacks:o,setWalletRecoveryCallbacks:a,recoveryFlowState:n,oAuthState:d,setRecoveryFlowState:s,setWallet:i,appStateVisible:c,webViewLoaded:l})=>{let m=G.useURL(),u=cr(()=>mr(t),[t]),v=lr(f=>{var p,_,g,w;let h=x(f);n.status==="creating-wallet"?(_=(p=r.current).onError)==null||_.call(p,x(h)):(w=(g=o.current).onError)==null||w.call(g,x(h)),s({status:"initial"})},[n]);return dr(()=>{function f(){return y(this,null,function*(){var g;if(!m&&n.status!=="initial"&&c&&v(new Error("Recovery OAuth session failed")),!m||n.status==="initial"||d.status!=="initial"||!c||!l)return;let{queryParams:h}=G.parse(m),{privy_oauth_state:p,privy_oauth_code:_}=h;if(!(!_||!p)){yield G.openURL(m.split("?")[0]);try{let w=yield ue({oAuthCode:_,oAuthState:p,client:e});if(n.status==="creating-wallet"){let b=(g=pr(t))!=null?g:void 0;yield ce({client:e,setWallet:i,createWalletCallbacks:r,recoveryMethod:"google-drive",setRecoveryFlowState:s,recoveryToken:w,solanaAccount:b})}else if(n.status==="upgrading-recovery"){if(!u)throw new Error("Embedded wallet not found");yield pe({client:e,recoveryInput:{recoveryMethod:"google-drive",wallet:u,recoveryAccessToken:w},setWalletRecoveryCallbacks:a,setRecoveryFlowState:s,setWallet:i})}else yield de({client:e,account:u,setWallet:i,recoverWalletCallbacks:o,recoveryMethod:"google-drive",setRecoveryFlowState:s,recoveryToken:w})}catch(w){v(w)}}})}ur.OS==="android"&&f()},[m,n.status,c,l])};import{useEffect as yr}from"react";var ot=({client:e,isUserInitialized:t,setIsUserInitialized:r,setError:o})=>{yr(()=>{t||(()=>y(void 0,null,function*(){try{yield e.initialize()}catch(n){o(n instanceof Error?n:new Error(String(n)))}try{yield e.user.get()}catch(n){}finally{r(!0)}}))()},[e,t,o,r])};import{create as hr}from"zustand";var R=class extends Error{constructor(r,o){super(o);this.code=r,this.error=o}},nt=class extends R{constructor(r){super("underlying_error",r instanceof Error?r.message:"An underlying error occurred");this.wrappedError=r}};var Se={success:e=>({value:e}),error:e=>({error:e})};var it=e=>{let t=Array.from(new Set(e));return t.length===0?Se.error(new R("no_login_methods_available","No login methods available")):Se.success(t)},Ee=e=>{let t=e.length,r=e.every(o=>o==="sms"||o==="email");return t<=2&&r?e[0]:null},En=(e,t)=>{if(e.length!==2)return null;let[r,o]=e;return t===r?o:r},An={email:"email",sms:"phone",google:"Google",apple:"Apple",discord:"Discord",twitter:"X",github:"Github",spotify:"Spotify",instagram:"Instagram",tiktok:"Tiktok",linkedin:"LinkedIn"};import{useEffect as fr}from"react";import{createStore as vr}from"zustand/vanilla";var at=vr()(e=>({isUIMounted:!1,updateUIMounted:t=>e({isUIMounted:t})})),st=()=>{let{isUIMounted:e}=at.getState();if(!e)throw new R("privy_elements_not_ready","Privy Elements is not mounted")},On=()=>{fr(()=>{let{updateUIMounted:e}=at.getState();return e(!0),()=>{e(!1)}},[])};function lt(e){return new Promise((t,r)=>{e({resolve:t,reject:r})})}function wr(e,t){return{resolve:r=>{t(),e.resolve(r)},reject:r=>{t(),e.reject(r)}}}function dt(e,t,r){let o=setTimeout(()=>{e.reject(t())},r);return wr(e,()=>{clearTimeout(o)})}var gr=1e3*60*5,Y=hr()((e,t)=>({privyElementsConfig:null,loginPromiseResolvers:null,activeLoginMethod:null,openLoginFlow:(r,o,a,n)=>lt(d=>{var m,u,v;let s=o.app.getConfig();if(!s)return d.reject(new R("privy_not_ready","Privy is not ready"));if(a!==null)return d.reject(new R("user_already_logged_in","User is already logged in"));if(st(),t().loginPromiseResolvers!==null)return d.reject(new R("existing_login_flow_in_progress","A login flow is already in progress"));let i=it(r.loginMethods);if(i.error)return d.reject(i.error);let c={loginMethods:i.value,appearance:{logo:(v=(u=(m=r.appearance)==null?void 0:m.logo)!=null?u:s.logo_url)!=null?v:void 0}},l=dt(d,()=>(e({privyElementsConfig:null,loginPromiseResolvers:null}),new R("login_flow_timeout","The login flow timed out")),gr);n(),e({loginPromiseResolvers:l,privyElementsConfig:c,activeLoginMethod:Ee(c.loginMethods)})}),closeLoginFlow:()=>{var r;return(r=t().loginPromiseResolvers)==null||r.reject(new R("login_flow_closed","The login flow was closed")),e({privyElementsConfig:null,loginPromiseResolvers:null})},goBack:()=>{let{activeLoginMethod:r,privyElementsConfig:o,updateActiveLoginMethod:a,closeLoginFlow:n}=t();if(!o){n();return}let d=Ee(o.loginMethods)===null;r===null||!d?n():a(null)},updateActiveLoginMethod:r=>e({activeLoginMethod:r})})),Fn=()=>Y(e=>e.privyElementsConfig),jn=()=>Y(e=>e.openLoginFlow),Nn=()=>Y(e=>e.closeLoginFlow),Dn=()=>Y(e=>e.goBack),Vn=()=>Y(e=>[e.activeLoginMethod,e.updateActiveLoginMethod]),br=e=>{let{loginPromiseResolvers:t}=Y.getState();t==null||t.resolve(e)},ct=()=>br;var Ae=Er({}),K;function ii(e){return K?K.getAccessToken():e!=null&&e.strict?Promise.reject(new kr({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 ai=e=>{let[t,r]=A(pt.currentState==="active");ut(()=>{let L=pt.addEventListener("change",Pt=>{r(Pt==="active")});return()=>{L.remove()}},[]),ut(()=>Me(e.config),[e.config]);let[o,a]=A(!1),[n,d]=A(null),[s,i]=A("loading"),[c,l]=A(!1),[m,u]=A(null),[v,f]=A({status:"disconnected",account:null}),[h,p]=A({status:"disconnected"}),[_,g]=A({status:"initial"}),[w,b]=A({status:"initial"}),S=V({}),[C,O]=A({status:"initial"}),[q,T]=A({status:"initial"}),[N,Q]=A({status:"initial"}),[ye,F]=A({status:"initial"}),[I,gt]=A({status:"initial"}),Re=V({}),fe=V({}),ve=V({}),we=V({}),Oe=V({}),We=V({}),bt=ct(),$=me(L=>{if(L){bt(L),Je(u)(L);return}u(null),g({status:"initial"}),b({status:"initial"}),f({status:"disconnected",account:null})},[]),k=Sr(()=>{let L=e.storage||vt;return e.client?(K=e.client,K.setCallbacks({setUser:$,setIsReady:l}),K):(K=new Cr({storage:ft(L),appId:e.appId,clientId:e.clientId,supportedChains:e.supportedChains,nativeAppIdentifier:yt(),baseUrl:e.baseUrl,sdkVersion:`expo:${Le.version}`,callbacks:{setUser:$,setIsReady:l},logLevel:e.logLevel,crypto:{digest:_r}}),K)},[e.client,e.storage,e.appId,e.clientId,e.baseUrl,e.supportedChains,e.logLevel,$]),_t=me(()=>($(null),k.auth.logout()),[$,k]),St=me(()=>y(void 0,null,function*(){try{return yield k.getAccessToken()}catch(L){return console.debug(L),null}}),[k]),Et=me(()=>k.getIdentityToken(),[k]);ot({client:k,isUserInitialized:o,setIsUserInitialized:a,setError:d});let At=$e({client:k,user:m,appId:e.appId,webViewState:s,createWalletCallbacks:fe,recoverWalletCallbacks:ve,setWalletRecoveryCallbacks:we,setRecoveryFlowState:O,wallet:v,setWallet:f}),Ct=Ke({client:k,user:m,webViewState:s,createSolanaWalletCallbacks:Oe,recoverSolanaWalletCallbacks:We,setSolanaRecoveryFlowState:T,solanaWallet:h,setSolanaWallet:p});tt({client:k,isUserInitialized:o,user:m,oAuthState:w,setOAuthState:b,oAuthCallbacks:Re,recoveryFlowState:C,oAuthStateRef:S}),rt({client:k,user:m,webViewLoaded:s==="loaded",createWalletCallbacks:fe,recoverWalletCallbacks:ve,setWalletRecoveryCallbacks:we,recoveryFlowState:C,oAuthState:w,setRecoveryFlowState:O,setWallet:f,appStateVisible:t});let{customAuthStateIsSettled:kt}=et({client:k,user:m,isReady:o});return oe.createElement(oe.Fragment,null,oe.createElement(Ae.Provider,{value:{client:k,user:m,isReady:s!=="loading"&&o&&mt(w)&&kt,error:n,logout:_t,getAccessToken:St,getIdentityToken:Et,wallet:E(E({},v),At),solanaWallet:E(E({},h),Ct),oAuthState:w,oAuthCallbacks:Re,recoveryFlowState:C,setRecoveryFlowState:O,solanaRecoveryFlowState:q,setSolanaRecoveryFlowState:T,createWalletCallbacks:fe,recoverWalletCallbacks:ve,setWalletRecoveryCallbacks:we,createSolanaWalletCallbacks:Oe,recoverSolanaWalletCallbacks:We,setOAuthState:b,siweState:N,setSiweState:Q,otpState:_,setOtpState:g,passkeyState:ye,setPasskeyState:F,farcasterState:I,setFarcasterState:gt,oAuthStateRef:S}},e.children),oe.createElement(Ar,{style:{width:0,height:0,overflow:"hidden"}},oe.createElement(Fe,{logLevel:e.logLevel,client:k,isClientReady:c,setWebViewState:i,webViewState:s})))};var mt=e=>e.status!=="loading",ke=(e={})=>{let{user:t,oAuthState:r,setOAuthState:o,oAuthCallbacks:a,client:n,oAuthStateRef:d}=Pr(Ae),s=e.action?e.action==="login":!t;Rr(()=>{a.current={onSuccess:e.onSuccess,onError:e.onError}},[e.onSuccess,e.onError]);let i=ht(l=>{var u;let m=x(l);return o({status:"error",error:m}),(u=e==null?void 0:e.onError)==null||u.call(e,m),m},[e==null?void 0:e.onError]);return{start:ht(function(h){return y(this,arguments,function*({provider:m,redirectUri:u,isLegacyAppleIosBehaviorEnabled:v=!1,disableSignup:f}){var p,_,g;o({status:"loading"}),d.current={disableSignup:f};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:w}=yield n.auth.oauth.generateURL(m,X.createURL(u||"/")),b,S;if(Ce.OS==="ios"&&m==="apple"&&!v){let ye=(p=new URL(w).searchParams.get("state"))!=null?p:"",F=yield ne.signInAsync({state:ye,requestedScopes:[ne.AppleAuthenticationScope.EMAIL,ne.AppleAuthenticationScope.FULL_NAME]}).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(!F.authorizationCode||!F.state)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 n.auth.oauth.loginWithCode(F.authorizationCode,F.state,m,"raw",f?"no-signup":"login-or-sign-up");b=I.user,S=I.is_new_user}else b=yield n.auth.oauth.linkWithCode(F.authorizationCode,F.state,m,"raw");return(_=e==null?void 0:e.onSuccess)==null||_.call(e,b,S),o({status:"done"}),b!=null?b:void 0}let C=Ce.OS==="android"?w.replace("x.com","twitter.com"):w,O=yield ie.openAuthSessionAsync(C);if(Ce.OS==="android")return;if(O.type!=="success")throw[ie.WebBrowserResultType.CANCEL,ie.WebBrowserResultType.DISMISS].includes(O.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}=X.parse(O.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 Q=yield n.auth.oauth.loginWithCode(N,T,m,void 0,f?"no-signup":"login-or-sign-up");b=Q.user,S=Q.is_new_user}else b=yield n.auth.oauth.linkWithCode(N,T,m);return(g=e==null?void 0:e.onSuccess)==null||g.call(e,b,S),yield X.openURL(O.url.split("?")[0]),o({status:"done"}),b!=null?b:void 0}catch(w){i(w)}})},[t,n,o,i]),state:r}};function fi(e){let{state:t,start:r}=ke(W(E({},e),{action:"login"}));return{state:t,login:r}}function vi(e){let{state:t,start:r}=ke(W(E({},e),{action:"link"}));return{state:t,link:r}}function wi(e){return ke(e)}var yt=()=>{if(typeof wt!="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 wt};function ft(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 vt={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[]})};import{PrivyClientError as Or}from"@privy-io/js-sdk-core";var Wr=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 Or({code:"failed_to_create_passkey",error:"Could not create passkey"});return W(E({},r),{type:(o=r.type)!=null?o:"public-key",clientExtensionResults:{}})});import{PrivyClientError as xr}from"@privy-io/js-sdk-core";var Ur=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 xr({code:"no_passkey_found_for_challenge",error:"Could not find a matching passkey to login with"});return W(E({},r),{type:(o=r.type)!=null?o:"public-key",clientExtensionResults:{}})});function xi(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 Ui(e){var t,r,o,a;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:(a=e.allow_credentials)==null?void 0:a.map(({id:n,type:d,transports:s})=>({id:n,type:d,transports:s})),userVerification:e.user_verification}}function Ii(e){var t,r,o,a,n,d,s,i;return{rp:e.rp,user:{id:e.user.id,name:e.user.name,displayName:e.user.display_name},challenge:e.challenge,pubKeyCredParams:e.pub_key_cred_params,extensions:{hmacCreateSecret:(t=e.extensions)==null?void 0:t.hmac_create_secret,credProps:(o=(r=e.extensions)==null?void 0:r.cred_props)==null?void 0:o.rk,appid:(a=e.extensions)==null?void 0:a.app_id},attestation:e.attestation,excludeCredentials:e.exclude_credentials,authenticatorSelection:{authenticatorAttachment:(n=e.authenticator_selection)==null?void 0:n.authenticator_attachment,residentKey:(d=e.authenticator_selection)==null?void 0:d.resident_key,userVerification:(s=e.authenticator_selection)==null?void 0:s.user_verification,requireResidentKey:(i=e.authenticator_selection)==null?void 0:i.require_resident_key}}}export{E as a,W as b,Ir as c,y as d,Le as e,jr as f,be as g,ze as h,x as i,wo as j,So as k,Io as l,fi as m,vi as n,wi as o,yt as p,ft as q,vt as r,R as s,nt as t,En as u,An as v,st as w,On as x,lt as y,dt as z,Fn as A,jn as B,Nn as C,Dn as D,Vn as E,Ae as F,ii as G,ai as H,Wr as I,Ur as J,xi as K,Ui as L,Ii as M};
1
+ var Rt=Object.defineProperty,Ot=Object.defineProperties;var Wt=Object.getOwnPropertyDescriptors;var ae=Object.getOwnPropertySymbols;var Ue=Object.prototype.hasOwnProperty,Ie=Object.prototype.propertyIsEnumerable;var xe=(e,t,r)=>t in e?Rt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,E=(e,t)=>{for(var r in t||(t={}))Ue.call(t,r)&&xe(e,r,t[r]);if(ae)for(var r of ae(t))Ie.call(t,r)&&xe(e,r,t[r]);return e},W=(e,t)=>Ot(e,Wt(t));var Ir=(e,t)=>{var r={};for(var o in e)Ue.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(e!=null&&ae)for(var o of ae(e))t.indexOf(o)<0&&Ie.call(e,o)&&(r[o]=e[o]);return r};var y=(e,t,r)=>new Promise((o,a)=>{var n=i=>{try{s(r.next(i))}catch(c){a(c)}},d=i=>{try{s(r.throw(i))}catch(c){a(c)}},s=i=>i.done?o(i.value):Promise.resolve(i.value).then(n,d);s((r=r.apply(e,t)).next())});import*as ne from"expo-apple-authentication";import{applicationId as wt}from"expo-application";import*as X from"expo-linking";import*as U from"expo-secure-store";import*as ie from"expo-web-browser";import{useCallback as ht,useContext as Pr,useEffect as Rr}from"react";import{Platform as Ce}from"react-native";import{PrivyClientError as j}from"@privy-io/js-sdk-core";import{digest as _r}from"expo-crypto";import oe,{useState as A,useMemo as Sr,createContext as Er,useCallback as me,useRef as V,useEffect as ut}from"react";import{AppState as pt,View as Ar}from"react-native";import Cr,{PrivyClientError as kr}from"@privy-io/js-sdk-core";var Le={name:"@privy-io/expo",version:"0.39.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"},"./smart-wallets":{require:"./dist/smart-wallets.js",import:"./dist/esm/smart-wallets.js",types:"./dist/smart-wallets.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,tsx}"'},browserslist:["defaults","node >= 18","not op_mini all"],dependencies:{"@privy-io/js-sdk-core":"0.39.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","@testing-library/react-native":"^12.8.1","@tsconfig/node16-strictest-esm":"^1.0.3","@types/jest":"^29.1.2",buffer:"^5.4.3","eslint-plugin-react-hooks":"^5.0.0-canary-7118f5dd7-20230705",jest:"^29.7.0","jest-expo":"~51.0.0",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-clipboard":"*","expo-constants":"*","expo-crypto":"*","expo-font":"*","expo-linking":"*","expo-secure-store":"*","expo-web-browser":"*",permissionless:"^0.2.10",react:"*","react-native":"*","react-native-passkeys":"^0.3.0","react-native-qrcode-styled":"*","react-native-safe-area-context":"*","react-native-svg":"*","react-native-webview":"*",viem:"^2.21.36"},peerDependenciesMeta:{"@expo-google-fonts/inter":{optional:!0},"expo-font":{optional:!0},permissionless:{optional:!0},viem:{optional:!0}},publishConfig:{access:"public"}};import Ut from"react-fast-compare";import{create as It}from"zustand";var se=It(()=>{}),Me=e=>se.setState(t=>Ut(t,e)?t:e),jr=se.getState;import Lt from"react";import{useCallback as Mt,useEffect as Te,useRef as Tt}from"react";import{AppState as Ft}from"react-native";import jt from"react-native-webview";var Fe=({client:e,isClientReady:t,setWebViewState:r,webViewState:o,logLevel:a})=>{let n=Tt(null);Te(()=>{n.current&&o==="loaded"&&e.setMessagePoster(n.current)},[e,n.current,o==="loaded"]),Te(()=>Ft.addEventListener("change",i=>y(void 0,null,function*(){n.current&&i==="active"&&((yield e.embeddedWallet.ping(500))||(n.current.reload(),r("reloading")))})).remove,[]);let d=Mt(s=>y(void 0,null,function*(){let{data:i}=s.nativeEvent;e.embeddedWallet.onMessage(JSON.parse(i))}),[e]);return t?Lt.createElement(jt,{style:{flex:1},ref:n,cacheEnabled:!1,cacheMode:"LOAD_NO_CACHE",source:{uri:e.embeddedWallet.getURL()},webviewDebuggingEnabled:a==="DEBUG",onLoad:()=>r("loaded"),onError:console.error,onMessage:d}):null};import{useCallback as he,useEffect as Ve,useMemo as ge}from"react";import{errorIndicatesRecoveryIsNeeded as Dt,getAllUserEmbeddedSolanaWallets as Vt,getEntropyDetailsFromUser as Kt,PrivyClientError as Z}from"@privy-io/js-sdk-core";import{getAllUserEmbeddedSolanaWallets as le,getEntropyDetailsFromAccount as je,getUserEmbeddedEthereumWallet as Nt,PrivyClientError as H}from"@privy-io/js-sdk-core";function Ne(n){return y(this,arguments,function*({client:e,setSolanaWallet:t,createSolanaWalletCallbacks:r,setSolanaRecoveryFlowState:o,opts:a}){var d,s,i;t({status:"creating"});try{let{user:c}=yield e.user.get(),l=le(c),m=l[0],u=(d=Nt(c))!=null?d:void 0;if(a!=null&&a.recoveryMethod&&a.recoveryMethod!=="privy")throw new H({code:"embedded_wallet_creation_error",error:"Unsupported recovery method for solana wallet."});if(!(a!=null&&a.createAdditional)&&m)throw new H({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(m){let p=u!=null?u:m,{entropyId:_,entropyIdVerifier:g}=je(p),w=Math.max(...l.map(C=>C.wallet_index),0)+1,b=yield e.embeddedWallet.add({chainType:"solana",entropyId:_,entropyIdVerifier:g,hdWalletIndex:w}),S=le(b.user).find(C=>C.wallet_index===w);if(!S)throw new H({error:"Embedded wallet account not created",code:"embedded_wallet_creation_error"});v=yield e.embeddedWallet.getSolanaProvider(S,_,g),f=b.user}else{let p=yield e.embeddedWallet.createSolana({ethereumAccount:u}),_=le(p.user).find(S=>S.wallet_index===0);if(!_)throw new H({error:"Embedded wallet account not created",code:"embedded_wallet_creation_error"});let g=u!=null?u:_,{entropyId:w,entropyIdVerifier:b}=je(g);v=yield e.embeddedWallet.getSolanaProvider(_,w,b),f=p.user}let h=le(f)[0];if(!h)throw new H({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:h.public_key}),o({status:"initial"}),v}catch(c){let l=c instanceof Error?c.message:"Error creating embedded wallet";throw t({status:"error",error:l}),o({status:"initial"}),new H({code:"embedded_wallet_creation_error",error:l})}})}import{PrivyClientError as z}from"@privy-io/js-sdk-core";function de(c){return y(this,arguments,function*({client:e,account:t,setWallet:r,recoverWalletCallbacks:o,recoveryMethod:a,setRecoveryFlowState:n,password:d,recoveryToken:s,recoverySecretOverride:i}){var l,m,u,v;if(!t)throw new z({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});switch(a){case"user-passcode":if(!d)throw new z({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!s)throw new z({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!i)throw new z({code:"embedded_wallet_recovery_error",error:"Record name is required for icloud recovery method"});break}r({status:"connecting",account:t});try{let f=yield e.embeddedWallet.getProvider(t,d,s,i);return r({status:"connected",provider:f,account:t}),n({status:"initial"}),(m=(l=o.current)==null?void 0:l.onSuccess)==null||m.call(l,f),f}catch(f){r({status:"needs-recovery",account:t}),n({status:"initial"});let h=new z({code:"embedded_wallet_recovery_error",error:f instanceof Error?f.message:"Error recovering embedded wallet"});throw(v=(u=o.current)==null?void 0:u.onError)==null||v.call(u,h),h}})}function De(s){return y(this,arguments,function*({client:e,account:t,entropyId:r,entropyIdVerifier:o,setSolanaWallet:a,recoverSolanaWalletCallbacks:n,setSolanaRecoveryFlowState:d}){var i,c,l,m;a({status:"connecting"});try{let u=yield e.embeddedWallet.getSolanaProvider(t,r,o);return a({status:"connected",publicKey:u._publicKey}),d({status:"initial"}),(c=(i=n.current)==null?void 0:i.onSuccess)==null||c.call(i,u),u}catch(u){a({status:"needs-recovery"}),d({status:"initial"});let v=new z({code:"embedded_wallet_recovery_error",error:u instanceof Error?u.message:"Error recovering embedded wallet"});throw(m=(l=n.current)==null?void 0:l.onError)==null||m.call(l,v),v}})}var Ke=({client:e,user:t,solanaWallet:r,setSolanaWallet:o,setSolanaRecoveryFlowState:a,webViewState:n,createSolanaWalletCallbacks:d,recoverSolanaWalletCallbacks:s})=>{let i=ge(()=>Vt(t),[t]),c=ge(()=>i.length===0?null:Kt(t),[t,i]),l=ge(()=>{if(!c)return[];let{entropyId:f,entropyIdVerifier:h}=c;return i.map(p=>({address:p.address,publicKey:p.address,walletIndex:p.wallet_index,getProvider:()=>e.embeddedWallet.getSolanaProvider(p,f,h)}))},[i,c,e]),m=he(f=>y(void 0,null,function*(){return yield Ne({client:e,setSolanaWallet:o,createSolanaWalletCallbacks:d,setSolanaRecoveryFlowState:a,opts:f})}),[e,d]),u=he(()=>y(void 0,null,function*(){if(!c)throw new Z({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{entropyId:f,entropyIdVerifier:h}=c;return De({client:e,account:i[0],entropyId:f,entropyIdVerifier:h,setSolanaWallet:o,recoverSolanaWalletCallbacks:s,setSolanaRecoveryFlowState:a})}),[e,c,i,s,a,o]),v=he(()=>y(void 0,null,function*(){if(!c)throw o({status:"not-created"}),new Z({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});o(f=>f.status==="connected"?{status:"reconnecting"}:{status:"connecting"});try{let{entropyId:f,entropyIdVerifier:h}=c,p=yield e.embeddedWallet.getSolanaProvider(i[0],f,h);return o({status:"connected",publicKey:i[0].public_key}),p}catch(f){throw Dt(f)?(o({status:"needs-recovery"}),new Z({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):f instanceof Error?(o({status:"error",error:f.message}),new Z({code:"unknown_embedded_wallet_error",error:f.message})):(o({status:"error",error:"Error loading embedded wallet"}),new Z({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[i,e,c,o]);return Ve(()=>{if(!t&&r.status!=="disconnected")return o({status:"disconnected"});n==="loaded"&&v().catch(()=>{})},[n,t]),Ve(()=>{r.status==="error"&&r.error.includes("User must be logged in")&&v()},[r.status]),{create:m,recover:u,getProvider:v,wallets:l}};import{useCallback as re,useEffect as Ye,useMemo as Zt}from"react";import{getUserEmbeddedSolanaWallet as Xe,throwIfInvalidRecoveryUpgradePath as er}from"@privy-io/js-sdk-core";import{errorIndicatesRecoveryIsNeeded as tr,getUserEmbeddedWallet as rr,PrivyClientError as P}from"@privy-io/js-sdk-core";import{getUserEmbeddedEthereumWallet as qt}from"@privy-io/js-sdk-core";import{PrivyClientError as ee}from"@privy-io/js-sdk-core";function ce(l){return y(this,arguments,function*({client:e,setWallet:t,createWalletCallbacks:r,recoveryMethod:o,setRecoveryFlowState:a,password:n,recoveryToken:d,recoverySecretOverride:s,iCloudRecordNameOverride:i,solanaAccount:c}){var u,v;switch(o){case"user-passcode":if(!n)throw new ee({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!d)throw new ee({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!s||!i)throw new ee({code:"embedded_wallet_recovery_error",error:"iCloud recovery failed due to inability to store credentials"});break}t({status:"creating",account:null});let m=o==="icloud"?"icloud-native":o;try{let{user:f}=yield e.embeddedWallet.create({password:n,recoveryMethod:m,recoveryToken:d,recoverySecretOverride:s,iCloudRecordNameOverride:i,solanaAccount:c}),h=qt(f);if(!h)throw new ee({error:"Embedded wallet account not created",code:"embedded_wallet_creation_error"});let p=yield e.embeddedWallet.getProvider(h);return(v=(u=r.current)==null?void 0:u.onSuccess)==null||v.call(u,p),t({status:"connected",provider:p,account:h}),a({status:"initial"}),p}catch(f){let h=f instanceof Error?f.message:"Error creating embedded wallet";throw t({status:"error",error:h,account:null}),a({status:"initial"}),new ee({code:"embedded_wallet_creation_error",error:h})}})}import{Platform as qe}from"react-native";import{PrivyClientError as M}from"@privy-io/js-sdk-core";function He(){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 be(o){return y(this,arguments,function*({user:e,appId:t,client:r}){var s;if(qe.OS==="android")throw new M({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let a=yield He(),n=yield r.recovery.icloudAuth.getICloudConfiguration("expo-ios");if(!(n==null?void 0:n.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:c}=yield a.writeRecoverySecretToICloud({containerId:n.container_identifier,appId:t,userId:e.id});return{recoverySecret:i,iCloudRecordName:c}}catch(i){if(i instanceof Error){let c=(s=i.message.split("Caused by: ")[1])!=null?s:"Error writing to iCloud";throw new M({code:"embedded_wallet_recovery_error",error:c})}throw new M({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}function ze(o){return y(this,arguments,function*({walletAddress:e,client:t,chainType:r}){var c;if(qe.OS==="android")throw new M({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let a=yield He(),d=(yield t.recovery.getRecoveryKeyMaterial(e,r)).icloud_record_name;if(!d)throw new M({code:"embedded_wallet_recovery_error",error:"iCloud recovery not properly backed up."});let s=yield t.recovery.icloudAuth.getICloudConfiguration("expo-ios"),i=s==null?void 0:s.container_identifier;if(!i)throw new M({code:"embedded_wallet_recovery_error",error:"An iCloud Container ID must be specified in the Privy Dashboard."});try{let{recoverySecret:l}=yield a.readRecoverySecretFromICloud({containerId:i,recordName:d});return{recoverySecret:l}}catch(l){if(l instanceof Error){let m=(c=l.message.split("Caused by: ")[1])!=null?c:"Error writing to iCloud";throw new M({code:"embedded_wallet_recovery_error",error:m})}throw new M({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}import*as D from"expo-linking";import*as Be from"expo-web-browser";import{Platform as Ge}from"react-native";import{PrivyClientError as J}from"@privy-io/js-sdk-core";import Ht from"react-fast-compare";var Je=e=>t=>e(r=>Ht(r,t)?r:t);import{PrivyApiError as zt,PrivyClientError as Jt}from"@privy-io/js-sdk-core";function x(e){return e instanceof Error||e instanceof zt||e instanceof Jt?e:typeof e=="string"?new Error(e):new Error("Unknown error")}var wo=e=>new Promise(t=>setTimeout(t,e));import{useEffect as Bt,useRef as Gt}from"react";import{AppState as _e}from"react-native";function So(){let e=Gt(_e.currentState);Bt(()=>_e.addEventListener("change",o=>{e.current=o}).remove,[]);function t(){return _e.currentState}return{appState:e,getCurrentAppState:t}}function te(a){return y(this,arguments,function*({provider:e,redirectUri:t,client:r,onError:o}){try{let n;switch(e){case"google-drive":{let{url:c}=yield r.recovery.auth.generateURL(D.createURL(t||"/"));n=c;break}default:throw new J({error:"OAuth invalid provider",code:"embedded_wallet_recovery_error"})}let d=yield Be.openAuthSessionAsync(n);if(Ge.OS==="android")return;if(d.type!=="success")throw new J({error:"Recovery OAuth session failed",code:"embedded_wallet_recovery_error"});let{queryParams:s}=D.parse(d.url),i;switch(e){case"google-drive":{let{privy_oauth_state:c,privy_oauth_code:l}=s;if(!l||!c)throw new J({error:"Recovery OAuth invalid credentials",code:"embedded_wallet_recovery_error"});i=yield ue({oAuthCode:l,oAuthState:c,client:r});break}default:throw new J({error:"Recovery OAuth invalid provider",code:"embedded_wallet_recovery_error"})}return i}catch(n){throw o==null||o(x(n)),n}})}function ue(o){return y(this,arguments,function*({oAuthCode:e,oAuthState:t,client:r}){let{access_token:a}=yield r.recovery.auth.authorize(e,t);if(!a)throw new J({error:"OAuth invalid credentials",code:"login_with_oauth_returned_with_invalid_credentials"});return a})}var Yt=2*60*1e3;function Xt(e){let t;return new Promise((r,o)=>{t=D.addEventListener("url",n=>y(this,[n],function*({url:a}){if(!a)return;let{queryParams:d}=D.parse(a),{privy_oauth_state:s,privy_oauth_code:i}=d!=null?d:{};if(typeof i!="string"||typeof s!="string")return;let c=yield ue({client:e,oAuthCode:i,oAuthState:s});r(c)})),setTimeout(()=>{o(new J({code:"embedded_wallet_set_recovery_error",error:"Failed to complete Google Drive recovery flow"}))},Yt)}).finally(()=>{t==null||t.remove()})}function Io(e){return y(this,null,function*(){let t;Ge.OS==="android"&&(t=Xt(e));let r=yield te({provider:"google-drive",client:e});return r!=null?r:yield t})}import{getUserEmbeddedWallet as Qt,PrivyClientError as $t}from"@privy-io/js-sdk-core";function pe(n){return y(this,arguments,function*({client:e,recoveryInput:t,setWalletRecoveryCallbacks:r,setRecoveryFlowState:o,setWallet:a}){var d,s,i,c;try{let{provider:l,user:m}=yield e.embeddedWallet.setRecovery(t),u=l,v=Qt(m);return a({status:"connected",provider:u,account:v}),(s=(d=r.current)==null?void 0:d.onSuccess)==null||s.call(d,u),o({status:"initial"}),u}catch(l){let m=new $t({code:"embedded_wallet_set_recovery_error",error:l instanceof Error?l.message:"Error setting password on embedded wallet"});throw(c=(i=r.current)==null?void 0:i.onError)==null||c.call(i,m),o({status:"initial"}),m}})}function Qe(e){return e===void 0?{recoveryMethod:"privy"}:typeof e=="string"?{recoveryMethod:"user-passcode",password:e}:e.recoveryMethod==="user-passcode"?{recoveryMethod:"user-passcode",password:e.password}:{recoveryMethod:e.recoveryMethod}}var $e=({client:e,user:t,appId:r,wallet:o,setWallet:a,setRecoveryFlowState:n,webViewState:d,createWalletCallbacks:s,recoverWalletCallbacks:i,setWalletRecoveryCallbacks:c})=>{let l=Zt(()=>rr(t),[t]),m=re(p=>y(void 0,null,function*(){var O,q;if(l)throw new P({error:"This user already has an embedded wallet",code:"embedded_wallet_already_exists"});let{user:_}=yield e.user.get(),{password:g,recoveryMethod:w}=Qe(p),b,S,C;if(w==="google-drive"&&(b=yield te({provider:w,client:e,onError:(O=s.current)==null?void 0:O.onError}),n({status:"creating-wallet"}),!b))return null;if(w==="icloud"){if(!_)throw new P({code:"embedded_wallet_recovery_error",error:"User must be loaded before creating a wallet with iCloud."});let{recoverySecret:T,iCloudRecordName:N}=yield be({user:_,appId:r,client:e});S=T,C=N}return yield ce({client:e,setWallet:a,createWalletCallbacks:s,recoveryMethod:w,setRecoveryFlowState:n,password:g,recoverySecretOverride:S,iCloudRecordNameOverride:C,solanaAccount:(q=Xe(_))!=null?q:void 0})}),[e,l,t]),u=re(p=>y(void 0,null,function*(){var w;if(o.status!=="connected")throw new P({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"});if(!l)throw new P({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});if(Xe(t))throw new P({code:"embedded_wallet_set_recovery_error",error:"Cannot set user-controlled recovery for a user with an embedded Solana wallet."});er({currentRecoveryMethod:l.recovery_method,upgradeToRecoveryMethod:p.recoveryMethod});let _,g;switch(p.recoveryMethod){case"privy":g=W(E({},p),{wallet:l});break;case"user-passcode":g=W(E({},p),{wallet:l,password:p.password});break;case"google-drive":if(_=yield te({provider:p.recoveryMethod,client:e,onError:(w=c.current)==null?void 0:w.onError}),n({status:"upgrading-recovery"}),!_)return null;g={recoveryMethod:"google-drive",wallet:l,recoveryAccessToken:_};break;case"icloud":if(!t)throw new P({code:"embedded_wallet_recovery_error",error:"User must be loaded before backing up to iCloud."});let{recoverySecret:b,iCloudRecordName:S}=yield be({user:t,appId:r,client:e});g={recoveryMethod:"icloud-native",recoverySecretOverride:b,iCloudRecordNameOverride:S,wallet:l};break;default:throw new P({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}return pe({client:e,recoveryInput:g,setWalletRecoveryCallbacks:c,setRecoveryFlowState:n,setWallet:a})}),[e,l,o.status,t]),v=re(p=>y(void 0,null,function*(){return u({recoveryMethod:"user-passcode",password:p})}),[e,l,o.status]),f=re(p=>y(void 0,null,function*(){var S;if(!l)throw new P({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{password:_,recoveryMethod:g}=Qe(p),w,b;if(g==="google-drive"&&(w=yield te({provider:g,client:e,onError:(S=i.current)==null?void 0:S.onError}),n({status:"recovering"}),!w))return null;if(g==="icloud"){if(!t)throw new P({code:"embedded_wallet_recovery_error",error:"User must be loaded before recovering via iCloud."});let{recoverySecret:C}=yield ze({client:e,walletAddress:l.address});b=C}return de({client:e,account:l,setWallet:a,recoverWalletCallbacks:i,recoveryMethod:g,setRecoveryFlowState:n,password:_,recoveryToken:w,recoverySecretOverride:b})}),[e,l]),h=re(()=>y(void 0,null,function*(){if(!l)throw a({status:"not-created",account:null}),new P({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});a(p=>p.status==="connected"?{status:"reconnecting",account:l}:{status:"connecting",account:l});try{let p=yield e.embeddedWallet.getProvider(l);return a({status:"connected",provider:p,account:l}),p}catch(p){throw tr(p)?(a({status:"needs-recovery",account:l}),new P({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):p instanceof Error?(a({status:"error",error:p.message,account:l}),new P({code:"unknown_embedded_wallet_error",error:p.message})):(a({status:"error",error:"Error loading embedded wallet",account:l}),new P({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,l]);return Ye(()=>{if(!t&&o.status!=="disconnected")return a({status:"disconnected",account:null});d==="loaded"&&h().catch(()=>{})},[d,t,l]),Ye(()=>{o.status==="error"&&o.error.includes("User must be logged in")&&h()},[o.status]),{create:m,recover:f,setPassword:v,setRecovery:u,getProvider:h}};import{useEffect as or,useState as nr}from"react";import{PrivyClientError as Ze}from"@privy-io/js-sdk-core";var et=({client:e,user:t,isReady:r})=>{let o=se(d=>d==null?void 0:d.customAuth),[a,n]=nr({status:"initial"});return or(()=>{(()=>y(void 0,null,function*(){if(!(o!=null&&o.enabled)){n({status:"not-enabled"});return}n({status:"loading"});let{getCustomAccessToken:s,isLoading:i}=o;if(!(!r||i))try{let c=yield s();if(!c&&t){yield e.auth.logout(),n({status:"done"});return}if(!c){n({status:"done"});return}if(t){n({status:"done"});return}if(!(yield e.auth.customProvider.syncWithToken(c))){yield e.auth.logout(),n({status:"error",error:new Ze({error:"Failed to sync with custom auth provider",code:"third_party_auth_error"})});return}n({status:"done"})}catch(c){if(console.log("Error syncing with custom auth provider",c),n({status:"error",error:c}),t)throw yield e.auth.logout(),new Ze({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:a,customAuthStateIsSettled:a.status!=="loading"&&a.status!=="initial"}};import*as B from"expo-linking";import{useCallback as ir,useEffect as ar}from"react";import{Platform as sr}from"react-native";var tt=({client:e,user:t,isUserInitialized:r,oAuthState:o,oAuthCallbacks:a,setOAuthState:n,recoveryFlowState:d,oAuthStateRef:s})=>{let i=B.useURL(),c=ir(l=>{var u,v;let m=x(l);n({status:"error",error:m}),(v=(u=a.current).onError)==null||v.call(u,m)},[n]);return ar(()=>{function l(){return y(this,null,function*(){var f,h;if(!i||o.status!=="loading"||d.status!=="initial")return;let{queryParams:m}=B.parse(i),{privy_oauth_state:u,privy_oauth_code:v}=m;if(!v||!u){n({status:"done"});return}try{let p,_;if(t)p=yield e.auth.oauth.linkWithCode(v,u);else{let g=yield e.auth.oauth.loginWithCode(v,u,void 0,void 0,s.current.disableSignup?"no-signup":"login-or-sign-up");p=g.user,_=!!g.is_new_user}return(h=(f=a.current).onSuccess)==null||h.call(f,p,_),s.current={},n({status:"done"}),yield B.openURL(i.split("?")[0])}catch(p){s.current={},c(p)}})}sr.OS==="android"&&r&&l()},[i,r])};import*as G from"expo-linking";import{useCallback as lr,useEffect as dr,useMemo as cr}from"react";import{Platform as ur}from"react-native";import{getUserEmbeddedSolanaWallet as pr,getUserEmbeddedWallet as mr}from"@privy-io/js-sdk-core";var rt=({client:e,user:t,createWalletCallbacks:r,recoverWalletCallbacks:o,setWalletRecoveryCallbacks:a,recoveryFlowState:n,oAuthState:d,setRecoveryFlowState:s,setWallet:i,appStateVisible:c,webViewLoaded:l})=>{let m=G.useURL(),u=cr(()=>mr(t),[t]),v=lr(f=>{var p,_,g,w;let h=x(f);n.status==="creating-wallet"?(_=(p=r.current).onError)==null||_.call(p,x(h)):(w=(g=o.current).onError)==null||w.call(g,x(h)),s({status:"initial"})},[n]);return dr(()=>{function f(){return y(this,null,function*(){var g;if(!m&&n.status!=="initial"&&c&&v(new Error("Recovery OAuth session failed")),!m||n.status==="initial"||d.status!=="initial"||!c||!l)return;let{queryParams:h}=G.parse(m),{privy_oauth_state:p,privy_oauth_code:_}=h;if(!(!_||!p)){yield G.openURL(m.split("?")[0]);try{let w=yield ue({oAuthCode:_,oAuthState:p,client:e});if(n.status==="creating-wallet"){let b=(g=pr(t))!=null?g:void 0;yield ce({client:e,setWallet:i,createWalletCallbacks:r,recoveryMethod:"google-drive",setRecoveryFlowState:s,recoveryToken:w,solanaAccount:b})}else if(n.status==="upgrading-recovery"){if(!u)throw new Error("Embedded wallet not found");yield pe({client:e,recoveryInput:{recoveryMethod:"google-drive",wallet:u,recoveryAccessToken:w},setWalletRecoveryCallbacks:a,setRecoveryFlowState:s,setWallet:i})}else yield de({client:e,account:u,setWallet:i,recoverWalletCallbacks:o,recoveryMethod:"google-drive",setRecoveryFlowState:s,recoveryToken:w})}catch(w){v(w)}}})}ur.OS==="android"&&f()},[m,n.status,c,l])};import{useEffect as yr}from"react";var ot=({client:e,isUserInitialized:t,setIsUserInitialized:r,setError:o})=>{yr(()=>{t||(()=>y(void 0,null,function*(){try{yield e.initialize()}catch(n){o(n instanceof Error?n:new Error(String(n)))}try{yield e.user.get()}catch(n){}finally{r(!0)}}))()},[e,t,o,r])};import{create as hr}from"zustand";var R=class extends Error{constructor(r,o){super(o);this.code=r,this.error=o}},nt=class extends R{constructor(r){super("underlying_error",r instanceof Error?r.message:"An underlying error occurred");this.wrappedError=r}};var Se={success:e=>({value:e}),error:e=>({error:e})};var it=e=>{let t=Array.from(new Set(e));return t.length===0?Se.error(new R("no_login_methods_available","No login methods available")):Se.success(t)},Ee=e=>{let t=e.length,r=e.every(o=>o==="sms"||o==="email");return t<=2&&r?e[0]:null},En=(e,t)=>{if(e.length!==2)return null;let[r,o]=e;return t===r?o:r},An={email:"email",sms:"phone",google:"Google",apple:"Apple",discord:"Discord",twitter:"X",github:"Github",spotify:"Spotify",instagram:"Instagram",tiktok:"Tiktok",linkedin:"LinkedIn"};import{useEffect as fr}from"react";import{createStore as vr}from"zustand/vanilla";var at=vr()(e=>({isUIMounted:!1,updateUIMounted:t=>e({isUIMounted:t})})),st=()=>{let{isUIMounted:e}=at.getState();if(!e)throw new R("privy_elements_not_ready","Privy Elements is not mounted")},On=()=>{fr(()=>{let{updateUIMounted:e}=at.getState();return e(!0),()=>{e(!1)}},[])};function lt(e){return new Promise((t,r)=>{e({resolve:t,reject:r})})}function wr(e,t){return{resolve:r=>{t(),e.resolve(r)},reject:r=>{t(),e.reject(r)}}}function dt(e,t,r){let o=setTimeout(()=>{e.reject(t())},r);return wr(e,()=>{clearTimeout(o)})}var gr=1e3*60*5,Y=hr()((e,t)=>({privyElementsConfig:null,loginPromiseResolvers:null,activeLoginMethod:null,openLoginFlow:(r,o,a,n)=>lt(d=>{var m,u,v;let s=o.app.getConfig();if(!s)return d.reject(new R("privy_not_ready","Privy is not ready"));if(a!==null)return d.reject(new R("user_already_logged_in","User is already logged in"));if(st(),t().loginPromiseResolvers!==null)return d.reject(new R("existing_login_flow_in_progress","A login flow is already in progress"));let i=it(r.loginMethods);if(i.error)return d.reject(i.error);let c={loginMethods:i.value,appearance:{logo:(v=(u=(m=r.appearance)==null?void 0:m.logo)!=null?u:s.logo_url)!=null?v:void 0}},l=dt(d,()=>(e({privyElementsConfig:null,loginPromiseResolvers:null}),new R("login_flow_timeout","The login flow timed out")),gr);n(),e({loginPromiseResolvers:l,privyElementsConfig:c,activeLoginMethod:Ee(c.loginMethods)})}),closeLoginFlow:()=>{var r;return(r=t().loginPromiseResolvers)==null||r.reject(new R("login_flow_closed","The login flow was closed")),e({privyElementsConfig:null,loginPromiseResolvers:null})},goBack:()=>{let{activeLoginMethod:r,privyElementsConfig:o,updateActiveLoginMethod:a,closeLoginFlow:n}=t();if(!o){n();return}let d=Ee(o.loginMethods)===null;r===null||!d?n():a(null)},updateActiveLoginMethod:r=>e({activeLoginMethod:r})})),Fn=()=>Y(e=>e.privyElementsConfig),jn=()=>Y(e=>e.openLoginFlow),Nn=()=>Y(e=>e.closeLoginFlow),Dn=()=>Y(e=>e.goBack),Vn=()=>Y(e=>[e.activeLoginMethod,e.updateActiveLoginMethod]),br=e=>{let{loginPromiseResolvers:t}=Y.getState();t==null||t.resolve(e)},ct=()=>br;var Ae=Er({}),K;function ii(e){return K?K.getAccessToken():e!=null&&e.strict?Promise.reject(new kr({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 ai=e=>{let[t,r]=A(pt.currentState==="active");ut(()=>{let L=pt.addEventListener("change",Pt=>{r(Pt==="active")});return()=>{L.remove()}},[]),ut(()=>Me(e.config),[e.config]);let[o,a]=A(!1),[n,d]=A(null),[s,i]=A("loading"),[c,l]=A(!1),[m,u]=A(null),[v,f]=A({status:"disconnected",account:null}),[h,p]=A({status:"disconnected"}),[_,g]=A({status:"initial"}),[w,b]=A({status:"initial"}),S=V({}),[C,O]=A({status:"initial"}),[q,T]=A({status:"initial"}),[N,Q]=A({status:"initial"}),[ye,F]=A({status:"initial"}),[I,gt]=A({status:"initial"}),Re=V({}),fe=V({}),ve=V({}),we=V({}),Oe=V({}),We=V({}),bt=ct(),$=me(L=>{if(L){bt(L),Je(u)(L);return}u(null),g({status:"initial"}),b({status:"initial"}),f({status:"disconnected",account:null})},[]),k=Sr(()=>{let L=e.storage||vt;return e.client?(K=e.client,K.setCallbacks({setUser:$,setIsReady:l}),K):(K=new Cr({storage:ft(L),appId:e.appId,clientId:e.clientId,supportedChains:e.supportedChains,nativeAppIdentifier:yt(),baseUrl:e.baseUrl,sdkVersion:`expo:${Le.version}`,callbacks:{setUser:$,setIsReady:l},logLevel:e.logLevel,crypto:{digest:_r}}),K)},[e.client,e.storage,e.appId,e.clientId,e.baseUrl,e.supportedChains,e.logLevel,$]),_t=me(()=>($(null),k.auth.logout()),[$,k]),St=me(()=>y(void 0,null,function*(){try{return yield k.getAccessToken()}catch(L){return console.debug(L),null}}),[k]),Et=me(()=>k.getIdentityToken(),[k]);ot({client:k,isUserInitialized:o,setIsUserInitialized:a,setError:d});let At=$e({client:k,user:m,appId:e.appId,webViewState:s,createWalletCallbacks:fe,recoverWalletCallbacks:ve,setWalletRecoveryCallbacks:we,setRecoveryFlowState:O,wallet:v,setWallet:f}),Ct=Ke({client:k,user:m,webViewState:s,createSolanaWalletCallbacks:Oe,recoverSolanaWalletCallbacks:We,setSolanaRecoveryFlowState:T,solanaWallet:h,setSolanaWallet:p});tt({client:k,isUserInitialized:o,user:m,oAuthState:w,setOAuthState:b,oAuthCallbacks:Re,recoveryFlowState:C,oAuthStateRef:S}),rt({client:k,user:m,webViewLoaded:s==="loaded",createWalletCallbacks:fe,recoverWalletCallbacks:ve,setWalletRecoveryCallbacks:we,recoveryFlowState:C,oAuthState:w,setRecoveryFlowState:O,setWallet:f,appStateVisible:t});let{customAuthStateIsSettled:kt}=et({client:k,user:m,isReady:o});return oe.createElement(oe.Fragment,null,oe.createElement(Ae.Provider,{value:{client:k,user:m,isReady:s!=="loading"&&o&&mt(w)&&kt,error:n,logout:_t,getAccessToken:St,getIdentityToken:Et,wallet:E(E({},v),At),solanaWallet:E(E({},h),Ct),oAuthState:w,oAuthCallbacks:Re,recoveryFlowState:C,setRecoveryFlowState:O,solanaRecoveryFlowState:q,setSolanaRecoveryFlowState:T,createWalletCallbacks:fe,recoverWalletCallbacks:ve,setWalletRecoveryCallbacks:we,createSolanaWalletCallbacks:Oe,recoverSolanaWalletCallbacks:We,setOAuthState:b,siweState:N,setSiweState:Q,otpState:_,setOtpState:g,passkeyState:ye,setPasskeyState:F,farcasterState:I,setFarcasterState:gt,oAuthStateRef:S}},e.children),oe.createElement(Ar,{style:{width:0,height:0,overflow:"hidden"}},oe.createElement(Fe,{logLevel:e.logLevel,client:k,isClientReady:c,setWebViewState:i,webViewState:s})))};var mt=e=>e.status!=="loading",ke=(e={})=>{let{user:t,oAuthState:r,setOAuthState:o,oAuthCallbacks:a,client:n,oAuthStateRef:d}=Pr(Ae),s=e.action?e.action==="login":!t;Rr(()=>{a.current={onSuccess:e.onSuccess,onError:e.onError}},[e.onSuccess,e.onError]);let i=ht(l=>{var u;let m=x(l);return o({status:"error",error:m}),(u=e==null?void 0:e.onError)==null||u.call(e,m),m},[e==null?void 0:e.onError]);return{start:ht(function(h){return y(this,arguments,function*({provider:m,redirectUri:u,isLegacyAppleIosBehaviorEnabled:v=!1,disableSignup:f}){var p,_,g;o({status:"loading"}),d.current={disableSignup:f};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:w}=yield n.auth.oauth.generateURL(m,X.createURL(u||"/")),b,S;if(Ce.OS==="ios"&&m==="apple"&&!v){let ye=(p=new URL(w).searchParams.get("state"))!=null?p:"",F=yield ne.signInAsync({state:ye,requestedScopes:[ne.AppleAuthenticationScope.EMAIL,ne.AppleAuthenticationScope.FULL_NAME]}).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(!F.authorizationCode||!F.state)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 n.auth.oauth.loginWithCode(F.authorizationCode,F.state,m,"raw",f?"no-signup":"login-or-sign-up");b=I.user,S=I.is_new_user}else b=yield n.auth.oauth.linkWithCode(F.authorizationCode,F.state,m,"raw");return(_=e==null?void 0:e.onSuccess)==null||_.call(e,b,S),o({status:"done"}),b!=null?b:void 0}let C=Ce.OS==="android"?w.replace("x.com","twitter.com"):w,O=yield ie.openAuthSessionAsync(C);if(Ce.OS==="android")return;if(O.type!=="success")throw[ie.WebBrowserResultType.CANCEL,ie.WebBrowserResultType.DISMISS].includes(O.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}=X.parse(O.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 Q=yield n.auth.oauth.loginWithCode(N,T,m,void 0,f?"no-signup":"login-or-sign-up");b=Q.user,S=Q.is_new_user}else b=yield n.auth.oauth.linkWithCode(N,T,m);return(g=e==null?void 0:e.onSuccess)==null||g.call(e,b,S),yield X.openURL(O.url.split("?")[0]),o({status:"done"}),b!=null?b:void 0}catch(w){i(w)}})},[t,n,o,i]),state:r}};function fi(e){let{state:t,start:r}=ke(W(E({},e),{action:"login"}));return{state:t,login:r}}function vi(e){let{state:t,start:r}=ke(W(E({},e),{action:"link"}));return{state:t,link:r}}function wi(e){return ke(e)}var yt=()=>{if(typeof wt!="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 wt};function ft(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 vt={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[]})};import{PrivyClientError as Or}from"@privy-io/js-sdk-core";var Wr=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 Or({code:"failed_to_create_passkey",error:"Could not create passkey"});return W(E({},r),{type:(o=r.type)!=null?o:"public-key",clientExtensionResults:{}})});import{PrivyClientError as xr}from"@privy-io/js-sdk-core";var Ur=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 xr({code:"no_passkey_found_for_challenge",error:"Could not find a matching passkey to login with"});return W(E({},r),{type:(o=r.type)!=null?o:"public-key",clientExtensionResults:{}})});function xi(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 Ui(e){var t,r,o,a;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:(a=e.allow_credentials)==null?void 0:a.map(({id:n,type:d,transports:s})=>({id:n,type:d,transports:s})),userVerification:e.user_verification}}function Ii(e){var t,r,o,a,n,d,s,i;return{rp:e.rp,user:{id:e.user.id,name:e.user.name,displayName:e.user.display_name},challenge:e.challenge,pubKeyCredParams:e.pub_key_cred_params,extensions:{hmacCreateSecret:(t=e.extensions)==null?void 0:t.hmac_create_secret,credProps:(o=(r=e.extensions)==null?void 0:r.cred_props)==null?void 0:o.rk,appid:(a=e.extensions)==null?void 0:a.app_id},attestation:e.attestation,excludeCredentials:e.exclude_credentials,authenticatorSelection:{authenticatorAttachment:(n=e.authenticator_selection)==null?void 0:n.authenticator_attachment,residentKey:(d=e.authenticator_selection)==null?void 0:d.resident_key,userVerification:(s=e.authenticator_selection)==null?void 0:s.user_verification,requireResidentKey:(i=e.authenticator_selection)==null?void 0:i.require_resident_key}}}export{E as a,W as b,Ir as c,y as d,Le as e,jr as f,be as g,ze as h,x as i,wo as j,So as k,Io as l,fi as m,vi as n,wi as o,yt as p,ft as q,vt as r,R as s,nt as t,En as u,An as v,st as w,On as x,lt as y,dt as z,Fn as A,jn as B,Nn as C,Dn as D,Vn as E,Ae as F,ii as G,ai as H,Wr as I,Ur as J,xi as K,Ui as L,Ii as M};