@privy-io/expo 0.56.3 → 0.57.0
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-3PVCFFW3.js → chunk-A2ELCA5A.js} +1 -1
- package/dist/chunk-JMPXUULU.js +1 -0
- package/dist/esm/{chunk-3PVCFFW3.js → chunk-A2ELCA5A.js} +1 -1
- package/dist/esm/chunk-JMPXUULU.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 +1 -0
- package/dist/index.js +1 -1
- package/dist/passkey.js +1 -1
- package/dist/smart-wallets.js +1 -1
- package/dist/ui.js +1 -1
- package/package.json +3 -3
- package/dist/chunk-CE7GKTQR.js +0 -1
- package/dist/esm/chunk-CE7GKTQR.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } }var
|
|
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 _chunkJMPXUULUjs = require('./chunk-JMPXUULU.js');var _chunkOWCFWPALjs = require('./chunk-OWCFWPAL.js');var _expolinking = require('expo-linking'); var l = _interopRequireWildcard(_expolinking);var _expowebbrowser = require('expo-web-browser'); var d = _interopRequireWildcard(_expowebbrowser);var _react = require('react');var _reactnative = require('react-native');var _jssdkcore = require('@privy-io/js-sdk-core');var _expoappleauthentication = require('expo-apple-authentication'); var c = _interopRequireWildcard(_expoappleauthentication);function M(e){return _chunkOWCFWPALjs.d.call(void 0, this,null,function*(){try{return yield c.signInAsync({state:e.state,requestedScopes:[c.AppleAuthenticationScope.EMAIL,c.AppleAuthenticationScope.FULL_NAME]})}catch(i){throw i instanceof Error&&"code"in i&&i.code==="ERR_REQUEST_CANCELED"?new (0, _jssdkcore.PrivyClientError)({error:"Apple login was cancelled",code:e.isLogin?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):i}})}var W=(e={})=>{let{oAuthState:i,setOAuthState:r,oAuthCallbacks:D,client:u}=_react.useContext.call(void 0, _chunkJMPXUULUjs._),j=_chunkJMPXUULUjs.e.call(void 0, ),a=e.action?e.action==="login":!j;_react.useEffect.call(void 0, ()=>{D.current={onSuccess:e.onSuccess,onError:e.onError}},[e.onSuccess,e.onError]);let v=_react.useCallback.call(void 0, U=>{var A;let n=_chunkJMPXUULUjs.g.call(void 0, U);return r({status:"error",error:n}),(A=e==null?void 0:e.onError)==null||A.call(e,n),n},[e==null?void 0:e.onError]);return{start:_react.useCallback.call(void 0, function(_e){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({provider:n,redirectUri:A,isLegacyAppleIosBehaviorEnabled:Q=!1,disableSignup:C,onAppleOAuthUserInfo:I}){var P,x,F;r({status:"loading"});let E=_chunkJMPXUULUjs.b.call(void 0, );try{if(E&&e.action==="login")throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_login_with_oauth_while_already_logged_in",error:"Already logged in, if trying to link an OAuth account use `useLinkWithOAuth`"});if(!E&&e.action==="link")throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_link_oauth_before_logged_in",error:"Must be logged in to link an OAuth account, use `useLoginWithOAuth`"});let h=l.createURL(A||"/"),{url:m}=yield u.auth.oauth.generateURL(n,h),t,_;if(_reactnative.Platform.OS==="ios"&&n==="apple"&&!Q){let g=(P=new URL(m).searchParams.get("state"))!=null?P:"",o=yield M({state:g,isLogin:a});if(console.log("credentials",o),!o.authorizationCode||!o.state)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:a?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(a){let k=_chunkJMPXUULUjs.a.call(void 0, ),N=yield u.auth.oauth.loginWithCode(o.authorizationCode,o.state,n,"raw",C?"no-signup":"login-or-sign-up",{embedded:k==null?void 0:k.embedded});t=N.user,_=N.is_new_user}else({user:t}=yield u.auth.oauth.linkWithCode(o.authorizationCode,o.state,n,"raw"));return I&&I({fullName:o.fullName,email:o.email}),(x=e==null?void 0:e.onSuccess)==null||x.call(e,t,_),r({status:"done"}),t!=null?t:void 0}let G=_reactnative.Platform.OS==="android"?m.replace("x.com","twitter.com"):m,p=yield d.openAuthSessionAsync(G,h,{createTask:!1});if(p.type!=="success")throw[d.WebBrowserResultType.CANCEL,d.WebBrowserResultType.DISMISS].includes(p.type)?new (0, _jssdkcore.PrivyClientError)({error:"OAuth was cancelled",code:a?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):new (0, _jssdkcore.PrivyClientError)({error:"OAuth session failed",code:a?"failed_to_complete_login_with_oauth":"failed_to_complete_link_with_oauth"});let{queryParams:J}=l.parse(p.url),{privy_oauth_state:O,privy_oauth_code:y}=J;if(!y||!O)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:a?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(a){let w=_chunkJMPXUULUjs.a.call(void 0, ),g=yield u.auth.oauth.loginWithCode(y,O,n,void 0,C?"no-signup":"login-or-sign-up",{embedded:w==null?void 0:w.embedded});t=g.user,_=g.is_new_user}else({user:t}=yield u.auth.oauth.linkWithCode(y,O,n));return(F=e==null?void 0:e.onSuccess)==null||F.call(e,t,_),yield l.openURL(p.url.split("?")[0]),r({status:"done"}),t!=null?t:void 0}catch(h){throw v(h),h}})},[u,r,v]),state:i}};function le(e){let{state:i,start:r}=W(_chunkOWCFWPALjs.b.call(void 0, _chunkOWCFWPALjs.a.call(void 0, {},e),{action:"login"}));return{state:i,login:r}}function he(e){let{state:i,start:r}=W(_chunkOWCFWPALjs.b.call(void 0, _chunkOWCFWPALjs.a.call(void 0, {},e),{action:"link"}));return{state:i,link:r}}function ce(e){return W(e)}exports.a = le; exports.b = he; exports.c = ce;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"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 lt=_zustand.create.call(void 0, ()=>({status:"disconnected"})),pe=()=>lt.getState().onNeedsRecovery,Rr= exports.f =e=>{_react.useEffect.call(void 0, ()=>{lt.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 M = _interopRequireWildcard(_exposecurestore); var F = _interopRequireWildcard(_exposecurestore);var _jssdkcore = require('@privy-io/js-sdk-core'); var _jssdkcore2 = _interopRequireDefault(_jssdkcore);var mt=()=>{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 pt(e){return{get(t){return e.get(t.replaceAll(":","-"))},put(t,r){return e.put(t.replaceAll(":","-"),r)},del(t){return e.del(t.replaceAll(":","-"))},getKeys:()=>_chunkOWCFWPALjs.d.call(void 0, this,null,function*(){return[]})}}var ye={get(e){return M.getItemAsync(e,{keychainAccessible:M.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},put(e,t){return M.setItemAsync(e,t,{keychainAccessible:M.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},del(e){return M.deleteItemAsync(e,{keychainAccessible:M.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},getKeys:()=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){return[]})};var _expocrypto = require('expo-crypto');var yt={name:"@privy-io/expo",version:"0.57.0",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.0","@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 ft=({appId:e,clientId:t,storage:r=ye,supportedChains:n,baseUrl:i,logLevel:o})=>new (0, _jssdkcore2.default)({appId:e,clientId:t,supportedChains:n,storage:pt(r),sdkVersion:`expo:${yt.version}`,nativeAppIdentifier:mt(),crypto:{digest:_expocrypto.digest},baseUrl:i,logLevel:o});var _reactnative = require('react-native');var _reactfastcompare = require('react-fast-compare'); var _reactfastcompare2 = _interopRequireDefault(_reactfastcompare);var fe=_zustand.create.call(void 0, ()=>{}),ht=e=>fe.setState(t=>_reactfastcompare2.default.call(void 0, t,e)?t:e),x= exports.a =fe.getState;var _reactnativewebview = require('react-native-webview'); var _reactnativewebview2 = _interopRequireDefault(_reactnativewebview);function gt(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 vt(e){return _chunkOWCFWPALjs.d.call(void 0, this,null,function*(){switch(e.event){case"app:secure-storage:get":{let{key:t}=e.data,r=yield F.getItemAsync(Le(t),{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:r}}}case"app:secure-storage:remove":{let{key:t}=e.data,r=yield F.deleteItemAsync(Le(t),{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:r}}}case"app:secure-storage:set":{let{key:t,value:r}=e.data,n=yield F.setItemAsync(Le(t),r,{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 Le=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 Fe(e){V.setState(({user:t})=>_reactfastcompare2.default.call(void 0, t,e)?{}:{user:e})}var Te=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 qr={shouldUseAppBackedStorage:!0},wt=({client:e,isClientReady:t})=>{let r=_react.useRef.call(void 0, null);_react.useEffect.call(void 0, ()=>_reactnative.AppState.addEventListener("change",o=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){o==="active"&&((yield e.embeddedWallet.ping(500))||(Te("reloading"),e.embeddedWallet.reload()))})).remove,[e]);let n=_react.useCallback.call(void 0, i=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){var s;let{data:o}=i.nativeEvent,a=JSON.parse(o);if(gt(a)){let d=yield vt(a);(s=r.current)==null||s.postMessage(JSON.stringify(d));return}e.embeddedWallet.onMessage(a)}),[e]);return t?_react2.default.createElement(_reactnativewebview2.default,{style:{flex:1},ref:i=>{i&&(e.setMessagePoster(i),r.current=i)},cacheEnabled:!1,cacheMode:"LOAD_NO_CACHE",injectedJavaScriptObject:qr,source:{uri:e.embeddedWallet.getURL()},webviewDebuggingEnabled:e.logger.level==="DEBUG",onLoad:()=>Te("loaded"),onError:console.error,onMessage:n}):null};function St(o){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({client:e,setSolanaWallet:t,createSolanaWalletCallbacks:r,setSolanaRecoveryFlowState:n,opts:i}){var a,s,d;t({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,h;if(m){let y=p!=null?p:m,{entropyId:g,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:g,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,g,S),h=C.user}else{let y=yield e.embeddedWallet.createSolana({ethereumAccount:p}),g=_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, y.user).find(k=>k.wallet_index===0);if(!g)throw new (0, _jssdkcore.PrivyClientError)({error:"Embedded wallet account not created",code:"embedded_wallet_creation_error"});let S=p!=null?p:g,{entropyId:E,entropyIdVerifier:C}=_jssdkcore.getEntropyDetailsFromAccount.call(void 0, S);v=yield e.embeddedWallet.getSolanaProvider(g,E,C),h=y.user}let w=_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, h)[0];if(!w)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Unknown error creating solana wallet"});return(d=(s=r.current)==null?void 0:s.onSuccess)==null||d.call(s,v),t({status:"connected",publicKey:w.public_key}),n({status:"initial"}),v}catch(c){let u=c instanceof Error?c.message:"Error creating embedded wallet";throw t({status:"error",error:u}),n({status:"initial"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:u})}})}function ge(u){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({client:e,account:t,setWallet:r,recoverWalletCallbacks:n,recoveryMethod:i,setRecoveryFlowState:o,password:a,recoveryKey:s,recoveryToken:d,recoverySecretOverride:c}){var m,p,v,h;if(!t)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(!d)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!c)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Record name is required for icloud recovery method"});break;case"recovery-encryption-key":if(!s)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"recoveryKey is required for recovery-encryption-key recovery method"});break}r({status:"connecting",account:t});try{let w=yield e.embeddedWallet.getProvider(t,a,d,c,s);return r({status:"connected",provider:w,account:t}),o({status:"initial"}),(p=(m=n.current)==null?void 0:m.onSuccess)==null||p.call(m,w),w}catch(w){r({status:"needs-recovery",account:t}),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(h=(v=n.current)==null?void 0:v.onError)==null||h.call(v,y),y}})}function _t(s){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({client:e,account:t,entropyId:r,entropyIdVerifier:n,setSolanaWallet:i,recoverSolanaWalletCallbacks:o,setSolanaRecoveryFlowState:a}){var d,c,u,m;i({status:"connecting"});try{let p=yield e.embeddedWallet.getSolanaProvider(t,r,n);return i({status:"connected",publicKey:p._publicKey}),a({status:"initial"}),(c=(d=o.current)==null?void 0:d.onSuccess)==null||c.call(d,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 kt=({client:e,solanaWallet:t,setSolanaWallet:r,setSolanaRecoveryFlowState:n,createSolanaWalletCallbacks:i,recoverSolanaWalletCallbacks:o})=>{let a=A(),s=_react.useMemo.call(void 0, ()=>_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, a),[a]),d=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 h=s.map(S=>{let E=_jssdkcore.getEntropyDetailsFromUser.call(void 0, a,S);return E?{account:S,entropy:E}:null});if(h.some(S=>S===null))return[];let w=void 0,y=void 0,g=void 0;return h.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,g,k=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){var P;yield(P=pe())==null?void 0:P(k)}))}))},[s,a,e]),m=_react.useCallback.call(void 0, h=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){return yield St({client:e,setSolanaWallet:r,createSolanaWalletCallbacks:i,setSolanaRecoveryFlowState:n,opts:h})}),[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:h,entropyIdVerifier:w}=c;return _t({client:e,account:s[0],entropyId:h,entropyIdVerifier:w,setSolanaWallet:r,recoverSolanaWalletCallbacks:o,setSolanaRecoveryFlowState:n})}),[e,c,s,o,n,r]),v=_react.useCallback.call(void 0, ()=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){if(!c)throw r({status:"not-created"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});r(h=>h.status==="connected"?{status:"reconnecting"}:{status:"connecting"});try{let{entropyId:h,entropyIdVerifier:w}=c,y=yield e.embeddedWallet.getSolanaProvider(s[0],h,w);return r({status:"connected",publicKey:s[0].public_key}),y}catch(h){throw _jssdkcore.errorIndicatesRecoveryIsNeeded.call(void 0, h)?(r({status:"needs-recovery"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):h instanceof Error?(r({status:"error",error:h.message}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:h.message})):(r({status:"error",error:"Error loading embedded wallet"}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[s,e,c,r]);return _react.useEffect.call(void 0, ()=>{if(!a&&t.status!=="disconnected")return r({status:"disconnected"});d&&v().catch(()=>{})},[d,a]),_react.useEffect.call(void 0, ()=>{t.status==="error"&&t.error.includes("User must be logged in")&&v()},[t.status]),{create:m,recover:p,getProvider:v,wallets:u}};function ve(m){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({client:e,setWallet:t,createWalletCallbacks:r,recoveryMethod:n,setRecoveryFlowState:i,password:o,recoveryKey:a,recoveryToken:s,recoverySecretOverride:d,iCloudRecordNameOverride:c,solanaAccount:u}){var v,h;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(!d||!c)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery failed due to inability to store credentials"});break}t({status:"creating",account:null});let p=n==="icloud"?"icloud-native":n;try{let{user:w}=yield e.embeddedWallet.create({password:o,recoveryMethod:p,recoveryKey:a,recoveryToken:s,recoverySecretOverride:d,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 g=yield e.embeddedWallet.getProvider(y);return(h=(v=r.current)==null?void 0:v.onSuccess)==null||h.call(v,g),t({status:"connected",provider:g,account:y}),i({status:"initial"}),g}catch(w){let y=w instanceof Error?w.message:"Error creating embedded wallet";throw t({status:"error",error:y,account:null}),i({status:"initial"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:y})}})}function Wt(){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:t,client:r}){var s;if(_reactnative.Platform.OS==="android")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let i=yield Wt(),o=yield r.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:d,iCloudRecordName:c}=yield i.writeRecoverySecretToICloud({containerId:o.container_identifier,appId:t,userId:e.id});return{recoverySecret:d,iCloudRecordName:c}}catch(d){if(d instanceof Error){let c=(s=d.message.split("Caused by: ")[1])!=null?s:"Error writing to iCloud";throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:c})}throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}function we(n){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({walletAddress:e,client:t,chainType:r}){var c;if(_reactnative.Platform.OS==="android")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let i=yield Wt(),a=(yield t.recovery.getRecoveryKeyMaterial(e,r)).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 t.recovery.icloudAuth.getICloudConfiguration("expo-ios"),d=s==null?void 0:s.container_identifier;if(!d)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:d,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 G = _interopRequireWildcard(_expolinking); var $ = _interopRequireWildcard(_expolinking); var Ce = _interopRequireWildcard(_expolinking); var ke = _interopRequireWildcard(_expolinking); var tr = _interopRequireWildcard(_expolinking); var er = _interopRequireWildcard(_expolinking); var rr = _interopRequireWildcard(_expolinking); var nr = _interopRequireWildcard(_expolinking); var ar = _interopRequireWildcard(_expolinking); var cr = _interopRequireWildcard(_expolinking);var _expowebbrowser = require('expo-web-browser'); var xt = _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(t=>setTimeout(t,e));function be(){let e=_react.useRef.call(void 0, _reactnative.AppState.currentState);_react.useEffect.call(void 0, ()=>_reactnative.AppState.addEventListener("change",n=>{e.current=n}).remove,[]);function t(){return _reactnative.AppState.currentState}return{appState:e,getCurrentAppState:t}}function ne(i){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({provider:e,redirectUri:t,client:r,onError:n}){try{let o;switch(e){case"google-drive":{let{url:c}=yield r.recovery.auth.generateURL(G.createURL(t||"/"));o=c;break}default:throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid provider",code:"embedded_wallet_recovery_error"})}let a=yield xt.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}=G.parse(a.url),d;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"});d=yield Se({oAuthCode:u,oAuthState:c,client:r});break}default:throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth invalid provider",code:"embedded_wallet_recovery_error"})}return d}catch(o){throw n==null||n(_(o)),o}})}function Se(n){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({oAuthCode:e,oAuthState:t,client:r}){let{access_token:i}=yield r.recovery.auth.authorize(e,t);if(!i)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:"login_with_oauth_returned_with_invalid_credentials"});return i})}var to=2*60*1e3;function ro(e){let t;return new Promise((r,n)=>{t=G.addEventListener("url",o=>_chunkOWCFWPALjs.d.call(void 0, this,[o],function*({url:i}){if(!i)return;let{queryParams:a}=G.parse(i),{privy_oauth_state:s,privy_oauth_code:d}=a!=null?a:{};if(typeof d!="string"||typeof s!="string")return;let c=yield Se({client:e,oAuthCode:d,oAuthState:s});r(c)})),setTimeout(()=>{n(new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_set_recovery_error",error:"Failed to complete Google Drive recovery flow"}))},to)}).finally(()=>{t==null||t.remove()})}function _e(e){return _chunkOWCFWPALjs.d.call(void 0, this,null,function*(){let t;_reactnative.Platform.OS==="android"&&(t=ro(e));let r=yield ne({provider:"google-drive",client:e});return r!=null?r:yield t})}function Ee(o){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({client:e,recoveryInput:t,setWalletRecoveryCallbacks:r,setRecoveryFlowState:n,setWallet:i}){var a,s,d,c;try{let{provider:u,user:m}=yield e.embeddedWallet.setRecovery(t),p=u,v=_jssdkcore.getUserEmbeddedWallet.call(void 0, m);return i({status:"connected",provider:p,account:v}),(s=(a=r.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=(d=r.current)==null?void 0:d.onError)==null||c.call(d,m),n({status:"initial"}),m}})}function Ot(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 It=({client:e,appId:t,wallet:r,setWallet:n,setRecoveryFlowState:i,createWalletCallbacks:o,recoverWalletCallbacks:a,setWalletRecoveryCallbacks:s})=>{let d=A(),c=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, d),[d]),u=K(),m=_react.useCallback.call(void 0, y=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){var le,ue;if(c)throw new (0, _jssdkcore.PrivyClientError)({error:"This user already has an embedded wallet",code:"embedded_wallet_already_exists"});let{user:g}=yield e.user.get(),{password:S,recoveryMethod:E,recoveryKey:C}=Ot(y),k,P,L;if(E==="google-drive"&&(k=yield ne({provider:E,client:e,onError:(le=o.current)==null?void 0:le.onError}),i({status:"creating-wallet"}),!k))return null;if(E==="icloud"){if(!g)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before creating a wallet with iCloud."});let{recoverySecret:Ae,iCloudRecordName:Ue}=yield oe({user:g,appId:t,client:e});P=Ae,L=Ue}return yield ve({client:e,setWallet:n,createWalletCallbacks:o,recoveryMethod:E,recoveryKey:C,setRecoveryFlowState:i,password:S,recoverySecretOverride:P,iCloudRecordNameOverride:L,solanaAccount:(ue=_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, g))!=null?ue:void 0})}),[e,c,d]),p=_react.useCallback.call(void 0, y=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){var E;if(r.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, d))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 g,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(g=yield ne({provider:y.recoveryMethod,client:e,onError:(E=s.current)==null?void 0:E.onError}),i({status:"upgrading-recovery"}),!g)return null;S={recoveryMethod:"google-drive",wallet:c,recoveryAccessToken:g};break;case"icloud":if(!d)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:d,appId:t,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 Ee({client:e,recoveryInput:S,setWalletRecoveryCallbacks:s,setRecoveryFlowState:i,setWallet:n})}),[e,c,r.status,d]),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,r.status]),h=_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:g,recoveryMethod:S,recoveryKey:E}=Ot(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(!d)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before recovering via iCloud."});let{recoverySecret:L}=yield we({client:e,walletAddress:c.address});k=L}return ge({client:e,account:c,setWallet:n,recoverWalletCallbacks:a,recoveryMethod:S,setRecoveryFlowState:i,recoveryKey:E,password:g,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(!d&&r.status!=="disconnected")return n({status:"disconnected",account:null});u&&w().catch(()=>{})},[u,d,c]),_react.useEffect.call(void 0, ()=>{r.status==="error"&&r.error.includes("User must be logged in")&&w()},[r.status]),{create:m,recover:h,setPassword:v,setRecovery:p,getProvider:w}};var Mt=({client:e,isReady:t})=>{let r=A(),n=fe(a=>a==null?void 0:a.customAuth),[i,o]=_react.useState.call(void 0, {status:"initial"});return _react.useEffect.call(void 0, ()=>{(()=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){if(!(n!=null&&n.enabled)){o({status:"not-enabled"});return}o({status:"loading"});let{getCustomAccessToken:s,isLoading:d}=n;if(!(!t||d))try{let c=yield s();if(!c&&r){yield e.auth.logout(),o({status:"done"});return}if(!c){o({status:"done"});return}if(r){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}),r)throw yield e.auth.logout(),new (0, _jssdkcore.PrivyClientError)({error:"Third-party auth failed",code:"third_party_auth_error"})}}))()},[e,r,t,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 Ft=({client:e,createWalletCallbacks:t,recoverWalletCallbacks:r,setWalletRecoveryCallbacks:n,recoveryFlowState:i,oAuthState:o,setRecoveryFlowState:a,setWallet:s,appStateVisible:d})=>{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, h=>{var y,g,S,E;let w=_(h);i.status==="creating-wallet"?(g=(y=t.current).onError)==null||g.call(y,_(w)):(E=(S=r.current).onError)==null||E.call(S,_(w)),a({status:"initial"})},[i]);return _react.useEffect.call(void 0, ()=>{function h(){return _chunkOWCFWPALjs.d.call(void 0, this,null,function*(){var S;if(!c&&i.status!=="initial"&&d&&v(new Error("Recovery OAuth session failed")),!c||i.status==="initial"||o.status!=="initial"||!d||!p)return;let{queryParams:w}=$.parse(c),{privy_oauth_state:y,privy_oauth_code:g}=w;if(!(!g||!y)){yield $.openURL(c.split("?")[0]);try{let E=yield Se({oAuthCode:g,oAuthState:y,client:e});if(i.status==="creating-wallet"){let C=(S=_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, u))!=null?S:void 0;yield ve({client:e,setWallet:s,createWalletCallbacks:t,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 Ee({client:e,recoveryInput:{recoveryMethod:"google-drive",wallet:m,recoveryAccessToken:E},setWalletRecoveryCallbacks:n,setRecoveryFlowState:a,setWallet:s})}else yield ge({client:e,account:m,setWallet:s,recoverWalletCallbacks:r,recoveryMethod:"google-drive",setRecoveryFlowState:a,recoveryToken:E})}catch(E){v(E)}}})}_reactnative.Platform.OS==="android"&&h()},[c,i.status,d,p])};var Tt=({client:e,isUserInitialized:t,setIsUserInitialized:r,setError:n})=>{_react.useEffect.call(void 0, ()=>{t||(()=>_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{r(!0)}}))()},[e,t,n,r])};var Ms=e=>{let{client:t,setSiweState:r,siweState:n}=_react.useContext.call(void 0, f),i=_react.useCallback.call(void 0, s=>{var c;let d=_(s);return r({status:"error",error:d}),(c=e==null?void 0:e.onError)==null||c.call(e,d),d},[e==null?void 0:e.onError]),o=_react.useCallback.call(void 0, u=>_chunkOWCFWPALjs.d.call(void 0, void 0,[u],function*({wallet:s,from:{domain:d,uri:c}}){var m;try{r({status:"generating-message"});let p=yield t.auth.siwe.init(s,d,c);return r({status:"awaiting-signature"}),(m=e==null?void 0:e.onGenerateMessage)==null||m.call(e,p.message),p.message}catch(p){throw i(p)}}),[t,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:d,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"});r({status:"submitting-signature"});let v=x(),h=yield t.auth.siwe.loginWithSiwe(s,void 0,d,c?"no-signup":"login-or-sign-up",{embedded:v==null?void 0:v.embedded});return r({status:"done"}),(m=e==null?void 0:e.onSuccess)==null||m.call(e,h.user,h.is_new_user),h.user}catch(p){throw i(p)}}),[t,i,e==null?void 0:e.onSuccess]),generateSiweMessage:o,state:n}};var O=()=>{let{client:e}=_react.useContext.call(void 0, f);return e};var qs=()=>{let e=O(),t=_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]),r=_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(d){throw _(d)}}),[e]);return{generateMessage:t,link:r}};var ec=()=>{let e=O(),t=_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]),r=_react.useCallback.call(void 0, d=>_chunkOWCFWPALjs.d.call(void 0, void 0,[d],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:t,login:r}};var cc=e=>{let{client:t}=_react.useContext.call(void 0, f),r=_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:d}=yield t.auth.siwe.unlinkWallet(i);return(a=e==null?void 0:e.onSuccess)==null||a.call(e,d),d}catch(s){throw r(s)}}),[t,r,e==null?void 0:e.onSuccess])}};var hc=e=>{let[t,r]=_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;r(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]),d=_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 h=u||t;if(!h)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid email before calling `linkWithCode`"});o({status:"submitting-code"});let{user:w}=yield n.auth.email.linkWithCode(h,c);return o({status:"done"}),(p=e==null?void 0:e.onLinkSuccess)==null||p.call(e,w),w}catch(v){throw a(v)}}),[t,o,n,e,a]);return{sendCode:s,linkWithCode:d,state:i}};var kc=e=>{let[t,r]=_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;r(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]),d=_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||t;if(!w)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid email before calling `loginWithCode`"});o({status:"submitting-code"});let y=x(),g=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,g.user,g.is_new_user),g==null?void 0:g.user}catch(h){throw a(h)}}),[t,o,n,e,a]);return{sendCode:s,loginWithCode:d,state:i}};var Ic=e=>{let[t,r]=_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;r(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]),d=_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||t))throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid phone number before calling `linkWithCode`"});o({status:"submitting-code"});let{user:w}=yield n.auth.phone.linkWithCode(u||t,c);return o({status:"done"}),(p=e==null?void 0:e.onLinkSuccess)==null||p.call(e,w),w}catch(v){throw a(v)}}),[t,o,n,e,a]);return{sendCode:s,linkWithCode:d,state:i}};var Kc=e=>{let[t,r]=_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;r(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]),d=_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||t))throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid phone number before calling `loginWithCode`"});o({status:"submitting-code"});let y=x(),g=yield n.auth.phone.loginWithCode(u||t,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,g.user,g.is_new_user),g==null?void 0:g.user}catch(h){throw a(h)}}),[t,o,n,e,a]);return{sendCode:s,loginWithCode:d,state:i}};var $c=e=>{let{appState:t,getCurrentAppState:r}=be(),{client:n,farcasterState:i,setFarcasterState:o}=_react.useContext.call(void 0, f),a=_react.useRef.call(void 0, !1),s=_react.useCallback.call(void 0, u=>{var p;let m=_(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]),d=_react.useCallback.call(void 0, ()=>{a.current=!0},[]);return{linkWithFarcaster:_react.useCallback.call(void 0, (v,...h)=>_chunkOWCFWPALjs.d.call(void 0, void 0,[v,...h],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:g,channel_token:S}=yield n.auth.farcaster.initializeAuth({relyingParty:u,redirectUrl:Ce.createURL(m!=null?m:"/")});if(!g)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_generate_farcaster_uri",error:"Failed to generate farcaster uri"});if(!S)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_generate_farcaster_channel_token",error:"Failed to generate farcaster channel token"});yield Ce.openURL(g),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(t.current!=="active"&&r()!=="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:d}};var rd=e=>{let{client:t}=_react.useContext.call(void 0, f),r=_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 t.auth.farcaster.unlink({fid:i});return(a=e==null?void 0:e.onSuccess)==null||a.call(e,s),s}catch(s){throw r(s)}}),[t,e==null?void 0:e.onSuccess,r])}};var ud=e=>{let{appState:t,getCurrentAppState:r}=be(),{client:n,farcasterState:i,setFarcasterState:o}=_react.useContext.call(void 0, f),a=_react.useRef.call(void 0, !1),s=_react.useCallback.call(void 0, u=>{var p;let m=_(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]),d=_react.useCallback.call(void 0, ()=>{a.current=!0},[]);return{loginWithFarcaster:_react.useCallback.call(void 0, (h,...w)=>_chunkOWCFWPALjs.d.call(void 0, void 0,[h,...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:ke.createURL(m!=null?m:"/")});if(!S)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_generate_farcaster_uri",error:"Failed to generate farcaster uri"});if(!E)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_generate_farcaster_channel_token",error:"Failed to generate farcaster channel token"});yield ke.openURL(S),o({status:"polling-status"});let C=0;for(;C<v.pollAttempts;){if(a.current)throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_canceled",error:"Farcaster polling canceled"});if(t.current!=="active"&&r()!=="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(),L=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,L.user,L.is_new_user),L.user}C++,yield J(v.pollIntervalMs)}throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(g){throw s(g)}}),[n,s,e==null?void 0:e.onSuccess,o,t]),state:i,cancel:d}};var $e=_zustand.create.call(void 0, ()=>({status:"initial"})),H=e=>$e.setState(e,!0),Go=$e.getState,Sd= exports.x =()=>{let{client:e}=_react.useContext.call(void 0, f),t=$e(),r=_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=Go().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(),d=yield e.auth.farcasterV2.authenticate(i,{embedded:s==null?void 0:s.embedded});return H({status:"done"}),setTimeout(()=>H({status:"initial"}),1500),{user:d.user}}catch(a){let s=_(a);throw H({status:o,error:s}),s}}),[e]);return{init:r,login:n,state:t}};var Wd=e=>{let{client:t}=_react.useContext.call(void 0, f),r=_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{unlinkOAuth:_react.useCallback.call(void 0, a=>_chunkOWCFWPALjs.d.call(void 0, void 0,[a],function*({provider:i,subject:o}){var s;try{let{user:d}=yield t.auth.oauth.unlink(i,o);return(s=e==null?void 0:e.onSuccess)==null||s.call(e,d),d}catch(d){throw r(d)}}),[t,e==null?void 0:e.onSuccess,r])}};var Od=e=>{let{client:t}=_react.useContext.call(void 0, f),r=_react.useRef.call(void 0, e.onOAuthTokenGrant);r.current=e.onOAuthTokenGrant,_react.useEffect.call(void 0, ()=>{let{unsubscribe:n}=t.addOAuthTokensListener(i=>{r.current(i)});return n},[t])};var Td=()=>{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,t){return e.linked_accounts.filter(_jssdkcore.isEmbeddedWalletAccount).find(r=>r.address===t)}function Qe(e){let t=b();if(!t)throw new Error("User must be authenticated to perform this operation");let r=Zo(t,e);if(!r)throw new Error(`No wallet found with address ${e}`);return r}var qd=()=>{let{client:e}=_react.useContext.call(void 0, f);return _react.useMemo.call(void 0, ()=>({addSessionSigners:({address:t,signers:r})=>_jssdkcore.addSessionSigners.call(void 0, {client:e,wallet:Qe(t),signers:r.map(n=>({signer_id:n.signerId,override_policy_ids:n.policyIds}))}),removeSessionSigners:({address:t})=>_jssdkcore.removeSessionSigners.call(void 0, {client:e,wallet:Qe(t)})}),[e])};var Xd=()=>{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:r}){Yt(),yield e.auth.email.sendCode(r)})},updateEmail(i){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({newEmailAddress:r,code:n}){let{address:o}=Yt(),{user:a}=yield e.auth.email.updateEmail({oldEmailAddress:o,newEmailAddress:r,code:n});return a})}}),[e])};function Yt(){let t=sn().linked_accounts.find(r=>r.type==="email");if(!t)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 t}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 il=()=>{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:r}){Qt(),yield e.auth.phone.sendCode(r)})},updatePhone(i){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({newPhoneNumber:r,code:n}){let{phoneNumber:o}=Qt(),{user:a}=yield e.auth.phone.updatePhone({oldPhoneNumber:o,newPhoneNumber:r,code:n});return a})}}),[e])};function Qt(){let t=ln().linked_accounts.find(r=>r.type==="phone");if(!t)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 t}function ln(){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,t)=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){let r=yield ce.openAuthSessionAsync(e,t,{createTask:!1});if(r.type!=="success")throw r.type===ce.WebBrowserResultType.CANCEL||r.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(r.url)});function un(e){let{queryParams:t}=er.parse(e);return t}var hl=()=>{let{client:e}=_react.useContext.call(void 0, f),t=_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 t({providerAppId:n,redirectUrl:tr.createURL(i||"/")});return{user:s}}),[t])}};var Cl=()=>{let{client:e}=_react.useContext.call(void 0, f),t=_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 t({providerAppId:n,redirectUrl:rr.createURL(i||"/")})}}),[t])}};var Ol=()=>{let{client:e}=_react.useContext.call(void 0, f),t=_react.useMemo.call(void 0, ()=>_jssdkcore.crossApp.wallet.signMessage({client:e,openAuthSession:T}),[e]);return _react.useMemo.call(void 0, ()=>({signMessage:({address:r,message:n,redirectUri:i="/"})=>t({user:b(),address:r,message:n,redirectUrl:nr.createURL(i)})}),[t])};var Dl=()=>{let{client:e}=_react.useContext.call(void 0, f),t=_react.useMemo.call(void 0, ()=>_jssdkcore.crossApp.wallet.signTypedData({client:e,openAuthSession:T}),[e]);return _react.useMemo.call(void 0, ()=>({signTypedData:({address:r,typedData:n,redirectUri:i="/"})=>t({user:b(),address:r,typedData:n,redirectUrl:ar.createURL(i)})}),[t])};var ql=()=>{let{client:e}=_react.useContext.call(void 0, f),t=_react.useMemo.call(void 0, ()=>_jssdkcore.crossApp.wallet.sendTransaction({client:e,openAuthSession:T}),[e]);return _react.useMemo.call(void 0, ()=>({sendTransaction:({address:r,transaction:n,redirectUri:i="/"})=>t({user:b(),address:r,transaction:n,redirectUrl:cr.createURL(i)})}),[t])};var eu=()=>{let{client:e}=_react.useContext.call(void 0, f);return{setRecovery:_react.useCallback.call(void 0, r=>_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(d){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:r.recoveryMethod});let a=yield Ln({appId:i,client:e,user:n,primaryAccount:o,recoveryParams:r});try{let{user:d}=yield e.embeddedWallet.setRecovery(a);return{user:d}}catch(d){throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_set_recovery_error",error:d instanceof Error?d.message:"Error setting password on embedded wallet"})}}),[e])}},Ln=o=>_chunkOWCFWPALjs.d.call(void 0, void 0,[o],function*({appId:e,client:t,user:r,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 _e(t);return{recoveryMethod:"google-drive",wallet:n,recoveryAccessToken:a}}case"icloud":{let{recoverySecret:a,iCloudRecordName:s}=yield oe({appId:e,client:t,user:r});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 du=()=>{let{client:e}=_react.useContext.call(void 0, f);return{recover:_react.useCallback.call(void 0, r=>_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,d;switch(r.recoveryMethod){case"user-passcode":a=r.password;break;case"google-drive":s=yield _e(e);break;case"icloud":let{recoverySecret:u}=yield we({client:e,walletAddress:i.address,chainType:i.chain_type});d=u;break;case"recovery-encryption-key":o=r.recoveryKey;break;case"privy":break;default:throw new (0, _jssdkcore.PrivyClientError)({code:"unsupported_recovery_method",error:`Unsupported recovery options ${r}`})}try{i.chain_type==="ethereum"?yield e.embeddedWallet.getProvider(i,a,s,d,o):i.chain_type==="solana"&&(yield e.embeddedWallet.getSolanaProvider(i,i.address,"solana-address-verifier",a,s,d))}catch(u){throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"})}}),[e])}};var Ze=(e={})=>{let{wallet:t,createWalletCallbacks:r,recoverWalletCallbacks:n,setWalletRecoveryCallbacks:i}=_react.useContext.call(void 0, f),{onCreateWalletSuccess:o,onCreateWalletError:a,onRecoverWalletError:s,onRecoverWalletSuccess:d,onSetWalletRecoverySuccess:c,onSetWalletRecoveryError:u}=e;return _react.useEffect.call(void 0, ()=>{r.current={onSuccess:o,onError:a}},[o,a]),_react.useEffect.call(void 0, ()=>{n.current={onSuccess:d,onError:s}},[d,s]),_react.useEffect.call(void 0, ()=>{i.current={onSuccess:c,onError:u}},[d,s]),t};var gu=({onStateChange:e})=>{let t=Ze();return _react.useEffect.call(void 0, ()=>{e(t)},[t])};var Su=()=>{let{getIdentityToken:e}=_react.useContext.call(void 0, f);return{getIdentityToken:e}};var Au=e=>{let{client:t}=_react.useContext.call(void 0, f),r=_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 t.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 r(o)}}),[t,r,e==null?void 0:e.onSuccess])}};function Mu({onMfaRequired:e}){let{client:t}=_react.useContext.call(void 0, f);_react.useEffect.call(void 0, ()=>{function r(){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 t.mfaPromises.on("mfaRequired",r),()=>{t.mfaPromises.off("mfaRequired",r)}},[t,e])}var Jn=e=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){var n;let r=yield(yield Promise.resolve().then(() => _interopRequireWildcard(require("react-native-passkeys")))).create({rp:e.rp,user:e.user,challenge:e.challenge,pubKeyCredParams:e.pubKeyCredParams,excludeCredentials:e.excludeCredentials,authenticatorSelection:e.authenticatorSelection,timeout:12e4});if(!r)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_create_passkey",error:"Could not create passkey"});return _chunkOWCFWPALjs.b.call(void 0, _chunkOWCFWPALjs.a.call(void 0, {},r),{type:(n=r.type)!=null?n:"public-key",clientExtensionResults:{}})});var tt=e=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){var n;let r=yield(yield Promise.resolve().then(() => _interopRequireWildcard(require("react-native-passkeys")))).get({rpId:e.rpId,challenge:e.challenge,allowCredentials:e.allowCredentials,timeout:12e4});if(!r)throw new (0, _jssdkcore.PrivyClientError)({code:"no_passkey_found_for_challenge",error:"Could not find a matching passkey to login with"});return _chunkOWCFWPALjs.b.call(void 0, _chunkOWCFWPALjs.a.call(void 0, {},r),{type:(n=r.type)!=null?n:"public-key",clientExtensionResults:{}})});function lr(e){var t;return{id:e.id,client_extension_results:{app_id:e.clientExtensionResults.appid,cred_props:e.clientExtensionResults.credProps,hmac_create_secret:e.clientExtensionResults.hmacCreateSecret},raw_id:e.rawId,type:e.type,authenticator_attachment:(t=e.authenticatorAttachment)!=null?t:"platform",response:{authenticator_data:e.response.authenticatorData,client_data_json:e.response.clientDataJSON,signature:e.response.signature,user_handle:e.response.userHandle}}}function ur(e){var t,r,n,i;return{challenge:e.challenge,rpId:e.rp_id,extensions:{appid:(t=e.extensions)==null?void 0:t.app_id,credProps:(r=e.extensions)==null?void 0:r.cred_props,hmacCreateSecret:(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 Yu(e){var t,r,n,i,o,a,s,d;return{rp:e.rp,user:{id:e.user.id,name:e.user.name,displayName:e.user.display_name},challenge:e.challenge,pubKeyCredParams:e.pub_key_cred_params,extensions:{hmacCreateSecret:(t=e.extensions)==null?void 0:t.hmac_create_secret,credProps:(n=(r=e.extensions)==null?void 0:r.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:(d=e.authenticator_selection)==null?void 0:d.require_resident_key}}}function em(){let{client:e}=_react.useContext.call(void 0, f),t=_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:d}=yield e.mfa.passkey.generateAuthenticationOptions({relying_party:o.relyingParty||((s=(a=x())==null?void 0:a.mfa)==null?void 0:s.relyingParty)});return ur(d);case"totp":return;default:throw new Error(`Unsupported MFA method: ${o.mfaMethod}`)}}),[e]),r=_react.useCallback.call(void 0, o=>_chunkOWCFWPALjs.d.call(void 0, this,null,function*(){var a,s,d,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"});(d=e.mfaPromises.rootPromise.current)==null||d.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,g)=>{e.mfaPromises.submitPromise.current={resolve:y,reject:g}});break;case"passkey":if(typeof o.mfaCode=="string")throw new (0, _jssdkcore.PrivyClientError)({code:"invalid_passkey_response",error:"Invalid authenticator response"});let v=yield tt(o.mfaCode),h=lr(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:h}),yield new Promise((y,g)=>{e.mfaPromises.submitPromise.current={resolve:y,reject:g}});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:t,submit:r,prompt:n,cancel:i}}function im(){let{client:e}=_react.useContext.call(void 0, f),t=_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]),r=_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:t,submitMfaEnrollment:r,unenrollMfa:n}}var ri=()=>{let e=A(),t=O(),r=_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:d}})=>({address:a.address,walletIndex:a.wallet_index,chainType:a.chain_type,getProvider:()=>t.embeddedWallet.getEthereumProvider({wallet:a,entropyId:s,entropyIdVerifier:d,onNeedsRecovery:c=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){var u;yield(u=pe())==null?void 0:u(c)})})}))},[t,e]),n=_react.useCallback.call(void 0, (...o)=>_chunkOWCFWPALjs.d.call(void 0, void 0,[...o],function*({createAdditional:i=!1}={}){let{user:a}=yield t.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 d=_jssdkcore.getEntropyDetailsFromUser.call(void 0, a);if(!d){let h=yield t.embeddedWallet.create({});return ot(h.user,0),{user:h.user}}let{entropyId:c,entropyIdVerifier:u}=d;if(u==="solana-address-verifier"){let h=_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, a),w=yield t.embeddedWallet.create({solanaAccount:h});return ot(w.user,0),{user:w.user}}let p=s.map(h=>h.wallet_index).reduce((h,w)=>Math.max(h,w),0)+1,v=yield t.embeddedWallet.add({chainType:"ethereum",hdWalletIndex:p,entropyId:c,entropyIdVerifier:u});return ot(v.user,p),{user:v.user}}),[t]);return{wallets:r,create:n}};function ot(e,t){let r=_jssdkcore.getAllUserEmbeddedEthereumWallets.call(void 0, e).find(n=>n.wallet_index===t);if(!e||!r)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Unknown error creating wallet"})}var ni=(e={})=>{let{solanaWallet:t,createSolanaWalletCallbacks:r,recoverSolanaWalletCallbacks:n}=_react.useContext.call(void 0, f),{onCreateWalletSuccess:i,onCreateWalletError:o,onRecoverWalletError:a,onRecoverWalletSuccess:s}=e;return _react.useEffect.call(void 0, ()=>{r.current={onSuccess:i,onError:o}},[i,o]),_react.useEffect.call(void 0, ()=>{n.current={onSuccess:s,onError:a}},[s,a]),t};var ci=()=>{let e=A(),t=O(),r=_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(d=>({address:d.address,walletIndex:d.wallet_index,publicKey:d.public_key,chainType:d.chain_type,getProvider:()=>_jssdkcore.isUnifiedWallet.call(void 0, d)?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"})):t.embeddedWallet.getBitcoinProvider({wallet:d,entropyId:a,entropyIdVerifier:s})}))},[t,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=t.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:d}=yield t.user.get(),c=_jssdkcore.getEntropyDetailsFromUser.call(void 0, d);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, d).filter(g=>g.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(g=>g.wallet_index),0)+1,h=yield t.embeddedWallet.add({chainType:i,hdWalletIndex:v,entropyId:u,entropyIdVerifier:m}),w=_jssdkcore.getAllUserEmbeddedBitcoinWallets.call(void 0, h.user).find(g=>g.chain_type===i&&g.wallet_index===v);if(!h.user||!w)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Unknown error creating wallet"});return{user:h.user,provider:yield t.embeddedWallet.getBitcoinProvider({wallet:w,entropyId:u,entropyIdVerifier:m})}}),[t]);return{wallets:r,create:n}};var at=()=>{let{isReady:e,logout:t,getAccessToken:r,error:n}=_react.useContext.call(void 0, f);return{user:A(),isReady:e,error:n,logout:t,getAccessToken:r}};var mi=()=>{let e=O();return _react.useMemo.call(void 0, ()=>({generateAuthorizationSignature(r){return _chunkOWCFWPALjs.d.call(void 0, this,null,function*(){let{signature:n}=yield _jssdkcore.generateAuthorizationSignature.call(void 0, (...i)=>e.embeddedWallet.signWithUserSigner(...i),r);return{signature:n}})}}),[e])};function hr(e,t){return _chunkOWCFWPALjs.d.call(void 0, this,null,function*(){var i;let r=(i=_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, t))!=null?i:_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, t);if(!r||_jssdkcore.isUnifiedWallet.call(void 0, r)||r.imported||_jssdkcore.getAllUserEmbeddedBitcoinWallets.call(void 0, t).length>0)return;let n=t.linked_accounts.filter(_jssdkcore.isEmbeddedWalletAccount).filter(o=>!o.imported).filter(o=>o.chain_type==="ethereum"||o.chain_type==="solana");r.chain_type==="ethereum"?yield e.embeddedWallet.getProvider(r):r.chain_type==="solana"&&(yield e.embeddedWallet.getSolanaProvider(r,r.address,"solana-address-verifier")),yield e.embeddedWallet.delegateWallets({rootWallet:{address:r.address,chainType:r.chain_type,imported:r.imported},delegatedWallets:n.map(o=>({address:o.address,chainType:o.chain_type,walletIndex:o.wallet_index}))}),yield e.user.get()})}var bi=()=>{let e=O(),{user:t}=at(),r=_react.useRef.call(void 0, !1);_react.useEffect.call(void 0, ()=>{var o;let n=e.app.getConfig();((o=n==null?void 0:n.embedded_wallet_config)==null?void 0:o.mode)==="user-controlled-server-wallets-only"&&t&&(r.current||(r.current=!0,hr(e,t).then(()=>{console.info("Migrated wallets for user")}).catch(a=>{console.warn("Unable to migrate wallets: ",a)}).finally(()=>{r.current=!1})))},[e,t])},Si=()=>(bi(),null),gr=Si;var f=_react.createContext.call(void 0, null),te;function Vp(e){return te?te.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 Kp=e=>{Pi();let[t,r]=_react.useState.call(void 0, _reactnative.AppState.currentState==="active");_react.useEffect.call(void 0, ()=>{let j=_reactnative.AppState.addEventListener("change",xr=>{r(xr==="active")});return()=>{j.remove()}},[]),_react.useEffect.call(void 0, ()=>ht(e.config),[e.config]);let[n,i]=_react.useState.call(void 0, !1),[o,a]=_react.useState.call(void 0, null),[s,d]=_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,h]=_react.useState.call(void 0, {status:"initial"}),[w,y]=_react.useState.call(void 0, {status:"initial"}),[g,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"}),[L,le]=_react.useState.call(void 0, {status:"initial"}),[ue,Ae]=_react.useState.call(void 0, {status:"initial"}),Ue=_react.useRef.call(void 0, {}),Re=_react.useRef.call(void 0, {}),Oe=_react.useRef.call(void 0, {}),Ie=_react.useRef.call(void 0, {}),ct=_react.useRef.call(void 0, {}),dt=_react.useRef.call(void 0, {}),me=_react.useCallback.call(void 0, j=>{if(j){Fe(j),a(null);return}Fe(null),h({status:"initial"}),y({status:"initial"}),u({status:"disconnected",account:null})},[]),R=_react.useMemo.call(void 0, ()=>{let j=e.storage||ye;return e.client?te=e.client:te=ft({appId:e.appId,clientId:e.clientId,supportedChains:e.supportedChains,storage:j,baseUrl:e.baseUrl,logLevel:e.logLevel}),te.setCallbacks({setUser:me,setIsReady:d}),te},[e.client,e.storage,e.appId,e.clientId,e.baseUrl,e.supportedChains,e.logLevel,me]),Sr=_react.useCallback.call(void 0, ()=>(me(null),R.auth.logout()),[me,R]),_r=_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]),Er=_react.useCallback.call(void 0, ()=>R.getIdentityToken(),[R]);Tt({client:R,isUserInitialized:n,setIsUserInitialized:i,setError:a});let Cr=It({client:R,appId:e.appId,createWalletCallbacks:Re,recoverWalletCallbacks:Oe,setWalletRecoveryCallbacks:Ie,setRecoveryFlowState:S,wallet:c,setWallet:u}),kr=kt({client:R,createSolanaWalletCallbacks:ct,recoverSolanaWalletCallbacks:dt,setSolanaRecoveryFlowState:C,solanaWallet:m,setSolanaWallet:p});Ft({client:R,createWalletCallbacks:Re,recoverWalletCallbacks:Oe,setWalletRecoveryCallbacks:Ie,recoveryFlowState:g,oAuthState:w,setRecoveryFlowState:S,setWallet:u,appStateVisible:t});let{customAuthStateIsSettled:Pr}=Mt({client:R,isReady:n}),Wr=K();return _react2.default.createElement(_react2.default.Fragment,null,_react2.default.createElement(f.Provider,{value:{client:R,isReady:Wr&&n&&Pr,error:o,logout:Sr,getAccessToken:_r,getIdentityToken:Er,wallet:_chunkOWCFWPALjs.a.call(void 0, _chunkOWCFWPALjs.a.call(void 0, {},c),Cr),solanaWallet:_chunkOWCFWPALjs.a.call(void 0, _chunkOWCFWPALjs.a.call(void 0, {},m),kr),oAuthState:w,oAuthCallbacks:Ue,recoveryFlowState:g,setRecoveryFlowState:S,solanaRecoveryFlowState:E,setSolanaRecoveryFlowState:C,createWalletCallbacks:Re,recoverWalletCallbacks:Oe,setWalletRecoveryCallbacks:Ie,createSolanaWalletCallbacks:ct,recoverSolanaWalletCallbacks:dt,setOAuthState:y,siweState:k,setSiweState:P,otpState:v,setOtpState:h,passkeyState:L,setPasskeyState:le,farcasterState:ue,setFarcasterState:Ae}},e.children,_react2.default.createElement(gr,null)),_react2.default.createElement(_reactnative.View,{style:{width:0,height:0,overflow:"hidden"}},_react2.default.createElement(wt,{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 $p=e=>{let{client:t,setSiweState:r,siweState:n}=_react.useContext.call(void 0, f),i=_react.useCallback.call(void 0, s=>{var c;let d=_(s);return r({status:"error",error:d}),(c=e==null?void 0:e.onError)==null||c.call(e,d),d},[e==null?void 0:e.onError]),o=_react.useCallback.call(void 0, u=>_chunkOWCFWPALjs.d.call(void 0, void 0,[u],function*({wallet:s,from:{domain:d,uri:c}}){var m;try{r({status:"generating-message"});let p=yield t.auth.siwe.init(s,d,c);return r({status:"awaiting-signature"}),(m=e==null?void 0:e.onGenerateMessage)==null||m.call(e,p.message),p.message}catch(p){throw i(p)}}),[t,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:d}){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"});r({status:"submitting-signature"});let{user:p}=yield t.auth.siwe.linkWithSiwe(s,void 0,d);return r({status:"done"}),(u=e==null?void 0:e.onSuccess)==null||u.call(e,p),p}catch(m){throw i(m)}}),[t,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 = Rr; exports.g = _; exports.h = J; exports.i = ye; exports.j = ft; exports.k = $p; exports.l = Ms; exports.m = O; exports.n = qs; exports.o = ec; exports.p = cc; exports.q = hc; exports.r = kc; exports.s = Ic; exports.t = Kc; exports.u = $c; exports.v = rd; exports.w = ud; exports.x = Sd; exports.y = Wd; exports.z = Od; exports.A = Td; exports.B = qd; exports.C = Xd; exports.D = il; exports.E = hl; exports.F = Cl; exports.G = Ol; exports.H = Dl; exports.I = ql; exports.J = eu; exports.K = du; exports.L = Ze; exports.M = gu; exports.N = Su; exports.O = Au; exports.P = Mu; exports.Q = Jn; exports.R = tt; exports.S = Yu; exports.T = em; exports.U = im; exports.V = ri; exports.W = ni; exports.X = ci; exports.Y = at; exports.Z = mi; exports._ = f; exports.$ = Vp; exports.aa = Kp;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as T,a as S,b as R,e as B,g as H}from"./chunk-
|
|
1
|
+
import{_ as T,a as S,b as R,e as B,g as H}from"./chunk-JMPXUULU.js";import{a as L,b,d as f}from"./chunk-OWCFWPAL.js";import*as l from"expo-linking";import*as d from"expo-web-browser";import{useCallback as z,useContext as V,useEffect as X}from"react";import{Platform as q}from"react-native";import{PrivyClientError as s}from"@privy-io/js-sdk-core";import*as c from"expo-apple-authentication";import{PrivyClientError as K}from"@privy-io/js-sdk-core";function M(e){return f(this,null,function*(){try{return yield c.signInAsync({state:e.state,requestedScopes:[c.AppleAuthenticationScope.EMAIL,c.AppleAuthenticationScope.FULL_NAME]})}catch(i){throw i instanceof Error&&"code"in i&&i.code==="ERR_REQUEST_CANCELED"?new K({error:"Apple login was cancelled",code:e.isLogin?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):i}})}var W=(e={})=>{let{oAuthState:i,setOAuthState:r,oAuthCallbacks:D,client:u}=V(T),j=B(),a=e.action?e.action==="login":!j;X(()=>{D.current={onSuccess:e.onSuccess,onError:e.onError}},[e.onSuccess,e.onError]);let v=z(U=>{var A;let n=H(U);return r({status:"error",error:n}),(A=e==null?void 0:e.onError)==null||A.call(e,n),n},[e==null?void 0:e.onError]);return{start:z(function(_e){return f(this,arguments,function*({provider:n,redirectUri:A,isLegacyAppleIosBehaviorEnabled:Q=!1,disableSignup:C,onAppleOAuthUserInfo:I}){var P,x,F;r({status:"loading"});let E=R();try{if(E&&e.action==="login")throw new s({code:"attempted_login_with_oauth_while_already_logged_in",error:"Already logged in, if trying to link an OAuth account use `useLinkWithOAuth`"});if(!E&&e.action==="link")throw new s({code:"attempted_link_oauth_before_logged_in",error:"Must be logged in to link an OAuth account, use `useLoginWithOAuth`"});let h=l.createURL(A||"/"),{url:m}=yield u.auth.oauth.generateURL(n,h),t,_;if(q.OS==="ios"&&n==="apple"&&!Q){let g=(P=new URL(m).searchParams.get("state"))!=null?P:"",o=yield M({state:g,isLogin:a});if(console.log("credentials",o),!o.authorizationCode||!o.state)throw new s({error:"OAuth invalid credentials",code:a?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(a){let k=S(),N=yield u.auth.oauth.loginWithCode(o.authorizationCode,o.state,n,"raw",C?"no-signup":"login-or-sign-up",{embedded:k==null?void 0:k.embedded});t=N.user,_=N.is_new_user}else({user:t}=yield u.auth.oauth.linkWithCode(o.authorizationCode,o.state,n,"raw"));return I&&I({fullName:o.fullName,email:o.email}),(x=e==null?void 0:e.onSuccess)==null||x.call(e,t,_),r({status:"done"}),t!=null?t:void 0}let G=q.OS==="android"?m.replace("x.com","twitter.com"):m,p=yield d.openAuthSessionAsync(G,h,{createTask:!1});if(p.type!=="success")throw[d.WebBrowserResultType.CANCEL,d.WebBrowserResultType.DISMISS].includes(p.type)?new s({error:"OAuth was cancelled",code:a?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):new s({error:"OAuth session failed",code:a?"failed_to_complete_login_with_oauth":"failed_to_complete_link_with_oauth"});let{queryParams:J}=l.parse(p.url),{privy_oauth_state:O,privy_oauth_code:y}=J;if(!y||!O)throw new s({error:"OAuth invalid credentials",code:a?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(a){let w=S(),g=yield u.auth.oauth.loginWithCode(y,O,n,void 0,C?"no-signup":"login-or-sign-up",{embedded:w==null?void 0:w.embedded});t=g.user,_=g.is_new_user}else({user:t}=yield u.auth.oauth.linkWithCode(y,O,n));return(F=e==null?void 0:e.onSuccess)==null||F.call(e,t,_),yield l.openURL(p.url.split("?")[0]),r({status:"done"}),t!=null?t:void 0}catch(h){throw v(h),h}})},[u,r,v]),state:i}};function le(e){let{state:i,start:r}=W(b(L({},e),{action:"login"}));return{state:i,login:r}}function he(e){let{state:i,start:r}=W(b(L({},e),{action:"link"}));return{state:i,link:r}}function ce(e){return W(e)}export{le as a,he as b,ce as c};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as W,b as N,d as l}from"./chunk-OWCFWPAL.js";import{useEffect as Ar}from"react";import{create as Ur}from"zustand";var lt=Ur(()=>({status:"disconnected"})),pe=()=>lt.getState().onNeedsRecovery,Rr=e=>{Ar(()=>{lt.setState({onNeedsRecovery:e==null?void 0:e.onNeedsRecovery})},[e==null?void 0:e.onNeedsRecovery])};import{applicationId as ut}from"expo-application";import*as M from"expo-secure-store";import{PrivyClientError as Or}from"@privy-io/js-sdk-core";var mt=()=>{if(typeof ut!="string")throw new Or({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 ut};function pt(e){return{get(t){return e.get(t.replaceAll(":","-"))},put(t,r){return e.put(t.replaceAll(":","-"),r)},del(t){return e.del(t.replaceAll(":","-"))},getKeys:()=>l(this,null,function*(){return[]})}}var ye={get(e){return M.getItemAsync(e,{keychainAccessible:M.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},put(e,t){return M.setItemAsync(e,t,{keychainAccessible:M.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},del(e){return M.deleteItemAsync(e,{keychainAccessible:M.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},getKeys:()=>l(void 0,null,function*(){return[]})};import{digest as Lr}from"expo-crypto";import Mr from"@privy-io/js-sdk-core";var yt={name:"@privy-io/expo",version:"0.57.0",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.0","@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 ft=({appId:e,clientId:t,storage:r=ye,supportedChains:n,baseUrl:i,logLevel:o})=>new Mr({appId:e,clientId:t,supportedChains:n,storage:pt(r),sdkVersion:`expo:${yt.version}`,nativeAppIdentifier:mt(),crypto:{digest:Lr},baseUrl:i,logLevel:o});import{useCallback as st,useContext as Wi}from"react";import{PrivyClientError as xi}from"@privy-io/js-sdk-core";import Z,{useState as I,useMemo as _i,createContext as Ei,useCallback as xe,useRef as ee,useEffect as vr,useContext as Ci}from"react";import{AppState as wr,View as ki}from"react-native";import{PrivyClientError as br}from"@privy-io/js-sdk-core";import Fr from"react-fast-compare";import{create as Tr}from"zustand";var fe=Tr(()=>{}),ht=e=>fe.setState(t=>Fr(t,e)?t:e),x=fe.getState;import jr from"react";import{useCallback as Vr,useEffect as Kr,useRef as Hr}from"react";import{AppState as zr}from"react-native";import Gr from"react-native-webview";import*as F from"expo-secure-store";function gt(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 vt(e){return l(this,null,function*(){switch(e.event){case"app:secure-storage:get":{let{key:t}=e.data,r=yield F.getItemAsync(Le(t),{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:r}}}case"app:secure-storage:remove":{let{key:t}=e.data,r=yield F.deleteItemAsync(Le(t),{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:r}}}case"app:secure-storage:set":{let{key:t,value:r}=e.data,n=yield F.setItemAsync(Le(t),r,{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 Le=e=>e.replaceAll(":","-");import Nr from"react-fast-compare";import{createStore as Dr,useStore as Me}from"zustand";var V=Dr()(()=>({user:null,proxyStatus:"loading"}));function b(){return V.getState().user}var Yi=V.subscribe.bind(V);function Fe(e){V.setState(({user:t})=>Nr(t,e)?{}:{user:e})}var Te=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 qr={shouldUseAppBackedStorage:!0},wt=({client:e,isClientReady:t})=>{let r=Hr(null);Kr(()=>zr.addEventListener("change",o=>l(void 0,null,function*(){o==="active"&&((yield e.embeddedWallet.ping(500))||(Te("reloading"),e.embeddedWallet.reload()))})).remove,[e]);let n=Vr(i=>l(void 0,null,function*(){var s;let{data:o}=i.nativeEvent,a=JSON.parse(o);if(gt(a)){let d=yield vt(a);(s=r.current)==null||s.postMessage(JSON.stringify(d));return}e.embeddedWallet.onMessage(a)}),[e]);return t?jr.createElement(Gr,{style:{flex:1},ref:i=>{i&&(e.setMessagePoster(i),r.current=i)},cacheEnabled:!1,cacheMode:"LOAD_NO_CACHE",injectedJavaScriptObject:qr,source:{uri:e.embeddedWallet.getURL()},webviewDebuggingEnabled:e.logger.level==="DEBUG",onLoad:()=>Te("loaded"),onError:console.error,onMessage:n}):null};import{useCallback as Ne,useEffect as Et,useMemo as De}from"react";import{errorIndicatesRecoveryIsNeeded as Jr,getAllUserEmbeddedSolanaWallets as Yr,getEntropyDetailsFromUser as Ct,PrivyClientError as re}from"@privy-io/js-sdk-core";import{getAllUserEmbeddedSolanaWallets as he,getEntropyDetailsFromAccount as bt,getUserEmbeddedEthereumWallet as Br,PrivyClientError as q}from"@privy-io/js-sdk-core";function St(o){return l(this,arguments,function*({client:e,setSolanaWallet:t,createSolanaWalletCallbacks:r,setSolanaRecoveryFlowState:n,opts:i}){var a,s,d;t({status:"creating"});try{let{user:c}=yield e.user.get(),u=he(c),m=u[0],p=(a=Br(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,h;if(m){let y=p!=null?p:m,{entropyId:g,entropyIdVerifier:S}=bt(y),E=Math.max(...u.map(P=>P.wallet_index),0)+1,C=yield e.embeddedWallet.add({chainType:"solana",entropyId:g,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,g,S),h=C.user}else{let y=yield e.embeddedWallet.createSolana({ethereumAccount:p}),g=he(y.user).find(k=>k.wallet_index===0);if(!g)throw new q({error:"Embedded wallet account not created",code:"embedded_wallet_creation_error"});let S=p!=null?p:g,{entropyId:E,entropyIdVerifier:C}=bt(S);v=yield e.embeddedWallet.getSolanaProvider(g,E,C),h=y.user}let w=he(h)[0];if(!w)throw new q({code:"embedded_wallet_creation_error",error:"Unknown error creating solana wallet"});return(d=(s=r.current)==null?void 0:s.onSuccess)==null||d.call(s,v),t({status:"connected",publicKey:w.public_key}),n({status:"initial"}),v}catch(c){let u=c instanceof Error?c.message:"Error creating embedded wallet";throw t({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 ge(u){return l(this,arguments,function*({client:e,account:t,setWallet:r,recoverWalletCallbacks:n,recoveryMethod:i,setRecoveryFlowState:o,password:a,recoveryKey:s,recoveryToken:d,recoverySecretOverride:c}){var m,p,v,h;if(!t)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(!d)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}r({status:"connecting",account:t});try{let w=yield e.embeddedWallet.getProvider(t,a,d,c,s);return r({status:"connected",provider:w,account:t}),o({status:"initial"}),(p=(m=n.current)==null?void 0:m.onSuccess)==null||p.call(m,w),w}catch(w){r({status:"needs-recovery",account:t}),o({status:"initial"});let y=new z({code:"embedded_wallet_recovery_error",error:w instanceof Error?w.message:"Error recovering embedded wallet"});throw(h=(v=n.current)==null?void 0:v.onError)==null||h.call(v,y),y}})}function _t(s){return l(this,arguments,function*({client:e,account:t,entropyId:r,entropyIdVerifier:n,setSolanaWallet:i,recoverSolanaWalletCallbacks:o,setSolanaRecoveryFlowState:a}){var d,c,u,m;i({status:"connecting"});try{let p=yield e.embeddedWallet.getSolanaProvider(t,r,n);return i({status:"connected",publicKey:p._publicKey}),a({status:"initial"}),(c=(d=o.current)==null?void 0:d.onSuccess)==null||c.call(d,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 kt=({client:e,solanaWallet:t,setSolanaWallet:r,setSolanaRecoveryFlowState:n,createSolanaWalletCallbacks:i,recoverSolanaWalletCallbacks:o})=>{let a=A(),s=De(()=>Yr(a),[a]),d=K(),c=De(()=>s.length===0?null:Ct(a),[a,s]),u=De(()=>{let h=s.map(S=>{let E=Ct(a,S);return E?{account:S,entropy:E}:null});if(h.some(S=>S===null))return[];let w=void 0,y=void 0,g=void 0;return h.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,g,k=>l(void 0,null,function*(){var P;yield(P=pe())==null?void 0:P(k)}))}))},[s,a,e]),m=Ne(h=>l(void 0,null,function*(){return yield St({client:e,setSolanaWallet:r,createSolanaWalletCallbacks:i,setSolanaRecoveryFlowState:n,opts:h})}),[e,i]),p=Ne(()=>l(void 0,null,function*(){if(!c)throw new re({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{entropyId:h,entropyIdVerifier:w}=c;return _t({client:e,account:s[0],entropyId:h,entropyIdVerifier:w,setSolanaWallet:r,recoverSolanaWalletCallbacks:o,setSolanaRecoveryFlowState:n})}),[e,c,s,o,n,r]),v=Ne(()=>l(void 0,null,function*(){if(!c)throw r({status:"not-created"}),new re({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});r(h=>h.status==="connected"?{status:"reconnecting"}:{status:"connecting"});try{let{entropyId:h,entropyIdVerifier:w}=c,y=yield e.embeddedWallet.getSolanaProvider(s[0],h,w);return r({status:"connected",publicKey:s[0].public_key}),y}catch(h){throw Jr(h)?(r({status:"needs-recovery"}),new re({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):h instanceof Error?(r({status:"error",error:h.message}),new re({code:"unknown_embedded_wallet_error",error:h.message})):(r({status:"error",error:"Error loading embedded wallet"}),new re({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[s,e,c,r]);return Et(()=>{if(!a&&t.status!=="disconnected")return r({status:"disconnected"});d&&v().catch(()=>{})},[d,a]),Et(()=>{t.status==="error"&&t.error.includes("User must be logged in")&&v()},[t.status]),{create:m,recover:p,getProvider:v,wallets:u}};import{useCallback as ie,useEffect as Ut,useMemo as io}from"react";import{getUserEmbeddedEthereumWallet as ao,getUserEmbeddedSolanaWallet as Rt,isUnifiedWallet as so,throwIfInvalidRecoveryUpgradePath as co}from"@privy-io/js-sdk-core";import{errorIndicatesRecoveryIsNeeded as lo,PrivyClientError as U}from"@privy-io/js-sdk-core";import{getUserEmbeddedEthereumWallet as $r}from"@privy-io/js-sdk-core";import{PrivyClientError as B}from"@privy-io/js-sdk-core";function ve(m){return l(this,arguments,function*({client:e,setWallet:t,createWalletCallbacks:r,recoveryMethod:n,setRecoveryFlowState:i,password:o,recoveryKey:a,recoveryToken:s,recoverySecretOverride:d,iCloudRecordNameOverride:c,solanaAccount:u}){var v,h;switch(n){case"user-passcode":if(!o)throw new B({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"recovery-encryption-key":if(!a)throw new B({code:"embedded_wallet_recovery_error",error:"key is required for recovery-encryption-key recovery method"});break;case"google-drive":if(!s)throw new B({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!d||!c)throw new B({code:"embedded_wallet_recovery_error",error:"iCloud recovery failed due to inability to store credentials"});break}t({status:"creating",account:null});let p=n==="icloud"?"icloud-native":n;try{let{user:w}=yield e.embeddedWallet.create({password:o,recoveryMethod:p,recoveryKey:a,recoveryToken:s,recoverySecretOverride:d,iCloudRecordNameOverride:c,solanaAccount:u}),y=$r(w);if(!y)throw new B({error:"Embedded wallet account not created",code:"embedded_wallet_creation_error"});let g=yield e.embeddedWallet.getProvider(y);return(h=(v=r.current)==null?void 0:v.onSuccess)==null||h.call(v,g),t({status:"connected",provider:g,account:y}),i({status:"initial"}),g}catch(w){let y=w instanceof Error?w.message:"Error creating embedded wallet";throw t({status:"error",error:y,account:null}),i({status:"initial"}),new B({code:"embedded_wallet_creation_error",error:y})}})}import{Platform as Pt}from"react-native";import{PrivyClientError as D}from"@privy-io/js-sdk-core";function Wt(){return l(this,null,function*(){try{return yield import("@privy-io/expo-native-extensions")}catch(e){throw new Error("@privy-io/expo-native-extensions not found. Ensure that you're explicitly including as a dependency, and running an Expo development build")}})}function oe(n){return l(this,arguments,function*({user:e,appId:t,client:r}){var s;if(Pt.OS==="android")throw new D({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let i=yield Wt(),o=yield r.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:d,iCloudRecordName:c}=yield i.writeRecoverySecretToICloud({containerId:o.container_identifier,appId:t,userId:e.id});return{recoverySecret:d,iCloudRecordName:c}}catch(d){if(d instanceof Error){let c=(s=d.message.split("Caused by: ")[1])!=null?s:"Error writing to iCloud";throw new D({code:"embedded_wallet_recovery_error",error:c})}throw new D({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}function we(n){return l(this,arguments,function*({walletAddress:e,client:t,chainType:r}){var c;if(Pt.OS==="android")throw new D({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let i=yield Wt(),a=(yield t.recovery.getRecoveryKeyMaterial(e,r)).icloud_record_name;if(!a)throw new D({code:"embedded_wallet_recovery_error",error:"iCloud recovery not properly backed up."});let s=yield t.recovery.icloudAuth.getICloudConfiguration("expo-ios"),d=s==null?void 0:s.container_identifier;if(!d)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:d,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 G from"expo-linking";import*as xt from"expo-web-browser";import{Platform as At}from"react-native";import{PrivyClientError as Y}from"@privy-io/js-sdk-core";import Aa from"react-fast-compare";import{PrivyApiError as Qr,PrivyClientError as Xr}from"@privy-io/js-sdk-core";function _(e){return e instanceof Error||e instanceof Qr||e instanceof Xr?e:typeof e=="string"?new Error(e):new Error("Unknown error")}var J=e=>new Promise(t=>setTimeout(t,e));import{useEffect as Zr,useRef as eo}from"react";import{AppState as je}from"react-native";function be(){let e=eo(je.currentState);Zr(()=>je.addEventListener("change",n=>{e.current=n}).remove,[]);function t(){return je.currentState}return{appState:e,getCurrentAppState:t}}function ne(i){return l(this,arguments,function*({provider:e,redirectUri:t,client:r,onError:n}){try{let o;switch(e){case"google-drive":{let{url:c}=yield r.recovery.auth.generateURL(G.createURL(t||"/"));o=c;break}default:throw new Y({error:"OAuth invalid provider",code:"embedded_wallet_recovery_error"})}let a=yield xt.openAuthSessionAsync(o);if(At.OS==="android")return;if(a.type!=="success")throw new Y({error:"Recovery OAuth session failed",code:"embedded_wallet_recovery_error"});let{queryParams:s}=G.parse(a.url),d;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"});d=yield Se({oAuthCode:u,oAuthState:c,client:r});break}default:throw new Y({error:"Recovery OAuth invalid provider",code:"embedded_wallet_recovery_error"})}return d}catch(o){throw n==null||n(_(o)),o}})}function Se(n){return l(this,arguments,function*({oAuthCode:e,oAuthState:t,client:r}){let{access_token:i}=yield r.recovery.auth.authorize(e,t);if(!i)throw new Y({error:"OAuth invalid credentials",code:"login_with_oauth_returned_with_invalid_credentials"});return i})}var to=2*60*1e3;function ro(e){let t;return new Promise((r,n)=>{t=G.addEventListener("url",o=>l(this,[o],function*({url:i}){if(!i)return;let{queryParams:a}=G.parse(i),{privy_oauth_state:s,privy_oauth_code:d}=a!=null?a:{};if(typeof d!="string"||typeof s!="string")return;let c=yield Se({client:e,oAuthCode:d,oAuthState:s});r(c)})),setTimeout(()=>{n(new Y({code:"embedded_wallet_set_recovery_error",error:"Failed to complete Google Drive recovery flow"}))},to)}).finally(()=>{t==null||t.remove()})}function _e(e){return l(this,null,function*(){let t;At.OS==="android"&&(t=ro(e));let r=yield ne({provider:"google-drive",client:e});return r!=null?r:yield t})}import{getUserEmbeddedWallet as oo,PrivyClientError as no}from"@privy-io/js-sdk-core";function Ee(o){return l(this,arguments,function*({client:e,recoveryInput:t,setWalletRecoveryCallbacks:r,setRecoveryFlowState:n,setWallet:i}){var a,s,d,c;try{let{provider:u,user:m}=yield e.embeddedWallet.setRecovery(t),p=u,v=oo(m);return i({status:"connected",provider:p,account:v}),(s=(a=r.current)==null?void 0:a.onSuccess)==null||s.call(a,p),n({status:"initial"}),p}catch(u){let m=new no({code:"embedded_wallet_set_recovery_error",error:u instanceof Error?u.message:"Error setting password on embedded wallet"});throw(c=(d=r.current)==null?void 0:d.onError)==null||c.call(d,m),n({status:"initial"}),m}})}function Ot(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 It=({client:e,appId:t,wallet:r,setWallet:n,setRecoveryFlowState:i,createWalletCallbacks:o,recoverWalletCallbacks:a,setWalletRecoveryCallbacks:s})=>{let d=A(),c=io(()=>ao(d),[d]),u=K(),m=ie(y=>l(void 0,null,function*(){var le,ue;if(c)throw new U({error:"This user already has an embedded wallet",code:"embedded_wallet_already_exists"});let{user:g}=yield e.user.get(),{password:S,recoveryMethod:E,recoveryKey:C}=Ot(y),k,P,L;if(E==="google-drive"&&(k=yield ne({provider:E,client:e,onError:(le=o.current)==null?void 0:le.onError}),i({status:"creating-wallet"}),!k))return null;if(E==="icloud"){if(!g)throw new U({code:"embedded_wallet_recovery_error",error:"User must be loaded before creating a wallet with iCloud."});let{recoverySecret:Ae,iCloudRecordName:Ue}=yield oe({user:g,appId:t,client:e});P=Ae,L=Ue}return yield ve({client:e,setWallet:n,createWalletCallbacks:o,recoveryMethod:E,recoveryKey:C,setRecoveryFlowState:i,password:S,recoverySecretOverride:P,iCloudRecordNameOverride:L,solanaAccount:(ue=Rt(g))!=null?ue:void 0})}),[e,c,d]),p=ie(y=>l(void 0,null,function*(){var E;if(r.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(Rt(d))throw new U({code:"embedded_wallet_set_recovery_error",error:"Cannot set user-controlled recovery for a user with an embedded Solana wallet."});if(so(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"});co({currentRecoveryMethod:c.recovery_method,upgradeToRecoveryMethod:y.recoveryMethod});let g,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(g=yield ne({provider:y.recoveryMethod,client:e,onError:(E=s.current)==null?void 0:E.onError}),i({status:"upgrading-recovery"}),!g)return null;S={recoveryMethod:"google-drive",wallet:c,recoveryAccessToken:g};break;case"icloud":if(!d)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:d,appId:t,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 Ee({client:e,recoveryInput:S,setWalletRecoveryCallbacks:s,setRecoveryFlowState:i,setWallet:n})}),[e,c,r.status,d]),v=ie(y=>l(void 0,null,function*(){return p({recoveryMethod:"user-passcode",password:y})}),[e,c,r.status]),h=ie(y=>l(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:g,recoveryMethod:S,recoveryKey:E}=Ot(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(!d)throw new U({code:"embedded_wallet_recovery_error",error:"User must be loaded before recovering via iCloud."});let{recoverySecret:L}=yield we({client:e,walletAddress:c.address});k=L}return ge({client:e,account:c,setWallet:n,recoverWalletCallbacks:a,recoveryMethod:S,setRecoveryFlowState:i,recoveryKey:E,password:g,recoveryToken:C,recoverySecretOverride:k})}),[e,c]),w=ie(()=>l(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 lo(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 Ut(()=>{if(!d&&r.status!=="disconnected")return n({status:"disconnected",account:null});u&&w().catch(()=>{})},[u,d,c]),Ut(()=>{r.status==="error"&&r.error.includes("User must be logged in")&&w()},[r.status]),{create:m,recover:h,setPassword:v,setRecovery:p,getProvider:w}};import{useEffect as uo,useState as mo}from"react";import{PrivyClientError as Lt}from"@privy-io/js-sdk-core";var Mt=({client:e,isReady:t})=>{let r=A(),n=fe(a=>a==null?void 0:a.customAuth),[i,o]=mo({status:"initial"});return uo(()=>{(()=>l(void 0,null,function*(){if(!(n!=null&&n.enabled)){o({status:"not-enabled"});return}o({status:"loading"});let{getCustomAccessToken:s,isLoading:d}=n;if(!(!t||d))try{let c=yield s();if(!c&&r){yield e.auth.logout(),o({status:"done"});return}if(!c){o({status:"done"});return}if(r){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 Lt({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}),r)throw yield e.auth.logout(),new Lt({error:"Third-party auth failed",code:"third_party_auth_error"})}}))()},[e,r,t,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 po,useEffect as yo,useMemo as fo}from"react";import{Platform as ho}from"react-native";import{getUserEmbeddedSolanaWallet as go,getUserEmbeddedWallet as vo}from"@privy-io/js-sdk-core";var Ft=({client:e,createWalletCallbacks:t,recoverWalletCallbacks:r,setWalletRecoveryCallbacks:n,recoveryFlowState:i,oAuthState:o,setRecoveryFlowState:a,setWallet:s,appStateVisible:d})=>{let c=$.useURL(),u=A(),m=fo(()=>vo(u),[u]),p=K(),v=po(h=>{var y,g,S,E;let w=_(h);i.status==="creating-wallet"?(g=(y=t.current).onError)==null||g.call(y,_(w)):(E=(S=r.current).onError)==null||E.call(S,_(w)),a({status:"initial"})},[i]);return yo(()=>{function h(){return l(this,null,function*(){var S;if(!c&&i.status!=="initial"&&d&&v(new Error("Recovery OAuth session failed")),!c||i.status==="initial"||o.status!=="initial"||!d||!p)return;let{queryParams:w}=$.parse(c),{privy_oauth_state:y,privy_oauth_code:g}=w;if(!(!g||!y)){yield $.openURL(c.split("?")[0]);try{let E=yield Se({oAuthCode:g,oAuthState:y,client:e});if(i.status==="creating-wallet"){let C=(S=go(u))!=null?S:void 0;yield ve({client:e,setWallet:s,createWalletCallbacks:t,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 Ee({client:e,recoveryInput:{recoveryMethod:"google-drive",wallet:m,recoveryAccessToken:E},setWalletRecoveryCallbacks:n,setRecoveryFlowState:a,setWallet:s})}else yield ge({client:e,account:m,setWallet:s,recoverWalletCallbacks:r,recoveryMethod:"google-drive",setRecoveryFlowState:a,recoveryToken:E})}catch(E){v(E)}}})}ho.OS==="android"&&h()},[c,i.status,d,p])};import{useEffect as wo}from"react";var Tt=({client:e,isUserInitialized:t,setIsUserInitialized:r,setError:n})=>{wo(()=>{t||(()=>l(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{r(!0)}}))()},[e,t,n,r])};import{useEffect as vi,useRef as wi}from"react";import{useCallback as Ve,useContext as bo}from"react";import{PrivyClientError as So}from"@privy-io/js-sdk-core";var Ms=e=>{let{client:t,setSiweState:r,siweState:n}=bo(f),i=Ve(s=>{var c;let d=_(s);return r({status:"error",error:d}),(c=e==null?void 0:e.onError)==null||c.call(e,d),d},[e==null?void 0:e.onError]),o=Ve(u=>l(void 0,[u],function*({wallet:s,from:{domain:d,uri:c}}){var m;try{r({status:"generating-message"});let p=yield t.auth.siwe.init(s,d,c);return r({status:"awaiting-signature"}),(m=e==null?void 0:e.onGenerateMessage)==null||m.call(e,p.message),p.message}catch(p){throw i(p)}}),[t,i,e==null?void 0:e.onGenerateMessage]);return{loginWithSiwe:Ve(u=>l(void 0,[u],function*({signature:s,messageOverride:d,disableSignup:c}){var m;try{if(b())throw new So({code:"attempted_login_with_siwe_while_already_logged_in",error:"Already logged in, use `useLinkWithSiwe` if you are trying to link a wallet to an existing account"});r({status:"submitting-signature"});let v=x(),h=yield t.auth.siwe.loginWithSiwe(s,void 0,d,c?"no-signup":"login-or-sign-up",{embedded:v==null?void 0:v.embedded});return r({status:"done"}),(m=e==null?void 0:e.onSuccess)==null||m.call(e,h.user,h.is_new_user),h.user}catch(p){throw i(p)}}),[t,i,e==null?void 0:e.onSuccess]),generateSiweMessage:o,state:n}};import{useCallback as Nt}from"react";import{createSiwsMessage as Eo,PrivyClientError as Co}from"@privy-io/js-sdk-core";import{useContext as _o}from"react";var O=()=>{let{client:e}=_o(f);return e};var qs=()=>{let e=O(),t=Nt(a=>l(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:Eo({address:n,domain:i,uri:o,nonce:s})}}catch(s){throw _(s)}}),[e]),r=Nt(s=>l(void 0,[s],function*({signature:n,message:i,wallet:{walletClientType:o,connectorType:a}={}}){try{if(!b())throw new Co({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(d){throw _(d)}}),[e]);return{generateMessage:t,link:r}};import{useCallback as Dt}from"react";import{createSiwsMessage as ko,PrivyClientError as Po}from"@privy-io/js-sdk-core";var ec=()=>{let e=O(),t=Dt(a=>l(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:ko({address:n,domain:i,uri:o,nonce:s})}}catch(s){throw _(s)}}),[e]),r=Dt(d=>l(void 0,[d],function*({signature:n,message:i,wallet:{walletClientType:o,connectorType:a}={},disableSignup:s}){try{if(b())throw new Po({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:t,login:r}};import{useCallback as jt,useContext as Wo}from"react";import{PrivyClientError as xo}from"@privy-io/js-sdk-core";var cc=e=>{let{client:t}=Wo(f),r=jt(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:jt(o=>l(void 0,[o],function*({address:i}){var a;try{if(!b())throw new xo({code:"attempted_unlink_siwe_before_logged_in",error:"Must be logged in to unlink a wallet, Use `useLoginWithSiwe` to login with a wallet"});let{user:d}=yield t.auth.siwe.unlinkWallet(i);return(a=e==null?void 0:e.onSuccess)==null||a.call(e,d),d}catch(s){throw r(s)}}),[t,r,e==null?void 0:e.onSuccess])}};import{useCallback as Ke,useContext as Ao,useState as Uo}from"react";import{PrivyClientError as Vt}from"@privy-io/js-sdk-core";var hc=e=>{let[t,r]=Uo(""),{client:n,otpState:i,setOtpState:o}=Ao(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=>l(void 0,[u],function*({email:c}){var m;r(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]),d=Ke(m=>l(void 0,[m],function*({code:c,email:u}){var p;try{if(!b())throw new Vt({code:"attempted_link_email_before_logged_in",error:"Must be logged in to link an email, Use `useLoginWithEmail` to login with email"});let h=u||t;if(!h)throw new Vt({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(h,c);return o({status:"done"}),(p=e==null?void 0:e.onLinkSuccess)==null||p.call(e,w),w}catch(v){throw a(v)}}),[t,o,n,e,a]);return{sendCode:s,linkWithCode:d,state:i}};import{useCallback as He,useContext as Ro,useState as Oo}from"react";import{PrivyClientError as Kt}from"@privy-io/js-sdk-core";var kc=e=>{let[t,r]=Oo(""),{client:n,otpState:i,setOtpState:o}=Ro(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=>l(void 0,[u],function*({email:c}){var m;r(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]),d=He(p=>l(void 0,[p],function*({code:c,email:u,disableSignup:m}){var v;try{if(b())throw new Kt({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||t;if(!w)throw new Kt({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid email before calling `loginWithCode`"});o({status:"submitting-code"});let y=x(),g=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,g.user,g.is_new_user),g==null?void 0:g.user}catch(h){throw a(h)}}),[t,o,n,e,a]);return{sendCode:s,loginWithCode:d,state:i}};import{useCallback as ze,useContext as Io,useState as Lo}from"react";import{PrivyClientError as Ht}from"@privy-io/js-sdk-core";var Ic=e=>{let[t,r]=Lo(""),{client:n,otpState:i,setOtpState:o}=Io(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=>l(void 0,[u],function*({phone:c}){var m;r(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]),d=ze(m=>l(void 0,[m],function*({code:c,phone:u}){var p;try{if(!b())throw new Ht({code:"attempted_link_sms_before_logged_in",error:"Must be logged in to link a phone number, Use `useLoginWithSMS` to login with a phone number"});if(!(u||t))throw new Ht({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||t,c);return o({status:"done"}),(p=e==null?void 0:e.onLinkSuccess)==null||p.call(e,w),w}catch(v){throw a(v)}}),[t,o,n,e,a]);return{sendCode:s,linkWithCode:d,state:i}};import{useCallback as Ge,useContext as Mo,useState as Fo}from"react";import{PrivyClientError as zt}from"@privy-io/js-sdk-core";var Kc=e=>{let[t,r]=Fo(""),{client:n,otpState:i,setOtpState:o}=Mo(f),a=Ge(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=Ge(u=>l(void 0,[u],function*({phone:c}){var m;r(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]),d=Ge(p=>l(void 0,[p],function*({code:c,phone:u,disableSignup:m}){var v;try{if(b())throw new zt({code:"attempted_login_with_sms_while_already_logged_in",error:"Already logged in, use `useLinkWithSMS` if you are trying to link a phone number to an existing account"});if(!(u||t))throw new zt({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid phone number before calling `loginWithCode`"});o({status:"submitting-code"});let y=x(),g=yield n.auth.phone.loginWithCode(u||t,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,g.user,g.is_new_user),g==null?void 0:g.user}catch(h){throw a(h)}}),[t,o,n,e,a]);return{sendCode:s,loginWithCode:d,state:i}};import*as Ce from"expo-linking";import{useCallback as qe,useContext as To,useRef as No}from"react";import{PrivyClientError as ae}from"@privy-io/js-sdk-core";var $c=e=>{let{appState:t,getCurrentAppState:r}=be(),{client:n,farcasterState:i,setFarcasterState:o}=To(f),a=No(!1),s=qe(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]),d=qe(()=>{a.current=!0},[]);return{linkWithFarcaster:qe((v,...h)=>l(void 0,[v,...h],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:g,channel_token:S}=yield n.auth.farcaster.initializeAuth({relyingParty:u,redirectUrl:Ce.createURL(m!=null?m:"/")});if(!g)throw new ae({code:"failed_to_generate_farcaster_uri",error:"Failed to generate farcaster uri"});if(!S)throw new ae({code:"failed_to_generate_farcaster_channel_token",error:"Failed to generate farcaster channel token"});yield Ce.openURL(g),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(t.current!=="active"&&r()!=="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:d}};import{useCallback as Gt,useContext as Do}from"react";var rd=e=>{let{client:t}=Do(f),r=Gt(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:Gt(o=>l(void 0,[o],function*({fid:i}){var a;try{let{user:s}=yield t.auth.farcaster.unlink({fid:i});return(a=e==null?void 0:e.onSuccess)==null||a.call(e,s),s}catch(s){throw r(s)}}),[t,e==null?void 0:e.onSuccess,r])}};import*as ke from"expo-linking";import{useCallback as Ye,useContext as jo,useRef as Vo}from"react";import{PrivyClientError as se}from"@privy-io/js-sdk-core";var ud=e=>{let{appState:t,getCurrentAppState:r}=be(),{client:n,farcasterState:i,setFarcasterState:o}=jo(f),a=Vo(!1),s=Ye(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]),d=Ye(()=>{a.current=!0},[]);return{loginWithFarcaster:Ye((h,...w)=>l(void 0,[h,...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:ke.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 ke.openURL(S),o({status:"polling-status"});let C=0;for(;C<v.pollAttempts;){if(a.current)throw new se({code:"farcaster_polling_canceled",error:"Farcaster polling canceled"});if(t.current!=="active"&&r()!=="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(),L=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,L.user,L.is_new_user),L.user}C++,yield J(v.pollIntervalMs)}throw new se({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(g){throw s(g)}}),[n,s,e==null?void 0:e.onSuccess,o,t]),state:i,cancel:d}};import{useCallback as qt,useContext as Ko}from"react";import{create as Ho}from"zustand";import{PrivyClientError as zo}from"@privy-io/js-sdk-core";var $e=Ho(()=>({status:"initial"})),H=e=>$e.setState(e,!0),Go=$e.getState,Sd=()=>{let{client:e}=Ko(f),t=$e(),r=qt(()=>l(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=qt(i=>l(void 0,null,function*(){let o=Go().status;try{if(b()){let c=new zo({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(),d=yield e.auth.farcasterV2.authenticate(i,{embedded:s==null?void 0:s.embedded});return H({status:"done"}),setTimeout(()=>H({status:"initial"}),1500),{user:d.user}}catch(a){let s=_(a);throw H({status:o,error:s}),s}}),[e]);return{init:r,login:n,state:t}};import{useCallback as Bt,useContext as qo}from"react";var Wd=e=>{let{client:t}=qo(f),r=Bt(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{unlinkOAuth:Bt(a=>l(void 0,[a],function*({provider:i,subject:o}){var s;try{let{user:d}=yield t.auth.oauth.unlink(i,o);return(s=e==null?void 0:e.onSuccess)==null||s.call(e,d),d}catch(d){throw r(d)}}),[t,e==null?void 0:e.onSuccess,r])}};import{useContext as Bo,useEffect as Jo,useRef as Yo}from"react";var Od=e=>{let{client:t}=Bo(f),r=Yo(e.onOAuthTokenGrant);r.current=e.onOAuthTokenGrant,Jo(()=>{let{unsubscribe:n}=t.addOAuthTokensListener(i=>{r.current(i)});return n},[t])};import{useContext as $o,useMemo as Qo}from"react";import{delegatedActions as Jt}from"@privy-io/js-sdk-core";var Td=()=>{let{client:e}=$o(f);return Qo(()=>({delegateWallet:Jt.delegateWallet(e),revokeWallets:Jt.revokeWallets(e)}),[e])};import{useContext as en,useMemo as tn}from"react";import{addSessionSigners as rn,removeSessionSigners as on}from"@privy-io/js-sdk-core";import{isEmbeddedWalletAccount as Xo}from"@privy-io/js-sdk-core";function Zo(e,t){return e.linked_accounts.filter(Xo).find(r=>r.address===t)}function Qe(e){let t=b();if(!t)throw new Error("User must be authenticated to perform this operation");let r=Zo(t,e);if(!r)throw new Error(`No wallet found with address ${e}`);return r}var qd=()=>{let{client:e}=en(f);return tn(()=>({addSessionSigners:({address:t,signers:r})=>rn({client:e,wallet:Qe(t),signers:r.map(n=>({signer_id:n.signerId,override_policy_ids:n.policyIds}))}),removeSessionSigners:({address:t})=>on({client:e,wallet:Qe(t)})}),[e])};import{useContext as nn,useMemo as an}from"react";import{PrivyClientError as $t}from"@privy-io/js-sdk-core";var Xd=()=>{let{client:e}=nn(f);return an(()=>({sendCode(n){return l(this,arguments,function*({newEmailAddress:r}){Yt(),yield e.auth.email.sendCode(r)})},updateEmail(i){return l(this,arguments,function*({newEmailAddress:r,code:n}){let{address:o}=Yt(),{user:a}=yield e.auth.email.updateEmail({oldEmailAddress:o,newEmailAddress:r,code:n});return a})}}),[e])};function Yt(){let t=sn().linked_accounts.find(r=>r.type==="email");if(!t)throw new $t({code:"attempted_update_email_without_a_linked_email",error:"Must have a linked email account already to update an email address. Use `useLinkEmail` to link an email account."});return t}function sn(){let e=b();if(!e)throw new $t({code:"attempted_update_before_logged_in",error:"Must be logged in to update a user profile."});return e}import{useContext as cn,useMemo as dn}from"react";import{PrivyClientError as Xt}from"@privy-io/js-sdk-core";var il=()=>{let{client:e}=cn(f);return dn(()=>({sendCode(n){return l(this,arguments,function*({newPhoneNumber:r}){Qt(),yield e.auth.phone.sendCode(r)})},updatePhone(i){return l(this,arguments,function*({newPhoneNumber:r,code:n}){let{phoneNumber:o}=Qt(),{user:a}=yield e.auth.phone.updatePhone({oldPhoneNumber:o,newPhoneNumber:r,code:n});return a})}}),[e])};function Qt(){let t=ln().linked_accounts.find(r=>r.type==="phone");if(!t)throw new Xt({code:"attempted_update_phone_without_a_linked_phone",error:"Must have a linked phone account already to update a phone number. Use `useLinkSMS` to link a phone number."});return t}function ln(){let e=b();if(!e)throw new Xt({code:"attempted_update_before_logged_in",error:"Must be logged in to update a user profile."});return e}import*as tr from"expo-linking";import{useCallback as mn,useContext as pn,useMemo as yn}from"react";import{crossApp as fn,PrivyClientError as hn}from"@privy-io/js-sdk-core";import*as er from"expo-linking";import*as ce from"expo-web-browser";import{PrivyClientError as Zt}from"@privy-io/js-sdk-core";var T=(e,t)=>l(void 0,null,function*(){let r=yield ce.openAuthSessionAsync(e,t,{createTask:!1});if(r.type!=="success")throw r.type===ce.WebBrowserResultType.CANCEL||r.type===ce.WebBrowserResultType.DISMISS?new Zt({error:"OAuth session was cancelled",code:"oauth_session_failed"}):new Zt({error:"OAuth session failed",code:"oauth_session_failed"});return un(r.url)});function un(e){let{queryParams:t}=er.parse(e);return t}var hl=()=>{let{client:e}=pn(f),t=yn(()=>fn.loginWithCrossAppAuth({client:e,openAuthSession:T}),[e]);return{loginWithCrossApp:mn(o=>l(void 0,[o],function*({appId:n,redirectUri:i}){if(b())throw new hn({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 t({providerAppId:n,redirectUrl:tr.createURL(i||"/")});return{user:s}}),[t])}};import*as rr from"expo-linking";import{useCallback as gn,useContext as vn,useMemo as wn}from"react";import{crossApp as bn,PrivyClientError as Sn}from"@privy-io/js-sdk-core";var Cl=()=>{let{client:e}=vn(f),t=wn(()=>bn.linkWithCrossAppAuth({client:e,openAuthSession:T}),[e]);return{linkWithCrossApp:gn(o=>l(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 t({providerAppId:n,redirectUrl:rr.createURL(i||"/")})}}),[t])}};import*as nr from"expo-linking";import{useContext as _n,useMemo as or}from"react";import{crossApp as En}from"@privy-io/js-sdk-core";var Ol=()=>{let{client:e}=_n(f),t=or(()=>En.wallet.signMessage({client:e,openAuthSession:T}),[e]);return or(()=>({signMessage:({address:r,message:n,redirectUri:i="/"})=>t({user:b(),address:r,message:n,redirectUrl:nr.createURL(i)})}),[t])};import*as ar from"expo-linking";import{useContext as Cn,useMemo as ir}from"react";import{crossApp as kn}from"@privy-io/js-sdk-core";var Dl=()=>{let{client:e}=Cn(f),t=ir(()=>kn.wallet.signTypedData({client:e,openAuthSession:T}),[e]);return ir(()=>({signTypedData:({address:r,typedData:n,redirectUri:i="/"})=>t({user:b(),address:r,typedData:n,redirectUrl:ar.createURL(i)})}),[t])};import*as cr from"expo-linking";import{useContext as Pn,useMemo as sr}from"react";import{crossApp as Wn}from"@privy-io/js-sdk-core";var ql=()=>{let{client:e}=Pn(f),t=sr(()=>Wn.wallet.sendTransaction({client:e,openAuthSession:T}),[e]);return sr(()=>({sendTransaction:({address:r,transaction:n,redirectUri:i="/"})=>t({user:b(),address:r,transaction:n,redirectUrl:cr.createURL(i)})}),[t])};import{useCallback as xn,useContext as An}from"react";import{getUserEmbeddedEthereumWallet as Un,getUserEmbeddedSolanaWallet as Rn,isUnifiedWallet as On,PrivyClientError as Q,throwIfInvalidRecoveryUpgradePath as In}from"@privy-io/js-sdk-core";var eu=()=>{let{client:e}=An(f);return{setRecovery:xn(r=>l(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(On(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(d){throw new Q({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"})}In({currentRecoveryMethod:o.recovery_method,upgradeToRecoveryMethod:r.recoveryMethod});let a=yield Ln({appId:i,client:e,user:n,primaryAccount:o,recoveryParams:r});try{let{user:d}=yield e.embeddedWallet.setRecovery(a);return{user:d}}catch(d){throw new Q({code:"embedded_wallet_set_recovery_error",error:d instanceof Error?d.message:"Error setting password on embedded wallet"})}}),[e])}},Ln=o=>l(void 0,[o],function*({appId:e,client:t,user:r,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 _e(t);return{recoveryMethod:"google-drive",wallet:n,recoveryAccessToken:a}}case"icloud":{let{recoverySecret:a,iCloudRecordName:s}=yield oe({appId:e,client:t,user:r});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 Mn,useContext as Fn}from"react";import{getUserEmbeddedEthereumWallet as Tn,getUserEmbeddedSolanaWallet as Nn,PrivyClientError as de,isUnifiedWallet as Dn}from"@privy-io/js-sdk-core";var du=()=>{let{client:e}=Fn(f);return{recover:Mn(r=>l(void 0,null,function*(){var c;let n=b();if(!n)throw new de({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 de({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});if(Dn(i))throw new de({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,d;switch(r.recoveryMethod){case"user-passcode":a=r.password;break;case"google-drive":s=yield _e(e);break;case"icloud":let{recoverySecret:u}=yield we({client:e,walletAddress:i.address,chainType:i.chain_type});d=u;break;case"recovery-encryption-key":o=r.recoveryKey;break;case"privy":break;default:throw new de({code:"unsupported_recovery_method",error:`Unsupported recovery options ${r}`})}try{i.chain_type==="ethereum"?yield e.embeddedWallet.getProvider(i,a,s,d,o):i.chain_type==="solana"&&(yield e.embeddedWallet.getSolanaProvider(i,i.address,"solana-address-verifier",a,s,d))}catch(u){throw new de({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 Xe}from"react";var Ze=(e={})=>{let{wallet:t,createWalletCallbacks:r,recoverWalletCallbacks:n,setWalletRecoveryCallbacks:i}=jn(f),{onCreateWalletSuccess:o,onCreateWalletError:a,onRecoverWalletError:s,onRecoverWalletSuccess:d,onSetWalletRecoverySuccess:c,onSetWalletRecoveryError:u}=e;return Xe(()=>{r.current={onSuccess:o,onError:a}},[o,a]),Xe(()=>{n.current={onSuccess:d,onError:s}},[d,s]),Xe(()=>{i.current={onSuccess:c,onError:u}},[d,s]),t};var gu=({onStateChange:e})=>{let t=Ze();return Vn(()=>{e(t)},[t])};import{useContext as Kn}from"react";var Su=()=>{let{getIdentityToken:e}=Kn(f);return{getIdentityToken:e}};import{useCallback as dr,useContext as Hn}from"react";import{PrivyClientError as zn}from"@privy-io/js-sdk-core";var Au=e=>{let{client:t}=Hn(f),r=dr(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:dr(()=>l(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 t.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 r(o)}}),[t,r,e==null?void 0:e.onSuccess])}};import{useContext as Gn,useEffect as qn}from"react";function Mu({onMfaRequired:e}){let{client:t}=Gn(f);qn(()=>{function r(){return l(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 t.mfaPromises.on("mfaRequired",r),()=>{t.mfaPromises.off("mfaRequired",r)}},[t,e])}import{useCallback as Pe,useContext as Qn}from"react";import{PrivyClientError as We}from"@privy-io/js-sdk-core";import{PrivyClientError as Bn}from"@privy-io/js-sdk-core";var Jn=e=>l(void 0,null,function*(){var n;let r=yield(yield import("react-native-passkeys")).create({rp:e.rp,user:e.user,challenge:e.challenge,pubKeyCredParams:e.pubKeyCredParams,excludeCredentials:e.excludeCredentials,authenticatorSelection:e.authenticatorSelection,timeout:12e4});if(!r)throw new Bn({code:"failed_to_create_passkey",error:"Could not create passkey"});return N(W({},r),{type:(n=r.type)!=null?n:"public-key",clientExtensionResults:{}})});import{PrivyClientError as Yn}from"@privy-io/js-sdk-core";var tt=e=>l(void 0,null,function*(){var n;let r=yield(yield import("react-native-passkeys")).get({rpId:e.rpId,challenge:e.challenge,allowCredentials:e.allowCredentials,timeout:12e4});if(!r)throw new Yn({code:"no_passkey_found_for_challenge",error:"Could not find a matching passkey to login with"});return N(W({},r),{type:(n=r.type)!=null?n:"public-key",clientExtensionResults:{}})});function lr(e){var t;return{id:e.id,client_extension_results:{app_id:e.clientExtensionResults.appid,cred_props:e.clientExtensionResults.credProps,hmac_create_secret:e.clientExtensionResults.hmacCreateSecret},raw_id:e.rawId,type:e.type,authenticator_attachment:(t=e.authenticatorAttachment)!=null?t:"platform",response:{authenticator_data:e.response.authenticatorData,client_data_json:e.response.clientDataJSON,signature:e.response.signature,user_handle:e.response.userHandle}}}function ur(e){var t,r,n,i;return{challenge:e.challenge,rpId:e.rp_id,extensions:{appid:(t=e.extensions)==null?void 0:t.app_id,credProps:(r=e.extensions)==null?void 0:r.cred_props,hmacCreateSecret:(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 Yu(e){var t,r,n,i,o,a,s,d;return{rp:e.rp,user:{id:e.user.id,name:e.user.name,displayName:e.user.display_name},challenge:e.challenge,pubKeyCredParams:e.pub_key_cred_params,extensions:{hmacCreateSecret:(t=e.extensions)==null?void 0:t.hmac_create_secret,credProps:(n=(r=e.extensions)==null?void 0:r.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:(d=e.authenticator_selection)==null?void 0:d.require_resident_key}}}function em(){let{client:e}=Qn(f),t=Pe(o=>l(this,null,function*(){var a,s;switch(o.method){case"sms":yield e.mfa.sms.sendCode({action:"verify"});return;case"passkey":let{options:d}=yield e.mfa.passkey.generateAuthenticationOptions({relying_party:o.relyingParty||((s=(a=x())==null?void 0:a.mfa)==null?void 0:s.relyingParty)});return ur(d);case"totp":return;default:throw new Error(`Unsupported MFA method: ${o.mfaMethod}`)}}),[e]),r=Pe(o=>l(this,null,function*(){var a,s,d,c,u,m,p;switch(o.method){case"totp":case"sms":if(typeof o.mfaCode!="string")throw new We({code:"invalid_mfa_code",error:"Invalid MFA code"});(d=e.mfaPromises.rootPromise.current)==null||d.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,g)=>{e.mfaPromises.submitPromise.current={resolve:y,reject:g}});break;case"passkey":if(typeof o.mfaCode=="string")throw new We({code:"invalid_passkey_response",error:"Invalid authenticator response"});let v=yield tt(o.mfaCode),h=lr(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:h}),yield new Promise((y,g)=>{e.mfaPromises.submitPromise.current={resolve:y,reject:g}});break;default:let w=new We({code:"unsupported_mfa_method",error:"Unsupported MFA method"});throw(p=e.mfaPromises.rootPromise.current)==null||p.reject(w),w}}),[e]),n=Pe(()=>l(this,null,function*(){yield e.mfa.verifyMfa()}),[e]),i=Pe(()=>{var o;(o=e.mfaPromises.rootPromise.current)==null||o.reject(new We({code:"mfa_canceled",error:"MFA canceled"}))},[e]);return{init:t,submit:r,prompt:n,cancel:i}}import{useCallback as rt,useContext as Xn}from"react";function im(){let{client:e}=Xn(f),t=rt(i=>l(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]),r=rt(i=>l(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=rt(i=>l(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:t,submitMfaEnrollment:r,unenrollMfa:n}}import{useCallback as Zn,useMemo as ei}from"react";import{getAllUserEmbeddedEthereumWallets as nt,getEntropyDetailsFromUser as mr,getUserEmbeddedSolanaWallet as ti,PrivyClientError as pr}from"@privy-io/js-sdk-core";var ri=()=>{let e=A(),t=O(),r=ei(()=>{let o=nt(e).map(a=>{let s=mr(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:d}})=>({address:a.address,walletIndex:a.wallet_index,chainType:a.chain_type,getProvider:()=>t.embeddedWallet.getEthereumProvider({wallet:a,entropyId:s,entropyIdVerifier:d,onNeedsRecovery:c=>l(void 0,null,function*(){var u;yield(u=pe())==null?void 0:u(c)})})}))},[t,e]),n=Zn((...o)=>l(void 0,[...o],function*({createAdditional:i=!1}={}){let{user:a}=yield t.user.get(),s=nt(a);if(!i&&s.length>0)throw new pr({code:"embedded_wallet_creation_error",error:"Wallet already exists for this user. Set `createAdditional` to `true` to create another wallet"});let d=mr(a);if(!d){let h=yield t.embeddedWallet.create({});return ot(h.user,0),{user:h.user}}let{entropyId:c,entropyIdVerifier:u}=d;if(u==="solana-address-verifier"){let h=ti(a),w=yield t.embeddedWallet.create({solanaAccount:h});return ot(w.user,0),{user:w.user}}let p=s.map(h=>h.wallet_index).reduce((h,w)=>Math.max(h,w),0)+1,v=yield t.embeddedWallet.add({chainType:"ethereum",hdWalletIndex:p,entropyId:c,entropyIdVerifier:u});return ot(v.user,p),{user:v.user}}),[t]);return{wallets:r,create:n}};function ot(e,t){let r=nt(e).find(n=>n.wallet_index===t);if(!e||!r)throw new pr({code:"embedded_wallet_creation_error",error:"Unknown error creating wallet"})}import{useContext as oi,useEffect as yr}from"react";var ni=(e={})=>{let{solanaWallet:t,createSolanaWalletCallbacks:r,recoverSolanaWalletCallbacks:n}=oi(f),{onCreateWalletSuccess:i,onCreateWalletError:o,onRecoverWalletError:a,onRecoverWalletSuccess:s}=e;return yr(()=>{r.current={onSuccess:i,onError:o}},[i,o]),yr(()=>{n.current={onSuccess:s,onError:a}},[s,a]),t};import{useCallback as ii,useMemo as ai}from"react";import{getAllUserEmbeddedBitcoinWallets as it,getEntropyDetailsFromUser as fr,isUnifiedWallet as si,PrivyClientError as X}from"@privy-io/js-sdk-core";var ci=()=>{let e=A(),t=O(),r=ai(()=>{let i=fr(e);if(!i)return[];let o=it(e),{entropyId:a,entropyIdVerifier:s}=i;return o.map(d=>({address:d.address,walletIndex:d.wallet_index,publicKey:d.public_key,chainType:d.chain_type,getProvider:()=>si(d)?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"})):t.embeddedWallet.getBitcoinProvider({wallet:d,entropyId:a,entropyIdVerifier:s})}))},[t,e]),n=ii(a=>l(void 0,[a],function*({chainType:i,createAdditional:o=!1}){var y;let s=t.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:d}=yield t.user.get(),c=fr(d);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=it(d).filter(g=>g.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(g=>g.wallet_index),0)+1,h=yield t.embeddedWallet.add({chainType:i,hdWalletIndex:v,entropyId:u,entropyIdVerifier:m}),w=it(h.user).find(g=>g.chain_type===i&&g.wallet_index===v);if(!h.user||!w)throw new X({code:"embedded_wallet_creation_error",error:"Unknown error creating wallet"});return{user:h.user,provider:yield t.embeddedWallet.getBitcoinProvider({wallet:w,entropyId:u,entropyIdVerifier:m})}}),[t]);return{wallets:r,create:n}};import{useContext as di}from"react";var at=()=>{let{isReady:e,logout:t,getAccessToken:r,error:n}=di(f);return{user:A(),isReady:e,error:n,logout:t,getAccessToken:r}};import{useMemo as li}from"react";import{generateAuthorizationSignature as ui}from"@privy-io/js-sdk-core";var mi=()=>{let e=O();return li(()=>({generateAuthorizationSignature(r){return l(this,null,function*(){let{signature:n}=yield ui((...i)=>e.embeddedWallet.signWithUserSigner(...i),r);return{signature:n}})}}),[e])};import{getAllUserEmbeddedBitcoinWallets as pi,getUserEmbeddedEthereumWallet as yi,getUserEmbeddedSolanaWallet as fi,isEmbeddedWalletAccount as hi,isUnifiedWallet as gi}from"@privy-io/js-sdk-core";function hr(e,t){return l(this,null,function*(){var i;let r=(i=yi(t))!=null?i:fi(t);if(!r||gi(r)||r.imported||pi(t).length>0)return;let n=t.linked_accounts.filter(hi).filter(o=>!o.imported).filter(o=>o.chain_type==="ethereum"||o.chain_type==="solana");r.chain_type==="ethereum"?yield e.embeddedWallet.getProvider(r):r.chain_type==="solana"&&(yield e.embeddedWallet.getSolanaProvider(r,r.address,"solana-address-verifier")),yield e.embeddedWallet.delegateWallets({rootWallet:{address:r.address,chainType:r.chain_type,imported:r.imported},delegatedWallets:n.map(o=>({address:o.address,chainType:o.chain_type,walletIndex:o.wallet_index}))}),yield e.user.get()})}var bi=()=>{let e=O(),{user:t}=at(),r=wi(!1);vi(()=>{var o;let n=e.app.getConfig();((o=n==null?void 0:n.embedded_wallet_config)==null?void 0:o.mode)==="user-controlled-server-wallets-only"&&t&&(r.current||(r.current=!0,hr(e,t).then(()=>{console.info("Migrated wallets for user")}).catch(a=>{console.warn("Unable to migrate wallets: ",a)}).finally(()=>{r.current=!1})))},[e,t])},Si=()=>(bi(),null),gr=Si;var f=Ei(null),te;function Vp(e){return te?te.getAccessToken():e!=null&&e.strict?Promise.reject(new br({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 Kp=e=>{Pi();let[t,r]=I(wr.currentState==="active");vr(()=>{let j=wr.addEventListener("change",xr=>{r(xr==="active")});return()=>{j.remove()}},[]),vr(()=>ht(e.config),[e.config]);let[n,i]=I(!1),[o,a]=I(null),[s,d]=I(!1),[c,u]=I({status:"disconnected",account:null}),[m,p]=I({status:"disconnected"}),[v,h]=I({status:"initial"}),[w,y]=I({status:"initial"}),[g,S]=I({status:"initial"}),[E,C]=I({status:"initial"}),[k,P]=I({status:"initial"}),[L,le]=I({status:"initial"}),[ue,Ae]=I({status:"initial"}),Ue=ee({}),Re=ee({}),Oe=ee({}),Ie=ee({}),ct=ee({}),dt=ee({}),me=xe(j=>{if(j){Fe(j),a(null);return}Fe(null),h({status:"initial"}),y({status:"initial"}),u({status:"disconnected",account:null})},[]),R=_i(()=>{let j=e.storage||ye;return e.client?te=e.client:te=ft({appId:e.appId,clientId:e.clientId,supportedChains:e.supportedChains,storage:j,baseUrl:e.baseUrl,logLevel:e.logLevel}),te.setCallbacks({setUser:me,setIsReady:d}),te},[e.client,e.storage,e.appId,e.clientId,e.baseUrl,e.supportedChains,e.logLevel,me]),Sr=xe(()=>(me(null),R.auth.logout()),[me,R]),_r=xe(()=>l(void 0,null,function*(){try{return yield R.getAccessToken()}catch(j){return console.debug(j),null}}),[R]),Er=xe(()=>R.getIdentityToken(),[R]);Tt({client:R,isUserInitialized:n,setIsUserInitialized:i,setError:a});let Cr=It({client:R,appId:e.appId,createWalletCallbacks:Re,recoverWalletCallbacks:Oe,setWalletRecoveryCallbacks:Ie,setRecoveryFlowState:S,wallet:c,setWallet:u}),kr=kt({client:R,createSolanaWalletCallbacks:ct,recoverSolanaWalletCallbacks:dt,setSolanaRecoveryFlowState:C,solanaWallet:m,setSolanaWallet:p});Ft({client:R,createWalletCallbacks:Re,recoverWalletCallbacks:Oe,setWalletRecoveryCallbacks:Ie,recoveryFlowState:g,oAuthState:w,setRecoveryFlowState:S,setWallet:u,appStateVisible:t});let{customAuthStateIsSettled:Pr}=Mt({client:R,isReady:n}),Wr=K();return Z.createElement(Z.Fragment,null,Z.createElement(f.Provider,{value:{client:R,isReady:Wr&&n&&Pr,error:o,logout:Sr,getAccessToken:_r,getIdentityToken:Er,wallet:W(W({},c),Cr),solanaWallet:W(W({},m),kr),oAuthState:w,oAuthCallbacks:Ue,recoveryFlowState:g,setRecoveryFlowState:S,solanaRecoveryFlowState:E,setSolanaRecoveryFlowState:C,createWalletCallbacks:Re,recoverWalletCallbacks:Oe,setWalletRecoveryCallbacks:Ie,createSolanaWalletCallbacks:ct,recoverSolanaWalletCallbacks:dt,setOAuthState:y,siweState:k,setSiweState:P,otpState:v,setOtpState:h,passkeyState:L,setPasskeyState:le,farcasterState:ue,setFarcasterState:Ae}},e.children,Z.createElement(gr,null)),Z.createElement(ki,{style:{width:0,height:0,overflow:"hidden"}},Z.createElement(wt,{client:R,isClientReady:s})))},Pi=()=>{if(Ci(f))throw new br({code:"configuration_error",error:"Found multiple instances of PrivyProvider, ensure there is only one mounted in your application tree."})};var $p=e=>{let{client:t,setSiweState:r,siweState:n}=Wi(f),i=st(s=>{var c;let d=_(s);return r({status:"error",error:d}),(c=e==null?void 0:e.onError)==null||c.call(e,d),d},[e==null?void 0:e.onError]),o=st(u=>l(void 0,[u],function*({wallet:s,from:{domain:d,uri:c}}){var m;try{r({status:"generating-message"});let p=yield t.auth.siwe.init(s,d,c);return r({status:"awaiting-signature"}),(m=e==null?void 0:e.onGenerateMessage)==null||m.call(e,p.message),p.message}catch(p){throw i(p)}}),[t,i,e==null?void 0:e.onGenerateMessage]),a=st(c=>l(void 0,[c],function*({signature:s,messageOverride:d}){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"});r({status:"submitting-signature"});let{user:p}=yield t.auth.siwe.linkWithSiwe(s,void 0,d);return r({status:"done"}),(u=e==null?void 0:e.onSuccess)==null||u.call(e,p),p}catch(m){throw i(m)}}),[t,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,Rr as f,_ as g,J as h,ye as i,ft as j,$p as k,Ms as l,O as m,qs as n,ec as o,cc as p,hc as q,kc as r,Ic as s,Kc as t,$c as u,rd as v,ud as w,Sd as x,Wd as y,Od as z,Td as A,qd as B,Xd as C,il as D,hl as E,Cl as F,Ol as G,Dl as H,ql as I,eu as J,du as K,Ze as L,gu as M,Su as N,Au as O,Mu as P,Jn as Q,tt as R,Yu as S,em as T,im as U,ri as V,ni as W,ci as X,at as Y,mi as Z,f as _,Vp as $,Kp as aa};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b as u,m as i}from"./chunk-
|
|
1
|
+
import{b as u,m as i}from"./chunk-JMPXUULU.js";import{d as a}from"./chunk-OWCFWPAL.js";import{useMemo as d}from"react";import{create as g}from"@privy-io/js-sdk-core";var f=()=>{let e=i();return d(()=>({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 c,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=u();if(!l)throw new c({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 c({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 it,b as pt,c as ut,d as nt,e as ht,f as st,g as at,h as ft}from"./chunk-QSWCX5XI.js";import{a as y,b as c,c as d}from"./chunk-
|
|
1
|
+
import{a as it,b as pt,c as ut,d as nt,e as ht,f as st,g as at,h as ft}from"./chunk-QSWCX5XI.js";import{a as y,b as c,c as d}from"./chunk-A2ELCA5A.js";import{$ as ot,A as S,B as G,C as B,D as H,E as b,F as j,G as q,H as z,I as D,J,K,L as M,M as Q,N as T,O as V,P as X,T as Y,U as Z,V as _,W as $,X as E,Y as i,Z as tt,_ as et,aa as rt,e as r,f as x,i as f,j as m,k as A,l as O,m as l,n as P,o as g,p as L,q as W,r as v,s as N,t as R,u as k,v as C,w as I,x as U,y as w,z as F}from"./chunk-JMPXUULU.js";import"./chunk-OWCFWPAL.js";export*from"@privy-io/js-sdk-core";import t from"react";var dt=({loading:p,error:e,unauthenticated:u,children:n})=>{let{isReady:h,error:o}=i(),s=r();if(!h)return t.createElement(t.Fragment,null,p);if(o&&e){let a=typeof e=="function"?e(o):e;return t.createElement(t.Fragment,null,a)}return s?t.createElement(t.Fragment,null,n):t.createElement(t.Fragment,null,u)};export{dt as AuthBoundary,et as PrivyContext,rt as PrivyProvider,f as SecureStorageAdapter,m as createPrivyClient,ot as getAccessToken,at as hasError,it as isConnected,ut as isConnecting,st as isCreating,nt as isDisconnected,ht as isNotCreated,pt as isReconnecting,ft as needsRecovery,tt as useAuthorizationSignature,V as useCreateGuestAccount,E as useEmbeddedBitcoinWallet,_ as useEmbeddedEthereumWallet,$ as useEmbeddedSolanaWallet,M as useEmbeddedWallet,Q as useEmbeddedWalletStateChange,S as useHeadlessDelegatedActions,T as useIdentityToken,W as useLinkEmail,N as useLinkSMS,j as useLinkWithCrossApp,k as useLinkWithFarcaster,c as useLinkWithOAuth,A as useLinkWithSiwe,P as useLinkWithSiws,b as useLoginWithCrossApp,v as useLoginWithEmail,I as useLoginWithFarcaster,U as useLoginWithFarcasterV2,y as useLoginWithOAuth,R as useLoginWithSMS,O as useLoginWithSiwe,g as useLoginWithSiws,Y as useMfa,Z as useMfaEnrollment,d as useOAuthFlow,F as useOAuthTokens,x as useOnNeedsRecovery,i as usePrivy,l as usePrivyClient,K as useRecoverEmbeddedWallet,X as useRegisterMfaListener,D as useSendTransactionWithCrossApp,G as useSessionSigners,J as useSetEmbeddedWalletRecovery,q as useSignMessageWithCrossApp,z as useSignTypedDataWithCrossApp,C as useUnlinkFarcaster,w as useUnlinkOAuth,L as useUnlinkWallet,B as useUpdateEmail,H 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{Q as d,R as C,S,_ as p,a as b,b as m,g}from"./chunk-
|
|
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{Q as d,R as C,S,_ as p,a as b,b as m,g}from"./chunk-JMPXUULU.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
|
|
1
|
+
import{a as E}from"./chunk-QSWCX5XI.js";import{_ as C,b,d as h,m as x}from"./chunk-JMPXUULU.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};
|