@privy-io/expo 0.50.0 → 0.51.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -9,7 +9,7 @@ The Privy Expo SDK allows you to integrate Privy into a bare React Native or Exp
9
9
  Install along with [peer dependencies](https://docs.npmjs.com/cli/v10/configuring-npm/package-json#peerdependencies) using `npm`:
10
10
 
11
11
  ```sh
12
- npx expo install expo-application expo-web-browser expo-linking expo-secure-store react-native-webview expo-crypto @privy-io/expo
12
+ npx expo install expo-apple-authentication expo-application expo-crypto expo-linking expo-secure-store expo-web-browser react-native-passkeys react-native-webview @privy-io/expo-native-extensions @privy-io/expo
13
13
  ```
14
14
 
15
15
  Install [polyfills](https://developer.mozilla.org/en-US/docs/Glossary/Polyfill), these should be imported as early as possible in your application.
@@ -18,6 +18,22 @@ Install [polyfills](https://developer.mozilla.org/en-US/docs/Glossary/Polyfill),
18
18
  npm i --save fast-text-encoding react-native-get-random-values @ethersproject/shims
19
19
  ```
20
20
 
21
+ ### Dependencies for `@privy-io/expo/ui`
22
+
23
+ If you are using the `@privy-io/expo/ui` import, you will need to install the following dependencies:
24
+
25
+ ```sh
26
+ npx expo install react-native-svg expo-clipboard react-native-qrcode-styled react-native-safe-area-context viem
27
+ ```
28
+
29
+ ### Dependencies for `@privy-io/expo/smart-wallets`
30
+
31
+ If you are using the `@privy-io/expo/smart-wallets` import, you will need to install the following dependencies:
32
+
33
+ ```sh
34
+ npx expo install viem permissionless
35
+ ```
36
+
21
37
  ## Usage
22
38
 
23
39
  See Privy's [Expo SDK guide](https://docs.privy.io/basics/react-native/setup) for setup and usage.
@@ -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 _chunkTSZL7MIUjs = require('./chunk-TSZL7MIU.js');var _react = require('react');var _jssdkcore = require('@privy-io/js-sdk-core');var It=e=>{let{client:t,setSiweState:s,siweState:n}=_react.useContext.call(void 0, _chunkTSZL7MIUjs.w),o=_react.useCallback.call(void 0, a=>{var d;let c=_chunkTSZL7MIUjs.n.call(void 0, a);return s({status:"error",error:c}),(d=e==null?void 0:e.onError)==null||d.call(e,c),c},[e==null?void 0:e.onError]),r=_react.useCallback.call(void 0, h=>_chunkTSZL7MIUjs.d.call(void 0, void 0,[h],function*({wallet:a,from:{domain:c,uri:d}}){var m;try{s({status:"generating-message"});let p=yield t.auth.siwe.init(a,c,d);return s({status:"awaiting-signature"}),(m=e==null?void 0:e.onGenerateMessage)==null||m.call(e,p.message),p.message}catch(p){throw o(p)}}),[t,o,e==null?void 0:e.onGenerateMessage]),i=_react.useCallback.call(void 0, d=>_chunkTSZL7MIUjs.d.call(void 0, void 0,[d],function*({signature:a,messageOverride:c}){var h;try{if(!_chunkTSZL7MIUjs.f.call(void 0, ))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"});s({status:"submitting-signature"});let{user:p}=yield t.auth.siwe.linkWithSiwe(a,void 0,c);return s({status:"done"}),(h=e==null?void 0:e.onSuccess)==null||h.call(e,p),p}catch(m){throw o(m)}}),[t,o,e==null?void 0:e.onSuccess]);return{generateSiweMessage:r,linkWithSiwe:i,state:n}};var Vt=e=>{let{client:t,setSiweState:s,siweState:n}=_react.useContext.call(void 0, _chunkTSZL7MIUjs.w),o=_react.useCallback.call(void 0, a=>{var d;let c=_chunkTSZL7MIUjs.n.call(void 0, a);return s({status:"error",error:c}),(d=e==null?void 0:e.onError)==null||d.call(e,c),c},[e==null?void 0:e.onError]),r=_react.useCallback.call(void 0, h=>_chunkTSZL7MIUjs.d.call(void 0, void 0,[h],function*({wallet:a,from:{domain:c,uri:d}}){var m;try{s({status:"generating-message"});let p=yield t.auth.siwe.init(a,c,d);return s({status:"awaiting-signature"}),(m=e==null?void 0:e.onGenerateMessage)==null||m.call(e,p.message),p.message}catch(p){throw o(p)}}),[t,o,e==null?void 0:e.onGenerateMessage]);return{loginWithSiwe:_react.useCallback.call(void 0, h=>_chunkTSZL7MIUjs.d.call(void 0, void 0,[h],function*({signature:a,messageOverride:c,disableSignup:d}){var m;try{if(_chunkTSZL7MIUjs.f.call(void 0, ))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"});s({status:"submitting-signature"});let y=_chunkTSZL7MIUjs.e.call(void 0, ),w=yield t.auth.siwe.loginWithSiwe(a,void 0,c,d?"no-signup":"login-or-sign-up",{embedded:y==null?void 0:y.embedded});return s({status:"done"}),(m=e==null?void 0:e.onSuccess)==null||m.call(e,w.user,w.is_new_user),w.user}catch(p){throw o(p)}}),[t,o,e==null?void 0:e.onSuccess]),generateSiweMessage:r,state:n}};var W=()=>{let{client:e}=_react.useContext.call(void 0, _chunkTSZL7MIUjs.w);return e};var eo=()=>{let e=W(),t=_react.useCallback.call(void 0, i=>_chunkTSZL7MIUjs.d.call(void 0, void 0,[i],function*({wallet:{address:n},from:{domain:o,uri:r}}){try{let{nonce:a}=yield e.auth.siws.fetchNonce({address:n});return{message:_jssdkcore.createSiwsMessage.call(void 0, {address:n,domain:o,uri:r,nonce:a})}}catch(a){throw _chunkTSZL7MIUjs.n.call(void 0, a)}}),[e]),s=_react.useCallback.call(void 0, a=>_chunkTSZL7MIUjs.d.call(void 0, void 0,[a],function*({signature:n,message:o,wallet:{walletClientType:r,connectorType:i}={}}){try{if(!_chunkTSZL7MIUjs.f.call(void 0, ))throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_link_siws_before_logged_in",error:"Must be logged in to link a wallet, Use `useLoginWithSiws` to login with a wallet"});let{user:d}=yield e.auth.siws.link({signature:n,message:o,walletClientType:r,connectorType:i});return d}catch(c){throw _chunkTSZL7MIUjs.n.call(void 0, c)}}),[e]);return{generateMessage:t,link:s}};var co=()=>{let e=W(),t=_react.useCallback.call(void 0, i=>_chunkTSZL7MIUjs.d.call(void 0, void 0,[i],function*({wallet:{address:n},from:{domain:o,uri:r}}){try{let{nonce:a}=yield e.auth.siws.fetchNonce({address:n});return{message:_jssdkcore.createSiwsMessage.call(void 0, {address:n,domain:o,uri:r,nonce:a})}}catch(a){throw _chunkTSZL7MIUjs.n.call(void 0, a)}}),[e]),s=_react.useCallback.call(void 0, c=>_chunkTSZL7MIUjs.d.call(void 0, void 0,[c],function*({signature:n,message:o,wallet:{walletClientType:r,connectorType:i}={},disableSignup:a}){try{if(_chunkTSZL7MIUjs.f.call(void 0, ))throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_login_with_siws_while_already_logged_in",error:"Already logged in, use `useLinkWithSiws` if you are trying to link a wallet to an existing account"});return(yield e.auth.siws.login({signature:n,message:o,walletClientType:r,connectorType:i,mode:a?"no-signup":"login-or-sign-up"})).user}catch(d){throw _chunkTSZL7MIUjs.n.call(void 0, d)}}),[e]);return{generateMessage:t,login:s}};var yo=e=>{let{client:t}=_react.useContext.call(void 0, _chunkTSZL7MIUjs.w),s=_react.useCallback.call(void 0, o=>{var i;let r=_chunkTSZL7MIUjs.n.call(void 0, o);return(i=e==null?void 0:e.onError)==null||i.call(e,r),r},[e==null?void 0:e.onError]);return{unlinkWallet:_react.useCallback.call(void 0, r=>_chunkTSZL7MIUjs.d.call(void 0, void 0,[r],function*({address:o}){var i;try{if(!_chunkTSZL7MIUjs.f.call(void 0, ))throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_unlink_siwe_before_logged_in",error:"Must be logged in to unlink a wallet, Use `useLoginWithSiwe` to login with a wallet"});let{user:c}=yield t.auth.siwe.unlinkWallet(o);return(i=e==null?void 0:e.onSuccess)==null||i.call(e,c),c}catch(a){throw s(a)}}),[t,s,e==null?void 0:e.onSuccess])}};var Po=e=>{let[t,s]=_react.useState.call(void 0, ""),{client:n,otpState:o,setOtpState:r}=_react.useContext.call(void 0, _chunkTSZL7MIUjs.w),i=_react.useCallback.call(void 0, d=>{var m;let h=_chunkTSZL7MIUjs.n.call(void 0, d);return r({status:"error",error:h}),(m=e==null?void 0:e.onError)==null||m.call(e,h),h},[e,r]),a=_react.useCallback.call(void 0, h=>_chunkTSZL7MIUjs.d.call(void 0, void 0,[h],function*({email:d}){var m;s(d);try{r({status:"sending-code"});let p=yield n.auth.email.sendCode(d);return r({status:"awaiting-code-input"}),(m=e==null?void 0:e.onSendCodeSuccess)==null||m.call(e,{email:d}),p}catch(p){throw i(p)}}),[n,i,e,r]),c=_react.useCallback.call(void 0, m=>_chunkTSZL7MIUjs.d.call(void 0, void 0,[m],function*({code:d,email:h}){var p;try{if(!_chunkTSZL7MIUjs.f.call(void 0, ))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 w=h||t;if(!w)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid email before calling `linkWithCode`"});r({status:"submitting-code"});let{user:v}=yield n.auth.email.linkWithCode(w,d);return r({status:"done"}),(p=e==null?void 0:e.onLinkSuccess)==null||p.call(e,v),v}catch(y){throw i(y)}}),[t,r,n,e,i]);return{sendCode:a,linkWithCode:c,state:o}};var Io=e=>{let[t,s]=_react.useState.call(void 0, ""),{client:n,otpState:o,setOtpState:r}=_react.useContext.call(void 0, _chunkTSZL7MIUjs.w),i=_react.useCallback.call(void 0, d=>{var m;let h=_chunkTSZL7MIUjs.n.call(void 0, d);return r({status:"error",error:h}),(m=e==null?void 0:e.onError)==null||m.call(e,h),h},[e,r]),a=_react.useCallback.call(void 0, h=>_chunkTSZL7MIUjs.d.call(void 0, void 0,[h],function*({email:d}){var m;s(d);try{r({status:"sending-code"});let p=yield n.auth.email.sendCode(d);return r({status:"awaiting-code-input"}),(m=e==null?void 0:e.onSendCodeSuccess)==null||m.call(e,{email:d}),p}catch(p){throw i(p)}}),[n,i,e,r]),c=_react.useCallback.call(void 0, p=>_chunkTSZL7MIUjs.d.call(void 0, void 0,[p],function*({code:d,email:h,disableSignup:m}){var y;try{if(_chunkTSZL7MIUjs.f.call(void 0, ))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 v=h||t;if(!v)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid email before calling `loginWithCode`"});r({status:"submitting-code"});let C=_chunkTSZL7MIUjs.e.call(void 0, ),k=yield n.auth.email.loginWithCode(v,d,m?"no-signup":"login-or-sign-up",{embedded:C==null?void 0:C.embedded});return r({status:"done"}),(y=e==null?void 0:e.onLoginSuccess)==null||y.call(e,k.user,k.is_new_user),k==null?void 0:k.user}catch(w){throw i(w)}}),[t,r,n,e,i]);return{sendCode:a,loginWithCode:c,state:o}};var Go=e=>{let[t,s]=_react.useState.call(void 0, ""),{client:n,otpState:o,setOtpState:r}=_react.useContext.call(void 0, _chunkTSZL7MIUjs.w),i=_react.useCallback.call(void 0, d=>{var m;let h=_chunkTSZL7MIUjs.n.call(void 0, d);return r({status:"error",error:h}),(m=e==null?void 0:e.onError)==null||m.call(e,h),h},[e,r]),a=_react.useCallback.call(void 0, h=>_chunkTSZL7MIUjs.d.call(void 0, void 0,[h],function*({phone:d}){var m;s(d);try{r({status:"sending-code"});let p=yield n.auth.phone.sendCode(d);return r({status:"awaiting-code-input"}),(m=e==null?void 0:e.onSendCodeSuccess)==null||m.call(e,{phone:d}),p}catch(p){throw i(p)}}),[n,i,e,r]),c=_react.useCallback.call(void 0, m=>_chunkTSZL7MIUjs.d.call(void 0, void 0,[m],function*({code:d,phone:h}){var p;try{if(!_chunkTSZL7MIUjs.f.call(void 0, ))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(!(h||t))throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid phone number before calling `linkWithCode`"});r({status:"submitting-code"});let{user:v}=yield n.auth.phone.linkWithCode(h||t,d);return r({status:"done"}),(p=e==null?void 0:e.onLinkSuccess)==null||p.call(e,v),v}catch(y){throw i(y)}}),[t,r,n,e,i]);return{sendCode:a,linkWithCode:c,state:o}};var Xo=e=>{let[t,s]=_react.useState.call(void 0, ""),{client:n,otpState:o,setOtpState:r}=_react.useContext.call(void 0, _chunkTSZL7MIUjs.w),i=_react.useCallback.call(void 0, d=>{var m;let h=_chunkTSZL7MIUjs.n.call(void 0, d);return r({status:"error",error:h}),(m=e==null?void 0:e.onError)==null||m.call(e,h),h},[e,r]),a=_react.useCallback.call(void 0, h=>_chunkTSZL7MIUjs.d.call(void 0, void 0,[h],function*({phone:d}){var m;s(d);try{r({status:"sending-code"});let p=yield n.auth.phone.sendCode(d);return r({status:"awaiting-code-input"}),(m=e==null?void 0:e.onSendCodeSuccess)==null||m.call(e,{phone:d}),p}catch(p){throw i(p)}}),[n,i,e,r]),c=_react.useCallback.call(void 0, p=>_chunkTSZL7MIUjs.d.call(void 0, void 0,[p],function*({code:d,phone:h,disableSignup:m}){var y;try{if(_chunkTSZL7MIUjs.f.call(void 0, ))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(!(h||t))throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid phone number before calling `loginWithCode`"});r({status:"submitting-code"});let C=_chunkTSZL7MIUjs.e.call(void 0, ),k=yield n.auth.phone.loginWithCode(h||t,d,m?"no-signup":"login-or-sign-up",{embedded:C==null?void 0:C.embedded});return r({status:"done"}),(y=e==null?void 0:e.onLoginSuccess)==null||y.call(e,k.user,k.is_new_user),k==null?void 0:k.user}catch(w){throw i(w)}}),[t,r,n,e,i]);return{sendCode:a,loginWithCode:c,state:o}};var _expolinking = require('expo-linking'); var H = _interopRequireWildcard(_expolinking); var N = _interopRequireWildcard(_expolinking); var Re = _interopRequireWildcard(_expolinking); var D = _interopRequireWildcard(_expolinking); var Fe = _interopRequireWildcard(_expolinking); var He = _interopRequireWildcard(_expolinking); var De = _interopRequireWildcard(_expolinking); var Ge = _interopRequireWildcard(_expolinking);var sn=e=>{let{appState:t,getCurrentAppState:s}=_chunkTSZL7MIUjs.p.call(void 0, ),{client:n,farcasterState:o,setFarcasterState:r}=_react.useContext.call(void 0, _chunkTSZL7MIUjs.w),i=_react.useRef.call(void 0, !1),a=_react.useCallback.call(void 0, h=>{var p;let m=_chunkTSZL7MIUjs.n.call(void 0, h);return r({status:"error",error:m}),(p=e==null?void 0:e.onError)==null||p.call(e,m),m},[e==null?void 0:e.onError,r]),c=_react.useCallback.call(void 0, ()=>{i.current=!0},[]);return{linkWithFarcaster:_react.useCallback.call(void 0, (y,...w)=>_chunkTSZL7MIUjs.d.call(void 0, void 0,[y,...w],function*({relyingParty:h,redirectUrl:m},p={pollAttempts:10,pollIntervalMs:1e3}){var v;try{let C=_chunkTSZL7MIUjs.f.call(void 0, );if(i.current=!1,!C)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_link_farcaster_before_logged_in",error:"Must be logged in to link a Farcaster account."});r({status:"generating-uri"});let{connect_uri:k,channel_token:E}=yield n.auth.farcaster.initializeAuth({relyingParty:h,redirectUrl:H.createURL(m!=null?m:"/")});if(!k)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 H.openURL(k),r({status:"polling-status"});let _=0;for(;_<p.pollAttempts;){if(i.current)throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_canceled",error:"Farcaster polling canceled"});if(t.current!=="active"&&s()!=="active"){yield _chunkTSZL7MIUjs.o.call(void 0, p.pollIntervalMs);continue}let L=yield n.auth.farcaster.getFarcasterStatus({channel_token:E});if(L.state==="completed"){r({status:"submitting-token"});let{user:M}=yield n.auth.farcaster.link(_chunkTSZL7MIUjs.a.call(void 0, {channel_token:E},L));return r({status:"done"}),(v=e==null?void 0:e.onSuccess)==null||v.call(e,M),M}_++,yield _chunkTSZL7MIUjs.o.call(void 0, p.pollIntervalMs)}throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(C){throw a(C)}}),[n,e==null?void 0:e.onSuccess,a,r]),state:o,cancel:c}};var mn=e=>{let{client:t}=_react.useContext.call(void 0, _chunkTSZL7MIUjs.w),s=_react.useCallback.call(void 0, o=>{var i;let r=_chunkTSZL7MIUjs.n.call(void 0, o);return(i=e==null?void 0:e.onError)==null||i.call(e,r),r},[e==null?void 0:e.onError]);return{unlinkFarcaster:_react.useCallback.call(void 0, r=>_chunkTSZL7MIUjs.d.call(void 0, void 0,[r],function*({fid:o}){var i;try{let{user:a}=yield t.auth.farcaster.unlink({fid:o});return(i=e==null?void 0:e.onSuccess)==null||i.call(e,a),a}catch(a){throw s(a)}}),[t,e==null?void 0:e.onSuccess,s])}};var Cn=e=>{let{appState:t,getCurrentAppState:s}=_chunkTSZL7MIUjs.p.call(void 0, ),{client:n,farcasterState:o,setFarcasterState:r}=_react.useContext.call(void 0, _chunkTSZL7MIUjs.w),i=_react.useRef.call(void 0, !1),a=_react.useCallback.call(void 0, h=>{var p;let m=_chunkTSZL7MIUjs.n.call(void 0, h);return r({status:"error",error:m}),(p=e==null?void 0:e.onError)==null||p.call(e,m),m},[e==null?void 0:e.onError,r]),c=_react.useCallback.call(void 0, ()=>{i.current=!0},[]);return{loginWithFarcaster:_react.useCallback.call(void 0, (w,...v)=>_chunkTSZL7MIUjs.d.call(void 0, void 0,[w,...v],function*({relyingParty:h,redirectUrl:m,disableSignup:p},y={pollAttempts:10,pollIntervalMs:1e3}){var C;try{if(i.current=!1,_chunkTSZL7MIUjs.f.call(void 0, ))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"});r({status:"generating-uri"});let{connect_uri:E,channel_token:_}=yield n.auth.farcaster.initializeAuth({relyingParty:h,redirectUrl:N.createURL(m!=null?m:"/")});if(!E)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_generate_farcaster_uri",error:"Failed to generate farcaster uri"});if(!_)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_generate_farcaster_channel_token",error:"Failed to generate farcaster channel token"});yield N.openURL(E),r({status:"polling-status"});let L=0;for(;L<y.pollAttempts;){if(i.current)throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_canceled",error:"Farcaster polling canceled"});if(t.current!=="active"&&s()!=="active"){yield _chunkTSZL7MIUjs.o.call(void 0, y.pollIntervalMs);continue}let M=yield n.auth.farcaster.getFarcasterStatus({channel_token:_});if(M.state==="completed"){r({status:"submitting-token"});let K=_chunkTSZL7MIUjs.e.call(void 0, ),j=yield n.auth.farcaster.authenticate(_chunkTSZL7MIUjs.a.call(void 0, {channel_token:_,mode:p?"no-signup":"login-or-sign-up"},M),{embedded:K==null?void 0:K.embedded});return r({status:"done"}),(C=e==null?void 0:e.onSuccess)==null||C.call(e,j.user,j.is_new_user),j.user}L++,yield _chunkTSZL7MIUjs.o.call(void 0, y.pollIntervalMs)}throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(k){throw a(k)}}),[n,a,e==null?void 0:e.onSuccess,r,t]),state:o,cancel:c}};var _zustand = require('zustand');var te=_zustand.create.call(void 0, ()=>({status:"initial"})),P=e=>te.setState(e,!0),Cr=te.getState,Ln= exports.n =()=>{let{client:e}=_react.useContext.call(void 0, _chunkTSZL7MIUjs.w),t=te(),s=_react.useCallback.call(void 0, ()=>_chunkTSZL7MIUjs.d.call(void 0, void 0,null,function*(){try{P({status:"fetching-nonce"});let o=yield e.auth.farcasterV2.initializeAuth();return P({status:"awaiting-signature"}),o}catch(o){let r=_chunkTSZL7MIUjs.n.call(void 0, o);throw P({status:"initial",error:r}),r}}),[e]),n=_react.useCallback.call(void 0, o=>_chunkTSZL7MIUjs.d.call(void 0, void 0,null,function*(){let r=Cr().status;try{if(_chunkTSZL7MIUjs.f.call(void 0, )){let d=new (0, _jssdkcore.PrivyClientError)({code:"attempted_login_with_farcaster_while_already_logged_in",error:"Already logged in, use a link helper if you are trying to link farcaster to an existing account"});throw P({status:r,error:d}),d}P({status:"submitting-signature"});let a=_chunkTSZL7MIUjs.e.call(void 0, ),c=yield e.auth.farcasterV2.authenticate(o,{embedded:a==null?void 0:a.embedded});return P({status:"done"}),setTimeout(()=>P({status:"initial"}),1500),{user:c.user}}catch(i){let a=_chunkTSZL7MIUjs.n.call(void 0, i);throw P({status:r,error:a}),a}}),[e]);return{init:s,login:n,state:t}};var Tn=e=>{let{client:t}=_react.useContext.call(void 0, _chunkTSZL7MIUjs.w),s=_react.useCallback.call(void 0, o=>{var i;let r=_chunkTSZL7MIUjs.n.call(void 0, o);return(i=e==null?void 0:e.onError)==null||i.call(e,r),r},[e==null?void 0:e.onError]);return{unlinkOAuth:_react.useCallback.call(void 0, i=>_chunkTSZL7MIUjs.d.call(void 0, void 0,[i],function*({provider:o,subject:r}){var a;try{let{user:c}=yield t.auth.oauth.unlink(o,r);return(a=e==null?void 0:e.onSuccess)==null||a.call(e,c),c}catch(c){throw s(c)}}),[t,e==null?void 0:e.onSuccess,s])}};var Gn=e=>{let{client:t}=_react.useContext.call(void 0, _chunkTSZL7MIUjs.w),s=_react.useRef.call(void 0, e.onOAuthTokenGrant);s.current=e.onOAuthTokenGrant,_react.useEffect.call(void 0, ()=>{let{unsubscribe:n}=t.addOAuthTokensListener(o=>{s.current(o)});return n},[t])};var $n=()=>{let{client:e}=_react.useContext.call(void 0, _chunkTSZL7MIUjs.w);return _react.useMemo.call(void 0, ()=>({delegateWallet:_jssdkcore.delegatedActions.delegateWallet(e),revokeWallets:_jssdkcore.delegatedActions.revokeWallets(e)}),[e])};var Zn=()=>{let{client:e}=_react.useContext.call(void 0, _chunkTSZL7MIUjs.w);return _react.useMemo.call(void 0, ()=>({sendCode(n){return _chunkTSZL7MIUjs.d.call(void 0, this,arguments,function*({newEmailAddress:s}){Ue(),yield e.auth.email.sendCode(s)})},updateEmail(o){return _chunkTSZL7MIUjs.d.call(void 0, this,arguments,function*({newEmailAddress:s,code:n}){let{address:r}=Ue(),{user:i}=yield e.auth.email.updateEmail({oldEmailAddress:r,newEmailAddress:s,code:n});return i})}}),[e])};function Ue(){let t=Ar().linked_accounts.find(s=>s.type==="email");if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_update_email_without_a_linked_email",error:"Must have a linked email account already to update an email address. Use `useLinkEmail` to link an email account."});return t}function Ar(){let e=_chunkTSZL7MIUjs.f.call(void 0, );if(!e)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_update_before_logged_in",error:"Must be logged in to update a user profile."});return e}var si=()=>{let{client:e}=_react.useContext.call(void 0, _chunkTSZL7MIUjs.w);return _react.useMemo.call(void 0, ()=>({sendCode(n){return _chunkTSZL7MIUjs.d.call(void 0, this,arguments,function*({newPhoneNumber:s}){Ae(),yield e.auth.phone.sendCode(s)})},updatePhone(o){return _chunkTSZL7MIUjs.d.call(void 0, this,arguments,function*({newPhoneNumber:s,code:n}){let{phoneNumber:r}=Ae(),{user:i}=yield e.auth.phone.updatePhone({oldPhoneNumber:r,newPhoneNumber:s,code:n});return i})}}),[e])};function Ae(){let t=Or().linked_accounts.find(s=>s.type==="phone");if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_update_phone_without_a_linked_phone",error:"Must have a linked phone account already to update a phone number. Use `useLinkSMS` to link a phone number."});return t}function Or(){let e=_chunkTSZL7MIUjs.f.call(void 0, );if(!e)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_update_before_logged_in",error:"Must be logged in to update a user profile."});return e}var _expowebbrowser = require('expo-web-browser'); var Oe = _interopRequireWildcard(_expowebbrowser);var _reactnative = require('react-native');var S=e=>_chunkTSZL7MIUjs.d.call(void 0, void 0,null,function*(){let t;_reactnative.Platform.OS==="android"&&(t=Ir());let s=yield Oe.openAuthSessionAsync(e),n;if(_reactnative.Platform.OS==="android")n=yield t;else{if(s.type!=="success")throw new (0, _jssdkcore.PrivyClientError)({code:"oauth_session_failed",error:"OAuth session failed"});n=s.url}return Rr(n)});function Ir(){let e;return new Promise((t,s)=>{e=D.addEventListener("url",({url:n})=>{n&&t(n)}),setTimeout(()=>{s(new (0, _jssdkcore.PrivyClientError)({code:"oauth_session_timeout",error:"OAuth session timed out"}))},Fr)}).finally(()=>{e==null||e.remove()})}function Rr(e){let{queryParams:t}=D.parse(e);return t}var Fr=2*60*1e3;var wi=()=>{let{client:e}=_react.useContext.call(void 0, _chunkTSZL7MIUjs.w),t=_react.useMemo.call(void 0, ()=>_jssdkcore.crossApp.loginWithCrossAppAuth({client:e,openAuthSession:S}),[e]);return{loginWithCrossApp:_react.useCallback.call(void 0, r=>_chunkTSZL7MIUjs.d.call(void 0, void 0,[r],function*({appId:n,redirectUri:o}){if(_chunkTSZL7MIUjs.f.call(void 0, ))throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_login_with_cross_app_while_already_logged_in",error:"Already logged in, use `linkCrossAppAccount` if you are trying to link a cross app account to an existing account"});let{user:a}=yield t({providerAppId:n,redirectUrl:Re.createURL(o||"/")});return{user:a}}),[t])}};var Ei=()=>{let{client:e}=_react.useContext.call(void 0, _chunkTSZL7MIUjs.w),t=_react.useMemo.call(void 0, ()=>_jssdkcore.crossApp.linkWithCrossAppAuth({client:e,openAuthSession:S}),[e]);return{linkWithCrossApp:_react.useCallback.call(void 0, r=>_chunkTSZL7MIUjs.d.call(void 0, void 0,[r],function*({appId:n,redirectUri:o}){if(!_chunkTSZL7MIUjs.f.call(void 0, ))throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_link_cross_app_before_logged_in",error:"Must be logged in to link a cross app account, Use `loginWithCrossAppAccount` to login with cross app"});return{user:yield t({providerAppId:n,redirectUrl:Fe.createURL(o||"/")})}}),[t])}};var Ii=()=>{let{client:e}=_react.useContext.call(void 0, _chunkTSZL7MIUjs.w),t=_react.useMemo.call(void 0, ()=>_jssdkcore.crossApp.wallet.signMessage({client:e,openAuthSession:S}),[e]);return _react.useMemo.call(void 0, ()=>({signMessage:({address:s,message:n,redirectUri:o="/"})=>t({user:_chunkTSZL7MIUjs.f.call(void 0, ),address:s,message:n,redirectUrl:He.createURL(o)})}),[t])};var Bi=()=>{let{client:e}=_react.useContext.call(void 0, _chunkTSZL7MIUjs.w),t=_react.useMemo.call(void 0, ()=>_jssdkcore.crossApp.wallet.signTypedData({client:e,openAuthSession:S}),[e]);return _react.useMemo.call(void 0, ()=>({signTypedData:({address:s,typedData:n,redirectUri:o="/"})=>t({user:_chunkTSZL7MIUjs.f.call(void 0, ),address:s,typedData:n,redirectUrl:De.createURL(o)})}),[t])};var zi=()=>{let{client:e}=_react.useContext.call(void 0, _chunkTSZL7MIUjs.w),t=_react.useMemo.call(void 0, ()=>_jssdkcore.crossApp.wallet.sendTransaction({client:e,openAuthSession:S}),[e]);return _react.useMemo.call(void 0, ()=>({sendTransaction:({address:s,transaction:n,redirectUri:o="/"})=>t({user:_chunkTSZL7MIUjs.f.call(void 0, ),address:s,transaction:n,redirectUrl:Ge.createURL(o)})}),[t])};var ts=()=>{let{client:e}=_react.useContext.call(void 0, _chunkTSZL7MIUjs.w);return{setRecovery:_react.useCallback.call(void 0, s=>_chunkTSZL7MIUjs.d.call(void 0, void 0,null,function*(){var a;let n=_chunkTSZL7MIUjs.f.call(void 0, ),o=e.app.appId;if(!n)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before attempting to modify the recovery method."});let r=(a=_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, n))!=null?a:_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, n);if(!r)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});try{r.chain_type==="ethereum"?yield e.embeddedWallet.getProvider(r):r.chain_type==="solana"&&(yield e.embeddedWallet.getSolanaProvider(r,r.address,"solana-address-verifier"))}catch(c){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:r.recovery_method,upgradeToRecoveryMethod:s.recoveryMethod});let i=yield nt({appId:o,client:e,user:n,primaryAccount:r,recoveryParams:s});try{let{user:c}=yield e.embeddedWallet.setRecovery(i);return{user:c}}catch(c){throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_set_recovery_error",error:c instanceof Error?c.message:"Error setting password on embedded wallet"})}}),[e])}},nt=r=>_chunkTSZL7MIUjs.d.call(void 0, void 0,[r],function*({appId:e,client:t,user:s,primaryAccount:n,recoveryParams:o}){switch(o.recoveryMethod){case"privy":return{recoveryMethod:"privy",wallet:n};case"user-passcode":return _chunkTSZL7MIUjs.b.call(void 0, _chunkTSZL7MIUjs.a.call(void 0, {},o),{wallet:n});case"google-drive":{let i=yield _chunkTSZL7MIUjs.q.call(void 0, t);return{recoveryMethod:"google-drive",wallet:n,recoveryAccessToken:i}}case"icloud":{let{recoverySecret:i,iCloudRecordName:a}=yield _chunkTSZL7MIUjs.l.call(void 0, {appId:e,client:t,user:s});return{recoveryMethod:"icloud-native",recoverySecretOverride:i,iCloudRecordNameOverride:a,wallet:n}}case"recovery-encryption-key":return{recoveryMethod:"recovery-encryption-key",wallet:n,recoveryKey:o.recoveryKey};default:throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}});var us=()=>{let{client:e}=_react.useContext.call(void 0, _chunkTSZL7MIUjs.w);return{recover:_react.useCallback.call(void 0, s=>_chunkTSZL7MIUjs.d.call(void 0, void 0,null,function*(){var d;let n=_chunkTSZL7MIUjs.f.call(void 0, );if(!n)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before attempting to modify the recovery method."});let o=(d=_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, n))!=null?d:_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, n);if(!o)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let r,i,a,c;switch(s.recoveryMethod){case"user-passcode":i=s.password;break;case"google-drive":a=yield _chunkTSZL7MIUjs.q.call(void 0, e);break;case"icloud":let{recoverySecret:h}=yield _chunkTSZL7MIUjs.m.call(void 0, {client:e,walletAddress:o.address,chainType:o.chain_type});c=h;break;case"recovery-encryption-key":r=s.recoveryKey;break;case"privy":break;default:throw new (0, _jssdkcore.PrivyClientError)({code:"unsupported_recovery_method",error:`Unsupported recovery options ${s}`})}try{o.chain_type==="ethereum"?yield e.embeddedWallet.getProvider(o,i,a,c,r):o.chain_type==="solana"&&(yield e.embeddedWallet.getSolanaProvider(o,o.address,"solana-address-verifier",i,a,c))}catch(h){throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"})}}),[e])}};var ne=(e={})=>{let{wallet:t,createWalletCallbacks:s,recoverWalletCallbacks:n,setWalletRecoveryCallbacks:o}=_react.useContext.call(void 0, _chunkTSZL7MIUjs.w),{onCreateWalletSuccess:r,onCreateWalletError:i,onRecoverWalletError:a,onRecoverWalletSuccess:c,onSetWalletRecoverySuccess:d,onSetWalletRecoveryError:h}=e;return _react.useEffect.call(void 0, ()=>{s.current={onSuccess:r,onError:i}},[r,i]),_react.useEffect.call(void 0, ()=>{n.current={onSuccess:c,onError:a}},[c,a]),_react.useEffect.call(void 0, ()=>{o.current={onSuccess:d,onError:h}},[c,a]),t};var vs=({onStateChange:e})=>{let t=ne();return _react.useEffect.call(void 0, ()=>{e(t)},[t])};var Ss=()=>{let{getIdentityToken:e}=_react.useContext.call(void 0, _chunkTSZL7MIUjs.w);return{getIdentityToken:e}};var Ls=e=>{let{client:t}=_react.useContext.call(void 0, _chunkTSZL7MIUjs.w),s=_react.useCallback.call(void 0, o=>{var i;let r=_chunkTSZL7MIUjs.n.call(void 0, o);return(i=e==null?void 0:e.onError)==null||i.call(e,r),r},[e==null?void 0:e.onError]);return{create:_react.useCallback.call(void 0, ()=>_chunkTSZL7MIUjs.d.call(void 0, void 0,null,function*(){var o;try{if(_chunkTSZL7MIUjs.f.call(void 0, ))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 i=_chunkTSZL7MIUjs.e.call(void 0, ),a=yield t.auth.guest.create({embedded:i==null?void 0:i.embedded});return(o=e==null?void 0:e.onSuccess)==null||o.call(e,a.user,a.is_new_user),a.user}catch(r){throw s(r)}}),[t,s,e==null?void 0:e.onSuccess])}};function Ts({onMfaRequired:e}){let{client:t}=_react.useContext.call(void 0, _chunkTSZL7MIUjs.w);_react.useEffect.call(void 0, ()=>{function s(){return _chunkTSZL7MIUjs.d.call(void 0, this,null,function*(){var o;let n=_chunkTSZL7MIUjs.f.call(void 0, );yield e((o=n==null?void 0:n.mfa_methods.map(({type:r})=>r))!=null?o:[])})}return t.mfaPromises.on("mfaRequired",s),()=>{t.mfaPromises.off("mfaRequired",s)}},[t,e])}function js(){let{client:e}=_react.useContext.call(void 0, _chunkTSZL7MIUjs.w),t=_react.useCallback.call(void 0, r=>_chunkTSZL7MIUjs.d.call(void 0, this,null,function*(){var i,a;switch(r.method){case"sms":yield e.mfa.sms.sendCode({action:"verify"});return;case"passkey":let{options:c}=yield e.mfa.passkey.generateAuthenticationOptions({relying_party:r.relyingParty||((a=(i=_chunkTSZL7MIUjs.e.call(void 0, ))==null?void 0:i.mfa)==null?void 0:a.relyingParty)});return _chunkTSZL7MIUjs.C.call(void 0, c);case"totp":return;default:throw new Error(`Unsupported MFA method: ${r.mfaMethod}`)}}),[e]),s=_react.useCallback.call(void 0, r=>_chunkTSZL7MIUjs.d.call(void 0, this,null,function*(){var i,a,c,d,h,m,p;switch(r.method){case"totp":case"sms":if(typeof r.mfaCode!="string")throw new (0, _jssdkcore.PrivyClientError)({code:"invalid_mfa_code",error:"Invalid MFA code"});(c=e.mfaPromises.rootPromise.current)==null||c.resolve({mfaMethod:r.method,mfaCode:r.mfaCode,relyingParty:r.relyingParty||((a=(i=_chunkTSZL7MIUjs.e.call(void 0, ))==null?void 0:i.mfa)==null?void 0:a.relyingParty)||""}),yield new Promise((C,k)=>{e.mfaPromises.submitPromise.current={resolve:C,reject:k}});break;case"passkey":if(typeof r.mfaCode=="string")throw new (0, _jssdkcore.PrivyClientError)({code:"invalid_passkey_response",error:"Invalid authenticator response"});let y=yield _chunkTSZL7MIUjs.A.call(void 0, r.mfaCode),w=_chunkTSZL7MIUjs.B.call(void 0, y);(m=e.mfaPromises.rootPromise.current)==null||m.resolve({mfaMethod:r.method,relyingParty:r.relyingParty||((h=(d=_chunkTSZL7MIUjs.e.call(void 0, ))==null?void 0:d.mfa)==null?void 0:h.relyingParty)||"",mfaCode:w}),yield new Promise((C,k)=>{e.mfaPromises.submitPromise.current={resolve:C,reject:k}});break;default:let v=new (0, _jssdkcore.PrivyClientError)({code:"unsupported_mfa_method",error:"Unsupported MFA method"});throw(p=e.mfaPromises.rootPromise.current)==null||p.reject(v),v}}),[e]),n=_react.useCallback.call(void 0, ()=>_chunkTSZL7MIUjs.d.call(void 0, this,null,function*(){yield e.mfa.verifyMfa()}),[e]),o=_react.useCallback.call(void 0, ()=>{var r;(r=e.mfaPromises.rootPromise.current)==null||r.reject(new (0, _jssdkcore.PrivyClientError)({code:"mfa_canceled",error:"MFA canceled"}))},[e]);return{init:t,submit:s,prompt:n,cancel:o}}function Qs(){let{client:e}=_react.useContext.call(void 0, _chunkTSZL7MIUjs.w),t=_react.useCallback.call(void 0, o=>_chunkTSZL7MIUjs.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.method}`)}}),[e]),s=_react.useCallback.call(void 0, o=>_chunkTSZL7MIUjs.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.method}`)}}),[e]),n=_react.useCallback.call(void 0, o=>_chunkTSZL7MIUjs.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:[],removeForLogin:o.removeForLogin});return;default:throw new Error(`Unsupported MFA method: ${o.method}`)}}),[e]);return{initMfaEnrollment:t,submitMfaEnrollment:s,unenrollMfa:n}}var Ct=()=>{let e=_chunkTSZL7MIUjs.h.call(void 0, ),t=W(),s=_react.useMemo.call(void 0, ()=>{let r=_jssdkcore.getAllUserEmbeddedEthereumWallets.call(void 0, e).map(i=>{let a=_jssdkcore.getEntropyDetailsFromUser.call(void 0, e,i);return a?{account:i,entropy:a}:null});return r.some(i=>i===null)?[]:r.filter(i=>i!==null).map(({account:i,entropy:{entropyId:a,entropyIdVerifier:c}})=>({address:i.address,walletIndex:i.wallet_index,chainType:i.chain_type,getProvider:()=>t.embeddedWallet.getEthereumProvider({wallet:i,entropyId:a,entropyIdVerifier:c,onNeedsRecovery:d=>_chunkTSZL7MIUjs.d.call(void 0, void 0,null,function*(){var h;yield(h=_chunkTSZL7MIUjs.j.call(void 0, ))==null?void 0:h(d)})})}))},[t,e]),n=_react.useCallback.call(void 0, (...r)=>_chunkTSZL7MIUjs.d.call(void 0, void 0,[...r],function*({createAdditional:o=!1}={}){let{user:i}=yield t.user.get(),a=_jssdkcore.getAllUserEmbeddedEthereumWallets.call(void 0, i);if(!o&&a.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 c=_jssdkcore.getEntropyDetailsFromUser.call(void 0, i);if(!c){let w=yield t.embeddedWallet.create({});return se(w.user,0),{user:w.user}}let{entropyId:d,entropyIdVerifier:h}=c;if(h==="solana-address-verifier"){let w=_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, i),v=yield t.embeddedWallet.create({solanaAccount:w});return se(v.user,0),{user:v.user}}let p=a.map(w=>w.wallet_index).reduce((w,v)=>Math.max(w,v),0)+1,y=yield t.embeddedWallet.add({chainType:"ethereum",hdWalletIndex:p,entropyId:d,entropyIdVerifier:h});return se(y.user,p),{user:y.user}}),[t]);return{wallets:s,create:n}};function se(e,t){let s=_jssdkcore.getAllUserEmbeddedEthereumWallets.call(void 0, e).find(n=>n.wallet_index===t);if(!e||!s)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Unknown error creating wallet"})}var St=(e={})=>{let{solanaWallet:t,createSolanaWalletCallbacks:s,recoverSolanaWalletCallbacks:n}=_react.useContext.call(void 0, _chunkTSZL7MIUjs.w),{onCreateWalletSuccess:o,onCreateWalletError:r,onRecoverWalletError:i,onRecoverWalletSuccess:a}=e;return _react.useEffect.call(void 0, ()=>{s.current={onSuccess:o,onError:r}},[o,r]),_react.useEffect.call(void 0, ()=>{n.current={onSuccess:a,onError:i}},[a,i]),t};var Et=()=>{let e=_chunkTSZL7MIUjs.h.call(void 0, ),t=W(),s=_react.useMemo.call(void 0, ()=>{let o=_jssdkcore.getEntropyDetailsFromUser.call(void 0, e);if(!o)return[];let r=_jssdkcore.getAllUserEmbeddedBitcoinWallets.call(void 0, e),{entropyId:i,entropyIdVerifier:a}=o;return r.map(c=>({address:c.address,walletIndex:c.wallet_index,publicKey:c.public_key,chainType:c.chain_type,getProvider:()=>t.embeddedWallet.getBitcoinProvider({wallet:c,entropyId:i,entropyIdVerifier:a})}))},[t,e]),n=_react.useCallback.call(void 0, i=>_chunkTSZL7MIUjs.d.call(void 0, void 0,[i],function*({chainType:o,createAdditional:r=!1}){let{user:a}=yield t.user.get(),c=_jssdkcore.getEntropyDetailsFromUser.call(void 0, a);if(!c)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"No existing wallet for this user, create an Ethereum walet first to add a Bitcoin wallet"});let{entropyId:d,entropyIdVerifier:h}=c,m=_jssdkcore.getAllUserEmbeddedBitcoinWallets.call(void 0, a).filter(v=>v.chain_type===o);if(!r&&m.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 p=m.length===0?0:Math.max(...m.map(v=>v.wallet_index),0)+1,y=yield t.embeddedWallet.add({chainType:o,hdWalletIndex:p,entropyId:d,entropyIdVerifier:h}),w=_jssdkcore.getAllUserEmbeddedBitcoinWallets.call(void 0, y.user).find(v=>v.chain_type===o&&v.wallet_index===p);if(!y.user||!w)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Unknown error creating wallet"});return{user:y.user,provider:yield t.embeddedWallet.getBitcoinProvider({wallet:w,entropyId:d,entropyIdVerifier:h})}}),[t]);return{wallets:s,create:n}};var Ut=()=>{let{isReady:e,logout:t,getAccessToken:s,error:n}=_react.useContext.call(void 0, _chunkTSZL7MIUjs.w);return{user:_chunkTSZL7MIUjs.h.call(void 0, ),isReady:e,error:n,logout:t,getAccessToken:s}};exports.a = It; exports.b = Vt; exports.c = W; exports.d = eo; exports.e = co; exports.f = yo; exports.g = Po; exports.h = Io; exports.i = Go; exports.j = Xo; exports.k = sn; exports.l = mn; exports.m = Cn; exports.n = Ln; exports.o = Tn; exports.p = Gn; exports.q = $n; exports.r = Zn; exports.s = si; exports.t = wi; exports.u = Ei; exports.v = Ii; exports.w = Bi; exports.x = zi; exports.y = ts; exports.z = us; exports.A = ne; exports.B = vs; exports.C = Ss; exports.D = Ls; exports.E = Ts; exports.F = js; exports.G = Qs; exports.H = Ct; exports.I = St; exports.J = Et; exports.K = Ut;
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var At=Object.defineProperty,kt=Object.defineProperties;var Rt=Object.getOwnPropertyDescriptors;var ue=Object.getOwnPropertySymbols;var Le=Object.prototype.hasOwnProperty,Fe=Object.prototype.propertyIsEnumerable;var Ue=(e,t,r)=>t in e?At(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,C= exports.a =(e,t)=>{for(var r in t||(t={}))Le.call(t,r)&&Ue(e,r,t[r]);if(ue)for(var r of ue(t))Fe.call(t,r)&&Ue(e,r,t[r]);return e},O= exports.b =(e,t)=>kt(e,Rt(t));var Or=(e,t)=>{var r={};for(var o in e)Le.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(e!=null&&ue)for(var o of ue(e))t.indexOf(o)<0&&Fe.call(e,o)&&(r[o]=e[o]);return r};var u=(e,t,r)=>new Promise((o,n)=>{var c=i=>{try{d(r.next(i))}catch(a){n(a)}},s=i=>{try{d(r.throw(i))}catch(a){n(a)}},d=i=>i.done?o(i.value):Promise.resolve(i.value).then(c,s);d((r=r.apply(e,t)).next())});var _react = require('react'); var _react2 = _interopRequireDefault(_react);var _zustand = require('zustand');var Te=_zustand.create.call(void 0, ()=>({status:"disconnected"})),Me= exports.j =()=>Te.getState().onNeedsRecovery,Ur= exports.k =e=>{_react.useEffect.call(void 0, ()=>{Te.setState({onNeedsRecovery:e==null?void 0:e.onNeedsRecovery})},[e==null?void 0:e.onNeedsRecovery])};var _expoapplication = require('expo-application');var _expolinking = require('expo-linking'); var re = _interopRequireWildcard(_expolinking); var J = _interopRequireWildcard(_expolinking); var Z = _interopRequireWildcard(_expolinking); var ee = _interopRequireWildcard(_expolinking);var _exposecurestore = require('expo-secure-store'); var x = _interopRequireWildcard(_exposecurestore);var _expowebbrowser = require('expo-web-browser'); var ce = _interopRequireWildcard(_expowebbrowser); var Xe = _interopRequireWildcard(_expowebbrowser);var _reactnative = require('react-native');var _jssdkcore = require('@privy-io/js-sdk-core'); var _jssdkcore2 = _interopRequireDefault(_jssdkcore);var _reactfastcompare = require('react-fast-compare'); var _reactfastcompare2 = _interopRequireDefault(_reactfastcompare);var pe=_zustand.create.call(void 0, ()=>{}),Ne=e=>pe.setState(t=>_reactfastcompare2.default.call(void 0, t,e)?t:e),z= exports.e =pe.getState;var _reactnativewebview = require('react-native-webview'); var _reactnativewebview2 = _interopRequireDefault(_reactnativewebview);var M=_zustand.createStore.call(void 0, )(()=>({user:null,proxyStatus:"loading"}));function me(){return M.getState().user}var Dr=M.subscribe.bind(M);function Ee(e){M.setState(({user:t})=>_reactfastcompare2.default.call(void 0, t,e)?{}:{user:e})}var Ce=e=>M.setState({proxyStatus:e});function N(){return _zustand.useStore.call(void 0, M,e=>e.user)}function je(){return _zustand.useStore.call(void 0, M,e=>!!e.user)}function j(){return _zustand.useStore.call(void 0, M,e=>e.proxyStatus!=="loading")}var De=({client:e,isClientReady:t,logLevel:r})=>{let o=_react.useRef.call(void 0, null);_react.useEffect.call(void 0, ()=>_reactnative.AppState.addEventListener("change",s=>u(void 0,null,function*(){s==="active"&&((yield e.embeddedWallet.ping(500))||(Ce("reloading"),e.embeddedWallet.reload()))})).remove,[e]);let n=_react.useCallback.call(void 0, c=>u(void 0,null,function*(){let{data:s}=c.nativeEvent;e.embeddedWallet.onMessage(JSON.parse(s))}),[e]);return t?_react2.default.createElement(_reactnativewebview2.default,{style:{flex:1},ref:c=>{c&&(e.setMessagePoster(c),o.current=c)},cacheEnabled:!1,cacheMode:"LOAD_NO_CACHE",source:{uri:e.embeddedWallet.getURL()},webviewDebuggingEnabled:r==="DEBUG",onLoad:()=>Ce("loaded"),onError:console.error,onMessage:n}):null};function Ve(c){return u(this,arguments,function*({client:e,setSolanaWallet:t,createSolanaWalletCallbacks:r,setSolanaRecoveryFlowState:o,opts:n}){var s,d,i;t({status:"creating"});try{let{user:a}=yield e.user.get(),p=_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, a),m=p[0],v=(s=_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, a))!=null?s:void 0;if(n!=null&&n.recoveryMethod&&n.recoveryMethod!=="privy")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Unsupported recovery method for solana wallet."});if(!(n!=null&&n.createAdditional)&&m)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Solana wallet already exists for this user. Set `createAdditional` to `true` to create another wallet"});let b,f;if(m){let l=v!=null?v:m,{entropyId:g,entropyIdVerifier:y}=_jssdkcore.getEntropyDetailsFromAccount.call(void 0, l),w=Math.max(...p.map(E=>E.wallet_index),0)+1,_=yield e.embeddedWallet.add({chainType:"solana",entropyId:g,entropyIdVerifier:y,hdWalletIndex:w}),S=_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, _.user).find(E=>E.wallet_index===w);if(!S)throw new (0, _jssdkcore.PrivyClientError)({error:"Embedded wallet account not created",code:"embedded_wallet_creation_error"});b=yield e.embeddedWallet.getSolanaProvider(S,g,y),f=_.user}else{let l=yield e.embeddedWallet.createSolana({ethereumAccount:v}),g=_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, l.user).find(S=>S.wallet_index===0);if(!g)throw new (0, _jssdkcore.PrivyClientError)({error:"Embedded wallet account not created",code:"embedded_wallet_creation_error"});let y=v!=null?v:g,{entropyId:w,entropyIdVerifier:_}=_jssdkcore.getEntropyDetailsFromAccount.call(void 0, y);b=yield e.embeddedWallet.getSolanaProvider(g,w,_),f=l.user}let h=_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, f)[0];if(!h)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Unknown error creating solana wallet"});return(i=(d=r.current)==null?void 0:d.onSuccess)==null||i.call(d,b),t({status:"connected",publicKey:h.public_key}),o({status:"initial"}),b}catch(a){let p=a instanceof Error?a.message:"Error creating embedded wallet";throw t({status:"error",error:p}),o({status:"initial"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:p})}})}function ve(p){return u(this,arguments,function*({client:e,account:t,setWallet:r,recoverWalletCallbacks:o,recoveryMethod:n,setRecoveryFlowState:c,password:s,recoveryKey:d,recoveryToken:i,recoverySecretOverride:a}){var m,v,b,f;if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});switch(n){case"user-passcode":if(!s)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!i)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!a)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Record name is required for icloud recovery method"});break;case"recovery-encryption-key":if(!d)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"recoveryKey is required for recovery-encryption-key recovery method"});break}r({status:"connecting",account:t});try{let h=yield e.embeddedWallet.getProvider(t,s,i,a,d);return r({status:"connected",provider:h,account:t}),c({status:"initial"}),(v=(m=o.current)==null?void 0:m.onSuccess)==null||v.call(m,h),h}catch(h){r({status:"needs-recovery",account:t}),c({status:"initial"});let l=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:h instanceof Error?h.message:"Error recovering embedded wallet"});throw(f=(b=o.current)==null?void 0:b.onError)==null||f.call(b,l),l}})}function qe(d){return u(this,arguments,function*({client:e,account:t,entropyId:r,entropyIdVerifier:o,setSolanaWallet:n,recoverSolanaWalletCallbacks:c,setSolanaRecoveryFlowState:s}){var i,a,p,m;n({status:"connecting"});try{let v=yield e.embeddedWallet.getSolanaProvider(t,r,o);return n({status:"connected",publicKey:v._publicKey}),s({status:"initial"}),(a=(i=c.current)==null?void 0:i.onSuccess)==null||a.call(i,v),v}catch(v){n({status:"needs-recovery"}),s({status:"initial"});let b=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:v instanceof Error?v.message:"Error recovering embedded wallet"});throw(m=(p=c.current)==null?void 0:p.onError)==null||m.call(p,b),b}})}var Je=({client:e,solanaWallet:t,setSolanaWallet:r,setSolanaRecoveryFlowState:o,createSolanaWalletCallbacks:n,recoverSolanaWalletCallbacks:c})=>{let s=N(),d=_react.useMemo.call(void 0, ()=>_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, s),[s]),i=j(),a=_react.useMemo.call(void 0, ()=>d.length===0?null:_jssdkcore.getEntropyDetailsFromUser.call(void 0, s),[s,d]),p=_react.useMemo.call(void 0, ()=>{let f=d.map(y=>{let w=_jssdkcore.getEntropyDetailsFromUser.call(void 0, s,y);return w?{account:y,entropy:w}:null});if(f.some(y=>y===null))return[];let h=void 0,l=void 0,g=void 0;return f.filter(y=>y!==null).map(({account:y,entropy:{entropyId:w,entropyIdVerifier:_}})=>({address:y.address,publicKey:y.address,walletIndex:y.wallet_index,getProvider:()=>e.embeddedWallet.getSolanaProvider(y,w,_,h,l,g,S=>u(void 0,null,function*(){var E;yield(E=Me())==null?void 0:E(S)}))}))},[d,s,e]),m=_react.useCallback.call(void 0, f=>u(void 0,null,function*(){return yield Ve({client:e,setSolanaWallet:r,createSolanaWalletCallbacks:n,setSolanaRecoveryFlowState:o,opts:f})}),[e,n]),v=_react.useCallback.call(void 0, ()=>u(void 0,null,function*(){if(!a)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{entropyId:f,entropyIdVerifier:h}=a;return qe({client:e,account:d[0],entropyId:f,entropyIdVerifier:h,setSolanaWallet:r,recoverSolanaWalletCallbacks:c,setSolanaRecoveryFlowState:o})}),[e,a,d,c,o,r]),b=_react.useCallback.call(void 0, ()=>u(void 0,null,function*(){if(!a)throw r({status:"not-created"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});r(f=>f.status==="connected"?{status:"reconnecting"}:{status:"connecting"});try{let{entropyId:f,entropyIdVerifier:h}=a,l=yield e.embeddedWallet.getSolanaProvider(d[0],f,h);return r({status:"connected",publicKey:d[0].public_key}),l}catch(f){throw _jssdkcore.errorIndicatesRecoveryIsNeeded.call(void 0, f)?(r({status:"needs-recovery"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):f instanceof Error?(r({status:"error",error:f.message}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:f.message})):(r({status:"error",error:"Error loading embedded wallet"}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[d,e,a,r]);return _react.useEffect.call(void 0, ()=>{if(!s&&t.status!=="disconnected")return r({status:"disconnected"});i&&b().catch(()=>{})},[i,s]),_react.useEffect.call(void 0, ()=>{t.status==="error"&&t.error.includes("User must be logged in")&&b()},[t.status]),{create:m,recover:v,getProvider:b,wallets:p}};function fe(m){return u(this,arguments,function*({client:e,setWallet:t,createWalletCallbacks:r,recoveryMethod:o,setRecoveryFlowState:n,password:c,recoveryKey:s,recoveryToken:d,recoverySecretOverride:i,iCloudRecordNameOverride:a,solanaAccount:p}){var b,f;switch(o){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"recovery-encryption-key":if(!s)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"key is required for recovery-encryption-key recovery method"});break;case"google-drive":if(!d)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!i||!a)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 v=o==="icloud"?"icloud-native":o;try{let{user:h}=yield e.embeddedWallet.create({password:c,recoveryMethod:v,recoveryKey:s,recoveryToken:d,recoverySecretOverride:i,iCloudRecordNameOverride:a,solanaAccount:p}),l=_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, h);if(!l)throw new (0, _jssdkcore.PrivyClientError)({error:"Embedded wallet account not created",code:"embedded_wallet_creation_error"});let g=yield e.embeddedWallet.getProvider(l);return(f=(b=r.current)==null?void 0:b.onSuccess)==null||f.call(b,g),t({status:"connected",provider:g,account:l}),n({status:"initial"}),g}catch(h){let l=h instanceof Error?h.message:"Error creating embedded wallet";throw t({status:"error",error:l,account:null}),n({status:"initial"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:l})}})}function Ge(){return u(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 Re(o){return u(this,arguments,function*({user:e,appId:t,client: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 n=yield Ge(),c=yield r.recovery.icloudAuth.getICloudConfiguration("expo-ios");if(!(c==null?void 0:c.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:a}=yield n.writeRecoverySecretToICloud({containerId:c.container_identifier,appId:t,userId:e.id});return{recoverySecret:i,iCloudRecordName:a}}catch(i){if(i instanceof Error){let a=(d=i.message.split("Caused by: ")[1])!=null?d:"Error writing to iCloud";throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:a})}throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}function Ye(o){return u(this,arguments,function*({walletAddress:e,client:t,chainType:r}){var a;if(_reactnative.Platform.OS==="android")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let n=yield Ge(),s=(yield t.recovery.getRecoveryKeyMaterial(e,r)).icloud_record_name;if(!s)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery not properly backed up."});let d=yield t.recovery.icloudAuth.getICloudConfiguration("expo-ios"),i=d==null?void 0:d.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:p}=yield n.readRecoverySecretFromICloud({containerId:i,recordName:s});return{recoverySecret:p}}catch(p){if(p instanceof Error){let m=(a=p.message.split("Caused by: ")[1])!=null?a:"Error writing to iCloud";throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:m})}throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}function W(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 Eo=e=>new Promise(t=>setTimeout(t,e));function Po(){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 ne(n){return u(this,arguments,function*({provider:e,redirectUri:t,client:r,onError:o}){try{let c;switch(e){case"google-drive":{let{url:a}=yield r.recovery.auth.generateURL(J.createURL(t||"/"));c=a;break}default:throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid provider",code:"embedded_wallet_recovery_error"})}let s=yield Xe.openAuthSessionAsync(c);if(_reactnative.Platform.OS==="android")return;if(s.type!=="success")throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth session failed",code:"embedded_wallet_recovery_error"});let{queryParams:d}=J.parse(s.url),i;switch(e){case"google-drive":{let{privy_oauth_state:a,privy_oauth_code:p}=d;if(!p||!a)throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth invalid credentials",code:"embedded_wallet_recovery_error"});i=yield he({oAuthCode:p,oAuthState:a,client:r});break}default:throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth invalid provider",code:"embedded_wallet_recovery_error"})}return i}catch(c){throw o==null||o(W(c)),c}})}function he(o){return u(this,arguments,function*({oAuthCode:e,oAuthState:t,client:r}){let{access_token:n}=yield r.recovery.auth.authorize(e,t);if(!n)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:"login_with_oauth_returned_with_invalid_credentials"});return n})}var Gt=2*60*1e3;function Yt(e){let t;return new Promise((r,o)=>{t=J.addEventListener("url",c=>u(this,[c],function*({url:n}){if(!n)return;let{queryParams:s}=J.parse(n),{privy_oauth_state:d,privy_oauth_code:i}=s!=null?s:{};if(typeof i!="string"||typeof d!="string")return;let a=yield he({client:e,oAuthCode:i,oAuthState:d});r(a)})),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 jo(e){return u(this,null,function*(){let t;_reactnative.Platform.OS==="android"&&(t=Yt(e));let r=yield ne({provider:"google-drive",client:e});return r!=null?r:yield t})}function we(c){return u(this,arguments,function*({client:e,recoveryInput:t,setWalletRecoveryCallbacks:r,setRecoveryFlowState:o,setWallet:n}){var s,d,i,a;try{let{provider:p,user:m}=yield e.embeddedWallet.setRecovery(t),v=p,b=_jssdkcore.getUserEmbeddedWallet.call(void 0, m);return n({status:"connected",provider:v,account:b}),(d=(s=r.current)==null?void 0:s.onSuccess)==null||d.call(s,v),o({status:"initial"}),v}catch(p){let m=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_set_recovery_error",error:p instanceof Error?p.message:"Error setting password on embedded wallet"});throw(a=(i=r.current)==null?void 0:i.onError)==null||a.call(i,m),o({status:"initial"}),m}})}function et(e){return e===void 0?{recoveryMethod:"privy"}:typeof e=="string"?{recoveryMethod:"user-passcode",password:e}:e.recoveryMethod==="user-passcode"?{recoveryMethod:"user-passcode",password:e.password}:e.recoveryMethod==="recovery-encryption-key"?{recoveryMethod:"recovery-encryption-key",recoveryKey:e.recoveryKey}:{recoveryMethod:e.recoveryMethod}}var tt=({client:e,appId:t,wallet:r,setWallet:o,setRecoveryFlowState:n,createWalletCallbacks:c,recoverWalletCallbacks:s,setWalletRecoveryCallbacks:d})=>{let i=N(),a=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, i),[i]),p=j(),m=_react.useCallback.call(void 0, l=>u(void 0,null,function*(){var I,Y;if(a)throw new (0, _jssdkcore.PrivyClientError)({error:"This user already has an embedded wallet",code:"embedded_wallet_already_exists"});let{user:g}=yield e.user.get(),{password:y,recoveryMethod:w,recoveryKey:_}=et(l),S,E,L;if(w==="google-drive"&&(S=yield ne({provider:w,client:e,onError:(I=c.current)==null?void 0:I.onError}),n({status:"creating-wallet"}),!S))return null;if(w==="icloud"){if(!g)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before creating a wallet with iCloud."});let{recoverySecret:D,iCloudRecordName:K}=yield Re({user:g,appId:t,client:e});E=D,L=K}return yield fe({client:e,setWallet:o,createWalletCallbacks:c,recoveryMethod:w,recoveryKey:_,setRecoveryFlowState:n,password:y,recoverySecretOverride:E,iCloudRecordNameOverride:L,solanaAccount:(Y=_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, g))!=null?Y:void 0})}),[e,a,i]),v=_react.useCallback.call(void 0, l=>u(void 0,null,function*(){var w;if(r.status!=="connected")throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"});if(!a)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});if(_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, i))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:l.recoveryMethod});let g,y;switch(l.recoveryMethod){case"privy":y=O(C({},l),{wallet:a});break;case"user-passcode":y=O(C({},l),{wallet:a,password:l.password});break;case"google-drive":if(g=yield ne({provider:l.recoveryMethod,client:e,onError:(w=d.current)==null?void 0:w.onError}),n({status:"upgrading-recovery"}),!g)return null;y={recoveryMethod:"google-drive",wallet:a,recoveryAccessToken:g};break;case"icloud":if(!i)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before backing up to iCloud."});let{recoverySecret:_,iCloudRecordName:S}=yield Re({user:i,appId:t,client:e});y={recoveryMethod:"icloud-native",recoverySecretOverride:_,iCloudRecordNameOverride:S,wallet:a};break;default:throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}return we({client:e,recoveryInput:y,setWalletRecoveryCallbacks:d,setRecoveryFlowState:n,setWallet:o})}),[e,a,r.status,i]),b=_react.useCallback.call(void 0, l=>u(void 0,null,function*(){return v({recoveryMethod:"user-passcode",password:l})}),[e,a,r.status]),f=_react.useCallback.call(void 0, l=>u(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:g,recoveryMethod:y,recoveryKey:w}=et(l),_,S;if(y==="google-drive"&&(_=yield ne({provider:y,client:e,onError:(E=s.current)==null?void 0:E.onError}),n({status:"recovering"}),!_))return null;if(y==="icloud"){if(!i)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before recovering via iCloud."});let{recoverySecret:L}=yield Ye({client:e,walletAddress:a.address});S=L}return ve({client:e,account:a,setWallet:o,recoverWalletCallbacks:s,recoveryMethod:y,setRecoveryFlowState:n,recoveryKey:w,password:g,recoveryToken:_,recoverySecretOverride:S})}),[e,a]),h=_react.useCallback.call(void 0, ()=>u(void 0,null,function*(){if(!a)throw o({status:"not-created",account:null}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});o(l=>l.status==="connected"?{status:"reconnecting",account:a}:{status:"connecting",account:a});try{let l=yield e.embeddedWallet.getProvider(a);return o({status:"connected",provider:l,account:a}),l}catch(l){throw _jssdkcore.errorIndicatesRecoveryIsNeeded.call(void 0, l)?(o({status:"needs-recovery",account:a}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):l instanceof Error?(o({status:"error",error:l.message,account:a}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:l.message})):(o({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(!i&&r.status!=="disconnected")return o({status:"disconnected",account:null});p&&h().catch(()=>{})},[p,i,a]),_react.useEffect.call(void 0, ()=>{r.status==="error"&&r.error.includes("User must be logged in")&&h()},[r.status]),{create:m,recover:f,setPassword:b,setRecovery:v,getProvider:h}};var ot=({client:e,isReady:t})=>{let r=N(),o=pe(s=>s==null?void 0:s.customAuth),[n,c]=_react.useState.call(void 0, {status:"initial"});return _react.useEffect.call(void 0, ()=>{(()=>u(void 0,null,function*(){if(!(o!=null&&o.enabled)){c({status:"not-enabled"});return}c({status:"loading"});let{getCustomAccessToken:d,isLoading:i}=o;if(!(!t||i))try{let a=yield d();if(!a&&r){yield e.auth.logout(),c({status:"done"});return}if(!a){c({status:"done"});return}if(r){c({status:"done"});return}let p=z();if(!(yield e.auth.customProvider.syncWithToken(a,{embedded:p==null?void 0:p.embedded}))){yield e.auth.logout(),c({status:"error",error:new (0, _jssdkcore.PrivyClientError)({error:"Failed to sync with custom auth provider",code:"third_party_auth_error"})});return}c({status:"done"})}catch(a){if(console.log("Error syncing with custom auth provider",a),c({status:"error",error:a}),r)throw yield e.auth.logout(),new (0, _jssdkcore.PrivyClientError)({error:"Third-party auth failed",code:"third_party_auth_error"})}}))()},[e,r,t,o==null?void 0:o.enabled,o==null?void 0:o.getCustomAccessToken,o==null?void 0:o.isLoading]),{customAuthState:n,customAuthStateIsSettled:n.status!=="loading"&&n.status!=="initial"}};var at=({client:e,isUserInitialized:t,oAuthState:r,oAuthCallbacks:o,setOAuthState:n,recoveryFlowState:c,oAuthStateRef:s})=>{let d=Z.useURL(),i=_react.useCallback.call(void 0, a=>{var m,v;let p=W(a);n({status:"error",error:p}),(v=(m=o.current).onError)==null||v.call(m,p)},[n]);return _react.useEffect.call(void 0, ()=>{function a(){return u(this,null,function*(){var b,f;if(!d||r.status!=="loading"||c.status!=="initial")return;let{queryParams:p}=Z.parse(d),{privy_oauth_state:m,privy_oauth_code:v}=p;if(!v||!m){n({status:"done"});return}try{let h,l;if(me())({user:h}=yield e.auth.oauth.linkWithCode(v,m));else{let y=z(),w=yield e.auth.oauth.loginWithCode(v,m,void 0,void 0,s.current.disableSignup?"no-signup":"login-or-sign-up",{embedded:y==null?void 0:y.embedded});h=w.user,l=!!w.is_new_user}return(f=(b=o.current).onSuccess)==null||f.call(b,h,l),s.current={},n({status:"done"}),yield Z.openURL(d.split("?")[0])}catch(h){s.current={},i(h)}})}_reactnative.Platform.OS==="android"&&t&&a()},[d,t])};var nt=({client:e,createWalletCallbacks:t,recoverWalletCallbacks:r,setWalletRecoveryCallbacks:o,recoveryFlowState:n,oAuthState:c,setRecoveryFlowState:s,setWallet:d,appStateVisible:i})=>{let a=ee.useURL(),p=N(),m=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedWallet.call(void 0, p),[p]),v=j(),b=_react.useCallback.call(void 0, f=>{var l,g,y,w;let h=W(f);n.status==="creating-wallet"?(g=(l=t.current).onError)==null||g.call(l,W(h)):(w=(y=r.current).onError)==null||w.call(y,W(h)),s({status:"initial"})},[n]);return _react.useEffect.call(void 0, ()=>{function f(){return u(this,null,function*(){var y;if(!a&&n.status!=="initial"&&i&&b(new Error("Recovery OAuth session failed")),!a||n.status==="initial"||c.status!=="initial"||!i||!v)return;let{queryParams:h}=ee.parse(a),{privy_oauth_state:l,privy_oauth_code:g}=h;if(!(!g||!l)){yield ee.openURL(a.split("?")[0]);try{let w=yield he({oAuthCode:g,oAuthState:l,client:e});if(n.status==="creating-wallet"){let _=(y=_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, p))!=null?y:void 0;yield fe({client:e,setWallet:d,createWalletCallbacks:t,recoveryMethod:"google-drive",setRecoveryFlowState:s,recoveryToken:w,solanaAccount:_})}else if(n.status==="upgrading-recovery"){if(!m)throw new Error("Embedded wallet not found");yield we({client:e,recoveryInput:{recoveryMethod:"google-drive",wallet:m,recoveryAccessToken:w},setWalletRecoveryCallbacks:o,setRecoveryFlowState:s,setWallet:d})}else yield ve({client:e,account:m,setWallet:d,recoverWalletCallbacks:r,recoveryMethod:"google-drive",setRecoveryFlowState:s,recoveryToken:w})}catch(w){b(w)}}})}_reactnative.Platform.OS==="android"&&f()},[a,n.status,i,v])};var it=({client:e,isUserInitialized:t,setIsUserInitialized:r,setError:o})=>{_react.useEffect.call(void 0, ()=>{t||(()=>u(void 0,null,function*(){try{yield e.initialize()}catch(c){o(c instanceof Error?c:new Error(String(c)))}try{yield e.user.get()}catch(c){}finally{r(!0)}}))()},[e,t,o,r])};var _expocrypto = require('expo-crypto');var st={name:"@privy-io/expo",version:"0.51.0",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"},"./ui":{require:"./dist/ui.js",import:"./dist/esm/ui.js",types:"./dist/ui.d.ts"}},main:"./dist/esm/index.js",source:"./src/index.ts",types:"./dist/index.d.ts",files:["dist/**/*","LICENSE","README.md"],scripts:{build:"tsup --clean --minify","check-types":"tsc --noEmit",clean:"rm -rf dist .turbo",dev:"tsup --watch",format:'eslint "src/**/*.{ts,tsx,js,jsx}" --fix',"generate-types":"tsup --dts-only",lint:'eslint "src/**/*.{ts,tsx,js,jsx}"',test:'jest --testMatch "**/test/**/*.test.{ts,tsx}"'},browserslist:["defaults","node >= 18","not op_mini all"],dependencies:{"@privy-io/js-sdk-core":"0.47.1","react-fast-compare":"^3.2.2",zustand:"^4.4.1"},devDependencies:{expo:"52.0.37","expo-apple-authentication":"7.1.3","expo-application":"6.0.2","expo-clipboard":"7.0.1","expo-crypto":"14.0.2",react:"^18.3.1","react-native":"0.77.1","@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":"^13.1.0","react-test-renderer":"^18.3.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":"52.0.5","lucide-react-native":"^0.474.0",tsup:"^6.2.3",typescript:"~5.5.3"},peerDependencies:{"@expo-google-fonts/inter":"*","@privy-io/expo-native-extensions":"0.0.4","expo-apple-authentication":"*","expo-application":"*","expo-clipboard":"*","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},"react-native-svg":{optional:!0},"expo-clipboard":{optional:!0},"react-native-qrcode-styled":{optional:!0},"react-native-safe-area-context":{optional:!0}},publishConfig:{access:"public"}};var lt=({appId:e,clientId:t,storage:r=be,supportedChains:o,baseUrl:n,logLevel:c})=>new (0, _jssdkcore2.default)({appId:e,clientId:t,supportedChains:o,storage:ct(r),sdkVersion:`expo:${st.version}`,nativeAppIdentifier:dt(),crypto:{digest:_expocrypto.digest},baseUrl:n,logLevel:c});var Se=_react.createContext.call(void 0, null),te;function Ya(e){return te?te.getAccessToken():e!=null&&e.strict?Promise.reject(new (0, _jssdkcore.PrivyClientError)({code:"attempted_to_read_storage_before_client_initialized",error:"Called `getAccessToken` before client initialized"})):(console.warn("Called `getAccessToken` before client initialized"),Promise.resolve(null))}var Xa=e=>{Sr();let[t,r]=_react.useState.call(void 0, _reactnative.AppState.currentState==="active");_react.useEffect.call(void 0, ()=>{let T=_reactnative.AppState.addEventListener("change",Ct=>{r(Ct==="active")});return()=>{T.remove()}},[]),_react.useEffect.call(void 0, ()=>Ne(e.config),[e.config]);let[o,n]=_react.useState.call(void 0, !1),[c,s]=_react.useState.call(void 0, null),[d,i]=_react.useState.call(void 0, !1),[a,p]=_react.useState.call(void 0, {status:"disconnected",account:null}),[m,v]=_react.useState.call(void 0, {status:"disconnected"}),[b,f]=_react.useState.call(void 0, {status:"initial"}),[h,l]=_react.useState.call(void 0, {status:"initial"}),g=_react.useRef.call(void 0, {}),[y,w]=_react.useState.call(void 0, {status:"initial"}),[_,S]=_react.useState.call(void 0, {status:"initial"}),[E,L]=_react.useState.call(void 0, {status:"initial"}),[I,Y]=_react.useState.call(void 0, {status:"initial"}),[D,K]=_react.useState.call(void 0, {status:"initial"}),V=_react.useRef.call(void 0, {}),F=_react.useRef.call(void 0, {}),P=_react.useRef.call(void 0, {}),q=_react.useRef.call(void 0, {}),oe=_react.useRef.call(void 0, {}),Ie=_react.useRef.call(void 0, {}),le=_react.useCallback.call(void 0, T=>{if(T){Ee(T),s(null);return}Ee(null),f({status:"initial"}),l({status:"initial"}),p({status:"disconnected",account:null})},[]),A=_react.useMemo.call(void 0, ()=>{let T=e.storage||be;return e.client?te=e.client:te=lt({appId:e.appId,clientId:e.clientId,supportedChains:e.supportedChains,storage:T,baseUrl:e.baseUrl,logLevel:e.logLevel}),te.setCallbacks({setUser:le,setIsReady:i}),te},[e.client,e.storage,e.appId,e.clientId,e.baseUrl,e.supportedChains,e.logLevel,le]),ht=_react.useCallback.call(void 0, ()=>(le(null),A.auth.logout()),[le,A]),wt=_react.useCallback.call(void 0, ()=>u(void 0,null,function*(){try{return yield A.getAccessToken()}catch(T){return console.debug(T),null}}),[A]),bt=_react.useCallback.call(void 0, ()=>A.getIdentityToken(),[A]);it({client:A,isUserInitialized:o,setIsUserInitialized:n,setError:s});let gt=tt({client:A,appId:e.appId,createWalletCallbacks:F,recoverWalletCallbacks:P,setWalletRecoveryCallbacks:q,setRecoveryFlowState:w,wallet:a,setWallet:p}),St=Je({client:A,createSolanaWalletCallbacks:oe,recoverSolanaWalletCallbacks:Ie,setSolanaRecoveryFlowState:S,solanaWallet:m,setSolanaWallet:v});at({client:A,isUserInitialized:o,oAuthState:h,setOAuthState:l,oAuthCallbacks:V,recoveryFlowState:y,oAuthStateRef:g}),nt({client:A,createWalletCallbacks:F,recoverWalletCallbacks:P,setWalletRecoveryCallbacks:q,recoveryFlowState:y,oAuthState:h,setRecoveryFlowState:w,setWallet:p,appStateVisible:t});let{customAuthStateIsSettled:_t}=ot({client:A,isReady:o}),Et=j();return _react2.default.createElement(_react2.default.Fragment,null,_react2.default.createElement(Se.Provider,{value:{client:A,isReady:Et&&o&&_t,error:c,logout:ht,getAccessToken:wt,getIdentityToken:bt,wallet:C(C({},a),gt),solanaWallet:C(C({},m),St),oAuthState:h,oAuthCallbacks:V,recoveryFlowState:y,setRecoveryFlowState:w,solanaRecoveryFlowState:_,setSolanaRecoveryFlowState:S,createWalletCallbacks:F,recoverWalletCallbacks:P,setWalletRecoveryCallbacks:q,createSolanaWalletCallbacks:oe,recoverSolanaWalletCallbacks:Ie,setOAuthState:l,siweState:E,setSiweState:L,otpState:b,setOtpState:f,passkeyState:I,setPasskeyState:Y,farcasterState:D,setFarcasterState:K,oAuthStateRef:g}},e.children),_react2.default.createElement(_reactnative.View,{style:{width:0,height:0,overflow:"hidden"}},_react2.default.createElement(De,{logLevel:e.logLevel,client:A,isClientReady:d})))},Sr=()=>{if(_react.useContext.call(void 0, Se))throw new (0, _jssdkcore.PrivyClientError)({code:"configuration_error",error:"Found multiple instances of PrivyProvider, ensure there is only one mounted in your application tree."})};var _expoappleauthentication = require('expo-apple-authentication'); var de = _interopRequireWildcard(_expoappleauthentication);function yt(e){return u(this,null,function*(){try{return yield de.signInAsync({state:e.state,requestedScopes:[de.AppleAuthenticationScope.EMAIL,de.AppleAuthenticationScope.FULL_NAME]})}catch(t){throw t instanceof Error&&"code"in t&&t.code==="ERR_REQUEST_CANCELED"?new (0, _jssdkcore.PrivyClientError)({error:"Apple login was cancelled",code:e.isLogin?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):t}})}var We=(e={})=>{let{oAuthState:t,setOAuthState:r,oAuthCallbacks:o,client:n,oAuthStateRef:c}=_react.useContext.call(void 0, Se),s=je(),d=e.action?e.action==="login":!s;_react.useEffect.call(void 0, ()=>{o.current={onSuccess:e.onSuccess,onError:e.onError}},[e.onSuccess,e.onError]);let i=_react.useCallback.call(void 0, p=>{var v;let m=W(p);return r({status:"error",error:m}),(v=e==null?void 0:e.onError)==null||v.call(e,m),m},[e==null?void 0:e.onError]);return{start:_react.useCallback.call(void 0, function(h){return u(this,arguments,function*({provider:m,redirectUri:v,isLegacyAppleIosBehaviorEnabled:b=!1,disableSignup:f}){var g,y,w;r({status:"loading"}),c.current={disableSignup:f};let l=me();try{if(l&&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(!l&&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:_}=yield n.auth.oauth.generateURL(m,re.createURL(v||"/")),S,E;if(_reactnative.Platform.OS==="ios"&&m==="apple"&&!b){let F=(g=new URL(_).searchParams.get("state"))!=null?g:"",P=yield yt({state:F,isLogin:d});if(!P.authorizationCode||!P.state)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:d?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(d){let q=z(),oe=yield n.auth.oauth.loginWithCode(P.authorizationCode,P.state,m,"raw",f?"no-signup":"login-or-sign-up",{embedded:q==null?void 0:q.embedded});S=oe.user,E=oe.is_new_user}else({user:S}=yield n.auth.oauth.linkWithCode(P.authorizationCode,P.state,m,"raw"));return(y=e==null?void 0:e.onSuccess)==null||y.call(e,S,E),r({status:"done"}),S!=null?S:void 0}let L=_reactnative.Platform.OS==="android"?_.replace("x.com","twitter.com"):_,I=yield ce.openAuthSessionAsync(L);if(_reactnative.Platform.OS==="android")return;if(I.type!=="success")throw[ce.WebBrowserResultType.CANCEL,ce.WebBrowserResultType.DISMISS].includes(I.type)?new (0, _jssdkcore.PrivyClientError)({error:"OAuth was cancelled",code:d?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):new (0, _jssdkcore.PrivyClientError)({error:"OAuth session failed",code:d?"failed_to_complete_login_with_oauth":"failed_to_complete_link_with_oauth"});let{queryParams:Y}=re.parse(I.url),{privy_oauth_state:D,privy_oauth_code:K}=Y;if(!K||!D)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:d?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(d){let V=z(),F=yield n.auth.oauth.loginWithCode(K,D,m,void 0,f?"no-signup":"login-or-sign-up",{embedded:V==null?void 0:V.embedded});S=F.user,E=F.is_new_user}else({user:S}=yield n.auth.oauth.linkWithCode(K,D,m));return(w=e==null?void 0:e.onSuccess)==null||w.call(e,S,E),yield re.openURL(I.url.split("?")[0]),r({status:"done"}),S!=null?S:void 0}catch(_){i(_)}})},[n,r,i]),state:t}};function pn(e){let{state:t,start:r}=We(O(C({},e),{action:"login"}));return{state:t,login:r}}function mn(e){let{state:t,start:r}=We(O(C({},e),{action:"link"}));return{state:t,link:r}}function yn(e){return We(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:()=>u(this,null,function*(){return[]})}}var be={get(e){return x.getItemAsync(e,{keychainAccessible:x.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},put(e,t){return x.setItemAsync(e,t,{keychainAccessible:x.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},del(e){return x.deleteItemAsync(e,{keychainAccessible:x.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},getKeys:()=>u(void 0,null,function*(){return[]})};var kr=e=>u(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(C({},r),{type:(o=r.type)!=null?o:"public-key",clientExtensionResults:{}})});var Pr=e=>u(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(C({},r),{type:(o=r.type)!=null?o:"public-key",clientExtensionResults:{}})});function Pn(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 On(e){var t,r,o,n;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:(n=e.allow_credentials)==null?void 0:n.map(({id:c,type:s,transports:d})=>({id:c,type:s,transports:d})),userVerification:e.user_verification}}function Wn(e){var t,r,o,n,c,s,d,i;return{rp:e.rp,user:{id:e.user.id,name:e.user.name,displayName:e.user.display_name},challenge:e.challenge,pubKeyCredParams:e.pub_key_cred_params,extensions:{hmacCreateSecret:(t=e.extensions)==null?void 0:t.hmac_create_secret,credProps:(o=(r=e.extensions)==null?void 0:r.cred_props)==null?void 0:o.rk,appid:(n=e.extensions)==null?void 0:n.app_id},attestation:e.attestation,excludeCredentials:e.exclude_credentials,authenticatorSelection:{authenticatorAttachment:(c=e.authenticator_selection)==null?void 0:c.authenticator_attachment,residentKey:(s=e.authenticator_selection)==null?void 0:s.resident_key,userVerification:(d=e.authenticator_selection)==null?void 0:d.user_verification,requireResidentKey:(i=e.authenticator_selection)==null?void 0:i.require_resident_key}}}exports.a = C; exports.b = O; exports.c = Or; exports.d = u; exports.e = z; exports.f = me; exports.g = Dr; exports.h = N; exports.i = je; exports.j = Me; exports.k = Ur; exports.l = Re; exports.m = Ye; exports.n = W; exports.o = Eo; exports.p = Po; exports.q = jo; exports.r = pn; exports.s = mn; exports.t = yn; exports.u = be; exports.v = lt; exports.w = Se; exports.x = Ya; exports.y = Xa; exports.z = kr; exports.A = Pr; exports.B = Pn; exports.C = On; exports.D = Wn;
@@ -0,0 +1 @@
1
+ import{A as he,B as ge,C as fe,a as U,b as de,d as l,e as b,f as g,h as x,j as ue,l as me,m as pe,n as f,o as A,p as F,q as T,w as u}from"./chunk-TSZL7MIU.js";import{useCallback as q,useContext as ze}from"react";import{PrivyClientError as Je}from"@privy-io/js-sdk-core";var It=e=>{let{client:t,setSiweState:s,siweState:n}=ze(u),o=q(a=>{var d;let c=f(a);return s({status:"error",error:c}),(d=e==null?void 0:e.onError)==null||d.call(e,c),c},[e==null?void 0:e.onError]),r=q(h=>l(void 0,[h],function*({wallet:a,from:{domain:c,uri:d}}){var m;try{s({status:"generating-message"});let p=yield t.auth.siwe.init(a,c,d);return s({status:"awaiting-signature"}),(m=e==null?void 0:e.onGenerateMessage)==null||m.call(e,p.message),p.message}catch(p){throw o(p)}}),[t,o,e==null?void 0:e.onGenerateMessage]),i=q(d=>l(void 0,[d],function*({signature:a,messageOverride:c}){var h;try{if(!g())throw new Je({code:"attempted_link_siwe_before_logged_in",error:"Must be logged in to link a wallet, Use `useLoginWithSiwe` to login with a wallet"});s({status:"submitting-signature"});let{user:p}=yield t.auth.siwe.linkWithSiwe(a,void 0,c);return s({status:"done"}),(h=e==null?void 0:e.onSuccess)==null||h.call(e,p),p}catch(m){throw o(m)}}),[t,o,e==null?void 0:e.onSuccess]);return{generateSiweMessage:r,linkWithSiwe:i,state:n}};import{useCallback as $,useContext as Qe}from"react";import{PrivyClientError as Xe}from"@privy-io/js-sdk-core";var Vt=e=>{let{client:t,setSiweState:s,siweState:n}=Qe(u),o=$(a=>{var d;let c=f(a);return s({status:"error",error:c}),(d=e==null?void 0:e.onError)==null||d.call(e,c),c},[e==null?void 0:e.onError]),r=$(h=>l(void 0,[h],function*({wallet:a,from:{domain:c,uri:d}}){var m;try{s({status:"generating-message"});let p=yield t.auth.siwe.init(a,c,d);return s({status:"awaiting-signature"}),(m=e==null?void 0:e.onGenerateMessage)==null||m.call(e,p.message),p.message}catch(p){throw o(p)}}),[t,o,e==null?void 0:e.onGenerateMessage]);return{loginWithSiwe:$(h=>l(void 0,[h],function*({signature:a,messageOverride:c,disableSignup:d}){var m;try{if(g())throw new Xe({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"});s({status:"submitting-signature"});let y=b(),w=yield t.auth.siwe.loginWithSiwe(a,void 0,c,d?"no-signup":"login-or-sign-up",{embedded:y==null?void 0:y.embedded});return s({status:"done"}),(m=e==null?void 0:e.onSuccess)==null||m.call(e,w.user,w.is_new_user),w.user}catch(p){throw o(p)}}),[t,o,e==null?void 0:e.onSuccess]),generateSiweMessage:r,state:n}};import{useContext as Ye}from"react";var W=()=>{let{client:e}=Ye(u);return e};import{useCallback as ye}from"react";import{createSiwsMessage as Ze,PrivyClientError as er}from"@privy-io/js-sdk-core";var eo=()=>{let e=W(),t=ye(i=>l(void 0,[i],function*({wallet:{address:n},from:{domain:o,uri:r}}){try{let{nonce:a}=yield e.auth.siws.fetchNonce({address:n});return{message:Ze({address:n,domain:o,uri:r,nonce:a})}}catch(a){throw f(a)}}),[e]),s=ye(a=>l(void 0,[a],function*({signature:n,message:o,wallet:{walletClientType:r,connectorType:i}={}}){try{if(!g())throw new er({code:"attempted_link_siws_before_logged_in",error:"Must be logged in to link a wallet, Use `useLoginWithSiws` to login with a wallet"});let{user:d}=yield e.auth.siws.link({signature:n,message:o,walletClientType:r,connectorType:i});return d}catch(c){throw f(c)}}),[e]);return{generateMessage:t,link:s}};import{useCallback as we}from"react";import{createSiwsMessage as rr,PrivyClientError as tr}from"@privy-io/js-sdk-core";var co=()=>{let e=W(),t=we(i=>l(void 0,[i],function*({wallet:{address:n},from:{domain:o,uri:r}}){try{let{nonce:a}=yield e.auth.siws.fetchNonce({address:n});return{message:rr({address:n,domain:o,uri:r,nonce:a})}}catch(a){throw f(a)}}),[e]),s=we(c=>l(void 0,[c],function*({signature:n,message:o,wallet:{walletClientType:r,connectorType:i}={},disableSignup:a}){try{if(g())throw new tr({code:"attempted_login_with_siws_while_already_logged_in",error:"Already logged in, use `useLinkWithSiws` if you are trying to link a wallet to an existing account"});return(yield e.auth.siws.login({signature:n,message:o,walletClientType:r,connectorType:i,mode:a?"no-signup":"login-or-sign-up"})).user}catch(d){throw f(d)}}),[e]);return{generateMessage:t,login:s}};import{useCallback as ve,useContext as or}from"react";import{PrivyClientError as nr}from"@privy-io/js-sdk-core";var yo=e=>{let{client:t}=or(u),s=ve(o=>{var i;let r=f(o);return(i=e==null?void 0:e.onError)==null||i.call(e,r),r},[e==null?void 0:e.onError]);return{unlinkWallet:ve(r=>l(void 0,[r],function*({address:o}){var i;try{if(!g())throw new nr({code:"attempted_unlink_siwe_before_logged_in",error:"Must be logged in to unlink a wallet, Use `useLoginWithSiwe` to login with a wallet"});let{user:c}=yield t.auth.siwe.unlinkWallet(o);return(i=e==null?void 0:e.onSuccess)==null||i.call(e,c),c}catch(a){throw s(a)}}),[t,s,e==null?void 0:e.onSuccess])}};import{useCallback as z,useContext as ir,useState as sr}from"react";import{PrivyClientError as ke}from"@privy-io/js-sdk-core";var Po=e=>{let[t,s]=sr(""),{client:n,otpState:o,setOtpState:r}=ir(u),i=z(d=>{var m;let h=f(d);return r({status:"error",error:h}),(m=e==null?void 0:e.onError)==null||m.call(e,h),h},[e,r]),a=z(h=>l(void 0,[h],function*({email:d}){var m;s(d);try{r({status:"sending-code"});let p=yield n.auth.email.sendCode(d);return r({status:"awaiting-code-input"}),(m=e==null?void 0:e.onSendCodeSuccess)==null||m.call(e,{email:d}),p}catch(p){throw i(p)}}),[n,i,e,r]),c=z(m=>l(void 0,[m],function*({code:d,email:h}){var p;try{if(!g())throw new ke({code:"attempted_link_email_before_logged_in",error:"Must be logged in to link an email, Use `useLoginWithEmail` to login with email"});let w=h||t;if(!w)throw new ke({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid email before calling `linkWithCode`"});r({status:"submitting-code"});let{user:v}=yield n.auth.email.linkWithCode(w,d);return r({status:"done"}),(p=e==null?void 0:e.onLinkSuccess)==null||p.call(e,v),v}catch(y){throw i(y)}}),[t,r,n,e,i]);return{sendCode:a,linkWithCode:c,state:o}};import{useCallback as J,useContext as ar,useState as cr}from"react";import{PrivyClientError as Ce}from"@privy-io/js-sdk-core";var Io=e=>{let[t,s]=cr(""),{client:n,otpState:o,setOtpState:r}=ar(u),i=J(d=>{var m;let h=f(d);return r({status:"error",error:h}),(m=e==null?void 0:e.onError)==null||m.call(e,h),h},[e,r]),a=J(h=>l(void 0,[h],function*({email:d}){var m;s(d);try{r({status:"sending-code"});let p=yield n.auth.email.sendCode(d);return r({status:"awaiting-code-input"}),(m=e==null?void 0:e.onSendCodeSuccess)==null||m.call(e,{email:d}),p}catch(p){throw i(p)}}),[n,i,e,r]),c=J(p=>l(void 0,[p],function*({code:d,email:h,disableSignup:m}){var y;try{if(g())throw new Ce({code:"attempted_login_with_email_while_already_logged_in",error:"Already logged in, use `useLinkWithEmail` if you are trying to link an email to an existing account"});let v=h||t;if(!v)throw new Ce({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid email before calling `loginWithCode`"});r({status:"submitting-code"});let C=b(),k=yield n.auth.email.loginWithCode(v,d,m?"no-signup":"login-or-sign-up",{embedded:C==null?void 0:C.embedded});return r({status:"done"}),(y=e==null?void 0:e.onLoginSuccess)==null||y.call(e,k.user,k.is_new_user),k==null?void 0:k.user}catch(w){throw i(w)}}),[t,r,n,e,i]);return{sendCode:a,loginWithCode:c,state:o}};import{useCallback as Q,useContext as lr,useState as dr}from"react";import{PrivyClientError as be}from"@privy-io/js-sdk-core";var Go=e=>{let[t,s]=dr(""),{client:n,otpState:o,setOtpState:r}=lr(u),i=Q(d=>{var m;let h=f(d);return r({status:"error",error:h}),(m=e==null?void 0:e.onError)==null||m.call(e,h),h},[e,r]),a=Q(h=>l(void 0,[h],function*({phone:d}){var m;s(d);try{r({status:"sending-code"});let p=yield n.auth.phone.sendCode(d);return r({status:"awaiting-code-input"}),(m=e==null?void 0:e.onSendCodeSuccess)==null||m.call(e,{phone:d}),p}catch(p){throw i(p)}}),[n,i,e,r]),c=Q(m=>l(void 0,[m],function*({code:d,phone:h}){var p;try{if(!g())throw new be({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(!(h||t))throw new be({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid phone number before calling `linkWithCode`"});r({status:"submitting-code"});let{user:v}=yield n.auth.phone.linkWithCode(h||t,d);return r({status:"done"}),(p=e==null?void 0:e.onLinkSuccess)==null||p.call(e,v),v}catch(y){throw i(y)}}),[t,r,n,e,i]);return{sendCode:a,linkWithCode:c,state:o}};import{useCallback as X,useContext as ur,useState as mr}from"react";import{PrivyClientError as Se}from"@privy-io/js-sdk-core";var Xo=e=>{let[t,s]=mr(""),{client:n,otpState:o,setOtpState:r}=ur(u),i=X(d=>{var m;let h=f(d);return r({status:"error",error:h}),(m=e==null?void 0:e.onError)==null||m.call(e,h),h},[e,r]),a=X(h=>l(void 0,[h],function*({phone:d}){var m;s(d);try{r({status:"sending-code"});let p=yield n.auth.phone.sendCode(d);return r({status:"awaiting-code-input"}),(m=e==null?void 0:e.onSendCodeSuccess)==null||m.call(e,{phone:d}),p}catch(p){throw i(p)}}),[n,i,e,r]),c=X(p=>l(void 0,[p],function*({code:d,phone:h,disableSignup:m}){var y;try{if(g())throw new Se({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(!(h||t))throw new Se({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid phone number before calling `loginWithCode`"});r({status:"submitting-code"});let C=b(),k=yield n.auth.phone.loginWithCode(h||t,d,m?"no-signup":"login-or-sign-up",{embedded:C==null?void 0:C.embedded});return r({status:"done"}),(y=e==null?void 0:e.onLoginSuccess)==null||y.call(e,k.user,k.is_new_user),k==null?void 0:k.user}catch(w){throw i(w)}}),[t,r,n,e,i]);return{sendCode:a,loginWithCode:c,state:o}};import*as H from"expo-linking";import{useCallback as Y,useContext as pr,useRef as hr}from"react";import{PrivyClientError as O}from"@privy-io/js-sdk-core";var sn=e=>{let{appState:t,getCurrentAppState:s}=F(),{client:n,farcasterState:o,setFarcasterState:r}=pr(u),i=hr(!1),a=Y(h=>{var p;let m=f(h);return r({status:"error",error:m}),(p=e==null?void 0:e.onError)==null||p.call(e,m),m},[e==null?void 0:e.onError,r]),c=Y(()=>{i.current=!0},[]);return{linkWithFarcaster:Y((y,...w)=>l(void 0,[y,...w],function*({relyingParty:h,redirectUrl:m},p={pollAttempts:10,pollIntervalMs:1e3}){var v;try{let C=g();if(i.current=!1,!C)throw new O({code:"attempted_link_farcaster_before_logged_in",error:"Must be logged in to link a Farcaster account."});r({status:"generating-uri"});let{connect_uri:k,channel_token:E}=yield n.auth.farcaster.initializeAuth({relyingParty:h,redirectUrl:H.createURL(m!=null?m:"/")});if(!k)throw new O({code:"failed_to_generate_farcaster_uri",error:"Failed to generate farcaster uri"});if(!E)throw new O({code:"failed_to_generate_farcaster_channel_token",error:"Failed to generate farcaster channel token"});yield H.openURL(k),r({status:"polling-status"});let _=0;for(;_<p.pollAttempts;){if(i.current)throw new O({code:"farcaster_polling_canceled",error:"Farcaster polling canceled"});if(t.current!=="active"&&s()!=="active"){yield A(p.pollIntervalMs);continue}let L=yield n.auth.farcaster.getFarcasterStatus({channel_token:E});if(L.state==="completed"){r({status:"submitting-token"});let{user:M}=yield n.auth.farcaster.link(U({channel_token:E},L));return r({status:"done"}),(v=e==null?void 0:e.onSuccess)==null||v.call(e,M),M}_++,yield A(p.pollIntervalMs)}throw new O({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(C){throw a(C)}}),[n,e==null?void 0:e.onSuccess,a,r]),state:o,cancel:c}};import{useCallback as We,useContext as gr}from"react";var mn=e=>{let{client:t}=gr(u),s=We(o=>{var i;let r=f(o);return(i=e==null?void 0:e.onError)==null||i.call(e,r),r},[e==null?void 0:e.onError]);return{unlinkFarcaster:We(r=>l(void 0,[r],function*({fid:o}){var i;try{let{user:a}=yield t.auth.farcaster.unlink({fid:o});return(i=e==null?void 0:e.onSuccess)==null||i.call(e,a),a}catch(a){throw s(a)}}),[t,e==null?void 0:e.onSuccess,s])}};import*as N from"expo-linking";import{useCallback as re,useContext as fr,useRef as yr}from"react";import{PrivyClientError as I}from"@privy-io/js-sdk-core";var Cn=e=>{let{appState:t,getCurrentAppState:s}=F(),{client:n,farcasterState:o,setFarcasterState:r}=fr(u),i=yr(!1),a=re(h=>{var p;let m=f(h);return r({status:"error",error:m}),(p=e==null?void 0:e.onError)==null||p.call(e,m),m},[e==null?void 0:e.onError,r]),c=re(()=>{i.current=!0},[]);return{loginWithFarcaster:re((w,...v)=>l(void 0,[w,...v],function*({relyingParty:h,redirectUrl:m,disableSignup:p},y={pollAttempts:10,pollIntervalMs:1e3}){var C;try{if(i.current=!1,g())throw new I({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"});r({status:"generating-uri"});let{connect_uri:E,channel_token:_}=yield n.auth.farcaster.initializeAuth({relyingParty:h,redirectUrl:N.createURL(m!=null?m:"/")});if(!E)throw new I({code:"failed_to_generate_farcaster_uri",error:"Failed to generate farcaster uri"});if(!_)throw new I({code:"failed_to_generate_farcaster_channel_token",error:"Failed to generate farcaster channel token"});yield N.openURL(E),r({status:"polling-status"});let L=0;for(;L<y.pollAttempts;){if(i.current)throw new I({code:"farcaster_polling_canceled",error:"Farcaster polling canceled"});if(t.current!=="active"&&s()!=="active"){yield A(y.pollIntervalMs);continue}let M=yield n.auth.farcaster.getFarcasterStatus({channel_token:_});if(M.state==="completed"){r({status:"submitting-token"});let K=b(),j=yield n.auth.farcaster.authenticate(U({channel_token:_,mode:p?"no-signup":"login-or-sign-up"},M),{embedded:K==null?void 0:K.embedded});return r({status:"done"}),(C=e==null?void 0:e.onSuccess)==null||C.call(e,j.user,j.is_new_user),j.user}L++,yield A(y.pollIntervalMs)}throw new I({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(k){throw a(k)}}),[n,a,e==null?void 0:e.onSuccess,r,t]),state:o,cancel:c}};import{useCallback as Pe,useContext as wr}from"react";import{create as vr}from"zustand";import{PrivyClientError as kr}from"@privy-io/js-sdk-core";var te=vr(()=>({status:"initial"})),P=e=>te.setState(e,!0),Cr=te.getState,Ln=()=>{let{client:e}=wr(u),t=te(),s=Pe(()=>l(void 0,null,function*(){try{P({status:"fetching-nonce"});let o=yield e.auth.farcasterV2.initializeAuth();return P({status:"awaiting-signature"}),o}catch(o){let r=f(o);throw P({status:"initial",error:r}),r}}),[e]),n=Pe(o=>l(void 0,null,function*(){let r=Cr().status;try{if(g()){let d=new kr({code:"attempted_login_with_farcaster_while_already_logged_in",error:"Already logged in, use a link helper if you are trying to link farcaster to an existing account"});throw P({status:r,error:d}),d}P({status:"submitting-signature"});let a=b(),c=yield e.auth.farcasterV2.authenticate(o,{embedded:a==null?void 0:a.embedded});return P({status:"done"}),setTimeout(()=>P({status:"initial"}),1500),{user:c.user}}catch(i){let a=f(i);throw P({status:r,error:a}),a}}),[e]);return{init:s,login:n,state:t}};import{useCallback as Ee,useContext as br}from"react";var Tn=e=>{let{client:t}=br(u),s=Ee(o=>{var i;let r=f(o);return(i=e==null?void 0:e.onError)==null||i.call(e,r),r},[e==null?void 0:e.onError]);return{unlinkOAuth:Ee(i=>l(void 0,[i],function*({provider:o,subject:r}){var a;try{let{user:c}=yield t.auth.oauth.unlink(o,r);return(a=e==null?void 0:e.onSuccess)==null||a.call(e,c),c}catch(c){throw s(c)}}),[t,e==null?void 0:e.onSuccess,s])}};import{useContext as Sr,useEffect as Wr,useRef as Pr}from"react";var Gn=e=>{let{client:t}=Sr(u),s=Pr(e.onOAuthTokenGrant);s.current=e.onOAuthTokenGrant,Wr(()=>{let{unsubscribe:n}=t.addOAuthTokensListener(o=>{s.current(o)});return n},[t])};import{useContext as Er,useMemo as _r}from"react";import{delegatedActions as _e}from"@privy-io/js-sdk-core";var $n=()=>{let{client:e}=Er(u);return _r(()=>({delegateWallet:_e.delegateWallet(e),revokeWallets:_e.revokeWallets(e)}),[e])};import{useContext as Ur,useMemo as xr}from"react";import{PrivyClientError as xe}from"@privy-io/js-sdk-core";var Zn=()=>{let{client:e}=Ur(u);return xr(()=>({sendCode(n){return l(this,arguments,function*({newEmailAddress:s}){Ue(),yield e.auth.email.sendCode(s)})},updateEmail(o){return l(this,arguments,function*({newEmailAddress:s,code:n}){let{address:r}=Ue(),{user:i}=yield e.auth.email.updateEmail({oldEmailAddress:r,newEmailAddress:s,code:n});return i})}}),[e])};function Ue(){let t=Ar().linked_accounts.find(s=>s.type==="email");if(!t)throw new xe({code:"attempted_update_email_without_a_linked_email",error:"Must have a linked email account already to update an email address. Use `useLinkEmail` to link an email account."});return t}function Ar(){let e=g();if(!e)throw new xe({code:"attempted_update_before_logged_in",error:"Must be logged in to update a user profile."});return e}import{useContext as Lr,useMemo as Mr}from"react";import{PrivyClientError as Le}from"@privy-io/js-sdk-core";var si=()=>{let{client:e}=Lr(u);return Mr(()=>({sendCode(n){return l(this,arguments,function*({newPhoneNumber:s}){Ae(),yield e.auth.phone.sendCode(s)})},updatePhone(o){return l(this,arguments,function*({newPhoneNumber:s,code:n}){let{phoneNumber:r}=Ae(),{user:i}=yield e.auth.phone.updatePhone({oldPhoneNumber:r,newPhoneNumber:s,code:n});return i})}}),[e])};function Ae(){let t=Or().linked_accounts.find(s=>s.type==="phone");if(!t)throw new Le({code:"attempted_update_phone_without_a_linked_phone",error:"Must have a linked phone account already to update a phone number. Use `useLinkSMS` to link a phone number."});return t}function Or(){let e=g();if(!e)throw new Le({code:"attempted_update_before_logged_in",error:"Must be logged in to update a user profile."});return e}import*as Re from"expo-linking";import{useCallback as Tr,useContext as Hr,useMemo as Nr}from"react";import{crossApp as Dr,PrivyClientError as Br}from"@privy-io/js-sdk-core";import*as D from"expo-linking";import*as Oe from"expo-web-browser";import{Platform as Me}from"react-native";import{PrivyClientError as Ie}from"@privy-io/js-sdk-core";var S=e=>l(void 0,null,function*(){let t;Me.OS==="android"&&(t=Ir());let s=yield Oe.openAuthSessionAsync(e),n;if(Me.OS==="android")n=yield t;else{if(s.type!=="success")throw new Ie({code:"oauth_session_failed",error:"OAuth session failed"});n=s.url}return Rr(n)});function Ir(){let e;return new Promise((t,s)=>{e=D.addEventListener("url",({url:n})=>{n&&t(n)}),setTimeout(()=>{s(new Ie({code:"oauth_session_timeout",error:"OAuth session timed out"}))},Fr)}).finally(()=>{e==null||e.remove()})}function Rr(e){let{queryParams:t}=D.parse(e);return t}var Fr=2*60*1e3;var wi=()=>{let{client:e}=Hr(u),t=Nr(()=>Dr.loginWithCrossAppAuth({client:e,openAuthSession:S}),[e]);return{loginWithCrossApp:Tr(r=>l(void 0,[r],function*({appId:n,redirectUri:o}){if(g())throw new Br({code:"attempted_login_with_cross_app_while_already_logged_in",error:"Already logged in, use `linkCrossAppAccount` if you are trying to link a cross app account to an existing account"});let{user:a}=yield t({providerAppId:n,redirectUrl:Re.createURL(o||"/")});return{user:a}}),[t])}};import*as Fe from"expo-linking";import{useCallback as Gr,useContext as Vr,useMemo as Kr}from"react";import{crossApp as jr,PrivyClientError as qr}from"@privy-io/js-sdk-core";var Ei=()=>{let{client:e}=Vr(u),t=Kr(()=>jr.linkWithCrossAppAuth({client:e,openAuthSession:S}),[e]);return{linkWithCrossApp:Gr(r=>l(void 0,[r],function*({appId:n,redirectUri:o}){if(!g())throw new qr({code:"attempted_link_cross_app_before_logged_in",error:"Must be logged in to link a cross app account, Use `loginWithCrossAppAccount` to login with cross app"});return{user:yield t({providerAppId:n,redirectUrl:Fe.createURL(o||"/")})}}),[t])}};import*as He from"expo-linking";import{useContext as $r,useMemo as Te}from"react";import{crossApp as zr}from"@privy-io/js-sdk-core";var Ii=()=>{let{client:e}=$r(u),t=Te(()=>zr.wallet.signMessage({client:e,openAuthSession:S}),[e]);return Te(()=>({signMessage:({address:s,message:n,redirectUri:o="/"})=>t({user:g(),address:s,message:n,redirectUrl:He.createURL(o)})}),[t])};import*as De from"expo-linking";import{useContext as Jr,useMemo as Ne}from"react";import{crossApp as Qr}from"@privy-io/js-sdk-core";var Bi=()=>{let{client:e}=Jr(u),t=Ne(()=>Qr.wallet.signTypedData({client:e,openAuthSession:S}),[e]);return Ne(()=>({signTypedData:({address:s,typedData:n,redirectUri:o="/"})=>t({user:g(),address:s,typedData:n,redirectUrl:De.createURL(o)})}),[t])};import*as Ge from"expo-linking";import{useContext as Xr,useMemo as Be}from"react";import{crossApp as Yr}from"@privy-io/js-sdk-core";var zi=()=>{let{client:e}=Xr(u),t=Be(()=>Yr.wallet.sendTransaction({client:e,openAuthSession:S}),[e]);return Be(()=>({sendTransaction:({address:s,transaction:n,redirectUri:o="/"})=>t({user:g(),address:s,transaction:n,redirectUrl:Ge.createURL(o)})}),[t])};import{useCallback as Zr,useContext as et}from"react";import{getUserEmbeddedEthereumWallet as rt,getUserEmbeddedSolanaWallet as tt,PrivyClientError as R,throwIfInvalidRecoveryUpgradePath as ot}from"@privy-io/js-sdk-core";var ts=()=>{let{client:e}=et(u);return{setRecovery:Zr(s=>l(void 0,null,function*(){var a;let n=g(),o=e.app.appId;if(!n)throw new R({code:"embedded_wallet_recovery_error",error:"User must be loaded before attempting to modify the recovery method."});let r=(a=rt(n))!=null?a:tt(n);if(!r)throw new R({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});try{r.chain_type==="ethereum"?yield e.embeddedWallet.getProvider(r):r.chain_type==="solana"&&(yield e.embeddedWallet.getSolanaProvider(r,r.address,"solana-address-verifier"))}catch(c){throw new R({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"})}ot({currentRecoveryMethod:r.recovery_method,upgradeToRecoveryMethod:s.recoveryMethod});let i=yield nt({appId:o,client:e,user:n,primaryAccount:r,recoveryParams:s});try{let{user:c}=yield e.embeddedWallet.setRecovery(i);return{user:c}}catch(c){throw new R({code:"embedded_wallet_set_recovery_error",error:c instanceof Error?c.message:"Error setting password on embedded wallet"})}}),[e])}},nt=r=>l(void 0,[r],function*({appId:e,client:t,user:s,primaryAccount:n,recoveryParams:o}){switch(o.recoveryMethod){case"privy":return{recoveryMethod:"privy",wallet:n};case"user-passcode":return de(U({},o),{wallet:n});case"google-drive":{let i=yield T(t);return{recoveryMethod:"google-drive",wallet:n,recoveryAccessToken:i}}case"icloud":{let{recoverySecret:i,iCloudRecordName:a}=yield me({appId:e,client:t,user:s});return{recoveryMethod:"icloud-native",recoverySecretOverride:i,iCloudRecordNameOverride:a,wallet:n}}case"recovery-encryption-key":return{recoveryMethod:"recovery-encryption-key",wallet:n,recoveryKey:o.recoveryKey};default:throw new R({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}});import{useCallback as it,useContext as st}from"react";import{getUserEmbeddedEthereumWallet as at,getUserEmbeddedSolanaWallet as ct,PrivyClientError as B}from"@privy-io/js-sdk-core";var us=()=>{let{client:e}=st(u);return{recover:it(s=>l(void 0,null,function*(){var d;let n=g();if(!n)throw new B({code:"embedded_wallet_recovery_error",error:"User must be loaded before attempting to modify the recovery method."});let o=(d=at(n))!=null?d:ct(n);if(!o)throw new B({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let r,i,a,c;switch(s.recoveryMethod){case"user-passcode":i=s.password;break;case"google-drive":a=yield T(e);break;case"icloud":let{recoverySecret:h}=yield pe({client:e,walletAddress:o.address,chainType:o.chain_type});c=h;break;case"recovery-encryption-key":r=s.recoveryKey;break;case"privy":break;default:throw new B({code:"unsupported_recovery_method",error:`Unsupported recovery options ${s}`})}try{o.chain_type==="ethereum"?yield e.embeddedWallet.getProvider(o,i,a,c,r):o.chain_type==="solana"&&(yield e.embeddedWallet.getSolanaProvider(o,o.address,"solana-address-verifier",i,a,c))}catch(h){throw new B({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"})}}),[e])}};import{useContext as lt,useEffect as oe}from"react";var ne=(e={})=>{let{wallet:t,createWalletCallbacks:s,recoverWalletCallbacks:n,setWalletRecoveryCallbacks:o}=lt(u),{onCreateWalletSuccess:r,onCreateWalletError:i,onRecoverWalletError:a,onRecoverWalletSuccess:c,onSetWalletRecoverySuccess:d,onSetWalletRecoveryError:h}=e;return oe(()=>{s.current={onSuccess:r,onError:i}},[r,i]),oe(()=>{n.current={onSuccess:c,onError:a}},[c,a]),oe(()=>{o.current={onSuccess:d,onError:h}},[c,a]),t};import{useEffect as dt}from"react";var vs=({onStateChange:e})=>{let t=ne();return dt(()=>{e(t)},[t])};import{useContext as ut}from"react";var Ss=()=>{let{getIdentityToken:e}=ut(u);return{getIdentityToken:e}};import{useCallback as Ve,useContext as mt}from"react";import{PrivyClientError as pt}from"@privy-io/js-sdk-core";var Ls=e=>{let{client:t}=mt(u),s=Ve(o=>{var i;let r=f(o);return(i=e==null?void 0:e.onError)==null||i.call(e,r),r},[e==null?void 0:e.onError]);return{create:Ve(()=>l(void 0,null,function*(){var o;try{if(g())throw new pt({code:"attempted_to_create_guest_account_for_logged_in_user",error:"Already logged in, you cannot create a guest account"});let i=b(),a=yield t.auth.guest.create({embedded:i==null?void 0:i.embedded});return(o=e==null?void 0:e.onSuccess)==null||o.call(e,a.user,a.is_new_user),a.user}catch(r){throw s(r)}}),[t,s,e==null?void 0:e.onSuccess])}};import{useContext as ht,useEffect as gt}from"react";function Ts({onMfaRequired:e}){let{client:t}=ht(u);gt(()=>{function s(){return l(this,null,function*(){var o;let n=g();yield e((o=n==null?void 0:n.mfa_methods.map(({type:r})=>r))!=null?o:[])})}return t.mfaPromises.on("mfaRequired",s),()=>{t.mfaPromises.off("mfaRequired",s)}},[t,e])}import{useCallback as G,useContext as ft}from"react";import{PrivyClientError as V}from"@privy-io/js-sdk-core";function js(){let{client:e}=ft(u),t=G(r=>l(this,null,function*(){var i,a;switch(r.method){case"sms":yield e.mfa.sms.sendCode({action:"verify"});return;case"passkey":let{options:c}=yield e.mfa.passkey.generateAuthenticationOptions({relying_party:r.relyingParty||((a=(i=b())==null?void 0:i.mfa)==null?void 0:a.relyingParty)});return fe(c);case"totp":return;default:throw new Error(`Unsupported MFA method: ${r.mfaMethod}`)}}),[e]),s=G(r=>l(this,null,function*(){var i,a,c,d,h,m,p;switch(r.method){case"totp":case"sms":if(typeof r.mfaCode!="string")throw new V({code:"invalid_mfa_code",error:"Invalid MFA code"});(c=e.mfaPromises.rootPromise.current)==null||c.resolve({mfaMethod:r.method,mfaCode:r.mfaCode,relyingParty:r.relyingParty||((a=(i=b())==null?void 0:i.mfa)==null?void 0:a.relyingParty)||""}),yield new Promise((C,k)=>{e.mfaPromises.submitPromise.current={resolve:C,reject:k}});break;case"passkey":if(typeof r.mfaCode=="string")throw new V({code:"invalid_passkey_response",error:"Invalid authenticator response"});let y=yield he(r.mfaCode),w=ge(y);(m=e.mfaPromises.rootPromise.current)==null||m.resolve({mfaMethod:r.method,relyingParty:r.relyingParty||((h=(d=b())==null?void 0:d.mfa)==null?void 0:h.relyingParty)||"",mfaCode:w}),yield new Promise((C,k)=>{e.mfaPromises.submitPromise.current={resolve:C,reject:k}});break;default:let v=new V({code:"unsupported_mfa_method",error:"Unsupported MFA method"});throw(p=e.mfaPromises.rootPromise.current)==null||p.reject(v),v}}),[e]),n=G(()=>l(this,null,function*(){yield e.mfa.verifyMfa()}),[e]),o=G(()=>{var r;(r=e.mfaPromises.rootPromise.current)==null||r.reject(new V({code:"mfa_canceled",error:"MFA canceled"}))},[e]);return{init:t,submit:s,prompt:n,cancel:o}}import{useCallback as ie,useContext as yt}from"react";function Qs(){let{client:e}=yt(u),t=ie(o=>l(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.method}`)}}),[e]),s=ie(o=>l(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.method}`)}}),[e]),n=ie(o=>l(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:[],removeForLogin:o.removeForLogin});return;default:throw new Error(`Unsupported MFA method: ${o.method}`)}}),[e]);return{initMfaEnrollment:t,submitMfaEnrollment:s,unenrollMfa:n}}import{useCallback as wt,useMemo as vt}from"react";import{getAllUserEmbeddedEthereumWallets as ae,getEntropyDetailsFromUser as Ke,getUserEmbeddedSolanaWallet as kt,PrivyClientError as je}from"@privy-io/js-sdk-core";var Ct=()=>{let e=x(),t=W(),s=vt(()=>{let r=ae(e).map(i=>{let a=Ke(e,i);return a?{account:i,entropy:a}:null});return r.some(i=>i===null)?[]:r.filter(i=>i!==null).map(({account:i,entropy:{entropyId:a,entropyIdVerifier:c}})=>({address:i.address,walletIndex:i.wallet_index,chainType:i.chain_type,getProvider:()=>t.embeddedWallet.getEthereumProvider({wallet:i,entropyId:a,entropyIdVerifier:c,onNeedsRecovery:d=>l(void 0,null,function*(){var h;yield(h=ue())==null?void 0:h(d)})})}))},[t,e]),n=wt((...r)=>l(void 0,[...r],function*({createAdditional:o=!1}={}){let{user:i}=yield t.user.get(),a=ae(i);if(!o&&a.length>0)throw new je({code:"embedded_wallet_creation_error",error:"Wallet already exists for this user. Set `createAdditional` to `true` to create another wallet"});let c=Ke(i);if(!c){let w=yield t.embeddedWallet.create({});return se(w.user,0),{user:w.user}}let{entropyId:d,entropyIdVerifier:h}=c;if(h==="solana-address-verifier"){let w=kt(i),v=yield t.embeddedWallet.create({solanaAccount:w});return se(v.user,0),{user:v.user}}let p=a.map(w=>w.wallet_index).reduce((w,v)=>Math.max(w,v),0)+1,y=yield t.embeddedWallet.add({chainType:"ethereum",hdWalletIndex:p,entropyId:d,entropyIdVerifier:h});return se(y.user,p),{user:y.user}}),[t]);return{wallets:s,create:n}};function se(e,t){let s=ae(e).find(n=>n.wallet_index===t);if(!e||!s)throw new je({code:"embedded_wallet_creation_error",error:"Unknown error creating wallet"})}import{useContext as bt,useEffect as qe}from"react";var St=(e={})=>{let{solanaWallet:t,createSolanaWalletCallbacks:s,recoverSolanaWalletCallbacks:n}=bt(u),{onCreateWalletSuccess:o,onCreateWalletError:r,onRecoverWalletError:i,onRecoverWalletSuccess:a}=e;return qe(()=>{s.current={onSuccess:o,onError:r}},[o,r]),qe(()=>{n.current={onSuccess:a,onError:i}},[a,i]),t};import{useCallback as Wt,useMemo as Pt}from"react";import{getAllUserEmbeddedBitcoinWallets as ce,getEntropyDetailsFromUser as $e,PrivyClientError as le}from"@privy-io/js-sdk-core";var Et=()=>{let e=x(),t=W(),s=Pt(()=>{let o=$e(e);if(!o)return[];let r=ce(e),{entropyId:i,entropyIdVerifier:a}=o;return r.map(c=>({address:c.address,walletIndex:c.wallet_index,publicKey:c.public_key,chainType:c.chain_type,getProvider:()=>t.embeddedWallet.getBitcoinProvider({wallet:c,entropyId:i,entropyIdVerifier:a})}))},[t,e]),n=Wt(i=>l(void 0,[i],function*({chainType:o,createAdditional:r=!1}){let{user:a}=yield t.user.get(),c=$e(a);if(!c)throw new le({code:"embedded_wallet_creation_error",error:"No existing wallet for this user, create an Ethereum walet first to add a Bitcoin wallet"});let{entropyId:d,entropyIdVerifier:h}=c,m=ce(a).filter(v=>v.chain_type===o);if(!r&&m.length>0)throw new le({code:"embedded_wallet_creation_error",error:"Wallet already exists for this user. Set `createAdditional` to `true` to create another wallet"});let p=m.length===0?0:Math.max(...m.map(v=>v.wallet_index),0)+1,y=yield t.embeddedWallet.add({chainType:o,hdWalletIndex:p,entropyId:d,entropyIdVerifier:h}),w=ce(y.user).find(v=>v.chain_type===o&&v.wallet_index===p);if(!y.user||!w)throw new le({code:"embedded_wallet_creation_error",error:"Unknown error creating wallet"});return{user:y.user,provider:yield t.embeddedWallet.getBitcoinProvider({wallet:w,entropyId:d,entropyIdVerifier:h})}}),[t]);return{wallets:s,create:n}};import{useContext as _t}from"react";var Ut=()=>{let{isReady:e,logout:t,getAccessToken:s,error:n}=_t(u);return{user:x(),isReady:e,error:n,logout:t,getAccessToken:s}};export{It as a,Vt as b,W as c,eo as d,co as e,yo as f,Po as g,Io as h,Go as i,Xo as j,sn as k,mn as l,Cn as m,Ln as n,Tn as o,Gn as p,$n as q,Zn as r,si as s,wi as t,Ei as u,Ii as v,Bi as w,zi as x,ts as y,us as z,ne as A,vs as B,Ss as C,Ls as D,Ts as E,js as F,Qs as G,Ct as H,St as I,Et as J,Ut as K};
@@ -0,0 +1 @@
1
+ var At=Object.defineProperty,kt=Object.defineProperties;var Rt=Object.getOwnPropertyDescriptors;var ue=Object.getOwnPropertySymbols;var Le=Object.prototype.hasOwnProperty,Fe=Object.prototype.propertyIsEnumerable;var Ue=(e,t,r)=>t in e?At(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,C=(e,t)=>{for(var r in t||(t={}))Le.call(t,r)&&Ue(e,r,t[r]);if(ue)for(var r of ue(t))Fe.call(t,r)&&Ue(e,r,t[r]);return e},O=(e,t)=>kt(e,Rt(t));var Or=(e,t)=>{var r={};for(var o in e)Le.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(e!=null&&ue)for(var o of ue(e))t.indexOf(o)<0&&Fe.call(e,o)&&(r[o]=e[o]);return r};var u=(e,t,r)=>new Promise((o,n)=>{var c=i=>{try{d(r.next(i))}catch(a){n(a)}},s=i=>{try{d(r.throw(i))}catch(a){n(a)}},d=i=>i.done?o(i.value):Promise.resolve(i.value).then(c,s);d((r=r.apply(e,t)).next())});import{useEffect as Pt}from"react";import{create as Ot}from"zustand";var Te=Ot(()=>({status:"disconnected"})),Me=()=>Te.getState().onNeedsRecovery,Ur=e=>{Pt(()=>{Te.setState({onNeedsRecovery:e==null?void 0:e.onNeedsRecovery})},[e==null?void 0:e.onNeedsRecovery])};import{applicationId as vt}from"expo-application";import*as re from"expo-linking";import*as x from"expo-secure-store";import*as ce from"expo-web-browser";import{useCallback as ft,useContext as Er,useEffect as Cr}from"react";import{Platform as Oe}from"react-native";import{PrivyClientError as G}from"@privy-io/js-sdk-core";import se,{useState as R,useMemo as hr,createContext as wr,useCallback as ge,useRef as B,useEffect as ut,useContext as br}from"react";import{AppState as pt,View as gr}from"react-native";import{PrivyClientError as mt}from"@privy-io/js-sdk-core";import Wt from"react-fast-compare";import{create as xt}from"zustand";var pe=xt(()=>{}),Ne=e=>pe.setState(t=>Wt(t,e)?t:e),z=pe.getState;import Lt from"react";import{useCallback as Ft,useEffect as Tt,useRef as Mt}from"react";import{AppState as Nt}from"react-native";import jt from"react-native-webview";import It from"react-fast-compare";import{createStore as Ut,useStore as _e}from"zustand";var M=Ut()(()=>({user:null,proxyStatus:"loading"}));function me(){return M.getState().user}var Dr=M.subscribe.bind(M);function Ee(e){M.setState(({user:t})=>It(t,e)?{}:{user:e})}var Ce=e=>M.setState({proxyStatus:e});function N(){return _e(M,e=>e.user)}function je(){return _e(M,e=>!!e.user)}function j(){return _e(M,e=>e.proxyStatus!=="loading")}var De=({client:e,isClientReady:t,logLevel:r})=>{let o=Mt(null);Tt(()=>Nt.addEventListener("change",s=>u(void 0,null,function*(){s==="active"&&((yield e.embeddedWallet.ping(500))||(Ce("reloading"),e.embeddedWallet.reload()))})).remove,[e]);let n=Ft(c=>u(void 0,null,function*(){let{data:s}=c.nativeEvent;e.embeddedWallet.onMessage(JSON.parse(s))}),[e]);return t?Lt.createElement(jt,{style:{flex:1},ref:c=>{c&&(e.setMessagePoster(c),o.current=c)},cacheEnabled:!1,cacheMode:"LOAD_NO_CACHE",source:{uri:e.embeddedWallet.getURL()},webviewDebuggingEnabled:r==="DEBUG",onLoad:()=>Ce("loaded"),onError:console.error,onMessage:n}):null};import{useCallback as Ae,useEffect as ze,useMemo as ke}from"react";import{errorIndicatesRecoveryIsNeeded as Kt,getAllUserEmbeddedSolanaWallets as Vt,getEntropyDetailsFromUser as He,PrivyClientError as ae}from"@privy-io/js-sdk-core";import{getAllUserEmbeddedSolanaWallets as ye,getEntropyDetailsFromAccount as Ke,getUserEmbeddedEthereumWallet as Dt,PrivyClientError as X}from"@privy-io/js-sdk-core";function Ve(c){return u(this,arguments,function*({client:e,setSolanaWallet:t,createSolanaWalletCallbacks:r,setSolanaRecoveryFlowState:o,opts:n}){var s,d,i;t({status:"creating"});try{let{user:a}=yield e.user.get(),p=ye(a),m=p[0],v=(s=Dt(a))!=null?s:void 0;if(n!=null&&n.recoveryMethod&&n.recoveryMethod!=="privy")throw new X({code:"embedded_wallet_creation_error",error:"Unsupported recovery method for solana wallet."});if(!(n!=null&&n.createAdditional)&&m)throw new X({code:"embedded_wallet_creation_error",error:"Solana wallet already exists for this user. Set `createAdditional` to `true` to create another wallet"});let b,f;if(m){let l=v!=null?v:m,{entropyId:g,entropyIdVerifier:y}=Ke(l),w=Math.max(...p.map(E=>E.wallet_index),0)+1,_=yield e.embeddedWallet.add({chainType:"solana",entropyId:g,entropyIdVerifier:y,hdWalletIndex:w}),S=ye(_.user).find(E=>E.wallet_index===w);if(!S)throw new X({error:"Embedded wallet account not created",code:"embedded_wallet_creation_error"});b=yield e.embeddedWallet.getSolanaProvider(S,g,y),f=_.user}else{let l=yield e.embeddedWallet.createSolana({ethereumAccount:v}),g=ye(l.user).find(S=>S.wallet_index===0);if(!g)throw new X({error:"Embedded wallet account not created",code:"embedded_wallet_creation_error"});let y=v!=null?v:g,{entropyId:w,entropyIdVerifier:_}=Ke(y);b=yield e.embeddedWallet.getSolanaProvider(g,w,_),f=l.user}let h=ye(f)[0];if(!h)throw new X({code:"embedded_wallet_creation_error",error:"Unknown error creating solana wallet"});return(i=(d=r.current)==null?void 0:d.onSuccess)==null||i.call(d,b),t({status:"connected",publicKey:h.public_key}),o({status:"initial"}),b}catch(a){let p=a instanceof Error?a.message:"Error creating embedded wallet";throw t({status:"error",error:p}),o({status:"initial"}),new X({code:"embedded_wallet_creation_error",error:p})}})}import{PrivyClientError as H}from"@privy-io/js-sdk-core";function ve(p){return u(this,arguments,function*({client:e,account:t,setWallet:r,recoverWalletCallbacks:o,recoveryMethod:n,setRecoveryFlowState:c,password:s,recoveryKey:d,recoveryToken:i,recoverySecretOverride:a}){var m,v,b,f;if(!t)throw new H({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});switch(n){case"user-passcode":if(!s)throw new H({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!i)throw new H({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!a)throw new H({code:"embedded_wallet_recovery_error",error:"Record name is required for icloud recovery method"});break;case"recovery-encryption-key":if(!d)throw new H({code:"embedded_wallet_recovery_error",error:"recoveryKey is required for recovery-encryption-key recovery method"});break}r({status:"connecting",account:t});try{let h=yield e.embeddedWallet.getProvider(t,s,i,a,d);return r({status:"connected",provider:h,account:t}),c({status:"initial"}),(v=(m=o.current)==null?void 0:m.onSuccess)==null||v.call(m,h),h}catch(h){r({status:"needs-recovery",account:t}),c({status:"initial"});let l=new H({code:"embedded_wallet_recovery_error",error:h instanceof Error?h.message:"Error recovering embedded wallet"});throw(f=(b=o.current)==null?void 0:b.onError)==null||f.call(b,l),l}})}function qe(d){return u(this,arguments,function*({client:e,account:t,entropyId:r,entropyIdVerifier:o,setSolanaWallet:n,recoverSolanaWalletCallbacks:c,setSolanaRecoveryFlowState:s}){var i,a,p,m;n({status:"connecting"});try{let v=yield e.embeddedWallet.getSolanaProvider(t,r,o);return n({status:"connected",publicKey:v._publicKey}),s({status:"initial"}),(a=(i=c.current)==null?void 0:i.onSuccess)==null||a.call(i,v),v}catch(v){n({status:"needs-recovery"}),s({status:"initial"});let b=new H({code:"embedded_wallet_recovery_error",error:v instanceof Error?v.message:"Error recovering embedded wallet"});throw(m=(p=c.current)==null?void 0:p.onError)==null||m.call(p,b),b}})}var Je=({client:e,solanaWallet:t,setSolanaWallet:r,setSolanaRecoveryFlowState:o,createSolanaWalletCallbacks:n,recoverSolanaWalletCallbacks:c})=>{let s=N(),d=ke(()=>Vt(s),[s]),i=j(),a=ke(()=>d.length===0?null:He(s),[s,d]),p=ke(()=>{let f=d.map(y=>{let w=He(s,y);return w?{account:y,entropy:w}:null});if(f.some(y=>y===null))return[];let h=void 0,l=void 0,g=void 0;return f.filter(y=>y!==null).map(({account:y,entropy:{entropyId:w,entropyIdVerifier:_}})=>({address:y.address,publicKey:y.address,walletIndex:y.wallet_index,getProvider:()=>e.embeddedWallet.getSolanaProvider(y,w,_,h,l,g,S=>u(void 0,null,function*(){var E;yield(E=Me())==null?void 0:E(S)}))}))},[d,s,e]),m=Ae(f=>u(void 0,null,function*(){return yield Ve({client:e,setSolanaWallet:r,createSolanaWalletCallbacks:n,setSolanaRecoveryFlowState:o,opts:f})}),[e,n]),v=Ae(()=>u(void 0,null,function*(){if(!a)throw new ae({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{entropyId:f,entropyIdVerifier:h}=a;return qe({client:e,account:d[0],entropyId:f,entropyIdVerifier:h,setSolanaWallet:r,recoverSolanaWalletCallbacks:c,setSolanaRecoveryFlowState:o})}),[e,a,d,c,o,r]),b=Ae(()=>u(void 0,null,function*(){if(!a)throw r({status:"not-created"}),new ae({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});r(f=>f.status==="connected"?{status:"reconnecting"}:{status:"connecting"});try{let{entropyId:f,entropyIdVerifier:h}=a,l=yield e.embeddedWallet.getSolanaProvider(d[0],f,h);return r({status:"connected",publicKey:d[0].public_key}),l}catch(f){throw Kt(f)?(r({status:"needs-recovery"}),new ae({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):f instanceof Error?(r({status:"error",error:f.message}),new ae({code:"unknown_embedded_wallet_error",error:f.message})):(r({status:"error",error:"Error loading embedded wallet"}),new ae({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[d,e,a,r]);return ze(()=>{if(!s&&t.status!=="disconnected")return r({status:"disconnected"});i&&b().catch(()=>{})},[i,s]),ze(()=>{t.status==="error"&&t.error.includes("User must be logged in")&&b()},[t.status]),{create:m,recover:v,getProvider:b,wallets:p}};import{useCallback as ie,useEffect as $e,useMemo as $t}from"react";import{getUserEmbeddedEthereumWallet as Zt,getUserEmbeddedSolanaWallet as Ze,throwIfInvalidRecoveryUpgradePath as er}from"@privy-io/js-sdk-core";import{errorIndicatesRecoveryIsNeeded as tr,PrivyClientError as k}from"@privy-io/js-sdk-core";import{getUserEmbeddedEthereumWallet as qt}from"@privy-io/js-sdk-core";import{PrivyClientError as Q}from"@privy-io/js-sdk-core";function fe(m){return u(this,arguments,function*({client:e,setWallet:t,createWalletCallbacks:r,recoveryMethod:o,setRecoveryFlowState:n,password:c,recoveryKey:s,recoveryToken:d,recoverySecretOverride:i,iCloudRecordNameOverride:a,solanaAccount:p}){var b,f;switch(o){case"user-passcode":if(!c)throw new Q({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"recovery-encryption-key":if(!s)throw new Q({code:"embedded_wallet_recovery_error",error:"key is required for recovery-encryption-key recovery method"});break;case"google-drive":if(!d)throw new Q({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!i||!a)throw new Q({code:"embedded_wallet_recovery_error",error:"iCloud recovery failed due to inability to store credentials"});break}t({status:"creating",account:null});let v=o==="icloud"?"icloud-native":o;try{let{user:h}=yield e.embeddedWallet.create({password:c,recoveryMethod:v,recoveryKey:s,recoveryToken:d,recoverySecretOverride:i,iCloudRecordNameOverride:a,solanaAccount:p}),l=qt(h);if(!l)throw new Q({error:"Embedded wallet account not created",code:"embedded_wallet_creation_error"});let g=yield e.embeddedWallet.getProvider(l);return(f=(b=r.current)==null?void 0:b.onSuccess)==null||f.call(b,g),t({status:"connected",provider:g,account:l}),n({status:"initial"}),g}catch(h){let l=h instanceof Error?h.message:"Error creating embedded wallet";throw t({status:"error",error:l,account:null}),n({status:"initial"}),new Q({code:"embedded_wallet_creation_error",error:l})}})}import{Platform as Be}from"react-native";import{PrivyClientError as U}from"@privy-io/js-sdk-core";function Ge(){return u(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 Re(o){return u(this,arguments,function*({user:e,appId:t,client:r}){var d;if(Be.OS==="android")throw new U({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let n=yield Ge(),c=yield r.recovery.icloudAuth.getICloudConfiguration("expo-ios");if(!(c==null?void 0:c.container_identifier))throw new U({code:"embedded_wallet_recovery_error",error:"An iCloud Container ID must be specified in the Privy Dashboard."});try{let{recoverySecret:i,iCloudRecordName:a}=yield n.writeRecoverySecretToICloud({containerId:c.container_identifier,appId:t,userId:e.id});return{recoverySecret:i,iCloudRecordName:a}}catch(i){if(i instanceof Error){let a=(d=i.message.split("Caused by: ")[1])!=null?d:"Error writing to iCloud";throw new U({code:"embedded_wallet_recovery_error",error:a})}throw new U({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}function Ye(o){return u(this,arguments,function*({walletAddress:e,client:t,chainType:r}){var a;if(Be.OS==="android")throw new U({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let n=yield Ge(),s=(yield t.recovery.getRecoveryKeyMaterial(e,r)).icloud_record_name;if(!s)throw new U({code:"embedded_wallet_recovery_error",error:"iCloud recovery not properly backed up."});let d=yield t.recovery.icloudAuth.getICloudConfiguration("expo-ios"),i=d==null?void 0:d.container_identifier;if(!i)throw new U({code:"embedded_wallet_recovery_error",error:"An iCloud Container ID must be specified in the Privy Dashboard."});try{let{recoverySecret:p}=yield n.readRecoverySecretFromICloud({containerId:i,recordName:s});return{recoverySecret:p}}catch(p){if(p instanceof Error){let m=(a=p.message.split("Caused by: ")[1])!=null?a:"Error writing to iCloud";throw new U({code:"embedded_wallet_recovery_error",error:m})}throw new U({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}import*as J from"expo-linking";import*as Xe from"expo-web-browser";import{Platform as Qe}from"react-native";import{PrivyClientError as $}from"@privy-io/js-sdk-core";import bo from"react-fast-compare";import{PrivyApiError as zt,PrivyClientError as Ht}from"@privy-io/js-sdk-core";function W(e){return e instanceof Error||e instanceof zt||e instanceof Ht?e:typeof e=="string"?new Error(e):new Error("Unknown error")}var Eo=e=>new Promise(t=>setTimeout(t,e));import{useEffect as Jt,useRef as Bt}from"react";import{AppState as Pe}from"react-native";function Po(){let e=Bt(Pe.currentState);Jt(()=>Pe.addEventListener("change",o=>{e.current=o}).remove,[]);function t(){return Pe.currentState}return{appState:e,getCurrentAppState:t}}function ne(n){return u(this,arguments,function*({provider:e,redirectUri:t,client:r,onError:o}){try{let c;switch(e){case"google-drive":{let{url:a}=yield r.recovery.auth.generateURL(J.createURL(t||"/"));c=a;break}default:throw new $({error:"OAuth invalid provider",code:"embedded_wallet_recovery_error"})}let s=yield Xe.openAuthSessionAsync(c);if(Qe.OS==="android")return;if(s.type!=="success")throw new $({error:"Recovery OAuth session failed",code:"embedded_wallet_recovery_error"});let{queryParams:d}=J.parse(s.url),i;switch(e){case"google-drive":{let{privy_oauth_state:a,privy_oauth_code:p}=d;if(!p||!a)throw new $({error:"Recovery OAuth invalid credentials",code:"embedded_wallet_recovery_error"});i=yield he({oAuthCode:p,oAuthState:a,client:r});break}default:throw new $({error:"Recovery OAuth invalid provider",code:"embedded_wallet_recovery_error"})}return i}catch(c){throw o==null||o(W(c)),c}})}function he(o){return u(this,arguments,function*({oAuthCode:e,oAuthState:t,client:r}){let{access_token:n}=yield r.recovery.auth.authorize(e,t);if(!n)throw new $({error:"OAuth invalid credentials",code:"login_with_oauth_returned_with_invalid_credentials"});return n})}var Gt=2*60*1e3;function Yt(e){let t;return new Promise((r,o)=>{t=J.addEventListener("url",c=>u(this,[c],function*({url:n}){if(!n)return;let{queryParams:s}=J.parse(n),{privy_oauth_state:d,privy_oauth_code:i}=s!=null?s:{};if(typeof i!="string"||typeof d!="string")return;let a=yield he({client:e,oAuthCode:i,oAuthState:d});r(a)})),setTimeout(()=>{o(new $({code:"embedded_wallet_set_recovery_error",error:"Failed to complete Google Drive recovery flow"}))},Gt)}).finally(()=>{t==null||t.remove()})}function jo(e){return u(this,null,function*(){let t;Qe.OS==="android"&&(t=Yt(e));let r=yield ne({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 we(c){return u(this,arguments,function*({client:e,recoveryInput:t,setWalletRecoveryCallbacks:r,setRecoveryFlowState:o,setWallet:n}){var s,d,i,a;try{let{provider:p,user:m}=yield e.embeddedWallet.setRecovery(t),v=p,b=Xt(m);return n({status:"connected",provider:v,account:b}),(d=(s=r.current)==null?void 0:s.onSuccess)==null||d.call(s,v),o({status:"initial"}),v}catch(p){let m=new Qt({code:"embedded_wallet_set_recovery_error",error:p instanceof Error?p.message:"Error setting password on embedded wallet"});throw(a=(i=r.current)==null?void 0:i.onError)==null||a.call(i,m),o({status:"initial"}),m}})}function et(e){return e===void 0?{recoveryMethod:"privy"}:typeof e=="string"?{recoveryMethod:"user-passcode",password:e}:e.recoveryMethod==="user-passcode"?{recoveryMethod:"user-passcode",password:e.password}:e.recoveryMethod==="recovery-encryption-key"?{recoveryMethod:"recovery-encryption-key",recoveryKey:e.recoveryKey}:{recoveryMethod:e.recoveryMethod}}var tt=({client:e,appId:t,wallet:r,setWallet:o,setRecoveryFlowState:n,createWalletCallbacks:c,recoverWalletCallbacks:s,setWalletRecoveryCallbacks:d})=>{let i=N(),a=$t(()=>Zt(i),[i]),p=j(),m=ie(l=>u(void 0,null,function*(){var I,Y;if(a)throw new k({error:"This user already has an embedded wallet",code:"embedded_wallet_already_exists"});let{user:g}=yield e.user.get(),{password:y,recoveryMethod:w,recoveryKey:_}=et(l),S,E,L;if(w==="google-drive"&&(S=yield ne({provider:w,client:e,onError:(I=c.current)==null?void 0:I.onError}),n({status:"creating-wallet"}),!S))return null;if(w==="icloud"){if(!g)throw new k({code:"embedded_wallet_recovery_error",error:"User must be loaded before creating a wallet with iCloud."});let{recoverySecret:D,iCloudRecordName:K}=yield Re({user:g,appId:t,client:e});E=D,L=K}return yield fe({client:e,setWallet:o,createWalletCallbacks:c,recoveryMethod:w,recoveryKey:_,setRecoveryFlowState:n,password:y,recoverySecretOverride:E,iCloudRecordNameOverride:L,solanaAccount:(Y=Ze(g))!=null?Y:void 0})}),[e,a,i]),v=ie(l=>u(void 0,null,function*(){var w;if(r.status!=="connected")throw new k({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"});if(!a)throw new k({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});if(Ze(i))throw new k({code:"embedded_wallet_set_recovery_error",error:"Cannot set user-controlled recovery for a user with an embedded Solana wallet."});er({currentRecoveryMethod:a.recovery_method,upgradeToRecoveryMethod:l.recoveryMethod});let g,y;switch(l.recoveryMethod){case"privy":y=O(C({},l),{wallet:a});break;case"user-passcode":y=O(C({},l),{wallet:a,password:l.password});break;case"google-drive":if(g=yield ne({provider:l.recoveryMethod,client:e,onError:(w=d.current)==null?void 0:w.onError}),n({status:"upgrading-recovery"}),!g)return null;y={recoveryMethod:"google-drive",wallet:a,recoveryAccessToken:g};break;case"icloud":if(!i)throw new k({code:"embedded_wallet_recovery_error",error:"User must be loaded before backing up to iCloud."});let{recoverySecret:_,iCloudRecordName:S}=yield Re({user:i,appId:t,client:e});y={recoveryMethod:"icloud-native",recoverySecretOverride:_,iCloudRecordNameOverride:S,wallet:a};break;default:throw new k({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}return we({client:e,recoveryInput:y,setWalletRecoveryCallbacks:d,setRecoveryFlowState:n,setWallet:o})}),[e,a,r.status,i]),b=ie(l=>u(void 0,null,function*(){return v({recoveryMethod:"user-passcode",password:l})}),[e,a,r.status]),f=ie(l=>u(void 0,null,function*(){var E;if(!a)throw new k({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{password:g,recoveryMethod:y,recoveryKey:w}=et(l),_,S;if(y==="google-drive"&&(_=yield ne({provider:y,client:e,onError:(E=s.current)==null?void 0:E.onError}),n({status:"recovering"}),!_))return null;if(y==="icloud"){if(!i)throw new k({code:"embedded_wallet_recovery_error",error:"User must be loaded before recovering via iCloud."});let{recoverySecret:L}=yield Ye({client:e,walletAddress:a.address});S=L}return ve({client:e,account:a,setWallet:o,recoverWalletCallbacks:s,recoveryMethod:y,setRecoveryFlowState:n,recoveryKey:w,password:g,recoveryToken:_,recoverySecretOverride:S})}),[e,a]),h=ie(()=>u(void 0,null,function*(){if(!a)throw o({status:"not-created",account:null}),new k({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});o(l=>l.status==="connected"?{status:"reconnecting",account:a}:{status:"connecting",account:a});try{let l=yield e.embeddedWallet.getProvider(a);return o({status:"connected",provider:l,account:a}),l}catch(l){throw tr(l)?(o({status:"needs-recovery",account:a}),new k({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):l instanceof Error?(o({status:"error",error:l.message,account:a}),new k({code:"unknown_embedded_wallet_error",error:l.message})):(o({status:"error",error:"Error loading embedded wallet",account:a}),new k({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,a]);return $e(()=>{if(!i&&r.status!=="disconnected")return o({status:"disconnected",account:null});p&&h().catch(()=>{})},[p,i,a]),$e(()=>{r.status==="error"&&r.error.includes("User must be logged in")&&h()},[r.status]),{create:m,recover:f,setPassword:b,setRecovery:v,getProvider:h}};import{useEffect as rr,useState as or}from"react";import{PrivyClientError as rt}from"@privy-io/js-sdk-core";var ot=({client:e,isReady:t})=>{let r=N(),o=pe(s=>s==null?void 0:s.customAuth),[n,c]=or({status:"initial"});return rr(()=>{(()=>u(void 0,null,function*(){if(!(o!=null&&o.enabled)){c({status:"not-enabled"});return}c({status:"loading"});let{getCustomAccessToken:d,isLoading:i}=o;if(!(!t||i))try{let a=yield d();if(!a&&r){yield e.auth.logout(),c({status:"done"});return}if(!a){c({status:"done"});return}if(r){c({status:"done"});return}let p=z();if(!(yield e.auth.customProvider.syncWithToken(a,{embedded:p==null?void 0:p.embedded}))){yield e.auth.logout(),c({status:"error",error:new rt({error:"Failed to sync with custom auth provider",code:"third_party_auth_error"})});return}c({status:"done"})}catch(a){if(console.log("Error syncing with custom auth provider",a),c({status:"error",error:a}),r)throw yield e.auth.logout(),new rt({error:"Third-party auth failed",code:"third_party_auth_error"})}}))()},[e,r,t,o==null?void 0:o.enabled,o==null?void 0:o.getCustomAccessToken,o==null?void 0:o.isLoading]),{customAuthState:n,customAuthStateIsSettled:n.status!=="loading"&&n.status!=="initial"}};import*as Z from"expo-linking";import{useCallback as ar,useEffect as nr}from"react";import{Platform as ir}from"react-native";var at=({client:e,isUserInitialized:t,oAuthState:r,oAuthCallbacks:o,setOAuthState:n,recoveryFlowState:c,oAuthStateRef:s})=>{let d=Z.useURL(),i=ar(a=>{var m,v;let p=W(a);n({status:"error",error:p}),(v=(m=o.current).onError)==null||v.call(m,p)},[n]);return nr(()=>{function a(){return u(this,null,function*(){var b,f;if(!d||r.status!=="loading"||c.status!=="initial")return;let{queryParams:p}=Z.parse(d),{privy_oauth_state:m,privy_oauth_code:v}=p;if(!v||!m){n({status:"done"});return}try{let h,l;if(me())({user:h}=yield e.auth.oauth.linkWithCode(v,m));else{let y=z(),w=yield e.auth.oauth.loginWithCode(v,m,void 0,void 0,s.current.disableSignup?"no-signup":"login-or-sign-up",{embedded:y==null?void 0:y.embedded});h=w.user,l=!!w.is_new_user}return(f=(b=o.current).onSuccess)==null||f.call(b,h,l),s.current={},n({status:"done"}),yield Z.openURL(d.split("?")[0])}catch(h){s.current={},i(h)}})}ir.OS==="android"&&t&&a()},[d,t])};import*as ee from"expo-linking";import{useCallback as sr,useEffect as dr,useMemo as cr}from"react";import{Platform as lr}from"react-native";import{getUserEmbeddedSolanaWallet as ur,getUserEmbeddedWallet as pr}from"@privy-io/js-sdk-core";var nt=({client:e,createWalletCallbacks:t,recoverWalletCallbacks:r,setWalletRecoveryCallbacks:o,recoveryFlowState:n,oAuthState:c,setRecoveryFlowState:s,setWallet:d,appStateVisible:i})=>{let a=ee.useURL(),p=N(),m=cr(()=>pr(p),[p]),v=j(),b=sr(f=>{var l,g,y,w;let h=W(f);n.status==="creating-wallet"?(g=(l=t.current).onError)==null||g.call(l,W(h)):(w=(y=r.current).onError)==null||w.call(y,W(h)),s({status:"initial"})},[n]);return dr(()=>{function f(){return u(this,null,function*(){var y;if(!a&&n.status!=="initial"&&i&&b(new Error("Recovery OAuth session failed")),!a||n.status==="initial"||c.status!=="initial"||!i||!v)return;let{queryParams:h}=ee.parse(a),{privy_oauth_state:l,privy_oauth_code:g}=h;if(!(!g||!l)){yield ee.openURL(a.split("?")[0]);try{let w=yield he({oAuthCode:g,oAuthState:l,client:e});if(n.status==="creating-wallet"){let _=(y=ur(p))!=null?y:void 0;yield fe({client:e,setWallet:d,createWalletCallbacks:t,recoveryMethod:"google-drive",setRecoveryFlowState:s,recoveryToken:w,solanaAccount:_})}else if(n.status==="upgrading-recovery"){if(!m)throw new Error("Embedded wallet not found");yield we({client:e,recoveryInput:{recoveryMethod:"google-drive",wallet:m,recoveryAccessToken:w},setWalletRecoveryCallbacks:o,setRecoveryFlowState:s,setWallet:d})}else yield ve({client:e,account:m,setWallet:d,recoverWalletCallbacks:r,recoveryMethod:"google-drive",setRecoveryFlowState:s,recoveryToken:w})}catch(w){b(w)}}})}lr.OS==="android"&&f()},[a,n.status,i,v])};import{useEffect as mr}from"react";var it=({client:e,isUserInitialized:t,setIsUserInitialized:r,setError:o})=>{mr(()=>{t||(()=>u(void 0,null,function*(){try{yield e.initialize()}catch(c){o(c instanceof Error?c:new Error(String(c)))}try{yield e.user.get()}catch(c){}finally{r(!0)}}))()},[e,t,o,r])};import{digest as vr}from"expo-crypto";import fr from"@privy-io/js-sdk-core";var st={name:"@privy-io/expo",version:"0.51.0",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"},"./ui":{require:"./dist/ui.js",import:"./dist/esm/ui.js",types:"./dist/ui.d.ts"}},main:"./dist/esm/index.js",source:"./src/index.ts",types:"./dist/index.d.ts",files:["dist/**/*","LICENSE","README.md"],scripts:{build:"tsup --clean --minify","check-types":"tsc --noEmit",clean:"rm -rf dist .turbo",dev:"tsup --watch",format:'eslint "src/**/*.{ts,tsx,js,jsx}" --fix',"generate-types":"tsup --dts-only",lint:'eslint "src/**/*.{ts,tsx,js,jsx}"',test:'jest --testMatch "**/test/**/*.test.{ts,tsx}"'},browserslist:["defaults","node >= 18","not op_mini all"],dependencies:{"@privy-io/js-sdk-core":"0.47.1","react-fast-compare":"^3.2.2",zustand:"^4.4.1"},devDependencies:{expo:"52.0.37","expo-apple-authentication":"7.1.3","expo-application":"6.0.2","expo-clipboard":"7.0.1","expo-crypto":"14.0.2",react:"^18.3.1","react-native":"0.77.1","@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":"^13.1.0","react-test-renderer":"^18.3.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":"52.0.5","lucide-react-native":"^0.474.0",tsup:"^6.2.3",typescript:"~5.5.3"},peerDependencies:{"@expo-google-fonts/inter":"*","@privy-io/expo-native-extensions":"0.0.4","expo-apple-authentication":"*","expo-application":"*","expo-clipboard":"*","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},"react-native-svg":{optional:!0},"expo-clipboard":{optional:!0},"react-native-qrcode-styled":{optional:!0},"react-native-safe-area-context":{optional:!0}},publishConfig:{access:"public"}};var lt=({appId:e,clientId:t,storage:r=be,supportedChains:o,baseUrl:n,logLevel:c})=>new fr({appId:e,clientId:t,supportedChains:o,storage:ct(r),sdkVersion:`expo:${st.version}`,nativeAppIdentifier:dt(),crypto:{digest:vr},baseUrl:n,logLevel:c});var Se=wr(null),te;function Ya(e){return te?te.getAccessToken():e!=null&&e.strict?Promise.reject(new mt({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 Xa=e=>{Sr();let[t,r]=R(pt.currentState==="active");ut(()=>{let T=pt.addEventListener("change",Ct=>{r(Ct==="active")});return()=>{T.remove()}},[]),ut(()=>Ne(e.config),[e.config]);let[o,n]=R(!1),[c,s]=R(null),[d,i]=R(!1),[a,p]=R({status:"disconnected",account:null}),[m,v]=R({status:"disconnected"}),[b,f]=R({status:"initial"}),[h,l]=R({status:"initial"}),g=B({}),[y,w]=R({status:"initial"}),[_,S]=R({status:"initial"}),[E,L]=R({status:"initial"}),[I,Y]=R({status:"initial"}),[D,K]=R({status:"initial"}),V=B({}),F=B({}),P=B({}),q=B({}),oe=B({}),Ie=B({}),le=ge(T=>{if(T){Ee(T),s(null);return}Ee(null),f({status:"initial"}),l({status:"initial"}),p({status:"disconnected",account:null})},[]),A=hr(()=>{let T=e.storage||be;return e.client?te=e.client:te=lt({appId:e.appId,clientId:e.clientId,supportedChains:e.supportedChains,storage:T,baseUrl:e.baseUrl,logLevel:e.logLevel}),te.setCallbacks({setUser:le,setIsReady:i}),te},[e.client,e.storage,e.appId,e.clientId,e.baseUrl,e.supportedChains,e.logLevel,le]),ht=ge(()=>(le(null),A.auth.logout()),[le,A]),wt=ge(()=>u(void 0,null,function*(){try{return yield A.getAccessToken()}catch(T){return console.debug(T),null}}),[A]),bt=ge(()=>A.getIdentityToken(),[A]);it({client:A,isUserInitialized:o,setIsUserInitialized:n,setError:s});let gt=tt({client:A,appId:e.appId,createWalletCallbacks:F,recoverWalletCallbacks:P,setWalletRecoveryCallbacks:q,setRecoveryFlowState:w,wallet:a,setWallet:p}),St=Je({client:A,createSolanaWalletCallbacks:oe,recoverSolanaWalletCallbacks:Ie,setSolanaRecoveryFlowState:S,solanaWallet:m,setSolanaWallet:v});at({client:A,isUserInitialized:o,oAuthState:h,setOAuthState:l,oAuthCallbacks:V,recoveryFlowState:y,oAuthStateRef:g}),nt({client:A,createWalletCallbacks:F,recoverWalletCallbacks:P,setWalletRecoveryCallbacks:q,recoveryFlowState:y,oAuthState:h,setRecoveryFlowState:w,setWallet:p,appStateVisible:t});let{customAuthStateIsSettled:_t}=ot({client:A,isReady:o}),Et=j();return se.createElement(se.Fragment,null,se.createElement(Se.Provider,{value:{client:A,isReady:Et&&o&&_t,error:c,logout:ht,getAccessToken:wt,getIdentityToken:bt,wallet:C(C({},a),gt),solanaWallet:C(C({},m),St),oAuthState:h,oAuthCallbacks:V,recoveryFlowState:y,setRecoveryFlowState:w,solanaRecoveryFlowState:_,setSolanaRecoveryFlowState:S,createWalletCallbacks:F,recoverWalletCallbacks:P,setWalletRecoveryCallbacks:q,createSolanaWalletCallbacks:oe,recoverSolanaWalletCallbacks:Ie,setOAuthState:l,siweState:E,setSiweState:L,otpState:b,setOtpState:f,passkeyState:I,setPasskeyState:Y,farcasterState:D,setFarcasterState:K,oAuthStateRef:g}},e.children),se.createElement(gr,{style:{width:0,height:0,overflow:"hidden"}},se.createElement(De,{logLevel:e.logLevel,client:A,isClientReady:d})))},Sr=()=>{if(br(Se))throw new mt({code:"configuration_error",error:"Found multiple instances of PrivyProvider, ensure there is only one mounted in your application tree."})};import*as de from"expo-apple-authentication";import{PrivyClientError as _r}from"@privy-io/js-sdk-core";function yt(e){return u(this,null,function*(){try{return yield de.signInAsync({state:e.state,requestedScopes:[de.AppleAuthenticationScope.EMAIL,de.AppleAuthenticationScope.FULL_NAME]})}catch(t){throw t instanceof Error&&"code"in t&&t.code==="ERR_REQUEST_CANCELED"?new _r({error:"Apple login was cancelled",code:e.isLogin?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):t}})}var We=(e={})=>{let{oAuthState:t,setOAuthState:r,oAuthCallbacks:o,client:n,oAuthStateRef:c}=Er(Se),s=je(),d=e.action?e.action==="login":!s;Cr(()=>{o.current={onSuccess:e.onSuccess,onError:e.onError}},[e.onSuccess,e.onError]);let i=ft(p=>{var v;let m=W(p);return r({status:"error",error:m}),(v=e==null?void 0:e.onError)==null||v.call(e,m),m},[e==null?void 0:e.onError]);return{start:ft(function(h){return u(this,arguments,function*({provider:m,redirectUri:v,isLegacyAppleIosBehaviorEnabled:b=!1,disableSignup:f}){var g,y,w;r({status:"loading"}),c.current={disableSignup:f};let l=me();try{if(l&&e.action==="login")throw new G({code:"attempted_login_with_oauth_while_already_logged_in",error:"Already logged in, if trying to link an OAuth account use `useLinkWithOAuth`"});if(!l&&e.action==="link")throw new G({code:"attempted_link_oauth_before_logged_in",error:"Must be logged in to link an OAuth account, use `useLoginWithOAuth`"});let{url:_}=yield n.auth.oauth.generateURL(m,re.createURL(v||"/")),S,E;if(Oe.OS==="ios"&&m==="apple"&&!b){let F=(g=new URL(_).searchParams.get("state"))!=null?g:"",P=yield yt({state:F,isLogin:d});if(!P.authorizationCode||!P.state)throw new G({error:"OAuth invalid credentials",code:d?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(d){let q=z(),oe=yield n.auth.oauth.loginWithCode(P.authorizationCode,P.state,m,"raw",f?"no-signup":"login-or-sign-up",{embedded:q==null?void 0:q.embedded});S=oe.user,E=oe.is_new_user}else({user:S}=yield n.auth.oauth.linkWithCode(P.authorizationCode,P.state,m,"raw"));return(y=e==null?void 0:e.onSuccess)==null||y.call(e,S,E),r({status:"done"}),S!=null?S:void 0}let L=Oe.OS==="android"?_.replace("x.com","twitter.com"):_,I=yield ce.openAuthSessionAsync(L);if(Oe.OS==="android")return;if(I.type!=="success")throw[ce.WebBrowserResultType.CANCEL,ce.WebBrowserResultType.DISMISS].includes(I.type)?new G({error:"OAuth was cancelled",code:d?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):new G({error:"OAuth session failed",code:d?"failed_to_complete_login_with_oauth":"failed_to_complete_link_with_oauth"});let{queryParams:Y}=re.parse(I.url),{privy_oauth_state:D,privy_oauth_code:K}=Y;if(!K||!D)throw new G({error:"OAuth invalid credentials",code:d?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(d){let V=z(),F=yield n.auth.oauth.loginWithCode(K,D,m,void 0,f?"no-signup":"login-or-sign-up",{embedded:V==null?void 0:V.embedded});S=F.user,E=F.is_new_user}else({user:S}=yield n.auth.oauth.linkWithCode(K,D,m));return(w=e==null?void 0:e.onSuccess)==null||w.call(e,S,E),yield re.openURL(I.url.split("?")[0]),r({status:"done"}),S!=null?S:void 0}catch(_){i(_)}})},[n,r,i]),state:t}};function pn(e){let{state:t,start:r}=We(O(C({},e),{action:"login"}));return{state:t,login:r}}function mn(e){let{state:t,start:r}=We(O(C({},e),{action:"link"}));return{state:t,link:r}}function yn(e){return We(e)}var dt=()=>{if(typeof vt!="string")throw new G({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 vt};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:()=>u(this,null,function*(){return[]})}}var be={get(e){return x.getItemAsync(e,{keychainAccessible:x.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},put(e,t){return x.setItemAsync(e,t,{keychainAccessible:x.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},del(e){return x.deleteItemAsync(e,{keychainAccessible:x.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},getKeys:()=>u(void 0,null,function*(){return[]})};import{PrivyClientError as Ar}from"@privy-io/js-sdk-core";var kr=e=>u(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 Ar({code:"failed_to_create_passkey",error:"Could not create passkey"});return O(C({},r),{type:(o=r.type)!=null?o:"public-key",clientExtensionResults:{}})});import{PrivyClientError as Rr}from"@privy-io/js-sdk-core";var Pr=e=>u(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 Rr({code:"no_passkey_found_for_challenge",error:"Could not find a matching passkey to login with"});return O(C({},r),{type:(o=r.type)!=null?o:"public-key",clientExtensionResults:{}})});function Pn(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 On(e){var t,r,o,n;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:(n=e.allow_credentials)==null?void 0:n.map(({id:c,type:s,transports:d})=>({id:c,type:s,transports:d})),userVerification:e.user_verification}}function Wn(e){var t,r,o,n,c,s,d,i;return{rp:e.rp,user:{id:e.user.id,name:e.user.name,displayName:e.user.display_name},challenge:e.challenge,pubKeyCredParams:e.pub_key_cred_params,extensions:{hmacCreateSecret:(t=e.extensions)==null?void 0:t.hmac_create_secret,credProps:(o=(r=e.extensions)==null?void 0:r.cred_props)==null?void 0:o.rk,appid:(n=e.extensions)==null?void 0:n.app_id},attestation:e.attestation,excludeCredentials:e.exclude_credentials,authenticatorSelection:{authenticatorAttachment:(c=e.authenticator_selection)==null?void 0:c.authenticator_attachment,residentKey:(s=e.authenticator_selection)==null?void 0:s.resident_key,userVerification:(d=e.authenticator_selection)==null?void 0:d.user_verification,requireResidentKey:(i=e.authenticator_selection)==null?void 0:i.require_resident_key}}}export{C as a,O as b,Or as c,u as d,z as e,me as f,Dr as g,N as h,je as i,Me as j,Ur as k,Re as l,Ye as m,W as n,Eo as o,Po as p,jo as q,pn as r,mn as s,yn as t,be as u,lt as v,Se as w,Ya as x,Xa as y,kr as z,Pr as A,Pn as B,On as C,Wn as D};