@privy-io/expo 0.34.3 → 0.34.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } }var _chunkYOOCOJAEjs = require('./chunk-YOOCOJAE.js');var _react = require('react');var _jssdkcore = require('@privy-io/js-sdk-core');var vr=e=>{let{user:r,client:c,setSiweState:a,siweState:o}=_react.useContext.call(void 0, _chunkYOOCOJAEjs.E),n=_react.useCallback.call(void 0, l=>{var u;let y=_chunkYOOCOJAEjs.i.call(void 0, l);return a({status:"error",error:y}),(u=e==null?void 0:e.onError)==null||u.call(e,y),y},[e==null?void 0:e.onError]),t=_react.useCallback.call(void 0, f=>_chunkYOOCOJAEjs.d.call(void 0, void 0,[f],function*({wallet:l,from:{domain:y,uri:u}}){var s;try{a({status:"generating-message"});let d=yield c.auth.siwe.init(l,y,u);return a({status:"awaiting-signature"}),(s=e==null?void 0:e.onGenerateMessage)==null||s.call(e,d.message),d.message}catch(d){throw n(d)}}),[c,n,e==null?void 0:e.onGenerateMessage]),i=_react.useCallback.call(void 0, u=>_chunkYOOCOJAEjs.d.call(void 0, void 0,[u],function*({signature:l,messageOverride:y}){var f;try{if(!r)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"});a({status:"submitting-signature"});let s=yield c.auth.siwe.linkWithSiwe(l,void 0,y);return a({status:"done"}),(f=e==null?void 0:e.onSuccess)==null||f.call(e,s),s}catch(s){throw n(s)}}),[r,c,n,e==null?void 0:e.onSuccess]);return{generateSiweMessage:t,linkWithSiwe:i,state:o}};var Wr=e=>{let{user:r,client:c,setSiweState:a,siweState:o}=_react.useContext.call(void 0, _chunkYOOCOJAEjs.E),n=_react.useCallback.call(void 0, l=>{var u;let y=_chunkYOOCOJAEjs.i.call(void 0, l);return a({status:"error",error:y}),(u=e==null?void 0:e.onError)==null||u.call(e,y),y},[e==null?void 0:e.onError]),t=_react.useCallback.call(void 0, f=>_chunkYOOCOJAEjs.d.call(void 0, void 0,[f],function*({wallet:l,from:{domain:y,uri:u}}){var s;try{a({status:"generating-message"});let d=yield c.auth.siwe.init(l,y,u);return a({status:"awaiting-signature"}),(s=e==null?void 0:e.onGenerateMessage)==null||s.call(e,d.message),d.message}catch(d){throw n(d)}}),[c,n,e==null?void 0:e.onGenerateMessage]);return{loginWithSiwe:_react.useCallback.call(void 0, f=>_chunkYOOCOJAEjs.d.call(void 0, void 0,[f],function*({signature:l,messageOverride:y,disableSignup:u}){var s;try{if(r)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"});a({status:"submitting-signature"});let d=yield c.auth.siwe.loginWithSiwe(l,void 0,y,u?"no-signup":"login-or-sign-up");return a({status:"done"}),(s=e==null?void 0:e.onSuccess)==null||s.call(e,d.user,d.is_new_user),d.user}catch(d){throw n(d)}}),[r,c,n,e==null?void 0:e.onSuccess]),generateSiweMessage:t,state:o}};var Or=e=>{let{user:r,client:c}=_react.useContext.call(void 0, _chunkYOOCOJAEjs.E),a=_react.useCallback.call(void 0, n=>{var i;let t=_chunkYOOCOJAEjs.i.call(void 0, n);return(i=e==null?void 0:e.onError)==null||i.call(e,t),t},[e==null?void 0:e.onError]);return{unlinkWallet:_react.useCallback.call(void 0, t=>_chunkYOOCOJAEjs.d.call(void 0, void 0,[t],function*({address:n}){var i;try{if(!r)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 l=yield c.auth.siwe.unlinkWallet(n);return(i=e==null?void 0:e.onSuccess)==null||i.call(e,l),l}catch(l){throw a(l)}}),[r,c,a,e==null?void 0:e.onSuccess])}};var Gr=e=>{let[r,c]=_react.useState.call(void 0, ""),{user:a,client:o,otpState:n,setOtpState:t}=_react.useContext.call(void 0, _chunkYOOCOJAEjs.E),i=_react.useCallback.call(void 0, u=>{var s;let f=_chunkYOOCOJAEjs.i.call(void 0, u);return t({status:"error",error:f}),(s=e==null?void 0:e.onError)==null||s.call(e,f),f},[e==null?void 0:e.onError]),l=_react.useCallback.call(void 0, f=>_chunkYOOCOJAEjs.d.call(void 0, void 0,[f],function*({email:u}){var s;c(u);try{t({status:"sending-code"});let d=yield o.auth.email.sendCode(u);return t({status:"awaiting-code-input"}),(s=e==null?void 0:e.onSendCodeSuccess)==null||s.call(e,{email:u}),d}catch(d){return i(d),{success:!1}}}),[o,i,e==null?void 0:e.onSendCodeSuccess]),y=_react.useCallback.call(void 0, s=>_chunkYOOCOJAEjs.d.call(void 0, void 0,[s],function*({code:u,email:f}){var d;try{if(!a)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 v=f||r;if(!v)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid email before calling `linkWithCode`"});t({status:"submitting-code"});let k=yield o.auth.email.linkWithCode(v,u);return t({status:"done"}),(d=e==null?void 0:e.onLinkSuccess)==null||d.call(e,k),k}catch(v){i(v)}}),[a,o,r,i,e==null?void 0:e.onLinkSuccess]);return{sendCode:l,linkWithCode:y,state:n}};var Jr=e=>{let[r,c]=_react.useState.call(void 0, ""),{user:a,client:o,otpState:n,setOtpState:t}=_react.useContext.call(void 0, _chunkYOOCOJAEjs.E),i=_react.useCallback.call(void 0, u=>{var s;let f=_chunkYOOCOJAEjs.i.call(void 0, u);return t({status:"error",error:f}),(s=e==null?void 0:e.onError)==null||s.call(e,f),f},[e==null?void 0:e.onError]),l=_react.useCallback.call(void 0, f=>_chunkYOOCOJAEjs.d.call(void 0, void 0,[f],function*({email:u}){var s;c(u);try{t({status:"sending-code"});let d=yield o.auth.email.sendCode(u);return t({status:"awaiting-code-input"}),(s=e==null?void 0:e.onSendCodeSuccess)==null||s.call(e,{email:u}),d}catch(d){return i(d),{success:!1}}}),[o,i,e==null?void 0:e.onSendCodeSuccess]),y=_react.useCallback.call(void 0, d=>_chunkYOOCOJAEjs.d.call(void 0, void 0,[d],function*({code:u,email:f,disableSignup:s}){var v;try{if(a)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 k=f||r;if(!k)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid email before calling `loginWithCode`"});t({status:"submitting-code"});let w=yield o.auth.email.loginWithCode(k,u,s?"no-signup":"login-or-sign-up");return t({status:"done"}),(v=e==null?void 0:e.onLoginSuccess)==null||v.call(e,w.user,w.is_new_user),w==null?void 0:w.user}catch(k){i(k)}}),[a,o,r,i,e==null?void 0:e.onLoginSuccess]);return{sendCode:l,loginWithCode:y,state:n}};var Zr=e=>{let[r,c]=_react.useState.call(void 0, ""),{user:a,client:o,otpState:n,setOtpState:t}=_react.useContext.call(void 0, _chunkYOOCOJAEjs.E),i=_react.useCallback.call(void 0, u=>{var s;let f=_chunkYOOCOJAEjs.i.call(void 0, u);return t({status:"error",error:f}),(s=e==null?void 0:e.onError)==null||s.call(e,f),f},[e==null?void 0:e.onError]),l=_react.useCallback.call(void 0, f=>_chunkYOOCOJAEjs.d.call(void 0, void 0,[f],function*({phone:u}){var s;c(u);try{t({status:"sending-code"});let d=yield o.auth.phone.sendCode(u);return t({status:"awaiting-code-input"}),(s=e==null?void 0:e.onSendCodeSuccess)==null||s.call(e,{phone:u}),d}catch(d){return i(d),{success:!1}}}),[o,i,e==null?void 0:e.onSendCodeSuccess]),y=_react.useCallback.call(void 0, s=>_chunkYOOCOJAEjs.d.call(void 0, void 0,[s],function*({code:u,phone:f}){var d;try{if(!a)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(!(f||r))throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid phone number before calling `linkWithCode`"});t({status:"submitting-code"});let k=yield o.auth.phone.linkWithCode(f||r,u);return t({status:"done"}),(d=e==null?void 0:e.onLinkSuccess)==null||d.call(e,k),k}catch(v){i(v)}}),[a,o,r,i,e==null?void 0:e.onLinkSuccess]);return{sendCode:l,linkWithCode:y,state:n}};var at=e=>{let[r,c]=_react.useState.call(void 0, ""),{user:a,client:o,otpState:n,setOtpState:t}=_react.useContext.call(void 0, _chunkYOOCOJAEjs.E),i=_react.useCallback.call(void 0, u=>{var s;let f=_chunkYOOCOJAEjs.i.call(void 0, u);return t({status:"error",error:f}),(s=e==null?void 0:e.onError)==null||s.call(e,f),f},[e==null?void 0:e.onError]),l=_react.useCallback.call(void 0, f=>_chunkYOOCOJAEjs.d.call(void 0, void 0,[f],function*({phone:u}){var s;c(u);try{t({status:"sending-code"});let d=yield o.auth.phone.sendCode(u);return t({status:"awaiting-code-input"}),(s=e==null?void 0:e.onSendCodeSuccess)==null||s.call(e,{phone:u}),d}catch(d){return i(d),{success:!1}}}),[o,i,e==null?void 0:e.onSendCodeSuccess]),y=_react.useCallback.call(void 0, d=>_chunkYOOCOJAEjs.d.call(void 0, void 0,[d],function*({code:u,phone:f,disableSignup:s}){var v;try{if(a)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(!(f||r))throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid phone number before calling `loginWithCode`"});t({status:"submitting-code"});let w=yield o.auth.phone.loginWithCode(f||r,u,s?"no-signup":"login-or-sign-up");return t({status:"done"}),(v=e==null?void 0:e.onLoginSuccess)==null||v.call(e,w.user,w.is_new_user),w==null?void 0:w.user}catch(k){i(k)}}),[a,o,r,i,e==null?void 0:e.onLoginSuccess]);return{sendCode:l,loginWithCode:y,state:n}};var _expolinking = require('expo-linking'); var O = _interopRequireWildcard(_expolinking); var A = _interopRequireWildcard(_expolinking);var ht=e=>{let{appState:r,getCurrentAppState:c}=_chunkYOOCOJAEjs.k.call(void 0, ),{client:a,user:o,farcasterState:n,setFarcasterState:t}=_react.useContext.call(void 0, _chunkYOOCOJAEjs.E),i=_react.useRef.call(void 0, !1),l=_react.useCallback.call(void 0, f=>{var d;let s=_chunkYOOCOJAEjs.i.call(void 0, f);return t({status:"error",error:s}),(d=e==null?void 0:e.onError)==null||d.call(e,s),s},[e==null?void 0:e.onError,t]),y=_react.useCallback.call(void 0, ()=>{i.current=!0},[]);return{linkWithFarcaster:_react.useCallback.call(void 0, (v,...k)=>_chunkYOOCOJAEjs.d.call(void 0, void 0,[v,...k],function*({relyingParty:f,redirectUrl:s},d={pollAttempts:10,pollIntervalMs:1e3}){var w;try{if(i.current=!1,!o)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_link_farcaster_before_logged_in",error:"Must be logged in to link a Farcaster account."});t({status:"generating-uri"});let{connect_uri:b,channel_token:S}=yield a.auth.farcaster.initializeAuth({relyingParty:f,redirectUrl:O.createURL(s!=null?s:"/")});if(!b)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 O.openURL(b),t({status:"polling-status"});let E=0;for(;E<d.pollAttempts;){if(i.current)throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_canceled",error:"Farcaster polling canceled"});if(r.current!=="active"&&c()!=="active"){yield _chunkYOOCOJAEjs.j.call(void 0, d.pollIntervalMs);continue}let W=yield a.auth.farcaster.getFarcasterStatus({channel_token:S});if(W.state==="completed"){t({status:"submitting-token"});let P=yield a.auth.farcaster.link(_chunkYOOCOJAEjs.a.call(void 0, {channel_token:S},W));return t({status:"done"}),(w=e==null?void 0:e.onSuccess)==null||w.call(e,P),P}E++,yield _chunkYOOCOJAEjs.j.call(void 0, d.pollIntervalMs)}throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(b){throw l(b)}}),[a,e==null?void 0:e.onSuccess,l,t,o]),state:n,cancel:y}};var kt=e=>{let{client:r}=_react.useContext.call(void 0, _chunkYOOCOJAEjs.E),c=_react.useCallback.call(void 0, o=>{var t;let n=_chunkYOOCOJAEjs.i.call(void 0, o);return(t=e==null?void 0:e.onError)==null||t.call(e,n),n},[e==null?void 0:e.onError]);return{unlinkFarcaster:_react.useCallback.call(void 0, n=>_chunkYOOCOJAEjs.d.call(void 0, void 0,[n],function*({fid:o}){var t;try{let i=yield r.auth.farcaster.unlink({fid:o});return(t=e==null?void 0:e.onSuccess)==null||t.call(e,i),i}catch(i){throw c(i)}}),[r,e==null?void 0:e.onSuccess,c])}};var Pt=e=>{let{appState:r,getCurrentAppState:c}=_chunkYOOCOJAEjs.k.call(void 0, ),{client:a,user:o,farcasterState:n,setFarcasterState:t}=_react.useContext.call(void 0, _chunkYOOCOJAEjs.E),i=_react.useRef.call(void 0, !1),l=_react.useCallback.call(void 0, f=>{var d;let s=_chunkYOOCOJAEjs.i.call(void 0, f);return t({status:"error",error:s}),(d=e==null?void 0:e.onError)==null||d.call(e,s),s},[e==null?void 0:e.onError,t]),y=_react.useCallback.call(void 0, ()=>{i.current=!0},[]);return{loginWithFarcaster:_react.useCallback.call(void 0, (k,...w)=>_chunkYOOCOJAEjs.d.call(void 0, void 0,[k,...w],function*({relyingParty:f,redirectUrl:s,disableSignup:d},v={pollAttempts:10,pollIntervalMs:1e3}){var b;try{if(i.current=!1,o)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"});t({status:"generating-uri"});let{connect_uri:S,channel_token:E}=yield a.auth.farcaster.initializeAuth({relyingParty:f,redirectUrl:A.createURL(s!=null?s:"/")});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 A.openURL(S),t({status:"polling-status"});let W=0;for(;W<v.pollAttempts;){if(i.current)throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_canceled",error:"Farcaster polling canceled"});if(r.current!=="active"&&c()!=="active"){yield _chunkYOOCOJAEjs.j.call(void 0, v.pollIntervalMs);continue}let P=yield a.auth.farcaster.getFarcasterStatus({channel_token:E});if(P.state==="completed"){t({status:"submitting-token"});let F=yield a.auth.farcaster.authenticate(_chunkYOOCOJAEjs.a.call(void 0, {channel_token:E,mode:d?"no-signup":"login-or-sign-up"},P));return t({status:"done"}),(b=e==null?void 0:e.onSuccess)==null||b.call(e,F.user,F.is_new_user),F.user}W++,yield _chunkYOOCOJAEjs.j.call(void 0, v.pollIntervalMs)}throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(S){throw l(S)}}),[a,l,e==null?void 0:e.onSuccess,t,o,r]),state:n,cancel:y}};var Ot=e=>{let{client:r}=_react.useContext.call(void 0, _chunkYOOCOJAEjs.E),c=_react.useCallback.call(void 0, o=>{var t;let n=_chunkYOOCOJAEjs.i.call(void 0, o);return(t=e==null?void 0:e.onError)==null||t.call(e,n),n},[e==null?void 0:e.onError]);return{unlinkOAuth:_react.useCallback.call(void 0, t=>_chunkYOOCOJAEjs.d.call(void 0, void 0,[t],function*({provider:o,subject:n}){var i;try{let l=yield r.auth.oauth.unlink(o,n);return(i=e==null?void 0:e.onSuccess)==null||i.call(e,l),l}catch(l){throw c(l)}}),[r,e==null?void 0:e.onSuccess,c])}};var Tt=e=>{let{client:r}=_react.useContext.call(void 0, _chunkYOOCOJAEjs.E),c=_react.useRef.call(void 0, e.onOAuthTokenGrant);c.current=e.onOAuthTokenGrant,_react.useEffect.call(void 0, ()=>{let{unsubscribe:a}=r.addOAuthTokensListener(o=>{c.current(o)});return a},[r])};var Kt=()=>{let{user:e,client:r}=_react.useContext.call(void 0, _chunkYOOCOJAEjs.E);return{setRecovery:_react.useCallback.call(void 0, a=>_chunkYOOCOJAEjs.d.call(void 0, void 0,null,function*(){var i;let o=r.app.appId;if(!e)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before attempting to modify the recovery method."});let n=(i=_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, e))!=null?i:_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, e);if(!n)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});try{n.chain_type==="ethereum"?yield r.embeddedWallet.getProvider(n):n.chain_type==="solana"&&(yield r.embeddedWallet.getSolanaProvider(n,n.address,"solana-address-verifier"))}catch(l){throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"})}_jssdkcore.throwIfInvalidRecoveryUpgradePath.call(void 0, {currentRecoveryMethod:n.recovery_method,upgradeToRecoveryMethod:a.recoveryMethod});let t=yield Ve({appId:o,client:r,user:e,primaryAccount:n,recoveryParams:a});try{let{user:l}=yield r.embeddedWallet.setRecovery(t);return{user:l}}catch(l){throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_set_recovery_error",error:l instanceof Error?l.message:"Error setting password on embedded wallet"})}}),[r,e])}},Ve=n=>_chunkYOOCOJAEjs.d.call(void 0, void 0,[n],function*({appId:e,client:r,user:c,primaryAccount:a,recoveryParams:o}){switch(o.recoveryMethod){case"user-passcode":return _chunkYOOCOJAEjs.b.call(void 0, _chunkYOOCOJAEjs.a.call(void 0, {},o),{wallet:a});case"google-drive":{let t=yield _chunkYOOCOJAEjs.l.call(void 0, r);return{recoveryMethod:"google-drive",wallet:a,recoveryAccessToken:t}}case"icloud":{let{recoverySecret:t,iCloudRecordName:i}=yield _chunkYOOCOJAEjs.g.call(void 0, {appId:e,client:r,user:c});return{recoveryMethod:"icloud-native",recoverySecretOverride:t,iCloudRecordNameOverride:i,wallet:a}}default:throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}});var Yt=()=>{let{user:e,client:r}=_react.useContext.call(void 0, _chunkYOOCOJAEjs.E);return{recover:_react.useCallback.call(void 0, a=>_chunkYOOCOJAEjs.d.call(void 0, void 0,null,function*(){var l;if(!e)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before attempting to modify the recovery method."});let o=(l=_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, e))!=null?l:_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, e);if(!o)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let n,t,i;switch(a.recoveryMethod){case"user-passcode":n=a.password;break;case"google-drive":t=yield _chunkYOOCOJAEjs.l.call(void 0, r);break;case"icloud":let{recoverySecret:y}=yield _chunkYOOCOJAEjs.h.call(void 0, {client:r,walletAddress:o.address,chainType:o.chain_type});i=y;break}try{o.chain_type==="ethereum"?yield r.embeddedWallet.getProvider(o,n,t,i):o.chain_type==="solana"&&(yield r.embeddedWallet.getSolanaProvider(o,o.address,"solana-address-verifier",n,t,i))}catch(y){throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"})}}),[r,e])}};var z=(e={})=>{let{wallet:r,createWalletCallbacks:c,recoverWalletCallbacks:a,setWalletRecoveryCallbacks:o}=_react.useContext.call(void 0, _chunkYOOCOJAEjs.E),{onCreateWalletSuccess:n,onCreateWalletError:t,onRecoverWalletError:i,onRecoverWalletSuccess:l,onSetWalletRecoverySuccess:y,onSetWalletRecoveryError:u}=e;return _react.useEffect.call(void 0, ()=>{c.current={onSuccess:n,onError:t}},[n,t]),_react.useEffect.call(void 0, ()=>{a.current={onSuccess:l,onError:i}},[l,i]),_react.useEffect.call(void 0, ()=>{o.current={onSuccess:y,onError:u}},[l,i]),r};var ao=({onStateChange:e})=>{let r=z();return _react.useEffect.call(void 0, ()=>{e(r)},[r])};var uo=()=>{let{getIdentityToken:e}=_react.useContext.call(void 0, _chunkYOOCOJAEjs.E);return{getIdentityToken:e}};var wo=e=>{let{user:r,client:c}=_react.useContext.call(void 0, _chunkYOOCOJAEjs.E),a=_react.useCallback.call(void 0, n=>{var i;let t=_chunkYOOCOJAEjs.i.call(void 0, n);return(i=e==null?void 0:e.onError)==null||i.call(e,t),t},[e==null?void 0:e.onError]);return{create:_react.useCallback.call(void 0, ()=>_chunkYOOCOJAEjs.d.call(void 0, void 0,null,function*(){var n;try{if(r)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 t=yield c.auth.guest.create();return(n=e==null?void 0:e.onSuccess)==null||n.call(e,t.user,t.is_new_user),t.user}catch(t){throw a(t)}}),[c,a,r,e==null?void 0:e.onSuccess])}};function Eo({onMfaRequired:e}){let{client:r,user:c}=_react.useContext.call(void 0, _chunkYOOCOJAEjs.E);_react.useEffect.call(void 0, ()=>{function a(){return _chunkYOOCOJAEjs.d.call(void 0, this,null,function*(){var o;yield e((o=c==null?void 0:c.mfa_methods.map(({type:n})=>n))!=null?o:[])})}return r.mfaPromises.on("mfaRequired",a),()=>{r.mfaPromises.off("mfaRequired",a)}},[r,c,e])}function Uo(){let{client:e,mfaConfig:r}=_react.useContext.call(void 0, _chunkYOOCOJAEjs.E),c=_react.useCallback.call(void 0, n=>_chunkYOOCOJAEjs.d.call(void 0, this,null,function*(){switch(n.method){case"sms":yield e.mfa.sms.sendCode({action:"verify"});return;case"passkey":let{options:t}=yield e.mfa.passkey.generateAuthenticationOptions({relying_party:n.relyingParty||(r==null?void 0:r.relyingParty)});return _chunkYOOCOJAEjs.K.call(void 0, t);case"totp":return;default:throw new Error(`Unsupported MFA method: ${n.mfaMethod}`)}}),[e,r==null?void 0:r.relyingParty]),a=_react.useCallback.call(void 0, n=>_chunkYOOCOJAEjs.d.call(void 0, this,null,function*(){var t,i,l;switch(n.method){case"totp":case"sms":if(typeof n.mfaCode!="string")throw new (0, _jssdkcore.PrivyClientError)({code:"invalid_mfa_code",error:"Invalid MFA code"});(t=e.mfaPromises.rootPromise.current)==null||t.resolve({mfaMethod:n.method,mfaCode:n.mfaCode,relyingParty:n.relyingParty||(r==null?void 0:r.relyingParty)||""}),yield new Promise((s,d)=>{e.mfaPromises.submitPromise.current={resolve:s,reject:d}});break;case"passkey":if(typeof n.mfaCode=="string")throw new (0, _jssdkcore.PrivyClientError)({code:"invalid_passkey_response",error:"Invalid authenticator response"});let y=yield _chunkYOOCOJAEjs.I.call(void 0, n.mfaCode),u=_chunkYOOCOJAEjs.J.call(void 0, y);(i=e.mfaPromises.rootPromise.current)==null||i.resolve({mfaMethod:n.method,relyingParty:n.relyingParty||"",mfaCode:u}),yield new Promise((s,d)=>{e.mfaPromises.submitPromise.current={resolve:s,reject:d}});break;default:let f=new (0, _jssdkcore.PrivyClientError)({code:"unsupported_mfa_method",error:"Unsupported MFA method"});throw(l=e.mfaPromises.rootPromise.current)==null||l.reject(f),f}}),[e,r==null?void 0:r.relyingParty]),o=_react.useCallback.call(void 0, ()=>{var n;(n=e.mfaPromises.rootPromise.current)==null||n.reject(new (0, _jssdkcore.PrivyClientError)({code:"mfa_canceled",error:"MFA canceled"}))},[e]);return{init:c,submit:a,cancel:o}}function Ro(){let{client:e}=_react.useContext.call(void 0, _chunkYOOCOJAEjs.E),r=_react.useCallback.call(void 0, o=>_chunkYOOCOJAEjs.d.call(void 0, this,null,function*(){switch(o.method){case"sms":case"totp":return yield e.mfa.initEnrollMfa(o);case"passkey":return;default:throw new Error(`Unsupported MFA method: ${o.mfaMethod}`)}}),[e]),c=_react.useCallback.call(void 0, o=>_chunkYOOCOJAEjs.d.call(void 0, this,null,function*(){switch(o.method){case"sms":case"totp":case"passkey":yield e.mfa.submitEnrollMfa(o);return;default:throw new Error(`Unsupported MFA method: ${o.mfaMethod}`)}}),[e]),a=_react.useCallback.call(void 0, o=>_chunkYOOCOJAEjs.d.call(void 0, this,null,function*(){switch(o.method){case"sms":case"totp":yield e.mfa.unenrollMfa(o.method);return;case"passkey":yield e.mfa.submitEnrollMfa({method:"passkey",credentialIds:[]});return;default:throw new Error(`Unsupported MFA method: ${o.method}`)}}),[e]);return{initMfaEnrollment:r,submitMfaEnrollment:c,unenrollMfa:a}}var cr=(e={})=>{let{solanaWallet:r,createSolanaWalletCallbacks:c,recoverSolanaWalletCallbacks:a}=_react.useContext.call(void 0, _chunkYOOCOJAEjs.E),{onCreateWalletSuccess:o,onCreateWalletError:n,onRecoverWalletError:t,onRecoverWalletSuccess:i}=e;return _react.useEffect.call(void 0, ()=>{c.current={onSuccess:o,onError:n}},[o,n]),_react.useEffect.call(void 0, ()=>{a.current={onSuccess:i,onError:t}},[i,t]),r};var Y=()=>{let{user:e,isReady:r,logout:c,getAccessToken:a,error:o}=_react.useContext.call(void 0, _chunkYOOCOJAEjs.E);return{user:e,isReady:r,error:o,logout:c,getAccessToken:a}};var Z=()=>{let{client:e}=_react.useContext.call(void 0, _chunkYOOCOJAEjs.E);return e};var hr=()=>{let{user:e}=Y(),r=Z(),c=_react.useMemo.call(void 0, ()=>{var l;let o=(l=_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, e))!=null?l:_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, e);if(!o)return[];let n=_jssdkcore.getAllUserEmbeddedBitcoinWallets.call(void 0, e),{entropyId:t,entropyIdVerifier:i}=_chunkYOOCOJAEjs.f.call(void 0, o);return n.map(y=>({address:y.address,walletIndex:y.wallet_index,publicKey:y.public_key,chainType:y.chain_type,getProvider:()=>r.embeddedWallet.getBitcoinProvider({wallet:y,entropyId:t,entropyIdVerifier:i})}))},[r,e]),a=_react.useCallback.call(void 0, t=>_chunkYOOCOJAEjs.d.call(void 0, void 0,[t],function*({chainType:o,createAdditional:n=!1}){var k;let{user:i}=yield r.user.get(),l=(k=_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, i))!=null?k:_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, i);if(!l)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:y,entropyIdVerifier:u}=_chunkYOOCOJAEjs.f.call(void 0, l),f=_jssdkcore.getAllUserEmbeddedBitcoinWallets.call(void 0, i).filter(w=>w.chain_type===o);if(!n&&f.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 s=f.length===0?0:Math.max(...f.map(w=>w.wallet_index),0)+1,d=yield r.embeddedWallet.add({chainType:o,hdWalletIndex:s,entropyId:y,entropyIdVerifier:u}),v=_jssdkcore.getAllUserEmbeddedBitcoinWallets.call(void 0, d.user).find(w=>w.chain_type===o&&w.wallet_index===s);if(!d.user||!v)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Unknown error creating wallet"});return{user:d.user,provider:yield r.embeddedWallet.getBitcoinProvider({wallet:v,entropyId:y,entropyIdVerifier:u})}}),[r]);return{wallets:c,create:a}};exports.a = vr; exports.b = Wr; exports.c = Or; exports.d = Gr; exports.e = Jr; exports.f = Zr; exports.g = at; exports.h = ht; exports.i = kt; exports.j = Pt; exports.k = Ot; exports.l = Tt; exports.m = Kt; exports.n = Yt; exports.o = z; exports.p = ao; exports.q = uo; exports.r = wo; exports.s = Eo; exports.t = Uo; exports.u = Ro; exports.v = cr; exports.w = Y; exports.x = Z; exports.y = hr;
@@ -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; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var kt=Object.defineProperty,Ct=Object.defineProperties;var At=Object.getOwnPropertyDescriptors;var ne=Object.getOwnPropertySymbols;var xe=Object.prototype.hasOwnProperty,Ie=Object.prototype.propertyIsEnumerable;var Oe=(e,t,r)=>t in e?kt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,E= exports.a =(e,t)=>{for(var r in t||(t={}))xe.call(t,r)&&Oe(e,r,t[r]);if(ne)for(var r of ne(t))Ie.call(t,r)&&Oe(e,r,t[r]);return e},O= exports.b =(e,t)=>Ct(e,At(t));var Rr=(e,t)=>{var r={};for(var o in e)xe.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(e!=null&&ne)for(var o of ne(e))t.indexOf(o)<0&&Ie.call(e,o)&&(r[o]=e[o]);return r};var v=(e,t,r)=>new Promise((o,s)=>{var n=i=>{try{l(r.next(i))}catch(d){s(d)}},c=i=>{try{l(r.throw(i))}catch(d){s(d)}},l=i=>i.done?o(i.value):Promise.resolve(i.value).then(n,c);l((r=r.apply(e,t)).next())});var _expoappleauthentication = require('expo-apple-authentication'); var yt = _interopRequireWildcard(_expoappleauthentication);var _expoapplication = require('expo-application');var _expolinking = require('expo-linking'); var G = _interopRequireWildcard(_expolinking); var N = _interopRequireWildcard(_expolinking); var B = _interopRequireWildcard(_expolinking); var J = _interopRequireWildcard(_expolinking);var _exposecurestore = require('expo-secure-store'); var I = _interopRequireWildcard(_exposecurestore);var _expowebbrowser = require('expo-web-browser'); var oe = _interopRequireWildcard(_expowebbrowser); var ze = _interopRequireWildcard(_expowebbrowser);var _react = require('react'); var _react2 = _interopRequireDefault(_react);var _reactnative = require('react-native');var _jssdkcore = require('@privy-io/js-sdk-core'); var _jssdkcore2 = _interopRequireDefault(_jssdkcore);var _expocrypto = require('expo-crypto');var Ue={name:"@privy-io/expo",version:"0.34.3",description:"Expo client for the Privy Auth API",keywords:["authentication","authorization","identity","privacy","privy","user data","react-native","expo","web3"],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"}},main:"./dist/esm/index.js",source:"./src/index.ts",types:"./dist/index.d.ts",files:["dist/**/*","LICENSE","README.md"],scripts:{build:"npx tsup --clean --minify","check-types":"npx tsc --noEmit",clean:"rm -rf dist .turbo",dev:"npx tsup --watch",format:'eslint "src/**/*.{ts,tsx,js,jsx}" --fix',"generate-types":"npx tsup --dts-only",lint:'npx eslint "src/**/*.{ts,tsx,js,jsx}"',test:'jest --testMatch "**/test/**/*.test.{ts,tsx}"'},browserslist:["defaults","node >= 18","not op_mini all"],dependencies:{"@privy-io/js-sdk-core":"0.35.2","react-fast-compare":"^3.2.2",zustand:"^4.4.1"},devDependencies:{"@privy-io/eslint-config-custom":"*","@privy-io/tsconfig":"*","@simplewebauthn/types":"9.0.1","@svgr/core":"^8.1.0","@svgr/plugin-jsx":"^8.1.0","@svgr/plugin-svgo":"^8.1.0","@testing-library/react-native":"^12.8.1","@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",jest:"^29.7.0","jest-expo":"~51.0.0",tsup:"^6.2.3",typescript:"~5.5.3"},peerDependencies:{"@expo-google-fonts/inter":"*","@privy-io/expo-native-extensions":"0.0.3","expo-apple-authentication":"*","expo-application":"*","expo-clipboard":"*","expo-constants":"*","expo-crypto":"*","expo-font":"*","expo-linking":"*","expo-secure-store":"*","expo-web-browser":"*",permissionless:"^0.2.10",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.21.36"},peerDependenciesMeta:{"@expo-google-fonts/inter":{optional:!0},"expo-font":{optional:!0},permissionless:{optional:!0},viem:{optional:!0}},publishConfig:{access:"public"}};var _reactnativewebview = require('react-native-webview'); var _reactnativewebview2 = _interopRequireDefault(_reactnativewebview);var Me=({client:e,isClientReady:t,setWebViewState:r,webViewState:o,logLevel:s})=>{let n=_react.useRef.call(void 0, null);_react.useEffect.call(void 0, ()=>{n.current&&o==="loaded"&&e.setMessagePoster(n.current)},[e,n.current,o==="loaded"]),_react.useEffect.call(void 0, ()=>_reactnative.AppState.addEventListener("change",i=>v(void 0,null,function*(){n.current&&i==="active"&&((yield e.embeddedWallet.ping(500))||(n.current.reload(),r("reloading")))})).remove,[]);let c=_react.useCallback.call(void 0, l=>v(void 0,null,function*(){let{data:i}=l.nativeEvent;e.embeddedWallet.onMessage(JSON.parse(i))}),[e]);return t?_react2.default.createElement(_reactnativewebview2.default,{style:{flex:1},ref:n,cacheEnabled:!1,cacheMode:"LOAD_NO_CACHE",source:{uri:e.embeddedWallet.getURL()},webviewDebuggingEnabled:s==="DEBUG",onLoad:()=>r("loaded"),onError:console.error,onMessage:c}):null};function Fe(n){return v(this,arguments,function*({client:e,setSolanaWallet:t,createSolanaWalletCallbacks:r,setSolanaRecoveryFlowState:o,opts:s}){var c,l,i;t({status:"creating"});try{let{user:d}=yield e.user.get(),a=_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, d),u=a[0];if(s!=null&&s.recoveryMethod&&s.recoveryMethod!=="privy")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Unsupported recovery method for solana wallet."});if(!(s!=null&&s.createAdditional)&&u)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 m,f;if(u){let w=Math.max(...a.map(_=>_.wallet_index),0)+1,p=yield e.embeddedWallet.createAdditionalSolana({primaryPublicKey:u.address,hdWalletIndex:w});m=p.provider,f=p.user}else{let w=(c=_jssdkcore.getUserEmbeddedWallet.call(void 0, d))!=null?c:void 0,p=yield e.embeddedWallet.createSolana({ethereumAccount:w});m=p.provider,f=p.user}let y=_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, f)[0];if(!y)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Unknown error creating solana wallet"});return(i=(l=r.current)==null?void 0:l.onSuccess)==null||i.call(l,m),t({status:"connected",publicKey:y.public_key}),o({status:"initial"}),m}catch(d){let a=d instanceof Error?d.message:"Error creating embedded wallet";throw t({status:"error",error:a}),o({status:"initial"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:a})}})}function ae(d){return v(this,arguments,function*({client:e,account:t,setWallet:r,recoverWalletCallbacks:o,recoveryMethod:s,setRecoveryFlowState:n,password:c,recoveryToken:l,recoverySecretOverride:i}){var a,u,m,f;if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});switch(s){case"user-passcode":if(!c)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!l)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!i)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Record name is required for icloud recovery method"});break}r({status:"connecting",account:t});try{let y=yield e.embeddedWallet.getProvider(t,c,l,i);return r({status:"connected",provider:y,account:t}),n({status:"initial"}),(u=(a=o.current)==null?void 0:a.onSuccess)==null||u.call(a,y),y}catch(y){r({status:"needs-recovery",account:t}),n({status:"initial"});let w=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:y instanceof Error?y.message:"Error recovering embedded wallet"});throw(f=(m=o.current)==null?void 0:m.onError)==null||f.call(m,w),w}})}function je(l){return v(this,arguments,function*({client:e,account:t,entropyId:r,entropyIdVerifier:o,setSolanaWallet:s,recoverSolanaWalletCallbacks:n,setSolanaRecoveryFlowState:c}){var i,d,a,u;s({status:"connecting"});try{let m=yield e.embeddedWallet.getSolanaProvider(t,r,o);return s({status:"connected",publicKey:m._publicKey}),c({status:"initial"}),(d=(i=n.current)==null?void 0:i.onSuccess)==null||d.call(i,m),m}catch(m){s({status:"needs-recovery"}),c({status:"initial"});let f=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:m instanceof Error?m.message:"Error recovering embedded wallet"});throw(u=(a=n.current)==null?void 0:a.onError)==null||u.call(a,f),f}})}var se=e=>{if(e.chain_type==="ethereum")return{entropyId:e.address,entropyIdVerifier:"ethereum-address-verifier"};if(e.chain_type==="solana")return{entropyId:e.address,entropyIdVerifier:"solana-address-verifier"};throw new Error("Invalid embedded wallet account type")};var Ne=({client:e,user:t,solanaWallet:r,setSolanaWallet:o,setSolanaRecoveryFlowState:s,webViewState:n,createSolanaWalletCallbacks:c,recoverSolanaWalletCallbacks:l})=>{let i=_react.useMemo.call(void 0, ()=>_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, t),[t]),d=_react.useMemo.call(void 0, ()=>{var y;return i.length===0?null:(y=_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, t))!=null?y:_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, t)},[t,i]),a=_react.useMemo.call(void 0, ()=>{if(!d)return[];let{entropyId:y,entropyIdVerifier:w}=se(d);return i.map(p=>({address:p.address,publicKey:p.address,walletIndex:p.wallet_index,getProvider:()=>e.embeddedWallet.getSolanaProvider(p,y,w)}))},[i,d,e]),u=_react.useCallback.call(void 0, y=>v(void 0,null,function*(){return yield Fe({client:e,setSolanaWallet:o,createSolanaWalletCallbacks:c,setSolanaRecoveryFlowState:s,opts:y})}),[e,c]),m=_react.useCallback.call(void 0, ()=>v(void 0,null,function*(){if(!d)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{entropyId:y,entropyIdVerifier:w}=se(d);return je({client:e,account:i[0],entropyId:y,entropyIdVerifier:w,setSolanaWallet:o,recoverSolanaWalletCallbacks:l,setSolanaRecoveryFlowState:s})}),[e,d,i,l,s,o]),f=_react.useCallback.call(void 0, ()=>v(void 0,null,function*(){if(!d)throw o({status:"not-created"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});o(y=>y.status==="connected"?{status:"reconnecting"}:{status:"connecting"});try{let{entropyId:y,entropyIdVerifier:w}=se(d),p=yield e.embeddedWallet.getSolanaProvider(i[0],y,w);return o({status:"connected",publicKey:i[0].public_key}),p}catch(y){throw _jssdkcore.errorIndicatesRecoveryIsNeeded.call(void 0, y)?(o({status:"needs-recovery"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):y instanceof Error?(o({status:"error",error:y.message}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:y.message})):(o({status:"error",error:"Error loading embedded wallet"}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,d]);return _react.useEffect.call(void 0, ()=>{if(!t&&r.status!=="disconnected")return o({status:"disconnected"});n==="loaded"&&f().catch(()=>{})},[n,t,d]),_react.useEffect.call(void 0, ()=>{r.status==="error"&&r.error.includes("User must be logged in")&&f()},[r.status]),{create:u,recover:m,getProvider:f,wallets:a}};function de(a){return v(this,arguments,function*({client:e,setWallet:t,createWalletCallbacks:r,recoveryMethod:o,setRecoveryFlowState:s,password:n,recoveryToken:c,recoverySecretOverride:l,iCloudRecordNameOverride:i,solanaAccount:d}){var m,f;switch(o){case"user-passcode":if(!n)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!c)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!l||!i)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 u=o==="icloud"?"icloud-native":o;try{let{provider:y,user:w}=yield e.embeddedWallet.create(n,u,c,l,i,d),p=_jssdkcore.getUserEmbeddedWallet.call(void 0, w);return(f=(m=r.current)==null?void 0:m.onSuccess)==null||f.call(m,y),t({status:"connected",provider:y,account:p}),s({status:"initial"}),y}catch(y){let w=y instanceof Error?y.message:"Error creating embedded wallet";throw t({status:"error",error:w,account:null}),s({status:"initial"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:w})}})}function Ke(){return v(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 he(o){return v(this,arguments,function*({user:e,appId:t,client:r}){var l;if(_reactnative.Platform.OS==="android")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let s=yield Ke(),n=yield r.recovery.icloudAuth.getICloudConfiguration("expo-ios");if(!(n==null?void 0:n.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:i,iCloudRecordName:d}=yield s.writeRecoverySecretToICloud({containerId:n.container_identifier,appId:t,userId:e.id});return{recoverySecret:i,iCloudRecordName:d}}catch(i){if(i instanceof Error){let d=(l=i.message.split("Caused by: ")[1])!=null?l:"Error writing to iCloud";throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:d})}throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}function qe(o){return v(this,arguments,function*({walletAddress:e,client:t,chainType:r}){var d;if(_reactnative.Platform.OS==="android")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let s=yield Ke(),c=(yield t.recovery.getRecoveryKeyMaterial(e,r)).icloud_record_name;if(!c)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery not properly backed up."});let l=yield t.recovery.icloudAuth.getICloudConfiguration("expo-ios"),i=l==null?void 0:l.container_identifier;if(!i)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:a}=yield s.readRecoverySecretFromICloud({containerId:i,recordName:c});return{recoverySecret:a}}catch(a){if(a instanceof Error){let u=(d=a.message.split("Caused by: ")[1])!=null?d:"Error writing to iCloud";throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:u})}throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}var _reactfastcompare = require('react-fast-compare'); var _reactfastcompare2 = _interopRequireDefault(_reactfastcompare);var He=e=>t=>e(r=>_reactfastcompare2.default.call(void 0, r,t)?r:t);function x(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 co=e=>new Promise(t=>setTimeout(t,e));function vo(){let e=_react.useRef.call(void 0, _reactnative.AppState.currentState);_react.useEffect.call(void 0, ()=>_reactnative.AppState.addEventListener("change",o=>{e.current=o}).remove,[]);function t(){return _reactnative.AppState.currentState}return{appState:e,getCurrentAppState:t}}function ee(s){return v(this,arguments,function*({provider:e,redirectUri:t,client:r,onError:o}){try{let n;switch(e){case"google-drive":{let{url:d}=yield r.recovery.auth.generateURL(N.createURL(t||"/"));n=d;break}default:throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid provider",code:"embedded_wallet_recovery_error"})}let c=yield ze.openAuthSessionAsync(n);if(_reactnative.Platform.OS==="android")return;if(c.type!=="success")throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth session failed",code:"embedded_wallet_recovery_error"});let{queryParams:l}=N.parse(c.url),i;switch(e){case"google-drive":{let{privy_oauth_state:d,privy_oauth_code:a}=l;if(!a||!d)throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth invalid credentials",code:"embedded_wallet_recovery_error"});i=yield ce({oAuthCode:a,oAuthState:d,client:r});break}default:throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth invalid provider",code:"embedded_wallet_recovery_error"})}return i}catch(n){throw o==null||o(x(n)),n}})}function ce(o){return v(this,arguments,function*({oAuthCode:e,oAuthState:t,client:r}){let{access_token:s}=yield r.recovery.auth.authorize(e,t);if(!s)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:"login_with_oauth_returned_with_invalid_credentials"});return s})}var Ht=2*60*1e3;function zt(e){let t;return new Promise((r,o)=>{t=N.addEventListener("url",n=>v(this,[n],function*({url:s}){if(!s)return;let{queryParams:c}=N.parse(s),{privy_oauth_state:l,privy_oauth_code:i}=c!=null?c:{};if(typeof i!="string"||typeof l!="string")return;let d=yield ce({client:e,oAuthCode:i,oAuthState:l});r(d)})),setTimeout(()=>{o(new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_set_recovery_error",error:"Failed to complete Google Drive recovery flow"}))},Ht)}).finally(()=>{t==null||t.remove()})}function Ao(e){return v(this,null,function*(){let t;_reactnative.Platform.OS==="android"&&(t=zt(e));let r=yield ee({provider:"google-drive",client:e});return r!=null?r:yield t})}function ue(n){return v(this,arguments,function*({client:e,recoveryInput:t,setWalletRecoveryCallbacks:r,setRecoveryFlowState:o,setWallet:s}){var c,l,i,d;try{let{provider:a,user:u}=yield e.embeddedWallet.setRecovery(t),m=a,f=_jssdkcore.getUserEmbeddedWallet.call(void 0, u);return s({status:"connected",provider:m,account:f}),(l=(c=r.current)==null?void 0:c.onSuccess)==null||l.call(c,m),o({status:"initial"}),m}catch(a){let u=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_set_recovery_error",error:a instanceof Error?a.message:"Error setting password on embedded wallet"});throw(d=(i=r.current)==null?void 0:i.onError)==null||d.call(i,u),o({status:"initial"}),u}})}function Ye(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}:{recoveryMethod:e.recoveryMethod}}var Xe=({client:e,user:t,appId:r,wallet:o,setWallet:s,setRecoveryFlowState:n,webViewState:c,createWalletCallbacks:l,recoverWalletCallbacks:i,setWalletRecoveryCallbacks:d})=>{let a=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedWallet.call(void 0, t),[t]),u=_react.useCallback.call(void 0, p=>v(void 0,null,function*(){var R,q;if(a)throw new (0, _jssdkcore.PrivyClientError)({error:"This user already has an embedded wallet",code:"embedded_wallet_already_exists"});let{user:_}=yield e.user.get(),{password:g,recoveryMethod:h}=Ye(p),b,S,W;if(h==="google-drive"&&(b=yield ee({provider:h,client:e,onError:(R=l.current)==null?void 0:R.onError}),n({status:"creating-wallet"}),!b))return null;if(h==="icloud"){if(!_)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before creating a wallet with iCloud."});let{recoverySecret:T,iCloudRecordName:D}=yield he({user:_,appId:r,client:e});S=T,W=D}return yield de({client:e,setWallet:s,createWalletCallbacks:l,recoveryMethod:h,setRecoveryFlowState:n,password:g,recoverySecretOverride:S,iCloudRecordNameOverride:W,solanaAccount:(q=_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, _))!=null?q:void 0})}),[e,a,t]),m=_react.useCallback.call(void 0, p=>v(void 0,null,function*(){var h;if(o.status!=="connected")throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"});if(!a)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});if(_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, t))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."});_jssdkcore.throwIfInvalidRecoveryUpgradePath.call(void 0, {currentRecoveryMethod:a.recovery_method,upgradeToRecoveryMethod:p.recoveryMethod});let _,g;switch(p.recoveryMethod){case"privy":g=O(E({},p),{wallet:a});break;case"user-passcode":g=O(E({},p),{wallet:a,password:p.password});break;case"google-drive":if(_=yield ee({provider:p.recoveryMethod,client:e,onError:(h=d.current)==null?void 0:h.onError}),n({status:"upgrading-recovery"}),!_)return null;g={recoveryMethod:"google-drive",wallet:a,recoveryAccessToken:_};break;case"icloud":if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before backing up to iCloud."});let{recoverySecret:b,iCloudRecordName:S}=yield he({user:t,appId:r,client:e});g={recoveryMethod:"icloud-native",recoverySecretOverride:b,iCloudRecordNameOverride:S,wallet:a};break;default:throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}return ue({client:e,recoveryInput:g,setWalletRecoveryCallbacks:d,setRecoveryFlowState:n,setWallet:s})}),[e,a,o.status,t]),f=_react.useCallback.call(void 0, p=>v(void 0,null,function*(){return m({recoveryMethod:"user-passcode",password:p})}),[e,a,o.status]),y=_react.useCallback.call(void 0, p=>v(void 0,null,function*(){var S;if(!a)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{password:_,recoveryMethod:g}=Ye(p),h,b;if(g==="google-drive"&&(h=yield ee({provider:g,client:e,onError:(S=i.current)==null?void 0:S.onError}),n({status:"recovering"}),!h))return null;if(g==="icloud"){if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before recovering via iCloud."});let{recoverySecret:W}=yield qe({client:e,walletAddress:a.address});b=W}return ae({client:e,account:a,setWallet:s,recoverWalletCallbacks:i,recoveryMethod:g,setRecoveryFlowState:n,password:_,recoveryToken:h,recoverySecretOverride:b})}),[e,a]),w=_react.useCallback.call(void 0, ()=>v(void 0,null,function*(){if(!a)throw s({status:"not-created",account:null}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});s(p=>p.status==="connected"?{status:"reconnecting",account:a}:{status:"connecting",account:a});try{let p=yield e.embeddedWallet.getProvider(a);return s({status:"connected",provider:p,account:a}),p}catch(p){throw _jssdkcore.errorIndicatesRecoveryIsNeeded.call(void 0, p)?(s({status:"needs-recovery",account:a}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):p instanceof Error?(s({status:"error",error:p.message,account:a}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:p.message})):(s({status:"error",error:"Error loading embedded wallet",account:a}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,a]);return _react.useEffect.call(void 0, ()=>{if(!t&&o.status!=="disconnected")return s({status:"disconnected",account:null});c==="loaded"&&w().catch(()=>{})},[c,t,a]),_react.useEffect.call(void 0, ()=>{o.status==="error"&&o.error.includes("User must be logged in")&&w()},[o.status]),{create:u,recover:y,setPassword:f,setRecovery:m,getProvider:w}};var $e=({client:e,user:t,isReady:r,customAuth:o})=>{let[s,n]=_react.useState.call(void 0, {status:"initial"});return _react.useEffect.call(void 0, ()=>{(()=>v(void 0,null,function*(){if(!(o!=null&&o.enabled)){n({status:"not-enabled"});return}n({status:"loading"});let{getCustomAccessToken:l,isLoading:i}=o;if(!(!r||i))try{let d=yield l();if(!d&&t){yield e.auth.logout(),n({status:"done"});return}if(!d){n({status:"done"});return}if(t){n({status:"done"});return}if(!(yield e.auth.customProvider.syncWithToken(d))){yield e.auth.logout(),n({status:"error",error:new (0, _jssdkcore.PrivyClientError)({error:"Failed to sync with custom auth provider",code:"third_party_auth_error"})});return}n({status:"done"})}catch(d){if(console.log("Error syncing with custom auth provider",d),n({status:"error",error:d}),t)throw yield e.auth.logout(),new (0, _jssdkcore.PrivyClientError)({error:"Third-party auth failed",code:"third_party_auth_error"})}}))()},[e,t,r,o==null?void 0:o.enabled,o==null?void 0:o.getCustomAccessToken,o==null?void 0:o.isLoading]),{customAuthState:s,customAuthStateIsSettled:s.status!=="loading"&&s.status!=="initial"}};var Ze=({client:e,user:t,isUserInitialized:r,oAuthState:o,oAuthCallbacks:s,setOAuthState:n,recoveryFlowState:c,oAuthStateRef:l})=>{let i=B.useURL(),d=_react.useCallback.call(void 0, a=>{var m,f;let u=x(a);n({status:"error",error:u}),(f=(m=s.current).onError)==null||f.call(m,u)},[n]);return _react.useEffect.call(void 0, ()=>{function a(){return v(this,null,function*(){var y,w;if(!i||o.status!=="loading"||c.status!=="initial")return;let{queryParams:u}=B.parse(i),{privy_oauth_state:m,privy_oauth_code:f}=u;if(!f||!m){n({status:"done"});return}try{let p,_;if(t)p=yield e.auth.oauth.linkWithCode(f,m);else{let g=yield e.auth.oauth.loginWithCode(f,m,void 0,void 0,l.current.disableSignup?"no-signup":"login-or-sign-up");p=g.user,_=!!g.is_new_user}return(w=(y=s.current).onSuccess)==null||w.call(y,p,_),l.current={},n({status:"done"}),yield B.openURL(i.split("?")[0])}catch(p){l.current={},d(p)}})}_reactnative.Platform.OS==="android"&&r&&a()},[i,r])};var et=({client:e,user:t,createWalletCallbacks:r,recoverWalletCallbacks:o,setWalletRecoveryCallbacks:s,recoveryFlowState:n,oAuthState:c,setRecoveryFlowState:l,setWallet:i,appStateVisible:d,webViewLoaded:a})=>{let u=J.useURL(),m=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedWallet.call(void 0, t),[t]),f=_react.useCallback.call(void 0, y=>{var p,_,g,h;let w=x(y);n.status==="creating-wallet"?(_=(p=r.current).onError)==null||_.call(p,x(w)):(h=(g=o.current).onError)==null||h.call(g,x(w)),l({status:"initial"})},[n]);return _react.useEffect.call(void 0, ()=>{function y(){return v(this,null,function*(){var g;if(!u&&n.status!=="initial"&&d&&f(new Error("Recovery OAuth session failed")),!u||n.status==="initial"||c.status!=="initial"||!d||!a)return;let{queryParams:w}=J.parse(u),{privy_oauth_state:p,privy_oauth_code:_}=w;if(!(!_||!p)){yield J.openURL(u.split("?")[0]);try{let h=yield ce({oAuthCode:_,oAuthState:p,client:e});if(n.status==="creating-wallet"){let b=(g=_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, t))!=null?g:void 0;yield de({client:e,setWallet:i,createWalletCallbacks:r,recoveryMethod:"google-drive",setRecoveryFlowState:l,recoveryToken:h,solanaAccount:b})}else if(n.status==="upgrading-recovery"){if(!m)throw new Error("Embedded wallet not found");yield ue({client:e,recoveryInput:{recoveryMethod:"google-drive",wallet:m,recoveryAccessToken:h},setWalletRecoveryCallbacks:s,setRecoveryFlowState:l,setWallet:i})}else yield ae({client:e,account:m,setWallet:i,recoverWalletCallbacks:o,recoveryMethod:"google-drive",setRecoveryFlowState:l,recoveryToken:h})}catch(h){f(h)}}})}_reactnative.Platform.OS==="android"&&y()},[u,n.status,d,a])};var tt=({client:e,isUserInitialized:t,setIsUserInitialized:r,setError:o})=>{_react.useEffect.call(void 0, ()=>{t||(()=>v(void 0,null,function*(){try{yield e.initialize()}catch(n){o(n instanceof Error?n:new Error(String(n)))}try{yield e.user.get()}catch(n){}finally{r(!0)}}))()},[e,t,o,r])};var _zustand = require('zustand');var P=class extends Error{constructor(r,o){super(o);this.code=r,this.error=o}},rt= exports.t =class extends P{constructor(r){super("underlying_error",r instanceof Error?r.message:"An underlying error occurred");this.wrappedError=r}};var be={success:e=>({value:e}),error:e=>({error:e})};var ot=e=>{let t=Array.from(new Set(e));return t.length===0?be.error(new P("no_login_methods_available","No login methods available")):be.success(t)},_e=e=>{let t=e.length,r=e.every(o=>o==="sms"||o==="email");return t<=2&&r?e[0]:null},vn= exports.u =(e,t)=>{if(e.length!==2)return null;let[r,o]=e;return t===r?o:r},fn= exports.v ={email:"email",sms:"phone",google:"Google",apple:"Apple",discord:"Discord",twitter:"X",github:"Github",spotify:"Spotify",instagram:"Instagram",tiktok:"Tiktok",linkedin:"LinkedIn"};function nt(e){return new Promise((t,r)=>{e({resolve:t,reject:r})})}function cr(e,t){return{resolve:r=>{t(),e.resolve(r)},reject:r=>{t(),e.reject(r)}}}function it(e,t,r){let o=setTimeout(()=>{e.reject(t())},r);return cr(e,()=>{clearTimeout(o)})}var mr=1e3*60*5,F=_zustand.create.call(void 0, )((e,t)=>({privyElementsConfig:null,loginPromiseResolvers:null,isUIMounted:!1,activeLoginMethod:null,updateUIMounted:r=>e({isUIMounted:r}),openLoginFlow:(r,o,s,n)=>nt(c=>{var u,m,f;let l=o.app.getConfig();if(!l)return c.reject(new P("privy_not_ready","Privy is not ready"));if(s!==null)return c.reject(new P("user_already_logged_in","User is already logged in"));if(!t().isUIMounted)return c.reject(new P("privy_elements_not_ready","Privy Elements is not mounted"));if(t().loginPromiseResolvers!==null)return c.reject(new P("existing_login_flow_in_progress","A login flow is already in progress"));let i=ot(r.loginMethods);if(i.error)return c.reject(i.error);let d={loginMethods:i.value,appearance:{logo:(f=(m=(u=r.appearance)==null?void 0:u.logo)!=null?m:l.logo_url)!=null?f:void 0}},a=it(c,()=>(e({privyElementsConfig:null,loginPromiseResolvers:null}),new P("login_flow_timeout","The login flow timed out")),mr);n(),e({loginPromiseResolvers:a,privyElementsConfig:d,activeLoginMethod:_e(d.loginMethods)})}),closeLoginFlow:()=>{var r;return(r=t().loginPromiseResolvers)==null||r.reject(new P("login_flow_closed","The login flow was closed")),e({privyElementsConfig:null,loginPromiseResolvers:null})},goBack:()=>{let{activeLoginMethod:r,privyElementsConfig:o,updateActiveLoginMethod:s,closeLoginFlow:n}=t();if(!o){n();return}let c=_e(o.loginMethods)===null;r===null||!c?n():s(null)},updateActiveLoginMethod:r=>e({activeLoginMethod:r})})),kn= exports.y =()=>{let e=F(r=>r.privyElementsConfig);return F(r=>r.isUIMounted)?e:null},Cn= exports.z =()=>F(e=>e.openLoginFlow),An= exports.A =()=>F(e=>e.closeLoginFlow),Pn= exports.B =()=>F(e=>e.goBack),Rn= exports.C =()=>F(e=>[e.activeLoginMethod,e.updateActiveLoginMethod]),yr=e=>{let{loginPromiseResolvers:t}=F.getState();t==null||t.resolve(e)},at=()=>yr,Wn= exports.D =()=>{let e=F(t=>t.updateUIMounted);_react.useEffect.call(void 0, ()=>(e(!0),()=>{e(!1)}),[e])};var Se=_react.createContext.call(void 0, {}),K;function Bn(e){return K?K.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 Jn=e=>{var We;let[t,r]=_react.useState.call(void 0, _reactnative.AppState.currentState==="active");_react.useEffect.call(void 0, ()=>{let L=_reactnative.AppState.addEventListener("change",Et=>{r(Et==="active")});return()=>{L.remove()}},[]);let[o,s]=_react.useState.call(void 0, !1),[n,c]=_react.useState.call(void 0, null),[l,i]=_react.useState.call(void 0, "loading"),[d,a]=_react.useState.call(void 0, !1),[u,m]=_react.useState.call(void 0, null),[f,y]=_react.useState.call(void 0, {status:"disconnected",account:null}),[w,p]=_react.useState.call(void 0, {status:"disconnected"}),[_,g]=_react.useState.call(void 0, {status:"initial"}),[h,b]=_react.useState.call(void 0, {status:"initial"}),S=_react.useRef.call(void 0, {}),[W,R]=_react.useState.call(void 0, {status:"initial"}),[q,T]=_react.useState.call(void 0, {status:"initial"}),[D,Y]=_react.useState.call(void 0, {status:"initial"}),[X,Q]=_react.useState.call(void 0, {status:"initial"}),[U,vt]=_react.useState.call(void 0, {status:"initial"}),Ae=_react.useRef.call(void 0, {}),me=_react.useRef.call(void 0, {}),ye=_react.useRef.call(void 0, {}),ve=_react.useRef.call(void 0, {}),Pe=_react.useRef.call(void 0, {}),Re=_react.useRef.call(void 0, {}),ft=at(),$=_react.useCallback.call(void 0, L=>{if(L){ft(L),He(m)(L);return}m(null),g({status:"initial"}),b({status:"initial"}),y({status:"disconnected",account:null})},[]),C=_react.useMemo.call(void 0, ()=>{let L=e.storage||ut;return e.client?(K=e.client,K.setCallbacks({setUser:$,setIsReady:a}),K):(K=new (0, _jssdkcore2.default)({storage:ct(L),appId:e.appId,clientId:e.clientId,supportedChains:e.supportedChains,nativeAppIdentifier:dt(),baseUrl:e.baseUrl,sdkVersion:`expo:${Ue.version}`,callbacks:{setUser:$,setIsReady:a},logLevel:e.logLevel,crypto:{digest:_expocrypto.digest}}),K)},[e.client,e.storage,e.appId,e.clientId,e.baseUrl,e.supportedChains,e.logLevel,$]),wt=_react.useCallback.call(void 0, ()=>($(null),C.auth.logout()),[$,C]),ht=_react.useCallback.call(void 0, ()=>v(void 0,null,function*(){try{return yield C.getAccessToken()}catch(L){return console.debug(L),null}}),[C]),gt=_react.useCallback.call(void 0, ()=>C.getIdentityToken(),[C]);tt({client:C,isUserInitialized:o,setIsUserInitialized:s,setError:c});let bt=Xe({client:C,user:u,appId:e.appId,webViewState:l,createWalletCallbacks:me,recoverWalletCallbacks:ye,setWalletRecoveryCallbacks:ve,setRecoveryFlowState:R,wallet:f,setWallet:y}),_t=Ne({client:C,user:u,webViewState:l,createSolanaWalletCallbacks:Pe,recoverSolanaWalletCallbacks:Re,setSolanaRecoveryFlowState:T,solanaWallet:w,setSolanaWallet:p});Ze({client:C,isUserInitialized:o,user:u,oAuthState:h,setOAuthState:b,oAuthCallbacks:Ae,recoveryFlowState:W,oAuthStateRef:S}),et({client:C,user:u,webViewLoaded:l==="loaded",createWalletCallbacks:me,recoverWalletCallbacks:ye,setWalletRecoveryCallbacks:ve,recoveryFlowState:W,oAuthState:h,setRecoveryFlowState:R,setWallet:y,appStateVisible:t});let{customAuthStateIsSettled:St}=$e({client:C,user:u,isReady:o,customAuth:(We=e.config)==null?void 0:We.customAuth});return _react2.default.createElement(_react2.default.Fragment,null,_react2.default.createElement(Se.Provider,{value:{client:C,user:u,isReady:l!=="loading"&&o&&lt(h)&&St,error:n,logout:wt,getAccessToken:ht,getIdentityToken:gt,wallet:E(E({},f),bt),solanaWallet:E(E({},w),_t),oAuthState:h,oAuthCallbacks:Ae,recoveryFlowState:W,setRecoveryFlowState:R,solanaRecoveryFlowState:q,setSolanaRecoveryFlowState:T,createWalletCallbacks:me,recoverWalletCallbacks:ye,setWalletRecoveryCallbacks:ve,createSolanaWalletCallbacks:Pe,recoverSolanaWalletCallbacks:Re,setOAuthState:b,siweState:D,setSiweState:Y,otpState:_,setOtpState:g,passkeyState:X,setPasskeyState:Q,farcasterState:U,setFarcasterState:vt,oAuthStateRef:S}},e.children),_react2.default.createElement(_reactnative.View,{style:{width:0,height:0,overflow:"hidden"}},_react2.default.createElement(Me,{logLevel:e.logLevel,client:C,isClientReady:d,setWebViewState:i,webViewState:l})))};var lt=e=>e.status!=="loading",ke=(e={})=>{let{user:t,oAuthState:r,setOAuthState:o,oAuthCallbacks:s,client:n,oAuthStateRef:c}=_react.useContext.call(void 0, Se),l=e.action?e.action==="login":!t;_react.useEffect.call(void 0, ()=>{s.current={onSuccess:e.onSuccess,onError:e.onError}},[e.onSuccess,e.onError]);let i=_react.useCallback.call(void 0, a=>{var m;let u=x(a);return o({status:"error",error:u}),(m=e==null?void 0:e.onError)==null||m.call(e,u),u},[e==null?void 0:e.onError]);return{start:_react.useCallback.call(void 0, function(w){return v(this,arguments,function*({provider:u,redirectUri:m,isLegacyAppleIosBehaviorEnabled:f=!1,disableSignup:y}){var p,_,g;o({status:"loading"}),c.current={disableSignup:y};try{if(t&&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(!t&&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{url:h}=yield n.auth.oauth.generateURL(u,G.createURL(m||"/")),b,S;if(_reactnative.Platform.OS==="ios"&&u==="apple"&&!f){let X=(p=new URL(h).searchParams.get("state"))!=null?p:"",Q=yield yt.signInAsync({state:X}).catch(U=>{throw U instanceof Error&&"code"in U&&U.code==="ERR_REQUEST_CANCELED"?new (0, _jssdkcore.PrivyClientError)({error:"Apple login was cancelled",code:l?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):U});if(!Q.authorizationCode)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:l?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(l){let U=yield n.auth.oauth.loginWithCode(Q.authorizationCode,X,u,"raw",y?"no-signup":"login-or-sign-up");b=U.user,S=U.is_new_user}else b=yield n.auth.oauth.linkWithCode(Q.authorizationCode,X,u,"raw");return(_=e==null?void 0:e.onSuccess)==null||_.call(e,b,S),o({status:"done"}),b!=null?b:void 0}let W=_reactnative.Platform.OS==="android"?h.replace("x.com","twitter.com"):h,R=yield oe.openAuthSessionAsync(W);if(_reactnative.Platform.OS==="android")return;if(R.type!=="success")throw[oe.WebBrowserResultType.CANCEL,oe.WebBrowserResultType.DISMISS].includes(R.type)?new (0, _jssdkcore.PrivyClientError)({error:"OAuth was cancelled",code:l?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):new (0, _jssdkcore.PrivyClientError)({error:"OAuth session failed",code:l?"failed_to_complete_login_with_oauth":"failed_to_complete_link_with_oauth"});let{queryParams:q}=G.parse(R.url),{privy_oauth_state:T,privy_oauth_code:D}=q;if(!D||!T)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:l?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(l){let Y=yield n.auth.oauth.loginWithCode(D,T,u,void 0,y?"no-signup":"login-or-sign-up");b=Y.user,S=Y.is_new_user}else b=yield n.auth.oauth.linkWithCode(D,T,u);return(g=e==null?void 0:e.onSuccess)==null||g.call(e,b,S),yield G.openURL(R.url.split("?")[0]),o({status:"done"}),b!=null?b:void 0}catch(h){i(h)}})},[t,n,o,i]),state:r}};function ri(e){let{state:t,start:r}=ke(O(E({},e),{action:"login"}));return{state:t,login:r}}function oi(e){let{state:t,start:r}=ke(O(E({},e),{action:"link"}));return{state:t,link:r}}function ni(e){return ke(e)}var dt=()=>{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 ct(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:()=>v(this,null,function*(){return[]})}}var ut={get(e){return I.getItemAsync(e,{keychainAccessible:I.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},put(e,t){return I.setItemAsync(e,t,{keychainAccessible:I.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},del(e){return I.deleteItemAsync(e,{keychainAccessible:I.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},getKeys:()=>v(void 0,null,function*(){return[]})};var Cr=e=>v(void 0,null,function*(){var o;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 O(E({},r),{type:(o=r.type)!=null?o:"public-key",clientExtensionResults:{}})});var Pr=e=>v(void 0,null,function*(){var o;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 O(E({},r),{type:(o=r.type)!=null?o:"public-key",clientExtensionResults:{}})});function hi(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 gi(e){var t,r,o,s;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:(o=e.extensions)==null?void 0:o.hmac_create_secret},timeout:e.timeout,allowCredentials:(s=e.allow_credentials)==null?void 0:s.map(({id:n,type:c,transports:l})=>({id:n,type:c,transports:l})),userVerification:e.user_verification}}exports.a = E; exports.b = O; exports.c = Rr; exports.d = v; exports.e = Ue; exports.f = se; exports.g = he; exports.h = qe; exports.i = x; exports.j = co; exports.k = vo; exports.l = Ao; exports.m = ri; exports.n = oi; exports.o = ni; exports.p = dt; exports.q = ct; exports.r = ut; exports.s = P; exports.t = rt; exports.u = vn; exports.v = fn; exports.w = nt; exports.x = it; exports.y = kn; exports.z = Cn; exports.A = An; exports.B = Pn; exports.C = Rn; exports.D = Wn; exports.E = Se; exports.F = Bn; exports.G = Jn; exports.H = Cr; exports.I = Pr; exports.J = hi; exports.K = gi;
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 Rt=Object.defineProperty,Wt=Object.defineProperties;var Ot=Object.getOwnPropertyDescriptors;var ne=Object.getOwnPropertySymbols;var Ie=Object.prototype.hasOwnProperty,Ue=Object.prototype.propertyIsEnumerable;var xe=(e,t,r)=>t in e?Rt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,C= exports.a =(e,t)=>{for(var r in t||(t={}))Ie.call(t,r)&&xe(e,r,t[r]);if(ne)for(var r of ne(t))Ue.call(t,r)&&xe(e,r,t[r]);return e},x= exports.b =(e,t)=>Wt(e,Ot(t));var xr=(e,t)=>{var r={};for(var o in e)Ie.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(e!=null&&ne)for(var o of ne(e))t.indexOf(o)<0&&Ue.call(e,o)&&(r[o]=e[o]);return r};var v=(e,t,r)=>new Promise((o,s)=>{var n=i=>{try{l(r.next(i))}catch(d){s(d)}},c=i=>{try{l(r.throw(i))}catch(d){s(d)}},l=i=>i.done?o(i.value):Promise.resolve(i.value).then(n,c);l((r=r.apply(e,t)).next())});var _expoappleauthentication = require('expo-apple-authentication'); var ft = _interopRequireWildcard(_expoappleauthentication);var _expoapplication = require('expo-application');var _expolinking = require('expo-linking'); var G = _interopRequireWildcard(_expolinking); var N = _interopRequireWildcard(_expolinking); var B = _interopRequireWildcard(_expolinking); var J = _interopRequireWildcard(_expolinking);var _exposecurestore = require('expo-secure-store'); var U = _interopRequireWildcard(_exposecurestore);var _expowebbrowser = require('expo-web-browser'); var oe = _interopRequireWildcard(_expowebbrowser); var Be = _interopRequireWildcard(_expowebbrowser);var _react = require('react'); var _react2 = _interopRequireDefault(_react);var _reactnative = require('react-native');var _jssdkcore = require('@privy-io/js-sdk-core'); var _jssdkcore2 = _interopRequireDefault(_jssdkcore);var _expocrypto = require('expo-crypto');var Le={name:"@privy-io/expo",version:"0.34.4",description:"Expo client for the Privy Auth API",keywords:["authentication","authorization","identity","privacy","privy","user data","react-native","expo","web3"],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"}},main:"./dist/esm/index.js",source:"./src/index.ts",types:"./dist/index.d.ts",files:["dist/**/*","LICENSE","README.md"],scripts:{build:"npx tsup --clean --minify","check-types":"npx tsc --noEmit",clean:"rm -rf dist .turbo",dev:"npx tsup --watch",format:'eslint "src/**/*.{ts,tsx,js,jsx}" --fix',"generate-types":"npx tsup --dts-only",lint:'npx eslint "src/**/*.{ts,tsx,js,jsx}"',test:'jest --testMatch "**/test/**/*.test.{ts,tsx}"'},browserslist:["defaults","node >= 18","not op_mini all"],dependencies:{"@privy-io/js-sdk-core":"0.35.2","react-fast-compare":"^3.2.2",zustand:"^4.4.1"},devDependencies:{"@privy-io/eslint-config-custom":"*","@privy-io/tsconfig":"*","@simplewebauthn/types":"9.0.1","@svgr/core":"^8.1.0","@svgr/plugin-jsx":"^8.1.0","@svgr/plugin-svgo":"^8.1.0","@testing-library/react-native":"^12.8.1","@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",jest:"^29.7.0","jest-expo":"~51.0.0",tsup:"^6.2.3",typescript:"~5.5.3"},peerDependencies:{"@expo-google-fonts/inter":"*","@privy-io/expo-native-extensions":"0.0.3","expo-apple-authentication":"*","expo-application":"*","expo-clipboard":"*","expo-constants":"*","expo-crypto":"*","expo-font":"*","expo-linking":"*","expo-secure-store":"*","expo-web-browser":"*",permissionless:"^0.2.10",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.21.36"},peerDependenciesMeta:{"@expo-google-fonts/inter":{optional:!0},"expo-font":{optional:!0},permissionless:{optional:!0},viem:{optional:!0}},publishConfig:{access:"public"}};var _reactnativewebview = require('react-native-webview'); var _reactnativewebview2 = _interopRequireDefault(_reactnativewebview);var Te=({client:e,isClientReady:t,setWebViewState:r,webViewState:o,logLevel:s})=>{let n=_react.useRef.call(void 0, null);_react.useEffect.call(void 0, ()=>{n.current&&o==="loaded"&&e.setMessagePoster(n.current)},[e,n.current,o==="loaded"]),_react.useEffect.call(void 0, ()=>_reactnative.AppState.addEventListener("change",i=>v(void 0,null,function*(){n.current&&i==="active"&&((yield e.embeddedWallet.ping(500))||(n.current.reload(),r("reloading")))})).remove,[]);let c=_react.useCallback.call(void 0, l=>v(void 0,null,function*(){let{data:i}=l.nativeEvent;e.embeddedWallet.onMessage(JSON.parse(i))}),[e]);return t?_react2.default.createElement(_reactnativewebview2.default,{style:{flex:1},ref:n,cacheEnabled:!1,cacheMode:"LOAD_NO_CACHE",source:{uri:e.embeddedWallet.getURL()},webviewDebuggingEnabled:s==="DEBUG",onLoad:()=>r("loaded"),onError:console.error,onMessage:c}):null};function je(n){return v(this,arguments,function*({client:e,setSolanaWallet:t,createSolanaWalletCallbacks:r,setSolanaRecoveryFlowState:o,opts:s}){var c,l,i;t({status:"creating"});try{let{user:d}=yield e.user.get(),a=_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, d),u=a[0];if(s!=null&&s.recoveryMethod&&s.recoveryMethod!=="privy")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Unsupported recovery method for solana wallet."});if(!(s!=null&&s.createAdditional)&&u)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 m,f;if(u){let w=Math.max(...a.map(_=>_.wallet_index),0)+1,p=yield e.embeddedWallet.createAdditionalSolana({primaryPublicKey:u.address,hdWalletIndex:w});m=p.provider,f=p.user}else{let w=(c=_jssdkcore.getUserEmbeddedWallet.call(void 0, d))!=null?c:void 0,p=yield e.embeddedWallet.createSolana({ethereumAccount:w});m=p.provider,f=p.user}let y=_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, f)[0];if(!y)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Unknown error creating solana wallet"});return(i=(l=r.current)==null?void 0:l.onSuccess)==null||i.call(l,m),t({status:"connected",publicKey:y.public_key}),o({status:"initial"}),m}catch(d){let a=d instanceof Error?d.message:"Error creating embedded wallet";throw t({status:"error",error:a}),o({status:"initial"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:a})}})}function ae(d){return v(this,arguments,function*({client:e,account:t,setWallet:r,recoverWalletCallbacks:o,recoveryMethod:s,setRecoveryFlowState:n,password:c,recoveryToken:l,recoverySecretOverride:i}){var a,u,m,f;if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});switch(s){case"user-passcode":if(!c)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!l)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!i)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Record name is required for icloud recovery method"});break}r({status:"connecting",account:t});try{let y=yield e.embeddedWallet.getProvider(t,c,l,i);return r({status:"connected",provider:y,account:t}),n({status:"initial"}),(u=(a=o.current)==null?void 0:a.onSuccess)==null||u.call(a,y),y}catch(y){r({status:"needs-recovery",account:t}),n({status:"initial"});let w=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:y instanceof Error?y.message:"Error recovering embedded wallet"});throw(f=(m=o.current)==null?void 0:m.onError)==null||f.call(m,w),w}})}function De(l){return v(this,arguments,function*({client:e,account:t,entropyId:r,entropyIdVerifier:o,setSolanaWallet:s,recoverSolanaWalletCallbacks:n,setSolanaRecoveryFlowState:c}){var i,d,a,u;s({status:"connecting"});try{let m=yield e.embeddedWallet.getSolanaProvider(t,r,o);return s({status:"connected",publicKey:m._publicKey}),c({status:"initial"}),(d=(i=n.current)==null?void 0:i.onSuccess)==null||d.call(i,m),m}catch(m){s({status:"needs-recovery"}),c({status:"initial"});let f=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:m instanceof Error?m.message:"Error recovering embedded wallet"});throw(u=(a=n.current)==null?void 0:a.onError)==null||u.call(a,f),f}})}var se=e=>{if(e.chain_type==="ethereum")return{entropyId:e.address,entropyIdVerifier:"ethereum-address-verifier"};if(e.chain_type==="solana")return{entropyId:e.address,entropyIdVerifier:"solana-address-verifier"};throw new Error("Invalid embedded wallet account type")};var Ve=({client:e,user:t,solanaWallet:r,setSolanaWallet:o,setSolanaRecoveryFlowState:s,webViewState:n,createSolanaWalletCallbacks:c,recoverSolanaWalletCallbacks:l})=>{let i=_react.useMemo.call(void 0, ()=>_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, t),[t]),d=_react.useMemo.call(void 0, ()=>{var y;return i.length===0?null:(y=_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, t))!=null?y:_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, t)},[t,i]),a=_react.useMemo.call(void 0, ()=>{if(!d)return[];let{entropyId:y,entropyIdVerifier:w}=se(d);return i.map(p=>({address:p.address,publicKey:p.address,walletIndex:p.wallet_index,getProvider:()=>e.embeddedWallet.getSolanaProvider(p,y,w)}))},[i,d,e]),u=_react.useCallback.call(void 0, y=>v(void 0,null,function*(){return yield je({client:e,setSolanaWallet:o,createSolanaWalletCallbacks:c,setSolanaRecoveryFlowState:s,opts:y})}),[e,c]),m=_react.useCallback.call(void 0, ()=>v(void 0,null,function*(){if(!d)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{entropyId:y,entropyIdVerifier:w}=se(d);return De({client:e,account:i[0],entropyId:y,entropyIdVerifier:w,setSolanaWallet:o,recoverSolanaWalletCallbacks:l,setSolanaRecoveryFlowState:s})}),[e,d,i,l,s,o]),f=_react.useCallback.call(void 0, ()=>v(void 0,null,function*(){if(!d)throw o({status:"not-created"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});o(y=>y.status==="connected"?{status:"reconnecting"}:{status:"connecting"});try{let{entropyId:y,entropyIdVerifier:w}=se(d),p=yield e.embeddedWallet.getSolanaProvider(i[0],y,w);return o({status:"connected",publicKey:i[0].public_key}),p}catch(y){throw _jssdkcore.errorIndicatesRecoveryIsNeeded.call(void 0, y)?(o({status:"needs-recovery"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):y instanceof Error?(o({status:"error",error:y.message}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:y.message})):(o({status:"error",error:"Error loading embedded wallet"}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,d]);return _react.useEffect.call(void 0, ()=>{if(!t&&r.status!=="disconnected")return o({status:"disconnected"});n==="loaded"&&f().catch(()=>{})},[n,t,d]),_react.useEffect.call(void 0, ()=>{r.status==="error"&&r.error.includes("User must be logged in")&&f()},[r.status]),{create:u,recover:m,getProvider:f,wallets:a}};function de(a){return v(this,arguments,function*({client:e,setWallet:t,createWalletCallbacks:r,recoveryMethod:o,setRecoveryFlowState:s,password:n,recoveryToken:c,recoverySecretOverride:l,iCloudRecordNameOverride:i,solanaAccount:d}){var m,f;switch(o){case"user-passcode":if(!n)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!c)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!l||!i)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 u=o==="icloud"?"icloud-native":o;try{let{provider:y,user:w}=yield e.embeddedWallet.create(n,u,c,l,i,d),p=_jssdkcore.getUserEmbeddedWallet.call(void 0, w);return(f=(m=r.current)==null?void 0:m.onSuccess)==null||f.call(m,y),t({status:"connected",provider:y,account:p}),s({status:"initial"}),y}catch(y){let w=y instanceof Error?y.message:"Error creating embedded wallet";throw t({status:"error",error:w,account:null}),s({status:"initial"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:w})}})}function qe(){return v(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 he(o){return v(this,arguments,function*({user:e,appId:t,client:r}){var l;if(_reactnative.Platform.OS==="android")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let s=yield qe(),n=yield r.recovery.icloudAuth.getICloudConfiguration("expo-ios");if(!(n==null?void 0:n.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:i,iCloudRecordName:d}=yield s.writeRecoverySecretToICloud({containerId:n.container_identifier,appId:t,userId:e.id});return{recoverySecret:i,iCloudRecordName:d}}catch(i){if(i instanceof Error){let d=(l=i.message.split("Caused by: ")[1])!=null?l:"Error writing to iCloud";throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:d})}throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}function He(o){return v(this,arguments,function*({walletAddress:e,client:t,chainType:r}){var d;if(_reactnative.Platform.OS==="android")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let s=yield qe(),c=(yield t.recovery.getRecoveryKeyMaterial(e,r)).icloud_record_name;if(!c)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery not properly backed up."});let l=yield t.recovery.icloudAuth.getICloudConfiguration("expo-ios"),i=l==null?void 0:l.container_identifier;if(!i)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:a}=yield s.readRecoverySecretFromICloud({containerId:i,recordName:c});return{recoverySecret:a}}catch(a){if(a instanceof Error){let u=(d=a.message.split("Caused by: ")[1])!=null?d:"Error writing to iCloud";throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:u})}throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}var _reactfastcompare = require('react-fast-compare'); var _reactfastcompare2 = _interopRequireDefault(_reactfastcompare);var ze=e=>t=>e(r=>_reactfastcompare2.default.call(void 0, r,t)?r:t);function I(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 mo=e=>new Promise(t=>setTimeout(t,e));function ho(){let e=_react.useRef.call(void 0, _reactnative.AppState.currentState);_react.useEffect.call(void 0, ()=>_reactnative.AppState.addEventListener("change",o=>{e.current=o}).remove,[]);function t(){return _reactnative.AppState.currentState}return{appState:e,getCurrentAppState:t}}function ee(s){return v(this,arguments,function*({provider:e,redirectUri:t,client:r,onError:o}){try{let n;switch(e){case"google-drive":{let{url:d}=yield r.recovery.auth.generateURL(N.createURL(t||"/"));n=d;break}default:throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid provider",code:"embedded_wallet_recovery_error"})}let c=yield Be.openAuthSessionAsync(n);if(_reactnative.Platform.OS==="android")return;if(c.type!=="success")throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth session failed",code:"embedded_wallet_recovery_error"});let{queryParams:l}=N.parse(c.url),i;switch(e){case"google-drive":{let{privy_oauth_state:d,privy_oauth_code:a}=l;if(!a||!d)throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth invalid credentials",code:"embedded_wallet_recovery_error"});i=yield ce({oAuthCode:a,oAuthState:d,client:r});break}default:throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth invalid provider",code:"embedded_wallet_recovery_error"})}return i}catch(n){throw o==null||o(I(n)),n}})}function ce(o){return v(this,arguments,function*({oAuthCode:e,oAuthState:t,client:r}){let{access_token:s}=yield r.recovery.auth.authorize(e,t);if(!s)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:"login_with_oauth_returned_with_invalid_credentials"});return s})}var Gt=2*60*1e3;function Yt(e){let t;return new Promise((r,o)=>{t=N.addEventListener("url",n=>v(this,[n],function*({url:s}){if(!s)return;let{queryParams:c}=N.parse(s),{privy_oauth_state:l,privy_oauth_code:i}=c!=null?c:{};if(typeof i!="string"||typeof l!="string")return;let d=yield ce({client:e,oAuthCode:i,oAuthState:l});r(d)})),setTimeout(()=>{o(new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_set_recovery_error",error:"Failed to complete Google Drive recovery flow"}))},Gt)}).finally(()=>{t==null||t.remove()})}function Wo(e){return v(this,null,function*(){let t;_reactnative.Platform.OS==="android"&&(t=Yt(e));let r=yield ee({provider:"google-drive",client:e});return r!=null?r:yield t})}function ue(n){return v(this,arguments,function*({client:e,recoveryInput:t,setWalletRecoveryCallbacks:r,setRecoveryFlowState:o,setWallet:s}){var c,l,i,d;try{let{provider:a,user:u}=yield e.embeddedWallet.setRecovery(t),m=a,f=_jssdkcore.getUserEmbeddedWallet.call(void 0, u);return s({status:"connected",provider:m,account:f}),(l=(c=r.current)==null?void 0:c.onSuccess)==null||l.call(c,m),o({status:"initial"}),m}catch(a){let u=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_set_recovery_error",error:a instanceof Error?a.message:"Error setting password on embedded wallet"});throw(d=(i=r.current)==null?void 0:i.onError)==null||d.call(i,u),o({status:"initial"}),u}})}function Xe(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}:{recoveryMethod:e.recoveryMethod}}var Qe=({client:e,user:t,appId:r,wallet:o,setWallet:s,setRecoveryFlowState:n,webViewState:c,createWalletCallbacks:l,recoverWalletCallbacks:i,setWalletRecoveryCallbacks:d})=>{let a=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedWallet.call(void 0, t),[t]),u=_react.useCallback.call(void 0, p=>v(void 0,null,function*(){var W,q;if(a)throw new (0, _jssdkcore.PrivyClientError)({error:"This user already has an embedded wallet",code:"embedded_wallet_already_exists"});let{user:_}=yield e.user.get(),{password:g,recoveryMethod:h}=Xe(p),b,E,O;if(h==="google-drive"&&(b=yield ee({provider:h,client:e,onError:(W=l.current)==null?void 0:W.onError}),n({status:"creating-wallet"}),!b))return null;if(h==="icloud"){if(!_)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before creating a wallet with iCloud."});let{recoverySecret:T,iCloudRecordName:D}=yield he({user:_,appId:r,client:e});E=T,O=D}return yield de({client:e,setWallet:s,createWalletCallbacks:l,recoveryMethod:h,setRecoveryFlowState:n,password:g,recoverySecretOverride:E,iCloudRecordNameOverride:O,solanaAccount:(q=_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, _))!=null?q:void 0})}),[e,a,t]),m=_react.useCallback.call(void 0, p=>v(void 0,null,function*(){var h;if(o.status!=="connected")throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"});if(!a)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});if(_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, t))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."});_jssdkcore.throwIfInvalidRecoveryUpgradePath.call(void 0, {currentRecoveryMethod:a.recovery_method,upgradeToRecoveryMethod:p.recoveryMethod});let _,g;switch(p.recoveryMethod){case"privy":g=x(C({},p),{wallet:a});break;case"user-passcode":g=x(C({},p),{wallet:a,password:p.password});break;case"google-drive":if(_=yield ee({provider:p.recoveryMethod,client:e,onError:(h=d.current)==null?void 0:h.onError}),n({status:"upgrading-recovery"}),!_)return null;g={recoveryMethod:"google-drive",wallet:a,recoveryAccessToken:_};break;case"icloud":if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before backing up to iCloud."});let{recoverySecret:b,iCloudRecordName:E}=yield he({user:t,appId:r,client:e});g={recoveryMethod:"icloud-native",recoverySecretOverride:b,iCloudRecordNameOverride:E,wallet:a};break;default:throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}return ue({client:e,recoveryInput:g,setWalletRecoveryCallbacks:d,setRecoveryFlowState:n,setWallet:s})}),[e,a,o.status,t]),f=_react.useCallback.call(void 0, p=>v(void 0,null,function*(){return m({recoveryMethod:"user-passcode",password:p})}),[e,a,o.status]),y=_react.useCallback.call(void 0, p=>v(void 0,null,function*(){var E;if(!a)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{password:_,recoveryMethod:g}=Xe(p),h,b;if(g==="google-drive"&&(h=yield ee({provider:g,client:e,onError:(E=i.current)==null?void 0:E.onError}),n({status:"recovering"}),!h))return null;if(g==="icloud"){if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before recovering via iCloud."});let{recoverySecret:O}=yield He({client:e,walletAddress:a.address});b=O}return ae({client:e,account:a,setWallet:s,recoverWalletCallbacks:i,recoveryMethod:g,setRecoveryFlowState:n,password:_,recoveryToken:h,recoverySecretOverride:b})}),[e,a]),w=_react.useCallback.call(void 0, ()=>v(void 0,null,function*(){if(!a)throw s({status:"not-created",account:null}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});s(p=>p.status==="connected"?{status:"reconnecting",account:a}:{status:"connecting",account:a});try{let p=yield e.embeddedWallet.getProvider(a);return s({status:"connected",provider:p,account:a}),p}catch(p){throw _jssdkcore.errorIndicatesRecoveryIsNeeded.call(void 0, p)?(s({status:"needs-recovery",account:a}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):p instanceof Error?(s({status:"error",error:p.message,account:a}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:p.message})):(s({status:"error",error:"Error loading embedded wallet",account:a}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,a]);return _react.useEffect.call(void 0, ()=>{if(!t&&o.status!=="disconnected")return s({status:"disconnected",account:null});c==="loaded"&&w().catch(()=>{})},[c,t,a]),_react.useEffect.call(void 0, ()=>{o.status==="error"&&o.error.includes("User must be logged in")&&w()},[o.status]),{create:u,recover:y,setPassword:f,setRecovery:m,getProvider:w}};var Ze=({client:e,user:t,isReady:r,customAuth:o})=>{let[s,n]=_react.useState.call(void 0, {status:"initial"});return _react.useEffect.call(void 0, ()=>{(()=>v(void 0,null,function*(){if(!(o!=null&&o.enabled)){n({status:"not-enabled"});return}n({status:"loading"});let{getCustomAccessToken:l,isLoading:i}=o;if(!(!r||i))try{let d=yield l();if(!d&&t){yield e.auth.logout(),n({status:"done"});return}if(!d){n({status:"done"});return}if(t){n({status:"done"});return}if(!(yield e.auth.customProvider.syncWithToken(d))){yield e.auth.logout(),n({status:"error",error:new (0, _jssdkcore.PrivyClientError)({error:"Failed to sync with custom auth provider",code:"third_party_auth_error"})});return}n({status:"done"})}catch(d){if(console.log("Error syncing with custom auth provider",d),n({status:"error",error:d}),t)throw yield e.auth.logout(),new (0, _jssdkcore.PrivyClientError)({error:"Third-party auth failed",code:"third_party_auth_error"})}}))()},[e,t,r,o==null?void 0:o.enabled,o==null?void 0:o.getCustomAccessToken,o==null?void 0:o.isLoading]),{customAuthState:s,customAuthStateIsSettled:s.status!=="loading"&&s.status!=="initial"}};var et=({client:e,user:t,isUserInitialized:r,oAuthState:o,oAuthCallbacks:s,setOAuthState:n,recoveryFlowState:c,oAuthStateRef:l})=>{let i=B.useURL(),d=_react.useCallback.call(void 0, a=>{var m,f;let u=I(a);n({status:"error",error:u}),(f=(m=s.current).onError)==null||f.call(m,u)},[n]);return _react.useEffect.call(void 0, ()=>{function a(){return v(this,null,function*(){var y,w;if(!i||o.status!=="loading"||c.status!=="initial")return;let{queryParams:u}=B.parse(i),{privy_oauth_state:m,privy_oauth_code:f}=u;if(!f||!m){n({status:"done"});return}try{let p,_;if(t)p=yield e.auth.oauth.linkWithCode(f,m);else{let g=yield e.auth.oauth.loginWithCode(f,m,void 0,void 0,l.current.disableSignup?"no-signup":"login-or-sign-up");p=g.user,_=!!g.is_new_user}return(w=(y=s.current).onSuccess)==null||w.call(y,p,_),l.current={},n({status:"done"}),yield B.openURL(i.split("?")[0])}catch(p){l.current={},d(p)}})}_reactnative.Platform.OS==="android"&&r&&a()},[i,r])};var tt=({client:e,user:t,createWalletCallbacks:r,recoverWalletCallbacks:o,setWalletRecoveryCallbacks:s,recoveryFlowState:n,oAuthState:c,setRecoveryFlowState:l,setWallet:i,appStateVisible:d,webViewLoaded:a})=>{let u=J.useURL(),m=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedWallet.call(void 0, t),[t]),f=_react.useCallback.call(void 0, y=>{var p,_,g,h;let w=I(y);n.status==="creating-wallet"?(_=(p=r.current).onError)==null||_.call(p,I(w)):(h=(g=o.current).onError)==null||h.call(g,I(w)),l({status:"initial"})},[n]);return _react.useEffect.call(void 0, ()=>{function y(){return v(this,null,function*(){var g;if(!u&&n.status!=="initial"&&d&&f(new Error("Recovery OAuth session failed")),!u||n.status==="initial"||c.status!=="initial"||!d||!a)return;let{queryParams:w}=J.parse(u),{privy_oauth_state:p,privy_oauth_code:_}=w;if(!(!_||!p)){yield J.openURL(u.split("?")[0]);try{let h=yield ce({oAuthCode:_,oAuthState:p,client:e});if(n.status==="creating-wallet"){let b=(g=_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, t))!=null?g:void 0;yield de({client:e,setWallet:i,createWalletCallbacks:r,recoveryMethod:"google-drive",setRecoveryFlowState:l,recoveryToken:h,solanaAccount:b})}else if(n.status==="upgrading-recovery"){if(!m)throw new Error("Embedded wallet not found");yield ue({client:e,recoveryInput:{recoveryMethod:"google-drive",wallet:m,recoveryAccessToken:h},setWalletRecoveryCallbacks:s,setRecoveryFlowState:l,setWallet:i})}else yield ae({client:e,account:m,setWallet:i,recoverWalletCallbacks:o,recoveryMethod:"google-drive",setRecoveryFlowState:l,recoveryToken:h})}catch(h){f(h)}}})}_reactnative.Platform.OS==="android"&&y()},[u,n.status,d,a])};var rt=({client:e,isUserInitialized:t,setIsUserInitialized:r,setError:o})=>{_react.useEffect.call(void 0, ()=>{t||(()=>v(void 0,null,function*(){try{yield e.initialize()}catch(n){o(n instanceof Error?n:new Error(String(n)))}try{yield e.user.get()}catch(n){}finally{r(!0)}}))()},[e,t,o,r])};var _zustand = require('zustand');var R=class extends Error{constructor(r,o){super(o);this.code=r,this.error=o}},ot= exports.t =class extends R{constructor(r){super("underlying_error",r instanceof Error?r.message:"An underlying error occurred");this.wrappedError=r}};var be={success:e=>({value:e}),error:e=>({error:e})};var nt=e=>{let t=Array.from(new Set(e));return t.length===0?be.error(new R("no_login_methods_available","No login methods available")):be.success(t)},_e=e=>{let t=e.length,r=e.every(o=>o==="sms"||o==="email");return t<=2&&r?e[0]:null},hn= exports.u =(e,t)=>{if(e.length!==2)return null;let[r,o]=e;return t===r?o:r},gn= exports.v ={email:"email",sms:"phone",google:"Google",apple:"Apple",discord:"Discord",twitter:"X",github:"Github",spotify:"Spotify",instagram:"Instagram",tiktok:"Tiktok",linkedin:"LinkedIn"};function it(e){return new Promise((t,r)=>{e({resolve:t,reject:r})})}function yr(e,t){return{resolve:r=>{t(),e.resolve(r)},reject:r=>{t(),e.reject(r)}}}function at(e,t,r){let o=setTimeout(()=>{e.reject(t())},r);return yr(e,()=>{clearTimeout(o)})}var wr=1e3*60*5,F=_zustand.create.call(void 0, )((e,t)=>({privyElementsConfig:null,loginPromiseResolvers:null,isUIMounted:!1,activeLoginMethod:null,updateUIMounted:r=>e({isUIMounted:r}),openLoginFlow:(r,o,s,n)=>it(c=>{var u,m,f;let l=o.app.getConfig();if(!l)return c.reject(new R("privy_not_ready","Privy is not ready"));if(s!==null)return c.reject(new R("user_already_logged_in","User is already logged in"));if(!t().isUIMounted)return c.reject(new R("privy_elements_not_ready","Privy Elements is not mounted"));if(t().loginPromiseResolvers!==null)return c.reject(new R("existing_login_flow_in_progress","A login flow is already in progress"));let i=nt(r.loginMethods);if(i.error)return c.reject(i.error);let d={loginMethods:i.value,appearance:{logo:(f=(m=(u=r.appearance)==null?void 0:u.logo)!=null?m:l.logo_url)!=null?f:void 0}},a=at(c,()=>(e({privyElementsConfig:null,loginPromiseResolvers:null}),new R("login_flow_timeout","The login flow timed out")),wr);n(),e({loginPromiseResolvers:a,privyElementsConfig:d,activeLoginMethod:_e(d.loginMethods)})}),closeLoginFlow:()=>{var r;return(r=t().loginPromiseResolvers)==null||r.reject(new R("login_flow_closed","The login flow was closed")),e({privyElementsConfig:null,loginPromiseResolvers:null})},goBack:()=>{let{activeLoginMethod:r,privyElementsConfig:o,updateActiveLoginMethod:s,closeLoginFlow:n}=t();if(!o){n();return}let c=_e(o.loginMethods)===null;r===null||!c?n():s(null)},updateActiveLoginMethod:r=>e({activeLoginMethod:r})})),Pn= exports.y =()=>{let e=F(r=>r.privyElementsConfig);return F(r=>r.isUIMounted)?e:null},Rn= exports.z =()=>F(e=>e.openLoginFlow),Wn= exports.A =()=>F(e=>e.closeLoginFlow),On= exports.B =()=>F(e=>e.goBack),xn= exports.C =()=>F(e=>[e.activeLoginMethod,e.updateActiveLoginMethod]),hr=e=>{let{loginPromiseResolvers:t}=F.getState();t==null||t.resolve(e)},st=()=>hr,In= exports.D =()=>{let e=F(t=>t.updateUIMounted);_react.useEffect.call(void 0, ()=>(e(!0),()=>{e(!1)}),[e])};var Se=_react.createContext.call(void 0, {}),K;function Yn(e){return K?K.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 Xn=e=>{var We,Oe;let[t,r]=_react.useState.call(void 0, _reactnative.AppState.currentState==="active");_react.useEffect.call(void 0, ()=>{let P=_reactnative.AppState.addEventListener("change",Pt=>{r(Pt==="active")});return()=>{P.remove()}},[]);let[o,s]=_react.useState.call(void 0, !1),[n,c]=_react.useState.call(void 0, null),[l,i]=_react.useState.call(void 0, "loading"),[d,a]=_react.useState.call(void 0, !1),[u,m]=_react.useState.call(void 0, null),[f,y]=_react.useState.call(void 0, {status:"disconnected",account:null}),[w,p]=_react.useState.call(void 0, {status:"disconnected"}),[_,g]=_react.useState.call(void 0, {status:"initial"}),[h,b]=_react.useState.call(void 0, {status:"initial"}),E=_react.useRef.call(void 0, {}),[O,W]=_react.useState.call(void 0, {status:"initial"}),[q,T]=_react.useState.call(void 0, {status:"initial"}),[D,Y]=_react.useState.call(void 0, {status:"initial"}),[X,Q]=_react.useState.call(void 0, {status:"initial"}),[L,wt]=_react.useState.call(void 0, {status:"initial"}),[ht,gt]=_react.useState.call(void 0, );_react.useEffect.call(void 0, ()=>{var P;return gt((P=e.config)==null?void 0:P.mfa)},[(We=e.config)==null?void 0:We.mfa]);let Ae=_react.useRef.call(void 0, {}),me=_react.useRef.call(void 0, {}),ye=_react.useRef.call(void 0, {}),ve=_react.useRef.call(void 0, {}),Pe=_react.useRef.call(void 0, {}),Re=_react.useRef.call(void 0, {}),bt=st(),$=_react.useCallback.call(void 0, P=>{if(P){bt(P),ze(m)(P);return}m(null),g({status:"initial"}),b({status:"initial"}),y({status:"disconnected",account:null})},[]),k=_react.useMemo.call(void 0, ()=>{let P=e.storage||mt;return e.client?(K=e.client,K.setCallbacks({setUser:$,setIsReady:a}),K):(K=new (0, _jssdkcore2.default)({storage:pt(P),appId:e.appId,clientId:e.clientId,supportedChains:e.supportedChains,nativeAppIdentifier:ut(),baseUrl:e.baseUrl,sdkVersion:`expo:${Le.version}`,callbacks:{setUser:$,setIsReady:a},logLevel:e.logLevel,crypto:{digest:_expocrypto.digest}}),K)},[e.client,e.storage,e.appId,e.clientId,e.baseUrl,e.supportedChains,e.logLevel,$]),_t=_react.useCallback.call(void 0, ()=>($(null),k.auth.logout()),[$,k]),St=_react.useCallback.call(void 0, ()=>v(void 0,null,function*(){try{return yield k.getAccessToken()}catch(P){return console.debug(P),null}}),[k]),Et=_react.useCallback.call(void 0, ()=>k.getIdentityToken(),[k]);rt({client:k,isUserInitialized:o,setIsUserInitialized:s,setError:c});let Ct=Qe({client:k,user:u,appId:e.appId,webViewState:l,createWalletCallbacks:me,recoverWalletCallbacks:ye,setWalletRecoveryCallbacks:ve,setRecoveryFlowState:W,wallet:f,setWallet:y}),kt=Ve({client:k,user:u,webViewState:l,createSolanaWalletCallbacks:Pe,recoverSolanaWalletCallbacks:Re,setSolanaRecoveryFlowState:T,solanaWallet:w,setSolanaWallet:p});et({client:k,isUserInitialized:o,user:u,oAuthState:h,setOAuthState:b,oAuthCallbacks:Ae,recoveryFlowState:O,oAuthStateRef:E}),tt({client:k,user:u,webViewLoaded:l==="loaded",createWalletCallbacks:me,recoverWalletCallbacks:ye,setWalletRecoveryCallbacks:ve,recoveryFlowState:O,oAuthState:h,setRecoveryFlowState:W,setWallet:y,appStateVisible:t});let{customAuthStateIsSettled:At}=Ze({client:k,user:u,isReady:o,customAuth:(Oe=e.config)==null?void 0:Oe.customAuth});return _react2.default.createElement(_react2.default.Fragment,null,_react2.default.createElement(Se.Provider,{value:{client:k,user:u,isReady:l!=="loading"&&o&&ct(h)&&At,error:n,logout:_t,getAccessToken:St,getIdentityToken:Et,wallet:C(C({},f),Ct),solanaWallet:C(C({},w),kt),oAuthState:h,oAuthCallbacks:Ae,recoveryFlowState:O,setRecoveryFlowState:W,solanaRecoveryFlowState:q,setSolanaRecoveryFlowState:T,createWalletCallbacks:me,recoverWalletCallbacks:ye,setWalletRecoveryCallbacks:ve,createSolanaWalletCallbacks:Pe,recoverSolanaWalletCallbacks:Re,setOAuthState:b,siweState:D,setSiweState:Y,otpState:_,setOtpState:g,passkeyState:X,setPasskeyState:Q,farcasterState:L,setFarcasterState:wt,oAuthStateRef:E,mfaConfig:ht}},e.children),_react2.default.createElement(_reactnative.View,{style:{width:0,height:0,overflow:"hidden"}},_react2.default.createElement(Te,{logLevel:e.logLevel,client:k,isClientReady:d,setWebViewState:i,webViewState:l})))};var ct=e=>e.status!=="loading",Ce=(e={})=>{let{user:t,oAuthState:r,setOAuthState:o,oAuthCallbacks:s,client:n,oAuthStateRef:c}=_react.useContext.call(void 0, Se),l=e.action?e.action==="login":!t;_react.useEffect.call(void 0, ()=>{s.current={onSuccess:e.onSuccess,onError:e.onError}},[e.onSuccess,e.onError]);let i=_react.useCallback.call(void 0, a=>{var m;let u=I(a);return o({status:"error",error:u}),(m=e==null?void 0:e.onError)==null||m.call(e,u),u},[e==null?void 0:e.onError]);return{start:_react.useCallback.call(void 0, function(w){return v(this,arguments,function*({provider:u,redirectUri:m,isLegacyAppleIosBehaviorEnabled:f=!1,disableSignup:y}){var p,_,g;o({status:"loading"}),c.current={disableSignup:y};try{if(t&&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(!t&&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{url:h}=yield n.auth.oauth.generateURL(u,G.createURL(m||"/")),b,E;if(_reactnative.Platform.OS==="ios"&&u==="apple"&&!f){let X=(p=new URL(h).searchParams.get("state"))!=null?p:"",Q=yield ft.signInAsync({state:X}).catch(L=>{throw L instanceof Error&&"code"in L&&L.code==="ERR_REQUEST_CANCELED"?new (0, _jssdkcore.PrivyClientError)({error:"Apple login was cancelled",code:l?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):L});if(!Q.authorizationCode)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:l?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(l){let L=yield n.auth.oauth.loginWithCode(Q.authorizationCode,X,u,"raw",y?"no-signup":"login-or-sign-up");b=L.user,E=L.is_new_user}else b=yield n.auth.oauth.linkWithCode(Q.authorizationCode,X,u,"raw");return(_=e==null?void 0:e.onSuccess)==null||_.call(e,b,E),o({status:"done"}),b!=null?b:void 0}let O=_reactnative.Platform.OS==="android"?h.replace("x.com","twitter.com"):h,W=yield oe.openAuthSessionAsync(O);if(_reactnative.Platform.OS==="android")return;if(W.type!=="success")throw[oe.WebBrowserResultType.CANCEL,oe.WebBrowserResultType.DISMISS].includes(W.type)?new (0, _jssdkcore.PrivyClientError)({error:"OAuth was cancelled",code:l?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):new (0, _jssdkcore.PrivyClientError)({error:"OAuth session failed",code:l?"failed_to_complete_login_with_oauth":"failed_to_complete_link_with_oauth"});let{queryParams:q}=G.parse(W.url),{privy_oauth_state:T,privy_oauth_code:D}=q;if(!D||!T)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:l?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(l){let Y=yield n.auth.oauth.loginWithCode(D,T,u,void 0,y?"no-signup":"login-or-sign-up");b=Y.user,E=Y.is_new_user}else b=yield n.auth.oauth.linkWithCode(D,T,u);return(g=e==null?void 0:e.onSuccess)==null||g.call(e,b,E),yield G.openURL(W.url.split("?")[0]),o({status:"done"}),b!=null?b:void 0}catch(h){i(h)}})},[t,n,o,i]),state:r}};function ii(e){let{state:t,start:r}=Ce(x(C({},e),{action:"login"}));return{state:t,login:r}}function ai(e){let{state:t,start:r}=Ce(x(C({},e),{action:"link"}));return{state:t,link:r}}function si(e){return Ce(e)}var ut=()=>{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:()=>v(this,null,function*(){return[]})}}var mt={get(e){return U.getItemAsync(e,{keychainAccessible:U.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},put(e,t){return U.setItemAsync(e,t,{keychainAccessible:U.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},del(e){return U.deleteItemAsync(e,{keychainAccessible:U.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},getKeys:()=>v(void 0,null,function*(){return[]})};var Rr=e=>v(void 0,null,function*(){var o;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 x(C({},r),{type:(o=r.type)!=null?o:"public-key",clientExtensionResults:{}})});var Or=e=>v(void 0,null,function*(){var o;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 x(C({},r),{type:(o=r.type)!=null?o:"public-key",clientExtensionResults:{}})});function _i(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 Si(e){var t,r,o,s;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:(o=e.extensions)==null?void 0:o.hmac_create_secret},timeout:e.timeout,allowCredentials:(s=e.allow_credentials)==null?void 0:s.map(({id:n,type:c,transports:l})=>({id:n,type:c,transports:l})),userVerification:e.user_verification}}exports.a = C; exports.b = x; exports.c = xr; exports.d = v; exports.e = Le; exports.f = se; exports.g = he; exports.h = He; exports.i = I; exports.j = mo; exports.k = ho; exports.l = Wo; exports.m = ii; exports.n = ai; exports.o = si; exports.p = ut; exports.q = pt; exports.r = mt; exports.s = R; exports.t = ot; exports.u = hn; exports.v = gn; exports.w = it; exports.x = at; exports.y = Pn; exports.z = Rn; exports.A = Wn; exports.B = On; exports.C = xn; exports.D = In; exports.E = Se; exports.F = Yn; exports.G = Xn; exports.H = Rr; exports.I = Or; exports.J = _i; exports.K = Si;
@@ -0,0 +1 @@
1
+ import{E as h,I as ie,J as ae,K as se,a as p,b as te,d as m,f as I,g as oe,h as ne,i as g,j as _,k as M,l as L}from"./chunk-YOOCOJAE.js";import{useCallback as T,useContext as ke}from"react";import{PrivyClientError as Se}from"@privy-io/js-sdk-core";var vr=e=>{let{user:r,client:c,setSiweState:a,siweState:o}=ke(h),n=T(l=>{var u;let y=g(l);return a({status:"error",error:y}),(u=e==null?void 0:e.onError)==null||u.call(e,y),y},[e==null?void 0:e.onError]),t=T(f=>m(void 0,[f],function*({wallet:l,from:{domain:y,uri:u}}){var s;try{a({status:"generating-message"});let d=yield c.auth.siwe.init(l,y,u);return a({status:"awaiting-signature"}),(s=e==null?void 0:e.onGenerateMessage)==null||s.call(e,d.message),d.message}catch(d){throw n(d)}}),[c,n,e==null?void 0:e.onGenerateMessage]),i=T(u=>m(void 0,[u],function*({signature:l,messageOverride:y}){var f;try{if(!r)throw new Se({code:"attempted_link_siwe_before_logged_in",error:"Must be logged in to link a wallet, Use `useLoginWithSiwe` to login with a wallet"});a({status:"submitting-signature"});let s=yield c.auth.siwe.linkWithSiwe(l,void 0,y);return a({status:"done"}),(f=e==null?void 0:e.onSuccess)==null||f.call(e,s),s}catch(s){throw n(s)}}),[r,c,n,e==null?void 0:e.onSuccess]);return{generateSiweMessage:t,linkWithSiwe:i,state:o}};import{useCallback as H,useContext as be}from"react";import{PrivyClientError as Ee}from"@privy-io/js-sdk-core";var Wr=e=>{let{user:r,client:c,setSiweState:a,siweState:o}=be(h),n=H(l=>{var u;let y=g(l);return a({status:"error",error:y}),(u=e==null?void 0:e.onError)==null||u.call(e,y),y},[e==null?void 0:e.onError]),t=H(f=>m(void 0,[f],function*({wallet:l,from:{domain:y,uri:u}}){var s;try{a({status:"generating-message"});let d=yield c.auth.siwe.init(l,y,u);return a({status:"awaiting-signature"}),(s=e==null?void 0:e.onGenerateMessage)==null||s.call(e,d.message),d.message}catch(d){throw n(d)}}),[c,n,e==null?void 0:e.onGenerateMessage]);return{loginWithSiwe:H(f=>m(void 0,[f],function*({signature:l,messageOverride:y,disableSignup:u}){var s;try{if(r)throw new Ee({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"});a({status:"submitting-signature"});let d=yield c.auth.siwe.loginWithSiwe(l,void 0,y,u?"no-signup":"login-or-sign-up");return a({status:"done"}),(s=e==null?void 0:e.onSuccess)==null||s.call(e,d.user,d.is_new_user),d.user}catch(d){throw n(d)}}),[r,c,n,e==null?void 0:e.onSuccess]),generateSiweMessage:t,state:o}};import{useCallback as ce,useContext as pe}from"react";import{PrivyClientError as _e}from"@privy-io/js-sdk-core";var Or=e=>{let{user:r,client:c}=pe(h),a=ce(n=>{var i;let t=g(n);return(i=e==null?void 0:e.onError)==null||i.call(e,t),t},[e==null?void 0:e.onError]);return{unlinkWallet:ce(t=>m(void 0,[t],function*({address:n}){var i;try{if(!r)throw new _e({code:"attempted_unlink_siwe_before_logged_in",error:"Must be logged in to unlink a wallet, Use `useLoginWithSiwe` to login with a wallet"});let l=yield c.auth.siwe.unlinkWallet(n);return(i=e==null?void 0:e.onSuccess)==null||i.call(e,l),l}catch(l){throw a(l)}}),[r,c,a,e==null?void 0:e.onSuccess])}};import{useCallback as G,useContext as We,useState as Pe}from"react";import{PrivyClientError as le}from"@privy-io/js-sdk-core";var Gr=e=>{let[r,c]=Pe(""),{user:a,client:o,otpState:n,setOtpState:t}=We(h),i=G(u=>{var s;let f=g(u);return t({status:"error",error:f}),(s=e==null?void 0:e.onError)==null||s.call(e,f),f},[e==null?void 0:e.onError]),l=G(f=>m(void 0,[f],function*({email:u}){var s;c(u);try{t({status:"sending-code"});let d=yield o.auth.email.sendCode(u);return t({status:"awaiting-code-input"}),(s=e==null?void 0:e.onSendCodeSuccess)==null||s.call(e,{email:u}),d}catch(d){return i(d),{success:!1}}}),[o,i,e==null?void 0:e.onSendCodeSuccess]),y=G(s=>m(void 0,[s],function*({code:u,email:f}){var d;try{if(!a)throw new le({code:"attempted_link_email_before_logged_in",error:"Must be logged in to link an email, Use `useLoginWithEmail` to login with email"});let v=f||r;if(!v)throw new le({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid email before calling `linkWithCode`"});t({status:"submitting-code"});let k=yield o.auth.email.linkWithCode(v,u);return t({status:"done"}),(d=e==null?void 0:e.onLinkSuccess)==null||d.call(e,k),k}catch(v){i(v)}}),[a,o,r,i,e==null?void 0:e.onLinkSuccess]);return{sendCode:l,linkWithCode:y,state:n}};import{useCallback as B,useContext as Ce,useState as xe}from"react";import{PrivyClientError as de}from"@privy-io/js-sdk-core";var Jr=e=>{let[r,c]=xe(""),{user:a,client:o,otpState:n,setOtpState:t}=Ce(h),i=B(u=>{var s;let f=g(u);return t({status:"error",error:f}),(s=e==null?void 0:e.onError)==null||s.call(e,f),f},[e==null?void 0:e.onError]),l=B(f=>m(void 0,[f],function*({email:u}){var s;c(u);try{t({status:"sending-code"});let d=yield o.auth.email.sendCode(u);return t({status:"awaiting-code-input"}),(s=e==null?void 0:e.onSendCodeSuccess)==null||s.call(e,{email:u}),d}catch(d){return i(d),{success:!1}}}),[o,i,e==null?void 0:e.onSendCodeSuccess]),y=B(d=>m(void 0,[d],function*({code:u,email:f,disableSignup:s}){var v;try{if(a)throw new de({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 k=f||r;if(!k)throw new de({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid email before calling `loginWithCode`"});t({status:"submitting-code"});let w=yield o.auth.email.loginWithCode(k,u,s?"no-signup":"login-or-sign-up");return t({status:"done"}),(v=e==null?void 0:e.onLoginSuccess)==null||v.call(e,w.user,w.is_new_user),w==null?void 0:w.user}catch(k){i(k)}}),[a,o,r,i,e==null?void 0:e.onLoginSuccess]);return{sendCode:l,loginWithCode:y,state:n}};import{useCallback as N,useContext as Ue,useState as Me}from"react";import{PrivyClientError as ue}from"@privy-io/js-sdk-core";var Zr=e=>{let[r,c]=Me(""),{user:a,client:o,otpState:n,setOtpState:t}=Ue(h),i=N(u=>{var s;let f=g(u);return t({status:"error",error:f}),(s=e==null?void 0:e.onError)==null||s.call(e,f),f},[e==null?void 0:e.onError]),l=N(f=>m(void 0,[f],function*({phone:u}){var s;c(u);try{t({status:"sending-code"});let d=yield o.auth.phone.sendCode(u);return t({status:"awaiting-code-input"}),(s=e==null?void 0:e.onSendCodeSuccess)==null||s.call(e,{phone:u}),d}catch(d){return i(d),{success:!1}}}),[o,i,e==null?void 0:e.onSendCodeSuccess]),y=N(s=>m(void 0,[s],function*({code:u,phone:f}){var d;try{if(!a)throw new ue({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(!(f||r))throw new ue({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid phone number before calling `linkWithCode`"});t({status:"submitting-code"});let k=yield o.auth.phone.linkWithCode(f||r,u);return t({status:"done"}),(d=e==null?void 0:e.onLinkSuccess)==null||d.call(e,k),k}catch(v){i(v)}}),[a,o,r,i,e==null?void 0:e.onLinkSuccess]);return{sendCode:l,linkWithCode:y,state:n}};import{useCallback as j,useContext as Le,useState as Oe}from"react";import{PrivyClientError as me}from"@privy-io/js-sdk-core";var at=e=>{let[r,c]=Oe(""),{user:a,client:o,otpState:n,setOtpState:t}=Le(h),i=j(u=>{var s;let f=g(u);return t({status:"error",error:f}),(s=e==null?void 0:e.onError)==null||s.call(e,f),f},[e==null?void 0:e.onError]),l=j(f=>m(void 0,[f],function*({phone:u}){var s;c(u);try{t({status:"sending-code"});let d=yield o.auth.phone.sendCode(u);return t({status:"awaiting-code-input"}),(s=e==null?void 0:e.onSendCodeSuccess)==null||s.call(e,{phone:u}),d}catch(d){return i(d),{success:!1}}}),[o,i,e==null?void 0:e.onSendCodeSuccess]),y=j(d=>m(void 0,[d],function*({code:u,phone:f,disableSignup:s}){var v;try{if(a)throw new me({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(!(f||r))throw new me({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid phone number before calling `loginWithCode`"});t({status:"submitting-code"});let w=yield o.auth.phone.loginWithCode(f||r,u,s?"no-signup":"login-or-sign-up");return t({status:"done"}),(v=e==null?void 0:e.onLoginSuccess)==null||v.call(e,w.user,w.is_new_user),w==null?void 0:w.user}catch(k){i(k)}}),[a,o,r,i,e==null?void 0:e.onLoginSuccess]);return{sendCode:l,loginWithCode:y,state:n}};import*as O from"expo-linking";import{useCallback as q,useContext as Ae,useRef as Re}from"react";import{PrivyClientError as C}from"@privy-io/js-sdk-core";var ht=e=>{let{appState:r,getCurrentAppState:c}=M(),{client:a,user:o,farcasterState:n,setFarcasterState:t}=Ae(h),i=Re(!1),l=q(f=>{var d;let s=g(f);return t({status:"error",error:s}),(d=e==null?void 0:e.onError)==null||d.call(e,s),s},[e==null?void 0:e.onError,t]),y=q(()=>{i.current=!0},[]);return{linkWithFarcaster:q((v,...k)=>m(void 0,[v,...k],function*({relyingParty:f,redirectUrl:s},d={pollAttempts:10,pollIntervalMs:1e3}){var w;try{if(i.current=!1,!o)throw new C({code:"attempted_link_farcaster_before_logged_in",error:"Must be logged in to link a Farcaster account."});t({status:"generating-uri"});let{connect_uri:b,channel_token:S}=yield a.auth.farcaster.initializeAuth({relyingParty:f,redirectUrl:O.createURL(s!=null?s:"/")});if(!b)throw new C({code:"failed_to_generate_farcaster_uri",error:"Failed to generate farcaster uri"});if(!S)throw new C({code:"failed_to_generate_farcaster_channel_token",error:"Failed to generate farcaster channel token"});yield O.openURL(b),t({status:"polling-status"});let E=0;for(;E<d.pollAttempts;){if(i.current)throw new C({code:"farcaster_polling_canceled",error:"Farcaster polling canceled"});if(r.current!=="active"&&c()!=="active"){yield _(d.pollIntervalMs);continue}let W=yield a.auth.farcaster.getFarcasterStatus({channel_token:S});if(W.state==="completed"){t({status:"submitting-token"});let P=yield a.auth.farcaster.link(p({channel_token:S},W));return t({status:"done"}),(w=e==null?void 0:e.onSuccess)==null||w.call(e,P),P}E++,yield _(d.pollIntervalMs)}throw new C({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(b){throw l(b)}}),[a,e==null?void 0:e.onSuccess,l,t,o]),state:n,cancel:y}};import{useCallback as he,useContext as Fe}from"react";var kt=e=>{let{client:r}=Fe(h),c=he(o=>{var t;let n=g(o);return(t=e==null?void 0:e.onError)==null||t.call(e,n),n},[e==null?void 0:e.onError]);return{unlinkFarcaster:he(n=>m(void 0,[n],function*({fid:o}){var t;try{let i=yield r.auth.farcaster.unlink({fid:o});return(t=e==null?void 0:e.onSuccess)==null||t.call(e,i),i}catch(i){throw c(i)}}),[r,e==null?void 0:e.onSuccess,c])}};import*as A from"expo-linking";import{useCallback as J,useContext as Ie,useRef as Te}from"react";import{PrivyClientError as x}from"@privy-io/js-sdk-core";var Pt=e=>{let{appState:r,getCurrentAppState:c}=M(),{client:a,user:o,farcasterState:n,setFarcasterState:t}=Ie(h),i=Te(!1),l=J(f=>{var d;let s=g(f);return t({status:"error",error:s}),(d=e==null?void 0:e.onError)==null||d.call(e,s),s},[e==null?void 0:e.onError,t]),y=J(()=>{i.current=!0},[]);return{loginWithFarcaster:J((k,...w)=>m(void 0,[k,...w],function*({relyingParty:f,redirectUrl:s,disableSignup:d},v={pollAttempts:10,pollIntervalMs:1e3}){var b;try{if(i.current=!1,o)throw new x({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"});t({status:"generating-uri"});let{connect_uri:S,channel_token:E}=yield a.auth.farcaster.initializeAuth({relyingParty:f,redirectUrl:A.createURL(s!=null?s:"/")});if(!S)throw new x({code:"failed_to_generate_farcaster_uri",error:"Failed to generate farcaster uri"});if(!E)throw new x({code:"failed_to_generate_farcaster_channel_token",error:"Failed to generate farcaster channel token"});yield A.openURL(S),t({status:"polling-status"});let W=0;for(;W<v.pollAttempts;){if(i.current)throw new x({code:"farcaster_polling_canceled",error:"Farcaster polling canceled"});if(r.current!=="active"&&c()!=="active"){yield _(v.pollIntervalMs);continue}let P=yield a.auth.farcaster.getFarcasterStatus({channel_token:E});if(P.state==="completed"){t({status:"submitting-token"});let F=yield a.auth.farcaster.authenticate(p({channel_token:E,mode:d?"no-signup":"login-or-sign-up"},P));return t({status:"done"}),(b=e==null?void 0:e.onSuccess)==null||b.call(e,F.user,F.is_new_user),F.user}W++,yield _(v.pollIntervalMs)}throw new x({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(S){throw l(S)}}),[a,l,e==null?void 0:e.onSuccess,t,o,r]),state:n,cancel:y}};import{useCallback as ye,useContext as He}from"react";var Ot=e=>{let{client:r}=He(h),c=ye(o=>{var t;let n=g(o);return(t=e==null?void 0:e.onError)==null||t.call(e,n),n},[e==null?void 0:e.onError]);return{unlinkOAuth:ye(t=>m(void 0,[t],function*({provider:o,subject:n}){var i;try{let l=yield r.auth.oauth.unlink(o,n);return(i=e==null?void 0:e.onSuccess)==null||i.call(e,l),l}catch(l){throw c(l)}}),[r,e==null?void 0:e.onSuccess,c])}};import{useContext as Ge,useEffect as Be,useRef as Ne}from"react";var Tt=e=>{let{client:r}=Ge(h),c=Ne(e.onOAuthTokenGrant);c.current=e.onOAuthTokenGrant,Be(()=>{let{unsubscribe:a}=r.addOAuthTokensListener(o=>{c.current(o)});return a},[r])};import{useCallback as je,useContext as qe}from"react";import{getUserEmbeddedEthereumWallet as Ke,getUserEmbeddedSolanaWallet as De,PrivyClientError as U,throwIfInvalidRecoveryUpgradePath as Je}from"@privy-io/js-sdk-core";var Kt=()=>{let{user:e,client:r}=qe(h);return{setRecovery:je(a=>m(void 0,null,function*(){var i;let o=r.app.appId;if(!e)throw new U({code:"embedded_wallet_recovery_error",error:"User must be loaded before attempting to modify the recovery method."});let n=(i=Ke(e))!=null?i:De(e);if(!n)throw new U({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});try{n.chain_type==="ethereum"?yield r.embeddedWallet.getProvider(n):n.chain_type==="solana"&&(yield r.embeddedWallet.getSolanaProvider(n,n.address,"solana-address-verifier"))}catch(l){throw new U({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"})}Je({currentRecoveryMethod:n.recovery_method,upgradeToRecoveryMethod:a.recoveryMethod});let t=yield Ve({appId:o,client:r,user:e,primaryAccount:n,recoveryParams:a});try{let{user:l}=yield r.embeddedWallet.setRecovery(t);return{user:l}}catch(l){throw new U({code:"embedded_wallet_set_recovery_error",error:l instanceof Error?l.message:"Error setting password on embedded wallet"})}}),[r,e])}},Ve=n=>m(void 0,[n],function*({appId:e,client:r,user:c,primaryAccount:a,recoveryParams:o}){switch(o.recoveryMethod){case"user-passcode":return te(p({},o),{wallet:a});case"google-drive":{let t=yield L(r);return{recoveryMethod:"google-drive",wallet:a,recoveryAccessToken:t}}case"icloud":{let{recoverySecret:t,iCloudRecordName:i}=yield oe({appId:e,client:r,user:c});return{recoveryMethod:"icloud-native",recoverySecretOverride:t,iCloudRecordNameOverride:i,wallet:a}}default:throw new U({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}});import{useCallback as $e,useContext as ze}from"react";import{getUserEmbeddedEthereumWallet as Qe,getUserEmbeddedSolanaWallet as Xe,PrivyClientError as V}from"@privy-io/js-sdk-core";var Yt=()=>{let{user:e,client:r}=ze(h);return{recover:$e(a=>m(void 0,null,function*(){var l;if(!e)throw new V({code:"embedded_wallet_recovery_error",error:"User must be loaded before attempting to modify the recovery method."});let o=(l=Qe(e))!=null?l:Xe(e);if(!o)throw new V({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let n,t,i;switch(a.recoveryMethod){case"user-passcode":n=a.password;break;case"google-drive":t=yield L(r);break;case"icloud":let{recoverySecret:y}=yield ne({client:r,walletAddress:o.address,chainType:o.chain_type});i=y;break}try{o.chain_type==="ethereum"?yield r.embeddedWallet.getProvider(o,n,t,i):o.chain_type==="solana"&&(yield r.embeddedWallet.getSolanaProvider(o,o.address,"solana-address-verifier",n,t,i))}catch(y){throw new V({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"})}}),[r,e])}};import{useContext as Ye,useEffect as $}from"react";var z=(e={})=>{let{wallet:r,createWalletCallbacks:c,recoverWalletCallbacks:a,setWalletRecoveryCallbacks:o}=Ye(h),{onCreateWalletSuccess:n,onCreateWalletError:t,onRecoverWalletError:i,onRecoverWalletSuccess:l,onSetWalletRecoverySuccess:y,onSetWalletRecoveryError:u}=e;return $(()=>{c.current={onSuccess:n,onError:t}},[n,t]),$(()=>{a.current={onSuccess:l,onError:i}},[l,i]),$(()=>{o.current={onSuccess:y,onError:u}},[l,i]),r};import{useEffect as Ze}from"react";var ao=({onStateChange:e})=>{let r=z();return Ze(()=>{e(r)},[r])};import{useContext as er}from"react";var uo=()=>{let{getIdentityToken:e}=er(h);return{getIdentityToken:e}};import{useCallback as fe,useContext as rr}from"react";import{PrivyClientError as tr}from"@privy-io/js-sdk-core";var wo=e=>{let{user:r,client:c}=rr(h),a=fe(n=>{var i;let t=g(n);return(i=e==null?void 0:e.onError)==null||i.call(e,t),t},[e==null?void 0:e.onError]);return{create:fe(()=>m(void 0,null,function*(){var n;try{if(r)throw new tr({code:"attempted_to_create_guest_account_for_logged_in_user",error:"Already logged in, you cannot create a guest account"});let t=yield c.auth.guest.create();return(n=e==null?void 0:e.onSuccess)==null||n.call(e,t.user,t.is_new_user),t.user}catch(t){throw a(t)}}),[c,a,r,e==null?void 0:e.onSuccess])}};import{useContext as or,useEffect as nr}from"react";function Eo({onMfaRequired:e}){let{client:r,user:c}=or(h);nr(()=>{function a(){return m(this,null,function*(){var o;yield e((o=c==null?void 0:c.mfa_methods.map(({type:n})=>n))!=null?o:[])})}return r.mfaPromises.on("mfaRequired",a),()=>{r.mfaPromises.off("mfaRequired",a)}},[r,c,e])}import{useCallback as Q,useContext as ir}from"react";import{PrivyClientError as R}from"@privy-io/js-sdk-core";function Uo(){let{client:e,mfaConfig:r}=ir(h),c=Q(n=>m(this,null,function*(){switch(n.method){case"sms":yield e.mfa.sms.sendCode({action:"verify"});return;case"passkey":let{options:t}=yield e.mfa.passkey.generateAuthenticationOptions({relying_party:n.relyingParty||(r==null?void 0:r.relyingParty)});return se(t);case"totp":return;default:throw new Error(`Unsupported MFA method: ${n.mfaMethod}`)}}),[e,r==null?void 0:r.relyingParty]),a=Q(n=>m(this,null,function*(){var t,i,l;switch(n.method){case"totp":case"sms":if(typeof n.mfaCode!="string")throw new R({code:"invalid_mfa_code",error:"Invalid MFA code"});(t=e.mfaPromises.rootPromise.current)==null||t.resolve({mfaMethod:n.method,mfaCode:n.mfaCode,relyingParty:n.relyingParty||(r==null?void 0:r.relyingParty)||""}),yield new Promise((s,d)=>{e.mfaPromises.submitPromise.current={resolve:s,reject:d}});break;case"passkey":if(typeof n.mfaCode=="string")throw new R({code:"invalid_passkey_response",error:"Invalid authenticator response"});let y=yield ie(n.mfaCode),u=ae(y);(i=e.mfaPromises.rootPromise.current)==null||i.resolve({mfaMethod:n.method,relyingParty:n.relyingParty||"",mfaCode:u}),yield new Promise((s,d)=>{e.mfaPromises.submitPromise.current={resolve:s,reject:d}});break;default:let f=new R({code:"unsupported_mfa_method",error:"Unsupported MFA method"});throw(l=e.mfaPromises.rootPromise.current)==null||l.reject(f),f}}),[e,r==null?void 0:r.relyingParty]),o=Q(()=>{var n;(n=e.mfaPromises.rootPromise.current)==null||n.reject(new R({code:"mfa_canceled",error:"MFA canceled"}))},[e]);return{init:c,submit:a,cancel:o}}import{useCallback as X,useContext as ar}from"react";function Ro(){let{client:e}=ar(h),r=X(o=>m(this,null,function*(){switch(o.method){case"sms":case"totp":return yield e.mfa.initEnrollMfa(o);case"passkey":return;default:throw new Error(`Unsupported MFA method: ${o.mfaMethod}`)}}),[e]),c=X(o=>m(this,null,function*(){switch(o.method){case"sms":case"totp":case"passkey":yield e.mfa.submitEnrollMfa(o);return;default:throw new Error(`Unsupported MFA method: ${o.mfaMethod}`)}}),[e]),a=X(o=>m(this,null,function*(){switch(o.method){case"sms":case"totp":yield e.mfa.unenrollMfa(o.method);return;case"passkey":yield e.mfa.submitEnrollMfa({method:"passkey",credentialIds:[]});return;default:throw new Error(`Unsupported MFA method: ${o.method}`)}}),[e]);return{initMfaEnrollment:r,submitMfaEnrollment:c,unenrollMfa:a}}import{useContext as sr,useEffect as ge}from"react";var cr=(e={})=>{let{solanaWallet:r,createSolanaWalletCallbacks:c,recoverSolanaWalletCallbacks:a}=sr(h),{onCreateWalletSuccess:o,onCreateWalletError:n,onRecoverWalletError:t,onRecoverWalletSuccess:i}=e;return ge(()=>{c.current={onSuccess:o,onError:n}},[o,n]),ge(()=>{a.current={onSuccess:i,onError:t}},[i,t]),r};import{useContext as lr}from"react";var Y=()=>{let{user:e,isReady:r,logout:c,getAccessToken:a,error:o}=lr(h);return{user:e,isReady:r,error:o,logout:c,getAccessToken:a}};import{useContext as dr}from"react";var Z=()=>{let{client:e}=dr(h);return e};import{useCallback as ur,useMemo as mr}from"react";import{getAllUserEmbeddedBitcoinWallets as ee,getUserEmbeddedEthereumWallet as we,getUserEmbeddedSolanaWallet as ve,PrivyClientError as re}from"@privy-io/js-sdk-core";var hr=()=>{let{user:e}=Y(),r=Z(),c=mr(()=>{var l;let o=(l=we(e))!=null?l:ve(e);if(!o)return[];let n=ee(e),{entropyId:t,entropyIdVerifier:i}=I(o);return n.map(y=>({address:y.address,walletIndex:y.wallet_index,publicKey:y.public_key,chainType:y.chain_type,getProvider:()=>r.embeddedWallet.getBitcoinProvider({wallet:y,entropyId:t,entropyIdVerifier:i})}))},[r,e]),a=ur(t=>m(void 0,[t],function*({chainType:o,createAdditional:n=!1}){var k;let{user:i}=yield r.user.get(),l=(k=we(i))!=null?k:ve(i);if(!l)throw new re({code:"embedded_wallet_creation_error",error:"No existing wallet for this user, create an Ethereum walet first to add a Bitcoin wallet"});let{entropyId:y,entropyIdVerifier:u}=I(l),f=ee(i).filter(w=>w.chain_type===o);if(!n&&f.length>0)throw new re({code:"embedded_wallet_creation_error",error:"Wallet already exists for this user. Set `createAdditional` to `true` to create another wallet"});let s=f.length===0?0:Math.max(...f.map(w=>w.wallet_index),0)+1,d=yield r.embeddedWallet.add({chainType:o,hdWalletIndex:s,entropyId:y,entropyIdVerifier:u}),v=ee(d.user).find(w=>w.chain_type===o&&w.wallet_index===s);if(!d.user||!v)throw new re({code:"embedded_wallet_creation_error",error:"Unknown error creating wallet"});return{user:d.user,provider:yield r.embeddedWallet.getBitcoinProvider({wallet:v,entropyId:y,entropyIdVerifier:u})}}),[r]);return{wallets:c,create:a}};export{vr as a,Wr as b,Or as c,Gr as d,Jr as e,Zr as f,at as g,ht as h,kt as i,Pt as j,Ot as k,Tt as l,Kt as m,Yt as n,z as o,ao as p,uo as q,wo as r,Eo as s,Uo as t,Ro as u,cr as v,Y as w,Z as x,hr as y};
@@ -1 +1 @@
1
- var kt=Object.defineProperty,Ct=Object.defineProperties;var At=Object.getOwnPropertyDescriptors;var ne=Object.getOwnPropertySymbols;var xe=Object.prototype.hasOwnProperty,Ie=Object.prototype.propertyIsEnumerable;var Oe=(e,t,r)=>t in e?kt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,E=(e,t)=>{for(var r in t||(t={}))xe.call(t,r)&&Oe(e,r,t[r]);if(ne)for(var r of ne(t))Ie.call(t,r)&&Oe(e,r,t[r]);return e},O=(e,t)=>Ct(e,At(t));var Rr=(e,t)=>{var r={};for(var o in e)xe.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(e!=null&&ne)for(var o of ne(e))t.indexOf(o)<0&&Ie.call(e,o)&&(r[o]=e[o]);return r};var v=(e,t,r)=>new Promise((o,s)=>{var n=i=>{try{l(r.next(i))}catch(d){s(d)}},c=i=>{try{l(r.throw(i))}catch(d){s(d)}},l=i=>i.done?o(i.value):Promise.resolve(i.value).then(n,c);l((r=r.apply(e,t)).next())});import*as yt from"expo-apple-authentication";import{applicationId as pt}from"expo-application";import*as G from"expo-linking";import*as I from"expo-secure-store";import*as oe from"expo-web-browser";import{useCallback as mt,useContext as Sr,useEffect as Er}from"react";import{Platform as Ee}from"react-native";import{PrivyClientError as j}from"@privy-io/js-sdk-core";import{digest as vr}from"expo-crypto";import re,{useState as k,useMemo as fr,createContext as wr,useCallback as pe,useRef as V,useEffect as hr}from"react";import{AppState as st,View as gr}from"react-native";import br,{PrivyClientError as _r}from"@privy-io/js-sdk-core";var Ue={name:"@privy-io/expo",version:"0.34.3",description:"Expo client for the Privy Auth API",keywords:["authentication","authorization","identity","privacy","privy","user data","react-native","expo","web3"],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"}},main:"./dist/esm/index.js",source:"./src/index.ts",types:"./dist/index.d.ts",files:["dist/**/*","LICENSE","README.md"],scripts:{build:"npx tsup --clean --minify","check-types":"npx tsc --noEmit",clean:"rm -rf dist .turbo",dev:"npx tsup --watch",format:'eslint "src/**/*.{ts,tsx,js,jsx}" --fix',"generate-types":"npx tsup --dts-only",lint:'npx eslint "src/**/*.{ts,tsx,js,jsx}"',test:'jest --testMatch "**/test/**/*.test.{ts,tsx}"'},browserslist:["defaults","node >= 18","not op_mini all"],dependencies:{"@privy-io/js-sdk-core":"0.35.2","react-fast-compare":"^3.2.2",zustand:"^4.4.1"},devDependencies:{"@privy-io/eslint-config-custom":"*","@privy-io/tsconfig":"*","@simplewebauthn/types":"9.0.1","@svgr/core":"^8.1.0","@svgr/plugin-jsx":"^8.1.0","@svgr/plugin-svgo":"^8.1.0","@testing-library/react-native":"^12.8.1","@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",jest:"^29.7.0","jest-expo":"~51.0.0",tsup:"^6.2.3",typescript:"~5.5.3"},peerDependencies:{"@expo-google-fonts/inter":"*","@privy-io/expo-native-extensions":"0.0.3","expo-apple-authentication":"*","expo-application":"*","expo-clipboard":"*","expo-constants":"*","expo-crypto":"*","expo-font":"*","expo-linking":"*","expo-secure-store":"*","expo-web-browser":"*",permissionless:"^0.2.10",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.21.36"},peerDependenciesMeta:{"@expo-google-fonts/inter":{optional:!0},"expo-font":{optional:!0},permissionless:{optional:!0},viem:{optional:!0}},publishConfig:{access:"public"}};import Rt from"react";import{useCallback as Wt,useEffect as Le,useRef as Ot}from"react";import{AppState as xt}from"react-native";import It from"react-native-webview";var Me=({client:e,isClientReady:t,setWebViewState:r,webViewState:o,logLevel:s})=>{let n=Ot(null);Le(()=>{n.current&&o==="loaded"&&e.setMessagePoster(n.current)},[e,n.current,o==="loaded"]),Le(()=>xt.addEventListener("change",i=>v(void 0,null,function*(){n.current&&i==="active"&&((yield e.embeddedWallet.ping(500))||(n.current.reload(),r("reloading")))})).remove,[]);let c=Wt(l=>v(void 0,null,function*(){let{data:i}=l.nativeEvent;e.embeddedWallet.onMessage(JSON.parse(i))}),[e]);return t?Rt.createElement(It,{style:{flex:1},ref:n,cacheEnabled:!1,cacheMode:"LOAD_NO_CACHE",source:{uri:e.embeddedWallet.getURL()},webviewDebuggingEnabled:s==="DEBUG",onLoad:()=>r("loaded"),onError:console.error,onMessage:c}):null};import{useCallback as fe,useEffect as De,useMemo as we}from"react";import{errorIndicatesRecoveryIsNeeded as Lt,getAllUserEmbeddedSolanaWallets as Mt,getUserEmbeddedEthereumWallet as Tt,getUserEmbeddedSolanaWallet as Ft,PrivyClientError as Z}from"@privy-io/js-sdk-core";import{getAllUserEmbeddedSolanaWallets as Te,getUserEmbeddedWallet as Ut,PrivyClientError as ie}from"@privy-io/js-sdk-core";function Fe(n){return v(this,arguments,function*({client:e,setSolanaWallet:t,createSolanaWalletCallbacks:r,setSolanaRecoveryFlowState:o,opts:s}){var c,l,i;t({status:"creating"});try{let{user:d}=yield e.user.get(),a=Te(d),u=a[0];if(s!=null&&s.recoveryMethod&&s.recoveryMethod!=="privy")throw new ie({code:"embedded_wallet_creation_error",error:"Unsupported recovery method for solana wallet."});if(!(s!=null&&s.createAdditional)&&u)throw new ie({code:"embedded_wallet_creation_error",error:"Solana wallet already exists for this user. Set `createAdditional` to `true` to create another wallet"});let m,f;if(u){let w=Math.max(...a.map(_=>_.wallet_index),0)+1,p=yield e.embeddedWallet.createAdditionalSolana({primaryPublicKey:u.address,hdWalletIndex:w});m=p.provider,f=p.user}else{let w=(c=Ut(d))!=null?c:void 0,p=yield e.embeddedWallet.createSolana({ethereumAccount:w});m=p.provider,f=p.user}let y=Te(f)[0];if(!y)throw new ie({code:"embedded_wallet_creation_error",error:"Unknown error creating solana wallet"});return(i=(l=r.current)==null?void 0:l.onSuccess)==null||i.call(l,m),t({status:"connected",publicKey:y.public_key}),o({status:"initial"}),m}catch(d){let a=d instanceof Error?d.message:"Error creating embedded wallet";throw t({status:"error",error:a}),o({status:"initial"}),new ie({code:"embedded_wallet_creation_error",error:a})}})}import{PrivyClientError as H}from"@privy-io/js-sdk-core";function ae(d){return v(this,arguments,function*({client:e,account:t,setWallet:r,recoverWalletCallbacks:o,recoveryMethod:s,setRecoveryFlowState:n,password:c,recoveryToken:l,recoverySecretOverride:i}){var a,u,m,f;if(!t)throw new H({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});switch(s){case"user-passcode":if(!c)throw new H({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!l)throw new H({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!i)throw new H({code:"embedded_wallet_recovery_error",error:"Record name is required for icloud recovery method"});break}r({status:"connecting",account:t});try{let y=yield e.embeddedWallet.getProvider(t,c,l,i);return r({status:"connected",provider:y,account:t}),n({status:"initial"}),(u=(a=o.current)==null?void 0:a.onSuccess)==null||u.call(a,y),y}catch(y){r({status:"needs-recovery",account:t}),n({status:"initial"});let w=new H({code:"embedded_wallet_recovery_error",error:y instanceof Error?y.message:"Error recovering embedded wallet"});throw(f=(m=o.current)==null?void 0:m.onError)==null||f.call(m,w),w}})}function je(l){return v(this,arguments,function*({client:e,account:t,entropyId:r,entropyIdVerifier:o,setSolanaWallet:s,recoverSolanaWalletCallbacks:n,setSolanaRecoveryFlowState:c}){var i,d,a,u;s({status:"connecting"});try{let m=yield e.embeddedWallet.getSolanaProvider(t,r,o);return s({status:"connected",publicKey:m._publicKey}),c({status:"initial"}),(d=(i=n.current)==null?void 0:i.onSuccess)==null||d.call(i,m),m}catch(m){s({status:"needs-recovery"}),c({status:"initial"});let f=new H({code:"embedded_wallet_recovery_error",error:m instanceof Error?m.message:"Error recovering embedded wallet"});throw(u=(a=n.current)==null?void 0:a.onError)==null||u.call(a,f),f}})}var se=e=>{if(e.chain_type==="ethereum")return{entropyId:e.address,entropyIdVerifier:"ethereum-address-verifier"};if(e.chain_type==="solana")return{entropyId:e.address,entropyIdVerifier:"solana-address-verifier"};throw new Error("Invalid embedded wallet account type")};var Ne=({client:e,user:t,solanaWallet:r,setSolanaWallet:o,setSolanaRecoveryFlowState:s,webViewState:n,createSolanaWalletCallbacks:c,recoverSolanaWalletCallbacks:l})=>{let i=we(()=>Mt(t),[t]),d=we(()=>{var y;return i.length===0?null:(y=Tt(t))!=null?y:Ft(t)},[t,i]),a=we(()=>{if(!d)return[];let{entropyId:y,entropyIdVerifier:w}=se(d);return i.map(p=>({address:p.address,publicKey:p.address,walletIndex:p.wallet_index,getProvider:()=>e.embeddedWallet.getSolanaProvider(p,y,w)}))},[i,d,e]),u=fe(y=>v(void 0,null,function*(){return yield Fe({client:e,setSolanaWallet:o,createSolanaWalletCallbacks:c,setSolanaRecoveryFlowState:s,opts:y})}),[e,c]),m=fe(()=>v(void 0,null,function*(){if(!d)throw new Z({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{entropyId:y,entropyIdVerifier:w}=se(d);return je({client:e,account:i[0],entropyId:y,entropyIdVerifier:w,setSolanaWallet:o,recoverSolanaWalletCallbacks:l,setSolanaRecoveryFlowState:s})}),[e,d,i,l,s,o]),f=fe(()=>v(void 0,null,function*(){if(!d)throw o({status:"not-created"}),new Z({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});o(y=>y.status==="connected"?{status:"reconnecting"}:{status:"connecting"});try{let{entropyId:y,entropyIdVerifier:w}=se(d),p=yield e.embeddedWallet.getSolanaProvider(i[0],y,w);return o({status:"connected",publicKey:i[0].public_key}),p}catch(y){throw Lt(y)?(o({status:"needs-recovery"}),new Z({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):y instanceof Error?(o({status:"error",error:y.message}),new Z({code:"unknown_embedded_wallet_error",error:y.message})):(o({status:"error",error:"Error loading embedded wallet"}),new Z({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,d]);return De(()=>{if(!t&&r.status!=="disconnected")return o({status:"disconnected"});n==="loaded"&&f().catch(()=>{})},[n,t,d]),De(()=>{r.status==="error"&&r.error.includes("User must be logged in")&&f()},[r.status]),{create:u,recover:m,getProvider:f,wallets:a}};import{useCallback as te,useEffect as Je,useMemo as Gt}from"react";import{getUserEmbeddedSolanaWallet as Ge,throwIfInvalidRecoveryUpgradePath as Yt}from"@privy-io/js-sdk-core";import{errorIndicatesRecoveryIsNeeded as Xt,getUserEmbeddedWallet as Qt,PrivyClientError as A}from"@privy-io/js-sdk-core";import{getUserEmbeddedWallet as jt}from"@privy-io/js-sdk-core";import{PrivyClientError as le}from"@privy-io/js-sdk-core";function de(a){return v(this,arguments,function*({client:e,setWallet:t,createWalletCallbacks:r,recoveryMethod:o,setRecoveryFlowState:s,password:n,recoveryToken:c,recoverySecretOverride:l,iCloudRecordNameOverride:i,solanaAccount:d}){var m,f;switch(o){case"user-passcode":if(!n)throw new le({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!c)throw new le({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!l||!i)throw new le({code:"embedded_wallet_recovery_error",error:"iCloud recovery failed due to inability to store credentials"});break}t({status:"creating",account:null});let u=o==="icloud"?"icloud-native":o;try{let{provider:y,user:w}=yield e.embeddedWallet.create(n,u,c,l,i,d),p=jt(w);return(f=(m=r.current)==null?void 0:m.onSuccess)==null||f.call(m,y),t({status:"connected",provider:y,account:p}),s({status:"initial"}),y}catch(y){let w=y instanceof Error?y.message:"Error creating embedded wallet";throw t({status:"error",error:w,account:null}),s({status:"initial"}),new le({code:"embedded_wallet_creation_error",error:w})}})}import{Platform as Ve}from"react-native";import{PrivyClientError as M}from"@privy-io/js-sdk-core";function Ke(){return v(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 he(o){return v(this,arguments,function*({user:e,appId:t,client:r}){var l;if(Ve.OS==="android")throw new M({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let s=yield Ke(),n=yield r.recovery.icloudAuth.getICloudConfiguration("expo-ios");if(!(n==null?void 0:n.container_identifier))throw new M({code:"embedded_wallet_recovery_error",error:"An iCloud Container ID must be specified in the Privy Dashboard."});try{let{recoverySecret:i,iCloudRecordName:d}=yield s.writeRecoverySecretToICloud({containerId:n.container_identifier,appId:t,userId:e.id});return{recoverySecret:i,iCloudRecordName:d}}catch(i){if(i instanceof Error){let d=(l=i.message.split("Caused by: ")[1])!=null?l:"Error writing to iCloud";throw new M({code:"embedded_wallet_recovery_error",error:d})}throw new M({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}function qe(o){return v(this,arguments,function*({walletAddress:e,client:t,chainType:r}){var d;if(Ve.OS==="android")throw new M({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let s=yield Ke(),c=(yield t.recovery.getRecoveryKeyMaterial(e,r)).icloud_record_name;if(!c)throw new M({code:"embedded_wallet_recovery_error",error:"iCloud recovery not properly backed up."});let l=yield t.recovery.icloudAuth.getICloudConfiguration("expo-ios"),i=l==null?void 0:l.container_identifier;if(!i)throw new M({code:"embedded_wallet_recovery_error",error:"An iCloud Container ID must be specified in the Privy Dashboard."});try{let{recoverySecret:a}=yield s.readRecoverySecretFromICloud({containerId:i,recordName:c});return{recoverySecret:a}}catch(a){if(a instanceof Error){let u=(d=a.message.split("Caused by: ")[1])!=null?d:"Error writing to iCloud";throw new M({code:"embedded_wallet_recovery_error",error:u})}throw new M({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}import*as N from"expo-linking";import*as ze from"expo-web-browser";import{Platform as Be}from"react-native";import{PrivyClientError as z}from"@privy-io/js-sdk-core";import Dt from"react-fast-compare";var He=e=>t=>e(r=>Dt(r,t)?r:t);import{PrivyApiError as Nt,PrivyClientError as Vt}from"@privy-io/js-sdk-core";function x(e){return e instanceof Error||e instanceof Nt||e instanceof Vt?e:typeof e=="string"?new Error(e):new Error("Unknown error")}var co=e=>new Promise(t=>setTimeout(t,e));import{useEffect as Kt,useRef as qt}from"react";import{AppState as ge}from"react-native";function vo(){let e=qt(ge.currentState);Kt(()=>ge.addEventListener("change",o=>{e.current=o}).remove,[]);function t(){return ge.currentState}return{appState:e,getCurrentAppState:t}}function ee(s){return v(this,arguments,function*({provider:e,redirectUri:t,client:r,onError:o}){try{let n;switch(e){case"google-drive":{let{url:d}=yield r.recovery.auth.generateURL(N.createURL(t||"/"));n=d;break}default:throw new z({error:"OAuth invalid provider",code:"embedded_wallet_recovery_error"})}let c=yield ze.openAuthSessionAsync(n);if(Be.OS==="android")return;if(c.type!=="success")throw new z({error:"Recovery OAuth session failed",code:"embedded_wallet_recovery_error"});let{queryParams:l}=N.parse(c.url),i;switch(e){case"google-drive":{let{privy_oauth_state:d,privy_oauth_code:a}=l;if(!a||!d)throw new z({error:"Recovery OAuth invalid credentials",code:"embedded_wallet_recovery_error"});i=yield ce({oAuthCode:a,oAuthState:d,client:r});break}default:throw new z({error:"Recovery OAuth invalid provider",code:"embedded_wallet_recovery_error"})}return i}catch(n){throw o==null||o(x(n)),n}})}function ce(o){return v(this,arguments,function*({oAuthCode:e,oAuthState:t,client:r}){let{access_token:s}=yield r.recovery.auth.authorize(e,t);if(!s)throw new z({error:"OAuth invalid credentials",code:"login_with_oauth_returned_with_invalid_credentials"});return s})}var Ht=2*60*1e3;function zt(e){let t;return new Promise((r,o)=>{t=N.addEventListener("url",n=>v(this,[n],function*({url:s}){if(!s)return;let{queryParams:c}=N.parse(s),{privy_oauth_state:l,privy_oauth_code:i}=c!=null?c:{};if(typeof i!="string"||typeof l!="string")return;let d=yield ce({client:e,oAuthCode:i,oAuthState:l});r(d)})),setTimeout(()=>{o(new z({code:"embedded_wallet_set_recovery_error",error:"Failed to complete Google Drive recovery flow"}))},Ht)}).finally(()=>{t==null||t.remove()})}function Ao(e){return v(this,null,function*(){let t;Be.OS==="android"&&(t=zt(e));let r=yield ee({provider:"google-drive",client:e});return r!=null?r:yield t})}import{getUserEmbeddedWallet as Bt,PrivyClientError as Jt}from"@privy-io/js-sdk-core";function ue(n){return v(this,arguments,function*({client:e,recoveryInput:t,setWalletRecoveryCallbacks:r,setRecoveryFlowState:o,setWallet:s}){var c,l,i,d;try{let{provider:a,user:u}=yield e.embeddedWallet.setRecovery(t),m=a,f=Bt(u);return s({status:"connected",provider:m,account:f}),(l=(c=r.current)==null?void 0:c.onSuccess)==null||l.call(c,m),o({status:"initial"}),m}catch(a){let u=new Jt({code:"embedded_wallet_set_recovery_error",error:a instanceof Error?a.message:"Error setting password on embedded wallet"});throw(d=(i=r.current)==null?void 0:i.onError)==null||d.call(i,u),o({status:"initial"}),u}})}function Ye(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}:{recoveryMethod:e.recoveryMethod}}var Xe=({client:e,user:t,appId:r,wallet:o,setWallet:s,setRecoveryFlowState:n,webViewState:c,createWalletCallbacks:l,recoverWalletCallbacks:i,setWalletRecoveryCallbacks:d})=>{let a=Gt(()=>Qt(t),[t]),u=te(p=>v(void 0,null,function*(){var R,q;if(a)throw new A({error:"This user already has an embedded wallet",code:"embedded_wallet_already_exists"});let{user:_}=yield e.user.get(),{password:g,recoveryMethod:h}=Ye(p),b,S,W;if(h==="google-drive"&&(b=yield ee({provider:h,client:e,onError:(R=l.current)==null?void 0:R.onError}),n({status:"creating-wallet"}),!b))return null;if(h==="icloud"){if(!_)throw new A({code:"embedded_wallet_recovery_error",error:"User must be loaded before creating a wallet with iCloud."});let{recoverySecret:T,iCloudRecordName:D}=yield he({user:_,appId:r,client:e});S=T,W=D}return yield de({client:e,setWallet:s,createWalletCallbacks:l,recoveryMethod:h,setRecoveryFlowState:n,password:g,recoverySecretOverride:S,iCloudRecordNameOverride:W,solanaAccount:(q=Ge(_))!=null?q:void 0})}),[e,a,t]),m=te(p=>v(void 0,null,function*(){var h;if(o.status!=="connected")throw new A({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"});if(!a)throw new A({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});if(Ge(t))throw new A({code:"embedded_wallet_set_recovery_error",error:"Cannot set user-controlled recovery for a user with an embedded Solana wallet."});Yt({currentRecoveryMethod:a.recovery_method,upgradeToRecoveryMethod:p.recoveryMethod});let _,g;switch(p.recoveryMethod){case"privy":g=O(E({},p),{wallet:a});break;case"user-passcode":g=O(E({},p),{wallet:a,password:p.password});break;case"google-drive":if(_=yield ee({provider:p.recoveryMethod,client:e,onError:(h=d.current)==null?void 0:h.onError}),n({status:"upgrading-recovery"}),!_)return null;g={recoveryMethod:"google-drive",wallet:a,recoveryAccessToken:_};break;case"icloud":if(!t)throw new A({code:"embedded_wallet_recovery_error",error:"User must be loaded before backing up to iCloud."});let{recoverySecret:b,iCloudRecordName:S}=yield he({user:t,appId:r,client:e});g={recoveryMethod:"icloud-native",recoverySecretOverride:b,iCloudRecordNameOverride:S,wallet:a};break;default:throw new A({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}return ue({client:e,recoveryInput:g,setWalletRecoveryCallbacks:d,setRecoveryFlowState:n,setWallet:s})}),[e,a,o.status,t]),f=te(p=>v(void 0,null,function*(){return m({recoveryMethod:"user-passcode",password:p})}),[e,a,o.status]),y=te(p=>v(void 0,null,function*(){var S;if(!a)throw new A({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{password:_,recoveryMethod:g}=Ye(p),h,b;if(g==="google-drive"&&(h=yield ee({provider:g,client:e,onError:(S=i.current)==null?void 0:S.onError}),n({status:"recovering"}),!h))return null;if(g==="icloud"){if(!t)throw new A({code:"embedded_wallet_recovery_error",error:"User must be loaded before recovering via iCloud."});let{recoverySecret:W}=yield qe({client:e,walletAddress:a.address});b=W}return ae({client:e,account:a,setWallet:s,recoverWalletCallbacks:i,recoveryMethod:g,setRecoveryFlowState:n,password:_,recoveryToken:h,recoverySecretOverride:b})}),[e,a]),w=te(()=>v(void 0,null,function*(){if(!a)throw s({status:"not-created",account:null}),new A({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});s(p=>p.status==="connected"?{status:"reconnecting",account:a}:{status:"connecting",account:a});try{let p=yield e.embeddedWallet.getProvider(a);return s({status:"connected",provider:p,account:a}),p}catch(p){throw Xt(p)?(s({status:"needs-recovery",account:a}),new A({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):p instanceof Error?(s({status:"error",error:p.message,account:a}),new A({code:"unknown_embedded_wallet_error",error:p.message})):(s({status:"error",error:"Error loading embedded wallet",account:a}),new A({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,a]);return Je(()=>{if(!t&&o.status!=="disconnected")return s({status:"disconnected",account:null});c==="loaded"&&w().catch(()=>{})},[c,t,a]),Je(()=>{o.status==="error"&&o.error.includes("User must be logged in")&&w()},[o.status]),{create:u,recover:y,setPassword:f,setRecovery:m,getProvider:w}};import{useEffect as $t,useState as Zt}from"react";import{PrivyClientError as Qe}from"@privy-io/js-sdk-core";var $e=({client:e,user:t,isReady:r,customAuth:o})=>{let[s,n]=Zt({status:"initial"});return $t(()=>{(()=>v(void 0,null,function*(){if(!(o!=null&&o.enabled)){n({status:"not-enabled"});return}n({status:"loading"});let{getCustomAccessToken:l,isLoading:i}=o;if(!(!r||i))try{let d=yield l();if(!d&&t){yield e.auth.logout(),n({status:"done"});return}if(!d){n({status:"done"});return}if(t){n({status:"done"});return}if(!(yield e.auth.customProvider.syncWithToken(d))){yield e.auth.logout(),n({status:"error",error:new Qe({error:"Failed to sync with custom auth provider",code:"third_party_auth_error"})});return}n({status:"done"})}catch(d){if(console.log("Error syncing with custom auth provider",d),n({status:"error",error:d}),t)throw yield e.auth.logout(),new Qe({error:"Third-party auth failed",code:"third_party_auth_error"})}}))()},[e,t,r,o==null?void 0:o.enabled,o==null?void 0:o.getCustomAccessToken,o==null?void 0:o.isLoading]),{customAuthState:s,customAuthStateIsSettled:s.status!=="loading"&&s.status!=="initial"}};import*as B from"expo-linking";import{useCallback as er,useEffect as tr}from"react";import{Platform as rr}from"react-native";var Ze=({client:e,user:t,isUserInitialized:r,oAuthState:o,oAuthCallbacks:s,setOAuthState:n,recoveryFlowState:c,oAuthStateRef:l})=>{let i=B.useURL(),d=er(a=>{var m,f;let u=x(a);n({status:"error",error:u}),(f=(m=s.current).onError)==null||f.call(m,u)},[n]);return tr(()=>{function a(){return v(this,null,function*(){var y,w;if(!i||o.status!=="loading"||c.status!=="initial")return;let{queryParams:u}=B.parse(i),{privy_oauth_state:m,privy_oauth_code:f}=u;if(!f||!m){n({status:"done"});return}try{let p,_;if(t)p=yield e.auth.oauth.linkWithCode(f,m);else{let g=yield e.auth.oauth.loginWithCode(f,m,void 0,void 0,l.current.disableSignup?"no-signup":"login-or-sign-up");p=g.user,_=!!g.is_new_user}return(w=(y=s.current).onSuccess)==null||w.call(y,p,_),l.current={},n({status:"done"}),yield B.openURL(i.split("?")[0])}catch(p){l.current={},d(p)}})}rr.OS==="android"&&r&&a()},[i,r])};import*as J from"expo-linking";import{useCallback as or,useEffect as nr,useMemo as ir}from"react";import{Platform as ar}from"react-native";import{getUserEmbeddedSolanaWallet as sr,getUserEmbeddedWallet as lr}from"@privy-io/js-sdk-core";var et=({client:e,user:t,createWalletCallbacks:r,recoverWalletCallbacks:o,setWalletRecoveryCallbacks:s,recoveryFlowState:n,oAuthState:c,setRecoveryFlowState:l,setWallet:i,appStateVisible:d,webViewLoaded:a})=>{let u=J.useURL(),m=ir(()=>lr(t),[t]),f=or(y=>{var p,_,g,h;let w=x(y);n.status==="creating-wallet"?(_=(p=r.current).onError)==null||_.call(p,x(w)):(h=(g=o.current).onError)==null||h.call(g,x(w)),l({status:"initial"})},[n]);return nr(()=>{function y(){return v(this,null,function*(){var g;if(!u&&n.status!=="initial"&&d&&f(new Error("Recovery OAuth session failed")),!u||n.status==="initial"||c.status!=="initial"||!d||!a)return;let{queryParams:w}=J.parse(u),{privy_oauth_state:p,privy_oauth_code:_}=w;if(!(!_||!p)){yield J.openURL(u.split("?")[0]);try{let h=yield ce({oAuthCode:_,oAuthState:p,client:e});if(n.status==="creating-wallet"){let b=(g=sr(t))!=null?g:void 0;yield de({client:e,setWallet:i,createWalletCallbacks:r,recoveryMethod:"google-drive",setRecoveryFlowState:l,recoveryToken:h,solanaAccount:b})}else if(n.status==="upgrading-recovery"){if(!m)throw new Error("Embedded wallet not found");yield ue({client:e,recoveryInput:{recoveryMethod:"google-drive",wallet:m,recoveryAccessToken:h},setWalletRecoveryCallbacks:s,setRecoveryFlowState:l,setWallet:i})}else yield ae({client:e,account:m,setWallet:i,recoverWalletCallbacks:o,recoveryMethod:"google-drive",setRecoveryFlowState:l,recoveryToken:h})}catch(h){f(h)}}})}ar.OS==="android"&&y()},[u,n.status,d,a])};import{useEffect as dr}from"react";var tt=({client:e,isUserInitialized:t,setIsUserInitialized:r,setError:o})=>{dr(()=>{t||(()=>v(void 0,null,function*(){try{yield e.initialize()}catch(n){o(n instanceof Error?n:new Error(String(n)))}try{yield e.user.get()}catch(n){}finally{r(!0)}}))()},[e,t,o,r])};import{useEffect as ur}from"react";import{create as pr}from"zustand";var P=class extends Error{constructor(r,o){super(o);this.code=r,this.error=o}},rt=class extends P{constructor(r){super("underlying_error",r instanceof Error?r.message:"An underlying error occurred");this.wrappedError=r}};var be={success:e=>({value:e}),error:e=>({error:e})};var ot=e=>{let t=Array.from(new Set(e));return t.length===0?be.error(new P("no_login_methods_available","No login methods available")):be.success(t)},_e=e=>{let t=e.length,r=e.every(o=>o==="sms"||o==="email");return t<=2&&r?e[0]:null},vn=(e,t)=>{if(e.length!==2)return null;let[r,o]=e;return t===r?o:r},fn={email:"email",sms:"phone",google:"Google",apple:"Apple",discord:"Discord",twitter:"X",github:"Github",spotify:"Spotify",instagram:"Instagram",tiktok:"Tiktok",linkedin:"LinkedIn"};function nt(e){return new Promise((t,r)=>{e({resolve:t,reject:r})})}function cr(e,t){return{resolve:r=>{t(),e.resolve(r)},reject:r=>{t(),e.reject(r)}}}function it(e,t,r){let o=setTimeout(()=>{e.reject(t())},r);return cr(e,()=>{clearTimeout(o)})}var mr=1e3*60*5,F=pr()((e,t)=>({privyElementsConfig:null,loginPromiseResolvers:null,isUIMounted:!1,activeLoginMethod:null,updateUIMounted:r=>e({isUIMounted:r}),openLoginFlow:(r,o,s,n)=>nt(c=>{var u,m,f;let l=o.app.getConfig();if(!l)return c.reject(new P("privy_not_ready","Privy is not ready"));if(s!==null)return c.reject(new P("user_already_logged_in","User is already logged in"));if(!t().isUIMounted)return c.reject(new P("privy_elements_not_ready","Privy Elements is not mounted"));if(t().loginPromiseResolvers!==null)return c.reject(new P("existing_login_flow_in_progress","A login flow is already in progress"));let i=ot(r.loginMethods);if(i.error)return c.reject(i.error);let d={loginMethods:i.value,appearance:{logo:(f=(m=(u=r.appearance)==null?void 0:u.logo)!=null?m:l.logo_url)!=null?f:void 0}},a=it(c,()=>(e({privyElementsConfig:null,loginPromiseResolvers:null}),new P("login_flow_timeout","The login flow timed out")),mr);n(),e({loginPromiseResolvers:a,privyElementsConfig:d,activeLoginMethod:_e(d.loginMethods)})}),closeLoginFlow:()=>{var r;return(r=t().loginPromiseResolvers)==null||r.reject(new P("login_flow_closed","The login flow was closed")),e({privyElementsConfig:null,loginPromiseResolvers:null})},goBack:()=>{let{activeLoginMethod:r,privyElementsConfig:o,updateActiveLoginMethod:s,closeLoginFlow:n}=t();if(!o){n();return}let c=_e(o.loginMethods)===null;r===null||!c?n():s(null)},updateActiveLoginMethod:r=>e({activeLoginMethod:r})})),kn=()=>{let e=F(r=>r.privyElementsConfig);return F(r=>r.isUIMounted)?e:null},Cn=()=>F(e=>e.openLoginFlow),An=()=>F(e=>e.closeLoginFlow),Pn=()=>F(e=>e.goBack),Rn=()=>F(e=>[e.activeLoginMethod,e.updateActiveLoginMethod]),yr=e=>{let{loginPromiseResolvers:t}=F.getState();t==null||t.resolve(e)},at=()=>yr,Wn=()=>{let e=F(t=>t.updateUIMounted);ur(()=>(e(!0),()=>{e(!1)}),[e])};var Se=wr({}),K;function Bn(e){return K?K.getAccessToken():e!=null&&e.strict?Promise.reject(new _r({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 Jn=e=>{var We;let[t,r]=k(st.currentState==="active");hr(()=>{let L=st.addEventListener("change",Et=>{r(Et==="active")});return()=>{L.remove()}},[]);let[o,s]=k(!1),[n,c]=k(null),[l,i]=k("loading"),[d,a]=k(!1),[u,m]=k(null),[f,y]=k({status:"disconnected",account:null}),[w,p]=k({status:"disconnected"}),[_,g]=k({status:"initial"}),[h,b]=k({status:"initial"}),S=V({}),[W,R]=k({status:"initial"}),[q,T]=k({status:"initial"}),[D,Y]=k({status:"initial"}),[X,Q]=k({status:"initial"}),[U,vt]=k({status:"initial"}),Ae=V({}),me=V({}),ye=V({}),ve=V({}),Pe=V({}),Re=V({}),ft=at(),$=pe(L=>{if(L){ft(L),He(m)(L);return}m(null),g({status:"initial"}),b({status:"initial"}),y({status:"disconnected",account:null})},[]),C=fr(()=>{let L=e.storage||ut;return e.client?(K=e.client,K.setCallbacks({setUser:$,setIsReady:a}),K):(K=new br({storage:ct(L),appId:e.appId,clientId:e.clientId,supportedChains:e.supportedChains,nativeAppIdentifier:dt(),baseUrl:e.baseUrl,sdkVersion:`expo:${Ue.version}`,callbacks:{setUser:$,setIsReady:a},logLevel:e.logLevel,crypto:{digest:vr}}),K)},[e.client,e.storage,e.appId,e.clientId,e.baseUrl,e.supportedChains,e.logLevel,$]),wt=pe(()=>($(null),C.auth.logout()),[$,C]),ht=pe(()=>v(void 0,null,function*(){try{return yield C.getAccessToken()}catch(L){return console.debug(L),null}}),[C]),gt=pe(()=>C.getIdentityToken(),[C]);tt({client:C,isUserInitialized:o,setIsUserInitialized:s,setError:c});let bt=Xe({client:C,user:u,appId:e.appId,webViewState:l,createWalletCallbacks:me,recoverWalletCallbacks:ye,setWalletRecoveryCallbacks:ve,setRecoveryFlowState:R,wallet:f,setWallet:y}),_t=Ne({client:C,user:u,webViewState:l,createSolanaWalletCallbacks:Pe,recoverSolanaWalletCallbacks:Re,setSolanaRecoveryFlowState:T,solanaWallet:w,setSolanaWallet:p});Ze({client:C,isUserInitialized:o,user:u,oAuthState:h,setOAuthState:b,oAuthCallbacks:Ae,recoveryFlowState:W,oAuthStateRef:S}),et({client:C,user:u,webViewLoaded:l==="loaded",createWalletCallbacks:me,recoverWalletCallbacks:ye,setWalletRecoveryCallbacks:ve,recoveryFlowState:W,oAuthState:h,setRecoveryFlowState:R,setWallet:y,appStateVisible:t});let{customAuthStateIsSettled:St}=$e({client:C,user:u,isReady:o,customAuth:(We=e.config)==null?void 0:We.customAuth});return re.createElement(re.Fragment,null,re.createElement(Se.Provider,{value:{client:C,user:u,isReady:l!=="loading"&&o&&lt(h)&&St,error:n,logout:wt,getAccessToken:ht,getIdentityToken:gt,wallet:E(E({},f),bt),solanaWallet:E(E({},w),_t),oAuthState:h,oAuthCallbacks:Ae,recoveryFlowState:W,setRecoveryFlowState:R,solanaRecoveryFlowState:q,setSolanaRecoveryFlowState:T,createWalletCallbacks:me,recoverWalletCallbacks:ye,setWalletRecoveryCallbacks:ve,createSolanaWalletCallbacks:Pe,recoverSolanaWalletCallbacks:Re,setOAuthState:b,siweState:D,setSiweState:Y,otpState:_,setOtpState:g,passkeyState:X,setPasskeyState:Q,farcasterState:U,setFarcasterState:vt,oAuthStateRef:S}},e.children),re.createElement(gr,{style:{width:0,height:0,overflow:"hidden"}},re.createElement(Me,{logLevel:e.logLevel,client:C,isClientReady:d,setWebViewState:i,webViewState:l})))};var lt=e=>e.status!=="loading",ke=(e={})=>{let{user:t,oAuthState:r,setOAuthState:o,oAuthCallbacks:s,client:n,oAuthStateRef:c}=Sr(Se),l=e.action?e.action==="login":!t;Er(()=>{s.current={onSuccess:e.onSuccess,onError:e.onError}},[e.onSuccess,e.onError]);let i=mt(a=>{var m;let u=x(a);return o({status:"error",error:u}),(m=e==null?void 0:e.onError)==null||m.call(e,u),u},[e==null?void 0:e.onError]);return{start:mt(function(w){return v(this,arguments,function*({provider:u,redirectUri:m,isLegacyAppleIosBehaviorEnabled:f=!1,disableSignup:y}){var p,_,g;o({status:"loading"}),c.current={disableSignup:y};try{if(t&&e.action==="login")throw new j({code:"attempted_login_with_oauth_while_already_logged_in",error:"Already logged in, if trying to link an OAuth account use `useLinkWithOAuth`"});if(!t&&e.action==="link")throw new j({code:"attempted_link_oauth_before_logged_in",error:"Must be logged in to link an OAuth account, use `useLoginWithOAuth`"});let{url:h}=yield n.auth.oauth.generateURL(u,G.createURL(m||"/")),b,S;if(Ee.OS==="ios"&&u==="apple"&&!f){let X=(p=new URL(h).searchParams.get("state"))!=null?p:"",Q=yield yt.signInAsync({state:X}).catch(U=>{throw U instanceof Error&&"code"in U&&U.code==="ERR_REQUEST_CANCELED"?new j({error:"Apple login was cancelled",code:l?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):U});if(!Q.authorizationCode)throw new j({error:"OAuth invalid credentials",code:l?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(l){let U=yield n.auth.oauth.loginWithCode(Q.authorizationCode,X,u,"raw",y?"no-signup":"login-or-sign-up");b=U.user,S=U.is_new_user}else b=yield n.auth.oauth.linkWithCode(Q.authorizationCode,X,u,"raw");return(_=e==null?void 0:e.onSuccess)==null||_.call(e,b,S),o({status:"done"}),b!=null?b:void 0}let W=Ee.OS==="android"?h.replace("x.com","twitter.com"):h,R=yield oe.openAuthSessionAsync(W);if(Ee.OS==="android")return;if(R.type!=="success")throw[oe.WebBrowserResultType.CANCEL,oe.WebBrowserResultType.DISMISS].includes(R.type)?new j({error:"OAuth was cancelled",code:l?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):new j({error:"OAuth session failed",code:l?"failed_to_complete_login_with_oauth":"failed_to_complete_link_with_oauth"});let{queryParams:q}=G.parse(R.url),{privy_oauth_state:T,privy_oauth_code:D}=q;if(!D||!T)throw new j({error:"OAuth invalid credentials",code:l?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(l){let Y=yield n.auth.oauth.loginWithCode(D,T,u,void 0,y?"no-signup":"login-or-sign-up");b=Y.user,S=Y.is_new_user}else b=yield n.auth.oauth.linkWithCode(D,T,u);return(g=e==null?void 0:e.onSuccess)==null||g.call(e,b,S),yield G.openURL(R.url.split("?")[0]),o({status:"done"}),b!=null?b:void 0}catch(h){i(h)}})},[t,n,o,i]),state:r}};function ri(e){let{state:t,start:r}=ke(O(E({},e),{action:"login"}));return{state:t,login:r}}function oi(e){let{state:t,start:r}=ke(O(E({},e),{action:"link"}));return{state:t,link:r}}function ni(e){return ke(e)}var dt=()=>{if(typeof pt!="string")throw new j({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 pt};function ct(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:()=>v(this,null,function*(){return[]})}}var ut={get(e){return I.getItemAsync(e,{keychainAccessible:I.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},put(e,t){return I.setItemAsync(e,t,{keychainAccessible:I.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},del(e){return I.deleteItemAsync(e,{keychainAccessible:I.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},getKeys:()=>v(void 0,null,function*(){return[]})};import{PrivyClientError as kr}from"@privy-io/js-sdk-core";var Cr=e=>v(void 0,null,function*(){var o;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 kr({code:"failed_to_create_passkey",error:"Could not create passkey"});return O(E({},r),{type:(o=r.type)!=null?o:"public-key",clientExtensionResults:{}})});import{PrivyClientError as Ar}from"@privy-io/js-sdk-core";var Pr=e=>v(void 0,null,function*(){var o;let r=yield(yield import("react-native-passkeys")).get({rpId:e.rpId,challenge:e.challenge,allowCredentials:e.allowCredentials,timeout:12e4});if(!r)throw new Ar({code:"no_passkey_found_for_challenge",error:"Could not find a matching passkey to login with"});return O(E({},r),{type:(o=r.type)!=null?o:"public-key",clientExtensionResults:{}})});function hi(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 gi(e){var t,r,o,s;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:(o=e.extensions)==null?void 0:o.hmac_create_secret},timeout:e.timeout,allowCredentials:(s=e.allow_credentials)==null?void 0:s.map(({id:n,type:c,transports:l})=>({id:n,type:c,transports:l})),userVerification:e.user_verification}}export{E as a,O as b,Rr as c,v as d,Ue as e,se as f,he as g,qe as h,x as i,co as j,vo as k,Ao as l,ri as m,oi as n,ni as o,dt as p,ct as q,ut as r,P as s,rt as t,vn as u,fn as v,nt as w,it as x,kn as y,Cn as z,An as A,Pn as B,Rn as C,Wn as D,Se as E,Bn as F,Jn as G,Cr as H,Pr as I,hi as J,gi as K};
1
+ var Rt=Object.defineProperty,Wt=Object.defineProperties;var Ot=Object.getOwnPropertyDescriptors;var ne=Object.getOwnPropertySymbols;var Ie=Object.prototype.hasOwnProperty,Ue=Object.prototype.propertyIsEnumerable;var xe=(e,t,r)=>t in e?Rt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,C=(e,t)=>{for(var r in t||(t={}))Ie.call(t,r)&&xe(e,r,t[r]);if(ne)for(var r of ne(t))Ue.call(t,r)&&xe(e,r,t[r]);return e},x=(e,t)=>Wt(e,Ot(t));var xr=(e,t)=>{var r={};for(var o in e)Ie.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(e!=null&&ne)for(var o of ne(e))t.indexOf(o)<0&&Ue.call(e,o)&&(r[o]=e[o]);return r};var v=(e,t,r)=>new Promise((o,s)=>{var n=i=>{try{l(r.next(i))}catch(d){s(d)}},c=i=>{try{l(r.throw(i))}catch(d){s(d)}},l=i=>i.done?o(i.value):Promise.resolve(i.value).then(n,c);l((r=r.apply(e,t)).next())});import*as ft from"expo-apple-authentication";import{applicationId as yt}from"expo-application";import*as G from"expo-linking";import*as U from"expo-secure-store";import*as oe from"expo-web-browser";import{useCallback as vt,useContext as kr,useEffect as Ar}from"react";import{Platform as Ee}from"react-native";import{PrivyClientError as j}from"@privy-io/js-sdk-core";import{digest as gr}from"expo-crypto";import re,{useState as S,useMemo as br,createContext as _r,useCallback as pe,useRef as V,useEffect as lt}from"react";import{AppState as dt,View as Sr}from"react-native";import Er,{PrivyClientError as Cr}from"@privy-io/js-sdk-core";var Le={name:"@privy-io/expo",version:"0.34.4",description:"Expo client for the Privy Auth API",keywords:["authentication","authorization","identity","privacy","privy","user data","react-native","expo","web3"],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"}},main:"./dist/esm/index.js",source:"./src/index.ts",types:"./dist/index.d.ts",files:["dist/**/*","LICENSE","README.md"],scripts:{build:"npx tsup --clean --minify","check-types":"npx tsc --noEmit",clean:"rm -rf dist .turbo",dev:"npx tsup --watch",format:'eslint "src/**/*.{ts,tsx,js,jsx}" --fix',"generate-types":"npx tsup --dts-only",lint:'npx eslint "src/**/*.{ts,tsx,js,jsx}"',test:'jest --testMatch "**/test/**/*.test.{ts,tsx}"'},browserslist:["defaults","node >= 18","not op_mini all"],dependencies:{"@privy-io/js-sdk-core":"0.35.2","react-fast-compare":"^3.2.2",zustand:"^4.4.1"},devDependencies:{"@privy-io/eslint-config-custom":"*","@privy-io/tsconfig":"*","@simplewebauthn/types":"9.0.1","@svgr/core":"^8.1.0","@svgr/plugin-jsx":"^8.1.0","@svgr/plugin-svgo":"^8.1.0","@testing-library/react-native":"^12.8.1","@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",jest:"^29.7.0","jest-expo":"~51.0.0",tsup:"^6.2.3",typescript:"~5.5.3"},peerDependencies:{"@expo-google-fonts/inter":"*","@privy-io/expo-native-extensions":"0.0.3","expo-apple-authentication":"*","expo-application":"*","expo-clipboard":"*","expo-constants":"*","expo-crypto":"*","expo-font":"*","expo-linking":"*","expo-secure-store":"*","expo-web-browser":"*",permissionless:"^0.2.10",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.21.36"},peerDependenciesMeta:{"@expo-google-fonts/inter":{optional:!0},"expo-font":{optional:!0},permissionless:{optional:!0},viem:{optional:!0}},publishConfig:{access:"public"}};import It from"react";import{useCallback as Ut,useEffect as Me,useRef as Lt}from"react";import{AppState as Mt}from"react-native";import Tt from"react-native-webview";var Te=({client:e,isClientReady:t,setWebViewState:r,webViewState:o,logLevel:s})=>{let n=Lt(null);Me(()=>{n.current&&o==="loaded"&&e.setMessagePoster(n.current)},[e,n.current,o==="loaded"]),Me(()=>Mt.addEventListener("change",i=>v(void 0,null,function*(){n.current&&i==="active"&&((yield e.embeddedWallet.ping(500))||(n.current.reload(),r("reloading")))})).remove,[]);let c=Ut(l=>v(void 0,null,function*(){let{data:i}=l.nativeEvent;e.embeddedWallet.onMessage(JSON.parse(i))}),[e]);return t?It.createElement(Tt,{style:{flex:1},ref:n,cacheEnabled:!1,cacheMode:"LOAD_NO_CACHE",source:{uri:e.embeddedWallet.getURL()},webviewDebuggingEnabled:s==="DEBUG",onLoad:()=>r("loaded"),onError:console.error,onMessage:c}):null};import{useCallback as fe,useEffect as Ne,useMemo as we}from"react";import{errorIndicatesRecoveryIsNeeded as jt,getAllUserEmbeddedSolanaWallets as Dt,getUserEmbeddedEthereumWallet as Nt,getUserEmbeddedSolanaWallet as Vt,PrivyClientError as Z}from"@privy-io/js-sdk-core";import{getAllUserEmbeddedSolanaWallets as Fe,getUserEmbeddedWallet as Ft,PrivyClientError as ie}from"@privy-io/js-sdk-core";function je(n){return v(this,arguments,function*({client:e,setSolanaWallet:t,createSolanaWalletCallbacks:r,setSolanaRecoveryFlowState:o,opts:s}){var c,l,i;t({status:"creating"});try{let{user:d}=yield e.user.get(),a=Fe(d),u=a[0];if(s!=null&&s.recoveryMethod&&s.recoveryMethod!=="privy")throw new ie({code:"embedded_wallet_creation_error",error:"Unsupported recovery method for solana wallet."});if(!(s!=null&&s.createAdditional)&&u)throw new ie({code:"embedded_wallet_creation_error",error:"Solana wallet already exists for this user. Set `createAdditional` to `true` to create another wallet"});let m,f;if(u){let w=Math.max(...a.map(_=>_.wallet_index),0)+1,p=yield e.embeddedWallet.createAdditionalSolana({primaryPublicKey:u.address,hdWalletIndex:w});m=p.provider,f=p.user}else{let w=(c=Ft(d))!=null?c:void 0,p=yield e.embeddedWallet.createSolana({ethereumAccount:w});m=p.provider,f=p.user}let y=Fe(f)[0];if(!y)throw new ie({code:"embedded_wallet_creation_error",error:"Unknown error creating solana wallet"});return(i=(l=r.current)==null?void 0:l.onSuccess)==null||i.call(l,m),t({status:"connected",publicKey:y.public_key}),o({status:"initial"}),m}catch(d){let a=d instanceof Error?d.message:"Error creating embedded wallet";throw t({status:"error",error:a}),o({status:"initial"}),new ie({code:"embedded_wallet_creation_error",error:a})}})}import{PrivyClientError as H}from"@privy-io/js-sdk-core";function ae(d){return v(this,arguments,function*({client:e,account:t,setWallet:r,recoverWalletCallbacks:o,recoveryMethod:s,setRecoveryFlowState:n,password:c,recoveryToken:l,recoverySecretOverride:i}){var a,u,m,f;if(!t)throw new H({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});switch(s){case"user-passcode":if(!c)throw new H({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!l)throw new H({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!i)throw new H({code:"embedded_wallet_recovery_error",error:"Record name is required for icloud recovery method"});break}r({status:"connecting",account:t});try{let y=yield e.embeddedWallet.getProvider(t,c,l,i);return r({status:"connected",provider:y,account:t}),n({status:"initial"}),(u=(a=o.current)==null?void 0:a.onSuccess)==null||u.call(a,y),y}catch(y){r({status:"needs-recovery",account:t}),n({status:"initial"});let w=new H({code:"embedded_wallet_recovery_error",error:y instanceof Error?y.message:"Error recovering embedded wallet"});throw(f=(m=o.current)==null?void 0:m.onError)==null||f.call(m,w),w}})}function De(l){return v(this,arguments,function*({client:e,account:t,entropyId:r,entropyIdVerifier:o,setSolanaWallet:s,recoverSolanaWalletCallbacks:n,setSolanaRecoveryFlowState:c}){var i,d,a,u;s({status:"connecting"});try{let m=yield e.embeddedWallet.getSolanaProvider(t,r,o);return s({status:"connected",publicKey:m._publicKey}),c({status:"initial"}),(d=(i=n.current)==null?void 0:i.onSuccess)==null||d.call(i,m),m}catch(m){s({status:"needs-recovery"}),c({status:"initial"});let f=new H({code:"embedded_wallet_recovery_error",error:m instanceof Error?m.message:"Error recovering embedded wallet"});throw(u=(a=n.current)==null?void 0:a.onError)==null||u.call(a,f),f}})}var se=e=>{if(e.chain_type==="ethereum")return{entropyId:e.address,entropyIdVerifier:"ethereum-address-verifier"};if(e.chain_type==="solana")return{entropyId:e.address,entropyIdVerifier:"solana-address-verifier"};throw new Error("Invalid embedded wallet account type")};var Ve=({client:e,user:t,solanaWallet:r,setSolanaWallet:o,setSolanaRecoveryFlowState:s,webViewState:n,createSolanaWalletCallbacks:c,recoverSolanaWalletCallbacks:l})=>{let i=we(()=>Dt(t),[t]),d=we(()=>{var y;return i.length===0?null:(y=Nt(t))!=null?y:Vt(t)},[t,i]),a=we(()=>{if(!d)return[];let{entropyId:y,entropyIdVerifier:w}=se(d);return i.map(p=>({address:p.address,publicKey:p.address,walletIndex:p.wallet_index,getProvider:()=>e.embeddedWallet.getSolanaProvider(p,y,w)}))},[i,d,e]),u=fe(y=>v(void 0,null,function*(){return yield je({client:e,setSolanaWallet:o,createSolanaWalletCallbacks:c,setSolanaRecoveryFlowState:s,opts:y})}),[e,c]),m=fe(()=>v(void 0,null,function*(){if(!d)throw new Z({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{entropyId:y,entropyIdVerifier:w}=se(d);return De({client:e,account:i[0],entropyId:y,entropyIdVerifier:w,setSolanaWallet:o,recoverSolanaWalletCallbacks:l,setSolanaRecoveryFlowState:s})}),[e,d,i,l,s,o]),f=fe(()=>v(void 0,null,function*(){if(!d)throw o({status:"not-created"}),new Z({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});o(y=>y.status==="connected"?{status:"reconnecting"}:{status:"connecting"});try{let{entropyId:y,entropyIdVerifier:w}=se(d),p=yield e.embeddedWallet.getSolanaProvider(i[0],y,w);return o({status:"connected",publicKey:i[0].public_key}),p}catch(y){throw jt(y)?(o({status:"needs-recovery"}),new Z({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):y instanceof Error?(o({status:"error",error:y.message}),new Z({code:"unknown_embedded_wallet_error",error:y.message})):(o({status:"error",error:"Error loading embedded wallet"}),new Z({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,d]);return Ne(()=>{if(!t&&r.status!=="disconnected")return o({status:"disconnected"});n==="loaded"&&f().catch(()=>{})},[n,t,d]),Ne(()=>{r.status==="error"&&r.error.includes("User must be logged in")&&f()},[r.status]),{create:u,recover:m,getProvider:f,wallets:a}};import{useCallback as te,useEffect as Ge,useMemo as $t}from"react";import{getUserEmbeddedSolanaWallet as Ye,throwIfInvalidRecoveryUpgradePath as Zt}from"@privy-io/js-sdk-core";import{errorIndicatesRecoveryIsNeeded as er,getUserEmbeddedWallet as tr,PrivyClientError as A}from"@privy-io/js-sdk-core";import{getUserEmbeddedWallet as Kt}from"@privy-io/js-sdk-core";import{PrivyClientError as le}from"@privy-io/js-sdk-core";function de(a){return v(this,arguments,function*({client:e,setWallet:t,createWalletCallbacks:r,recoveryMethod:o,setRecoveryFlowState:s,password:n,recoveryToken:c,recoverySecretOverride:l,iCloudRecordNameOverride:i,solanaAccount:d}){var m,f;switch(o){case"user-passcode":if(!n)throw new le({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!c)throw new le({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!l||!i)throw new le({code:"embedded_wallet_recovery_error",error:"iCloud recovery failed due to inability to store credentials"});break}t({status:"creating",account:null});let u=o==="icloud"?"icloud-native":o;try{let{provider:y,user:w}=yield e.embeddedWallet.create(n,u,c,l,i,d),p=Kt(w);return(f=(m=r.current)==null?void 0:m.onSuccess)==null||f.call(m,y),t({status:"connected",provider:y,account:p}),s({status:"initial"}),y}catch(y){let w=y instanceof Error?y.message:"Error creating embedded wallet";throw t({status:"error",error:w,account:null}),s({status:"initial"}),new le({code:"embedded_wallet_creation_error",error:w})}})}import{Platform as Ke}from"react-native";import{PrivyClientError as M}from"@privy-io/js-sdk-core";function qe(){return v(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 he(o){return v(this,arguments,function*({user:e,appId:t,client:r}){var l;if(Ke.OS==="android")throw new M({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let s=yield qe(),n=yield r.recovery.icloudAuth.getICloudConfiguration("expo-ios");if(!(n==null?void 0:n.container_identifier))throw new M({code:"embedded_wallet_recovery_error",error:"An iCloud Container ID must be specified in the Privy Dashboard."});try{let{recoverySecret:i,iCloudRecordName:d}=yield s.writeRecoverySecretToICloud({containerId:n.container_identifier,appId:t,userId:e.id});return{recoverySecret:i,iCloudRecordName:d}}catch(i){if(i instanceof Error){let d=(l=i.message.split("Caused by: ")[1])!=null?l:"Error writing to iCloud";throw new M({code:"embedded_wallet_recovery_error",error:d})}throw new M({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}function He(o){return v(this,arguments,function*({walletAddress:e,client:t,chainType:r}){var d;if(Ke.OS==="android")throw new M({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let s=yield qe(),c=(yield t.recovery.getRecoveryKeyMaterial(e,r)).icloud_record_name;if(!c)throw new M({code:"embedded_wallet_recovery_error",error:"iCloud recovery not properly backed up."});let l=yield t.recovery.icloudAuth.getICloudConfiguration("expo-ios"),i=l==null?void 0:l.container_identifier;if(!i)throw new M({code:"embedded_wallet_recovery_error",error:"An iCloud Container ID must be specified in the Privy Dashboard."});try{let{recoverySecret:a}=yield s.readRecoverySecretFromICloud({containerId:i,recordName:c});return{recoverySecret:a}}catch(a){if(a instanceof Error){let u=(d=a.message.split("Caused by: ")[1])!=null?d:"Error writing to iCloud";throw new M({code:"embedded_wallet_recovery_error",error:u})}throw new M({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}import*as N from"expo-linking";import*as Be from"expo-web-browser";import{Platform as Je}from"react-native";import{PrivyClientError as z}from"@privy-io/js-sdk-core";import qt from"react-fast-compare";var ze=e=>t=>e(r=>qt(r,t)?r:t);import{PrivyApiError as Ht,PrivyClientError as zt}from"@privy-io/js-sdk-core";function I(e){return e instanceof Error||e instanceof Ht||e instanceof zt?e:typeof e=="string"?new Error(e):new Error("Unknown error")}var mo=e=>new Promise(t=>setTimeout(t,e));import{useEffect as Bt,useRef as Jt}from"react";import{AppState as ge}from"react-native";function ho(){let e=Jt(ge.currentState);Bt(()=>ge.addEventListener("change",o=>{e.current=o}).remove,[]);function t(){return ge.currentState}return{appState:e,getCurrentAppState:t}}function ee(s){return v(this,arguments,function*({provider:e,redirectUri:t,client:r,onError:o}){try{let n;switch(e){case"google-drive":{let{url:d}=yield r.recovery.auth.generateURL(N.createURL(t||"/"));n=d;break}default:throw new z({error:"OAuth invalid provider",code:"embedded_wallet_recovery_error"})}let c=yield Be.openAuthSessionAsync(n);if(Je.OS==="android")return;if(c.type!=="success")throw new z({error:"Recovery OAuth session failed",code:"embedded_wallet_recovery_error"});let{queryParams:l}=N.parse(c.url),i;switch(e){case"google-drive":{let{privy_oauth_state:d,privy_oauth_code:a}=l;if(!a||!d)throw new z({error:"Recovery OAuth invalid credentials",code:"embedded_wallet_recovery_error"});i=yield ce({oAuthCode:a,oAuthState:d,client:r});break}default:throw new z({error:"Recovery OAuth invalid provider",code:"embedded_wallet_recovery_error"})}return i}catch(n){throw o==null||o(I(n)),n}})}function ce(o){return v(this,arguments,function*({oAuthCode:e,oAuthState:t,client:r}){let{access_token:s}=yield r.recovery.auth.authorize(e,t);if(!s)throw new z({error:"OAuth invalid credentials",code:"login_with_oauth_returned_with_invalid_credentials"});return s})}var Gt=2*60*1e3;function Yt(e){let t;return new Promise((r,o)=>{t=N.addEventListener("url",n=>v(this,[n],function*({url:s}){if(!s)return;let{queryParams:c}=N.parse(s),{privy_oauth_state:l,privy_oauth_code:i}=c!=null?c:{};if(typeof i!="string"||typeof l!="string")return;let d=yield ce({client:e,oAuthCode:i,oAuthState:l});r(d)})),setTimeout(()=>{o(new z({code:"embedded_wallet_set_recovery_error",error:"Failed to complete Google Drive recovery flow"}))},Gt)}).finally(()=>{t==null||t.remove()})}function Wo(e){return v(this,null,function*(){let t;Je.OS==="android"&&(t=Yt(e));let r=yield ee({provider:"google-drive",client:e});return r!=null?r:yield t})}import{getUserEmbeddedWallet as Xt,PrivyClientError as Qt}from"@privy-io/js-sdk-core";function ue(n){return v(this,arguments,function*({client:e,recoveryInput:t,setWalletRecoveryCallbacks:r,setRecoveryFlowState:o,setWallet:s}){var c,l,i,d;try{let{provider:a,user:u}=yield e.embeddedWallet.setRecovery(t),m=a,f=Xt(u);return s({status:"connected",provider:m,account:f}),(l=(c=r.current)==null?void 0:c.onSuccess)==null||l.call(c,m),o({status:"initial"}),m}catch(a){let u=new Qt({code:"embedded_wallet_set_recovery_error",error:a instanceof Error?a.message:"Error setting password on embedded wallet"});throw(d=(i=r.current)==null?void 0:i.onError)==null||d.call(i,u),o({status:"initial"}),u}})}function Xe(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}:{recoveryMethod:e.recoveryMethod}}var Qe=({client:e,user:t,appId:r,wallet:o,setWallet:s,setRecoveryFlowState:n,webViewState:c,createWalletCallbacks:l,recoverWalletCallbacks:i,setWalletRecoveryCallbacks:d})=>{let a=$t(()=>tr(t),[t]),u=te(p=>v(void 0,null,function*(){var W,q;if(a)throw new A({error:"This user already has an embedded wallet",code:"embedded_wallet_already_exists"});let{user:_}=yield e.user.get(),{password:g,recoveryMethod:h}=Xe(p),b,E,O;if(h==="google-drive"&&(b=yield ee({provider:h,client:e,onError:(W=l.current)==null?void 0:W.onError}),n({status:"creating-wallet"}),!b))return null;if(h==="icloud"){if(!_)throw new A({code:"embedded_wallet_recovery_error",error:"User must be loaded before creating a wallet with iCloud."});let{recoverySecret:T,iCloudRecordName:D}=yield he({user:_,appId:r,client:e});E=T,O=D}return yield de({client:e,setWallet:s,createWalletCallbacks:l,recoveryMethod:h,setRecoveryFlowState:n,password:g,recoverySecretOverride:E,iCloudRecordNameOverride:O,solanaAccount:(q=Ye(_))!=null?q:void 0})}),[e,a,t]),m=te(p=>v(void 0,null,function*(){var h;if(o.status!=="connected")throw new A({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"});if(!a)throw new A({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});if(Ye(t))throw new A({code:"embedded_wallet_set_recovery_error",error:"Cannot set user-controlled recovery for a user with an embedded Solana wallet."});Zt({currentRecoveryMethod:a.recovery_method,upgradeToRecoveryMethod:p.recoveryMethod});let _,g;switch(p.recoveryMethod){case"privy":g=x(C({},p),{wallet:a});break;case"user-passcode":g=x(C({},p),{wallet:a,password:p.password});break;case"google-drive":if(_=yield ee({provider:p.recoveryMethod,client:e,onError:(h=d.current)==null?void 0:h.onError}),n({status:"upgrading-recovery"}),!_)return null;g={recoveryMethod:"google-drive",wallet:a,recoveryAccessToken:_};break;case"icloud":if(!t)throw new A({code:"embedded_wallet_recovery_error",error:"User must be loaded before backing up to iCloud."});let{recoverySecret:b,iCloudRecordName:E}=yield he({user:t,appId:r,client:e});g={recoveryMethod:"icloud-native",recoverySecretOverride:b,iCloudRecordNameOverride:E,wallet:a};break;default:throw new A({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}return ue({client:e,recoveryInput:g,setWalletRecoveryCallbacks:d,setRecoveryFlowState:n,setWallet:s})}),[e,a,o.status,t]),f=te(p=>v(void 0,null,function*(){return m({recoveryMethod:"user-passcode",password:p})}),[e,a,o.status]),y=te(p=>v(void 0,null,function*(){var E;if(!a)throw new A({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{password:_,recoveryMethod:g}=Xe(p),h,b;if(g==="google-drive"&&(h=yield ee({provider:g,client:e,onError:(E=i.current)==null?void 0:E.onError}),n({status:"recovering"}),!h))return null;if(g==="icloud"){if(!t)throw new A({code:"embedded_wallet_recovery_error",error:"User must be loaded before recovering via iCloud."});let{recoverySecret:O}=yield He({client:e,walletAddress:a.address});b=O}return ae({client:e,account:a,setWallet:s,recoverWalletCallbacks:i,recoveryMethod:g,setRecoveryFlowState:n,password:_,recoveryToken:h,recoverySecretOverride:b})}),[e,a]),w=te(()=>v(void 0,null,function*(){if(!a)throw s({status:"not-created",account:null}),new A({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});s(p=>p.status==="connected"?{status:"reconnecting",account:a}:{status:"connecting",account:a});try{let p=yield e.embeddedWallet.getProvider(a);return s({status:"connected",provider:p,account:a}),p}catch(p){throw er(p)?(s({status:"needs-recovery",account:a}),new A({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):p instanceof Error?(s({status:"error",error:p.message,account:a}),new A({code:"unknown_embedded_wallet_error",error:p.message})):(s({status:"error",error:"Error loading embedded wallet",account:a}),new A({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,a]);return Ge(()=>{if(!t&&o.status!=="disconnected")return s({status:"disconnected",account:null});c==="loaded"&&w().catch(()=>{})},[c,t,a]),Ge(()=>{o.status==="error"&&o.error.includes("User must be logged in")&&w()},[o.status]),{create:u,recover:y,setPassword:f,setRecovery:m,getProvider:w}};import{useEffect as rr,useState as or}from"react";import{PrivyClientError as $e}from"@privy-io/js-sdk-core";var Ze=({client:e,user:t,isReady:r,customAuth:o})=>{let[s,n]=or({status:"initial"});return rr(()=>{(()=>v(void 0,null,function*(){if(!(o!=null&&o.enabled)){n({status:"not-enabled"});return}n({status:"loading"});let{getCustomAccessToken:l,isLoading:i}=o;if(!(!r||i))try{let d=yield l();if(!d&&t){yield e.auth.logout(),n({status:"done"});return}if(!d){n({status:"done"});return}if(t){n({status:"done"});return}if(!(yield e.auth.customProvider.syncWithToken(d))){yield e.auth.logout(),n({status:"error",error:new $e({error:"Failed to sync with custom auth provider",code:"third_party_auth_error"})});return}n({status:"done"})}catch(d){if(console.log("Error syncing with custom auth provider",d),n({status:"error",error:d}),t)throw yield e.auth.logout(),new $e({error:"Third-party auth failed",code:"third_party_auth_error"})}}))()},[e,t,r,o==null?void 0:o.enabled,o==null?void 0:o.getCustomAccessToken,o==null?void 0:o.isLoading]),{customAuthState:s,customAuthStateIsSettled:s.status!=="loading"&&s.status!=="initial"}};import*as B from"expo-linking";import{useCallback as nr,useEffect as ir}from"react";import{Platform as ar}from"react-native";var et=({client:e,user:t,isUserInitialized:r,oAuthState:o,oAuthCallbacks:s,setOAuthState:n,recoveryFlowState:c,oAuthStateRef:l})=>{let i=B.useURL(),d=nr(a=>{var m,f;let u=I(a);n({status:"error",error:u}),(f=(m=s.current).onError)==null||f.call(m,u)},[n]);return ir(()=>{function a(){return v(this,null,function*(){var y,w;if(!i||o.status!=="loading"||c.status!=="initial")return;let{queryParams:u}=B.parse(i),{privy_oauth_state:m,privy_oauth_code:f}=u;if(!f||!m){n({status:"done"});return}try{let p,_;if(t)p=yield e.auth.oauth.linkWithCode(f,m);else{let g=yield e.auth.oauth.loginWithCode(f,m,void 0,void 0,l.current.disableSignup?"no-signup":"login-or-sign-up");p=g.user,_=!!g.is_new_user}return(w=(y=s.current).onSuccess)==null||w.call(y,p,_),l.current={},n({status:"done"}),yield B.openURL(i.split("?")[0])}catch(p){l.current={},d(p)}})}ar.OS==="android"&&r&&a()},[i,r])};import*as J from"expo-linking";import{useCallback as sr,useEffect as lr,useMemo as dr}from"react";import{Platform as cr}from"react-native";import{getUserEmbeddedSolanaWallet as ur,getUserEmbeddedWallet as pr}from"@privy-io/js-sdk-core";var tt=({client:e,user:t,createWalletCallbacks:r,recoverWalletCallbacks:o,setWalletRecoveryCallbacks:s,recoveryFlowState:n,oAuthState:c,setRecoveryFlowState:l,setWallet:i,appStateVisible:d,webViewLoaded:a})=>{let u=J.useURL(),m=dr(()=>pr(t),[t]),f=sr(y=>{var p,_,g,h;let w=I(y);n.status==="creating-wallet"?(_=(p=r.current).onError)==null||_.call(p,I(w)):(h=(g=o.current).onError)==null||h.call(g,I(w)),l({status:"initial"})},[n]);return lr(()=>{function y(){return v(this,null,function*(){var g;if(!u&&n.status!=="initial"&&d&&f(new Error("Recovery OAuth session failed")),!u||n.status==="initial"||c.status!=="initial"||!d||!a)return;let{queryParams:w}=J.parse(u),{privy_oauth_state:p,privy_oauth_code:_}=w;if(!(!_||!p)){yield J.openURL(u.split("?")[0]);try{let h=yield ce({oAuthCode:_,oAuthState:p,client:e});if(n.status==="creating-wallet"){let b=(g=ur(t))!=null?g:void 0;yield de({client:e,setWallet:i,createWalletCallbacks:r,recoveryMethod:"google-drive",setRecoveryFlowState:l,recoveryToken:h,solanaAccount:b})}else if(n.status==="upgrading-recovery"){if(!m)throw new Error("Embedded wallet not found");yield ue({client:e,recoveryInput:{recoveryMethod:"google-drive",wallet:m,recoveryAccessToken:h},setWalletRecoveryCallbacks:s,setRecoveryFlowState:l,setWallet:i})}else yield ae({client:e,account:m,setWallet:i,recoverWalletCallbacks:o,recoveryMethod:"google-drive",setRecoveryFlowState:l,recoveryToken:h})}catch(h){f(h)}}})}cr.OS==="android"&&y()},[u,n.status,d,a])};import{useEffect as mr}from"react";var rt=({client:e,isUserInitialized:t,setIsUserInitialized:r,setError:o})=>{mr(()=>{t||(()=>v(void 0,null,function*(){try{yield e.initialize()}catch(n){o(n instanceof Error?n:new Error(String(n)))}try{yield e.user.get()}catch(n){}finally{r(!0)}}))()},[e,t,o,r])};import{useEffect as vr}from"react";import{create as fr}from"zustand";var R=class extends Error{constructor(r,o){super(o);this.code=r,this.error=o}},ot=class extends R{constructor(r){super("underlying_error",r instanceof Error?r.message:"An underlying error occurred");this.wrappedError=r}};var be={success:e=>({value:e}),error:e=>({error:e})};var nt=e=>{let t=Array.from(new Set(e));return t.length===0?be.error(new R("no_login_methods_available","No login methods available")):be.success(t)},_e=e=>{let t=e.length,r=e.every(o=>o==="sms"||o==="email");return t<=2&&r?e[0]:null},hn=(e,t)=>{if(e.length!==2)return null;let[r,o]=e;return t===r?o:r},gn={email:"email",sms:"phone",google:"Google",apple:"Apple",discord:"Discord",twitter:"X",github:"Github",spotify:"Spotify",instagram:"Instagram",tiktok:"Tiktok",linkedin:"LinkedIn"};function it(e){return new Promise((t,r)=>{e({resolve:t,reject:r})})}function yr(e,t){return{resolve:r=>{t(),e.resolve(r)},reject:r=>{t(),e.reject(r)}}}function at(e,t,r){let o=setTimeout(()=>{e.reject(t())},r);return yr(e,()=>{clearTimeout(o)})}var wr=1e3*60*5,F=fr()((e,t)=>({privyElementsConfig:null,loginPromiseResolvers:null,isUIMounted:!1,activeLoginMethod:null,updateUIMounted:r=>e({isUIMounted:r}),openLoginFlow:(r,o,s,n)=>it(c=>{var u,m,f;let l=o.app.getConfig();if(!l)return c.reject(new R("privy_not_ready","Privy is not ready"));if(s!==null)return c.reject(new R("user_already_logged_in","User is already logged in"));if(!t().isUIMounted)return c.reject(new R("privy_elements_not_ready","Privy Elements is not mounted"));if(t().loginPromiseResolvers!==null)return c.reject(new R("existing_login_flow_in_progress","A login flow is already in progress"));let i=nt(r.loginMethods);if(i.error)return c.reject(i.error);let d={loginMethods:i.value,appearance:{logo:(f=(m=(u=r.appearance)==null?void 0:u.logo)!=null?m:l.logo_url)!=null?f:void 0}},a=at(c,()=>(e({privyElementsConfig:null,loginPromiseResolvers:null}),new R("login_flow_timeout","The login flow timed out")),wr);n(),e({loginPromiseResolvers:a,privyElementsConfig:d,activeLoginMethod:_e(d.loginMethods)})}),closeLoginFlow:()=>{var r;return(r=t().loginPromiseResolvers)==null||r.reject(new R("login_flow_closed","The login flow was closed")),e({privyElementsConfig:null,loginPromiseResolvers:null})},goBack:()=>{let{activeLoginMethod:r,privyElementsConfig:o,updateActiveLoginMethod:s,closeLoginFlow:n}=t();if(!o){n();return}let c=_e(o.loginMethods)===null;r===null||!c?n():s(null)},updateActiveLoginMethod:r=>e({activeLoginMethod:r})})),Pn=()=>{let e=F(r=>r.privyElementsConfig);return F(r=>r.isUIMounted)?e:null},Rn=()=>F(e=>e.openLoginFlow),Wn=()=>F(e=>e.closeLoginFlow),On=()=>F(e=>e.goBack),xn=()=>F(e=>[e.activeLoginMethod,e.updateActiveLoginMethod]),hr=e=>{let{loginPromiseResolvers:t}=F.getState();t==null||t.resolve(e)},st=()=>hr,In=()=>{let e=F(t=>t.updateUIMounted);vr(()=>(e(!0),()=>{e(!1)}),[e])};var Se=_r({}),K;function Yn(e){return K?K.getAccessToken():e!=null&&e.strict?Promise.reject(new Cr({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 Xn=e=>{var We,Oe;let[t,r]=S(dt.currentState==="active");lt(()=>{let P=dt.addEventListener("change",Pt=>{r(Pt==="active")});return()=>{P.remove()}},[]);let[o,s]=S(!1),[n,c]=S(null),[l,i]=S("loading"),[d,a]=S(!1),[u,m]=S(null),[f,y]=S({status:"disconnected",account:null}),[w,p]=S({status:"disconnected"}),[_,g]=S({status:"initial"}),[h,b]=S({status:"initial"}),E=V({}),[O,W]=S({status:"initial"}),[q,T]=S({status:"initial"}),[D,Y]=S({status:"initial"}),[X,Q]=S({status:"initial"}),[L,wt]=S({status:"initial"}),[ht,gt]=S();lt(()=>{var P;return gt((P=e.config)==null?void 0:P.mfa)},[(We=e.config)==null?void 0:We.mfa]);let Ae=V({}),me=V({}),ye=V({}),ve=V({}),Pe=V({}),Re=V({}),bt=st(),$=pe(P=>{if(P){bt(P),ze(m)(P);return}m(null),g({status:"initial"}),b({status:"initial"}),y({status:"disconnected",account:null})},[]),k=br(()=>{let P=e.storage||mt;return e.client?(K=e.client,K.setCallbacks({setUser:$,setIsReady:a}),K):(K=new Er({storage:pt(P),appId:e.appId,clientId:e.clientId,supportedChains:e.supportedChains,nativeAppIdentifier:ut(),baseUrl:e.baseUrl,sdkVersion:`expo:${Le.version}`,callbacks:{setUser:$,setIsReady:a},logLevel:e.logLevel,crypto:{digest:gr}}),K)},[e.client,e.storage,e.appId,e.clientId,e.baseUrl,e.supportedChains,e.logLevel,$]),_t=pe(()=>($(null),k.auth.logout()),[$,k]),St=pe(()=>v(void 0,null,function*(){try{return yield k.getAccessToken()}catch(P){return console.debug(P),null}}),[k]),Et=pe(()=>k.getIdentityToken(),[k]);rt({client:k,isUserInitialized:o,setIsUserInitialized:s,setError:c});let Ct=Qe({client:k,user:u,appId:e.appId,webViewState:l,createWalletCallbacks:me,recoverWalletCallbacks:ye,setWalletRecoveryCallbacks:ve,setRecoveryFlowState:W,wallet:f,setWallet:y}),kt=Ve({client:k,user:u,webViewState:l,createSolanaWalletCallbacks:Pe,recoverSolanaWalletCallbacks:Re,setSolanaRecoveryFlowState:T,solanaWallet:w,setSolanaWallet:p});et({client:k,isUserInitialized:o,user:u,oAuthState:h,setOAuthState:b,oAuthCallbacks:Ae,recoveryFlowState:O,oAuthStateRef:E}),tt({client:k,user:u,webViewLoaded:l==="loaded",createWalletCallbacks:me,recoverWalletCallbacks:ye,setWalletRecoveryCallbacks:ve,recoveryFlowState:O,oAuthState:h,setRecoveryFlowState:W,setWallet:y,appStateVisible:t});let{customAuthStateIsSettled:At}=Ze({client:k,user:u,isReady:o,customAuth:(Oe=e.config)==null?void 0:Oe.customAuth});return re.createElement(re.Fragment,null,re.createElement(Se.Provider,{value:{client:k,user:u,isReady:l!=="loading"&&o&&ct(h)&&At,error:n,logout:_t,getAccessToken:St,getIdentityToken:Et,wallet:C(C({},f),Ct),solanaWallet:C(C({},w),kt),oAuthState:h,oAuthCallbacks:Ae,recoveryFlowState:O,setRecoveryFlowState:W,solanaRecoveryFlowState:q,setSolanaRecoveryFlowState:T,createWalletCallbacks:me,recoverWalletCallbacks:ye,setWalletRecoveryCallbacks:ve,createSolanaWalletCallbacks:Pe,recoverSolanaWalletCallbacks:Re,setOAuthState:b,siweState:D,setSiweState:Y,otpState:_,setOtpState:g,passkeyState:X,setPasskeyState:Q,farcasterState:L,setFarcasterState:wt,oAuthStateRef:E,mfaConfig:ht}},e.children),re.createElement(Sr,{style:{width:0,height:0,overflow:"hidden"}},re.createElement(Te,{logLevel:e.logLevel,client:k,isClientReady:d,setWebViewState:i,webViewState:l})))};var ct=e=>e.status!=="loading",Ce=(e={})=>{let{user:t,oAuthState:r,setOAuthState:o,oAuthCallbacks:s,client:n,oAuthStateRef:c}=kr(Se),l=e.action?e.action==="login":!t;Ar(()=>{s.current={onSuccess:e.onSuccess,onError:e.onError}},[e.onSuccess,e.onError]);let i=vt(a=>{var m;let u=I(a);return o({status:"error",error:u}),(m=e==null?void 0:e.onError)==null||m.call(e,u),u},[e==null?void 0:e.onError]);return{start:vt(function(w){return v(this,arguments,function*({provider:u,redirectUri:m,isLegacyAppleIosBehaviorEnabled:f=!1,disableSignup:y}){var p,_,g;o({status:"loading"}),c.current={disableSignup:y};try{if(t&&e.action==="login")throw new j({code:"attempted_login_with_oauth_while_already_logged_in",error:"Already logged in, if trying to link an OAuth account use `useLinkWithOAuth`"});if(!t&&e.action==="link")throw new j({code:"attempted_link_oauth_before_logged_in",error:"Must be logged in to link an OAuth account, use `useLoginWithOAuth`"});let{url:h}=yield n.auth.oauth.generateURL(u,G.createURL(m||"/")),b,E;if(Ee.OS==="ios"&&u==="apple"&&!f){let X=(p=new URL(h).searchParams.get("state"))!=null?p:"",Q=yield ft.signInAsync({state:X}).catch(L=>{throw L instanceof Error&&"code"in L&&L.code==="ERR_REQUEST_CANCELED"?new j({error:"Apple login was cancelled",code:l?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):L});if(!Q.authorizationCode)throw new j({error:"OAuth invalid credentials",code:l?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(l){let L=yield n.auth.oauth.loginWithCode(Q.authorizationCode,X,u,"raw",y?"no-signup":"login-or-sign-up");b=L.user,E=L.is_new_user}else b=yield n.auth.oauth.linkWithCode(Q.authorizationCode,X,u,"raw");return(_=e==null?void 0:e.onSuccess)==null||_.call(e,b,E),o({status:"done"}),b!=null?b:void 0}let O=Ee.OS==="android"?h.replace("x.com","twitter.com"):h,W=yield oe.openAuthSessionAsync(O);if(Ee.OS==="android")return;if(W.type!=="success")throw[oe.WebBrowserResultType.CANCEL,oe.WebBrowserResultType.DISMISS].includes(W.type)?new j({error:"OAuth was cancelled",code:l?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):new j({error:"OAuth session failed",code:l?"failed_to_complete_login_with_oauth":"failed_to_complete_link_with_oauth"});let{queryParams:q}=G.parse(W.url),{privy_oauth_state:T,privy_oauth_code:D}=q;if(!D||!T)throw new j({error:"OAuth invalid credentials",code:l?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(l){let Y=yield n.auth.oauth.loginWithCode(D,T,u,void 0,y?"no-signup":"login-or-sign-up");b=Y.user,E=Y.is_new_user}else b=yield n.auth.oauth.linkWithCode(D,T,u);return(g=e==null?void 0:e.onSuccess)==null||g.call(e,b,E),yield G.openURL(W.url.split("?")[0]),o({status:"done"}),b!=null?b:void 0}catch(h){i(h)}})},[t,n,o,i]),state:r}};function ii(e){let{state:t,start:r}=Ce(x(C({},e),{action:"login"}));return{state:t,login:r}}function ai(e){let{state:t,start:r}=Ce(x(C({},e),{action:"link"}));return{state:t,link:r}}function si(e){return Ce(e)}var ut=()=>{if(typeof yt!="string")throw new j({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 yt};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:()=>v(this,null,function*(){return[]})}}var mt={get(e){return U.getItemAsync(e,{keychainAccessible:U.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},put(e,t){return U.setItemAsync(e,t,{keychainAccessible:U.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},del(e){return U.deleteItemAsync(e,{keychainAccessible:U.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},getKeys:()=>v(void 0,null,function*(){return[]})};import{PrivyClientError as Pr}from"@privy-io/js-sdk-core";var Rr=e=>v(void 0,null,function*(){var o;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 Pr({code:"failed_to_create_passkey",error:"Could not create passkey"});return x(C({},r),{type:(o=r.type)!=null?o:"public-key",clientExtensionResults:{}})});import{PrivyClientError as Wr}from"@privy-io/js-sdk-core";var Or=e=>v(void 0,null,function*(){var o;let r=yield(yield import("react-native-passkeys")).get({rpId:e.rpId,challenge:e.challenge,allowCredentials:e.allowCredentials,timeout:12e4});if(!r)throw new Wr({code:"no_passkey_found_for_challenge",error:"Could not find a matching passkey to login with"});return x(C({},r),{type:(o=r.type)!=null?o:"public-key",clientExtensionResults:{}})});function _i(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 Si(e){var t,r,o,s;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:(o=e.extensions)==null?void 0:o.hmac_create_secret},timeout:e.timeout,allowCredentials:(s=e.allow_credentials)==null?void 0:s.map(({id:n,type:c,transports:l})=>({id:n,type:c,transports:l})),userVerification:e.user_verification}}export{C as a,x as b,xr as c,v as d,Le as e,se as f,he as g,He as h,I as i,mo as j,ho as k,Wo as l,ii as m,ai as n,si as o,ut as p,pt as q,mt as r,R as s,ot as t,hn as u,gn as v,it as w,at as x,Pn as y,Rn as z,Wn as A,On as B,xn as C,In as D,Se as E,Yn as F,Xn as G,Rr as H,Or as I,_i as J,Si as K};