@privy-io/expo
Version:
Expo client for the Privy Auth API
1 lines • 75.7 kB
JavaScript
import{b as _,c as N,e as l,f as pt,g as yt,h as ge}from"./chunk-K5SPDXVF.js";import{useEffect as Fr}from"react";import{create as Tr}from"zustand";var ft=Tr(()=>({status:"disconnected"})),he=()=>ft.getState().onNeedsRecovery,Dr=e=>{Fr(()=>{ft.setState({onNeedsRecovery:e==null?void 0:e.onNeedsRecovery})},[e==null?void 0:e.onNeedsRecovery])};import{digest as zr,randomUUID as jr}from"expo-crypto";import Kr from"@privy-io/js-sdk-core";var gt={name:"@privy-io/expo",version:"0.70.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 *.tsbuildinfo","clean:reset":"rm -rf dist .turbo node_modules *.tsbuildinfo",dev:"tsup --watch",format:"oxlint src --fix","generate-types":"tsup --dts-only",lint:"oxlint src",test:"jest"},browserslist:["defaults","node >= 18","not op_mini all"],dependencies:{"@privy-io/api-types":"catalog:","@privy-io/encoding":"workspace:^","@privy-io/js-sdk-core":"workspace:*","@privy-io/routes":"workspace:*","@scure/base":"^1.2.4","react-fast-compare":"^3.2.2",tweetnacl:"catalog:",zustand:"catalog:"},devDependencies:{oxlint:"catalog:package-new","oxlint-tsgolint":"catalog:package-new","@privy-io/eslint-plugin-privy-rules":"workspace:*","@privy-io/tsconfig":"workspace:*","@simplewebauthn/types":"9.0.1","@solana/web3.js":"catalog:","@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":"catalog:","@types/jest":"catalog:","@types/react":"catalog:",expo:"56.0.9","expo-apple-authentication":"56.0.4","expo-application":"56.0.3","expo-clipboard":"56.0.3","expo-crypto":"56.0.4","expo-linking":"56.0.13","expo-secure-store":"56.0.4","expo-web-browser":"56.0.5",jest:"catalog:","jest-expo":"56.0.4","lucide-react-native":"^0.474.0",react:"catalog:","react-native":"0.85.3","react-native-webview":"13.16.1","react-test-renderer":"19.2.3",tsup:"^6.2.3",typescript:"catalog:"},peerDependencies:{"@privy-io/expo-native-extensions":"workspace:*","expo-apple-authentication":"*","expo-application":"*","expo-clipboard":"*","expo-crypto":"*","expo-linking":"*","expo-secure-store":"*","expo-web-browser":"*",permissionless:"^0.2.47",react:"*","react-native":"*","react-native-passkeys":"catalog:","react-native-qrcode-styled":"0.3.3","react-native-safe-area-context":"*","react-native-svg":"*","react-native-webview":"*",viem:"catalog:"},peerDependenciesMeta:{permissionless:{optional:!0},viem:{optional:!0},"react-native-svg":{optional:!0},"expo-apple-authentication":{optional:!0},"expo-clipboard":{optional:!0},"expo-linking":{optional:!0},"expo-secure-store":{optional:!0},"expo-web-browser":{optional:!0},"react-native-qrcode-styled":{optional:!0},"react-native-safe-area-context":{optional:!0}},publishConfig:{access:"public"}};var ht=({appId:e,clientId:t,storage:r=ge,supportedChains:o,baseUrl:n,logLevel:s,logger:i,sessions:a})=>{let d=a!=null&&a.mode?{mode:a.mode}:void 0;return new Kr({appId:e,clientId:t,supportedChains:o,storage:yt(r),sdkVersion:`expo:${gt.version}`,nativeAppIdentifier:pt(),crypto:{digest:zr,randomUUID:jr},baseUrl:n,logLevel:s,logger:i,sessions:d})};import{useCallback as at,useContext as ts}from"react";import{PrivyClientError as rs}from"@privy-io/js-sdk-core";import Z,{useState as L,useMemo as Qi,createContext as Yi,useCallback as Re,useRef as me,useEffect as kr,useContext as Xi}from"react";import{AppState as Wr,View as Zi}from"react-native";import{PrivyClientError as xr}from"@privy-io/js-sdk-core";import Vr from"react-fast-compare";import{create as Gr}from"zustand";var we=Gr(()=>{}),wt=e=>we.setState(t=>Vr(t,e)?t:e),x=we.getState;import Br from"react";import{useCallback as Jr,useEffect as $r,useRef as Qr}from"react";import{AppState as Yr}from"react-native";import Xr from"react-native-webview";import*as F from"expo-secure-store";function vt(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 bt(e){return l(this,null,function*(){switch(e.event){case"app:secure-storage:get":{let{key:t}=e.data,r=yield F.getItemAsync(Me(t),{keychainAccessible:F.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY}).catch(o=>(console.warn("Failed to get the value from secure store",o),null));return{event:e.event,id:e.id,data:{value:r}}}case"app:secure-storage:remove":{let{key:t}=e.data,r=yield F.deleteItemAsync(Me(t),{keychainAccessible:F.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY}).then(()=>!0).catch(o=>(console.warn("Failed to remove the value from secure store",o),!1));return{event:e.event,id:e.id,data:{success:r}}}case"app:secure-storage:set":{let{key:t,value:r}=e.data,o=yield F.setItemAsync(Me(t),r,{keychainAccessible:F.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY}).then(()=>!0).catch(n=>(console.warn("Failed to write the value to secure store",n),!1));return{event:e.event,id:e.id,data:{success:o}}}}})}var Me=e=>e.replaceAll(":","-");import Hr from"react-fast-compare";import{createStore as qr,useStore as ve}from"zustand";var T=qr()(()=>({user:null,storedUsers:[],proxyStatus:"loading"}));function b(){return T.getState().user}var vs=T.subscribe.bind(T);function Fe(e){T.setState(({user:t})=>Hr(t,e)?{}:{user:e})}var St=e=>T.setState({storedUsers:e.users}),Te=e=>T.setState({proxyStatus:e});function A(){return ve(T,e=>e.user)}function bs(){return ve(T,e=>!!e.user)}function Et(){return ve(T,e=>e.storedUsers)}function j(){return ve(T,e=>e.proxyStatus!=="loading")}var Zr={shouldUseAppBackedStorage:!0},Ct=({client:e,isClientReady:t})=>{let r=Qr(null);$r(()=>{let n=Yr.addEventListener("change",s=>l(void 0,null,function*(){s==="active"&&((yield e.embeddedWallet.ping(500))||(Te("reloading"),e.embeddedWallet.reload()))}));return()=>n.remove()},[e]);let o=Jr(n=>l(void 0,null,function*(){var a;let{data:s}=n.nativeEvent,i=JSON.parse(s);if(vt(i)){let d=yield bt(i);(a=r.current)==null||a.postMessage(JSON.stringify(d));return}e.embeddedWallet.onMessage(i)}),[e]);return t?Br.createElement(Xr,{style:{flex:1},ref:n=>{n&&(e.setMessagePoster(n),r.current=n)},cacheEnabled:!1,cacheMode:"LOAD_NO_CACHE",injectedJavaScriptObject:Zr,source:{uri:e.embeddedWallet.getURL()},webviewDebuggingEnabled:e.logger.level==="DEBUG",onLoad:()=>Te("loaded"),onError:console.error,onMessage:o}):null};import{useCallback as De,useEffect as xt,useMemo as Ne}from"react";import{errorIndicatesRecoveryIsNeeded as to,getAllUserEmbeddedSolanaWallets as ro,getEntropyDetailsFromUser as Pt,PrivyClientError as re}from"@privy-io/js-sdk-core";import{getAllUserEmbeddedSolanaWallets as be,getEntropyDetailsFromAccount as _t,getUserEmbeddedEthereumWallet as eo,PrivyClientError as H}from"@privy-io/js-sdk-core";function kt(s){return l(this,arguments,function*({client:e,setSolanaWallet:t,createSolanaWalletCallbacks:r,setSolanaRecoveryFlowState:o,opts:n}){var i,a,d;t({status:"creating"});try{let{user:c}=yield e.user.get(),u=be(c),m=u[0],p=(i=eo(c))!=null?i:void 0;if(n!=null&&n.recoveryMethod&&n.recoveryMethod!=="privy")throw new H({code:"embedded_wallet_creation_error",error:"Unsupported recovery method for solana wallet."});if(!(n!=null&&n.createAdditional)&&m)throw new H({code:"embedded_wallet_creation_error",error:"Solana wallet already exists for this user. Set `createAdditional` to `true` to create another wallet"});let h,g;if(m){let f=p!=null?p:m,{entropyId:w,entropyIdVerifier:S}=_t(f),C=Math.max(...u.map(P=>P.wallet_index),0)+1,k=yield e.embeddedWallet.add({chainType:"solana",entropyId:w,entropyIdVerifier:S,hdWalletIndex:C}),W=be(k.user).find(P=>P.wallet_index===C);if(!W)throw new H({error:"Embedded wallet account not created",code:"embedded_wallet_creation_error"});h=yield e.embeddedWallet.getSolanaProvider(W,w,S),g=k.user}else{let f=yield e.embeddedWallet.createSolana({ethereumAccount:p}),w=be(f.user).find(W=>W.wallet_index===0);if(!w)throw new H({error:"Embedded wallet account not created",code:"embedded_wallet_creation_error"});let S=p!=null?p:w,{entropyId:C,entropyIdVerifier:k}=_t(S);h=yield e.embeddedWallet.getSolanaProvider(w,C,k),g=f.user}let v=be(g)[0];if(!v)throw new H({code:"embedded_wallet_creation_error",error:"Unknown error creating solana wallet"});return(d=(a=r.current)==null?void 0:a.onSuccess)==null||d.call(a,h),t({status:"connected",publicKey:v.public_key}),o({status:"initial"}),h}catch(c){let u=c instanceof Error?c.message:"Error creating embedded wallet";throw t({status:"error",error:u}),o({status:"initial"}),new H({code:"embedded_wallet_creation_error",error:u})}})}import{PrivyClientError as V}from"@privy-io/js-sdk-core";function Se(u){return l(this,arguments,function*({client:e,account:t,setWallet:r,recoverWalletCallbacks:o,recoveryMethod:n,setRecoveryFlowState:s,password:i,recoveryKey:a,recoveryToken:d,recoverySecretOverride:c}){var m,p,h,g;if(!t)throw new V({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});switch(n){case"user-passcode":if(!i)throw new V({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!d)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(!a)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 v=yield e.embeddedWallet.getProvider(t,i,d,c,a);return r({status:"connected",provider:v,account:t}),s({status:"initial"}),(p=(m=o.current)==null?void 0:m.onSuccess)==null||p.call(m,v),v}catch(v){r({status:"needs-recovery",account:t}),s({status:"initial"});let f=new V({code:"embedded_wallet_recovery_error",error:v instanceof Error?v.message:"Error recovering embedded wallet"});throw(g=(h=o.current)==null?void 0:h.onError)==null||g.call(h,f),f}})}function Wt(a){return l(this,arguments,function*({client:e,account:t,entropyId:r,entropyIdVerifier:o,setSolanaWallet:n,recoverSolanaWalletCallbacks:s,setSolanaRecoveryFlowState:i}){var d,c,u,m;n({status:"connecting"});try{let p=yield e.embeddedWallet.getSolanaProvider(t,r,o);return n({status:"connected",publicKey:p._publicKey}),i({status:"initial"}),(c=(d=s.current)==null?void 0:d.onSuccess)==null||c.call(d,p),p}catch(p){n({status:"needs-recovery"}),i({status:"initial"});let h=new V({code:"embedded_wallet_recovery_error",error:p instanceof Error?p.message:"Error recovering embedded wallet"});throw(m=(u=s.current)==null?void 0:u.onError)==null||m.call(u,h),h}})}var Ut=({client:e,solanaWallet:t,setSolanaWallet:r,setSolanaRecoveryFlowState:o,createSolanaWalletCallbacks:n,recoverSolanaWalletCallbacks:s})=>{let i=A(),a=Ne(()=>ro(i),[i]),d=j(),c=Ne(()=>a.length===0?null:Pt(i),[i,a]),u=Ne(()=>{let g=a.map(S=>{let C=Pt(i,S);return C?{account:S,entropy:C}:null});if(g.some(S=>S===null))return[];let v=void 0,f=void 0,w=void 0;return g.filter(S=>S!==null).map(({account:S,entropy:{entropyId:C,entropyIdVerifier:k}})=>({address:S.address,publicKey:S.address,walletIndex:S.wallet_index,getProvider:()=>e.embeddedWallet.getSolanaProvider(S,C,k,v,f,w,W=>l(void 0,null,function*(){var P;yield(P=he())==null?void 0:P(W)}))}))},[a,i,e]),m=De(g=>l(void 0,null,function*(){return yield kt({client:e,setSolanaWallet:r,createSolanaWalletCallbacks:n,setSolanaRecoveryFlowState:o,opts:g})}),[e,n]),p=De(()=>l(void 0,null,function*(){if(!c)throw new re({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{entropyId:g,entropyIdVerifier:v}=c;return Wt({client:e,account:a[0],entropyId:g,entropyIdVerifier:v,setSolanaWallet:r,recoverSolanaWalletCallbacks:s,setSolanaRecoveryFlowState:o})}),[e,c,a,s,o,r]),h=De(()=>l(void 0,null,function*(){if(!c)throw r({status:"not-created"}),new re({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});r(g=>g.status==="connected"?{status:"reconnecting"}:{status:"connecting"});try{let{entropyId:g,entropyIdVerifier:v}=c,f=yield e.embeddedWallet.getSolanaProvider(a[0],g,v);return r({status:"connected",publicKey:a[0].public_key}),f}catch(g){throw to(g)?(r({status:"needs-recovery"}),new re({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):g instanceof Error?(r({status:"error",error:g.message}),new re({code:"unknown_embedded_wallet_error",error:g.message})):(r({status:"error",error:"Error loading embedded wallet"}),new re({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[a,e,c,r]);return xt(()=>{if(!i&&t.status!=="disconnected")return r({status:"disconnected"});d&&h().catch(()=>{})},[d,i]),xt(()=>{t.status==="error"&&t.error.includes("User must be logged in")&&h()},[t.status]),{create:m,recover:p,getProvider:h,wallets:u}};import{useCallback as ie,useEffect as Lt,useMemo as po}from"react";import{getUserEmbeddedEthereumWallet as yo,getUserEmbeddedSolanaWallet as Mt,isUnifiedWallet as fo,throwIfInvalidRecoveryUpgradePath as go}from"@privy-io/js-sdk-core";import{errorIndicatesRecoveryIsNeeded as ho,PrivyClientError as R}from"@privy-io/js-sdk-core";import{getUserEmbeddedEthereumWallet as oo}from"@privy-io/js-sdk-core";import{PrivyClientError as q}from"@privy-io/js-sdk-core";function Ee(m){return l(this,arguments,function*({client:e,setWallet:t,createWalletCallbacks:r,recoveryMethod:o,setRecoveryFlowState:n,password:s,recoveryKey:i,recoveryToken:a,recoverySecretOverride:d,iCloudRecordNameOverride:c,solanaAccount:u}){var h,g;switch(o){case"user-passcode":if(!s)throw new q({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"recovery-encryption-key":if(!i)throw new q({code:"embedded_wallet_recovery_error",error:"key is required for recovery-encryption-key recovery method"});break;case"google-drive":if(!a)throw new q({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!d||!c)throw new q({code:"embedded_wallet_recovery_error",error:"iCloud recovery failed due to inability to store credentials"});break}t({status:"creating",account:null});let p=o==="icloud"?"icloud-native":o;try{let{user:v}=yield e.embeddedWallet.create({password:s,recoveryMethod:p,recoveryKey:i,recoveryToken:a,recoverySecretOverride:d,iCloudRecordNameOverride:c,solanaAccount:u}),f=oo(v);if(!f)throw new q({error:"Embedded wallet account not created",code:"embedded_wallet_creation_error"});let w=yield e.embeddedWallet.getProvider(f);return(g=(h=r.current)==null?void 0:h.onSuccess)==null||g.call(h,w),t({status:"connected",provider:w,account:f}),n({status:"initial"}),w}catch(v){let f=v instanceof Error?v.message:"Error creating embedded wallet";throw t({status:"error",error:f,account:null}),n({status:"initial"}),new q({code:"embedded_wallet_creation_error",error:f})}})}import{Platform as At}from"react-native";import{PrivyClientError as z}from"@privy-io/js-sdk-core";function Rt(){return l(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 oe(o){return l(this,arguments,function*({user:e,appId:t,client:r}){var a;if(At.OS==="android")throw new z({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let n=yield Rt(),s=yield r.recovery.icloudAuth.getICloudConfiguration("expo-ios");if(!(s==null?void 0:s.container_identifier))throw new z({code:"embedded_wallet_recovery_error",error:"An iCloud Container ID must be specified in the Privy Dashboard."});try{let{recoverySecret:d,iCloudRecordName:c}=yield n.writeRecoverySecretToICloud({containerId:s.container_identifier,appId:t,userId:e.id});return{recoverySecret:d,iCloudRecordName:c}}catch(d){if(d instanceof Error){let c=(a=d.message.split("Caused by: ")[1])!=null?a:"Error writing to iCloud";throw new z({code:"embedded_wallet_recovery_error",error:c})}throw new z({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}function Ce(o){return l(this,arguments,function*({walletAddress:e,client:t,chainType:r}){var c;if(At.OS==="android")throw new z({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let n=yield Rt(),i=(yield t.recovery.getRecoveryKeyMaterial(e,r)).icloud_record_name;if(!i)throw new z({code:"embedded_wallet_recovery_error",error:"iCloud recovery not properly backed up."});let a=yield t.recovery.icloudAuth.getICloudConfiguration("expo-ios"),d=a==null?void 0:a.container_identifier;if(!d)throw new z({code:"embedded_wallet_recovery_error",error:"An iCloud Container ID must be specified in the Privy Dashboard."});try{let{recoverySecret:u}=yield n.readRecoverySecretFromICloud({containerId:d,recordName:i});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 z({code:"embedded_wallet_recovery_error",error:m})}throw new z({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}import*as G from"expo-linking";import*as It from"expo-web-browser";import{Platform as Ot}from"react-native";import{PrivyClientError as J}from"@privy-io/js-sdk-core";import Zs from"react-fast-compare";import{PrivyApiError as no,PrivyClientError as io}from"@privy-io/js-sdk-core";function E(e){return e instanceof Error||e instanceof no||e instanceof io?e:typeof e=="string"?new Error(e):new Error("Unknown error")}var B=e=>new Promise(t=>setTimeout(t,e));import{useEffect as so,useRef as ao}from"react";import{AppState as ze}from"react-native";function _e(){let e=ao(ze.currentState);so(()=>ze.addEventListener("change",o=>{e.current=o}).remove,[]);function t(){return ze.currentState}return{appState:e,getCurrentAppState:t}}function ne(n){return l(this,arguments,function*({provider:e,redirectUri:t,client:r,onError:o}){try{let s;switch(e){case"google-drive":{let{url:c}=yield r.recovery.auth.generateURL(G.createURL(t||"/"));s=c;break}default:throw new J({error:"OAuth invalid provider",code:"embedded_wallet_recovery_error"})}let i=yield It.openAuthSessionAsync(s);if(Ot.OS==="android")return;if(i.type!=="success")throw new J({error:"Recovery OAuth session failed",code:"embedded_wallet_recovery_error"});let{queryParams:a}=G.parse(i.url),d;switch(e){case"google-drive":{let{privy_oauth_state:c,privy_oauth_code:u}=a;if(!u||!c)throw new J({error:"Recovery OAuth invalid credentials",code:"embedded_wallet_recovery_error"});d=yield ke({oAuthCode:u,oAuthState:c,client:r});break}default:throw new J({error:"Recovery OAuth invalid provider",code:"embedded_wallet_recovery_error"})}return d}catch(s){throw o==null||o(E(s)),s}})}function ke(o){return l(this,arguments,function*({oAuthCode:e,oAuthState:t,client:r}){let{access_token:n}=yield r.recovery.auth.authorize(e,t);if(!n)throw new J({error:"OAuth invalid credentials",code:"login_with_oauth_returned_with_invalid_credentials"});return n})}var co=2*60*1e3;function lo(e){let t;return new Promise((r,o)=>{t=G.addEventListener("url",s=>l(this,[s],function*({url:n}){if(!n)return;let{queryParams:i}=G.parse(n),{privy_oauth_state:a,privy_oauth_code:d}=i!=null?i:{};if(typeof d!="string"||typeof a!="string")return;let c=yield ke({client:e,oAuthCode:d,oAuthState:a});r(c)})),setTimeout(()=>{o(new J({code:"embedded_wallet_set_recovery_error",error:"Failed to complete Google Drive recovery flow"}))},co)}).finally(()=>{t==null||t.remove()})}function We(e){return l(this,null,function*(){let t;Ot.OS==="android"&&(t=lo(e));let r=yield ne({provider:"google-drive",client:e});return r!=null?r:yield t})}import{getUserEmbeddedWallet as uo,PrivyClientError as mo}from"@privy-io/js-sdk-core";function xe(s){return l(this,arguments,function*({client:e,recoveryInput:t,setWalletRecoveryCallbacks:r,setRecoveryFlowState:o,setWallet:n}){var i,a,d,c;try{let{provider:u,user:m}=yield e.embeddedWallet.setRecovery(t),p=u,h=uo(m);return n({status:"connected",provider:p,account:h}),(a=(i=r.current)==null?void 0:i.onSuccess)==null||a.call(i,p),o({status:"initial"}),p}catch(u){let m=new mo({code:"embedded_wallet_set_recovery_error",error:u instanceof Error?u.message:"Error setting password on embedded wallet"});throw(c=(d=r.current)==null?void 0:d.onError)==null||c.call(d,m),o({status:"initial"}),m}})}function Ft(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 Tt=({client:e,appId:t,wallet:r,setWallet:o,setRecoveryFlowState:n,createWalletCallbacks:s,recoverWalletCallbacks:i,setWalletRecoveryCallbacks:a})=>{let d=A(),c=po(()=>yo(d),[d]),u=j(),m=ie(f=>l(void 0,null,function*(){var pe,ye;if(c)throw new R({error:"This user already has an embedded wallet",code:"embedded_wallet_already_exists"});let{user:w}=yield e.user.get(),{password:S,recoveryMethod:C,recoveryKey:k}=Ft(f),W,P,M;if(C==="google-drive"&&(W=yield ne({provider:C,client:e,onError:(pe=s.current)==null?void 0:pe.onError}),n({status:"creating-wallet"}),!W))return null;if(C==="icloud"){if(!w)throw new R({code:"embedded_wallet_recovery_error",error:"User must be loaded before creating a wallet with iCloud."});let{recoverySecret:Ie,iCloudRecordName:te}=yield oe({user:w,appId:t,client:e});P=Ie,M=te}return yield Ee({client:e,setWallet:o,createWalletCallbacks:s,recoveryMethod:C,recoveryKey:k,setRecoveryFlowState:n,password:S,recoverySecretOverride:P,iCloudRecordNameOverride:M,solanaAccount:(ye=Mt(w))!=null?ye:void 0})}),[e,c,d]),p=ie(f=>l(void 0,null,function*(){var C;if(r.status!=="connected")throw new R({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"});if(!c)throw new R({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});if(Mt(d))throw new R({code:"embedded_wallet_set_recovery_error",error:"Cannot set user-controlled recovery for a user with an embedded Solana wallet."});if(fo(c))throw new R({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"});go({currentRecoveryMethod:c.recovery_method,upgradeToRecoveryMethod:f.recoveryMethod});let w,S;switch(f.recoveryMethod){case"privy":S=N(_({},f),{wallet:c});break;case"user-passcode":S=N(_({},f),{wallet:c,password:f.password});break;case"google-drive":if(w=yield ne({provider:f.recoveryMethod,client:e,onError:(C=a.current)==null?void 0:C.onError}),n({status:"upgrading-recovery"}),!w)return null;S={recoveryMethod:"google-drive",wallet:c,recoveryAccessToken:w};break;case"icloud":if(!d)throw new R({code:"embedded_wallet_recovery_error",error:"User must be loaded before backing up to iCloud."});let{recoverySecret:k,iCloudRecordName:W}=yield oe({user:d,appId:t,client:e});S={recoveryMethod:"icloud-native",recoverySecretOverride:k,iCloudRecordNameOverride:W,wallet:c};break;default:throw new R({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}return xe({client:e,recoveryInput:S,setWalletRecoveryCallbacks:a,setRecoveryFlowState:n,setWallet:o})}),[e,c,r.status,d]),h=ie(f=>l(void 0,null,function*(){return p({recoveryMethod:"user-passcode",password:f})}),[e,c,r.status]),g=ie(f=>l(void 0,null,function*(){var P;if(!c)throw new R({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{password:w,recoveryMethod:S,recoveryKey:C}=Ft(f),k,W;if(S==="google-drive"&&(k=yield ne({provider:S,client:e,onError:(P=i.current)==null?void 0:P.onError}),n({status:"recovering"}),!k))return null;if(S==="icloud"){if(!d)throw new R({code:"embedded_wallet_recovery_error",error:"User must be loaded before recovering via iCloud."});let{recoverySecret:M}=yield Ce({client:e,walletAddress:c.address});W=M}return Se({client:e,account:c,setWallet:o,recoverWalletCallbacks:i,recoveryMethod:S,setRecoveryFlowState:n,recoveryKey:C,password:w,recoveryToken:k,recoverySecretOverride:W})}),[e,c]),v=ie(()=>l(void 0,null,function*(){if(!c)throw o({status:"not-created",account:null}),new R({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});o(f=>f.status==="connected"?{status:"reconnecting",account:c}:{status:"connecting",account:c});try{let f=yield e.embeddedWallet.getProvider(c);return o({status:"connected",provider:f,account:c}),f}catch(f){throw ho(f)?(o({status:"needs-recovery",account:c}),new R({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):f instanceof Error?(o({status:"error",error:f.message,account:c}),new R({code:"unknown_embedded_wallet_error",error:f.message})):(o({status:"error",error:"Error loading embedded wallet",account:c}),new R({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,c]);return Lt(()=>{if(!d&&r.status!=="disconnected")return o({status:"disconnected",account:null});u&&v().catch(()=>{})},[u,d,c]),Lt(()=>{r.status==="error"&&r.error.includes("User must be logged in")&&v()},[r.status]),{create:m,recover:g,setPassword:h,setRecovery:p,getProvider:v}};import{useEffect as wo,useState as vo}from"react";import{PrivyClientError as Dt}from"@privy-io/js-sdk-core";var Nt=({client:e,isReady:t})=>{let r=A(),o=we(i=>i==null?void 0:i.customAuth),[n,s]=vo({status:"initial"});return wo(()=>{(()=>l(void 0,null,function*(){if(!(o!=null&&o.enabled)){s({status:"not-enabled"});return}s({status:"loading"});let{getCustomAccessToken:a,isLoading:d}=o;if(!(!t||d))try{let c=yield a();if(!c&&r){yield e.auth.logout(),s({status:"done"});return}if(!c){s({status:"done"});return}if(r){s({status:"done"});return}let u=x();if(!(yield e.auth.customProvider.syncWithToken(c,{embedded:u==null?void 0:u.embedded}))){yield e.auth.logout(),s({status:"error",error:new Dt({error:"Failed to sync with custom auth provider",code:"third_party_auth_error"})});return}s({status:"done"})}catch(c){if(console.log("Error syncing with custom auth provider",c),s({status:"error",error:c}),r)throw yield e.auth.logout(),new Dt({error:"Third-party auth failed",code:"third_party_auth_error"})}}))()},[e,r,t,o==null?void 0:o.enabled,o==null?void 0:o.getCustomAccessToken,o==null?void 0:o.isLoading]),{customAuthState:n,customAuthStateIsSettled:n.status!=="loading"&&n.status!=="initial"}};import*as $ from"expo-linking";import{useCallback as bo,useEffect as So,useMemo as Eo}from"react";import{Platform as Co}from"react-native";import{getUserEmbeddedSolanaWallet as _o,getUserEmbeddedWallet as ko}from"@privy-io/js-sdk-core";var zt=({client:e,createWalletCallbacks:t,recoverWalletCallbacks:r,setWalletRecoveryCallbacks:o,recoveryFlowState:n,oAuthState:s,setRecoveryFlowState:i,setWallet:a,appStateVisible:d})=>{let c=$.useURL(),u=A(),m=Eo(()=>ko(u),[u]),p=j(),h=bo(g=>{var f,w,S,C;let v=E(g);n.status==="creating-wallet"?(w=(f=t.current).onError)==null||w.call(f,E(v)):(C=(S=r.current).onError)==null||C.call(S,E(v)),i({status:"initial"})},[n]);return So(()=>{function g(){return l(this,null,function*(){var S;if(!c&&n.status!=="initial"&&d&&h(new Error("Recovery OAuth session failed")),!c||n.status==="initial"||s.status!=="initial"||!d||!p)return;let{queryParams:v}=$.parse(c),{privy_oauth_state:f,privy_oauth_code:w}=v;if(!(!w||!f)){yield $.openURL(c.split("?")[0]);try{let C=yield ke({oAuthCode:w,oAuthState:f,client:e});if(n.status==="creating-wallet"){let k=(S=_o(u))!=null?S:void 0;yield Ee({client:e,setWallet:a,createWalletCallbacks:t,recoveryMethod:"google-drive",setRecoveryFlowState:i,recoveryToken:C,solanaAccount:k})}else if(n.status==="upgrading-recovery"){if(!m)throw new Error("Embedded wallet not found");yield xe({client:e,recoveryInput:{recoveryMethod:"google-drive",wallet:m,recoveryAccessToken:C},setWalletRecoveryCallbacks:o,setRecoveryFlowState:i,setWallet:a})}else yield Se({client:e,account:m,setWallet:a,recoverWalletCallbacks:r,recoveryMethod:"google-drive",setRecoveryFlowState:i,recoveryToken:C})}catch(C){h(C)}}})}Co.OS==="android"&&g()},[c,n.status,d,p])};import{useEffect as Wo}from"react";var jt=({client:e,isUserInitialized:t,setIsUserInitialized:r,setError:o})=>{Wo(()=>{t||(()=>l(void 0,null,function*(){try{yield e.initialize()}catch(s){o(s instanceof Error?s:new Error(String(s)))}try{yield e.user.get()}catch(s){}finally{r(!0)}}))()},[e,t,o,r])};import{useEffect as Ji,useRef as $i}from"react";import{useCallback as je,useContext as xo}from"react";import{PrivyClientError as Po}from"@privy-io/js-sdk-core";var ic=e=>{let{client:t,setSiweState:r,siweState:o}=xo(y),n=je(a=>{var c;let d=E(a);return r({status:"error",error:d}),(c=e==null?void 0:e.onError)==null||c.call(e,d),d},[e==null?void 0:e.onError]),s=je(u=>l(void 0,[u],function*({wallet:a,from:{domain:d,uri:c}}){var m;try{r({status:"generating-message"});let p=yield t.auth.siwe.init(a,d,c);return r({status:"awaiting-signature"}),(m=e==null?void 0:e.onGenerateMessage)==null||m.call(e,p.message),p.message}catch(p){throw n(p)}}),[t,n,e==null?void 0:e.onGenerateMessage]);return{loginWithSiwe:je(u=>l(void 0,[u],function*({signature:a,messageOverride:d,disableSignup:c}){var m;try{if(b())throw new Po({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"});r({status:"submitting-signature"});let h=x(),g=yield t.auth.siwe.loginWithSiwe(a,void 0,d,c?"no-signup":"login-or-sign-up",{embedded:h==null?void 0:h.embedded});return r({status:"done"}),(m=e==null?void 0:e.onSuccess)==null||m.call(e,g.user,g.is_new_user),g.user}catch(p){throw n(p)}}),[t,n,e==null?void 0:e.onSuccess]),generateSiweMessage:s,state:o}};import{useCallback as Kt}from"react";import{createSiwsMessage as Ao,PrivyClientError as Ro}from"@privy-io/js-sdk-core";import{useContext as Uo}from"react";var U=()=>{let{client:e}=Uo(y);return e};var gc=()=>{let e=U(),t=Kt(i=>l(void 0,[i],function*({wallet:{address:o},from:{domain:n,uri:s}}){try{let{nonce:a}=yield e.auth.siws.fetchNonce({address:o});return{message:Ao({address:o,domain:n,uri:s,nonce:a})}}catch(a){throw E(a)}}),[e]),r=Kt(a=>l(void 0,[a],function*({signature:o,message:n,wallet:{walletClientType:s,connectorType:i}={}}){try{if(!b())throw new Ro({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:o,message:n,walletClientType:s,connectorType:i});return c}catch(d){throw E(d)}}),[e]);return{generateMessage:t,link:r}};import{useCallback as Vt}from"react";import{createSiwsMessage as Io,PrivyClientError as Oo}from"@privy-io/js-sdk-core";var kc=()=>{let e=U(),t=Vt(i=>l(void 0,[i],function*({wallet:{address:o},from:{domain:n,uri:s}}){try{let{nonce:a}=yield e.auth.siws.fetchNonce({address:o});return{message:Io({address:o,domain:n,uri:s,nonce:a})}}catch(a){throw E(a)}}),[e]),r=Vt(d=>l(void 0,[d],function*({signature:o,message:n,wallet:{walletClientType:s,connectorType:i}={},disableSignup:a}){try{if(b())throw new Oo({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"});let u=x();return(yield e.auth.siws.login({signature:o,message:n,walletClientType:s,connectorType:i,mode:a?"no-signup":"login-or-sign-up",opts:{embedded:u==null?void 0:u.embedded}})).user}catch(c){throw E(c)}}),[e]);return{generateMessage:t,login:r}};import{useCallback as Gt,useContext as Lo}from"react";import{PrivyClientError as Mo}from"@privy-io/js-sdk-core";var Oc=e=>{let{client:t}=Lo(y),r=Gt(n=>{var i;let s=E(n);return(i=e==null?void 0:e.onError)==null||i.call(e,s),s},[e==null?void 0:e.onError]);return{unlinkWallet:Gt(s=>l(void 0,[s],function*({address:n}){var i;try{if(!b())throw new Mo({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:d}=yield t.auth.siwe.unlinkWallet(n);return(i=e==null?void 0:e.onSuccess)==null||i.call(e,d),d}catch(a){throw r(a)}}),[t,r,e==null?void 0:e.onSuccess])}};import{useCallback as Ke,useContext as Fo,useState as To}from"react";import{PrivyClientError as Ht}from"@privy-io/js-sdk-core";var jc=e=>{let[t,r]=To(""),{client:o,otpState:n,setOtpState:s}=Fo(y),i=Ke(c=>{var m;let u=E(c);return s({status:"error",error:u}),(m=e==null?void 0:e.onError)==null||m.call(e,u),u},[e,s]),a=Ke(u=>l(void 0,[u],function*({email:c}){var m;r(c);try{s({status:"sending-code"});let p=yield o.auth.email.sendCode(c);return s({status:"awaiting-code-input"}),(m=e==null?void 0:e.onSendCodeSuccess)==null||m.call(e,{email:c}),p}catch(p){throw i(p)}}),[o,i,e,s]),d=Ke(m=>l(void 0,[m],function*({code:c,email:u}){var p;try{if(!b())throw new Ht({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||t;if(!g)throw new Ht({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid email before calling `linkWithCode`"});s({status:"submitting-code"});let{user:v}=yield o.auth.email.linkWithCode(g,c);return s({status:"done"}),(p=e==null?void 0:e.onLinkSuccess)==null||p.call(e,v),v}catch(h){throw i(h)}}),[t,s,o,e,i]);return{sendCode:a,linkWithCode:d,state:n}};import{useCallback as qt,useContext as Do}from"react";var Bc=e=>{let{client:t}=Do(y),r=qt(n=>{var i;let s=E(n);return(i=e==null?void 0:e.onError)==null||i.call(e,s),s},[e==null?void 0:e.onError]);return{unlinkEmail:qt(s=>l(void 0,[s],function*({email:n}){var i;try{let{user:a}=yield t.auth.email.unlink(n);return(i=e==null?void 0:e.onSuccess)==null||i.call(e,a),a}catch(a){throw r(a)}}),[t,e==null?void 0:e.onSuccess,r])}};import{useCallback as Ve,useContext as No,useState as zo}from"react";import{PrivyClientError as Bt}from"@privy-io/js-sdk-core";var rd=e=>{let[t,r]=zo(""),{client:o,otpState:n,setOtpState:s}=No(y),i=Ve(c=>{var m;let u=E(c);return s({status:"error",error:u}),(m=e==null?void 0:e.onError)==null||m.call(e,u),u},[e,s]),a=Ve(u=>l(void 0,[u],function*({email:c}){var m;r(c);try{s({status:"sending-code"});let p=yield o.auth.email.sendCode(c);return s({status:"awaiting-code-input"}),(m=e==null?void 0:e.onSendCodeSuccess)==null||m.call(e,{email:c}),p}catch(p){throw i(p)}}),[o,i,e,s]),d=Ve(p=>l(void 0,[p],function*({code:c,email:u,disableSignup:m}){var h;try{if(b()&&!o.isMultiUserModeEnabled)throw new Bt({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 v=u||t;if(!v)throw new Bt({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid email before calling `loginWithCode`"});s({status:"submitting-code"});let f=x(),w=yield o.auth.email.loginWithCode(v,c,m?"no-signup":"login-or-sign-up",{embedded:f==null?void 0:f.embedded});return s({status:"done"}),(h=e==null?void 0:e.onLoginSuccess)==null||h.call(e,w.user,w.is_new_user),w==null?void 0:w.user}catch(g){throw i(g)}}),[t,s,o,e,i]);return{sendCode:a,loginWithCode:d,state:n}};import{useCallback as Ge,useContext as jo,useState as Ko}from"react";import{PrivyClientError as Jt}from"@privy-io/js-sdk-core";var ld=e=>{let[t,r]=Ko(""),{client:o,otpState:n,setOtpState:s}=jo(y),i=Ge(c=>{var m;let u=E(c);return s({status:"error",error:u}),(m=e==null?void 0:e.onError)==null||m.call(e,u),u},[e,s]),a=Ge(u=>l(void 0,[u],function*({phone:c}){var m;r(c);try{s({status:"sending-code"});let p=yield o.auth.phone.sendCode(c);return s({status:"awaiting-code-input"}),(m=e==null?void 0:e.onSendCodeSuccess)==null||m.call(e,{phone:c}),p}catch(p){throw i(p)}}),[o,i,e,s]),d=Ge(m=>l(void 0,[m],function*({code:c,phone:u}){var p;try{if(!b())throw new Jt({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||t))throw new Jt({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid phone number before calling `linkWithCode`"});s({status:"submitting-code"});let{user:v}=yield o.auth.phone.linkWithCode(u||t,c);return s({status:"done"}),(p=e==null?void 0:e.onLinkSuccess)==null||p.call(e,v),v}catch(h){throw i(h)}}),[t,s,o,e,i]);return{sendCode:a,linkWithCode:d,state:n}};import{useCallback as He,useContext as Vo,useState as Go}from"react";import{PrivyClientError as $t}from"@privy-io/js-sdk-core";var vd=e=>{let[t,r]=Go(""),{client:o,otpState:n,setOtpState:s}=Vo(y),i=He(c=>{var m;let u=E(c);return s({status:"error",error:u}),(m=e==null?void 0:e.onError)==null||m.call(e,u),u},[e,s]),a=He(u=>l(void 0,[u],function*({phone:c}){var m;r(c);try{s({status:"sending-code"});let p=yield o.auth.phone.sendCode(c);return s({status:"awaiting-code-input"}),(m=e==null?void 0:e.onSendCodeSuccess)==null||m.call(e,{phone:c}),p}catch(p){throw i(p)}}),[o,i,e,s]),d=He(p=>l(void 0,[p],function*({code:c,phone:u,disableSignup:m}){var h;try{if(b())throw new $t({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||t))throw new $t({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid phone number before calling `loginWithCode`"});s({status:"submitting-code"});let f=x(),w=yield o.auth.phone.loginWithCode(u||t,c,m?"no-signup":"login-or-sign-up",{embedded:f==null?void 0:f.embedded});return s({status:"done"}),(h=e==null?void 0:e.onLoginSuccess)==null||h.call(e,w.user,w.is_new_user),w==null?void 0:w.user}catch(g){throw i(g)}}),[t,s,o,e,i]);return{sendCode:a,loginWithCode:d,state:n}};import*as Pe from"expo-linking";import{useCallback as qe,useContext as Ho,useRef as qo}from"react";import{PrivyClientError as se}from"@privy-io/js-sdk-core";var xd=e=>{let{appState:t,getCurrentAppState:r}=_e(),{client:o,farcasterState:n,setFarcasterState:s}=Ho(y),i=qo(!1),a=qe(u=>{var p;let m=E(u);return s({status:"error",error:m}),(p=e==null?void 0:e.onError)==null||p.call(e,m),m},[e==null?void 0:e.onError,s]),d=qe(()=>{i.current=!0},[]);return{linkWithFarcaster:qe((h,...g)=>l(void 0,[h,...g],function*({relyingParty:u,redirectUrl:m},p={pollAttempts:10,pollIntervalMs:1e3}){var v;try{let f=b();if(i.current=!1,!f)throw new se({code:"attempted_link_farcaster_before_logged_in",error:"Must be logged in to link a Farcaster account."});s({status:"generating-uri"});let{connect_uri:w,channel_token:S}=yield o.auth.farcaster.initializeAuth({relyingParty:u,redirectUrl:Pe.createURL(m!=null?m:"/")});if(!w)throw new se({code:"failed_to_generate_farcaster_uri",error:"Failed to generate farcaster uri"});if(!S)throw new se({code:"failed_to_generate_farcaster_channel_token",error:"Failed to generate farcaster channel token"});yield Pe.openURL(w),s({status:"polling-status"});let C=0;for(;C<p.pollAttempts;){if(i.current)throw new se({code:"farcaster_polling_canceled",error:"Farcaster polling canceled"});if(t.current!=="active"&&r()!=="active"){yield B(p.pollIntervalMs);continue}let k=yield o.auth.farcaster.getFarcasterStatus({channel_token:S});if(k.state==="completed"){s({status:"submitting-token"});let{user:W}=yield o.auth.farcaster.link(_({channel_token:S},k));return s({status:"done"}),(v=e==null?void 0:e.onSuccess)==null||v.call(e,W),W}C++,yield B(p.pollIntervalMs)}throw new se({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(f){throw a(f)}}),[o,e==null?void 0:e.onSuccess,a,s]),state:n,cancel:d}};import{useCallback as Qt,useContext as Bo}from"react";var Od=e=>{let{client:t}=Bo(y),r=Qt(n=>{var i;let s=E(n);return(i=e==null?void 0:e.onError)==null||i.call(e,s),s},[e==null?void 0:e.onError]);return{unlinkFarcaster:Qt(s=>l(void 0,[s],function*({fid:n}){var i;try{let{user:a}=yield t.auth.farcaster.unlink({fid:n});return(i=e==null?void 0:e.onSuccess)==null||i.call(e,a),a}catch(a){throw r(a)}}),[t,e==null?void 0:e.onSuccess,r])}};import*as Ue from"expo-linking";import{useCallback as $e,useContext as Jo,useRef as $o}from"react";import{PrivyClientError as ae}from"@privy-io/js-sdk-core";var Kd=e=>{let{appState:t,getCurrentAppState:r}=_e(),{client:o,farcasterState:n,setFarcasterState:s}=Jo(y),i=$o(!1),a=$e(u=>{var p;let m=E(u);return s({status:"error",error:m}),(p=e==null?void 0:e.onError)==null||p.call(e,m),m},[e==null?void 0:e.onError,s]),d=$e(()=>{i.current=!0},[]);return{loginWithFarcaster:$e((g,...v)=>l(void 0,[g,...v],function*({relyingParty:u,redirectUrl:m,disableSignup:p},h={pollAttempts:10,pollIntervalMs:1e3}){var f;try{if(i.current=!1,b())throw new ae({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"});s({status:"generating-uri"});let{connect_uri:S,channel_token:C}=yield o.auth.farcaster.initializeAuth({relyingParty:u,redirectUrl:Ue.createURL(m!=null?m:"/")});if(!S)throw new ae({code:"failed_to_generate_farcaster_uri",error:"Failed to generate farcaster uri"});if(!C)throw new ae({code:"failed_to_generate_farcaster_channel_token",error:"Failed to generate farcaster channel token"});yield Ue.openURL(S),s({status:"polling-status"});let k=0;for(;k<h.pollAttempts;){if(i.current)throw new ae({code:"farcaster_polling_canceled",error:"Farcaster polling canceled"});if(t.current!=="active"&&r()!=="active"){yield B(h.pollIntervalMs);continue}let W=yield o.auth.farcaster.getFarcasterStatus({channel_token:C});if(W.state==="completed"){s({status:"submitting-token"});let P=x(),M=yield o.auth.farcaster.authenticate(_({channel_token:C,mode:p?"no-signup":"login-or-sign-up"},W),{embedded:P==null?void 0:P.embedded});return s({status:"done"}),(f=e==null?void 0:e.onSuccess)==null||f.call(e,M.user,M.is_new_user),M.user}k++,yield B(h.pollIntervalMs)}throw new ae({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(w){throw a(w)}}),[o,a,e==null?void 0:e.onSuccess,s,t]),state:n,cancel:d}};import{useCallback as Yt,useContext as Qo}from"react";import{create as Yo}from"zustand";import{PrivyClientError as Xo}from"@privy-io/js-sdk-core";var Qe=Yo(()=>({status:"initial"})),K=e=>Qe.setState(e,!0),Zo=Qe.getState,Xd=()=>{let{client:e}=Qo(y),t=Qe(),r=Yt(()=>l(void 0,null,function*(){try{K({status:"fetching-nonce"});let n=yield e.auth.farcasterV2.initializeAuth();return K({status:"awaiting-signature"}),n}catch(n){let s=E(n);throw K({status:"initial",error:s}),s}}),[e]),o=Yt(n=>l(void 0,null,function*(){let s=Zo().status;try{if(b()){let c=new Xo({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 K({status:s,error:c}),c}K({status:"submitting-signature"});let a=x(),d=yield e.auth.farcasterV2.authenticate(n,{embedded:a==null?void 0:a.embedded});return K({status:"done"}),setTimeout(()=>K({status:"initial"}),1500),{user:d.user}}catch(i){let a=E(i);throw K({status:s,error:a}),a}}),[e]);return{init:r,login:o,state:t}};import{useContext as en,useMemo as tn}from"react";import{delegatedActions as Xt}from"@privy-io/js-sdk-core";var nl=()=>{let{client:e}=en(y);return tn(()=>({delegateWallet:Xt.delegateWallet(e),revokeWallets:Xt.revokeWallets(e)}),[e])};import{useContext as rn,useMemo as on}from"react";import{depositAddress as ce}from"@privy-io/js-sdk-core";var dl=()=>{let{client:e}=rn(y);return on(()=>({getConfig:()=>ce.getConfig(e),generateDepositAddress:t=>ce.generateDepositAddress(_({privy:e},t)),getDeposit:t=>ce.getDeposit(_({privy:e},t)),waitForDeposit:t=>ce.waitForDeposit(_({privy:e},t)),waitForCompletion:t=>ce.waitForCompletion(_({privy:e},t))}),[e])};import{useContext as an,useMemo as cn}from"react";import{addSessionSigners as dn,removeSessionSigners as ln}from"@privy-io/js-sdk-core";import{isEmbeddedWalletAccount as nn}from"@privy-io/js-sdk-core";function sn(e,t){return e.linked_accounts.filter(nn).find(r=>r.address===t)}function Q(e){let t=b();if(!t)throw new Error("User must be authenticated to perform this operation");let r=sn(t,e);if(!r)throw new Error(`No wallet found with address ${e}`);return r}var vl=()=>{let{client:e}=an(y);return cn(()=>({addSessionSigners:({address:t,signers:r})=>dn({client:e,wallet:Q(t),signers:r.map(o=>({signer_id:o.signerId,override_policy_ids:o.policyIds}))}),removeSessionSigners:({address:t})=>ln({client:e,wallet:Q(t)})}),[e])};import{useContext as un,useMemo as mn}from"react";import{addSessionSigners as pn,removeSessionSigners as yn}from"@privy-io/js-sdk-core";var kl=()=>{let{client:e}=un(y);return mn(()=>({addSigners:({address:t,signers:r})=>pn({client:e,wallet:Q(t),signers:r.map(o=>({signer_id:o.signerId,override_policy_ids:o.policyIds}))}),removeSigners:({address:t})=>yn({client:e,wallet:Q(t)})}),[e])};import{useContext as fn,useMemo as gn}from"react";import{PrivyClientError as er}from"@privy-io/js-sdk-core";var Rl=()=>{let{client:e}=fn(y);return gn(()=>({sendCode(o){return l(this,arguments,function*({newEmailAddress:r}){Zt(),yield e.auth.email.sendCode(r)})},updateEmail(n){return l(this,arguments,function*({newEmailAddress:r,code:o}){let{address:s}=Zt(),{user:i}=yield e.auth.email.updateEmail({oldEmailAddress:s,newEmailAddress:r,code:o});return i})}}),[e])};function Zt(){let t=hn().linked_accounts.find(r=>r.type==="email");if(!t)throw new er({code:"attempted_update_email_without_a_linked_email",error:"Must have a linked email account already to update an email address. Use `useLinkEmail` to link an email account."});return t}function hn(){let e=b();if(!e)throw new er({code:"attempted_update_before_logged_in",error:"Must be logged in to update a user profile."});return e}import{useContext as wn,useMemo as vn}from"react";import{PrivyClientError as rr}from"@privy-io/js-sdk-core";var Dl=()=>{let{client:e}=wn(y);return vn(()=>({sendCode(o){return l(this,arguments,function*({newPhoneNumber:r}){tr(),yield e.auth.phone.sendCode(r)})},updatePhone(n){return l(this,arguments,function*({newPhoneNumber:r,code:o}){let{phoneNumber:s}=tr(),{user:i}=yield e.auth.phone.updatePhone({oldPhoneNumber:s,newPhoneNumber:r,code:o});return i})}}),[e])};function tr(){let t=bn().linked_accounts.find(r=>r.type==="phone");if(!t)throw new rr({code:"attempted_update_phone_without_a_linked_phone",error:"Must have a linked phone account already to update a phone number. Use `useLinkSMS` to link a phone number."});return t}function bn(){let e=b();if(!e)throw new rr({code:"attempted_update_before_logged_in",error:"Must be logged in to update a user profile."});return e}import*as ir from"expo-linking";import{useCallback as En,useContext as Cn,useMemo as _n}from"react";import{crossApp as kn,PrivyClientError as Wn}from"@privy-io/js-sdk-core";import*as nr from"expo-linking";import*as de from"expo-web-browser";import{PrivyClientError as or}from"@privy-io/js-sdk-core";var D=(e,t)=>l(void 0,null,function*(){let r=yield de.openAuthSessionAsync(e,t,{createTask:!1});if(r.type!=="success")throw r.type===de.WebBrowserResultType.CANCEL||r.type===de.WebBrowserResultType.DISMISS?new or({error:"OAuth session was cancelled",code:"oauth_session_failed"}):new or({error:"OAuth session failed",code:"oauth_session_failed"});return Sn(r.url)});function Sn(e){let{queryParams:t}=nr.parse(e);return t}var $l=()=>{let{client:e}=Cn(y),t=_n(()=>kn.loginWithCrossAppAuth({client:e,openAuthSession:D}),[e]);return{loginWithCrossApp:En(s=>l(void 0,[s],function*({appId:o,redirectUri:n}){if(b())throw new Wn({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:a}=yield t({providerAppId:o,redirectUrl:ir.createURL(n||"/")});return{user:a}}),[t])}};import*as sr from"expo-linking";import{useCallback as xn,useContext as Pn,useMemo as Un}from"react";import{crossApp as An,PrivyClientError as Rn}from"@privy-io/js-sdk-core";var ou=()=>{let{client:e}=Pn(y),t=Un(()=>An.linkWithCrossAppAuth({client:e,openAuthSession:D}),[e]);return{linkWithCrossApp:xn(s=>l(void 0,[s],function*({appId:o,redirectUri:n}){if(!b())throw new Rn({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 t({providerAppId:o,redirectUrl:sr.createURL(n||"/")})}}),[t])}};import*as cr from"expo-linking";import{useContext as In,useMemo as ar}from"react";import{crossApp as On}from"@privy-io/js-sdk-core";var uu=()=>{let{client:e}=In(y),t=ar(()=>On.wallet.signMessage({client:e,openAuthSession:D}),[e]