@privy-io/expo 0.58.1 → 0.58.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-C462C7XX.js +1 -0
- package/dist/chunk-XB3V6FST.js +1 -0
- package/dist/esm/chunk-C462C7XX.js +1 -0
- package/dist/esm/chunk-XB3V6FST.js +1 -0
- package/dist/esm/extended-chains.js +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/passkey.js +1 -1
- package/dist/esm/smart-wallets.js +1 -1
- package/dist/esm/ui.js +1 -1
- package/dist/extended-chains.js +1 -1
- package/dist/index.d.ts +65 -342
- package/dist/index.js +1 -1
- package/dist/passkey.d.ts +2 -2
- package/dist/passkey.js +1 -1
- package/dist/{predicates-ec6173c7.d.ts → predicates-358d70ee.d.ts} +1 -7
- package/dist/smart-wallets.js +1 -1
- package/dist/ui.js +1 -1
- package/package.json +2 -2
- package/dist/chunk-FKGFAPVX.js +0 -1
- package/dist/chunk-T5SMQKBK.js +0 -1
- package/dist/esm/chunk-FKGFAPVX.js +0 -1
- package/dist/esm/chunk-T5SMQKBK.js +0 -1
|
@@ -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 mr=_zustand.create.call(void 0, ()=>({status:"disconnected"})),ye=()=>mr.getState().onNeedsRecovery,Mt= exports.f =e=>{_react.useEffect.call(void 0, ()=>{mr.setState({onNeedsRecovery:e==null?void 0:e.onNeedsRecovery})},[e==null?void 0:e.onNeedsRecovery])};var _expoapplication = require('expo-application');var _exposecurestore = require('expo-secure-store'); var L = _interopRequireWildcard(_exposecurestore); var F = _interopRequireWildcard(_exposecurestore);var _jssdkcore = require('@privy-io/js-sdk-core'); var _jssdkcore2 = _interopRequireDefault(_jssdkcore);var yr=()=>{if(typeof _expoapplication.applicationId!="string")throw new (0, _jssdkcore.PrivyClientError)({error:"Cannot determine native application ID. Please make sure `expo-application` is installed as a dependency and that `ios.bundleId` or `android.package` is set.",code:"invalid_native_app_id"});return _expoapplication.applicationId};function fr(e){return{get(r){return e.get(r.replaceAll(":","-"))},put(r,t){return e.put(r.replaceAll(":","-"),t)},del(r){return e.del(r.replaceAll(":","-"))},getKeys:()=>_chunkOWCFWPALjs.d.call(void 0, this,null,function*(){return[]})}}var fe={get(e){return L.getItemAsync(e,{keychainAccessible:L.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},put(e,r){return L.setItemAsync(e,r,{keychainAccessible:L.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},del(e){return L.deleteItemAsync(e,{keychainAccessible:L.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},getKeys:()=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){return[]})};var _expocrypto = require('expo-crypto');var gr={name:"@privy-io/expo",version:"0.58.2",description:"Expo client for the Privy Auth API",keywords:["authentication","authorization","identity","privacy","privy","user data","react-native","expo","web3"],homepage:"https://docs.privy.io",bugs:{url:"https://privy.io/slack"},license:"Apache-2.0",author:"privy.io",exports:{".":{require:"./dist/index.js",import:"./dist/esm/index.js",types:"./dist/index.d.ts"},"./passkey":{require:"./dist/passkey.js",import:"./dist/esm/passkey.js",types:"./dist/passkey.d.ts"},"./smart-wallets":{require:"./dist/smart-wallets.js",import:"./dist/esm/smart-wallets.js",types:"./dist/smart-wallets.d.ts"},"./extended-chains":{require:"./dist/extended-chains.js",import:"./dist/esm/extended-chains.js",types:"./dist/extended-chains.d.ts"},"./ui":{require:"./dist/ui.js",import:"./dist/esm/ui.js",types:"./dist/ui.d.ts"},"./connectors":{require:"./dist/connectors.js",import:"./dist/esm/connectors.js",types:"./dist/connectors.d.ts"}},main:"./dist/esm/index.js",source:"./src/index.ts",types:"./dist/index.d.ts",files:["dist/**/*","LICENSE","README.md"],scripts:{build:"tsup --clean --minify","check-types":"tsc --noEmit",clean:"rm -rf dist .turbo",dev:"tsup --watch",format:'eslint "src/**/*.{ts,tsx,js,jsx}" --fix',"generate-types":"tsup --dts-only",lint:'eslint "src/**/*.{ts,tsx,js,jsx}"',test:"jest"},browserslist:["defaults","node >= 18","not op_mini all"],dependencies:{"@privy-io/js-sdk-core":"0.53.3","@scure/base":"^1.2.4",tweetnacl:"^1.0.3","react-fast-compare":"^3.2.2",zustand:"^5.0.4"},devDependencies:{"@privy-io/eslint-config-custom":"*","@privy-io/eslint-plugin-privy-rules":"*","@privy-io/tsconfig":"*","@simplewebauthn/types":"9.0.1","@solana/web3.js":"^1.98.0","@svgr/core":"^8.1.0","@svgr/plugin-jsx":"^8.1.0","@svgr/plugin-svgo":"^8.1.0","@testing-library/react-native":"^13.1.0","@tsconfig/node16-strictest-esm":"^1.0.3","@types/jest":"^29.1.2",buffer:"^5.4.3","eslint-plugin-react-hooks":"^5.0.0-canary-7118f5dd7-20230705",expo:"52.0.37","expo-apple-authentication":"7.1.3","expo-application":"6.0.2","expo-clipboard":"7.0.1","expo-crypto":"14.0.2",jest:"^29.7.0","jest-expo":"52.0.5","lucide-react-native":"^0.474.0",react:"^18.3.1","react-native":"0.77.1","react-test-renderer":"^18.3.1",tsup:"^6.2.3",typescript:"~5.5.3"},peerDependencies:{"@expo-google-fonts/inter":"*","@privy-io/expo-native-extensions":"0.0.5","expo-apple-authentication":"*","expo-application":"*","expo-clipboard":"*","expo-crypto":"*","expo-font":"*","expo-linking":"*","expo-secure-store":"*","expo-web-browser":"*",permissionless:"^0.2.47",react:"*","react-native":"*","react-native-passkeys":"^0.3.0","react-native-qrcode-styled":"*","react-native-safe-area-context":"*","react-native-svg":"*","react-native-webview":"*",viem:"^2.32.0"},peerDependenciesMeta:{"@expo-google-fonts/inter":{optional:!0},"expo-font":{optional:!0},permissionless:{optional:!0},viem:{optional:!0},"react-native-svg":{optional:!0},"expo-clipboard":{optional:!0},"react-native-qrcode-styled":{optional:!0},"react-native-safe-area-context":{optional:!0}},publishConfig:{access:"public"}};var hr=({appId:e,clientId:r,storage:t=fe,supportedChains:n,baseUrl:i,logLevel:o})=>new (0, _jssdkcore2.default)({appId:e,clientId:r,supportedChains:n,storage:fr(t),sdkVersion:`expo:${gr.version}`,nativeAppIdentifier:yr(),crypto:{digest:_expocrypto.digest},baseUrl:i,logLevel:o});var _reactnative = require('react-native');var _reactfastcompare = require('react-fast-compare'); var _reactfastcompare2 = _interopRequireDefault(_reactfastcompare);var ge=_zustand.create.call(void 0, ()=>{}),vr=e=>ge.setState(r=>_reactfastcompare2.default.call(void 0, r,e)?r:e),x= exports.a =ge.getState;var _reactnativewebview = require('react-native-webview'); var _reactnativewebview2 = _interopRequireDefault(_reactnativewebview);function wr(e){return typeof e!="object"||e===null||!("event"in e&&typeof e.event=="string")||!("id"in e&&typeof e.id=="string")||!("data"in e&&typeof e.data=="object")||e.data===null?!1:e.event.startsWith("app:secure-storage:")}function br(e){return _chunkOWCFWPALjs.d.call(void 0, this,null,function*(){switch(e.event){case"app:secure-storage:get":{let{key:r}=e.data,t=yield F.getItemAsync(Oe(r),{keychainAccessible:F.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY}).catch(n=>(console.warn("Failed to get the value from secure store",n),null));return{event:e.event,id:e.id,data:{value:t}}}case"app:secure-storage:remove":{let{key:r}=e.data,t=yield F.deleteItemAsync(Oe(r),{keychainAccessible:F.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY}).then(()=>!0).catch(n=>(console.warn("Failed to remove the value from secure store",n),!1));return{event:e.event,id:e.id,data:{success:t}}}case"app:secure-storage:set":{let{key:r,value:t}=e.data,n=yield F.setItemAsync(Oe(r),t,{keychainAccessible:F.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY}).then(()=>!0).catch(i=>(console.warn("Failed to write the value to secure store",i),!1));return{event:e.event,id:e.id,data:{success:n}}}}})}var Oe=e=>e.replaceAll(":","-");var V=_zustand.createStore.call(void 0, )(()=>({user:null,proxyStatus:"loading"}));function b(){return V.getState().user}var Yi=V.subscribe.bind(V);function Le(e){V.setState(({user:r})=>_reactfastcompare2.default.call(void 0, r,e)?{}:{user:e})}var Fe=e=>V.setState({proxyStatus:e});function A(){return _zustand.useStore.call(void 0, V,e=>e.user)}function $i(){return _zustand.useStore.call(void 0, V,e=>!!e.user)}function K(){return _zustand.useStore.call(void 0, V,e=>e.proxyStatus!=="loading")}var Yt={shouldUseAppBackedStorage:!0},Sr=({client:e,isClientReady:r})=>{let t=_react.useRef.call(void 0, null);_react.useEffect.call(void 0, ()=>_reactnative.AppState.addEventListener("change",o=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){o==="active"&&((yield e.embeddedWallet.ping(500))||(Fe("reloading"),e.embeddedWallet.reload()))})).remove,[e]);let n=_react.useCallback.call(void 0, i=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){var s;let{data:o}=i.nativeEvent,a=JSON.parse(o);if(wr(a)){let l=yield br(a);(s=t.current)==null||s.postMessage(JSON.stringify(l));return}e.embeddedWallet.onMessage(a)}),[e]);return r?_react2.default.createElement(_reactnativewebview2.default,{style:{flex:1},ref:i=>{i&&(e.setMessagePoster(i),t.current=i)},cacheEnabled:!1,cacheMode:"LOAD_NO_CACHE",injectedJavaScriptObject:Yt,source:{uri:e.embeddedWallet.getURL()},webviewDebuggingEnabled:e.logger.level==="DEBUG",onLoad:()=>Fe("loaded"),onError:console.error,onMessage:n}):null};function Er(o){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({client:e,setSolanaWallet:r,createSolanaWalletCallbacks:t,setSolanaRecoveryFlowState:n,opts:i}){var a,s,l;r({status:"creating"});try{let{user:c}=yield e.user.get(),u=_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, c),m=u[0],p=(a=_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, c))!=null?a:void 0;if(i!=null&&i.recoveryMethod&&i.recoveryMethod!=="privy")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Unsupported recovery method for solana wallet."});if(!(i!=null&&i.createAdditional)&&m)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Solana wallet already exists for this user. Set `createAdditional` to `true` to create another wallet"});let v,g;if(m){let y=p!=null?p:m,{entropyId:h,entropyIdVerifier:S}=_jssdkcore.getEntropyDetailsFromAccount.call(void 0, y),E=Math.max(...u.map(P=>P.wallet_index),0)+1,C=yield e.embeddedWallet.add({chainType:"solana",entropyId:h,entropyIdVerifier:S,hdWalletIndex:E}),k=_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, C.user).find(P=>P.wallet_index===E);if(!k)throw new (0, _jssdkcore.PrivyClientError)({error:"Embedded wallet account not created",code:"embedded_wallet_creation_error"});v=yield e.embeddedWallet.getSolanaProvider(k,h,S),g=C.user}else{let y=yield e.embeddedWallet.createSolana({ethereumAccount:p}),h=_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, y.user).find(k=>k.wallet_index===0);if(!h)throw new (0, _jssdkcore.PrivyClientError)({error:"Embedded wallet account not created",code:"embedded_wallet_creation_error"});let S=p!=null?p:h,{entropyId:E,entropyIdVerifier:C}=_jssdkcore.getEntropyDetailsFromAccount.call(void 0, S);v=yield e.embeddedWallet.getSolanaProvider(h,E,C),g=y.user}let w=_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, g)[0];if(!w)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Unknown error creating solana wallet"});return(l=(s=t.current)==null?void 0:s.onSuccess)==null||l.call(s,v),r({status:"connected",publicKey:w.public_key}),n({status:"initial"}),v}catch(c){let u=c instanceof Error?c.message:"Error creating embedded wallet";throw r({status:"error",error:u}),n({status:"initial"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:u})}})}function ve(u){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({client:e,account:r,setWallet:t,recoverWalletCallbacks:n,recoveryMethod:i,setRecoveryFlowState:o,password:a,recoveryKey:s,recoveryToken:l,recoverySecretOverride:c}){var m,p,v,g;if(!r)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});switch(i){case"user-passcode":if(!a)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!l)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!c)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Record name is required for icloud recovery method"});break;case"recovery-encryption-key":if(!s)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"recoveryKey is required for recovery-encryption-key recovery method"});break}t({status:"connecting",account:r});try{let w=yield e.embeddedWallet.getProvider(r,a,l,c,s);return t({status:"connected",provider:w,account:r}),o({status:"initial"}),(p=(m=n.current)==null?void 0:m.onSuccess)==null||p.call(m,w),w}catch(w){t({status:"needs-recovery",account:r}),o({status:"initial"});let y=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:w instanceof Error?w.message:"Error recovering embedded wallet"});throw(g=(v=n.current)==null?void 0:v.onError)==null||g.call(v,y),y}})}function Cr(s){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({client:e,account:r,entropyId:t,entropyIdVerifier:n,setSolanaWallet:i,recoverSolanaWalletCallbacks:o,setSolanaRecoveryFlowState:a}){var l,c,u,m;i({status:"connecting"});try{let p=yield e.embeddedWallet.getSolanaProvider(r,t,n);return i({status:"connected",publicKey:p._publicKey}),a({status:"initial"}),(c=(l=o.current)==null?void 0:l.onSuccess)==null||c.call(l,p),p}catch(p){i({status:"needs-recovery"}),a({status:"initial"});let v=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:p instanceof Error?p.message:"Error recovering embedded wallet"});throw(m=(u=o.current)==null?void 0:u.onError)==null||m.call(u,v),v}})}var Wr=({client:e,solanaWallet:r,setSolanaWallet:t,setSolanaRecoveryFlowState:n,createSolanaWalletCallbacks:i,recoverSolanaWalletCallbacks:o})=>{let a=A(),s=_react.useMemo.call(void 0, ()=>_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, a),[a]),l=K(),c=_react.useMemo.call(void 0, ()=>s.length===0?null:_jssdkcore.getEntropyDetailsFromUser.call(void 0, a),[a,s]),u=_react.useMemo.call(void 0, ()=>{let g=s.map(S=>{let E=_jssdkcore.getEntropyDetailsFromUser.call(void 0, a,S);return E?{account:S,entropy:E}:null});if(g.some(S=>S===null))return[];let w=void 0,y=void 0,h=void 0;return g.filter(S=>S!==null).map(({account:S,entropy:{entropyId:E,entropyIdVerifier:C}})=>({address:S.address,publicKey:S.address,walletIndex:S.wallet_index,getProvider:()=>e.embeddedWallet.getSolanaProvider(S,E,C,w,y,h,k=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){var P;yield(P=ye())==null?void 0:P(k)}))}))},[s,a,e]),m=_react.useCallback.call(void 0, g=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){return yield Er({client:e,setSolanaWallet:t,createSolanaWalletCallbacks:i,setSolanaRecoveryFlowState:n,opts:g})}),[e,i]),p=_react.useCallback.call(void 0, ()=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){if(!c)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{entropyId:g,entropyIdVerifier:w}=c;return Cr({client:e,account:s[0],entropyId:g,entropyIdVerifier:w,setSolanaWallet:t,recoverSolanaWalletCallbacks:o,setSolanaRecoveryFlowState:n})}),[e,c,s,o,n,t]),v=_react.useCallback.call(void 0, ()=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){if(!c)throw t({status:"not-created"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});t(g=>g.status==="connected"?{status:"reconnecting"}:{status:"connecting"});try{let{entropyId:g,entropyIdVerifier:w}=c,y=yield e.embeddedWallet.getSolanaProvider(s[0],g,w);return t({status:"connected",publicKey:s[0].public_key}),y}catch(g){throw _jssdkcore.errorIndicatesRecoveryIsNeeded.call(void 0, g)?(t({status:"needs-recovery"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):g instanceof Error?(t({status:"error",error:g.message}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:g.message})):(t({status:"error",error:"Error loading embedded wallet"}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[s,e,c,t]);return _react.useEffect.call(void 0, ()=>{if(!a&&r.status!=="disconnected")return t({status:"disconnected"});l&&v().catch(()=>{})},[l,a]),_react.useEffect.call(void 0, ()=>{r.status==="error"&&r.error.includes("User must be logged in")&&v()},[r.status]),{create:m,recover:p,getProvider:v,wallets:u}};function we(m){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({client:e,setWallet:r,createWalletCallbacks:t,recoveryMethod:n,setRecoveryFlowState:i,password:o,recoveryKey:a,recoveryToken:s,recoverySecretOverride:l,iCloudRecordNameOverride:c,solanaAccount:u}){var v,g;switch(n){case"user-passcode":if(!o)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"recovery-encryption-key":if(!a)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"key is required for recovery-encryption-key recovery method"});break;case"google-drive":if(!s)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!l||!c)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery failed due to inability to store credentials"});break}r({status:"creating",account:null});let p=n==="icloud"?"icloud-native":n;try{let{user:w}=yield e.embeddedWallet.create({password:o,recoveryMethod:p,recoveryKey:a,recoveryToken:s,recoverySecretOverride:l,iCloudRecordNameOverride:c,solanaAccount:u}),y=_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, w);if(!y)throw new (0, _jssdkcore.PrivyClientError)({error:"Embedded wallet account not created",code:"embedded_wallet_creation_error"});let h=yield e.embeddedWallet.getProvider(y);return(g=(v=t.current)==null?void 0:v.onSuccess)==null||g.call(v,h),r({status:"connected",provider:h,account:y}),i({status:"initial"}),h}catch(w){let y=w instanceof Error?w.message:"Error creating embedded wallet";throw r({status:"error",error:y,account:null}),i({status:"initial"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:y})}})}function Ar(){return _chunkOWCFWPALjs.d.call(void 0, this,null,function*(){try{return yield Promise.resolve().then(() => _interopRequireWildcard(require("@privy-io/expo-native-extensions")))}catch(e){throw new Error("@privy-io/expo-native-extensions not found. Ensure that you're explicitly including as a dependency, and running an Expo development build")}})}function oe(n){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({user:e,appId:r,client:t}){var s;if(_reactnative.Platform.OS==="android")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let i=yield Ar(),o=yield t.recovery.icloudAuth.getICloudConfiguration("expo-ios");if(!(o==null?void 0:o.container_identifier))throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"An iCloud Container ID must be specified in the Privy Dashboard."});try{let{recoverySecret:l,iCloudRecordName:c}=yield i.writeRecoverySecretToICloud({containerId:o.container_identifier,appId:r,userId:e.id});return{recoverySecret:l,iCloudRecordName:c}}catch(l){if(l instanceof Error){let c=(s=l.message.split("Caused by: ")[1])!=null?s:"Error writing to iCloud";throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:c})}throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}function be(n){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({walletAddress:e,client:r,chainType:t}){var c;if(_reactnative.Platform.OS==="android")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let i=yield Ar(),a=(yield r.recovery.getRecoveryKeyMaterial(e,t)).icloud_record_name;if(!a)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery not properly backed up."});let s=yield r.recovery.icloudAuth.getICloudConfiguration("expo-ios"),l=s==null?void 0:s.container_identifier;if(!l)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"An iCloud Container ID must be specified in the Privy Dashboard."});try{let{recoverySecret:u}=yield i.readRecoverySecretFromICloud({containerId:l,recordName:a});return{recoverySecret:u}}catch(u){if(u instanceof Error){let m=(c=u.message.split("Caused by: ")[1])!=null?c:"Error writing to iCloud";throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:m})}throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}var _expolinking = require('expo-linking'); var B = _interopRequireWildcard(_expolinking); var $ = _interopRequireWildcard(_expolinking); var ke = _interopRequireWildcard(_expolinking); var Pe = _interopRequireWildcard(_expolinking); var ot = _interopRequireWildcard(_expolinking); var tt = _interopRequireWildcard(_expolinking); var nt = _interopRequireWildcard(_expolinking); var at = _interopRequireWildcard(_expolinking); var ct = _interopRequireWildcard(_expolinking); var dt = _interopRequireWildcard(_expolinking);var _expowebbrowser = require('expo-web-browser'); var Ur = _interopRequireWildcard(_expowebbrowser); var ce = _interopRequireWildcard(_expowebbrowser);function _(e){return e instanceof Error||e instanceof _jssdkcore.PrivyApiError||e instanceof _jssdkcore.PrivyClientError?e:typeof e=="string"?new Error(e):new Error("Unknown error")}var J=e=>new Promise(r=>setTimeout(r,e));function Se(){let e=_react.useRef.call(void 0, _reactnative.AppState.currentState);_react.useEffect.call(void 0, ()=>_reactnative.AppState.addEventListener("change",n=>{e.current=n}).remove,[]);function r(){return _reactnative.AppState.currentState}return{appState:e,getCurrentAppState:r}}function ne(i){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({provider:e,redirectUri:r,client:t,onError:n}){try{let o;switch(e){case"google-drive":{let{url:c}=yield t.recovery.auth.generateURL(B.createURL(r||"/"));o=c;break}default:throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid provider",code:"embedded_wallet_recovery_error"})}let a=yield Ur.openAuthSessionAsync(o);if(_reactnative.Platform.OS==="android")return;if(a.type!=="success")throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth session failed",code:"embedded_wallet_recovery_error"});let{queryParams:s}=B.parse(a.url),l;switch(e){case"google-drive":{let{privy_oauth_state:c,privy_oauth_code:u}=s;if(!u||!c)throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth invalid credentials",code:"embedded_wallet_recovery_error"});l=yield _e({oAuthCode:u,oAuthState:c,client:t});break}default:throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth invalid provider",code:"embedded_wallet_recovery_error"})}return l}catch(o){throw n==null||n(_(o)),o}})}function _e(n){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({oAuthCode:e,oAuthState:r,client:t}){let{access_token:i}=yield t.recovery.auth.authorize(e,r);if(!i)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:"login_with_oauth_returned_with_invalid_credentials"});return i})}var no=2*60*1e3;function io(e){let r;return new Promise((t,n)=>{r=B.addEventListener("url",o=>_chunkOWCFWPALjs.d.call(void 0, this,[o],function*({url:i}){if(!i)return;let{queryParams:a}=B.parse(i),{privy_oauth_state:s,privy_oauth_code:l}=a!=null?a:{};if(typeof l!="string"||typeof s!="string")return;let c=yield _e({client:e,oAuthCode:l,oAuthState:s});t(c)})),setTimeout(()=>{n(new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_set_recovery_error",error:"Failed to complete Google Drive recovery flow"}))},no)}).finally(()=>{r==null||r.remove()})}function Ee(e){return _chunkOWCFWPALjs.d.call(void 0, this,null,function*(){let r;_reactnative.Platform.OS==="android"&&(r=io(e));let t=yield ne({provider:"google-drive",client:e});return t!=null?t:yield r})}function Ce(o){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({client:e,recoveryInput:r,setWalletRecoveryCallbacks:t,setRecoveryFlowState:n,setWallet:i}){var a,s,l,c;try{let{provider:u,user:m}=yield e.embeddedWallet.setRecovery(r),p=u,v=_jssdkcore.getUserEmbeddedWallet.call(void 0, m);return i({status:"connected",provider:p,account:v}),(s=(a=t.current)==null?void 0:a.onSuccess)==null||s.call(a,p),n({status:"initial"}),p}catch(u){let m=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_set_recovery_error",error:u instanceof Error?u.message:"Error setting password on embedded wallet"});throw(c=(l=t.current)==null?void 0:l.onError)==null||c.call(l,m),n({status:"initial"}),m}})}function Mr(e){return e===void 0?{recoveryMethod:"privy"}:typeof e=="string"?{recoveryMethod:"user-passcode",password:e}:e.recoveryMethod==="user-passcode"?{recoveryMethod:"user-passcode",password:e.password}:e.recoveryMethod==="recovery-encryption-key"?{recoveryMethod:"recovery-encryption-key",recoveryKey:e.recoveryKey}:{recoveryMethod:e.recoveryMethod}}var Lr=({client:e,appId:r,wallet:t,setWallet:n,setRecoveryFlowState:i,createWalletCallbacks:o,recoverWalletCallbacks:a,setWalletRecoveryCallbacks:s})=>{let l=A(),c=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, l),[l]),u=K(),m=_react.useCallback.call(void 0, y=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){var ue,me;if(c)throw new (0, _jssdkcore.PrivyClientError)({error:"This user already has an embedded wallet",code:"embedded_wallet_already_exists"});let{user:h}=yield e.user.get(),{password:S,recoveryMethod:E,recoveryKey:C}=Mr(y),k,P,M;if(E==="google-drive"&&(k=yield ne({provider:E,client:e,onError:(ue=o.current)==null?void 0:ue.onError}),i({status:"creating-wallet"}),!k))return null;if(E==="icloud"){if(!h)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before creating a wallet with iCloud."});let{recoverySecret:Ue,iCloudRecordName:re}=yield oe({user:h,appId:r,client:e});P=Ue,M=re}return yield we({client:e,setWallet:n,createWalletCallbacks:o,recoveryMethod:E,recoveryKey:C,setRecoveryFlowState:i,password:S,recoverySecretOverride:P,iCloudRecordNameOverride:M,solanaAccount:(me=_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, h))!=null?me:void 0})}),[e,c,l]),p=_react.useCallback.call(void 0, y=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){var E;if(t.status!=="connected")throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"});if(!c)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});if(_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, l))throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_set_recovery_error",error:"Cannot set user-controlled recovery for a user with an embedded Solana wallet."});if(_jssdkcore.isUnifiedWallet.call(void 0, c))throw new (0, _jssdkcore.PrivyClientError)({code:"unsupported_wallet_type",error:"Embedded wallet recovery is only supported for on-device execution and this app uses TEE execution. Learn more https://docs.privy.io/recipes/tee-wallet-migration-guide"});_jssdkcore.throwIfInvalidRecoveryUpgradePath.call(void 0, {currentRecoveryMethod:c.recovery_method,upgradeToRecoveryMethod:y.recoveryMethod});let h,S;switch(y.recoveryMethod){case"privy":S=_chunkOWCFWPALjs.b.call(void 0, _chunkOWCFWPALjs.a.call(void 0, {},y),{wallet:c});break;case"user-passcode":S=_chunkOWCFWPALjs.b.call(void 0, _chunkOWCFWPALjs.a.call(void 0, {},y),{wallet:c,password:y.password});break;case"google-drive":if(h=yield ne({provider:y.recoveryMethod,client:e,onError:(E=s.current)==null?void 0:E.onError}),i({status:"upgrading-recovery"}),!h)return null;S={recoveryMethod:"google-drive",wallet:c,recoveryAccessToken:h};break;case"icloud":if(!l)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before backing up to iCloud."});let{recoverySecret:C,iCloudRecordName:k}=yield oe({user:l,appId:r,client:e});S={recoveryMethod:"icloud-native",recoverySecretOverride:C,iCloudRecordNameOverride:k,wallet:c};break;default:throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}return Ce({client:e,recoveryInput:S,setWalletRecoveryCallbacks:s,setRecoveryFlowState:i,setWallet:n})}),[e,c,t.status,l]),v=_react.useCallback.call(void 0, y=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){return p({recoveryMethod:"user-passcode",password:y})}),[e,c,t.status]),g=_react.useCallback.call(void 0, y=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){var P;if(!c)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{password:h,recoveryMethod:S,recoveryKey:E}=Mr(y),C,k;if(S==="google-drive"&&(C=yield ne({provider:S,client:e,onError:(P=a.current)==null?void 0:P.onError}),i({status:"recovering"}),!C))return null;if(S==="icloud"){if(!l)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before recovering via iCloud."});let{recoverySecret:M}=yield be({client:e,walletAddress:c.address});k=M}return ve({client:e,account:c,setWallet:n,recoverWalletCallbacks:a,recoveryMethod:S,setRecoveryFlowState:i,recoveryKey:E,password:h,recoveryToken:C,recoverySecretOverride:k})}),[e,c]),w=_react.useCallback.call(void 0, ()=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){if(!c)throw n({status:"not-created",account:null}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});n(y=>y.status==="connected"?{status:"reconnecting",account:c}:{status:"connecting",account:c});try{let y=yield e.embeddedWallet.getProvider(c);return n({status:"connected",provider:y,account:c}),y}catch(y){throw _jssdkcore.errorIndicatesRecoveryIsNeeded.call(void 0, y)?(n({status:"needs-recovery",account:c}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):y instanceof Error?(n({status:"error",error:y.message,account:c}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:y.message})):(n({status:"error",error:"Error loading embedded wallet",account:c}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,c]);return _react.useEffect.call(void 0, ()=>{if(!l&&t.status!=="disconnected")return n({status:"disconnected",account:null});u&&w().catch(()=>{})},[u,l,c]),_react.useEffect.call(void 0, ()=>{t.status==="error"&&t.error.includes("User must be logged in")&&w()},[t.status]),{create:m,recover:g,setPassword:v,setRecovery:p,getProvider:w}};var Tr=({client:e,isReady:r})=>{let t=A(),n=ge(a=>a==null?void 0:a.customAuth),[i,o]=_react.useState.call(void 0, {status:"initial"});return _react.useEffect.call(void 0, ()=>{(()=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){if(!(n!=null&&n.enabled)){o({status:"not-enabled"});return}o({status:"loading"});let{getCustomAccessToken:s,isLoading:l}=n;if(!(!r||l))try{let c=yield s();if(!c&&t){yield e.auth.logout(),o({status:"done"});return}if(!c){o({status:"done"});return}if(t){o({status:"done"});return}let u=x();if(!(yield e.auth.customProvider.syncWithToken(c,{embedded:u==null?void 0:u.embedded}))){yield e.auth.logout(),o({status:"error",error:new (0, _jssdkcore.PrivyClientError)({error:"Failed to sync with custom auth provider",code:"third_party_auth_error"})});return}o({status:"done"})}catch(c){if(console.log("Error syncing with custom auth provider",c),o({status:"error",error:c}),t)throw yield e.auth.logout(),new (0, _jssdkcore.PrivyClientError)({error:"Third-party auth failed",code:"third_party_auth_error"})}}))()},[e,t,r,n==null?void 0:n.enabled,n==null?void 0:n.getCustomAccessToken,n==null?void 0:n.isLoading]),{customAuthState:i,customAuthStateIsSettled:i.status!=="loading"&&i.status!=="initial"}};var Nr=({client:e,createWalletCallbacks:r,recoverWalletCallbacks:t,setWalletRecoveryCallbacks:n,recoveryFlowState:i,oAuthState:o,setRecoveryFlowState:a,setWallet:s,appStateVisible:l})=>{let c=$.useURL(),u=A(),m=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedWallet.call(void 0, u),[u]),p=K(),v=_react.useCallback.call(void 0, g=>{var y,h,S,E;let w=_(g);i.status==="creating-wallet"?(h=(y=r.current).onError)==null||h.call(y,_(w)):(E=(S=t.current).onError)==null||E.call(S,_(w)),a({status:"initial"})},[i]);return _react.useEffect.call(void 0, ()=>{function g(){return _chunkOWCFWPALjs.d.call(void 0, this,null,function*(){var S;if(!c&&i.status!=="initial"&&l&&v(new Error("Recovery OAuth session failed")),!c||i.status==="initial"||o.status!=="initial"||!l||!p)return;let{queryParams:w}=$.parse(c),{privy_oauth_state:y,privy_oauth_code:h}=w;if(!(!h||!y)){yield $.openURL(c.split("?")[0]);try{let E=yield _e({oAuthCode:h,oAuthState:y,client:e});if(i.status==="creating-wallet"){let C=(S=_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, u))!=null?S:void 0;yield we({client:e,setWallet:s,createWalletCallbacks:r,recoveryMethod:"google-drive",setRecoveryFlowState:a,recoveryToken:E,solanaAccount:C})}else if(i.status==="upgrading-recovery"){if(!m)throw new Error("Embedded wallet not found");yield Ce({client:e,recoveryInput:{recoveryMethod:"google-drive",wallet:m,recoveryAccessToken:E},setWalletRecoveryCallbacks:n,setRecoveryFlowState:a,setWallet:s})}else yield ve({client:e,account:m,setWallet:s,recoverWalletCallbacks:t,recoveryMethod:"google-drive",setRecoveryFlowState:a,recoveryToken:E})}catch(E){v(E)}}})}_reactnative.Platform.OS==="android"&&g()},[c,i.status,l,p])};var Dr=({client:e,isUserInitialized:r,setIsUserInitialized:t,setError:n})=>{_react.useEffect.call(void 0, ()=>{r||(()=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){try{yield e.initialize()}catch(o){n(o instanceof Error?o:new Error(String(o)))}try{yield e.user.get()}catch(o){}finally{t(!0)}}))()},[e,r,n,t])};var Ls=e=>{let{client:r,setSiweState:t,siweState:n}=_react.useContext.call(void 0, f),i=_react.useCallback.call(void 0, s=>{var c;let l=_(s);return t({status:"error",error:l}),(c=e==null?void 0:e.onError)==null||c.call(e,l),l},[e==null?void 0:e.onError]),o=_react.useCallback.call(void 0, u=>_chunkOWCFWPALjs.d.call(void 0, void 0,[u],function*({wallet:s,from:{domain:l,uri:c}}){var m;try{t({status:"generating-message"});let p=yield r.auth.siwe.init(s,l,c);return t({status:"awaiting-signature"}),(m=e==null?void 0:e.onGenerateMessage)==null||m.call(e,p.message),p.message}catch(p){throw i(p)}}),[r,i,e==null?void 0:e.onGenerateMessage]);return{loginWithSiwe:_react.useCallback.call(void 0, u=>_chunkOWCFWPALjs.d.call(void 0, void 0,[u],function*({signature:s,messageOverride:l,disableSignup:c}){var m;try{if(b())throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_login_with_siwe_while_already_logged_in",error:"Already logged in, use `useLinkWithSiwe` if you are trying to link a wallet to an existing account"});t({status:"submitting-signature"});let v=x(),g=yield r.auth.siwe.loginWithSiwe(s,void 0,l,c?"no-signup":"login-or-sign-up",{embedded:v==null?void 0:v.embedded});return t({status:"done"}),(m=e==null?void 0:e.onSuccess)==null||m.call(e,g.user,g.is_new_user),g.user}catch(p){throw i(p)}}),[r,i,e==null?void 0:e.onSuccess]),generateSiweMessage:o,state:n}};var I=()=>{let{client:e}=_react.useContext.call(void 0, f);return e};var qs=()=>{let e=I(),r=_react.useCallback.call(void 0, a=>_chunkOWCFWPALjs.d.call(void 0, void 0,[a],function*({wallet:{address:n},from:{domain:i,uri:o}}){try{let{nonce:s}=yield e.auth.siws.fetchNonce({address:n});return{message:_jssdkcore.createSiwsMessage.call(void 0, {address:n,domain:i,uri:o,nonce:s})}}catch(s){throw _(s)}}),[e]),t=_react.useCallback.call(void 0, s=>_chunkOWCFWPALjs.d.call(void 0, void 0,[s],function*({signature:n,message:i,wallet:{walletClientType:o,connectorType:a}={}}){try{if(!b())throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_link_siws_before_logged_in",error:"Must be logged in to link a wallet, Use `useLoginWithSiws` to login with a wallet"});let{user:c}=yield e.auth.siws.link({signature:n,message:i,walletClientType:o,connectorType:a});return c}catch(l){throw _(l)}}),[e]);return{generateMessage:r,link:t}};var ec=()=>{let e=I(),r=_react.useCallback.call(void 0, a=>_chunkOWCFWPALjs.d.call(void 0, void 0,[a],function*({wallet:{address:n},from:{domain:i,uri:o}}){try{let{nonce:s}=yield e.auth.siws.fetchNonce({address:n});return{message:_jssdkcore.createSiwsMessage.call(void 0, {address:n,domain:i,uri:o,nonce:s})}}catch(s){throw _(s)}}),[e]),t=_react.useCallback.call(void 0, l=>_chunkOWCFWPALjs.d.call(void 0, void 0,[l],function*({signature:n,message:i,wallet:{walletClientType:o,connectorType:a}={},disableSignup:s}){try{if(b())throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_login_with_siws_while_already_logged_in",error:"Already logged in, use `useLinkWithSiws` if you are trying to link a wallet to an existing account"});return(yield e.auth.siws.login({signature:n,message:i,walletClientType:o,connectorType:a,mode:s?"no-signup":"login-or-sign-up"})).user}catch(c){throw _(c)}}),[e]);return{generateMessage:r,login:t}};var cc=e=>{let{client:r}=_react.useContext.call(void 0, f),t=_react.useCallback.call(void 0, i=>{var a;let o=_(i);return(a=e==null?void 0:e.onError)==null||a.call(e,o),o},[e==null?void 0:e.onError]);return{unlinkWallet:_react.useCallback.call(void 0, o=>_chunkOWCFWPALjs.d.call(void 0, void 0,[o],function*({address:i}){var a;try{if(!b())throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_unlink_siwe_before_logged_in",error:"Must be logged in to unlink a wallet, Use `useLoginWithSiwe` to login with a wallet"});let{user:l}=yield r.auth.siwe.unlinkWallet(i);return(a=e==null?void 0:e.onSuccess)==null||a.call(e,l),l}catch(s){throw t(s)}}),[r,t,e==null?void 0:e.onSuccess])}};var gc=e=>{let[r,t]=_react.useState.call(void 0, ""),{client:n,otpState:i,setOtpState:o}=_react.useContext.call(void 0, f),a=_react.useCallback.call(void 0, c=>{var m;let u=_(c);return o({status:"error",error:u}),(m=e==null?void 0:e.onError)==null||m.call(e,u),u},[e,o]),s=_react.useCallback.call(void 0, u=>_chunkOWCFWPALjs.d.call(void 0, void 0,[u],function*({email:c}){var m;t(c);try{o({status:"sending-code"});let p=yield n.auth.email.sendCode(c);return o({status:"awaiting-code-input"}),(m=e==null?void 0:e.onSendCodeSuccess)==null||m.call(e,{email:c}),p}catch(p){throw a(p)}}),[n,a,e,o]),l=_react.useCallback.call(void 0, m=>_chunkOWCFWPALjs.d.call(void 0, void 0,[m],function*({code:c,email:u}){var p;try{if(!b())throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_link_email_before_logged_in",error:"Must be logged in to link an email, Use `useLoginWithEmail` to login with email"});let g=u||r;if(!g)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid email before calling `linkWithCode`"});o({status:"submitting-code"});let{user:w}=yield n.auth.email.linkWithCode(g,c);return o({status:"done"}),(p=e==null?void 0:e.onLinkSuccess)==null||p.call(e,w),w}catch(v){throw a(v)}}),[r,o,n,e,a]);return{sendCode:s,linkWithCode:l,state:i}};var _c=e=>{let{client:r}=_react.useContext.call(void 0, f),t=_react.useCallback.call(void 0, i=>{var a;let o=_(i);return(a=e==null?void 0:e.onError)==null||a.call(e,o),o},[e==null?void 0:e.onError]);return{unlinkEmail:_react.useCallback.call(void 0, o=>_chunkOWCFWPALjs.d.call(void 0, void 0,[o],function*({email:i}){var a;try{let{user:s}=yield r.auth.email.unlink(i);return(a=e==null?void 0:e.onSuccess)==null||a.call(e,s),s}catch(s){throw t(s)}}),[r,e==null?void 0:e.onSuccess,t])}};var Rc=e=>{let[r,t]=_react.useState.call(void 0, ""),{client:n,otpState:i,setOtpState:o}=_react.useContext.call(void 0, f),a=_react.useCallback.call(void 0, c=>{var m;let u=_(c);return o({status:"error",error:u}),(m=e==null?void 0:e.onError)==null||m.call(e,u),u},[e,o]),s=_react.useCallback.call(void 0, u=>_chunkOWCFWPALjs.d.call(void 0, void 0,[u],function*({email:c}){var m;t(c);try{o({status:"sending-code"});let p=yield n.auth.email.sendCode(c);return o({status:"awaiting-code-input"}),(m=e==null?void 0:e.onSendCodeSuccess)==null||m.call(e,{email:c}),p}catch(p){throw a(p)}}),[n,a,e,o]),l=_react.useCallback.call(void 0, p=>_chunkOWCFWPALjs.d.call(void 0, void 0,[p],function*({code:c,email:u,disableSignup:m}){var v;try{if(b())throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_login_with_email_while_already_logged_in",error:"Already logged in, use `useLinkWithEmail` if you are trying to link an email to an existing account"});let w=u||r;if(!w)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid email before calling `loginWithCode`"});o({status:"submitting-code"});let y=x(),h=yield n.auth.email.loginWithCode(w,c,m?"no-signup":"login-or-sign-up",{embedded:y==null?void 0:y.embedded});return o({status:"done"}),(v=e==null?void 0:e.onLoginSuccess)==null||v.call(e,h.user,h.is_new_user),h==null?void 0:h.user}catch(g){throw a(g)}}),[r,o,n,e,a]);return{sendCode:s,loginWithCode:l,state:i}};var Dc=e=>{let[r,t]=_react.useState.call(void 0, ""),{client:n,otpState:i,setOtpState:o}=_react.useContext.call(void 0, f),a=_react.useCallback.call(void 0, c=>{var m;let u=_(c);return o({status:"error",error:u}),(m=e==null?void 0:e.onError)==null||m.call(e,u),u},[e,o]),s=_react.useCallback.call(void 0, u=>_chunkOWCFWPALjs.d.call(void 0, void 0,[u],function*({phone:c}){var m;t(c);try{o({status:"sending-code"});let p=yield n.auth.phone.sendCode(c);return o({status:"awaiting-code-input"}),(m=e==null?void 0:e.onSendCodeSuccess)==null||m.call(e,{phone:c}),p}catch(p){throw a(p)}}),[n,a,e,o]),l=_react.useCallback.call(void 0, m=>_chunkOWCFWPALjs.d.call(void 0, void 0,[m],function*({code:c,phone:u}){var p;try{if(!b())throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_link_sms_before_logged_in",error:"Must be logged in to link a phone number, Use `useLoginWithSMS` to login with a phone number"});if(!(u||r))throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid phone number before calling `linkWithCode`"});o({status:"submitting-code"});let{user:w}=yield n.auth.phone.linkWithCode(u||r,c);return o({status:"done"}),(p=e==null?void 0:e.onLinkSuccess)==null||p.call(e,w),w}catch(v){throw a(v)}}),[r,o,n,e,a]);return{sendCode:s,linkWithCode:l,state:i}};var Jc=e=>{let[r,t]=_react.useState.call(void 0, ""),{client:n,otpState:i,setOtpState:o}=_react.useContext.call(void 0, f),a=_react.useCallback.call(void 0, c=>{var m;let u=_(c);return o({status:"error",error:u}),(m=e==null?void 0:e.onError)==null||m.call(e,u),u},[e,o]),s=_react.useCallback.call(void 0, u=>_chunkOWCFWPALjs.d.call(void 0, void 0,[u],function*({phone:c}){var m;t(c);try{o({status:"sending-code"});let p=yield n.auth.phone.sendCode(c);return o({status:"awaiting-code-input"}),(m=e==null?void 0:e.onSendCodeSuccess)==null||m.call(e,{phone:c}),p}catch(p){throw a(p)}}),[n,a,e,o]),l=_react.useCallback.call(void 0, p=>_chunkOWCFWPALjs.d.call(void 0, void 0,[p],function*({code:c,phone:u,disableSignup:m}){var v;try{if(b())throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_login_with_sms_while_already_logged_in",error:"Already logged in, use `useLinkWithSMS` if you are trying to link a phone number to an existing account"});if(!(u||r))throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid phone number before calling `loginWithCode`"});o({status:"submitting-code"});let y=x(),h=yield n.auth.phone.loginWithCode(u||r,c,m?"no-signup":"login-or-sign-up",{embedded:y==null?void 0:y.embedded});return o({status:"done"}),(v=e==null?void 0:e.onLoginSuccess)==null||v.call(e,h.user,h.is_new_user),h==null?void 0:h.user}catch(g){throw a(g)}}),[r,o,n,e,a]);return{sendCode:s,loginWithCode:l,state:i}};var tl=e=>{let{appState:r,getCurrentAppState:t}=Se(),{client:n,farcasterState:i,setFarcasterState:o}=_react.useContext.call(void 0, f),a=_react.useRef.call(void 0, !1),s=_react.useCallback.call(void 0, u=>{var p;let m=_(u);return o({status:"error",error:m}),(p=e==null?void 0:e.onError)==null||p.call(e,m),m},[e==null?void 0:e.onError,o]),l=_react.useCallback.call(void 0, ()=>{a.current=!0},[]);return{linkWithFarcaster:_react.useCallback.call(void 0, (v,...g)=>_chunkOWCFWPALjs.d.call(void 0, void 0,[v,...g],function*({relyingParty:u,redirectUrl:m},p={pollAttempts:10,pollIntervalMs:1e3}){var w;try{let y=b();if(a.current=!1,!y)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_link_farcaster_before_logged_in",error:"Must be logged in to link a Farcaster account."});o({status:"generating-uri"});let{connect_uri:h,channel_token:S}=yield n.auth.farcaster.initializeAuth({relyingParty:u,redirectUrl:ke.createURL(m!=null?m:"/")});if(!h)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_generate_farcaster_uri",error:"Failed to generate farcaster uri"});if(!S)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_generate_farcaster_channel_token",error:"Failed to generate farcaster channel token"});yield ke.openURL(h),o({status:"polling-status"});let E=0;for(;E<p.pollAttempts;){if(a.current)throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_canceled",error:"Farcaster polling canceled"});if(r.current!=="active"&&t()!=="active"){yield J(p.pollIntervalMs);continue}let C=yield n.auth.farcaster.getFarcasterStatus({channel_token:S});if(C.state==="completed"){o({status:"submitting-token"});let{user:k}=yield n.auth.farcaster.link(_chunkOWCFWPALjs.a.call(void 0, {channel_token:S},C));return o({status:"done"}),(w=e==null?void 0:e.onSuccess)==null||w.call(e,k),k}E++,yield J(p.pollIntervalMs)}throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(y){throw s(y)}}),[n,e==null?void 0:e.onSuccess,s,o]),state:i,cancel:l}};var cl=e=>{let{client:r}=_react.useContext.call(void 0, f),t=_react.useCallback.call(void 0, i=>{var a;let o=_(i);return(a=e==null?void 0:e.onError)==null||a.call(e,o),o},[e==null?void 0:e.onError]);return{unlinkFarcaster:_react.useCallback.call(void 0, o=>_chunkOWCFWPALjs.d.call(void 0, void 0,[o],function*({fid:i}){var a;try{let{user:s}=yield r.auth.farcaster.unlink({fid:i});return(a=e==null?void 0:e.onSuccess)==null||a.call(e,s),s}catch(s){throw t(s)}}),[r,e==null?void 0:e.onSuccess,t])}};var hl=e=>{let{appState:r,getCurrentAppState:t}=Se(),{client:n,farcasterState:i,setFarcasterState:o}=_react.useContext.call(void 0, f),a=_react.useRef.call(void 0, !1),s=_react.useCallback.call(void 0, u=>{var p;let m=_(u);return o({status:"error",error:m}),(p=e==null?void 0:e.onError)==null||p.call(e,m),m},[e==null?void 0:e.onError,o]),l=_react.useCallback.call(void 0, ()=>{a.current=!0},[]);return{loginWithFarcaster:_react.useCallback.call(void 0, (g,...w)=>_chunkOWCFWPALjs.d.call(void 0, void 0,[g,...w],function*({relyingParty:u,redirectUrl:m,disableSignup:p},v={pollAttempts:10,pollIntervalMs:1e3}){var y;try{if(a.current=!1,b())throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_login_with_farcaster_while_already_logged_in",error:"Already logged in, use `useLinkWithFarcaster` if you are trying to link farcaster to an existing account"});o({status:"generating-uri"});let{connect_uri:S,channel_token:E}=yield n.auth.farcaster.initializeAuth({relyingParty:u,redirectUrl:Pe.createURL(m!=null?m:"/")});if(!S)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_generate_farcaster_uri",error:"Failed to generate farcaster uri"});if(!E)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_generate_farcaster_channel_token",error:"Failed to generate farcaster channel token"});yield Pe.openURL(S),o({status:"polling-status"});let C=0;for(;C<v.pollAttempts;){if(a.current)throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_canceled",error:"Farcaster polling canceled"});if(r.current!=="active"&&t()!=="active"){yield J(v.pollIntervalMs);continue}let k=yield n.auth.farcaster.getFarcasterStatus({channel_token:E});if(k.state==="completed"){o({status:"submitting-token"});let P=x(),M=yield n.auth.farcaster.authenticate(_chunkOWCFWPALjs.a.call(void 0, {channel_token:E,mode:p?"no-signup":"login-or-sign-up"},k),{embedded:P==null?void 0:P.embedded});return o({status:"done"}),(y=e==null?void 0:e.onSuccess)==null||y.call(e,M.user,M.is_new_user),M.user}C++,yield J(v.pollIntervalMs)}throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(h){throw s(h)}}),[n,s,e==null?void 0:e.onSuccess,o,r]),state:i,cancel:l}};var Ye=_zustand.create.call(void 0, ()=>({status:"initial"})),H=e=>Ye.setState(e,!0),Yo=Ye.getState,Wl= exports.y =()=>{let{client:e}=_react.useContext.call(void 0, f),r=Ye(),t=_react.useCallback.call(void 0, ()=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){try{H({status:"fetching-nonce"});let i=yield e.auth.farcasterV2.initializeAuth();return H({status:"awaiting-signature"}),i}catch(i){let o=_(i);throw H({status:"initial",error:o}),o}}),[e]),n=_react.useCallback.call(void 0, i=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){let o=Yo().status;try{if(b()){let c=new (0, _jssdkcore.PrivyClientError)({code:"attempted_login_with_farcaster_while_already_logged_in",error:"Already logged in, use a link helper if you are trying to link farcaster to an existing account"});throw H({status:o,error:c}),c}H({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=_(a);throw H({status:o,error:s}),s}}),[e]);return{init:t,login:n,state:r}};var Ol=()=>{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 Zo(e,r){return e.linked_accounts.filter(_jssdkcore.isEmbeddedWalletAccount).find(t=>t.address===r)}function $e(e){let r=b();if(!r)throw new Error("User must be authenticated to perform this operation");let t=Zo(r,e);if(!t)throw new Error(`No wallet found with address ${e}`);return t}var Kl=()=>{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:$e(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:$e(r)})}),[e])};var Jl=()=>{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}){Qr(),yield e.auth.email.sendCode(t)})},updateEmail(i){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({newEmailAddress:t,code:n}){let{address:o}=Qr(),{user:a}=yield e.auth.email.updateEmail({oldEmailAddress:o,newEmailAddress:t,code:n});return a})}}),[e])};function Qr(){let r=sn().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 sn(){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 rd=()=>{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}){Zr(),yield e.auth.phone.sendCode(t)})},updatePhone(i){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({newPhoneNumber:t,code:n}){let{phoneNumber:o}=Zr(),{user:a}=yield e.auth.phone.updatePhone({oldPhoneNumber:o,newPhoneNumber:t,code:n});return a})}}),[e])};function Zr(){let r=dn().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 dn(){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 un(t.url)});function un(e){let{queryParams:r}=tt.parse(e);return r}var md=()=>{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:ot.createURL(i||"/")});return{user:s}}),[r])}};var bd=()=>{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:nt.createURL(i||"/")})}}),[r])}};var xd=()=>{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:at.createURL(i)})}),[r])};var Ld=()=>{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:ct.createURL(i)})}),[r])};var Kd=()=>{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:dt.createURL(i)})}),[r])};var $d=()=>{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 Mn({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])}},Mn=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 iu=()=>{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 be({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 Xe=(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 pu=({onStateChange:e})=>{let r=Xe();return _react.useEffect.call(void 0, ()=>{e(r)},[r])};var hu=()=>{let{getIdentityToken:e}=_react.useContext.call(void 0, f);return{getIdentityToken:e}};var ku=e=>{let{client:r}=_react.useContext.call(void 0, f),t=_react.useCallback.call(void 0, i=>{var a;let o=_(i);return(a=e==null?void 0:e.onError)==null||a.call(e,o),o},[e==null?void 0:e.onError]);return{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 Ru({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 Jn=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 er=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 mt(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 pt(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 Bu(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 $u(){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 pt(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 er(o.mfaCode),g=mt(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 rm(){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 ti=()=>{let e=A(),r=I(),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=ye())==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 tr(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 tr(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 tr(v.user,p),{user:v.user}}),[r]);return{wallets:t,create:n}};function tr(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 ni=(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 ci=()=>{let e=A(),r=I(),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 ir=()=>{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 mi=()=>{let e=I();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 vt(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 wt=()=>{let e=I();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 vt(e,t)}),[e])}};var bt=({disabled:e})=>{let{migrate:r}=wt(),{user:t}=ir(),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),ee;function Hp(e){return ee?ee.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 zp=e=>{var lr,dr,ur;Pi();let[r,t]=_react.useState.call(void 0, _reactnative.AppState.currentState==="active");_react.useEffect.call(void 0, ()=>{let j=_reactnative.AppState.addEventListener("change",Rt=>{t(Rt==="active")});return()=>{j.remove()}},[]),_react.useEffect.call(void 0, ()=>vr(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"}),[E,C]=_react.useState.call(void 0, {status:"initial"}),[k,P]=_react.useState.call(void 0, {status:"initial"}),[M,ue]=_react.useState.call(void 0, {status:"initial"}),[me,Ue]=_react.useState.call(void 0, {status:"initial"}),re=_react.useRef.call(void 0, {}),Re=_react.useRef.call(void 0, {}),Ie=_react.useRef.call(void 0, {}),sr=_react.useRef.call(void 0, {}),cr=_react.useRef.call(void 0, {}),pe=_react.useCallback.call(void 0, j=>{if(j){Le(j),a(null);return}Le(null),g({status:"initial"}),y({status:"initial"}),u({status:"disconnected",account:null})},[]),R=_react.useMemo.call(void 0, ()=>{let j=e.storage||fe;return e.client?ee=e.client:ee=hr({appId:e.appId,clientId:e.clientId,supportedChains:e.supportedChains,storage:j,baseUrl:e.baseUrl,logLevel:e.logLevel}),ee.setCallbacks({setUser:pe,setIsReady:l}),ee},[e.client,e.storage,e.appId,e.clientId,e.baseUrl,e.supportedChains,e.logLevel,pe]),Ct=_react.useCallback.call(void 0, ()=>(pe(null),R.auth.logout()),[pe,R]),kt=_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]),Pt=_react.useCallback.call(void 0, ()=>R.getIdentityToken(),[R]);Dr({client:R,isUserInitialized:n,setIsUserInitialized:i,setError:a});let Wt=Lr({client:R,appId:e.appId,createWalletCallbacks:re,recoverWalletCallbacks:Re,setWalletRecoveryCallbacks:Ie,setRecoveryFlowState:S,wallet:c,setWallet:u}),xt=Wr({client:R,createSolanaWalletCallbacks:sr,recoverSolanaWalletCallbacks:cr,setSolanaRecoveryFlowState:C,solanaWallet:m,setSolanaWallet:p});Nr({client:R,createWalletCallbacks:re,recoverWalletCallbacks:Re,setWalletRecoveryCallbacks:Ie,recoveryFlowState:h,oAuthState:w,setRecoveryFlowState:S,setWallet:u,appStateVisible:r});let{customAuthStateIsSettled:At}=Tr({client:R,isReady:n}),Ut=K();return _react2.default.createElement(_react2.default.Fragment,null,_react2.default.createElement(f.Provider,{value:{client:R,isReady:Ut&&n&&At,error:o,logout:Ct,getAccessToken:kt,getIdentityToken:Pt,wallet:_chunkOWCFWPALjs.a.call(void 0, _chunkOWCFWPALjs.a.call(void 0, {},c),Wt),solanaWallet:_chunkOWCFWPALjs.a.call(void 0, _chunkOWCFWPALjs.a.call(void 0, {},m),xt),oAuthState:w,recoveryFlowState:h,setRecoveryFlowState:S,solanaRecoveryFlowState:E,setSolanaRecoveryFlowState:C,createWalletCallbacks:re,recoverWalletCallbacks:Re,setWalletRecoveryCallbacks:Ie,createSolanaWalletCallbacks:sr,recoverSolanaWalletCallbacks:cr,setOAuthState:y,siweState:k,setSiweState:P,otpState:v,setOtpState:g,passkeyState:M,setPasskeyState:ue,farcasterState:me,setFarcasterState:Ue}},e.children,_react2.default.createElement(bt,{disabled:(ur=(dr=(lr=e.config)==null?void 0:lr.embedded)==null?void 0:dr.disableAutomaticMigration)!=null?ur:!1})),_react2.default.createElement(_reactnative.View,{style:{width:0,height:0,overflow:"hidden"}},_react2.default.createElement(Sr,{client:R,isClientReady:s})))},Pi=()=>{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 Xp=e=>{let{client:r,setSiweState:t,siweState:n}=_react.useContext.call(void 0, f),i=_react.useCallback.call(void 0, s=>{var c;let l=_(s);return t({status:"error",error:l}),(c=e==null?void 0:e.onError)==null||c.call(e,l),l},[e==null?void 0:e.onError]),o=_react.useCallback.call(void 0, u=>_chunkOWCFWPALjs.d.call(void 0, void 0,[u],function*({wallet:s,from:{domain:l,uri:c}}){var m;try{t({status:"generating-message"});let p=yield r.auth.siwe.init(s,l,c);return t({status:"awaiting-signature"}),(m=e==null?void 0:e.onGenerateMessage)==null||m.call(e,p.message),p.message}catch(p){throw i(p)}}),[r,i,e==null?void 0:e.onGenerateMessage]),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 = Yi; exports.d = A; exports.e = $i; exports.f = Mt; exports.g = _; exports.h = J; exports.i = fe; exports.j = hr; exports.k = Xp; exports.l = Ls; exports.m = I; exports.n = qs; exports.o = ec; exports.p = cc; exports.q = gc; exports.r = _c; exports.s = Rc; exports.t = Dc; exports.u = Jc; exports.v = tl; exports.w = cl; exports.x = hl; exports.y = Wl; exports.z = Ol; exports.A = Kl; exports.B = Jl; exports.C = rd; exports.D = md; exports.E = bd; exports.F = xd; exports.G = Ld; exports.H = Kd; exports.I = $d; exports.J = iu; exports.K = Xe; exports.L = pu; exports.M = hu; exports.N = ku; exports.O = Ru; exports.P = Jn; exports.Q = er; exports.R = Bu; exports.S = $u; exports.T = rm; exports.U = ti; exports.V = ni; exports.W = ci; exports.X = ir; exports.Y = mi; exports.Z = wt; exports._ = f; exports.$ = Hp; exports.aa = zp;
|
|
@@ -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 _chunkC462C7XXjs = require('./chunk-C462C7XX.js');var _chunkOWCFWPALjs = require('./chunk-OWCFWPAL.js');var _expolinking = require('expo-linking'); var O = _interopRequireWildcard(_expolinking); var D = _interopRequireWildcard(_expolinking);var _react = require('react');var _reactnative = require('react-native');var _jssdkcore = require('@privy-io/js-sdk-core');var _expoappleauthentication = require('expo-apple-authentication'); var f = _interopRequireWildcard(_expoappleauthentication);function H(a){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({oauthProviderUrl:t,isLogin:e}){try{return yield f.signInAsync({state:X(t),requestedScopes:[f.AppleAuthenticationScope.EMAIL,f.AppleAuthenticationScope.FULL_NAME]})}catch(o){throw o instanceof Error&&"code"in o&&o.code==="ERR_REQUEST_CANCELED"?new (0, _jssdkcore.PrivyClientError)({error:"Apple login was cancelled",code:e?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):o}})}function X(t){var a;return(a=new URL(t).searchParams.get("state"))!=null?a:""}function z(t){return _reactnative.Platform.select({android:t.replace("x.com","twitter.com"),default:t})}var _expowebbrowser = require('expo-web-browser'); var g = _interopRequireWildcard(_expowebbrowser);function j(o){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({oauthProviderUrl:t,isLogin:e,returnUrl:a}){var u,l;let s=yield g.openAuthSessionAsync(t,a,{createTask:!1});if(s.type===g.WebBrowserResultType.CANCEL||s.type===g.WebBrowserResultType.DISMISS)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth was cancelled",code:e?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"});if(s.type!=="success")throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth session failed",code:e?"failed_to_complete_login_with_oauth":"failed_to_complete_link_with_oauth"});let i=D.parse(s.url).queryParams;return{authorizationCode:(u=i==null?void 0:i.privy_oauth_code)!=null?u:null,state:(l=i==null?void 0:i.privy_oauth_state)!=null?l:null,resultUrl:s.url}})}var Q=(a={})=>{var o=a,{action:t}=o,e=_chunkOWCFWPALjs.c.call(void 0, o,["action"]);let{oAuthState:s,setOAuthState:i,client:u}=_react.useContext.call(void 0, _chunkC462C7XXjs._),l=_react.useRef.call(void 0, e);return _react.useEffect.call(void 0, ()=>{l.current=e},[e]),{start:_react.useCallback.call(void 0, function(Ct){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({provider:c,redirectUri:G,isLegacyAppleIosBehaviorEnabled:J=!1,disableSignup:K,onAppleOAuthUserInfo:W}){var I,S,v,C;i({status:"loading"});let y=_chunkC462C7XXjs.b.call(void 0, ),m=t?t==="login":!!!y;try{if(y&&t==="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(!y&&t==="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 w=O.createURL(G||"/"),{url:n}=yield u.auth.oauth.generateURL(c,w);c==="twitter"&&(n=z(n));let p,L,d,A,b,k,_;if(_reactnative.Platform.OS==="ios"&&c==="apple"&&!J){let r=yield H({oauthProviderUrl:n,isLogin:m});d=r.authorizationCode,A=r.state,_=r,b="raw"}else{let r=yield j({oauthProviderUrl:n,isLogin:m,returnUrl:w});d=r.authorizationCode,A=r.state,k=r.resultUrl}if(!d||!A)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:m?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(m){let r=_chunkC462C7XXjs.a.call(void 0, ),P=yield u.auth.oauth.loginWithCode(d,A,c,b,K?"no-signup":"login-or-sign-up",{embedded:r==null?void 0:r.embedded});p=P.user,L=P.is_new_user}else({user:p}=yield u.auth.oauth.linkWithCode(d,A,c,b));return _&&W&&W({fullName:_.fullName,email:_.email}),(S=(I=l.current).onSuccess)==null||S.call(I,p,L),k&&(yield O.openURL(k.split("?")[0])),i({status:"done"}),p!=null?p:void 0}catch(w){let n=_chunkC462C7XXjs.g.call(void 0, w);throw i({status:"error",error:n}),(C=(v=l.current).onError)==null||C.call(v,n),n}})},[u.auth.oauth,t,i]),state:s}};function It(t){let{state:e,start:a}=Q(_chunkOWCFWPALjs.b.call(void 0, _chunkOWCFWPALjs.a.call(void 0, {},t),{action:"login"}));return{state:e,login:a}}exports.a = Q; exports.b = It;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as W,b as N,d}from"./chunk-OWCFWPAL.js";import{useEffect as It}from"react";import{create as Ot}from"zustand";var mr=Ot(()=>({status:"disconnected"})),ye=()=>mr.getState().onNeedsRecovery,Mt=e=>{It(()=>{mr.setState({onNeedsRecovery:e==null?void 0:e.onNeedsRecovery})},[e==null?void 0:e.onNeedsRecovery])};import{applicationId as pr}from"expo-application";import*as L from"expo-secure-store";import{PrivyClientError as Lt}from"@privy-io/js-sdk-core";var yr=()=>{if(typeof pr!="string")throw new Lt({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 pr};function fr(e){return{get(r){return e.get(r.replaceAll(":","-"))},put(r,t){return e.put(r.replaceAll(":","-"),t)},del(r){return e.del(r.replaceAll(":","-"))},getKeys:()=>d(this,null,function*(){return[]})}}var fe={get(e){return L.getItemAsync(e,{keychainAccessible:L.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},put(e,r){return L.setItemAsync(e,r,{keychainAccessible:L.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},del(e){return L.deleteItemAsync(e,{keychainAccessible:L.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},getKeys:()=>d(void 0,null,function*(){return[]})};import{digest as Tt}from"expo-crypto";import Nt from"@privy-io/js-sdk-core";var gr={name:"@privy-io/expo",version:"0.58.2",description:"Expo client for the Privy Auth API",keywords:["authentication","authorization","identity","privacy","privy","user data","react-native","expo","web3"],homepage:"https://docs.privy.io",bugs:{url:"https://privy.io/slack"},license:"Apache-2.0",author:"privy.io",exports:{".":{require:"./dist/index.js",import:"./dist/esm/index.js",types:"./dist/index.d.ts"},"./passkey":{require:"./dist/passkey.js",import:"./dist/esm/passkey.js",types:"./dist/passkey.d.ts"},"./smart-wallets":{require:"./dist/smart-wallets.js",import:"./dist/esm/smart-wallets.js",types:"./dist/smart-wallets.d.ts"},"./extended-chains":{require:"./dist/extended-chains.js",import:"./dist/esm/extended-chains.js",types:"./dist/extended-chains.d.ts"},"./ui":{require:"./dist/ui.js",import:"./dist/esm/ui.js",types:"./dist/ui.d.ts"},"./connectors":{require:"./dist/connectors.js",import:"./dist/esm/connectors.js",types:"./dist/connectors.d.ts"}},main:"./dist/esm/index.js",source:"./src/index.ts",types:"./dist/index.d.ts",files:["dist/**/*","LICENSE","README.md"],scripts:{build:"tsup --clean --minify","check-types":"tsc --noEmit",clean:"rm -rf dist .turbo",dev:"tsup --watch",format:'eslint "src/**/*.{ts,tsx,js,jsx}" --fix',"generate-types":"tsup --dts-only",lint:'eslint "src/**/*.{ts,tsx,js,jsx}"',test:"jest"},browserslist:["defaults","node >= 18","not op_mini all"],dependencies:{"@privy-io/js-sdk-core":"0.53.3","@scure/base":"^1.2.4",tweetnacl:"^1.0.3","react-fast-compare":"^3.2.2",zustand:"^5.0.4"},devDependencies:{"@privy-io/eslint-config-custom":"*","@privy-io/eslint-plugin-privy-rules":"*","@privy-io/tsconfig":"*","@simplewebauthn/types":"9.0.1","@solana/web3.js":"^1.98.0","@svgr/core":"^8.1.0","@svgr/plugin-jsx":"^8.1.0","@svgr/plugin-svgo":"^8.1.0","@testing-library/react-native":"^13.1.0","@tsconfig/node16-strictest-esm":"^1.0.3","@types/jest":"^29.1.2",buffer:"^5.4.3","eslint-plugin-react-hooks":"^5.0.0-canary-7118f5dd7-20230705",expo:"52.0.37","expo-apple-authentication":"7.1.3","expo-application":"6.0.2","expo-clipboard":"7.0.1","expo-crypto":"14.0.2",jest:"^29.7.0","jest-expo":"52.0.5","lucide-react-native":"^0.474.0",react:"^18.3.1","react-native":"0.77.1","react-test-renderer":"^18.3.1",tsup:"^6.2.3",typescript:"~5.5.3"},peerDependencies:{"@expo-google-fonts/inter":"*","@privy-io/expo-native-extensions":"0.0.5","expo-apple-authentication":"*","expo-application":"*","expo-clipboard":"*","expo-crypto":"*","expo-font":"*","expo-linking":"*","expo-secure-store":"*","expo-web-browser":"*",permissionless:"^0.2.47",react:"*","react-native":"*","react-native-passkeys":"^0.3.0","react-native-qrcode-styled":"*","react-native-safe-area-context":"*","react-native-svg":"*","react-native-webview":"*",viem:"^2.32.0"},peerDependenciesMeta:{"@expo-google-fonts/inter":{optional:!0},"expo-font":{optional:!0},permissionless:{optional:!0},viem:{optional:!0},"react-native-svg":{optional:!0},"expo-clipboard":{optional:!0},"react-native-qrcode-styled":{optional:!0},"react-native-safe-area-context":{optional:!0}},publishConfig:{access:"public"}};var hr=({appId:e,clientId:r,storage:t=fe,supportedChains:n,baseUrl:i,logLevel:o})=>new Nt({appId:e,clientId:r,supportedChains:n,storage:fr(t),sdkVersion:`expo:${gr.version}`,nativeAppIdentifier:yr(),crypto:{digest:Tt},baseUrl:i,logLevel:o});import{useCallback as ar,useContext as Wi}from"react";import{PrivyClientError as xi}from"@privy-io/js-sdk-core";import Z,{useState as O,useMemo as _i,createContext as Ei,useCallback as Ae,useRef as de,useEffect as St,useContext as Ci}from"react";import{AppState as _t,View as ki}from"react-native";import{PrivyClientError as Et}from"@privy-io/js-sdk-core";import Dt from"react-fast-compare";import{create as jt}from"zustand";var ge=jt(()=>{}),vr=e=>ge.setState(r=>Dt(r,e)?r:e),x=ge.getState;import Ht from"react";import{useCallback as zt,useEffect as Bt,useRef as qt}from"react";import{AppState as Gt}from"react-native";import Jt from"react-native-webview";import*as F from"expo-secure-store";function wr(e){return typeof e!="object"||e===null||!("event"in e&&typeof e.event=="string")||!("id"in e&&typeof e.id=="string")||!("data"in e&&typeof e.data=="object")||e.data===null?!1:e.event.startsWith("app:secure-storage:")}function br(e){return d(this,null,function*(){switch(e.event){case"app:secure-storage:get":{let{key:r}=e.data,t=yield F.getItemAsync(Oe(r),{keychainAccessible:F.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY}).catch(n=>(console.warn("Failed to get the value from secure store",n),null));return{event:e.event,id:e.id,data:{value:t}}}case"app:secure-storage:remove":{let{key:r}=e.data,t=yield F.deleteItemAsync(Oe(r),{keychainAccessible:F.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY}).then(()=>!0).catch(n=>(console.warn("Failed to remove the value from secure store",n),!1));return{event:e.event,id:e.id,data:{success:t}}}case"app:secure-storage:set":{let{key:r,value:t}=e.data,n=yield F.setItemAsync(Oe(r),t,{keychainAccessible:F.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY}).then(()=>!0).catch(i=>(console.warn("Failed to write the value to secure store",i),!1));return{event:e.event,id:e.id,data:{success:n}}}}})}var Oe=e=>e.replaceAll(":","-");import Vt from"react-fast-compare";import{createStore as Kt,useStore as Me}from"zustand";var V=Kt()(()=>({user:null,proxyStatus:"loading"}));function b(){return V.getState().user}var Yi=V.subscribe.bind(V);function Le(e){V.setState(({user:r})=>Vt(r,e)?{}:{user:e})}var Fe=e=>V.setState({proxyStatus:e});function A(){return Me(V,e=>e.user)}function $i(){return Me(V,e=>!!e.user)}function K(){return Me(V,e=>e.proxyStatus!=="loading")}var Yt={shouldUseAppBackedStorage:!0},Sr=({client:e,isClientReady:r})=>{let t=qt(null);Bt(()=>Gt.addEventListener("change",o=>d(void 0,null,function*(){o==="active"&&((yield e.embeddedWallet.ping(500))||(Fe("reloading"),e.embeddedWallet.reload()))})).remove,[e]);let n=zt(i=>d(void 0,null,function*(){var s;let{data:o}=i.nativeEvent,a=JSON.parse(o);if(wr(a)){let l=yield br(a);(s=t.current)==null||s.postMessage(JSON.stringify(l));return}e.embeddedWallet.onMessage(a)}),[e]);return r?Ht.createElement(Jt,{style:{flex:1},ref:i=>{i&&(e.setMessagePoster(i),t.current=i)},cacheEnabled:!1,cacheMode:"LOAD_NO_CACHE",injectedJavaScriptObject:Yt,source:{uri:e.embeddedWallet.getURL()},webviewDebuggingEnabled:e.logger.level==="DEBUG",onLoad:()=>Fe("loaded"),onError:console.error,onMessage:n}):null};import{useCallback as Te,useEffect as kr,useMemo as Ne}from"react";import{errorIndicatesRecoveryIsNeeded as Qt,getAllUserEmbeddedSolanaWallets as Xt,getEntropyDetailsFromUser as Pr,PrivyClientError as te}from"@privy-io/js-sdk-core";import{getAllUserEmbeddedSolanaWallets as he,getEntropyDetailsFromAccount as _r,getUserEmbeddedEthereumWallet as $t,PrivyClientError as q}from"@privy-io/js-sdk-core";function Er(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=he(c),m=u[0],p=(a=$t(c))!=null?a:void 0;if(i!=null&&i.recoveryMethod&&i.recoveryMethod!=="privy")throw new q({code:"embedded_wallet_creation_error",error:"Unsupported recovery method for solana wallet."});if(!(i!=null&&i.createAdditional)&&m)throw new q({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),E=Math.max(...u.map(P=>P.wallet_index),0)+1,C=yield e.embeddedWallet.add({chainType:"solana",entropyId:h,entropyIdVerifier:S,hdWalletIndex:E}),k=he(C.user).find(P=>P.wallet_index===E);if(!k)throw new q({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=he(y.user).find(k=>k.wallet_index===0);if(!h)throw new q({error:"Embedded wallet account not created",code:"embedded_wallet_creation_error"});let S=p!=null?p:h,{entropyId:E,entropyIdVerifier:C}=_r(S);v=yield e.embeddedWallet.getSolanaProvider(h,E,C),g=y.user}let w=he(g)[0];if(!w)throw new q({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 q({code:"embedded_wallet_creation_error",error:u})}})}import{PrivyClientError as z}from"@privy-io/js-sdk-core";function ve(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 Cr(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 Wr=({client:e,solanaWallet:r,setSolanaWallet:t,setSolanaRecoveryFlowState:n,createSolanaWalletCallbacks:i,recoverSolanaWalletCallbacks:o})=>{let a=A(),s=Ne(()=>Xt(a),[a]),l=K(),c=Ne(()=>s.length===0?null:Pr(a),[a,s]),u=Ne(()=>{let g=s.map(S=>{let E=Pr(a,S);return E?{account:S,entropy:E}:null});if(g.some(S=>S===null))return[];let w=void 0,y=void 0,h=void 0;return g.filter(S=>S!==null).map(({account:S,entropy:{entropyId:E,entropyIdVerifier:C}})=>({address:S.address,publicKey:S.address,walletIndex:S.wallet_index,getProvider:()=>e.embeddedWallet.getSolanaProvider(S,E,C,w,y,h,k=>d(void 0,null,function*(){var P;yield(P=ye())==null?void 0:P(k)}))}))},[s,a,e]),m=Te(g=>d(void 0,null,function*(){return yield Er({client:e,setSolanaWallet:t,createSolanaWalletCallbacks:i,setSolanaRecoveryFlowState:n,opts:g})}),[e,i]),p=Te(()=>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 Cr({client:e,account:s[0],entropyId:g,entropyIdVerifier:w,setSolanaWallet:t,recoverSolanaWalletCallbacks:o,setSolanaRecoveryFlowState:n})}),[e,c,s,o,n,t]),v=Te(()=>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 Qt(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 kr(()=>{if(!a&&r.status!=="disconnected")return t({status:"disconnected"});l&&v().catch(()=>{})},[l,a]),kr(()=>{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 co}from"react";import{getUserEmbeddedEthereumWallet as lo,getUserEmbeddedSolanaWallet as Or,isUnifiedWallet as uo,throwIfInvalidRecoveryUpgradePath as mo}from"@privy-io/js-sdk-core";import{errorIndicatesRecoveryIsNeeded as po,PrivyClientError as U}from"@privy-io/js-sdk-core";import{getUserEmbeddedEthereumWallet as Zt}from"@privy-io/js-sdk-core";import{PrivyClientError as G}from"@privy-io/js-sdk-core";function we(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 G({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"recovery-encryption-key":if(!a)throw new G({code:"embedded_wallet_recovery_error",error:"key is required for recovery-encryption-key recovery method"});break;case"google-drive":if(!s)throw new G({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!l||!c)throw new G({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=Zt(w);if(!y)throw new G({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 G({code:"embedded_wallet_creation_error",error:y})}})}import{Platform as xr}from"react-native";import{PrivyClientError as D}from"@privy-io/js-sdk-core";function Ar(){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(xr.OS==="android")throw new D({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let i=yield Ar(),o=yield t.recovery.icloudAuth.getICloudConfiguration("expo-ios");if(!(o==null?void 0:o.container_identifier))throw new 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 be(n){return d(this,arguments,function*({walletAddress:e,client:r,chainType:t}){var c;if(xr.OS==="android")throw new D({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let i=yield Ar(),a=(yield r.recovery.getRecoveryKeyMaterial(e,t)).icloud_record_name;if(!a)throw new 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 Ur from"expo-web-browser";import{Platform as Rr}from"react-native";import{PrivyClientError as Y}from"@privy-io/js-sdk-core";import Aa from"react-fast-compare";import{PrivyApiError as eo,PrivyClientError as ro}from"@privy-io/js-sdk-core";function _(e){return e instanceof Error||e instanceof eo||e instanceof ro?e:typeof e=="string"?new Error(e):new Error("Unknown error")}var J=e=>new Promise(r=>setTimeout(r,e));import{useEffect as to,useRef as oo}from"react";import{AppState as De}from"react-native";function Se(){let e=oo(De.currentState);to(()=>De.addEventListener("change",n=>{e.current=n}).remove,[]);function r(){return De.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 Ur.openAuthSessionAsync(o);if(Rr.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 _e({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(_(o)),o}})}function _e(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 no=2*60*1e3;function io(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 _e({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"}))},no)}).finally(()=>{r==null||r.remove()})}function Ee(e){return d(this,null,function*(){let r;Rr.OS==="android"&&(r=io(e));let t=yield ne({provider:"google-drive",client:e});return t!=null?t:yield r})}import{getUserEmbeddedWallet as ao,PrivyClientError as so}from"@privy-io/js-sdk-core";function Ce(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=ao(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 so({code:"embedded_wallet_set_recovery_error",error:u instanceof Error?u.message:"Error setting password on embedded wallet"});throw(c=(l=t.current)==null?void 0:l.onError)==null||c.call(l,m),n({status:"initial"}),m}})}function Mr(e){return e===void 0?{recoveryMethod:"privy"}:typeof e=="string"?{recoveryMethod:"user-passcode",password:e}:e.recoveryMethod==="user-passcode"?{recoveryMethod:"user-passcode",password:e.password}:e.recoveryMethod==="recovery-encryption-key"?{recoveryMethod:"recovery-encryption-key",recoveryKey:e.recoveryKey}:{recoveryMethod:e.recoveryMethod}}var Lr=({client:e,appId:r,wallet:t,setWallet:n,setRecoveryFlowState:i,createWalletCallbacks:o,recoverWalletCallbacks:a,setWalletRecoveryCallbacks:s})=>{let l=A(),c=co(()=>lo(l),[l]),u=K(),m=ie(y=>d(void 0,null,function*(){var ue,me;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:E,recoveryKey:C}=Mr(y),k,P,M;if(E==="google-drive"&&(k=yield ne({provider:E,client:e,onError:(ue=o.current)==null?void 0:ue.onError}),i({status:"creating-wallet"}),!k))return null;if(E==="icloud"){if(!h)throw new U({code:"embedded_wallet_recovery_error",error:"User must be loaded before creating a wallet with iCloud."});let{recoverySecret:Ue,iCloudRecordName:re}=yield oe({user:h,appId:r,client:e});P=Ue,M=re}return yield we({client:e,setWallet:n,createWalletCallbacks:o,recoveryMethod:E,recoveryKey:C,setRecoveryFlowState:i,password:S,recoverySecretOverride:P,iCloudRecordNameOverride:M,solanaAccount:(me=Or(h))!=null?me:void 0})}),[e,c,l]),p=ie(y=>d(void 0,null,function*(){var E;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(Or(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(uo(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"});mo({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:(E=s.current)==null?void 0:E.onError}),i({status:"upgrading-recovery"}),!h)return null;S={recoveryMethod:"google-drive",wallet:c,recoveryAccessToken:h};break;case"icloud":if(!l)throw new 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 Ce({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:E}=Mr(y),C,k;if(S==="google-drive"&&(C=yield ne({provider:S,client:e,onError:(P=a.current)==null?void 0:P.onError}),i({status:"recovering"}),!C))return null;if(S==="icloud"){if(!l)throw new U({code:"embedded_wallet_recovery_error",error:"User must be loaded before recovering via iCloud."});let{recoverySecret:M}=yield be({client:e,walletAddress:c.address});k=M}return ve({client:e,account:c,setWallet:n,recoverWalletCallbacks:a,recoveryMethod:S,setRecoveryFlowState:i,recoveryKey:E,password:h,recoveryToken:C,recoverySecretOverride:k})}),[e,c]),w=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 po(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 yo,useState as fo}from"react";import{PrivyClientError as Fr}from"@privy-io/js-sdk-core";var Tr=({client:e,isReady:r})=>{let t=A(),n=ge(a=>a==null?void 0:a.customAuth),[i,o]=fo({status:"initial"});return yo(()=>{(()=>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 Fr({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 Fr({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 go,useEffect as ho,useMemo as vo}from"react";import{Platform as wo}from"react-native";import{getUserEmbeddedSolanaWallet as bo,getUserEmbeddedWallet as So}from"@privy-io/js-sdk-core";var Nr=({client:e,createWalletCallbacks:r,recoverWalletCallbacks:t,setWalletRecoveryCallbacks:n,recoveryFlowState:i,oAuthState:o,setRecoveryFlowState:a,setWallet:s,appStateVisible:l})=>{let c=$.useURL(),u=A(),m=vo(()=>So(u),[u]),p=K(),v=go(g=>{var y,h,S,E;let w=_(g);i.status==="creating-wallet"?(h=(y=r.current).onError)==null||h.call(y,_(w)):(E=(S=t.current).onError)==null||E.call(S,_(w)),a({status:"initial"})},[i]);return ho(()=>{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 E=yield _e({oAuthCode:h,oAuthState:y,client:e});if(i.status==="creating-wallet"){let C=(S=bo(u))!=null?S:void 0;yield we({client:e,setWallet:s,createWalletCallbacks:r,recoveryMethod:"google-drive",setRecoveryFlowState:a,recoveryToken:E,solanaAccount:C})}else if(i.status==="upgrading-recovery"){if(!m)throw new Error("Embedded wallet not found");yield Ce({client:e,recoveryInput:{recoveryMethod:"google-drive",wallet:m,recoveryAccessToken:E},setWalletRecoveryCallbacks:n,setRecoveryFlowState:a,setWallet:s})}else yield ve({client:e,account:m,setWallet:s,recoverWalletCallbacks:t,recoveryMethod:"google-drive",setRecoveryFlowState:a,recoveryToken:E})}catch(E){v(E)}}})}wo.OS==="android"&&g()},[c,i.status,l,p])};import{useEffect as _o}from"react";var Dr=({client:e,isUserInitialized:r,setIsUserInitialized:t,setError:n})=>{_o(()=>{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 bi,useRef as Si}from"react";import{useCallback as je,useContext as Eo}from"react";import{PrivyClientError as Co}from"@privy-io/js-sdk-core";var Ls=e=>{let{client:r,setSiweState:t,siweState:n}=Eo(f),i=je(s=>{var c;let l=_(s);return t({status:"error",error:l}),(c=e==null?void 0:e.onError)==null||c.call(e,l),l},[e==null?void 0:e.onError]),o=je(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:je(u=>d(void 0,[u],function*({signature:s,messageOverride:l,disableSignup:c}){var m;try{if(b())throw new Co({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 jr}from"react";import{createSiwsMessage as Po,PrivyClientError as Wo}from"@privy-io/js-sdk-core";import{useContext as ko}from"react";var I=()=>{let{client:e}=ko(f);return e};var qs=()=>{let e=I(),r=jr(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:Po({address:n,domain:i,uri:o,nonce:s})}}catch(s){throw _(s)}}),[e]),t=jr(s=>d(void 0,[s],function*({signature:n,message:i,wallet:{walletClientType:o,connectorType:a}={}}){try{if(!b())throw new Wo({code:"attempted_link_siws_before_logged_in",error:"Must be logged in to link a wallet, Use `useLoginWithSiws` to login with a wallet"});let{user:c}=yield e.auth.siws.link({signature:n,message:i,walletClientType:o,connectorType:a});return c}catch(l){throw _(l)}}),[e]);return{generateMessage:r,link:t}};import{useCallback as Vr}from"react";import{createSiwsMessage as xo,PrivyClientError as Ao}from"@privy-io/js-sdk-core";var ec=()=>{let e=I(),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 _(s)}}),[e]),t=Vr(l=>d(void 0,[l],function*({signature:n,message:i,wallet:{walletClientType:o,connectorType:a}={},disableSignup:s}){try{if(b())throw new Ao({code:"attempted_login_with_siws_while_already_logged_in",error:"Already logged in, use `useLinkWithSiws` if you are trying to link a wallet to an existing account"});return(yield e.auth.siws.login({signature:n,message:i,walletClientType:o,connectorType:a,mode:s?"no-signup":"login-or-sign-up"})).user}catch(c){throw _(c)}}),[e]);return{generateMessage:r,login:t}};import{useCallback as Kr,useContext as Uo}from"react";import{PrivyClientError as Ro}from"@privy-io/js-sdk-core";var cc=e=>{let{client:r}=Uo(f),t=Kr(i=>{var a;let o=_(i);return(a=e==null?void 0:e.onError)==null||a.call(e,o),o},[e==null?void 0:e.onError]);return{unlinkWallet:Kr(o=>d(void 0,[o],function*({address:i}){var a;try{if(!b())throw new Ro({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 Ve,useContext as Io,useState as Oo}from"react";import{PrivyClientError as Hr}from"@privy-io/js-sdk-core";var gc=e=>{let[r,t]=Oo(""),{client:n,otpState:i,setOtpState:o}=Io(f),a=Ve(c=>{var m;let u=_(c);return o({status:"error",error:u}),(m=e==null?void 0:e.onError)==null||m.call(e,u),u},[e,o]),s=Ve(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=Ve(m=>d(void 0,[m],function*({code:c,email:u}){var p;try{if(!b())throw new Hr({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 Hr({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 zr,useContext as Mo}from"react";var _c=e=>{let{client:r}=Mo(f),t=zr(i=>{var a;let o=_(i);return(a=e==null?void 0:e.onError)==null||a.call(e,o),o},[e==null?void 0:e.onError]);return{unlinkEmail:zr(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 Ke,useContext as Lo,useState as Fo}from"react";import{PrivyClientError as Br}from"@privy-io/js-sdk-core";var Rc=e=>{let[r,t]=Fo(""),{client:n,otpState:i,setOtpState:o}=Lo(f),a=Ke(c=>{var m;let u=_(c);return o({status:"error",error:u}),(m=e==null?void 0:e.onError)==null||m.call(e,u),u},[e,o]),s=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(p=>d(void 0,[p],function*({code:c,email:u,disableSignup:m}){var v;try{if(b())throw new Br({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 Br({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 He,useContext as To,useState as No}from"react";import{PrivyClientError as qr}from"@privy-io/js-sdk-core";var Dc=e=>{let[r,t]=No(""),{client:n,otpState:i,setOtpState:o}=To(f),a=He(c=>{var m;let u=_(c);return o({status:"error",error:u}),(m=e==null?void 0:e.onError)==null||m.call(e,u),u},[e,o]),s=He(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=He(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 ze,useContext as Do,useState as jo}from"react";import{PrivyClientError as Gr}from"@privy-io/js-sdk-core";var Jc=e=>{let[r,t]=jo(""),{client:n,otpState:i,setOtpState:o}=Do(f),a=ze(c=>{var m;let u=_(c);return o({status:"error",error:u}),(m=e==null?void 0:e.onError)==null||m.call(e,u),u},[e,o]),s=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(p=>d(void 0,[p],function*({code:c,phone:u,disableSignup:m}){var v;try{if(b())throw new Gr({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 Gr({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 ke from"expo-linking";import{useCallback as Be,useContext as Vo,useRef as Ko}from"react";import{PrivyClientError as ae}from"@privy-io/js-sdk-core";var tl=e=>{let{appState:r,getCurrentAppState:t}=Se(),{client:n,farcasterState:i,setFarcasterState:o}=Vo(f),a=Ko(!1),s=Be(u=>{var p;let m=_(u);return o({status:"error",error:m}),(p=e==null?void 0:e.onError)==null||p.call(e,m),m},[e==null?void 0:e.onError,o]),l=Be(()=>{a.current=!0},[]);return{linkWithFarcaster:Be((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:ke.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 ke.openURL(h),o({status:"polling-status"});let E=0;for(;E<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}E++,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 Jr,useContext as Ho}from"react";var cl=e=>{let{client:r}=Ho(f),t=Jr(i=>{var a;let o=_(i);return(a=e==null?void 0:e.onError)==null||a.call(e,o),o},[e==null?void 0:e.onError]);return{unlinkFarcaster:Jr(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 Pe from"expo-linking";import{useCallback as Je,useContext as zo,useRef as Bo}from"react";import{PrivyClientError as se}from"@privy-io/js-sdk-core";var hl=e=>{let{appState:r,getCurrentAppState:t}=Se(),{client:n,farcasterState:i,setFarcasterState:o}=zo(f),a=Bo(!1),s=Je(u=>{var p;let m=_(u);return o({status:"error",error:m}),(p=e==null?void 0:e.onError)==null||p.call(e,m),m},[e==null?void 0:e.onError,o]),l=Je(()=>{a.current=!0},[]);return{loginWithFarcaster:Je((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:E}=yield n.auth.farcaster.initializeAuth({relyingParty:u,redirectUrl:Pe.createURL(m!=null?m:"/")});if(!S)throw new se({code:"failed_to_generate_farcaster_uri",error:"Failed to generate farcaster uri"});if(!E)throw new se({code:"failed_to_generate_farcaster_channel_token",error:"Failed to generate farcaster channel token"});yield Pe.openURL(S),o({status:"polling-status"});let C=0;for(;C<v.pollAttempts;){if(a.current)throw new 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:E});if(k.state==="completed"){o({status:"submitting-token"});let P=x(),M=yield n.auth.farcaster.authenticate(W({channel_token:E,mode:p?"no-signup":"login-or-sign-up"},k),{embedded:P==null?void 0:P.embedded});return o({status:"done"}),(y=e==null?void 0:e.onSuccess)==null||y.call(e,M.user,M.is_new_user),M.user}C++,yield J(v.pollIntervalMs)}throw new 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 Yr,useContext as qo}from"react";import{create as Go}from"zustand";import{PrivyClientError as Jo}from"@privy-io/js-sdk-core";var Ye=Go(()=>({status:"initial"})),H=e=>Ye.setState(e,!0),Yo=Ye.getState,Wl=()=>{let{client:e}=qo(f),r=Ye(),t=Yr(()=>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=_(i);throw H({status:"initial",error:o}),o}}),[e]),n=Yr(i=>d(void 0,null,function*(){let o=Yo().status;try{if(b()){let c=new Jo({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=_(a);throw H({status:o,error:s}),s}}),[e]);return{init:t,login:n,state:r}};import{useContext as $o,useMemo as Qo}from"react";import{delegatedActions as $r}from"@privy-io/js-sdk-core";var Ol=()=>{let{client:e}=$o(f);return Qo(()=>({delegateWallet:$r.delegateWallet(e),revokeWallets:$r.revokeWallets(e)}),[e])};import{useContext as en,useMemo as rn}from"react";import{addSessionSigners as tn,removeSessionSigners as on}from"@privy-io/js-sdk-core";import{isEmbeddedWalletAccount as Xo}from"@privy-io/js-sdk-core";function Zo(e,r){return e.linked_accounts.filter(Xo).find(t=>t.address===r)}function $e(e){let r=b();if(!r)throw new Error("User must be authenticated to perform this operation");let t=Zo(r,e);if(!t)throw new Error(`No wallet found with address ${e}`);return t}var Kl=()=>{let{client:e}=en(f);return rn(()=>({addSessionSigners:({address:r,signers:t})=>tn({client:e,wallet:$e(r),signers:t.map(n=>({signer_id:n.signerId,override_policy_ids:n.policyIds}))}),removeSessionSigners:({address:r})=>on({client:e,wallet:$e(r)})}),[e])};import{useContext as nn,useMemo as an}from"react";import{PrivyClientError as Xr}from"@privy-io/js-sdk-core";var Jl=()=>{let{client:e}=nn(f);return an(()=>({sendCode(n){return d(this,arguments,function*({newEmailAddress:t}){Qr(),yield e.auth.email.sendCode(t)})},updateEmail(i){return d(this,arguments,function*({newEmailAddress:t,code:n}){let{address:o}=Qr(),{user:a}=yield e.auth.email.updateEmail({oldEmailAddress:o,newEmailAddress:t,code:n});return a})}}),[e])};function Qr(){let r=sn().linked_accounts.find(t=>t.type==="email");if(!r)throw new Xr({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 sn(){let e=b();if(!e)throw new Xr({code:"attempted_update_before_logged_in",error:"Must be logged in to update a user profile."});return e}import{useContext as cn,useMemo as ln}from"react";import{PrivyClientError as et}from"@privy-io/js-sdk-core";var rd=()=>{let{client:e}=cn(f);return ln(()=>({sendCode(n){return d(this,arguments,function*({newPhoneNumber:t}){Zr(),yield e.auth.phone.sendCode(t)})},updatePhone(i){return d(this,arguments,function*({newPhoneNumber:t,code:n}){let{phoneNumber:o}=Zr(),{user:a}=yield e.auth.phone.updatePhone({oldPhoneNumber:o,newPhoneNumber:t,code:n});return a})}}),[e])};function Zr(){let r=dn().linked_accounts.find(t=>t.type==="phone");if(!r)throw new et({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 dn(){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*as ot from"expo-linking";import{useCallback as mn,useContext as pn,useMemo as yn}from"react";import{crossApp as fn,PrivyClientError as gn}from"@privy-io/js-sdk-core";import*as tt from"expo-linking";import*as ce from"expo-web-browser";import{PrivyClientError as rt}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 rt({error:"OAuth session was cancelled",code:"oauth_session_failed"}):new rt({error:"OAuth session failed",code:"oauth_session_failed"});return un(t.url)});function un(e){let{queryParams:r}=tt.parse(e);return r}var md=()=>{let{client:e}=pn(f),r=yn(()=>fn.loginWithCrossAppAuth({client:e,openAuthSession:T}),[e]);return{loginWithCrossApp:mn(o=>d(void 0,[o],function*({appId:n,redirectUri:i}){if(b())throw new gn({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:ot.createURL(i||"/")});return{user:s}}),[r])}};import*as nt from"expo-linking";import{useCallback as hn,useContext as vn,useMemo as wn}from"react";import{crossApp as bn,PrivyClientError as Sn}from"@privy-io/js-sdk-core";var bd=()=>{let{client:e}=vn(f),r=wn(()=>bn.linkWithCrossAppAuth({client:e,openAuthSession:T}),[e]);return{linkWithCrossApp:hn(o=>d(void 0,[o],function*({appId:n,redirectUri:i}){if(!b())throw new Sn({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:nt.createURL(i||"/")})}}),[r])}};import*as at from"expo-linking";import{useContext as _n,useMemo as it}from"react";import{crossApp as En}from"@privy-io/js-sdk-core";var xd=()=>{let{client:e}=_n(f),r=it(()=>En.wallet.signMessage({client:e,openAuthSession:T}),[e]);return it(()=>({signMessage:({address:t,message:n,redirectUri:i="/"})=>r({user:b(),address:t,message:n,redirectUrl:at.createURL(i)})}),[r])};import*as ct from"expo-linking";import{useContext as Cn,useMemo as st}from"react";import{crossApp as kn}from"@privy-io/js-sdk-core";var Ld=()=>{let{client:e}=Cn(f),r=st(()=>kn.wallet.signTypedData({client:e,openAuthSession:T}),[e]);return st(()=>({signTypedData:({address:t,typedData:n,redirectUri:i="/"})=>r({user:b(),address:t,typedData:n,redirectUrl:ct.createURL(i)})}),[r])};import*as dt from"expo-linking";import{useContext as Pn,useMemo as lt}from"react";import{crossApp as Wn}from"@privy-io/js-sdk-core";var Kd=()=>{let{client:e}=Pn(f),r=lt(()=>Wn.wallet.sendTransaction({client:e,openAuthSession:T}),[e]);return lt(()=>({sendTransaction:({address:t,transaction:n,redirectUri:i="/"})=>r({user:b(),address:t,transaction:n,redirectUrl:dt.createURL(i)})}),[r])};import{useCallback as xn,useContext as An}from"react";import{getUserEmbeddedEthereumWallet as Un,getUserEmbeddedSolanaWallet as Rn,isUnifiedWallet as In,PrivyClientError as Q,throwIfInvalidRecoveryUpgradePath as On}from"@privy-io/js-sdk-core";var $d=()=>{let{client:e}=An(f);return{setRecovery:xn(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=Un(n))!=null?s:Rn(n);if(!o)throw new Q({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});if(In(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"})}On({currentRecoveryMethod:o.recovery_method,upgradeToRecoveryMethod:t.recoveryMethod});let a=yield Mn({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])}},Mn=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 Ln,useContext as Fn}from"react";import{getUserEmbeddedEthereumWallet as Tn,getUserEmbeddedSolanaWallet as Nn,PrivyClientError as le,isUnifiedWallet as Dn}from"@privy-io/js-sdk-core";var iu=()=>{let{client:e}=Fn(f);return{recover:Ln(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=Tn(n))!=null?c:Nn(n);if(!i)throw new le({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});if(Dn(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 be({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 Vn}from"react";import{useContext as jn,useEffect as Qe}from"react";var Xe=(e={})=>{let{wallet:r,createWalletCallbacks:t,recoverWalletCallbacks:n,setWalletRecoveryCallbacks:i}=jn(f),{onCreateWalletSuccess:o,onCreateWalletError:a,onRecoverWalletError:s,onRecoverWalletSuccess:l,onSetWalletRecoverySuccess:c,onSetWalletRecoveryError:u}=e;return Qe(()=>{t.current={onSuccess:o,onError:a}},[o,a]),Qe(()=>{n.current={onSuccess:l,onError:s}},[l,s]),Qe(()=>{i.current={onSuccess:c,onError:u}},[l,s]),r};var pu=({onStateChange:e})=>{let r=Xe();return Vn(()=>{e(r)},[r])};import{useContext as Kn}from"react";var hu=()=>{let{getIdentityToken:e}=Kn(f);return{getIdentityToken:e}};import{useCallback as ut,useContext as Hn}from"react";import{PrivyClientError as zn}from"@privy-io/js-sdk-core";var ku=e=>{let{client:r}=Hn(f),t=ut(i=>{var a;let o=_(i);return(a=e==null?void 0:e.onError)==null||a.call(e,o),o},[e==null?void 0:e.onError]);return{create:ut(()=>d(void 0,null,function*(){var i;try{if(b())throw new zn({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 Bn,useEffect as qn}from"react";function Ru({onMfaRequired:e}){let{client:r}=Bn(f);qn(()=>{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 We,useContext as Qn}from"react";import{PrivyClientError as xe}from"@privy-io/js-sdk-core";import{PrivyClientError as Gn}from"@privy-io/js-sdk-core";var Jn=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 Gn({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 Yn}from"@privy-io/js-sdk-core";var er=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 Yn({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 mt(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 pt(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 Bu(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 $u(){let{client:e}=Qn(f),r=We(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 pt(l);case"totp":return;default:throw new Error(`Unsupported MFA method: ${o.mfaMethod}`)}}),[e]),t=We(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 xe({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 xe({code:"invalid_passkey_response",error:"Invalid authenticator response"});let v=yield er(o.mfaCode),g=mt(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 xe({code:"unsupported_mfa_method",error:"Unsupported MFA method"});throw(p=e.mfaPromises.rootPromise.current)==null||p.reject(w),w}}),[e]),n=We(()=>d(this,null,function*(){yield e.mfa.verifyMfa()}),[e]),i=We(()=>{var o;(o=e.mfaPromises.rootPromise.current)==null||o.reject(new xe({code:"mfa_canceled",error:"MFA canceled"}))},[e]);return{init:r,submit:t,prompt:n,cancel:i}}import{useCallback as rr,useContext as Xn}from"react";function rm(){let{client:e}=Xn(f),r=rr(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=rr(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=rr(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 Zn,useMemo as ei}from"react";import{getAllUserEmbeddedEthereumWallets as or,getEntropyDetailsFromUser as yt,getUserEmbeddedSolanaWallet as ri,PrivyClientError as ft}from"@privy-io/js-sdk-core";var ti=()=>{let e=A(),r=I(),t=ei(()=>{let o=or(e).map(a=>{let s=yt(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=ye())==null?void 0:u(c)})})}))},[r,e]),n=Zn((...o)=>d(void 0,[...o],function*({createAdditional:i=!1}={}){let{user:a}=yield r.user.get(),s=or(a);if(!i&&s.length>0)throw new ft({code:"embedded_wallet_creation_error",error:"Wallet already exists for this user. Set `createAdditional` to `true` to create another wallet"});let l=yt(a);if(!l){let g=yield r.embeddedWallet.create({});return tr(g.user,0),{user:g.user}}let{entropyId:c,entropyIdVerifier:u}=l;if(u==="solana-address-verifier"){let g=ri(a),w=yield r.embeddedWallet.create({solanaAccount:g});return tr(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 tr(v.user,p),{user:v.user}}),[r]);return{wallets:t,create:n}};function tr(e,r){let t=or(e).find(n=>n.wallet_index===r);if(!e||!t)throw new ft({code:"embedded_wallet_creation_error",error:"Unknown error creating wallet"})}import{useContext as oi,useEffect as gt}from"react";var ni=(e={})=>{let{solanaWallet:r,createSolanaWalletCallbacks:t,recoverSolanaWalletCallbacks:n}=oi(f),{onCreateWalletSuccess:i,onCreateWalletError:o,onRecoverWalletError:a,onRecoverWalletSuccess:s}=e;return gt(()=>{t.current={onSuccess:i,onError:o}},[i,o]),gt(()=>{n.current={onSuccess:s,onError:a}},[s,a]),r};import{useCallback as ii,useMemo as ai}from"react";import{getAllUserEmbeddedBitcoinWallets as nr,getEntropyDetailsFromUser as ht,isUnifiedWallet as si,PrivyClientError as X}from"@privy-io/js-sdk-core";var ci=()=>{let e=A(),r=I(),t=ai(()=>{let i=ht(e);if(!i)return[];let o=nr(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:()=>si(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=ii(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=ht(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=nr(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=nr(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 li}from"react";var ir=()=>{let{isReady:e,logout:r,getAccessToken:t,error:n}=li(f);return{user:A(),isReady:e,error:n,logout:r,getAccessToken:t}};import{useMemo as di}from"react";import{generateAuthorizationSignature as ui}from"@privy-io/js-sdk-core";var mi=()=>{let e=I();return di(()=>({generateAuthorizationSignature(t){return d(this,null,function*(){let{signature:n}=yield ui((...i)=>e.embeddedWallet.signWithUserSigner(...i),t);return{signature:n}})}}),[e])};import{useCallback as vi}from"react";import{PrivyClientError as wi}from"@privy-io/js-sdk-core";import{getAllUserEmbeddedBitcoinWallets as pi,getUserEmbeddedEthereumWallet as yi,getUserEmbeddedSolanaWallet as fi,isEmbeddedWalletAccount as gi,isUnifiedWallet as hi}from"@privy-io/js-sdk-core";function vt(e,r){return d(this,null,function*(){var i;let t=(i=yi(r))!=null?i:fi(r);if(!t||hi(t))return{success:!0};if(t.imported)throw new Error("Imported wallets cannot be migrated");if(pi(r).length>0)throw new Error("Bitcoin wallets cannot be migrated");let n=r.linked_accounts.filter(gi).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 wt=()=>{let e=I();return{migrate:vi(()=>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 wi({code:"embedded_wallet_before_logged_in",error:"User must be authenticated before migrating wallets"});return vt(e,t)}),[e])}};var bt=({disabled:e})=>{let{migrate:r}=wt(),{user:t}=ir(),n=Si(!1);return bi(()=>{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=Ei(null),ee;function Hp(e){return ee?ee.getAccessToken():e!=null&&e.strict?Promise.reject(new Et({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 zp=e=>{var lr,dr,ur;Pi();let[r,t]=O(_t.currentState==="active");St(()=>{let j=_t.addEventListener("change",Rt=>{t(Rt==="active")});return()=>{j.remove()}},[]),St(()=>vr(e.config),[e.config]);let[n,i]=O(!1),[o,a]=O(null),[s,l]=O(!1),[c,u]=O({status:"disconnected",account:null}),[m,p]=O({status:"disconnected"}),[v,g]=O({status:"initial"}),[w,y]=O({status:"initial"}),[h,S]=O({status:"initial"}),[E,C]=O({status:"initial"}),[k,P]=O({status:"initial"}),[M,ue]=O({status:"initial"}),[me,Ue]=O({status:"initial"}),re=de({}),Re=de({}),Ie=de({}),sr=de({}),cr=de({}),pe=Ae(j=>{if(j){Le(j),a(null);return}Le(null),g({status:"initial"}),y({status:"initial"}),u({status:"disconnected",account:null})},[]),R=_i(()=>{let j=e.storage||fe;return e.client?ee=e.client:ee=hr({appId:e.appId,clientId:e.clientId,supportedChains:e.supportedChains,storage:j,baseUrl:e.baseUrl,logLevel:e.logLevel}),ee.setCallbacks({setUser:pe,setIsReady:l}),ee},[e.client,e.storage,e.appId,e.clientId,e.baseUrl,e.supportedChains,e.logLevel,pe]),Ct=Ae(()=>(pe(null),R.auth.logout()),[pe,R]),kt=Ae(()=>d(void 0,null,function*(){try{return yield R.getAccessToken()}catch(j){return console.debug(j),null}}),[R]),Pt=Ae(()=>R.getIdentityToken(),[R]);Dr({client:R,isUserInitialized:n,setIsUserInitialized:i,setError:a});let Wt=Lr({client:R,appId:e.appId,createWalletCallbacks:re,recoverWalletCallbacks:Re,setWalletRecoveryCallbacks:Ie,setRecoveryFlowState:S,wallet:c,setWallet:u}),xt=Wr({client:R,createSolanaWalletCallbacks:sr,recoverSolanaWalletCallbacks:cr,setSolanaRecoveryFlowState:C,solanaWallet:m,setSolanaWallet:p});Nr({client:R,createWalletCallbacks:re,recoverWalletCallbacks:Re,setWalletRecoveryCallbacks:Ie,recoveryFlowState:h,oAuthState:w,setRecoveryFlowState:S,setWallet:u,appStateVisible:r});let{customAuthStateIsSettled:At}=Tr({client:R,isReady:n}),Ut=K();return Z.createElement(Z.Fragment,null,Z.createElement(f.Provider,{value:{client:R,isReady:Ut&&n&&At,error:o,logout:Ct,getAccessToken:kt,getIdentityToken:Pt,wallet:W(W({},c),Wt),solanaWallet:W(W({},m),xt),oAuthState:w,recoveryFlowState:h,setRecoveryFlowState:S,solanaRecoveryFlowState:E,setSolanaRecoveryFlowState:C,createWalletCallbacks:re,recoverWalletCallbacks:Re,setWalletRecoveryCallbacks:Ie,createSolanaWalletCallbacks:sr,recoverSolanaWalletCallbacks:cr,setOAuthState:y,siweState:k,setSiweState:P,otpState:v,setOtpState:g,passkeyState:M,setPasskeyState:ue,farcasterState:me,setFarcasterState:Ue}},e.children,Z.createElement(bt,{disabled:(ur=(dr=(lr=e.config)==null?void 0:lr.embedded)==null?void 0:dr.disableAutomaticMigration)!=null?ur:!1})),Z.createElement(ki,{style:{width:0,height:0,overflow:"hidden"}},Z.createElement(Sr,{client:R,isClientReady:s})))},Pi=()=>{if(Ci(f))throw new Et({code:"configuration_error",error:"Found multiple instances of PrivyProvider, ensure there is only one mounted in your application tree."})};var Xp=e=>{let{client:r,setSiweState:t,siweState:n}=Wi(f),i=ar(s=>{var c;let l=_(s);return t({status:"error",error:l}),(c=e==null?void 0:e.onError)==null||c.call(e,l),l},[e==null?void 0:e.onError]),o=ar(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=ar(c=>d(void 0,[c],function*({signature:s,messageOverride:l}){var u;try{if(!b())throw new xi({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,Yi as c,A as d,$i as e,Mt as f,_ as g,J as h,fe as i,hr as j,Xp as k,Ls as l,I as m,qs as n,ec as o,cc as p,gc as q,_c as r,Rc as s,Dc as t,Jc as u,tl as v,cl as w,hl as x,Wl as y,Ol as z,Kl as A,Jl as B,rd as C,md as D,bd as E,xd as F,Ld as G,Kd as H,$d as I,iu as J,Xe as K,pu as L,hu as M,ku as N,Ru as O,Jn as P,er as Q,Bu as R,$u as S,rm as T,ti as U,ni as V,ci as W,ir as X,mi as Y,wt as Z,f as _,Hp as $,zp as aa};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{_ as B,a as R,b as N,g as T}from"./chunk-C462C7XX.js";import{a as E,b as x,c as F,d as h}from"./chunk-OWCFWPAL.js";import*as O from"expo-linking";import{useCallback as Z,useContext as $,useEffect as q,useRef as tt}from"react";import{Platform as et}from"react-native";import{PrivyClientError as U}from"@privy-io/js-sdk-core";import*as f from"expo-apple-authentication";import{PrivyClientError as V}from"@privy-io/js-sdk-core";function H(a){return h(this,arguments,function*({oauthProviderUrl:t,isLogin:e}){try{return yield f.signInAsync({state:X(t),requestedScopes:[f.AppleAuthenticationScope.EMAIL,f.AppleAuthenticationScope.FULL_NAME]})}catch(o){throw o instanceof Error&&"code"in o&&o.code==="ERR_REQUEST_CANCELED"?new V({error:"Apple login was cancelled",code:e?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):o}})}function X(t){var a;return(a=new URL(t).searchParams.get("state"))!=null?a:""}import{Platform as Y}from"react-native";function z(t){return Y.select({android:t.replace("x.com","twitter.com"),default:t})}import*as D from"expo-linking";import*as g from"expo-web-browser";import{PrivyClientError as M}from"@privy-io/js-sdk-core";function j(o){return h(this,arguments,function*({oauthProviderUrl:t,isLogin:e,returnUrl:a}){var u,l;let s=yield g.openAuthSessionAsync(t,a,{createTask:!1});if(s.type===g.WebBrowserResultType.CANCEL||s.type===g.WebBrowserResultType.DISMISS)throw new M({error:"OAuth was cancelled",code:e?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"});if(s.type!=="success")throw new M({error:"OAuth session failed",code:e?"failed_to_complete_login_with_oauth":"failed_to_complete_link_with_oauth"});let i=D.parse(s.url).queryParams;return{authorizationCode:(u=i==null?void 0:i.privy_oauth_code)!=null?u:null,state:(l=i==null?void 0:i.privy_oauth_state)!=null?l:null,resultUrl:s.url}})}var Q=(a={})=>{var o=a,{action:t}=o,e=F(o,["action"]);let{oAuthState:s,setOAuthState:i,client:u}=$(B),l=tt(e);return q(()=>{l.current=e},[e]),{start:Z(function(Ct){return h(this,arguments,function*({provider:c,redirectUri:G,isLegacyAppleIosBehaviorEnabled:J=!1,disableSignup:K,onAppleOAuthUserInfo:W}){var I,S,v,C;i({status:"loading"});let y=N(),m=t?t==="login":!!!y;try{if(y&&t==="login")throw new U({code:"attempted_login_with_oauth_while_already_logged_in",error:"Already logged in, if trying to link an OAuth account use `useLinkWithOAuth`"});if(!y&&t==="link")throw new U({code:"attempted_link_oauth_before_logged_in",error:"Must be logged in to link an OAuth account, use `useLoginWithOAuth`"});let w=O.createURL(G||"/"),{url:n}=yield u.auth.oauth.generateURL(c,w);c==="twitter"&&(n=z(n));let p,L,d,A,b,k,_;if(et.OS==="ios"&&c==="apple"&&!J){let r=yield H({oauthProviderUrl:n,isLogin:m});d=r.authorizationCode,A=r.state,_=r,b="raw"}else{let r=yield j({oauthProviderUrl:n,isLogin:m,returnUrl:w});d=r.authorizationCode,A=r.state,k=r.resultUrl}if(!d||!A)throw new U({error:"OAuth invalid credentials",code:m?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(m){let r=R(),P=yield u.auth.oauth.loginWithCode(d,A,c,b,K?"no-signup":"login-or-sign-up",{embedded:r==null?void 0:r.embedded});p=P.user,L=P.is_new_user}else({user:p}=yield u.auth.oauth.linkWithCode(d,A,c,b));return _&&W&&W({fullName:_.fullName,email:_.email}),(S=(I=l.current).onSuccess)==null||S.call(I,p,L),k&&(yield O.openURL(k.split("?")[0])),i({status:"done"}),p!=null?p:void 0}catch(w){let n=T(w);throw i({status:"error",error:n}),(C=(v=l.current).onError)==null||C.call(v,n),n}})},[u.auth.oauth,t,i]),state:s}};function It(t){let{state:e,start:a}=Q(x(E({},t),{action:"login"}));return{state:e,login:a}}export{Q as a,It as b};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b as d,m as i}from"./chunk-
|
|
1
|
+
import{b as d,m as i}from"./chunk-C462C7XX.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
|
|
1
|
+
import{a as Pt,b as Tt,c as It,d as wt,e as Lt,f as Wt,g as bt,h as gt}from"./chunk-QSWCX5XI.js";import{a,b as I}from"./chunk-XB3V6FST.js";import{$ as Ut,A as tt,B as et,C as ot,D as rt,E as nt,F as it,G as ut,H as pt,I as st,J as ht,K as At,L as at,M as ct,N as Ot,O as mt,S as ft,T as lt,U as kt,V as yt,W as dt,X as x,Y as xt,Z as T,_ as A,aa as vt,e as y,f as G,g as d,i as v,j as P,k as j,l as E,m as B,n as _,o as M,p as q,q as z,r as D,s as J,t as K,u as Q,v as V,w as X,x as Y,y as Z,z as $}from"./chunk-C462C7XX.js";import{a as f,b as l,d as k}from"./chunk-OWCFWPAL.js";export*from"@privy-io/js-sdk-core";import r from"react";var Ht=({loading:t,error:e,unauthenticated:o,children:u})=>{let{isReady:i,error:p}=x(),U=y();if(!i)return r.createElement(r.Fragment,null,t);if(p&&e){let n=typeof e=="function"?e(p):e;return r.createElement(r.Fragment,null,n)}return U?r.createElement(r.Fragment,null,u):r.createElement(r.Fragment,null,o)};function w(t){return a(t)}function L(t){let{state:e,start:o}=a(l(f({},t),{action:"link"}));return{state:e,link:o}}import{useCallback as W,useContext as b,useEffect as g,useRef as F}from"react";var R=t=>{let{client:e}=b(A),o=F(t);return g(()=>{o.current=t},[t]),{unlinkOAuth:W(U=>k(void 0,[U],function*({provider:i,subject:p}){var n,c,s,O;try{let{user:h}=yield e.auth.oauth.unlink(i,p);return(c=(n=o.current)==null?void 0:n.onSuccess)==null||c.call(n,h),h}catch(h){let m=d(h);throw(O=(s=o.current)==null?void 0:s.onError)==null||O.call(s,m),m}}),[e.auth.oauth])}};import{useContext as C,useEffect as H,useRef as N}from"react";var S=t=>{let{client:e}=C(A),o=N(t.onOAuthTokenGrant);o.current=t.onOAuthTokenGrant,H(()=>{let{unsubscribe:u}=e.addOAuthTokensListener(i=>{o.current(i)});return u},[e])};export{Ht as AuthBoundary,A as PrivyContext,vt as PrivyProvider,v as SecureStorageAdapter,P as createPrivyClient,Ut as getAccessToken,bt as hasError,Pt as isConnected,It as isConnecting,Wt as isCreating,wt as isDisconnected,Lt as isNotCreated,Tt as isReconnecting,gt as needsRecovery,xt as useAuthorizationSignature,Ot as useCreateGuestAccount,dt as useEmbeddedBitcoinWallet,kt as useEmbeddedEthereumWallet,yt as useEmbeddedSolanaWallet,At as useEmbeddedWallet,at as useEmbeddedWalletStateChange,$ as useHeadlessDelegatedActions,ct as useIdentityToken,z as useLinkEmail,K as useLinkSMS,nt as useLinkWithCrossApp,V as useLinkWithFarcaster,L as useLinkWithOAuth,j as useLinkWithSiwe,_ as useLinkWithSiws,rt as useLoginWithCrossApp,J as useLoginWithEmail,Y as useLoginWithFarcaster,Z as useLoginWithFarcasterV2,I as useLoginWithOAuth,Q as useLoginWithSMS,E as useLoginWithSiwe,M as useLoginWithSiws,ft as useMfa,lt as useMfaEnrollment,T as useMigrateWallets,w as useOAuthFlow,S as useOAuthTokens,G as useOnNeedsRecovery,x as usePrivy,B as usePrivyClient,ht as useRecoverEmbeddedWallet,mt as useRegisterMfaListener,pt as useSendTransactionWithCrossApp,tt as useSessionSigners,st as useSetEmbeddedWalletRecovery,it as useSignMessageWithCrossApp,ut as useSignTypedDataWithCrossApp,D as useUnlinkEmail,X as useUnlinkFarcaster,R as useUnlinkOAuth,q as useUnlinkWallet,et as useUpdateEmail,ot as useUpdatePhone};
|
package/dist/esm/passkey.js
CHANGED
|
@@ -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{
|
|
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{P as d,Q as C,R as S,_ as p,a as b,b as m,g}from"./chunk-C462C7XX.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{
|
|
1
|
+
import{a as E}from"./chunk-QSWCX5XI.js";import{_ as C,b,d as h,m as x}from"./chunk-C462C7XX.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};
|