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