@privy-io/expo 0.22.6 → 0.22.7
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var tt=Object.defineProperty,rt=Object.defineProperties;var ot=Object.getOwnPropertyDescriptors;var fe=Object.getOwnPropertySymbols;var at=Object.prototype.hasOwnProperty,nt=Object.prototype.propertyIsEnumerable;var he=(e,t,a)=>t in e?tt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a,k= exports.a =(e,t)=>{for(var a in t||(t={}))at.call(t,a)&&he(e,a,t[a]);if(fe)for(var a of fe(t))nt.call(t,a)&&he(e,a,t[a]);return e},L= exports.b =(e,t)=>rt(e,ot(t));var y=(e,t,a)=>new Promise((r,c)=>{var n=i=>{try{l(a.next(i))}catch(d){c(d)}},s=i=>{try{l(a.throw(i))}catch(d){c(d)}},l=i=>i.done?r(i.value):Promise.resolve(i.value).then(n,s);l((a=a.apply(e,t)).next())});var _expoappleauthentication = require('expo-apple-authentication'); var Ge = _interopRequireWildcard(_expoappleauthentication);var _expoapplication = require('expo-application');var _expolinking = require('expo-linking'); var N = _interopRequireWildcard(_expolinking); var ee = _interopRequireWildcard(_expolinking); var M = _interopRequireWildcard(_expolinking); var T = _interopRequireWildcard(_expolinking);var _exposecurestore = require('expo-secure-store'); var A = _interopRequireWildcard(_exposecurestore);var _expowebbrowser = require('expo-web-browser'); var X = _interopRequireWildcard(_expowebbrowser); var Ue = _interopRequireWildcard(_expowebbrowser);var _react = require('react'); var _react2 = _interopRequireDefault(_react);var _reactnative = require('react-native');var _jssdkcore = require('@privy-io/js-sdk-core'); var _jssdkcore2 = _interopRequireDefault(_jssdkcore);var _expocrypto = require('expo-crypto');var Ee={name:"@privy-io/expo",version:"0.22.6",description:"Expo client for the Privy Auth API",keywords:["authentication","authorization","identity","privacy","privy","user data","react-native","expo","web3"],license:"Apache-2.0",source:"./src/index.ts",main:"./dist/esm/index.js",types:"./dist/index.d.ts",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"}},files:["dist/**/*","LICENSE","README.md"],scripts:{build:"npx tsup --clean --minify","generate-types":"npx tsup --dts-only",clean:"rm -rf dist .turbo",dev:"npx tsup --watch",test:'jest --testMatch "**/test/**/*.test.ts"',"test:ci":"npm run test",lint:'eslint "src/**/*.{ts,tsx,js,jsx}" && npx tsc --noEmit',format:'eslint "src/**/*.{ts,tsx,js,jsx}" --fix'},peerDependencies:{"@privy-io/expo-native-extensions":"0.0.3",react:"*","react-native":"*","react-native-passkeys":"^0.2.1","react-native-webview":"*","expo-constants":"*","expo-linking":"*","expo-crypto":"*","expo-secure-store":"*","expo-application":"*","expo-apple-authentication":"*","expo-web-browser":"*"},dependencies:{"@privy-io/js-sdk-core":"0.26.3","react-fast-compare":"^3.2.2"},devDependencies:{"@privy-io/eslint-config-custom":"*","@privy-io/tsconfig":"*","@simplewebauthn/types":"9.0.1","@tsconfig/node16-strictest-esm":"^1.0.3",tsup:"^6.2.3",typescript:"~5.5.3"},author:"privy.io",publishConfig:{access:"public"}};var _reactnativewebview = require('react-native-webview'); var _reactnativewebview2 = _interopRequireDefault(_reactnativewebview);var _e=({client:e,isClientReady:t,setWebViewState:a,webViewState:r,logLevel:c})=>{let n=_react.useRef.call(void 0, null);_react.useEffect.call(void 0, ()=>{n.current&&r==="loaded"&&e.setMessagePoster(n.current)},[e,n.current,r==="loaded"]),_react.useEffect.call(void 0, ()=>_reactnative.AppState.addEventListener("change",i=>y(void 0,null,function*(){n.current&&i==="active"&&((yield e.embeddedWallet.ping(500))||(n.current.reload(),a("reloading")))})).remove,[]);let s=_react.useCallback.call(void 0, l=>y(void 0,null,function*(){let{data:i}=l.nativeEvent;e.embeddedWallet.onMessage(JSON.parse(i))}),[e]);return t?_react2.default.createElement(_reactnativewebview2.default,{style:{flex:1},ref:n,source:{uri:e.embeddedWallet.getURL()},webviewDebuggingEnabled:c==="DEBUG",onLoad:()=>a("loaded"),onError:console.error,onMessage:s}):null};function Q(d){return y(this,arguments,function*({client:e,setWallet:t,createWalletCallbacks:a,recoveryMethod:r,setRecoveryFlowState:c,password:n,recoveryToken:s,recoverySecretOverride:l,iCloudRecordNameOverride:i}){var u,m;switch(r){case"user-passcode":if(!n)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!s)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!l||!i)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery failed due to inability to store credentials"});break}t({status:"creating",account:null});let o=r==="icloud"?"icloud-native":r;try{let{provider:f,user:v}=yield e.embeddedWallet.create(n,o,s,l,i),w=_jssdkcore.getUserEmbeddedWallet.call(void 0, v);return(m=(u=a.current)==null?void 0:u.onSuccess)==null||m.call(u,f),t({status:"connected",provider:f,account:w}),c({status:"initial"}),f}catch(f){let v=f instanceof Error?f.message:"Error creating embedded wallet";throw t({status:"error",error:v,account:null}),c({status:"initial"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:v})}})}function We(n){return y(this,arguments,function*({client:e,setSolanaWallet:t,createSolanaWalletCallbacks:a,setSolanaRecoveryFlowState:r,ethereumAccount:c}){var s,l;t({status:"creating"});try{let i=yield e.embeddedWallet.createSolana({ethereumAccount:c});return(l=(s=a.current)==null?void 0:s.onSuccess)==null||l.call(s,i),t({status:"connected",publicKey:i._publicKey}),r({status:"initial"}),i}catch(i){let d=i instanceof Error?i.message:"Error creating embedded wallet";throw t({status:"error",error:d}),r({status:"initial"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:d})}})}function Z(d){return y(this,arguments,function*({client:e,account:t,setWallet:a,recoverWalletCallbacks:r,recoveryMethod:c,setRecoveryFlowState:n,password:s,recoveryToken:l,recoverySecretOverride:i}){var o,u,m,f;if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});switch(c){case"user-passcode":if(!s)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!l)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!i)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Record name is required for icloud recovery method"});break}a({status:"connecting",account:t});try{let v=yield e.embeddedWallet.getProvider(t,s,l,i);return a({status:"connected",provider:v,account:t}),n({status:"initial"}),(u=(o=r.current)==null?void 0:o.onSuccess)==null||u.call(o,v),v}catch(v){a({status:"needs-recovery",account:t}),n({status:"initial"});let w=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:v instanceof Error?v.message:"Error recovering embedded wallet"});throw(f=(m=r.current)==null?void 0:m.onError)==null||f.call(m,w),w}})}function Ce(n){return y(this,arguments,function*({client:e,solanaAccount:t,setSolanaWallet:a,recoverSolanaWalletCallbacks:r,setSolanaRecoveryFlowState:c}){var s,l,i,d;if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});a({status:"connecting"});try{let o=yield e.embeddedWallet.getSolanaProvider(t);return a({status:"connected",publicKey:o._publicKey}),c({status:"initial"}),(l=(s=r.current)==null?void 0:s.onSuccess)==null||l.call(s,o),o}catch(o){a({status:"needs-recovery"}),c({status:"initial"});let u=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:o instanceof Error?o.message:"Error recovering embedded wallet"});throw(d=(i=r.current)==null?void 0:i.onError)==null||d.call(i,u),u}})}var Re=({client:e,user:t,solanaWallet:a,setSolanaWallet:r,setSolanaRecoveryFlowState:c,webViewState:n,createSolanaWalletCallbacks:s,recoverSolanaWalletCallbacks:l})=>{let i=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, t),[t]),d=_react.useCallback.call(void 0, ()=>y(void 0,null,function*(){var v;let{user:m}=yield e.user.get(),f=(v=_jssdkcore.getUserEmbeddedWallet.call(void 0, m))!=null?v:void 0;return yield We({client:e,setSolanaWallet:r,createSolanaWalletCallbacks:s,setSolanaRecoveryFlowState:c,ethereumAccount:f})}),[e,s]),o=_react.useCallback.call(void 0, ()=>y(void 0,null,function*(){if(!i)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});return Ce({client:e,solanaAccount:i,setSolanaWallet:r,recoverSolanaWalletCallbacks:l,setSolanaRecoveryFlowState:c})}),[e,i]),u=_react.useCallback.call(void 0, ()=>y(void 0,null,function*(){if(!i)throw r({status:"not-created"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});r(m=>m.status==="connected"?{status:"reconnecting"}:{status:"connecting"});try{let m=yield e.embeddedWallet.getSolanaProvider(i);return r({status:"connected",publicKey:m._publicKey}),m}catch(m){throw _jssdkcore.errorIndicatesRecoveryIsNeeded.call(void 0, m)?(r({status:"needs-recovery"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):m instanceof Error?(r({status:"error",error:m.message}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:m.message})):(r({status:"error",error:"Error loading embedded wallet"}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,i]);return _react.useEffect.call(void 0, ()=>{if(!t&&a.status!=="disconnected")return r({status:"disconnected"});n==="loaded"&&u().catch(()=>{})},[n,t,i]),_react.useEffect.call(void 0, ()=>{a.status==="error"&&a.error.includes("User must be logged in")&&u()},[a.status]),{create:d,recover:o,getProvider:u}};function Oe(){return y(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 le(r){return y(this,arguments,function*({user:e,appId:t,client:a}){var l;if(_reactnative.Platform.OS==="android")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let c=yield Oe(),n=yield a.recovery.icloudAuth.getICloudConfiguration("expo-ios");if(!(n==null?void 0:n.container_identifier))throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"An iCloud Container ID must be specified in the Privy Dashboard."});try{let{recoverySecret:i,iCloudRecordName:d}=yield c.writeRecoverySecretToICloud({containerId:n.container_identifier,appId:t,userId:e.id});return{recoverySecret:i,iCloudRecordName:d}}catch(i){if(i instanceof Error){let d=(l=i.message.split("Caused by: ")[1])!=null?l:"Error writing to iCloud";throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:d})}throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}function xe(a){return y(this,arguments,function*({walletAddress:e,client:t}){var i;if(_reactnative.Platform.OS==="android")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let r=yield Oe(),n=(yield t.recovery.getRecoveryKeyMaterial(e)).icloud_record_name;if(!n)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"),l=s==null?void 0:s.container_identifier;if(!l)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"An iCloud Container ID must be specified in the Privy Dashboard."});try{let{recoverySecret:d}=yield r.readRecoverySecretFromICloud({containerId:l,recordName:n});return{recoverySecret:d}}catch(d){if(d instanceof Error){let o=(i=d.message.split("Caused by: ")[1])!=null?i:"Error writing to iCloud";throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:o})}throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}var _reactfastcompare = require('react-fast-compare'); var _reactfastcompare2 = _interopRequireDefault(_reactfastcompare);var Pe=e=>t=>e(a=>_reactfastcompare2.default.call(void 0, a,t)?a:t);function R(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 Wr=e=>new Promise(t=>setTimeout(t,e));function Or(){let e=_react.useRef.call(void 0, _reactnative.AppState.currentState);_react.useEffect.call(void 0, ()=>_reactnative.AppState.addEventListener("change",r=>{e.current=r}).remove,[]);function t(){return _reactnative.AppState.currentState}return{appState:e,getCurrentAppState:t}}function te(c){return y(this,arguments,function*({provider:e,redirectUri:t,client:a,onError:r}){try{let n;switch(e){case"google-drive":{let{url:d}=yield a.recovery.auth.generateURL(ee.createURL(t||"/"));n=d;break}default:throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid provider",code:"embedded_wallet_recovery_error"})}let s=yield Ue.openAuthSessionAsync(n);if(_reactnative.Platform.OS==="android")return;if(s.type!=="success")throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth session failed",code:"embedded_wallet_recovery_error"});let{queryParams:l}=ee.parse(s.url),i;switch(e){case"google-drive":{let{privy_oauth_state:d,privy_oauth_code:o}=l;if(!o||!d)throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth invalid credentials",code:"embedded_wallet_recovery_error"});i=yield ue({oAuthCode:o,oAuthState:d,client:a});break}default:throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth invalid provider",code:"embedded_wallet_recovery_error"})}return i}catch(n){throw r==null||r(R(n)),n}})}function ue(r){return y(this,arguments,function*({oAuthCode:e,oAuthState:t,client:a}){let{access_token:c}=yield a.recovery.auth.authorize(e,t);if(!c)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:"login_with_oauth_returned_with_invalid_credentials"});return c})}function re(n){return y(this,arguments,function*({client:e,recoveryInput:t,setWalletRecoveryCallbacks:a,setRecoveryFlowState:r,setWallet:c}){var s,l,i,d;try{let{provider:o,user:u}=yield e.embeddedWallet.setRecovery(t),m=_jssdkcore.getUserEmbeddedWallet.call(void 0, u);return c({status:"connected",provider:o,account:m}),(l=(s=a.current)==null?void 0:s.onSuccess)==null||l.call(s,o),r({status:"initial"}),o}catch(o){let u=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_set_recovery_error",error:o instanceof Error?o.message:"Error setting password on embedded wallet"});throw(d=(i=a.current)==null?void 0:i.onError)==null||d.call(i,u),r({status:"initial"}),u}})}function Fe(e){return e===void 0?{recoveryMethod:"privy"}:typeof e=="string"?{recoveryMethod:"user-passcode",password:e}:e.recoveryMethod==="user-passcode"?{recoveryMethod:"user-passcode",password:e.password}:{recoveryMethod:e.recoveryMethod}}var Le=({client:e,user:t,appId:a,wallet:r,setWallet:c,setRecoveryFlowState:n,webViewState:s,createWalletCallbacks:l,recoverWalletCallbacks:i,setWalletRecoveryCallbacks:d})=>{let o=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedWallet.call(void 0, t),[t]),u=_react.useCallback.call(void 0, b=>y(void 0,null,function*(){var O;if(o)throw new (0, _jssdkcore.PrivyClientError)({error:"This user already has an embedded wallet",code:"embedded_wallet_already_exists"});let{password:S,recoveryMethod:p}=Fe(b),h,W,E;if(p==="google-drive"&&(h=yield te({provider:p,client:e,onError:(O=l.current)==null?void 0:O.onError}),n({status:"creating-wallet"}),!h))return null;if(p==="icloud"){if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before creating a wallet with iCloud."});let{recoverySecret:P,iCloudRecordName:U}=yield le({user:t,appId:a,client:e});W=P,E=U}return yield Q({client:e,setWallet:c,createWalletCallbacks:l,recoveryMethod:p,setRecoveryFlowState:n,password:S,recoverySecretOverride:W,iCloudRecordNameOverride:E})}),[e,o,t]),m=_react.useCallback.call(void 0, b=>y(void 0,null,function*(){var h;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(!o)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});_jssdkcore.throwIfInvalidRecoveryUpgradePath.call(void 0, {currentRecoveryMethod:o.recovery_method,upgradeToRecoveryMethod:b.recoveryMethod});let S,p;switch(b.recoveryMethod){case"privy":p=L(k({},b),{wallet:o});break;case"user-passcode":p=L(k({},b),{wallet:o,password:b.password});break;case"google-drive":if(S=yield te({provider:b.recoveryMethod,client:e,onError:(h=d.current)==null?void 0:h.onError}),n({status:"upgrading-recovery"}),!S)return null;p={recoveryMethod:"google-drive",wallet:o,recoveryAccessToken:S};break;case"icloud":if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before backing up to iCloud."});let{recoverySecret:W,iCloudRecordName:E}=yield le({user:t,appId:a,client:e});p={recoveryMethod:"icloud-native",recoverySecretOverride:W,iCloudRecordNameOverride:E,wallet:o};break;default:throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}return re({client:e,recoveryInput:p,setWalletRecoveryCallbacks:d,setRecoveryFlowState:n,setWallet:c})}),[e,o,r.status,t]),f=_react.useCallback.call(void 0, b=>y(void 0,null,function*(){return m({recoveryMethod:"user-passcode",password:b})}),[e,o,r.status]),v=_react.useCallback.call(void 0, b=>y(void 0,null,function*(){var E;if(!o)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{password:S,recoveryMethod:p}=Fe(b),h,W;if(p==="google-drive"&&(h=yield te({provider:p,client:e,onError:(E=i.current)==null?void 0:E.onError}),n({status:"recovering"}),!h))return null;if(p==="icloud"){if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before recovering via iCloud."});let{recoverySecret:O}=yield xe({client:e,walletAddress:o.address});W=O}return Z({client:e,account:o,setWallet:c,recoverWalletCallbacks:i,recoveryMethod:p,setRecoveryFlowState:n,password:S,recoveryToken:h,recoverySecretOverride:W})}),[e,o]),w=_react.useCallback.call(void 0, ()=>y(void 0,null,function*(){if(!o)throw c({status:"not-created",account:null}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});c(b=>b.status==="connected"?{status:"reconnecting",account:o}:{status:"connecting",account:o});try{let b=yield e.embeddedWallet.getProvider(o);return c({status:"connected",provider:b,account:o}),b}catch(b){throw _jssdkcore.errorIndicatesRecoveryIsNeeded.call(void 0, b)?(c({status:"needs-recovery",account:o}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):b instanceof Error?(c({status:"error",error:b.message,account:o}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:b.message})):(c({status:"error",error:"Error loading embedded wallet",account:o}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,o]);return _react.useEffect.call(void 0, ()=>{if(!t&&r.status!=="disconnected")return c({status:"disconnected",account:null});s==="loaded"&&w().catch(()=>{})},[s,t,o]),_react.useEffect.call(void 0, ()=>{r.status==="error"&&r.error.includes("User must be logged in")&&w()},[r.status]),{create:u,recover:v,setPassword:f,setRecovery:m,getProvider:w}};var Te=({client:e,user:t,isReady:a,customAuth:r})=>{let[c,n]=_react.useState.call(void 0, {status:"initial"});return _react.useEffect.call(void 0, ()=>{(()=>y(void 0,null,function*(){if(!(r!=null&&r.enabled)){n({status:"not-enabled"});return}n({status:"loading"});let{getCustomAccessToken:l,isLoading:i}=r;if(!(!a||i))try{let d=yield l();if(!d&&t){yield e.auth.logout(),n({status:"done"});return}if(!d){n({status:"done"});return}if(t){n({status:"done"});return}if(!(yield e.auth.customProvider.syncWithToken(d))){yield e.auth.logout(),n({status:"error",error:new (0, _jssdkcore.PrivyClientError)({error:"Failed to sync with custom auth provider",code:"third_party_auth_error"})});return}n({status:"done"})}catch(d){if(console.log("Error syncing with custom auth provider",d),n({status:"error",error:d}),t)throw yield e.auth.logout(),new (0, _jssdkcore.PrivyClientError)({error:"Third-party auth failed",code:"third_party_auth_error"})}}))()},[e,t,a,r==null?void 0:r.enabled,r==null?void 0:r.getCustomAccessToken,r==null?void 0:r.isLoading]),{customAuthState:c,customAuthStateIsSettled:c.status!=="loading"&&c.status!=="initial"}};var De=({client:e,user:t,isUserInitialized:a,oAuthState:r,oAuthCallbacks:c,setOAuthState:n,recoveryFlowState:s})=>{let l=M.useURL(),i=_react.useCallback.call(void 0, d=>{var u,m;let o=R(d);n({status:"error",error:o}),(m=(u=c.current).onError)==null||m.call(u,o)},[n]);return _react.useEffect.call(void 0, ()=>{function d(){return y(this,null,function*(){var f,v;if(!l||r.status!=="loading"||s.status!=="initial")return;let{queryParams:o}=M.parse(l),{privy_oauth_state:u,privy_oauth_code:m}=o;if(!m||!u){n({status:"done"});return}try{let w,b;if(t)w=yield e.auth.oauth.linkWithCode(m,u);else{let S=yield e.auth.oauth.loginWithCode(m,u);w=S.user,b=!!S.is_new_user}return(v=(f=c.current).onSuccess)==null||v.call(f,w,b),n({status:"done"}),yield M.openURL(l.split("?")[0])}catch(w){i(w)}})}_reactnative.Platform.OS==="android"&&a&&d()},[l,a])};var je=({client:e,user:t,createWalletCallbacks:a,recoverWalletCallbacks:r,setWalletRecoveryCallbacks:c,recoveryFlowState:n,oAuthState:s,setRecoveryFlowState:l,setWallet:i,appStateVisible:d,webViewLoaded:o})=>{let u=T.useURL(),m=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedWallet.call(void 0, t),[t]),f=_react.useCallback.call(void 0, v=>{var b,S,p,h;let w=R(v);n.status==="creating-wallet"?(S=(b=a.current).onError)==null||S.call(b,R(w)):(h=(p=r.current).onError)==null||h.call(p,R(w)),l({status:"initial"})},[n]);return _react.useEffect.call(void 0, ()=>{function v(){return y(this,null,function*(){if(!u&&n.status!=="initial"&&d&&f(new Error("Recovery OAuth session failed")),!u||n.status==="initial"||s.status!=="initial"||!d||!o)return;let{queryParams:w}=T.parse(u),{privy_oauth_state:b,privy_oauth_code:S}=w;if(!(!S||!b)){yield T.openURL(u.split("?")[0]);try{let p=yield ue({oAuthCode:S,oAuthState:b,client:e});if(n.status==="creating-wallet")yield Q({client:e,setWallet:i,createWalletCallbacks:a,recoveryMethod:"google-drive",setRecoveryFlowState:l,recoveryToken:p});else if(n.status==="upgrading-recovery"){if(!m)throw new Error("Embedded wallet not found");yield re({client:e,recoveryInput:{recoveryMethod:"google-drive",wallet:m,recoveryAccessToken:p},setWalletRecoveryCallbacks:c,setRecoveryFlowState:l,setWallet:i})}else yield Z({client:e,account:m,setWallet:i,recoverWalletCallbacks:r,recoveryMethod:"google-drive",setRecoveryFlowState:l,recoveryToken:p})}catch(p){f(p)}}})}_reactnative.Platform.OS==="android"&&v()},[u,n.status,d,o])};var Ne=({client:e,isUserInitialized:t,setIsUserInitialized:a})=>{_react.useEffect.call(void 0, ()=>{t||(()=>y(void 0,null,function*(){try{yield e.user.get()}catch(c){}finally{a(!0)}}))()},[t])};var me=_react.createContext.call(void 0, {}),ae;function Do(){return ae?ae.getAccessToken():Promise.resolve(null)}var jo=e=>{var we;let[t,a]=_react.useState.call(void 0, _reactnative.AppState.currentState==="active");_react.useEffect.call(void 0, ()=>{let F=_reactnative.AppState.addEventListener("change",et=>{a(et==="active")});return()=>{F.remove()}},[]);let[r,c]=_react.useState.call(void 0, !1),[n,s]=_react.useState.call(void 0, "loading"),[l,i]=_react.useState.call(void 0, !1),[d,o]=_react.useState.call(void 0, null),[u,m]=_react.useState.call(void 0, {status:"disconnected",account:null}),[f,v]=_react.useState.call(void 0, {status:"disconnected"}),[w,b]=_react.useState.call(void 0, {status:"initial"}),[S,p]=_react.useState.call(void 0, {status:"initial"}),[h,W]=_react.useState.call(void 0, {status:"initial"}),[E,O]=_react.useState.call(void 0, {status:"initial"}),[P,U]=_react.useState.call(void 0, {status:"initial"}),[V,z]=_react.useState.call(void 0, {status:"initial"}),[H,J]=_react.useState.call(void 0, {status:"initial"}),be=_react.useRef.call(void 0, {}),ne=_react.useRef.call(void 0, {}),ie=_react.useRef.call(void 0, {}),de=_react.useRef.call(void 0, {}),ve=_react.useRef.call(void 0, {}),Se=_react.useRef.call(void 0, {}),$=_react.useCallback.call(void 0, F=>{if(F)return Pe(o)(F);o(null),b({status:"initial"}),p({status:"initial"}),m({status:"disconnected",account:null})},[]),g=_react.useMemo.call(void 0, ()=>{let F=e.storage||Ke;return ae=new (0, _jssdkcore2.default)({storage:qe(F),appId:e.appId,clientId:e.clientId,supportedChains:e.supportedChains,nativeAppIdentifier:He(),baseUrl:e.baseUrl,sdkVersion:`expo:${Ee.version}`,callbacks:{setUser:$,setIsReady:i},logLevel:e.logLevel,crypto:{digest:_expocrypto.digest}}),ae},[e.storage,e.appId,e.clientId,e.baseUrl,e.supportedChains,e.logLevel,$]),Ye=_react.useCallback.call(void 0, ()=>($(null),g.auth.logout()),[$,g]),Xe=_react.useCallback.call(void 0, ()=>g.getAccessToken(),[g]),Je=_react.useCallback.call(void 0, ()=>g.getIdentityToken(),[g]);Ne({client:g,isUserInitialized:r,setIsUserInitialized:c});let $e=Le({client:g,user:d,appId:e.appId,webViewState:n,createWalletCallbacks:ne,recoverWalletCallbacks:ie,setWalletRecoveryCallbacks:de,setRecoveryFlowState:W,wallet:u,setWallet:m}),Qe=Re({client:g,user:d,webViewState:n,createSolanaWalletCallbacks:ve,recoverSolanaWalletCallbacks:Se,setSolanaRecoveryFlowState:O,solanaWallet:f,setSolanaWallet:v});De({client:g,isUserInitialized:r,user:d,oAuthState:S,setOAuthState:p,oAuthCallbacks:be,recoveryFlowState:h}),je({client:g,user:d,webViewLoaded:n==="loaded",createWalletCallbacks:ne,recoverWalletCallbacks:ie,setWalletRecoveryCallbacks:de,recoveryFlowState:h,oAuthState:S,setRecoveryFlowState:W,setWallet:m,appStateVisible:t});let{customAuthStateIsSettled:Ze}=Te({client:g,user:d,isReady:r,customAuth:(we=e.config)==null?void 0:we.customAuth});return _react2.default.createElement(_react2.default.Fragment,null,_react2.default.createElement(me.Provider,{value:{client:g,user:d,isReady:n!=="loading"&&r&&ze(S)&&Ze,logout:Ye,getAccessToken:Xe,getIdentityToken:Je,wallet:k(k({},u),$e),solanaWallet:k(k({},f),Qe),oAuthState:S,oAuthCallbacks:be,recoveryFlowState:h,setRecoveryFlowState:W,solanaRecoveryFlowState:E,setSolanaRecoveryFlowState:O,createWalletCallbacks:ne,recoverWalletCallbacks:ie,setWalletRecoveryCallbacks:de,createSolanaWalletCallbacks:ve,recoverSolanaWalletCallbacks:Se,setOAuthState:p,siweState:P,setSiweState:U,otpState:w,setOtpState:b,passkeyState:V,setPasskeyState:z,farcasterState:H,setFarcasterState:J}},e.children),_react2.default.createElement(_reactnative.View,{style:{width:0,height:0,overflow:"hidden"}},_react2.default.createElement(_e,{logLevel:e.logLevel,client:g,isClientReady:l,setWebViewState:s,webViewState:n})))};var ze=e=>e.status!=="loading",ye=(e={})=>{let{user:t,oAuthState:a,setOAuthState:r,oAuthCallbacks:c,client:n}=_react.useContext.call(void 0, me),s=e.action?e.action==="login":!t;_react.useEffect.call(void 0, ()=>{c.current={onSuccess:e.onSuccess,onError:e.onError}},[e.onSuccess,e.onError]);let l=_react.useCallback.call(void 0, d=>{var u;let o=R(d);return r({status:"error",error:o}),(u=e==null?void 0:e.onError)==null||u.call(e,o),o},[e==null?void 0:e.onError]);return{start:_react.useCallback.call(void 0, function(f){return y(this,arguments,function*({provider:o,redirectUri:u,isLegacyAppleIosBehaviorEnabled:m=!1}){var v,w,b;r({status:"loading"});try{if(t&&e.action==="login")throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_login_with_oauth_while_already_logged_in",error:"Already logged in, if trying to link an OAuth account use `useLinkWithOAuth`"});if(!t&&e.action==="link")throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_link_oauth_before_logged_in",error:"Must be logged in to link an OAuth account, use `useLoginWithOAuth`"});let{url:S}=yield n.auth.oauth.generateURL(o,N.createURL(u||"/")),p,h;if(_reactnative.Platform.OS==="ios"&&o==="apple"&&!m){let z=(v=new URL(S).searchParams.get("state"))!=null?v:"",H=yield Ge.signInAsync({state:z});if(!H.authorizationCode)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 J=yield n.auth.oauth.loginWithCode(H.authorizationCode,z,o,"raw");p=J.user,h=J.is_new_user}else p=yield n.auth.oauth.linkWithCode(H.authorizationCode,z,o,"raw");return(w=e==null?void 0:e.onSuccess)==null||w.call(e,p,h),r({status:"done"}),p!=null?p:void 0}let W=_reactnative.Platform.OS==="android"?S.replace("x.com","twitter.com"):S,E=yield X.openAuthSessionAsync(W);if(_reactnative.Platform.OS==="android")return;if(E.type!=="success")throw[X.WebBrowserResultType.CANCEL,X.WebBrowserResultType.DISMISS].includes(E.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:O}=N.parse(E.url),{privy_oauth_state:P,privy_oauth_code:U}=O;if(!U||!P)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 V=yield n.auth.oauth.loginWithCode(U,P,o);p=V.user,h=V.is_new_user}else p=yield n.auth.oauth.linkWithCode(U,P,o);return(b=e==null?void 0:e.onSuccess)==null||b.call(e,p,h),yield N.openURL(E.url.split("?")[0]),r({status:"done"}),p!=null?p:void 0}catch(S){l(S)}})},[t,n,r,l]),state:a}};function Yo(e){let{state:t,start:a}=ye(L(k({},e),{action:"login"}));return{state:t,login:a}}function Xo(e){let{state:t,start:a}=ye(L(k({},e),{action:"link"}));return{state:t,link:a}}function Jo(e){return ye(e)}var He=()=>_expoapplication.applicationId;function qe(e){return{get(t){return e.get(t.replaceAll(":","-"))},put(t,a){return e.put(t.replaceAll(":","-"),a)},del(t){return e.del(t.replaceAll(":","-"))},getKeys:()=>y(this,null,function*(){return[]})}}var Ke={get(e){return A.getItemAsync(e,{keychainAccessible:A.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},put(e,t){return A.setItemAsync(e,t,{keychainAccessible:A.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},del(e){return A.deleteItemAsync(e,{keychainAccessible:A.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},getKeys:()=>y(void 0,null,function*(){return[]})};function Zo(e){return e.status==="connected"}function ea(e){return e.status==="reconnecting"}function ta(e){return e.status==="connecting"}function ra(e){return e.status==="disconnected"}function oa(e){return e.status==="not-created"}function aa(e){return e.status==="creating"}function na(e){return e.status==="error"}function ia(e){return e.status==="needs-recovery"}exports.a = k; exports.b = L; exports.c = y; exports.d = R; exports.e = Wr; exports.f = Or; exports.g = Yo; exports.h = Xo; exports.i = Jo; exports.j = Ke; exports.k = me; exports.l = Do; exports.m = jo; exports.n = Zo; exports.o = ea; exports.p = ta; exports.q = ra; exports.r = oa; exports.s = aa; exports.t = na; exports.u = ia;
|
|
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 tt=Object.defineProperty,rt=Object.defineProperties;var ot=Object.getOwnPropertyDescriptors;var fe=Object.getOwnPropertySymbols;var at=Object.prototype.hasOwnProperty,nt=Object.prototype.propertyIsEnumerable;var he=(e,t,a)=>t in e?tt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a,k= exports.a =(e,t)=>{for(var a in t||(t={}))at.call(t,a)&&he(e,a,t[a]);if(fe)for(var a of fe(t))nt.call(t,a)&&he(e,a,t[a]);return e},L= exports.b =(e,t)=>rt(e,ot(t));var y=(e,t,a)=>new Promise((r,c)=>{var n=i=>{try{l(a.next(i))}catch(d){c(d)}},s=i=>{try{l(a.throw(i))}catch(d){c(d)}},l=i=>i.done?r(i.value):Promise.resolve(i.value).then(n,s);l((a=a.apply(e,t)).next())});var _expoappleauthentication = require('expo-apple-authentication'); var Ge = _interopRequireWildcard(_expoappleauthentication);var _expoapplication = require('expo-application');var _expolinking = require('expo-linking'); var N = _interopRequireWildcard(_expolinking); var ee = _interopRequireWildcard(_expolinking); var M = _interopRequireWildcard(_expolinking); var T = _interopRequireWildcard(_expolinking);var _exposecurestore = require('expo-secure-store'); var A = _interopRequireWildcard(_exposecurestore);var _expowebbrowser = require('expo-web-browser'); var X = _interopRequireWildcard(_expowebbrowser); var Ue = _interopRequireWildcard(_expowebbrowser);var _react = require('react'); var _react2 = _interopRequireDefault(_react);var _reactnative = require('react-native');var _jssdkcore = require('@privy-io/js-sdk-core'); var _jssdkcore2 = _interopRequireDefault(_jssdkcore);var _expocrypto = require('expo-crypto');var Ee={name:"@privy-io/expo",version:"0.22.7",description:"Expo client for the Privy Auth API",keywords:["authentication","authorization","identity","privacy","privy","user data","react-native","expo","web3"],license:"Apache-2.0",source:"./src/index.ts",main:"./dist/esm/index.js",types:"./dist/index.d.ts",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"}},files:["dist/**/*","LICENSE","README.md"],scripts:{build:"npx tsup --clean --minify","generate-types":"npx tsup --dts-only",clean:"rm -rf dist .turbo",dev:"npx tsup --watch",test:'jest --testMatch "**/test/**/*.test.ts"',"test:ci":"npm run test",lint:'eslint "src/**/*.{ts,tsx,js,jsx}" && npx tsc --noEmit',format:'eslint "src/**/*.{ts,tsx,js,jsx}" --fix'},peerDependencies:{"@privy-io/expo-native-extensions":"0.0.3",react:"*","react-native":"*","react-native-passkeys":"^0.2.1","react-native-webview":"*","expo-constants":"*","expo-linking":"*","expo-crypto":"*","expo-secure-store":"*","expo-application":"*","expo-apple-authentication":"*","expo-web-browser":"*"},dependencies:{"@privy-io/js-sdk-core":"0.26.4","react-fast-compare":"^3.2.2"},devDependencies:{"@privy-io/eslint-config-custom":"*","@privy-io/tsconfig":"*","@simplewebauthn/types":"9.0.1","@tsconfig/node16-strictest-esm":"^1.0.3",tsup:"^6.2.3",typescript:"~5.5.3"},author:"privy.io",publishConfig:{access:"public"}};var _reactnativewebview = require('react-native-webview'); var _reactnativewebview2 = _interopRequireDefault(_reactnativewebview);var _e=({client:e,isClientReady:t,setWebViewState:a,webViewState:r,logLevel:c})=>{let n=_react.useRef.call(void 0, null);_react.useEffect.call(void 0, ()=>{n.current&&r==="loaded"&&e.setMessagePoster(n.current)},[e,n.current,r==="loaded"]),_react.useEffect.call(void 0, ()=>_reactnative.AppState.addEventListener("change",i=>y(void 0,null,function*(){n.current&&i==="active"&&((yield e.embeddedWallet.ping(500))||(n.current.reload(),a("reloading")))})).remove,[]);let s=_react.useCallback.call(void 0, l=>y(void 0,null,function*(){let{data:i}=l.nativeEvent;e.embeddedWallet.onMessage(JSON.parse(i))}),[e]);return t?_react2.default.createElement(_reactnativewebview2.default,{style:{flex:1},ref:n,source:{uri:e.embeddedWallet.getURL()},webviewDebuggingEnabled:c==="DEBUG",onLoad:()=>a("loaded"),onError:console.error,onMessage:s}):null};function Q(d){return y(this,arguments,function*({client:e,setWallet:t,createWalletCallbacks:a,recoveryMethod:r,setRecoveryFlowState:c,password:n,recoveryToken:s,recoverySecretOverride:l,iCloudRecordNameOverride:i}){var u,m;switch(r){case"user-passcode":if(!n)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!s)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!l||!i)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery failed due to inability to store credentials"});break}t({status:"creating",account:null});let o=r==="icloud"?"icloud-native":r;try{let{provider:f,user:v}=yield e.embeddedWallet.create(n,o,s,l,i),w=_jssdkcore.getUserEmbeddedWallet.call(void 0, v);return(m=(u=a.current)==null?void 0:u.onSuccess)==null||m.call(u,f),t({status:"connected",provider:f,account:w}),c({status:"initial"}),f}catch(f){let v=f instanceof Error?f.message:"Error creating embedded wallet";throw t({status:"error",error:v,account:null}),c({status:"initial"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:v})}})}function We(n){return y(this,arguments,function*({client:e,setSolanaWallet:t,createSolanaWalletCallbacks:a,setSolanaRecoveryFlowState:r,ethereumAccount:c}){var s,l;t({status:"creating"});try{let i=yield e.embeddedWallet.createSolana({ethereumAccount:c});return(l=(s=a.current)==null?void 0:s.onSuccess)==null||l.call(s,i),t({status:"connected",publicKey:i._publicKey}),r({status:"initial"}),i}catch(i){let d=i instanceof Error?i.message:"Error creating embedded wallet";throw t({status:"error",error:d}),r({status:"initial"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:d})}})}function Z(d){return y(this,arguments,function*({client:e,account:t,setWallet:a,recoverWalletCallbacks:r,recoveryMethod:c,setRecoveryFlowState:n,password:s,recoveryToken:l,recoverySecretOverride:i}){var o,u,m,f;if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});switch(c){case"user-passcode":if(!s)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!l)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!i)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Record name is required for icloud recovery method"});break}a({status:"connecting",account:t});try{let v=yield e.embeddedWallet.getProvider(t,s,l,i);return a({status:"connected",provider:v,account:t}),n({status:"initial"}),(u=(o=r.current)==null?void 0:o.onSuccess)==null||u.call(o,v),v}catch(v){a({status:"needs-recovery",account:t}),n({status:"initial"});let w=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:v instanceof Error?v.message:"Error recovering embedded wallet"});throw(f=(m=r.current)==null?void 0:m.onError)==null||f.call(m,w),w}})}function Ce(n){return y(this,arguments,function*({client:e,solanaAccount:t,setSolanaWallet:a,recoverSolanaWalletCallbacks:r,setSolanaRecoveryFlowState:c}){var s,l,i,d;if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});a({status:"connecting"});try{let o=yield e.embeddedWallet.getSolanaProvider(t);return a({status:"connected",publicKey:o._publicKey}),c({status:"initial"}),(l=(s=r.current)==null?void 0:s.onSuccess)==null||l.call(s,o),o}catch(o){a({status:"needs-recovery"}),c({status:"initial"});let u=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:o instanceof Error?o.message:"Error recovering embedded wallet"});throw(d=(i=r.current)==null?void 0:i.onError)==null||d.call(i,u),u}})}var Re=({client:e,user:t,solanaWallet:a,setSolanaWallet:r,setSolanaRecoveryFlowState:c,webViewState:n,createSolanaWalletCallbacks:s,recoverSolanaWalletCallbacks:l})=>{let i=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, t),[t]),d=_react.useCallback.call(void 0, ()=>y(void 0,null,function*(){var v;let{user:m}=yield e.user.get(),f=(v=_jssdkcore.getUserEmbeddedWallet.call(void 0, m))!=null?v:void 0;return yield We({client:e,setSolanaWallet:r,createSolanaWalletCallbacks:s,setSolanaRecoveryFlowState:c,ethereumAccount:f})}),[e,s]),o=_react.useCallback.call(void 0, ()=>y(void 0,null,function*(){if(!i)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});return Ce({client:e,solanaAccount:i,setSolanaWallet:r,recoverSolanaWalletCallbacks:l,setSolanaRecoveryFlowState:c})}),[e,i]),u=_react.useCallback.call(void 0, ()=>y(void 0,null,function*(){if(!i)throw r({status:"not-created"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});r(m=>m.status==="connected"?{status:"reconnecting"}:{status:"connecting"});try{let m=yield e.embeddedWallet.getSolanaProvider(i);return r({status:"connected",publicKey:m._publicKey}),m}catch(m){throw _jssdkcore.errorIndicatesRecoveryIsNeeded.call(void 0, m)?(r({status:"needs-recovery"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):m instanceof Error?(r({status:"error",error:m.message}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:m.message})):(r({status:"error",error:"Error loading embedded wallet"}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,i]);return _react.useEffect.call(void 0, ()=>{if(!t&&a.status!=="disconnected")return r({status:"disconnected"});n==="loaded"&&u().catch(()=>{})},[n,t,i]),_react.useEffect.call(void 0, ()=>{a.status==="error"&&a.error.includes("User must be logged in")&&u()},[a.status]),{create:d,recover:o,getProvider:u}};function Oe(){return y(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 le(r){return y(this,arguments,function*({user:e,appId:t,client:a}){var l;if(_reactnative.Platform.OS==="android")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let c=yield Oe(),n=yield a.recovery.icloudAuth.getICloudConfiguration("expo-ios");if(!(n==null?void 0:n.container_identifier))throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"An iCloud Container ID must be specified in the Privy Dashboard."});try{let{recoverySecret:i,iCloudRecordName:d}=yield c.writeRecoverySecretToICloud({containerId:n.container_identifier,appId:t,userId:e.id});return{recoverySecret:i,iCloudRecordName:d}}catch(i){if(i instanceof Error){let d=(l=i.message.split("Caused by: ")[1])!=null?l:"Error writing to iCloud";throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:d})}throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}function xe(a){return y(this,arguments,function*({walletAddress:e,client:t}){var i;if(_reactnative.Platform.OS==="android")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let r=yield Oe(),n=(yield t.recovery.getRecoveryKeyMaterial(e)).icloud_record_name;if(!n)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"),l=s==null?void 0:s.container_identifier;if(!l)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"An iCloud Container ID must be specified in the Privy Dashboard."});try{let{recoverySecret:d}=yield r.readRecoverySecretFromICloud({containerId:l,recordName:n});return{recoverySecret:d}}catch(d){if(d instanceof Error){let o=(i=d.message.split("Caused by: ")[1])!=null?i:"Error writing to iCloud";throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:o})}throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}var _reactfastcompare = require('react-fast-compare'); var _reactfastcompare2 = _interopRequireDefault(_reactfastcompare);var Pe=e=>t=>e(a=>_reactfastcompare2.default.call(void 0, a,t)?a:t);function R(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 Wr=e=>new Promise(t=>setTimeout(t,e));function Or(){let e=_react.useRef.call(void 0, _reactnative.AppState.currentState);_react.useEffect.call(void 0, ()=>_reactnative.AppState.addEventListener("change",r=>{e.current=r}).remove,[]);function t(){return _reactnative.AppState.currentState}return{appState:e,getCurrentAppState:t}}function te(c){return y(this,arguments,function*({provider:e,redirectUri:t,client:a,onError:r}){try{let n;switch(e){case"google-drive":{let{url:d}=yield a.recovery.auth.generateURL(ee.createURL(t||"/"));n=d;break}default:throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid provider",code:"embedded_wallet_recovery_error"})}let s=yield Ue.openAuthSessionAsync(n);if(_reactnative.Platform.OS==="android")return;if(s.type!=="success")throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth session failed",code:"embedded_wallet_recovery_error"});let{queryParams:l}=ee.parse(s.url),i;switch(e){case"google-drive":{let{privy_oauth_state:d,privy_oauth_code:o}=l;if(!o||!d)throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth invalid credentials",code:"embedded_wallet_recovery_error"});i=yield ue({oAuthCode:o,oAuthState:d,client:a});break}default:throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth invalid provider",code:"embedded_wallet_recovery_error"})}return i}catch(n){throw r==null||r(R(n)),n}})}function ue(r){return y(this,arguments,function*({oAuthCode:e,oAuthState:t,client:a}){let{access_token:c}=yield a.recovery.auth.authorize(e,t);if(!c)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:"login_with_oauth_returned_with_invalid_credentials"});return c})}function re(n){return y(this,arguments,function*({client:e,recoveryInput:t,setWalletRecoveryCallbacks:a,setRecoveryFlowState:r,setWallet:c}){var s,l,i,d;try{let{provider:o,user:u}=yield e.embeddedWallet.setRecovery(t),m=_jssdkcore.getUserEmbeddedWallet.call(void 0, u);return c({status:"connected",provider:o,account:m}),(l=(s=a.current)==null?void 0:s.onSuccess)==null||l.call(s,o),r({status:"initial"}),o}catch(o){let u=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_set_recovery_error",error:o instanceof Error?o.message:"Error setting password on embedded wallet"});throw(d=(i=a.current)==null?void 0:i.onError)==null||d.call(i,u),r({status:"initial"}),u}})}function Fe(e){return e===void 0?{recoveryMethod:"privy"}:typeof e=="string"?{recoveryMethod:"user-passcode",password:e}:e.recoveryMethod==="user-passcode"?{recoveryMethod:"user-passcode",password:e.password}:{recoveryMethod:e.recoveryMethod}}var Le=({client:e,user:t,appId:a,wallet:r,setWallet:c,setRecoveryFlowState:n,webViewState:s,createWalletCallbacks:l,recoverWalletCallbacks:i,setWalletRecoveryCallbacks:d})=>{let o=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedWallet.call(void 0, t),[t]),u=_react.useCallback.call(void 0, b=>y(void 0,null,function*(){var O;if(o)throw new (0, _jssdkcore.PrivyClientError)({error:"This user already has an embedded wallet",code:"embedded_wallet_already_exists"});let{password:S,recoveryMethod:p}=Fe(b),h,W,E;if(p==="google-drive"&&(h=yield te({provider:p,client:e,onError:(O=l.current)==null?void 0:O.onError}),n({status:"creating-wallet"}),!h))return null;if(p==="icloud"){if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before creating a wallet with iCloud."});let{recoverySecret:P,iCloudRecordName:U}=yield le({user:t,appId:a,client:e});W=P,E=U}return yield Q({client:e,setWallet:c,createWalletCallbacks:l,recoveryMethod:p,setRecoveryFlowState:n,password:S,recoverySecretOverride:W,iCloudRecordNameOverride:E})}),[e,o,t]),m=_react.useCallback.call(void 0, b=>y(void 0,null,function*(){var h;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(!o)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});_jssdkcore.throwIfInvalidRecoveryUpgradePath.call(void 0, {currentRecoveryMethod:o.recovery_method,upgradeToRecoveryMethod:b.recoveryMethod});let S,p;switch(b.recoveryMethod){case"privy":p=L(k({},b),{wallet:o});break;case"user-passcode":p=L(k({},b),{wallet:o,password:b.password});break;case"google-drive":if(S=yield te({provider:b.recoveryMethod,client:e,onError:(h=d.current)==null?void 0:h.onError}),n({status:"upgrading-recovery"}),!S)return null;p={recoveryMethod:"google-drive",wallet:o,recoveryAccessToken:S};break;case"icloud":if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before backing up to iCloud."});let{recoverySecret:W,iCloudRecordName:E}=yield le({user:t,appId:a,client:e});p={recoveryMethod:"icloud-native",recoverySecretOverride:W,iCloudRecordNameOverride:E,wallet:o};break;default:throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}return re({client:e,recoveryInput:p,setWalletRecoveryCallbacks:d,setRecoveryFlowState:n,setWallet:c})}),[e,o,r.status,t]),f=_react.useCallback.call(void 0, b=>y(void 0,null,function*(){return m({recoveryMethod:"user-passcode",password:b})}),[e,o,r.status]),v=_react.useCallback.call(void 0, b=>y(void 0,null,function*(){var E;if(!o)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{password:S,recoveryMethod:p}=Fe(b),h,W;if(p==="google-drive"&&(h=yield te({provider:p,client:e,onError:(E=i.current)==null?void 0:E.onError}),n({status:"recovering"}),!h))return null;if(p==="icloud"){if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"User must be loaded before recovering via iCloud."});let{recoverySecret:O}=yield xe({client:e,walletAddress:o.address});W=O}return Z({client:e,account:o,setWallet:c,recoverWalletCallbacks:i,recoveryMethod:p,setRecoveryFlowState:n,password:S,recoveryToken:h,recoverySecretOverride:W})}),[e,o]),w=_react.useCallback.call(void 0, ()=>y(void 0,null,function*(){if(!o)throw c({status:"not-created",account:null}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});c(b=>b.status==="connected"?{status:"reconnecting",account:o}:{status:"connecting",account:o});try{let b=yield e.embeddedWallet.getProvider(o);return c({status:"connected",provider:b,account:o}),b}catch(b){throw _jssdkcore.errorIndicatesRecoveryIsNeeded.call(void 0, b)?(c({status:"needs-recovery",account:o}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):b instanceof Error?(c({status:"error",error:b.message,account:o}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:b.message})):(c({status:"error",error:"Error loading embedded wallet",account:o}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,o]);return _react.useEffect.call(void 0, ()=>{if(!t&&r.status!=="disconnected")return c({status:"disconnected",account:null});s==="loaded"&&w().catch(()=>{})},[s,t,o]),_react.useEffect.call(void 0, ()=>{r.status==="error"&&r.error.includes("User must be logged in")&&w()},[r.status]),{create:u,recover:v,setPassword:f,setRecovery:m,getProvider:w}};var Te=({client:e,user:t,isReady:a,customAuth:r})=>{let[c,n]=_react.useState.call(void 0, {status:"initial"});return _react.useEffect.call(void 0, ()=>{(()=>y(void 0,null,function*(){if(!(r!=null&&r.enabled)){n({status:"not-enabled"});return}n({status:"loading"});let{getCustomAccessToken:l,isLoading:i}=r;if(!(!a||i))try{let d=yield l();if(!d&&t){yield e.auth.logout(),n({status:"done"});return}if(!d){n({status:"done"});return}if(t){n({status:"done"});return}if(!(yield e.auth.customProvider.syncWithToken(d))){yield e.auth.logout(),n({status:"error",error:new (0, _jssdkcore.PrivyClientError)({error:"Failed to sync with custom auth provider",code:"third_party_auth_error"})});return}n({status:"done"})}catch(d){if(console.log("Error syncing with custom auth provider",d),n({status:"error",error:d}),t)throw yield e.auth.logout(),new (0, _jssdkcore.PrivyClientError)({error:"Third-party auth failed",code:"third_party_auth_error"})}}))()},[e,t,a,r==null?void 0:r.enabled,r==null?void 0:r.getCustomAccessToken,r==null?void 0:r.isLoading]),{customAuthState:c,customAuthStateIsSettled:c.status!=="loading"&&c.status!=="initial"}};var De=({client:e,user:t,isUserInitialized:a,oAuthState:r,oAuthCallbacks:c,setOAuthState:n,recoveryFlowState:s})=>{let l=M.useURL(),i=_react.useCallback.call(void 0, d=>{var u,m;let o=R(d);n({status:"error",error:o}),(m=(u=c.current).onError)==null||m.call(u,o)},[n]);return _react.useEffect.call(void 0, ()=>{function d(){return y(this,null,function*(){var f,v;if(!l||r.status!=="loading"||s.status!=="initial")return;let{queryParams:o}=M.parse(l),{privy_oauth_state:u,privy_oauth_code:m}=o;if(!m||!u){n({status:"done"});return}try{let w,b;if(t)w=yield e.auth.oauth.linkWithCode(m,u);else{let S=yield e.auth.oauth.loginWithCode(m,u);w=S.user,b=!!S.is_new_user}return(v=(f=c.current).onSuccess)==null||v.call(f,w,b),n({status:"done"}),yield M.openURL(l.split("?")[0])}catch(w){i(w)}})}_reactnative.Platform.OS==="android"&&a&&d()},[l,a])};var je=({client:e,user:t,createWalletCallbacks:a,recoverWalletCallbacks:r,setWalletRecoveryCallbacks:c,recoveryFlowState:n,oAuthState:s,setRecoveryFlowState:l,setWallet:i,appStateVisible:d,webViewLoaded:o})=>{let u=T.useURL(),m=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedWallet.call(void 0, t),[t]),f=_react.useCallback.call(void 0, v=>{var b,S,p,h;let w=R(v);n.status==="creating-wallet"?(S=(b=a.current).onError)==null||S.call(b,R(w)):(h=(p=r.current).onError)==null||h.call(p,R(w)),l({status:"initial"})},[n]);return _react.useEffect.call(void 0, ()=>{function v(){return y(this,null,function*(){if(!u&&n.status!=="initial"&&d&&f(new Error("Recovery OAuth session failed")),!u||n.status==="initial"||s.status!=="initial"||!d||!o)return;let{queryParams:w}=T.parse(u),{privy_oauth_state:b,privy_oauth_code:S}=w;if(!(!S||!b)){yield T.openURL(u.split("?")[0]);try{let p=yield ue({oAuthCode:S,oAuthState:b,client:e});if(n.status==="creating-wallet")yield Q({client:e,setWallet:i,createWalletCallbacks:a,recoveryMethod:"google-drive",setRecoveryFlowState:l,recoveryToken:p});else if(n.status==="upgrading-recovery"){if(!m)throw new Error("Embedded wallet not found");yield re({client:e,recoveryInput:{recoveryMethod:"google-drive",wallet:m,recoveryAccessToken:p},setWalletRecoveryCallbacks:c,setRecoveryFlowState:l,setWallet:i})}else yield Z({client:e,account:m,setWallet:i,recoverWalletCallbacks:r,recoveryMethod:"google-drive",setRecoveryFlowState:l,recoveryToken:p})}catch(p){f(p)}}})}_reactnative.Platform.OS==="android"&&v()},[u,n.status,d,o])};var Ne=({client:e,isUserInitialized:t,setIsUserInitialized:a})=>{_react.useEffect.call(void 0, ()=>{t||(()=>y(void 0,null,function*(){try{yield e.user.get()}catch(c){}finally{a(!0)}}))()},[t])};var me=_react.createContext.call(void 0, {}),ae;function Do(){return ae?ae.getAccessToken():Promise.resolve(null)}var jo=e=>{var we;let[t,a]=_react.useState.call(void 0, _reactnative.AppState.currentState==="active");_react.useEffect.call(void 0, ()=>{let F=_reactnative.AppState.addEventListener("change",et=>{a(et==="active")});return()=>{F.remove()}},[]);let[r,c]=_react.useState.call(void 0, !1),[n,s]=_react.useState.call(void 0, "loading"),[l,i]=_react.useState.call(void 0, !1),[d,o]=_react.useState.call(void 0, null),[u,m]=_react.useState.call(void 0, {status:"disconnected",account:null}),[f,v]=_react.useState.call(void 0, {status:"disconnected"}),[w,b]=_react.useState.call(void 0, {status:"initial"}),[S,p]=_react.useState.call(void 0, {status:"initial"}),[h,W]=_react.useState.call(void 0, {status:"initial"}),[E,O]=_react.useState.call(void 0, {status:"initial"}),[P,U]=_react.useState.call(void 0, {status:"initial"}),[V,z]=_react.useState.call(void 0, {status:"initial"}),[H,J]=_react.useState.call(void 0, {status:"initial"}),be=_react.useRef.call(void 0, {}),ne=_react.useRef.call(void 0, {}),ie=_react.useRef.call(void 0, {}),de=_react.useRef.call(void 0, {}),ve=_react.useRef.call(void 0, {}),Se=_react.useRef.call(void 0, {}),$=_react.useCallback.call(void 0, F=>{if(F)return Pe(o)(F);o(null),b({status:"initial"}),p({status:"initial"}),m({status:"disconnected",account:null})},[]),g=_react.useMemo.call(void 0, ()=>{let F=e.storage||Ke;return ae=new (0, _jssdkcore2.default)({storage:qe(F),appId:e.appId,clientId:e.clientId,supportedChains:e.supportedChains,nativeAppIdentifier:He(),baseUrl:e.baseUrl,sdkVersion:`expo:${Ee.version}`,callbacks:{setUser:$,setIsReady:i},logLevel:e.logLevel,crypto:{digest:_expocrypto.digest}}),ae},[e.storage,e.appId,e.clientId,e.baseUrl,e.supportedChains,e.logLevel,$]),Ye=_react.useCallback.call(void 0, ()=>($(null),g.auth.logout()),[$,g]),Xe=_react.useCallback.call(void 0, ()=>g.getAccessToken(),[g]),Je=_react.useCallback.call(void 0, ()=>g.getIdentityToken(),[g]);Ne({client:g,isUserInitialized:r,setIsUserInitialized:c});let $e=Le({client:g,user:d,appId:e.appId,webViewState:n,createWalletCallbacks:ne,recoverWalletCallbacks:ie,setWalletRecoveryCallbacks:de,setRecoveryFlowState:W,wallet:u,setWallet:m}),Qe=Re({client:g,user:d,webViewState:n,createSolanaWalletCallbacks:ve,recoverSolanaWalletCallbacks:Se,setSolanaRecoveryFlowState:O,solanaWallet:f,setSolanaWallet:v});De({client:g,isUserInitialized:r,user:d,oAuthState:S,setOAuthState:p,oAuthCallbacks:be,recoveryFlowState:h}),je({client:g,user:d,webViewLoaded:n==="loaded",createWalletCallbacks:ne,recoverWalletCallbacks:ie,setWalletRecoveryCallbacks:de,recoveryFlowState:h,oAuthState:S,setRecoveryFlowState:W,setWallet:m,appStateVisible:t});let{customAuthStateIsSettled:Ze}=Te({client:g,user:d,isReady:r,customAuth:(we=e.config)==null?void 0:we.customAuth});return _react2.default.createElement(_react2.default.Fragment,null,_react2.default.createElement(me.Provider,{value:{client:g,user:d,isReady:n!=="loading"&&r&&ze(S)&&Ze,logout:Ye,getAccessToken:Xe,getIdentityToken:Je,wallet:k(k({},u),$e),solanaWallet:k(k({},f),Qe),oAuthState:S,oAuthCallbacks:be,recoveryFlowState:h,setRecoveryFlowState:W,solanaRecoveryFlowState:E,setSolanaRecoveryFlowState:O,createWalletCallbacks:ne,recoverWalletCallbacks:ie,setWalletRecoveryCallbacks:de,createSolanaWalletCallbacks:ve,recoverSolanaWalletCallbacks:Se,setOAuthState:p,siweState:P,setSiweState:U,otpState:w,setOtpState:b,passkeyState:V,setPasskeyState:z,farcasterState:H,setFarcasterState:J}},e.children),_react2.default.createElement(_reactnative.View,{style:{width:0,height:0,overflow:"hidden"}},_react2.default.createElement(_e,{logLevel:e.logLevel,client:g,isClientReady:l,setWebViewState:s,webViewState:n})))};var ze=e=>e.status!=="loading",ye=(e={})=>{let{user:t,oAuthState:a,setOAuthState:r,oAuthCallbacks:c,client:n}=_react.useContext.call(void 0, me),s=e.action?e.action==="login":!t;_react.useEffect.call(void 0, ()=>{c.current={onSuccess:e.onSuccess,onError:e.onError}},[e.onSuccess,e.onError]);let l=_react.useCallback.call(void 0, d=>{var u;let o=R(d);return r({status:"error",error:o}),(u=e==null?void 0:e.onError)==null||u.call(e,o),o},[e==null?void 0:e.onError]);return{start:_react.useCallback.call(void 0, function(f){return y(this,arguments,function*({provider:o,redirectUri:u,isLegacyAppleIosBehaviorEnabled:m=!1}){var v,w,b;r({status:"loading"});try{if(t&&e.action==="login")throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_login_with_oauth_while_already_logged_in",error:"Already logged in, if trying to link an OAuth account use `useLinkWithOAuth`"});if(!t&&e.action==="link")throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_link_oauth_before_logged_in",error:"Must be logged in to link an OAuth account, use `useLoginWithOAuth`"});let{url:S}=yield n.auth.oauth.generateURL(o,N.createURL(u||"/")),p,h;if(_reactnative.Platform.OS==="ios"&&o==="apple"&&!m){let z=(v=new URL(S).searchParams.get("state"))!=null?v:"",H=yield Ge.signInAsync({state:z});if(!H.authorizationCode)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 J=yield n.auth.oauth.loginWithCode(H.authorizationCode,z,o,"raw");p=J.user,h=J.is_new_user}else p=yield n.auth.oauth.linkWithCode(H.authorizationCode,z,o,"raw");return(w=e==null?void 0:e.onSuccess)==null||w.call(e,p,h),r({status:"done"}),p!=null?p:void 0}let W=_reactnative.Platform.OS==="android"?S.replace("x.com","twitter.com"):S,E=yield X.openAuthSessionAsync(W);if(_reactnative.Platform.OS==="android")return;if(E.type!=="success")throw[X.WebBrowserResultType.CANCEL,X.WebBrowserResultType.DISMISS].includes(E.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:O}=N.parse(E.url),{privy_oauth_state:P,privy_oauth_code:U}=O;if(!U||!P)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 V=yield n.auth.oauth.loginWithCode(U,P,o);p=V.user,h=V.is_new_user}else p=yield n.auth.oauth.linkWithCode(U,P,o);return(b=e==null?void 0:e.onSuccess)==null||b.call(e,p,h),yield N.openURL(E.url.split("?")[0]),r({status:"done"}),p!=null?p:void 0}catch(S){l(S)}})},[t,n,r,l]),state:a}};function Yo(e){let{state:t,start:a}=ye(L(k({},e),{action:"login"}));return{state:t,login:a}}function Xo(e){let{state:t,start:a}=ye(L(k({},e),{action:"link"}));return{state:t,link:a}}function Jo(e){return ye(e)}var He=()=>_expoapplication.applicationId;function qe(e){return{get(t){return e.get(t.replaceAll(":","-"))},put(t,a){return e.put(t.replaceAll(":","-"),a)},del(t){return e.del(t.replaceAll(":","-"))},getKeys:()=>y(this,null,function*(){return[]})}}var Ke={get(e){return A.getItemAsync(e,{keychainAccessible:A.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},put(e,t){return A.setItemAsync(e,t,{keychainAccessible:A.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},del(e){return A.deleteItemAsync(e,{keychainAccessible:A.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},getKeys:()=>y(void 0,null,function*(){return[]})};function Zo(e){return e.status==="connected"}function ea(e){return e.status==="reconnecting"}function ta(e){return e.status==="connecting"}function ra(e){return e.status==="disconnected"}function oa(e){return e.status==="not-created"}function aa(e){return e.status==="creating"}function na(e){return e.status==="error"}function ia(e){return e.status==="needs-recovery"}exports.a = k; exports.b = L; exports.c = y; exports.d = R; exports.e = Wr; exports.f = Or; exports.g = Yo; exports.h = Xo; exports.i = Jo; exports.j = Ke; exports.k = me; exports.l = Do; exports.m = jo; exports.n = Zo; exports.o = ea; exports.p = ta; exports.q = ra; exports.r = oa; exports.s = aa; exports.t = na; exports.u = ia;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var tt=Object.defineProperty,rt=Object.defineProperties;var ot=Object.getOwnPropertyDescriptors;var fe=Object.getOwnPropertySymbols;var at=Object.prototype.hasOwnProperty,nt=Object.prototype.propertyIsEnumerable;var he=(e,t,a)=>t in e?tt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a,k=(e,t)=>{for(var a in t||(t={}))at.call(t,a)&&he(e,a,t[a]);if(fe)for(var a of fe(t))nt.call(t,a)&&he(e,a,t[a]);return e},L=(e,t)=>rt(e,ot(t));var y=(e,t,a)=>new Promise((r,c)=>{var n=i=>{try{l(a.next(i))}catch(d){c(d)}},s=i=>{try{l(a.throw(i))}catch(d){c(d)}},l=i=>i.done?r(i.value):Promise.resolve(i.value).then(n,s);l((a=a.apply(e,t)).next())});import*as Ge from"expo-apple-authentication";import{applicationId as Bt}from"expo-application";import*as N from"expo-linking";import*as A from"expo-secure-store";import*as X from"expo-web-browser";import{useCallback as Be,useContext as Gt,useEffect as Yt}from"react";import{Platform as pe}from"react-native";import{PrivyClientError as j}from"@privy-io/js-sdk-core";import{digest as Nt}from"expo-crypto";import Y,{useState as _,useMemo as Vt,createContext as zt,useCallback as oe,useRef as D,useEffect as Ht}from"react";import{AppState as Ve,View as qt}from"react-native";import Kt from"@privy-io/js-sdk-core";var Ee={name:"@privy-io/expo",version:"0.22.6",description:"Expo client for the Privy Auth API",keywords:["authentication","authorization","identity","privacy","privy","user data","react-native","expo","web3"],license:"Apache-2.0",source:"./src/index.ts",main:"./dist/esm/index.js",types:"./dist/index.d.ts",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"}},files:["dist/**/*","LICENSE","README.md"],scripts:{build:"npx tsup --clean --minify","generate-types":"npx tsup --dts-only",clean:"rm -rf dist .turbo",dev:"npx tsup --watch",test:'jest --testMatch "**/test/**/*.test.ts"',"test:ci":"npm run test",lint:'eslint "src/**/*.{ts,tsx,js,jsx}" && npx tsc --noEmit',format:'eslint "src/**/*.{ts,tsx,js,jsx}" --fix'},peerDependencies:{"@privy-io/expo-native-extensions":"0.0.3",react:"*","react-native":"*","react-native-passkeys":"^0.2.1","react-native-webview":"*","expo-constants":"*","expo-linking":"*","expo-crypto":"*","expo-secure-store":"*","expo-application":"*","expo-apple-authentication":"*","expo-web-browser":"*"},dependencies:{"@privy-io/js-sdk-core":"0.26.3","react-fast-compare":"^3.2.2"},devDependencies:{"@privy-io/eslint-config-custom":"*","@privy-io/tsconfig":"*","@simplewebauthn/types":"9.0.1","@tsconfig/node16-strictest-esm":"^1.0.3",tsup:"^6.2.3",typescript:"~5.5.3"},author:"privy.io",publishConfig:{access:"public"}};import dt from"react";import{useCallback as st,useEffect as ge,useRef as lt}from"react";import{AppState as ct}from"react-native";import ut from"react-native-webview";var _e=({client:e,isClientReady:t,setWebViewState:a,webViewState:r,logLevel:c})=>{let n=lt(null);ge(()=>{n.current&&r==="loaded"&&e.setMessagePoster(n.current)},[e,n.current,r==="loaded"]),ge(()=>ct.addEventListener("change",i=>y(void 0,null,function*(){n.current&&i==="active"&&((yield e.embeddedWallet.ping(500))||(n.current.reload(),a("reloading")))})).remove,[]);let s=st(l=>y(void 0,null,function*(){let{data:i}=l.nativeEvent;e.embeddedWallet.onMessage(JSON.parse(i))}),[e]);return t?dt.createElement(ut,{style:{flex:1},ref:n,source:{uri:e.embeddedWallet.getURL()},webviewDebuggingEnabled:c==="DEBUG",onLoad:()=>a("loaded"),onError:console.error,onMessage:s}):null};import{useCallback as se,useEffect as ke,useMemo as pt}from"react";import{errorIndicatesRecoveryIsNeeded as yt,getUserEmbeddedSolanaWallet as bt,getUserEmbeddedWallet as vt,PrivyClientError as K}from"@privy-io/js-sdk-core";import{getUserEmbeddedWallet as mt}from"@privy-io/js-sdk-core";import{PrivyClientError as q}from"@privy-io/js-sdk-core";function Q(d){return y(this,arguments,function*({client:e,setWallet:t,createWalletCallbacks:a,recoveryMethod:r,setRecoveryFlowState:c,password:n,recoveryToken:s,recoverySecretOverride:l,iCloudRecordNameOverride:i}){var u,m;switch(r){case"user-passcode":if(!n)throw new q({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!s)throw new q({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!l||!i)throw new q({code:"embedded_wallet_recovery_error",error:"iCloud recovery failed due to inability to store credentials"});break}t({status:"creating",account:null});let o=r==="icloud"?"icloud-native":r;try{let{provider:f,user:v}=yield e.embeddedWallet.create(n,o,s,l,i),w=mt(v);return(m=(u=a.current)==null?void 0:u.onSuccess)==null||m.call(u,f),t({status:"connected",provider:f,account:w}),c({status:"initial"}),f}catch(f){let v=f instanceof Error?f.message:"Error creating embedded wallet";throw t({status:"error",error:v,account:null}),c({status:"initial"}),new q({code:"embedded_wallet_creation_error",error:v})}})}function We(n){return y(this,arguments,function*({client:e,setSolanaWallet:t,createSolanaWalletCallbacks:a,setSolanaRecoveryFlowState:r,ethereumAccount:c}){var s,l;t({status:"creating"});try{let i=yield e.embeddedWallet.createSolana({ethereumAccount:c});return(l=(s=a.current)==null?void 0:s.onSuccess)==null||l.call(s,i),t({status:"connected",publicKey:i._publicKey}),r({status:"initial"}),i}catch(i){let d=i instanceof Error?i.message:"Error creating embedded wallet";throw t({status:"error",error:d}),r({status:"initial"}),new q({code:"embedded_wallet_creation_error",error:d})}})}import{PrivyClientError as I}from"@privy-io/js-sdk-core";function Z(d){return y(this,arguments,function*({client:e,account:t,setWallet:a,recoverWalletCallbacks:r,recoveryMethod:c,setRecoveryFlowState:n,password:s,recoveryToken:l,recoverySecretOverride:i}){var o,u,m,f;if(!t)throw new I({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});switch(c){case"user-passcode":if(!s)throw new I({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!l)throw new I({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!i)throw new I({code:"embedded_wallet_recovery_error",error:"Record name is required for icloud recovery method"});break}a({status:"connecting",account:t});try{let v=yield e.embeddedWallet.getProvider(t,s,l,i);return a({status:"connected",provider:v,account:t}),n({status:"initial"}),(u=(o=r.current)==null?void 0:o.onSuccess)==null||u.call(o,v),v}catch(v){a({status:"needs-recovery",account:t}),n({status:"initial"});let w=new I({code:"embedded_wallet_recovery_error",error:v instanceof Error?v.message:"Error recovering embedded wallet"});throw(f=(m=r.current)==null?void 0:m.onError)==null||f.call(m,w),w}})}function Ce(n){return y(this,arguments,function*({client:e,solanaAccount:t,setSolanaWallet:a,recoverSolanaWalletCallbacks:r,setSolanaRecoveryFlowState:c}){var s,l,i,d;if(!t)throw new I({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});a({status:"connecting"});try{let o=yield e.embeddedWallet.getSolanaProvider(t);return a({status:"connected",publicKey:o._publicKey}),c({status:"initial"}),(l=(s=r.current)==null?void 0:s.onSuccess)==null||l.call(s,o),o}catch(o){a({status:"needs-recovery"}),c({status:"initial"});let u=new I({code:"embedded_wallet_recovery_error",error:o instanceof Error?o.message:"Error recovering embedded wallet"});throw(d=(i=r.current)==null?void 0:i.onError)==null||d.call(i,u),u}})}var Re=({client:e,user:t,solanaWallet:a,setSolanaWallet:r,setSolanaRecoveryFlowState:c,webViewState:n,createSolanaWalletCallbacks:s,recoverSolanaWalletCallbacks:l})=>{let i=pt(()=>bt(t),[t]),d=se(()=>y(void 0,null,function*(){var v;let{user:m}=yield e.user.get(),f=(v=vt(m))!=null?v:void 0;return yield We({client:e,setSolanaWallet:r,createSolanaWalletCallbacks:s,setSolanaRecoveryFlowState:c,ethereumAccount:f})}),[e,s]),o=se(()=>y(void 0,null,function*(){if(!i)throw new K({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});return Ce({client:e,solanaAccount:i,setSolanaWallet:r,recoverSolanaWalletCallbacks:l,setSolanaRecoveryFlowState:c})}),[e,i]),u=se(()=>y(void 0,null,function*(){if(!i)throw r({status:"not-created"}),new K({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});r(m=>m.status==="connected"?{status:"reconnecting"}:{status:"connecting"});try{let m=yield e.embeddedWallet.getSolanaProvider(i);return r({status:"connected",publicKey:m._publicKey}),m}catch(m){throw yt(m)?(r({status:"needs-recovery"}),new K({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):m instanceof Error?(r({status:"error",error:m.message}),new K({code:"unknown_embedded_wallet_error",error:m.message})):(r({status:"error",error:"Error loading embedded wallet"}),new K({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,i]);return ke(()=>{if(!t&&a.status!=="disconnected")return r({status:"disconnected"});n==="loaded"&&u().catch(()=>{})},[n,t,i]),ke(()=>{a.status==="error"&&a.error.includes("User must be logged in")&&u()},[a.status]),{create:d,recover:o,getProvider:u}};import{useCallback as G,useEffect as Ie,useMemo as Ct}from"react";import{throwIfInvalidRecoveryUpgradePath as kt}from"@privy-io/js-sdk-core";import{errorIndicatesRecoveryIsNeeded as Rt,getUserEmbeddedWallet as At,PrivyClientError as C}from"@privy-io/js-sdk-core";import{Platform as Ae}from"react-native";import{PrivyClientError as x}from"@privy-io/js-sdk-core";function Oe(){return y(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 le(r){return y(this,arguments,function*({user:e,appId:t,client:a}){var l;if(Ae.OS==="android")throw new x({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let c=yield Oe(),n=yield a.recovery.icloudAuth.getICloudConfiguration("expo-ios");if(!(n==null?void 0:n.container_identifier))throw new x({code:"embedded_wallet_recovery_error",error:"An iCloud Container ID must be specified in the Privy Dashboard."});try{let{recoverySecret:i,iCloudRecordName:d}=yield c.writeRecoverySecretToICloud({containerId:n.container_identifier,appId:t,userId:e.id});return{recoverySecret:i,iCloudRecordName:d}}catch(i){if(i instanceof Error){let d=(l=i.message.split("Caused by: ")[1])!=null?l:"Error writing to iCloud";throw new x({code:"embedded_wallet_recovery_error",error:d})}throw new x({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}function xe(a){return y(this,arguments,function*({walletAddress:e,client:t}){var i;if(Ae.OS==="android")throw new x({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let r=yield Oe(),n=(yield t.recovery.getRecoveryKeyMaterial(e)).icloud_record_name;if(!n)throw new x({code:"embedded_wallet_recovery_error",error:"iCloud recovery not properly backed up."});let s=yield t.recovery.icloudAuth.getICloudConfiguration("expo-ios"),l=s==null?void 0:s.container_identifier;if(!l)throw new x({code:"embedded_wallet_recovery_error",error:"An iCloud Container ID must be specified in the Privy Dashboard."});try{let{recoverySecret:d}=yield r.readRecoverySecretFromICloud({containerId:l,recordName:n});return{recoverySecret:d}}catch(d){if(d instanceof Error){let o=(i=d.message.split("Caused by: ")[1])!=null?i:"Error writing to iCloud";throw new x({code:"embedded_wallet_recovery_error",error:o})}throw new x({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}import*as ee from"expo-linking";import*as Ue from"expo-web-browser";import{Platform as gt}from"react-native";import{PrivyClientError as B}from"@privy-io/js-sdk-core";import St from"react-fast-compare";var Pe=e=>t=>e(a=>St(a,t)?a:t);import{PrivyApiError as wt,PrivyClientError as ft}from"@privy-io/js-sdk-core";function R(e){return e instanceof Error||e instanceof wt||e instanceof ft?e:typeof e=="string"?new Error(e):new Error("Unknown error")}var Wr=e=>new Promise(t=>setTimeout(t,e));import{useEffect as ht,useRef as Et}from"react";import{AppState as ce}from"react-native";function Or(){let e=Et(ce.currentState);ht(()=>ce.addEventListener("change",r=>{e.current=r}).remove,[]);function t(){return ce.currentState}return{appState:e,getCurrentAppState:t}}function te(c){return y(this,arguments,function*({provider:e,redirectUri:t,client:a,onError:r}){try{let n;switch(e){case"google-drive":{let{url:d}=yield a.recovery.auth.generateURL(ee.createURL(t||"/"));n=d;break}default:throw new B({error:"OAuth invalid provider",code:"embedded_wallet_recovery_error"})}let s=yield Ue.openAuthSessionAsync(n);if(gt.OS==="android")return;if(s.type!=="success")throw new B({error:"Recovery OAuth session failed",code:"embedded_wallet_recovery_error"});let{queryParams:l}=ee.parse(s.url),i;switch(e){case"google-drive":{let{privy_oauth_state:d,privy_oauth_code:o}=l;if(!o||!d)throw new B({error:"Recovery OAuth invalid credentials",code:"embedded_wallet_recovery_error"});i=yield ue({oAuthCode:o,oAuthState:d,client:a});break}default:throw new B({error:"Recovery OAuth invalid provider",code:"embedded_wallet_recovery_error"})}return i}catch(n){throw r==null||r(R(n)),n}})}function ue(r){return y(this,arguments,function*({oAuthCode:e,oAuthState:t,client:a}){let{access_token:c}=yield a.recovery.auth.authorize(e,t);if(!c)throw new B({error:"OAuth invalid credentials",code:"login_with_oauth_returned_with_invalid_credentials"});return c})}import{getUserEmbeddedWallet as _t,PrivyClientError as Wt}from"@privy-io/js-sdk-core";function re(n){return y(this,arguments,function*({client:e,recoveryInput:t,setWalletRecoveryCallbacks:a,setRecoveryFlowState:r,setWallet:c}){var s,l,i,d;try{let{provider:o,user:u}=yield e.embeddedWallet.setRecovery(t),m=_t(u);return c({status:"connected",provider:o,account:m}),(l=(s=a.current)==null?void 0:s.onSuccess)==null||l.call(s,o),r({status:"initial"}),o}catch(o){let u=new Wt({code:"embedded_wallet_set_recovery_error",error:o instanceof Error?o.message:"Error setting password on embedded wallet"});throw(d=(i=a.current)==null?void 0:i.onError)==null||d.call(i,u),r({status:"initial"}),u}})}function Fe(e){return e===void 0?{recoveryMethod:"privy"}:typeof e=="string"?{recoveryMethod:"user-passcode",password:e}:e.recoveryMethod==="user-passcode"?{recoveryMethod:"user-passcode",password:e.password}:{recoveryMethod:e.recoveryMethod}}var Le=({client:e,user:t,appId:a,wallet:r,setWallet:c,setRecoveryFlowState:n,webViewState:s,createWalletCallbacks:l,recoverWalletCallbacks:i,setWalletRecoveryCallbacks:d})=>{let o=Ct(()=>At(t),[t]),u=G(b=>y(void 0,null,function*(){var O;if(o)throw new C({error:"This user already has an embedded wallet",code:"embedded_wallet_already_exists"});let{password:S,recoveryMethod:p}=Fe(b),h,W,E;if(p==="google-drive"&&(h=yield te({provider:p,client:e,onError:(O=l.current)==null?void 0:O.onError}),n({status:"creating-wallet"}),!h))return null;if(p==="icloud"){if(!t)throw new C({code:"embedded_wallet_recovery_error",error:"User must be loaded before creating a wallet with iCloud."});let{recoverySecret:P,iCloudRecordName:U}=yield le({user:t,appId:a,client:e});W=P,E=U}return yield Q({client:e,setWallet:c,createWalletCallbacks:l,recoveryMethod:p,setRecoveryFlowState:n,password:S,recoverySecretOverride:W,iCloudRecordNameOverride:E})}),[e,o,t]),m=G(b=>y(void 0,null,function*(){var h;if(r.status!=="connected")throw new C({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"});if(!o)throw new C({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});kt({currentRecoveryMethod:o.recovery_method,upgradeToRecoveryMethod:b.recoveryMethod});let S,p;switch(b.recoveryMethod){case"privy":p=L(k({},b),{wallet:o});break;case"user-passcode":p=L(k({},b),{wallet:o,password:b.password});break;case"google-drive":if(S=yield te({provider:b.recoveryMethod,client:e,onError:(h=d.current)==null?void 0:h.onError}),n({status:"upgrading-recovery"}),!S)return null;p={recoveryMethod:"google-drive",wallet:o,recoveryAccessToken:S};break;case"icloud":if(!t)throw new C({code:"embedded_wallet_recovery_error",error:"User must be loaded before backing up to iCloud."});let{recoverySecret:W,iCloudRecordName:E}=yield le({user:t,appId:a,client:e});p={recoveryMethod:"icloud-native",recoverySecretOverride:W,iCloudRecordNameOverride:E,wallet:o};break;default:throw new C({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}return re({client:e,recoveryInput:p,setWalletRecoveryCallbacks:d,setRecoveryFlowState:n,setWallet:c})}),[e,o,r.status,t]),f=G(b=>y(void 0,null,function*(){return m({recoveryMethod:"user-passcode",password:b})}),[e,o,r.status]),v=G(b=>y(void 0,null,function*(){var E;if(!o)throw new C({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{password:S,recoveryMethod:p}=Fe(b),h,W;if(p==="google-drive"&&(h=yield te({provider:p,client:e,onError:(E=i.current)==null?void 0:E.onError}),n({status:"recovering"}),!h))return null;if(p==="icloud"){if(!t)throw new C({code:"embedded_wallet_recovery_error",error:"User must be loaded before recovering via iCloud."});let{recoverySecret:O}=yield xe({client:e,walletAddress:o.address});W=O}return Z({client:e,account:o,setWallet:c,recoverWalletCallbacks:i,recoveryMethod:p,setRecoveryFlowState:n,password:S,recoveryToken:h,recoverySecretOverride:W})}),[e,o]),w=G(()=>y(void 0,null,function*(){if(!o)throw c({status:"not-created",account:null}),new C({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});c(b=>b.status==="connected"?{status:"reconnecting",account:o}:{status:"connecting",account:o});try{let b=yield e.embeddedWallet.getProvider(o);return c({status:"connected",provider:b,account:o}),b}catch(b){throw Rt(b)?(c({status:"needs-recovery",account:o}),new C({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):b instanceof Error?(c({status:"error",error:b.message,account:o}),new C({code:"unknown_embedded_wallet_error",error:b.message})):(c({status:"error",error:"Error loading embedded wallet",account:o}),new C({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,o]);return Ie(()=>{if(!t&&r.status!=="disconnected")return c({status:"disconnected",account:null});s==="loaded"&&w().catch(()=>{})},[s,t,o]),Ie(()=>{r.status==="error"&&r.error.includes("User must be logged in")&&w()},[r.status]),{create:u,recover:v,setPassword:f,setRecovery:m,getProvider:w}};import{useEffect as Ot,useState as xt}from"react";import{PrivyClientError as Me}from"@privy-io/js-sdk-core";var Te=({client:e,user:t,isReady:a,customAuth:r})=>{let[c,n]=xt({status:"initial"});return Ot(()=>{(()=>y(void 0,null,function*(){if(!(r!=null&&r.enabled)){n({status:"not-enabled"});return}n({status:"loading"});let{getCustomAccessToken:l,isLoading:i}=r;if(!(!a||i))try{let d=yield l();if(!d&&t){yield e.auth.logout(),n({status:"done"});return}if(!d){n({status:"done"});return}if(t){n({status:"done"});return}if(!(yield e.auth.customProvider.syncWithToken(d))){yield e.auth.logout(),n({status:"error",error:new Me({error:"Failed to sync with custom auth provider",code:"third_party_auth_error"})});return}n({status:"done"})}catch(d){if(console.log("Error syncing with custom auth provider",d),n({status:"error",error:d}),t)throw yield e.auth.logout(),new Me({error:"Third-party auth failed",code:"third_party_auth_error"})}}))()},[e,t,a,r==null?void 0:r.enabled,r==null?void 0:r.getCustomAccessToken,r==null?void 0:r.isLoading]),{customAuthState:c,customAuthStateIsSettled:c.status!=="loading"&&c.status!=="initial"}};import*as M from"expo-linking";import{useCallback as Pt,useEffect as Ut}from"react";import{Platform as It}from"react-native";var De=({client:e,user:t,isUserInitialized:a,oAuthState:r,oAuthCallbacks:c,setOAuthState:n,recoveryFlowState:s})=>{let l=M.useURL(),i=Pt(d=>{var u,m;let o=R(d);n({status:"error",error:o}),(m=(u=c.current).onError)==null||m.call(u,o)},[n]);return Ut(()=>{function d(){return y(this,null,function*(){var f,v;if(!l||r.status!=="loading"||s.status!=="initial")return;let{queryParams:o}=M.parse(l),{privy_oauth_state:u,privy_oauth_code:m}=o;if(!m||!u){n({status:"done"});return}try{let w,b;if(t)w=yield e.auth.oauth.linkWithCode(m,u);else{let S=yield e.auth.oauth.loginWithCode(m,u);w=S.user,b=!!S.is_new_user}return(v=(f=c.current).onSuccess)==null||v.call(f,w,b),n({status:"done"}),yield M.openURL(l.split("?")[0])}catch(w){i(w)}})}It.OS==="android"&&a&&d()},[l,a])};import*as T from"expo-linking";import{useCallback as Ft,useEffect as Lt,useMemo as Mt}from"react";import{Platform as Tt}from"react-native";import{getUserEmbeddedWallet as Dt}from"@privy-io/js-sdk-core";var je=({client:e,user:t,createWalletCallbacks:a,recoverWalletCallbacks:r,setWalletRecoveryCallbacks:c,recoveryFlowState:n,oAuthState:s,setRecoveryFlowState:l,setWallet:i,appStateVisible:d,webViewLoaded:o})=>{let u=T.useURL(),m=Mt(()=>Dt(t),[t]),f=Ft(v=>{var b,S,p,h;let w=R(v);n.status==="creating-wallet"?(S=(b=a.current).onError)==null||S.call(b,R(w)):(h=(p=r.current).onError)==null||h.call(p,R(w)),l({status:"initial"})},[n]);return Lt(()=>{function v(){return y(this,null,function*(){if(!u&&n.status!=="initial"&&d&&f(new Error("Recovery OAuth session failed")),!u||n.status==="initial"||s.status!=="initial"||!d||!o)return;let{queryParams:w}=T.parse(u),{privy_oauth_state:b,privy_oauth_code:S}=w;if(!(!S||!b)){yield T.openURL(u.split("?")[0]);try{let p=yield ue({oAuthCode:S,oAuthState:b,client:e});if(n.status==="creating-wallet")yield Q({client:e,setWallet:i,createWalletCallbacks:a,recoveryMethod:"google-drive",setRecoveryFlowState:l,recoveryToken:p});else if(n.status==="upgrading-recovery"){if(!m)throw new Error("Embedded wallet not found");yield re({client:e,recoveryInput:{recoveryMethod:"google-drive",wallet:m,recoveryAccessToken:p},setWalletRecoveryCallbacks:c,setRecoveryFlowState:l,setWallet:i})}else yield Z({client:e,account:m,setWallet:i,recoverWalletCallbacks:r,recoveryMethod:"google-drive",setRecoveryFlowState:l,recoveryToken:p})}catch(p){f(p)}}})}Tt.OS==="android"&&v()},[u,n.status,d,o])};import{useEffect as jt}from"react";var Ne=({client:e,isUserInitialized:t,setIsUserInitialized:a})=>{jt(()=>{t||(()=>y(void 0,null,function*(){try{yield e.user.get()}catch(c){}finally{a(!0)}}))()},[t])};var me=zt({}),ae;function Do(){return ae?ae.getAccessToken():Promise.resolve(null)}var jo=e=>{var we;let[t,a]=_(Ve.currentState==="active");Ht(()=>{let F=Ve.addEventListener("change",et=>{a(et==="active")});return()=>{F.remove()}},[]);let[r,c]=_(!1),[n,s]=_("loading"),[l,i]=_(!1),[d,o]=_(null),[u,m]=_({status:"disconnected",account:null}),[f,v]=_({status:"disconnected"}),[w,b]=_({status:"initial"}),[S,p]=_({status:"initial"}),[h,W]=_({status:"initial"}),[E,O]=_({status:"initial"}),[P,U]=_({status:"initial"}),[V,z]=_({status:"initial"}),[H,J]=_({status:"initial"}),be=D({}),ne=D({}),ie=D({}),de=D({}),ve=D({}),Se=D({}),$=oe(F=>{if(F)return Pe(o)(F);o(null),b({status:"initial"}),p({status:"initial"}),m({status:"disconnected",account:null})},[]),g=Vt(()=>{let F=e.storage||Ke;return ae=new Kt({storage:qe(F),appId:e.appId,clientId:e.clientId,supportedChains:e.supportedChains,nativeAppIdentifier:He(),baseUrl:e.baseUrl,sdkVersion:`expo:${Ee.version}`,callbacks:{setUser:$,setIsReady:i},logLevel:e.logLevel,crypto:{digest:Nt}}),ae},[e.storage,e.appId,e.clientId,e.baseUrl,e.supportedChains,e.logLevel,$]),Ye=oe(()=>($(null),g.auth.logout()),[$,g]),Xe=oe(()=>g.getAccessToken(),[g]),Je=oe(()=>g.getIdentityToken(),[g]);Ne({client:g,isUserInitialized:r,setIsUserInitialized:c});let $e=Le({client:g,user:d,appId:e.appId,webViewState:n,createWalletCallbacks:ne,recoverWalletCallbacks:ie,setWalletRecoveryCallbacks:de,setRecoveryFlowState:W,wallet:u,setWallet:m}),Qe=Re({client:g,user:d,webViewState:n,createSolanaWalletCallbacks:ve,recoverSolanaWalletCallbacks:Se,setSolanaRecoveryFlowState:O,solanaWallet:f,setSolanaWallet:v});De({client:g,isUserInitialized:r,user:d,oAuthState:S,setOAuthState:p,oAuthCallbacks:be,recoveryFlowState:h}),je({client:g,user:d,webViewLoaded:n==="loaded",createWalletCallbacks:ne,recoverWalletCallbacks:ie,setWalletRecoveryCallbacks:de,recoveryFlowState:h,oAuthState:S,setRecoveryFlowState:W,setWallet:m,appStateVisible:t});let{customAuthStateIsSettled:Ze}=Te({client:g,user:d,isReady:r,customAuth:(we=e.config)==null?void 0:we.customAuth});return Y.createElement(Y.Fragment,null,Y.createElement(me.Provider,{value:{client:g,user:d,isReady:n!=="loading"&&r&&ze(S)&&Ze,logout:Ye,getAccessToken:Xe,getIdentityToken:Je,wallet:k(k({},u),$e),solanaWallet:k(k({},f),Qe),oAuthState:S,oAuthCallbacks:be,recoveryFlowState:h,setRecoveryFlowState:W,solanaRecoveryFlowState:E,setSolanaRecoveryFlowState:O,createWalletCallbacks:ne,recoverWalletCallbacks:ie,setWalletRecoveryCallbacks:de,createSolanaWalletCallbacks:ve,recoverSolanaWalletCallbacks:Se,setOAuthState:p,siweState:P,setSiweState:U,otpState:w,setOtpState:b,passkeyState:V,setPasskeyState:z,farcasterState:H,setFarcasterState:J}},e.children),Y.createElement(qt,{style:{width:0,height:0,overflow:"hidden"}},Y.createElement(_e,{logLevel:e.logLevel,client:g,isClientReady:l,setWebViewState:s,webViewState:n})))};var ze=e=>e.status!=="loading",ye=(e={})=>{let{user:t,oAuthState:a,setOAuthState:r,oAuthCallbacks:c,client:n}=Gt(me),s=e.action?e.action==="login":!t;Yt(()=>{c.current={onSuccess:e.onSuccess,onError:e.onError}},[e.onSuccess,e.onError]);let l=Be(d=>{var u;let o=R(d);return r({status:"error",error:o}),(u=e==null?void 0:e.onError)==null||u.call(e,o),o},[e==null?void 0:e.onError]);return{start:Be(function(f){return y(this,arguments,function*({provider:o,redirectUri:u,isLegacyAppleIosBehaviorEnabled:m=!1}){var v,w,b;r({status:"loading"});try{if(t&&e.action==="login")throw new j({code:"attempted_login_with_oauth_while_already_logged_in",error:"Already logged in, if trying to link an OAuth account use `useLinkWithOAuth`"});if(!t&&e.action==="link")throw new j({code:"attempted_link_oauth_before_logged_in",error:"Must be logged in to link an OAuth account, use `useLoginWithOAuth`"});let{url:S}=yield n.auth.oauth.generateURL(o,N.createURL(u||"/")),p,h;if(pe.OS==="ios"&&o==="apple"&&!m){let z=(v=new URL(S).searchParams.get("state"))!=null?v:"",H=yield Ge.signInAsync({state:z});if(!H.authorizationCode)throw new j({error:"OAuth invalid credentials",code:s?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(s){let J=yield n.auth.oauth.loginWithCode(H.authorizationCode,z,o,"raw");p=J.user,h=J.is_new_user}else p=yield n.auth.oauth.linkWithCode(H.authorizationCode,z,o,"raw");return(w=e==null?void 0:e.onSuccess)==null||w.call(e,p,h),r({status:"done"}),p!=null?p:void 0}let W=pe.OS==="android"?S.replace("x.com","twitter.com"):S,E=yield X.openAuthSessionAsync(W);if(pe.OS==="android")return;if(E.type!=="success")throw[X.WebBrowserResultType.CANCEL,X.WebBrowserResultType.DISMISS].includes(E.type)?new j({error:"OAuth was cancelled",code:s?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):new j({error:"OAuth session failed",code:s?"failed_to_complete_login_with_oauth":"failed_to_complete_link_with_oauth"});let{queryParams:O}=N.parse(E.url),{privy_oauth_state:P,privy_oauth_code:U}=O;if(!U||!P)throw new j({error:"OAuth invalid credentials",code:s?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(s){let V=yield n.auth.oauth.loginWithCode(U,P,o);p=V.user,h=V.is_new_user}else p=yield n.auth.oauth.linkWithCode(U,P,o);return(b=e==null?void 0:e.onSuccess)==null||b.call(e,p,h),yield N.openURL(E.url.split("?")[0]),r({status:"done"}),p!=null?p:void 0}catch(S){l(S)}})},[t,n,r,l]),state:a}};function Yo(e){let{state:t,start:a}=ye(L(k({},e),{action:"login"}));return{state:t,login:a}}function Xo(e){let{state:t,start:a}=ye(L(k({},e),{action:"link"}));return{state:t,link:a}}function Jo(e){return ye(e)}var He=()=>Bt;function qe(e){return{get(t){return e.get(t.replaceAll(":","-"))},put(t,a){return e.put(t.replaceAll(":","-"),a)},del(t){return e.del(t.replaceAll(":","-"))},getKeys:()=>y(this,null,function*(){return[]})}}var Ke={get(e){return A.getItemAsync(e,{keychainAccessible:A.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},put(e,t){return A.setItemAsync(e,t,{keychainAccessible:A.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},del(e){return A.deleteItemAsync(e,{keychainAccessible:A.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},getKeys:()=>y(void 0,null,function*(){return[]})};function Zo(e){return e.status==="connected"}function ea(e){return e.status==="reconnecting"}function ta(e){return e.status==="connecting"}function ra(e){return e.status==="disconnected"}function oa(e){return e.status==="not-created"}function aa(e){return e.status==="creating"}function na(e){return e.status==="error"}function ia(e){return e.status==="needs-recovery"}export{k as a,L as b,y as c,R as d,Wr as e,Or as f,Yo as g,Xo as h,Jo as i,Ke as j,me as k,Do as l,jo as m,Zo as n,ea as o,ta as p,ra as q,oa as r,aa as s,na as t,ia as u};
|
|
1
|
+
var tt=Object.defineProperty,rt=Object.defineProperties;var ot=Object.getOwnPropertyDescriptors;var fe=Object.getOwnPropertySymbols;var at=Object.prototype.hasOwnProperty,nt=Object.prototype.propertyIsEnumerable;var he=(e,t,a)=>t in e?tt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a,k=(e,t)=>{for(var a in t||(t={}))at.call(t,a)&&he(e,a,t[a]);if(fe)for(var a of fe(t))nt.call(t,a)&&he(e,a,t[a]);return e},L=(e,t)=>rt(e,ot(t));var y=(e,t,a)=>new Promise((r,c)=>{var n=i=>{try{l(a.next(i))}catch(d){c(d)}},s=i=>{try{l(a.throw(i))}catch(d){c(d)}},l=i=>i.done?r(i.value):Promise.resolve(i.value).then(n,s);l((a=a.apply(e,t)).next())});import*as Ge from"expo-apple-authentication";import{applicationId as Bt}from"expo-application";import*as N from"expo-linking";import*as A from"expo-secure-store";import*as X from"expo-web-browser";import{useCallback as Be,useContext as Gt,useEffect as Yt}from"react";import{Platform as pe}from"react-native";import{PrivyClientError as j}from"@privy-io/js-sdk-core";import{digest as Nt}from"expo-crypto";import Y,{useState as _,useMemo as Vt,createContext as zt,useCallback as oe,useRef as D,useEffect as Ht}from"react";import{AppState as Ve,View as qt}from"react-native";import Kt from"@privy-io/js-sdk-core";var Ee={name:"@privy-io/expo",version:"0.22.7",description:"Expo client for the Privy Auth API",keywords:["authentication","authorization","identity","privacy","privy","user data","react-native","expo","web3"],license:"Apache-2.0",source:"./src/index.ts",main:"./dist/esm/index.js",types:"./dist/index.d.ts",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"}},files:["dist/**/*","LICENSE","README.md"],scripts:{build:"npx tsup --clean --minify","generate-types":"npx tsup --dts-only",clean:"rm -rf dist .turbo",dev:"npx tsup --watch",test:'jest --testMatch "**/test/**/*.test.ts"',"test:ci":"npm run test",lint:'eslint "src/**/*.{ts,tsx,js,jsx}" && npx tsc --noEmit',format:'eslint "src/**/*.{ts,tsx,js,jsx}" --fix'},peerDependencies:{"@privy-io/expo-native-extensions":"0.0.3",react:"*","react-native":"*","react-native-passkeys":"^0.2.1","react-native-webview":"*","expo-constants":"*","expo-linking":"*","expo-crypto":"*","expo-secure-store":"*","expo-application":"*","expo-apple-authentication":"*","expo-web-browser":"*"},dependencies:{"@privy-io/js-sdk-core":"0.26.4","react-fast-compare":"^3.2.2"},devDependencies:{"@privy-io/eslint-config-custom":"*","@privy-io/tsconfig":"*","@simplewebauthn/types":"9.0.1","@tsconfig/node16-strictest-esm":"^1.0.3",tsup:"^6.2.3",typescript:"~5.5.3"},author:"privy.io",publishConfig:{access:"public"}};import dt from"react";import{useCallback as st,useEffect as ge,useRef as lt}from"react";import{AppState as ct}from"react-native";import ut from"react-native-webview";var _e=({client:e,isClientReady:t,setWebViewState:a,webViewState:r,logLevel:c})=>{let n=lt(null);ge(()=>{n.current&&r==="loaded"&&e.setMessagePoster(n.current)},[e,n.current,r==="loaded"]),ge(()=>ct.addEventListener("change",i=>y(void 0,null,function*(){n.current&&i==="active"&&((yield e.embeddedWallet.ping(500))||(n.current.reload(),a("reloading")))})).remove,[]);let s=st(l=>y(void 0,null,function*(){let{data:i}=l.nativeEvent;e.embeddedWallet.onMessage(JSON.parse(i))}),[e]);return t?dt.createElement(ut,{style:{flex:1},ref:n,source:{uri:e.embeddedWallet.getURL()},webviewDebuggingEnabled:c==="DEBUG",onLoad:()=>a("loaded"),onError:console.error,onMessage:s}):null};import{useCallback as se,useEffect as ke,useMemo as pt}from"react";import{errorIndicatesRecoveryIsNeeded as yt,getUserEmbeddedSolanaWallet as bt,getUserEmbeddedWallet as vt,PrivyClientError as K}from"@privy-io/js-sdk-core";import{getUserEmbeddedWallet as mt}from"@privy-io/js-sdk-core";import{PrivyClientError as q}from"@privy-io/js-sdk-core";function Q(d){return y(this,arguments,function*({client:e,setWallet:t,createWalletCallbacks:a,recoveryMethod:r,setRecoveryFlowState:c,password:n,recoveryToken:s,recoverySecretOverride:l,iCloudRecordNameOverride:i}){var u,m;switch(r){case"user-passcode":if(!n)throw new q({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!s)throw new q({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!l||!i)throw new q({code:"embedded_wallet_recovery_error",error:"iCloud recovery failed due to inability to store credentials"});break}t({status:"creating",account:null});let o=r==="icloud"?"icloud-native":r;try{let{provider:f,user:v}=yield e.embeddedWallet.create(n,o,s,l,i),w=mt(v);return(m=(u=a.current)==null?void 0:u.onSuccess)==null||m.call(u,f),t({status:"connected",provider:f,account:w}),c({status:"initial"}),f}catch(f){let v=f instanceof Error?f.message:"Error creating embedded wallet";throw t({status:"error",error:v,account:null}),c({status:"initial"}),new q({code:"embedded_wallet_creation_error",error:v})}})}function We(n){return y(this,arguments,function*({client:e,setSolanaWallet:t,createSolanaWalletCallbacks:a,setSolanaRecoveryFlowState:r,ethereumAccount:c}){var s,l;t({status:"creating"});try{let i=yield e.embeddedWallet.createSolana({ethereumAccount:c});return(l=(s=a.current)==null?void 0:s.onSuccess)==null||l.call(s,i),t({status:"connected",publicKey:i._publicKey}),r({status:"initial"}),i}catch(i){let d=i instanceof Error?i.message:"Error creating embedded wallet";throw t({status:"error",error:d}),r({status:"initial"}),new q({code:"embedded_wallet_creation_error",error:d})}})}import{PrivyClientError as I}from"@privy-io/js-sdk-core";function Z(d){return y(this,arguments,function*({client:e,account:t,setWallet:a,recoverWalletCallbacks:r,recoveryMethod:c,setRecoveryFlowState:n,password:s,recoveryToken:l,recoverySecretOverride:i}){var o,u,m,f;if(!t)throw new I({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});switch(c){case"user-passcode":if(!s)throw new I({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!l)throw new I({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!i)throw new I({code:"embedded_wallet_recovery_error",error:"Record name is required for icloud recovery method"});break}a({status:"connecting",account:t});try{let v=yield e.embeddedWallet.getProvider(t,s,l,i);return a({status:"connected",provider:v,account:t}),n({status:"initial"}),(u=(o=r.current)==null?void 0:o.onSuccess)==null||u.call(o,v),v}catch(v){a({status:"needs-recovery",account:t}),n({status:"initial"});let w=new I({code:"embedded_wallet_recovery_error",error:v instanceof Error?v.message:"Error recovering embedded wallet"});throw(f=(m=r.current)==null?void 0:m.onError)==null||f.call(m,w),w}})}function Ce(n){return y(this,arguments,function*({client:e,solanaAccount:t,setSolanaWallet:a,recoverSolanaWalletCallbacks:r,setSolanaRecoveryFlowState:c}){var s,l,i,d;if(!t)throw new I({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});a({status:"connecting"});try{let o=yield e.embeddedWallet.getSolanaProvider(t);return a({status:"connected",publicKey:o._publicKey}),c({status:"initial"}),(l=(s=r.current)==null?void 0:s.onSuccess)==null||l.call(s,o),o}catch(o){a({status:"needs-recovery"}),c({status:"initial"});let u=new I({code:"embedded_wallet_recovery_error",error:o instanceof Error?o.message:"Error recovering embedded wallet"});throw(d=(i=r.current)==null?void 0:i.onError)==null||d.call(i,u),u}})}var Re=({client:e,user:t,solanaWallet:a,setSolanaWallet:r,setSolanaRecoveryFlowState:c,webViewState:n,createSolanaWalletCallbacks:s,recoverSolanaWalletCallbacks:l})=>{let i=pt(()=>bt(t),[t]),d=se(()=>y(void 0,null,function*(){var v;let{user:m}=yield e.user.get(),f=(v=vt(m))!=null?v:void 0;return yield We({client:e,setSolanaWallet:r,createSolanaWalletCallbacks:s,setSolanaRecoveryFlowState:c,ethereumAccount:f})}),[e,s]),o=se(()=>y(void 0,null,function*(){if(!i)throw new K({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});return Ce({client:e,solanaAccount:i,setSolanaWallet:r,recoverSolanaWalletCallbacks:l,setSolanaRecoveryFlowState:c})}),[e,i]),u=se(()=>y(void 0,null,function*(){if(!i)throw r({status:"not-created"}),new K({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});r(m=>m.status==="connected"?{status:"reconnecting"}:{status:"connecting"});try{let m=yield e.embeddedWallet.getSolanaProvider(i);return r({status:"connected",publicKey:m._publicKey}),m}catch(m){throw yt(m)?(r({status:"needs-recovery"}),new K({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):m instanceof Error?(r({status:"error",error:m.message}),new K({code:"unknown_embedded_wallet_error",error:m.message})):(r({status:"error",error:"Error loading embedded wallet"}),new K({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,i]);return ke(()=>{if(!t&&a.status!=="disconnected")return r({status:"disconnected"});n==="loaded"&&u().catch(()=>{})},[n,t,i]),ke(()=>{a.status==="error"&&a.error.includes("User must be logged in")&&u()},[a.status]),{create:d,recover:o,getProvider:u}};import{useCallback as G,useEffect as Ie,useMemo as Ct}from"react";import{throwIfInvalidRecoveryUpgradePath as kt}from"@privy-io/js-sdk-core";import{errorIndicatesRecoveryIsNeeded as Rt,getUserEmbeddedWallet as At,PrivyClientError as C}from"@privy-io/js-sdk-core";import{Platform as Ae}from"react-native";import{PrivyClientError as x}from"@privy-io/js-sdk-core";function Oe(){return y(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 le(r){return y(this,arguments,function*({user:e,appId:t,client:a}){var l;if(Ae.OS==="android")throw new x({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let c=yield Oe(),n=yield a.recovery.icloudAuth.getICloudConfiguration("expo-ios");if(!(n==null?void 0:n.container_identifier))throw new x({code:"embedded_wallet_recovery_error",error:"An iCloud Container ID must be specified in the Privy Dashboard."});try{let{recoverySecret:i,iCloudRecordName:d}=yield c.writeRecoverySecretToICloud({containerId:n.container_identifier,appId:t,userId:e.id});return{recoverySecret:i,iCloudRecordName:d}}catch(i){if(i instanceof Error){let d=(l=i.message.split("Caused by: ")[1])!=null?l:"Error writing to iCloud";throw new x({code:"embedded_wallet_recovery_error",error:d})}throw new x({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}function xe(a){return y(this,arguments,function*({walletAddress:e,client:t}){var i;if(Ae.OS==="android")throw new x({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});let r=yield Oe(),n=(yield t.recovery.getRecoveryKeyMaterial(e)).icloud_record_name;if(!n)throw new x({code:"embedded_wallet_recovery_error",error:"iCloud recovery not properly backed up."});let s=yield t.recovery.icloudAuth.getICloudConfiguration("expo-ios"),l=s==null?void 0:s.container_identifier;if(!l)throw new x({code:"embedded_wallet_recovery_error",error:"An iCloud Container ID must be specified in the Privy Dashboard."});try{let{recoverySecret:d}=yield r.readRecoverySecretFromICloud({containerId:l,recordName:n});return{recoverySecret:d}}catch(d){if(d instanceof Error){let o=(i=d.message.split("Caused by: ")[1])!=null?i:"Error writing to iCloud";throw new x({code:"embedded_wallet_recovery_error",error:o})}throw new x({code:"embedded_wallet_recovery_error",error:"Error writing to iCloud"})}})}import*as ee from"expo-linking";import*as Ue from"expo-web-browser";import{Platform as gt}from"react-native";import{PrivyClientError as B}from"@privy-io/js-sdk-core";import St from"react-fast-compare";var Pe=e=>t=>e(a=>St(a,t)?a:t);import{PrivyApiError as wt,PrivyClientError as ft}from"@privy-io/js-sdk-core";function R(e){return e instanceof Error||e instanceof wt||e instanceof ft?e:typeof e=="string"?new Error(e):new Error("Unknown error")}var Wr=e=>new Promise(t=>setTimeout(t,e));import{useEffect as ht,useRef as Et}from"react";import{AppState as ce}from"react-native";function Or(){let e=Et(ce.currentState);ht(()=>ce.addEventListener("change",r=>{e.current=r}).remove,[]);function t(){return ce.currentState}return{appState:e,getCurrentAppState:t}}function te(c){return y(this,arguments,function*({provider:e,redirectUri:t,client:a,onError:r}){try{let n;switch(e){case"google-drive":{let{url:d}=yield a.recovery.auth.generateURL(ee.createURL(t||"/"));n=d;break}default:throw new B({error:"OAuth invalid provider",code:"embedded_wallet_recovery_error"})}let s=yield Ue.openAuthSessionAsync(n);if(gt.OS==="android")return;if(s.type!=="success")throw new B({error:"Recovery OAuth session failed",code:"embedded_wallet_recovery_error"});let{queryParams:l}=ee.parse(s.url),i;switch(e){case"google-drive":{let{privy_oauth_state:d,privy_oauth_code:o}=l;if(!o||!d)throw new B({error:"Recovery OAuth invalid credentials",code:"embedded_wallet_recovery_error"});i=yield ue({oAuthCode:o,oAuthState:d,client:a});break}default:throw new B({error:"Recovery OAuth invalid provider",code:"embedded_wallet_recovery_error"})}return i}catch(n){throw r==null||r(R(n)),n}})}function ue(r){return y(this,arguments,function*({oAuthCode:e,oAuthState:t,client:a}){let{access_token:c}=yield a.recovery.auth.authorize(e,t);if(!c)throw new B({error:"OAuth invalid credentials",code:"login_with_oauth_returned_with_invalid_credentials"});return c})}import{getUserEmbeddedWallet as _t,PrivyClientError as Wt}from"@privy-io/js-sdk-core";function re(n){return y(this,arguments,function*({client:e,recoveryInput:t,setWalletRecoveryCallbacks:a,setRecoveryFlowState:r,setWallet:c}){var s,l,i,d;try{let{provider:o,user:u}=yield e.embeddedWallet.setRecovery(t),m=_t(u);return c({status:"connected",provider:o,account:m}),(l=(s=a.current)==null?void 0:s.onSuccess)==null||l.call(s,o),r({status:"initial"}),o}catch(o){let u=new Wt({code:"embedded_wallet_set_recovery_error",error:o instanceof Error?o.message:"Error setting password on embedded wallet"});throw(d=(i=a.current)==null?void 0:i.onError)==null||d.call(i,u),r({status:"initial"}),u}})}function Fe(e){return e===void 0?{recoveryMethod:"privy"}:typeof e=="string"?{recoveryMethod:"user-passcode",password:e}:e.recoveryMethod==="user-passcode"?{recoveryMethod:"user-passcode",password:e.password}:{recoveryMethod:e.recoveryMethod}}var Le=({client:e,user:t,appId:a,wallet:r,setWallet:c,setRecoveryFlowState:n,webViewState:s,createWalletCallbacks:l,recoverWalletCallbacks:i,setWalletRecoveryCallbacks:d})=>{let o=Ct(()=>At(t),[t]),u=G(b=>y(void 0,null,function*(){var O;if(o)throw new C({error:"This user already has an embedded wallet",code:"embedded_wallet_already_exists"});let{password:S,recoveryMethod:p}=Fe(b),h,W,E;if(p==="google-drive"&&(h=yield te({provider:p,client:e,onError:(O=l.current)==null?void 0:O.onError}),n({status:"creating-wallet"}),!h))return null;if(p==="icloud"){if(!t)throw new C({code:"embedded_wallet_recovery_error",error:"User must be loaded before creating a wallet with iCloud."});let{recoverySecret:P,iCloudRecordName:U}=yield le({user:t,appId:a,client:e});W=P,E=U}return yield Q({client:e,setWallet:c,createWalletCallbacks:l,recoveryMethod:p,setRecoveryFlowState:n,password:S,recoverySecretOverride:W,iCloudRecordNameOverride:E})}),[e,o,t]),m=G(b=>y(void 0,null,function*(){var h;if(r.status!=="connected")throw new C({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"});if(!o)throw new C({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});kt({currentRecoveryMethod:o.recovery_method,upgradeToRecoveryMethod:b.recoveryMethod});let S,p;switch(b.recoveryMethod){case"privy":p=L(k({},b),{wallet:o});break;case"user-passcode":p=L(k({},b),{wallet:o,password:b.password});break;case"google-drive":if(S=yield te({provider:b.recoveryMethod,client:e,onError:(h=d.current)==null?void 0:h.onError}),n({status:"upgrading-recovery"}),!S)return null;p={recoveryMethod:"google-drive",wallet:o,recoveryAccessToken:S};break;case"icloud":if(!t)throw new C({code:"embedded_wallet_recovery_error",error:"User must be loaded before backing up to iCloud."});let{recoverySecret:W,iCloudRecordName:E}=yield le({user:t,appId:a,client:e});p={recoveryMethod:"icloud-native",recoverySecretOverride:W,iCloudRecordNameOverride:E,wallet:o};break;default:throw new C({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}return re({client:e,recoveryInput:p,setWalletRecoveryCallbacks:d,setRecoveryFlowState:n,setWallet:c})}),[e,o,r.status,t]),f=G(b=>y(void 0,null,function*(){return m({recoveryMethod:"user-passcode",password:b})}),[e,o,r.status]),v=G(b=>y(void 0,null,function*(){var E;if(!o)throw new C({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{password:S,recoveryMethod:p}=Fe(b),h,W;if(p==="google-drive"&&(h=yield te({provider:p,client:e,onError:(E=i.current)==null?void 0:E.onError}),n({status:"recovering"}),!h))return null;if(p==="icloud"){if(!t)throw new C({code:"embedded_wallet_recovery_error",error:"User must be loaded before recovering via iCloud."});let{recoverySecret:O}=yield xe({client:e,walletAddress:o.address});W=O}return Z({client:e,account:o,setWallet:c,recoverWalletCallbacks:i,recoveryMethod:p,setRecoveryFlowState:n,password:S,recoveryToken:h,recoverySecretOverride:W})}),[e,o]),w=G(()=>y(void 0,null,function*(){if(!o)throw c({status:"not-created",account:null}),new C({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});c(b=>b.status==="connected"?{status:"reconnecting",account:o}:{status:"connecting",account:o});try{let b=yield e.embeddedWallet.getProvider(o);return c({status:"connected",provider:b,account:o}),b}catch(b){throw Rt(b)?(c({status:"needs-recovery",account:o}),new C({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):b instanceof Error?(c({status:"error",error:b.message,account:o}),new C({code:"unknown_embedded_wallet_error",error:b.message})):(c({status:"error",error:"Error loading embedded wallet",account:o}),new C({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,o]);return Ie(()=>{if(!t&&r.status!=="disconnected")return c({status:"disconnected",account:null});s==="loaded"&&w().catch(()=>{})},[s,t,o]),Ie(()=>{r.status==="error"&&r.error.includes("User must be logged in")&&w()},[r.status]),{create:u,recover:v,setPassword:f,setRecovery:m,getProvider:w}};import{useEffect as Ot,useState as xt}from"react";import{PrivyClientError as Me}from"@privy-io/js-sdk-core";var Te=({client:e,user:t,isReady:a,customAuth:r})=>{let[c,n]=xt({status:"initial"});return Ot(()=>{(()=>y(void 0,null,function*(){if(!(r!=null&&r.enabled)){n({status:"not-enabled"});return}n({status:"loading"});let{getCustomAccessToken:l,isLoading:i}=r;if(!(!a||i))try{let d=yield l();if(!d&&t){yield e.auth.logout(),n({status:"done"});return}if(!d){n({status:"done"});return}if(t){n({status:"done"});return}if(!(yield e.auth.customProvider.syncWithToken(d))){yield e.auth.logout(),n({status:"error",error:new Me({error:"Failed to sync with custom auth provider",code:"third_party_auth_error"})});return}n({status:"done"})}catch(d){if(console.log("Error syncing with custom auth provider",d),n({status:"error",error:d}),t)throw yield e.auth.logout(),new Me({error:"Third-party auth failed",code:"third_party_auth_error"})}}))()},[e,t,a,r==null?void 0:r.enabled,r==null?void 0:r.getCustomAccessToken,r==null?void 0:r.isLoading]),{customAuthState:c,customAuthStateIsSettled:c.status!=="loading"&&c.status!=="initial"}};import*as M from"expo-linking";import{useCallback as Pt,useEffect as Ut}from"react";import{Platform as It}from"react-native";var De=({client:e,user:t,isUserInitialized:a,oAuthState:r,oAuthCallbacks:c,setOAuthState:n,recoveryFlowState:s})=>{let l=M.useURL(),i=Pt(d=>{var u,m;let o=R(d);n({status:"error",error:o}),(m=(u=c.current).onError)==null||m.call(u,o)},[n]);return Ut(()=>{function d(){return y(this,null,function*(){var f,v;if(!l||r.status!=="loading"||s.status!=="initial")return;let{queryParams:o}=M.parse(l),{privy_oauth_state:u,privy_oauth_code:m}=o;if(!m||!u){n({status:"done"});return}try{let w,b;if(t)w=yield e.auth.oauth.linkWithCode(m,u);else{let S=yield e.auth.oauth.loginWithCode(m,u);w=S.user,b=!!S.is_new_user}return(v=(f=c.current).onSuccess)==null||v.call(f,w,b),n({status:"done"}),yield M.openURL(l.split("?")[0])}catch(w){i(w)}})}It.OS==="android"&&a&&d()},[l,a])};import*as T from"expo-linking";import{useCallback as Ft,useEffect as Lt,useMemo as Mt}from"react";import{Platform as Tt}from"react-native";import{getUserEmbeddedWallet as Dt}from"@privy-io/js-sdk-core";var je=({client:e,user:t,createWalletCallbacks:a,recoverWalletCallbacks:r,setWalletRecoveryCallbacks:c,recoveryFlowState:n,oAuthState:s,setRecoveryFlowState:l,setWallet:i,appStateVisible:d,webViewLoaded:o})=>{let u=T.useURL(),m=Mt(()=>Dt(t),[t]),f=Ft(v=>{var b,S,p,h;let w=R(v);n.status==="creating-wallet"?(S=(b=a.current).onError)==null||S.call(b,R(w)):(h=(p=r.current).onError)==null||h.call(p,R(w)),l({status:"initial"})},[n]);return Lt(()=>{function v(){return y(this,null,function*(){if(!u&&n.status!=="initial"&&d&&f(new Error("Recovery OAuth session failed")),!u||n.status==="initial"||s.status!=="initial"||!d||!o)return;let{queryParams:w}=T.parse(u),{privy_oauth_state:b,privy_oauth_code:S}=w;if(!(!S||!b)){yield T.openURL(u.split("?")[0]);try{let p=yield ue({oAuthCode:S,oAuthState:b,client:e});if(n.status==="creating-wallet")yield Q({client:e,setWallet:i,createWalletCallbacks:a,recoveryMethod:"google-drive",setRecoveryFlowState:l,recoveryToken:p});else if(n.status==="upgrading-recovery"){if(!m)throw new Error("Embedded wallet not found");yield re({client:e,recoveryInput:{recoveryMethod:"google-drive",wallet:m,recoveryAccessToken:p},setWalletRecoveryCallbacks:c,setRecoveryFlowState:l,setWallet:i})}else yield Z({client:e,account:m,setWallet:i,recoverWalletCallbacks:r,recoveryMethod:"google-drive",setRecoveryFlowState:l,recoveryToken:p})}catch(p){f(p)}}})}Tt.OS==="android"&&v()},[u,n.status,d,o])};import{useEffect as jt}from"react";var Ne=({client:e,isUserInitialized:t,setIsUserInitialized:a})=>{jt(()=>{t||(()=>y(void 0,null,function*(){try{yield e.user.get()}catch(c){}finally{a(!0)}}))()},[t])};var me=zt({}),ae;function Do(){return ae?ae.getAccessToken():Promise.resolve(null)}var jo=e=>{var we;let[t,a]=_(Ve.currentState==="active");Ht(()=>{let F=Ve.addEventListener("change",et=>{a(et==="active")});return()=>{F.remove()}},[]);let[r,c]=_(!1),[n,s]=_("loading"),[l,i]=_(!1),[d,o]=_(null),[u,m]=_({status:"disconnected",account:null}),[f,v]=_({status:"disconnected"}),[w,b]=_({status:"initial"}),[S,p]=_({status:"initial"}),[h,W]=_({status:"initial"}),[E,O]=_({status:"initial"}),[P,U]=_({status:"initial"}),[V,z]=_({status:"initial"}),[H,J]=_({status:"initial"}),be=D({}),ne=D({}),ie=D({}),de=D({}),ve=D({}),Se=D({}),$=oe(F=>{if(F)return Pe(o)(F);o(null),b({status:"initial"}),p({status:"initial"}),m({status:"disconnected",account:null})},[]),g=Vt(()=>{let F=e.storage||Ke;return ae=new Kt({storage:qe(F),appId:e.appId,clientId:e.clientId,supportedChains:e.supportedChains,nativeAppIdentifier:He(),baseUrl:e.baseUrl,sdkVersion:`expo:${Ee.version}`,callbacks:{setUser:$,setIsReady:i},logLevel:e.logLevel,crypto:{digest:Nt}}),ae},[e.storage,e.appId,e.clientId,e.baseUrl,e.supportedChains,e.logLevel,$]),Ye=oe(()=>($(null),g.auth.logout()),[$,g]),Xe=oe(()=>g.getAccessToken(),[g]),Je=oe(()=>g.getIdentityToken(),[g]);Ne({client:g,isUserInitialized:r,setIsUserInitialized:c});let $e=Le({client:g,user:d,appId:e.appId,webViewState:n,createWalletCallbacks:ne,recoverWalletCallbacks:ie,setWalletRecoveryCallbacks:de,setRecoveryFlowState:W,wallet:u,setWallet:m}),Qe=Re({client:g,user:d,webViewState:n,createSolanaWalletCallbacks:ve,recoverSolanaWalletCallbacks:Se,setSolanaRecoveryFlowState:O,solanaWallet:f,setSolanaWallet:v});De({client:g,isUserInitialized:r,user:d,oAuthState:S,setOAuthState:p,oAuthCallbacks:be,recoveryFlowState:h}),je({client:g,user:d,webViewLoaded:n==="loaded",createWalletCallbacks:ne,recoverWalletCallbacks:ie,setWalletRecoveryCallbacks:de,recoveryFlowState:h,oAuthState:S,setRecoveryFlowState:W,setWallet:m,appStateVisible:t});let{customAuthStateIsSettled:Ze}=Te({client:g,user:d,isReady:r,customAuth:(we=e.config)==null?void 0:we.customAuth});return Y.createElement(Y.Fragment,null,Y.createElement(me.Provider,{value:{client:g,user:d,isReady:n!=="loading"&&r&&ze(S)&&Ze,logout:Ye,getAccessToken:Xe,getIdentityToken:Je,wallet:k(k({},u),$e),solanaWallet:k(k({},f),Qe),oAuthState:S,oAuthCallbacks:be,recoveryFlowState:h,setRecoveryFlowState:W,solanaRecoveryFlowState:E,setSolanaRecoveryFlowState:O,createWalletCallbacks:ne,recoverWalletCallbacks:ie,setWalletRecoveryCallbacks:de,createSolanaWalletCallbacks:ve,recoverSolanaWalletCallbacks:Se,setOAuthState:p,siweState:P,setSiweState:U,otpState:w,setOtpState:b,passkeyState:V,setPasskeyState:z,farcasterState:H,setFarcasterState:J}},e.children),Y.createElement(qt,{style:{width:0,height:0,overflow:"hidden"}},Y.createElement(_e,{logLevel:e.logLevel,client:g,isClientReady:l,setWebViewState:s,webViewState:n})))};var ze=e=>e.status!=="loading",ye=(e={})=>{let{user:t,oAuthState:a,setOAuthState:r,oAuthCallbacks:c,client:n}=Gt(me),s=e.action?e.action==="login":!t;Yt(()=>{c.current={onSuccess:e.onSuccess,onError:e.onError}},[e.onSuccess,e.onError]);let l=Be(d=>{var u;let o=R(d);return r({status:"error",error:o}),(u=e==null?void 0:e.onError)==null||u.call(e,o),o},[e==null?void 0:e.onError]);return{start:Be(function(f){return y(this,arguments,function*({provider:o,redirectUri:u,isLegacyAppleIosBehaviorEnabled:m=!1}){var v,w,b;r({status:"loading"});try{if(t&&e.action==="login")throw new j({code:"attempted_login_with_oauth_while_already_logged_in",error:"Already logged in, if trying to link an OAuth account use `useLinkWithOAuth`"});if(!t&&e.action==="link")throw new j({code:"attempted_link_oauth_before_logged_in",error:"Must be logged in to link an OAuth account, use `useLoginWithOAuth`"});let{url:S}=yield n.auth.oauth.generateURL(o,N.createURL(u||"/")),p,h;if(pe.OS==="ios"&&o==="apple"&&!m){let z=(v=new URL(S).searchParams.get("state"))!=null?v:"",H=yield Ge.signInAsync({state:z});if(!H.authorizationCode)throw new j({error:"OAuth invalid credentials",code:s?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(s){let J=yield n.auth.oauth.loginWithCode(H.authorizationCode,z,o,"raw");p=J.user,h=J.is_new_user}else p=yield n.auth.oauth.linkWithCode(H.authorizationCode,z,o,"raw");return(w=e==null?void 0:e.onSuccess)==null||w.call(e,p,h),r({status:"done"}),p!=null?p:void 0}let W=pe.OS==="android"?S.replace("x.com","twitter.com"):S,E=yield X.openAuthSessionAsync(W);if(pe.OS==="android")return;if(E.type!=="success")throw[X.WebBrowserResultType.CANCEL,X.WebBrowserResultType.DISMISS].includes(E.type)?new j({error:"OAuth was cancelled",code:s?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):new j({error:"OAuth session failed",code:s?"failed_to_complete_login_with_oauth":"failed_to_complete_link_with_oauth"});let{queryParams:O}=N.parse(E.url),{privy_oauth_state:P,privy_oauth_code:U}=O;if(!U||!P)throw new j({error:"OAuth invalid credentials",code:s?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(s){let V=yield n.auth.oauth.loginWithCode(U,P,o);p=V.user,h=V.is_new_user}else p=yield n.auth.oauth.linkWithCode(U,P,o);return(b=e==null?void 0:e.onSuccess)==null||b.call(e,p,h),yield N.openURL(E.url.split("?")[0]),r({status:"done"}),p!=null?p:void 0}catch(S){l(S)}})},[t,n,r,l]),state:a}};function Yo(e){let{state:t,start:a}=ye(L(k({},e),{action:"login"}));return{state:t,login:a}}function Xo(e){let{state:t,start:a}=ye(L(k({},e),{action:"link"}));return{state:t,link:a}}function Jo(e){return ye(e)}var He=()=>Bt;function qe(e){return{get(t){return e.get(t.replaceAll(":","-"))},put(t,a){return e.put(t.replaceAll(":","-"),a)},del(t){return e.del(t.replaceAll(":","-"))},getKeys:()=>y(this,null,function*(){return[]})}}var Ke={get(e){return A.getItemAsync(e,{keychainAccessible:A.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},put(e,t){return A.setItemAsync(e,t,{keychainAccessible:A.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},del(e){return A.deleteItemAsync(e,{keychainAccessible:A.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},getKeys:()=>y(void 0,null,function*(){return[]})};function Zo(e){return e.status==="connected"}function ea(e){return e.status==="reconnecting"}function ta(e){return e.status==="connecting"}function ra(e){return e.status==="disconnected"}function oa(e){return e.status==="not-created"}function aa(e){return e.status==="creating"}function na(e){return e.status==="error"}function ia(e){return e.status==="needs-recovery"}export{k as a,L as b,y as c,R as d,Wr as e,Or as f,Yo as g,Xo as h,Jo as i,Ke as j,me as k,Do as l,jo as m,Zo as n,ea as o,ta as p,ra as q,oa as r,aa as s,na as t,ia as u};
|
package/dist/esm/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as O,c as S,d as f,e as W,f as R,g as Y,h as Z,i as $,j as p,k as h,l as ve,m as xe,n as Oe,o as Re,p as Pe,q as Fe,r as Me,s as He,t as Ae,u as Te}from"./chunk-2WAAQPGG.js";export*from"@privy-io/js-sdk-core";import{useCallback as M,useContext as ee}from"react";import{PrivyClientError as re}from"@privy-io/js-sdk-core";var Ne=e=>{let{user:s,client:u,setSiweState:a,siweState:l}=ee(h),d=M(m=>{var i;let g=f(m);return a({status:"error",error:g}),(i=e==null?void 0:e.onError)==null||i.call(e,g),g},[e==null?void 0:e.onError]),t=M(c=>S(void 0,[c],function*({wallet:m,from:{domain:g,uri:i}}){var r;try{a({status:"generating-message"});let n=yield u.auth.siwe.init(m,g,i);return a({status:"awaiting-signature"}),(r=e==null?void 0:e.onGenerateMessage)==null||r.call(e,n.message),n.message}catch(n){throw d(n)}}),[u,d,e==null?void 0:e.onGenerateMessage]),o=M(i=>S(void 0,[i],function*({signature:m,messageOverride:g}){var c;try{if(!s)throw new re({code:"attempted_link_siwe_before_logged_in",error:"Must be logged in to link a wallet, Use `useLoginWithSiwe` to login with a wallet"});a({status:"submitting-signature"});let r=yield u.auth.siwe.linkWithSiwe(m,void 0,g);return a({status:"done"}),(c=e==null?void 0:e.onSuccess)==null||c.call(e,r),r}catch(r){d(r)}}),[s,u,d,e==null?void 0:e.onSuccess]);return{generateSiweMessage:t,linkWithSiwe:o,state:l}};import{useCallback as H,useContext as te}from"react";import{PrivyClientError as ne}from"@privy-io/js-sdk-core";var Ke=e=>{let{user:s,client:u,setSiweState:a,siweState:l}=te(h),d=H(m=>{var i;let g=f(m);return a({status:"error",error:g}),(i=e==null?void 0:e.onError)==null||i.call(e,g),g},[e==null?void 0:e.onError]),t=H(c=>S(void 0,[c],function*({wallet:m,from:{domain:g,uri:i}}){var r;try{a({status:"generating-message"});let n=yield u.auth.siwe.init(m,g,i);return a({status:"awaiting-signature"}),(r=e==null?void 0:e.onGenerateMessage)==null||r.call(e,n.message),n.message}catch(n){throw d(n)}}),[u,d,e==null?void 0:e.onGenerateMessage]);return{loginWithSiwe:H(i=>S(void 0,[i],function*({signature:m,messageOverride:g}){var c;try{if(s)throw new ne({code:"attempted_login_with_siwe_while_already_logged_in",error:"Already logged in, use `useLinkWithSiwe` if you are trying to link a wallet to an existing account"});a({status:"submitting-signature"});let r=yield u.auth.siwe.loginWithSiwe(m,void 0,g);return a({status:"done"}),(c=e==null?void 0:e.onSuccess)==null||c.call(e,r.user,r.is_new_user),r.user}catch(r){d(r)}}),[s,u,d,e==null?void 0:e.onSuccess]),generateSiweMessage:t,state:l}};import{useCallback as A,useContext as ie,useState as oe}from"react";import{PrivyClientError as q}from"@privy-io/js-sdk-core";var er=e=>{let[s,u]=oe(""),{user:a,client:l,otpState:d,setOtpState:t}=ie(h),o=A(i=>{var r;let c=f(i);return t({status:"error",error:c}),(r=e==null?void 0:e.onError)==null||r.call(e,c),c},[e==null?void 0:e.onError]),m=A(c=>S(void 0,[c],function*({email:i}){var r;u(i);try{t({status:"sending-code"});let n=yield l.auth.email.sendCode(i);return t({status:"awaiting-code-input"}),(r=e==null?void 0:e.onSendCodeSuccess)==null||r.call(e,{email:i}),n}catch(n){return o(n),{success:!1}}}),[l,o,e==null?void 0:e.onSendCodeSuccess]),g=A(r=>S(void 0,[r],function*({code:i,email:c}){var n;try{if(!a)throw new q({code:"attempted_link_email_before_logged_in",error:"Must be logged in to link an email, Use `useLoginWithEmail` to login with email"});let k=c||s;if(!k)throw new q({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid email before calling `linkWithCode`"});t({status:"submitting-code"});let w=yield l.auth.email.linkWithCode(k,i);return t({status:"done"}),(n=e==null?void 0:e.onLinkSuccess)==null||n.call(e,w),w}catch(k){o(k)}}),[a,l,s,o,e==null?void 0:e.onLinkSuccess]);return{sendCode:m,linkWithCode:g,state:d}};import{useCallback as T,useContext as ae,useState as ce}from"react";import{PrivyClientError as B}from"@privy-io/js-sdk-core";var cr=e=>{let[s,u]=ce(""),{user:a,client:l,otpState:d,setOtpState:t}=ae(h),o=T(i=>{var r;let c=f(i);return t({status:"error",error:c}),(r=e==null?void 0:e.onError)==null||r.call(e,c),c},[e==null?void 0:e.onError]),m=T(c=>S(void 0,[c],function*({email:i}){var r;u(i);try{t({status:"sending-code"});let n=yield l.auth.email.sendCode(i);return t({status:"awaiting-code-input"}),(r=e==null?void 0:e.onSendCodeSuccess)==null||r.call(e,{email:i}),n}catch(n){return o(n),{success:!1}}}),[l,o,e==null?void 0:e.onSendCodeSuccess]),g=T(r=>S(void 0,[r],function*({code:i,email:c}){var n;try{if(a)throw new B({code:"attempted_login_with_email_while_already_logged_in",error:"Already logged in, use `useLinkWithEmail` if you are trying to link an email to an existing account"});let k=c||s;if(!k)throw new B({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid email before calling `loginWithCode`"});t({status:"submitting-code"});let w=yield l.auth.email.loginWithCode(k,i);return t({status:"done"}),(n=e==null?void 0:e.onLoginSuccess)==null||n.call(e,w.user,w.is_new_user),w==null?void 0:w.user}catch(k){o(k)}}),[a,l,s,o,e==null?void 0:e.onLoginSuccess]);return{sendCode:m,loginWithCode:g,state:d}};import{useCallback as U,useContext as le,useState as se}from"react";import{PrivyClientError as J}from"@privy-io/js-sdk-core";var hr=e=>{let[s,u]=se(""),{user:a,client:l,otpState:d,setOtpState:t}=le(h),o=U(i=>{var r;let c=f(i);return t({status:"error",error:c}),(r=e==null?void 0:e.onError)==null||r.call(e,c),c},[e==null?void 0:e.onError]),m=U(c=>S(void 0,[c],function*({phone:i}){var r;u(i);try{t({status:"sending-code"});let n=yield l.auth.phone.sendCode(i);return t({status:"awaiting-code-input"}),(r=e==null?void 0:e.onSendCodeSuccess)==null||r.call(e,{phone:i}),n}catch(n){return o(n),{success:!1}}}),[l,o,e==null?void 0:e.onSendCodeSuccess]),g=U(r=>S(void 0,[r],function*({code:i,phone:c}){var n;try{if(!a)throw new J({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(!(c||s))throw new J({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid phone number before calling `linkWithCode`"});t({status:"submitting-code"});let w=yield l.auth.phone.linkWithCode(c||s,i);return t({status:"done"}),(n=e==null?void 0:e.onLinkSuccess)==null||n.call(e,w),w}catch(k){o(k)}}),[a,l,s,o,e==null?void 0:e.onLinkSuccess]);return{sendCode:m,linkWithCode:g,state:d}};import{useCallback as I,useContext as ue,useState as de}from"react";import{PrivyClientError as K}from"@privy-io/js-sdk-core";var Er=e=>{let[s,u]=de(""),{user:a,client:l,otpState:d,setOtpState:t}=ue(h),o=I(i=>{var r;let c=f(i);return t({status:"error",error:c}),(r=e==null?void 0:e.onError)==null||r.call(e,c),c},[e==null?void 0:e.onError]),m=I(c=>S(void 0,[c],function*({phone:i}){var r;u(i);try{t({status:"sending-code"});let n=yield l.auth.phone.sendCode(i);return t({status:"awaiting-code-input"}),(r=e==null?void 0:e.onSendCodeSuccess)==null||r.call(e,{phone:i}),n}catch(n){return o(n),{success:!1}}}),[l,o,e==null?void 0:e.onSendCodeSuccess]),g=I(r=>S(void 0,[r],function*({code:i,phone:c}){var n;try{if(a)throw new K({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(!(c||s))throw new K({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid phone number before calling `loginWithCode`"});t({status:"submitting-code"});let w=yield l.auth.phone.loginWithCode(c||s,i);return t({status:"done"}),(n=e==null?void 0:e.onLoginSuccess)==null||n.call(e,w.user,w.is_new_user),w==null?void 0:w.user}catch(k){o(k)}}),[a,l,s,o,e==null?void 0:e.onLoginSuccess]);return{sendCode:m,loginWithCode:g,state:d}};import*as P from"expo-linking";import{useCallback as G,useContext as me,useRef as ge}from"react";import{PrivyClientError as v}from"@privy-io/js-sdk-core";var Or=e=>{let{appState:s,getCurrentAppState:u}=R(),{client:a,user:l,farcasterState:d,setFarcasterState:t}=me(h),o=ge(!1),m=G(c=>{var n;let r=f(c);return t({status:"error",error:r}),(n=e==null?void 0:e.onError)==null||n.call(e,r),r},[e==null?void 0:e.onError,t]),g=G(()=>{o.current=!0},[]);return{linkWithFarcaster:G((k,...w)=>S(void 0,[k,...w],function*({relyingParty:c,redirectUrl:r},n={pollAttempts:10,pollIntervalMs:1e3}){var C;try{if(o.current=!1,!l)throw new v({code:"attempted_link_farcaster_before_logged_in",error:"Must be logged in to link a Farcaster account."});t({status:"generating-uri"});let{connect_uri:y,channel_token:_}=yield a.auth.farcaster.initializeAuth({relyingParty:c,redirectUrl:P.createURL(r!=null?r:"/")});if(!y)throw new v({code:"failed_to_generate_farcaster_uri",error:"Failed to generate farcaster uri"});if(!_)throw new v({code:"failed_to_generate_farcaster_channel_token",error:"Failed to generate farcaster channel token"});yield P.openURL(y),t({status:"polling-status"});let L=0;for(;L<n.pollAttempts;){if(o.current)throw new v({code:"farcaster_polling_canceled",error:"Farcaster polling canceled"});if(s.current!=="active"&&u()!=="active"){yield W(n.pollIntervalMs);continue}let b=yield a.auth.farcaster.getFarcasterStatus({channel_token:_});if(b.state==="completed"){t({status:"submitting-token"});let E=yield a.auth.farcaster.link(O({channel_token:_},b));return t({status:"done"}),(C=e==null?void 0:e.onSuccess)==null||C.call(e,E),E}L++,yield W(n.pollIntervalMs)}throw new v({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(y){throw m(y)}}),[a,e==null?void 0:e.onSuccess,m,t,l]),state:d,cancel:g}};import{useCallback as Q,useContext as he}from"react";var Ar=e=>{let{client:s}=he(h),u=Q(l=>{var t;let d=f(l);return(t=e==null?void 0:e.onError)==null||t.call(e,d),d},[e==null?void 0:e.onError]);return{unlinkFarcaster:Q(d=>S(void 0,[d],function*({fid:l}){var t;try{let o=yield s.auth.farcaster.unlink({fid:l});return(t=e==null?void 0:e.onSuccess)==null||t.call(e,o),o}catch(o){throw u(o)}}),[s,e==null?void 0:e.onSuccess,u])}};import*as F from"expo-linking";import{useCallback as j,useContext as Se,useRef as fe}from"react";import{PrivyClientError as x}from"@privy-io/js-sdk-core";var jr=e=>{let{appState:s,getCurrentAppState:u}=R(),{client:a,user:l,farcasterState:d,setFarcasterState:t}=Se(h),o=fe(!1),m=j(c=>{var n;let r=f(c);return t({status:"error",error:r}),(n=e==null?void 0:e.onError)==null||n.call(e,r),r},[e==null?void 0:e.onError,t]),g=j(()=>{o.current=!0},[]);return{loginWithFarcaster:j((k,...w)=>S(void 0,[k,...w],function*({relyingParty:c,redirectUrl:r},n={pollAttempts:10,pollIntervalMs:1e3}){var C;try{if(o.current=!1,l)throw new x({code:"attempted_login_with_farcaster_while_already_logged_in",error:"Already logged in, use `useLinkWithFarcaster` if you are trying to link farcaster to an existing account"});t({status:"generating-uri"});let{connect_uri:y,channel_token:_}=yield a.auth.farcaster.initializeAuth({relyingParty:c,redirectUrl:F.createURL(r!=null?r:"/")});if(!y)throw new x({code:"failed_to_generate_farcaster_uri",error:"Failed to generate farcaster uri"});if(!_)throw new x({code:"failed_to_generate_farcaster_channel_token",error:"Failed to generate farcaster channel token"});yield F.openURL(y),t({status:"polling-status"});let L=0;for(;L<n.pollAttempts;){if(o.current)throw new x({code:"farcaster_polling_canceled",error:"Farcaster polling canceled"});if(s.current!=="active"&&u()!=="active"){yield W(n.pollIntervalMs);continue}let b=yield a.auth.farcaster.getFarcasterStatus({channel_token:_});if(b.state==="completed"){t({status:"submitting-token"});let E=yield a.auth.farcaster.authenticate(O({channel_token:_},b));return t({status:"done"}),(C=e==null?void 0:e.onSuccess)==null||C.call(e,E.user,E.is_new_user),E.user}L++,yield W(n.pollIntervalMs)}throw new x({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(y){throw m(y)}}),[a,m,e==null?void 0:e.onSuccess,t,l,s]),state:d,cancel:g}};import{useEffect as ke}from"react";import{useContext as we,useEffect as z}from"react";var V=(e={})=>{let{wallet:s,createWalletCallbacks:u,recoverWalletCallbacks:a,setWalletRecoveryCallbacks:l}=we(h),{onCreateWalletSuccess:d,onCreateWalletError:t,onRecoverWalletError:o,onRecoverWalletSuccess:m,onSetWalletRecoverySuccess:g,onSetWalletRecoveryError:i}=e;return z(()=>{u.current={onSuccess:d,onError:t}},[d,t]),z(()=>{a.current={onSuccess:m,onError:o}},[m,o]),z(()=>{l.current={onSuccess:g,onError:i}},[m,o]),s};var Xr=({onStateChange:e})=>{let s=V();return ke(()=>{e(s)},[s])};import{useContext as ye}from"react";var pr=()=>{let{getIdentityToken:e}=ye(h);return{getIdentityToken:e}};import{useContext as _e,useEffect as X}from"react";var Ee=(e={})=>{let{solanaWallet:s,createSolanaWalletCallbacks:u,recoverSolanaWalletCallbacks:a}=_e(h),{onCreateWalletSuccess:l,onCreateWalletError:d,onRecoverWalletError:t,onRecoverWalletSuccess:o}=e;return X(()=>{u.current={onSuccess:l,onError:d}},[l,d]),X(()=>{a.current={onSuccess:o,onError:t}},[o,t]),s};import{useContext as We}from"react";var Ce=()=>{let{client:e}=We(h);return e};import{useContext as Le}from"react";var be=()=>{let{user:e,isReady:s,logout:u,getAccessToken:a}=Le(h);return{user:e,isReady:s,logout:u,getAccessToken:a}};export{h as PrivyContext,xe as PrivyProvider,p as SecureStorageAdapter,ve as getAccessToken,Ae as hasError,Oe as isConnected,Pe as isConnecting,He as isCreating,Fe as isDisconnected,Me as isNotCreated,Re as isReconnecting,Te as needsRecovery,Ee as useEmbeddedSolanaWallet,V as useEmbeddedWallet,Xr as useEmbeddedWalletStateChange,pr as useIdentityToken,er as useLinkEmail,hr as useLinkSMS,Or as useLinkWithFarcaster,Z as useLinkWithOAuth,Ne as useLinkWithSiwe,cr as useLoginWithEmail,jr as useLoginWithFarcaster,Y as useLoginWithOAuth,Er as useLoginWithSMS,Ke as useLoginWithSiwe,$ as useOAuthFlow,be as usePrivy,Ce as usePrivyClient,Ar as useUnlinkFarcaster};
|
|
1
|
+
import{a as O,c as S,d as f,e as W,f as R,g as Y,h as Z,i as $,j as p,k as h,l as ve,m as xe,n as Oe,o as Re,p as Pe,q as Fe,r as Me,s as He,t as Ae,u as Te}from"./chunk-LYEUYMXF.js";export*from"@privy-io/js-sdk-core";import{useCallback as M,useContext as ee}from"react";import{PrivyClientError as re}from"@privy-io/js-sdk-core";var Ne=e=>{let{user:s,client:u,setSiweState:a,siweState:l}=ee(h),d=M(m=>{var i;let g=f(m);return a({status:"error",error:g}),(i=e==null?void 0:e.onError)==null||i.call(e,g),g},[e==null?void 0:e.onError]),t=M(c=>S(void 0,[c],function*({wallet:m,from:{domain:g,uri:i}}){var r;try{a({status:"generating-message"});let n=yield u.auth.siwe.init(m,g,i);return a({status:"awaiting-signature"}),(r=e==null?void 0:e.onGenerateMessage)==null||r.call(e,n.message),n.message}catch(n){throw d(n)}}),[u,d,e==null?void 0:e.onGenerateMessage]),o=M(i=>S(void 0,[i],function*({signature:m,messageOverride:g}){var c;try{if(!s)throw new re({code:"attempted_link_siwe_before_logged_in",error:"Must be logged in to link a wallet, Use `useLoginWithSiwe` to login with a wallet"});a({status:"submitting-signature"});let r=yield u.auth.siwe.linkWithSiwe(m,void 0,g);return a({status:"done"}),(c=e==null?void 0:e.onSuccess)==null||c.call(e,r),r}catch(r){d(r)}}),[s,u,d,e==null?void 0:e.onSuccess]);return{generateSiweMessage:t,linkWithSiwe:o,state:l}};import{useCallback as H,useContext as te}from"react";import{PrivyClientError as ne}from"@privy-io/js-sdk-core";var Ke=e=>{let{user:s,client:u,setSiweState:a,siweState:l}=te(h),d=H(m=>{var i;let g=f(m);return a({status:"error",error:g}),(i=e==null?void 0:e.onError)==null||i.call(e,g),g},[e==null?void 0:e.onError]),t=H(c=>S(void 0,[c],function*({wallet:m,from:{domain:g,uri:i}}){var r;try{a({status:"generating-message"});let n=yield u.auth.siwe.init(m,g,i);return a({status:"awaiting-signature"}),(r=e==null?void 0:e.onGenerateMessage)==null||r.call(e,n.message),n.message}catch(n){throw d(n)}}),[u,d,e==null?void 0:e.onGenerateMessage]);return{loginWithSiwe:H(i=>S(void 0,[i],function*({signature:m,messageOverride:g}){var c;try{if(s)throw new ne({code:"attempted_login_with_siwe_while_already_logged_in",error:"Already logged in, use `useLinkWithSiwe` if you are trying to link a wallet to an existing account"});a({status:"submitting-signature"});let r=yield u.auth.siwe.loginWithSiwe(m,void 0,g);return a({status:"done"}),(c=e==null?void 0:e.onSuccess)==null||c.call(e,r.user,r.is_new_user),r.user}catch(r){d(r)}}),[s,u,d,e==null?void 0:e.onSuccess]),generateSiweMessage:t,state:l}};import{useCallback as A,useContext as ie,useState as oe}from"react";import{PrivyClientError as q}from"@privy-io/js-sdk-core";var er=e=>{let[s,u]=oe(""),{user:a,client:l,otpState:d,setOtpState:t}=ie(h),o=A(i=>{var r;let c=f(i);return t({status:"error",error:c}),(r=e==null?void 0:e.onError)==null||r.call(e,c),c},[e==null?void 0:e.onError]),m=A(c=>S(void 0,[c],function*({email:i}){var r;u(i);try{t({status:"sending-code"});let n=yield l.auth.email.sendCode(i);return t({status:"awaiting-code-input"}),(r=e==null?void 0:e.onSendCodeSuccess)==null||r.call(e,{email:i}),n}catch(n){return o(n),{success:!1}}}),[l,o,e==null?void 0:e.onSendCodeSuccess]),g=A(r=>S(void 0,[r],function*({code:i,email:c}){var n;try{if(!a)throw new q({code:"attempted_link_email_before_logged_in",error:"Must be logged in to link an email, Use `useLoginWithEmail` to login with email"});let k=c||s;if(!k)throw new q({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid email before calling `linkWithCode`"});t({status:"submitting-code"});let w=yield l.auth.email.linkWithCode(k,i);return t({status:"done"}),(n=e==null?void 0:e.onLinkSuccess)==null||n.call(e,w),w}catch(k){o(k)}}),[a,l,s,o,e==null?void 0:e.onLinkSuccess]);return{sendCode:m,linkWithCode:g,state:d}};import{useCallback as T,useContext as ae,useState as ce}from"react";import{PrivyClientError as B}from"@privy-io/js-sdk-core";var cr=e=>{let[s,u]=ce(""),{user:a,client:l,otpState:d,setOtpState:t}=ae(h),o=T(i=>{var r;let c=f(i);return t({status:"error",error:c}),(r=e==null?void 0:e.onError)==null||r.call(e,c),c},[e==null?void 0:e.onError]),m=T(c=>S(void 0,[c],function*({email:i}){var r;u(i);try{t({status:"sending-code"});let n=yield l.auth.email.sendCode(i);return t({status:"awaiting-code-input"}),(r=e==null?void 0:e.onSendCodeSuccess)==null||r.call(e,{email:i}),n}catch(n){return o(n),{success:!1}}}),[l,o,e==null?void 0:e.onSendCodeSuccess]),g=T(r=>S(void 0,[r],function*({code:i,email:c}){var n;try{if(a)throw new B({code:"attempted_login_with_email_while_already_logged_in",error:"Already logged in, use `useLinkWithEmail` if you are trying to link an email to an existing account"});let k=c||s;if(!k)throw new B({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid email before calling `loginWithCode`"});t({status:"submitting-code"});let w=yield l.auth.email.loginWithCode(k,i);return t({status:"done"}),(n=e==null?void 0:e.onLoginSuccess)==null||n.call(e,w.user,w.is_new_user),w==null?void 0:w.user}catch(k){o(k)}}),[a,l,s,o,e==null?void 0:e.onLoginSuccess]);return{sendCode:m,loginWithCode:g,state:d}};import{useCallback as U,useContext as le,useState as se}from"react";import{PrivyClientError as J}from"@privy-io/js-sdk-core";var hr=e=>{let[s,u]=se(""),{user:a,client:l,otpState:d,setOtpState:t}=le(h),o=U(i=>{var r;let c=f(i);return t({status:"error",error:c}),(r=e==null?void 0:e.onError)==null||r.call(e,c),c},[e==null?void 0:e.onError]),m=U(c=>S(void 0,[c],function*({phone:i}){var r;u(i);try{t({status:"sending-code"});let n=yield l.auth.phone.sendCode(i);return t({status:"awaiting-code-input"}),(r=e==null?void 0:e.onSendCodeSuccess)==null||r.call(e,{phone:i}),n}catch(n){return o(n),{success:!1}}}),[l,o,e==null?void 0:e.onSendCodeSuccess]),g=U(r=>S(void 0,[r],function*({code:i,phone:c}){var n;try{if(!a)throw new J({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(!(c||s))throw new J({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid phone number before calling `linkWithCode`"});t({status:"submitting-code"});let w=yield l.auth.phone.linkWithCode(c||s,i);return t({status:"done"}),(n=e==null?void 0:e.onLinkSuccess)==null||n.call(e,w),w}catch(k){o(k)}}),[a,l,s,o,e==null?void 0:e.onLinkSuccess]);return{sendCode:m,linkWithCode:g,state:d}};import{useCallback as I,useContext as ue,useState as de}from"react";import{PrivyClientError as K}from"@privy-io/js-sdk-core";var Er=e=>{let[s,u]=de(""),{user:a,client:l,otpState:d,setOtpState:t}=ue(h),o=I(i=>{var r;let c=f(i);return t({status:"error",error:c}),(r=e==null?void 0:e.onError)==null||r.call(e,c),c},[e==null?void 0:e.onError]),m=I(c=>S(void 0,[c],function*({phone:i}){var r;u(i);try{t({status:"sending-code"});let n=yield l.auth.phone.sendCode(i);return t({status:"awaiting-code-input"}),(r=e==null?void 0:e.onSendCodeSuccess)==null||r.call(e,{phone:i}),n}catch(n){return o(n),{success:!1}}}),[l,o,e==null?void 0:e.onSendCodeSuccess]),g=I(r=>S(void 0,[r],function*({code:i,phone:c}){var n;try{if(a)throw new K({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(!(c||s))throw new K({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid phone number before calling `loginWithCode`"});t({status:"submitting-code"});let w=yield l.auth.phone.loginWithCode(c||s,i);return t({status:"done"}),(n=e==null?void 0:e.onLoginSuccess)==null||n.call(e,w.user,w.is_new_user),w==null?void 0:w.user}catch(k){o(k)}}),[a,l,s,o,e==null?void 0:e.onLoginSuccess]);return{sendCode:m,loginWithCode:g,state:d}};import*as P from"expo-linking";import{useCallback as G,useContext as me,useRef as ge}from"react";import{PrivyClientError as v}from"@privy-io/js-sdk-core";var Or=e=>{let{appState:s,getCurrentAppState:u}=R(),{client:a,user:l,farcasterState:d,setFarcasterState:t}=me(h),o=ge(!1),m=G(c=>{var n;let r=f(c);return t({status:"error",error:r}),(n=e==null?void 0:e.onError)==null||n.call(e,r),r},[e==null?void 0:e.onError,t]),g=G(()=>{o.current=!0},[]);return{linkWithFarcaster:G((k,...w)=>S(void 0,[k,...w],function*({relyingParty:c,redirectUrl:r},n={pollAttempts:10,pollIntervalMs:1e3}){var C;try{if(o.current=!1,!l)throw new v({code:"attempted_link_farcaster_before_logged_in",error:"Must be logged in to link a Farcaster account."});t({status:"generating-uri"});let{connect_uri:y,channel_token:_}=yield a.auth.farcaster.initializeAuth({relyingParty:c,redirectUrl:P.createURL(r!=null?r:"/")});if(!y)throw new v({code:"failed_to_generate_farcaster_uri",error:"Failed to generate farcaster uri"});if(!_)throw new v({code:"failed_to_generate_farcaster_channel_token",error:"Failed to generate farcaster channel token"});yield P.openURL(y),t({status:"polling-status"});let L=0;for(;L<n.pollAttempts;){if(o.current)throw new v({code:"farcaster_polling_canceled",error:"Farcaster polling canceled"});if(s.current!=="active"&&u()!=="active"){yield W(n.pollIntervalMs);continue}let b=yield a.auth.farcaster.getFarcasterStatus({channel_token:_});if(b.state==="completed"){t({status:"submitting-token"});let E=yield a.auth.farcaster.link(O({channel_token:_},b));return t({status:"done"}),(C=e==null?void 0:e.onSuccess)==null||C.call(e,E),E}L++,yield W(n.pollIntervalMs)}throw new v({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(y){throw m(y)}}),[a,e==null?void 0:e.onSuccess,m,t,l]),state:d,cancel:g}};import{useCallback as Q,useContext as he}from"react";var Ar=e=>{let{client:s}=he(h),u=Q(l=>{var t;let d=f(l);return(t=e==null?void 0:e.onError)==null||t.call(e,d),d},[e==null?void 0:e.onError]);return{unlinkFarcaster:Q(d=>S(void 0,[d],function*({fid:l}){var t;try{let o=yield s.auth.farcaster.unlink({fid:l});return(t=e==null?void 0:e.onSuccess)==null||t.call(e,o),o}catch(o){throw u(o)}}),[s,e==null?void 0:e.onSuccess,u])}};import*as F from"expo-linking";import{useCallback as j,useContext as Se,useRef as fe}from"react";import{PrivyClientError as x}from"@privy-io/js-sdk-core";var jr=e=>{let{appState:s,getCurrentAppState:u}=R(),{client:a,user:l,farcasterState:d,setFarcasterState:t}=Se(h),o=fe(!1),m=j(c=>{var n;let r=f(c);return t({status:"error",error:r}),(n=e==null?void 0:e.onError)==null||n.call(e,r),r},[e==null?void 0:e.onError,t]),g=j(()=>{o.current=!0},[]);return{loginWithFarcaster:j((k,...w)=>S(void 0,[k,...w],function*({relyingParty:c,redirectUrl:r},n={pollAttempts:10,pollIntervalMs:1e3}){var C;try{if(o.current=!1,l)throw new x({code:"attempted_login_with_farcaster_while_already_logged_in",error:"Already logged in, use `useLinkWithFarcaster` if you are trying to link farcaster to an existing account"});t({status:"generating-uri"});let{connect_uri:y,channel_token:_}=yield a.auth.farcaster.initializeAuth({relyingParty:c,redirectUrl:F.createURL(r!=null?r:"/")});if(!y)throw new x({code:"failed_to_generate_farcaster_uri",error:"Failed to generate farcaster uri"});if(!_)throw new x({code:"failed_to_generate_farcaster_channel_token",error:"Failed to generate farcaster channel token"});yield F.openURL(y),t({status:"polling-status"});let L=0;for(;L<n.pollAttempts;){if(o.current)throw new x({code:"farcaster_polling_canceled",error:"Farcaster polling canceled"});if(s.current!=="active"&&u()!=="active"){yield W(n.pollIntervalMs);continue}let b=yield a.auth.farcaster.getFarcasterStatus({channel_token:_});if(b.state==="completed"){t({status:"submitting-token"});let E=yield a.auth.farcaster.authenticate(O({channel_token:_},b));return t({status:"done"}),(C=e==null?void 0:e.onSuccess)==null||C.call(e,E.user,E.is_new_user),E.user}L++,yield W(n.pollIntervalMs)}throw new x({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(y){throw m(y)}}),[a,m,e==null?void 0:e.onSuccess,t,l,s]),state:d,cancel:g}};import{useEffect as ke}from"react";import{useContext as we,useEffect as z}from"react";var V=(e={})=>{let{wallet:s,createWalletCallbacks:u,recoverWalletCallbacks:a,setWalletRecoveryCallbacks:l}=we(h),{onCreateWalletSuccess:d,onCreateWalletError:t,onRecoverWalletError:o,onRecoverWalletSuccess:m,onSetWalletRecoverySuccess:g,onSetWalletRecoveryError:i}=e;return z(()=>{u.current={onSuccess:d,onError:t}},[d,t]),z(()=>{a.current={onSuccess:m,onError:o}},[m,o]),z(()=>{l.current={onSuccess:g,onError:i}},[m,o]),s};var Xr=({onStateChange:e})=>{let s=V();return ke(()=>{e(s)},[s])};import{useContext as ye}from"react";var pr=()=>{let{getIdentityToken:e}=ye(h);return{getIdentityToken:e}};import{useContext as _e,useEffect as X}from"react";var Ee=(e={})=>{let{solanaWallet:s,createSolanaWalletCallbacks:u,recoverSolanaWalletCallbacks:a}=_e(h),{onCreateWalletSuccess:l,onCreateWalletError:d,onRecoverWalletError:t,onRecoverWalletSuccess:o}=e;return X(()=>{u.current={onSuccess:l,onError:d}},[l,d]),X(()=>{a.current={onSuccess:o,onError:t}},[o,t]),s};import{useContext as We}from"react";var Ce=()=>{let{client:e}=We(h);return e};import{useContext as Le}from"react";var be=()=>{let{user:e,isReady:s,logout:u,getAccessToken:a}=Le(h);return{user:e,isReady:s,logout:u,getAccessToken:a}};export{h as PrivyContext,xe as PrivyProvider,p as SecureStorageAdapter,ve as getAccessToken,Ae as hasError,Oe as isConnected,Pe as isConnecting,He as isCreating,Fe as isDisconnected,Me as isNotCreated,Re as isReconnecting,Te as needsRecovery,Ee as useEmbeddedSolanaWallet,V as useEmbeddedWallet,Xr as useEmbeddedWalletStateChange,pr as useIdentityToken,er as useLinkEmail,hr as useLinkSMS,Or as useLinkWithFarcaster,Z as useLinkWithOAuth,Ne as useLinkWithSiwe,cr as useLoginWithEmail,jr as useLoginWithFarcaster,Y as useLoginWithOAuth,Er as useLoginWithSMS,Ke as useLoginWithSiwe,$ as useOAuthFlow,be as usePrivy,Ce as usePrivyClient,Ar as useUnlinkFarcaster};
|
package/dist/esm/passkey.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as m,b as k,c,d as g,k as f,n as M,o as I,p as T,q as U,r as V,s as D,t as Y,u as j}from"./chunk-
|
|
1
|
+
import{a as m,b as k,c,d as g,k as f,n as M,o as I,p as T,q as U,r as V,s as D,t as Y,u as j}from"./chunk-LYEUYMXF.js";import{useCallback as E,useContext as W}from"react";import{PrivyClientError as q}from"@privy-io/js-sdk-core";import{PrivyClientError as J}from"@privy-io/js-sdk-core";var w=e=>c(void 0,null,function*(){var a;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 J({code:"failed_to_create_passkey",error:"Could not create passkey"});return k(m({},r),{type:(a=r.type)!=null?a:"public-key",clientExtensionResults:{}})});import{PrivyClientError as v}from"@privy-io/js-sdk-core";var C=e=>c(void 0,null,function*(){var a;let r=yield(yield import("react-native-passkeys")).get({rpId:e.rpId,challenge:e.challenge,allowCredentials:e.allowCredentials,timeout:12e4});if(!r)throw new v({code:"no_passkey_found_for_challenge",error:"Could not find a matching passkey to login with"});return k(m({},r),{type:(a=r.type)!=null?a:"public-key",clientExtensionResults:{}})});var oe=e=>{let{user:l,client:r,passkeyState:a,setPasskeyState:i}=W(f),d=E(o=>{var n;let u=g(o);return i({status:"error",error:u}),(n=e==null?void 0:e.onError)==null||n.call(e,u),u},[e==null?void 0:e.onError]);return{linkWithPasskey:E(u=>c(void 0,[u],function*({relyingParty:o}){var n,p,h,P,s,_,y,x,b;try{if(!l)throw new q({code:"attempted_link_passkey_before_logged_in",error:"Must be logged in to link a passkey."});i({status:"generating-challenege"});let{options:t}=yield r.auth.passkey.generateRegistrationOptions(o);i({status:"awaiting-passkey"});let N=yield w({rp:t.rp,user:{id:t.user.id,name:t.user.name,displayName:t.user.display_name},challenge:t.challenge,pubKeyCredParams:t.pub_key_cred_params,extensions:{hmacCreateSecret:(n=t.extensions)==null?void 0:n.hmac_create_secret,credProps:(h=(p=t.extensions)==null?void 0:p.cred_props)==null?void 0:h.rk,appid:(P=t.extensions)==null?void 0:P.app_id},attestation:t.attestation,excludeCredentials:t.exclude_credentials,authenticatorSelection:{authenticatorAttachment:(s=t.authenticator_selection)==null?void 0:s.authenticator_attachment,residentKey:(_=t.authenticator_selection)==null?void 0:_.resident_key,userVerification:(y=t.authenticator_selection)==null?void 0:y.user_verification,requireResidentKey:(x=t.authenticator_selection)==null?void 0:x.require_resident_key}});i({status:"submitting-response"});let O=yield r.auth.passkey.linkWithPasskey(N,o);return i({status:"done"}),(b=e==null?void 0:e.onSuccess)==null||b.call(e,O),O}catch(t){throw d(t)}}),[l,r,d,e==null?void 0:e.onSuccess]),state:a}};import{useCallback as K,useContext as H}from"react";import{PrivyClientError as L}from"@privy-io/js-sdk-core";var de=e=>{let{user:l,client:r,passkeyState:a,setPasskeyState:i}=H(f),d=K(o=>{var n;let u=g(o);return i({status:"error",error:u}),(n=e==null?void 0:e.onError)==null||n.call(e,u),u},[e==null?void 0:e.onError]);return{loginWithPasskey:K(u=>c(void 0,[u],function*({relyingParty:o}){var n,p,h,P;try{if(l)throw new L({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"});i({status:"generating-challenege"});let{options:s}=yield r.auth.passkey.generateAuthenticationOptions(o);i({status:"awaiting-passkey"});let _=yield C({challenge:s.challenge,rpId:s.rp_id,extensions:{appid:(n=s.extensions)==null?void 0:n.app_id,credProps:(p=s.extensions)==null?void 0:p.cred_props,hmacCreateSecret:(h=s.extensions)==null?void 0:h.hmac_create_secret},timeout:s.timeout,allowCredentials:s.allow_credentials,userVerification:s.user_verification});i({status:"submitting-response"});let y=yield r.auth.passkey.loginWithPasskey(k(m({},_),{clientExtensionResults:{}}),s.challenge,o);return i({status:"done"}),(P=e==null?void 0:e.onSuccess)==null||P.call(e,y.user,y.is_new_user),y.user}catch(s){throw d(s)}}),[r,d,e==null?void 0:e.onSuccess]),state:a}};export{Y as hasError,M as isConnected,T as isConnecting,D as isCreating,U as isDisconnected,V as isNotCreated,I as isReconnecting,j as needsRecovery,oe as useLinkWithPasskey,de as useLoginWithPasskey};
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _createStarExport(obj) { Object.keys(obj) .filter((key) => key !== "default" && key !== "__esModule") .forEach((key) => { if (exports.hasOwnProperty(key)) { return; } Object.defineProperty(exports, key, {enumerable: true, configurable: true, get: () => obj[key]}); }); }var _chunk2WAAQPGGjs = require('./chunk-2WAAQPGG.js');var _jssdkcore = require('@privy-io/js-sdk-core'); _createStarExport(_jssdkcore);var _react = require('react');var Ne=e=>{let{user:s,client:u,setSiweState:a,siweState:l}=_react.useContext.call(void 0, _chunk2WAAQPGGjs.k),d=_react.useCallback.call(void 0, m=>{var i;let g=_chunk2WAAQPGGjs.d.call(void 0, m);return a({status:"error",error:g}),(i=e==null?void 0:e.onError)==null||i.call(e,g),g},[e==null?void 0:e.onError]),t=_react.useCallback.call(void 0, c=>_chunk2WAAQPGGjs.c.call(void 0, void 0,[c],function*({wallet:m,from:{domain:g,uri:i}}){var r;try{a({status:"generating-message"});let n=yield u.auth.siwe.init(m,g,i);return a({status:"awaiting-signature"}),(r=e==null?void 0:e.onGenerateMessage)==null||r.call(e,n.message),n.message}catch(n){throw d(n)}}),[u,d,e==null?void 0:e.onGenerateMessage]),o=_react.useCallback.call(void 0, i=>_chunk2WAAQPGGjs.c.call(void 0, void 0,[i],function*({signature:m,messageOverride:g}){var c;try{if(!s)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_link_siwe_before_logged_in",error:"Must be logged in to link a wallet, Use `useLoginWithSiwe` to login with a wallet"});a({status:"submitting-signature"});let r=yield u.auth.siwe.linkWithSiwe(m,void 0,g);return a({status:"done"}),(c=e==null?void 0:e.onSuccess)==null||c.call(e,r),r}catch(r){d(r)}}),[s,u,d,e==null?void 0:e.onSuccess]);return{generateSiweMessage:t,linkWithSiwe:o,state:l}};var Ke=e=>{let{user:s,client:u,setSiweState:a,siweState:l}=_react.useContext.call(void 0, _chunk2WAAQPGGjs.k),d=_react.useCallback.call(void 0, m=>{var i;let g=_chunk2WAAQPGGjs.d.call(void 0, m);return a({status:"error",error:g}),(i=e==null?void 0:e.onError)==null||i.call(e,g),g},[e==null?void 0:e.onError]),t=_react.useCallback.call(void 0, c=>_chunk2WAAQPGGjs.c.call(void 0, void 0,[c],function*({wallet:m,from:{domain:g,uri:i}}){var r;try{a({status:"generating-message"});let n=yield u.auth.siwe.init(m,g,i);return a({status:"awaiting-signature"}),(r=e==null?void 0:e.onGenerateMessage)==null||r.call(e,n.message),n.message}catch(n){throw d(n)}}),[u,d,e==null?void 0:e.onGenerateMessage]);return{loginWithSiwe:_react.useCallback.call(void 0, i=>_chunk2WAAQPGGjs.c.call(void 0, void 0,[i],function*({signature:m,messageOverride:g}){var c;try{if(s)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_login_with_siwe_while_already_logged_in",error:"Already logged in, use `useLinkWithSiwe` if you are trying to link a wallet to an existing account"});a({status:"submitting-signature"});let r=yield u.auth.siwe.loginWithSiwe(m,void 0,g);return a({status:"done"}),(c=e==null?void 0:e.onSuccess)==null||c.call(e,r.user,r.is_new_user),r.user}catch(r){d(r)}}),[s,u,d,e==null?void 0:e.onSuccess]),generateSiweMessage:t,state:l}};var er=e=>{let[s,u]=_react.useState.call(void 0, ""),{user:a,client:l,otpState:d,setOtpState:t}=_react.useContext.call(void 0, _chunk2WAAQPGGjs.k),o=_react.useCallback.call(void 0, i=>{var r;let c=_chunk2WAAQPGGjs.d.call(void 0, i);return t({status:"error",error:c}),(r=e==null?void 0:e.onError)==null||r.call(e,c),c},[e==null?void 0:e.onError]),m=_react.useCallback.call(void 0, c=>_chunk2WAAQPGGjs.c.call(void 0, void 0,[c],function*({email:i}){var r;u(i);try{t({status:"sending-code"});let n=yield l.auth.email.sendCode(i);return t({status:"awaiting-code-input"}),(r=e==null?void 0:e.onSendCodeSuccess)==null||r.call(e,{email:i}),n}catch(n){return o(n),{success:!1}}}),[l,o,e==null?void 0:e.onSendCodeSuccess]),g=_react.useCallback.call(void 0, r=>_chunk2WAAQPGGjs.c.call(void 0, void 0,[r],function*({code:i,email:c}){var n;try{if(!a)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_link_email_before_logged_in",error:"Must be logged in to link an email, Use `useLoginWithEmail` to login with email"});let k=c||s;if(!k)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid email before calling `linkWithCode`"});t({status:"submitting-code"});let w=yield l.auth.email.linkWithCode(k,i);return t({status:"done"}),(n=e==null?void 0:e.onLinkSuccess)==null||n.call(e,w),w}catch(k){o(k)}}),[a,l,s,o,e==null?void 0:e.onLinkSuccess]);return{sendCode:m,linkWithCode:g,state:d}};var cr=e=>{let[s,u]=_react.useState.call(void 0, ""),{user:a,client:l,otpState:d,setOtpState:t}=_react.useContext.call(void 0, _chunk2WAAQPGGjs.k),o=_react.useCallback.call(void 0, i=>{var r;let c=_chunk2WAAQPGGjs.d.call(void 0, i);return t({status:"error",error:c}),(r=e==null?void 0:e.onError)==null||r.call(e,c),c},[e==null?void 0:e.onError]),m=_react.useCallback.call(void 0, c=>_chunk2WAAQPGGjs.c.call(void 0, void 0,[c],function*({email:i}){var r;u(i);try{t({status:"sending-code"});let n=yield l.auth.email.sendCode(i);return t({status:"awaiting-code-input"}),(r=e==null?void 0:e.onSendCodeSuccess)==null||r.call(e,{email:i}),n}catch(n){return o(n),{success:!1}}}),[l,o,e==null?void 0:e.onSendCodeSuccess]),g=_react.useCallback.call(void 0, r=>_chunk2WAAQPGGjs.c.call(void 0, void 0,[r],function*({code:i,email:c}){var n;try{if(a)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_login_with_email_while_already_logged_in",error:"Already logged in, use `useLinkWithEmail` if you are trying to link an email to an existing account"});let k=c||s;if(!k)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid email before calling `loginWithCode`"});t({status:"submitting-code"});let w=yield l.auth.email.loginWithCode(k,i);return t({status:"done"}),(n=e==null?void 0:e.onLoginSuccess)==null||n.call(e,w.user,w.is_new_user),w==null?void 0:w.user}catch(k){o(k)}}),[a,l,s,o,e==null?void 0:e.onLoginSuccess]);return{sendCode:m,loginWithCode:g,state:d}};var hr=e=>{let[s,u]=_react.useState.call(void 0, ""),{user:a,client:l,otpState:d,setOtpState:t}=_react.useContext.call(void 0, _chunk2WAAQPGGjs.k),o=_react.useCallback.call(void 0, i=>{var r;let c=_chunk2WAAQPGGjs.d.call(void 0, i);return t({status:"error",error:c}),(r=e==null?void 0:e.onError)==null||r.call(e,c),c},[e==null?void 0:e.onError]),m=_react.useCallback.call(void 0, c=>_chunk2WAAQPGGjs.c.call(void 0, void 0,[c],function*({phone:i}){var r;u(i);try{t({status:"sending-code"});let n=yield l.auth.phone.sendCode(i);return t({status:"awaiting-code-input"}),(r=e==null?void 0:e.onSendCodeSuccess)==null||r.call(e,{phone:i}),n}catch(n){return o(n),{success:!1}}}),[l,o,e==null?void 0:e.onSendCodeSuccess]),g=_react.useCallback.call(void 0, r=>_chunk2WAAQPGGjs.c.call(void 0, void 0,[r],function*({code:i,phone:c}){var n;try{if(!a)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_link_sms_before_logged_in",error:"Must be logged in to link a phone number, Use `useLoginWithSMS` to login with a phone number"});if(!(c||s))throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid phone number before calling `linkWithCode`"});t({status:"submitting-code"});let w=yield l.auth.phone.linkWithCode(c||s,i);return t({status:"done"}),(n=e==null?void 0:e.onLinkSuccess)==null||n.call(e,w),w}catch(k){o(k)}}),[a,l,s,o,e==null?void 0:e.onLinkSuccess]);return{sendCode:m,linkWithCode:g,state:d}};var Er=e=>{let[s,u]=_react.useState.call(void 0, ""),{user:a,client:l,otpState:d,setOtpState:t}=_react.useContext.call(void 0, _chunk2WAAQPGGjs.k),o=_react.useCallback.call(void 0, i=>{var r;let c=_chunk2WAAQPGGjs.d.call(void 0, i);return t({status:"error",error:c}),(r=e==null?void 0:e.onError)==null||r.call(e,c),c},[e==null?void 0:e.onError]),m=_react.useCallback.call(void 0, c=>_chunk2WAAQPGGjs.c.call(void 0, void 0,[c],function*({phone:i}){var r;u(i);try{t({status:"sending-code"});let n=yield l.auth.phone.sendCode(i);return t({status:"awaiting-code-input"}),(r=e==null?void 0:e.onSendCodeSuccess)==null||r.call(e,{phone:i}),n}catch(n){return o(n),{success:!1}}}),[l,o,e==null?void 0:e.onSendCodeSuccess]),g=_react.useCallback.call(void 0, r=>_chunk2WAAQPGGjs.c.call(void 0, void 0,[r],function*({code:i,phone:c}){var n;try{if(a)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_login_with_sms_while_already_logged_in",error:"Already logged in, use `useLinkWithSMS` if you are trying to link a phone number to an existing account"});if(!(c||s))throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid phone number before calling `loginWithCode`"});t({status:"submitting-code"});let w=yield l.auth.phone.loginWithCode(c||s,i);return t({status:"done"}),(n=e==null?void 0:e.onLoginSuccess)==null||n.call(e,w.user,w.is_new_user),w==null?void 0:w.user}catch(k){o(k)}}),[a,l,s,o,e==null?void 0:e.onLoginSuccess]);return{sendCode:m,loginWithCode:g,state:d}};var _expolinking = require('expo-linking'); var P = _interopRequireWildcard(_expolinking); var F = _interopRequireWildcard(_expolinking);var Or=e=>{let{appState:s,getCurrentAppState:u}=_chunk2WAAQPGGjs.f.call(void 0, ),{client:a,user:l,farcasterState:d,setFarcasterState:t}=_react.useContext.call(void 0, _chunk2WAAQPGGjs.k),o=_react.useRef.call(void 0, !1),m=_react.useCallback.call(void 0, c=>{var n;let r=_chunk2WAAQPGGjs.d.call(void 0, c);return t({status:"error",error:r}),(n=e==null?void 0:e.onError)==null||n.call(e,r),r},[e==null?void 0:e.onError,t]),g=_react.useCallback.call(void 0, ()=>{o.current=!0},[]);return{linkWithFarcaster:_react.useCallback.call(void 0, (k,...w)=>_chunk2WAAQPGGjs.c.call(void 0, void 0,[k,...w],function*({relyingParty:c,redirectUrl:r},n={pollAttempts:10,pollIntervalMs:1e3}){var C;try{if(o.current=!1,!l)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_link_farcaster_before_logged_in",error:"Must be logged in to link a Farcaster account."});t({status:"generating-uri"});let{connect_uri:y,channel_token:_}=yield a.auth.farcaster.initializeAuth({relyingParty:c,redirectUrl:P.createURL(r!=null?r:"/")});if(!y)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_generate_farcaster_uri",error:"Failed to generate farcaster uri"});if(!_)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_generate_farcaster_channel_token",error:"Failed to generate farcaster channel token"});yield P.openURL(y),t({status:"polling-status"});let L=0;for(;L<n.pollAttempts;){if(o.current)throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_canceled",error:"Farcaster polling canceled"});if(s.current!=="active"&&u()!=="active"){yield _chunk2WAAQPGGjs.e.call(void 0, n.pollIntervalMs);continue}let b=yield a.auth.farcaster.getFarcasterStatus({channel_token:_});if(b.state==="completed"){t({status:"submitting-token"});let E=yield a.auth.farcaster.link(_chunk2WAAQPGGjs.a.call(void 0, {channel_token:_},b));return t({status:"done"}),(C=e==null?void 0:e.onSuccess)==null||C.call(e,E),E}L++,yield _chunk2WAAQPGGjs.e.call(void 0, n.pollIntervalMs)}throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(y){throw m(y)}}),[a,e==null?void 0:e.onSuccess,m,t,l]),state:d,cancel:g}};var Ar=e=>{let{client:s}=_react.useContext.call(void 0, _chunk2WAAQPGGjs.k),u=_react.useCallback.call(void 0, l=>{var t;let d=_chunk2WAAQPGGjs.d.call(void 0, l);return(t=e==null?void 0:e.onError)==null||t.call(e,d),d},[e==null?void 0:e.onError]);return{unlinkFarcaster:_react.useCallback.call(void 0, d=>_chunk2WAAQPGGjs.c.call(void 0, void 0,[d],function*({fid:l}){var t;try{let o=yield s.auth.farcaster.unlink({fid:l});return(t=e==null?void 0:e.onSuccess)==null||t.call(e,o),o}catch(o){throw u(o)}}),[s,e==null?void 0:e.onSuccess,u])}};var jr=e=>{let{appState:s,getCurrentAppState:u}=_chunk2WAAQPGGjs.f.call(void 0, ),{client:a,user:l,farcasterState:d,setFarcasterState:t}=_react.useContext.call(void 0, _chunk2WAAQPGGjs.k),o=_react.useRef.call(void 0, !1),m=_react.useCallback.call(void 0, c=>{var n;let r=_chunk2WAAQPGGjs.d.call(void 0, c);return t({status:"error",error:r}),(n=e==null?void 0:e.onError)==null||n.call(e,r),r},[e==null?void 0:e.onError,t]),g=_react.useCallback.call(void 0, ()=>{o.current=!0},[]);return{loginWithFarcaster:_react.useCallback.call(void 0, (k,...w)=>_chunk2WAAQPGGjs.c.call(void 0, void 0,[k,...w],function*({relyingParty:c,redirectUrl:r},n={pollAttempts:10,pollIntervalMs:1e3}){var C;try{if(o.current=!1,l)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_login_with_farcaster_while_already_logged_in",error:"Already logged in, use `useLinkWithFarcaster` if you are trying to link farcaster to an existing account"});t({status:"generating-uri"});let{connect_uri:y,channel_token:_}=yield a.auth.farcaster.initializeAuth({relyingParty:c,redirectUrl:F.createURL(r!=null?r:"/")});if(!y)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_generate_farcaster_uri",error:"Failed to generate farcaster uri"});if(!_)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_generate_farcaster_channel_token",error:"Failed to generate farcaster channel token"});yield F.openURL(y),t({status:"polling-status"});let L=0;for(;L<n.pollAttempts;){if(o.current)throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_canceled",error:"Farcaster polling canceled"});if(s.current!=="active"&&u()!=="active"){yield _chunk2WAAQPGGjs.e.call(void 0, n.pollIntervalMs);continue}let b=yield a.auth.farcaster.getFarcasterStatus({channel_token:_});if(b.state==="completed"){t({status:"submitting-token"});let E=yield a.auth.farcaster.authenticate(_chunk2WAAQPGGjs.a.call(void 0, {channel_token:_},b));return t({status:"done"}),(C=e==null?void 0:e.onSuccess)==null||C.call(e,E.user,E.is_new_user),E.user}L++,yield _chunk2WAAQPGGjs.e.call(void 0, n.pollIntervalMs)}throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(y){throw m(y)}}),[a,m,e==null?void 0:e.onSuccess,t,l,s]),state:d,cancel:g}};var V=(e={})=>{let{wallet:s,createWalletCallbacks:u,recoverWalletCallbacks:a,setWalletRecoveryCallbacks:l}=_react.useContext.call(void 0, _chunk2WAAQPGGjs.k),{onCreateWalletSuccess:d,onCreateWalletError:t,onRecoverWalletError:o,onRecoverWalletSuccess:m,onSetWalletRecoverySuccess:g,onSetWalletRecoveryError:i}=e;return _react.useEffect.call(void 0, ()=>{u.current={onSuccess:d,onError:t}},[d,t]),_react.useEffect.call(void 0, ()=>{a.current={onSuccess:m,onError:o}},[m,o]),_react.useEffect.call(void 0, ()=>{l.current={onSuccess:g,onError:i}},[m,o]),s};var Xr=({onStateChange:e})=>{let s=V();return _react.useEffect.call(void 0, ()=>{e(s)},[s])};var pr=()=>{let{getIdentityToken:e}=_react.useContext.call(void 0, _chunk2WAAQPGGjs.k);return{getIdentityToken:e}};var Ee=(e={})=>{let{solanaWallet:s,createSolanaWalletCallbacks:u,recoverSolanaWalletCallbacks:a}=_react.useContext.call(void 0, _chunk2WAAQPGGjs.k),{onCreateWalletSuccess:l,onCreateWalletError:d,onRecoverWalletError:t,onRecoverWalletSuccess:o}=e;return _react.useEffect.call(void 0, ()=>{u.current={onSuccess:l,onError:d}},[l,d]),_react.useEffect.call(void 0, ()=>{a.current={onSuccess:o,onError:t}},[o,t]),s};var Ce=()=>{let{client:e}=_react.useContext.call(void 0, _chunk2WAAQPGGjs.k);return e};var be=()=>{let{user:e,isReady:s,logout:u,getAccessToken:a}=_react.useContext.call(void 0, _chunk2WAAQPGGjs.k);return{user:e,isReady:s,logout:u,getAccessToken:a}};exports.PrivyContext = _chunk2WAAQPGGjs.k; exports.PrivyProvider = _chunk2WAAQPGGjs.m; exports.SecureStorageAdapter = _chunk2WAAQPGGjs.j; exports.getAccessToken = _chunk2WAAQPGGjs.l; exports.hasError = _chunk2WAAQPGGjs.t; exports.isConnected = _chunk2WAAQPGGjs.n; exports.isConnecting = _chunk2WAAQPGGjs.p; exports.isCreating = _chunk2WAAQPGGjs.s; exports.isDisconnected = _chunk2WAAQPGGjs.q; exports.isNotCreated = _chunk2WAAQPGGjs.r; exports.isReconnecting = _chunk2WAAQPGGjs.o; exports.needsRecovery = _chunk2WAAQPGGjs.u; exports.useEmbeddedSolanaWallet = Ee; exports.useEmbeddedWallet = V; exports.useEmbeddedWalletStateChange = Xr; exports.useIdentityToken = pr; exports.useLinkEmail = er; exports.useLinkSMS = hr; exports.useLinkWithFarcaster = Or; exports.useLinkWithOAuth = _chunk2WAAQPGGjs.h; exports.useLinkWithSiwe = Ne; exports.useLoginWithEmail = cr; exports.useLoginWithFarcaster = jr; exports.useLoginWithOAuth = _chunk2WAAQPGGjs.g; exports.useLoginWithSMS = Er; exports.useLoginWithSiwe = Ke; exports.useOAuthFlow = _chunk2WAAQPGGjs.i; exports.usePrivy = be; exports.usePrivyClient = Ce; exports.useUnlinkFarcaster = Ar;
|
|
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 _createStarExport(obj) { Object.keys(obj) .filter((key) => key !== "default" && key !== "__esModule") .forEach((key) => { if (exports.hasOwnProperty(key)) { return; } Object.defineProperty(exports, key, {enumerable: true, configurable: true, get: () => obj[key]}); }); }var _chunkLYEUYMXFjs = require('./chunk-LYEUYMXF.js');var _jssdkcore = require('@privy-io/js-sdk-core'); _createStarExport(_jssdkcore);var _react = require('react');var Ne=e=>{let{user:s,client:u,setSiweState:a,siweState:l}=_react.useContext.call(void 0, _chunkLYEUYMXFjs.k),d=_react.useCallback.call(void 0, m=>{var i;let g=_chunkLYEUYMXFjs.d.call(void 0, m);return a({status:"error",error:g}),(i=e==null?void 0:e.onError)==null||i.call(e,g),g},[e==null?void 0:e.onError]),t=_react.useCallback.call(void 0, c=>_chunkLYEUYMXFjs.c.call(void 0, void 0,[c],function*({wallet:m,from:{domain:g,uri:i}}){var r;try{a({status:"generating-message"});let n=yield u.auth.siwe.init(m,g,i);return a({status:"awaiting-signature"}),(r=e==null?void 0:e.onGenerateMessage)==null||r.call(e,n.message),n.message}catch(n){throw d(n)}}),[u,d,e==null?void 0:e.onGenerateMessage]),o=_react.useCallback.call(void 0, i=>_chunkLYEUYMXFjs.c.call(void 0, void 0,[i],function*({signature:m,messageOverride:g}){var c;try{if(!s)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_link_siwe_before_logged_in",error:"Must be logged in to link a wallet, Use `useLoginWithSiwe` to login with a wallet"});a({status:"submitting-signature"});let r=yield u.auth.siwe.linkWithSiwe(m,void 0,g);return a({status:"done"}),(c=e==null?void 0:e.onSuccess)==null||c.call(e,r),r}catch(r){d(r)}}),[s,u,d,e==null?void 0:e.onSuccess]);return{generateSiweMessage:t,linkWithSiwe:o,state:l}};var Ke=e=>{let{user:s,client:u,setSiweState:a,siweState:l}=_react.useContext.call(void 0, _chunkLYEUYMXFjs.k),d=_react.useCallback.call(void 0, m=>{var i;let g=_chunkLYEUYMXFjs.d.call(void 0, m);return a({status:"error",error:g}),(i=e==null?void 0:e.onError)==null||i.call(e,g),g},[e==null?void 0:e.onError]),t=_react.useCallback.call(void 0, c=>_chunkLYEUYMXFjs.c.call(void 0, void 0,[c],function*({wallet:m,from:{domain:g,uri:i}}){var r;try{a({status:"generating-message"});let n=yield u.auth.siwe.init(m,g,i);return a({status:"awaiting-signature"}),(r=e==null?void 0:e.onGenerateMessage)==null||r.call(e,n.message),n.message}catch(n){throw d(n)}}),[u,d,e==null?void 0:e.onGenerateMessage]);return{loginWithSiwe:_react.useCallback.call(void 0, i=>_chunkLYEUYMXFjs.c.call(void 0, void 0,[i],function*({signature:m,messageOverride:g}){var c;try{if(s)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_login_with_siwe_while_already_logged_in",error:"Already logged in, use `useLinkWithSiwe` if you are trying to link a wallet to an existing account"});a({status:"submitting-signature"});let r=yield u.auth.siwe.loginWithSiwe(m,void 0,g);return a({status:"done"}),(c=e==null?void 0:e.onSuccess)==null||c.call(e,r.user,r.is_new_user),r.user}catch(r){d(r)}}),[s,u,d,e==null?void 0:e.onSuccess]),generateSiweMessage:t,state:l}};var er=e=>{let[s,u]=_react.useState.call(void 0, ""),{user:a,client:l,otpState:d,setOtpState:t}=_react.useContext.call(void 0, _chunkLYEUYMXFjs.k),o=_react.useCallback.call(void 0, i=>{var r;let c=_chunkLYEUYMXFjs.d.call(void 0, i);return t({status:"error",error:c}),(r=e==null?void 0:e.onError)==null||r.call(e,c),c},[e==null?void 0:e.onError]),m=_react.useCallback.call(void 0, c=>_chunkLYEUYMXFjs.c.call(void 0, void 0,[c],function*({email:i}){var r;u(i);try{t({status:"sending-code"});let n=yield l.auth.email.sendCode(i);return t({status:"awaiting-code-input"}),(r=e==null?void 0:e.onSendCodeSuccess)==null||r.call(e,{email:i}),n}catch(n){return o(n),{success:!1}}}),[l,o,e==null?void 0:e.onSendCodeSuccess]),g=_react.useCallback.call(void 0, r=>_chunkLYEUYMXFjs.c.call(void 0, void 0,[r],function*({code:i,email:c}){var n;try{if(!a)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_link_email_before_logged_in",error:"Must be logged in to link an email, Use `useLoginWithEmail` to login with email"});let k=c||s;if(!k)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid email before calling `linkWithCode`"});t({status:"submitting-code"});let w=yield l.auth.email.linkWithCode(k,i);return t({status:"done"}),(n=e==null?void 0:e.onLinkSuccess)==null||n.call(e,w),w}catch(k){o(k)}}),[a,l,s,o,e==null?void 0:e.onLinkSuccess]);return{sendCode:m,linkWithCode:g,state:d}};var cr=e=>{let[s,u]=_react.useState.call(void 0, ""),{user:a,client:l,otpState:d,setOtpState:t}=_react.useContext.call(void 0, _chunkLYEUYMXFjs.k),o=_react.useCallback.call(void 0, i=>{var r;let c=_chunkLYEUYMXFjs.d.call(void 0, i);return t({status:"error",error:c}),(r=e==null?void 0:e.onError)==null||r.call(e,c),c},[e==null?void 0:e.onError]),m=_react.useCallback.call(void 0, c=>_chunkLYEUYMXFjs.c.call(void 0, void 0,[c],function*({email:i}){var r;u(i);try{t({status:"sending-code"});let n=yield l.auth.email.sendCode(i);return t({status:"awaiting-code-input"}),(r=e==null?void 0:e.onSendCodeSuccess)==null||r.call(e,{email:i}),n}catch(n){return o(n),{success:!1}}}),[l,o,e==null?void 0:e.onSendCodeSuccess]),g=_react.useCallback.call(void 0, r=>_chunkLYEUYMXFjs.c.call(void 0, void 0,[r],function*({code:i,email:c}){var n;try{if(a)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_login_with_email_while_already_logged_in",error:"Already logged in, use `useLinkWithEmail` if you are trying to link an email to an existing account"});let k=c||s;if(!k)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid email before calling `loginWithCode`"});t({status:"submitting-code"});let w=yield l.auth.email.loginWithCode(k,i);return t({status:"done"}),(n=e==null?void 0:e.onLoginSuccess)==null||n.call(e,w.user,w.is_new_user),w==null?void 0:w.user}catch(k){o(k)}}),[a,l,s,o,e==null?void 0:e.onLoginSuccess]);return{sendCode:m,loginWithCode:g,state:d}};var hr=e=>{let[s,u]=_react.useState.call(void 0, ""),{user:a,client:l,otpState:d,setOtpState:t}=_react.useContext.call(void 0, _chunkLYEUYMXFjs.k),o=_react.useCallback.call(void 0, i=>{var r;let c=_chunkLYEUYMXFjs.d.call(void 0, i);return t({status:"error",error:c}),(r=e==null?void 0:e.onError)==null||r.call(e,c),c},[e==null?void 0:e.onError]),m=_react.useCallback.call(void 0, c=>_chunkLYEUYMXFjs.c.call(void 0, void 0,[c],function*({phone:i}){var r;u(i);try{t({status:"sending-code"});let n=yield l.auth.phone.sendCode(i);return t({status:"awaiting-code-input"}),(r=e==null?void 0:e.onSendCodeSuccess)==null||r.call(e,{phone:i}),n}catch(n){return o(n),{success:!1}}}),[l,o,e==null?void 0:e.onSendCodeSuccess]),g=_react.useCallback.call(void 0, r=>_chunkLYEUYMXFjs.c.call(void 0, void 0,[r],function*({code:i,phone:c}){var n;try{if(!a)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_link_sms_before_logged_in",error:"Must be logged in to link a phone number, Use `useLoginWithSMS` to login with a phone number"});if(!(c||s))throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid phone number before calling `linkWithCode`"});t({status:"submitting-code"});let w=yield l.auth.phone.linkWithCode(c||s,i);return t({status:"done"}),(n=e==null?void 0:e.onLinkSuccess)==null||n.call(e,w),w}catch(k){o(k)}}),[a,l,s,o,e==null?void 0:e.onLinkSuccess]);return{sendCode:m,linkWithCode:g,state:d}};var Er=e=>{let[s,u]=_react.useState.call(void 0, ""),{user:a,client:l,otpState:d,setOtpState:t}=_react.useContext.call(void 0, _chunkLYEUYMXFjs.k),o=_react.useCallback.call(void 0, i=>{var r;let c=_chunkLYEUYMXFjs.d.call(void 0, i);return t({status:"error",error:c}),(r=e==null?void 0:e.onError)==null||r.call(e,c),c},[e==null?void 0:e.onError]),m=_react.useCallback.call(void 0, c=>_chunkLYEUYMXFjs.c.call(void 0, void 0,[c],function*({phone:i}){var r;u(i);try{t({status:"sending-code"});let n=yield l.auth.phone.sendCode(i);return t({status:"awaiting-code-input"}),(r=e==null?void 0:e.onSendCodeSuccess)==null||r.call(e,{phone:i}),n}catch(n){return o(n),{success:!1}}}),[l,o,e==null?void 0:e.onSendCodeSuccess]),g=_react.useCallback.call(void 0, r=>_chunkLYEUYMXFjs.c.call(void 0, void 0,[r],function*({code:i,phone:c}){var n;try{if(a)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_login_with_sms_while_already_logged_in",error:"Already logged in, use `useLinkWithSMS` if you are trying to link a phone number to an existing account"});if(!(c||s))throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid phone number before calling `loginWithCode`"});t({status:"submitting-code"});let w=yield l.auth.phone.loginWithCode(c||s,i);return t({status:"done"}),(n=e==null?void 0:e.onLoginSuccess)==null||n.call(e,w.user,w.is_new_user),w==null?void 0:w.user}catch(k){o(k)}}),[a,l,s,o,e==null?void 0:e.onLoginSuccess]);return{sendCode:m,loginWithCode:g,state:d}};var _expolinking = require('expo-linking'); var P = _interopRequireWildcard(_expolinking); var F = _interopRequireWildcard(_expolinking);var Or=e=>{let{appState:s,getCurrentAppState:u}=_chunkLYEUYMXFjs.f.call(void 0, ),{client:a,user:l,farcasterState:d,setFarcasterState:t}=_react.useContext.call(void 0, _chunkLYEUYMXFjs.k),o=_react.useRef.call(void 0, !1),m=_react.useCallback.call(void 0, c=>{var n;let r=_chunkLYEUYMXFjs.d.call(void 0, c);return t({status:"error",error:r}),(n=e==null?void 0:e.onError)==null||n.call(e,r),r},[e==null?void 0:e.onError,t]),g=_react.useCallback.call(void 0, ()=>{o.current=!0},[]);return{linkWithFarcaster:_react.useCallback.call(void 0, (k,...w)=>_chunkLYEUYMXFjs.c.call(void 0, void 0,[k,...w],function*({relyingParty:c,redirectUrl:r},n={pollAttempts:10,pollIntervalMs:1e3}){var C;try{if(o.current=!1,!l)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_link_farcaster_before_logged_in",error:"Must be logged in to link a Farcaster account."});t({status:"generating-uri"});let{connect_uri:y,channel_token:_}=yield a.auth.farcaster.initializeAuth({relyingParty:c,redirectUrl:P.createURL(r!=null?r:"/")});if(!y)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_generate_farcaster_uri",error:"Failed to generate farcaster uri"});if(!_)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_generate_farcaster_channel_token",error:"Failed to generate farcaster channel token"});yield P.openURL(y),t({status:"polling-status"});let L=0;for(;L<n.pollAttempts;){if(o.current)throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_canceled",error:"Farcaster polling canceled"});if(s.current!=="active"&&u()!=="active"){yield _chunkLYEUYMXFjs.e.call(void 0, n.pollIntervalMs);continue}let b=yield a.auth.farcaster.getFarcasterStatus({channel_token:_});if(b.state==="completed"){t({status:"submitting-token"});let E=yield a.auth.farcaster.link(_chunkLYEUYMXFjs.a.call(void 0, {channel_token:_},b));return t({status:"done"}),(C=e==null?void 0:e.onSuccess)==null||C.call(e,E),E}L++,yield _chunkLYEUYMXFjs.e.call(void 0, n.pollIntervalMs)}throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(y){throw m(y)}}),[a,e==null?void 0:e.onSuccess,m,t,l]),state:d,cancel:g}};var Ar=e=>{let{client:s}=_react.useContext.call(void 0, _chunkLYEUYMXFjs.k),u=_react.useCallback.call(void 0, l=>{var t;let d=_chunkLYEUYMXFjs.d.call(void 0, l);return(t=e==null?void 0:e.onError)==null||t.call(e,d),d},[e==null?void 0:e.onError]);return{unlinkFarcaster:_react.useCallback.call(void 0, d=>_chunkLYEUYMXFjs.c.call(void 0, void 0,[d],function*({fid:l}){var t;try{let o=yield s.auth.farcaster.unlink({fid:l});return(t=e==null?void 0:e.onSuccess)==null||t.call(e,o),o}catch(o){throw u(o)}}),[s,e==null?void 0:e.onSuccess,u])}};var jr=e=>{let{appState:s,getCurrentAppState:u}=_chunkLYEUYMXFjs.f.call(void 0, ),{client:a,user:l,farcasterState:d,setFarcasterState:t}=_react.useContext.call(void 0, _chunkLYEUYMXFjs.k),o=_react.useRef.call(void 0, !1),m=_react.useCallback.call(void 0, c=>{var n;let r=_chunkLYEUYMXFjs.d.call(void 0, c);return t({status:"error",error:r}),(n=e==null?void 0:e.onError)==null||n.call(e,r),r},[e==null?void 0:e.onError,t]),g=_react.useCallback.call(void 0, ()=>{o.current=!0},[]);return{loginWithFarcaster:_react.useCallback.call(void 0, (k,...w)=>_chunkLYEUYMXFjs.c.call(void 0, void 0,[k,...w],function*({relyingParty:c,redirectUrl:r},n={pollAttempts:10,pollIntervalMs:1e3}){var C;try{if(o.current=!1,l)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_login_with_farcaster_while_already_logged_in",error:"Already logged in, use `useLinkWithFarcaster` if you are trying to link farcaster to an existing account"});t({status:"generating-uri"});let{connect_uri:y,channel_token:_}=yield a.auth.farcaster.initializeAuth({relyingParty:c,redirectUrl:F.createURL(r!=null?r:"/")});if(!y)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_generate_farcaster_uri",error:"Failed to generate farcaster uri"});if(!_)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_generate_farcaster_channel_token",error:"Failed to generate farcaster channel token"});yield F.openURL(y),t({status:"polling-status"});let L=0;for(;L<n.pollAttempts;){if(o.current)throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_canceled",error:"Farcaster polling canceled"});if(s.current!=="active"&&u()!=="active"){yield _chunkLYEUYMXFjs.e.call(void 0, n.pollIntervalMs);continue}let b=yield a.auth.farcaster.getFarcasterStatus({channel_token:_});if(b.state==="completed"){t({status:"submitting-token"});let E=yield a.auth.farcaster.authenticate(_chunkLYEUYMXFjs.a.call(void 0, {channel_token:_},b));return t({status:"done"}),(C=e==null?void 0:e.onSuccess)==null||C.call(e,E.user,E.is_new_user),E.user}L++,yield _chunkLYEUYMXFjs.e.call(void 0, n.pollIntervalMs)}throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(y){throw m(y)}}),[a,m,e==null?void 0:e.onSuccess,t,l,s]),state:d,cancel:g}};var V=(e={})=>{let{wallet:s,createWalletCallbacks:u,recoverWalletCallbacks:a,setWalletRecoveryCallbacks:l}=_react.useContext.call(void 0, _chunkLYEUYMXFjs.k),{onCreateWalletSuccess:d,onCreateWalletError:t,onRecoverWalletError:o,onRecoverWalletSuccess:m,onSetWalletRecoverySuccess:g,onSetWalletRecoveryError:i}=e;return _react.useEffect.call(void 0, ()=>{u.current={onSuccess:d,onError:t}},[d,t]),_react.useEffect.call(void 0, ()=>{a.current={onSuccess:m,onError:o}},[m,o]),_react.useEffect.call(void 0, ()=>{l.current={onSuccess:g,onError:i}},[m,o]),s};var Xr=({onStateChange:e})=>{let s=V();return _react.useEffect.call(void 0, ()=>{e(s)},[s])};var pr=()=>{let{getIdentityToken:e}=_react.useContext.call(void 0, _chunkLYEUYMXFjs.k);return{getIdentityToken:e}};var Ee=(e={})=>{let{solanaWallet:s,createSolanaWalletCallbacks:u,recoverSolanaWalletCallbacks:a}=_react.useContext.call(void 0, _chunkLYEUYMXFjs.k),{onCreateWalletSuccess:l,onCreateWalletError:d,onRecoverWalletError:t,onRecoverWalletSuccess:o}=e;return _react.useEffect.call(void 0, ()=>{u.current={onSuccess:l,onError:d}},[l,d]),_react.useEffect.call(void 0, ()=>{a.current={onSuccess:o,onError:t}},[o,t]),s};var Ce=()=>{let{client:e}=_react.useContext.call(void 0, _chunkLYEUYMXFjs.k);return e};var be=()=>{let{user:e,isReady:s,logout:u,getAccessToken:a}=_react.useContext.call(void 0, _chunkLYEUYMXFjs.k);return{user:e,isReady:s,logout:u,getAccessToken:a}};exports.PrivyContext = _chunkLYEUYMXFjs.k; exports.PrivyProvider = _chunkLYEUYMXFjs.m; exports.SecureStorageAdapter = _chunkLYEUYMXFjs.j; exports.getAccessToken = _chunkLYEUYMXFjs.l; exports.hasError = _chunkLYEUYMXFjs.t; exports.isConnected = _chunkLYEUYMXFjs.n; exports.isConnecting = _chunkLYEUYMXFjs.p; exports.isCreating = _chunkLYEUYMXFjs.s; exports.isDisconnected = _chunkLYEUYMXFjs.q; exports.isNotCreated = _chunkLYEUYMXFjs.r; exports.isReconnecting = _chunkLYEUYMXFjs.o; exports.needsRecovery = _chunkLYEUYMXFjs.u; exports.useEmbeddedSolanaWallet = Ee; exports.useEmbeddedWallet = V; exports.useEmbeddedWalletStateChange = Xr; exports.useIdentityToken = pr; exports.useLinkEmail = er; exports.useLinkSMS = hr; exports.useLinkWithFarcaster = Or; exports.useLinkWithOAuth = _chunkLYEUYMXFjs.h; exports.useLinkWithSiwe = Ne; exports.useLoginWithEmail = cr; exports.useLoginWithFarcaster = jr; exports.useLoginWithOAuth = _chunkLYEUYMXFjs.g; exports.useLoginWithSMS = Er; exports.useLoginWithSiwe = Ke; exports.useOAuthFlow = _chunkLYEUYMXFjs.i; exports.usePrivy = be; exports.usePrivyClient = Ce; exports.useUnlinkFarcaster = Ar;
|
package/dist/passkey.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } }var
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } }var _chunkLYEUYMXFjs = require('./chunk-LYEUYMXF.js');var _react = require('react');var _jssdkcore = require('@privy-io/js-sdk-core');var w=e=>_chunkLYEUYMXFjs.c.call(void 0, void 0,null,function*(){var a;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 _chunkLYEUYMXFjs.b.call(void 0, _chunkLYEUYMXFjs.a.call(void 0, {},r),{type:(a=r.type)!=null?a:"public-key",clientExtensionResults:{}})});var C=e=>_chunkLYEUYMXFjs.c.call(void 0, void 0,null,function*(){var a;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 _chunkLYEUYMXFjs.b.call(void 0, _chunkLYEUYMXFjs.a.call(void 0, {},r),{type:(a=r.type)!=null?a:"public-key",clientExtensionResults:{}})});var oe=e=>{let{user:l,client:r,passkeyState:a,setPasskeyState:i}=_react.useContext.call(void 0, _chunkLYEUYMXFjs.k),d=_react.useCallback.call(void 0, o=>{var n;let u=_chunkLYEUYMXFjs.d.call(void 0, o);return i({status:"error",error:u}),(n=e==null?void 0:e.onError)==null||n.call(e,u),u},[e==null?void 0:e.onError]);return{linkWithPasskey:_react.useCallback.call(void 0, u=>_chunkLYEUYMXFjs.c.call(void 0, void 0,[u],function*({relyingParty:o}){var n,p,h,P,s,_,y,x,b;try{if(!l)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_link_passkey_before_logged_in",error:"Must be logged in to link a passkey."});i({status:"generating-challenege"});let{options:t}=yield r.auth.passkey.generateRegistrationOptions(o);i({status:"awaiting-passkey"});let N=yield w({rp:t.rp,user:{id:t.user.id,name:t.user.name,displayName:t.user.display_name},challenge:t.challenge,pubKeyCredParams:t.pub_key_cred_params,extensions:{hmacCreateSecret:(n=t.extensions)==null?void 0:n.hmac_create_secret,credProps:(h=(p=t.extensions)==null?void 0:p.cred_props)==null?void 0:h.rk,appid:(P=t.extensions)==null?void 0:P.app_id},attestation:t.attestation,excludeCredentials:t.exclude_credentials,authenticatorSelection:{authenticatorAttachment:(s=t.authenticator_selection)==null?void 0:s.authenticator_attachment,residentKey:(_=t.authenticator_selection)==null?void 0:_.resident_key,userVerification:(y=t.authenticator_selection)==null?void 0:y.user_verification,requireResidentKey:(x=t.authenticator_selection)==null?void 0:x.require_resident_key}});i({status:"submitting-response"});let O=yield r.auth.passkey.linkWithPasskey(N,o);return i({status:"done"}),(b=e==null?void 0:e.onSuccess)==null||b.call(e,O),O}catch(t){throw d(t)}}),[l,r,d,e==null?void 0:e.onSuccess]),state:a}};var de=e=>{let{user:l,client:r,passkeyState:a,setPasskeyState:i}=_react.useContext.call(void 0, _chunkLYEUYMXFjs.k),d=_react.useCallback.call(void 0, o=>{var n;let u=_chunkLYEUYMXFjs.d.call(void 0, o);return i({status:"error",error:u}),(n=e==null?void 0:e.onError)==null||n.call(e,u),u},[e==null?void 0:e.onError]);return{loginWithPasskey:_react.useCallback.call(void 0, u=>_chunkLYEUYMXFjs.c.call(void 0, void 0,[u],function*({relyingParty:o}){var n,p,h,P;try{if(l)throw new (0, _jssdkcore.PrivyClientError)({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"});i({status:"generating-challenege"});let{options:s}=yield r.auth.passkey.generateAuthenticationOptions(o);i({status:"awaiting-passkey"});let _=yield C({challenge:s.challenge,rpId:s.rp_id,extensions:{appid:(n=s.extensions)==null?void 0:n.app_id,credProps:(p=s.extensions)==null?void 0:p.cred_props,hmacCreateSecret:(h=s.extensions)==null?void 0:h.hmac_create_secret},timeout:s.timeout,allowCredentials:s.allow_credentials,userVerification:s.user_verification});i({status:"submitting-response"});let y=yield r.auth.passkey.loginWithPasskey(_chunkLYEUYMXFjs.b.call(void 0, _chunkLYEUYMXFjs.a.call(void 0, {},_),{clientExtensionResults:{}}),s.challenge,o);return i({status:"done"}),(P=e==null?void 0:e.onSuccess)==null||P.call(e,y.user,y.is_new_user),y.user}catch(s){throw d(s)}}),[r,d,e==null?void 0:e.onSuccess]),state:a}};exports.hasError = _chunkLYEUYMXFjs.t; exports.isConnected = _chunkLYEUYMXFjs.n; exports.isConnecting = _chunkLYEUYMXFjs.p; exports.isCreating = _chunkLYEUYMXFjs.s; exports.isDisconnected = _chunkLYEUYMXFjs.q; exports.isNotCreated = _chunkLYEUYMXFjs.r; exports.isReconnecting = _chunkLYEUYMXFjs.o; exports.needsRecovery = _chunkLYEUYMXFjs.u; exports.useLinkWithPasskey = oe; exports.useLoginWithPasskey = de;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@privy-io/expo",
|
|
3
|
-
"version": "0.22.
|
|
3
|
+
"version": "0.22.7",
|
|
4
4
|
"description": "Expo client for the Privy Auth API",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"authentication",
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
"expo-web-browser": "*"
|
|
60
60
|
},
|
|
61
61
|
"dependencies": {
|
|
62
|
-
"@privy-io/js-sdk-core": "0.26.
|
|
62
|
+
"@privy-io/js-sdk-core": "0.26.4",
|
|
63
63
|
"react-fast-compare": "^3.2.2"
|
|
64
64
|
},
|
|
65
65
|
"devDependencies": {
|