@privy-io/expo 0.58.0 → 0.58.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } 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 pr=_zustand.create.call(void 0, ()=>({status:"disconnected"})),pe=()=>pr.getState().onNeedsRecovery,Ft= exports.f =e=>{_react.useEffect.call(void 0, ()=>{pr.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 fr=()=>{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 gr(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 ye={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 hr={name:"@privy-io/expo",version:"0.58.1",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.2","@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 vr=({appId:e,clientId:r,storage:t=ye,supportedChains:n,baseUrl:i,logLevel:o})=>new (0, _jssdkcore2.default)({appId:e,clientId:r,supportedChains:n,storage:gr(t),sdkVersion:`expo:${hr.version}`,nativeAppIdentifier:fr(),crypto:{digest:_expocrypto.digest},baseUrl:i,logLevel:o});var _reactnative = require('react-native');var _reactfastcompare = require('react-fast-compare'); var _reactfastcompare2 = _interopRequireDefault(_reactfastcompare);var fe=_zustand.create.call(void 0, ()=>{}),wr=e=>fe.setState(r=>_reactfastcompare2.default.call(void 0, r,e)?r:e),x= exports.a =fe.getState;var _reactnativewebview = require('react-native-webview'); var _reactnativewebview2 = _interopRequireDefault(_reactnativewebview);function br(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 Sr(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(Me(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(Me(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(Me(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 Me=e=>e.replaceAll(":","-");var V=_zustand.createStore.call(void 0, )(()=>({user:null,proxyStatus:"loading"}));function b(){return V.getState().user}var ra=V.subscribe.bind(V);function Fe(e){V.setState(({user:r})=>_reactfastcompare2.default.call(void 0, r,e)?{}:{user:e})}var Te=e=>V.setState({proxyStatus:e});function A(){return _zustand.useStore.call(void 0, V,e=>e.user)}function ta(){return _zustand.useStore.call(void 0, V,e=>!!e.user)}function K(){return _zustand.useStore.call(void 0, V,e=>e.proxyStatus!=="loading")}var Qt={shouldUseAppBackedStorage:!0},Er=({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))||(Te("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(br(a)){let l=yield Sr(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:Qt,source:{uri:e.embeddedWallet.getURL()},webviewDebuggingEnabled:e.logger.level==="DEBUG",onLoad:()=>Te("loaded"),onError:console.error,onMessage:n}):null};function Cr(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),_=Math.max(...u.map(P=>P.wallet_index),0)+1,C=yield e.embeddedWallet.add({chainType:"solana",entropyId:h,entropyIdVerifier:S,hdWalletIndex:_}),k=_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, C.user).find(P=>P.wallet_index===_);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:_,entropyIdVerifier:C}=_jssdkcore.getEntropyDetailsFromAccount.call(void 0, S);v=yield e.embeddedWallet.getSolanaProvider(h,_,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 he(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 kr(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 xr=({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 _=_jssdkcore.getEntropyDetailsFromUser.call(void 0, a,S);return _?{account:S,entropy:_}: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:_,entropyIdVerifier:C}})=>({address:S.address,publicKey:S.address,walletIndex:S.wallet_index,getProvider:()=>e.embeddedWallet.getSolanaProvider(S,_,C,w,y,h,k=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){var P;yield(P=pe())==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 Cr({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 kr({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 ve(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 Ur(){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 Ur(),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 we(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 Ur(),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 Ce = _interopRequireWildcard(_expolinking); var ke = _interopRequireWildcard(_expolinking); var it = _interopRequireWildcard(_expolinking); var nt = _interopRequireWildcard(_expolinking); var at = _interopRequireWildcard(_expolinking); var ct = _interopRequireWildcard(_expolinking); var dt = _interopRequireWildcard(_expolinking); var mt = _interopRequireWildcard(_expolinking);var _expowebbrowser = require('expo-web-browser'); var Rr = _interopRequireWildcard(_expowebbrowser); var ce = _interopRequireWildcard(_expowebbrowser);function E(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 be(){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 Rr.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 Se({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(E(o)),o}})}function Se(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 ao=2*60*1e3;function so(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 Se({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"}))},ao)}).finally(()=>{r==null||r.remove()})}function Ee(e){return _chunkOWCFWPALjs.d.call(void 0, this,null,function*(){let r;_reactnative.Platform.OS==="android"&&(r=so(e));let t=yield ne({provider:"google-drive",client:e});return t!=null?t:yield r})}function _e(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 Lr(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 Fr=({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 de,ue;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:_,recoveryKey:C}=Lr(y),k,P,M;if(_==="google-drive"&&(k=yield ne({provider:_,client:e,onError:(de=o.current)==null?void 0:de.onError}),i({status:"creating-wallet"}),!k))return null;if(_==="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:Ae,iCloudRecordName:Ue}=yield oe({user:h,appId:r,client:e});P=Ae,M=Ue}return yield ve({client:e,setWallet:n,createWalletCallbacks:o,recoveryMethod:_,recoveryKey:C,setRecoveryFlowState:i,password:S,recoverySecretOverride:P,iCloudRecordNameOverride:M,solanaAccount:(ue=_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, h))!=null?ue:void 0})}),[e,c,l]),p=_react.useCallback.call(void 0, y=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){var _;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:(_=s.current)==null?void 0:_.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 _e({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:_}=Lr(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 we({client:e,walletAddress:c.address});k=M}return he({client:e,account:c,setWallet:n,recoverWalletCallbacks:a,recoveryMethod:S,setRecoveryFlowState:i,recoveryKey:_,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 Nr=({client:e,isReady:r})=>{let t=A(),n=fe(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 Dr=({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,_;let w=E(g);i.status==="creating-wallet"?(h=(y=r.current).onError)==null||h.call(y,E(w)):(_=(S=t.current).onError)==null||_.call(S,E(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 _=yield Se({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 ve({client:e,setWallet:s,createWalletCallbacks:r,recoveryMethod:"google-drive",setRecoveryFlowState:a,recoveryToken:_,solanaAccount:C})}else if(i.status==="upgrading-recovery"){if(!m)throw new Error("Embedded wallet not found");yield _e({client:e,recoveryInput:{recoveryMethod:"google-drive",wallet:m,recoveryAccessToken:_},setWalletRecoveryCallbacks:n,setRecoveryFlowState:a,setWallet:s})}else yield he({client:e,account:m,setWallet:s,recoverWalletCallbacks:t,recoveryMethod:"google-drive",setRecoveryFlowState:a,recoveryToken:_})}catch(_){v(_)}}})}_reactnative.Platform.OS==="android"&&g()},[c,i.status,l,p])};var jr=({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 Vs=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=E(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 O=()=>{let{client:e}=_react.useContext.call(void 0, f);return e};var Xs=()=>{let e=O(),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 E(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 E(l)}}),[e]);return{generateMessage:r,link:t}};var ac=()=>{let e=O(),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 E(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 E(c)}}),[e]);return{generateMessage:r,login:t}};var yc=e=>{let{client:r}=_react.useContext.call(void 0, f),t=_react.useCallback.call(void 0, i=>{var a;let o=E(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 Ec=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=E(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 xc=e=>{let{client:r}=_react.useContext.call(void 0, f),t=_react.useCallback.call(void 0, i=>{var a;let o=E(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 Tc=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=E(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 Bc=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=E(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 el=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=E(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 cl=e=>{let{appState:r,getCurrentAppState:t}=be(),{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=E(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:Ce.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 Ce.openURL(h),o({status:"polling-status"});let _=0;for(;_<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}_++,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 yl=e=>{let{client:r}=_react.useContext.call(void 0, f),t=_react.useCallback.call(void 0, i=>{var a;let o=E(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 _l=e=>{let{appState:r,getCurrentAppState:t}=be(),{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=E(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:_}=yield n.auth.farcaster.initializeAuth({relyingParty:u,redirectUrl:ke.createURL(m!=null?m:"/")});if(!S)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_generate_farcaster_uri",error:"Failed to generate farcaster uri"});if(!_)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_generate_farcaster_channel_token",error:"Failed to generate farcaster channel token"});yield ke.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:_});if(k.state==="completed"){o({status:"submitting-token"});let P=x(),M=yield n.auth.farcaster.authenticate(_chunkOWCFWPALjs.a.call(void 0, {channel_token:_,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 $e=_zustand.create.call(void 0, ()=>({status:"initial"})),H=e=>$e.setState(e,!0),Qo=$e.getState,Il= exports.y =()=>{let{client:e}=_react.useContext.call(void 0, f),r=$e(),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=E(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=Qo().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({status:"submitting-signature"});let s=x(),l=yield e.auth.farcasterV2.authenticate(i,{embedded:s==null?void 0:s.embedded});return H({status:"done"}),setTimeout(()=>H({status:"initial"}),1500),{user:l.user}}catch(a){let s=E(a);throw H({status:o,error:s}),s}}),[e]);return{init:t,login:n,state:r}};var Dl=e=>{let{client:r}=_react.useContext.call(void 0, f),t=_react.useCallback.call(void 0, i=>{var a;let o=E(i);return(a=e==null?void 0:e.onError)==null||a.call(e,o),o},[e==null?void 0:e.onError]);return{unlinkOAuth:_react.useCallback.call(void 0, a=>_chunkOWCFWPALjs.d.call(void 0, void 0,[a],function*({provider:i,subject:o}){var s;try{let{user:l}=yield r.auth.oauth.unlink(i,o);return(s=e==null?void 0:e.onSuccess)==null||s.call(e,l),l}catch(l){throw t(l)}}),[r,e==null?void 0:e.onSuccess,t])}};var zl=e=>{let{client:r}=_react.useContext.call(void 0, f),t=_react.useRef.call(void 0, e.onOAuthTokenGrant);t.current=e.onOAuthTokenGrant,_react.useEffect.call(void 0, ()=>{let{unsubscribe:n}=r.addOAuthTokensListener(i=>{t.current(i)});return n},[r])};var Yl=()=>{let{client:e}=_react.useContext.call(void 0, f);return _react.useMemo.call(void 0, ()=>({delegateWallet:_jssdkcore.delegatedActions.delegateWallet(e),revokeWallets:_jssdkcore.delegatedActions.revokeWallets(e)}),[e])};function an(e,r){return e.linked_accounts.filter(_jssdkcore.isEmbeddedWalletAccount).find(t=>t.address===r)}function Qe(e){let r=b();if(!r)throw new Error("User must be authenticated to perform this operation");let t=an(r,e);if(!t)throw new Error(`No wallet found with address ${e}`);return t}var nd=()=>{let{client:e}=_react.useContext.call(void 0, f);return _react.useMemo.call(void 0, ()=>({addSessionSigners:({address:r,signers:t})=>_jssdkcore.addSessionSigners.call(void 0, {client:e,wallet:Qe(r),signers:t.map(n=>({signer_id:n.signerId,override_policy_ids:n.policyIds}))}),removeSessionSigners:({address:r})=>_jssdkcore.removeSessionSigners.call(void 0, {client:e,wallet:Qe(r)})}),[e])};var dd=()=>{let{client:e}=_react.useContext.call(void 0, f);return _react.useMemo.call(void 0, ()=>({sendCode(n){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({newEmailAddress:t}){Zr(),yield e.auth.email.sendCode(t)})},updateEmail(i){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({newEmailAddress:t,code:n}){let{address:o}=Zr(),{user:a}=yield e.auth.email.updateEmail({oldEmailAddress:o,newEmailAddress:t,code:n});return a})}}),[e])};function Zr(){let r=pn().linked_accounts.find(t=>t.type==="email");if(!r)throw new (0, _jssdkcore.PrivyClientError)({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 r}function pn(){let e=b();if(!e)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_update_before_logged_in",error:"Must be logged in to update a user profile."});return e}var hd=()=>{let{client:e}=_react.useContext.call(void 0, f);return _react.useMemo.call(void 0, ()=>({sendCode(n){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({newPhoneNumber:t}){rt(),yield e.auth.phone.sendCode(t)})},updatePhone(i){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({newPhoneNumber:t,code:n}){let{phoneNumber:o}=rt(),{user:a}=yield e.auth.phone.updatePhone({oldPhoneNumber:o,newPhoneNumber:t,code:n});return a})}}),[e])};function rt(){let r=gn().linked_accounts.find(t=>t.type==="phone");if(!r)throw new (0, _jssdkcore.PrivyClientError)({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 r}function gn(){let e=b();if(!e)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_update_before_logged_in",error:"Must be logged in to update a user profile."});return e}var T=(e,r)=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){let t=yield ce.openAuthSessionAsync(e,r,{createTask:!1});if(t.type!=="success")throw t.type===ce.WebBrowserResultType.CANCEL||t.type===ce.WebBrowserResultType.DISMISS?new (0, _jssdkcore.PrivyClientError)({error:"OAuth session was cancelled",code:"oauth_session_failed"}):new (0, _jssdkcore.PrivyClientError)({error:"OAuth session failed",code:"oauth_session_failed"});return hn(t.url)});function hn(e){let{queryParams:r}=nt.parse(e);return r}var xd=()=>{let{client:e}=_react.useContext.call(void 0, f),r=_react.useMemo.call(void 0, ()=>_jssdkcore.crossApp.loginWithCrossAppAuth({client:e,openAuthSession:T}),[e]);return{loginWithCrossApp:_react.useCallback.call(void 0, o=>_chunkOWCFWPALjs.d.call(void 0, void 0,[o],function*({appId:n,redirectUri:i}){if(b())throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_login_with_cross_app_while_already_logged_in",error:"Already logged in, use `linkCrossAppAccount` if you are trying to link a cross app account to an existing account"});let{user:s}=yield r({providerAppId:n,redirectUrl:it.createURL(i||"/")});return{user:s}}),[r])}};var Fd=()=>{let{client:e}=_react.useContext.call(void 0, f),r=_react.useMemo.call(void 0, ()=>_jssdkcore.crossApp.linkWithCrossAppAuth({client:e,openAuthSession:T}),[e]);return{linkWithCrossApp:_react.useCallback.call(void 0, o=>_chunkOWCFWPALjs.d.call(void 0, void 0,[o],function*({appId:n,redirectUri:i}){if(!b())throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_link_cross_app_before_logged_in",error:"Must be logged in to link a cross app account, Use `loginWithCrossAppAccount` to login with cross app"});return{user:yield r({providerAppId:n,redirectUrl:at.createURL(i||"/")})}}),[r])}};var zd=()=>{let{client:e}=_react.useContext.call(void 0, f),r=_react.useMemo.call(void 0, ()=>_jssdkcore.crossApp.wallet.signMessage({client:e,openAuthSession:T}),[e]);return _react.useMemo.call(void 0, ()=>({signMessage:({address:t,message:n,redirectUri:i="/"})=>r({user:b(),address:t,message:n,redirectUrl:ct.createURL(i)})}),[r])};var Qd=()=>{let{client:e}=_react.useContext.call(void 0, f),r=_react.useMemo.call(void 0, ()=>_jssdkcore.crossApp.wallet.signTypedData({client:e,openAuthSession:T}),[e]);return _react.useMemo.call(void 0, ()=>({signTypedData:({address:t,typedData:n,redirectUri:i="/"})=>r({user:b(),address:t,typedData:n,redirectUrl:dt.createURL(i)})}),[r])};var nu=()=>{let{client:e}=_react.useContext.call(void 0, f),r=_react.useMemo.call(void 0, ()=>_jssdkcore.crossApp.wallet.sendTransaction({client:e,openAuthSession:T}),[e]);return _react.useMemo.call(void 0, ()=>({sendTransaction:({address:t,transaction:n,redirectUri:i="/"})=>r({user:b(),address:t,transaction:n,redirectUrl:mt.createURL(i)})}),[r])};var mu=()=>{let{client:e}=_react.useContext.call(void 0, f);return{setRecovery:_react.useCallback.call(void 0, t=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){var s;let n=b(),i=e.app.appId;if(!n)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before attempting to modify the recovery method."});let o=(s=_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, n))!=null?s:_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, n);if(!o)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});if(_jssdkcore.isUnifiedWallet.call(void 0, o))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"});try{o.chain_type==="ethereum"?yield e.embeddedWallet.getProvider(o):o.chain_type==="solana"&&(yield e.embeddedWallet.getSolanaProvider(o,o.address,"solana-address-verifier"))}catch(l){throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"})}_jssdkcore.throwIfInvalidRecoveryUpgradePath.call(void 0, {currentRecoveryMethod:o.recovery_method,upgradeToRecoveryMethod:t.recoveryMethod});let a=yield jn({appId:i,client:e,user:n,primaryAccount:o,recoveryParams:t});try{let{user:l}=yield e.embeddedWallet.setRecovery(a);return{user:l}}catch(l){throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_set_recovery_error",error:l instanceof Error?l.message:"Error setting password on embedded wallet"})}}),[e])}},jn=o=>_chunkOWCFWPALjs.d.call(void 0, void 0,[o],function*({appId:e,client:r,user:t,primaryAccount:n,recoveryParams:i}){switch(i.recoveryMethod){case"privy":return{recoveryMethod:"privy",wallet:n};case"user-passcode":return _chunkOWCFWPALjs.b.call(void 0, _chunkOWCFWPALjs.a.call(void 0, {},i),{wallet:n});case"google-drive":{let a=yield Ee(r);return{recoveryMethod:"google-drive",wallet:n,recoveryAccessToken:a}}case"icloud":{let{recoverySecret:a,iCloudRecordName:s}=yield oe({appId:e,client:r,user:t});return{recoveryMethod:"icloud-native",recoverySecretOverride:a,iCloudRecordNameOverride:s,wallet:n}}case"recovery-encryption-key":return{recoveryMethod:"recovery-encryption-key",wallet:n,recoveryKey:i.recoveryKey};default:throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}});var Su=()=>{let{client:e}=_react.useContext.call(void 0, f);return{recover:_react.useCallback.call(void 0, t=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){var c;let n=b();if(!n)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before attempting to modify the recovery method."});let i=(c=_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, n))!=null?c:_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, n);if(!i)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});if(_jssdkcore.isUnifiedWallet.call(void 0, i))throw new (0, _jssdkcore.PrivyClientError)({code:"unsupported_wallet_type",error:"User owned 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"});let o,a,s,l;switch(t.recoveryMethod){case"user-passcode":a=t.password;break;case"google-drive":s=yield Ee(e);break;case"icloud":let{recoverySecret:u}=yield we({client:e,walletAddress:i.address,chainType:i.chain_type});l=u;break;case"recovery-encryption-key":o=t.recoveryKey;break;case"privy":break;default:throw new (0, _jssdkcore.PrivyClientError)({code:"unsupported_recovery_method",error:`Unsupported recovery options ${t}`})}try{i.chain_type==="ethereum"?yield e.embeddedWallet.getProvider(i,a,s,l,o):i.chain_type==="solana"&&(yield e.embeddedWallet.getSolanaProvider(i,i.address,"solana-address-verifier",a,s,l))}catch(u){throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"})}}),[e])}};var Ze=(e={})=>{let{wallet:r,createWalletCallbacks:t,recoverWalletCallbacks:n,setWalletRecoveryCallbacks:i}=_react.useContext.call(void 0, f),{onCreateWalletSuccess:o,onCreateWalletError:a,onRecoverWalletError:s,onRecoverWalletSuccess:l,onSetWalletRecoverySuccess:c,onSetWalletRecoveryError:u}=e;return _react.useEffect.call(void 0, ()=>{t.current={onSuccess:o,onError:a}},[o,a]),_react.useEffect.call(void 0, ()=>{n.current={onSuccess:l,onError:s}},[l,s]),_react.useEffect.call(void 0, ()=>{i.current={onSuccess:c,onError:u}},[l,s]),r};var Au=({onStateChange:e})=>{let r=Ze();return _react.useEffect.call(void 0, ()=>{e(r)},[r])};var Iu=()=>{let{getIdentityToken:e}=_react.useContext.call(void 0, f);return{getIdentityToken:e}};var Vu=e=>{let{client:r}=_react.useContext.call(void 0, f),t=_react.useCallback.call(void 0, i=>{var a;let o=E(i);return(a=e==null?void 0:e.onError)==null||a.call(e,o),o},[e==null?void 0:e.onError]);return{create:_react.useCallback.call(void 0, ()=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){var i;try{if(b())throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_to_create_guest_account_for_logged_in_user",error:"Already logged in, you cannot create a guest account"});let a=x(),s=yield r.auth.guest.create({embedded:a==null?void 0:a.embedded});return(i=e==null?void 0:e.onSuccess)==null||i.call(e,s.user,s.is_new_user),s.user}catch(o){throw t(o)}}),[r,t,e==null?void 0:e.onSuccess])}};function qu({onMfaRequired:e}){let{client:r}=_react.useContext.call(void 0, f);_react.useEffect.call(void 0, ()=>{function t(){return _chunkOWCFWPALjs.d.call(void 0, this,null,function*(){var i;let n=b();yield e((i=n==null?void 0:n.mfa_methods.map(({type:o})=>o))!=null?i:[])})}return r.mfaPromises.on("mfaRequired",t),()=>{r.mfaPromises.off("mfaRequired",t)}},[r,e])}var ei=e=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){var n;let t=yield(yield Promise.resolve().then(() => _interopRequireWildcard(require("react-native-passkeys")))).create({rp:e.rp,user:e.user,challenge:e.challenge,pubKeyCredParams:e.pubKeyCredParams,excludeCredentials:e.excludeCredentials,authenticatorSelection:e.authenticatorSelection,timeout:12e4});if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_create_passkey",error:"Could not create passkey"});return _chunkOWCFWPALjs.b.call(void 0, _chunkOWCFWPALjs.a.call(void 0, {},t),{type:(n=t.type)!=null?n:"public-key",clientExtensionResults:{}})});var rr=e=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){var n;let t=yield(yield Promise.resolve().then(() => _interopRequireWildcard(require("react-native-passkeys")))).get({rpId:e.rpId,challenge:e.challenge,allowCredentials:e.allowCredentials,timeout:12e4});if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"no_passkey_found_for_challenge",error:"Could not find a matching passkey to login with"});return _chunkOWCFWPALjs.b.call(void 0, _chunkOWCFWPALjs.a.call(void 0, {},t),{type:(n=t.type)!=null?n:"public-key",clientExtensionResults:{}})});function yt(e){var r;return{id:e.id,client_extension_results:{app_id:e.clientExtensionResults.appid,cred_props:e.clientExtensionResults.credProps,hmac_create_secret:e.clientExtensionResults.hmacCreateSecret},raw_id:e.rawId,type:e.type,authenticator_attachment:(r=e.authenticatorAttachment)!=null?r:"platform",response:{authenticator_data:e.response.authenticatorData,client_data_json:e.response.clientDataJSON,signature:e.response.signature,user_handle:e.response.userHandle}}}function ft(e){var r,t,n,i;return{challenge:e.challenge,rpId:e.rp_id,extensions:{appid:(r=e.extensions)==null?void 0:r.app_id,credProps:(t=e.extensions)==null?void 0:t.cred_props,hmacCreateSecret:(n=e.extensions)==null?void 0:n.hmac_create_secret},timeout:e.timeout,allowCredentials:(i=e.allow_credentials)==null?void 0:i.map(({id:o,type:a,transports:s})=>({id:o,type:a,transports:s})),userVerification:e.user_verification}}function sm(e){var r,t,n,i,o,a,s,l;return{rp:e.rp,user:{id:e.user.id,name:e.user.name,displayName:e.user.display_name},challenge:e.challenge,pubKeyCredParams:e.pub_key_cred_params,extensions:{hmacCreateSecret:(r=e.extensions)==null?void 0:r.hmac_create_secret,credProps:(n=(t=e.extensions)==null?void 0:t.cred_props)==null?void 0:n.rk,appid:(i=e.extensions)==null?void 0:i.app_id},attestation:e.attestation,excludeCredentials:e.exclude_credentials,authenticatorSelection:{authenticatorAttachment:(o=e.authenticator_selection)==null?void 0:o.authenticator_attachment,residentKey:(a=e.authenticator_selection)==null?void 0:a.resident_key,userVerification:(s=e.authenticator_selection)==null?void 0:s.user_verification,requireResidentKey:(l=e.authenticator_selection)==null?void 0:l.require_resident_key}}}function mm(){let{client:e}=_react.useContext.call(void 0, f),r=_react.useCallback.call(void 0, o=>_chunkOWCFWPALjs.d.call(void 0, this,null,function*(){var a,s;switch(o.method){case"sms":yield e.mfa.sms.sendCode({action:"verify"});return;case"passkey":let{options:l}=yield e.mfa.passkey.generateAuthenticationOptions({relying_party:o.relyingParty||((s=(a=x())==null?void 0:a.mfa)==null?void 0:s.relyingParty)});return ft(l);case"totp":return;default:throw new Error(`Unsupported MFA method: ${o.mfaMethod}`)}}),[e]),t=_react.useCallback.call(void 0, o=>_chunkOWCFWPALjs.d.call(void 0, this,null,function*(){var a,s,l,c,u,m,p;switch(o.method){case"totp":case"sms":if(typeof o.mfaCode!="string")throw new (0, _jssdkcore.PrivyClientError)({code:"invalid_mfa_code",error:"Invalid MFA code"});(l=e.mfaPromises.rootPromise.current)==null||l.resolve({mfaMethod:o.method,mfaCode:o.mfaCode,relyingParty:o.relyingParty||((s=(a=x())==null?void 0:a.mfa)==null?void 0:s.relyingParty)||""}),yield new Promise((y,h)=>{e.mfaPromises.submitPromise.current={resolve:y,reject:h}});break;case"passkey":if(typeof o.mfaCode=="string")throw new (0, _jssdkcore.PrivyClientError)({code:"invalid_passkey_response",error:"Invalid authenticator response"});let v=yield rr(o.mfaCode),g=yt(v);(m=e.mfaPromises.rootPromise.current)==null||m.resolve({mfaMethod:o.method,relyingParty:o.relyingParty||((u=(c=x())==null?void 0:c.mfa)==null?void 0:u.relyingParty)||"",mfaCode:g}),yield new Promise((y,h)=>{e.mfaPromises.submitPromise.current={resolve:y,reject:h}});break;default:let w=new (0, _jssdkcore.PrivyClientError)({code:"unsupported_mfa_method",error:"Unsupported MFA method"});throw(p=e.mfaPromises.rootPromise.current)==null||p.reject(w),w}}),[e]),n=_react.useCallback.call(void 0, ()=>_chunkOWCFWPALjs.d.call(void 0, this,null,function*(){yield e.mfa.verifyMfa()}),[e]),i=_react.useCallback.call(void 0, ()=>{var o;(o=e.mfaPromises.rootPromise.current)==null||o.reject(new (0, _jssdkcore.PrivyClientError)({code:"mfa_canceled",error:"MFA canceled"}))},[e]);return{init:r,submit:t,prompt:n,cancel:i}}function hm(){let{client:e}=_react.useContext.call(void 0, f),r=_react.useCallback.call(void 0, i=>_chunkOWCFWPALjs.d.call(void 0, this,null,function*(){switch(i.method){case"sms":case"totp":return yield e.mfa.initEnrollMfa(i);case"passkey":return;default:throw new Error(`Unsupported MFA method: ${i.method}`)}}),[e]),t=_react.useCallback.call(void 0, i=>_chunkOWCFWPALjs.d.call(void 0, this,null,function*(){switch(i.method){case"sms":case"totp":case"passkey":yield e.mfa.submitEnrollMfa(i);return;default:throw new Error(`Unsupported MFA method: ${i.method}`)}}),[e]),n=_react.useCallback.call(void 0, i=>_chunkOWCFWPALjs.d.call(void 0, this,null,function*(){switch(i.method){case"sms":case"totp":yield e.mfa.unenrollMfa(i.method);return;case"passkey":yield e.mfa.submitEnrollMfa({method:"passkey",credentialIds:[],removeForLogin:i.removeForLogin});return;default:throw new Error(`Unsupported MFA method: ${i.method}`)}}),[e]);return{initMfaEnrollment:r,submitMfaEnrollment:t,unenrollMfa:n}}var ci=()=>{let e=A(),r=O(),t=_react.useMemo.call(void 0, ()=>{let o=_jssdkcore.getAllUserEmbeddedEthereumWallets.call(void 0, e).map(a=>{let s=_jssdkcore.getEntropyDetailsFromUser.call(void 0, e,a);return s?{account:a,entropy:s}:null});return o.some(a=>a===null)?[]:o.filter(a=>a!==null).map(({account:a,entropy:{entropyId:s,entropyIdVerifier:l}})=>({address:a.address,walletIndex:a.wallet_index,chainType:a.chain_type,getProvider:()=>r.embeddedWallet.getEthereumProvider({wallet:a,entropyId:s,entropyIdVerifier:l,onNeedsRecovery:c=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){var u;yield(u=pe())==null?void 0:u(c)})})}))},[r,e]),n=_react.useCallback.call(void 0, (...o)=>_chunkOWCFWPALjs.d.call(void 0, void 0,[...o],function*({createAdditional:i=!1}={}){let{user:a}=yield r.user.get(),s=_jssdkcore.getAllUserEmbeddedEthereumWallets.call(void 0, a);if(!i&&s.length>0)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Wallet already exists for this user. Set `createAdditional` to `true` to create another wallet"});let l=_jssdkcore.getEntropyDetailsFromUser.call(void 0, a);if(!l){let g=yield r.embeddedWallet.create({});return or(g.user,0),{user:g.user}}let{entropyId:c,entropyIdVerifier:u}=l;if(u==="solana-address-verifier"){let g=_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, a),w=yield r.embeddedWallet.create({solanaAccount:g});return or(w.user,0),{user:w.user}}let p=s.map(g=>g.wallet_index).reduce((g,w)=>Math.max(g,w),0)+1,v=yield r.embeddedWallet.add({chainType:"ethereum",hdWalletIndex:p,entropyId:c,entropyIdVerifier:u});return or(v.user,p),{user:v.user}}),[r]);return{wallets:t,create:n}};function or(e,r){let t=_jssdkcore.getAllUserEmbeddedEthereumWallets.call(void 0, e).find(n=>n.wallet_index===r);if(!e||!t)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Unknown error creating wallet"})}var di=(e={})=>{let{solanaWallet:r,createSolanaWalletCallbacks:t,recoverSolanaWalletCallbacks:n}=_react.useContext.call(void 0, f),{onCreateWalletSuccess:i,onCreateWalletError:o,onRecoverWalletError:a,onRecoverWalletSuccess:s}=e;return _react.useEffect.call(void 0, ()=>{t.current={onSuccess:i,onError:o}},[i,o]),_react.useEffect.call(void 0, ()=>{n.current={onSuccess:s,onError:a}},[s,a]),r};var yi=()=>{let e=A(),r=O(),t=_react.useMemo.call(void 0, ()=>{let i=_jssdkcore.getEntropyDetailsFromUser.call(void 0, e);if(!i)return[];let o=_jssdkcore.getAllUserEmbeddedBitcoinWallets.call(void 0, e),{entropyId:a,entropyIdVerifier:s}=i;return o.map(l=>({address:l.address,walletIndex:l.wallet_index,publicKey:l.public_key,chainType:l.chain_type,getProvider:()=>_jssdkcore.isUnifiedWallet.call(void 0, l)?Promise.reject(new (0, _jssdkcore.PrivyClientError)({code:"unsupported_wallet_type",error:"Bitcoin wallet providers are only supported for on-device execution and this app uses TEE execution. Use the useSignRawHash hook from @privy-io/expo/extended-chains to sign over a hash with this wallet. Learn more at https://docs.privy.io/recipes/tee-wallet-migration-guide"})):r.embeddedWallet.getBitcoinProvider({wallet:l,entropyId:a,entropyIdVerifier:s})}))},[r,e]),n=_react.useCallback.call(void 0, a=>_chunkOWCFWPALjs.d.call(void 0, void 0,[a],function*({chainType:i,createAdditional:o=!1}){var y;let s=r.app.getConfig();if(((y=s==null?void 0:s.embedded_wallet_config)==null?void 0:y.mode)==="user-controlled-server-wallets-only")throw i==="bitcoin-segwit"?new (0, _jssdkcore.PrivyClientError)({code:"unsupported_wallet_type",error:"This app uses TEE execution. Use the useCreateWallet hook from @privy-io/expo/extended-chains to create the wallet instead. Learn more https://docs.privy.io/recipes/tee-wallet-migration-guide"}):new (0, _jssdkcore.PrivyClientError)({code:"unsupported_wallet_type",error:`Bitcoin (${i}) wallets are only supported for on-device execution and this app uses TEE execution. Learn more https://docs.privy.io/recipes/tee-wallet-migration-guide`});let{user:l}=yield r.user.get(),c=_jssdkcore.getEntropyDetailsFromUser.call(void 0, l);if(!c)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"No existing wallet for this user, create an Ethereum walet first to add a Bitcoin wallet"});let{entropyId:u,entropyIdVerifier:m}=c,p=_jssdkcore.getAllUserEmbeddedBitcoinWallets.call(void 0, l).filter(h=>h.chain_type===i);if(!o&&p.length>0)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Wallet already exists for this user. Set `createAdditional` to `true` to create another wallet"});let v=p.length===0?0:Math.max(...p.map(h=>h.wallet_index),0)+1,g=yield r.embeddedWallet.add({chainType:i,hdWalletIndex:v,entropyId:u,entropyIdVerifier:m}),w=_jssdkcore.getAllUserEmbeddedBitcoinWallets.call(void 0, g.user).find(h=>h.chain_type===i&&h.wallet_index===v);if(!g.user||!w)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Unknown error creating wallet"});return{user:g.user,provider:yield r.embeddedWallet.getBitcoinProvider({wallet:w,entropyId:u,entropyIdVerifier:m})}}),[r]);return{wallets:t,create:n}};var ar=()=>{let{isReady:e,logout:r,getAccessToken:t,error:n}=_react.useContext.call(void 0, f);return{user:A(),isReady:e,error:n,logout:r,getAccessToken:t}};var vi=()=>{let e=O();return _react.useMemo.call(void 0, ()=>({generateAuthorizationSignature(t){return _chunkOWCFWPALjs.d.call(void 0, this,null,function*(){let{signature:n}=yield _jssdkcore.generateAuthorizationSignature.call(void 0, (...i)=>e.embeddedWallet.signWithUserSigner(...i),t);return{signature:n}})}}),[e])};function bt(e,r){return _chunkOWCFWPALjs.d.call(void 0, this,null,function*(){var i;let t=(i=_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, r))!=null?i:_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, r);if(!t||_jssdkcore.isUnifiedWallet.call(void 0, t))return{success:!0};if(t.imported)throw new Error("Imported wallets cannot be migrated");if(_jssdkcore.getAllUserEmbeddedBitcoinWallets.call(void 0, r).length>0)throw new Error("Bitcoin wallets cannot be migrated");let n=r.linked_accounts.filter(_jssdkcore.isEmbeddedWalletAccount).filter(o=>!o.imported).filter(o=>o.chain_type==="ethereum"||o.chain_type==="solana");return t.chain_type==="ethereum"?yield e.embeddedWallet.getProvider(t):t.chain_type==="solana"&&(yield e.embeddedWallet.getSolanaProvider(t,t.address,"solana-address-verifier")),yield e.embeddedWallet.delegateWallets({rootWallet:{address:t.address,chainType:t.chain_type,imported:t.imported},delegatedWallets:n.map(o=>({address:o.address,chainType:o.chain_type,walletIndex:o.wallet_index}))}),yield e.user.get(),{success:!0}})}var St=()=>{let e=O();return{migrate:_react.useCallback.call(void 0, ()=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){var o;let t=b(),n=e.app.getConfig();if(((o=n==null?void 0:n.embedded_wallet_config)==null?void 0:o.mode)!=="user-controlled-server-wallets-only")return{success:!0};if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_before_logged_in",error:"User must be authenticated before migrating wallets"});return bt(e,t)}),[e])}};var Et=({disabled:e})=>{let{migrate:r}=St(),{user:t}=ar(),n=_react.useRef.call(void 0, !1);return _react.useEffect.call(void 0, ()=>{e||t&&(n.current||(n.current=!0,r().then(()=>{console.info("Migrated wallets for user")}).catch(i=>{console.warn("Unable to migrate wallets: ",i)}).finally(()=>{n.current=!1})))},[r,t,e]),null};var f=_react.createContext.call(void 0, null),re;function sy(e){return re?re.getAccessToken():e!=null&&e.strict?Promise.reject(new (0, _jssdkcore.PrivyClientError)({code:"attempted_to_read_storage_before_client_initialized",error:"Called `getAccessToken` before client initialized"})):(console.warn("Called `getAccessToken` before client initialized"),Promise.resolve(null))}var cy=e=>{var dr,ur,mr;Oi();let[r,t]=_react.useState.call(void 0, _reactnative.AppState.currentState==="active");_react.useEffect.call(void 0, ()=>{let j=_reactnative.AppState.addEventListener("change",It=>{t(It==="active")});return()=>{j.remove()}},[]),_react.useEffect.call(void 0, ()=>wr(e.config),[e.config]);let[n,i]=_react.useState.call(void 0, !1),[o,a]=_react.useState.call(void 0, null),[s,l]=_react.useState.call(void 0, !1),[c,u]=_react.useState.call(void 0, {status:"disconnected",account:null}),[m,p]=_react.useState.call(void 0, {status:"disconnected"}),[v,g]=_react.useState.call(void 0, {status:"initial"}),[w,y]=_react.useState.call(void 0, {status:"initial"}),[h,S]=_react.useState.call(void 0, {status:"initial"}),[_,C]=_react.useState.call(void 0, {status:"initial"}),[k,P]=_react.useState.call(void 0, {status:"initial"}),[M,de]=_react.useState.call(void 0, {status:"initial"}),[ue,Ae]=_react.useState.call(void 0, {status:"initial"}),Ue=_react.useRef.call(void 0, {}),Re=_react.useRef.call(void 0, {}),Oe=_react.useRef.call(void 0, {}),Ie=_react.useRef.call(void 0, {}),cr=_react.useRef.call(void 0, {}),lr=_react.useRef.call(void 0, {}),me=_react.useCallback.call(void 0, j=>{if(j){Fe(j),a(null);return}Fe(null),g({status:"initial"}),y({status:"initial"}),u({status:"disconnected",account:null})},[]),R=_react.useMemo.call(void 0, ()=>{let j=e.storage||ye;return e.client?re=e.client:re=vr({appId:e.appId,clientId:e.clientId,supportedChains:e.supportedChains,storage:j,baseUrl:e.baseUrl,logLevel:e.logLevel}),re.setCallbacks({setUser:me,setIsReady:l}),re},[e.client,e.storage,e.appId,e.clientId,e.baseUrl,e.supportedChains,e.logLevel,me]),Pt=_react.useCallback.call(void 0, ()=>(me(null),R.auth.logout()),[me,R]),Wt=_react.useCallback.call(void 0, ()=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){try{return yield R.getAccessToken()}catch(j){return console.debug(j),null}}),[R]),xt=_react.useCallback.call(void 0, ()=>R.getIdentityToken(),[R]);jr({client:R,isUserInitialized:n,setIsUserInitialized:i,setError:a});let At=Fr({client:R,appId:e.appId,createWalletCallbacks:Re,recoverWalletCallbacks:Oe,setWalletRecoveryCallbacks:Ie,setRecoveryFlowState:S,wallet:c,setWallet:u}),Ut=xr({client:R,createSolanaWalletCallbacks:cr,recoverSolanaWalletCallbacks:lr,setSolanaRecoveryFlowState:C,solanaWallet:m,setSolanaWallet:p});Dr({client:R,createWalletCallbacks:Re,recoverWalletCallbacks:Oe,setWalletRecoveryCallbacks:Ie,recoveryFlowState:h,oAuthState:w,setRecoveryFlowState:S,setWallet:u,appStateVisible:r});let{customAuthStateIsSettled:Rt}=Nr({client:R,isReady:n}),Ot=K();return _react2.default.createElement(_react2.default.Fragment,null,_react2.default.createElement(f.Provider,{value:{client:R,isReady:Ot&&n&&Rt,error:o,logout:Pt,getAccessToken:Wt,getIdentityToken:xt,wallet:_chunkOWCFWPALjs.a.call(void 0, _chunkOWCFWPALjs.a.call(void 0, {},c),At),solanaWallet:_chunkOWCFWPALjs.a.call(void 0, _chunkOWCFWPALjs.a.call(void 0, {},m),Ut),oAuthState:w,oAuthCallbacks:Ue,recoveryFlowState:h,setRecoveryFlowState:S,solanaRecoveryFlowState:_,setSolanaRecoveryFlowState:C,createWalletCallbacks:Re,recoverWalletCallbacks:Oe,setWalletRecoveryCallbacks:Ie,createSolanaWalletCallbacks:cr,recoverSolanaWalletCallbacks:lr,setOAuthState:y,siweState:k,setSiweState:P,otpState:v,setOtpState:g,passkeyState:M,setPasskeyState:de,farcasterState:ue,setFarcasterState:Ae}},e.children,_react2.default.createElement(Et,{disabled:(mr=(ur=(dr=e.config)==null?void 0:dr.embedded)==null?void 0:ur.disableAutomaticMigration)!=null?mr:!1})),_react2.default.createElement(_reactnative.View,{style:{width:0,height:0,overflow:"hidden"}},_react2.default.createElement(Er,{client:R,isClientReady:s})))},Oi=()=>{if(_react.useContext.call(void 0, f))throw new (0, _jssdkcore.PrivyClientError)({code:"configuration_error",error:"Found multiple instances of PrivyProvider, ensure there is only one mounted in your application tree."})};var gy=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=E(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]),a=_react.useCallback.call(void 0, c=>_chunkOWCFWPALjs.d.call(void 0, void 0,[c],function*({signature:s,messageOverride:l}){var u;try{if(!b())throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_link_siwe_before_logged_in",error:"Must be logged in to link a wallet, Use `useLoginWithSiwe` to login with a wallet"});t({status:"submitting-signature"});let{user:p}=yield r.auth.siwe.linkWithSiwe(s,void 0,l);return t({status:"done"}),(u=e==null?void 0:e.onSuccess)==null||u.call(e,p),p}catch(m){throw i(m)}}),[r,i,e==null?void 0:e.onSuccess]);return{generateSiweMessage:o,linkWithSiwe:a,state:n}};exports.a = x; exports.b = b; exports.c = ra; exports.d = A; exports.e = ta; exports.f = Ft; exports.g = E; exports.h = J; exports.i = ye; exports.j = vr; exports.k = gy; exports.l = Vs; exports.m = O; exports.n = Xs; exports.o = ac; exports.p = yc; exports.q = Ec; exports.r = xc; exports.s = Tc; exports.t = Bc; exports.u = el; exports.v = cl; exports.w = yl; exports.x = _l; exports.y = Il; exports.z = Dl; exports.A = zl; exports.B = Yl; exports.C = nd; exports.D = dd; exports.E = hd; exports.F = xd; exports.G = Fd; exports.H = zd; exports.I = Qd; exports.J = nu; exports.K = mu; exports.L = Su; exports.M = Ze; exports.N = Au; exports.O = Iu; exports.P = Vu; exports.Q = qu; exports.R = ei; exports.S = rr; exports.T = sm; exports.U = mm; exports.V = hm; exports.W = ci; exports.X = di; exports.Y = yi; exports.Z = ar; exports._ = vi; exports.$ = St; exports.aa = f; exports.ba = sy; exports.ca = cy;
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } }var _chunkFKGFAPVXjs = require('./chunk-FKGFAPVX.js');var _chunkOWCFWPALjs = require('./chunk-OWCFWPAL.js');var _expolinking = require('expo-linking'); var l = _interopRequireWildcard(_expolinking);var _expowebbrowser = require('expo-web-browser'); var d = _interopRequireWildcard(_expowebbrowser);var _react = require('react');var _reactnative = require('react-native');var _jssdkcore = require('@privy-io/js-sdk-core');var _expoappleauthentication = require('expo-apple-authentication'); var c = _interopRequireWildcard(_expoappleauthentication);function M(e){return _chunkOWCFWPALjs.d.call(void 0, this,null,function*(){try{return yield c.signInAsync({state:e.state,requestedScopes:[c.AppleAuthenticationScope.EMAIL,c.AppleAuthenticationScope.FULL_NAME]})}catch(i){throw i instanceof Error&&"code"in i&&i.code==="ERR_REQUEST_CANCELED"?new (0, _jssdkcore.PrivyClientError)({error:"Apple login was cancelled",code:e.isLogin?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):i}})}var W=(e={})=>{let{oAuthState:i,setOAuthState:r,oAuthCallbacks:D,client:u}=_react.useContext.call(void 0, _chunkFKGFAPVXjs.aa),j=_chunkFKGFAPVXjs.e.call(void 0, ),a=e.action?e.action==="login":!j;_react.useEffect.call(void 0, ()=>{D.current={onSuccess:e.onSuccess,onError:e.onError}},[e.onSuccess,e.onError]);let v=_react.useCallback.call(void 0, U=>{var A;let n=_chunkFKGFAPVXjs.g.call(void 0, U);return r({status:"error",error:n}),(A=e==null?void 0:e.onError)==null||A.call(e,n),n},[e==null?void 0:e.onError]);return{start:_react.useCallback.call(void 0, function(_e){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({provider:n,redirectUri:A,isLegacyAppleIosBehaviorEnabled:Q=!1,disableSignup:C,onAppleOAuthUserInfo:I}){var P,x,F;r({status:"loading"});let E=_chunkFKGFAPVXjs.b.call(void 0, );try{if(E&&e.action==="login")throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_login_with_oauth_while_already_logged_in",error:"Already logged in, if trying to link an OAuth account use `useLinkWithOAuth`"});if(!E&&e.action==="link")throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_link_oauth_before_logged_in",error:"Must be logged in to link an OAuth account, use `useLoginWithOAuth`"});let h=l.createURL(A||"/"),{url:m}=yield u.auth.oauth.generateURL(n,h),t,_;if(_reactnative.Platform.OS==="ios"&&n==="apple"&&!Q){let g=(P=new URL(m).searchParams.get("state"))!=null?P:"",o=yield M({state:g,isLogin:a});if(console.log("credentials",o),!o.authorizationCode||!o.state)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:a?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(a){let k=_chunkFKGFAPVXjs.a.call(void 0, ),N=yield u.auth.oauth.loginWithCode(o.authorizationCode,o.state,n,"raw",C?"no-signup":"login-or-sign-up",{embedded:k==null?void 0:k.embedded});t=N.user,_=N.is_new_user}else({user:t}=yield u.auth.oauth.linkWithCode(o.authorizationCode,o.state,n,"raw"));return I&&I({fullName:o.fullName,email:o.email}),(x=e==null?void 0:e.onSuccess)==null||x.call(e,t,_),r({status:"done"}),t!=null?t:void 0}let G=_reactnative.Platform.OS==="android"?m.replace("x.com","twitter.com"):m,p=yield d.openAuthSessionAsync(G,h,{createTask:!1});if(p.type!=="success")throw[d.WebBrowserResultType.CANCEL,d.WebBrowserResultType.DISMISS].includes(p.type)?new (0, _jssdkcore.PrivyClientError)({error:"OAuth was cancelled",code:a?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):new (0, _jssdkcore.PrivyClientError)({error:"OAuth session failed",code:a?"failed_to_complete_login_with_oauth":"failed_to_complete_link_with_oauth"});let{queryParams:J}=l.parse(p.url),{privy_oauth_state:O,privy_oauth_code:y}=J;if(!y||!O)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:a?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(a){let w=_chunkFKGFAPVXjs.a.call(void 0, ),g=yield u.auth.oauth.loginWithCode(y,O,n,void 0,C?"no-signup":"login-or-sign-up",{embedded:w==null?void 0:w.embedded});t=g.user,_=g.is_new_user}else({user:t}=yield u.auth.oauth.linkWithCode(y,O,n));return(F=e==null?void 0:e.onSuccess)==null||F.call(e,t,_),yield l.openURL(p.url.split("?")[0]),r({status:"done"}),t!=null?t:void 0}catch(h){throw v(h),h}})},[u,r,v]),state:i}};function le(e){let{state:i,start:r}=W(_chunkOWCFWPALjs.b.call(void 0, _chunkOWCFWPALjs.a.call(void 0, {},e),{action:"login"}));return{state:i,login:r}}function he(e){let{state:i,start:r}=W(_chunkOWCFWPALjs.b.call(void 0, _chunkOWCFWPALjs.a.call(void 0, {},e),{action:"link"}));return{state:i,link:r}}function ce(e){return W(e)}exports.a = le; exports.b = he; exports.c = ce;
@@ -0,0 +1 @@
1
+ import{a as W,b as N,d}from"./chunk-OWCFWPAL.js";import{useEffect as Mt}from"react";import{create as Lt}from"zustand";var pr=Lt(()=>({status:"disconnected"})),pe=()=>pr.getState().onNeedsRecovery,Ft=e=>{Mt(()=>{pr.setState({onNeedsRecovery:e==null?void 0:e.onNeedsRecovery})},[e==null?void 0:e.onNeedsRecovery])};import{applicationId as yr}from"expo-application";import*as L from"expo-secure-store";import{PrivyClientError as Tt}from"@privy-io/js-sdk-core";var fr=()=>{if(typeof yr!="string")throw new Tt({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 yr};function gr(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:()=>d(this,null,function*(){return[]})}}var ye={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:()=>d(void 0,null,function*(){return[]})};import{digest as Dt}from"expo-crypto";import jt from"@privy-io/js-sdk-core";var hr={name:"@privy-io/expo",version:"0.58.1",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.2","@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 vr=({appId:e,clientId:r,storage:t=ye,supportedChains:n,baseUrl:i,logLevel:o})=>new jt({appId:e,clientId:r,supportedChains:n,storage:gr(t),sdkVersion:`expo:${hr.version}`,nativeAppIdentifier:fr(),crypto:{digest:Dt},baseUrl:i,logLevel:o});import{useCallback as sr,useContext as Ii}from"react";import{PrivyClientError as Mi}from"@privy-io/js-sdk-core";import Z,{useState as I,useMemo as xi,createContext as Ai,useCallback as xe,useRef as ee,useEffect as _t,useContext as Ui}from"react";import{AppState as Ct,View as Ri}from"react-native";import{PrivyClientError as kt}from"@privy-io/js-sdk-core";import Vt from"react-fast-compare";import{create as Kt}from"zustand";var fe=Kt(()=>{}),wr=e=>fe.setState(r=>Vt(r,e)?r:e),x=fe.getState;import Bt from"react";import{useCallback as Gt,useEffect as qt,useRef as Jt}from"react";import{AppState as Yt}from"react-native";import $t from"react-native-webview";import*as F from"expo-secure-store";function br(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 Sr(e){return d(this,null,function*(){switch(e.event){case"app:secure-storage:get":{let{key:r}=e.data,t=yield F.getItemAsync(Me(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(Me(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(Me(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 Me=e=>e.replaceAll(":","-");import Ht from"react-fast-compare";import{createStore as zt,useStore as Le}from"zustand";var V=zt()(()=>({user:null,proxyStatus:"loading"}));function b(){return V.getState().user}var ra=V.subscribe.bind(V);function Fe(e){V.setState(({user:r})=>Ht(r,e)?{}:{user:e})}var Te=e=>V.setState({proxyStatus:e});function A(){return Le(V,e=>e.user)}function ta(){return Le(V,e=>!!e.user)}function K(){return Le(V,e=>e.proxyStatus!=="loading")}var Qt={shouldUseAppBackedStorage:!0},Er=({client:e,isClientReady:r})=>{let t=Jt(null);qt(()=>Yt.addEventListener("change",o=>d(void 0,null,function*(){o==="active"&&((yield e.embeddedWallet.ping(500))||(Te("reloading"),e.embeddedWallet.reload()))})).remove,[e]);let n=Gt(i=>d(void 0,null,function*(){var s;let{data:o}=i.nativeEvent,a=JSON.parse(o);if(br(a)){let l=yield Sr(a);(s=t.current)==null||s.postMessage(JSON.stringify(l));return}e.embeddedWallet.onMessage(a)}),[e]);return r?Bt.createElement($t,{style:{flex:1},ref:i=>{i&&(e.setMessagePoster(i),t.current=i)},cacheEnabled:!1,cacheMode:"LOAD_NO_CACHE",injectedJavaScriptObject:Qt,source:{uri:e.embeddedWallet.getURL()},webviewDebuggingEnabled:e.logger.level==="DEBUG",onLoad:()=>Te("loaded"),onError:console.error,onMessage:n}):null};import{useCallback as Ne,useEffect as Pr,useMemo as De}from"react";import{errorIndicatesRecoveryIsNeeded as Zt,getAllUserEmbeddedSolanaWallets as eo,getEntropyDetailsFromUser as Wr,PrivyClientError as te}from"@privy-io/js-sdk-core";import{getAllUserEmbeddedSolanaWallets as ge,getEntropyDetailsFromAccount as _r,getUserEmbeddedEthereumWallet as Xt,PrivyClientError as G}from"@privy-io/js-sdk-core";function Cr(o){return d(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=ge(c),m=u[0],p=(a=Xt(c))!=null?a:void 0;if(i!=null&&i.recoveryMethod&&i.recoveryMethod!=="privy")throw new G({code:"embedded_wallet_creation_error",error:"Unsupported recovery method for solana wallet."});if(!(i!=null&&i.createAdditional)&&m)throw new G({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}=_r(y),_=Math.max(...u.map(P=>P.wallet_index),0)+1,C=yield e.embeddedWallet.add({chainType:"solana",entropyId:h,entropyIdVerifier:S,hdWalletIndex:_}),k=ge(C.user).find(P=>P.wallet_index===_);if(!k)throw new G({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=ge(y.user).find(k=>k.wallet_index===0);if(!h)throw new G({error:"Embedded wallet account not created",code:"embedded_wallet_creation_error"});let S=p!=null?p:h,{entropyId:_,entropyIdVerifier:C}=_r(S);v=yield e.embeddedWallet.getSolanaProvider(h,_,C),g=y.user}let w=ge(g)[0];if(!w)throw new G({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 G({code:"embedded_wallet_creation_error",error:u})}})}import{PrivyClientError as z}from"@privy-io/js-sdk-core";function he(u){return d(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 z({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});switch(i){case"user-passcode":if(!a)throw new z({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!l)throw new z({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!c)throw new z({code:"embedded_wallet_recovery_error",error:"Record name is required for icloud recovery method"});break;case"recovery-encryption-key":if(!s)throw new z({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 z({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 kr(s){return d(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 z({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 xr=({client:e,solanaWallet:r,setSolanaWallet:t,setSolanaRecoveryFlowState:n,createSolanaWalletCallbacks:i,recoverSolanaWalletCallbacks:o})=>{let a=A(),s=De(()=>eo(a),[a]),l=K(),c=De(()=>s.length===0?null:Wr(a),[a,s]),u=De(()=>{let g=s.map(S=>{let _=Wr(a,S);return _?{account:S,entropy:_}: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:_,entropyIdVerifier:C}})=>({address:S.address,publicKey:S.address,walletIndex:S.wallet_index,getProvider:()=>e.embeddedWallet.getSolanaProvider(S,_,C,w,y,h,k=>d(void 0,null,function*(){var P;yield(P=pe())==null?void 0:P(k)}))}))},[s,a,e]),m=Ne(g=>d(void 0,null,function*(){return yield Cr({client:e,setSolanaWallet:t,createSolanaWalletCallbacks:i,setSolanaRecoveryFlowState:n,opts:g})}),[e,i]),p=Ne(()=>d(void 0,null,function*(){if(!c)throw new te({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{entropyId:g,entropyIdVerifier:w}=c;return kr({client:e,account:s[0],entropyId:g,entropyIdVerifier:w,setSolanaWallet:t,recoverSolanaWalletCallbacks:o,setSolanaRecoveryFlowState:n})}),[e,c,s,o,n,t]),v=Ne(()=>d(void 0,null,function*(){if(!c)throw t({status:"not-created"}),new te({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 Zt(g)?(t({status:"needs-recovery"}),new te({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):g instanceof Error?(t({status:"error",error:g.message}),new te({code:"unknown_embedded_wallet_error",error:g.message})):(t({status:"error",error:"Error loading embedded wallet"}),new te({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[s,e,c,t]);return Pr(()=>{if(!a&&r.status!=="disconnected")return t({status:"disconnected"});l&&v().catch(()=>{})},[l,a]),Pr(()=>{r.status==="error"&&r.error.includes("User must be logged in")&&v()},[r.status]),{create:m,recover:p,getProvider:v,wallets:u}};import{useCallback as ie,useEffect as Ir,useMemo as uo}from"react";import{getUserEmbeddedEthereumWallet as mo,getUserEmbeddedSolanaWallet as Mr,isUnifiedWallet as po,throwIfInvalidRecoveryUpgradePath as yo}from"@privy-io/js-sdk-core";import{errorIndicatesRecoveryIsNeeded as fo,PrivyClientError as U}from"@privy-io/js-sdk-core";import{getUserEmbeddedEthereumWallet as ro}from"@privy-io/js-sdk-core";import{PrivyClientError as q}from"@privy-io/js-sdk-core";function ve(m){return d(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 q({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"recovery-encryption-key":if(!a)throw new q({code:"embedded_wallet_recovery_error",error:"key is required for recovery-encryption-key recovery method"});break;case"google-drive":if(!s)throw new q({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!l||!c)throw new q({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=ro(w);if(!y)throw new q({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 q({code:"embedded_wallet_creation_error",error:y})}})}import{Platform as Ar}from"react-native";import{PrivyClientError as D}from"@privy-io/js-sdk-core";function Ur(){return d(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(n){return d(this,arguments,function*({user:e,appId:r,client:t}){var s;if(Ar.OS==="android")throw new D({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let i=yield Ur(),o=yield t.recovery.icloudAuth.getICloudConfiguration("expo-ios");if(!(o==null?void 0:o.container_identifier))throw new D({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 D({code:"embedded_wallet_recovery_error",error:c})}throw new D({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}function we(n){return d(this,arguments,function*({walletAddress:e,client:r,chainType:t}){var c;if(Ar.OS==="android")throw new D({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let i=yield Ur(),a=(yield r.recovery.getRecoveryKeyMaterial(e,t)).icloud_record_name;if(!a)throw new D({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 D({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 D({code:"embedded_wallet_recovery_error",error:m})}throw new D({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}import*as B from"expo-linking";import*as Rr from"expo-web-browser";import{Platform as Or}from"react-native";import{PrivyClientError as Y}from"@privy-io/js-sdk-core";import La from"react-fast-compare";import{PrivyApiError as to,PrivyClientError as oo}from"@privy-io/js-sdk-core";function E(e){return e instanceof Error||e instanceof to||e instanceof oo?e:typeof e=="string"?new Error(e):new Error("Unknown error")}var J=e=>new Promise(r=>setTimeout(r,e));import{useEffect as no,useRef as io}from"react";import{AppState as je}from"react-native";function be(){let e=io(je.currentState);no(()=>je.addEventListener("change",n=>{e.current=n}).remove,[]);function r(){return je.currentState}return{appState:e,getCurrentAppState:r}}function ne(i){return d(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 Y({error:"OAuth invalid provider",code:"embedded_wallet_recovery_error"})}let a=yield Rr.openAuthSessionAsync(o);if(Or.OS==="android")return;if(a.type!=="success")throw new Y({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 Y({error:"Recovery OAuth invalid credentials",code:"embedded_wallet_recovery_error"});l=yield Se({oAuthCode:u,oAuthState:c,client:t});break}default:throw new Y({error:"Recovery OAuth invalid provider",code:"embedded_wallet_recovery_error"})}return l}catch(o){throw n==null||n(E(o)),o}})}function Se(n){return d(this,arguments,function*({oAuthCode:e,oAuthState:r,client:t}){let{access_token:i}=yield t.recovery.auth.authorize(e,r);if(!i)throw new Y({error:"OAuth invalid credentials",code:"login_with_oauth_returned_with_invalid_credentials"});return i})}var ao=2*60*1e3;function so(e){let r;return new Promise((t,n)=>{r=B.addEventListener("url",o=>d(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 Se({client:e,oAuthCode:l,oAuthState:s});t(c)})),setTimeout(()=>{n(new Y({code:"embedded_wallet_set_recovery_error",error:"Failed to complete Google Drive recovery flow"}))},ao)}).finally(()=>{r==null||r.remove()})}function Ee(e){return d(this,null,function*(){let r;Or.OS==="android"&&(r=so(e));let t=yield ne({provider:"google-drive",client:e});return t!=null?t:yield r})}import{getUserEmbeddedWallet as co,PrivyClientError as lo}from"@privy-io/js-sdk-core";function _e(o){return d(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=co(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 lo({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 Lr(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 Fr=({client:e,appId:r,wallet:t,setWallet:n,setRecoveryFlowState:i,createWalletCallbacks:o,recoverWalletCallbacks:a,setWalletRecoveryCallbacks:s})=>{let l=A(),c=uo(()=>mo(l),[l]),u=K(),m=ie(y=>d(void 0,null,function*(){var de,ue;if(c)throw new U({error:"This user already has an embedded wallet",code:"embedded_wallet_already_exists"});let{user:h}=yield e.user.get(),{password:S,recoveryMethod:_,recoveryKey:C}=Lr(y),k,P,M;if(_==="google-drive"&&(k=yield ne({provider:_,client:e,onError:(de=o.current)==null?void 0:de.onError}),i({status:"creating-wallet"}),!k))return null;if(_==="icloud"){if(!h)throw new U({code:"embedded_wallet_recovery_error",error:"User must be loaded before creating a wallet with iCloud."});let{recoverySecret:Ae,iCloudRecordName:Ue}=yield oe({user:h,appId:r,client:e});P=Ae,M=Ue}return yield ve({client:e,setWallet:n,createWalletCallbacks:o,recoveryMethod:_,recoveryKey:C,setRecoveryFlowState:i,password:S,recoverySecretOverride:P,iCloudRecordNameOverride:M,solanaAccount:(ue=Mr(h))!=null?ue:void 0})}),[e,c,l]),p=ie(y=>d(void 0,null,function*(){var _;if(t.status!=="connected")throw new U({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"});if(!c)throw new U({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});if(Mr(l))throw new U({code:"embedded_wallet_set_recovery_error",error:"Cannot set user-controlled recovery for a user with an embedded Solana wallet."});if(po(c))throw new U({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"});yo({currentRecoveryMethod:c.recovery_method,upgradeToRecoveryMethod:y.recoveryMethod});let h,S;switch(y.recoveryMethod){case"privy":S=N(W({},y),{wallet:c});break;case"user-passcode":S=N(W({},y),{wallet:c,password:y.password});break;case"google-drive":if(h=yield ne({provider:y.recoveryMethod,client:e,onError:(_=s.current)==null?void 0:_.onError}),i({status:"upgrading-recovery"}),!h)return null;S={recoveryMethod:"google-drive",wallet:c,recoveryAccessToken:h};break;case"icloud":if(!l)throw new U({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 U({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}return _e({client:e,recoveryInput:S,setWalletRecoveryCallbacks:s,setRecoveryFlowState:i,setWallet:n})}),[e,c,t.status,l]),v=ie(y=>d(void 0,null,function*(){return p({recoveryMethod:"user-passcode",password:y})}),[e,c,t.status]),g=ie(y=>d(void 0,null,function*(){var P;if(!c)throw new U({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{password:h,recoveryMethod:S,recoveryKey:_}=Lr(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 U({code:"embedded_wallet_recovery_error",error:"User must be loaded before recovering via iCloud."});let{recoverySecret:M}=yield we({client:e,walletAddress:c.address});k=M}return he({client:e,account:c,setWallet:n,recoverWalletCallbacks:a,recoveryMethod:S,setRecoveryFlowState:i,recoveryKey:_,password:h,recoveryToken:C,recoverySecretOverride:k})}),[e,c]),w=ie(()=>d(void 0,null,function*(){if(!c)throw n({status:"not-created",account:null}),new U({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 fo(y)?(n({status:"needs-recovery",account:c}),new U({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):y instanceof Error?(n({status:"error",error:y.message,account:c}),new U({code:"unknown_embedded_wallet_error",error:y.message})):(n({status:"error",error:"Error loading embedded wallet",account:c}),new U({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,c]);return Ir(()=>{if(!l&&t.status!=="disconnected")return n({status:"disconnected",account:null});u&&w().catch(()=>{})},[u,l,c]),Ir(()=>{t.status==="error"&&t.error.includes("User must be logged in")&&w()},[t.status]),{create:m,recover:g,setPassword:v,setRecovery:p,getProvider:w}};import{useEffect as go,useState as ho}from"react";import{PrivyClientError as Tr}from"@privy-io/js-sdk-core";var Nr=({client:e,isReady:r})=>{let t=A(),n=fe(a=>a==null?void 0:a.customAuth),[i,o]=ho({status:"initial"});return go(()=>{(()=>d(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 Tr({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 Tr({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"}};import*as $ from"expo-linking";import{useCallback as vo,useEffect as wo,useMemo as bo}from"react";import{Platform as So}from"react-native";import{getUserEmbeddedSolanaWallet as Eo,getUserEmbeddedWallet as _o}from"@privy-io/js-sdk-core";var Dr=({client:e,createWalletCallbacks:r,recoverWalletCallbacks:t,setWalletRecoveryCallbacks:n,recoveryFlowState:i,oAuthState:o,setRecoveryFlowState:a,setWallet:s,appStateVisible:l})=>{let c=$.useURL(),u=A(),m=bo(()=>_o(u),[u]),p=K(),v=vo(g=>{var y,h,S,_;let w=E(g);i.status==="creating-wallet"?(h=(y=r.current).onError)==null||h.call(y,E(w)):(_=(S=t.current).onError)==null||_.call(S,E(w)),a({status:"initial"})},[i]);return wo(()=>{function g(){return d(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 _=yield Se({oAuthCode:h,oAuthState:y,client:e});if(i.status==="creating-wallet"){let C=(S=Eo(u))!=null?S:void 0;yield ve({client:e,setWallet:s,createWalletCallbacks:r,recoveryMethod:"google-drive",setRecoveryFlowState:a,recoveryToken:_,solanaAccount:C})}else if(i.status==="upgrading-recovery"){if(!m)throw new Error("Embedded wallet not found");yield _e({client:e,recoveryInput:{recoveryMethod:"google-drive",wallet:m,recoveryAccessToken:_},setWalletRecoveryCallbacks:n,setRecoveryFlowState:a,setWallet:s})}else yield he({client:e,account:m,setWallet:s,recoverWalletCallbacks:t,recoveryMethod:"google-drive",setRecoveryFlowState:a,recoveryToken:_})}catch(_){v(_)}}})}So.OS==="android"&&g()},[c,i.status,l,p])};import{useEffect as Co}from"react";var jr=({client:e,isUserInitialized:r,setIsUserInitialized:t,setError:n})=>{Co(()=>{r||(()=>d(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])};import{useEffect as Pi,useRef as Wi}from"react";import{useCallback as Ve,useContext as ko}from"react";import{PrivyClientError as Po}from"@privy-io/js-sdk-core";var Vs=e=>{let{client:r,setSiweState:t,siweState:n}=ko(f),i=Ve(s=>{var c;let l=E(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=Ve(u=>d(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:Ve(u=>d(void 0,[u],function*({signature:s,messageOverride:l,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"});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}};import{useCallback as Vr}from"react";import{createSiwsMessage as xo,PrivyClientError as Ao}from"@privy-io/js-sdk-core";import{useContext as Wo}from"react";var O=()=>{let{client:e}=Wo(f);return e};var Xs=()=>{let e=O(),r=Vr(a=>d(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:xo({address:n,domain:i,uri:o,nonce:s})}}catch(s){throw E(s)}}),[e]),t=Vr(s=>d(void 0,[s],function*({signature:n,message:i,wallet:{walletClientType:o,connectorType:a}={}}){try{if(!b())throw new Ao({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 E(l)}}),[e]);return{generateMessage:r,link:t}};import{useCallback as Kr}from"react";import{createSiwsMessage as Uo,PrivyClientError as Ro}from"@privy-io/js-sdk-core";var ac=()=>{let e=O(),r=Kr(a=>d(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:Uo({address:n,domain:i,uri:o,nonce:s})}}catch(s){throw E(s)}}),[e]),t=Kr(l=>d(void 0,[l],function*({signature:n,message:i,wallet:{walletClientType:o,connectorType:a}={},disableSignup:s}){try{if(b())throw new Ro({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 E(c)}}),[e]);return{generateMessage:r,login:t}};import{useCallback as Hr,useContext as Oo}from"react";import{PrivyClientError as Io}from"@privy-io/js-sdk-core";var yc=e=>{let{client:r}=Oo(f),t=Hr(i=>{var a;let o=E(i);return(a=e==null?void 0:e.onError)==null||a.call(e,o),o},[e==null?void 0:e.onError]);return{unlinkWallet:Hr(o=>d(void 0,[o],function*({address:i}){var a;try{if(!b())throw new Io({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])}};import{useCallback as Ke,useContext as Mo,useState as Lo}from"react";import{PrivyClientError as zr}from"@privy-io/js-sdk-core";var Ec=e=>{let[r,t]=Lo(""),{client:n,otpState:i,setOtpState:o}=Mo(f),a=Ke(c=>{var m;let u=E(c);return o({status:"error",error:u}),(m=e==null?void 0:e.onError)==null||m.call(e,u),u},[e,o]),s=Ke(u=>d(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=Ke(m=>d(void 0,[m],function*({code:c,email:u}){var p;try{if(!b())throw new zr({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 zr({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}};import{useCallback as Br,useContext as Fo}from"react";var xc=e=>{let{client:r}=Fo(f),t=Br(i=>{var a;let o=E(i);return(a=e==null?void 0:e.onError)==null||a.call(e,o),o},[e==null?void 0:e.onError]);return{unlinkEmail:Br(o=>d(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])}};import{useCallback as He,useContext as To,useState as No}from"react";import{PrivyClientError as Gr}from"@privy-io/js-sdk-core";var Tc=e=>{let[r,t]=No(""),{client:n,otpState:i,setOtpState:o}=To(f),a=He(c=>{var m;let u=E(c);return o({status:"error",error:u}),(m=e==null?void 0:e.onError)==null||m.call(e,u),u},[e,o]),s=He(u=>d(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=He(p=>d(void 0,[p],function*({code:c,email:u,disableSignup:m}){var v;try{if(b())throw new Gr({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 Gr({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}};import{useCallback as ze,useContext as Do,useState as jo}from"react";import{PrivyClientError as qr}from"@privy-io/js-sdk-core";var Bc=e=>{let[r,t]=jo(""),{client:n,otpState:i,setOtpState:o}=Do(f),a=ze(c=>{var m;let u=E(c);return o({status:"error",error:u}),(m=e==null?void 0:e.onError)==null||m.call(e,u),u},[e,o]),s=ze(u=>d(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=ze(m=>d(void 0,[m],function*({code:c,phone:u}){var p;try{if(!b())throw new qr({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 qr({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}};import{useCallback as Be,useContext as Vo,useState as Ko}from"react";import{PrivyClientError as Jr}from"@privy-io/js-sdk-core";var el=e=>{let[r,t]=Ko(""),{client:n,otpState:i,setOtpState:o}=Vo(f),a=Be(c=>{var m;let u=E(c);return o({status:"error",error:u}),(m=e==null?void 0:e.onError)==null||m.call(e,u),u},[e,o]),s=Be(u=>d(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=Be(p=>d(void 0,[p],function*({code:c,phone:u,disableSignup:m}){var v;try{if(b())throw new Jr({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 Jr({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}};import*as Ce from"expo-linking";import{useCallback as Ge,useContext as Ho,useRef as zo}from"react";import{PrivyClientError as ae}from"@privy-io/js-sdk-core";var cl=e=>{let{appState:r,getCurrentAppState:t}=be(),{client:n,farcasterState:i,setFarcasterState:o}=Ho(f),a=zo(!1),s=Ge(u=>{var p;let m=E(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=Ge(()=>{a.current=!0},[]);return{linkWithFarcaster:Ge((v,...g)=>d(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 ae({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:Ce.createURL(m!=null?m:"/")});if(!h)throw new ae({code:"failed_to_generate_farcaster_uri",error:"Failed to generate farcaster uri"});if(!S)throw new ae({code:"failed_to_generate_farcaster_channel_token",error:"Failed to generate farcaster channel token"});yield Ce.openURL(h),o({status:"polling-status"});let _=0;for(;_<p.pollAttempts;){if(a.current)throw new ae({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(W({channel_token:S},C));return o({status:"done"}),(w=e==null?void 0:e.onSuccess)==null||w.call(e,k),k}_++,yield J(p.pollIntervalMs)}throw new ae({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}};import{useCallback as Yr,useContext as Bo}from"react";var yl=e=>{let{client:r}=Bo(f),t=Yr(i=>{var a;let o=E(i);return(a=e==null?void 0:e.onError)==null||a.call(e,o),o},[e==null?void 0:e.onError]);return{unlinkFarcaster:Yr(o=>d(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])}};import*as ke from"expo-linking";import{useCallback as Ye,useContext as Go,useRef as qo}from"react";import{PrivyClientError as se}from"@privy-io/js-sdk-core";var _l=e=>{let{appState:r,getCurrentAppState:t}=be(),{client:n,farcasterState:i,setFarcasterState:o}=Go(f),a=qo(!1),s=Ye(u=>{var p;let m=E(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=Ye(()=>{a.current=!0},[]);return{loginWithFarcaster:Ye((g,...w)=>d(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 se({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:_}=yield n.auth.farcaster.initializeAuth({relyingParty:u,redirectUrl:ke.createURL(m!=null?m:"/")});if(!S)throw new se({code:"failed_to_generate_farcaster_uri",error:"Failed to generate farcaster uri"});if(!_)throw new se({code:"failed_to_generate_farcaster_channel_token",error:"Failed to generate farcaster channel token"});yield ke.openURL(S),o({status:"polling-status"});let C=0;for(;C<v.pollAttempts;){if(a.current)throw new se({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:_});if(k.state==="completed"){o({status:"submitting-token"});let P=x(),M=yield n.auth.farcaster.authenticate(W({channel_token:_,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 se({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}};import{useCallback as $r,useContext as Jo}from"react";import{create as Yo}from"zustand";import{PrivyClientError as $o}from"@privy-io/js-sdk-core";var $e=Yo(()=>({status:"initial"})),H=e=>$e.setState(e,!0),Qo=$e.getState,Il=()=>{let{client:e}=Jo(f),r=$e(),t=$r(()=>d(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=E(i);throw H({status:"initial",error:o}),o}}),[e]),n=$r(i=>d(void 0,null,function*(){let o=Qo().status;try{if(b()){let c=new $o({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({status:"submitting-signature"});let s=x(),l=yield e.auth.farcasterV2.authenticate(i,{embedded:s==null?void 0:s.embedded});return H({status:"done"}),setTimeout(()=>H({status:"initial"}),1500),{user:l.user}}catch(a){let s=E(a);throw H({status:o,error:s}),s}}),[e]);return{init:t,login:n,state:r}};import{useCallback as Qr,useContext as Xo}from"react";var Dl=e=>{let{client:r}=Xo(f),t=Qr(i=>{var a;let o=E(i);return(a=e==null?void 0:e.onError)==null||a.call(e,o),o},[e==null?void 0:e.onError]);return{unlinkOAuth:Qr(a=>d(void 0,[a],function*({provider:i,subject:o}){var s;try{let{user:l}=yield r.auth.oauth.unlink(i,o);return(s=e==null?void 0:e.onSuccess)==null||s.call(e,l),l}catch(l){throw t(l)}}),[r,e==null?void 0:e.onSuccess,t])}};import{useContext as Zo,useEffect as en,useRef as rn}from"react";var zl=e=>{let{client:r}=Zo(f),t=rn(e.onOAuthTokenGrant);t.current=e.onOAuthTokenGrant,en(()=>{let{unsubscribe:n}=r.addOAuthTokensListener(i=>{t.current(i)});return n},[r])};import{useContext as tn,useMemo as on}from"react";import{delegatedActions as Xr}from"@privy-io/js-sdk-core";var Yl=()=>{let{client:e}=tn(f);return on(()=>({delegateWallet:Xr.delegateWallet(e),revokeWallets:Xr.revokeWallets(e)}),[e])};import{useContext as sn,useMemo as cn}from"react";import{addSessionSigners as ln,removeSessionSigners as dn}from"@privy-io/js-sdk-core";import{isEmbeddedWalletAccount as nn}from"@privy-io/js-sdk-core";function an(e,r){return e.linked_accounts.filter(nn).find(t=>t.address===r)}function Qe(e){let r=b();if(!r)throw new Error("User must be authenticated to perform this operation");let t=an(r,e);if(!t)throw new Error(`No wallet found with address ${e}`);return t}var nd=()=>{let{client:e}=sn(f);return cn(()=>({addSessionSigners:({address:r,signers:t})=>ln({client:e,wallet:Qe(r),signers:t.map(n=>({signer_id:n.signerId,override_policy_ids:n.policyIds}))}),removeSessionSigners:({address:r})=>dn({client:e,wallet:Qe(r)})}),[e])};import{useContext as un,useMemo as mn}from"react";import{PrivyClientError as et}from"@privy-io/js-sdk-core";var dd=()=>{let{client:e}=un(f);return mn(()=>({sendCode(n){return d(this,arguments,function*({newEmailAddress:t}){Zr(),yield e.auth.email.sendCode(t)})},updateEmail(i){return d(this,arguments,function*({newEmailAddress:t,code:n}){let{address:o}=Zr(),{user:a}=yield e.auth.email.updateEmail({oldEmailAddress:o,newEmailAddress:t,code:n});return a})}}),[e])};function Zr(){let r=pn().linked_accounts.find(t=>t.type==="email");if(!r)throw new et({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 r}function pn(){let e=b();if(!e)throw new et({code:"attempted_update_before_logged_in",error:"Must be logged in to update a user profile."});return e}import{useContext as yn,useMemo as fn}from"react";import{PrivyClientError as tt}from"@privy-io/js-sdk-core";var hd=()=>{let{client:e}=yn(f);return fn(()=>({sendCode(n){return d(this,arguments,function*({newPhoneNumber:t}){rt(),yield e.auth.phone.sendCode(t)})},updatePhone(i){return d(this,arguments,function*({newPhoneNumber:t,code:n}){let{phoneNumber:o}=rt(),{user:a}=yield e.auth.phone.updatePhone({oldPhoneNumber:o,newPhoneNumber:t,code:n});return a})}}),[e])};function rt(){let r=gn().linked_accounts.find(t=>t.type==="phone");if(!r)throw new tt({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 r}function gn(){let e=b();if(!e)throw new tt({code:"attempted_update_before_logged_in",error:"Must be logged in to update a user profile."});return e}import*as it from"expo-linking";import{useCallback as vn,useContext as wn,useMemo as bn}from"react";import{crossApp as Sn,PrivyClientError as En}from"@privy-io/js-sdk-core";import*as nt from"expo-linking";import*as ce from"expo-web-browser";import{PrivyClientError as ot}from"@privy-io/js-sdk-core";var T=(e,r)=>d(void 0,null,function*(){let t=yield ce.openAuthSessionAsync(e,r,{createTask:!1});if(t.type!=="success")throw t.type===ce.WebBrowserResultType.CANCEL||t.type===ce.WebBrowserResultType.DISMISS?new ot({error:"OAuth session was cancelled",code:"oauth_session_failed"}):new ot({error:"OAuth session failed",code:"oauth_session_failed"});return hn(t.url)});function hn(e){let{queryParams:r}=nt.parse(e);return r}var xd=()=>{let{client:e}=wn(f),r=bn(()=>Sn.loginWithCrossAppAuth({client:e,openAuthSession:T}),[e]);return{loginWithCrossApp:vn(o=>d(void 0,[o],function*({appId:n,redirectUri:i}){if(b())throw new En({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:s}=yield r({providerAppId:n,redirectUrl:it.createURL(i||"/")});return{user:s}}),[r])}};import*as at from"expo-linking";import{useCallback as _n,useContext as Cn,useMemo as kn}from"react";import{crossApp as Pn,PrivyClientError as Wn}from"@privy-io/js-sdk-core";var Fd=()=>{let{client:e}=Cn(f),r=kn(()=>Pn.linkWithCrossAppAuth({client:e,openAuthSession:T}),[e]);return{linkWithCrossApp:_n(o=>d(void 0,[o],function*({appId:n,redirectUri:i}){if(!b())throw new Wn({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 r({providerAppId:n,redirectUrl:at.createURL(i||"/")})}}),[r])}};import*as ct from"expo-linking";import{useContext as xn,useMemo as st}from"react";import{crossApp as An}from"@privy-io/js-sdk-core";var zd=()=>{let{client:e}=xn(f),r=st(()=>An.wallet.signMessage({client:e,openAuthSession:T}),[e]);return st(()=>({signMessage:({address:t,message:n,redirectUri:i="/"})=>r({user:b(),address:t,message:n,redirectUrl:ct.createURL(i)})}),[r])};import*as dt from"expo-linking";import{useContext as Un,useMemo as lt}from"react";import{crossApp as Rn}from"@privy-io/js-sdk-core";var Qd=()=>{let{client:e}=Un(f),r=lt(()=>Rn.wallet.signTypedData({client:e,openAuthSession:T}),[e]);return lt(()=>({signTypedData:({address:t,typedData:n,redirectUri:i="/"})=>r({user:b(),address:t,typedData:n,redirectUrl:dt.createURL(i)})}),[r])};import*as mt from"expo-linking";import{useContext as On,useMemo as ut}from"react";import{crossApp as In}from"@privy-io/js-sdk-core";var nu=()=>{let{client:e}=On(f),r=ut(()=>In.wallet.sendTransaction({client:e,openAuthSession:T}),[e]);return ut(()=>({sendTransaction:({address:t,transaction:n,redirectUri:i="/"})=>r({user:b(),address:t,transaction:n,redirectUrl:mt.createURL(i)})}),[r])};import{useCallback as Mn,useContext as Ln}from"react";import{getUserEmbeddedEthereumWallet as Fn,getUserEmbeddedSolanaWallet as Tn,isUnifiedWallet as Nn,PrivyClientError as Q,throwIfInvalidRecoveryUpgradePath as Dn}from"@privy-io/js-sdk-core";var mu=()=>{let{client:e}=Ln(f);return{setRecovery:Mn(t=>d(void 0,null,function*(){var s;let n=b(),i=e.app.appId;if(!n)throw new Q({code:"embedded_wallet_recovery_error",error:"User must be loaded before attempting to modify the recovery method."});let o=(s=Fn(n))!=null?s:Tn(n);if(!o)throw new Q({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});if(Nn(o))throw new Q({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"});try{o.chain_type==="ethereum"?yield e.embeddedWallet.getProvider(o):o.chain_type==="solana"&&(yield e.embeddedWallet.getSolanaProvider(o,o.address,"solana-address-verifier"))}catch(l){throw new Q({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"})}Dn({currentRecoveryMethod:o.recovery_method,upgradeToRecoveryMethod:t.recoveryMethod});let a=yield jn({appId:i,client:e,user:n,primaryAccount:o,recoveryParams:t});try{let{user:l}=yield e.embeddedWallet.setRecovery(a);return{user:l}}catch(l){throw new Q({code:"embedded_wallet_set_recovery_error",error:l instanceof Error?l.message:"Error setting password on embedded wallet"})}}),[e])}},jn=o=>d(void 0,[o],function*({appId:e,client:r,user:t,primaryAccount:n,recoveryParams:i}){switch(i.recoveryMethod){case"privy":return{recoveryMethod:"privy",wallet:n};case"user-passcode":return N(W({},i),{wallet:n});case"google-drive":{let a=yield Ee(r);return{recoveryMethod:"google-drive",wallet:n,recoveryAccessToken:a}}case"icloud":{let{recoverySecret:a,iCloudRecordName:s}=yield oe({appId:e,client:r,user:t});return{recoveryMethod:"icloud-native",recoverySecretOverride:a,iCloudRecordNameOverride:s,wallet:n}}case"recovery-encryption-key":return{recoveryMethod:"recovery-encryption-key",wallet:n,recoveryKey:i.recoveryKey};default:throw new Q({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}});import{useCallback as Vn,useContext as Kn}from"react";import{getUserEmbeddedEthereumWallet as Hn,getUserEmbeddedSolanaWallet as zn,PrivyClientError as le,isUnifiedWallet as Bn}from"@privy-io/js-sdk-core";var Su=()=>{let{client:e}=Kn(f);return{recover:Vn(t=>d(void 0,null,function*(){var c;let n=b();if(!n)throw new le({code:"embedded_wallet_recovery_error",error:"User must be loaded before attempting to modify the recovery method."});let i=(c=Hn(n))!=null?c:zn(n);if(!i)throw new le({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});if(Bn(i))throw new le({code:"unsupported_wallet_type",error:"User owned 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"});let o,a,s,l;switch(t.recoveryMethod){case"user-passcode":a=t.password;break;case"google-drive":s=yield Ee(e);break;case"icloud":let{recoverySecret:u}=yield we({client:e,walletAddress:i.address,chainType:i.chain_type});l=u;break;case"recovery-encryption-key":o=t.recoveryKey;break;case"privy":break;default:throw new le({code:"unsupported_recovery_method",error:`Unsupported recovery options ${t}`})}try{i.chain_type==="ethereum"?yield e.embeddedWallet.getProvider(i,a,s,l,o):i.chain_type==="solana"&&(yield e.embeddedWallet.getSolanaProvider(i,i.address,"solana-address-verifier",a,s,l))}catch(u){throw new le({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"})}}),[e])}};import{useEffect as qn}from"react";import{useContext as Gn,useEffect as Xe}from"react";var Ze=(e={})=>{let{wallet:r,createWalletCallbacks:t,recoverWalletCallbacks:n,setWalletRecoveryCallbacks:i}=Gn(f),{onCreateWalletSuccess:o,onCreateWalletError:a,onRecoverWalletError:s,onRecoverWalletSuccess:l,onSetWalletRecoverySuccess:c,onSetWalletRecoveryError:u}=e;return Xe(()=>{t.current={onSuccess:o,onError:a}},[o,a]),Xe(()=>{n.current={onSuccess:l,onError:s}},[l,s]),Xe(()=>{i.current={onSuccess:c,onError:u}},[l,s]),r};var Au=({onStateChange:e})=>{let r=Ze();return qn(()=>{e(r)},[r])};import{useContext as Jn}from"react";var Iu=()=>{let{getIdentityToken:e}=Jn(f);return{getIdentityToken:e}};import{useCallback as pt,useContext as Yn}from"react";import{PrivyClientError as $n}from"@privy-io/js-sdk-core";var Vu=e=>{let{client:r}=Yn(f),t=pt(i=>{var a;let o=E(i);return(a=e==null?void 0:e.onError)==null||a.call(e,o),o},[e==null?void 0:e.onError]);return{create:pt(()=>d(void 0,null,function*(){var i;try{if(b())throw new $n({code:"attempted_to_create_guest_account_for_logged_in_user",error:"Already logged in, you cannot create a guest account"});let a=x(),s=yield r.auth.guest.create({embedded:a==null?void 0:a.embedded});return(i=e==null?void 0:e.onSuccess)==null||i.call(e,s.user,s.is_new_user),s.user}catch(o){throw t(o)}}),[r,t,e==null?void 0:e.onSuccess])}};import{useContext as Qn,useEffect as Xn}from"react";function qu({onMfaRequired:e}){let{client:r}=Qn(f);Xn(()=>{function t(){return d(this,null,function*(){var i;let n=b();yield e((i=n==null?void 0:n.mfa_methods.map(({type:o})=>o))!=null?i:[])})}return r.mfaPromises.on("mfaRequired",t),()=>{r.mfaPromises.off("mfaRequired",t)}},[r,e])}import{useCallback as Pe,useContext as oi}from"react";import{PrivyClientError as We}from"@privy-io/js-sdk-core";import{PrivyClientError as Zn}from"@privy-io/js-sdk-core";var ei=e=>d(void 0,null,function*(){var n;let t=yield(yield import("react-native-passkeys")).create({rp:e.rp,user:e.user,challenge:e.challenge,pubKeyCredParams:e.pubKeyCredParams,excludeCredentials:e.excludeCredentials,authenticatorSelection:e.authenticatorSelection,timeout:12e4});if(!t)throw new Zn({code:"failed_to_create_passkey",error:"Could not create passkey"});return N(W({},t),{type:(n=t.type)!=null?n:"public-key",clientExtensionResults:{}})});import{PrivyClientError as ri}from"@privy-io/js-sdk-core";var rr=e=>d(void 0,null,function*(){var n;let t=yield(yield import("react-native-passkeys")).get({rpId:e.rpId,challenge:e.challenge,allowCredentials:e.allowCredentials,timeout:12e4});if(!t)throw new ri({code:"no_passkey_found_for_challenge",error:"Could not find a matching passkey to login with"});return N(W({},t),{type:(n=t.type)!=null?n:"public-key",clientExtensionResults:{}})});function yt(e){var r;return{id:e.id,client_extension_results:{app_id:e.clientExtensionResults.appid,cred_props:e.clientExtensionResults.credProps,hmac_create_secret:e.clientExtensionResults.hmacCreateSecret},raw_id:e.rawId,type:e.type,authenticator_attachment:(r=e.authenticatorAttachment)!=null?r:"platform",response:{authenticator_data:e.response.authenticatorData,client_data_json:e.response.clientDataJSON,signature:e.response.signature,user_handle:e.response.userHandle}}}function ft(e){var r,t,n,i;return{challenge:e.challenge,rpId:e.rp_id,extensions:{appid:(r=e.extensions)==null?void 0:r.app_id,credProps:(t=e.extensions)==null?void 0:t.cred_props,hmacCreateSecret:(n=e.extensions)==null?void 0:n.hmac_create_secret},timeout:e.timeout,allowCredentials:(i=e.allow_credentials)==null?void 0:i.map(({id:o,type:a,transports:s})=>({id:o,type:a,transports:s})),userVerification:e.user_verification}}function sm(e){var r,t,n,i,o,a,s,l;return{rp:e.rp,user:{id:e.user.id,name:e.user.name,displayName:e.user.display_name},challenge:e.challenge,pubKeyCredParams:e.pub_key_cred_params,extensions:{hmacCreateSecret:(r=e.extensions)==null?void 0:r.hmac_create_secret,credProps:(n=(t=e.extensions)==null?void 0:t.cred_props)==null?void 0:n.rk,appid:(i=e.extensions)==null?void 0:i.app_id},attestation:e.attestation,excludeCredentials:e.exclude_credentials,authenticatorSelection:{authenticatorAttachment:(o=e.authenticator_selection)==null?void 0:o.authenticator_attachment,residentKey:(a=e.authenticator_selection)==null?void 0:a.resident_key,userVerification:(s=e.authenticator_selection)==null?void 0:s.user_verification,requireResidentKey:(l=e.authenticator_selection)==null?void 0:l.require_resident_key}}}function mm(){let{client:e}=oi(f),r=Pe(o=>d(this,null,function*(){var a,s;switch(o.method){case"sms":yield e.mfa.sms.sendCode({action:"verify"});return;case"passkey":let{options:l}=yield e.mfa.passkey.generateAuthenticationOptions({relying_party:o.relyingParty||((s=(a=x())==null?void 0:a.mfa)==null?void 0:s.relyingParty)});return ft(l);case"totp":return;default:throw new Error(`Unsupported MFA method: ${o.mfaMethod}`)}}),[e]),t=Pe(o=>d(this,null,function*(){var a,s,l,c,u,m,p;switch(o.method){case"totp":case"sms":if(typeof o.mfaCode!="string")throw new We({code:"invalid_mfa_code",error:"Invalid MFA code"});(l=e.mfaPromises.rootPromise.current)==null||l.resolve({mfaMethod:o.method,mfaCode:o.mfaCode,relyingParty:o.relyingParty||((s=(a=x())==null?void 0:a.mfa)==null?void 0:s.relyingParty)||""}),yield new Promise((y,h)=>{e.mfaPromises.submitPromise.current={resolve:y,reject:h}});break;case"passkey":if(typeof o.mfaCode=="string")throw new We({code:"invalid_passkey_response",error:"Invalid authenticator response"});let v=yield rr(o.mfaCode),g=yt(v);(m=e.mfaPromises.rootPromise.current)==null||m.resolve({mfaMethod:o.method,relyingParty:o.relyingParty||((u=(c=x())==null?void 0:c.mfa)==null?void 0:u.relyingParty)||"",mfaCode:g}),yield new Promise((y,h)=>{e.mfaPromises.submitPromise.current={resolve:y,reject:h}});break;default:let w=new We({code:"unsupported_mfa_method",error:"Unsupported MFA method"});throw(p=e.mfaPromises.rootPromise.current)==null||p.reject(w),w}}),[e]),n=Pe(()=>d(this,null,function*(){yield e.mfa.verifyMfa()}),[e]),i=Pe(()=>{var o;(o=e.mfaPromises.rootPromise.current)==null||o.reject(new We({code:"mfa_canceled",error:"MFA canceled"}))},[e]);return{init:r,submit:t,prompt:n,cancel:i}}import{useCallback as tr,useContext as ni}from"react";function hm(){let{client:e}=ni(f),r=tr(i=>d(this,null,function*(){switch(i.method){case"sms":case"totp":return yield e.mfa.initEnrollMfa(i);case"passkey":return;default:throw new Error(`Unsupported MFA method: ${i.method}`)}}),[e]),t=tr(i=>d(this,null,function*(){switch(i.method){case"sms":case"totp":case"passkey":yield e.mfa.submitEnrollMfa(i);return;default:throw new Error(`Unsupported MFA method: ${i.method}`)}}),[e]),n=tr(i=>d(this,null,function*(){switch(i.method){case"sms":case"totp":yield e.mfa.unenrollMfa(i.method);return;case"passkey":yield e.mfa.submitEnrollMfa({method:"passkey",credentialIds:[],removeForLogin:i.removeForLogin});return;default:throw new Error(`Unsupported MFA method: ${i.method}`)}}),[e]);return{initMfaEnrollment:r,submitMfaEnrollment:t,unenrollMfa:n}}import{useCallback as ii,useMemo as ai}from"react";import{getAllUserEmbeddedEthereumWallets as nr,getEntropyDetailsFromUser as gt,getUserEmbeddedSolanaWallet as si,PrivyClientError as ht}from"@privy-io/js-sdk-core";var ci=()=>{let e=A(),r=O(),t=ai(()=>{let o=nr(e).map(a=>{let s=gt(e,a);return s?{account:a,entropy:s}:null});return o.some(a=>a===null)?[]:o.filter(a=>a!==null).map(({account:a,entropy:{entropyId:s,entropyIdVerifier:l}})=>({address:a.address,walletIndex:a.wallet_index,chainType:a.chain_type,getProvider:()=>r.embeddedWallet.getEthereumProvider({wallet:a,entropyId:s,entropyIdVerifier:l,onNeedsRecovery:c=>d(void 0,null,function*(){var u;yield(u=pe())==null?void 0:u(c)})})}))},[r,e]),n=ii((...o)=>d(void 0,[...o],function*({createAdditional:i=!1}={}){let{user:a}=yield r.user.get(),s=nr(a);if(!i&&s.length>0)throw new ht({code:"embedded_wallet_creation_error",error:"Wallet already exists for this user. Set `createAdditional` to `true` to create another wallet"});let l=gt(a);if(!l){let g=yield r.embeddedWallet.create({});return or(g.user,0),{user:g.user}}let{entropyId:c,entropyIdVerifier:u}=l;if(u==="solana-address-verifier"){let g=si(a),w=yield r.embeddedWallet.create({solanaAccount:g});return or(w.user,0),{user:w.user}}let p=s.map(g=>g.wallet_index).reduce((g,w)=>Math.max(g,w),0)+1,v=yield r.embeddedWallet.add({chainType:"ethereum",hdWalletIndex:p,entropyId:c,entropyIdVerifier:u});return or(v.user,p),{user:v.user}}),[r]);return{wallets:t,create:n}};function or(e,r){let t=nr(e).find(n=>n.wallet_index===r);if(!e||!t)throw new ht({code:"embedded_wallet_creation_error",error:"Unknown error creating wallet"})}import{useContext as li,useEffect as vt}from"react";var di=(e={})=>{let{solanaWallet:r,createSolanaWalletCallbacks:t,recoverSolanaWalletCallbacks:n}=li(f),{onCreateWalletSuccess:i,onCreateWalletError:o,onRecoverWalletError:a,onRecoverWalletSuccess:s}=e;return vt(()=>{t.current={onSuccess:i,onError:o}},[i,o]),vt(()=>{n.current={onSuccess:s,onError:a}},[s,a]),r};import{useCallback as ui,useMemo as mi}from"react";import{getAllUserEmbeddedBitcoinWallets as ir,getEntropyDetailsFromUser as wt,isUnifiedWallet as pi,PrivyClientError as X}from"@privy-io/js-sdk-core";var yi=()=>{let e=A(),r=O(),t=mi(()=>{let i=wt(e);if(!i)return[];let o=ir(e),{entropyId:a,entropyIdVerifier:s}=i;return o.map(l=>({address:l.address,walletIndex:l.wallet_index,publicKey:l.public_key,chainType:l.chain_type,getProvider:()=>pi(l)?Promise.reject(new X({code:"unsupported_wallet_type",error:"Bitcoin wallet providers are only supported for on-device execution and this app uses TEE execution. Use the useSignRawHash hook from @privy-io/expo/extended-chains to sign over a hash with this wallet. Learn more at https://docs.privy.io/recipes/tee-wallet-migration-guide"})):r.embeddedWallet.getBitcoinProvider({wallet:l,entropyId:a,entropyIdVerifier:s})}))},[r,e]),n=ui(a=>d(void 0,[a],function*({chainType:i,createAdditional:o=!1}){var y;let s=r.app.getConfig();if(((y=s==null?void 0:s.embedded_wallet_config)==null?void 0:y.mode)==="user-controlled-server-wallets-only")throw i==="bitcoin-segwit"?new X({code:"unsupported_wallet_type",error:"This app uses TEE execution. Use the useCreateWallet hook from @privy-io/expo/extended-chains to create the wallet instead. Learn more https://docs.privy.io/recipes/tee-wallet-migration-guide"}):new X({code:"unsupported_wallet_type",error:`Bitcoin (${i}) wallets are only supported for on-device execution and this app uses TEE execution. Learn more https://docs.privy.io/recipes/tee-wallet-migration-guide`});let{user:l}=yield r.user.get(),c=wt(l);if(!c)throw new X({code:"embedded_wallet_creation_error",error:"No existing wallet for this user, create an Ethereum walet first to add a Bitcoin wallet"});let{entropyId:u,entropyIdVerifier:m}=c,p=ir(l).filter(h=>h.chain_type===i);if(!o&&p.length>0)throw new X({code:"embedded_wallet_creation_error",error:"Wallet already exists for this user. Set `createAdditional` to `true` to create another wallet"});let v=p.length===0?0:Math.max(...p.map(h=>h.wallet_index),0)+1,g=yield r.embeddedWallet.add({chainType:i,hdWalletIndex:v,entropyId:u,entropyIdVerifier:m}),w=ir(g.user).find(h=>h.chain_type===i&&h.wallet_index===v);if(!g.user||!w)throw new X({code:"embedded_wallet_creation_error",error:"Unknown error creating wallet"});return{user:g.user,provider:yield r.embeddedWallet.getBitcoinProvider({wallet:w,entropyId:u,entropyIdVerifier:m})}}),[r]);return{wallets:t,create:n}};import{useContext as fi}from"react";var ar=()=>{let{isReady:e,logout:r,getAccessToken:t,error:n}=fi(f);return{user:A(),isReady:e,error:n,logout:r,getAccessToken:t}};import{useMemo as gi}from"react";import{generateAuthorizationSignature as hi}from"@privy-io/js-sdk-core";var vi=()=>{let e=O();return gi(()=>({generateAuthorizationSignature(t){return d(this,null,function*(){let{signature:n}=yield hi((...i)=>e.embeddedWallet.signWithUserSigner(...i),t);return{signature:n}})}}),[e])};import{useCallback as Ci}from"react";import{PrivyClientError as ki}from"@privy-io/js-sdk-core";import{getAllUserEmbeddedBitcoinWallets as wi,getUserEmbeddedEthereumWallet as bi,getUserEmbeddedSolanaWallet as Si,isEmbeddedWalletAccount as Ei,isUnifiedWallet as _i}from"@privy-io/js-sdk-core";function bt(e,r){return d(this,null,function*(){var i;let t=(i=bi(r))!=null?i:Si(r);if(!t||_i(t))return{success:!0};if(t.imported)throw new Error("Imported wallets cannot be migrated");if(wi(r).length>0)throw new Error("Bitcoin wallets cannot be migrated");let n=r.linked_accounts.filter(Ei).filter(o=>!o.imported).filter(o=>o.chain_type==="ethereum"||o.chain_type==="solana");return t.chain_type==="ethereum"?yield e.embeddedWallet.getProvider(t):t.chain_type==="solana"&&(yield e.embeddedWallet.getSolanaProvider(t,t.address,"solana-address-verifier")),yield e.embeddedWallet.delegateWallets({rootWallet:{address:t.address,chainType:t.chain_type,imported:t.imported},delegatedWallets:n.map(o=>({address:o.address,chainType:o.chain_type,walletIndex:o.wallet_index}))}),yield e.user.get(),{success:!0}})}var St=()=>{let e=O();return{migrate:Ci(()=>d(void 0,null,function*(){var o;let t=b(),n=e.app.getConfig();if(((o=n==null?void 0:n.embedded_wallet_config)==null?void 0:o.mode)!=="user-controlled-server-wallets-only")return{success:!0};if(!t)throw new ki({code:"embedded_wallet_before_logged_in",error:"User must be authenticated before migrating wallets"});return bt(e,t)}),[e])}};var Et=({disabled:e})=>{let{migrate:r}=St(),{user:t}=ar(),n=Wi(!1);return Pi(()=>{e||t&&(n.current||(n.current=!0,r().then(()=>{console.info("Migrated wallets for user")}).catch(i=>{console.warn("Unable to migrate wallets: ",i)}).finally(()=>{n.current=!1})))},[r,t,e]),null};var f=Ai(null),re;function sy(e){return re?re.getAccessToken():e!=null&&e.strict?Promise.reject(new kt({code:"attempted_to_read_storage_before_client_initialized",error:"Called `getAccessToken` before client initialized"})):(console.warn("Called `getAccessToken` before client initialized"),Promise.resolve(null))}var cy=e=>{var dr,ur,mr;Oi();let[r,t]=I(Ct.currentState==="active");_t(()=>{let j=Ct.addEventListener("change",It=>{t(It==="active")});return()=>{j.remove()}},[]),_t(()=>wr(e.config),[e.config]);let[n,i]=I(!1),[o,a]=I(null),[s,l]=I(!1),[c,u]=I({status:"disconnected",account:null}),[m,p]=I({status:"disconnected"}),[v,g]=I({status:"initial"}),[w,y]=I({status:"initial"}),[h,S]=I({status:"initial"}),[_,C]=I({status:"initial"}),[k,P]=I({status:"initial"}),[M,de]=I({status:"initial"}),[ue,Ae]=I({status:"initial"}),Ue=ee({}),Re=ee({}),Oe=ee({}),Ie=ee({}),cr=ee({}),lr=ee({}),me=xe(j=>{if(j){Fe(j),a(null);return}Fe(null),g({status:"initial"}),y({status:"initial"}),u({status:"disconnected",account:null})},[]),R=xi(()=>{let j=e.storage||ye;return e.client?re=e.client:re=vr({appId:e.appId,clientId:e.clientId,supportedChains:e.supportedChains,storage:j,baseUrl:e.baseUrl,logLevel:e.logLevel}),re.setCallbacks({setUser:me,setIsReady:l}),re},[e.client,e.storage,e.appId,e.clientId,e.baseUrl,e.supportedChains,e.logLevel,me]),Pt=xe(()=>(me(null),R.auth.logout()),[me,R]),Wt=xe(()=>d(void 0,null,function*(){try{return yield R.getAccessToken()}catch(j){return console.debug(j),null}}),[R]),xt=xe(()=>R.getIdentityToken(),[R]);jr({client:R,isUserInitialized:n,setIsUserInitialized:i,setError:a});let At=Fr({client:R,appId:e.appId,createWalletCallbacks:Re,recoverWalletCallbacks:Oe,setWalletRecoveryCallbacks:Ie,setRecoveryFlowState:S,wallet:c,setWallet:u}),Ut=xr({client:R,createSolanaWalletCallbacks:cr,recoverSolanaWalletCallbacks:lr,setSolanaRecoveryFlowState:C,solanaWallet:m,setSolanaWallet:p});Dr({client:R,createWalletCallbacks:Re,recoverWalletCallbacks:Oe,setWalletRecoveryCallbacks:Ie,recoveryFlowState:h,oAuthState:w,setRecoveryFlowState:S,setWallet:u,appStateVisible:r});let{customAuthStateIsSettled:Rt}=Nr({client:R,isReady:n}),Ot=K();return Z.createElement(Z.Fragment,null,Z.createElement(f.Provider,{value:{client:R,isReady:Ot&&n&&Rt,error:o,logout:Pt,getAccessToken:Wt,getIdentityToken:xt,wallet:W(W({},c),At),solanaWallet:W(W({},m),Ut),oAuthState:w,oAuthCallbacks:Ue,recoveryFlowState:h,setRecoveryFlowState:S,solanaRecoveryFlowState:_,setSolanaRecoveryFlowState:C,createWalletCallbacks:Re,recoverWalletCallbacks:Oe,setWalletRecoveryCallbacks:Ie,createSolanaWalletCallbacks:cr,recoverSolanaWalletCallbacks:lr,setOAuthState:y,siweState:k,setSiweState:P,otpState:v,setOtpState:g,passkeyState:M,setPasskeyState:de,farcasterState:ue,setFarcasterState:Ae}},e.children,Z.createElement(Et,{disabled:(mr=(ur=(dr=e.config)==null?void 0:dr.embedded)==null?void 0:ur.disableAutomaticMigration)!=null?mr:!1})),Z.createElement(Ri,{style:{width:0,height:0,overflow:"hidden"}},Z.createElement(Er,{client:R,isClientReady:s})))},Oi=()=>{if(Ui(f))throw new kt({code:"configuration_error",error:"Found multiple instances of PrivyProvider, ensure there is only one mounted in your application tree."})};var gy=e=>{let{client:r,setSiweState:t,siweState:n}=Ii(f),i=sr(s=>{var c;let l=E(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=sr(u=>d(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]),a=sr(c=>d(void 0,[c],function*({signature:s,messageOverride:l}){var u;try{if(!b())throw new Mi({code:"attempted_link_siwe_before_logged_in",error:"Must be logged in to link a wallet, Use `useLoginWithSiwe` to login with a wallet"});t({status:"submitting-signature"});let{user:p}=yield r.auth.siwe.linkWithSiwe(s,void 0,l);return t({status:"done"}),(u=e==null?void 0:e.onSuccess)==null||u.call(e,p),p}catch(m){throw i(m)}}),[r,i,e==null?void 0:e.onSuccess]);return{generateSiweMessage:o,linkWithSiwe:a,state:n}};export{x as a,b,ra as c,A as d,ta as e,Ft as f,E as g,J as h,ye as i,vr as j,gy as k,Vs as l,O as m,Xs as n,ac as o,yc as p,Ec as q,xc as r,Tc as s,Bc as t,el as u,cl as v,yl as w,_l as x,Il as y,Dl as z,zl as A,Yl as B,nd as C,dd as D,hd as E,xd as F,Fd as G,zd as H,Qd as I,nu as J,mu as K,Su as L,Ze as M,Au as N,Iu as O,Vu as P,qu as Q,ei as R,rr as S,sm as T,mm as U,hm as V,ci as W,di as X,yi as Y,ar as Z,vi as _,St as $,f as aa,sy as ba,cy as ca};
@@ -0,0 +1 @@
1
+ import{a as S,aa as T,b as R,e as B,g as H}from"./chunk-FKGFAPVX.js";import{a as L,b,d as f}from"./chunk-OWCFWPAL.js";import*as l from"expo-linking";import*as d from"expo-web-browser";import{useCallback as z,useContext as V,useEffect as X}from"react";import{Platform as q}from"react-native";import{PrivyClientError as s}from"@privy-io/js-sdk-core";import*as c from"expo-apple-authentication";import{PrivyClientError as K}from"@privy-io/js-sdk-core";function M(e){return f(this,null,function*(){try{return yield c.signInAsync({state:e.state,requestedScopes:[c.AppleAuthenticationScope.EMAIL,c.AppleAuthenticationScope.FULL_NAME]})}catch(i){throw i instanceof Error&&"code"in i&&i.code==="ERR_REQUEST_CANCELED"?new K({error:"Apple login was cancelled",code:e.isLogin?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):i}})}var W=(e={})=>{let{oAuthState:i,setOAuthState:r,oAuthCallbacks:D,client:u}=V(T),j=B(),a=e.action?e.action==="login":!j;X(()=>{D.current={onSuccess:e.onSuccess,onError:e.onError}},[e.onSuccess,e.onError]);let v=z(U=>{var A;let n=H(U);return r({status:"error",error:n}),(A=e==null?void 0:e.onError)==null||A.call(e,n),n},[e==null?void 0:e.onError]);return{start:z(function(_e){return f(this,arguments,function*({provider:n,redirectUri:A,isLegacyAppleIosBehaviorEnabled:Q=!1,disableSignup:C,onAppleOAuthUserInfo:I}){var P,x,F;r({status:"loading"});let E=R();try{if(E&&e.action==="login")throw new s({code:"attempted_login_with_oauth_while_already_logged_in",error:"Already logged in, if trying to link an OAuth account use `useLinkWithOAuth`"});if(!E&&e.action==="link")throw new s({code:"attempted_link_oauth_before_logged_in",error:"Must be logged in to link an OAuth account, use `useLoginWithOAuth`"});let h=l.createURL(A||"/"),{url:m}=yield u.auth.oauth.generateURL(n,h),t,_;if(q.OS==="ios"&&n==="apple"&&!Q){let g=(P=new URL(m).searchParams.get("state"))!=null?P:"",o=yield M({state:g,isLogin:a});if(console.log("credentials",o),!o.authorizationCode||!o.state)throw new s({error:"OAuth invalid credentials",code:a?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(a){let k=S(),N=yield u.auth.oauth.loginWithCode(o.authorizationCode,o.state,n,"raw",C?"no-signup":"login-or-sign-up",{embedded:k==null?void 0:k.embedded});t=N.user,_=N.is_new_user}else({user:t}=yield u.auth.oauth.linkWithCode(o.authorizationCode,o.state,n,"raw"));return I&&I({fullName:o.fullName,email:o.email}),(x=e==null?void 0:e.onSuccess)==null||x.call(e,t,_),r({status:"done"}),t!=null?t:void 0}let G=q.OS==="android"?m.replace("x.com","twitter.com"):m,p=yield d.openAuthSessionAsync(G,h,{createTask:!1});if(p.type!=="success")throw[d.WebBrowserResultType.CANCEL,d.WebBrowserResultType.DISMISS].includes(p.type)?new s({error:"OAuth was cancelled",code:a?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):new s({error:"OAuth session failed",code:a?"failed_to_complete_login_with_oauth":"failed_to_complete_link_with_oauth"});let{queryParams:J}=l.parse(p.url),{privy_oauth_state:O,privy_oauth_code:y}=J;if(!y||!O)throw new s({error:"OAuth invalid credentials",code:a?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(a){let w=S(),g=yield u.auth.oauth.loginWithCode(y,O,n,void 0,C?"no-signup":"login-or-sign-up",{embedded:w==null?void 0:w.embedded});t=g.user,_=g.is_new_user}else({user:t}=yield u.auth.oauth.linkWithCode(y,O,n));return(F=e==null?void 0:e.onSuccess)==null||F.call(e,t,_),yield l.openURL(p.url.split("?")[0]),r({status:"done"}),t!=null?t:void 0}catch(h){throw v(h),h}})},[u,r,v]),state:i}};function le(e){let{state:i,start:r}=W(b(L({},e),{action:"login"}));return{state:i,login:r}}function he(e){let{state:i,start:r}=W(b(L({},e),{action:"link"}));return{state:i,link:r}}function ce(e){return W(e)}export{le as a,he as b,ce as c};
@@ -1 +1 @@
1
- import{b as d,m as i}from"./chunk-EHDNSVQG.js";import{d as a}from"./chunk-OWCFWPAL.js";import{useMemo as c}from"react";import{create as g}from"@privy-io/js-sdk-core";var f=()=>{let e=i();return c(()=>({createWallet(n){return a(this,null,function*(){let s=yield g(e,{request:{chain_type:n.chainType}}),{user:o}=yield e.user.get();return{user:o,wallet:s}})}}),[e])};import{useMemo as h}from"react";import{isEmbeddedWalletAccount as m,isUnifiedWallet as w,PrivyClientError as u,rawSign as y}from"@privy-io/js-sdk-core";var C=()=>{let e=i();return h(()=>({signRawHash(M){return a(this,arguments,function*({address:n,chainType:s,hash:o}){let l=d();if(!l)throw new u({code:"embedded_wallet_before_logged_in",error:"User must be authenticated before signing a raw hash"});let p=l.linked_accounts.filter(m).filter(w).filter(t=>t.chain_type===s).find(t=>t.address===n);if(!p)throw new u({code:"embedded_wallet_does_not_exist",error:"No embedded wallet found for the given address and chain type"});let r=yield y(e,(...t)=>e.embeddedWallet.signWithUserSigner(...t),{wallet_id:p.id,params:{hash:o}});if(r.data&&"signature"in r.data&&r.data.encoding==="hex")return{signature:r.data.signature};throw new Error("Failed to sign")})}}),[e])};export{f as useCreateWallet,C as useSignRawHash};
1
+ import{b as d,m as i}from"./chunk-FKGFAPVX.js";import{d as a}from"./chunk-OWCFWPAL.js";import{useMemo as c}from"react";import{create as g}from"@privy-io/js-sdk-core";var f=()=>{let e=i();return c(()=>({createWallet(n){return a(this,null,function*(){let s=yield g(e,{request:{chain_type:n.chainType}}),{user:o}=yield e.user.get();return{user:o,wallet:s}})}}),[e])};import{useMemo as h}from"react";import{isEmbeddedWalletAccount as m,isUnifiedWallet as w,PrivyClientError as u,rawSign as y}from"@privy-io/js-sdk-core";var C=()=>{let e=i();return h(()=>({signRawHash(M){return a(this,arguments,function*({address:n,chainType:s,hash:o}){let l=d();if(!l)throw new u({code:"embedded_wallet_before_logged_in",error:"User must be authenticated before signing a raw hash"});let p=l.linked_accounts.filter(m).filter(w).filter(t=>t.chain_type===s).find(t=>t.address===n);if(!p)throw new u({code:"embedded_wallet_does_not_exist",error:"No embedded wallet found for the given address and chain type"});let r=yield y(e,(...t)=>e.embeddedWallet.signWithUserSigner(...t),{wallet_id:p.id,params:{hash:o}});if(r.data&&"signature"in r.data&&r.data.encoding==="hex")return{signature:r.data.signature};throw new Error("Failed to sign")})}}),[e])};export{f as useCreateWallet,C as useSignRawHash};
package/dist/esm/index.js CHANGED
@@ -1 +1 @@
1
- import{a as pt,b as ut,c as nt,d as st,e as at,f as ht,g as ft,h as mt}from"./chunk-QSWCX5XI.js";import{a as c,b as d,c as x}from"./chunk-QUN7ZWPR.js";import{$ as rt,A as G,B,C as H,D as M,E as b,F as j,G as q,H as z,I as D,J,K,L as Q,M as T,N as V,O as X,P as Y,T as Z,U as _,V as $,W as E,X as tt,Y as i,Z as et,_ as y,aa as ot,ba as it,e as o,f as A,i as f,j as m,k as l,l as O,m as g,n as P,o as W,p as L,q as v,r as N,s as R,t as k,u as C,v as I,w as U,x as w,y as F,z as S}from"./chunk-EHDNSVQG.js";import"./chunk-OWCFWPAL.js";export*from"@privy-io/js-sdk-core";import t from"react";var xt=({loading:p,error:e,unauthenticated:u,children:n})=>{let{isReady:s,error:r}=i(),a=o();if(!s)return t.createElement(t.Fragment,null,p);if(r&&e){let h=typeof e=="function"?e(r):e;return t.createElement(t.Fragment,null,h)}return a?t.createElement(t.Fragment,null,n):t.createElement(t.Fragment,null,u)};export{xt as AuthBoundary,rt as PrivyContext,it as PrivyProvider,f as SecureStorageAdapter,m as createPrivyClient,ot as getAccessToken,ft as hasError,pt as isConnected,nt as isConnecting,ht as isCreating,st as isDisconnected,at as isNotCreated,ut as isReconnecting,mt as needsRecovery,et as useAuthorizationSignature,X as useCreateGuestAccount,tt as useEmbeddedBitcoinWallet,$ as useEmbeddedEthereumWallet,E as useEmbeddedSolanaWallet,Q as useEmbeddedWallet,T as useEmbeddedWalletStateChange,G as useHeadlessDelegatedActions,V as useIdentityToken,v as useLinkEmail,R as useLinkSMS,j as useLinkWithCrossApp,C as useLinkWithFarcaster,d as useLinkWithOAuth,l as useLinkWithSiwe,P as useLinkWithSiws,b as useLoginWithCrossApp,N as useLoginWithEmail,U as useLoginWithFarcaster,w as useLoginWithFarcasterV2,c as useLoginWithOAuth,k as useLoginWithSMS,O as useLoginWithSiwe,W as useLoginWithSiws,Z as useMfa,_ as useMfaEnrollment,y as useMigrateWallets,x as useOAuthFlow,S as useOAuthTokens,A as useOnNeedsRecovery,i as usePrivy,g as usePrivyClient,K as useRecoverEmbeddedWallet,Y as useRegisterMfaListener,D as useSendTransactionWithCrossApp,B as useSessionSigners,J as useSetEmbeddedWalletRecovery,q as useSignMessageWithCrossApp,z as useSignTypedDataWithCrossApp,I as useUnlinkFarcaster,F as useUnlinkOAuth,L as useUnlinkWallet,H as useUpdateEmail,M as useUpdatePhone};
1
+ import{a as ut,b as nt,c as st,d as at,e as ht,f as ft,g as mt,h as yt}from"./chunk-QSWCX5XI.js";import{a as c,b as d,c as x}from"./chunk-T5SMQKBK.js";import{$ as y,A as G,B,C as H,D as M,E as b,F as j,G as q,H as z,I as D,J,K,L as Q,M as T,N as V,O as X,P as Y,Q as Z,U as _,V as $,W as E,X as tt,Y as et,Z as i,_ as rt,aa as ot,ba as it,ca as pt,e as o,f as A,i as f,j as m,k as l,l as O,m as g,n as P,o as W,p as L,q as v,r as N,s as R,t as k,u as C,v as I,w as U,x as w,y as F,z as S}from"./chunk-FKGFAPVX.js";import"./chunk-OWCFWPAL.js";export*from"@privy-io/js-sdk-core";import t from"react";var At=({loading:p,error:e,unauthenticated:u,children:n})=>{let{isReady:s,error:r}=i(),a=o();if(!s)return t.createElement(t.Fragment,null,p);if(r&&e){let h=typeof e=="function"?e(r):e;return t.createElement(t.Fragment,null,h)}return a?t.createElement(t.Fragment,null,n):t.createElement(t.Fragment,null,u)};export{At as AuthBoundary,ot as PrivyContext,pt as PrivyProvider,f as SecureStorageAdapter,m as createPrivyClient,it as getAccessToken,mt as hasError,ut as isConnected,st as isConnecting,ft as isCreating,at as isDisconnected,ht as isNotCreated,nt as isReconnecting,yt as needsRecovery,rt as useAuthorizationSignature,Y as useCreateGuestAccount,et as useEmbeddedBitcoinWallet,E as useEmbeddedEthereumWallet,tt as useEmbeddedSolanaWallet,T as useEmbeddedWallet,V as useEmbeddedWalletStateChange,B as useHeadlessDelegatedActions,X as useIdentityToken,v as useLinkEmail,k as useLinkSMS,q as useLinkWithCrossApp,I as useLinkWithFarcaster,d as useLinkWithOAuth,l as useLinkWithSiwe,P as useLinkWithSiws,j as useLoginWithCrossApp,R as useLoginWithEmail,w as useLoginWithFarcaster,F as useLoginWithFarcasterV2,c as useLoginWithOAuth,C as useLoginWithSMS,O as useLoginWithSiwe,W as useLoginWithSiws,_ as useMfa,$ as useMfaEnrollment,y as useMigrateWallets,x as useOAuthFlow,G as useOAuthTokens,A as useOnNeedsRecovery,i as usePrivy,g as usePrivyClient,Q as useRecoverEmbeddedWallet,Z as useRegisterMfaListener,J as useSendTransactionWithCrossApp,H as useSessionSigners,K as useSetEmbeddedWalletRecovery,z as useSignMessageWithCrossApp,D as useSignTypedDataWithCrossApp,N as useUnlinkEmail,U as useUnlinkFarcaster,S as useUnlinkOAuth,L as useUnlinkWallet,M as useUpdateEmail,b as useUpdatePhone};
@@ -1 +1 @@
1
- import{a as q,b as D,c as F,d as J,e as K,f as N,g as T,h as M}from"./chunk-QSWCX5XI.js";import{$ as p,Q as d,R as C,S,a as b,b as m,g}from"./chunk-EHDNSVQG.js";import{d as l}from"./chunk-OWCFWPAL.js";import{useCallback as x,useContext as U}from"react";import{PrivyClientError as R}from"@privy-io/js-sdk-core";var X=e=>{let{client:n,passkeyState:h,setPasskeyState:s}=U(p),c=x(o=>{var r;let a=g(o);return s({status:"error",error:a}),(r=e==null?void 0:e.onError)==null||r.call(e,a),a},[e==null?void 0:e.onError]);return{linkWithPasskey:x(a=>l(void 0,[a],function*({relyingParty:o}){var r;try{if(!m())throw new R({code:"attempted_link_passkey_before_logged_in",error:"Must be logged in to link a passkey."});s({status:"generating-challenege"});let{options:u}=yield n.auth.passkey.generateRegistrationOptions(o);s({status:"awaiting-passkey"});let k=yield d(S(u));s({status:"submitting-response"});let{user:y}=yield n.auth.passkey.linkWithPasskey(k,o);return s({status:"done"}),(r=e==null?void 0:e.onSuccess)==null||r.call(e,y),y}catch(t){throw c(t)}}),[n,c,e==null?void 0:e.onSuccess]),state:h}};import{useCallback as E,useContext as v}from"react";import{PrivyClientError as H}from"@privy-io/js-sdk-core";var ne=e=>{let{client:n,passkeyState:h,setPasskeyState:s}=v(p),c=E(o=>{var r;let a=g(o);return s({status:"error",error:a}),(r=e==null?void 0:e.onError)==null||r.call(e,a),a},[e==null?void 0:e.onError]);return{loginWithPasskey:E(a=>l(void 0,[a],function*({relyingParty:o}){var r,t,u,k;try{if(m())throw new H({code:"attempted_login_with_passkey_while_already_logged_in",error:"Already logged in, use `useLinkWithPasskey` if you are trying to link a passkey to an existing account"});s({status:"generating-challenege"});let{options:i}=yield n.auth.passkey.generateAuthenticationOptions(o);s({status:"awaiting-passkey"});let P=yield C({challenge:i.challenge,rpId:i.rp_id,extensions:{appid:(r=i.extensions)==null?void 0:r.app_id,credProps:(t=i.extensions)==null?void 0:t.cred_props,hmacCreateSecret:(u=i.extensions)==null?void 0:u.hmac_create_secret},timeout:i.timeout,allowCredentials:i.allow_credentials,userVerification:i.user_verification});s({status:"submitting-response"});let w=b(),_=yield n.auth.passkey.loginWithPasskey(P,i.challenge,o,{embedded:w==null?void 0:w.embedded});return s({status:"done"}),(k=e==null?void 0:e.onSuccess)==null||k.call(e,_.user,_.is_new_user),_.user}catch(y){throw c(y)}}),[n,c,e==null?void 0:e.onSuccess]),state:h}};import{useCallback as O,useContext as I,useEffect as L,useRef as A}from"react";import{PrivyClientError as V}from"@privy-io/js-sdk-core";var me=e=>{let{client:n,passkeyState:h,setPasskeyState:s}=I(p),c=A(e);L(()=>{c.current=e},[e]);let f=O(a=>{var t,u;let r=g(a);return s({status:"error",error:r}),(u=(t=c.current)==null?void 0:t.onError)==null||u.call(t,r),r},[s]);return{signupWithPasskey:O(r=>l(void 0,[r],function*({relyingParty:a}){var t,u;try{if(m())throw new V({code:"attempted_login_with_passkey_while_already_logged_in",error:"Already logged in, use `useLinkWithPasskey` if you are trying to link a passkey to an existing account"});s({status:"generating-challenege"});let{options:y}=yield n.auth.passkey.generateSignupOptions(a);s({status:"awaiting-passkey"});let i=yield d(S(y));s({status:"submitting-response"});let P=yield n.auth.passkey.signupWithPasskey(i,a);return s({status:"done"}),(u=(t=c.current)==null?void 0:t.onSuccess)==null||u.call(t,P.user,P.is_new_user),{user:P.user}}catch(k){throw f(k)}}),[n.auth.passkey,f,s]),state:h}};export{T as hasError,q as isConnected,F as isConnecting,N as isCreating,J as isDisconnected,K as isNotCreated,D as isReconnecting,M as needsRecovery,X as useLinkWithPasskey,ne as useLoginWithPasskey,me as useSignupWithPasskey};
1
+ import{a as q,b as D,c as F,d as J,e as K,f as N,g as T,h as M}from"./chunk-QSWCX5XI.js";import{R as d,S as C,T as S,a as b,aa as p,b as m,g}from"./chunk-FKGFAPVX.js";import{d as l}from"./chunk-OWCFWPAL.js";import{useCallback as x,useContext as U}from"react";import{PrivyClientError as R}from"@privy-io/js-sdk-core";var X=e=>{let{client:n,passkeyState:h,setPasskeyState:s}=U(p),c=x(o=>{var r;let a=g(o);return s({status:"error",error:a}),(r=e==null?void 0:e.onError)==null||r.call(e,a),a},[e==null?void 0:e.onError]);return{linkWithPasskey:x(a=>l(void 0,[a],function*({relyingParty:o}){var r;try{if(!m())throw new R({code:"attempted_link_passkey_before_logged_in",error:"Must be logged in to link a passkey."});s({status:"generating-challenege"});let{options:u}=yield n.auth.passkey.generateRegistrationOptions(o);s({status:"awaiting-passkey"});let k=yield d(S(u));s({status:"submitting-response"});let{user:y}=yield n.auth.passkey.linkWithPasskey(k,o);return s({status:"done"}),(r=e==null?void 0:e.onSuccess)==null||r.call(e,y),y}catch(t){throw c(t)}}),[n,c,e==null?void 0:e.onSuccess]),state:h}};import{useCallback as E,useContext as v}from"react";import{PrivyClientError as H}from"@privy-io/js-sdk-core";var ne=e=>{let{client:n,passkeyState:h,setPasskeyState:s}=v(p),c=E(o=>{var r;let a=g(o);return s({status:"error",error:a}),(r=e==null?void 0:e.onError)==null||r.call(e,a),a},[e==null?void 0:e.onError]);return{loginWithPasskey:E(a=>l(void 0,[a],function*({relyingParty:o}){var r,t,u,k;try{if(m())throw new H({code:"attempted_login_with_passkey_while_already_logged_in",error:"Already logged in, use `useLinkWithPasskey` if you are trying to link a passkey to an existing account"});s({status:"generating-challenege"});let{options:i}=yield n.auth.passkey.generateAuthenticationOptions(o);s({status:"awaiting-passkey"});let P=yield C({challenge:i.challenge,rpId:i.rp_id,extensions:{appid:(r=i.extensions)==null?void 0:r.app_id,credProps:(t=i.extensions)==null?void 0:t.cred_props,hmacCreateSecret:(u=i.extensions)==null?void 0:u.hmac_create_secret},timeout:i.timeout,allowCredentials:i.allow_credentials,userVerification:i.user_verification});s({status:"submitting-response"});let w=b(),_=yield n.auth.passkey.loginWithPasskey(P,i.challenge,o,{embedded:w==null?void 0:w.embedded});return s({status:"done"}),(k=e==null?void 0:e.onSuccess)==null||k.call(e,_.user,_.is_new_user),_.user}catch(y){throw c(y)}}),[n,c,e==null?void 0:e.onSuccess]),state:h}};import{useCallback as O,useContext as I,useEffect as L,useRef as A}from"react";import{PrivyClientError as V}from"@privy-io/js-sdk-core";var me=e=>{let{client:n,passkeyState:h,setPasskeyState:s}=I(p),c=A(e);L(()=>{c.current=e},[e]);let f=O(a=>{var t,u;let r=g(a);return s({status:"error",error:r}),(u=(t=c.current)==null?void 0:t.onError)==null||u.call(t,r),r},[s]);return{signupWithPasskey:O(r=>l(void 0,[r],function*({relyingParty:a}){var t,u;try{if(m())throw new V({code:"attempted_login_with_passkey_while_already_logged_in",error:"Already logged in, use `useLinkWithPasskey` if you are trying to link a passkey to an existing account"});s({status:"generating-challenege"});let{options:y}=yield n.auth.passkey.generateSignupOptions(a);s({status:"awaiting-passkey"});let i=yield d(S(y));s({status:"submitting-response"});let P=yield n.auth.passkey.signupWithPasskey(i,a);return s({status:"done"}),(u=(t=c.current)==null?void 0:t.onSuccess)==null||u.call(t,P.user,P.is_new_user),{user:P.user}}catch(k){throw f(k)}}),[n.auth.passkey,f,s]),state:h}};export{T as hasError,q as isConnected,F as isConnecting,N as isCreating,J as isDisconnected,K as isNotCreated,D as isReconnecting,M as needsRecovery,X as useLinkWithPasskey,ne as useLoginWithPasskey,me as useSignupWithPasskey};
@@ -1 +1 @@
1
- import{a as E}from"./chunk-QSWCX5XI.js";import{$ as C,b,d as h,m as x}from"./chunk-EHDNSVQG.js";import{d as c}from"./chunk-OWCFWPAL.js";import p,{createContext as v,useCallback as X,useContext as u,useEffect as _,useState as A}from"react";import{getUserSmartWallet as S,PrivyClientError as m}from"@privy-io/js-sdk-core";import{createPublicClient as $,http as F}from"viem";import{getJsonRpcEndpointFromChain as L,getUserSmartWallet as M,PrivyClientError as I}from"@privy-io/js-sdk-core";import{signerToSmartAccountClient as G}from"@privy-io/js-sdk-core/smart-wallets";var W=l=>c(void 0,[l],function*({chain:t,privyAppId:e,user:a,embeddedWallet:r,smartWalletsConfig:n,client:o}){if(!(n!=null&&n.enabled)||!r||!E(r))return;let f=yield o.embeddedWallet.getProvider(r.account),i=n==null?void 0:n.configured_networks.find(O=>O.chain_id===`eip155:${t.id}`);if(!i)throw new I({code:"chain_not_supported",error:`The chain ${t.name} (eip155:${t.id}) must be configured in the smart wallet configuration in your dashboard`});let s=M(a),y=s?s.smart_wallet_type:n.smart_wallet_type,w=s?s.smart_wallet_version:n.smart_wallet_version,U=L(t,{rpcUrls:[]},e),N=$({chain:t,transport:F(U)}),P=yield G({owner:f,smartWalletType:y,smartWalletVersion:w,chain:t,publicClient:N,paymasterContext:j(i.paymaster_url,i.paymaster_context),bundlerUrl:i.bundler_url,paymasterUrl:i.paymaster_url});if(!P)throw new I({code:"smart_wallet_client_error",error:`Failed to create smart wallet client for chain ${t.name} (eip155:${t.id})`});return P}),B=/paymaster\.biconomy\.io\/api/i;function D(t){return B.test(t)}var Y={mode:"SPONSORED",calculateGasLimits:!0,expiryDuration:300,sponsorshipInfo:{webhookData:{},smartAccountInfo:{name:"BICONOMY",version:"2.0.0"}}},j=(t,e)=>{if(t&&D(t))return Y;if(e&&e.policy_id)return{policyId:e.policy_id}};var J=({children:t})=>p.createElement(z,null,p.createElement(H,null,p.createElement(K,null,t))),T=v({config:void 0}),g=()=>{let{config:t}=u(T);return{config:t}},k=v({smartWalletClient:void 0}),V=()=>{let{smartWalletClient:t}=u(k);return{smartWalletClient:t}},R=v({client:void 0}),q=()=>{let{client:t}=u(R),e=Q();return{client:t,getClientForChain:e}},z=({children:t})=>{let[e,a]=A(void 0),r=x();return _(()=>{!e&&r&&(()=>c(void 0,null,function*(){try{if(!r){console.warn("No client found");return}let o=yield r.app.getSmartWalletConfig();a(o)}catch(o){console.warn("Error generating smart wallet config: ",o)}}))()},[r,e]),p.createElement(T.Provider,{value:{config:e}},t)},H=({children:t})=>{let{config:e}=g(),{client:a,wallet:r}=u(C),n=h(),[o,l]=A();return _(()=>{(()=>c(void 0,null,function*(){if(!n&&o&&l(void 0),!(e!=null&&e.enabled)||!n||r.status!=="connected"||n&&o&&r.status==="connected")return;let i=a.embeddedWallet.chains.find(y=>e.configured_networks.map(w=>w.chain_id).includes(`eip155:${y.id}`));if(!i)throw new m({error:"Could not find smart wallets chain configurations for any Privy client configured chains. Please configure smart wallets for your chains in the Privy dashboard.",code:"chain_not_supported"});let s=yield W({chain:i,privyAppId:a.app.appId,user:n,embeddedWallet:r,smartWalletsConfig:e,client:a});if(!s)throw new m({error:"Could not create smart wallet client",code:"smart_wallet_client_error"});l(s)}))()},[!!(e!=null&&e.enabled),!!a,!!n,r.status]),p.createElement(k.Provider,{value:{smartWalletClient:o}},t)},K=({children:t})=>{let{client:e}=u(C),a=h(),{smartWalletClient:r}=V(),{config:n}=g();return _(()=>{(()=>c(void 0,null,function*(){if(!(!r||!a||S(a)||!(n!=null&&n.enabled)))try{let{message:l}=yield e.auth.smartWallet.init({address:r.account.address,chainId:`eip155:${r.chain.id}`}),d=yield r.signMessage({message:l});yield e.auth.smartWallet.link(l,d,n.smart_wallet_type)}catch(l){console.error("Error creating smart wallet:",l)}}))()},[!!r,!!a,!!S(a),n]),p.createElement(R.Provider,{value:{client:S(a)?r:void 0}},t)},Q=()=>{let{client:t,wallet:e}=u(C),{config:a}=g();return X(n=>c(void 0,[n],function*({chainId:r}){let o=b();if(!o)throw new m({error:"Must be logged in to get a smart wallet client",code:"smart_wallet_client_error"});if(!a||!a.enabled)throw new m({error:"Must have smart wallets enabled to get a smart wallet client",code:"smart_wallet_client_error"});let d=t.embeddedWallet.chains.find(i=>i.id===r);if(!d)throw new m({error:`Could not find chain with id: ${r}`,code:"chain_not_supported"});let f=yield W({chain:d,privyAppId:t.app.appId,user:o,embeddedWallet:e,smartWalletsConfig:a,client:t});if(!f)throw new m({error:`Could not create smart wallet client for chain ${r}`,code:"smart_wallet_client_error"});return f}),[a,e,t])};export{J as SmartWalletsProvider,q as useSmartWallets};
1
+ import{a as E}from"./chunk-QSWCX5XI.js";import{aa as C,b,d as h,m as x}from"./chunk-FKGFAPVX.js";import{d as c}from"./chunk-OWCFWPAL.js";import p,{createContext as v,useCallback as X,useContext as u,useEffect as _,useState as A}from"react";import{getUserSmartWallet as S,PrivyClientError as m}from"@privy-io/js-sdk-core";import{createPublicClient as $,http as F}from"viem";import{getJsonRpcEndpointFromChain as L,getUserSmartWallet as M,PrivyClientError as I}from"@privy-io/js-sdk-core";import{signerToSmartAccountClient as G}from"@privy-io/js-sdk-core/smart-wallets";var W=l=>c(void 0,[l],function*({chain:t,privyAppId:e,user:a,embeddedWallet:r,smartWalletsConfig:n,client:o}){if(!(n!=null&&n.enabled)||!r||!E(r))return;let f=yield o.embeddedWallet.getProvider(r.account),i=n==null?void 0:n.configured_networks.find(O=>O.chain_id===`eip155:${t.id}`);if(!i)throw new I({code:"chain_not_supported",error:`The chain ${t.name} (eip155:${t.id}) must be configured in the smart wallet configuration in your dashboard`});let s=M(a),y=s?s.smart_wallet_type:n.smart_wallet_type,w=s?s.smart_wallet_version:n.smart_wallet_version,U=L(t,{rpcUrls:[]},e),N=$({chain:t,transport:F(U)}),P=yield G({owner:f,smartWalletType:y,smartWalletVersion:w,chain:t,publicClient:N,paymasterContext:j(i.paymaster_url,i.paymaster_context),bundlerUrl:i.bundler_url,paymasterUrl:i.paymaster_url});if(!P)throw new I({code:"smart_wallet_client_error",error:`Failed to create smart wallet client for chain ${t.name} (eip155:${t.id})`});return P}),B=/paymaster\.biconomy\.io\/api/i;function D(t){return B.test(t)}var Y={mode:"SPONSORED",calculateGasLimits:!0,expiryDuration:300,sponsorshipInfo:{webhookData:{},smartAccountInfo:{name:"BICONOMY",version:"2.0.0"}}},j=(t,e)=>{if(t&&D(t))return Y;if(e&&e.policy_id)return{policyId:e.policy_id}};var J=({children:t})=>p.createElement(z,null,p.createElement(H,null,p.createElement(K,null,t))),T=v({config:void 0}),g=()=>{let{config:t}=u(T);return{config:t}},k=v({smartWalletClient:void 0}),V=()=>{let{smartWalletClient:t}=u(k);return{smartWalletClient:t}},R=v({client:void 0}),q=()=>{let{client:t}=u(R),e=Q();return{client:t,getClientForChain:e}},z=({children:t})=>{let[e,a]=A(void 0),r=x();return _(()=>{!e&&r&&(()=>c(void 0,null,function*(){try{if(!r){console.warn("No client found");return}let o=yield r.app.getSmartWalletConfig();a(o)}catch(o){console.warn("Error generating smart wallet config: ",o)}}))()},[r,e]),p.createElement(T.Provider,{value:{config:e}},t)},H=({children:t})=>{let{config:e}=g(),{client:a,wallet:r}=u(C),n=h(),[o,l]=A();return _(()=>{(()=>c(void 0,null,function*(){if(!n&&o&&l(void 0),!(e!=null&&e.enabled)||!n||r.status!=="connected"||n&&o&&r.status==="connected")return;let i=a.embeddedWallet.chains.find(y=>e.configured_networks.map(w=>w.chain_id).includes(`eip155:${y.id}`));if(!i)throw new m({error:"Could not find smart wallets chain configurations for any Privy client configured chains. Please configure smart wallets for your chains in the Privy dashboard.",code:"chain_not_supported"});let s=yield W({chain:i,privyAppId:a.app.appId,user:n,embeddedWallet:r,smartWalletsConfig:e,client:a});if(!s)throw new m({error:"Could not create smart wallet client",code:"smart_wallet_client_error"});l(s)}))()},[!!(e!=null&&e.enabled),!!a,!!n,r.status]),p.createElement(k.Provider,{value:{smartWalletClient:o}},t)},K=({children:t})=>{let{client:e}=u(C),a=h(),{smartWalletClient:r}=V(),{config:n}=g();return _(()=>{(()=>c(void 0,null,function*(){if(!(!r||!a||S(a)||!(n!=null&&n.enabled)))try{let{message:l}=yield e.auth.smartWallet.init({address:r.account.address,chainId:`eip155:${r.chain.id}`}),d=yield r.signMessage({message:l});yield e.auth.smartWallet.link(l,d,n.smart_wallet_type)}catch(l){console.error("Error creating smart wallet:",l)}}))()},[!!r,!!a,!!S(a),n]),p.createElement(R.Provider,{value:{client:S(a)?r:void 0}},t)},Q=()=>{let{client:t,wallet:e}=u(C),{config:a}=g();return X(n=>c(void 0,[n],function*({chainId:r}){let o=b();if(!o)throw new m({error:"Must be logged in to get a smart wallet client",code:"smart_wallet_client_error"});if(!a||!a.enabled)throw new m({error:"Must have smart wallets enabled to get a smart wallet client",code:"smart_wallet_client_error"});let d=t.embeddedWallet.chains.find(i=>i.id===r);if(!d)throw new m({error:`Could not find chain with id: ${r}`,code:"chain_not_supported"});let f=yield W({chain:d,privyAppId:t.app.appId,user:o,embeddedWallet:e,smartWalletsConfig:a,client:t});if(!f)throw new m({error:`Could not create smart wallet client for chain ${r}`,code:"smart_wallet_client_error"});return f}),[a,e,t])};export{J as SmartWalletsProvider,q as useSmartWallets};