@privy-io/expo 0.34.0 → 0.34.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -9,13 +9,13 @@ The Privy Expo SDK allows you to integrate Privy into a bare React Native or Exp
9
9
  Install along with [peer dependencies](https://docs.npmjs.com/cli/v10/configuring-npm/package-json#peerdependencies) using `npm`:
10
10
 
11
11
  ```sh
12
- npx expo install expo-application expo-constants expo-linking expo-web-browser expo-secure-store react-native-webview @privy-io/expo
12
+ npx expo install expo-application expo-constants expo-web-browser expo-linking expo-secure-store react-native-webview expo-crypto @privy-io/expo
13
13
  ```
14
14
 
15
15
  Install [polyfills](https://developer.mozilla.org/en-US/docs/Glossary/Polyfill), these should be imported as early as possible in your application.
16
16
 
17
17
  ```sh
18
- npm i react-native-get-random-values @ethersproject/shims
18
+ npm i --save fast-text-encoding react-native-get-random-values @ethersproject/shims
19
19
  ```
20
20
 
21
21
  ## Usage
@@ -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 kt=Object.defineProperty,Ct=Object.defineProperties;var At=Object.getOwnPropertyDescriptors;var ne=Object.getOwnPropertySymbols;var xe=Object.prototype.hasOwnProperty,Ie=Object.prototype.propertyIsEnumerable;var Oe=(e,t,r)=>t in e?kt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,E= exports.a =(e,t)=>{for(var r in t||(t={}))xe.call(t,r)&&Oe(e,r,t[r]);if(ne)for(var r of ne(t))Ie.call(t,r)&&Oe(e,r,t[r]);return e},O= exports.b =(e,t)=>Ct(e,At(t));var Rr=(e,t)=>{var r={};for(var o in e)xe.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(e!=null&&ne)for(var o of ne(e))t.indexOf(o)<0&&Ie.call(e,o)&&(r[o]=e[o]);return r};var v=(e,t,r)=>new Promise((o,s)=>{var n=i=>{try{l(r.next(i))}catch(d){s(d)}},c=i=>{try{l(r.throw(i))}catch(d){s(d)}},l=i=>i.done?o(i.value):Promise.resolve(i.value).then(n,c);l((r=r.apply(e,t)).next())});var _expoappleauthentication = require('expo-apple-authentication'); var yt = _interopRequireWildcard(_expoappleauthentication);var _expoapplication = require('expo-application');var _expolinking = require('expo-linking'); var G = _interopRequireWildcard(_expolinking); var N = _interopRequireWildcard(_expolinking); var B = _interopRequireWildcard(_expolinking); var J = _interopRequireWildcard(_expolinking);var _exposecurestore = require('expo-secure-store'); var I = _interopRequireWildcard(_exposecurestore);var _expowebbrowser = require('expo-web-browser'); var oe = _interopRequireWildcard(_expowebbrowser); var ze = _interopRequireWildcard(_expowebbrowser);var _react = require('react'); var _react2 = _interopRequireDefault(_react);var _reactnative = require('react-native');var _jssdkcore = require('@privy-io/js-sdk-core'); var _jssdkcore2 = _interopRequireDefault(_jssdkcore);var _expocrypto = require('expo-crypto');var Ue={name:"@privy-io/expo",version:"0.34.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.35.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 _reactnativewebview = require('react-native-webview'); var _reactnativewebview2 = _interopRequireDefault(_reactnativewebview);var Me=({client:e,isClientReady:t,setWebViewState:r,webViewState:o,logLevel:s})=>{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=>v(void 0,null,function*(){n.current&&i==="active"&&((yield e.embeddedWallet.ping(500))||(n.current.reload(),r("reloading")))})).remove,[]);let c=_react.useCallback.call(void 0, l=>v(void 0,null,function*(){let{data:i}=l.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:s==="DEBUG",onLoad:()=>r("loaded"),onError:console.error,onMessage:c}):null};function Fe(n){return v(this,arguments,function*({client:e,setSolanaWallet:t,createSolanaWalletCallbacks:r,setSolanaRecoveryFlowState:o,opts:s}){var c,l,i;t({status:"creating"});try{let{user:d}=yield e.user.get(),a=_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, d),u=a[0];if(s!=null&&s.recoveryMethod&&s.recoveryMethod!=="privy")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Unsupported recovery method for solana wallet."});if(!(s!=null&&s.createAdditional)&&u)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Solana wallet already exists for this user. Set `createAdditional` to `true` to create another wallet"});let m,f;if(u){let w=Math.max(...a.map(_=>_.wallet_index),0)+1,p=yield e.embeddedWallet.createAdditionalSolana({primaryPublicKey:u.address,hdWalletIndex:w});m=p.provider,f=p.user}else{let w=(c=_jssdkcore.getUserEmbeddedWallet.call(void 0, d))!=null?c:void 0,p=yield e.embeddedWallet.createSolana({ethereumAccount:w});m=p.provider,f=p.user}let y=_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, f)[0];if(!y)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Unknown error creating solana wallet"});return(i=(l=r.current)==null?void 0:l.onSuccess)==null||i.call(l,m),t({status:"connected",publicKey:y.public_key}),o({status:"initial"}),m}catch(d){let a=d instanceof Error?d.message:"Error creating embedded wallet";throw t({status:"error",error:a}),o({status:"initial"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:a})}})}function ae(d){return v(this,arguments,function*({client:e,account:t,setWallet:r,recoverWalletCallbacks:o,recoveryMethod:s,setRecoveryFlowState:n,password:c,recoveryToken:l,recoverySecretOverride:i}){var a,u,m,f;if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});switch(s){case"user-passcode":if(!c)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!l)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 y=yield e.embeddedWallet.getProvider(t,c,l,i);return r({status:"connected",provider:y,account:t}),n({status:"initial"}),(u=(a=o.current)==null?void 0:a.onSuccess)==null||u.call(a,y),y}catch(y){r({status:"needs-recovery",account:t}),n({status:"initial"});let w=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:y instanceof Error?y.message:"Error recovering embedded wallet"});throw(f=(m=o.current)==null?void 0:m.onError)==null||f.call(m,w),w}})}function je(l){return v(this,arguments,function*({client:e,account:t,entropyId:r,entropyIdVerifier:o,setSolanaWallet:s,recoverSolanaWalletCallbacks:n,setSolanaRecoveryFlowState:c}){var i,d,a,u;s({status:"connecting"});try{let m=yield e.embeddedWallet.getSolanaProvider(t,r,o);return s({status:"connected",publicKey:m._publicKey}),c({status:"initial"}),(d=(i=n.current)==null?void 0:i.onSuccess)==null||d.call(i,m),m}catch(m){s({status:"needs-recovery"}),c({status:"initial"});let f=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:m instanceof Error?m.message:"Error recovering embedded wallet"});throw(u=(a=n.current)==null?void 0:a.onError)==null||u.call(a,f),f}})}var se=e=>{if(e.chain_type==="ethereum")return{entropyId:e.address,entropyIdVerifier:"ethereum-address-verifier"};if(e.chain_type==="solana")return{entropyId:e.address,entropyIdVerifier:"solana-address-verifier"};throw new Error("Invalid embedded wallet account type")};var Ne=({client:e,user:t,solanaWallet:r,setSolanaWallet:o,setSolanaRecoveryFlowState:s,webViewState:n,createSolanaWalletCallbacks:c,recoverSolanaWalletCallbacks:l})=>{let i=_react.useMemo.call(void 0, ()=>_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, t),[t]),d=_react.useMemo.call(void 0, ()=>{var y;return i.length===0?null:(y=_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, t))!=null?y:_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, t)},[t,i]),a=_react.useMemo.call(void 0, ()=>{if(!d)return[];let{entropyId:y,entropyIdVerifier:w}=se(d);return i.map(p=>({address:p.address,publicKey:p.address,walletIndex:p.wallet_index,getProvider:()=>e.embeddedWallet.getSolanaProvider(p,y,w)}))},[i,d,e]),u=_react.useCallback.call(void 0, y=>v(void 0,null,function*(){return yield Fe({client:e,setSolanaWallet:o,createSolanaWalletCallbacks:c,setSolanaRecoveryFlowState:s,opts:y})}),[e,c]),m=_react.useCallback.call(void 0, ()=>v(void 0,null,function*(){if(!d)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{entropyId:y,entropyIdVerifier:w}=se(d);return je({client:e,account:i[0],entropyId:y,entropyIdVerifier:w,setSolanaWallet:o,recoverSolanaWalletCallbacks:l,setSolanaRecoveryFlowState:s})}),[e,d,i,l,s,o]),f=_react.useCallback.call(void 0, ()=>v(void 0,null,function*(){if(!d)throw o({status:"not-created"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});o(y=>y.status==="connected"?{status:"reconnecting"}:{status:"connecting"});try{let{entropyId:y,entropyIdVerifier:w}=se(d),p=yield e.embeddedWallet.getSolanaProvider(i[0],y,w);return o({status:"connected",publicKey:i[0].public_key}),p}catch(y){throw _jssdkcore.errorIndicatesRecoveryIsNeeded.call(void 0, y)?(o({status:"needs-recovery"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):y instanceof Error?(o({status:"error",error:y.message}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:y.message})):(o({status:"error",error:"Error loading embedded wallet"}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,d]);return _react.useEffect.call(void 0, ()=>{if(!t&&r.status!=="disconnected")return o({status:"disconnected"});n==="loaded"&&f().catch(()=>{})},[n,t,d]),_react.useEffect.call(void 0, ()=>{r.status==="error"&&r.error.includes("User must be logged in")&&f()},[r.status]),{create:u,recover:m,getProvider:f,wallets:a}};function de(a){return v(this,arguments,function*({client:e,setWallet:t,createWalletCallbacks:r,recoveryMethod:o,setRecoveryFlowState:s,password:n,recoveryToken:c,recoverySecretOverride:l,iCloudRecordNameOverride:i,solanaAccount:d}){var m,f;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(!c)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!l||!i)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery failed due to inability to store credentials"});break}t({status:"creating",account:null});let u=o==="icloud"?"icloud-native":o;try{let{provider:y,user:w}=yield e.embeddedWallet.create(n,u,c,l,i,d),p=_jssdkcore.getUserEmbeddedWallet.call(void 0, w);return(f=(m=r.current)==null?void 0:m.onSuccess)==null||f.call(m,y),t({status:"connected",provider:y,account:p}),s({status:"initial"}),y}catch(y){let w=y instanceof Error?y.message:"Error creating embedded wallet";throw t({status:"error",error:w,account:null}),s({status:"initial"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:w})}})}function Ke(){return v(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 he(o){return v(this,arguments,function*({user:e,appId:t,client:r}){var l;if(_reactnative.Platform.OS==="android")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let s=yield Ke(),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:d}=yield s.writeRecoverySecretToICloud({containerId:n.container_identifier,appId:t,userId:e.id});return{recoverySecret:i,iCloudRecordName:d}}catch(i){if(i instanceof Error){let d=(l=i.message.split("Caused by: ")[1])!=null?l:"Error writing to iCloud";throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:d})}throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}function qe(o){return v(this,arguments,function*({walletAddress:e,client:t,chainType:r}){var d;if(_reactnative.Platform.OS==="android")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let s=yield Ke(),c=(yield t.recovery.getRecoveryKeyMaterial(e,r)).icloud_record_name;if(!c)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery not properly backed up."});let l=yield t.recovery.icloudAuth.getICloudConfiguration("expo-ios"),i=l==null?void 0:l.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:a}=yield s.readRecoverySecretFromICloud({containerId:i,recordName:c});return{recoverySecret:a}}catch(a){if(a instanceof Error){let u=(d=a.message.split("Caused by: ")[1])!=null?d:"Error writing to iCloud";throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:u})}throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}var _reactfastcompare = require('react-fast-compare'); var _reactfastcompare2 = _interopRequireDefault(_reactfastcompare);var He=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 co=e=>new Promise(t=>setTimeout(t,e));function vo(){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 ee(s){return v(this,arguments,function*({provider:e,redirectUri:t,client:r,onError:o}){try{let n;switch(e){case"google-drive":{let{url:d}=yield r.recovery.auth.generateURL(N.createURL(t||"/"));n=d;break}default:throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid provider",code:"embedded_wallet_recovery_error"})}let c=yield ze.openAuthSessionAsync(n);if(_reactnative.Platform.OS==="android")return;if(c.type!=="success")throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth session failed",code:"embedded_wallet_recovery_error"});let{queryParams:l}=N.parse(c.url),i;switch(e){case"google-drive":{let{privy_oauth_state:d,privy_oauth_code:a}=l;if(!a||!d)throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth invalid credentials",code:"embedded_wallet_recovery_error"});i=yield ce({oAuthCode:a,oAuthState:d,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 ce(o){return v(this,arguments,function*({oAuthCode:e,oAuthState:t,client:r}){let{access_token:s}=yield r.recovery.auth.authorize(e,t);if(!s)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:"login_with_oauth_returned_with_invalid_credentials"});return s})}var Ht=2*60*1e3;function zt(e){let t;return new Promise((r,o)=>{t=N.addEventListener("url",n=>v(this,[n],function*({url:s}){if(!s)return;let{queryParams:c}=N.parse(s),{privy_oauth_state:l,privy_oauth_code:i}=c!=null?c:{};if(typeof i!="string"||typeof l!="string")return;let d=yield ce({client:e,oAuthCode:i,oAuthState:l});r(d)})),setTimeout(()=>{o(new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_set_recovery_error",error:"Failed to complete Google Drive recovery flow"}))},Ht)}).finally(()=>{t==null||t.remove()})}function Ao(e){return v(this,null,function*(){let t;_reactnative.Platform.OS==="android"&&(t=zt(e));let r=yield ee({provider:"google-drive",client:e});return r!=null?r:yield t})}function ue(n){return v(this,arguments,function*({client:e,recoveryInput:t,setWalletRecoveryCallbacks:r,setRecoveryFlowState:o,setWallet:s}){var c,l,i,d;try{let{provider:a,user:u}=yield e.embeddedWallet.setRecovery(t),m=a,f=_jssdkcore.getUserEmbeddedWallet.call(void 0, u);return s({status:"connected",provider:m,account:f}),(l=(c=r.current)==null?void 0:c.onSuccess)==null||l.call(c,m),o({status:"initial"}),m}catch(a){let u=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_set_recovery_error",error:a instanceof Error?a.message:"Error setting password on embedded wallet"});throw(d=(i=r.current)==null?void 0:i.onError)==null||d.call(i,u),o({status:"initial"}),u}})}function Ye(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 Xe=({client:e,user:t,appId:r,wallet:o,setWallet:s,setRecoveryFlowState:n,webViewState:c,createWalletCallbacks:l,recoverWalletCallbacks:i,setWalletRecoveryCallbacks:d})=>{let a=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedWallet.call(void 0, t),[t]),u=_react.useCallback.call(void 0, p=>v(void 0,null,function*(){var R,q;if(a)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:h}=Ye(p),b,S,W;if(h==="google-drive"&&(b=yield ee({provider:h,client:e,onError:(R=l.current)==null?void 0:R.onError}),n({status:"creating-wallet"}),!b))return null;if(h==="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:D}=yield he({user:_,appId:r,client:e});S=T,W=D}return yield de({client:e,setWallet:s,createWalletCallbacks:l,recoveryMethod:h,setRecoveryFlowState:n,password:g,recoverySecretOverride:S,iCloudRecordNameOverride:W,solanaAccount:(q=_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, _))!=null?q:void 0})}),[e,a,t]),m=_react.useCallback.call(void 0, p=>v(void 0,null,function*(){var h;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(!a)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:a.recovery_method,upgradeToRecoveryMethod:p.recoveryMethod});let _,g;switch(p.recoveryMethod){case"privy":g=O(E({},p),{wallet:a});break;case"user-passcode":g=O(E({},p),{wallet:a,password:p.password});break;case"google-drive":if(_=yield ee({provider:p.recoveryMethod,client:e,onError:(h=d.current)==null?void 0:h.onError}),n({status:"upgrading-recovery"}),!_)return null;g={recoveryMethod:"google-drive",wallet:a,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 he({user:t,appId:r,client:e});g={recoveryMethod:"icloud-native",recoverySecretOverride:b,iCloudRecordNameOverride:S,wallet:a};break;default:throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}return ue({client:e,recoveryInput:g,setWalletRecoveryCallbacks:d,setRecoveryFlowState:n,setWallet:s})}),[e,a,o.status,t]),f=_react.useCallback.call(void 0, p=>v(void 0,null,function*(){return m({recoveryMethod:"user-passcode",password:p})}),[e,a,o.status]),y=_react.useCallback.call(void 0, p=>v(void 0,null,function*(){var S;if(!a)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{password:_,recoveryMethod:g}=Ye(p),h,b;if(g==="google-drive"&&(h=yield ee({provider:g,client:e,onError:(S=i.current)==null?void 0:S.onError}),n({status:"recovering"}),!h))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:W}=yield qe({client:e,walletAddress:a.address});b=W}return ae({client:e,account:a,setWallet:s,recoverWalletCallbacks:i,recoveryMethod:g,setRecoveryFlowState:n,password:_,recoveryToken:h,recoverySecretOverride:b})}),[e,a]),w=_react.useCallback.call(void 0, ()=>v(void 0,null,function*(){if(!a)throw s({status:"not-created",account:null}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});s(p=>p.status==="connected"?{status:"reconnecting",account:a}:{status:"connecting",account:a});try{let p=yield e.embeddedWallet.getProvider(a);return s({status:"connected",provider:p,account:a}),p}catch(p){throw _jssdkcore.errorIndicatesRecoveryIsNeeded.call(void 0, p)?(s({status:"needs-recovery",account:a}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):p instanceof Error?(s({status:"error",error:p.message,account:a}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:p.message})):(s({status:"error",error:"Error loading embedded wallet",account:a}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,a]);return _react.useEffect.call(void 0, ()=>{if(!t&&o.status!=="disconnected")return s({status:"disconnected",account:null});c==="loaded"&&w().catch(()=>{})},[c,t,a]),_react.useEffect.call(void 0, ()=>{o.status==="error"&&o.error.includes("User must be logged in")&&w()},[o.status]),{create:u,recover:y,setPassword:f,setRecovery:m,getProvider:w}};var $e=({client:e,user:t,isReady:r,customAuth:o})=>{let[s,n]=_react.useState.call(void 0, {status:"initial"});return _react.useEffect.call(void 0, ()=>{(()=>v(void 0,null,function*(){if(!(o!=null&&o.enabled)){n({status:"not-enabled"});return}n({status:"loading"});let{getCustomAccessToken:l,isLoading:i}=o;if(!(!r||i))try{let d=yield l();if(!d&&t){yield e.auth.logout(),n({status:"done"});return}if(!d){n({status:"done"});return}if(t){n({status:"done"});return}if(!(yield e.auth.customProvider.syncWithToken(d))){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(d){if(console.log("Error syncing with custom auth provider",d),n({status:"error",error:d}),t)throw yield e.auth.logout(),new (0, _jssdkcore.PrivyClientError)({error:"Third-party auth failed",code:"third_party_auth_error"})}}))()},[e,t,r,o==null?void 0:o.enabled,o==null?void 0:o.getCustomAccessToken,o==null?void 0:o.isLoading]),{customAuthState:s,customAuthStateIsSettled:s.status!=="loading"&&s.status!=="initial"}};var Ze=({client:e,user:t,isUserInitialized:r,oAuthState:o,oAuthCallbacks:s,setOAuthState:n,recoveryFlowState:c,oAuthStateRef:l})=>{let i=B.useURL(),d=_react.useCallback.call(void 0, a=>{var m,f;let u=x(a);n({status:"error",error:u}),(f=(m=s.current).onError)==null||f.call(m,u)},[n]);return _react.useEffect.call(void 0, ()=>{function a(){return v(this,null,function*(){var y,w;if(!i||o.status!=="loading"||c.status!=="initial")return;let{queryParams:u}=B.parse(i),{privy_oauth_state:m,privy_oauth_code:f}=u;if(!f||!m){n({status:"done"});return}try{let p,_;if(t)p=yield e.auth.oauth.linkWithCode(f,m);else{let g=yield e.auth.oauth.loginWithCode(f,m,void 0,void 0,l.current.disableSignup?"no-signup":"login-or-sign-up");p=g.user,_=!!g.is_new_user}return(w=(y=s.current).onSuccess)==null||w.call(y,p,_),l.current={},n({status:"done"}),yield B.openURL(i.split("?")[0])}catch(p){l.current={},d(p)}})}_reactnative.Platform.OS==="android"&&r&&a()},[i,r])};var et=({client:e,user:t,createWalletCallbacks:r,recoverWalletCallbacks:o,setWalletRecoveryCallbacks:s,recoveryFlowState:n,oAuthState:c,setRecoveryFlowState:l,setWallet:i,appStateVisible:d,webViewLoaded:a})=>{let u=J.useURL(),m=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedWallet.call(void 0, t),[t]),f=_react.useCallback.call(void 0, y=>{var p,_,g,h;let w=x(y);n.status==="creating-wallet"?(_=(p=r.current).onError)==null||_.call(p,x(w)):(h=(g=o.current).onError)==null||h.call(g,x(w)),l({status:"initial"})},[n]);return _react.useEffect.call(void 0, ()=>{function y(){return v(this,null,function*(){var g;if(!u&&n.status!=="initial"&&d&&f(new Error("Recovery OAuth session failed")),!u||n.status==="initial"||c.status!=="initial"||!d||!a)return;let{queryParams:w}=J.parse(u),{privy_oauth_state:p,privy_oauth_code:_}=w;if(!(!_||!p)){yield J.openURL(u.split("?")[0]);try{let h=yield ce({oAuthCode:_,oAuthState:p,client:e});if(n.status==="creating-wallet"){let b=(g=_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, t))!=null?g:void 0;yield de({client:e,setWallet:i,createWalletCallbacks:r,recoveryMethod:"google-drive",setRecoveryFlowState:l,recoveryToken:h,solanaAccount:b})}else if(n.status==="upgrading-recovery"){if(!m)throw new Error("Embedded wallet not found");yield ue({client:e,recoveryInput:{recoveryMethod:"google-drive",wallet:m,recoveryAccessToken:h},setWalletRecoveryCallbacks:s,setRecoveryFlowState:l,setWallet:i})}else yield ae({client:e,account:m,setWallet:i,recoverWalletCallbacks:o,recoveryMethod:"google-drive",setRecoveryFlowState:l,recoveryToken:h})}catch(h){f(h)}}})}_reactnative.Platform.OS==="android"&&y()},[u,n.status,d,a])};var tt=({client:e,isUserInitialized:t,setIsUserInitialized:r,setError:o})=>{_react.useEffect.call(void 0, ()=>{t||(()=>v(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 _zustand = require('zustand');var P=class extends Error{constructor(r,o){super(o);this.code=r,this.error=o}},rt= exports.t =class extends P{constructor(r){super("underlying_error",r instanceof Error?r.message:"An underlying error occurred");this.wrappedError=r}};var be={success:e=>({value:e}),error:e=>({error:e})};var ot=e=>{let t=Array.from(new Set(e));return t.length===0?be.error(new P("no_login_methods_available","No login methods available")):be.success(t)},_e=e=>{let t=e.length,r=e.every(o=>o==="sms"||o==="email");return t<=2&&r?e[0]:null},vn= exports.u =(e,t)=>{if(e.length!==2)return null;let[r,o]=e;return t===r?o:r},fn= exports.v ={email:"email",sms:"phone",google:"Google",apple:"Apple",discord:"Discord",twitter:"X",github:"Github",spotify:"Spotify",instagram:"Instagram",tiktok:"Tiktok",linkedin:"LinkedIn"};function nt(e){return new Promise((t,r)=>{e({resolve:t,reject:r})})}function cr(e,t){return{resolve:r=>{t(),e.resolve(r)},reject:r=>{t(),e.reject(r)}}}function it(e,t,r){let o=setTimeout(()=>{e.reject(t())},r);return cr(e,()=>{clearTimeout(o)})}var mr=1e3*60*5,F=_zustand.create.call(void 0, )((e,t)=>({privyElementsConfig:null,loginPromiseResolvers:null,isUIMounted:!1,activeLoginMethod:null,updateUIMounted:r=>e({isUIMounted:r}),openLoginFlow:(r,o,s,n)=>nt(c=>{var u,m,f;let l=o.app.getConfig();if(!l)return c.reject(new P("privy_not_ready","Privy is not ready"));if(s!==null)return c.reject(new P("user_already_logged_in","User is already logged in"));if(!t().isUIMounted)return c.reject(new P("privy_elements_not_ready","Privy Elements is not mounted"));if(t().loginPromiseResolvers!==null)return c.reject(new P("existing_login_flow_in_progress","A login flow is already in progress"));let i=ot(r.loginMethods);if(i.error)return c.reject(i.error);let d={loginMethods:i.value,appearance:{logo:(f=(m=(u=r.appearance)==null?void 0:u.logo)!=null?m:l.logo_url)!=null?f:void 0}},a=it(c,()=>(e({privyElementsConfig:null,loginPromiseResolvers:null}),new P("login_flow_timeout","The login flow timed out")),mr);n(),e({loginPromiseResolvers:a,privyElementsConfig:d,activeLoginMethod:_e(d.loginMethods)})}),closeLoginFlow:()=>{var r;return(r=t().loginPromiseResolvers)==null||r.reject(new P("login_flow_closed","The login flow was closed")),e({privyElementsConfig:null,loginPromiseResolvers:null})},goBack:()=>{let{activeLoginMethod:r,privyElementsConfig:o,updateActiveLoginMethod:s,closeLoginFlow:n}=t();if(!o){n();return}let c=_e(o.loginMethods)===null;r===null||!c?n():s(null)},updateActiveLoginMethod:r=>e({activeLoginMethod:r})})),kn= exports.y =()=>{let e=F(r=>r.privyElementsConfig);return F(r=>r.isUIMounted)?e:null},Cn= exports.z =()=>F(e=>e.openLoginFlow),An= exports.A =()=>F(e=>e.closeLoginFlow),Pn= exports.B =()=>F(e=>e.goBack),Rn= exports.C =()=>F(e=>[e.activeLoginMethod,e.updateActiveLoginMethod]),yr=e=>{let{loginPromiseResolvers:t}=F.getState();t==null||t.resolve(e)},at=()=>yr,Wn= exports.D =()=>{let e=F(t=>t.updateUIMounted);_react.useEffect.call(void 0, ()=>(e(!0),()=>{e(!1)}),[e])};var Se=_react.createContext.call(void 0, {}),K;function Bn(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 Jn=e=>{var We;let[t,r]=_react.useState.call(void 0, _reactnative.AppState.currentState==="active");_react.useEffect.call(void 0, ()=>{let L=_reactnative.AppState.addEventListener("change",Et=>{r(Et==="active")});return()=>{L.remove()}},[]);let[o,s]=_react.useState.call(void 0, !1),[n,c]=_react.useState.call(void 0, null),[l,i]=_react.useState.call(void 0, "loading"),[d,a]=_react.useState.call(void 0, !1),[u,m]=_react.useState.call(void 0, null),[f,y]=_react.useState.call(void 0, {status:"disconnected",account:null}),[w,p]=_react.useState.call(void 0, {status:"disconnected"}),[_,g]=_react.useState.call(void 0, {status:"initial"}),[h,b]=_react.useState.call(void 0, {status:"initial"}),S=_react.useRef.call(void 0, {}),[W,R]=_react.useState.call(void 0, {status:"initial"}),[q,T]=_react.useState.call(void 0, {status:"initial"}),[D,Y]=_react.useState.call(void 0, {status:"initial"}),[X,Q]=_react.useState.call(void 0, {status:"initial"}),[U,vt]=_react.useState.call(void 0, {status:"initial"}),Ae=_react.useRef.call(void 0, {}),me=_react.useRef.call(void 0, {}),ye=_react.useRef.call(void 0, {}),ve=_react.useRef.call(void 0, {}),Pe=_react.useRef.call(void 0, {}),Re=_react.useRef.call(void 0, {}),ft=at(),$=_react.useCallback.call(void 0, L=>{if(L){ft(L),He(m)(L);return}m(null),g({status:"initial"}),b({status:"initial"}),y({status:"disconnected",account:null})},[]),C=_react.useMemo.call(void 0, ()=>{let L=e.storage||ut;return e.client?(K=e.client,K.setCallbacks({setUser:$,setIsReady:a}),K):(K=new (0, _jssdkcore2.default)({storage:ct(L),appId:e.appId,clientId:e.clientId,supportedChains:e.supportedChains,nativeAppIdentifier:dt(),baseUrl:e.baseUrl,sdkVersion:`expo:${Ue.version}`,callbacks:{setUser:$,setIsReady:a},logLevel:e.logLevel,crypto:{digest:_expocrypto.digest}}),K)},[e.client,e.storage,e.appId,e.clientId,e.baseUrl,e.supportedChains,e.logLevel,$]),wt=_react.useCallback.call(void 0, ()=>($(null),C.auth.logout()),[$,C]),ht=_react.useCallback.call(void 0, ()=>v(void 0,null,function*(){try{return yield C.getAccessToken()}catch(L){return console.debug(L),null}}),[C]),gt=_react.useCallback.call(void 0, ()=>C.getIdentityToken(),[C]);tt({client:C,isUserInitialized:o,setIsUserInitialized:s,setError:c});let bt=Xe({client:C,user:u,appId:e.appId,webViewState:l,createWalletCallbacks:me,recoverWalletCallbacks:ye,setWalletRecoveryCallbacks:ve,setRecoveryFlowState:R,wallet:f,setWallet:y}),_t=Ne({client:C,user:u,webViewState:l,createSolanaWalletCallbacks:Pe,recoverSolanaWalletCallbacks:Re,setSolanaRecoveryFlowState:T,solanaWallet:w,setSolanaWallet:p});Ze({client:C,isUserInitialized:o,user:u,oAuthState:h,setOAuthState:b,oAuthCallbacks:Ae,recoveryFlowState:W,oAuthStateRef:S}),et({client:C,user:u,webViewLoaded:l==="loaded",createWalletCallbacks:me,recoverWalletCallbacks:ye,setWalletRecoveryCallbacks:ve,recoveryFlowState:W,oAuthState:h,setRecoveryFlowState:R,setWallet:y,appStateVisible:t});let{customAuthStateIsSettled:St}=$e({client:C,user:u,isReady:o,customAuth:(We=e.config)==null?void 0:We.customAuth});return _react2.default.createElement(_react2.default.Fragment,null,_react2.default.createElement(Se.Provider,{value:{client:C,user:u,isReady:l!=="loading"&&o&&lt(h)&&St,error:n,logout:wt,getAccessToken:ht,getIdentityToken:gt,wallet:E(E({},f),bt),solanaWallet:E(E({},w),_t),oAuthState:h,oAuthCallbacks:Ae,recoveryFlowState:W,setRecoveryFlowState:R,solanaRecoveryFlowState:q,setSolanaRecoveryFlowState:T,createWalletCallbacks:me,recoverWalletCallbacks:ye,setWalletRecoveryCallbacks:ve,createSolanaWalletCallbacks:Pe,recoverSolanaWalletCallbacks:Re,setOAuthState:b,siweState:D,setSiweState:Y,otpState:_,setOtpState:g,passkeyState:X,setPasskeyState:Q,farcasterState:U,setFarcasterState:vt,oAuthStateRef:S}},e.children),_react2.default.createElement(_reactnative.View,{style:{width:0,height:0,overflow:"hidden"}},_react2.default.createElement(Me,{logLevel:e.logLevel,client:C,isClientReady:d,setWebViewState:i,webViewState:l})))};var lt=e=>e.status!=="loading",ke=(e={})=>{let{user:t,oAuthState:r,setOAuthState:o,oAuthCallbacks:s,client:n,oAuthStateRef:c}=_react.useContext.call(void 0, Se),l=e.action?e.action==="login":!t;_react.useEffect.call(void 0, ()=>{s.current={onSuccess:e.onSuccess,onError:e.onError}},[e.onSuccess,e.onError]);let i=_react.useCallback.call(void 0, a=>{var m;let u=x(a);return o({status:"error",error:u}),(m=e==null?void 0:e.onError)==null||m.call(e,u),u},[e==null?void 0:e.onError]);return{start:_react.useCallback.call(void 0, function(w){return v(this,arguments,function*({provider:u,redirectUri:m,isLegacyAppleIosBehaviorEnabled:f=!1,disableSignup:y}){var p,_,g;o({status:"loading"}),c.current={disableSignup:y};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:h}=yield n.auth.oauth.generateURL(u,G.createURL(m||"/")),b,S;if(_reactnative.Platform.OS==="ios"&&u==="apple"&&!f){let X=(p=new URL(h).searchParams.get("state"))!=null?p:"",Q=yield yt.signInAsync({state:X}).catch(U=>{throw U instanceof Error&&"code"in U&&U.code==="ERR_REQUEST_CANCELED"?new (0, _jssdkcore.PrivyClientError)({error:"Apple login was cancelled",code:l?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):U});if(!Q.authorizationCode)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:l?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(l){let U=yield n.auth.oauth.loginWithCode(Q.authorizationCode,X,u,"raw",y?"no-signup":"login-or-sign-up");b=U.user,S=U.is_new_user}else b=yield n.auth.oauth.linkWithCode(Q.authorizationCode,X,u,"raw");return(_=e==null?void 0:e.onSuccess)==null||_.call(e,b,S),o({status:"done"}),b!=null?b:void 0}let W=_reactnative.Platform.OS==="android"?h.replace("x.com","twitter.com"):h,R=yield oe.openAuthSessionAsync(W);if(_reactnative.Platform.OS==="android")return;if(R.type!=="success")throw[oe.WebBrowserResultType.CANCEL,oe.WebBrowserResultType.DISMISS].includes(R.type)?new (0, _jssdkcore.PrivyClientError)({error:"OAuth was cancelled",code:l?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):new (0, _jssdkcore.PrivyClientError)({error:"OAuth session failed",code:l?"failed_to_complete_login_with_oauth":"failed_to_complete_link_with_oauth"});let{queryParams:q}=G.parse(R.url),{privy_oauth_state:T,privy_oauth_code:D}=q;if(!D||!T)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:l?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(l){let Y=yield n.auth.oauth.loginWithCode(D,T,u,void 0,y?"no-signup":"login-or-sign-up");b=Y.user,S=Y.is_new_user}else b=yield n.auth.oauth.linkWithCode(D,T,u);return(g=e==null?void 0:e.onSuccess)==null||g.call(e,b,S),yield G.openURL(R.url.split("?")[0]),o({status:"done"}),b!=null?b:void 0}catch(h){i(h)}})},[t,n,o,i]),state:r}};function ri(e){let{state:t,start:r}=ke(O(E({},e),{action:"login"}));return{state:t,login:r}}function oi(e){let{state:t,start:r}=ke(O(E({},e),{action:"link"}));return{state:t,link:r}}function ni(e){return ke(e)}var dt=()=>{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 ct(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:()=>v(this,null,function*(){return[]})}}var ut={get(e){return I.getItemAsync(e,{keychainAccessible:I.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},put(e,t){return I.setItemAsync(e,t,{keychainAccessible:I.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},del(e){return I.deleteItemAsync(e,{keychainAccessible:I.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},getKeys:()=>v(void 0,null,function*(){return[]})};var Cr=e=>v(void 0,null,function*(){var o;let r=yield(yield Promise.resolve().then(() => _interopRequireWildcard(require("react-native-passkeys")))).create({rp:e.rp,user:e.user,challenge:e.challenge,pubKeyCredParams:e.pubKeyCredParams,excludeCredentials:e.excludeCredentials,authenticatorSelection:e.authenticatorSelection,timeout:12e4});if(!r)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_create_passkey",error:"Could not create passkey"});return O(E({},r),{type:(o=r.type)!=null?o:"public-key",clientExtensionResults:{}})});var Pr=e=>v(void 0,null,function*(){var o;let r=yield(yield Promise.resolve().then(() => _interopRequireWildcard(require("react-native-passkeys")))).get({rpId:e.rpId,challenge:e.challenge,allowCredentials:e.allowCredentials,timeout:12e4});if(!r)throw new (0, _jssdkcore.PrivyClientError)({code:"no_passkey_found_for_challenge",error:"Could not find a matching passkey to login with"});return O(E({},r),{type:(o=r.type)!=null?o:"public-key",clientExtensionResults:{}})});function hi(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 gi(e){var t,r,o,s;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:(s=e.allow_credentials)==null?void 0:s.map(({id:n,type:c,transports:l})=>({id:n,type:c,transports:l})),userVerification:e.user_verification}}exports.a = E; exports.b = O; exports.c = Rr; exports.d = v; exports.e = Ue; exports.f = se; exports.g = he; exports.h = qe; exports.i = x; exports.j = co; exports.k = vo; exports.l = Ao; exports.m = ri; exports.n = oi; exports.o = ni; exports.p = dt; exports.q = ct; exports.r = ut; exports.s = P; exports.t = rt; exports.u = vn; exports.v = fn; exports.w = nt; exports.x = it; exports.y = kn; exports.z = Cn; exports.A = An; exports.B = Pn; exports.C = Rn; exports.D = Wn; exports.E = Se; exports.F = Bn; exports.G = Jn; exports.H = Cr; exports.I = Pr; exports.J = hi; exports.K = gi;
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 kt=Object.defineProperty,Ct=Object.defineProperties;var At=Object.getOwnPropertyDescriptors;var ne=Object.getOwnPropertySymbols;var xe=Object.prototype.hasOwnProperty,Ie=Object.prototype.propertyIsEnumerable;var Oe=(e,t,r)=>t in e?kt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,E= exports.a =(e,t)=>{for(var r in t||(t={}))xe.call(t,r)&&Oe(e,r,t[r]);if(ne)for(var r of ne(t))Ie.call(t,r)&&Oe(e,r,t[r]);return e},O= exports.b =(e,t)=>Ct(e,At(t));var Rr=(e,t)=>{var r={};for(var o in e)xe.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(e!=null&&ne)for(var o of ne(e))t.indexOf(o)<0&&Ie.call(e,o)&&(r[o]=e[o]);return r};var v=(e,t,r)=>new Promise((o,s)=>{var n=i=>{try{l(r.next(i))}catch(d){s(d)}},c=i=>{try{l(r.throw(i))}catch(d){s(d)}},l=i=>i.done?o(i.value):Promise.resolve(i.value).then(n,c);l((r=r.apply(e,t)).next())});var _expoappleauthentication = require('expo-apple-authentication'); var yt = _interopRequireWildcard(_expoappleauthentication);var _expoapplication = require('expo-application');var _expolinking = require('expo-linking'); var G = _interopRequireWildcard(_expolinking); var N = _interopRequireWildcard(_expolinking); var B = _interopRequireWildcard(_expolinking); var J = _interopRequireWildcard(_expolinking);var _exposecurestore = require('expo-secure-store'); var I = _interopRequireWildcard(_exposecurestore);var _expowebbrowser = require('expo-web-browser'); var oe = _interopRequireWildcard(_expowebbrowser); var ze = _interopRequireWildcard(_expowebbrowser);var _react = require('react'); var _react2 = _interopRequireDefault(_react);var _reactnative = require('react-native');var _jssdkcore = require('@privy-io/js-sdk-core'); var _jssdkcore2 = _interopRequireDefault(_jssdkcore);var _expocrypto = require('expo-crypto');var Ue={name:"@privy-io/expo",version:"0.34.1",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.35.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 _reactnativewebview = require('react-native-webview'); var _reactnativewebview2 = _interopRequireDefault(_reactnativewebview);var Me=({client:e,isClientReady:t,setWebViewState:r,webViewState:o,logLevel:s})=>{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=>v(void 0,null,function*(){n.current&&i==="active"&&((yield e.embeddedWallet.ping(500))||(n.current.reload(),r("reloading")))})).remove,[]);let c=_react.useCallback.call(void 0, l=>v(void 0,null,function*(){let{data:i}=l.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:s==="DEBUG",onLoad:()=>r("loaded"),onError:console.error,onMessage:c}):null};function Fe(n){return v(this,arguments,function*({client:e,setSolanaWallet:t,createSolanaWalletCallbacks:r,setSolanaRecoveryFlowState:o,opts:s}){var c,l,i;t({status:"creating"});try{let{user:d}=yield e.user.get(),a=_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, d),u=a[0];if(s!=null&&s.recoveryMethod&&s.recoveryMethod!=="privy")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Unsupported recovery method for solana wallet."});if(!(s!=null&&s.createAdditional)&&u)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Solana wallet already exists for this user. Set `createAdditional` to `true` to create another wallet"});let m,f;if(u){let w=Math.max(...a.map(_=>_.wallet_index),0)+1,p=yield e.embeddedWallet.createAdditionalSolana({primaryPublicKey:u.address,hdWalletIndex:w});m=p.provider,f=p.user}else{let w=(c=_jssdkcore.getUserEmbeddedWallet.call(void 0, d))!=null?c:void 0,p=yield e.embeddedWallet.createSolana({ethereumAccount:w});m=p.provider,f=p.user}let y=_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, f)[0];if(!y)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Unknown error creating solana wallet"});return(i=(l=r.current)==null?void 0:l.onSuccess)==null||i.call(l,m),t({status:"connected",publicKey:y.public_key}),o({status:"initial"}),m}catch(d){let a=d instanceof Error?d.message:"Error creating embedded wallet";throw t({status:"error",error:a}),o({status:"initial"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:a})}})}function ae(d){return v(this,arguments,function*({client:e,account:t,setWallet:r,recoverWalletCallbacks:o,recoveryMethod:s,setRecoveryFlowState:n,password:c,recoveryToken:l,recoverySecretOverride:i}){var a,u,m,f;if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});switch(s){case"user-passcode":if(!c)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!l)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 y=yield e.embeddedWallet.getProvider(t,c,l,i);return r({status:"connected",provider:y,account:t}),n({status:"initial"}),(u=(a=o.current)==null?void 0:a.onSuccess)==null||u.call(a,y),y}catch(y){r({status:"needs-recovery",account:t}),n({status:"initial"});let w=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:y instanceof Error?y.message:"Error recovering embedded wallet"});throw(f=(m=o.current)==null?void 0:m.onError)==null||f.call(m,w),w}})}function je(l){return v(this,arguments,function*({client:e,account:t,entropyId:r,entropyIdVerifier:o,setSolanaWallet:s,recoverSolanaWalletCallbacks:n,setSolanaRecoveryFlowState:c}){var i,d,a,u;s({status:"connecting"});try{let m=yield e.embeddedWallet.getSolanaProvider(t,r,o);return s({status:"connected",publicKey:m._publicKey}),c({status:"initial"}),(d=(i=n.current)==null?void 0:i.onSuccess)==null||d.call(i,m),m}catch(m){s({status:"needs-recovery"}),c({status:"initial"});let f=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:m instanceof Error?m.message:"Error recovering embedded wallet"});throw(u=(a=n.current)==null?void 0:a.onError)==null||u.call(a,f),f}})}var se=e=>{if(e.chain_type==="ethereum")return{entropyId:e.address,entropyIdVerifier:"ethereum-address-verifier"};if(e.chain_type==="solana")return{entropyId:e.address,entropyIdVerifier:"solana-address-verifier"};throw new Error("Invalid embedded wallet account type")};var Ne=({client:e,user:t,solanaWallet:r,setSolanaWallet:o,setSolanaRecoveryFlowState:s,webViewState:n,createSolanaWalletCallbacks:c,recoverSolanaWalletCallbacks:l})=>{let i=_react.useMemo.call(void 0, ()=>_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, t),[t]),d=_react.useMemo.call(void 0, ()=>{var y;return i.length===0?null:(y=_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, t))!=null?y:_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, t)},[t,i]),a=_react.useMemo.call(void 0, ()=>{if(!d)return[];let{entropyId:y,entropyIdVerifier:w}=se(d);return i.map(p=>({address:p.address,publicKey:p.address,walletIndex:p.wallet_index,getProvider:()=>e.embeddedWallet.getSolanaProvider(p,y,w)}))},[i,d,e]),u=_react.useCallback.call(void 0, y=>v(void 0,null,function*(){return yield Fe({client:e,setSolanaWallet:o,createSolanaWalletCallbacks:c,setSolanaRecoveryFlowState:s,opts:y})}),[e,c]),m=_react.useCallback.call(void 0, ()=>v(void 0,null,function*(){if(!d)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{entropyId:y,entropyIdVerifier:w}=se(d);return je({client:e,account:i[0],entropyId:y,entropyIdVerifier:w,setSolanaWallet:o,recoverSolanaWalletCallbacks:l,setSolanaRecoveryFlowState:s})}),[e,d,i,l,s,o]),f=_react.useCallback.call(void 0, ()=>v(void 0,null,function*(){if(!d)throw o({status:"not-created"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});o(y=>y.status==="connected"?{status:"reconnecting"}:{status:"connecting"});try{let{entropyId:y,entropyIdVerifier:w}=se(d),p=yield e.embeddedWallet.getSolanaProvider(i[0],y,w);return o({status:"connected",publicKey:i[0].public_key}),p}catch(y){throw _jssdkcore.errorIndicatesRecoveryIsNeeded.call(void 0, y)?(o({status:"needs-recovery"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):y instanceof Error?(o({status:"error",error:y.message}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:y.message})):(o({status:"error",error:"Error loading embedded wallet"}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,d]);return _react.useEffect.call(void 0, ()=>{if(!t&&r.status!=="disconnected")return o({status:"disconnected"});n==="loaded"&&f().catch(()=>{})},[n,t,d]),_react.useEffect.call(void 0, ()=>{r.status==="error"&&r.error.includes("User must be logged in")&&f()},[r.status]),{create:u,recover:m,getProvider:f,wallets:a}};function de(a){return v(this,arguments,function*({client:e,setWallet:t,createWalletCallbacks:r,recoveryMethod:o,setRecoveryFlowState:s,password:n,recoveryToken:c,recoverySecretOverride:l,iCloudRecordNameOverride:i,solanaAccount:d}){var m,f;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(!c)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!l||!i)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery failed due to inability to store credentials"});break}t({status:"creating",account:null});let u=o==="icloud"?"icloud-native":o;try{let{provider:y,user:w}=yield e.embeddedWallet.create(n,u,c,l,i,d),p=_jssdkcore.getUserEmbeddedWallet.call(void 0, w);return(f=(m=r.current)==null?void 0:m.onSuccess)==null||f.call(m,y),t({status:"connected",provider:y,account:p}),s({status:"initial"}),y}catch(y){let w=y instanceof Error?y.message:"Error creating embedded wallet";throw t({status:"error",error:w,account:null}),s({status:"initial"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:w})}})}function Ke(){return v(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 he(o){return v(this,arguments,function*({user:e,appId:t,client:r}){var l;if(_reactnative.Platform.OS==="android")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let s=yield Ke(),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:d}=yield s.writeRecoverySecretToICloud({containerId:n.container_identifier,appId:t,userId:e.id});return{recoverySecret:i,iCloudRecordName:d}}catch(i){if(i instanceof Error){let d=(l=i.message.split("Caused by: ")[1])!=null?l:"Error writing to iCloud";throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:d})}throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}function qe(o){return v(this,arguments,function*({walletAddress:e,client:t,chainType:r}){var d;if(_reactnative.Platform.OS==="android")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let s=yield Ke(),c=(yield t.recovery.getRecoveryKeyMaterial(e,r)).icloud_record_name;if(!c)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery not properly backed up."});let l=yield t.recovery.icloudAuth.getICloudConfiguration("expo-ios"),i=l==null?void 0:l.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:a}=yield s.readRecoverySecretFromICloud({containerId:i,recordName:c});return{recoverySecret:a}}catch(a){if(a instanceof Error){let u=(d=a.message.split("Caused by: ")[1])!=null?d:"Error writing to iCloud";throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:u})}throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}var _reactfastcompare = require('react-fast-compare'); var _reactfastcompare2 = _interopRequireDefault(_reactfastcompare);var He=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 co=e=>new Promise(t=>setTimeout(t,e));function vo(){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 ee(s){return v(this,arguments,function*({provider:e,redirectUri:t,client:r,onError:o}){try{let n;switch(e){case"google-drive":{let{url:d}=yield r.recovery.auth.generateURL(N.createURL(t||"/"));n=d;break}default:throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid provider",code:"embedded_wallet_recovery_error"})}let c=yield ze.openAuthSessionAsync(n);if(_reactnative.Platform.OS==="android")return;if(c.type!=="success")throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth session failed",code:"embedded_wallet_recovery_error"});let{queryParams:l}=N.parse(c.url),i;switch(e){case"google-drive":{let{privy_oauth_state:d,privy_oauth_code:a}=l;if(!a||!d)throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth invalid credentials",code:"embedded_wallet_recovery_error"});i=yield ce({oAuthCode:a,oAuthState:d,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 ce(o){return v(this,arguments,function*({oAuthCode:e,oAuthState:t,client:r}){let{access_token:s}=yield r.recovery.auth.authorize(e,t);if(!s)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:"login_with_oauth_returned_with_invalid_credentials"});return s})}var Ht=2*60*1e3;function zt(e){let t;return new Promise((r,o)=>{t=N.addEventListener("url",n=>v(this,[n],function*({url:s}){if(!s)return;let{queryParams:c}=N.parse(s),{privy_oauth_state:l,privy_oauth_code:i}=c!=null?c:{};if(typeof i!="string"||typeof l!="string")return;let d=yield ce({client:e,oAuthCode:i,oAuthState:l});r(d)})),setTimeout(()=>{o(new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_set_recovery_error",error:"Failed to complete Google Drive recovery flow"}))},Ht)}).finally(()=>{t==null||t.remove()})}function Ao(e){return v(this,null,function*(){let t;_reactnative.Platform.OS==="android"&&(t=zt(e));let r=yield ee({provider:"google-drive",client:e});return r!=null?r:yield t})}function ue(n){return v(this,arguments,function*({client:e,recoveryInput:t,setWalletRecoveryCallbacks:r,setRecoveryFlowState:o,setWallet:s}){var c,l,i,d;try{let{provider:a,user:u}=yield e.embeddedWallet.setRecovery(t),m=a,f=_jssdkcore.getUserEmbeddedWallet.call(void 0, u);return s({status:"connected",provider:m,account:f}),(l=(c=r.current)==null?void 0:c.onSuccess)==null||l.call(c,m),o({status:"initial"}),m}catch(a){let u=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_set_recovery_error",error:a instanceof Error?a.message:"Error setting password on embedded wallet"});throw(d=(i=r.current)==null?void 0:i.onError)==null||d.call(i,u),o({status:"initial"}),u}})}function Ye(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 Xe=({client:e,user:t,appId:r,wallet:o,setWallet:s,setRecoveryFlowState:n,webViewState:c,createWalletCallbacks:l,recoverWalletCallbacks:i,setWalletRecoveryCallbacks:d})=>{let a=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedWallet.call(void 0, t),[t]),u=_react.useCallback.call(void 0, p=>v(void 0,null,function*(){var R,q;if(a)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:h}=Ye(p),b,S,W;if(h==="google-drive"&&(b=yield ee({provider:h,client:e,onError:(R=l.current)==null?void 0:R.onError}),n({status:"creating-wallet"}),!b))return null;if(h==="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:D}=yield he({user:_,appId:r,client:e});S=T,W=D}return yield de({client:e,setWallet:s,createWalletCallbacks:l,recoveryMethod:h,setRecoveryFlowState:n,password:g,recoverySecretOverride:S,iCloudRecordNameOverride:W,solanaAccount:(q=_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, _))!=null?q:void 0})}),[e,a,t]),m=_react.useCallback.call(void 0, p=>v(void 0,null,function*(){var h;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(!a)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:a.recovery_method,upgradeToRecoveryMethod:p.recoveryMethod});let _,g;switch(p.recoveryMethod){case"privy":g=O(E({},p),{wallet:a});break;case"user-passcode":g=O(E({},p),{wallet:a,password:p.password});break;case"google-drive":if(_=yield ee({provider:p.recoveryMethod,client:e,onError:(h=d.current)==null?void 0:h.onError}),n({status:"upgrading-recovery"}),!_)return null;g={recoveryMethod:"google-drive",wallet:a,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 he({user:t,appId:r,client:e});g={recoveryMethod:"icloud-native",recoverySecretOverride:b,iCloudRecordNameOverride:S,wallet:a};break;default:throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}return ue({client:e,recoveryInput:g,setWalletRecoveryCallbacks:d,setRecoveryFlowState:n,setWallet:s})}),[e,a,o.status,t]),f=_react.useCallback.call(void 0, p=>v(void 0,null,function*(){return m({recoveryMethod:"user-passcode",password:p})}),[e,a,o.status]),y=_react.useCallback.call(void 0, p=>v(void 0,null,function*(){var S;if(!a)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{password:_,recoveryMethod:g}=Ye(p),h,b;if(g==="google-drive"&&(h=yield ee({provider:g,client:e,onError:(S=i.current)==null?void 0:S.onError}),n({status:"recovering"}),!h))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:W}=yield qe({client:e,walletAddress:a.address});b=W}return ae({client:e,account:a,setWallet:s,recoverWalletCallbacks:i,recoveryMethod:g,setRecoveryFlowState:n,password:_,recoveryToken:h,recoverySecretOverride:b})}),[e,a]),w=_react.useCallback.call(void 0, ()=>v(void 0,null,function*(){if(!a)throw s({status:"not-created",account:null}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});s(p=>p.status==="connected"?{status:"reconnecting",account:a}:{status:"connecting",account:a});try{let p=yield e.embeddedWallet.getProvider(a);return s({status:"connected",provider:p,account:a}),p}catch(p){throw _jssdkcore.errorIndicatesRecoveryIsNeeded.call(void 0, p)?(s({status:"needs-recovery",account:a}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):p instanceof Error?(s({status:"error",error:p.message,account:a}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:p.message})):(s({status:"error",error:"Error loading embedded wallet",account:a}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,a]);return _react.useEffect.call(void 0, ()=>{if(!t&&o.status!=="disconnected")return s({status:"disconnected",account:null});c==="loaded"&&w().catch(()=>{})},[c,t,a]),_react.useEffect.call(void 0, ()=>{o.status==="error"&&o.error.includes("User must be logged in")&&w()},[o.status]),{create:u,recover:y,setPassword:f,setRecovery:m,getProvider:w}};var $e=({client:e,user:t,isReady:r,customAuth:o})=>{let[s,n]=_react.useState.call(void 0, {status:"initial"});return _react.useEffect.call(void 0, ()=>{(()=>v(void 0,null,function*(){if(!(o!=null&&o.enabled)){n({status:"not-enabled"});return}n({status:"loading"});let{getCustomAccessToken:l,isLoading:i}=o;if(!(!r||i))try{let d=yield l();if(!d&&t){yield e.auth.logout(),n({status:"done"});return}if(!d){n({status:"done"});return}if(t){n({status:"done"});return}if(!(yield e.auth.customProvider.syncWithToken(d))){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(d){if(console.log("Error syncing with custom auth provider",d),n({status:"error",error:d}),t)throw yield e.auth.logout(),new (0, _jssdkcore.PrivyClientError)({error:"Third-party auth failed",code:"third_party_auth_error"})}}))()},[e,t,r,o==null?void 0:o.enabled,o==null?void 0:o.getCustomAccessToken,o==null?void 0:o.isLoading]),{customAuthState:s,customAuthStateIsSettled:s.status!=="loading"&&s.status!=="initial"}};var Ze=({client:e,user:t,isUserInitialized:r,oAuthState:o,oAuthCallbacks:s,setOAuthState:n,recoveryFlowState:c,oAuthStateRef:l})=>{let i=B.useURL(),d=_react.useCallback.call(void 0, a=>{var m,f;let u=x(a);n({status:"error",error:u}),(f=(m=s.current).onError)==null||f.call(m,u)},[n]);return _react.useEffect.call(void 0, ()=>{function a(){return v(this,null,function*(){var y,w;if(!i||o.status!=="loading"||c.status!=="initial")return;let{queryParams:u}=B.parse(i),{privy_oauth_state:m,privy_oauth_code:f}=u;if(!f||!m){n({status:"done"});return}try{let p,_;if(t)p=yield e.auth.oauth.linkWithCode(f,m);else{let g=yield e.auth.oauth.loginWithCode(f,m,void 0,void 0,l.current.disableSignup?"no-signup":"login-or-sign-up");p=g.user,_=!!g.is_new_user}return(w=(y=s.current).onSuccess)==null||w.call(y,p,_),l.current={},n({status:"done"}),yield B.openURL(i.split("?")[0])}catch(p){l.current={},d(p)}})}_reactnative.Platform.OS==="android"&&r&&a()},[i,r])};var et=({client:e,user:t,createWalletCallbacks:r,recoverWalletCallbacks:o,setWalletRecoveryCallbacks:s,recoveryFlowState:n,oAuthState:c,setRecoveryFlowState:l,setWallet:i,appStateVisible:d,webViewLoaded:a})=>{let u=J.useURL(),m=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedWallet.call(void 0, t),[t]),f=_react.useCallback.call(void 0, y=>{var p,_,g,h;let w=x(y);n.status==="creating-wallet"?(_=(p=r.current).onError)==null||_.call(p,x(w)):(h=(g=o.current).onError)==null||h.call(g,x(w)),l({status:"initial"})},[n]);return _react.useEffect.call(void 0, ()=>{function y(){return v(this,null,function*(){var g;if(!u&&n.status!=="initial"&&d&&f(new Error("Recovery OAuth session failed")),!u||n.status==="initial"||c.status!=="initial"||!d||!a)return;let{queryParams:w}=J.parse(u),{privy_oauth_state:p,privy_oauth_code:_}=w;if(!(!_||!p)){yield J.openURL(u.split("?")[0]);try{let h=yield ce({oAuthCode:_,oAuthState:p,client:e});if(n.status==="creating-wallet"){let b=(g=_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, t))!=null?g:void 0;yield de({client:e,setWallet:i,createWalletCallbacks:r,recoveryMethod:"google-drive",setRecoveryFlowState:l,recoveryToken:h,solanaAccount:b})}else if(n.status==="upgrading-recovery"){if(!m)throw new Error("Embedded wallet not found");yield ue({client:e,recoveryInput:{recoveryMethod:"google-drive",wallet:m,recoveryAccessToken:h},setWalletRecoveryCallbacks:s,setRecoveryFlowState:l,setWallet:i})}else yield ae({client:e,account:m,setWallet:i,recoverWalletCallbacks:o,recoveryMethod:"google-drive",setRecoveryFlowState:l,recoveryToken:h})}catch(h){f(h)}}})}_reactnative.Platform.OS==="android"&&y()},[u,n.status,d,a])};var tt=({client:e,isUserInitialized:t,setIsUserInitialized:r,setError:o})=>{_react.useEffect.call(void 0, ()=>{t||(()=>v(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 _zustand = require('zustand');var P=class extends Error{constructor(r,o){super(o);this.code=r,this.error=o}},rt= exports.t =class extends P{constructor(r){super("underlying_error",r instanceof Error?r.message:"An underlying error occurred");this.wrappedError=r}};var be={success:e=>({value:e}),error:e=>({error:e})};var ot=e=>{let t=Array.from(new Set(e));return t.length===0?be.error(new P("no_login_methods_available","No login methods available")):be.success(t)},_e=e=>{let t=e.length,r=e.every(o=>o==="sms"||o==="email");return t<=2&&r?e[0]:null},vn= exports.u =(e,t)=>{if(e.length!==2)return null;let[r,o]=e;return t===r?o:r},fn= exports.v ={email:"email",sms:"phone",google:"Google",apple:"Apple",discord:"Discord",twitter:"X",github:"Github",spotify:"Spotify",instagram:"Instagram",tiktok:"Tiktok",linkedin:"LinkedIn"};function nt(e){return new Promise((t,r)=>{e({resolve:t,reject:r})})}function cr(e,t){return{resolve:r=>{t(),e.resolve(r)},reject:r=>{t(),e.reject(r)}}}function it(e,t,r){let o=setTimeout(()=>{e.reject(t())},r);return cr(e,()=>{clearTimeout(o)})}var mr=1e3*60*5,F=_zustand.create.call(void 0, )((e,t)=>({privyElementsConfig:null,loginPromiseResolvers:null,isUIMounted:!1,activeLoginMethod:null,updateUIMounted:r=>e({isUIMounted:r}),openLoginFlow:(r,o,s,n)=>nt(c=>{var u,m,f;let l=o.app.getConfig();if(!l)return c.reject(new P("privy_not_ready","Privy is not ready"));if(s!==null)return c.reject(new P("user_already_logged_in","User is already logged in"));if(!t().isUIMounted)return c.reject(new P("privy_elements_not_ready","Privy Elements is not mounted"));if(t().loginPromiseResolvers!==null)return c.reject(new P("existing_login_flow_in_progress","A login flow is already in progress"));let i=ot(r.loginMethods);if(i.error)return c.reject(i.error);let d={loginMethods:i.value,appearance:{logo:(f=(m=(u=r.appearance)==null?void 0:u.logo)!=null?m:l.logo_url)!=null?f:void 0}},a=it(c,()=>(e({privyElementsConfig:null,loginPromiseResolvers:null}),new P("login_flow_timeout","The login flow timed out")),mr);n(),e({loginPromiseResolvers:a,privyElementsConfig:d,activeLoginMethod:_e(d.loginMethods)})}),closeLoginFlow:()=>{var r;return(r=t().loginPromiseResolvers)==null||r.reject(new P("login_flow_closed","The login flow was closed")),e({privyElementsConfig:null,loginPromiseResolvers:null})},goBack:()=>{let{activeLoginMethod:r,privyElementsConfig:o,updateActiveLoginMethod:s,closeLoginFlow:n}=t();if(!o){n();return}let c=_e(o.loginMethods)===null;r===null||!c?n():s(null)},updateActiveLoginMethod:r=>e({activeLoginMethod:r})})),kn= exports.y =()=>{let e=F(r=>r.privyElementsConfig);return F(r=>r.isUIMounted)?e:null},Cn= exports.z =()=>F(e=>e.openLoginFlow),An= exports.A =()=>F(e=>e.closeLoginFlow),Pn= exports.B =()=>F(e=>e.goBack),Rn= exports.C =()=>F(e=>[e.activeLoginMethod,e.updateActiveLoginMethod]),yr=e=>{let{loginPromiseResolvers:t}=F.getState();t==null||t.resolve(e)},at=()=>yr,Wn= exports.D =()=>{let e=F(t=>t.updateUIMounted);_react.useEffect.call(void 0, ()=>(e(!0),()=>{e(!1)}),[e])};var Se=_react.createContext.call(void 0, {}),K;function Bn(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 Jn=e=>{var We;let[t,r]=_react.useState.call(void 0, _reactnative.AppState.currentState==="active");_react.useEffect.call(void 0, ()=>{let L=_reactnative.AppState.addEventListener("change",Et=>{r(Et==="active")});return()=>{L.remove()}},[]);let[o,s]=_react.useState.call(void 0, !1),[n,c]=_react.useState.call(void 0, null),[l,i]=_react.useState.call(void 0, "loading"),[d,a]=_react.useState.call(void 0, !1),[u,m]=_react.useState.call(void 0, null),[f,y]=_react.useState.call(void 0, {status:"disconnected",account:null}),[w,p]=_react.useState.call(void 0, {status:"disconnected"}),[_,g]=_react.useState.call(void 0, {status:"initial"}),[h,b]=_react.useState.call(void 0, {status:"initial"}),S=_react.useRef.call(void 0, {}),[W,R]=_react.useState.call(void 0, {status:"initial"}),[q,T]=_react.useState.call(void 0, {status:"initial"}),[D,Y]=_react.useState.call(void 0, {status:"initial"}),[X,Q]=_react.useState.call(void 0, {status:"initial"}),[U,vt]=_react.useState.call(void 0, {status:"initial"}),Ae=_react.useRef.call(void 0, {}),me=_react.useRef.call(void 0, {}),ye=_react.useRef.call(void 0, {}),ve=_react.useRef.call(void 0, {}),Pe=_react.useRef.call(void 0, {}),Re=_react.useRef.call(void 0, {}),ft=at(),$=_react.useCallback.call(void 0, L=>{if(L){ft(L),He(m)(L);return}m(null),g({status:"initial"}),b({status:"initial"}),y({status:"disconnected",account:null})},[]),C=_react.useMemo.call(void 0, ()=>{let L=e.storage||ut;return e.client?(K=e.client,K.setCallbacks({setUser:$,setIsReady:a}),K):(K=new (0, _jssdkcore2.default)({storage:ct(L),appId:e.appId,clientId:e.clientId,supportedChains:e.supportedChains,nativeAppIdentifier:dt(),baseUrl:e.baseUrl,sdkVersion:`expo:${Ue.version}`,callbacks:{setUser:$,setIsReady:a},logLevel:e.logLevel,crypto:{digest:_expocrypto.digest}}),K)},[e.client,e.storage,e.appId,e.clientId,e.baseUrl,e.supportedChains,e.logLevel,$]),wt=_react.useCallback.call(void 0, ()=>($(null),C.auth.logout()),[$,C]),ht=_react.useCallback.call(void 0, ()=>v(void 0,null,function*(){try{return yield C.getAccessToken()}catch(L){return console.debug(L),null}}),[C]),gt=_react.useCallback.call(void 0, ()=>C.getIdentityToken(),[C]);tt({client:C,isUserInitialized:o,setIsUserInitialized:s,setError:c});let bt=Xe({client:C,user:u,appId:e.appId,webViewState:l,createWalletCallbacks:me,recoverWalletCallbacks:ye,setWalletRecoveryCallbacks:ve,setRecoveryFlowState:R,wallet:f,setWallet:y}),_t=Ne({client:C,user:u,webViewState:l,createSolanaWalletCallbacks:Pe,recoverSolanaWalletCallbacks:Re,setSolanaRecoveryFlowState:T,solanaWallet:w,setSolanaWallet:p});Ze({client:C,isUserInitialized:o,user:u,oAuthState:h,setOAuthState:b,oAuthCallbacks:Ae,recoveryFlowState:W,oAuthStateRef:S}),et({client:C,user:u,webViewLoaded:l==="loaded",createWalletCallbacks:me,recoverWalletCallbacks:ye,setWalletRecoveryCallbacks:ve,recoveryFlowState:W,oAuthState:h,setRecoveryFlowState:R,setWallet:y,appStateVisible:t});let{customAuthStateIsSettled:St}=$e({client:C,user:u,isReady:o,customAuth:(We=e.config)==null?void 0:We.customAuth});return _react2.default.createElement(_react2.default.Fragment,null,_react2.default.createElement(Se.Provider,{value:{client:C,user:u,isReady:l!=="loading"&&o&&lt(h)&&St,error:n,logout:wt,getAccessToken:ht,getIdentityToken:gt,wallet:E(E({},f),bt),solanaWallet:E(E({},w),_t),oAuthState:h,oAuthCallbacks:Ae,recoveryFlowState:W,setRecoveryFlowState:R,solanaRecoveryFlowState:q,setSolanaRecoveryFlowState:T,createWalletCallbacks:me,recoverWalletCallbacks:ye,setWalletRecoveryCallbacks:ve,createSolanaWalletCallbacks:Pe,recoverSolanaWalletCallbacks:Re,setOAuthState:b,siweState:D,setSiweState:Y,otpState:_,setOtpState:g,passkeyState:X,setPasskeyState:Q,farcasterState:U,setFarcasterState:vt,oAuthStateRef:S}},e.children),_react2.default.createElement(_reactnative.View,{style:{width:0,height:0,overflow:"hidden"}},_react2.default.createElement(Me,{logLevel:e.logLevel,client:C,isClientReady:d,setWebViewState:i,webViewState:l})))};var lt=e=>e.status!=="loading",ke=(e={})=>{let{user:t,oAuthState:r,setOAuthState:o,oAuthCallbacks:s,client:n,oAuthStateRef:c}=_react.useContext.call(void 0, Se),l=e.action?e.action==="login":!t;_react.useEffect.call(void 0, ()=>{s.current={onSuccess:e.onSuccess,onError:e.onError}},[e.onSuccess,e.onError]);let i=_react.useCallback.call(void 0, a=>{var m;let u=x(a);return o({status:"error",error:u}),(m=e==null?void 0:e.onError)==null||m.call(e,u),u},[e==null?void 0:e.onError]);return{start:_react.useCallback.call(void 0, function(w){return v(this,arguments,function*({provider:u,redirectUri:m,isLegacyAppleIosBehaviorEnabled:f=!1,disableSignup:y}){var p,_,g;o({status:"loading"}),c.current={disableSignup:y};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:h}=yield n.auth.oauth.generateURL(u,G.createURL(m||"/")),b,S;if(_reactnative.Platform.OS==="ios"&&u==="apple"&&!f){let X=(p=new URL(h).searchParams.get("state"))!=null?p:"",Q=yield yt.signInAsync({state:X}).catch(U=>{throw U instanceof Error&&"code"in U&&U.code==="ERR_REQUEST_CANCELED"?new (0, _jssdkcore.PrivyClientError)({error:"Apple login was cancelled",code:l?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):U});if(!Q.authorizationCode)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:l?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(l){let U=yield n.auth.oauth.loginWithCode(Q.authorizationCode,X,u,"raw",y?"no-signup":"login-or-sign-up");b=U.user,S=U.is_new_user}else b=yield n.auth.oauth.linkWithCode(Q.authorizationCode,X,u,"raw");return(_=e==null?void 0:e.onSuccess)==null||_.call(e,b,S),o({status:"done"}),b!=null?b:void 0}let W=_reactnative.Platform.OS==="android"?h.replace("x.com","twitter.com"):h,R=yield oe.openAuthSessionAsync(W);if(_reactnative.Platform.OS==="android")return;if(R.type!=="success")throw[oe.WebBrowserResultType.CANCEL,oe.WebBrowserResultType.DISMISS].includes(R.type)?new (0, _jssdkcore.PrivyClientError)({error:"OAuth was cancelled",code:l?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):new (0, _jssdkcore.PrivyClientError)({error:"OAuth session failed",code:l?"failed_to_complete_login_with_oauth":"failed_to_complete_link_with_oauth"});let{queryParams:q}=G.parse(R.url),{privy_oauth_state:T,privy_oauth_code:D}=q;if(!D||!T)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:l?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(l){let Y=yield n.auth.oauth.loginWithCode(D,T,u,void 0,y?"no-signup":"login-or-sign-up");b=Y.user,S=Y.is_new_user}else b=yield n.auth.oauth.linkWithCode(D,T,u);return(g=e==null?void 0:e.onSuccess)==null||g.call(e,b,S),yield G.openURL(R.url.split("?")[0]),o({status:"done"}),b!=null?b:void 0}catch(h){i(h)}})},[t,n,o,i]),state:r}};function ri(e){let{state:t,start:r}=ke(O(E({},e),{action:"login"}));return{state:t,login:r}}function oi(e){let{state:t,start:r}=ke(O(E({},e),{action:"link"}));return{state:t,link:r}}function ni(e){return ke(e)}var dt=()=>{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 ct(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:()=>v(this,null,function*(){return[]})}}var ut={get(e){return I.getItemAsync(e,{keychainAccessible:I.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},put(e,t){return I.setItemAsync(e,t,{keychainAccessible:I.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},del(e){return I.deleteItemAsync(e,{keychainAccessible:I.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},getKeys:()=>v(void 0,null,function*(){return[]})};var Cr=e=>v(void 0,null,function*(){var o;let r=yield(yield Promise.resolve().then(() => _interopRequireWildcard(require("react-native-passkeys")))).create({rp:e.rp,user:e.user,challenge:e.challenge,pubKeyCredParams:e.pubKeyCredParams,excludeCredentials:e.excludeCredentials,authenticatorSelection:e.authenticatorSelection,timeout:12e4});if(!r)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_create_passkey",error:"Could not create passkey"});return O(E({},r),{type:(o=r.type)!=null?o:"public-key",clientExtensionResults:{}})});var Pr=e=>v(void 0,null,function*(){var o;let r=yield(yield Promise.resolve().then(() => _interopRequireWildcard(require("react-native-passkeys")))).get({rpId:e.rpId,challenge:e.challenge,allowCredentials:e.allowCredentials,timeout:12e4});if(!r)throw new (0, _jssdkcore.PrivyClientError)({code:"no_passkey_found_for_challenge",error:"Could not find a matching passkey to login with"});return O(E({},r),{type:(o=r.type)!=null?o:"public-key",clientExtensionResults:{}})});function hi(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 gi(e){var t,r,o,s;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:(s=e.allow_credentials)==null?void 0:s.map(({id:n,type:c,transports:l})=>({id:n,type:c,transports:l})),userVerification:e.user_verification}}exports.a = E; exports.b = O; exports.c = Rr; exports.d = v; exports.e = Ue; exports.f = se; exports.g = he; exports.h = qe; exports.i = x; exports.j = co; exports.k = vo; exports.l = Ao; exports.m = ri; exports.n = oi; exports.o = ni; exports.p = dt; exports.q = ct; exports.r = ut; exports.s = P; exports.t = rt; exports.u = vn; exports.v = fn; exports.w = nt; exports.x = it; exports.y = kn; exports.z = Cn; exports.A = An; exports.B = Pn; exports.C = Rn; exports.D = Wn; exports.E = Se; exports.F = Bn; exports.G = Jn; exports.H = Cr; exports.I = Pr; exports.J = hi; exports.K = gi;
@@ -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; } }var _chunkSCQPB3KWjs = require('./chunk-SCQPB3KW.js');var _react = require('react');var _jssdkcore = require('@privy-io/js-sdk-core');var vr=e=>{let{user:o,client:c,setSiweState:a,siweState:r}=_react.useContext.call(void 0, _chunkSCQPB3KWjs.E),i=_react.useCallback.call(void 0, l=>{var d;let f=_chunkSCQPB3KWjs.i.call(void 0, l);return a({status:"error",error:f}),(d=e==null?void 0:e.onError)==null||d.call(e,f),f},[e==null?void 0:e.onError]),t=_react.useCallback.call(void 0, y=>_chunkSCQPB3KWjs.d.call(void 0, void 0,[y],function*({wallet:l,from:{domain:f,uri:d}}){var s;try{a({status:"generating-message"});let u=yield c.auth.siwe.init(l,f,d);return a({status:"awaiting-signature"}),(s=e==null?void 0:e.onGenerateMessage)==null||s.call(e,u.message),u.message}catch(u){throw i(u)}}),[c,i,e==null?void 0:e.onGenerateMessage]),n=_react.useCallback.call(void 0, d=>_chunkSCQPB3KWjs.d.call(void 0, void 0,[d],function*({signature:l,messageOverride:f}){var y;try{if(!o)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"});a({status:"submitting-signature"});let s=yield c.auth.siwe.linkWithSiwe(l,void 0,f);return a({status:"done"}),(y=e==null?void 0:e.onSuccess)==null||y.call(e,s),s}catch(s){throw i(s)}}),[o,c,i,e==null?void 0:e.onSuccess]);return{generateSiweMessage:t,linkWithSiwe:n,state:r}};var Wr=e=>{let{user:o,client:c,setSiweState:a,siweState:r}=_react.useContext.call(void 0, _chunkSCQPB3KWjs.E),i=_react.useCallback.call(void 0, l=>{var d;let f=_chunkSCQPB3KWjs.i.call(void 0, l);return a({status:"error",error:f}),(d=e==null?void 0:e.onError)==null||d.call(e,f),f},[e==null?void 0:e.onError]),t=_react.useCallback.call(void 0, y=>_chunkSCQPB3KWjs.d.call(void 0, void 0,[y],function*({wallet:l,from:{domain:f,uri:d}}){var s;try{a({status:"generating-message"});let u=yield c.auth.siwe.init(l,f,d);return a({status:"awaiting-signature"}),(s=e==null?void 0:e.onGenerateMessage)==null||s.call(e,u.message),u.message}catch(u){throw i(u)}}),[c,i,e==null?void 0:e.onGenerateMessage]);return{loginWithSiwe:_react.useCallback.call(void 0, y=>_chunkSCQPB3KWjs.d.call(void 0, void 0,[y],function*({signature:l,messageOverride:f,disableSignup:d}){var s;try{if(o)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"});a({status:"submitting-signature"});let u=yield c.auth.siwe.loginWithSiwe(l,void 0,f,d?"no-signup":"login-or-sign-up");return a({status:"done"}),(s=e==null?void 0:e.onSuccess)==null||s.call(e,u.user,u.is_new_user),u.user}catch(u){throw i(u)}}),[o,c,i,e==null?void 0:e.onSuccess]),generateSiweMessage:t,state:r}};var Or=e=>{let{user:o,client:c}=_react.useContext.call(void 0, _chunkSCQPB3KWjs.E),a=_react.useCallback.call(void 0, i=>{var n;let t=_chunkSCQPB3KWjs.i.call(void 0, i);return(n=e==null?void 0:e.onError)==null||n.call(e,t),t},[e==null?void 0:e.onError]);return{unlinkWallet:_react.useCallback.call(void 0, t=>_chunkSCQPB3KWjs.d.call(void 0, void 0,[t],function*({address:i}){var n;try{if(!o)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 l=yield c.auth.siwe.unlinkWallet(i);return(n=e==null?void 0:e.onSuccess)==null||n.call(e,l),l}catch(l){throw a(l)}}),[o,c,a,e==null?void 0:e.onSuccess])}};var Gr=e=>{let[o,c]=_react.useState.call(void 0, ""),{user:a,client:r,otpState:i,setOtpState:t}=_react.useContext.call(void 0, _chunkSCQPB3KWjs.E),n=_react.useCallback.call(void 0, d=>{var s;let y=_chunkSCQPB3KWjs.i.call(void 0, d);return t({status:"error",error:y}),(s=e==null?void 0:e.onError)==null||s.call(e,y),y},[e==null?void 0:e.onError]),l=_react.useCallback.call(void 0, y=>_chunkSCQPB3KWjs.d.call(void 0, void 0,[y],function*({email:d}){var s;c(d);try{t({status:"sending-code"});let u=yield r.auth.email.sendCode(d);return t({status:"awaiting-code-input"}),(s=e==null?void 0:e.onSendCodeSuccess)==null||s.call(e,{email:d}),u}catch(u){return n(u),{success:!1}}}),[r,n,e==null?void 0:e.onSendCodeSuccess]),f=_react.useCallback.call(void 0, s=>_chunkSCQPB3KWjs.d.call(void 0, void 0,[s],function*({code:d,email:y}){var u;try{if(!a)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 v=y||o;if(!v)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid email before calling `linkWithCode`"});t({status:"submitting-code"});let k=yield r.auth.email.linkWithCode(v,d);return t({status:"done"}),(u=e==null?void 0:e.onLinkSuccess)==null||u.call(e,k),k}catch(v){n(v)}}),[a,r,o,n,e==null?void 0:e.onLinkSuccess]);return{sendCode:l,linkWithCode:f,state:i}};var Jr=e=>{let[o,c]=_react.useState.call(void 0, ""),{user:a,client:r,otpState:i,setOtpState:t}=_react.useContext.call(void 0, _chunkSCQPB3KWjs.E),n=_react.useCallback.call(void 0, d=>{var s;let y=_chunkSCQPB3KWjs.i.call(void 0, d);return t({status:"error",error:y}),(s=e==null?void 0:e.onError)==null||s.call(e,y),y},[e==null?void 0:e.onError]),l=_react.useCallback.call(void 0, y=>_chunkSCQPB3KWjs.d.call(void 0, void 0,[y],function*({email:d}){var s;c(d);try{t({status:"sending-code"});let u=yield r.auth.email.sendCode(d);return t({status:"awaiting-code-input"}),(s=e==null?void 0:e.onSendCodeSuccess)==null||s.call(e,{email:d}),u}catch(u){return n(u),{success:!1}}}),[r,n,e==null?void 0:e.onSendCodeSuccess]),f=_react.useCallback.call(void 0, u=>_chunkSCQPB3KWjs.d.call(void 0, void 0,[u],function*({code:d,email:y,disableSignup:s}){var v;try{if(a)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 k=y||o;if(!k)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid email before calling `loginWithCode`"});t({status:"submitting-code"});let w=yield r.auth.email.loginWithCode(k,d,s?"no-signup":"login-or-sign-up");return t({status:"done"}),(v=e==null?void 0:e.onLoginSuccess)==null||v.call(e,w.user,w.is_new_user),w==null?void 0:w.user}catch(k){n(k)}}),[a,r,o,n,e==null?void 0:e.onLoginSuccess]);return{sendCode:l,loginWithCode:f,state:i}};var Zr=e=>{let[o,c]=_react.useState.call(void 0, ""),{user:a,client:r,otpState:i,setOtpState:t}=_react.useContext.call(void 0, _chunkSCQPB3KWjs.E),n=_react.useCallback.call(void 0, d=>{var s;let y=_chunkSCQPB3KWjs.i.call(void 0, d);return t({status:"error",error:y}),(s=e==null?void 0:e.onError)==null||s.call(e,y),y},[e==null?void 0:e.onError]),l=_react.useCallback.call(void 0, y=>_chunkSCQPB3KWjs.d.call(void 0, void 0,[y],function*({phone:d}){var s;c(d);try{t({status:"sending-code"});let u=yield r.auth.phone.sendCode(d);return t({status:"awaiting-code-input"}),(s=e==null?void 0:e.onSendCodeSuccess)==null||s.call(e,{phone:d}),u}catch(u){return n(u),{success:!1}}}),[r,n,e==null?void 0:e.onSendCodeSuccess]),f=_react.useCallback.call(void 0, s=>_chunkSCQPB3KWjs.d.call(void 0, void 0,[s],function*({code:d,phone:y}){var u;try{if(!a)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(!(y||o))throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid phone number before calling `linkWithCode`"});t({status:"submitting-code"});let k=yield r.auth.phone.linkWithCode(y||o,d);return t({status:"done"}),(u=e==null?void 0:e.onLinkSuccess)==null||u.call(e,k),k}catch(v){n(v)}}),[a,r,o,n,e==null?void 0:e.onLinkSuccess]);return{sendCode:l,linkWithCode:f,state:i}};var at=e=>{let[o,c]=_react.useState.call(void 0, ""),{user:a,client:r,otpState:i,setOtpState:t}=_react.useContext.call(void 0, _chunkSCQPB3KWjs.E),n=_react.useCallback.call(void 0, d=>{var s;let y=_chunkSCQPB3KWjs.i.call(void 0, d);return t({status:"error",error:y}),(s=e==null?void 0:e.onError)==null||s.call(e,y),y},[e==null?void 0:e.onError]),l=_react.useCallback.call(void 0, y=>_chunkSCQPB3KWjs.d.call(void 0, void 0,[y],function*({phone:d}){var s;c(d);try{t({status:"sending-code"});let u=yield r.auth.phone.sendCode(d);return t({status:"awaiting-code-input"}),(s=e==null?void 0:e.onSendCodeSuccess)==null||s.call(e,{phone:d}),u}catch(u){return n(u),{success:!1}}}),[r,n,e==null?void 0:e.onSendCodeSuccess]),f=_react.useCallback.call(void 0, u=>_chunkSCQPB3KWjs.d.call(void 0, void 0,[u],function*({code:d,phone:y,disableSignup:s}){var v;try{if(a)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(!(y||o))throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid phone number before calling `loginWithCode`"});t({status:"submitting-code"});let w=yield r.auth.phone.loginWithCode(y||o,d,s?"no-signup":"login-or-sign-up");return t({status:"done"}),(v=e==null?void 0:e.onLoginSuccess)==null||v.call(e,w.user,w.is_new_user),w==null?void 0:w.user}catch(k){n(k)}}),[a,r,o,n,e==null?void 0:e.onLoginSuccess]);return{sendCode:l,loginWithCode:f,state:i}};var _expolinking = require('expo-linking'); var O = _interopRequireWildcard(_expolinking); var A = _interopRequireWildcard(_expolinking);var ht=e=>{let{appState:o,getCurrentAppState:c}=_chunkSCQPB3KWjs.k.call(void 0, ),{client:a,user:r,farcasterState:i,setFarcasterState:t}=_react.useContext.call(void 0, _chunkSCQPB3KWjs.E),n=_react.useRef.call(void 0, !1),l=_react.useCallback.call(void 0, y=>{var u;let s=_chunkSCQPB3KWjs.i.call(void 0, y);return t({status:"error",error:s}),(u=e==null?void 0:e.onError)==null||u.call(e,s),s},[e==null?void 0:e.onError,t]),f=_react.useCallback.call(void 0, ()=>{n.current=!0},[]);return{linkWithFarcaster:_react.useCallback.call(void 0, (v,...k)=>_chunkSCQPB3KWjs.d.call(void 0, void 0,[v,...k],function*({relyingParty:y,redirectUrl:s},u={pollAttempts:10,pollIntervalMs:1e3}){var w;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."});t({status:"generating-uri"});let{connect_uri:b,channel_token:S}=yield a.auth.farcaster.initializeAuth({relyingParty:y,redirectUrl:O.createURL(s!=null?s:"/")});if(!b)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_generate_farcaster_uri",error:"Failed to generate farcaster uri"});if(!S)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_generate_farcaster_channel_token",error:"Failed to generate farcaster channel token"});yield O.openURL(b),t({status:"polling-status"});let E=0;for(;E<u.pollAttempts;){if(n.current)throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_canceled",error:"Farcaster polling canceled"});if(o.current!=="active"&&c()!=="active"){yield _chunkSCQPB3KWjs.j.call(void 0, u.pollIntervalMs);continue}let W=yield a.auth.farcaster.getFarcasterStatus({channel_token:S});if(W.state==="completed"){t({status:"submitting-token"});let C=yield a.auth.farcaster.link(_chunkSCQPB3KWjs.a.call(void 0, {channel_token:S},W));return t({status:"done"}),(w=e==null?void 0:e.onSuccess)==null||w.call(e,C),C}E++,yield _chunkSCQPB3KWjs.j.call(void 0, u.pollIntervalMs)}throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(b){throw l(b)}}),[a,e==null?void 0:e.onSuccess,l,t,r]),state:i,cancel:f}};var kt=e=>{let{client:o}=_react.useContext.call(void 0, _chunkSCQPB3KWjs.E),c=_react.useCallback.call(void 0, r=>{var t;let i=_chunkSCQPB3KWjs.i.call(void 0, r);return(t=e==null?void 0:e.onError)==null||t.call(e,i),i},[e==null?void 0:e.onError]);return{unlinkFarcaster:_react.useCallback.call(void 0, i=>_chunkSCQPB3KWjs.d.call(void 0, void 0,[i],function*({fid:r}){var t;try{let n=yield o.auth.farcaster.unlink({fid:r});return(t=e==null?void 0:e.onSuccess)==null||t.call(e,n),n}catch(n){throw c(n)}}),[o,e==null?void 0:e.onSuccess,c])}};var Ct=e=>{let{appState:o,getCurrentAppState:c}=_chunkSCQPB3KWjs.k.call(void 0, ),{client:a,user:r,farcasterState:i,setFarcasterState:t}=_react.useContext.call(void 0, _chunkSCQPB3KWjs.E),n=_react.useRef.call(void 0, !1),l=_react.useCallback.call(void 0, y=>{var u;let s=_chunkSCQPB3KWjs.i.call(void 0, y);return t({status:"error",error:s}),(u=e==null?void 0:e.onError)==null||u.call(e,s),s},[e==null?void 0:e.onError,t]),f=_react.useCallback.call(void 0, ()=>{n.current=!0},[]);return{loginWithFarcaster:_react.useCallback.call(void 0, (k,...w)=>_chunkSCQPB3KWjs.d.call(void 0, void 0,[k,...w],function*({relyingParty:y,redirectUrl:s,disableSignup:u},v={pollAttempts:10,pollIntervalMs:1e3}){var b;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"});t({status:"generating-uri"});let{connect_uri:S,channel_token:E}=yield a.auth.farcaster.initializeAuth({relyingParty:y,redirectUrl:A.createURL(s!=null?s:"/")});if(!S)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 A.openURL(S),t({status:"polling-status"});let W=0;for(;W<v.pollAttempts;){if(n.current)throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_canceled",error:"Farcaster polling canceled"});if(o.current!=="active"&&c()!=="active"){yield _chunkSCQPB3KWjs.j.call(void 0, v.pollIntervalMs);continue}let C=yield a.auth.farcaster.getFarcasterStatus({channel_token:E});if(C.state==="completed"){t({status:"submitting-token"});let F=yield a.auth.farcaster.authenticate(_chunkSCQPB3KWjs.a.call(void 0, {channel_token:E,mode:u?"no-signup":"login-or-sign-up"},C));return t({status:"done"}),(b=e==null?void 0:e.onSuccess)==null||b.call(e,F.user,F.is_new_user),F.user}W++,yield _chunkSCQPB3KWjs.j.call(void 0, v.pollIntervalMs)}throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(S){throw l(S)}}),[a,l,e==null?void 0:e.onSuccess,t,r,o]),state:i,cancel:f}};var Ot=e=>{let{client:o}=_react.useContext.call(void 0, _chunkSCQPB3KWjs.E),c=_react.useCallback.call(void 0, r=>{var t;let i=_chunkSCQPB3KWjs.i.call(void 0, r);return(t=e==null?void 0:e.onError)==null||t.call(e,i),i},[e==null?void 0:e.onError]);return{unlinkOAuth:_react.useCallback.call(void 0, t=>_chunkSCQPB3KWjs.d.call(void 0, void 0,[t],function*({provider:r,subject:i}){var n;try{let l=yield o.auth.oauth.unlink(r,i);return(n=e==null?void 0:e.onSuccess)==null||n.call(e,l),l}catch(l){throw c(l)}}),[o,e==null?void 0:e.onSuccess,c])}};var Tt=e=>{let{client:o}=_react.useContext.call(void 0, _chunkSCQPB3KWjs.E),c=_react.useRef.call(void 0, e.onOAuthTokenGrant);c.current=e.onOAuthTokenGrant,_react.useEffect.call(void 0, ()=>{let{unsubscribe:a}=o.addOAuthTokensListener(r=>{c.current(r)});return a},[o])};var Kt=()=>{let{user:e,client:o}=_react.useContext.call(void 0, _chunkSCQPB3KWjs.E);return{setRecovery:_react.useCallback.call(void 0, a=>_chunkSCQPB3KWjs.d.call(void 0, void 0,null,function*(){var n;let r=o.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 i=(n=_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, e))!=null?n:_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, e);if(!i)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});try{i.chain_type==="ethereum"?yield o.embeddedWallet.getProvider(i):i.chain_type==="solana"&&(yield o.embeddedWallet.getSolanaProvider(i,i.address,"solana-address-verifier"))}catch(l){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:i.recovery_method,upgradeToRecoveryMethod:a.recoveryMethod});let t=yield Ve({appId:r,client:o,user:e,primaryAccount:i,recoveryParams:a});try{let{user:l}=yield o.embeddedWallet.setRecovery(t);return{user:l}}catch(l){throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_set_recovery_error",error:l instanceof Error?l.message:"Error setting password on embedded wallet"})}}),[o,e])}},Ve=i=>_chunkSCQPB3KWjs.d.call(void 0, void 0,[i],function*({appId:e,client:o,user:c,primaryAccount:a,recoveryParams:r}){switch(r.recoveryMethod){case"user-passcode":return _chunkSCQPB3KWjs.b.call(void 0, _chunkSCQPB3KWjs.a.call(void 0, {},r),{wallet:a});case"google-drive":{let t=yield _chunkSCQPB3KWjs.l.call(void 0, o);return{recoveryMethod:"google-drive",wallet:a,recoveryAccessToken:t}}case"icloud":{let{recoverySecret:t,iCloudRecordName:n}=yield _chunkSCQPB3KWjs.g.call(void 0, {appId:e,client:o,user:c});return{recoveryMethod:"icloud-native",recoverySecretOverride:t,iCloudRecordNameOverride:n,wallet:a}}default:throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}});var Yt=()=>{let{user:e,client:o}=_react.useContext.call(void 0, _chunkSCQPB3KWjs.E);return{recover:_react.useCallback.call(void 0, a=>_chunkSCQPB3KWjs.d.call(void 0, void 0,null,function*(){var l;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=(l=_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, e))!=null?l:_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 i,t,n;switch(a.recoveryMethod){case"user-passcode":i=a.password;break;case"google-drive":t=yield _chunkSCQPB3KWjs.l.call(void 0, o);break;case"icloud":let{recoverySecret:f}=yield _chunkSCQPB3KWjs.h.call(void 0, {client:o,walletAddress:r.address,chainType:r.chain_type});n=f;break}try{r.chain_type==="ethereum"?yield o.embeddedWallet.getProvider(r,i,t,n):r.chain_type==="solana"&&(yield o.embeddedWallet.getSolanaProvider(r,r.address,"solana-address-verifier",i,t,n))}catch(f){throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"})}}),[o,e])}};var z=(e={})=>{let{wallet:o,createWalletCallbacks:c,recoverWalletCallbacks:a,setWalletRecoveryCallbacks:r}=_react.useContext.call(void 0, _chunkSCQPB3KWjs.E),{onCreateWalletSuccess:i,onCreateWalletError:t,onRecoverWalletError:n,onRecoverWalletSuccess:l,onSetWalletRecoverySuccess:f,onSetWalletRecoveryError:d}=e;return _react.useEffect.call(void 0, ()=>{c.current={onSuccess:i,onError:t}},[i,t]),_react.useEffect.call(void 0, ()=>{a.current={onSuccess:l,onError:n}},[l,n]),_react.useEffect.call(void 0, ()=>{r.current={onSuccess:f,onError:d}},[l,n]),o};var ao=({onStateChange:e})=>{let o=z();return _react.useEffect.call(void 0, ()=>{e(o)},[o])};var uo=()=>{let{getIdentityToken:e}=_react.useContext.call(void 0, _chunkSCQPB3KWjs.E);return{getIdentityToken:e}};var wo=e=>{let{user:o,client:c}=_react.useContext.call(void 0, _chunkSCQPB3KWjs.E),a=_react.useCallback.call(void 0, i=>{var n;let t=_chunkSCQPB3KWjs.i.call(void 0, i);return(n=e==null?void 0:e.onError)==null||n.call(e,t),t},[e==null?void 0:e.onError]);return{create:_react.useCallback.call(void 0, ()=>_chunkSCQPB3KWjs.d.call(void 0, void 0,null,function*(){var i;try{if(o)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 t=yield c.auth.guest.create();return(i=e==null?void 0:e.onSuccess)==null||i.call(e,t.user,t.is_new_user),t.user}catch(t){throw a(t)}}),[c,a,o,e==null?void 0:e.onSuccess])}};function Eo({onMfaRequired:e}){let{client:o,user:c}=_react.useContext.call(void 0, _chunkSCQPB3KWjs.E);_react.useEffect.call(void 0, ()=>{function a(){return _chunkSCQPB3KWjs.d.call(void 0, this,null,function*(){var r;yield e((r=c==null?void 0:c.mfa_methods.map(({type:i})=>i))!=null?r:[])})}return o.mfaPromises.on("mfaRequired",a),()=>{o.mfaPromises.off("mfaRequired",a)}},[o,c,e])}function Uo(){let{client:e}=_react.useContext.call(void 0, _chunkSCQPB3KWjs.E),o=_react.useCallback.call(void 0, r=>_chunkSCQPB3KWjs.d.call(void 0, this,null,function*(){switch(r.method){case"sms":yield e.mfa.sms.sendCode({action:"verify"});return;case"passkey":let{options:i}=yield e.mfa.passkey.generateAuthenticationOptions({relying_party:r.relyingParty});return _chunkSCQPB3KWjs.K.call(void 0, i);case"totp":return;default:throw new Error(`Unsupported MFA method: ${r.mfaMethod}`)}}),[e]),c=_react.useCallback.call(void 0, r=>_chunkSCQPB3KWjs.d.call(void 0, this,null,function*(){var i,t,n;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"});(i=e.mfaPromises.rootPromise.current)==null||i.resolve({mfaMethod:r.method,mfaCode:r.mfaCode,relyingParty:r.relyingParty||""}),yield new Promise((y,s)=>{e.mfaPromises.submitPromise.current={resolve:y,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 _chunkSCQPB3KWjs.I.call(void 0, r.mfaCode),f=_chunkSCQPB3KWjs.J.call(void 0, l);(t=e.mfaPromises.rootPromise.current)==null||t.resolve({mfaMethod:r.method,relyingParty:r.relyingParty||"",mfaCode:f}),yield new Promise((y,s)=>{e.mfaPromises.submitPromise.current={resolve:y,reject:s}});break;default:let d=new (0, _jssdkcore.PrivyClientError)({code:"unsupported_mfa_method",error:"Unsupported MFA method"});throw(n=e.mfaPromises.rootPromise.current)==null||n.reject(d),d}}),[e]),a=_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:o,submit:c,cancel:a}}function Ro(){let{client:e}=_react.useContext.call(void 0, _chunkSCQPB3KWjs.E),o=_react.useCallback.call(void 0, r=>_chunkSCQPB3KWjs.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]),c=_react.useCallback.call(void 0, r=>_chunkSCQPB3KWjs.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]),a=_react.useCallback.call(void 0, r=>_chunkSCQPB3KWjs.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:o,submitMfaEnrollment:c,unenrollMfa:a}}var cr=(e={})=>{let{solanaWallet:o,createSolanaWalletCallbacks:c,recoverSolanaWalletCallbacks:a}=_react.useContext.call(void 0, _chunkSCQPB3KWjs.E),{onCreateWalletSuccess:r,onCreateWalletError:i,onRecoverWalletError:t,onRecoverWalletSuccess:n}=e;return _react.useEffect.call(void 0, ()=>{c.current={onSuccess:r,onError:i}},[r,i]),_react.useEffect.call(void 0, ()=>{a.current={onSuccess:n,onError:t}},[n,t]),o};var Y=()=>{let{user:e,isReady:o,logout:c,getAccessToken:a,error:r}=_react.useContext.call(void 0, _chunkSCQPB3KWjs.E);return{user:e,isReady:o,error:r,logout:c,getAccessToken:a}};var Z=()=>{let{client:e}=_react.useContext.call(void 0, _chunkSCQPB3KWjs.E);return e};var hr=()=>{let{user:e}=Y(),o=Z(),c=_react.useMemo.call(void 0, ()=>{var l;let r=(l=_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, e))!=null?l:_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, e);if(!r)return[];let i=_jssdkcore.getAllUserEmbeddedBitcoinWallets.call(void 0, e),{entropyId:t,entropyIdVerifier:n}=_chunkSCQPB3KWjs.f.call(void 0, r);return i.map(f=>({address:f.address,walletIndex:f.wallet_index,publicKey:f.public_key,chainType:f.chain_type,getProvider:()=>o.embeddedWallet.getBitcoinProvider({wallet:f,entropyId:t,entropyIdVerifier:n})}))},[o,e]),a=_react.useCallback.call(void 0, t=>_chunkSCQPB3KWjs.d.call(void 0, void 0,[t],function*({chainType:r,createAdditional:i=!1}){var k;let{user:n}=yield o.user.get(),l=(k=_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, n))!=null?k:_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, n);if(!l)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:f,entropyIdVerifier:d}=_chunkSCQPB3KWjs.f.call(void 0, l),y=_jssdkcore.getAllUserEmbeddedBitcoinWallets.call(void 0, n).filter(w=>w.chain_type===r);if(!i&&y.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 s=y.length===0?0:Math.max(...y.map(w=>w.wallet_index),0)+1,u=yield o.embeddedWallet.add({chainType:r,hdWalletIndex:s,entropyId:f,entropyIdVerifier:d}),v=_jssdkcore.getAllUserEmbeddedBitcoinWallets.call(void 0, u.user).find(w=>w.chain_type===r&&w.wallet_index===s);if(!u.user||!v)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Unknown error creating wallet"});return{user:u.user,provider:yield o.embeddedWallet.getBitcoinProvider({wallet:v,entropyId:f,entropyIdVerifier:d})}}),[o]);return{wallets:c,create:a}};exports.a = vr; exports.b = Wr; exports.c = Or; exports.d = Gr; exports.e = Jr; exports.f = Zr; exports.g = at; exports.h = ht; exports.i = kt; exports.j = Ct; exports.k = Ot; exports.l = Tt; exports.m = Kt; exports.n = Yt; exports.o = z; exports.p = ao; exports.q = uo; exports.r = wo; exports.s = Eo; exports.t = Uo; exports.u = Ro; exports.v = cr; exports.w = Y; exports.x = Z; exports.y = hr;
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 _chunkGRMSPR2Zjs = require('./chunk-GRMSPR2Z.js');var _react = require('react');var _jssdkcore = require('@privy-io/js-sdk-core');var vr=e=>{let{user:o,client:c,setSiweState:a,siweState:r}=_react.useContext.call(void 0, _chunkGRMSPR2Zjs.E),i=_react.useCallback.call(void 0, l=>{var d;let f=_chunkGRMSPR2Zjs.i.call(void 0, l);return a({status:"error",error:f}),(d=e==null?void 0:e.onError)==null||d.call(e,f),f},[e==null?void 0:e.onError]),t=_react.useCallback.call(void 0, y=>_chunkGRMSPR2Zjs.d.call(void 0, void 0,[y],function*({wallet:l,from:{domain:f,uri:d}}){var s;try{a({status:"generating-message"});let u=yield c.auth.siwe.init(l,f,d);return a({status:"awaiting-signature"}),(s=e==null?void 0:e.onGenerateMessage)==null||s.call(e,u.message),u.message}catch(u){throw i(u)}}),[c,i,e==null?void 0:e.onGenerateMessage]),n=_react.useCallback.call(void 0, d=>_chunkGRMSPR2Zjs.d.call(void 0, void 0,[d],function*({signature:l,messageOverride:f}){var y;try{if(!o)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"});a({status:"submitting-signature"});let s=yield c.auth.siwe.linkWithSiwe(l,void 0,f);return a({status:"done"}),(y=e==null?void 0:e.onSuccess)==null||y.call(e,s),s}catch(s){throw i(s)}}),[o,c,i,e==null?void 0:e.onSuccess]);return{generateSiweMessage:t,linkWithSiwe:n,state:r}};var Wr=e=>{let{user:o,client:c,setSiweState:a,siweState:r}=_react.useContext.call(void 0, _chunkGRMSPR2Zjs.E),i=_react.useCallback.call(void 0, l=>{var d;let f=_chunkGRMSPR2Zjs.i.call(void 0, l);return a({status:"error",error:f}),(d=e==null?void 0:e.onError)==null||d.call(e,f),f},[e==null?void 0:e.onError]),t=_react.useCallback.call(void 0, y=>_chunkGRMSPR2Zjs.d.call(void 0, void 0,[y],function*({wallet:l,from:{domain:f,uri:d}}){var s;try{a({status:"generating-message"});let u=yield c.auth.siwe.init(l,f,d);return a({status:"awaiting-signature"}),(s=e==null?void 0:e.onGenerateMessage)==null||s.call(e,u.message),u.message}catch(u){throw i(u)}}),[c,i,e==null?void 0:e.onGenerateMessage]);return{loginWithSiwe:_react.useCallback.call(void 0, y=>_chunkGRMSPR2Zjs.d.call(void 0, void 0,[y],function*({signature:l,messageOverride:f,disableSignup:d}){var s;try{if(o)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"});a({status:"submitting-signature"});let u=yield c.auth.siwe.loginWithSiwe(l,void 0,f,d?"no-signup":"login-or-sign-up");return a({status:"done"}),(s=e==null?void 0:e.onSuccess)==null||s.call(e,u.user,u.is_new_user),u.user}catch(u){throw i(u)}}),[o,c,i,e==null?void 0:e.onSuccess]),generateSiweMessage:t,state:r}};var Or=e=>{let{user:o,client:c}=_react.useContext.call(void 0, _chunkGRMSPR2Zjs.E),a=_react.useCallback.call(void 0, i=>{var n;let t=_chunkGRMSPR2Zjs.i.call(void 0, i);return(n=e==null?void 0:e.onError)==null||n.call(e,t),t},[e==null?void 0:e.onError]);return{unlinkWallet:_react.useCallback.call(void 0, t=>_chunkGRMSPR2Zjs.d.call(void 0, void 0,[t],function*({address:i}){var n;try{if(!o)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 l=yield c.auth.siwe.unlinkWallet(i);return(n=e==null?void 0:e.onSuccess)==null||n.call(e,l),l}catch(l){throw a(l)}}),[o,c,a,e==null?void 0:e.onSuccess])}};var Gr=e=>{let[o,c]=_react.useState.call(void 0, ""),{user:a,client:r,otpState:i,setOtpState:t}=_react.useContext.call(void 0, _chunkGRMSPR2Zjs.E),n=_react.useCallback.call(void 0, d=>{var s;let y=_chunkGRMSPR2Zjs.i.call(void 0, d);return t({status:"error",error:y}),(s=e==null?void 0:e.onError)==null||s.call(e,y),y},[e==null?void 0:e.onError]),l=_react.useCallback.call(void 0, y=>_chunkGRMSPR2Zjs.d.call(void 0, void 0,[y],function*({email:d}){var s;c(d);try{t({status:"sending-code"});let u=yield r.auth.email.sendCode(d);return t({status:"awaiting-code-input"}),(s=e==null?void 0:e.onSendCodeSuccess)==null||s.call(e,{email:d}),u}catch(u){return n(u),{success:!1}}}),[r,n,e==null?void 0:e.onSendCodeSuccess]),f=_react.useCallback.call(void 0, s=>_chunkGRMSPR2Zjs.d.call(void 0, void 0,[s],function*({code:d,email:y}){var u;try{if(!a)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 v=y||o;if(!v)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid email before calling `linkWithCode`"});t({status:"submitting-code"});let k=yield r.auth.email.linkWithCode(v,d);return t({status:"done"}),(u=e==null?void 0:e.onLinkSuccess)==null||u.call(e,k),k}catch(v){n(v)}}),[a,r,o,n,e==null?void 0:e.onLinkSuccess]);return{sendCode:l,linkWithCode:f,state:i}};var Jr=e=>{let[o,c]=_react.useState.call(void 0, ""),{user:a,client:r,otpState:i,setOtpState:t}=_react.useContext.call(void 0, _chunkGRMSPR2Zjs.E),n=_react.useCallback.call(void 0, d=>{var s;let y=_chunkGRMSPR2Zjs.i.call(void 0, d);return t({status:"error",error:y}),(s=e==null?void 0:e.onError)==null||s.call(e,y),y},[e==null?void 0:e.onError]),l=_react.useCallback.call(void 0, y=>_chunkGRMSPR2Zjs.d.call(void 0, void 0,[y],function*({email:d}){var s;c(d);try{t({status:"sending-code"});let u=yield r.auth.email.sendCode(d);return t({status:"awaiting-code-input"}),(s=e==null?void 0:e.onSendCodeSuccess)==null||s.call(e,{email:d}),u}catch(u){return n(u),{success:!1}}}),[r,n,e==null?void 0:e.onSendCodeSuccess]),f=_react.useCallback.call(void 0, u=>_chunkGRMSPR2Zjs.d.call(void 0, void 0,[u],function*({code:d,email:y,disableSignup:s}){var v;try{if(a)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 k=y||o;if(!k)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid email before calling `loginWithCode`"});t({status:"submitting-code"});let w=yield r.auth.email.loginWithCode(k,d,s?"no-signup":"login-or-sign-up");return t({status:"done"}),(v=e==null?void 0:e.onLoginSuccess)==null||v.call(e,w.user,w.is_new_user),w==null?void 0:w.user}catch(k){n(k)}}),[a,r,o,n,e==null?void 0:e.onLoginSuccess]);return{sendCode:l,loginWithCode:f,state:i}};var Zr=e=>{let[o,c]=_react.useState.call(void 0, ""),{user:a,client:r,otpState:i,setOtpState:t}=_react.useContext.call(void 0, _chunkGRMSPR2Zjs.E),n=_react.useCallback.call(void 0, d=>{var s;let y=_chunkGRMSPR2Zjs.i.call(void 0, d);return t({status:"error",error:y}),(s=e==null?void 0:e.onError)==null||s.call(e,y),y},[e==null?void 0:e.onError]),l=_react.useCallback.call(void 0, y=>_chunkGRMSPR2Zjs.d.call(void 0, void 0,[y],function*({phone:d}){var s;c(d);try{t({status:"sending-code"});let u=yield r.auth.phone.sendCode(d);return t({status:"awaiting-code-input"}),(s=e==null?void 0:e.onSendCodeSuccess)==null||s.call(e,{phone:d}),u}catch(u){return n(u),{success:!1}}}),[r,n,e==null?void 0:e.onSendCodeSuccess]),f=_react.useCallback.call(void 0, s=>_chunkGRMSPR2Zjs.d.call(void 0, void 0,[s],function*({code:d,phone:y}){var u;try{if(!a)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(!(y||o))throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid phone number before calling `linkWithCode`"});t({status:"submitting-code"});let k=yield r.auth.phone.linkWithCode(y||o,d);return t({status:"done"}),(u=e==null?void 0:e.onLinkSuccess)==null||u.call(e,k),k}catch(v){n(v)}}),[a,r,o,n,e==null?void 0:e.onLinkSuccess]);return{sendCode:l,linkWithCode:f,state:i}};var at=e=>{let[o,c]=_react.useState.call(void 0, ""),{user:a,client:r,otpState:i,setOtpState:t}=_react.useContext.call(void 0, _chunkGRMSPR2Zjs.E),n=_react.useCallback.call(void 0, d=>{var s;let y=_chunkGRMSPR2Zjs.i.call(void 0, d);return t({status:"error",error:y}),(s=e==null?void 0:e.onError)==null||s.call(e,y),y},[e==null?void 0:e.onError]),l=_react.useCallback.call(void 0, y=>_chunkGRMSPR2Zjs.d.call(void 0, void 0,[y],function*({phone:d}){var s;c(d);try{t({status:"sending-code"});let u=yield r.auth.phone.sendCode(d);return t({status:"awaiting-code-input"}),(s=e==null?void 0:e.onSendCodeSuccess)==null||s.call(e,{phone:d}),u}catch(u){return n(u),{success:!1}}}),[r,n,e==null?void 0:e.onSendCodeSuccess]),f=_react.useCallback.call(void 0, u=>_chunkGRMSPR2Zjs.d.call(void 0, void 0,[u],function*({code:d,phone:y,disableSignup:s}){var v;try{if(a)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(!(y||o))throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid phone number before calling `loginWithCode`"});t({status:"submitting-code"});let w=yield r.auth.phone.loginWithCode(y||o,d,s?"no-signup":"login-or-sign-up");return t({status:"done"}),(v=e==null?void 0:e.onLoginSuccess)==null||v.call(e,w.user,w.is_new_user),w==null?void 0:w.user}catch(k){n(k)}}),[a,r,o,n,e==null?void 0:e.onLoginSuccess]);return{sendCode:l,loginWithCode:f,state:i}};var _expolinking = require('expo-linking'); var O = _interopRequireWildcard(_expolinking); var A = _interopRequireWildcard(_expolinking);var ht=e=>{let{appState:o,getCurrentAppState:c}=_chunkGRMSPR2Zjs.k.call(void 0, ),{client:a,user:r,farcasterState:i,setFarcasterState:t}=_react.useContext.call(void 0, _chunkGRMSPR2Zjs.E),n=_react.useRef.call(void 0, !1),l=_react.useCallback.call(void 0, y=>{var u;let s=_chunkGRMSPR2Zjs.i.call(void 0, y);return t({status:"error",error:s}),(u=e==null?void 0:e.onError)==null||u.call(e,s),s},[e==null?void 0:e.onError,t]),f=_react.useCallback.call(void 0, ()=>{n.current=!0},[]);return{linkWithFarcaster:_react.useCallback.call(void 0, (v,...k)=>_chunkGRMSPR2Zjs.d.call(void 0, void 0,[v,...k],function*({relyingParty:y,redirectUrl:s},u={pollAttempts:10,pollIntervalMs:1e3}){var w;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."});t({status:"generating-uri"});let{connect_uri:b,channel_token:S}=yield a.auth.farcaster.initializeAuth({relyingParty:y,redirectUrl:O.createURL(s!=null?s:"/")});if(!b)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_generate_farcaster_uri",error:"Failed to generate farcaster uri"});if(!S)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_generate_farcaster_channel_token",error:"Failed to generate farcaster channel token"});yield O.openURL(b),t({status:"polling-status"});let E=0;for(;E<u.pollAttempts;){if(n.current)throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_canceled",error:"Farcaster polling canceled"});if(o.current!=="active"&&c()!=="active"){yield _chunkGRMSPR2Zjs.j.call(void 0, u.pollIntervalMs);continue}let W=yield a.auth.farcaster.getFarcasterStatus({channel_token:S});if(W.state==="completed"){t({status:"submitting-token"});let C=yield a.auth.farcaster.link(_chunkGRMSPR2Zjs.a.call(void 0, {channel_token:S},W));return t({status:"done"}),(w=e==null?void 0:e.onSuccess)==null||w.call(e,C),C}E++,yield _chunkGRMSPR2Zjs.j.call(void 0, u.pollIntervalMs)}throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(b){throw l(b)}}),[a,e==null?void 0:e.onSuccess,l,t,r]),state:i,cancel:f}};var kt=e=>{let{client:o}=_react.useContext.call(void 0, _chunkGRMSPR2Zjs.E),c=_react.useCallback.call(void 0, r=>{var t;let i=_chunkGRMSPR2Zjs.i.call(void 0, r);return(t=e==null?void 0:e.onError)==null||t.call(e,i),i},[e==null?void 0:e.onError]);return{unlinkFarcaster:_react.useCallback.call(void 0, i=>_chunkGRMSPR2Zjs.d.call(void 0, void 0,[i],function*({fid:r}){var t;try{let n=yield o.auth.farcaster.unlink({fid:r});return(t=e==null?void 0:e.onSuccess)==null||t.call(e,n),n}catch(n){throw c(n)}}),[o,e==null?void 0:e.onSuccess,c])}};var Ct=e=>{let{appState:o,getCurrentAppState:c}=_chunkGRMSPR2Zjs.k.call(void 0, ),{client:a,user:r,farcasterState:i,setFarcasterState:t}=_react.useContext.call(void 0, _chunkGRMSPR2Zjs.E),n=_react.useRef.call(void 0, !1),l=_react.useCallback.call(void 0, y=>{var u;let s=_chunkGRMSPR2Zjs.i.call(void 0, y);return t({status:"error",error:s}),(u=e==null?void 0:e.onError)==null||u.call(e,s),s},[e==null?void 0:e.onError,t]),f=_react.useCallback.call(void 0, ()=>{n.current=!0},[]);return{loginWithFarcaster:_react.useCallback.call(void 0, (k,...w)=>_chunkGRMSPR2Zjs.d.call(void 0, void 0,[k,...w],function*({relyingParty:y,redirectUrl:s,disableSignup:u},v={pollAttempts:10,pollIntervalMs:1e3}){var b;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"});t({status:"generating-uri"});let{connect_uri:S,channel_token:E}=yield a.auth.farcaster.initializeAuth({relyingParty:y,redirectUrl:A.createURL(s!=null?s:"/")});if(!S)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 A.openURL(S),t({status:"polling-status"});let W=0;for(;W<v.pollAttempts;){if(n.current)throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_canceled",error:"Farcaster polling canceled"});if(o.current!=="active"&&c()!=="active"){yield _chunkGRMSPR2Zjs.j.call(void 0, v.pollIntervalMs);continue}let C=yield a.auth.farcaster.getFarcasterStatus({channel_token:E});if(C.state==="completed"){t({status:"submitting-token"});let F=yield a.auth.farcaster.authenticate(_chunkGRMSPR2Zjs.a.call(void 0, {channel_token:E,mode:u?"no-signup":"login-or-sign-up"},C));return t({status:"done"}),(b=e==null?void 0:e.onSuccess)==null||b.call(e,F.user,F.is_new_user),F.user}W++,yield _chunkGRMSPR2Zjs.j.call(void 0, v.pollIntervalMs)}throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(S){throw l(S)}}),[a,l,e==null?void 0:e.onSuccess,t,r,o]),state:i,cancel:f}};var Ot=e=>{let{client:o}=_react.useContext.call(void 0, _chunkGRMSPR2Zjs.E),c=_react.useCallback.call(void 0, r=>{var t;let i=_chunkGRMSPR2Zjs.i.call(void 0, r);return(t=e==null?void 0:e.onError)==null||t.call(e,i),i},[e==null?void 0:e.onError]);return{unlinkOAuth:_react.useCallback.call(void 0, t=>_chunkGRMSPR2Zjs.d.call(void 0, void 0,[t],function*({provider:r,subject:i}){var n;try{let l=yield o.auth.oauth.unlink(r,i);return(n=e==null?void 0:e.onSuccess)==null||n.call(e,l),l}catch(l){throw c(l)}}),[o,e==null?void 0:e.onSuccess,c])}};var Tt=e=>{let{client:o}=_react.useContext.call(void 0, _chunkGRMSPR2Zjs.E),c=_react.useRef.call(void 0, e.onOAuthTokenGrant);c.current=e.onOAuthTokenGrant,_react.useEffect.call(void 0, ()=>{let{unsubscribe:a}=o.addOAuthTokensListener(r=>{c.current(r)});return a},[o])};var Kt=()=>{let{user:e,client:o}=_react.useContext.call(void 0, _chunkGRMSPR2Zjs.E);return{setRecovery:_react.useCallback.call(void 0, a=>_chunkGRMSPR2Zjs.d.call(void 0, void 0,null,function*(){var n;let r=o.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 i=(n=_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, e))!=null?n:_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, e);if(!i)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});try{i.chain_type==="ethereum"?yield o.embeddedWallet.getProvider(i):i.chain_type==="solana"&&(yield o.embeddedWallet.getSolanaProvider(i,i.address,"solana-address-verifier"))}catch(l){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:i.recovery_method,upgradeToRecoveryMethod:a.recoveryMethod});let t=yield Ve({appId:r,client:o,user:e,primaryAccount:i,recoveryParams:a});try{let{user:l}=yield o.embeddedWallet.setRecovery(t);return{user:l}}catch(l){throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_set_recovery_error",error:l instanceof Error?l.message:"Error setting password on embedded wallet"})}}),[o,e])}},Ve=i=>_chunkGRMSPR2Zjs.d.call(void 0, void 0,[i],function*({appId:e,client:o,user:c,primaryAccount:a,recoveryParams:r}){switch(r.recoveryMethod){case"user-passcode":return _chunkGRMSPR2Zjs.b.call(void 0, _chunkGRMSPR2Zjs.a.call(void 0, {},r),{wallet:a});case"google-drive":{let t=yield _chunkGRMSPR2Zjs.l.call(void 0, o);return{recoveryMethod:"google-drive",wallet:a,recoveryAccessToken:t}}case"icloud":{let{recoverySecret:t,iCloudRecordName:n}=yield _chunkGRMSPR2Zjs.g.call(void 0, {appId:e,client:o,user:c});return{recoveryMethod:"icloud-native",recoverySecretOverride:t,iCloudRecordNameOverride:n,wallet:a}}default:throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}});var Yt=()=>{let{user:e,client:o}=_react.useContext.call(void 0, _chunkGRMSPR2Zjs.E);return{recover:_react.useCallback.call(void 0, a=>_chunkGRMSPR2Zjs.d.call(void 0, void 0,null,function*(){var l;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=(l=_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, e))!=null?l:_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 i,t,n;switch(a.recoveryMethod){case"user-passcode":i=a.password;break;case"google-drive":t=yield _chunkGRMSPR2Zjs.l.call(void 0, o);break;case"icloud":let{recoverySecret:f}=yield _chunkGRMSPR2Zjs.h.call(void 0, {client:o,walletAddress:r.address,chainType:r.chain_type});n=f;break}try{r.chain_type==="ethereum"?yield o.embeddedWallet.getProvider(r,i,t,n):r.chain_type==="solana"&&(yield o.embeddedWallet.getSolanaProvider(r,r.address,"solana-address-verifier",i,t,n))}catch(f){throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"})}}),[o,e])}};var z=(e={})=>{let{wallet:o,createWalletCallbacks:c,recoverWalletCallbacks:a,setWalletRecoveryCallbacks:r}=_react.useContext.call(void 0, _chunkGRMSPR2Zjs.E),{onCreateWalletSuccess:i,onCreateWalletError:t,onRecoverWalletError:n,onRecoverWalletSuccess:l,onSetWalletRecoverySuccess:f,onSetWalletRecoveryError:d}=e;return _react.useEffect.call(void 0, ()=>{c.current={onSuccess:i,onError:t}},[i,t]),_react.useEffect.call(void 0, ()=>{a.current={onSuccess:l,onError:n}},[l,n]),_react.useEffect.call(void 0, ()=>{r.current={onSuccess:f,onError:d}},[l,n]),o};var ao=({onStateChange:e})=>{let o=z();return _react.useEffect.call(void 0, ()=>{e(o)},[o])};var uo=()=>{let{getIdentityToken:e}=_react.useContext.call(void 0, _chunkGRMSPR2Zjs.E);return{getIdentityToken:e}};var wo=e=>{let{user:o,client:c}=_react.useContext.call(void 0, _chunkGRMSPR2Zjs.E),a=_react.useCallback.call(void 0, i=>{var n;let t=_chunkGRMSPR2Zjs.i.call(void 0, i);return(n=e==null?void 0:e.onError)==null||n.call(e,t),t},[e==null?void 0:e.onError]);return{create:_react.useCallback.call(void 0, ()=>_chunkGRMSPR2Zjs.d.call(void 0, void 0,null,function*(){var i;try{if(o)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 t=yield c.auth.guest.create();return(i=e==null?void 0:e.onSuccess)==null||i.call(e,t.user,t.is_new_user),t.user}catch(t){throw a(t)}}),[c,a,o,e==null?void 0:e.onSuccess])}};function Eo({onMfaRequired:e}){let{client:o,user:c}=_react.useContext.call(void 0, _chunkGRMSPR2Zjs.E);_react.useEffect.call(void 0, ()=>{function a(){return _chunkGRMSPR2Zjs.d.call(void 0, this,null,function*(){var r;yield e((r=c==null?void 0:c.mfa_methods.map(({type:i})=>i))!=null?r:[])})}return o.mfaPromises.on("mfaRequired",a),()=>{o.mfaPromises.off("mfaRequired",a)}},[o,c,e])}function Uo(){let{client:e}=_react.useContext.call(void 0, _chunkGRMSPR2Zjs.E),o=_react.useCallback.call(void 0, r=>_chunkGRMSPR2Zjs.d.call(void 0, this,null,function*(){switch(r.method){case"sms":yield e.mfa.sms.sendCode({action:"verify"});return;case"passkey":let{options:i}=yield e.mfa.passkey.generateAuthenticationOptions({relying_party:r.relyingParty});return _chunkGRMSPR2Zjs.K.call(void 0, i);case"totp":return;default:throw new Error(`Unsupported MFA method: ${r.mfaMethod}`)}}),[e]),c=_react.useCallback.call(void 0, r=>_chunkGRMSPR2Zjs.d.call(void 0, this,null,function*(){var i,t,n;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"});(i=e.mfaPromises.rootPromise.current)==null||i.resolve({mfaMethod:r.method,mfaCode:r.mfaCode,relyingParty:r.relyingParty||""}),yield new Promise((y,s)=>{e.mfaPromises.submitPromise.current={resolve:y,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 _chunkGRMSPR2Zjs.I.call(void 0, r.mfaCode),f=_chunkGRMSPR2Zjs.J.call(void 0, l);(t=e.mfaPromises.rootPromise.current)==null||t.resolve({mfaMethod:r.method,relyingParty:r.relyingParty||"",mfaCode:f}),yield new Promise((y,s)=>{e.mfaPromises.submitPromise.current={resolve:y,reject:s}});break;default:let d=new (0, _jssdkcore.PrivyClientError)({code:"unsupported_mfa_method",error:"Unsupported MFA method"});throw(n=e.mfaPromises.rootPromise.current)==null||n.reject(d),d}}),[e]),a=_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:o,submit:c,cancel:a}}function Ro(){let{client:e}=_react.useContext.call(void 0, _chunkGRMSPR2Zjs.E),o=_react.useCallback.call(void 0, r=>_chunkGRMSPR2Zjs.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]),c=_react.useCallback.call(void 0, r=>_chunkGRMSPR2Zjs.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]),a=_react.useCallback.call(void 0, r=>_chunkGRMSPR2Zjs.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:o,submitMfaEnrollment:c,unenrollMfa:a}}var cr=(e={})=>{let{solanaWallet:o,createSolanaWalletCallbacks:c,recoverSolanaWalletCallbacks:a}=_react.useContext.call(void 0, _chunkGRMSPR2Zjs.E),{onCreateWalletSuccess:r,onCreateWalletError:i,onRecoverWalletError:t,onRecoverWalletSuccess:n}=e;return _react.useEffect.call(void 0, ()=>{c.current={onSuccess:r,onError:i}},[r,i]),_react.useEffect.call(void 0, ()=>{a.current={onSuccess:n,onError:t}},[n,t]),o};var Y=()=>{let{user:e,isReady:o,logout:c,getAccessToken:a,error:r}=_react.useContext.call(void 0, _chunkGRMSPR2Zjs.E);return{user:e,isReady:o,error:r,logout:c,getAccessToken:a}};var Z=()=>{let{client:e}=_react.useContext.call(void 0, _chunkGRMSPR2Zjs.E);return e};var hr=()=>{let{user:e}=Y(),o=Z(),c=_react.useMemo.call(void 0, ()=>{var l;let r=(l=_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, e))!=null?l:_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, e);if(!r)return[];let i=_jssdkcore.getAllUserEmbeddedBitcoinWallets.call(void 0, e),{entropyId:t,entropyIdVerifier:n}=_chunkGRMSPR2Zjs.f.call(void 0, r);return i.map(f=>({address:f.address,walletIndex:f.wallet_index,publicKey:f.public_key,chainType:f.chain_type,getProvider:()=>o.embeddedWallet.getBitcoinProvider({wallet:f,entropyId:t,entropyIdVerifier:n})}))},[o,e]),a=_react.useCallback.call(void 0, t=>_chunkGRMSPR2Zjs.d.call(void 0, void 0,[t],function*({chainType:r,createAdditional:i=!1}){var k;let{user:n}=yield o.user.get(),l=(k=_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, n))!=null?k:_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, n);if(!l)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:f,entropyIdVerifier:d}=_chunkGRMSPR2Zjs.f.call(void 0, l),y=_jssdkcore.getAllUserEmbeddedBitcoinWallets.call(void 0, n).filter(w=>w.chain_type===r);if(!i&&y.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 s=y.length===0?0:Math.max(...y.map(w=>w.wallet_index),0)+1,u=yield o.embeddedWallet.add({chainType:r,hdWalletIndex:s,entropyId:f,entropyIdVerifier:d}),v=_jssdkcore.getAllUserEmbeddedBitcoinWallets.call(void 0, u.user).find(w=>w.chain_type===r&&w.wallet_index===s);if(!u.user||!v)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Unknown error creating wallet"});return{user:u.user,provider:yield o.embeddedWallet.getBitcoinProvider({wallet:v,entropyId:f,entropyIdVerifier:d})}}),[o]);return{wallets:c,create:a}};exports.a = vr; exports.b = Wr; exports.c = Or; exports.d = Gr; exports.e = Jr; exports.f = Zr; exports.g = at; exports.h = ht; exports.i = kt; exports.j = Ct; exports.k = Ot; exports.l = Tt; exports.m = Kt; exports.n = Yt; exports.o = z; exports.p = ao; exports.q = uo; exports.r = wo; exports.s = Eo; exports.t = Uo; exports.u = Ro; exports.v = cr; exports.w = Y; exports.x = Z; exports.y = hr;
@@ -1 +1 @@
1
- var kt=Object.defineProperty,Ct=Object.defineProperties;var At=Object.getOwnPropertyDescriptors;var ne=Object.getOwnPropertySymbols;var xe=Object.prototype.hasOwnProperty,Ie=Object.prototype.propertyIsEnumerable;var Oe=(e,t,r)=>t in e?kt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,E=(e,t)=>{for(var r in t||(t={}))xe.call(t,r)&&Oe(e,r,t[r]);if(ne)for(var r of ne(t))Ie.call(t,r)&&Oe(e,r,t[r]);return e},O=(e,t)=>Ct(e,At(t));var Rr=(e,t)=>{var r={};for(var o in e)xe.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(e!=null&&ne)for(var o of ne(e))t.indexOf(o)<0&&Ie.call(e,o)&&(r[o]=e[o]);return r};var v=(e,t,r)=>new Promise((o,s)=>{var n=i=>{try{l(r.next(i))}catch(d){s(d)}},c=i=>{try{l(r.throw(i))}catch(d){s(d)}},l=i=>i.done?o(i.value):Promise.resolve(i.value).then(n,c);l((r=r.apply(e,t)).next())});import*as yt from"expo-apple-authentication";import{applicationId as pt}from"expo-application";import*as G from"expo-linking";import*as I from"expo-secure-store";import*as oe from"expo-web-browser";import{useCallback as mt,useContext as Sr,useEffect as Er}from"react";import{Platform as Ee}from"react-native";import{PrivyClientError as j}from"@privy-io/js-sdk-core";import{digest as vr}from"expo-crypto";import re,{useState as k,useMemo as fr,createContext as wr,useCallback as pe,useRef as V,useEffect as hr}from"react";import{AppState as st,View as gr}from"react-native";import br,{PrivyClientError as _r}from"@privy-io/js-sdk-core";var Ue={name:"@privy-io/expo",version:"0.34.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.35.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 Rt from"react";import{useCallback as Wt,useEffect as Le,useRef as Ot}from"react";import{AppState as xt}from"react-native";import It from"react-native-webview";var Me=({client:e,isClientReady:t,setWebViewState:r,webViewState:o,logLevel:s})=>{let n=Ot(null);Le(()=>{n.current&&o==="loaded"&&e.setMessagePoster(n.current)},[e,n.current,o==="loaded"]),Le(()=>xt.addEventListener("change",i=>v(void 0,null,function*(){n.current&&i==="active"&&((yield e.embeddedWallet.ping(500))||(n.current.reload(),r("reloading")))})).remove,[]);let c=Wt(l=>v(void 0,null,function*(){let{data:i}=l.nativeEvent;e.embeddedWallet.onMessage(JSON.parse(i))}),[e]);return t?Rt.createElement(It,{style:{flex:1},ref:n,cacheEnabled:!1,cacheMode:"LOAD_NO_CACHE",source:{uri:e.embeddedWallet.getURL()},webviewDebuggingEnabled:s==="DEBUG",onLoad:()=>r("loaded"),onError:console.error,onMessage:c}):null};import{useCallback as fe,useEffect as De,useMemo as we}from"react";import{errorIndicatesRecoveryIsNeeded as Lt,getAllUserEmbeddedSolanaWallets as Mt,getUserEmbeddedEthereumWallet as Tt,getUserEmbeddedSolanaWallet as Ft,PrivyClientError as Z}from"@privy-io/js-sdk-core";import{getAllUserEmbeddedSolanaWallets as Te,getUserEmbeddedWallet as Ut,PrivyClientError as ie}from"@privy-io/js-sdk-core";function Fe(n){return v(this,arguments,function*({client:e,setSolanaWallet:t,createSolanaWalletCallbacks:r,setSolanaRecoveryFlowState:o,opts:s}){var c,l,i;t({status:"creating"});try{let{user:d}=yield e.user.get(),a=Te(d),u=a[0];if(s!=null&&s.recoveryMethod&&s.recoveryMethod!=="privy")throw new ie({code:"embedded_wallet_creation_error",error:"Unsupported recovery method for solana wallet."});if(!(s!=null&&s.createAdditional)&&u)throw new ie({code:"embedded_wallet_creation_error",error:"Solana wallet already exists for this user. Set `createAdditional` to `true` to create another wallet"});let m,f;if(u){let w=Math.max(...a.map(_=>_.wallet_index),0)+1,p=yield e.embeddedWallet.createAdditionalSolana({primaryPublicKey:u.address,hdWalletIndex:w});m=p.provider,f=p.user}else{let w=(c=Ut(d))!=null?c:void 0,p=yield e.embeddedWallet.createSolana({ethereumAccount:w});m=p.provider,f=p.user}let y=Te(f)[0];if(!y)throw new ie({code:"embedded_wallet_creation_error",error:"Unknown error creating solana wallet"});return(i=(l=r.current)==null?void 0:l.onSuccess)==null||i.call(l,m),t({status:"connected",publicKey:y.public_key}),o({status:"initial"}),m}catch(d){let a=d instanceof Error?d.message:"Error creating embedded wallet";throw t({status:"error",error:a}),o({status:"initial"}),new ie({code:"embedded_wallet_creation_error",error:a})}})}import{PrivyClientError as H}from"@privy-io/js-sdk-core";function ae(d){return v(this,arguments,function*({client:e,account:t,setWallet:r,recoverWalletCallbacks:o,recoveryMethod:s,setRecoveryFlowState:n,password:c,recoveryToken:l,recoverySecretOverride:i}){var a,u,m,f;if(!t)throw new H({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});switch(s){case"user-passcode":if(!c)throw new H({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!l)throw new H({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!i)throw new H({code:"embedded_wallet_recovery_error",error:"Record name is required for icloud recovery method"});break}r({status:"connecting",account:t});try{let y=yield e.embeddedWallet.getProvider(t,c,l,i);return r({status:"connected",provider:y,account:t}),n({status:"initial"}),(u=(a=o.current)==null?void 0:a.onSuccess)==null||u.call(a,y),y}catch(y){r({status:"needs-recovery",account:t}),n({status:"initial"});let w=new H({code:"embedded_wallet_recovery_error",error:y instanceof Error?y.message:"Error recovering embedded wallet"});throw(f=(m=o.current)==null?void 0:m.onError)==null||f.call(m,w),w}})}function je(l){return v(this,arguments,function*({client:e,account:t,entropyId:r,entropyIdVerifier:o,setSolanaWallet:s,recoverSolanaWalletCallbacks:n,setSolanaRecoveryFlowState:c}){var i,d,a,u;s({status:"connecting"});try{let m=yield e.embeddedWallet.getSolanaProvider(t,r,o);return s({status:"connected",publicKey:m._publicKey}),c({status:"initial"}),(d=(i=n.current)==null?void 0:i.onSuccess)==null||d.call(i,m),m}catch(m){s({status:"needs-recovery"}),c({status:"initial"});let f=new H({code:"embedded_wallet_recovery_error",error:m instanceof Error?m.message:"Error recovering embedded wallet"});throw(u=(a=n.current)==null?void 0:a.onError)==null||u.call(a,f),f}})}var se=e=>{if(e.chain_type==="ethereum")return{entropyId:e.address,entropyIdVerifier:"ethereum-address-verifier"};if(e.chain_type==="solana")return{entropyId:e.address,entropyIdVerifier:"solana-address-verifier"};throw new Error("Invalid embedded wallet account type")};var Ne=({client:e,user:t,solanaWallet:r,setSolanaWallet:o,setSolanaRecoveryFlowState:s,webViewState:n,createSolanaWalletCallbacks:c,recoverSolanaWalletCallbacks:l})=>{let i=we(()=>Mt(t),[t]),d=we(()=>{var y;return i.length===0?null:(y=Tt(t))!=null?y:Ft(t)},[t,i]),a=we(()=>{if(!d)return[];let{entropyId:y,entropyIdVerifier:w}=se(d);return i.map(p=>({address:p.address,publicKey:p.address,walletIndex:p.wallet_index,getProvider:()=>e.embeddedWallet.getSolanaProvider(p,y,w)}))},[i,d,e]),u=fe(y=>v(void 0,null,function*(){return yield Fe({client:e,setSolanaWallet:o,createSolanaWalletCallbacks:c,setSolanaRecoveryFlowState:s,opts:y})}),[e,c]),m=fe(()=>v(void 0,null,function*(){if(!d)throw new Z({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{entropyId:y,entropyIdVerifier:w}=se(d);return je({client:e,account:i[0],entropyId:y,entropyIdVerifier:w,setSolanaWallet:o,recoverSolanaWalletCallbacks:l,setSolanaRecoveryFlowState:s})}),[e,d,i,l,s,o]),f=fe(()=>v(void 0,null,function*(){if(!d)throw o({status:"not-created"}),new Z({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});o(y=>y.status==="connected"?{status:"reconnecting"}:{status:"connecting"});try{let{entropyId:y,entropyIdVerifier:w}=se(d),p=yield e.embeddedWallet.getSolanaProvider(i[0],y,w);return o({status:"connected",publicKey:i[0].public_key}),p}catch(y){throw Lt(y)?(o({status:"needs-recovery"}),new Z({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):y instanceof Error?(o({status:"error",error:y.message}),new Z({code:"unknown_embedded_wallet_error",error:y.message})):(o({status:"error",error:"Error loading embedded wallet"}),new Z({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,d]);return De(()=>{if(!t&&r.status!=="disconnected")return o({status:"disconnected"});n==="loaded"&&f().catch(()=>{})},[n,t,d]),De(()=>{r.status==="error"&&r.error.includes("User must be logged in")&&f()},[r.status]),{create:u,recover:m,getProvider:f,wallets:a}};import{useCallback as te,useEffect as Je,useMemo as Gt}from"react";import{getUserEmbeddedSolanaWallet as Ge,throwIfInvalidRecoveryUpgradePath as Yt}from"@privy-io/js-sdk-core";import{errorIndicatesRecoveryIsNeeded as Xt,getUserEmbeddedWallet as Qt,PrivyClientError as A}from"@privy-io/js-sdk-core";import{getUserEmbeddedWallet as jt}from"@privy-io/js-sdk-core";import{PrivyClientError as le}from"@privy-io/js-sdk-core";function de(a){return v(this,arguments,function*({client:e,setWallet:t,createWalletCallbacks:r,recoveryMethod:o,setRecoveryFlowState:s,password:n,recoveryToken:c,recoverySecretOverride:l,iCloudRecordNameOverride:i,solanaAccount:d}){var m,f;switch(o){case"user-passcode":if(!n)throw new le({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!c)throw new le({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!l||!i)throw new le({code:"embedded_wallet_recovery_error",error:"iCloud recovery failed due to inability to store credentials"});break}t({status:"creating",account:null});let u=o==="icloud"?"icloud-native":o;try{let{provider:y,user:w}=yield e.embeddedWallet.create(n,u,c,l,i,d),p=jt(w);return(f=(m=r.current)==null?void 0:m.onSuccess)==null||f.call(m,y),t({status:"connected",provider:y,account:p}),s({status:"initial"}),y}catch(y){let w=y instanceof Error?y.message:"Error creating embedded wallet";throw t({status:"error",error:w,account:null}),s({status:"initial"}),new le({code:"embedded_wallet_creation_error",error:w})}})}import{Platform as Ve}from"react-native";import{PrivyClientError as M}from"@privy-io/js-sdk-core";function Ke(){return v(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 he(o){return v(this,arguments,function*({user:e,appId:t,client:r}){var l;if(Ve.OS==="android")throw new M({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let s=yield Ke(),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:d}=yield s.writeRecoverySecretToICloud({containerId:n.container_identifier,appId:t,userId:e.id});return{recoverySecret:i,iCloudRecordName:d}}catch(i){if(i instanceof Error){let d=(l=i.message.split("Caused by: ")[1])!=null?l:"Error writing to iCloud";throw new M({code:"embedded_wallet_recovery_error",error:d})}throw new M({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}function qe(o){return v(this,arguments,function*({walletAddress:e,client:t,chainType:r}){var d;if(Ve.OS==="android")throw new M({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let s=yield Ke(),c=(yield t.recovery.getRecoveryKeyMaterial(e,r)).icloud_record_name;if(!c)throw new M({code:"embedded_wallet_recovery_error",error:"iCloud recovery not properly backed up."});let l=yield t.recovery.icloudAuth.getICloudConfiguration("expo-ios"),i=l==null?void 0:l.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:a}=yield s.readRecoverySecretFromICloud({containerId:i,recordName:c});return{recoverySecret:a}}catch(a){if(a instanceof Error){let u=(d=a.message.split("Caused by: ")[1])!=null?d:"Error writing to iCloud";throw new M({code:"embedded_wallet_recovery_error",error:u})}throw new M({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}import*as N from"expo-linking";import*as ze from"expo-web-browser";import{Platform as Be}from"react-native";import{PrivyClientError as z}from"@privy-io/js-sdk-core";import Dt from"react-fast-compare";var He=e=>t=>e(r=>Dt(r,t)?r:t);import{PrivyApiError as Nt,PrivyClientError as Vt}from"@privy-io/js-sdk-core";function x(e){return e instanceof Error||e instanceof Nt||e instanceof Vt?e:typeof e=="string"?new Error(e):new Error("Unknown error")}var co=e=>new Promise(t=>setTimeout(t,e));import{useEffect as Kt,useRef as qt}from"react";import{AppState as ge}from"react-native";function vo(){let e=qt(ge.currentState);Kt(()=>ge.addEventListener("change",o=>{e.current=o}).remove,[]);function t(){return ge.currentState}return{appState:e,getCurrentAppState:t}}function ee(s){return v(this,arguments,function*({provider:e,redirectUri:t,client:r,onError:o}){try{let n;switch(e){case"google-drive":{let{url:d}=yield r.recovery.auth.generateURL(N.createURL(t||"/"));n=d;break}default:throw new z({error:"OAuth invalid provider",code:"embedded_wallet_recovery_error"})}let c=yield ze.openAuthSessionAsync(n);if(Be.OS==="android")return;if(c.type!=="success")throw new z({error:"Recovery OAuth session failed",code:"embedded_wallet_recovery_error"});let{queryParams:l}=N.parse(c.url),i;switch(e){case"google-drive":{let{privy_oauth_state:d,privy_oauth_code:a}=l;if(!a||!d)throw new z({error:"Recovery OAuth invalid credentials",code:"embedded_wallet_recovery_error"});i=yield ce({oAuthCode:a,oAuthState:d,client:r});break}default:throw new z({error:"Recovery OAuth invalid provider",code:"embedded_wallet_recovery_error"})}return i}catch(n){throw o==null||o(x(n)),n}})}function ce(o){return v(this,arguments,function*({oAuthCode:e,oAuthState:t,client:r}){let{access_token:s}=yield r.recovery.auth.authorize(e,t);if(!s)throw new z({error:"OAuth invalid credentials",code:"login_with_oauth_returned_with_invalid_credentials"});return s})}var Ht=2*60*1e3;function zt(e){let t;return new Promise((r,o)=>{t=N.addEventListener("url",n=>v(this,[n],function*({url:s}){if(!s)return;let{queryParams:c}=N.parse(s),{privy_oauth_state:l,privy_oauth_code:i}=c!=null?c:{};if(typeof i!="string"||typeof l!="string")return;let d=yield ce({client:e,oAuthCode:i,oAuthState:l});r(d)})),setTimeout(()=>{o(new z({code:"embedded_wallet_set_recovery_error",error:"Failed to complete Google Drive recovery flow"}))},Ht)}).finally(()=>{t==null||t.remove()})}function Ao(e){return v(this,null,function*(){let t;Be.OS==="android"&&(t=zt(e));let r=yield ee({provider:"google-drive",client:e});return r!=null?r:yield t})}import{getUserEmbeddedWallet as Bt,PrivyClientError as Jt}from"@privy-io/js-sdk-core";function ue(n){return v(this,arguments,function*({client:e,recoveryInput:t,setWalletRecoveryCallbacks:r,setRecoveryFlowState:o,setWallet:s}){var c,l,i,d;try{let{provider:a,user:u}=yield e.embeddedWallet.setRecovery(t),m=a,f=Bt(u);return s({status:"connected",provider:m,account:f}),(l=(c=r.current)==null?void 0:c.onSuccess)==null||l.call(c,m),o({status:"initial"}),m}catch(a){let u=new Jt({code:"embedded_wallet_set_recovery_error",error:a instanceof Error?a.message:"Error setting password on embedded wallet"});throw(d=(i=r.current)==null?void 0:i.onError)==null||d.call(i,u),o({status:"initial"}),u}})}function Ye(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 Xe=({client:e,user:t,appId:r,wallet:o,setWallet:s,setRecoveryFlowState:n,webViewState:c,createWalletCallbacks:l,recoverWalletCallbacks:i,setWalletRecoveryCallbacks:d})=>{let a=Gt(()=>Qt(t),[t]),u=te(p=>v(void 0,null,function*(){var R,q;if(a)throw new A({error:"This user already has an embedded wallet",code:"embedded_wallet_already_exists"});let{user:_}=yield e.user.get(),{password:g,recoveryMethod:h}=Ye(p),b,S,W;if(h==="google-drive"&&(b=yield ee({provider:h,client:e,onError:(R=l.current)==null?void 0:R.onError}),n({status:"creating-wallet"}),!b))return null;if(h==="icloud"){if(!_)throw new A({code:"embedded_wallet_recovery_error",error:"User must be loaded before creating a wallet with iCloud."});let{recoverySecret:T,iCloudRecordName:D}=yield he({user:_,appId:r,client:e});S=T,W=D}return yield de({client:e,setWallet:s,createWalletCallbacks:l,recoveryMethod:h,setRecoveryFlowState:n,password:g,recoverySecretOverride:S,iCloudRecordNameOverride:W,solanaAccount:(q=Ge(_))!=null?q:void 0})}),[e,a,t]),m=te(p=>v(void 0,null,function*(){var h;if(o.status!=="connected")throw new A({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"});if(!a)throw new A({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});if(Ge(t))throw new A({code:"embedded_wallet_set_recovery_error",error:"Cannot set user-controlled recovery for a user with an embedded Solana wallet."});Yt({currentRecoveryMethod:a.recovery_method,upgradeToRecoveryMethod:p.recoveryMethod});let _,g;switch(p.recoveryMethod){case"privy":g=O(E({},p),{wallet:a});break;case"user-passcode":g=O(E({},p),{wallet:a,password:p.password});break;case"google-drive":if(_=yield ee({provider:p.recoveryMethod,client:e,onError:(h=d.current)==null?void 0:h.onError}),n({status:"upgrading-recovery"}),!_)return null;g={recoveryMethod:"google-drive",wallet:a,recoveryAccessToken:_};break;case"icloud":if(!t)throw new A({code:"embedded_wallet_recovery_error",error:"User must be loaded before backing up to iCloud."});let{recoverySecret:b,iCloudRecordName:S}=yield he({user:t,appId:r,client:e});g={recoveryMethod:"icloud-native",recoverySecretOverride:b,iCloudRecordNameOverride:S,wallet:a};break;default:throw new A({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}return ue({client:e,recoveryInput:g,setWalletRecoveryCallbacks:d,setRecoveryFlowState:n,setWallet:s})}),[e,a,o.status,t]),f=te(p=>v(void 0,null,function*(){return m({recoveryMethod:"user-passcode",password:p})}),[e,a,o.status]),y=te(p=>v(void 0,null,function*(){var S;if(!a)throw new A({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{password:_,recoveryMethod:g}=Ye(p),h,b;if(g==="google-drive"&&(h=yield ee({provider:g,client:e,onError:(S=i.current)==null?void 0:S.onError}),n({status:"recovering"}),!h))return null;if(g==="icloud"){if(!t)throw new A({code:"embedded_wallet_recovery_error",error:"User must be loaded before recovering via iCloud."});let{recoverySecret:W}=yield qe({client:e,walletAddress:a.address});b=W}return ae({client:e,account:a,setWallet:s,recoverWalletCallbacks:i,recoveryMethod:g,setRecoveryFlowState:n,password:_,recoveryToken:h,recoverySecretOverride:b})}),[e,a]),w=te(()=>v(void 0,null,function*(){if(!a)throw s({status:"not-created",account:null}),new A({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});s(p=>p.status==="connected"?{status:"reconnecting",account:a}:{status:"connecting",account:a});try{let p=yield e.embeddedWallet.getProvider(a);return s({status:"connected",provider:p,account:a}),p}catch(p){throw Xt(p)?(s({status:"needs-recovery",account:a}),new A({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):p instanceof Error?(s({status:"error",error:p.message,account:a}),new A({code:"unknown_embedded_wallet_error",error:p.message})):(s({status:"error",error:"Error loading embedded wallet",account:a}),new A({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,a]);return Je(()=>{if(!t&&o.status!=="disconnected")return s({status:"disconnected",account:null});c==="loaded"&&w().catch(()=>{})},[c,t,a]),Je(()=>{o.status==="error"&&o.error.includes("User must be logged in")&&w()},[o.status]),{create:u,recover:y,setPassword:f,setRecovery:m,getProvider:w}};import{useEffect as $t,useState as Zt}from"react";import{PrivyClientError as Qe}from"@privy-io/js-sdk-core";var $e=({client:e,user:t,isReady:r,customAuth:o})=>{let[s,n]=Zt({status:"initial"});return $t(()=>{(()=>v(void 0,null,function*(){if(!(o!=null&&o.enabled)){n({status:"not-enabled"});return}n({status:"loading"});let{getCustomAccessToken:l,isLoading:i}=o;if(!(!r||i))try{let d=yield l();if(!d&&t){yield e.auth.logout(),n({status:"done"});return}if(!d){n({status:"done"});return}if(t){n({status:"done"});return}if(!(yield e.auth.customProvider.syncWithToken(d))){yield e.auth.logout(),n({status:"error",error:new Qe({error:"Failed to sync with custom auth provider",code:"third_party_auth_error"})});return}n({status:"done"})}catch(d){if(console.log("Error syncing with custom auth provider",d),n({status:"error",error:d}),t)throw yield e.auth.logout(),new Qe({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:s,customAuthStateIsSettled:s.status!=="loading"&&s.status!=="initial"}};import*as B from"expo-linking";import{useCallback as er,useEffect as tr}from"react";import{Platform as rr}from"react-native";var Ze=({client:e,user:t,isUserInitialized:r,oAuthState:o,oAuthCallbacks:s,setOAuthState:n,recoveryFlowState:c,oAuthStateRef:l})=>{let i=B.useURL(),d=er(a=>{var m,f;let u=x(a);n({status:"error",error:u}),(f=(m=s.current).onError)==null||f.call(m,u)},[n]);return tr(()=>{function a(){return v(this,null,function*(){var y,w;if(!i||o.status!=="loading"||c.status!=="initial")return;let{queryParams:u}=B.parse(i),{privy_oauth_state:m,privy_oauth_code:f}=u;if(!f||!m){n({status:"done"});return}try{let p,_;if(t)p=yield e.auth.oauth.linkWithCode(f,m);else{let g=yield e.auth.oauth.loginWithCode(f,m,void 0,void 0,l.current.disableSignup?"no-signup":"login-or-sign-up");p=g.user,_=!!g.is_new_user}return(w=(y=s.current).onSuccess)==null||w.call(y,p,_),l.current={},n({status:"done"}),yield B.openURL(i.split("?")[0])}catch(p){l.current={},d(p)}})}rr.OS==="android"&&r&&a()},[i,r])};import*as J from"expo-linking";import{useCallback as or,useEffect as nr,useMemo as ir}from"react";import{Platform as ar}from"react-native";import{getUserEmbeddedSolanaWallet as sr,getUserEmbeddedWallet as lr}from"@privy-io/js-sdk-core";var et=({client:e,user:t,createWalletCallbacks:r,recoverWalletCallbacks:o,setWalletRecoveryCallbacks:s,recoveryFlowState:n,oAuthState:c,setRecoveryFlowState:l,setWallet:i,appStateVisible:d,webViewLoaded:a})=>{let u=J.useURL(),m=ir(()=>lr(t),[t]),f=or(y=>{var p,_,g,h;let w=x(y);n.status==="creating-wallet"?(_=(p=r.current).onError)==null||_.call(p,x(w)):(h=(g=o.current).onError)==null||h.call(g,x(w)),l({status:"initial"})},[n]);return nr(()=>{function y(){return v(this,null,function*(){var g;if(!u&&n.status!=="initial"&&d&&f(new Error("Recovery OAuth session failed")),!u||n.status==="initial"||c.status!=="initial"||!d||!a)return;let{queryParams:w}=J.parse(u),{privy_oauth_state:p,privy_oauth_code:_}=w;if(!(!_||!p)){yield J.openURL(u.split("?")[0]);try{let h=yield ce({oAuthCode:_,oAuthState:p,client:e});if(n.status==="creating-wallet"){let b=(g=sr(t))!=null?g:void 0;yield de({client:e,setWallet:i,createWalletCallbacks:r,recoveryMethod:"google-drive",setRecoveryFlowState:l,recoveryToken:h,solanaAccount:b})}else if(n.status==="upgrading-recovery"){if(!m)throw new Error("Embedded wallet not found");yield ue({client:e,recoveryInput:{recoveryMethod:"google-drive",wallet:m,recoveryAccessToken:h},setWalletRecoveryCallbacks:s,setRecoveryFlowState:l,setWallet:i})}else yield ae({client:e,account:m,setWallet:i,recoverWalletCallbacks:o,recoveryMethod:"google-drive",setRecoveryFlowState:l,recoveryToken:h})}catch(h){f(h)}}})}ar.OS==="android"&&y()},[u,n.status,d,a])};import{useEffect as dr}from"react";var tt=({client:e,isUserInitialized:t,setIsUserInitialized:r,setError:o})=>{dr(()=>{t||(()=>v(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{useEffect as ur}from"react";import{create as pr}from"zustand";var P=class extends Error{constructor(r,o){super(o);this.code=r,this.error=o}},rt=class extends P{constructor(r){super("underlying_error",r instanceof Error?r.message:"An underlying error occurred");this.wrappedError=r}};var be={success:e=>({value:e}),error:e=>({error:e})};var ot=e=>{let t=Array.from(new Set(e));return t.length===0?be.error(new P("no_login_methods_available","No login methods available")):be.success(t)},_e=e=>{let t=e.length,r=e.every(o=>o==="sms"||o==="email");return t<=2&&r?e[0]:null},vn=(e,t)=>{if(e.length!==2)return null;let[r,o]=e;return t===r?o:r},fn={email:"email",sms:"phone",google:"Google",apple:"Apple",discord:"Discord",twitter:"X",github:"Github",spotify:"Spotify",instagram:"Instagram",tiktok:"Tiktok",linkedin:"LinkedIn"};function nt(e){return new Promise((t,r)=>{e({resolve:t,reject:r})})}function cr(e,t){return{resolve:r=>{t(),e.resolve(r)},reject:r=>{t(),e.reject(r)}}}function it(e,t,r){let o=setTimeout(()=>{e.reject(t())},r);return cr(e,()=>{clearTimeout(o)})}var mr=1e3*60*5,F=pr()((e,t)=>({privyElementsConfig:null,loginPromiseResolvers:null,isUIMounted:!1,activeLoginMethod:null,updateUIMounted:r=>e({isUIMounted:r}),openLoginFlow:(r,o,s,n)=>nt(c=>{var u,m,f;let l=o.app.getConfig();if(!l)return c.reject(new P("privy_not_ready","Privy is not ready"));if(s!==null)return c.reject(new P("user_already_logged_in","User is already logged in"));if(!t().isUIMounted)return c.reject(new P("privy_elements_not_ready","Privy Elements is not mounted"));if(t().loginPromiseResolvers!==null)return c.reject(new P("existing_login_flow_in_progress","A login flow is already in progress"));let i=ot(r.loginMethods);if(i.error)return c.reject(i.error);let d={loginMethods:i.value,appearance:{logo:(f=(m=(u=r.appearance)==null?void 0:u.logo)!=null?m:l.logo_url)!=null?f:void 0}},a=it(c,()=>(e({privyElementsConfig:null,loginPromiseResolvers:null}),new P("login_flow_timeout","The login flow timed out")),mr);n(),e({loginPromiseResolvers:a,privyElementsConfig:d,activeLoginMethod:_e(d.loginMethods)})}),closeLoginFlow:()=>{var r;return(r=t().loginPromiseResolvers)==null||r.reject(new P("login_flow_closed","The login flow was closed")),e({privyElementsConfig:null,loginPromiseResolvers:null})},goBack:()=>{let{activeLoginMethod:r,privyElementsConfig:o,updateActiveLoginMethod:s,closeLoginFlow:n}=t();if(!o){n();return}let c=_e(o.loginMethods)===null;r===null||!c?n():s(null)},updateActiveLoginMethod:r=>e({activeLoginMethod:r})})),kn=()=>{let e=F(r=>r.privyElementsConfig);return F(r=>r.isUIMounted)?e:null},Cn=()=>F(e=>e.openLoginFlow),An=()=>F(e=>e.closeLoginFlow),Pn=()=>F(e=>e.goBack),Rn=()=>F(e=>[e.activeLoginMethod,e.updateActiveLoginMethod]),yr=e=>{let{loginPromiseResolvers:t}=F.getState();t==null||t.resolve(e)},at=()=>yr,Wn=()=>{let e=F(t=>t.updateUIMounted);ur(()=>(e(!0),()=>{e(!1)}),[e])};var Se=wr({}),K;function Bn(e){return K?K.getAccessToken():e!=null&&e.strict?Promise.reject(new _r({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 Jn=e=>{var We;let[t,r]=k(st.currentState==="active");hr(()=>{let L=st.addEventListener("change",Et=>{r(Et==="active")});return()=>{L.remove()}},[]);let[o,s]=k(!1),[n,c]=k(null),[l,i]=k("loading"),[d,a]=k(!1),[u,m]=k(null),[f,y]=k({status:"disconnected",account:null}),[w,p]=k({status:"disconnected"}),[_,g]=k({status:"initial"}),[h,b]=k({status:"initial"}),S=V({}),[W,R]=k({status:"initial"}),[q,T]=k({status:"initial"}),[D,Y]=k({status:"initial"}),[X,Q]=k({status:"initial"}),[U,vt]=k({status:"initial"}),Ae=V({}),me=V({}),ye=V({}),ve=V({}),Pe=V({}),Re=V({}),ft=at(),$=pe(L=>{if(L){ft(L),He(m)(L);return}m(null),g({status:"initial"}),b({status:"initial"}),y({status:"disconnected",account:null})},[]),C=fr(()=>{let L=e.storage||ut;return e.client?(K=e.client,K.setCallbacks({setUser:$,setIsReady:a}),K):(K=new br({storage:ct(L),appId:e.appId,clientId:e.clientId,supportedChains:e.supportedChains,nativeAppIdentifier:dt(),baseUrl:e.baseUrl,sdkVersion:`expo:${Ue.version}`,callbacks:{setUser:$,setIsReady:a},logLevel:e.logLevel,crypto:{digest:vr}}),K)},[e.client,e.storage,e.appId,e.clientId,e.baseUrl,e.supportedChains,e.logLevel,$]),wt=pe(()=>($(null),C.auth.logout()),[$,C]),ht=pe(()=>v(void 0,null,function*(){try{return yield C.getAccessToken()}catch(L){return console.debug(L),null}}),[C]),gt=pe(()=>C.getIdentityToken(),[C]);tt({client:C,isUserInitialized:o,setIsUserInitialized:s,setError:c});let bt=Xe({client:C,user:u,appId:e.appId,webViewState:l,createWalletCallbacks:me,recoverWalletCallbacks:ye,setWalletRecoveryCallbacks:ve,setRecoveryFlowState:R,wallet:f,setWallet:y}),_t=Ne({client:C,user:u,webViewState:l,createSolanaWalletCallbacks:Pe,recoverSolanaWalletCallbacks:Re,setSolanaRecoveryFlowState:T,solanaWallet:w,setSolanaWallet:p});Ze({client:C,isUserInitialized:o,user:u,oAuthState:h,setOAuthState:b,oAuthCallbacks:Ae,recoveryFlowState:W,oAuthStateRef:S}),et({client:C,user:u,webViewLoaded:l==="loaded",createWalletCallbacks:me,recoverWalletCallbacks:ye,setWalletRecoveryCallbacks:ve,recoveryFlowState:W,oAuthState:h,setRecoveryFlowState:R,setWallet:y,appStateVisible:t});let{customAuthStateIsSettled:St}=$e({client:C,user:u,isReady:o,customAuth:(We=e.config)==null?void 0:We.customAuth});return re.createElement(re.Fragment,null,re.createElement(Se.Provider,{value:{client:C,user:u,isReady:l!=="loading"&&o&&lt(h)&&St,error:n,logout:wt,getAccessToken:ht,getIdentityToken:gt,wallet:E(E({},f),bt),solanaWallet:E(E({},w),_t),oAuthState:h,oAuthCallbacks:Ae,recoveryFlowState:W,setRecoveryFlowState:R,solanaRecoveryFlowState:q,setSolanaRecoveryFlowState:T,createWalletCallbacks:me,recoverWalletCallbacks:ye,setWalletRecoveryCallbacks:ve,createSolanaWalletCallbacks:Pe,recoverSolanaWalletCallbacks:Re,setOAuthState:b,siweState:D,setSiweState:Y,otpState:_,setOtpState:g,passkeyState:X,setPasskeyState:Q,farcasterState:U,setFarcasterState:vt,oAuthStateRef:S}},e.children),re.createElement(gr,{style:{width:0,height:0,overflow:"hidden"}},re.createElement(Me,{logLevel:e.logLevel,client:C,isClientReady:d,setWebViewState:i,webViewState:l})))};var lt=e=>e.status!=="loading",ke=(e={})=>{let{user:t,oAuthState:r,setOAuthState:o,oAuthCallbacks:s,client:n,oAuthStateRef:c}=Sr(Se),l=e.action?e.action==="login":!t;Er(()=>{s.current={onSuccess:e.onSuccess,onError:e.onError}},[e.onSuccess,e.onError]);let i=mt(a=>{var m;let u=x(a);return o({status:"error",error:u}),(m=e==null?void 0:e.onError)==null||m.call(e,u),u},[e==null?void 0:e.onError]);return{start:mt(function(w){return v(this,arguments,function*({provider:u,redirectUri:m,isLegacyAppleIosBehaviorEnabled:f=!1,disableSignup:y}){var p,_,g;o({status:"loading"}),c.current={disableSignup:y};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:h}=yield n.auth.oauth.generateURL(u,G.createURL(m||"/")),b,S;if(Ee.OS==="ios"&&u==="apple"&&!f){let X=(p=new URL(h).searchParams.get("state"))!=null?p:"",Q=yield yt.signInAsync({state:X}).catch(U=>{throw U instanceof Error&&"code"in U&&U.code==="ERR_REQUEST_CANCELED"?new j({error:"Apple login was cancelled",code:l?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):U});if(!Q.authorizationCode)throw new j({error:"OAuth invalid credentials",code:l?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(l){let U=yield n.auth.oauth.loginWithCode(Q.authorizationCode,X,u,"raw",y?"no-signup":"login-or-sign-up");b=U.user,S=U.is_new_user}else b=yield n.auth.oauth.linkWithCode(Q.authorizationCode,X,u,"raw");return(_=e==null?void 0:e.onSuccess)==null||_.call(e,b,S),o({status:"done"}),b!=null?b:void 0}let W=Ee.OS==="android"?h.replace("x.com","twitter.com"):h,R=yield oe.openAuthSessionAsync(W);if(Ee.OS==="android")return;if(R.type!=="success")throw[oe.WebBrowserResultType.CANCEL,oe.WebBrowserResultType.DISMISS].includes(R.type)?new j({error:"OAuth was cancelled",code:l?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):new j({error:"OAuth session failed",code:l?"failed_to_complete_login_with_oauth":"failed_to_complete_link_with_oauth"});let{queryParams:q}=G.parse(R.url),{privy_oauth_state:T,privy_oauth_code:D}=q;if(!D||!T)throw new j({error:"OAuth invalid credentials",code:l?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(l){let Y=yield n.auth.oauth.loginWithCode(D,T,u,void 0,y?"no-signup":"login-or-sign-up");b=Y.user,S=Y.is_new_user}else b=yield n.auth.oauth.linkWithCode(D,T,u);return(g=e==null?void 0:e.onSuccess)==null||g.call(e,b,S),yield G.openURL(R.url.split("?")[0]),o({status:"done"}),b!=null?b:void 0}catch(h){i(h)}})},[t,n,o,i]),state:r}};function ri(e){let{state:t,start:r}=ke(O(E({},e),{action:"login"}));return{state:t,login:r}}function oi(e){let{state:t,start:r}=ke(O(E({},e),{action:"link"}));return{state:t,link:r}}function ni(e){return ke(e)}var dt=()=>{if(typeof pt!="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 pt};function ct(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:()=>v(this,null,function*(){return[]})}}var ut={get(e){return I.getItemAsync(e,{keychainAccessible:I.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},put(e,t){return I.setItemAsync(e,t,{keychainAccessible:I.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},del(e){return I.deleteItemAsync(e,{keychainAccessible:I.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},getKeys:()=>v(void 0,null,function*(){return[]})};import{PrivyClientError as kr}from"@privy-io/js-sdk-core";var Cr=e=>v(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 kr({code:"failed_to_create_passkey",error:"Could not create passkey"});return O(E({},r),{type:(o=r.type)!=null?o:"public-key",clientExtensionResults:{}})});import{PrivyClientError as Ar}from"@privy-io/js-sdk-core";var Pr=e=>v(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 Ar({code:"no_passkey_found_for_challenge",error:"Could not find a matching passkey to login with"});return O(E({},r),{type:(o=r.type)!=null?o:"public-key",clientExtensionResults:{}})});function hi(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 gi(e){var t,r,o,s;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:(s=e.allow_credentials)==null?void 0:s.map(({id:n,type:c,transports:l})=>({id:n,type:c,transports:l})),userVerification:e.user_verification}}export{E as a,O as b,Rr as c,v as d,Ue as e,se as f,he as g,qe as h,x as i,co as j,vo as k,Ao as l,ri as m,oi as n,ni as o,dt as p,ct as q,ut as r,P as s,rt as t,vn as u,fn as v,nt as w,it as x,kn as y,Cn as z,An as A,Pn as B,Rn as C,Wn as D,Se as E,Bn as F,Jn as G,Cr as H,Pr as I,hi as J,gi as K};
1
+ var kt=Object.defineProperty,Ct=Object.defineProperties;var At=Object.getOwnPropertyDescriptors;var ne=Object.getOwnPropertySymbols;var xe=Object.prototype.hasOwnProperty,Ie=Object.prototype.propertyIsEnumerable;var Oe=(e,t,r)=>t in e?kt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,E=(e,t)=>{for(var r in t||(t={}))xe.call(t,r)&&Oe(e,r,t[r]);if(ne)for(var r of ne(t))Ie.call(t,r)&&Oe(e,r,t[r]);return e},O=(e,t)=>Ct(e,At(t));var Rr=(e,t)=>{var r={};for(var o in e)xe.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(e!=null&&ne)for(var o of ne(e))t.indexOf(o)<0&&Ie.call(e,o)&&(r[o]=e[o]);return r};var v=(e,t,r)=>new Promise((o,s)=>{var n=i=>{try{l(r.next(i))}catch(d){s(d)}},c=i=>{try{l(r.throw(i))}catch(d){s(d)}},l=i=>i.done?o(i.value):Promise.resolve(i.value).then(n,c);l((r=r.apply(e,t)).next())});import*as yt from"expo-apple-authentication";import{applicationId as pt}from"expo-application";import*as G from"expo-linking";import*as I from"expo-secure-store";import*as oe from"expo-web-browser";import{useCallback as mt,useContext as Sr,useEffect as Er}from"react";import{Platform as Ee}from"react-native";import{PrivyClientError as j}from"@privy-io/js-sdk-core";import{digest as vr}from"expo-crypto";import re,{useState as k,useMemo as fr,createContext as wr,useCallback as pe,useRef as V,useEffect as hr}from"react";import{AppState as st,View as gr}from"react-native";import br,{PrivyClientError as _r}from"@privy-io/js-sdk-core";var Ue={name:"@privy-io/expo",version:"0.34.1",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.35.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 Rt from"react";import{useCallback as Wt,useEffect as Le,useRef as Ot}from"react";import{AppState as xt}from"react-native";import It from"react-native-webview";var Me=({client:e,isClientReady:t,setWebViewState:r,webViewState:o,logLevel:s})=>{let n=Ot(null);Le(()=>{n.current&&o==="loaded"&&e.setMessagePoster(n.current)},[e,n.current,o==="loaded"]),Le(()=>xt.addEventListener("change",i=>v(void 0,null,function*(){n.current&&i==="active"&&((yield e.embeddedWallet.ping(500))||(n.current.reload(),r("reloading")))})).remove,[]);let c=Wt(l=>v(void 0,null,function*(){let{data:i}=l.nativeEvent;e.embeddedWallet.onMessage(JSON.parse(i))}),[e]);return t?Rt.createElement(It,{style:{flex:1},ref:n,cacheEnabled:!1,cacheMode:"LOAD_NO_CACHE",source:{uri:e.embeddedWallet.getURL()},webviewDebuggingEnabled:s==="DEBUG",onLoad:()=>r("loaded"),onError:console.error,onMessage:c}):null};import{useCallback as fe,useEffect as De,useMemo as we}from"react";import{errorIndicatesRecoveryIsNeeded as Lt,getAllUserEmbeddedSolanaWallets as Mt,getUserEmbeddedEthereumWallet as Tt,getUserEmbeddedSolanaWallet as Ft,PrivyClientError as Z}from"@privy-io/js-sdk-core";import{getAllUserEmbeddedSolanaWallets as Te,getUserEmbeddedWallet as Ut,PrivyClientError as ie}from"@privy-io/js-sdk-core";function Fe(n){return v(this,arguments,function*({client:e,setSolanaWallet:t,createSolanaWalletCallbacks:r,setSolanaRecoveryFlowState:o,opts:s}){var c,l,i;t({status:"creating"});try{let{user:d}=yield e.user.get(),a=Te(d),u=a[0];if(s!=null&&s.recoveryMethod&&s.recoveryMethod!=="privy")throw new ie({code:"embedded_wallet_creation_error",error:"Unsupported recovery method for solana wallet."});if(!(s!=null&&s.createAdditional)&&u)throw new ie({code:"embedded_wallet_creation_error",error:"Solana wallet already exists for this user. Set `createAdditional` to `true` to create another wallet"});let m,f;if(u){let w=Math.max(...a.map(_=>_.wallet_index),0)+1,p=yield e.embeddedWallet.createAdditionalSolana({primaryPublicKey:u.address,hdWalletIndex:w});m=p.provider,f=p.user}else{let w=(c=Ut(d))!=null?c:void 0,p=yield e.embeddedWallet.createSolana({ethereumAccount:w});m=p.provider,f=p.user}let y=Te(f)[0];if(!y)throw new ie({code:"embedded_wallet_creation_error",error:"Unknown error creating solana wallet"});return(i=(l=r.current)==null?void 0:l.onSuccess)==null||i.call(l,m),t({status:"connected",publicKey:y.public_key}),o({status:"initial"}),m}catch(d){let a=d instanceof Error?d.message:"Error creating embedded wallet";throw t({status:"error",error:a}),o({status:"initial"}),new ie({code:"embedded_wallet_creation_error",error:a})}})}import{PrivyClientError as H}from"@privy-io/js-sdk-core";function ae(d){return v(this,arguments,function*({client:e,account:t,setWallet:r,recoverWalletCallbacks:o,recoveryMethod:s,setRecoveryFlowState:n,password:c,recoveryToken:l,recoverySecretOverride:i}){var a,u,m,f;if(!t)throw new H({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});switch(s){case"user-passcode":if(!c)throw new H({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!l)throw new H({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!i)throw new H({code:"embedded_wallet_recovery_error",error:"Record name is required for icloud recovery method"});break}r({status:"connecting",account:t});try{let y=yield e.embeddedWallet.getProvider(t,c,l,i);return r({status:"connected",provider:y,account:t}),n({status:"initial"}),(u=(a=o.current)==null?void 0:a.onSuccess)==null||u.call(a,y),y}catch(y){r({status:"needs-recovery",account:t}),n({status:"initial"});let w=new H({code:"embedded_wallet_recovery_error",error:y instanceof Error?y.message:"Error recovering embedded wallet"});throw(f=(m=o.current)==null?void 0:m.onError)==null||f.call(m,w),w}})}function je(l){return v(this,arguments,function*({client:e,account:t,entropyId:r,entropyIdVerifier:o,setSolanaWallet:s,recoverSolanaWalletCallbacks:n,setSolanaRecoveryFlowState:c}){var i,d,a,u;s({status:"connecting"});try{let m=yield e.embeddedWallet.getSolanaProvider(t,r,o);return s({status:"connected",publicKey:m._publicKey}),c({status:"initial"}),(d=(i=n.current)==null?void 0:i.onSuccess)==null||d.call(i,m),m}catch(m){s({status:"needs-recovery"}),c({status:"initial"});let f=new H({code:"embedded_wallet_recovery_error",error:m instanceof Error?m.message:"Error recovering embedded wallet"});throw(u=(a=n.current)==null?void 0:a.onError)==null||u.call(a,f),f}})}var se=e=>{if(e.chain_type==="ethereum")return{entropyId:e.address,entropyIdVerifier:"ethereum-address-verifier"};if(e.chain_type==="solana")return{entropyId:e.address,entropyIdVerifier:"solana-address-verifier"};throw new Error("Invalid embedded wallet account type")};var Ne=({client:e,user:t,solanaWallet:r,setSolanaWallet:o,setSolanaRecoveryFlowState:s,webViewState:n,createSolanaWalletCallbacks:c,recoverSolanaWalletCallbacks:l})=>{let i=we(()=>Mt(t),[t]),d=we(()=>{var y;return i.length===0?null:(y=Tt(t))!=null?y:Ft(t)},[t,i]),a=we(()=>{if(!d)return[];let{entropyId:y,entropyIdVerifier:w}=se(d);return i.map(p=>({address:p.address,publicKey:p.address,walletIndex:p.wallet_index,getProvider:()=>e.embeddedWallet.getSolanaProvider(p,y,w)}))},[i,d,e]),u=fe(y=>v(void 0,null,function*(){return yield Fe({client:e,setSolanaWallet:o,createSolanaWalletCallbacks:c,setSolanaRecoveryFlowState:s,opts:y})}),[e,c]),m=fe(()=>v(void 0,null,function*(){if(!d)throw new Z({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{entropyId:y,entropyIdVerifier:w}=se(d);return je({client:e,account:i[0],entropyId:y,entropyIdVerifier:w,setSolanaWallet:o,recoverSolanaWalletCallbacks:l,setSolanaRecoveryFlowState:s})}),[e,d,i,l,s,o]),f=fe(()=>v(void 0,null,function*(){if(!d)throw o({status:"not-created"}),new Z({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});o(y=>y.status==="connected"?{status:"reconnecting"}:{status:"connecting"});try{let{entropyId:y,entropyIdVerifier:w}=se(d),p=yield e.embeddedWallet.getSolanaProvider(i[0],y,w);return o({status:"connected",publicKey:i[0].public_key}),p}catch(y){throw Lt(y)?(o({status:"needs-recovery"}),new Z({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):y instanceof Error?(o({status:"error",error:y.message}),new Z({code:"unknown_embedded_wallet_error",error:y.message})):(o({status:"error",error:"Error loading embedded wallet"}),new Z({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,d]);return De(()=>{if(!t&&r.status!=="disconnected")return o({status:"disconnected"});n==="loaded"&&f().catch(()=>{})},[n,t,d]),De(()=>{r.status==="error"&&r.error.includes("User must be logged in")&&f()},[r.status]),{create:u,recover:m,getProvider:f,wallets:a}};import{useCallback as te,useEffect as Je,useMemo as Gt}from"react";import{getUserEmbeddedSolanaWallet as Ge,throwIfInvalidRecoveryUpgradePath as Yt}from"@privy-io/js-sdk-core";import{errorIndicatesRecoveryIsNeeded as Xt,getUserEmbeddedWallet as Qt,PrivyClientError as A}from"@privy-io/js-sdk-core";import{getUserEmbeddedWallet as jt}from"@privy-io/js-sdk-core";import{PrivyClientError as le}from"@privy-io/js-sdk-core";function de(a){return v(this,arguments,function*({client:e,setWallet:t,createWalletCallbacks:r,recoveryMethod:o,setRecoveryFlowState:s,password:n,recoveryToken:c,recoverySecretOverride:l,iCloudRecordNameOverride:i,solanaAccount:d}){var m,f;switch(o){case"user-passcode":if(!n)throw new le({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!c)throw new le({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!l||!i)throw new le({code:"embedded_wallet_recovery_error",error:"iCloud recovery failed due to inability to store credentials"});break}t({status:"creating",account:null});let u=o==="icloud"?"icloud-native":o;try{let{provider:y,user:w}=yield e.embeddedWallet.create(n,u,c,l,i,d),p=jt(w);return(f=(m=r.current)==null?void 0:m.onSuccess)==null||f.call(m,y),t({status:"connected",provider:y,account:p}),s({status:"initial"}),y}catch(y){let w=y instanceof Error?y.message:"Error creating embedded wallet";throw t({status:"error",error:w,account:null}),s({status:"initial"}),new le({code:"embedded_wallet_creation_error",error:w})}})}import{Platform as Ve}from"react-native";import{PrivyClientError as M}from"@privy-io/js-sdk-core";function Ke(){return v(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 he(o){return v(this,arguments,function*({user:e,appId:t,client:r}){var l;if(Ve.OS==="android")throw new M({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let s=yield Ke(),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:d}=yield s.writeRecoverySecretToICloud({containerId:n.container_identifier,appId:t,userId:e.id});return{recoverySecret:i,iCloudRecordName:d}}catch(i){if(i instanceof Error){let d=(l=i.message.split("Caused by: ")[1])!=null?l:"Error writing to iCloud";throw new M({code:"embedded_wallet_recovery_error",error:d})}throw new M({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}function qe(o){return v(this,arguments,function*({walletAddress:e,client:t,chainType:r}){var d;if(Ve.OS==="android")throw new M({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let s=yield Ke(),c=(yield t.recovery.getRecoveryKeyMaterial(e,r)).icloud_record_name;if(!c)throw new M({code:"embedded_wallet_recovery_error",error:"iCloud recovery not properly backed up."});let l=yield t.recovery.icloudAuth.getICloudConfiguration("expo-ios"),i=l==null?void 0:l.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:a}=yield s.readRecoverySecretFromICloud({containerId:i,recordName:c});return{recoverySecret:a}}catch(a){if(a instanceof Error){let u=(d=a.message.split("Caused by: ")[1])!=null?d:"Error writing to iCloud";throw new M({code:"embedded_wallet_recovery_error",error:u})}throw new M({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}import*as N from"expo-linking";import*as ze from"expo-web-browser";import{Platform as Be}from"react-native";import{PrivyClientError as z}from"@privy-io/js-sdk-core";import Dt from"react-fast-compare";var He=e=>t=>e(r=>Dt(r,t)?r:t);import{PrivyApiError as Nt,PrivyClientError as Vt}from"@privy-io/js-sdk-core";function x(e){return e instanceof Error||e instanceof Nt||e instanceof Vt?e:typeof e=="string"?new Error(e):new Error("Unknown error")}var co=e=>new Promise(t=>setTimeout(t,e));import{useEffect as Kt,useRef as qt}from"react";import{AppState as ge}from"react-native";function vo(){let e=qt(ge.currentState);Kt(()=>ge.addEventListener("change",o=>{e.current=o}).remove,[]);function t(){return ge.currentState}return{appState:e,getCurrentAppState:t}}function ee(s){return v(this,arguments,function*({provider:e,redirectUri:t,client:r,onError:o}){try{let n;switch(e){case"google-drive":{let{url:d}=yield r.recovery.auth.generateURL(N.createURL(t||"/"));n=d;break}default:throw new z({error:"OAuth invalid provider",code:"embedded_wallet_recovery_error"})}let c=yield ze.openAuthSessionAsync(n);if(Be.OS==="android")return;if(c.type!=="success")throw new z({error:"Recovery OAuth session failed",code:"embedded_wallet_recovery_error"});let{queryParams:l}=N.parse(c.url),i;switch(e){case"google-drive":{let{privy_oauth_state:d,privy_oauth_code:a}=l;if(!a||!d)throw new z({error:"Recovery OAuth invalid credentials",code:"embedded_wallet_recovery_error"});i=yield ce({oAuthCode:a,oAuthState:d,client:r});break}default:throw new z({error:"Recovery OAuth invalid provider",code:"embedded_wallet_recovery_error"})}return i}catch(n){throw o==null||o(x(n)),n}})}function ce(o){return v(this,arguments,function*({oAuthCode:e,oAuthState:t,client:r}){let{access_token:s}=yield r.recovery.auth.authorize(e,t);if(!s)throw new z({error:"OAuth invalid credentials",code:"login_with_oauth_returned_with_invalid_credentials"});return s})}var Ht=2*60*1e3;function zt(e){let t;return new Promise((r,o)=>{t=N.addEventListener("url",n=>v(this,[n],function*({url:s}){if(!s)return;let{queryParams:c}=N.parse(s),{privy_oauth_state:l,privy_oauth_code:i}=c!=null?c:{};if(typeof i!="string"||typeof l!="string")return;let d=yield ce({client:e,oAuthCode:i,oAuthState:l});r(d)})),setTimeout(()=>{o(new z({code:"embedded_wallet_set_recovery_error",error:"Failed to complete Google Drive recovery flow"}))},Ht)}).finally(()=>{t==null||t.remove()})}function Ao(e){return v(this,null,function*(){let t;Be.OS==="android"&&(t=zt(e));let r=yield ee({provider:"google-drive",client:e});return r!=null?r:yield t})}import{getUserEmbeddedWallet as Bt,PrivyClientError as Jt}from"@privy-io/js-sdk-core";function ue(n){return v(this,arguments,function*({client:e,recoveryInput:t,setWalletRecoveryCallbacks:r,setRecoveryFlowState:o,setWallet:s}){var c,l,i,d;try{let{provider:a,user:u}=yield e.embeddedWallet.setRecovery(t),m=a,f=Bt(u);return s({status:"connected",provider:m,account:f}),(l=(c=r.current)==null?void 0:c.onSuccess)==null||l.call(c,m),o({status:"initial"}),m}catch(a){let u=new Jt({code:"embedded_wallet_set_recovery_error",error:a instanceof Error?a.message:"Error setting password on embedded wallet"});throw(d=(i=r.current)==null?void 0:i.onError)==null||d.call(i,u),o({status:"initial"}),u}})}function Ye(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 Xe=({client:e,user:t,appId:r,wallet:o,setWallet:s,setRecoveryFlowState:n,webViewState:c,createWalletCallbacks:l,recoverWalletCallbacks:i,setWalletRecoveryCallbacks:d})=>{let a=Gt(()=>Qt(t),[t]),u=te(p=>v(void 0,null,function*(){var R,q;if(a)throw new A({error:"This user already has an embedded wallet",code:"embedded_wallet_already_exists"});let{user:_}=yield e.user.get(),{password:g,recoveryMethod:h}=Ye(p),b,S,W;if(h==="google-drive"&&(b=yield ee({provider:h,client:e,onError:(R=l.current)==null?void 0:R.onError}),n({status:"creating-wallet"}),!b))return null;if(h==="icloud"){if(!_)throw new A({code:"embedded_wallet_recovery_error",error:"User must be loaded before creating a wallet with iCloud."});let{recoverySecret:T,iCloudRecordName:D}=yield he({user:_,appId:r,client:e});S=T,W=D}return yield de({client:e,setWallet:s,createWalletCallbacks:l,recoveryMethod:h,setRecoveryFlowState:n,password:g,recoverySecretOverride:S,iCloudRecordNameOverride:W,solanaAccount:(q=Ge(_))!=null?q:void 0})}),[e,a,t]),m=te(p=>v(void 0,null,function*(){var h;if(o.status!=="connected")throw new A({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"});if(!a)throw new A({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});if(Ge(t))throw new A({code:"embedded_wallet_set_recovery_error",error:"Cannot set user-controlled recovery for a user with an embedded Solana wallet."});Yt({currentRecoveryMethod:a.recovery_method,upgradeToRecoveryMethod:p.recoveryMethod});let _,g;switch(p.recoveryMethod){case"privy":g=O(E({},p),{wallet:a});break;case"user-passcode":g=O(E({},p),{wallet:a,password:p.password});break;case"google-drive":if(_=yield ee({provider:p.recoveryMethod,client:e,onError:(h=d.current)==null?void 0:h.onError}),n({status:"upgrading-recovery"}),!_)return null;g={recoveryMethod:"google-drive",wallet:a,recoveryAccessToken:_};break;case"icloud":if(!t)throw new A({code:"embedded_wallet_recovery_error",error:"User must be loaded before backing up to iCloud."});let{recoverySecret:b,iCloudRecordName:S}=yield he({user:t,appId:r,client:e});g={recoveryMethod:"icloud-native",recoverySecretOverride:b,iCloudRecordNameOverride:S,wallet:a};break;default:throw new A({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}return ue({client:e,recoveryInput:g,setWalletRecoveryCallbacks:d,setRecoveryFlowState:n,setWallet:s})}),[e,a,o.status,t]),f=te(p=>v(void 0,null,function*(){return m({recoveryMethod:"user-passcode",password:p})}),[e,a,o.status]),y=te(p=>v(void 0,null,function*(){var S;if(!a)throw new A({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{password:_,recoveryMethod:g}=Ye(p),h,b;if(g==="google-drive"&&(h=yield ee({provider:g,client:e,onError:(S=i.current)==null?void 0:S.onError}),n({status:"recovering"}),!h))return null;if(g==="icloud"){if(!t)throw new A({code:"embedded_wallet_recovery_error",error:"User must be loaded before recovering via iCloud."});let{recoverySecret:W}=yield qe({client:e,walletAddress:a.address});b=W}return ae({client:e,account:a,setWallet:s,recoverWalletCallbacks:i,recoveryMethod:g,setRecoveryFlowState:n,password:_,recoveryToken:h,recoverySecretOverride:b})}),[e,a]),w=te(()=>v(void 0,null,function*(){if(!a)throw s({status:"not-created",account:null}),new A({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});s(p=>p.status==="connected"?{status:"reconnecting",account:a}:{status:"connecting",account:a});try{let p=yield e.embeddedWallet.getProvider(a);return s({status:"connected",provider:p,account:a}),p}catch(p){throw Xt(p)?(s({status:"needs-recovery",account:a}),new A({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):p instanceof Error?(s({status:"error",error:p.message,account:a}),new A({code:"unknown_embedded_wallet_error",error:p.message})):(s({status:"error",error:"Error loading embedded wallet",account:a}),new A({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,a]);return Je(()=>{if(!t&&o.status!=="disconnected")return s({status:"disconnected",account:null});c==="loaded"&&w().catch(()=>{})},[c,t,a]),Je(()=>{o.status==="error"&&o.error.includes("User must be logged in")&&w()},[o.status]),{create:u,recover:y,setPassword:f,setRecovery:m,getProvider:w}};import{useEffect as $t,useState as Zt}from"react";import{PrivyClientError as Qe}from"@privy-io/js-sdk-core";var $e=({client:e,user:t,isReady:r,customAuth:o})=>{let[s,n]=Zt({status:"initial"});return $t(()=>{(()=>v(void 0,null,function*(){if(!(o!=null&&o.enabled)){n({status:"not-enabled"});return}n({status:"loading"});let{getCustomAccessToken:l,isLoading:i}=o;if(!(!r||i))try{let d=yield l();if(!d&&t){yield e.auth.logout(),n({status:"done"});return}if(!d){n({status:"done"});return}if(t){n({status:"done"});return}if(!(yield e.auth.customProvider.syncWithToken(d))){yield e.auth.logout(),n({status:"error",error:new Qe({error:"Failed to sync with custom auth provider",code:"third_party_auth_error"})});return}n({status:"done"})}catch(d){if(console.log("Error syncing with custom auth provider",d),n({status:"error",error:d}),t)throw yield e.auth.logout(),new Qe({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:s,customAuthStateIsSettled:s.status!=="loading"&&s.status!=="initial"}};import*as B from"expo-linking";import{useCallback as er,useEffect as tr}from"react";import{Platform as rr}from"react-native";var Ze=({client:e,user:t,isUserInitialized:r,oAuthState:o,oAuthCallbacks:s,setOAuthState:n,recoveryFlowState:c,oAuthStateRef:l})=>{let i=B.useURL(),d=er(a=>{var m,f;let u=x(a);n({status:"error",error:u}),(f=(m=s.current).onError)==null||f.call(m,u)},[n]);return tr(()=>{function a(){return v(this,null,function*(){var y,w;if(!i||o.status!=="loading"||c.status!=="initial")return;let{queryParams:u}=B.parse(i),{privy_oauth_state:m,privy_oauth_code:f}=u;if(!f||!m){n({status:"done"});return}try{let p,_;if(t)p=yield e.auth.oauth.linkWithCode(f,m);else{let g=yield e.auth.oauth.loginWithCode(f,m,void 0,void 0,l.current.disableSignup?"no-signup":"login-or-sign-up");p=g.user,_=!!g.is_new_user}return(w=(y=s.current).onSuccess)==null||w.call(y,p,_),l.current={},n({status:"done"}),yield B.openURL(i.split("?")[0])}catch(p){l.current={},d(p)}})}rr.OS==="android"&&r&&a()},[i,r])};import*as J from"expo-linking";import{useCallback as or,useEffect as nr,useMemo as ir}from"react";import{Platform as ar}from"react-native";import{getUserEmbeddedSolanaWallet as sr,getUserEmbeddedWallet as lr}from"@privy-io/js-sdk-core";var et=({client:e,user:t,createWalletCallbacks:r,recoverWalletCallbacks:o,setWalletRecoveryCallbacks:s,recoveryFlowState:n,oAuthState:c,setRecoveryFlowState:l,setWallet:i,appStateVisible:d,webViewLoaded:a})=>{let u=J.useURL(),m=ir(()=>lr(t),[t]),f=or(y=>{var p,_,g,h;let w=x(y);n.status==="creating-wallet"?(_=(p=r.current).onError)==null||_.call(p,x(w)):(h=(g=o.current).onError)==null||h.call(g,x(w)),l({status:"initial"})},[n]);return nr(()=>{function y(){return v(this,null,function*(){var g;if(!u&&n.status!=="initial"&&d&&f(new Error("Recovery OAuth session failed")),!u||n.status==="initial"||c.status!=="initial"||!d||!a)return;let{queryParams:w}=J.parse(u),{privy_oauth_state:p,privy_oauth_code:_}=w;if(!(!_||!p)){yield J.openURL(u.split("?")[0]);try{let h=yield ce({oAuthCode:_,oAuthState:p,client:e});if(n.status==="creating-wallet"){let b=(g=sr(t))!=null?g:void 0;yield de({client:e,setWallet:i,createWalletCallbacks:r,recoveryMethod:"google-drive",setRecoveryFlowState:l,recoveryToken:h,solanaAccount:b})}else if(n.status==="upgrading-recovery"){if(!m)throw new Error("Embedded wallet not found");yield ue({client:e,recoveryInput:{recoveryMethod:"google-drive",wallet:m,recoveryAccessToken:h},setWalletRecoveryCallbacks:s,setRecoveryFlowState:l,setWallet:i})}else yield ae({client:e,account:m,setWallet:i,recoverWalletCallbacks:o,recoveryMethod:"google-drive",setRecoveryFlowState:l,recoveryToken:h})}catch(h){f(h)}}})}ar.OS==="android"&&y()},[u,n.status,d,a])};import{useEffect as dr}from"react";var tt=({client:e,isUserInitialized:t,setIsUserInitialized:r,setError:o})=>{dr(()=>{t||(()=>v(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{useEffect as ur}from"react";import{create as pr}from"zustand";var P=class extends Error{constructor(r,o){super(o);this.code=r,this.error=o}},rt=class extends P{constructor(r){super("underlying_error",r instanceof Error?r.message:"An underlying error occurred");this.wrappedError=r}};var be={success:e=>({value:e}),error:e=>({error:e})};var ot=e=>{let t=Array.from(new Set(e));return t.length===0?be.error(new P("no_login_methods_available","No login methods available")):be.success(t)},_e=e=>{let t=e.length,r=e.every(o=>o==="sms"||o==="email");return t<=2&&r?e[0]:null},vn=(e,t)=>{if(e.length!==2)return null;let[r,o]=e;return t===r?o:r},fn={email:"email",sms:"phone",google:"Google",apple:"Apple",discord:"Discord",twitter:"X",github:"Github",spotify:"Spotify",instagram:"Instagram",tiktok:"Tiktok",linkedin:"LinkedIn"};function nt(e){return new Promise((t,r)=>{e({resolve:t,reject:r})})}function cr(e,t){return{resolve:r=>{t(),e.resolve(r)},reject:r=>{t(),e.reject(r)}}}function it(e,t,r){let o=setTimeout(()=>{e.reject(t())},r);return cr(e,()=>{clearTimeout(o)})}var mr=1e3*60*5,F=pr()((e,t)=>({privyElementsConfig:null,loginPromiseResolvers:null,isUIMounted:!1,activeLoginMethod:null,updateUIMounted:r=>e({isUIMounted:r}),openLoginFlow:(r,o,s,n)=>nt(c=>{var u,m,f;let l=o.app.getConfig();if(!l)return c.reject(new P("privy_not_ready","Privy is not ready"));if(s!==null)return c.reject(new P("user_already_logged_in","User is already logged in"));if(!t().isUIMounted)return c.reject(new P("privy_elements_not_ready","Privy Elements is not mounted"));if(t().loginPromiseResolvers!==null)return c.reject(new P("existing_login_flow_in_progress","A login flow is already in progress"));let i=ot(r.loginMethods);if(i.error)return c.reject(i.error);let d={loginMethods:i.value,appearance:{logo:(f=(m=(u=r.appearance)==null?void 0:u.logo)!=null?m:l.logo_url)!=null?f:void 0}},a=it(c,()=>(e({privyElementsConfig:null,loginPromiseResolvers:null}),new P("login_flow_timeout","The login flow timed out")),mr);n(),e({loginPromiseResolvers:a,privyElementsConfig:d,activeLoginMethod:_e(d.loginMethods)})}),closeLoginFlow:()=>{var r;return(r=t().loginPromiseResolvers)==null||r.reject(new P("login_flow_closed","The login flow was closed")),e({privyElementsConfig:null,loginPromiseResolvers:null})},goBack:()=>{let{activeLoginMethod:r,privyElementsConfig:o,updateActiveLoginMethod:s,closeLoginFlow:n}=t();if(!o){n();return}let c=_e(o.loginMethods)===null;r===null||!c?n():s(null)},updateActiveLoginMethod:r=>e({activeLoginMethod:r})})),kn=()=>{let e=F(r=>r.privyElementsConfig);return F(r=>r.isUIMounted)?e:null},Cn=()=>F(e=>e.openLoginFlow),An=()=>F(e=>e.closeLoginFlow),Pn=()=>F(e=>e.goBack),Rn=()=>F(e=>[e.activeLoginMethod,e.updateActiveLoginMethod]),yr=e=>{let{loginPromiseResolvers:t}=F.getState();t==null||t.resolve(e)},at=()=>yr,Wn=()=>{let e=F(t=>t.updateUIMounted);ur(()=>(e(!0),()=>{e(!1)}),[e])};var Se=wr({}),K;function Bn(e){return K?K.getAccessToken():e!=null&&e.strict?Promise.reject(new _r({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 Jn=e=>{var We;let[t,r]=k(st.currentState==="active");hr(()=>{let L=st.addEventListener("change",Et=>{r(Et==="active")});return()=>{L.remove()}},[]);let[o,s]=k(!1),[n,c]=k(null),[l,i]=k("loading"),[d,a]=k(!1),[u,m]=k(null),[f,y]=k({status:"disconnected",account:null}),[w,p]=k({status:"disconnected"}),[_,g]=k({status:"initial"}),[h,b]=k({status:"initial"}),S=V({}),[W,R]=k({status:"initial"}),[q,T]=k({status:"initial"}),[D,Y]=k({status:"initial"}),[X,Q]=k({status:"initial"}),[U,vt]=k({status:"initial"}),Ae=V({}),me=V({}),ye=V({}),ve=V({}),Pe=V({}),Re=V({}),ft=at(),$=pe(L=>{if(L){ft(L),He(m)(L);return}m(null),g({status:"initial"}),b({status:"initial"}),y({status:"disconnected",account:null})},[]),C=fr(()=>{let L=e.storage||ut;return e.client?(K=e.client,K.setCallbacks({setUser:$,setIsReady:a}),K):(K=new br({storage:ct(L),appId:e.appId,clientId:e.clientId,supportedChains:e.supportedChains,nativeAppIdentifier:dt(),baseUrl:e.baseUrl,sdkVersion:`expo:${Ue.version}`,callbacks:{setUser:$,setIsReady:a},logLevel:e.logLevel,crypto:{digest:vr}}),K)},[e.client,e.storage,e.appId,e.clientId,e.baseUrl,e.supportedChains,e.logLevel,$]),wt=pe(()=>($(null),C.auth.logout()),[$,C]),ht=pe(()=>v(void 0,null,function*(){try{return yield C.getAccessToken()}catch(L){return console.debug(L),null}}),[C]),gt=pe(()=>C.getIdentityToken(),[C]);tt({client:C,isUserInitialized:o,setIsUserInitialized:s,setError:c});let bt=Xe({client:C,user:u,appId:e.appId,webViewState:l,createWalletCallbacks:me,recoverWalletCallbacks:ye,setWalletRecoveryCallbacks:ve,setRecoveryFlowState:R,wallet:f,setWallet:y}),_t=Ne({client:C,user:u,webViewState:l,createSolanaWalletCallbacks:Pe,recoverSolanaWalletCallbacks:Re,setSolanaRecoveryFlowState:T,solanaWallet:w,setSolanaWallet:p});Ze({client:C,isUserInitialized:o,user:u,oAuthState:h,setOAuthState:b,oAuthCallbacks:Ae,recoveryFlowState:W,oAuthStateRef:S}),et({client:C,user:u,webViewLoaded:l==="loaded",createWalletCallbacks:me,recoverWalletCallbacks:ye,setWalletRecoveryCallbacks:ve,recoveryFlowState:W,oAuthState:h,setRecoveryFlowState:R,setWallet:y,appStateVisible:t});let{customAuthStateIsSettled:St}=$e({client:C,user:u,isReady:o,customAuth:(We=e.config)==null?void 0:We.customAuth});return re.createElement(re.Fragment,null,re.createElement(Se.Provider,{value:{client:C,user:u,isReady:l!=="loading"&&o&&lt(h)&&St,error:n,logout:wt,getAccessToken:ht,getIdentityToken:gt,wallet:E(E({},f),bt),solanaWallet:E(E({},w),_t),oAuthState:h,oAuthCallbacks:Ae,recoveryFlowState:W,setRecoveryFlowState:R,solanaRecoveryFlowState:q,setSolanaRecoveryFlowState:T,createWalletCallbacks:me,recoverWalletCallbacks:ye,setWalletRecoveryCallbacks:ve,createSolanaWalletCallbacks:Pe,recoverSolanaWalletCallbacks:Re,setOAuthState:b,siweState:D,setSiweState:Y,otpState:_,setOtpState:g,passkeyState:X,setPasskeyState:Q,farcasterState:U,setFarcasterState:vt,oAuthStateRef:S}},e.children),re.createElement(gr,{style:{width:0,height:0,overflow:"hidden"}},re.createElement(Me,{logLevel:e.logLevel,client:C,isClientReady:d,setWebViewState:i,webViewState:l})))};var lt=e=>e.status!=="loading",ke=(e={})=>{let{user:t,oAuthState:r,setOAuthState:o,oAuthCallbacks:s,client:n,oAuthStateRef:c}=Sr(Se),l=e.action?e.action==="login":!t;Er(()=>{s.current={onSuccess:e.onSuccess,onError:e.onError}},[e.onSuccess,e.onError]);let i=mt(a=>{var m;let u=x(a);return o({status:"error",error:u}),(m=e==null?void 0:e.onError)==null||m.call(e,u),u},[e==null?void 0:e.onError]);return{start:mt(function(w){return v(this,arguments,function*({provider:u,redirectUri:m,isLegacyAppleIosBehaviorEnabled:f=!1,disableSignup:y}){var p,_,g;o({status:"loading"}),c.current={disableSignup:y};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:h}=yield n.auth.oauth.generateURL(u,G.createURL(m||"/")),b,S;if(Ee.OS==="ios"&&u==="apple"&&!f){let X=(p=new URL(h).searchParams.get("state"))!=null?p:"",Q=yield yt.signInAsync({state:X}).catch(U=>{throw U instanceof Error&&"code"in U&&U.code==="ERR_REQUEST_CANCELED"?new j({error:"Apple login was cancelled",code:l?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):U});if(!Q.authorizationCode)throw new j({error:"OAuth invalid credentials",code:l?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(l){let U=yield n.auth.oauth.loginWithCode(Q.authorizationCode,X,u,"raw",y?"no-signup":"login-or-sign-up");b=U.user,S=U.is_new_user}else b=yield n.auth.oauth.linkWithCode(Q.authorizationCode,X,u,"raw");return(_=e==null?void 0:e.onSuccess)==null||_.call(e,b,S),o({status:"done"}),b!=null?b:void 0}let W=Ee.OS==="android"?h.replace("x.com","twitter.com"):h,R=yield oe.openAuthSessionAsync(W);if(Ee.OS==="android")return;if(R.type!=="success")throw[oe.WebBrowserResultType.CANCEL,oe.WebBrowserResultType.DISMISS].includes(R.type)?new j({error:"OAuth was cancelled",code:l?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):new j({error:"OAuth session failed",code:l?"failed_to_complete_login_with_oauth":"failed_to_complete_link_with_oauth"});let{queryParams:q}=G.parse(R.url),{privy_oauth_state:T,privy_oauth_code:D}=q;if(!D||!T)throw new j({error:"OAuth invalid credentials",code:l?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(l){let Y=yield n.auth.oauth.loginWithCode(D,T,u,void 0,y?"no-signup":"login-or-sign-up");b=Y.user,S=Y.is_new_user}else b=yield n.auth.oauth.linkWithCode(D,T,u);return(g=e==null?void 0:e.onSuccess)==null||g.call(e,b,S),yield G.openURL(R.url.split("?")[0]),o({status:"done"}),b!=null?b:void 0}catch(h){i(h)}})},[t,n,o,i]),state:r}};function ri(e){let{state:t,start:r}=ke(O(E({},e),{action:"login"}));return{state:t,login:r}}function oi(e){let{state:t,start:r}=ke(O(E({},e),{action:"link"}));return{state:t,link:r}}function ni(e){return ke(e)}var dt=()=>{if(typeof pt!="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 pt};function ct(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:()=>v(this,null,function*(){return[]})}}var ut={get(e){return I.getItemAsync(e,{keychainAccessible:I.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},put(e,t){return I.setItemAsync(e,t,{keychainAccessible:I.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},del(e){return I.deleteItemAsync(e,{keychainAccessible:I.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},getKeys:()=>v(void 0,null,function*(){return[]})};import{PrivyClientError as kr}from"@privy-io/js-sdk-core";var Cr=e=>v(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 kr({code:"failed_to_create_passkey",error:"Could not create passkey"});return O(E({},r),{type:(o=r.type)!=null?o:"public-key",clientExtensionResults:{}})});import{PrivyClientError as Ar}from"@privy-io/js-sdk-core";var Pr=e=>v(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 Ar({code:"no_passkey_found_for_challenge",error:"Could not find a matching passkey to login with"});return O(E({},r),{type:(o=r.type)!=null?o:"public-key",clientExtensionResults:{}})});function hi(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 gi(e){var t,r,o,s;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:(s=e.allow_credentials)==null?void 0:s.map(({id:n,type:c,transports:l})=>({id:n,type:c,transports:l})),userVerification:e.user_verification}}export{E as a,O as b,Rr as c,v as d,Ue as e,se as f,he as g,qe as h,x as i,co as j,vo as k,Ao as l,ri as m,oi as n,ni as o,dt as p,ct as q,ut as r,P as s,rt as t,vn as u,fn as v,nt as w,it as x,kn as y,Cn as z,An as A,Pn as B,Rn as C,Wn as D,Se as E,Bn as F,Jn as G,Cr as H,Pr as I,hi as J,gi as K};