@privy-io/expo 0.53.4 → 0.53.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-OIMVESOY.js +1 -0
- package/dist/chunk-SSXTLFH6.js +1 -0
- package/dist/esm/chunk-OIMVESOY.js +1 -0
- package/dist/esm/chunk-SSXTLFH6.js +1 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/passkey.js +1 -1
- package/dist/esm/smart-wallets.js +1 -1
- package/dist/esm/ui.js +1 -1
- package/dist/index.js +1 -1
- package/dist/passkey.js +1 -1
- package/dist/smart-wallets.js +1 -1
- package/dist/ui.js +1 -1
- package/package.json +2 -2
- package/dist/chunk-545HI7ID.js +0 -1
- package/dist/chunk-ZYVOIGZF.js +0 -1
- package/dist/esm/chunk-545HI7ID.js +0 -1
- package/dist/esm/chunk-ZYVOIGZF.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } }var _chunkSSXTLFH6js = require('./chunk-SSXTLFH6.js');var _chunkOWCFWPALjs = require('./chunk-OWCFWPAL.js');var _react = require('react');var _jssdkcore = require('@privy-io/js-sdk-core');var jt=e=>{let{client:t,setSiweState:s,siweState:n}=_react.useContext.call(void 0, _chunkSSXTLFH6js.s),o=_react.useCallback.call(void 0, a=>{var d;let c=_chunkSSXTLFH6js.j.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, g=>_chunkOWCFWPALjs.d.call(void 0, void 0,[g],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=>_chunkOWCFWPALjs.d.call(void 0, void 0,[d],function*({signature:a,messageOverride:c}){var g;try{if(!_chunkSSXTLFH6js.b.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"}),(g=e==null?void 0:e.onSuccess)==null||g.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 eo=e=>{let{client:t,setSiweState:s,siweState:n}=_react.useContext.call(void 0, _chunkSSXTLFH6js.s),o=_react.useCallback.call(void 0, a=>{var d;let c=_chunkSSXTLFH6js.j.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, g=>_chunkOWCFWPALjs.d.call(void 0, void 0,[g],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, g=>_chunkOWCFWPALjs.d.call(void 0, void 0,[g],function*({signature:a,messageOverride:c,disableSignup:d}){var m;try{if(_chunkSSXTLFH6js.b.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 v=_chunkSSXTLFH6js.a.call(void 0, ),y=yield t.auth.siwe.loginWithSiwe(a,void 0,c,d?"no-signup":"login-or-sign-up",{embedded:v==null?void 0:v.embedded});return s({status:"done"}),(m=e==null?void 0:e.onSuccess)==null||m.call(e,y.user,y.is_new_user),y.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, _chunkSSXTLFH6js.s);return e};var mo=()=>{let e=W(),t=_react.useCallback.call(void 0, i=>_chunkOWCFWPALjs.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 _chunkSSXTLFH6js.j.call(void 0, a)}}),[e]),s=_react.useCallback.call(void 0, a=>_chunkOWCFWPALjs.d.call(void 0, void 0,[a],function*({signature:n,message:o,wallet:{walletClientType:r,connectorType:i}={}}){try{if(!_chunkSSXTLFH6js.b.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 _chunkSSXTLFH6js.j.call(void 0, c)}}),[e]);return{generateMessage:t,link:s}};var So=()=>{let e=W(),t=_react.useCallback.call(void 0, i=>_chunkOWCFWPALjs.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 _chunkSSXTLFH6js.j.call(void 0, a)}}),[e]),s=_react.useCallback.call(void 0, c=>_chunkOWCFWPALjs.d.call(void 0, void 0,[c],function*({signature:n,message:o,wallet:{walletClientType:r,connectorType:i}={},disableSignup:a}){try{if(_chunkSSXTLFH6js.b.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 _chunkSSXTLFH6js.j.call(void 0, d)}}),[e]);return{generateMessage:t,login:s}};var _o=e=>{let{client:t}=_react.useContext.call(void 0, _chunkSSXTLFH6js.s),s=_react.useCallback.call(void 0, o=>{var i;let r=_chunkSSXTLFH6js.j.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=>_chunkOWCFWPALjs.d.call(void 0, void 0,[r],function*({address:o}){var i;try{if(!_chunkSSXTLFH6js.b.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 Fo=e=>{let[t,s]=_react.useState.call(void 0, ""),{client:n,otpState:o,setOtpState:r}=_react.useContext.call(void 0, _chunkSSXTLFH6js.s),i=_react.useCallback.call(void 0, d=>{var m;let g=_chunkSSXTLFH6js.j.call(void 0, d);return r({status:"error",error:g}),(m=e==null?void 0:e.onError)==null||m.call(e,g),g},[e,r]),a=_react.useCallback.call(void 0, g=>_chunkOWCFWPALjs.d.call(void 0, void 0,[g],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=>_chunkOWCFWPALjs.d.call(void 0, void 0,[m],function*({code:d,email:g}){var p;try{if(!_chunkSSXTLFH6js.b.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 y=g||t;if(!y)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:S}=yield n.auth.email.linkWithCode(y,d);return r({status:"done"}),(p=e==null?void 0:e.onLinkSuccess)==null||p.call(e,S),S}catch(v){throw i(v)}}),[t,r,n,e,i]);return{sendCode:a,linkWithCode:c,state:o}};var jo=e=>{let[t,s]=_react.useState.call(void 0, ""),{client:n,otpState:o,setOtpState:r}=_react.useContext.call(void 0, _chunkSSXTLFH6js.s),i=_react.useCallback.call(void 0, d=>{var m;let g=_chunkSSXTLFH6js.j.call(void 0, d);return r({status:"error",error:g}),(m=e==null?void 0:e.onError)==null||m.call(e,g),g},[e,r]),a=_react.useCallback.call(void 0, g=>_chunkOWCFWPALjs.d.call(void 0, void 0,[g],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=>_chunkOWCFWPALjs.d.call(void 0, void 0,[p],function*({code:d,email:g,disableSignup:m}){var v;try{if(_chunkSSXTLFH6js.b.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 S=g||t;if(!S)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 k=_chunkSSXTLFH6js.a.call(void 0, ),w=yield n.auth.email.loginWithCode(S,d,m?"no-signup":"login-or-sign-up",{embedded:k==null?void 0:k.embedded});return r({status:"done"}),(v=e==null?void 0:e.onLoginSuccess)==null||v.call(e,w.user,w.is_new_user),w==null?void 0:w.user}catch(y){throw i(y)}}),[t,r,n,e,i]);return{sendCode:a,loginWithCode:c,state:o}};var Zo=e=>{let[t,s]=_react.useState.call(void 0, ""),{client:n,otpState:o,setOtpState:r}=_react.useContext.call(void 0, _chunkSSXTLFH6js.s),i=_react.useCallback.call(void 0, d=>{var m;let g=_chunkSSXTLFH6js.j.call(void 0, d);return r({status:"error",error:g}),(m=e==null?void 0:e.onError)==null||m.call(e,g),g},[e,r]),a=_react.useCallback.call(void 0, g=>_chunkOWCFWPALjs.d.call(void 0, void 0,[g],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=>_chunkOWCFWPALjs.d.call(void 0, void 0,[m],function*({code:d,phone:g}){var p;try{if(!_chunkSSXTLFH6js.b.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(!(g||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:S}=yield n.auth.phone.linkWithCode(g||t,d);return r({status:"done"}),(p=e==null?void 0:e.onLinkSuccess)==null||p.call(e,S),S}catch(v){throw i(v)}}),[t,r,n,e,i]);return{sendCode:a,linkWithCode:c,state:o}};var ln=e=>{let[t,s]=_react.useState.call(void 0, ""),{client:n,otpState:o,setOtpState:r}=_react.useContext.call(void 0, _chunkSSXTLFH6js.s),i=_react.useCallback.call(void 0, d=>{var m;let g=_chunkSSXTLFH6js.j.call(void 0, d);return r({status:"error",error:g}),(m=e==null?void 0:e.onError)==null||m.call(e,g),g},[e,r]),a=_react.useCallback.call(void 0, g=>_chunkOWCFWPALjs.d.call(void 0, void 0,[g],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=>_chunkOWCFWPALjs.d.call(void 0, void 0,[p],function*({code:d,phone:g,disableSignup:m}){var v;try{if(_chunkSSXTLFH6js.b.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(!(g||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 k=_chunkSSXTLFH6js.a.call(void 0, ),w=yield n.auth.phone.loginWithCode(g||t,d,m?"no-signup":"login-or-sign-up",{embedded:k==null?void 0:k.embedded});return r({status:"done"}),(v=e==null?void 0:e.onLoginSuccess)==null||v.call(e,w.user,w.is_new_user),w==null?void 0:w.user}catch(y){throw i(y)}}),[t,r,n,e,i]);return{sendCode:a,loginWithCode:c,state:o}};var _expolinking = require('expo-linking'); var N = _interopRequireWildcard(_expolinking); var B = _interopRequireWildcard(_expolinking); var Fe = _interopRequireWildcard(_expolinking); var D = _interopRequireWildcard(_expolinking); var Te = _interopRequireWildcard(_expolinking); var Ne = _interopRequireWildcard(_expolinking); var De = _interopRequireWildcard(_expolinking); var Ve = _interopRequireWildcard(_expolinking);var yn=e=>{let{appState:t,getCurrentAppState:s}=_chunkSSXTLFH6js.l.call(void 0, ),{client:n,farcasterState:o,setFarcasterState:r}=_react.useContext.call(void 0, _chunkSSXTLFH6js.s),i=_react.useRef.call(void 0, !1),a=_react.useCallback.call(void 0, g=>{var p;let m=_chunkSSXTLFH6js.j.call(void 0, g);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, (v,...y)=>_chunkOWCFWPALjs.d.call(void 0, void 0,[v,...y],function*({relyingParty:g,redirectUrl:m},p={pollAttempts:10,pollIntervalMs:1e3}){var S;try{let k=_chunkSSXTLFH6js.b.call(void 0, );if(i.current=!1,!k)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:w,channel_token:E}=yield n.auth.farcaster.initializeAuth({relyingParty:g,redirectUrl:N.createURL(m!=null?m:"/")});if(!w)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 N.openURL(w),r({status:"polling-status"});let U=0;for(;U<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 _chunkSSXTLFH6js.k.call(void 0, p.pollIntervalMs);continue}let M=yield n.auth.farcaster.getFarcasterStatus({channel_token:E});if(M.state==="completed"){r({status:"submitting-token"});let{user:O}=yield n.auth.farcaster.link(_chunkOWCFWPALjs.a.call(void 0, {channel_token:E},M));return r({status:"done"}),(S=e==null?void 0:e.onSuccess)==null||S.call(e,O),O}U++,yield _chunkSSXTLFH6js.k.call(void 0, p.pollIntervalMs)}throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(k){throw a(k)}}),[n,e==null?void 0:e.onSuccess,a,r]),state:o,cancel:c}};var Cn=e=>{let{client:t}=_react.useContext.call(void 0, _chunkSSXTLFH6js.s),s=_react.useCallback.call(void 0, o=>{var i;let r=_chunkSSXTLFH6js.j.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=>_chunkOWCFWPALjs.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 Mn=e=>{let{appState:t,getCurrentAppState:s}=_chunkSSXTLFH6js.l.call(void 0, ),{client:n,farcasterState:o,setFarcasterState:r}=_react.useContext.call(void 0, _chunkSSXTLFH6js.s),i=_react.useRef.call(void 0, !1),a=_react.useCallback.call(void 0, g=>{var p;let m=_chunkSSXTLFH6js.j.call(void 0, g);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, (y,...S)=>_chunkOWCFWPALjs.d.call(void 0, void 0,[y,...S],function*({relyingParty:g,redirectUrl:m,disableSignup:p},v={pollAttempts:10,pollIntervalMs:1e3}){var k;try{if(i.current=!1,_chunkSSXTLFH6js.b.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:U}=yield n.auth.farcaster.initializeAuth({relyingParty:g,redirectUrl:B.createURL(m!=null?m:"/")});if(!E)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_generate_farcaster_uri",error:"Failed to generate farcaster uri"});if(!U)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_generate_farcaster_channel_token",error:"Failed to generate farcaster channel token"});yield B.openURL(E),r({status:"polling-status"});let M=0;for(;M<v.pollAttempts;){if(i.current)throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_canceled",error:"Farcaster polling canceled"});if(t.current!=="active"&&s()!=="active"){yield _chunkSSXTLFH6js.k.call(void 0, v.pollIntervalMs);continue}let O=yield n.auth.farcaster.getFarcasterStatus({channel_token:U});if(O.state==="completed"){r({status:"submitting-token"});let j=_chunkSSXTLFH6js.a.call(void 0, ),q=yield n.auth.farcaster.authenticate(_chunkOWCFWPALjs.a.call(void 0, {channel_token:U,mode:p?"no-signup":"login-or-sign-up"},O),{embedded:j==null?void 0:j.embedded});return r({status:"done"}),(k=e==null?void 0:e.onSuccess)==null||k.call(e,q.user,q.is_new_user),q.user}M++,yield _chunkSSXTLFH6js.k.call(void 0, v.pollIntervalMs)}throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(w){throw a(w)}}),[n,a,e==null?void 0:e.onSuccess,r,t]),state:o,cancel:c}};var _zustand = require('zustand');var oe=_zustand.create.call(void 0, ()=>({status:"initial"})),P=e=>oe.setState(e,!0),br=oe.getState,Gn= exports.n =()=>{let{client:e}=_react.useContext.call(void 0, _chunkSSXTLFH6js.s),t=oe(),s=_react.useCallback.call(void 0, ()=>_chunkOWCFWPALjs.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=_chunkSSXTLFH6js.j.call(void 0, o);throw P({status:"initial",error:r}),r}}),[e]),n=_react.useCallback.call(void 0, o=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){let r=br().status;try{if(_chunkSSXTLFH6js.b.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=_chunkSSXTLFH6js.a.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=_chunkSSXTLFH6js.j.call(void 0, i);throw P({status:r,error:a}),a}}),[e]);return{init:s,login:n,state:t}};var zn=e=>{let{client:t}=_react.useContext.call(void 0, _chunkSSXTLFH6js.s),s=_react.useCallback.call(void 0, o=>{var i;let r=_chunkSSXTLFH6js.j.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=>_chunkOWCFWPALjs.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 Zn=e=>{let{client:t}=_react.useContext.call(void 0, _chunkSSXTLFH6js.s),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 ni=()=>{let{client:e}=_react.useContext.call(void 0, _chunkSSXTLFH6js.s);return _react.useMemo.call(void 0, ()=>({delegateWallet:_jssdkcore.delegatedActions.delegateWallet(e),revokeWallets:_jssdkcore.delegatedActions.revokeWallets(e)}),[e])};function Mr(e,t){return[..._jssdkcore.getAllUserEmbeddedEthereumWallets.call(void 0, e),..._jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, e),..._jssdkcore.getAllUserEmbeddedBitcoinWallets.call(void 0, e)].find(n=>n.address===t)}function ne(e){let t=_chunkSSXTLFH6js.b.call(void 0, );if(!t)throw new Error("User must be authenticated to perform this operation");let s=Mr(t,e);if(!s)throw new Error(`No wallet found with address ${e}`);return s}var pi=()=>{let{client:e}=_react.useContext.call(void 0, _chunkSSXTLFH6js.s);return _react.useMemo.call(void 0, ()=>({addSessionSigners:({address:t,signers:s})=>_jssdkcore.addSessionSigners.call(void 0, {client:e,wallet:ne(t),signers:s.map(n=>({signer_id:n.signerId,override_policy_ids:n.policyIds}))}),removeSessionSigners:({address:t})=>_jssdkcore.removeSessionSigners.call(void 0, {client:e,wallet:ne(t)})}),[e])};var vi=()=>{let{client:e}=_react.useContext.call(void 0, _chunkSSXTLFH6js.s);return _react.useMemo.call(void 0, ()=>({sendCode(n){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({newEmailAddress:s}){xe(),yield e.auth.email.sendCode(s)})},updateEmail(o){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({newEmailAddress:s,code:n}){let{address:r}=xe(),{user:i}=yield e.auth.email.updateEmail({oldEmailAddress:r,newEmailAddress:s,code:n});return i})}}),[e])};function xe(){let t=Nr().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 Nr(){let e=_chunkSSXTLFH6js.b.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 Ei=()=>{let{client:e}=_react.useContext.call(void 0, _chunkSSXTLFH6js.s);return _react.useMemo.call(void 0, ()=>({sendCode(n){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({newPhoneNumber:s}){Le(),yield e.auth.phone.sendCode(s)})},updatePhone(o){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({newPhoneNumber:s,code:n}){let{phoneNumber:r}=Le(),{user:i}=yield e.auth.phone.updatePhone({oldPhoneNumber:r,newPhoneNumber:s,code:n});return i})}}),[e])};function Le(){let t=Gr().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 Gr(){let e=_chunkSSXTLFH6js.b.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 Ie = _interopRequireWildcard(_expowebbrowser);var _reactnative = require('react-native');var C=e=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){let t;_reactnative.Platform.OS==="android"&&(t=Vr());let s=yield Ie.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 Kr(n)});function Vr(){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"}))},jr)}).finally(()=>{e==null||e.remove()})}function Kr(e){let{queryParams:t}=D.parse(e);return t}var jr=2*60*1e3;var Hi=()=>{let{client:e}=_react.useContext.call(void 0, _chunkSSXTLFH6js.s),t=_react.useMemo.call(void 0, ()=>_jssdkcore.crossApp.loginWithCrossAppAuth({client:e,openAuthSession:C}),[e]);return{loginWithCrossApp:_react.useCallback.call(void 0, r=>_chunkOWCFWPALjs.d.call(void 0, void 0,[r],function*({appId:n,redirectUri:o}){if(_chunkSSXTLFH6js.b.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:Fe.createURL(o||"/")});return{user:a}}),[t])}};var qi=()=>{let{client:e}=_react.useContext.call(void 0, _chunkSSXTLFH6js.s),t=_react.useMemo.call(void 0, ()=>_jssdkcore.crossApp.linkWithCrossAppAuth({client:e,openAuthSession:C}),[e]);return{linkWithCrossApp:_react.useCallback.call(void 0, r=>_chunkOWCFWPALjs.d.call(void 0, void 0,[r],function*({appId:n,redirectUri:o}){if(!_chunkSSXTLFH6js.b.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:Te.createURL(o||"/")})}}),[t])}};var es=()=>{let{client:e}=_react.useContext.call(void 0, _chunkSSXTLFH6js.s),t=_react.useMemo.call(void 0, ()=>_jssdkcore.crossApp.wallet.signMessage({client:e,openAuthSession:C}),[e]);return _react.useMemo.call(void 0, ()=>({signMessage:({address:s,message:n,redirectUri:o="/"})=>t({user:_chunkSSXTLFH6js.b.call(void 0, ),address:s,message:n,redirectUrl:Ne.createURL(o)})}),[t])};var as=()=>{let{client:e}=_react.useContext.call(void 0, _chunkSSXTLFH6js.s),t=_react.useMemo.call(void 0, ()=>_jssdkcore.crossApp.wallet.signTypedData({client:e,openAuthSession:C}),[e]);return _react.useMemo.call(void 0, ()=>({signTypedData:({address:s,typedData:n,redirectUri:o="/"})=>t({user:_chunkSSXTLFH6js.b.call(void 0, ),address:s,typedData:n,redirectUrl:De.createURL(o)})}),[t])};var gs=()=>{let{client:e}=_react.useContext.call(void 0, _chunkSSXTLFH6js.s),t=_react.useMemo.call(void 0, ()=>_jssdkcore.crossApp.wallet.sendTransaction({client:e,openAuthSession:C}),[e]);return _react.useMemo.call(void 0, ()=>({sendTransaction:({address:s,transaction:n,redirectUri:o="/"})=>t({user:_chunkSSXTLFH6js.b.call(void 0, ),address:s,transaction:n,redirectUrl:Ve.createURL(o)})}),[t])};var bs=()=>{let{client:e}=_react.useContext.call(void 0, _chunkSSXTLFH6js.s);return{setRecovery:_react.useCallback.call(void 0, s=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){var a;let n=_chunkSSXTLFH6js.b.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"});if(_jssdkcore.isUnifiedWallet.call(void 0, r))throw new (0, _jssdkcore.PrivyClientError)({code:"unsupported_wallet_type",error:"Embedded wallet recovery is only supported for device reassembled embedded wallets and this app uses enclave embedded wallets. Learn more about the difference at https://docs.privy.io/recipes/enclave-wallet-migration-guide"});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 gt({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])}},gt=r=>_chunkOWCFWPALjs.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 _chunkOWCFWPALjs.b.call(void 0, _chunkOWCFWPALjs.a.call(void 0, {},o),{wallet:n});case"google-drive":{let i=yield _chunkSSXTLFH6js.m.call(void 0, t);return{recoveryMethod:"google-drive",wallet:n,recoveryAccessToken:i}}case"icloud":{let{recoverySecret:i,iCloudRecordName:a}=yield _chunkSSXTLFH6js.h.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 Ls=()=>{let{client:e}=_react.useContext.call(void 0, _chunkSSXTLFH6js.s);return{recover:_react.useCallback.call(void 0, s=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){var d;let n=_chunkSSXTLFH6js.b.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"});if(_jssdkcore.isUnifiedWallet.call(void 0, o))throw new (0, _jssdkcore.PrivyClientError)({code:"unsupported_wallet_type",error:"User owned wallet recovery is only supported for device reassembled embedded wallets and this app uses enclave embedded wallets. Learn more about the difference at https://docs.privy.io/recipes/enclave-wallet-migration-guide"});let r,i,a,c;switch(s.recoveryMethod){case"user-passcode":i=s.password;break;case"google-drive":a=yield _chunkSSXTLFH6js.m.call(void 0, e);break;case"icloud":let{recoverySecret:g}=yield _chunkSSXTLFH6js.i.call(void 0, {client:e,walletAddress:o.address,chainType:o.chain_type});c=g;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(g){throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"})}}),[e])}};var se=(e={})=>{let{wallet:t,createWalletCallbacks:s,recoverWalletCallbacks:n,setWalletRecoveryCallbacks:o}=_react.useContext.call(void 0, _chunkSSXTLFH6js.s),{onCreateWalletSuccess:r,onCreateWalletError:i,onRecoverWalletError:a,onRecoverWalletSuccess:c,onSetWalletRecoverySuccess:d,onSetWalletRecoveryError:g}=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:g}},[c,a]),t};var Ns=({onStateChange:e})=>{let t=se();return _react.useEffect.call(void 0, ()=>{e(t)},[t])};var Vs=()=>{let{getIdentityToken:e}=_react.useContext.call(void 0, _chunkSSXTLFH6js.s);return{getIdentityToken:e}};var Xs=e=>{let{client:t}=_react.useContext.call(void 0, _chunkSSXTLFH6js.s),s=_react.useCallback.call(void 0, o=>{var i;let r=_chunkSSXTLFH6js.j.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, ()=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){var o;try{if(_chunkSSXTLFH6js.b.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=_chunkSSXTLFH6js.a.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 oa({onMfaRequired:e}){let{client:t}=_react.useContext.call(void 0, _chunkSSXTLFH6js.s);_react.useEffect.call(void 0, ()=>{function s(){return _chunkOWCFWPALjs.d.call(void 0, this,null,function*(){var o;let n=_chunkSSXTLFH6js.b.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 ua(){let{client:e}=_react.useContext.call(void 0, _chunkSSXTLFH6js.s),t=_react.useCallback.call(void 0, r=>_chunkOWCFWPALjs.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=_chunkSSXTLFH6js.a.call(void 0, ))==null?void 0:i.mfa)==null?void 0:a.relyingParty)});return _chunkSSXTLFH6js.y.call(void 0, c);case"totp":return;default:throw new Error(`Unsupported MFA method: ${r.mfaMethod}`)}}),[e]),s=_react.useCallback.call(void 0, r=>_chunkOWCFWPALjs.d.call(void 0, this,null,function*(){var i,a,c,d,g,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=_chunkSSXTLFH6js.a.call(void 0, ))==null?void 0:i.mfa)==null?void 0:a.relyingParty)||""}),yield new Promise((k,w)=>{e.mfaPromises.submitPromise.current={resolve:k,reject:w}});break;case"passkey":if(typeof r.mfaCode=="string")throw new (0, _jssdkcore.PrivyClientError)({code:"invalid_passkey_response",error:"Invalid authenticator response"});let v=yield _chunkSSXTLFH6js.w.call(void 0, r.mfaCode),y=_chunkSSXTLFH6js.x.call(void 0, v);(m=e.mfaPromises.rootPromise.current)==null||m.resolve({mfaMethod:r.method,relyingParty:r.relyingParty||((g=(d=_chunkSSXTLFH6js.a.call(void 0, ))==null?void 0:d.mfa)==null?void 0:g.relyingParty)||"",mfaCode:y}),yield new Promise((k,w)=>{e.mfaPromises.submitPromise.current={resolve:k,reject:w}});break;default:let S=new (0, _jssdkcore.PrivyClientError)({code:"unsupported_mfa_method",error:"Unsupported MFA method"});throw(p=e.mfaPromises.rootPromise.current)==null||p.reject(S),S}}),[e]),n=_react.useCallback.call(void 0, ()=>_chunkOWCFWPALjs.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 ha(){let{client:e}=_react.useContext.call(void 0, _chunkSSXTLFH6js.s),t=_react.useCallback.call(void 0, o=>_chunkOWCFWPALjs.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=>_chunkOWCFWPALjs.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=>_chunkOWCFWPALjs.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 Mt=()=>{let e=_chunkSSXTLFH6js.d.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=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){var g;yield(g=_chunkSSXTLFH6js.f.call(void 0, ))==null?void 0:g(d)})})}))},[t,e]),n=_react.useCallback.call(void 0, (...r)=>_chunkOWCFWPALjs.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 y=yield t.embeddedWallet.create({});return ce(y.user,0),{user:y.user}}let{entropyId:d,entropyIdVerifier:g}=c;if(g==="solana-address-verifier"){let y=_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, i),S=yield t.embeddedWallet.create({solanaAccount:y});return ce(S.user,0),{user:S.user}}let p=a.map(y=>y.wallet_index).reduce((y,S)=>Math.max(y,S),0)+1,v=yield t.embeddedWallet.add({chainType:"ethereum",hdWalletIndex:p,entropyId:d,entropyIdVerifier:g});return ce(v.user,p),{user:v.user}}),[t]);return{wallets:s,create:n}};function ce(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 It=(e={})=>{let{solanaWallet:t,createSolanaWalletCallbacks:s,recoverSolanaWalletCallbacks:n}=_react.useContext.call(void 0, _chunkSSXTLFH6js.s),{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 Tt=()=>{let e=_chunkSSXTLFH6js.d.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=>_chunkOWCFWPALjs.d.call(void 0, void 0,[i],function*({chainType:o,createAdditional:r=!1}){var k;let a=t.app.getConfig();if(((k=a==null?void 0:a.embedded_wallet_config)==null?void 0:k.mode)==="user-controlled-server-wallets-only")throw new (0, _jssdkcore.PrivyClientError)({code:"unsupported_wallet_type",error:"Bitcoin wallets are only supported for device reassembled embedded wallets and this app uses enclave embedded wallets. Learn more about the difference at https://docs.privy.io/recipes/enclave-wallet-migration-guide"});let{user:c}=yield t.user.get(),d=_jssdkcore.getEntropyDetailsFromUser.call(void 0, c);if(!d)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:g,entropyIdVerifier:m}=d,p=_jssdkcore.getAllUserEmbeddedBitcoinWallets.call(void 0, c).filter(w=>w.chain_type===o);if(!r&&p.length>0)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:"Wallet already exists for this user. Set `createAdditional` to `true` to create another wallet"});let v=p.length===0?0:Math.max(...p.map(w=>w.wallet_index),0)+1,y=yield t.embeddedWallet.add({chainType:o,hdWalletIndex:v,entropyId:g,entropyIdVerifier:m}),S=_jssdkcore.getAllUserEmbeddedBitcoinWallets.call(void 0, y.user).find(w=>w.chain_type===o&&w.wallet_index===v);if(!y.user||!S)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:S,entropyId:g,entropyIdVerifier:m})}}),[t]);return{wallets:s,create:n}};var Nt=()=>{let{isReady:e,logout:t,getAccessToken:s,error:n}=_react.useContext.call(void 0, _chunkSSXTLFH6js.s);return{user:_chunkSSXTLFH6js.d.call(void 0, ),isReady:e,error:n,logout:t,getAccessToken:s}};exports.a = jt; exports.b = eo; exports.c = W; exports.d = mo; exports.e = So; exports.f = _o; exports.g = Fo; exports.h = jo; exports.i = Zo; exports.j = ln; exports.k = yn; exports.l = Cn; exports.m = Mn; exports.n = Gn; exports.o = zn; exports.p = Zn; exports.q = ni; exports.r = pi; exports.s = vi; exports.t = Ei; exports.u = Hi; exports.v = qi; exports.w = es; exports.x = as; exports.y = gs; exports.z = bs; exports.A = Ls; exports.B = se; exports.C = Ns; exports.D = Vs; exports.E = Xs; exports.F = oa; exports.G = ua; exports.H = ha; exports.I = Mt; exports.J = It; exports.K = Tt; exports.L = Nt;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var _chunkOWCFWPALjs = require('./chunk-OWCFWPAL.js');var _react = require('react'); var _react2 = _interopRequireDefault(_react);var _zustand = require('zustand');var Le=_zustand.create.call(void 0, ()=>({status:"disconnected"})),Fe= exports.f =()=>Le.getState().onNeedsRecovery,Wr= exports.g =e=>{_react.useEffect.call(void 0, ()=>{Le.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 oe = _interopRequireWildcard(_expolinking); var B = _interopRequireWildcard(_expolinking); var ee = _interopRequireWildcard(_expolinking); var te = _interopRequireWildcard(_expolinking);var _exposecurestore = require('expo-secure-store'); var I = _interopRequireWildcard(_exposecurestore); var W = _interopRequireWildcard(_exposecurestore);var _expowebbrowser = require('expo-web-browser'); var le = _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, ()=>{}),Te=e=>pe.setState(t=>_reactfastcompare2.default.call(void 0, t,e)?t:e),J= exports.a =pe.getState;var _reactnativewebview = require('react-native-webview'); var _reactnativewebview2 = _interopRequireDefault(_reactnativewebview);function Me(e){return typeof e!="object"||e===null||!("event"in e&&typeof e.event=="string")||!("id"in e&&typeof e.id=="string")||!("data"in e&&typeof e.data=="object")||e.data===null?!1:e.event.startsWith("app:secure-storage:")}function Ne(e){return _chunkOWCFWPALjs.d.call(void 0, this,null,function*(){switch(e.event){case"app:secure-storage:get":{let{key:t}=e.data,r=yield W.getItemAsync(_e(t),{keychainAccessible:W.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY}).catch(o=>(console.warn("Failed to get the value from secure store",o),null));return{event:e.event,id:e.id,data:{value:r}}}case"app:secure-storage:remove":{let{key:t}=e.data,r=yield W.deleteItemAsync(_e(t),{keychainAccessible:W.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY}).then(()=>!0).catch(o=>(console.warn("Failed to remove the value from secure store",o),!1));return{event:e.event,id:e.id,data:{success:r}}}case"app:secure-storage:set":{let{key:t,value:r}=e.data,o=yield W.setItemAsync(_e(t),r,{keychainAccessible:W.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY}).then(()=>!0).catch(n=>(console.warn("Failed to write the value to secure store",n),!1));return{event:e.event,id:e.id,data:{success:o}}}}})}var _e=e=>e.replaceAll(":","-");var N=_zustand.createStore.call(void 0, )(()=>({user:null,proxyStatus:"loading"}));function ye(){return N.getState().user}var jr=N.subscribe.bind(N);function Ae(e){N.setState(({user:t})=>_reactfastcompare2.default.call(void 0, t,e)?{}:{user:e})}var Ce=e=>N.setState({proxyStatus:e});function j(){return _zustand.useStore.call(void 0, N,e=>e.user)}function je(){return _zustand.useStore.call(void 0, N,e=>!!e.user)}function D(){return _zustand.useStore.call(void 0, N,e=>e.proxyStatus!=="loading")}var Mt={shouldUseAppBackedStorage:!0},De=({client:e,isClientReady:t})=>{let r=_react.useRef.call(void 0, null);_react.useEffect.call(void 0, ()=>_reactnative.AppState.addEventListener("change",c=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){c==="active"&&((yield e.embeddedWallet.ping(500))||(Ce("reloading"),e.embeddedWallet.reload()))})).remove,[e]);let o=_react.useCallback.call(void 0, n=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){var s;let{data:c}=n.nativeEvent,i=JSON.parse(c);if(Me(i)){let d=yield Ne(i);(s=r.current)==null||s.postMessage(JSON.stringify(d));return}e.embeddedWallet.onMessage(i)}),[e]);return t?_react2.default.createElement(_reactnativewebview2.default,{style:{flex:1},ref:n=>{n&&(e.setMessagePoster(n),r.current=n)},cacheEnabled:!1,cacheMode:"LOAD_NO_CACHE",injectedJavaScriptObject:Mt,source:{uri:e.embeddedWallet.getURL()},webviewDebuggingEnabled:e.logger.level==="DEBUG",onLoad:()=>Ce("loaded"),onError:console.error,onMessage:o}):null};function Ve(c){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({client:e,setSolanaWallet:t,createSolanaWalletCallbacks:r,setSolanaRecoveryFlowState:o,opts:n}){var i,s,d;t({status:"creating"});try{let{user:a}=yield e.user.get(),p=_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, a),y=p[0],v=(i=_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, a))!=null?i: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)&&y)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(y){let l=v!=null?v:y,{entropyId:g,entropyIdVerifier:m}=_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:m,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,m),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 m=v!=null?v:g,{entropyId:w,entropyIdVerifier:_}=_jssdkcore.getEntropyDetailsFromAccount.call(void 0, m);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(d=(s=r.current)==null?void 0:s.onSuccess)==null||d.call(s,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 _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({client:e,account:t,setWallet:r,recoverWalletCallbacks:o,recoveryMethod:n,setRecoveryFlowState:c,password:i,recoveryKey:s,recoveryToken:d,recoverySecretOverride:a}){var y,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(!i)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!d)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!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(!s)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"recoveryKey is required for recovery-encryption-key recovery method"});break}r({status:"connecting",account:t});try{let h=yield e.embeddedWallet.getProvider(t,i,d,a,s);return r({status:"connected",provider:h,account:t}),c({status:"initial"}),(v=(y=o.current)==null?void 0:y.onSuccess)==null||v.call(y,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(s){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({client:e,account:t,entropyId:r,entropyIdVerifier:o,setSolanaWallet:n,recoverSolanaWalletCallbacks:c,setSolanaRecoveryFlowState:i}){var d,a,p,y;n({status:"connecting"});try{let v=yield e.embeddedWallet.getSolanaProvider(t,r,o);return n({status:"connected",publicKey:v._publicKey}),i({status:"initial"}),(a=(d=c.current)==null?void 0:d.onSuccess)==null||a.call(d,v),v}catch(v){n({status:"needs-recovery"}),i({status:"initial"});let b=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:v instanceof Error?v.message:"Error recovering embedded wallet"});throw(y=(p=c.current)==null?void 0:p.onError)==null||y.call(p,b),b}})}var He=({client:e,solanaWallet:t,setSolanaWallet:r,setSolanaRecoveryFlowState:o,createSolanaWalletCallbacks:n,recoverSolanaWalletCallbacks:c})=>{let i=j(),s=_react.useMemo.call(void 0, ()=>_jssdkcore.getAllUserEmbeddedSolanaWallets.call(void 0, i),[i]),d=D(),a=_react.useMemo.call(void 0, ()=>s.length===0?null:_jssdkcore.getEntropyDetailsFromUser.call(void 0, i),[i,s]),p=_react.useMemo.call(void 0, ()=>{let f=s.map(m=>{let w=_jssdkcore.getEntropyDetailsFromUser.call(void 0, i,m);return w?{account:m,entropy:w}:null});if(f.some(m=>m===null))return[];let h=void 0,l=void 0,g=void 0;return f.filter(m=>m!==null).map(({account:m,entropy:{entropyId:w,entropyIdVerifier:_}})=>({address:m.address,publicKey:m.address,walletIndex:m.wallet_index,getProvider:()=>e.embeddedWallet.getSolanaProvider(m,w,_,h,l,g,S=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){var E;yield(E=Fe())==null?void 0:E(S)}))}))},[s,i,e]),y=_react.useCallback.call(void 0, f=>_chunkOWCFWPALjs.d.call(void 0, 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, ()=>_chunkOWCFWPALjs.d.call(void 0, 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:s[0],entropyId:f,entropyIdVerifier:h,setSolanaWallet:r,recoverSolanaWalletCallbacks:c,setSolanaRecoveryFlowState:o})}),[e,a,s,c,o,r]),b=_react.useCallback.call(void 0, ()=>_chunkOWCFWPALjs.d.call(void 0, 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(s[0],f,h);return r({status:"connected",publicKey:s[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"}))}}),[s,e,a,r]);return _react.useEffect.call(void 0, ()=>{if(!i&&t.status!=="disconnected")return r({status:"disconnected"});d&&b().catch(()=>{})},[d,i]),_react.useEffect.call(void 0, ()=>{t.status==="error"&&t.error.includes("User must be logged in")&&b()},[t.status]),{create:y,recover:v,getProvider:b,wallets:p}};function fe(y){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({client:e,setWallet:t,createWalletCallbacks:r,recoveryMethod:o,setRecoveryFlowState:n,password:c,recoveryKey:i,recoveryToken:s,recoverySecretOverride:d,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(!i)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"key is required for recovery-encryption-key recovery method"});break;case"google-drive":if(!s)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!d||!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:i,recoveryToken:s,recoverySecretOverride:d,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 _chunkOWCFWPALjs.d.call(void 0, this,null,function*(){try{return yield Promise.resolve().then(() => _interopRequireWildcard(require("@privy-io/expo-native-extensions")))}catch(e){throw new Error("@privy-io/expo-native-extensions not found. Ensure that you're explicitly including as a dependency, and running an Expo development build")}})}function Pe(o){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({user:e,appId:t,client:r}){var s;if(_reactnative.Platform.OS==="android")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let 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:d,iCloudRecordName:a}=yield n.writeRecoverySecretToICloud({containerId:c.container_identifier,appId:t,userId:e.id});return{recoverySecret:d,iCloudRecordName:a}}catch(d){if(d instanceof Error){let a=(s=d.message.split("Caused by: ")[1])!=null?s:"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 _chunkOWCFWPALjs.d.call(void 0, 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(),i=(yield t.recovery.getRecoveryKeyMaterial(e,r)).icloud_record_name;if(!i)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery not properly backed up."});let s=yield t.recovery.icloudAuth.getICloudConfiguration("expo-ios"),d=s==null?void 0:s.container_identifier;if(!d)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"An iCloud Container ID must be specified in the Privy Dashboard."});try{let{recoverySecret:p}=yield n.readRecoverySecretFromICloud({containerId:d,recordName:i});return{recoverySecret:p}}catch(p){if(p instanceof Error){let y=(a=p.message.split("Caused by: ")[1])!=null?a:"Error writing to iCloud";throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:y})}throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}function x(e){return e instanceof Error||e instanceof _jssdkcore.PrivyApiError||e instanceof _jssdkcore.PrivyClientError?e:typeof e=="string"?new Error(e):new Error("Unknown error")}var 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 ie(n){return _chunkOWCFWPALjs.d.call(void 0, 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(B.createURL(t||"/"));c=a;break}default:throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid provider",code:"embedded_wallet_recovery_error"})}let i=yield Xe.openAuthSessionAsync(c);if(_reactnative.Platform.OS==="android")return;if(i.type!=="success")throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth session failed",code:"embedded_wallet_recovery_error"});let{queryParams:s}=B.parse(i.url),d;switch(e){case"google-drive":{let{privy_oauth_state:a,privy_oauth_code:p}=s;if(!p||!a)throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth invalid credentials",code:"embedded_wallet_recovery_error"});d=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 d}catch(c){throw o==null||o(x(c)),c}})}function he(o){return _chunkOWCFWPALjs.d.call(void 0, 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 Ht=2*60*1e3;function Bt(e){let t;return new Promise((r,o)=>{t=B.addEventListener("url",c=>_chunkOWCFWPALjs.d.call(void 0, this,[c],function*({url:n}){if(!n)return;let{queryParams:i}=B.parse(n),{privy_oauth_state:s,privy_oauth_code:d}=i!=null?i:{};if(typeof d!="string"||typeof s!="string")return;let a=yield he({client:e,oAuthCode:d,oAuthState:s});r(a)})),setTimeout(()=>{o(new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_set_recovery_error",error:"Failed to complete Google Drive recovery flow"}))},Ht)}).finally(()=>{t==null||t.remove()})}function jo(e){return _chunkOWCFWPALjs.d.call(void 0, this,null,function*(){let t;_reactnative.Platform.OS==="android"&&(t=Bt(e));let r=yield ie({provider:"google-drive",client:e});return r!=null?r:yield t})}function we(c){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({client:e,recoveryInput:t,setWalletRecoveryCallbacks:r,setRecoveryFlowState:o,setWallet:n}){var i,s,d,a;try{let{provider:p,user:y}=yield e.embeddedWallet.setRecovery(t),v=p,b=_jssdkcore.getUserEmbeddedWallet.call(void 0, y);return n({status:"connected",provider:v,account:b}),(s=(i=r.current)==null?void 0:i.onSuccess)==null||s.call(i,v),o({status:"initial"}),v}catch(p){let y=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_set_recovery_error",error:p instanceof Error?p.message:"Error setting password on embedded wallet"});throw(a=(d=r.current)==null?void 0:d.onError)==null||a.call(d,y),o({status:"initial"}),y}})}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:i,setWalletRecoveryCallbacks:s})=>{let d=j(),a=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedEthereumWallet.call(void 0, d),[d]),p=D(),y=_react.useCallback.call(void 0, l=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){var U,X;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:m,recoveryMethod:w,recoveryKey:_}=et(l),S,E,F;if(w==="google-drive"&&(S=yield ie({provider:w,client:e,onError:(U=c.current)==null?void 0:U.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:K,iCloudRecordName:V}=yield Pe({user:g,appId:t,client:e});E=K,F=V}return yield fe({client:e,setWallet:o,createWalletCallbacks:c,recoveryMethod:w,recoveryKey:_,setRecoveryFlowState:n,password:m,recoverySecretOverride:E,iCloudRecordNameOverride:F,solanaAccount:(X=_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, g))!=null?X:void 0})}),[e,a,d]),v=_react.useCallback.call(void 0, l=>_chunkOWCFWPALjs.d.call(void 0, 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, d))throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_set_recovery_error",error:"Cannot set user-controlled recovery for a user with an embedded Solana wallet."});if(_jssdkcore.isUnifiedWallet.call(void 0, a))throw new (0, _jssdkcore.PrivyClientError)({code:"unsupported_wallet_type",error:"Embedded wallet recovery is only supported for device reassembled embedded wallets and this app uses enclave embedded wallets. Learn more about the difference at https://docs.privy.io/recipes/enclave-wallet-migration-guide"});_jssdkcore.throwIfInvalidRecoveryUpgradePath.call(void 0, {currentRecoveryMethod:a.recovery_method,upgradeToRecoveryMethod:l.recoveryMethod});let g,m;switch(l.recoveryMethod){case"privy":m=_chunkOWCFWPALjs.b.call(void 0, _chunkOWCFWPALjs.a.call(void 0, {},l),{wallet:a});break;case"user-passcode":m=_chunkOWCFWPALjs.b.call(void 0, _chunkOWCFWPALjs.a.call(void 0, {},l),{wallet:a,password:l.password});break;case"google-drive":if(g=yield ie({provider:l.recoveryMethod,client:e,onError:(w=s.current)==null?void 0:w.onError}),n({status:"upgrading-recovery"}),!g)return null;m={recoveryMethod:"google-drive",wallet:a,recoveryAccessToken:g};break;case"icloud":if(!d)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before backing up to iCloud."});let{recoverySecret:_,iCloudRecordName:S}=yield Pe({user:d,appId:t,client:e});m={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:m,setWalletRecoveryCallbacks:s,setRecoveryFlowState:n,setWallet:o})}),[e,a,r.status,d]),b=_react.useCallback.call(void 0, l=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){return v({recoveryMethod:"user-passcode",password:l})}),[e,a,r.status]),f=_react.useCallback.call(void 0, l=>_chunkOWCFWPALjs.d.call(void 0, 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:m,recoveryKey:w}=et(l),_,S;if(m==="google-drive"&&(_=yield ie({provider:m,client:e,onError:(E=i.current)==null?void 0:E.onError}),n({status:"recovering"}),!_))return null;if(m==="icloud"){if(!d)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before recovering via iCloud."});let{recoverySecret:F}=yield Ye({client:e,walletAddress:a.address});S=F}return ve({client:e,account:a,setWallet:o,recoverWalletCallbacks:i,recoveryMethod:m,setRecoveryFlowState:n,recoveryKey:w,password:g,recoveryToken:_,recoverySecretOverride:S})}),[e,a]),h=_react.useCallback.call(void 0, ()=>_chunkOWCFWPALjs.d.call(void 0, 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(!d&&r.status!=="disconnected")return o({status:"disconnected",account:null});p&&h().catch(()=>{})},[p,d,a]),_react.useEffect.call(void 0, ()=>{r.status==="error"&&r.error.includes("User must be logged in")&&h()},[r.status]),{create:y,recover:f,setPassword:b,setRecovery:v,getProvider:h}};var ot=({client:e,isReady:t})=>{let r=j(),o=pe(i=>i==null?void 0:i.customAuth),[n,c]=_react.useState.call(void 0, {status:"initial"});return _react.useEffect.call(void 0, ()=>{(()=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){if(!(o!=null&&o.enabled)){c({status:"not-enabled"});return}c({status:"loading"});let{getCustomAccessToken:s,isLoading:d}=o;if(!(!t||d))try{let a=yield s();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=J();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:i})=>{let s=ee.useURL(),d=_react.useCallback.call(void 0, a=>{var y,v;let p=x(a);n({status:"error",error:p}),(v=(y=o.current).onError)==null||v.call(y,p)},[n]);return _react.useEffect.call(void 0, ()=>{function a(){return _chunkOWCFWPALjs.d.call(void 0, this,null,function*(){var b,f;if(!s||r.status!=="loading"||c.status!=="initial")return;let{queryParams:p}=ee.parse(s),{privy_oauth_state:y,privy_oauth_code:v}=p;if(!v||!y){n({status:"done"});return}try{let h,l;if(ye())({user:h}=yield e.auth.oauth.linkWithCode(v,y));else{let m=J(),w=yield e.auth.oauth.loginWithCode(v,y,void 0,void 0,i.current.disableSignup?"no-signup":"login-or-sign-up",{embedded:m==null?void 0:m.embedded});h=w.user,l=!!w.is_new_user}return(f=(b=o.current).onSuccess)==null||f.call(b,h,l),i.current={},n({status:"done"}),yield ee.openURL(s.split("?")[0])}catch(h){i.current={},d(h)}})}_reactnative.Platform.OS==="android"&&t&&a()},[s,t])};var nt=({client:e,createWalletCallbacks:t,recoverWalletCallbacks:r,setWalletRecoveryCallbacks:o,recoveryFlowState:n,oAuthState:c,setRecoveryFlowState:i,setWallet:s,appStateVisible:d})=>{let a=te.useURL(),p=j(),y=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedWallet.call(void 0, p),[p]),v=D(),b=_react.useCallback.call(void 0, f=>{var l,g,m,w;let h=x(f);n.status==="creating-wallet"?(g=(l=t.current).onError)==null||g.call(l,x(h)):(w=(m=r.current).onError)==null||w.call(m,x(h)),i({status:"initial"})},[n]);return _react.useEffect.call(void 0, ()=>{function f(){return _chunkOWCFWPALjs.d.call(void 0, this,null,function*(){var m;if(!a&&n.status!=="initial"&&d&&b(new Error("Recovery OAuth session failed")),!a||n.status==="initial"||c.status!=="initial"||!d||!v)return;let{queryParams:h}=te.parse(a),{privy_oauth_state:l,privy_oauth_code:g}=h;if(!(!g||!l)){yield te.openURL(a.split("?")[0]);try{let w=yield he({oAuthCode:g,oAuthState:l,client:e});if(n.status==="creating-wallet"){let _=(m=_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, p))!=null?m:void 0;yield fe({client:e,setWallet:s,createWalletCallbacks:t,recoveryMethod:"google-drive",setRecoveryFlowState:i,recoveryToken:w,solanaAccount:_})}else if(n.status==="upgrading-recovery"){if(!y)throw new Error("Embedded wallet not found");yield we({client:e,recoveryInput:{recoveryMethod:"google-drive",wallet:y,recoveryAccessToken:w},setWalletRecoveryCallbacks:o,setRecoveryFlowState:i,setWallet:s})}else yield ve({client:e,account:y,setWallet:s,recoverWalletCallbacks:r,recoveryMethod:"google-drive",setRecoveryFlowState:i,recoveryToken:w})}catch(w){b(w)}}})}_reactnative.Platform.OS==="android"&&f()},[a,n.status,d,v])};var it=({client:e,isUserInitialized:t,setIsUserInitialized:r,setError:o})=>{_react.useEffect.call(void 0, ()=>{t||(()=>_chunkOWCFWPALjs.d.call(void 0, 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.53.5",description:"Expo client for the Privy Auth API",keywords:["authentication","authorization","identity","privacy","privy","user data","react-native","expo","web3"],homepage:"https://docs.privy.io",bugs:{url:"https://privy.io/slack"},license:"Apache-2.0",author:"privy.io",exports:{".":{require:"./dist/index.js",import:"./dist/esm/index.js",types:"./dist/index.d.ts"},"./passkey":{require:"./dist/passkey.js",import:"./dist/esm/passkey.js",types:"./dist/passkey.d.ts"},"./smart-wallets":{require:"./dist/smart-wallets.js",import:"./dist/esm/smart-wallets.js",types:"./dist/smart-wallets.d.ts"},"./ui":{require:"./dist/ui.js",import:"./dist/esm/ui.js",types:"./dist/ui.d.ts"},"./connectors":{require:"./dist/connectors.js",import:"./dist/esm/connectors.js",types:"./dist/connectors.d.ts"}},main:"./dist/esm/index.js",source:"./src/index.ts",types:"./dist/index.d.ts",files:["dist/**/*","LICENSE","README.md"],scripts:{build:"tsup --clean --minify","check-types":"tsc --noEmit",clean:"rm -rf dist .turbo",dev:"tsup --watch",format:'eslint "src/**/*.{ts,tsx,js,jsx}" --fix',"generate-types":"tsup --dts-only",lint:'eslint "src/**/*.{ts,tsx,js,jsx}"',test:"jest"},browserslist:["defaults","node >= 18","not op_mini all"],dependencies:{"@privy-io/js-sdk-core":"0.50.5","@scure/base":"^1.2.4",tweetnacl:"^1.0.3","react-fast-compare":"^3.2.2",zustand:"^5.0.4"},devDependencies:{"@privy-io/eslint-config-custom":"*","@privy-io/tsconfig":"*","@simplewebauthn/types":"9.0.1","@solana/web3.js":"^1.98.0","@svgr/core":"^8.1.0","@svgr/plugin-jsx":"^8.1.0","@svgr/plugin-svgo":"^8.1.0","@testing-library/react-native":"^13.1.0","@tsconfig/node16-strictest-esm":"^1.0.3","@types/jest":"^29.1.2",buffer:"^5.4.3","eslint-plugin-react-hooks":"^5.0.0-canary-7118f5dd7-20230705",expo:"52.0.37","expo-apple-authentication":"7.1.3","expo-application":"6.0.2","expo-clipboard":"7.0.1","expo-crypto":"14.0.2",jest:"^29.7.0","jest-expo":"52.0.5","lucide-react-native":"^0.474.0",react:"^18.3.1","react-native":"0.77.1","react-test-renderer":"^18.3.1",tsup:"^6.2.3",typescript:"~5.5.3"},peerDependencies:{"@expo-google-fonts/inter":"*","@privy-io/expo-native-extensions":"0.0.5","expo-apple-authentication":"*","expo-application":"*","expo-clipboard":"*","expo-crypto":"*","expo-font":"*","expo-linking":"*","expo-secure-store":"*","expo-web-browser":"*",permissionless:"^0.2.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),re;function Ya(e){return re?re.getAccessToken():e!=null&&e.strict?Promise.reject(new (0, _jssdkcore.PrivyClientError)({code:"attempted_to_read_storage_before_client_initialized",error:"Called `getAccessToken` before client initialized"})):(console.warn("Called `getAccessToken` before client initialized"),Promise.resolve(null))}var Xa=e=>{gr();let[t,r]=_react.useState.call(void 0, _reactnative.AppState.currentState==="active");_react.useEffect.call(void 0, ()=>{let M=_reactnative.AppState.addEventListener("change",At=>{r(At==="active")});return()=>{M.remove()}},[]),_react.useEffect.call(void 0, ()=>Te(e.config),[e.config]);let[o,n]=_react.useState.call(void 0, !1),[c,i]=_react.useState.call(void 0, null),[s,d]=_react.useState.call(void 0, !1),[a,p]=_react.useState.call(void 0, {status:"disconnected",account:null}),[y,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, {}),[m,w]=_react.useState.call(void 0, {status:"initial"}),[_,S]=_react.useState.call(void 0, {status:"initial"}),[E,F]=_react.useState.call(void 0, {status:"initial"}),[U,X]=_react.useState.call(void 0, {status:"initial"}),[K,V]=_react.useState.call(void 0, {status:"initial"}),q=_react.useRef.call(void 0, {}),T=_react.useRef.call(void 0, {}),P=_react.useRef.call(void 0, {}),z=_react.useRef.call(void 0, {}),ae=_react.useRef.call(void 0, {}),Ue=_react.useRef.call(void 0, {}),ue=_react.useCallback.call(void 0, M=>{if(M){Ae(M),i(null);return}Ae(null),f({status:"initial"}),l({status:"initial"}),p({status:"disconnected",account:null})},[]),C=_react.useMemo.call(void 0, ()=>{let M=e.storage||be;return e.client?re=e.client:re=lt({appId:e.appId,clientId:e.clientId,supportedChains:e.supportedChains,storage:M,baseUrl:e.baseUrl,logLevel:e.logLevel}),re.setCallbacks({setUser:ue,setIsReady:d}),re},[e.client,e.storage,e.appId,e.clientId,e.baseUrl,e.supportedChains,e.logLevel,ue]),ht=_react.useCallback.call(void 0, ()=>(ue(null),C.auth.logout()),[ue,C]),wt=_react.useCallback.call(void 0, ()=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){try{return yield C.getAccessToken()}catch(M){return console.debug(M),null}}),[C]),bt=_react.useCallback.call(void 0, ()=>C.getIdentityToken(),[C]);it({client:C,isUserInitialized:o,setIsUserInitialized:n,setError:i});let gt=tt({client:C,appId:e.appId,createWalletCallbacks:T,recoverWalletCallbacks:P,setWalletRecoveryCallbacks:z,setRecoveryFlowState:w,wallet:a,setWallet:p}),St=He({client:C,createSolanaWalletCallbacks:ae,recoverSolanaWalletCallbacks:Ue,setSolanaRecoveryFlowState:S,solanaWallet:y,setSolanaWallet:v});at({client:C,isUserInitialized:o,oAuthState:h,setOAuthState:l,oAuthCallbacks:q,recoveryFlowState:m,oAuthStateRef:g}),nt({client:C,createWalletCallbacks:T,recoverWalletCallbacks:P,setWalletRecoveryCallbacks:z,recoveryFlowState:m,oAuthState:h,setRecoveryFlowState:w,setWallet:p,appStateVisible:t});let{customAuthStateIsSettled:_t}=ot({client:C,isReady:o}),Et=D();return _react2.default.createElement(_react2.default.Fragment,null,_react2.default.createElement(Se.Provider,{value:{client:C,isReady:Et&&o&&_t,error:c,logout:ht,getAccessToken:wt,getIdentityToken:bt,wallet:_chunkOWCFWPALjs.a.call(void 0, _chunkOWCFWPALjs.a.call(void 0, {},a),gt),solanaWallet:_chunkOWCFWPALjs.a.call(void 0, _chunkOWCFWPALjs.a.call(void 0, {},y),St),oAuthState:h,oAuthCallbacks:q,recoveryFlowState:m,setRecoveryFlowState:w,solanaRecoveryFlowState:_,setSolanaRecoveryFlowState:S,createWalletCallbacks:T,recoverWalletCallbacks:P,setWalletRecoveryCallbacks:z,createSolanaWalletCallbacks:ae,recoverSolanaWalletCallbacks:Ue,setOAuthState:l,siweState:E,setSiweState:F,otpState:b,setOtpState:f,passkeyState:U,setPasskeyState:X,farcasterState:K,setFarcasterState:V,oAuthStateRef:g}},e.children),_react2.default.createElement(_reactnative.View,{style:{width:0,height:0,overflow:"hidden"}},_react2.default.createElement(De,{client:C,isClientReady:s})))},gr=()=>{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 ce = _interopRequireWildcard(_expoappleauthentication);function mt(e){return _chunkOWCFWPALjs.d.call(void 0, this,null,function*(){try{return yield ce.signInAsync({state:e.state,requestedScopes:[ce.AppleAuthenticationScope.EMAIL,ce.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 xe=(e={})=>{let{oAuthState:t,setOAuthState:r,oAuthCallbacks:o,client:n,oAuthStateRef:c}=_react.useContext.call(void 0, Se),i=je(),s=e.action?e.action==="login":!i;_react.useEffect.call(void 0, ()=>{o.current={onSuccess:e.onSuccess,onError:e.onError}},[e.onSuccess,e.onError]);let d=_react.useCallback.call(void 0, p=>{var v;let y=x(p);return r({status:"error",error:y}),(v=e==null?void 0:e.onError)==null||v.call(e,y),y},[e==null?void 0:e.onError]);return{start:_react.useCallback.call(void 0, function(h){return _chunkOWCFWPALjs.d.call(void 0, this,arguments,function*({provider:y,redirectUri:v,isLegacyAppleIosBehaviorEnabled:b=!1,disableSignup:f}){var g,m,w;r({status:"loading"}),c.current={disableSignup:f};let l=ye();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(y,oe.createURL(v||"/")),S,E;if(_reactnative.Platform.OS==="ios"&&y==="apple"&&!b){let T=(g=new URL(_).searchParams.get("state"))!=null?g:"",P=yield mt({state:T,isLogin:s});if(!P.authorizationCode||!P.state)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:s?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(s){let z=J(),ae=yield n.auth.oauth.loginWithCode(P.authorizationCode,P.state,y,"raw",f?"no-signup":"login-or-sign-up",{embedded:z==null?void 0:z.embedded});S=ae.user,E=ae.is_new_user}else({user:S}=yield n.auth.oauth.linkWithCode(P.authorizationCode,P.state,y,"raw"));return(m=e==null?void 0:e.onSuccess)==null||m.call(e,S,E),r({status:"done"}),S!=null?S:void 0}let F=_reactnative.Platform.OS==="android"?_.replace("x.com","twitter.com"):_,U=yield le.openAuthSessionAsync(F);if(_reactnative.Platform.OS==="android")return;if(U.type!=="success")throw[le.WebBrowserResultType.CANCEL,le.WebBrowserResultType.DISMISS].includes(U.type)?new (0, _jssdkcore.PrivyClientError)({error:"OAuth was cancelled",code:s?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):new (0, _jssdkcore.PrivyClientError)({error:"OAuth session failed",code:s?"failed_to_complete_login_with_oauth":"failed_to_complete_link_with_oauth"});let{queryParams:X}=oe.parse(U.url),{privy_oauth_state:K,privy_oauth_code:V}=X;if(!V||!K)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:s?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(s){let q=J(),T=yield n.auth.oauth.loginWithCode(V,K,y,void 0,f?"no-signup":"login-or-sign-up",{embedded:q==null?void 0:q.embedded});S=T.user,E=T.is_new_user}else({user:S}=yield n.auth.oauth.linkWithCode(V,K,y));return(w=e==null?void 0:e.onSuccess)==null||w.call(e,S,E),yield oe.openURL(U.url.split("?")[0]),r({status:"done"}),S!=null?S:void 0}catch(_){d(_)}})},[n,r,d]),state:t}};function pn(e){let{state:t,start:r}=xe(_chunkOWCFWPALjs.b.call(void 0, _chunkOWCFWPALjs.a.call(void 0, {},e),{action:"login"}));return{state:t,login:r}}function yn(e){let{state:t,start:r}=xe(_chunkOWCFWPALjs.b.call(void 0, _chunkOWCFWPALjs.a.call(void 0, {},e),{action:"link"}));return{state:t,link:r}}function mn(e){return xe(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:()=>_chunkOWCFWPALjs.d.call(void 0, this,null,function*(){return[]})}}var be={get(e){return I.getItemAsync(e,{keychainAccessible:I.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},put(e,t){return I.setItemAsync(e,t,{keychainAccessible:I.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},del(e){return I.deleteItemAsync(e,{keychainAccessible:I.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},getKeys:()=>_chunkOWCFWPALjs.d.call(void 0, void 0,null,function*(){return[]})};var Cr=e=>_chunkOWCFWPALjs.d.call(void 0, 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 _chunkOWCFWPALjs.b.call(void 0, _chunkOWCFWPALjs.a.call(void 0, {},r),{type:(o=r.type)!=null?o:"public-key",clientExtensionResults:{}})});var Rr=e=>_chunkOWCFWPALjs.d.call(void 0, 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 _chunkOWCFWPALjs.b.call(void 0, _chunkOWCFWPALjs.a.call(void 0, {},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:i,transports:s})=>({id:c,type:i,transports:s})),userVerification:e.user_verification}}function Wn(e){var t,r,o,n,c,i,s,d;return{rp:e.rp,user:{id:e.user.id,name:e.user.name,displayName:e.user.display_name},challenge:e.challenge,pubKeyCredParams:e.pub_key_cred_params,extensions:{hmacCreateSecret:(t=e.extensions)==null?void 0:t.hmac_create_secret,credProps:(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:(i=e.authenticator_selection)==null?void 0:i.resident_key,userVerification:(s=e.authenticator_selection)==null?void 0:s.user_verification,requireResidentKey:(d=e.authenticator_selection)==null?void 0:d.require_resident_key}}}exports.a = J; exports.b = ye; exports.c = jr; exports.d = j; exports.e = je; exports.f = Fe; exports.g = Wr; exports.h = Pe; exports.i = Ye; exports.j = x; exports.k = Eo; exports.l = Po; exports.m = jo; exports.n = pn; exports.o = yn; exports.p = mn; exports.q = be; exports.r = lt; exports.s = Se; exports.t = Ya; exports.u = Xa; exports.v = Cr; exports.w = Rr; exports.x = Pn; exports.y = On; exports.z = Wn;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as b,b as f,d as x,f as me,h as pe,i as ge,j as h,k as A,l as T,m as H,s as u,w as fe,x as he,y as ye}from"./chunk-SSXTLFH6.js";import{a as _,b as ue,d as l}from"./chunk-OWCFWPAL.js";import{useCallback as $,useContext as Je}from"react";import{PrivyClientError as Qe}from"@privy-io/js-sdk-core";var jt=e=>{let{client:t,setSiweState:s,siweState:n}=Je(u),o=$(a=>{var d;let c=h(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=$(g=>l(void 0,[g],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=$(d=>l(void 0,[d],function*({signature:a,messageOverride:c}){var g;try{if(!f())throw new Qe({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"}),(g=e==null?void 0:e.onSuccess)==null||g.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 z,useContext as Xe}from"react";import{PrivyClientError as Ye}from"@privy-io/js-sdk-core";var eo=e=>{let{client:t,setSiweState:s,siweState:n}=Xe(u),o=z(a=>{var d;let c=h(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=z(g=>l(void 0,[g],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:z(g=>l(void 0,[g],function*({signature:a,messageOverride:c,disableSignup:d}){var m;try{if(f())throw new Ye({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 v=b(),y=yield t.auth.siwe.loginWithSiwe(a,void 0,c,d?"no-signup":"login-or-sign-up",{embedded:v==null?void 0:v.embedded});return s({status:"done"}),(m=e==null?void 0:e.onSuccess)==null||m.call(e,y.user,y.is_new_user),y.user}catch(p){throw o(p)}}),[t,o,e==null?void 0:e.onSuccess]),generateSiweMessage:r,state:n}};import{useContext as Ze}from"react";var W=()=>{let{client:e}=Ze(u);return e};import{useCallback as we}from"react";import{createSiwsMessage as er,PrivyClientError as rr}from"@privy-io/js-sdk-core";var mo=()=>{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:er({address:n,domain:o,uri:r,nonce:a})}}catch(a){throw h(a)}}),[e]),s=we(a=>l(void 0,[a],function*({signature:n,message:o,wallet:{walletClientType:r,connectorType:i}={}}){try{if(!f())throw new rr({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 h(c)}}),[e]);return{generateMessage:t,link:s}};import{useCallback as ve}from"react";import{createSiwsMessage as tr,PrivyClientError as or}from"@privy-io/js-sdk-core";var So=()=>{let e=W(),t=ve(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:tr({address:n,domain:o,uri:r,nonce:a})}}catch(a){throw h(a)}}),[e]),s=ve(c=>l(void 0,[c],function*({signature:n,message:o,wallet:{walletClientType:r,connectorType:i}={},disableSignup:a}){try{if(f())throw new or({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 h(d)}}),[e]);return{generateMessage:t,login:s}};import{useCallback as Se,useContext as nr}from"react";import{PrivyClientError as ir}from"@privy-io/js-sdk-core";var _o=e=>{let{client:t}=nr(u),s=Se(o=>{var i;let r=h(o);return(i=e==null?void 0:e.onError)==null||i.call(e,r),r},[e==null?void 0:e.onError]);return{unlinkWallet:Se(r=>l(void 0,[r],function*({address:o}){var i;try{if(!f())throw new ir({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 J,useContext as sr,useState as ar}from"react";import{PrivyClientError as ke}from"@privy-io/js-sdk-core";var Fo=e=>{let[t,s]=ar(""),{client:n,otpState:o,setOtpState:r}=sr(u),i=J(d=>{var m;let g=h(d);return r({status:"error",error:g}),(m=e==null?void 0:e.onError)==null||m.call(e,g),g},[e,r]),a=J(g=>l(void 0,[g],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(m=>l(void 0,[m],function*({code:d,email:g}){var p;try{if(!f())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 y=g||t;if(!y)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:S}=yield n.auth.email.linkWithCode(y,d);return r({status:"done"}),(p=e==null?void 0:e.onLinkSuccess)==null||p.call(e,S),S}catch(v){throw i(v)}}),[t,r,n,e,i]);return{sendCode:a,linkWithCode:c,state:o}};import{useCallback as Q,useContext as cr,useState as lr}from"react";import{PrivyClientError as be}from"@privy-io/js-sdk-core";var jo=e=>{let[t,s]=lr(""),{client:n,otpState:o,setOtpState:r}=cr(u),i=Q(d=>{var m;let g=h(d);return r({status:"error",error:g}),(m=e==null?void 0:e.onError)==null||m.call(e,g),g},[e,r]),a=Q(g=>l(void 0,[g],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=Q(p=>l(void 0,[p],function*({code:d,email:g,disableSignup:m}){var v;try{if(f())throw new be({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 S=g||t;if(!S)throw new be({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid email before calling `loginWithCode`"});r({status:"submitting-code"});let k=b(),w=yield n.auth.email.loginWithCode(S,d,m?"no-signup":"login-or-sign-up",{embedded:k==null?void 0:k.embedded});return r({status:"done"}),(v=e==null?void 0:e.onLoginSuccess)==null||v.call(e,w.user,w.is_new_user),w==null?void 0:w.user}catch(y){throw i(y)}}),[t,r,n,e,i]);return{sendCode:a,loginWithCode:c,state:o}};import{useCallback as X,useContext as dr,useState as ur}from"react";import{PrivyClientError as Ce}from"@privy-io/js-sdk-core";var Zo=e=>{let[t,s]=ur(""),{client:n,otpState:o,setOtpState:r}=dr(u),i=X(d=>{var m;let g=h(d);return r({status:"error",error:g}),(m=e==null?void 0:e.onError)==null||m.call(e,g),g},[e,r]),a=X(g=>l(void 0,[g],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(m=>l(void 0,[m],function*({code:d,phone:g}){var p;try{if(!f())throw new Ce({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(!(g||t))throw new Ce({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid phone number before calling `linkWithCode`"});r({status:"submitting-code"});let{user:S}=yield n.auth.phone.linkWithCode(g||t,d);return r({status:"done"}),(p=e==null?void 0:e.onLinkSuccess)==null||p.call(e,S),S}catch(v){throw i(v)}}),[t,r,n,e,i]);return{sendCode:a,linkWithCode:c,state:o}};import{useCallback as Y,useContext as mr,useState as pr}from"react";import{PrivyClientError as We}from"@privy-io/js-sdk-core";var ln=e=>{let[t,s]=pr(""),{client:n,otpState:o,setOtpState:r}=mr(u),i=Y(d=>{var m;let g=h(d);return r({status:"error",error:g}),(m=e==null?void 0:e.onError)==null||m.call(e,g),g},[e,r]),a=Y(g=>l(void 0,[g],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=Y(p=>l(void 0,[p],function*({code:d,phone:g,disableSignup:m}){var v;try{if(f())throw new We({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(!(g||t))throw new We({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid phone number before calling `loginWithCode`"});r({status:"submitting-code"});let k=b(),w=yield n.auth.phone.loginWithCode(g||t,d,m?"no-signup":"login-or-sign-up",{embedded:k==null?void 0:k.embedded});return r({status:"done"}),(v=e==null?void 0:e.onLoginSuccess)==null||v.call(e,w.user,w.is_new_user),w==null?void 0:w.user}catch(y){throw i(y)}}),[t,r,n,e,i]);return{sendCode:a,loginWithCode:c,state:o}};import*as N from"expo-linking";import{useCallback as Z,useContext as gr,useRef as fr}from"react";import{PrivyClientError as I}from"@privy-io/js-sdk-core";var yn=e=>{let{appState:t,getCurrentAppState:s}=T(),{client:n,farcasterState:o,setFarcasterState:r}=gr(u),i=fr(!1),a=Z(g=>{var p;let m=h(g);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=Z(()=>{i.current=!0},[]);return{linkWithFarcaster:Z((v,...y)=>l(void 0,[v,...y],function*({relyingParty:g,redirectUrl:m},p={pollAttempts:10,pollIntervalMs:1e3}){var S;try{let k=f();if(i.current=!1,!k)throw new I({code:"attempted_link_farcaster_before_logged_in",error:"Must be logged in to link a Farcaster account."});r({status:"generating-uri"});let{connect_uri:w,channel_token:E}=yield n.auth.farcaster.initializeAuth({relyingParty:g,redirectUrl:N.createURL(m!=null?m:"/")});if(!w)throw new I({code:"failed_to_generate_farcaster_uri",error:"Failed to generate farcaster uri"});if(!E)throw new I({code:"failed_to_generate_farcaster_channel_token",error:"Failed to generate farcaster channel token"});yield N.openURL(w),r({status:"polling-status"});let U=0;for(;U<p.pollAttempts;){if(i.current)throw new I({code:"farcaster_polling_canceled",error:"Farcaster polling canceled"});if(t.current!=="active"&&s()!=="active"){yield A(p.pollIntervalMs);continue}let M=yield n.auth.farcaster.getFarcasterStatus({channel_token:E});if(M.state==="completed"){r({status:"submitting-token"});let{user:O}=yield n.auth.farcaster.link(_({channel_token:E},M));return r({status:"done"}),(S=e==null?void 0:e.onSuccess)==null||S.call(e,O),O}U++,yield A(p.pollIntervalMs)}throw new I({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(k){throw a(k)}}),[n,e==null?void 0:e.onSuccess,a,r]),state:o,cancel:c}};import{useCallback as Pe,useContext as hr}from"react";var Cn=e=>{let{client:t}=hr(u),s=Pe(o=>{var i;let r=h(o);return(i=e==null?void 0:e.onError)==null||i.call(e,r),r},[e==null?void 0:e.onError]);return{unlinkFarcaster:Pe(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 B from"expo-linking";import{useCallback as te,useContext as yr,useRef as wr}from"react";import{PrivyClientError as R}from"@privy-io/js-sdk-core";var Mn=e=>{let{appState:t,getCurrentAppState:s}=T(),{client:n,farcasterState:o,setFarcasterState:r}=yr(u),i=wr(!1),a=te(g=>{var p;let m=h(g);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=te(()=>{i.current=!0},[]);return{loginWithFarcaster:te((y,...S)=>l(void 0,[y,...S],function*({relyingParty:g,redirectUrl:m,disableSignup:p},v={pollAttempts:10,pollIntervalMs:1e3}){var k;try{if(i.current=!1,f())throw new R({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:U}=yield n.auth.farcaster.initializeAuth({relyingParty:g,redirectUrl:B.createURL(m!=null?m:"/")});if(!E)throw new R({code:"failed_to_generate_farcaster_uri",error:"Failed to generate farcaster uri"});if(!U)throw new R({code:"failed_to_generate_farcaster_channel_token",error:"Failed to generate farcaster channel token"});yield B.openURL(E),r({status:"polling-status"});let M=0;for(;M<v.pollAttempts;){if(i.current)throw new R({code:"farcaster_polling_canceled",error:"Farcaster polling canceled"});if(t.current!=="active"&&s()!=="active"){yield A(v.pollIntervalMs);continue}let O=yield n.auth.farcaster.getFarcasterStatus({channel_token:U});if(O.state==="completed"){r({status:"submitting-token"});let j=b(),q=yield n.auth.farcaster.authenticate(_({channel_token:U,mode:p?"no-signup":"login-or-sign-up"},O),{embedded:j==null?void 0:j.embedded});return r({status:"done"}),(k=e==null?void 0:e.onSuccess)==null||k.call(e,q.user,q.is_new_user),q.user}M++,yield A(v.pollIntervalMs)}throw new R({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(w){throw a(w)}}),[n,a,e==null?void 0:e.onSuccess,r,t]),state:o,cancel:c}};import{useCallback as Ee,useContext as vr}from"react";import{create as Sr}from"zustand";import{PrivyClientError as kr}from"@privy-io/js-sdk-core";var oe=Sr(()=>({status:"initial"})),P=e=>oe.setState(e,!0),br=oe.getState,Gn=()=>{let{client:e}=vr(u),t=oe(),s=Ee(()=>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=h(o);throw P({status:"initial",error:r}),r}}),[e]),n=Ee(o=>l(void 0,null,function*(){let r=br().status;try{if(f()){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=h(i);throw P({status:r,error:a}),a}}),[e]);return{init:s,login:n,state:t}};import{useCallback as Ue,useContext as Cr}from"react";var zn=e=>{let{client:t}=Cr(u),s=Ue(o=>{var i;let r=h(o);return(i=e==null?void 0:e.onError)==null||i.call(e,r),r},[e==null?void 0:e.onError]);return{unlinkOAuth:Ue(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 Wr,useEffect as Pr,useRef as Er}from"react";var Zn=e=>{let{client:t}=Wr(u),s=Er(e.onOAuthTokenGrant);s.current=e.onOAuthTokenGrant,Pr(()=>{let{unsubscribe:n}=t.addOAuthTokensListener(o=>{s.current(o)});return n},[t])};import{useContext as Ur,useMemo as _r}from"react";import{delegatedActions as _e}from"@privy-io/js-sdk-core";var ni=()=>{let{client:e}=Ur(u);return _r(()=>({delegateWallet:_e.delegateWallet(e),revokeWallets:_e.revokeWallets(e)}),[e])};import{useContext as Or,useMemo as Ir}from"react";import{addSessionSigners as Rr,removeSessionSigners as Fr}from"@privy-io/js-sdk-core";import{getAllUserEmbeddedBitcoinWallets as xr,getAllUserEmbeddedEthereumWallets as Ar,getAllUserEmbeddedSolanaWallets as Lr}from"@privy-io/js-sdk-core";function Mr(e,t){return[...Ar(e),...Lr(e),...xr(e)].find(n=>n.address===t)}function ne(e){let t=f();if(!t)throw new Error("User must be authenticated to perform this operation");let s=Mr(t,e);if(!s)throw new Error(`No wallet found with address ${e}`);return s}var pi=()=>{let{client:e}=Or(u);return Ir(()=>({addSessionSigners:({address:t,signers:s})=>Rr({client:e,wallet:ne(t),signers:s.map(n=>({signer_id:n.signerId,override_policy_ids:n.policyIds}))}),removeSessionSigners:({address:t})=>Fr({client:e,wallet:ne(t)})}),[e])};import{useContext as Tr,useMemo as Hr}from"react";import{PrivyClientError as Ae}from"@privy-io/js-sdk-core";var vi=()=>{let{client:e}=Tr(u);return Hr(()=>({sendCode(n){return l(this,arguments,function*({newEmailAddress:s}){xe(),yield e.auth.email.sendCode(s)})},updateEmail(o){return l(this,arguments,function*({newEmailAddress:s,code:n}){let{address:r}=xe(),{user:i}=yield e.auth.email.updateEmail({oldEmailAddress:r,newEmailAddress:s,code:n});return i})}}),[e])};function xe(){let t=Nr().linked_accounts.find(s=>s.type==="email");if(!t)throw new Ae({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 Nr(){let e=f();if(!e)throw new Ae({code:"attempted_update_before_logged_in",error:"Must be logged in to update a user profile."});return e}import{useContext as Br,useMemo as Dr}from"react";import{PrivyClientError as Me}from"@privy-io/js-sdk-core";var Ei=()=>{let{client:e}=Br(u);return Dr(()=>({sendCode(n){return l(this,arguments,function*({newPhoneNumber:s}){Le(),yield e.auth.phone.sendCode(s)})},updatePhone(o){return l(this,arguments,function*({newPhoneNumber:s,code:n}){let{phoneNumber:r}=Le(),{user:i}=yield e.auth.phone.updatePhone({oldPhoneNumber:r,newPhoneNumber:s,code:n});return i})}}),[e])};function Le(){let t=Gr().linked_accounts.find(s=>s.type==="phone");if(!t)throw new Me({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 Gr(){let e=f();if(!e)throw new Me({code:"attempted_update_before_logged_in",error:"Must be logged in to update a user profile."});return e}import*as Fe from"expo-linking";import{useCallback as qr,useContext as $r,useMemo as zr}from"react";import{crossApp as Jr,PrivyClientError as Qr}from"@privy-io/js-sdk-core";import*as D from"expo-linking";import*as Ie from"expo-web-browser";import{Platform as Oe}from"react-native";import{PrivyClientError as Re}from"@privy-io/js-sdk-core";var C=e=>l(void 0,null,function*(){let t;Oe.OS==="android"&&(t=Vr());let s=yield Ie.openAuthSessionAsync(e),n;if(Oe.OS==="android")n=yield t;else{if(s.type!=="success")throw new Re({code:"oauth_session_failed",error:"OAuth session failed"});n=s.url}return Kr(n)});function Vr(){let e;return new Promise((t,s)=>{e=D.addEventListener("url",({url:n})=>{n&&t(n)}),setTimeout(()=>{s(new Re({code:"oauth_session_timeout",error:"OAuth session timed out"}))},jr)}).finally(()=>{e==null||e.remove()})}function Kr(e){let{queryParams:t}=D.parse(e);return t}var jr=2*60*1e3;var Hi=()=>{let{client:e}=$r(u),t=zr(()=>Jr.loginWithCrossAppAuth({client:e,openAuthSession:C}),[e]);return{loginWithCrossApp:qr(r=>l(void 0,[r],function*({appId:n,redirectUri:o}){if(f())throw new Qr({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:Fe.createURL(o||"/")});return{user:a}}),[t])}};import*as Te from"expo-linking";import{useCallback as Xr,useContext as Yr,useMemo as Zr}from"react";import{crossApp as et,PrivyClientError as rt}from"@privy-io/js-sdk-core";var qi=()=>{let{client:e}=Yr(u),t=Zr(()=>et.linkWithCrossAppAuth({client:e,openAuthSession:C}),[e]);return{linkWithCrossApp:Xr(r=>l(void 0,[r],function*({appId:n,redirectUri:o}){if(!f())throw new rt({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:Te.createURL(o||"/")})}}),[t])}};import*as Ne from"expo-linking";import{useContext as tt,useMemo as He}from"react";import{crossApp as ot}from"@privy-io/js-sdk-core";var es=()=>{let{client:e}=tt(u),t=He(()=>ot.wallet.signMessage({client:e,openAuthSession:C}),[e]);return He(()=>({signMessage:({address:s,message:n,redirectUri:o="/"})=>t({user:f(),address:s,message:n,redirectUrl:Ne.createURL(o)})}),[t])};import*as De from"expo-linking";import{useContext as nt,useMemo as Be}from"react";import{crossApp as it}from"@privy-io/js-sdk-core";var as=()=>{let{client:e}=nt(u),t=Be(()=>it.wallet.signTypedData({client:e,openAuthSession:C}),[e]);return Be(()=>({signTypedData:({address:s,typedData:n,redirectUri:o="/"})=>t({user:f(),address:s,typedData:n,redirectUrl:De.createURL(o)})}),[t])};import*as Ve from"expo-linking";import{useContext as st,useMemo as Ge}from"react";import{crossApp as at}from"@privy-io/js-sdk-core";var gs=()=>{let{client:e}=st(u),t=Ge(()=>at.wallet.sendTransaction({client:e,openAuthSession:C}),[e]);return Ge(()=>({sendTransaction:({address:s,transaction:n,redirectUri:o="/"})=>t({user:f(),address:s,transaction:n,redirectUrl:Ve.createURL(o)})}),[t])};import{useCallback as ct,useContext as lt}from"react";import{getUserEmbeddedEthereumWallet as dt,getUserEmbeddedSolanaWallet as ut,isUnifiedWallet as mt,PrivyClientError as L,throwIfInvalidRecoveryUpgradePath as pt}from"@privy-io/js-sdk-core";var bs=()=>{let{client:e}=lt(u);return{setRecovery:ct(s=>l(void 0,null,function*(){var a;let n=f(),o=e.app.appId;if(!n)throw new L({code:"embedded_wallet_recovery_error",error:"User must be loaded before attempting to modify the recovery method."});let r=(a=dt(n))!=null?a:ut(n);if(!r)throw new L({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});if(mt(r))throw new L({code:"unsupported_wallet_type",error:"Embedded wallet recovery is only supported for device reassembled embedded wallets and this app uses enclave embedded wallets. Learn more about the difference at https://docs.privy.io/recipes/enclave-wallet-migration-guide"});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 L({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"})}pt({currentRecoveryMethod:r.recovery_method,upgradeToRecoveryMethod:s.recoveryMethod});let i=yield gt({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 L({code:"embedded_wallet_set_recovery_error",error:c instanceof Error?c.message:"Error setting password on embedded wallet"})}}),[e])}},gt=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 ue(_({},o),{wallet:n});case"google-drive":{let i=yield H(t);return{recoveryMethod:"google-drive",wallet:n,recoveryAccessToken:i}}case"icloud":{let{recoverySecret:i,iCloudRecordName:a}=yield pe({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 L({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}});import{useCallback as ft,useContext as ht}from"react";import{getUserEmbeddedEthereumWallet as yt,getUserEmbeddedSolanaWallet as wt,PrivyClientError as F,isUnifiedWallet as vt}from"@privy-io/js-sdk-core";var Ls=()=>{let{client:e}=ht(u);return{recover:ft(s=>l(void 0,null,function*(){var d;let n=f();if(!n)throw new F({code:"embedded_wallet_recovery_error",error:"User must be loaded before attempting to modify the recovery method."});let o=(d=yt(n))!=null?d:wt(n);if(!o)throw new F({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});if(vt(o))throw new F({code:"unsupported_wallet_type",error:"User owned wallet recovery is only supported for device reassembled embedded wallets and this app uses enclave embedded wallets. Learn more about the difference at https://docs.privy.io/recipes/enclave-wallet-migration-guide"});let r,i,a,c;switch(s.recoveryMethod){case"user-passcode":i=s.password;break;case"google-drive":a=yield H(e);break;case"icloud":let{recoverySecret:g}=yield ge({client:e,walletAddress:o.address,chainType:o.chain_type});c=g;break;case"recovery-encryption-key":r=s.recoveryKey;break;case"privy":break;default:throw new F({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(g){throw new F({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"})}}),[e])}};import{useContext as St,useEffect as ie}from"react";var se=(e={})=>{let{wallet:t,createWalletCallbacks:s,recoverWalletCallbacks:n,setWalletRecoveryCallbacks:o}=St(u),{onCreateWalletSuccess:r,onCreateWalletError:i,onRecoverWalletError:a,onRecoverWalletSuccess:c,onSetWalletRecoverySuccess:d,onSetWalletRecoveryError:g}=e;return ie(()=>{s.current={onSuccess:r,onError:i}},[r,i]),ie(()=>{n.current={onSuccess:c,onError:a}},[c,a]),ie(()=>{o.current={onSuccess:d,onError:g}},[c,a]),t};import{useEffect as kt}from"react";var Ns=({onStateChange:e})=>{let t=se();return kt(()=>{e(t)},[t])};import{useContext as bt}from"react";var Vs=()=>{let{getIdentityToken:e}=bt(u);return{getIdentityToken:e}};import{useCallback as Ke,useContext as Ct}from"react";import{PrivyClientError as Wt}from"@privy-io/js-sdk-core";var Xs=e=>{let{client:t}=Ct(u),s=Ke(o=>{var i;let r=h(o);return(i=e==null?void 0:e.onError)==null||i.call(e,r),r},[e==null?void 0:e.onError]);return{create:Ke(()=>l(void 0,null,function*(){var o;try{if(f())throw new Wt({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 Pt,useEffect as Et}from"react";function oa({onMfaRequired:e}){let{client:t}=Pt(u);Et(()=>{function s(){return l(this,null,function*(){var o;let n=f();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 Ut}from"react";import{PrivyClientError as V}from"@privy-io/js-sdk-core";function ua(){let{client:e}=Ut(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 ye(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,g,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((k,w)=>{e.mfaPromises.submitPromise.current={resolve:k,reject:w}});break;case"passkey":if(typeof r.mfaCode=="string")throw new V({code:"invalid_passkey_response",error:"Invalid authenticator response"});let v=yield fe(r.mfaCode),y=he(v);(m=e.mfaPromises.rootPromise.current)==null||m.resolve({mfaMethod:r.method,relyingParty:r.relyingParty||((g=(d=b())==null?void 0:d.mfa)==null?void 0:g.relyingParty)||"",mfaCode:y}),yield new Promise((k,w)=>{e.mfaPromises.submitPromise.current={resolve:k,reject:w}});break;default:let S=new V({code:"unsupported_mfa_method",error:"Unsupported MFA method"});throw(p=e.mfaPromises.rootPromise.current)==null||p.reject(S),S}}),[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 ae,useContext as _t}from"react";function ha(){let{client:e}=_t(u),t=ae(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=ae(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=ae(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 xt,useMemo as At}from"react";import{getAllUserEmbeddedEthereumWallets as le,getEntropyDetailsFromUser as je,getUserEmbeddedSolanaWallet as Lt,PrivyClientError as qe}from"@privy-io/js-sdk-core";var Mt=()=>{let e=x(),t=W(),s=At(()=>{let r=le(e).map(i=>{let a=je(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 g;yield(g=me())==null?void 0:g(d)})})}))},[t,e]),n=xt((...r)=>l(void 0,[...r],function*({createAdditional:o=!1}={}){let{user:i}=yield t.user.get(),a=le(i);if(!o&&a.length>0)throw new qe({code:"embedded_wallet_creation_error",error:"Wallet already exists for this user. Set `createAdditional` to `true` to create another wallet"});let c=je(i);if(!c){let y=yield t.embeddedWallet.create({});return ce(y.user,0),{user:y.user}}let{entropyId:d,entropyIdVerifier:g}=c;if(g==="solana-address-verifier"){let y=Lt(i),S=yield t.embeddedWallet.create({solanaAccount:y});return ce(S.user,0),{user:S.user}}let p=a.map(y=>y.wallet_index).reduce((y,S)=>Math.max(y,S),0)+1,v=yield t.embeddedWallet.add({chainType:"ethereum",hdWalletIndex:p,entropyId:d,entropyIdVerifier:g});return ce(v.user,p),{user:v.user}}),[t]);return{wallets:s,create:n}};function ce(e,t){let s=le(e).find(n=>n.wallet_index===t);if(!e||!s)throw new qe({code:"embedded_wallet_creation_error",error:"Unknown error creating wallet"})}import{useContext as Ot,useEffect as $e}from"react";var It=(e={})=>{let{solanaWallet:t,createSolanaWalletCallbacks:s,recoverSolanaWalletCallbacks:n}=Ot(u),{onCreateWalletSuccess:o,onCreateWalletError:r,onRecoverWalletError:i,onRecoverWalletSuccess:a}=e;return $e(()=>{s.current={onSuccess:o,onError:r}},[o,r]),$e(()=>{n.current={onSuccess:a,onError:i}},[a,i]),t};import{useCallback as Rt,useMemo as Ft}from"react";import{getAllUserEmbeddedBitcoinWallets as de,getEntropyDetailsFromUser as ze,PrivyClientError as K}from"@privy-io/js-sdk-core";var Tt=()=>{let e=x(),t=W(),s=Ft(()=>{let o=ze(e);if(!o)return[];let r=de(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=Rt(i=>l(void 0,[i],function*({chainType:o,createAdditional:r=!1}){var k;let a=t.app.getConfig();if(((k=a==null?void 0:a.embedded_wallet_config)==null?void 0:k.mode)==="user-controlled-server-wallets-only")throw new K({code:"unsupported_wallet_type",error:"Bitcoin wallets are only supported for device reassembled embedded wallets and this app uses enclave embedded wallets. Learn more about the difference at https://docs.privy.io/recipes/enclave-wallet-migration-guide"});let{user:c}=yield t.user.get(),d=ze(c);if(!d)throw new K({code:"embedded_wallet_creation_error",error:"No existing wallet for this user, create an Ethereum walet first to add a Bitcoin wallet"});let{entropyId:g,entropyIdVerifier:m}=d,p=de(c).filter(w=>w.chain_type===o);if(!r&&p.length>0)throw new K({code:"embedded_wallet_creation_error",error:"Wallet already exists for this user. Set `createAdditional` to `true` to create another wallet"});let v=p.length===0?0:Math.max(...p.map(w=>w.wallet_index),0)+1,y=yield t.embeddedWallet.add({chainType:o,hdWalletIndex:v,entropyId:g,entropyIdVerifier:m}),S=de(y.user).find(w=>w.chain_type===o&&w.wallet_index===v);if(!y.user||!S)throw new K({code:"embedded_wallet_creation_error",error:"Unknown error creating wallet"});return{user:y.user,provider:yield t.embeddedWallet.getBitcoinProvider({wallet:S,entropyId:g,entropyIdVerifier:m})}}),[t]);return{wallets:s,create:n}};import{useContext as Ht}from"react";var Nt=()=>{let{isReady:e,logout:t,getAccessToken:s,error:n}=Ht(u);return{user:x(),isReady:e,error:n,logout:t,getAccessToken:s}};export{jt as a,eo as b,W as c,mo as d,So as e,_o as f,Fo as g,jo as h,Zo as i,ln as j,yn as k,Cn as l,Mn as m,Gn as n,zn as o,Zn as p,ni as q,pi as r,vi as s,Ei as t,Hi as u,qi as v,es as w,as as x,gs as y,bs as z,Ls as A,se as B,Ns as C,Vs as D,Xs as E,oa as F,ua as G,ha as H,Mt as I,It as J,Tt as K,Nt as L};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as A,b as O,d as u}from"./chunk-OWCFWPAL.js";import{useEffect as Ct}from"react";import{create as kt}from"zustand";var Le=kt(()=>({status:"disconnected"})),Fe=()=>Le.getState().onNeedsRecovery,Wr=e=>{Ct(()=>{Le.setState({onNeedsRecovery:e==null?void 0:e.onNeedsRecovery})},[e==null?void 0:e.onNeedsRecovery])};import{applicationId as vt}from"expo-application";import*as oe from"expo-linking";import*as I from"expo-secure-store";import*as le from"expo-web-browser";import{useCallback as ft,useContext as _r,useEffect as Er}from"react";import{Platform as We}from"react-native";import{PrivyClientError as Y}from"@privy-io/js-sdk-core";import de,{useState as R,useMemo as fr,createContext as hr,useCallback as ge,useRef as G,useEffect as ut,useContext as wr}from"react";import{AppState as pt,View as br}from"react-native";import{PrivyClientError as yt}from"@privy-io/js-sdk-core";import Rt from"react-fast-compare";import{create as Pt}from"zustand";var pe=Pt(()=>{}),Te=e=>pe.setState(t=>Rt(t,e)?t:e),J=pe.getState;import xt from"react";import{useCallback as It,useEffect as Ut,useRef as Lt}from"react";import{AppState as Ft}from"react-native";import Tt from"react-native-webview";import*as W from"expo-secure-store";function Me(e){return typeof e!="object"||e===null||!("event"in e&&typeof e.event=="string")||!("id"in e&&typeof e.id=="string")||!("data"in e&&typeof e.data=="object")||e.data===null?!1:e.event.startsWith("app:secure-storage:")}function Ne(e){return u(this,null,function*(){switch(e.event){case"app:secure-storage:get":{let{key:t}=e.data,r=yield W.getItemAsync(_e(t),{keychainAccessible:W.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY}).catch(o=>(console.warn("Failed to get the value from secure store",o),null));return{event:e.event,id:e.id,data:{value:r}}}case"app:secure-storage:remove":{let{key:t}=e.data,r=yield W.deleteItemAsync(_e(t),{keychainAccessible:W.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY}).then(()=>!0).catch(o=>(console.warn("Failed to remove the value from secure store",o),!1));return{event:e.event,id:e.id,data:{success:r}}}case"app:secure-storage:set":{let{key:t,value:r}=e.data,o=yield W.setItemAsync(_e(t),r,{keychainAccessible:W.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY}).then(()=>!0).catch(n=>(console.warn("Failed to write the value to secure store",n),!1));return{event:e.event,id:e.id,data:{success:o}}}}})}var _e=e=>e.replaceAll(":","-");import Ot from"react-fast-compare";import{createStore as Wt,useStore as Ee}from"zustand";var N=Wt()(()=>({user:null,proxyStatus:"loading"}));function ye(){return N.getState().user}var jr=N.subscribe.bind(N);function Ae(e){N.setState(({user:t})=>Ot(t,e)?{}:{user:e})}var Ce=e=>N.setState({proxyStatus:e});function j(){return Ee(N,e=>e.user)}function je(){return Ee(N,e=>!!e.user)}function D(){return Ee(N,e=>e.proxyStatus!=="loading")}var Mt={shouldUseAppBackedStorage:!0},De=({client:e,isClientReady:t})=>{let r=Lt(null);Ut(()=>Ft.addEventListener("change",c=>u(void 0,null,function*(){c==="active"&&((yield e.embeddedWallet.ping(500))||(Ce("reloading"),e.embeddedWallet.reload()))})).remove,[e]);let o=It(n=>u(void 0,null,function*(){var s;let{data:c}=n.nativeEvent,i=JSON.parse(c);if(Me(i)){let d=yield Ne(i);(s=r.current)==null||s.postMessage(JSON.stringify(d));return}e.embeddedWallet.onMessage(i)}),[e]);return t?xt.createElement(Tt,{style:{flex:1},ref:n=>{n&&(e.setMessagePoster(n),r.current=n)},cacheEnabled:!1,cacheMode:"LOAD_NO_CACHE",injectedJavaScriptObject:Mt,source:{uri:e.embeddedWallet.getURL()},webviewDebuggingEnabled:e.logger.level==="DEBUG",onLoad:()=>Ce("loaded"),onError:console.error,onMessage:o}):null};import{useCallback as ke,useEffect as ze,useMemo as Re}from"react";import{errorIndicatesRecoveryIsNeeded as jt,getAllUserEmbeddedSolanaWallets as Dt,getEntropyDetailsFromUser as Je,PrivyClientError as ne}from"@privy-io/js-sdk-core";import{getAllUserEmbeddedSolanaWallets as me,getEntropyDetailsFromAccount as Ke,getUserEmbeddedEthereumWallet as Nt,PrivyClientError as Q}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 i,s,d;t({status:"creating"});try{let{user:a}=yield e.user.get(),p=me(a),y=p[0],v=(i=Nt(a))!=null?i:void 0;if(n!=null&&n.recoveryMethod&&n.recoveryMethod!=="privy")throw new Q({code:"embedded_wallet_creation_error",error:"Unsupported recovery method for solana wallet."});if(!(n!=null&&n.createAdditional)&&y)throw new Q({code:"embedded_wallet_creation_error",error:"Solana wallet already exists for this user. Set `createAdditional` to `true` to create another wallet"});let b,f;if(y){let l=v!=null?v:y,{entropyId:g,entropyIdVerifier:m}=Ke(l),w=Math.max(...p.map(E=>E.wallet_index),0)+1,_=yield e.embeddedWallet.add({chainType:"solana",entropyId:g,entropyIdVerifier:m,hdWalletIndex:w}),S=me(_.user).find(E=>E.wallet_index===w);if(!S)throw new Q({error:"Embedded wallet account not created",code:"embedded_wallet_creation_error"});b=yield e.embeddedWallet.getSolanaProvider(S,g,m),f=_.user}else{let l=yield e.embeddedWallet.createSolana({ethereumAccount:v}),g=me(l.user).find(S=>S.wallet_index===0);if(!g)throw new Q({error:"Embedded wallet account not created",code:"embedded_wallet_creation_error"});let m=v!=null?v:g,{entropyId:w,entropyIdVerifier:_}=Ke(m);b=yield e.embeddedWallet.getSolanaProvider(g,w,_),f=l.user}let h=me(f)[0];if(!h)throw new Q({code:"embedded_wallet_creation_error",error:"Unknown error creating solana wallet"});return(d=(s=r.current)==null?void 0:s.onSuccess)==null||d.call(s,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 Q({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:i,recoveryKey:s,recoveryToken:d,recoverySecretOverride:a}){var y,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(!i)throw new H({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!d)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(!s)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,i,d,a,s);return r({status:"connected",provider:h,account:t}),c({status:"initial"}),(v=(y=o.current)==null?void 0:y.onSuccess)==null||v.call(y,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(s){return u(this,arguments,function*({client:e,account:t,entropyId:r,entropyIdVerifier:o,setSolanaWallet:n,recoverSolanaWalletCallbacks:c,setSolanaRecoveryFlowState:i}){var d,a,p,y;n({status:"connecting"});try{let v=yield e.embeddedWallet.getSolanaProvider(t,r,o);return n({status:"connected",publicKey:v._publicKey}),i({status:"initial"}),(a=(d=c.current)==null?void 0:d.onSuccess)==null||a.call(d,v),v}catch(v){n({status:"needs-recovery"}),i({status:"initial"});let b=new H({code:"embedded_wallet_recovery_error",error:v instanceof Error?v.message:"Error recovering embedded wallet"});throw(y=(p=c.current)==null?void 0:p.onError)==null||y.call(p,b),b}})}var He=({client:e,solanaWallet:t,setSolanaWallet:r,setSolanaRecoveryFlowState:o,createSolanaWalletCallbacks:n,recoverSolanaWalletCallbacks:c})=>{let i=j(),s=Re(()=>Dt(i),[i]),d=D(),a=Re(()=>s.length===0?null:Je(i),[i,s]),p=Re(()=>{let f=s.map(m=>{let w=Je(i,m);return w?{account:m,entropy:w}:null});if(f.some(m=>m===null))return[];let h=void 0,l=void 0,g=void 0;return f.filter(m=>m!==null).map(({account:m,entropy:{entropyId:w,entropyIdVerifier:_}})=>({address:m.address,publicKey:m.address,walletIndex:m.wallet_index,getProvider:()=>e.embeddedWallet.getSolanaProvider(m,w,_,h,l,g,S=>u(void 0,null,function*(){var E;yield(E=Fe())==null?void 0:E(S)}))}))},[s,i,e]),y=ke(f=>u(void 0,null,function*(){return yield Ve({client:e,setSolanaWallet:r,createSolanaWalletCallbacks:n,setSolanaRecoveryFlowState:o,opts:f})}),[e,n]),v=ke(()=>u(void 0,null,function*(){if(!a)throw new ne({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{entropyId:f,entropyIdVerifier:h}=a;return qe({client:e,account:s[0],entropyId:f,entropyIdVerifier:h,setSolanaWallet:r,recoverSolanaWalletCallbacks:c,setSolanaRecoveryFlowState:o})}),[e,a,s,c,o,r]),b=ke(()=>u(void 0,null,function*(){if(!a)throw r({status:"not-created"}),new ne({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(s[0],f,h);return r({status:"connected",publicKey:s[0].public_key}),l}catch(f){throw jt(f)?(r({status:"needs-recovery"}),new ne({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):f instanceof Error?(r({status:"error",error:f.message}),new ne({code:"unknown_embedded_wallet_error",error:f.message})):(r({status:"error",error:"Error loading embedded wallet"}),new ne({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[s,e,a,r]);return ze(()=>{if(!i&&t.status!=="disconnected")return r({status:"disconnected"});d&&b().catch(()=>{})},[d,i]),ze(()=>{t.status==="error"&&t.error.includes("User must be logged in")&&b()},[t.status]),{create:y,recover:v,getProvider:b,wallets:p}};import{useCallback as se,useEffect as $e,useMemo as Xt}from"react";import{getUserEmbeddedEthereumWallet as Qt,getUserEmbeddedSolanaWallet as Ze,isUnifiedWallet as $t,throwIfInvalidRecoveryUpgradePath as Zt}from"@privy-io/js-sdk-core";import{errorIndicatesRecoveryIsNeeded as er,PrivyClientError as k}from"@privy-io/js-sdk-core";import{getUserEmbeddedEthereumWallet as Kt}from"@privy-io/js-sdk-core";import{PrivyClientError as $}from"@privy-io/js-sdk-core";function fe(y){return u(this,arguments,function*({client:e,setWallet:t,createWalletCallbacks:r,recoveryMethod:o,setRecoveryFlowState:n,password:c,recoveryKey:i,recoveryToken:s,recoverySecretOverride:d,iCloudRecordNameOverride:a,solanaAccount:p}){var b,f;switch(o){case"user-passcode":if(!c)throw new $({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"recovery-encryption-key":if(!i)throw new $({code:"embedded_wallet_recovery_error",error:"key is required for recovery-encryption-key recovery method"});break;case"google-drive":if(!s)throw new $({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!d||!a)throw new $({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:i,recoveryToken:s,recoverySecretOverride:d,iCloudRecordNameOverride:a,solanaAccount:p}),l=Kt(h);if(!l)throw new $({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 $({code:"embedded_wallet_creation_error",error:l})}})}import{Platform as Be}from"react-native";import{PrivyClientError as L}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 Pe(o){return u(this,arguments,function*({user:e,appId:t,client:r}){var s;if(Be.OS==="android")throw new L({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 L({code:"embedded_wallet_recovery_error",error:"An iCloud Container ID must be specified in the Privy Dashboard."});try{let{recoverySecret:d,iCloudRecordName:a}=yield n.writeRecoverySecretToICloud({containerId:c.container_identifier,appId:t,userId:e.id});return{recoverySecret:d,iCloudRecordName:a}}catch(d){if(d instanceof Error){let a=(s=d.message.split("Caused by: ")[1])!=null?s:"Error writing to iCloud";throw new L({code:"embedded_wallet_recovery_error",error:a})}throw new L({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 L({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let n=yield Ge(),i=(yield t.recovery.getRecoveryKeyMaterial(e,r)).icloud_record_name;if(!i)throw new L({code:"embedded_wallet_recovery_error",error:"iCloud recovery not properly backed up."});let s=yield t.recovery.icloudAuth.getICloudConfiguration("expo-ios"),d=s==null?void 0:s.container_identifier;if(!d)throw new L({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:d,recordName:i});return{recoverySecret:p}}catch(p){if(p instanceof Error){let y=(a=p.message.split("Caused by: ")[1])!=null?a:"Error writing to iCloud";throw new L({code:"embedded_wallet_recovery_error",error:y})}throw new L({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}import*as B from"expo-linking";import*as Xe from"expo-web-browser";import{Platform as Qe}from"react-native";import{PrivyClientError as Z}from"@privy-io/js-sdk-core";import bo from"react-fast-compare";import{PrivyApiError as Vt,PrivyClientError as qt}from"@privy-io/js-sdk-core";function x(e){return e instanceof Error||e instanceof Vt||e instanceof qt?e:typeof e=="string"?new Error(e):new Error("Unknown error")}var Eo=e=>new Promise(t=>setTimeout(t,e));import{useEffect as zt,useRef as Jt}from"react";import{AppState as Oe}from"react-native";function Po(){let e=Jt(Oe.currentState);zt(()=>Oe.addEventListener("change",o=>{e.current=o}).remove,[]);function t(){return Oe.currentState}return{appState:e,getCurrentAppState:t}}function ie(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(B.createURL(t||"/"));c=a;break}default:throw new Z({error:"OAuth invalid provider",code:"embedded_wallet_recovery_error"})}let i=yield Xe.openAuthSessionAsync(c);if(Qe.OS==="android")return;if(i.type!=="success")throw new Z({error:"Recovery OAuth session failed",code:"embedded_wallet_recovery_error"});let{queryParams:s}=B.parse(i.url),d;switch(e){case"google-drive":{let{privy_oauth_state:a,privy_oauth_code:p}=s;if(!p||!a)throw new Z({error:"Recovery OAuth invalid credentials",code:"embedded_wallet_recovery_error"});d=yield he({oAuthCode:p,oAuthState:a,client:r});break}default:throw new Z({error:"Recovery OAuth invalid provider",code:"embedded_wallet_recovery_error"})}return d}catch(c){throw o==null||o(x(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 Z({error:"OAuth invalid credentials",code:"login_with_oauth_returned_with_invalid_credentials"});return n})}var Ht=2*60*1e3;function Bt(e){let t;return new Promise((r,o)=>{t=B.addEventListener("url",c=>u(this,[c],function*({url:n}){if(!n)return;let{queryParams:i}=B.parse(n),{privy_oauth_state:s,privy_oauth_code:d}=i!=null?i:{};if(typeof d!="string"||typeof s!="string")return;let a=yield he({client:e,oAuthCode:d,oAuthState:s});r(a)})),setTimeout(()=>{o(new Z({code:"embedded_wallet_set_recovery_error",error:"Failed to complete Google Drive recovery flow"}))},Ht)}).finally(()=>{t==null||t.remove()})}function jo(e){return u(this,null,function*(){let t;Qe.OS==="android"&&(t=Bt(e));let r=yield ie({provider:"google-drive",client:e});return r!=null?r:yield t})}import{getUserEmbeddedWallet as Gt,PrivyClientError as Yt}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 i,s,d,a;try{let{provider:p,user:y}=yield e.embeddedWallet.setRecovery(t),v=p,b=Gt(y);return n({status:"connected",provider:v,account:b}),(s=(i=r.current)==null?void 0:i.onSuccess)==null||s.call(i,v),o({status:"initial"}),v}catch(p){let y=new Yt({code:"embedded_wallet_set_recovery_error",error:p instanceof Error?p.message:"Error setting password on embedded wallet"});throw(a=(d=r.current)==null?void 0:d.onError)==null||a.call(d,y),o({status:"initial"}),y}})}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:i,setWalletRecoveryCallbacks:s})=>{let d=j(),a=Xt(()=>Qt(d),[d]),p=D(),y=se(l=>u(void 0,null,function*(){var U,X;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:m,recoveryMethod:w,recoveryKey:_}=et(l),S,E,F;if(w==="google-drive"&&(S=yield ie({provider:w,client:e,onError:(U=c.current)==null?void 0:U.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:K,iCloudRecordName:V}=yield Pe({user:g,appId:t,client:e});E=K,F=V}return yield fe({client:e,setWallet:o,createWalletCallbacks:c,recoveryMethod:w,recoveryKey:_,setRecoveryFlowState:n,password:m,recoverySecretOverride:E,iCloudRecordNameOverride:F,solanaAccount:(X=Ze(g))!=null?X:void 0})}),[e,a,d]),v=se(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(d))throw new k({code:"embedded_wallet_set_recovery_error",error:"Cannot set user-controlled recovery for a user with an embedded Solana wallet."});if($t(a))throw new k({code:"unsupported_wallet_type",error:"Embedded wallet recovery is only supported for device reassembled embedded wallets and this app uses enclave embedded wallets. Learn more about the difference at https://docs.privy.io/recipes/enclave-wallet-migration-guide"});Zt({currentRecoveryMethod:a.recovery_method,upgradeToRecoveryMethod:l.recoveryMethod});let g,m;switch(l.recoveryMethod){case"privy":m=O(A({},l),{wallet:a});break;case"user-passcode":m=O(A({},l),{wallet:a,password:l.password});break;case"google-drive":if(g=yield ie({provider:l.recoveryMethod,client:e,onError:(w=s.current)==null?void 0:w.onError}),n({status:"upgrading-recovery"}),!g)return null;m={recoveryMethod:"google-drive",wallet:a,recoveryAccessToken:g};break;case"icloud":if(!d)throw new k({code:"embedded_wallet_recovery_error",error:"User must be loaded before backing up to iCloud."});let{recoverySecret:_,iCloudRecordName:S}=yield Pe({user:d,appId:t,client:e});m={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:m,setWalletRecoveryCallbacks:s,setRecoveryFlowState:n,setWallet:o})}),[e,a,r.status,d]),b=se(l=>u(void 0,null,function*(){return v({recoveryMethod:"user-passcode",password:l})}),[e,a,r.status]),f=se(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:m,recoveryKey:w}=et(l),_,S;if(m==="google-drive"&&(_=yield ie({provider:m,client:e,onError:(E=i.current)==null?void 0:E.onError}),n({status:"recovering"}),!_))return null;if(m==="icloud"){if(!d)throw new k({code:"embedded_wallet_recovery_error",error:"User must be loaded before recovering via iCloud."});let{recoverySecret:F}=yield Ye({client:e,walletAddress:a.address});S=F}return ve({client:e,account:a,setWallet:o,recoverWalletCallbacks:i,recoveryMethod:m,setRecoveryFlowState:n,recoveryKey:w,password:g,recoveryToken:_,recoverySecretOverride:S})}),[e,a]),h=se(()=>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 er(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(!d&&r.status!=="disconnected")return o({status:"disconnected",account:null});p&&h().catch(()=>{})},[p,d,a]),$e(()=>{r.status==="error"&&r.error.includes("User must be logged in")&&h()},[r.status]),{create:y,recover:f,setPassword:b,setRecovery:v,getProvider:h}};import{useEffect as tr,useState as rr}from"react";import{PrivyClientError as rt}from"@privy-io/js-sdk-core";var ot=({client:e,isReady:t})=>{let r=j(),o=pe(i=>i==null?void 0:i.customAuth),[n,c]=rr({status:"initial"});return tr(()=>{(()=>u(void 0,null,function*(){if(!(o!=null&&o.enabled)){c({status:"not-enabled"});return}c({status:"loading"});let{getCustomAccessToken:s,isLoading:d}=o;if(!(!t||d))try{let a=yield s();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=J();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 ee from"expo-linking";import{useCallback as or,useEffect as ar}from"react";import{Platform as nr}from"react-native";var at=({client:e,isUserInitialized:t,oAuthState:r,oAuthCallbacks:o,setOAuthState:n,recoveryFlowState:c,oAuthStateRef:i})=>{let s=ee.useURL(),d=or(a=>{var y,v;let p=x(a);n({status:"error",error:p}),(v=(y=o.current).onError)==null||v.call(y,p)},[n]);return ar(()=>{function a(){return u(this,null,function*(){var b,f;if(!s||r.status!=="loading"||c.status!=="initial")return;let{queryParams:p}=ee.parse(s),{privy_oauth_state:y,privy_oauth_code:v}=p;if(!v||!y){n({status:"done"});return}try{let h,l;if(ye())({user:h}=yield e.auth.oauth.linkWithCode(v,y));else{let m=J(),w=yield e.auth.oauth.loginWithCode(v,y,void 0,void 0,i.current.disableSignup?"no-signup":"login-or-sign-up",{embedded:m==null?void 0:m.embedded});h=w.user,l=!!w.is_new_user}return(f=(b=o.current).onSuccess)==null||f.call(b,h,l),i.current={},n({status:"done"}),yield ee.openURL(s.split("?")[0])}catch(h){i.current={},d(h)}})}nr.OS==="android"&&t&&a()},[s,t])};import*as te from"expo-linking";import{useCallback as ir,useEffect as sr,useMemo as dr}from"react";import{Platform as cr}from"react-native";import{getUserEmbeddedSolanaWallet as lr,getUserEmbeddedWallet as ur}from"@privy-io/js-sdk-core";var nt=({client:e,createWalletCallbacks:t,recoverWalletCallbacks:r,setWalletRecoveryCallbacks:o,recoveryFlowState:n,oAuthState:c,setRecoveryFlowState:i,setWallet:s,appStateVisible:d})=>{let a=te.useURL(),p=j(),y=dr(()=>ur(p),[p]),v=D(),b=ir(f=>{var l,g,m,w;let h=x(f);n.status==="creating-wallet"?(g=(l=t.current).onError)==null||g.call(l,x(h)):(w=(m=r.current).onError)==null||w.call(m,x(h)),i({status:"initial"})},[n]);return sr(()=>{function f(){return u(this,null,function*(){var m;if(!a&&n.status!=="initial"&&d&&b(new Error("Recovery OAuth session failed")),!a||n.status==="initial"||c.status!=="initial"||!d||!v)return;let{queryParams:h}=te.parse(a),{privy_oauth_state:l,privy_oauth_code:g}=h;if(!(!g||!l)){yield te.openURL(a.split("?")[0]);try{let w=yield he({oAuthCode:g,oAuthState:l,client:e});if(n.status==="creating-wallet"){let _=(m=lr(p))!=null?m:void 0;yield fe({client:e,setWallet:s,createWalletCallbacks:t,recoveryMethod:"google-drive",setRecoveryFlowState:i,recoveryToken:w,solanaAccount:_})}else if(n.status==="upgrading-recovery"){if(!y)throw new Error("Embedded wallet not found");yield we({client:e,recoveryInput:{recoveryMethod:"google-drive",wallet:y,recoveryAccessToken:w},setWalletRecoveryCallbacks:o,setRecoveryFlowState:i,setWallet:s})}else yield ve({client:e,account:y,setWallet:s,recoverWalletCallbacks:r,recoveryMethod:"google-drive",setRecoveryFlowState:i,recoveryToken:w})}catch(w){b(w)}}})}cr.OS==="android"&&f()},[a,n.status,d,v])};import{useEffect as pr}from"react";var it=({client:e,isUserInitialized:t,setIsUserInitialized:r,setError:o})=>{pr(()=>{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 mr}from"expo-crypto";import vr from"@privy-io/js-sdk-core";var st={name:"@privy-io/expo",version:"0.53.5",description:"Expo client for the Privy Auth API",keywords:["authentication","authorization","identity","privacy","privy","user data","react-native","expo","web3"],homepage:"https://docs.privy.io",bugs:{url:"https://privy.io/slack"},license:"Apache-2.0",author:"privy.io",exports:{".":{require:"./dist/index.js",import:"./dist/esm/index.js",types:"./dist/index.d.ts"},"./passkey":{require:"./dist/passkey.js",import:"./dist/esm/passkey.js",types:"./dist/passkey.d.ts"},"./smart-wallets":{require:"./dist/smart-wallets.js",import:"./dist/esm/smart-wallets.js",types:"./dist/smart-wallets.d.ts"},"./ui":{require:"./dist/ui.js",import:"./dist/esm/ui.js",types:"./dist/ui.d.ts"},"./connectors":{require:"./dist/connectors.js",import:"./dist/esm/connectors.js",types:"./dist/connectors.d.ts"}},main:"./dist/esm/index.js",source:"./src/index.ts",types:"./dist/index.d.ts",files:["dist/**/*","LICENSE","README.md"],scripts:{build:"tsup --clean --minify","check-types":"tsc --noEmit",clean:"rm -rf dist .turbo",dev:"tsup --watch",format:'eslint "src/**/*.{ts,tsx,js,jsx}" --fix',"generate-types":"tsup --dts-only",lint:'eslint "src/**/*.{ts,tsx,js,jsx}"',test:"jest"},browserslist:["defaults","node >= 18","not op_mini all"],dependencies:{"@privy-io/js-sdk-core":"0.50.5","@scure/base":"^1.2.4",tweetnacl:"^1.0.3","react-fast-compare":"^3.2.2",zustand:"^5.0.4"},devDependencies:{"@privy-io/eslint-config-custom":"*","@privy-io/tsconfig":"*","@simplewebauthn/types":"9.0.1","@solana/web3.js":"^1.98.0","@svgr/core":"^8.1.0","@svgr/plugin-jsx":"^8.1.0","@svgr/plugin-svgo":"^8.1.0","@testing-library/react-native":"^13.1.0","@tsconfig/node16-strictest-esm":"^1.0.3","@types/jest":"^29.1.2",buffer:"^5.4.3","eslint-plugin-react-hooks":"^5.0.0-canary-7118f5dd7-20230705",expo:"52.0.37","expo-apple-authentication":"7.1.3","expo-application":"6.0.2","expo-clipboard":"7.0.1","expo-crypto":"14.0.2",jest:"^29.7.0","jest-expo":"52.0.5","lucide-react-native":"^0.474.0",react:"^18.3.1","react-native":"0.77.1","react-test-renderer":"^18.3.1",tsup:"^6.2.3",typescript:"~5.5.3"},peerDependencies:{"@expo-google-fonts/inter":"*","@privy-io/expo-native-extensions":"0.0.5","expo-apple-authentication":"*","expo-application":"*","expo-clipboard":"*","expo-crypto":"*","expo-font":"*","expo-linking":"*","expo-secure-store":"*","expo-web-browser":"*",permissionless:"^0.2.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 vr({appId:e,clientId:t,supportedChains:o,storage:ct(r),sdkVersion:`expo:${st.version}`,nativeAppIdentifier:dt(),crypto:{digest:mr},baseUrl:n,logLevel:c});var Se=hr(null),re;function Ya(e){return re?re.getAccessToken():e!=null&&e.strict?Promise.reject(new yt({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=>{gr();let[t,r]=R(pt.currentState==="active");ut(()=>{let M=pt.addEventListener("change",At=>{r(At==="active")});return()=>{M.remove()}},[]),ut(()=>Te(e.config),[e.config]);let[o,n]=R(!1),[c,i]=R(null),[s,d]=R(!1),[a,p]=R({status:"disconnected",account:null}),[y,v]=R({status:"disconnected"}),[b,f]=R({status:"initial"}),[h,l]=R({status:"initial"}),g=G({}),[m,w]=R({status:"initial"}),[_,S]=R({status:"initial"}),[E,F]=R({status:"initial"}),[U,X]=R({status:"initial"}),[K,V]=R({status:"initial"}),q=G({}),T=G({}),P=G({}),z=G({}),ae=G({}),Ue=G({}),ue=ge(M=>{if(M){Ae(M),i(null);return}Ae(null),f({status:"initial"}),l({status:"initial"}),p({status:"disconnected",account:null})},[]),C=fr(()=>{let M=e.storage||be;return e.client?re=e.client:re=lt({appId:e.appId,clientId:e.clientId,supportedChains:e.supportedChains,storage:M,baseUrl:e.baseUrl,logLevel:e.logLevel}),re.setCallbacks({setUser:ue,setIsReady:d}),re},[e.client,e.storage,e.appId,e.clientId,e.baseUrl,e.supportedChains,e.logLevel,ue]),ht=ge(()=>(ue(null),C.auth.logout()),[ue,C]),wt=ge(()=>u(void 0,null,function*(){try{return yield C.getAccessToken()}catch(M){return console.debug(M),null}}),[C]),bt=ge(()=>C.getIdentityToken(),[C]);it({client:C,isUserInitialized:o,setIsUserInitialized:n,setError:i});let gt=tt({client:C,appId:e.appId,createWalletCallbacks:T,recoverWalletCallbacks:P,setWalletRecoveryCallbacks:z,setRecoveryFlowState:w,wallet:a,setWallet:p}),St=He({client:C,createSolanaWalletCallbacks:ae,recoverSolanaWalletCallbacks:Ue,setSolanaRecoveryFlowState:S,solanaWallet:y,setSolanaWallet:v});at({client:C,isUserInitialized:o,oAuthState:h,setOAuthState:l,oAuthCallbacks:q,recoveryFlowState:m,oAuthStateRef:g}),nt({client:C,createWalletCallbacks:T,recoverWalletCallbacks:P,setWalletRecoveryCallbacks:z,recoveryFlowState:m,oAuthState:h,setRecoveryFlowState:w,setWallet:p,appStateVisible:t});let{customAuthStateIsSettled:_t}=ot({client:C,isReady:o}),Et=D();return de.createElement(de.Fragment,null,de.createElement(Se.Provider,{value:{client:C,isReady:Et&&o&&_t,error:c,logout:ht,getAccessToken:wt,getIdentityToken:bt,wallet:A(A({},a),gt),solanaWallet:A(A({},y),St),oAuthState:h,oAuthCallbacks:q,recoveryFlowState:m,setRecoveryFlowState:w,solanaRecoveryFlowState:_,setSolanaRecoveryFlowState:S,createWalletCallbacks:T,recoverWalletCallbacks:P,setWalletRecoveryCallbacks:z,createSolanaWalletCallbacks:ae,recoverSolanaWalletCallbacks:Ue,setOAuthState:l,siweState:E,setSiweState:F,otpState:b,setOtpState:f,passkeyState:U,setPasskeyState:X,farcasterState:K,setFarcasterState:V,oAuthStateRef:g}},e.children),de.createElement(br,{style:{width:0,height:0,overflow:"hidden"}},de.createElement(De,{client:C,isClientReady:s})))},gr=()=>{if(wr(Se))throw new yt({code:"configuration_error",error:"Found multiple instances of PrivyProvider, ensure there is only one mounted in your application tree."})};import*as ce from"expo-apple-authentication";import{PrivyClientError as Sr}from"@privy-io/js-sdk-core";function mt(e){return u(this,null,function*(){try{return yield ce.signInAsync({state:e.state,requestedScopes:[ce.AppleAuthenticationScope.EMAIL,ce.AppleAuthenticationScope.FULL_NAME]})}catch(t){throw t instanceof Error&&"code"in t&&t.code==="ERR_REQUEST_CANCELED"?new Sr({error:"Apple login was cancelled",code:e.isLogin?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):t}})}var xe=(e={})=>{let{oAuthState:t,setOAuthState:r,oAuthCallbacks:o,client:n,oAuthStateRef:c}=_r(Se),i=je(),s=e.action?e.action==="login":!i;Er(()=>{o.current={onSuccess:e.onSuccess,onError:e.onError}},[e.onSuccess,e.onError]);let d=ft(p=>{var v;let y=x(p);return r({status:"error",error:y}),(v=e==null?void 0:e.onError)==null||v.call(e,y),y},[e==null?void 0:e.onError]);return{start:ft(function(h){return u(this,arguments,function*({provider:y,redirectUri:v,isLegacyAppleIosBehaviorEnabled:b=!1,disableSignup:f}){var g,m,w;r({status:"loading"}),c.current={disableSignup:f};let l=ye();try{if(l&&e.action==="login")throw new Y({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 Y({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(y,oe.createURL(v||"/")),S,E;if(We.OS==="ios"&&y==="apple"&&!b){let T=(g=new URL(_).searchParams.get("state"))!=null?g:"",P=yield mt({state:T,isLogin:s});if(!P.authorizationCode||!P.state)throw new Y({error:"OAuth invalid credentials",code:s?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(s){let z=J(),ae=yield n.auth.oauth.loginWithCode(P.authorizationCode,P.state,y,"raw",f?"no-signup":"login-or-sign-up",{embedded:z==null?void 0:z.embedded});S=ae.user,E=ae.is_new_user}else({user:S}=yield n.auth.oauth.linkWithCode(P.authorizationCode,P.state,y,"raw"));return(m=e==null?void 0:e.onSuccess)==null||m.call(e,S,E),r({status:"done"}),S!=null?S:void 0}let F=We.OS==="android"?_.replace("x.com","twitter.com"):_,U=yield le.openAuthSessionAsync(F);if(We.OS==="android")return;if(U.type!=="success")throw[le.WebBrowserResultType.CANCEL,le.WebBrowserResultType.DISMISS].includes(U.type)?new Y({error:"OAuth was cancelled",code:s?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):new Y({error:"OAuth session failed",code:s?"failed_to_complete_login_with_oauth":"failed_to_complete_link_with_oauth"});let{queryParams:X}=oe.parse(U.url),{privy_oauth_state:K,privy_oauth_code:V}=X;if(!V||!K)throw new Y({error:"OAuth invalid credentials",code:s?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(s){let q=J(),T=yield n.auth.oauth.loginWithCode(V,K,y,void 0,f?"no-signup":"login-or-sign-up",{embedded:q==null?void 0:q.embedded});S=T.user,E=T.is_new_user}else({user:S}=yield n.auth.oauth.linkWithCode(V,K,y));return(w=e==null?void 0:e.onSuccess)==null||w.call(e,S,E),yield oe.openURL(U.url.split("?")[0]),r({status:"done"}),S!=null?S:void 0}catch(_){d(_)}})},[n,r,d]),state:t}};function pn(e){let{state:t,start:r}=xe(O(A({},e),{action:"login"}));return{state:t,login:r}}function yn(e){let{state:t,start:r}=xe(O(A({},e),{action:"link"}));return{state:t,link:r}}function mn(e){return xe(e)}var dt=()=>{if(typeof vt!="string")throw new Y({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 I.getItemAsync(e,{keychainAccessible:I.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},put(e,t){return I.setItemAsync(e,t,{keychainAccessible:I.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},del(e){return I.deleteItemAsync(e,{keychainAccessible:I.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},getKeys:()=>u(void 0,null,function*(){return[]})};import{PrivyClientError as Ar}from"@privy-io/js-sdk-core";var Cr=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(A({},r),{type:(o=r.type)!=null?o:"public-key",clientExtensionResults:{}})});import{PrivyClientError as kr}from"@privy-io/js-sdk-core";var Rr=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 kr({code:"no_passkey_found_for_challenge",error:"Could not find a matching passkey to login with"});return O(A({},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:i,transports:s})=>({id:c,type:i,transports:s})),userVerification:e.user_verification}}function Wn(e){var t,r,o,n,c,i,s,d;return{rp:e.rp,user:{id:e.user.id,name:e.user.name,displayName:e.user.display_name},challenge:e.challenge,pubKeyCredParams:e.pub_key_cred_params,extensions:{hmacCreateSecret:(t=e.extensions)==null?void 0:t.hmac_create_secret,credProps:(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:(i=e.authenticator_selection)==null?void 0:i.resident_key,userVerification:(s=e.authenticator_selection)==null?void 0:s.user_verification,requireResidentKey:(d=e.authenticator_selection)==null?void 0:d.require_resident_key}}}export{J as a,ye as b,jr as c,j as d,je as e,Fe as f,Wr as g,Pe as h,Ye as i,x as j,Eo as k,Po as l,jo as m,pn as n,yn as o,mn as p,be as q,lt as r,Se as s,Ya as t,Xa as u,Cr as v,Rr as w,Pn as x,On as y,Wn as z};
|
package/dist/esm/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as rt,b as it,c as pt,d as ut,e as nt,f as ht,g as ft,h as st}from"./chunk-QSWCX5XI.js";import{A as T,B as V,C as X,D as Y,E as Z,F as _,G as $,H as E,I as tt,J as ot,K as et,L as i,a as P,b as g,c as L,d as W,e as v,f as N,g as R,h as k,i as C,j as I,k as U,l as w,m as F,n as S,o as G,p as B,q as H,r as b,s as j,t as q,u as z,v as D,w as J,x as K,y as M,z as Q}from"./chunk-
|
|
1
|
+
import{a as rt,b as it,c as pt,d as ut,e as nt,f as ht,g as ft,h as st}from"./chunk-QSWCX5XI.js";import{A as T,B as V,C as X,D as Y,E as Z,F as _,G as $,H as E,I as tt,J as ot,K as et,L as i,a as P,b as g,c as L,d as W,e as v,f as N,g as R,h as k,i as C,j as I,k as U,l as w,m as F,n as S,o as G,p as B,q as H,r as b,s as j,t as q,u as z,v as D,w as J,x as K,y as M,z as Q}from"./chunk-OIMVESOY.js";import{e as r,g as y,n as a,o as m,p as x,q as c,r as d,s as A,t as O,u as l}from"./chunk-SSXTLFH6.js";import"./chunk-OWCFWPAL.js";export*from"@privy-io/js-sdk-core";import t from"react";var ct=({loading:p,error:o,unauthenticated:u,children:n})=>{let{isReady:h,error:e}=i(),f=r();if(!h)return t.createElement(t.Fragment,null,p);if(e&&o){let s=typeof o=="function"?o(e):o;return t.createElement(t.Fragment,null,s)}return f?t.createElement(t.Fragment,null,n):t.createElement(t.Fragment,null,u)};export{ct as AuthBoundary,A as PrivyContext,l as PrivyProvider,c as SecureStorageAdapter,d as createPrivyClient,O as getAccessToken,ft as hasError,rt as isConnected,pt as isConnecting,ht as isCreating,ut as isDisconnected,nt as isNotCreated,it as isReconnecting,st as needsRecovery,Z as useCreateGuestAccount,et as useEmbeddedBitcoinWallet,tt as useEmbeddedEthereumWallet,ot as useEmbeddedSolanaWallet,V as useEmbeddedWallet,X as useEmbeddedWalletStateChange,H as useHeadlessDelegatedActions,Y as useIdentityToken,R as useLinkEmail,C as useLinkSMS,D as useLinkWithCrossApp,U as useLinkWithFarcaster,m as useLinkWithOAuth,P as useLinkWithSiwe,W as useLinkWithSiws,z as useLoginWithCrossApp,k as useLoginWithEmail,F as useLoginWithFarcaster,S as useLoginWithFarcasterV2,a as useLoginWithOAuth,I as useLoginWithSMS,g as useLoginWithSiwe,v as useLoginWithSiws,$ as useMfa,E as useMfaEnrollment,x as useOAuthFlow,B as useOAuthTokens,y as useOnNeedsRecovery,i as usePrivy,L as usePrivyClient,T as useRecoverEmbeddedWallet,_ as useRegisterMfaListener,M as useSendTransactionWithCrossApp,b as useSessionSigners,Q as useSetEmbeddedWalletRecovery,J as useSignMessageWithCrossApp,K as useSignTypedDataWithCrossApp,w as useUnlinkFarcaster,G as useUnlinkOAuth,N as useUnlinkWallet,j as useUpdateEmail,q as useUpdatePhone};
|
package/dist/esm/passkey.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as q,b as D,c as F,d as J,e as K,f as N,g as T,h as M}from"./chunk-QSWCX5XI.js";import{a as b,b as m,j as g,s as p,v as d,w as C,z as S}from"./chunk-
|
|
1
|
+
import{a as q,b as D,c as F,d as J,e as K,f as N,g as T,h as M}from"./chunk-QSWCX5XI.js";import{a as b,b as m,j as g,s as p,v as d,w as C,z as S}from"./chunk-SSXTLFH6.js";import{d as l}from"./chunk-OWCFWPAL.js";import{useCallback as x,useContext as U}from"react";import{PrivyClientError as R}from"@privy-io/js-sdk-core";var X=e=>{let{client:n,passkeyState:h,setPasskeyState:s}=U(p),c=x(o=>{var r;let a=g(o);return s({status:"error",error:a}),(r=e==null?void 0:e.onError)==null||r.call(e,a),a},[e==null?void 0:e.onError]);return{linkWithPasskey:x(a=>l(void 0,[a],function*({relyingParty:o}){var r;try{if(!m())throw new R({code:"attempted_link_passkey_before_logged_in",error:"Must be logged in to link a passkey."});s({status:"generating-challenege"});let{options:u}=yield n.auth.passkey.generateRegistrationOptions(o);s({status:"awaiting-passkey"});let k=yield d(S(u));s({status:"submitting-response"});let{user:y}=yield n.auth.passkey.linkWithPasskey(k,o);return s({status:"done"}),(r=e==null?void 0:e.onSuccess)==null||r.call(e,y),y}catch(t){throw c(t)}}),[n,c,e==null?void 0:e.onSuccess]),state:h}};import{useCallback as E,useContext as v}from"react";import{PrivyClientError as H}from"@privy-io/js-sdk-core";var ne=e=>{let{client:n,passkeyState:h,setPasskeyState:s}=v(p),c=E(o=>{var r;let a=g(o);return s({status:"error",error:a}),(r=e==null?void 0:e.onError)==null||r.call(e,a),a},[e==null?void 0:e.onError]);return{loginWithPasskey:E(a=>l(void 0,[a],function*({relyingParty:o}){var r,t,u,k;try{if(m())throw new H({code:"attempted_login_with_passkey_while_already_logged_in",error:"Already logged in, use `useLinkWithPasskey` if you are trying to link a passkey to an existing account"});s({status:"generating-challenege"});let{options:i}=yield n.auth.passkey.generateAuthenticationOptions(o);s({status:"awaiting-passkey"});let P=yield C({challenge:i.challenge,rpId:i.rp_id,extensions:{appid:(r=i.extensions)==null?void 0:r.app_id,credProps:(t=i.extensions)==null?void 0:t.cred_props,hmacCreateSecret:(u=i.extensions)==null?void 0:u.hmac_create_secret},timeout:i.timeout,allowCredentials:i.allow_credentials,userVerification:i.user_verification});s({status:"submitting-response"});let w=b(),_=yield n.auth.passkey.loginWithPasskey(P,i.challenge,o,{embedded:w==null?void 0:w.embedded});return s({status:"done"}),(k=e==null?void 0:e.onSuccess)==null||k.call(e,_.user,_.is_new_user),_.user}catch(y){throw c(y)}}),[n,c,e==null?void 0:e.onSuccess]),state:h}};import{useCallback as O,useContext as I,useEffect as L,useRef as A}from"react";import{PrivyClientError as V}from"@privy-io/js-sdk-core";var me=e=>{let{client:n,passkeyState:h,setPasskeyState:s}=I(p),c=A(e);L(()=>{c.current=e},[e]);let f=O(a=>{var t,u;let r=g(a);return s({status:"error",error:r}),(u=(t=c.current)==null?void 0:t.onError)==null||u.call(t,r),r},[s]);return{signupWithPasskey:O(r=>l(void 0,[r],function*({relyingParty:a}){var t,u;try{if(m())throw new V({code:"attempted_login_with_passkey_while_already_logged_in",error:"Already logged in, use `useLinkWithPasskey` if you are trying to link a passkey to an existing account"});s({status:"generating-challenege"});let{options:y}=yield n.auth.passkey.generateSignupOptions(a);s({status:"awaiting-passkey"});let i=yield d(S(y));s({status:"submitting-response"});let P=yield n.auth.passkey.signupWithPasskey(i,a);return s({status:"done"}),(u=(t=c.current)==null?void 0:t.onSuccess)==null||u.call(t,P.user,P.is_new_user),{user:P.user}}catch(k){throw f(k)}}),[n.auth.passkey,f,s]),state:h}};export{T as hasError,q as isConnected,F as isConnecting,N as isCreating,J as isDisconnected,K as isNotCreated,D as isReconnecting,M as needsRecovery,X as useLinkWithPasskey,ne as useLoginWithPasskey,me as useSignupWithPasskey};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as A}from"./chunk-QSWCX5XI.js";import{c as I}from"./chunk-
|
|
1
|
+
import{a as A}from"./chunk-QSWCX5XI.js";import{c as I}from"./chunk-OIMVESOY.js";import{b as E,d as w,s as C}from"./chunk-SSXTLFH6.js";import{d as s}from"./chunk-OWCFWPAL.js";import m,{createContext as g,useCallback as X,useContext as p,useEffect as v,useState as k}from"react";import{getUserSmartWallet as S,PrivyClientError as d}from"@privy-io/js-sdk-core";import{createPublicClient as $,http as F}from"viem";import{getJsonRpcEndpointFromChain as L,getUserSmartWallet as M,PrivyClientError as T}from"@privy-io/js-sdk-core";import{signerToSmartAccountClient as G}from"@privy-io/js-sdk-core/smart-wallets";var W=l=>s(void 0,[l],function*({chain:t,privyAppId:e,user:a,embeddedWallet:r,smartWalletsConfig:n,client:o}){var b,x;if(!(n!=null&&n.enabled)||!r||!A(r))return;let u=yield o.embeddedWallet.getProvider(r.account),i=n==null?void 0:n.configured_networks.find(O=>O.chain_id===`eip155:${t.id}`);if(!i)throw new T({code:"chain_not_supported",error:`The chain ${t.name} (eip155:${t.id}) must be configured in the smart wallet configuration in your dashboard`});let f=(x=(b=M(a))==null?void 0:b.smart_wallet_type)!=null?x:n.smart_wallet_type,y=L(t,{rpcUrls:[]},e),h=$({chain:t,transport:F(y)}),P=yield G({owner:u,smartWalletType:f,chain:t,publicClient:h,paymasterContext:j(i.paymaster_url,i.paymaster_context),bundlerUrl:i.bundler_url,paymasterUrl:i.paymaster_url});if(!P)throw new T({code:"smart_wallet_client_error",error:`Failed to create smart wallet client for chain ${t.name} (eip155:${t.id})`});return P}),B=/paymaster\.biconomy\.io\/api/i;function D(t){return B.test(t)}var Y={mode:"SPONSORED",calculateGasLimits:!0,expiryDuration:300,sponsorshipInfo:{webhookData:{},smartAccountInfo:{name:"BICONOMY",version:"2.0.0"}}},j=(t,e)=>{if(t&&D(t))return Y;if(e&&e.policy_id)return{policyId:e.policy_id}};var J=({children:t})=>m.createElement(H,null,m.createElement(K,null,m.createElement(Q,null,t))),R=g({config:void 0}),_=()=>{let{config:t}=p(R);return{config:t}},U=g({smartWalletClient:void 0}),q=()=>{let{smartWalletClient:t}=p(U);return{smartWalletClient:t}},N=g({client:void 0}),z=()=>{let{client:t}=p(N),e=V();return{client:t,getClientForChain:e}},H=({children:t})=>{let[e,a]=k(void 0),r=I();return v(()=>{!e&&r&&(()=>s(void 0,null,function*(){try{if(!r){console.warn("No client found");return}let o=yield r.app.getSmartWalletConfig();a(o)}catch(o){console.warn("Error generating smart wallet config: ",o)}}))()},[r,e]),m.createElement(R.Provider,{value:{config:e}},t)},K=({children:t})=>{let{config:e}=_(),{client:a,wallet:r}=p(C),n=w(),[o,l]=k();return v(()=>{(()=>s(void 0,null,function*(){if(!n&&o&&l(void 0),!(e!=null&&e.enabled)||!n||r.status!=="connected"||n&&o&&r.status==="connected")return;let i=a.embeddedWallet.chains.find(y=>e.configured_networks.map(h=>h.chain_id).includes(`eip155:${y.id}`));if(!i)throw new d({error:"Could not find smart wallets chain configurations for any Privy client configured chains. Please configure smart wallets for your chains in the Privy dashboard.",code:"chain_not_supported"});let f=yield W({chain:i,privyAppId:a.app.appId,user:n,embeddedWallet:r,smartWalletsConfig:e,client:a});if(!f)throw new d({error:"Could not create smart wallet client",code:"smart_wallet_client_error"});l(f)}))()},[!!(e!=null&&e.enabled),!!a,!!n,r.status]),m.createElement(U.Provider,{value:{smartWalletClient:o}},t)},Q=({children:t})=>{let{client:e}=p(C),a=w(),{smartWalletClient:r}=q(),{config:n}=_();return v(()=>{(()=>s(void 0,null,function*(){if(!(!r||!a||S(a)||!(n!=null&&n.enabled)))try{let{message:l}=yield e.auth.smartWallet.init({address:r.account.address,chainId:`eip155:${r.chain.id}`}),c=yield r.signMessage({message:l});yield e.auth.smartWallet.link(l,c,n.smart_wallet_type)}catch(l){console.error("Error creating smart wallet:",l)}}))()},[!!r,!!a,!!S(a),n]),m.createElement(N.Provider,{value:{client:S(a)?r:void 0}},t)},V=()=>{let{client:t,wallet:e}=p(C),{config:a}=_();return X(n=>s(void 0,[n],function*({chainId:r}){let o=E();if(!o)throw new d({error:"Must be logged in to get a smart wallet client",code:"smart_wallet_client_error"});if(!a||!a.enabled)throw new d({error:"Must have smart wallets enabled to get a smart wallet client",code:"smart_wallet_client_error"});let c=t.embeddedWallet.chains.find(i=>i.id===r);if(!c)throw new d({error:`Could not find chain with id: ${r}`,code:"chain_not_supported"});let u=yield W({chain:c,privyAppId:t.app.appId,user:o,embeddedWallet:e,smartWalletsConfig:a,client:t});if(!u)throw new d({error:`Could not create smart wallet client for chain ${r}`,code:"smart_wallet_client_error"});return u}),[a,e,t])};export{J as SmartWalletsProvider,z as useSmartWallets};
|