@privy-io/expo
Version:
Expo client for the Privy Auth API
1 lines • 81.8 kB
JavaScript
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var _chunkOWCFWPALjs = require('./chunk-OWCFWPAL.js');var _react = require('react'); var _react2 = _interopRequireDefault(_react);var _zustand = require('zustand');var mr=_zustand.create.call(void 0, ()=>({status:"disconnected"})),ye=()=>mr.getState().onNeedsRecovery,Mt= exports.f =e=>{_react.useEffect.call(void 0, ()=>{mr.setState({onNeedsRecovery:e==null?void 0:e.onNeedsRecovery})},[e==null?void 0:e.onNeedsRecovery])};var _expoapplication = require('expo-application');var _exposecurestore = require('expo-secure-store'); var L = _interopRequireWildcard(_exposecurestore); var F = _interopRequireWildcard(_exposecurestore);var _jssdkcore = require('@privy-io/js-sdk-core'); var _jssdkcore2 = _interopRequireDefault(_jssdkcore);var yr=()=>{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 fr(e){return{get(r){return e.get(r.replaceAll(":","-"))},put(r,t){return e.put(r.replaceAll(":","-"),t)},del(r){return e.del(r.replaceAll(":","-"))},getKeys:()=>_chunkOWCFWPALjs.d.call(void 0, this,null,function*(){return[]})}}var fe={get(e){return L.getItemAsync(e,{keychainAccessible:L.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},put(e,r){return L.setItemAsync(e,r,{keychainAccessible:L.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},del(e){return L.deleteItemAsync(e,{keychainAccessible:L.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},getKeys:()=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){return[]})};var _expocrypto = require('expo-crypto');var gr={name:"@privy-io/expo",version:"0.58.2",description:"Expo client for the Privy Auth API",keywords:["authentication","authorization","identity","privacy","privy","user data","react-native","expo","web3"],homepage:"https://docs.privy.io",bugs:{url:"https://privy.io/slack"},license:"Apache-2.0",author:"privy.io",exports:{".":{require:"./dist/index.js",import:"./dist/esm/index.js",types:"./dist/index.d.ts"},"./passkey":{require:"./dist/passkey.js",import:"./dist/esm/passkey.js",types:"./dist/passkey.d.ts"},"./smart-wallets":{require:"./dist/smart-wallets.js",import:"./dist/esm/smart-wallets.js",types:"./dist/smart-wallets.d.ts"},"./extended-chains":{require:"./dist/extended-chains.js",import:"./dist/esm/extended-chains.js",types:"./dist/extended-chains.d.ts"},"./ui":{require:"./dist/ui.js",import:"./dist/esm/ui.js",types:"./dist/ui.d.ts"},"./connectors":{require:"./dist/connectors.js",import:"./dist/esm/connectors.js",types:"./dist/connectors.d.ts"}},main:"./dist/esm/index.js",source:"./src/index.ts",types:"./dist/index.d.ts",files:["dist/**/*","LICENSE","README.md"],scripts:{build:"tsup --clean --minify","check-types":"tsc --noEmit",clean:"rm -rf dist .turbo",dev:"tsup --watch",format:'eslint "src/**/*.{ts,tsx,js,jsx}" --fix',"generate-types":"tsup --dts-only",lint:'eslint "src/**/*.{ts,tsx,js,jsx}"',test:"jest"},browserslist:["defaults","node >= 18","not op_mini all"],dependencies:{"@privy-io/js-sdk-core":"0.53.3","@scure/base":"^1.2.4",tweetnacl:"^1.0.3","react-fast-compare":"^3.2.2",zustand:"^5.0.4"},devDependencies:{"@privy-io/eslint-config-custom":"*","@privy-io/eslint-plugin-privy-rules":"*","@privy-io/tsconfig":"*","@simplewebauthn/types":"9.0.1","@solana/web3.js":"^1.98.0","@svgr/core":"^8.1.0","@svgr/plugin-jsx":"^8.1.0","@svgr/plugin-svgo":"^8.1.0","@testing-library/react-native":"^13.1.0","@tsconfig/node16-strictest-esm":"^1.0.3","@types/jest":"^29.1.2",buffer:"^5.4.3","eslint-plugin-react-hooks":"^5.0.0-canary-7118f5dd7-20230705",expo:"52.0.37","expo-apple-authentication":"7.1.3","expo-application":"6.0.2","expo-clipboard":"7.0.1","expo-crypto":"14.0.2",jest:"^29.7.0","jest-expo":"52.0.5","lucide-react-native":"^0.474.0",react:"^18.3.1","react-native":"0.77.1","react-test-renderer":"^18.3.1",tsup:"^6.2.3",typescript:"~5.5.3"},peerDependencies:{"@expo-google-fonts/inter":"*","@privy-io/expo-native-extensions":"0.0.5","expo-apple-authentication":"*","expo-application":"*","expo-clipboard":"*","expo-crypto":"*","expo-font":"*","expo-linking":"*","expo-secure-store":"*","expo-web-browser":"*",permissionless:"^0.2.47",react:"*","react-native":"*","react-native-passkeys":"^0.3.0","react-native-qrcode-styled":"*","react-native-safe-area-context":"*","react-native-svg":"*","react-native-webview":"*",viem:"^2.32.0"},peerDependenciesMeta:{"@expo-google-fonts/inter":{optional:!0},"expo-font":{optional:!0},permissionless:{optional:!0},viem:{optional:!0},"react-native-svg":{optional:!0},"expo-clipboard":{optional:!0},"react-native-qrcode-styled":{optional:!0},"react-native-safe-area-context":{optional:!0}},publishConfig:{access:"public"}};var hr=({appId:e,clientId:r,storage:t=fe,supportedChains:n,baseUrl:i,logLevel:o})=>new (0, _jssdkcore2.default)({appId:e,clientId:r,supportedChains:n,storage:fr(t),sdkVersion:`expo:${gr.version}`,nativeAppIdentifier:yr(),crypto:{digest:_expocrypto.digest},baseUrl:i,logLevel:o});var _reactnative = require('react-native');var _reactfastcompare = require('react-fast-compare'); var _reactfastcompare2 = _interopRequireDefault(_reactfastcompare);var ge=_zustand.create.call(void 0, ()=>{}),vr=e=>ge.setState(r=>_reactfastcompare2.default.call(void 0, r,e)?r:e),x= exports.a =ge.getState;var _reactnativewebview = require('react-native-webview'); var _reactnativewebview2 = _interopRequireDefault(_reactnativewebview);function wr(e){return typeof e!="object"||e===null||!("event"in e&&typeof e.event=="string")||!("id"in e&&typeof e.id=="string")||!("data"in e&&typeof e.data=="object")||e.data===null?!1:e.event.startsWith("app:secure-storage:")}function br(e){return _chunkOWCFWPALjs.d.call(void 0, this,null,function*(){switch(e.event){case"app:secure-storage:get":{let{key:r}=e.data,t=yield F.getItemAsync(Oe(r),{keychainAccessible:F.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY}).catch(n=>(console.warn("Failed to get the value from secure store",n),null));return{event:e.event,id:e.id,data:{value:t}}}case"app:secure-storage:remove":{let{key:r}=e.data,t=yield F.deleteItemAsync(Oe(r),{keychainAccessible:F.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY}).then(()=>!0).catch(n=>(console.warn("Failed to remove the value from secure store",n),!1));return{event:e.event,id:e.id,data:{success:t}}}case"app:secure-storage:set":{let{key:r,value:t}=e.data,n=yield F.setItemAsync(Oe(r),t,{keychainAccessible:F.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY}).then(()=>!0).catch(i=>(console.warn("Failed to write the value to secure store",i),!1));return{event:e.event,id:e.id,data:{success:n}}}}})}var Oe=e=>e.replaceAll(":","-");var V=_zustand.createStore.call(void 0, )(()=>({user:null,proxyStatus:"loading"}));function b(){return V.getState().user}var Yi=V.subscribe.bind(V);function Le(e){V.setState(({user:r})=>_reactfastcompare2.default.call(void 0, r,e)?{}:{user:e})}var Fe=e=>V.setState({proxyStatus:e});function A(){return _zustand.useStore.call(void 0, V,e=>e.user)}function $i(){return _zustand.useStore.call(void 0, V,e=>!!e.user)}function K(){return _zustand.useStore.call(void 0, V,e=>e.proxyStatus!=="loading")}var Yt={shouldUseAppBackedStorage:!0},Sr=({client:e,isClientReady:r})=>{let t=_react.useRef.call(void 0, null);_react.useEffect.call(void 0, ()=>_reactnative.AppState.addEventListener("change",o=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){o==="active"&&((yield e.embeddedWallet.ping(500))||(Fe("reloading"),e.embeddedWallet.reload()))})).remove,[e]);let n=_react.useCallback.call(void 0, i=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){var s;let{data:o}=i.nativeEvent,a=JSON.parse(o);if(wr(a)){let l=yield br(a);(s=t.current)==null||s.postMessage(JSON.stringify(l));return}e.embeddedWallet.onMessage(a)}),[e]);return r?_react2.default.createElement(_reactnativewebview2.default,{style:{flex:1},ref:i=>{i&&(e.setMessagePoster(i),t.current=i)},cacheEnabled:!1,cacheMode:"LOAD_NO_CACHE",injectedJavaScriptObject:Yt,source:{uri:e.embeddedWallet.getURL()},webviewDebuggingEnabled:e.logger.level==="DEBUG",onLoad:()=>Fe("loaded"),onError:console.error,onMessage:n}):null};function Er(o){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({client:e,setSolanaWallet:r,createSolanaWalletCallbacks:t,setSolanaRecoveryFlowState:n,opts:i}){var a,s,l;r({status:"creating"});try{let{user:c}=yield e.user.get(),u=_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, c),m=u[0],p=(a=_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, c))!=null?a:void 0;if(i!=null&&i.recoveryMethod&&i.recoveryMethod!=="privy")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Unsupported recovery method for solana wallet."});if(!(i!=null&&i.createAdditional)&&m)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Solana wallet already exists for this user. Set `createAdditional` to `true` to create another wallet"});let v,g;if(m){let y=p!=null?p:m,{entropyId:h,entropyIdVerifier:S}=_jssdkcore.getEntropyDetailsFromAccount.call(void 0, y),E=Math.max(...u.map(P=>P.wallet_index),0)+1,C=yield e.embeddedWallet.add({chainType:"solana",entropyId:h,entropyIdVerifier:S,hdWalletIndex:E}),k=_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, C.user).find(P=>P.wallet_index===E);if(!k)throw new (0, _jssdkcore.PrivyClientError)({error:"Embedded wallet account not created",code:"embedded_wallet_creation_error"});v=yield e.embeddedWallet.getSolanaProvider(k,h,S),g=C.user}else{let y=yield e.embeddedWallet.createSolana({ethereumAccount:p}),h=_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, y.user).find(k=>k.wallet_index===0);if(!h)throw new (0, _jssdkcore.PrivyClientError)({error:"Embedded wallet account not created",code:"embedded_wallet_creation_error"});let S=p!=null?p:h,{entropyId:E,entropyIdVerifier:C}=_jssdkcore.getEntropyDetailsFromAccount.call(void 0, S);v=yield e.embeddedWallet.getSolanaProvider(h,E,C),g=y.user}let w=_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, g)[0];if(!w)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Unknown error creating solana wallet"});return(l=(s=t.current)==null?void 0:s.onSuccess)==null||l.call(s,v),r({status:"connected",publicKey:w.public_key}),n({status:"initial"}),v}catch(c){let u=c instanceof Error?c.message:"Error creating embedded wallet";throw r({status:"error",error:u}),n({status:"initial"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:u})}})}function ve(u){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({client:e,account:r,setWallet:t,recoverWalletCallbacks:n,recoveryMethod:i,setRecoveryFlowState:o,password:a,recoveryKey:s,recoveryToken:l,recoverySecretOverride:c}){var m,p,v,g;if(!r)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});switch(i){case"user-passcode":if(!a)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!l)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!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}t({status:"connecting",account:r});try{let w=yield e.embeddedWallet.getProvider(r,a,l,c,s);return t({status:"connected",provider:w,account:r}),o({status:"initial"}),(p=(m=n.current)==null?void 0:m.onSuccess)==null||p.call(m,w),w}catch(w){t({status:"needs-recovery",account:r}),o({status:"initial"});let y=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:w instanceof Error?w.message:"Error recovering embedded wallet"});throw(g=(v=n.current)==null?void 0:v.onError)==null||g.call(v,y),y}})}function Cr(s){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({client:e,account:r,entropyId:t,entropyIdVerifier:n,setSolanaWallet:i,recoverSolanaWalletCallbacks:o,setSolanaRecoveryFlowState:a}){var l,c,u,m;i({status:"connecting"});try{let p=yield e.embeddedWallet.getSolanaProvider(r,t,n);return i({status:"connected",publicKey:p._publicKey}),a({status:"initial"}),(c=(l=o.current)==null?void 0:l.onSuccess)==null||c.call(l,p),p}catch(p){i({status:"needs-recovery"}),a({status:"initial"});let v=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:p instanceof Error?p.message:"Error recovering embedded wallet"});throw(m=(u=o.current)==null?void 0:u.onError)==null||m.call(u,v),v}})}var Wr=({client:e,solanaWallet:r,setSolanaWallet:t,setSolanaRecoveryFlowState:n,createSolanaWalletCallbacks:i,recoverSolanaWalletCallbacks:o})=>{let a=A(),s=_react.useMemo.call(void 0, ()=>_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, a),[a]),l=K(),c=_react.useMemo.call(void 0, ()=>s.length===0?null:_jssdkcore.getEntropyDetailsFromUser.call(void 0, a),[a,s]),u=_react.useMemo.call(void 0, ()=>{let g=s.map(S=>{let E=_jssdkcore.getEntropyDetailsFromUser.call(void 0, a,S);return E?{account:S,entropy:E}:null});if(g.some(S=>S===null))return[];let w=void 0,y=void 0,h=void 0;return g.filter(S=>S!==null).map(({account:S,entropy:{entropyId:E,entropyIdVerifier:C}})=>({address:S.address,publicKey:S.address,walletIndex:S.wallet_index,getProvider:()=>e.embeddedWallet.getSolanaProvider(S,E,C,w,y,h,k=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){var P;yield(P=ye())==null?void 0:P(k)}))}))},[s,a,e]),m=_react.useCallback.call(void 0, g=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){return yield Er({client:e,setSolanaWallet:t,createSolanaWalletCallbacks:i,setSolanaRecoveryFlowState:n,opts:g})}),[e,i]),p=_react.useCallback.call(void 0, ()=>_chunkOWCFWPALjs.d.call(void 0, 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:g,entropyIdVerifier:w}=c;return Cr({client:e,account:s[0],entropyId:g,entropyIdVerifier:w,setSolanaWallet:t,recoverSolanaWalletCallbacks:o,setSolanaRecoveryFlowState:n})}),[e,c,s,o,n,t]),v=_react.useCallback.call(void 0, ()=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){if(!c)throw t({status:"not-created"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});t(g=>g.status==="connected"?{status:"reconnecting"}:{status:"connecting"});try{let{entropyId:g,entropyIdVerifier:w}=c,y=yield e.embeddedWallet.getSolanaProvider(s[0],g,w);return t({status:"connected",publicKey:s[0].public_key}),y}catch(g){throw _jssdkcore.errorIndicatesRecoveryIsNeeded.call(void 0, g)?(t({status:"needs-recovery"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):g instanceof Error?(t({status:"error",error:g.message}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:g.message})):(t({status:"error",error:"Error loading embedded wallet"}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[s,e,c,t]);return _react.useEffect.call(void 0, ()=>{if(!a&&r.status!=="disconnected")return t({status:"disconnected"});l&&v().catch(()=>{})},[l,a]),_react.useEffect.call(void 0, ()=>{r.status==="error"&&r.error.includes("User must be logged in")&&v()},[r.status]),{create:m,recover:p,getProvider:v,wallets:u}};function we(m){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({client:e,setWallet:r,createWalletCallbacks:t,recoveryMethod:n,setRecoveryFlowState:i,password:o,recoveryKey:a,recoveryToken:s,recoverySecretOverride:l,iCloudRecordNameOverride:c,solanaAccount:u}){var v,g;switch(n){case"user-passcode":if(!o)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(!a)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(!l||!c)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery failed due to inability to store credentials"});break}r({status:"creating",account:null});let p=n==="icloud"?"icloud-native":n;try{let{user:w}=yield e.embeddedWallet.create({password:o,recoveryMethod:p,recoveryKey:a,recoveryToken:s,recoverySecretOverride:l,iCloudRecordNameOverride:c,solanaAccount:u}),y=_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, w);if(!y)throw new (0, _jssdkcore.PrivyClientError)({error:"Embedded wallet account not created",code:"embedded_wallet_creation_error"});let h=yield e.embeddedWallet.getProvider(y);return(g=(v=t.current)==null?void 0:v.onSuccess)==null||g.call(v,h),r({status:"connected",provider:h,account:y}),i({status:"initial"}),h}catch(w){let y=w instanceof Error?w.message:"Error creating embedded wallet";throw r({status:"error",error:y,account:null}),i({status:"initial"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:y})}})}function Ar(){return _chunkOWCFWPALjs.d.call(void 0, this,null,function*(){try{return yield Promise.resolve().then(() => _interopRequireWildcard(require("@privy-io/expo-native-extensions")))}catch(e){throw new Error("@privy-io/expo-native-extensions not found. Ensure that you're explicitly including as a dependency, and running an Expo development build")}})}function oe(n){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({user:e,appId:r,client:t}){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 i=yield Ar(),o=yield t.recovery.icloudAuth.getICloudConfiguration("expo-ios");if(!(o==null?void 0:o.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:l,iCloudRecordName:c}=yield i.writeRecoverySecretToICloud({containerId:o.container_identifier,appId:r,userId:e.id});return{recoverySecret:l,iCloudRecordName:c}}catch(l){if(l instanceof Error){let c=(s=l.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 be(n){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({walletAddress:e,client:r,chainType:t}){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 i=yield Ar(),a=(yield r.recovery.getRecoveryKeyMaterial(e,t)).icloud_record_name;if(!a)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery not properly backed up."});let s=yield r.recovery.icloudAuth.getICloudConfiguration("expo-ios"),l=s==null?void 0:s.container_identifier;if(!l)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:u}=yield i.readRecoverySecretFromICloud({containerId:l,recordName:a});return{recoverySecret:u}}catch(u){if(u instanceof Error){let m=(c=u.message.split("Caused by: ")[1])!=null?c:"Error writing to iCloud";throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:m})}throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}var _expolinking = require('expo-linking'); var B = _interopRequireWildcard(_expolinking); var $ = _interopRequireWildcard(_expolinking); var ke = _interopRequireWildcard(_expolinking); var Pe = _interopRequireWildcard(_expolinking); var ot = _interopRequireWildcard(_expolinking); var tt = _interopRequireWildcard(_expolinking); var nt = _interopRequireWildcard(_expolinking); var at = _interopRequireWildcard(_expolinking); var ct = _interopRequireWildcard(_expolinking); var dt = _interopRequireWildcard(_expolinking);var _expowebbrowser = require('expo-web-browser'); var Ur = _interopRequireWildcard(_expowebbrowser); var ce = _interopRequireWildcard(_expowebbrowser);function _(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 J=e=>new Promise(r=>setTimeout(r,e));function Se(){let e=_react.useRef.call(void 0, _reactnative.AppState.currentState);_react.useEffect.call(void 0, ()=>_reactnative.AppState.addEventListener("change",n=>{e.current=n}).remove,[]);function r(){return _reactnative.AppState.currentState}return{appState:e,getCurrentAppState:r}}function ne(i){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({provider:e,redirectUri:r,client:t,onError:n}){try{let o;switch(e){case"google-drive":{let{url:c}=yield t.recovery.auth.generateURL(B.createURL(r||"/"));o=c;break}default:throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid provider",code:"embedded_wallet_recovery_error"})}let a=yield Ur.openAuthSessionAsync(o);if(_reactnative.Platform.OS==="android")return;if(a.type!=="success")throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth session failed",code:"embedded_wallet_recovery_error"});let{queryParams:s}=B.parse(a.url),l;switch(e){case"google-drive":{let{privy_oauth_state:c,privy_oauth_code:u}=s;if(!u||!c)throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth invalid credentials",code:"embedded_wallet_recovery_error"});l=yield _e({oAuthCode:u,oAuthState:c,client:t});break}default:throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth invalid provider",code:"embedded_wallet_recovery_error"})}return l}catch(o){throw n==null||n(_(o)),o}})}function _e(n){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({oAuthCode:e,oAuthState:r,client:t}){let{access_token:i}=yield t.recovery.auth.authorize(e,r);if(!i)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:"login_with_oauth_returned_with_invalid_credentials"});return i})}var no=2*60*1e3;function io(e){let r;return new Promise((t,n)=>{r=B.addEventListener("url",o=>_chunkOWCFWPALjs.d.call(void 0, this,[o],function*({url:i}){if(!i)return;let{queryParams:a}=B.parse(i),{privy_oauth_state:s,privy_oauth_code:l}=a!=null?a:{};if(typeof l!="string"||typeof s!="string")return;let c=yield _e({client:e,oAuthCode:l,oAuthState:s});t(c)})),setTimeout(()=>{n(new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_set_recovery_error",error:"Failed to complete Google Drive recovery flow"}))},no)}).finally(()=>{r==null||r.remove()})}function Ee(e){return _chunkOWCFWPALjs.d.call(void 0, this,null,function*(){let r;_reactnative.Platform.OS==="android"&&(r=io(e));let t=yield ne({provider:"google-drive",client:e});return t!=null?t:yield r})}function Ce(o){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({client:e,recoveryInput:r,setWalletRecoveryCallbacks:t,setRecoveryFlowState:n,setWallet:i}){var a,s,l,c;try{let{provider:u,user:m}=yield e.embeddedWallet.setRecovery(r),p=u,v=_jssdkcore.getUserEmbeddedWallet.call(void 0, m);return i({status:"connected",provider:p,account:v}),(s=(a=t.current)==null?void 0:a.onSuccess)==null||s.call(a,p),n({status:"initial"}),p}catch(u){let m=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_set_recovery_error",error:u instanceof Error?u.message:"Error setting password on embedded wallet"});throw(c=(l=t.current)==null?void 0:l.onError)==null||c.call(l,m),n({status:"initial"}),m}})}function Mr(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 Lr=({client:e,appId:r,wallet:t,setWallet:n,setRecoveryFlowState:i,createWalletCallbacks:o,recoverWalletCallbacks:a,setWalletRecoveryCallbacks:s})=>{let l=A(),c=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, l),[l]),u=K(),m=_react.useCallback.call(void 0, y=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){var ue,me;if(c)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:S,recoveryMethod:E,recoveryKey:C}=Mr(y),k,P,M;if(E==="google-drive"&&(k=yield ne({provider:E,client:e,onError:(ue=o.current)==null?void 0:ue.onError}),i({status:"creating-wallet"}),!k))return null;if(E==="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:Ue,iCloudRecordName:re}=yield oe({user:h,appId:r,client:e});P=Ue,M=re}return yield we({client:e,setWallet:n,createWalletCallbacks:o,recoveryMethod:E,recoveryKey:C,setRecoveryFlowState:i,password:S,recoverySecretOverride:P,iCloudRecordNameOverride:M,solanaAccount:(me=_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, h))!=null?me:void 0})}),[e,c,l]),p=_react.useCallback.call(void 0, y=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){var E;if(t.status!=="connected")throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"});if(!c)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});if(_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, l))throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_set_recovery_error",error:"Cannot set user-controlled recovery for a user with an embedded Solana wallet."});if(_jssdkcore.isUnifiedWallet.call(void 0, c))throw new (0, _jssdkcore.PrivyClientError)({code:"unsupported_wallet_type",error:"Embedded wallet recovery is only supported for on-device execution and this app uses TEE execution. Learn more https://docs.privy.io/recipes/tee-wallet-migration-guide"});_jssdkcore.throwIfInvalidRecoveryUpgradePath.call(void 0, {currentRecoveryMethod:c.recovery_method,upgradeToRecoveryMethod:y.recoveryMethod});let h,S;switch(y.recoveryMethod){case"privy":S=_chunkOWCFWPALjs.b.call(void 0, _chunkOWCFWPALjs.a.call(void 0, {},y),{wallet:c});break;case"user-passcode":S=_chunkOWCFWPALjs.b.call(void 0, _chunkOWCFWPALjs.a.call(void 0, {},y),{wallet:c,password:y.password});break;case"google-drive":if(h=yield ne({provider:y.recoveryMethod,client:e,onError:(E=s.current)==null?void 0:E.onError}),i({status:"upgrading-recovery"}),!h)return null;S={recoveryMethod:"google-drive",wallet:c,recoveryAccessToken:h};break;case"icloud":if(!l)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before backing up to iCloud."});let{recoverySecret:C,iCloudRecordName:k}=yield oe({user:l,appId:r,client:e});S={recoveryMethod:"icloud-native",recoverySecretOverride:C,iCloudRecordNameOverride:k,wallet:c};break;default:throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}return Ce({client:e,recoveryInput:S,setWalletRecoveryCallbacks:s,setRecoveryFlowState:i,setWallet:n})}),[e,c,t.status,l]),v=_react.useCallback.call(void 0, y=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){return p({recoveryMethod:"user-passcode",password:y})}),[e,c,t.status]),g=_react.useCallback.call(void 0, y=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){var P;if(!c)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{password:h,recoveryMethod:S,recoveryKey:E}=Mr(y),C,k;if(S==="google-drive"&&(C=yield ne({provider:S,client:e,onError:(P=a.current)==null?void 0:P.onError}),i({status:"recovering"}),!C))return null;if(S==="icloud"){if(!l)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before recovering via iCloud."});let{recoverySecret:M}=yield be({client:e,walletAddress:c.address});k=M}return ve({client:e,account:c,setWallet:n,recoverWalletCallbacks:a,recoveryMethod:S,setRecoveryFlowState:i,recoveryKey:E,password:h,recoveryToken:C,recoverySecretOverride:k})}),[e,c]),w=_react.useCallback.call(void 0, ()=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){if(!c)throw n({status:"not-created",account:null}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});n(y=>y.status==="connected"?{status:"reconnecting",account:c}:{status:"connecting",account:c});try{let y=yield e.embeddedWallet.getProvider(c);return n({status:"connected",provider:y,account:c}),y}catch(y){throw _jssdkcore.errorIndicatesRecoveryIsNeeded.call(void 0, y)?(n({status:"needs-recovery",account:c}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):y instanceof Error?(n({status:"error",error:y.message,account:c}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:y.message})):(n({status:"error",error:"Error loading embedded wallet",account:c}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,c]);return _react.useEffect.call(void 0, ()=>{if(!l&&t.status!=="disconnected")return n({status:"disconnected",account:null});u&&w().catch(()=>{})},[u,l,c]),_react.useEffect.call(void 0, ()=>{t.status==="error"&&t.error.includes("User must be logged in")&&w()},[t.status]),{create:m,recover:g,setPassword:v,setRecovery:p,getProvider:w}};var Tr=({client:e,isReady:r})=>{let t=A(),n=ge(a=>a==null?void 0:a.customAuth),[i,o]=_react.useState.call(void 0, {status:"initial"});return _react.useEffect.call(void 0, ()=>{(()=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){if(!(n!=null&&n.enabled)){o({status:"not-enabled"});return}o({status:"loading"});let{getCustomAccessToken:s,isLoading:l}=n;if(!(!r||l))try{let c=yield s();if(!c&&t){yield e.auth.logout(),o({status:"done"});return}if(!c){o({status:"done"});return}if(t){o({status:"done"});return}let u=x();if(!(yield e.auth.customProvider.syncWithToken(c,{embedded:u==null?void 0:u.embedded}))){yield e.auth.logout(),o({status:"error",error:new (0, _jssdkcore.PrivyClientError)({error:"Failed to sync with custom auth provider",code:"third_party_auth_error"})});return}o({status:"done"})}catch(c){if(console.log("Error syncing with custom auth provider",c),o({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,n==null?void 0:n.enabled,n==null?void 0:n.getCustomAccessToken,n==null?void 0:n.isLoading]),{customAuthState:i,customAuthStateIsSettled:i.status!=="loading"&&i.status!=="initial"}};var Nr=({client:e,createWalletCallbacks:r,recoverWalletCallbacks:t,setWalletRecoveryCallbacks:n,recoveryFlowState:i,oAuthState:o,setRecoveryFlowState:a,setWallet:s,appStateVisible:l})=>{let c=$.useURL(),u=A(),m=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedWallet.call(void 0, u),[u]),p=K(),v=_react.useCallback.call(void 0, g=>{var y,h,S,E;let w=_(g);i.status==="creating-wallet"?(h=(y=r.current).onError)==null||h.call(y,_(w)):(E=(S=t.current).onError)==null||E.call(S,_(w)),a({status:"initial"})},[i]);return _react.useEffect.call(void 0, ()=>{function g(){return _chunkOWCFWPALjs.d.call(void 0, this,null,function*(){var S;if(!c&&i.status!=="initial"&&l&&v(new Error("Recovery OAuth session failed")),!c||i.status==="initial"||o.status!=="initial"||!l||!p)return;let{queryParams:w}=$.parse(c),{privy_oauth_state:y,privy_oauth_code:h}=w;if(!(!h||!y)){yield $.openURL(c.split("?")[0]);try{let E=yield _e({oAuthCode:h,oAuthState:y,client:e});if(i.status==="creating-wallet"){let C=(S=_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, u))!=null?S:void 0;yield we({client:e,setWallet:s,createWalletCallbacks:r,recoveryMethod:"google-drive",setRecoveryFlowState:a,recoveryToken:E,solanaAccount:C})}else if(i.status==="upgrading-recovery"){if(!m)throw new Error("Embedded wallet not found");yield Ce({client:e,recoveryInput:{recoveryMethod:"google-drive",wallet:m,recoveryAccessToken:E},setWalletRecoveryCallbacks:n,setRecoveryFlowState:a,setWallet:s})}else yield ve({client:e,account:m,setWallet:s,recoverWalletCallbacks:t,recoveryMethod:"google-drive",setRecoveryFlowState:a,recoveryToken:E})}catch(E){v(E)}}})}_reactnative.Platform.OS==="android"&&g()},[c,i.status,l,p])};var Dr=({client:e,isUserInitialized:r,setIsUserInitialized:t,setError:n})=>{_react.useEffect.call(void 0, ()=>{r||(()=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){try{yield e.initialize()}catch(o){n(o instanceof Error?o:new Error(String(o)))}try{yield e.user.get()}catch(o){}finally{t(!0)}}))()},[e,r,n,t])};var Ls=e=>{let{client:r,setSiweState:t,siweState:n}=_react.useContext.call(void 0, f),i=_react.useCallback.call(void 0, s=>{var c;let l=_(s);return t({status:"error",error:l}),(c=e==null?void 0:e.onError)==null||c.call(e,l),l},[e==null?void 0:e.onError]),o=_react.useCallback.call(void 0, u=>_chunkOWCFWPALjs.d.call(void 0, void 0,[u],function*({wallet:s,from:{domain:l,uri:c}}){var m;try{t({status:"generating-message"});let p=yield r.auth.siwe.init(s,l,c);return t({status:"awaiting-signature"}),(m=e==null?void 0:e.onGenerateMessage)==null||m.call(e,p.message),p.message}catch(p){throw i(p)}}),[r,i,e==null?void 0:e.onGenerateMessage]);return{loginWithSiwe:_react.useCallback.call(void 0, u=>_chunkOWCFWPALjs.d.call(void 0, void 0,[u],function*({signature:s,messageOverride:l,disableSignup:c}){var m;try{if(b())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"});t({status:"submitting-signature"});let v=x(),g=yield r.auth.siwe.loginWithSiwe(s,void 0,l,c?"no-signup":"login-or-sign-up",{embedded:v==null?void 0:v.embedded});return t({status:"done"}),(m=e==null?void 0:e.onSuccess)==null||m.call(e,g.user,g.is_new_user),g.user}catch(p){throw i(p)}}),[r,i,e==null?void 0:e.onSuccess]),generateSiweMessage:o,state:n}};var I=()=>{let{client:e}=_react.useContext.call(void 0, f);return e};var qs=()=>{let e=I(),r=_react.useCallback.call(void 0, a=>_chunkOWCFWPALjs.d.call(void 0, void 0,[a],function*({wallet:{address:n},from:{domain:i,uri:o}}){try{let{nonce:s}=yield e.auth.siws.fetchNonce({address:n});return{message:_jssdkcore.createSiwsMessage.call(void 0, {address:n,domain:i,uri:o,nonce:s})}}catch(s){throw _(s)}}),[e]),t=_react.useCallback.call(void 0, s=>_chunkOWCFWPALjs.d.call(void 0, void 0,[s],function*({signature:n,message:i,wallet:{walletClientType:o,connectorType:a}={}}){try{if(!b())throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_link_siws_before_logged_in",error:"Must be logged in to link a wallet, Use `useLoginWithSiws` to login with a wallet"});let{user:c}=yield e.auth.siws.link({signature:n,message:i,walletClientType:o,connectorType:a});return c}catch(l){throw _(l)}}),[e]);return{generateMessage:r,link:t}};var ec=()=>{let e=I(),r=_react.useCallback.call(void 0, a=>_chunkOWCFWPALjs.d.call(void 0, void 0,[a],function*({wallet:{address:n},from:{domain:i,uri:o}}){try{let{nonce:s}=yield e.auth.siws.fetchNonce({address:n});return{message:_jssdkcore.createSiwsMessage.call(void 0, {address:n,domain:i,uri:o,nonce:s})}}catch(s){throw _(s)}}),[e]),t=_react.useCallback.call(void 0, l=>_chunkOWCFWPALjs.d.call(void 0, void 0,[l],function*({signature:n,message:i,wallet:{walletClientType:o,connectorType:a}={},disableSignup:s}){try{if(b())throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_login_with_siws_while_already_logged_in",error:"Already logged in, use `useLinkWithSiws` if you are trying to link a wallet to an existing account"});return(yield e.auth.siws.login({signature:n,message:i,walletClientType:o,connectorType:a,mode:s?"no-signup":"login-or-sign-up"})).user}catch(c){throw _(c)}}),[e]);return{generateMessage:r,login:t}};var cc=e=>{let{client:r}=_react.useContext.call(void 0, f),t=_react.useCallback.call(void 0, i=>{var a;let o=_(i);return(a=e==null?void 0:e.onError)==null||a.call(e,o),o},[e==null?void 0:e.onError]);return{unlinkWallet:_react.useCallback.call(void 0, o=>_chunkOWCFWPALjs.d.call(void 0, void 0,[o],function*({address:i}){var a;try{if(!b())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{user:l}=yield r.auth.siwe.unlinkWallet(i);return(a=e==null?void 0:e.onSuccess)==null||a.call(e,l),l}catch(s){throw t(s)}}),[r,t,e==null?void 0:e.onSuccess])}};var gc=e=>{let[r,t]=_react.useState.call(void 0, ""),{client:n,otpState:i,setOtpState:o}=_react.useContext.call(void 0, f),a=_react.useCallback.call(void 0, c=>{var m;let u=_(c);return o({status:"error",error:u}),(m=e==null?void 0:e.onError)==null||m.call(e,u),u},[e,o]),s=_react.useCallback.call(void 0, u=>_chunkOWCFWPALjs.d.call(void 0, void 0,[u],function*({email:c}){var m;t(c);try{o({status:"sending-code"});let p=yield n.auth.email.sendCode(c);return o({status:"awaiting-code-input"}),(m=e==null?void 0:e.onSendCodeSuccess)==null||m.call(e,{email:c}),p}catch(p){throw a(p)}}),[n,a,e,o]),l=_react.useCallback.call(void 0, m=>_chunkOWCFWPALjs.d.call(void 0, void 0,[m],function*({code:c,email:u}){var p;try{if(!b())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 g=u||r;if(!g)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{user:w}=yield n.auth.email.linkWithCode(g,c);return o({status:"done"}),(p=e==null?void 0:e.onLinkSuccess)==null||p.call(e,w),w}catch(v){throw a(v)}}),[r,o,n,e,a]);return{sendCode:s,linkWithCode:l,state:i}};var _c=e=>{let{client:r}=_react.useContext.call(void 0, f),t=_react.useCallback.call(void 0, i=>{var a;let o=_(i);return(a=e==null?void 0:e.onError)==null||a.call(e,o),o},[e==null?void 0:e.onError]);return{unlinkEmail:_react.useCallback.call(void 0, o=>_chunkOWCFWPALjs.d.call(void 0, void 0,[o],function*({email:i}){var a;try{let{user:s}=yield r.auth.email.unlink(i);return(a=e==null?void 0:e.onSuccess)==null||a.call(e,s),s}catch(s){throw t(s)}}),[r,e==null?void 0:e.onSuccess,t])}};var Rc=e=>{let[r,t]=_react.useState.call(void 0, ""),{client:n,otpState:i,setOtpState:o}=_react.useContext.call(void 0, f),a=_react.useCallback.call(void 0, c=>{var m;let u=_(c);return o({status:"error",error:u}),(m=e==null?void 0:e.onError)==null||m.call(e,u),u},[e,o]),s=_react.useCallback.call(void 0, u=>_chunkOWCFWPALjs.d.call(void 0, void 0,[u],function*({email:c}){var m;t(c);try{o({status:"sending-code"});let p=yield n.auth.email.sendCode(c);return o({status:"awaiting-code-input"}),(m=e==null?void 0:e.onSendCodeSuccess)==null||m.call(e,{email:c}),p}catch(p){throw a(p)}}),[n,a,e,o]),l=_react.useCallback.call(void 0, p=>_chunkOWCFWPALjs.d.call(void 0, void 0,[p],function*({code:c,email:u,disableSignup:m}){var v;try{if(b())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=u||r;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 y=x(),h=yield n.auth.email.loginWithCode(w,c,m?"no-signup":"login-or-sign-up",{embedded:y==null?void 0:y.embedded});return o({status:"done"}),(v=e==null?void 0:e.onLoginSuccess)==null||v.call(e,h.user,h.is_new_user),h==null?void 0:h.user}catch(g){throw a(g)}}),[r,o,n,e,a]);return{sendCode:s,loginWithCode:l,state:i}};var Dc=e=>{let[r,t]=_react.useState.call(void 0, ""),{client:n,otpState:i,setOtpState:o}=_react.useContext.call(void 0, f),a=_react.useCallback.call(void 0, c=>{var m;let u=_(c);return o({status:"error",error:u}),(m=e==null?void 0:e.onError)==null||m.call(e,u),u},[e,o]),s=_react.useCallback.call(void 0, u=>_chunkOWCFWPALjs.d.call(void 0, void 0,[u],function*({phone:c}){var m;t(c);try{o({status:"sending-code"});let p=yield n.auth.phone.sendCode(c);return o({status:"awaiting-code-input"}),(m=e==null?void 0:e.onSendCodeSuccess)==null||m.call(e,{phone:c}),p}catch(p){throw a(p)}}),[n,a,e,o]),l=_react.useCallback.call(void 0, m=>_chunkOWCFWPALjs.d.call(void 0, void 0,[m],function*({code:c,phone:u}){var p;try{if(!b())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(!(u||r))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{user:w}=yield n.auth.phone.linkWithCode(u||r,c);return o({status:"done"}),(p=e==null?void 0:e.onLinkSuccess)==null||p.call(e,w),w}catch(v){throw a(v)}}),[r,o,n,e,a]);return{sendCode:s,linkWithCode:l,state:i}};var Jc=e=>{let[r,t]=_react.useState.call(void 0, ""),{client:n,otpState:i,setOtpState:o}=_react.useContext.call(void 0, f),a=_react.useCallback.call(void 0, c=>{var m;let u=_(c);return o({status:"error",error:u}),(m=e==null?void 0:e.onError)==null||m.call(e,u),u},[e,o]),s=_react.useCallback.call(void 0, u=>_chunkOWCFWPALjs.d.call(void 0, void 0,[u],function*({phone:c}){var m;t(c);try{o({status:"sending-code"});let p=yield n.auth.phone.sendCode(c);return o({status:"awaiting-code-input"}),(m=e==null?void 0:e.onSendCodeSuccess)==null||m.call(e,{phone:c}),p}catch(p){throw a(p)}}),[n,a,e,o]),l=_react.useCallback.call(void 0, p=>_chunkOWCFWPALjs.d.call(void 0, void 0,[p],function*({code:c,phone:u,disableSignup:m}){var v;try{if(b())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(!(u||r))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 y=x(),h=yield n.auth.phone.loginWithCode(u||r,c,m?"no-signup":"login-or-sign-up",{embedded:y==null?void 0:y.embedded});return o({status:"done"}),(v=e==null?void 0:e.onLoginSuccess)==null||v.call(e,h.user,h.is_new_user),h==null?void 0:h.user}catch(g){throw a(g)}}),[r,o,n,e,a]);return{sendCode:s,loginWithCode:l,state:i}};var tl=e=>{let{appState:r,getCurrentAppState:t}=Se(),{client:n,farcasterState:i,setFarcasterState:o}=_react.useContext.call(void 0, f),a=_react.useRef.call(void 0, !1),s=_react.useCallback.call(void 0, u=>{var p;let m=_(u);return o({status:"error",error:m}),(p=e==null?void 0:e.onError)==null||p.call(e,m),m},[e==null?void 0:e.onError,o]),l=_react.useCallback.call(void 0, ()=>{a.current=!0},[]);return{linkWithFarcaster:_react.useCallback.call(void 0, (v,...g)=>_chunkOWCFWPALjs.d.call(void 0, void 0,[v,...g],function*({relyingParty:u,redirectUrl:m},p={pollAttempts:10,pollIntervalMs:1e3}){var w;try{let y=b();if(a.current=!1,!y)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:h,channel_token:S}=yield n.auth.farcaster.initializeAuth({relyingParty:u,redirectUrl:ke.createURL(m!=null?m:"/")});if(!h)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_generate_farcaster_uri",error:"Failed to generate farcaster uri"});if(!S)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_generate_farcaster_channel_token",error:"Failed to generate farcaster channel token"});yield ke.openURL(h),o({status:"polling-status"});let E=0;for(;E<p.pollAttempts;){if(a.current)throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_canceled",error:"Farcaster polling canceled"});if(r.current!=="active"&&t()!=="active"){yield J(p.pollIntervalMs);continue}let C=yield n.auth.farcaster.getFarcasterStatus({channel_token:S});if(C.state==="completed"){o({status:"submitting-token"});let{user:k}=yield n.auth.farcaster.link(_chunkOWCFWPALjs.a.call(void 0, {channel_token:S},C));return o({status:"done"}),(w=e==null?void 0:e.onSuccess)==null||w.call(e,k),k}E++,yield J(p.pollIntervalMs)}throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(y){throw s(y)}}),[n,e==null?void 0:e.onSuccess,s,o]),state:i,cancel:l}};var cl=e=>{let{client:r}=_react.useContext.call(void 0, f),t=_react.useCallback.call(void 0, i=>{var a;let o=_(i);return(a=e==null?void 0:e.onError)==null||a.call(e,o),o},[e==null?void 0:e.onError]);return{unlinkFarcaster:_react.useCallback.call(void 0, o=>_chunkOWCFWPALjs.d.call(void 0, void 0,[o],function*({fid:i}){var a;try{let{user:s}=yield r.auth.farcaster.unlink({fid:i});return(a=e==null?void 0:e.onSuccess)==null||a.call(e,s),s}catch(s){throw t(s)}}),[r,e==null?void 0:e.onSuccess,t])}};var hl=e=>{let{appState:r,getCurrentAppState:t}=Se(),{client:n,farcasterState:i,setFarcasterState:o}=_react.useContext.call(void 0, f),a=_react.useRef.call(void 0, !1),s=_react.useCallback.call(void 0, u=>{var p;let m=_(u);return o({status:"error",error:m}),(p=e==null?void 0:e.onError)==null||p.call(e,m),m},[e==null?void 0:e.onError,o]),l=_react.useCallback.call(void 0, ()=>{a.current=!0},[]);return{loginWithFarcaster:_react.useCallback.call(void 0, (g,...w)=>_chunkOWCFWPALjs.d.call(void 0, void 0,[g,...w],function*({relyingParty:u,redirectUrl:m,disableSignup:p},v={pollAttempts:10,pollIntervalMs:1e3}){var y;try{if(a.current=!1,b())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:S,channel_token:E}=yield n.auth.farcaster.initializeAuth({relyingParty:u,redirectUrl:Pe.createURL(m!=null?m:"/")});if(!S)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_generate_farcaster_uri",error:"Failed to generate farcaster uri"});if(!E)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_generate_farcaster_channel_token",error:"Failed to generate farcaster channel token"});yield Pe.openURL(S),o({status:"polling-status"});let C=0;for(;C<v.pollAttempts;){if(a.current)throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_canceled",error:"Farcaster polling canceled"});if(r.current!=="active"&&t()!=="active"){yield J(v.pollIntervalMs);continue}let k=yield n.auth.farcaster.getFarcasterStatus({channel_token:E});if(k.state==="completed"){o({status:"submitting-token"});let P=x(),M=yield n.auth.farcaster.authenticate(_chunkOWCFWPALjs.a.call(void 0, {channel_token:E,mode:p?"no-signup":"login-or-sign-up"},k),{embedded:P==null?void 0:P.embedded});return o({status:"done"}),(y=e==null?void 0:e.onSuccess)==null||y.call(e,M.user,M.is_new_user),M.user}C++,yield J(v.pollIntervalMs)}throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(h){throw s(h)}}),[n,s,e==null?void 0:e.onSuccess,o,r]),state:i,cancel:l}};var Ye=_zustand.create.call(void 0, ()=>({status:"initial"})),H=e=>Ye.setState(e,!0),Yo=Ye.getState,Wl= exports.y =()=>{let{client:e}=_react.useContext.call(void 0, f),r=Ye(),t=_react.useCallback.call(void 0, ()=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){try{H({status:"fetching-nonce"});let i=yield e.auth.farcasterV2.initializeAuth();return H({status:"awaiting-signature"}),i}catch(i){let o=_(i);throw H({status:"initial",error:o}),o}}),[e]),n=_react.useCallback.call(void 0, i=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){let o=Yo().status;try{if(b()){let c=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 H({status:o,error:c}),c}H({st