@privy-io/expo 0.20.4 → 0.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/{EmbeddedWalletState-b833f664.d.ts → EmbeddedWalletState-0274a129.d.ts} +4 -0
- package/dist/{chunk-UWQPCSYG.js → chunk-B3DPI6NT.js} +1 -1
- package/dist/esm/{chunk-UWQPCSYG.js → chunk-B3DPI6NT.js} +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/passkey.js +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/passkey.d.ts +2 -2
- package/dist/passkey.js +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -24,6 +24,6 @@ See Privy's [Expo SDK guide](https://docs.privy.io/guide/guides/expo-sdk) for se
|
|
|
24
24
|
|
|
25
25
|
## Changelog
|
|
26
26
|
|
|
27
|
-
Our [changelog](https://docs.privy.io/reference/expo/changelog) contains the latest information about new releases, including features, fixes, and upcoming changes.
|
|
27
|
+
Our [changelog](https://docs.privy.io/reference/sdk/expo/changelog) contains the latest information about new releases, including features, fixes, and upcoming changes.
|
|
28
28
|
|
|
29
29
|
We use [Semantic Versioning](https://semver.org/) to track breaking changes.
|
|
@@ -188,6 +188,10 @@ type LinkWithFarcasterOptions = {
|
|
|
188
188
|
};
|
|
189
189
|
type FarcasterHookResult<T extends 'login' | 'link'> = {
|
|
190
190
|
state: FarcasterFlowState;
|
|
191
|
+
/**
|
|
192
|
+
* Cancels polling farcaster for a response
|
|
193
|
+
*/
|
|
194
|
+
cancel: () => void;
|
|
191
195
|
} & (T extends 'login' ? {
|
|
192
196
|
loginWithFarcaster: SubmitFarcasterSignature;
|
|
193
197
|
} : {
|
|
@@ -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 Xe=Object.defineProperty,Je=Object.defineProperties;var $e=Object.getOwnPropertyDescriptors;var ue=Object.getOwnPropertySymbols;var Qe=Object.prototype.hasOwnProperty,Ze=Object.prototype.propertyIsEnumerable;var me=(e,t,o)=>t in e?Xe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o,R= exports.a =(e,t)=>{for(var o in t||(t={}))Qe.call(t,o)&&me(e,o,t[o]);if(ue)for(var o of ue(t))Ze.call(t,o)&&me(e,o,t[o]);return e},T= exports.b =(e,t)=>Je(e,$e(t));var p=(e,t,o)=>new Promise((a,u)=>{var n=d=>{try{s(o.next(d))}catch(r){u(r)}},l=d=>{try{s(o.throw(d))}catch(r){u(r)}},s=d=>d.done?a(d.value):Promise.resolve(d.value).then(n,l);s((o=o.apply(e,t)).next())});var _expoapplication = require('expo-application');var _expolinking = require('expo-linking'); var L = _interopRequireWildcard(_expolinking); var G = _interopRequireWildcard(_expolinking); var U = _interopRequireWildcard(_expolinking); var I = _interopRequireWildcard(_expolinking);var _exposecurestore = require('expo-secure-store'); var k = _interopRequireWildcard(_exposecurestore);var _expowebbrowser = require('expo-web-browser'); var q = _interopRequireWildcard(_expowebbrowser); var he = _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 pe={name:"@privy-io/expo",version:"0.20.4",description:"Expo client for the Privy Auth API",keywords:["authentication","authorization","identity","privacy","privy","user data","react-native","expo","web3"],license:"Apache-2.0",source:"./src/index.ts",main:"./dist/index.js",module:"./dist/index.mjs",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:{react:"*","react-native":"*","react-native-passkeys":"^0.2.1","react-native-webview":"*","expo-constants":"*","expo-linking":"*","expo-crypto":"*","expo-secure-store":"*","expo-application":"*","expo-web-browser":"*"},dependencies:{"@privy-io/js-sdk-core":"0.23.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 be=({client:e,isClientReady:t,setWebViewState:o,webViewState:a,logLevel:u})=>{let n=_react.useRef.call(void 0, null);_react.useEffect.call(void 0, ()=>{n.current&&a==="loaded"&&e.setMessagePoster(n.current)},[e,n.current,a==="loaded"]),_react.useEffect.call(void 0, ()=>_reactnative.AppState.addEventListener("change",d=>p(void 0,null,function*(){n.current&&d==="active"&&((yield e.embeddedWallet.ping(150))||(n.current.reload(),o("reloading")))})).remove,[]);let l=_react.useCallback.call(void 0, s=>p(void 0,null,function*(){let{data:d}=s.nativeEvent,r=e.embeddedWallet.getMessageHandler();r==null||r(JSON.parse(d))}),[e]);return t?_react2.default.createElement(_reactnativewebview2.default,{style:{flex:1},ref:n,source:{uri:e.embeddedWallet.getURL()},webviewDebuggingEnabled:u==="DEBUG",onLoad:()=>o("loaded"),onError:console.error,onMessage:l}):null};function K(s){return p(this,arguments,function*({client:e,setWallet:t,createWalletCallbacks:o,recoveryMethod:a,setRecoveryFlowState:u,password:n,recoveryToken:l}){var d,r;switch(a){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(!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(!l)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Recovery token is required for icloud recovery method"});break}t({status:"creating",account:null});try{let{provider:i,user:c}=yield e.embeddedWallet.create(n,a,l),y=_jssdkcore.getUserEmbeddedWallet.call(void 0, c);return(r=(d=o.current)==null?void 0:d.onSuccess)==null||r.call(d,i),t({status:"connected",provider:i,account:y}),u({status:"initial"}),i}catch(i){let c=i instanceof Error?i.message:"Error creating embedded wallet";throw t({status:"error",error:c,account:null}),u({status:"initial"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:c})}})}function ve(u){return p(this,arguments,function*({client:e,setSolanaWallet:t,createSolanaWalletCallbacks:o,setSolanaRecoveryFlowState:a}){var n,l;t({status:"creating"});try{let s=yield e.embeddedWallet.createSolana();return(l=(n=o.current)==null?void 0:n.onSuccess)==null||l.call(n,s),t({status:"connected",publicKey:s._publicKey}),a({status:"initial"}),s}catch(s){let d=s instanceof Error?s.message:"Error creating embedded wallet";throw t({status:"error",error:d}),a({status:"initial"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:d})}})}function B(d){return p(this,arguments,function*({client:e,account:t,setWallet:o,recoverWalletCallbacks:a,recoveryMethod:u,setRecoveryFlowState:n,password:l,recoveryToken:s}){var r,i,c,y;if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});switch(u){case"user-passcode":if(!l)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(!s)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Recovery token is required for icloud recovery method"});break}o({status:"connecting",account:t});try{let f=yield e.embeddedWallet.getProvider(t,l,s);return o({status:"connected",provider:f,account:t}),n({status:"initial"}),(i=(r=a.current)==null?void 0:r.onSuccess)==null||i.call(r,f),f}catch(f){o({status:"needs-recovery",account:t}),n({status:"initial"});let S=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:f instanceof Error?f.message:"Error recovering embedded wallet"});throw(y=(c=a.current)==null?void 0:c.onError)==null||y.call(c,S),S}})}function we(n){return p(this,arguments,function*({client:e,solanaAccount:t,setSolanaWallet:o,recoverSolanaWalletCallbacks:a,setSolanaRecoveryFlowState:u}){var l,s,d,r;if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});o({status:"connecting"});try{let i=yield e.embeddedWallet.getSolanaProvider(t);return o({status:"connected",publicKey:i._publicKey}),u({status:"initial"}),(s=(l=a.current)==null?void 0:l.onSuccess)==null||s.call(l,i),i}catch(i){o({status:"needs-recovery"}),u({status:"initial"});let c=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:i instanceof Error?i.message:"Error recovering embedded wallet"});throw(r=(d=a.current)==null?void 0:d.onError)==null||r.call(d,c),c}})}var Se=({client:e,user:t,solanaWallet:o,setSolanaWallet:a,setSolanaRecoveryFlowState:u,webViewState:n,createSolanaWalletCallbacks:l,recoverSolanaWalletCallbacks:s})=>{let d=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, t),[t]),r=_react.useCallback.call(void 0, ()=>p(void 0,null,function*(){return yield ve({client:e,setSolanaWallet:a,createSolanaWalletCallbacks:l,setSolanaRecoveryFlowState:u})}),[e,l]),i=_react.useCallback.call(void 0, ()=>p(void 0,null,function*(){if(!d)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});return we({client:e,solanaAccount:d,setSolanaWallet:a,recoverSolanaWalletCallbacks:s,setSolanaRecoveryFlowState:u})}),[e,d]),c=_react.useCallback.call(void 0, ()=>p(void 0,null,function*(){if(!d)throw a({status:"not-created"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});a(y=>y.status==="connected"?{status:"reconnecting"}:{status:"connecting"});try{let y=yield e.embeddedWallet.getSolanaProvider(d);return a({status:"connected",publicKey:y._publicKey}),y}catch(y){throw _jssdkcore.errorIndicatesRecoveryIsNeeded.call(void 0, y)?(a({status:"needs-recovery"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):y instanceof Error?(a({status:"error",error:y.message}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:y.message})):(a({status:"error",error:"Error loading embedded wallet"}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,d]);return _react.useEffect.call(void 0, ()=>{if(!t&&o.status!=="disconnected")return a({status:"disconnected"});n==="loaded"&&c().catch(()=>{})},[n,t,d]),_react.useEffect.call(void 0, ()=>{o.status==="error"&&o.error.includes("User must be logged in")&&c()},[o.status]),{create:r,recover:i,getProvider:c}};var _reactfastcompare = require('react-fast-compare'); var _reactfastcompare2 = _interopRequireDefault(_reactfastcompare);var Ee=e=>t=>e(o=>_reactfastcompare2.default.call(void 0, o,t)?o:t);function C(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 mr=e=>new Promise(t=>setTimeout(t,e));function wr(){let e=_react.useRef.call(void 0, _reactnative.AppState.currentState);_react.useEffect.call(void 0, ()=>_reactnative.AppState.addEventListener("change",a=>{e.current=a}).remove,[]);function t(){return _reactnative.AppState.currentState}return{appState:e,getCurrentAppState:t}}function Y(u){return p(this,arguments,function*({provider:e,redirectUri:t,client:o,onError:a}){try{let n;switch(e){case"google-drive":{let{url:r}=yield o.recovery.auth.generateURL(G.createURL(t||"/"));n=r;break}case"icloud":{let{url:r}=yield o.recovery.icloudAuth.init("expo-ios");n=r;break}default:throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid provider",code:"embedded_wallet_recovery_error"})}let l=yield he.openAuthSessionAsync(n);if(_reactnative.Platform.OS==="android")return;if(l.type!=="success")throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth session failed",code:"embedded_wallet_recovery_error"});let{queryParams:s}=G.parse(l.url),d;switch(e){case"google-drive":{let{privy_oauth_state:r,privy_oauth_code:i}=s;if(!i||!r)throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth invalid credentials",code:"embedded_wallet_recovery_error"});d=yield re({oAuthCode:i,oAuthState:r,client:o});break}case"icloud":{let{ckWebAuthToken:r}=s;if(!r)throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery iCloud token not found in query params",code:"embedded_wallet_recovery_error"});d=r;break}default:throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth invalid provider",code:"embedded_wallet_recovery_error"})}return d}catch(n){throw a==null||a(C(n)),n}})}function re(a){return p(this,arguments,function*({oAuthCode:e,oAuthState:t,client:o}){let{access_token:u}=yield o.recovery.auth.authorize(e,t);if(!u)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:"login_with_oauth_returned_with_invalid_credentials"});return u})}function X(u){return p(this,arguments,function*({client:e,recoveryInput:t,setWalletRecoveryCallbacks:o,setRecoveryFlowState:a}){var n,l,s,d;try{let r=yield e.embeddedWallet.setRecovery(t);return(l=(n=o.current)==null?void 0:n.onSuccess)==null||l.call(n,r),a({status:"initial"}),r}catch(r){let i=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_set_recovery_error",error:r instanceof Error?r.message:"Error setting password on embedded wallet"});throw(d=(s=o.current)==null?void 0:s.onError)==null||d.call(s,i),a({status:"initial"}),i}})}function We(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 _e=({client:e,user:t,wallet:o,setWallet:a,setRecoveryFlowState:u,webViewState:n,createWalletCallbacks:l,recoverWalletCallbacks:s,setWalletRecoveryCallbacks:d})=>{let r=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedWallet.call(void 0, t),[t]),i=_react.useCallback.call(void 0, m=>p(void 0,null,function*(){var E;if(r)throw new (0, _jssdkcore.PrivyClientError)({error:"This user already has an embedded wallet",code:"embedded_wallet_already_exists"});let{password:w,recoveryMethod:b}=We(m),v;if(["google-drive","icloud"].includes(b)){if(b==="icloud"&&_reactnative.Platform.OS==="android")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});if(v=yield Y({provider:b,client:e,onError:(E=l.current)==null?void 0:E.onError}),u({status:"creating-wallet"}),!v)return null}return yield K({client:e,setWallet:a,createWalletCallbacks:l,recoveryMethod:b,setRecoveryFlowState:u,password:w,recoveryToken:v})}),[e,r]),c=_react.useCallback.call(void 0, m=>p(void 0,null,function*(){var v,E,g;if(o.status!=="connected")throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"});if(!r)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});_jssdkcore.throwIfInvalidRecoveryUpgradePath.call(void 0, {currentRecoveryMethod:r.recovery_method,upgradeToRecoveryMethod:m.recoveryMethod});let w,b;switch(m.recoveryMethod){case"user-passcode":b=T(R({},m),{wallet:r,password:m.password});break;case"google-drive":case"icloud":if(m.recoveryMethod==="icloud"&&_reactnative.Platform.OS==="android"){let A=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});throw(E=(v=d.current)==null?void 0:v.onError)==null||E.call(v,A),A}if(w=yield Y({provider:m.recoveryMethod,client:e,onError:(g=d.current)==null?void 0:g.onError}),u({status:"upgrading-recovery"}),!w)return null;b={recoveryMethod:m.recoveryMethod,wallet:r,recoveryAccessToken:w};break;default:throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}return X({client:e,recoveryInput:b,setWalletRecoveryCallbacks:d,setRecoveryFlowState:u})}),[e,r,o.status]),y=_react.useCallback.call(void 0, m=>p(void 0,null,function*(){return c({recoveryMethod:"user-passcode",password:m})}),[e,r,o.status]),f=_react.useCallback.call(void 0, m=>p(void 0,null,function*(){var E;if(!r)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{password:w,recoveryMethod:b}=We(m),v;if(["google-drive","icloud"].includes(b)){if(b==="icloud"&&_reactnative.Platform.OS==="android")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});if(v=yield Y({provider:b,client:e,onError:(E=s.current)==null?void 0:E.onError}),u({status:"recovering"}),!v)return null}return B({client:e,account:r,setWallet:a,recoverWalletCallbacks:s,recoveryMethod:b,setRecoveryFlowState:u,password:w,recoveryToken:v})}),[e,r]),S=_react.useCallback.call(void 0, ()=>p(void 0,null,function*(){if(!r)throw a({status:"not-created",account:null}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});a(m=>m.status==="connected"?{status:"reconnecting",account:r}:{status:"connecting",account:r});try{let m=yield e.embeddedWallet.getProvider(r);return a({status:"connected",provider:m,account:r}),m}catch(m){throw _jssdkcore.errorIndicatesRecoveryIsNeeded.call(void 0, m)?(a({status:"needs-recovery",account:r}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):m instanceof Error?(a({status:"error",error:m.message,account:r}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:m.message})):(a({status:"error",error:"Error loading embedded wallet",account:r}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,r]);return _react.useEffect.call(void 0, ()=>{if(!t&&o.status!=="disconnected")return a({status:"disconnected",account:null});n==="loaded"&&S().catch(()=>{})},[n,t,r]),_react.useEffect.call(void 0, ()=>{o.status==="error"&&o.error.includes("User must be logged in")&&S()},[o.status]),{create:i,recover:f,setPassword:y,setRecovery:c,getProvider:S}};var Ce=({client:e,user:t,isReady:o,customAuth:a})=>{let[u,n]=_react.useState.call(void 0, {status:"initial"});return _react.useEffect.call(void 0, ()=>{(()=>p(void 0,null,function*(){if(!(a!=null&&a.enabled)){n({status:"not-enabled"});return}n({status:"loading"});let{getCustomAccessToken:s,isLoading:d}=a;if(!(!o||d))try{let r=yield s();if(!r&&t){yield e.auth.logout(),n({status:"done"});return}if(!r){n({status:"done"});return}if(t){n({status:"done"});return}if(!(yield e.auth.customProvider.syncWithToken(r))){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(r){if(console.log("Error syncing with custom auth provider",r),n({status:"error",error:r}),t)throw yield e.auth.logout(),new (0, _jssdkcore.PrivyClientError)({error:"Third-party auth failed",code:"third_party_auth_error"})}}))()},[e,t,o,a==null?void 0:a.enabled,a==null?void 0:a.getCustomAccessToken,a==null?void 0:a.isLoading]),{customAuthState:u,customAuthStateIsSettled:u.status!=="loading"&&u.status!=="initial"}};var ke=({client:e,user:t,isUserInitialized:o,oAuthState:a,oAuthCallbacks:u,setOAuthState:n,recoveryFlowState:l})=>{let s=U.useURL(),d=_react.useCallback.call(void 0, r=>{var c,y;let i=C(r);n({status:"error",error:i}),(y=(c=u.current).onError)==null||y.call(c,i)},[n]);return _react.useEffect.call(void 0, ()=>{function r(){return p(this,null,function*(){var f,S;if(!s||a.status!=="loading"||l.status!=="initial")return;let{queryParams:i}=U.parse(s),{privy_oauth_state:c,privy_oauth_code:y}=i;if(!y||!c){n({status:"done"});return}try{let m,w;if(t)m=yield e.auth.oauth.linkWithCode(y,c);else{let b=yield e.auth.oauth.loginWithCode(y,c);m=b.user,w=!!b.is_new_user}return(S=(f=u.current).onSuccess)==null||S.call(f,m,w),n({status:"done"}),yield U.openURL(s.split("?")[0])}catch(m){d(m)}})}_reactnative.Platform.OS==="android"&&o&&r()},[s,o])};var Ae=({client:e,user:t,createWalletCallbacks:o,recoverWalletCallbacks:a,setWalletRecoveryCallbacks:u,recoveryFlowState:n,oAuthState:l,setRecoveryFlowState:s,setWallet:d,appStateVisible:r,webViewLoaded:i})=>{let c=I.useURL(),y=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedWallet.call(void 0, t),[t]),f=_react.useCallback.call(void 0, S=>{var w,b,v,E;let m=C(S);n.status==="creating-wallet"?(b=(w=o.current).onError)==null||b.call(w,C(m)):(E=(v=a.current).onError)==null||E.call(v,C(m)),s({status:"initial"})},[n]);return _react.useEffect.call(void 0, ()=>{function S(){return p(this,null,function*(){if(!c&&n.status!=="initial"&&r&&f(new Error("Recovery OAuth session failed")),!c||n.status==="initial"||l.status!=="initial"||!r||!i)return;let{queryParams:m}=I.parse(c),{privy_oauth_state:w,privy_oauth_code:b}=m;if(!(!b||!w)){yield I.openURL(c.split("?")[0]);try{let v=yield re({oAuthCode:b,oAuthState:w,client:e});if(n.status==="creating-wallet")yield K({client:e,setWallet:d,createWalletCallbacks:o,recoveryMethod:"google-drive",setRecoveryFlowState:s,recoveryToken:v});else if(n.status==="upgrading-recovery"){if(!y)throw new Error("Embedded wallet not found");yield X({client:e,recoveryInput:{recoveryMethod:"google-drive",wallet:y,recoveryAccessToken:v},setWalletRecoveryCallbacks:u,setRecoveryFlowState:s})}else yield B({client:e,account:y,setWallet:d,recoverWalletCallbacks:a,recoveryMethod:"google-drive",setRecoveryFlowState:s,recoveryToken:v})}catch(v){f(v)}}})}_reactnative.Platform.OS==="android"&&S()},[c,n.status,r,i])};var Pe=({client:e,isUserInitialized:t,setIsUserInitialized:o})=>{_react.useEffect.call(void 0, ()=>{t||(()=>p(void 0,null,function*(){try{yield e.user.get()}catch(u){}finally{o(!0)}}))()},[t])};var ne=_react.createContext.call(void 0, {}),J;function Co(){return J?J.getAccessToken():Promise.resolve(null)}var ko=e=>{var ce;let[t,o]=_react.useState.call(void 0, _reactnative.AppState.currentState==="active");_react.useEffect.call(void 0, ()=>{let O=_reactnative.AppState.addEventListener("change",Ye=>{o(Ye==="active")});return()=>{O.remove()}},[]);let[a,u]=_react.useState.call(void 0, !1),[n,l]=_react.useState.call(void 0, "loading"),[s,d]=_react.useState.call(void 0, !1),[r,i]=_react.useState.call(void 0, null),[c,y]=_react.useState.call(void 0, {status:"disconnected",account:null}),[f,S]=_react.useState.call(void 0, {status:"disconnected"}),[m,w]=_react.useState.call(void 0, {status:"initial"}),[b,v]=_react.useState.call(void 0, {status:"initial"}),[E,g]=_react.useState.call(void 0, {status:"initial"}),[A,M]=_react.useState.call(void 0, {status:"initial"}),[Te,je]=_react.useState.call(void 0, {status:"initial"}),[De,Ne]=_react.useState.call(void 0, {status:"initial"}),[Ve,He]=_react.useState.call(void 0, {status:"initial"}),se=_react.useRef.call(void 0, {}),$=_react.useRef.call(void 0, {}),Q=_react.useRef.call(void 0, {}),Z=_react.useRef.call(void 0, {}),ie=_react.useRef.call(void 0, {}),le=_react.useRef.call(void 0, {}),z=_react.useCallback.call(void 0, O=>{if(O)return Ee(i)(O);i(null),w({status:"initial"}),v({status:"initial"}),y({status:"disconnected",account:null})},[]),W=_react.useMemo.call(void 0, ()=>{let O=e.storage||Fe;return J=new (0, _jssdkcore2.default)({storage:Ie(O),appId:e.appId,clientId:e.clientId,supportedChains:e.supportedChains,nativeAppIdentifier:Ue(),baseUrl:e.baseUrl,sdkVersion:`expo:${pe.version}`,callbacks:{setUser:z,setIsReady:d},logLevel:e.logLevel,crypto:{digest:_expocrypto.digest}}),J},[e.storage,e.appId,e.clientId,e.baseUrl,e.supportedChains,e.logLevel,z]),qe=_react.useCallback.call(void 0, ()=>(z(null),W.auth.logout()),[z,W]),ze=_react.useCallback.call(void 0, ()=>W.getAccessToken(),[W]);Pe({client:W,isUserInitialized:a,setIsUserInitialized:u});let Ke=_e({client:W,user:r,webViewState:n,createWalletCallbacks:$,recoverWalletCallbacks:Q,setWalletRecoveryCallbacks:Z,setRecoveryFlowState:g,wallet:c,setWallet:y}),Be=Se({client:W,user:r,webViewState:n,createSolanaWalletCallbacks:ie,recoverSolanaWalletCallbacks:le,setSolanaRecoveryFlowState:M,solanaWallet:f,setSolanaWallet:S});ke({client:W,isUserInitialized:a,user:r,oAuthState:b,setOAuthState:v,oAuthCallbacks:se,recoveryFlowState:E}),Ae({client:W,user:r,webViewLoaded:n==="loaded",createWalletCallbacks:$,recoverWalletCallbacks:Q,setWalletRecoveryCallbacks:Z,recoveryFlowState:E,oAuthState:b,setRecoveryFlowState:g,setWallet:y,appStateVisible:t});let{customAuthStateIsSettled:Ge}=Ce({client:W,user:r,isReady:a,customAuth:(ce=e.config)==null?void 0:ce.customAuth});return _react2.default.createElement(_react2.default.Fragment,null,_react2.default.createElement(ne.Provider,{value:{client:W,user:r,isReady:n!=="loading"&&a&&xe(b)&&Ge,logout:qe,getAccessToken:ze,wallet:R(R({},c),Ke),solanaWallet:R(R({},f),Be),oAuthState:b,oAuthCallbacks:se,recoveryFlowState:E,setRecoveryFlowState:g,solanaRecoveryFlowState:A,setSolanaRecoveryFlowState:M,createWalletCallbacks:$,recoverWalletCallbacks:Q,setWalletRecoveryCallbacks:Z,createSolanaWalletCallbacks:ie,recoverSolanaWalletCallbacks:le,setOAuthState:v,siweState:Te,setSiweState:je,otpState:m,setOtpState:w,passkeyState:De,setPasskeyState:Ne,farcasterState:Ve,setFarcasterState:He}},e.children),_react2.default.createElement(_reactnative.View,{style:{width:0,height:0,overflow:"hidden"}},_react2.default.createElement(be,{logLevel:e.logLevel,client:W,isClientReady:s,setWebViewState:l,webViewState:n})))};var xe=e=>e.status!=="loading",de=(e={})=>{let{user:t,oAuthState:o,setOAuthState:a,oAuthCallbacks:u,client:n}=_react.useContext.call(void 0, ne),l=e.action?e.action==="login":!t;_react.useEffect.call(void 0, ()=>{u.current={onSuccess:e.onSuccess,onError:e.onError}},[e.onSuccess,e.onError]);let s=_react.useCallback.call(void 0, r=>{var c;let i=C(r);return a({status:"error",error:i}),(c=e==null?void 0:e.onError)==null||c.call(e,i),i},[e==null?void 0:e.onError]);return{start:_react.useCallback.call(void 0, function(y){return p(this,arguments,function*({provider:i,redirectUri:c}){var f;a({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(i,L.createURL(c||"/")),m=_reactnative.Platform.OS==="android"?S.replace("x.com","twitter.com"):S,w=yield q.openAuthSessionAsync(m);if(_reactnative.Platform.OS==="android")return;if(w.type!=="success")throw[q.WebBrowserResultType.CANCEL,q.WebBrowserResultType.DISMISS].includes(w.type)?new (0, _jssdkcore.PrivyClientError)({error:"OAuth was cancelled",code:l?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):new (0, _jssdkcore.PrivyClientError)({error:"OAuth session failed",code:l?"failed_to_complete_login_with_oauth":"failed_to_complete_link_with_oauth"});let{queryParams:b}=L.parse(w.url),{privy_oauth_state:v,privy_oauth_code:E}=b;if(!E||!v)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:l?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});let g,A;if(l){let M=yield n.auth.oauth.loginWithCode(E,v,i);g=M.user,A=M.is_new_user}else g=yield n.auth.oauth.linkWithCode(E,v,i);return(f=e==null?void 0:e.onSuccess)==null||f.call(e,g,A),yield L.openURL(w.url.split("?")[0]),a({status:"done"}),g!=null?g:void 0}catch(S){s(S)}})},[t,n,a,s]),state:o}};function Mo(e){let{state:t,start:o}=de(T(R({},e),{action:"login"}));return{state:t,login:o}}function To(e){let{state:t,start:o}=de(T(R({},e),{action:"link"}));return{state:t,link:o}}function jo(e){return de(e)}var Ue=()=>_expoapplication.applicationId;function Ie(e){return{get(t){return e.get(t.replaceAll(":","-"))},put(t,o){return e.put(t.replaceAll(":","-"),o)},del(t){return e.del(t.replaceAll(":","-"))},getKeys:()=>p(this,null,function*(){return[]})}}var Fe={get(e){return k.getItemAsync(e,{keychainAccessible:k.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},put(e,t){return k.setItemAsync(e,t,{keychainAccessible:k.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},del(e){return k.deleteItemAsync(e,{keychainAccessible:k.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},getKeys:()=>p(void 0,null,function*(){return[]})};var Vo=e=>e.status==="connected",Ho= exports.o =e=>e.status==="reconnecting",qo= exports.p =e=>e.status==="connecting",zo= exports.q =e=>e.status==="disconnected",Ko= exports.r =e=>e.status==="not-created",Bo= exports.s =e=>e.status==="creating",Go= exports.t =e=>e.status==="error",Yo= exports.u =e=>e.status==="needs-recovery";exports.a = R; exports.b = T; exports.c = p; exports.d = C; exports.e = mr; exports.f = wr; exports.g = Mo; exports.h = To; exports.i = jo; exports.j = Fe; exports.k = ne; exports.l = Co; exports.m = ko; exports.n = Vo; exports.o = Ho; exports.p = qo; exports.q = zo; exports.r = Ko; exports.s = Bo; exports.t = Go; exports.u = Yo;
|
|
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 Xe=Object.defineProperty,Je=Object.defineProperties;var $e=Object.getOwnPropertyDescriptors;var ue=Object.getOwnPropertySymbols;var Qe=Object.prototype.hasOwnProperty,Ze=Object.prototype.propertyIsEnumerable;var me=(e,t,o)=>t in e?Xe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o,R= exports.a =(e,t)=>{for(var o in t||(t={}))Qe.call(t,o)&&me(e,o,t[o]);if(ue)for(var o of ue(t))Ze.call(t,o)&&me(e,o,t[o]);return e},T= exports.b =(e,t)=>Je(e,$e(t));var p=(e,t,o)=>new Promise((a,u)=>{var n=d=>{try{s(o.next(d))}catch(r){u(r)}},l=d=>{try{s(o.throw(d))}catch(r){u(r)}},s=d=>d.done?a(d.value):Promise.resolve(d.value).then(n,l);s((o=o.apply(e,t)).next())});var _expoapplication = require('expo-application');var _expolinking = require('expo-linking'); var L = _interopRequireWildcard(_expolinking); var G = _interopRequireWildcard(_expolinking); var U = _interopRequireWildcard(_expolinking); var I = _interopRequireWildcard(_expolinking);var _exposecurestore = require('expo-secure-store'); var k = _interopRequireWildcard(_exposecurestore);var _expowebbrowser = require('expo-web-browser'); var q = _interopRequireWildcard(_expowebbrowser); var he = _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 pe={name:"@privy-io/expo",version:"0.21.0",description:"Expo client for the Privy Auth API",keywords:["authentication","authorization","identity","privacy","privy","user data","react-native","expo","web3"],license:"Apache-2.0",source:"./src/index.ts",main:"./dist/index.js",module:"./dist/index.mjs",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:{react:"*","react-native":"*","react-native-passkeys":"^0.2.1","react-native-webview":"*","expo-constants":"*","expo-linking":"*","expo-crypto":"*","expo-secure-store":"*","expo-application":"*","expo-web-browser":"*"},dependencies:{"@privy-io/js-sdk-core":"0.23.5","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 be=({client:e,isClientReady:t,setWebViewState:o,webViewState:a,logLevel:u})=>{let n=_react.useRef.call(void 0, null);_react.useEffect.call(void 0, ()=>{n.current&&a==="loaded"&&e.setMessagePoster(n.current)},[e,n.current,a==="loaded"]),_react.useEffect.call(void 0, ()=>_reactnative.AppState.addEventListener("change",d=>p(void 0,null,function*(){n.current&&d==="active"&&((yield e.embeddedWallet.ping(150))||(n.current.reload(),o("reloading")))})).remove,[]);let l=_react.useCallback.call(void 0, s=>p(void 0,null,function*(){let{data:d}=s.nativeEvent,r=e.embeddedWallet.getMessageHandler();r==null||r(JSON.parse(d))}),[e]);return t?_react2.default.createElement(_reactnativewebview2.default,{style:{flex:1},ref:n,source:{uri:e.embeddedWallet.getURL()},webviewDebuggingEnabled:u==="DEBUG",onLoad:()=>o("loaded"),onError:console.error,onMessage:l}):null};function K(s){return p(this,arguments,function*({client:e,setWallet:t,createWalletCallbacks:o,recoveryMethod:a,setRecoveryFlowState:u,password:n,recoveryToken:l}){var d,r;switch(a){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(!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(!l)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Recovery token is required for icloud recovery method"});break}t({status:"creating",account:null});try{let{provider:i,user:c}=yield e.embeddedWallet.create(n,a,l),y=_jssdkcore.getUserEmbeddedWallet.call(void 0, c);return(r=(d=o.current)==null?void 0:d.onSuccess)==null||r.call(d,i),t({status:"connected",provider:i,account:y}),u({status:"initial"}),i}catch(i){let c=i instanceof Error?i.message:"Error creating embedded wallet";throw t({status:"error",error:c,account:null}),u({status:"initial"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:c})}})}function ve(u){return p(this,arguments,function*({client:e,setSolanaWallet:t,createSolanaWalletCallbacks:o,setSolanaRecoveryFlowState:a}){var n,l;t({status:"creating"});try{let s=yield e.embeddedWallet.createSolana();return(l=(n=o.current)==null?void 0:n.onSuccess)==null||l.call(n,s),t({status:"connected",publicKey:s._publicKey}),a({status:"initial"}),s}catch(s){let d=s instanceof Error?s.message:"Error creating embedded wallet";throw t({status:"error",error:d}),a({status:"initial"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:d})}})}function B(d){return p(this,arguments,function*({client:e,account:t,setWallet:o,recoverWalletCallbacks:a,recoveryMethod:u,setRecoveryFlowState:n,password:l,recoveryToken:s}){var r,i,c,y;if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});switch(u){case"user-passcode":if(!l)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(!s)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Recovery token is required for icloud recovery method"});break}o({status:"connecting",account:t});try{let f=yield e.embeddedWallet.getProvider(t,l,s);return o({status:"connected",provider:f,account:t}),n({status:"initial"}),(i=(r=a.current)==null?void 0:r.onSuccess)==null||i.call(r,f),f}catch(f){o({status:"needs-recovery",account:t}),n({status:"initial"});let S=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:f instanceof Error?f.message:"Error recovering embedded wallet"});throw(y=(c=a.current)==null?void 0:c.onError)==null||y.call(c,S),S}})}function we(n){return p(this,arguments,function*({client:e,solanaAccount:t,setSolanaWallet:o,recoverSolanaWalletCallbacks:a,setSolanaRecoveryFlowState:u}){var l,s,d,r;if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});o({status:"connecting"});try{let i=yield e.embeddedWallet.getSolanaProvider(t);return o({status:"connected",publicKey:i._publicKey}),u({status:"initial"}),(s=(l=a.current)==null?void 0:l.onSuccess)==null||s.call(l,i),i}catch(i){o({status:"needs-recovery"}),u({status:"initial"});let c=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:i instanceof Error?i.message:"Error recovering embedded wallet"});throw(r=(d=a.current)==null?void 0:d.onError)==null||r.call(d,c),c}})}var Se=({client:e,user:t,solanaWallet:o,setSolanaWallet:a,setSolanaRecoveryFlowState:u,webViewState:n,createSolanaWalletCallbacks:l,recoverSolanaWalletCallbacks:s})=>{let d=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, t),[t]),r=_react.useCallback.call(void 0, ()=>p(void 0,null,function*(){return yield ve({client:e,setSolanaWallet:a,createSolanaWalletCallbacks:l,setSolanaRecoveryFlowState:u})}),[e,l]),i=_react.useCallback.call(void 0, ()=>p(void 0,null,function*(){if(!d)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});return we({client:e,solanaAccount:d,setSolanaWallet:a,recoverSolanaWalletCallbacks:s,setSolanaRecoveryFlowState:u})}),[e,d]),c=_react.useCallback.call(void 0, ()=>p(void 0,null,function*(){if(!d)throw a({status:"not-created"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});a(y=>y.status==="connected"?{status:"reconnecting"}:{status:"connecting"});try{let y=yield e.embeddedWallet.getSolanaProvider(d);return a({status:"connected",publicKey:y._publicKey}),y}catch(y){throw _jssdkcore.errorIndicatesRecoveryIsNeeded.call(void 0, y)?(a({status:"needs-recovery"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):y instanceof Error?(a({status:"error",error:y.message}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:y.message})):(a({status:"error",error:"Error loading embedded wallet"}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,d]);return _react.useEffect.call(void 0, ()=>{if(!t&&o.status!=="disconnected")return a({status:"disconnected"});n==="loaded"&&c().catch(()=>{})},[n,t,d]),_react.useEffect.call(void 0, ()=>{o.status==="error"&&o.error.includes("User must be logged in")&&c()},[o.status]),{create:r,recover:i,getProvider:c}};var _reactfastcompare = require('react-fast-compare'); var _reactfastcompare2 = _interopRequireDefault(_reactfastcompare);var Ee=e=>t=>e(o=>_reactfastcompare2.default.call(void 0, o,t)?o:t);function C(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 mr=e=>new Promise(t=>setTimeout(t,e));function wr(){let e=_react.useRef.call(void 0, _reactnative.AppState.currentState);_react.useEffect.call(void 0, ()=>_reactnative.AppState.addEventListener("change",a=>{e.current=a}).remove,[]);function t(){return _reactnative.AppState.currentState}return{appState:e,getCurrentAppState:t}}function Y(u){return p(this,arguments,function*({provider:e,redirectUri:t,client:o,onError:a}){try{let n;switch(e){case"google-drive":{let{url:r}=yield o.recovery.auth.generateURL(G.createURL(t||"/"));n=r;break}case"icloud":{let{url:r}=yield o.recovery.icloudAuth.init("expo-ios");n=r;break}default:throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid provider",code:"embedded_wallet_recovery_error"})}let l=yield he.openAuthSessionAsync(n);if(_reactnative.Platform.OS==="android")return;if(l.type!=="success")throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth session failed",code:"embedded_wallet_recovery_error"});let{queryParams:s}=G.parse(l.url),d;switch(e){case"google-drive":{let{privy_oauth_state:r,privy_oauth_code:i}=s;if(!i||!r)throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth invalid credentials",code:"embedded_wallet_recovery_error"});d=yield re({oAuthCode:i,oAuthState:r,client:o});break}case"icloud":{let{ckWebAuthToken:r}=s;if(!r)throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery iCloud token not found in query params",code:"embedded_wallet_recovery_error"});d=r;break}default:throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth invalid provider",code:"embedded_wallet_recovery_error"})}return d}catch(n){throw a==null||a(C(n)),n}})}function re(a){return p(this,arguments,function*({oAuthCode:e,oAuthState:t,client:o}){let{access_token:u}=yield o.recovery.auth.authorize(e,t);if(!u)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:"login_with_oauth_returned_with_invalid_credentials"});return u})}function X(u){return p(this,arguments,function*({client:e,recoveryInput:t,setWalletRecoveryCallbacks:o,setRecoveryFlowState:a}){var n,l,s,d;try{let r=yield e.embeddedWallet.setRecovery(t);return(l=(n=o.current)==null?void 0:n.onSuccess)==null||l.call(n,r),a({status:"initial"}),r}catch(r){let i=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_set_recovery_error",error:r instanceof Error?r.message:"Error setting password on embedded wallet"});throw(d=(s=o.current)==null?void 0:s.onError)==null||d.call(s,i),a({status:"initial"}),i}})}function We(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 _e=({client:e,user:t,wallet:o,setWallet:a,setRecoveryFlowState:u,webViewState:n,createWalletCallbacks:l,recoverWalletCallbacks:s,setWalletRecoveryCallbacks:d})=>{let r=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedWallet.call(void 0, t),[t]),i=_react.useCallback.call(void 0, m=>p(void 0,null,function*(){var E;if(r)throw new (0, _jssdkcore.PrivyClientError)({error:"This user already has an embedded wallet",code:"embedded_wallet_already_exists"});let{password:w,recoveryMethod:b}=We(m),v;if(["google-drive","icloud"].includes(b)){if(b==="icloud"&&_reactnative.Platform.OS==="android")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});if(v=yield Y({provider:b,client:e,onError:(E=l.current)==null?void 0:E.onError}),u({status:"creating-wallet"}),!v)return null}return yield K({client:e,setWallet:a,createWalletCallbacks:l,recoveryMethod:b,setRecoveryFlowState:u,password:w,recoveryToken:v})}),[e,r]),c=_react.useCallback.call(void 0, m=>p(void 0,null,function*(){var v,E,g;if(o.status!=="connected")throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"});if(!r)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});_jssdkcore.throwIfInvalidRecoveryUpgradePath.call(void 0, {currentRecoveryMethod:r.recovery_method,upgradeToRecoveryMethod:m.recoveryMethod});let w,b;switch(m.recoveryMethod){case"user-passcode":b=T(R({},m),{wallet:r,password:m.password});break;case"google-drive":case"icloud":if(m.recoveryMethod==="icloud"&&_reactnative.Platform.OS==="android"){let A=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});throw(E=(v=d.current)==null?void 0:v.onError)==null||E.call(v,A),A}if(w=yield Y({provider:m.recoveryMethod,client:e,onError:(g=d.current)==null?void 0:g.onError}),u({status:"upgrading-recovery"}),!w)return null;b={recoveryMethod:m.recoveryMethod,wallet:r,recoveryAccessToken:w};break;default:throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}return X({client:e,recoveryInput:b,setWalletRecoveryCallbacks:d,setRecoveryFlowState:u})}),[e,r,o.status]),y=_react.useCallback.call(void 0, m=>p(void 0,null,function*(){return c({recoveryMethod:"user-passcode",password:m})}),[e,r,o.status]),f=_react.useCallback.call(void 0, m=>p(void 0,null,function*(){var E;if(!r)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{password:w,recoveryMethod:b}=We(m),v;if(["google-drive","icloud"].includes(b)){if(b==="icloud"&&_reactnative.Platform.OS==="android")throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});if(v=yield Y({provider:b,client:e,onError:(E=s.current)==null?void 0:E.onError}),u({status:"recovering"}),!v)return null}return B({client:e,account:r,setWallet:a,recoverWalletCallbacks:s,recoveryMethod:b,setRecoveryFlowState:u,password:w,recoveryToken:v})}),[e,r]),S=_react.useCallback.call(void 0, ()=>p(void 0,null,function*(){if(!r)throw a({status:"not-created",account:null}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});a(m=>m.status==="connected"?{status:"reconnecting",account:r}:{status:"connecting",account:r});try{let m=yield e.embeddedWallet.getProvider(r);return a({status:"connected",provider:m,account:r}),m}catch(m){throw _jssdkcore.errorIndicatesRecoveryIsNeeded.call(void 0, m)?(a({status:"needs-recovery",account:r}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):m instanceof Error?(a({status:"error",error:m.message,account:r}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:m.message})):(a({status:"error",error:"Error loading embedded wallet",account:r}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,r]);return _react.useEffect.call(void 0, ()=>{if(!t&&o.status!=="disconnected")return a({status:"disconnected",account:null});n==="loaded"&&S().catch(()=>{})},[n,t,r]),_react.useEffect.call(void 0, ()=>{o.status==="error"&&o.error.includes("User must be logged in")&&S()},[o.status]),{create:i,recover:f,setPassword:y,setRecovery:c,getProvider:S}};var Ce=({client:e,user:t,isReady:o,customAuth:a})=>{let[u,n]=_react.useState.call(void 0, {status:"initial"});return _react.useEffect.call(void 0, ()=>{(()=>p(void 0,null,function*(){if(!(a!=null&&a.enabled)){n({status:"not-enabled"});return}n({status:"loading"});let{getCustomAccessToken:s,isLoading:d}=a;if(!(!o||d))try{let r=yield s();if(!r&&t){yield e.auth.logout(),n({status:"done"});return}if(!r){n({status:"done"});return}if(t){n({status:"done"});return}if(!(yield e.auth.customProvider.syncWithToken(r))){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(r){if(console.log("Error syncing with custom auth provider",r),n({status:"error",error:r}),t)throw yield e.auth.logout(),new (0, _jssdkcore.PrivyClientError)({error:"Third-party auth failed",code:"third_party_auth_error"})}}))()},[e,t,o,a==null?void 0:a.enabled,a==null?void 0:a.getCustomAccessToken,a==null?void 0:a.isLoading]),{customAuthState:u,customAuthStateIsSettled:u.status!=="loading"&&u.status!=="initial"}};var ke=({client:e,user:t,isUserInitialized:o,oAuthState:a,oAuthCallbacks:u,setOAuthState:n,recoveryFlowState:l})=>{let s=U.useURL(),d=_react.useCallback.call(void 0, r=>{var c,y;let i=C(r);n({status:"error",error:i}),(y=(c=u.current).onError)==null||y.call(c,i)},[n]);return _react.useEffect.call(void 0, ()=>{function r(){return p(this,null,function*(){var f,S;if(!s||a.status!=="loading"||l.status!=="initial")return;let{queryParams:i}=U.parse(s),{privy_oauth_state:c,privy_oauth_code:y}=i;if(!y||!c){n({status:"done"});return}try{let m,w;if(t)m=yield e.auth.oauth.linkWithCode(y,c);else{let b=yield e.auth.oauth.loginWithCode(y,c);m=b.user,w=!!b.is_new_user}return(S=(f=u.current).onSuccess)==null||S.call(f,m,w),n({status:"done"}),yield U.openURL(s.split("?")[0])}catch(m){d(m)}})}_reactnative.Platform.OS==="android"&&o&&r()},[s,o])};var Ae=({client:e,user:t,createWalletCallbacks:o,recoverWalletCallbacks:a,setWalletRecoveryCallbacks:u,recoveryFlowState:n,oAuthState:l,setRecoveryFlowState:s,setWallet:d,appStateVisible:r,webViewLoaded:i})=>{let c=I.useURL(),y=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedWallet.call(void 0, t),[t]),f=_react.useCallback.call(void 0, S=>{var w,b,v,E;let m=C(S);n.status==="creating-wallet"?(b=(w=o.current).onError)==null||b.call(w,C(m)):(E=(v=a.current).onError)==null||E.call(v,C(m)),s({status:"initial"})},[n]);return _react.useEffect.call(void 0, ()=>{function S(){return p(this,null,function*(){if(!c&&n.status!=="initial"&&r&&f(new Error("Recovery OAuth session failed")),!c||n.status==="initial"||l.status!=="initial"||!r||!i)return;let{queryParams:m}=I.parse(c),{privy_oauth_state:w,privy_oauth_code:b}=m;if(!(!b||!w)){yield I.openURL(c.split("?")[0]);try{let v=yield re({oAuthCode:b,oAuthState:w,client:e});if(n.status==="creating-wallet")yield K({client:e,setWallet:d,createWalletCallbacks:o,recoveryMethod:"google-drive",setRecoveryFlowState:s,recoveryToken:v});else if(n.status==="upgrading-recovery"){if(!y)throw new Error("Embedded wallet not found");yield X({client:e,recoveryInput:{recoveryMethod:"google-drive",wallet:y,recoveryAccessToken:v},setWalletRecoveryCallbacks:u,setRecoveryFlowState:s})}else yield B({client:e,account:y,setWallet:d,recoverWalletCallbacks:a,recoveryMethod:"google-drive",setRecoveryFlowState:s,recoveryToken:v})}catch(v){f(v)}}})}_reactnative.Platform.OS==="android"&&S()},[c,n.status,r,i])};var Pe=({client:e,isUserInitialized:t,setIsUserInitialized:o})=>{_react.useEffect.call(void 0, ()=>{t||(()=>p(void 0,null,function*(){try{yield e.user.get()}catch(u){}finally{o(!0)}}))()},[t])};var ne=_react.createContext.call(void 0, {}),J;function Co(){return J?J.getAccessToken():Promise.resolve(null)}var ko=e=>{var ce;let[t,o]=_react.useState.call(void 0, _reactnative.AppState.currentState==="active");_react.useEffect.call(void 0, ()=>{let O=_reactnative.AppState.addEventListener("change",Ye=>{o(Ye==="active")});return()=>{O.remove()}},[]);let[a,u]=_react.useState.call(void 0, !1),[n,l]=_react.useState.call(void 0, "loading"),[s,d]=_react.useState.call(void 0, !1),[r,i]=_react.useState.call(void 0, null),[c,y]=_react.useState.call(void 0, {status:"disconnected",account:null}),[f,S]=_react.useState.call(void 0, {status:"disconnected"}),[m,w]=_react.useState.call(void 0, {status:"initial"}),[b,v]=_react.useState.call(void 0, {status:"initial"}),[E,g]=_react.useState.call(void 0, {status:"initial"}),[A,M]=_react.useState.call(void 0, {status:"initial"}),[Te,je]=_react.useState.call(void 0, {status:"initial"}),[De,Ne]=_react.useState.call(void 0, {status:"initial"}),[Ve,He]=_react.useState.call(void 0, {status:"initial"}),se=_react.useRef.call(void 0, {}),$=_react.useRef.call(void 0, {}),Q=_react.useRef.call(void 0, {}),Z=_react.useRef.call(void 0, {}),ie=_react.useRef.call(void 0, {}),le=_react.useRef.call(void 0, {}),z=_react.useCallback.call(void 0, O=>{if(O)return Ee(i)(O);i(null),w({status:"initial"}),v({status:"initial"}),y({status:"disconnected",account:null})},[]),W=_react.useMemo.call(void 0, ()=>{let O=e.storage||Fe;return J=new (0, _jssdkcore2.default)({storage:Ie(O),appId:e.appId,clientId:e.clientId,supportedChains:e.supportedChains,nativeAppIdentifier:Ue(),baseUrl:e.baseUrl,sdkVersion:`expo:${pe.version}`,callbacks:{setUser:z,setIsReady:d},logLevel:e.logLevel,crypto:{digest:_expocrypto.digest}}),J},[e.storage,e.appId,e.clientId,e.baseUrl,e.supportedChains,e.logLevel,z]),qe=_react.useCallback.call(void 0, ()=>(z(null),W.auth.logout()),[z,W]),ze=_react.useCallback.call(void 0, ()=>W.getAccessToken(),[W]);Pe({client:W,isUserInitialized:a,setIsUserInitialized:u});let Ke=_e({client:W,user:r,webViewState:n,createWalletCallbacks:$,recoverWalletCallbacks:Q,setWalletRecoveryCallbacks:Z,setRecoveryFlowState:g,wallet:c,setWallet:y}),Be=Se({client:W,user:r,webViewState:n,createSolanaWalletCallbacks:ie,recoverSolanaWalletCallbacks:le,setSolanaRecoveryFlowState:M,solanaWallet:f,setSolanaWallet:S});ke({client:W,isUserInitialized:a,user:r,oAuthState:b,setOAuthState:v,oAuthCallbacks:se,recoveryFlowState:E}),Ae({client:W,user:r,webViewLoaded:n==="loaded",createWalletCallbacks:$,recoverWalletCallbacks:Q,setWalletRecoveryCallbacks:Z,recoveryFlowState:E,oAuthState:b,setRecoveryFlowState:g,setWallet:y,appStateVisible:t});let{customAuthStateIsSettled:Ge}=Ce({client:W,user:r,isReady:a,customAuth:(ce=e.config)==null?void 0:ce.customAuth});return _react2.default.createElement(_react2.default.Fragment,null,_react2.default.createElement(ne.Provider,{value:{client:W,user:r,isReady:n!=="loading"&&a&&xe(b)&&Ge,logout:qe,getAccessToken:ze,wallet:R(R({},c),Ke),solanaWallet:R(R({},f),Be),oAuthState:b,oAuthCallbacks:se,recoveryFlowState:E,setRecoveryFlowState:g,solanaRecoveryFlowState:A,setSolanaRecoveryFlowState:M,createWalletCallbacks:$,recoverWalletCallbacks:Q,setWalletRecoveryCallbacks:Z,createSolanaWalletCallbacks:ie,recoverSolanaWalletCallbacks:le,setOAuthState:v,siweState:Te,setSiweState:je,otpState:m,setOtpState:w,passkeyState:De,setPasskeyState:Ne,farcasterState:Ve,setFarcasterState:He}},e.children),_react2.default.createElement(_reactnative.View,{style:{width:0,height:0,overflow:"hidden"}},_react2.default.createElement(be,{logLevel:e.logLevel,client:W,isClientReady:s,setWebViewState:l,webViewState:n})))};var xe=e=>e.status!=="loading",de=(e={})=>{let{user:t,oAuthState:o,setOAuthState:a,oAuthCallbacks:u,client:n}=_react.useContext.call(void 0, ne),l=e.action?e.action==="login":!t;_react.useEffect.call(void 0, ()=>{u.current={onSuccess:e.onSuccess,onError:e.onError}},[e.onSuccess,e.onError]);let s=_react.useCallback.call(void 0, r=>{var c;let i=C(r);return a({status:"error",error:i}),(c=e==null?void 0:e.onError)==null||c.call(e,i),i},[e==null?void 0:e.onError]);return{start:_react.useCallback.call(void 0, function(y){return p(this,arguments,function*({provider:i,redirectUri:c}){var f;a({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(i,L.createURL(c||"/")),m=_reactnative.Platform.OS==="android"?S.replace("x.com","twitter.com"):S,w=yield q.openAuthSessionAsync(m);if(_reactnative.Platform.OS==="android")return;if(w.type!=="success")throw[q.WebBrowserResultType.CANCEL,q.WebBrowserResultType.DISMISS].includes(w.type)?new (0, _jssdkcore.PrivyClientError)({error:"OAuth was cancelled",code:l?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):new (0, _jssdkcore.PrivyClientError)({error:"OAuth session failed",code:l?"failed_to_complete_login_with_oauth":"failed_to_complete_link_with_oauth"});let{queryParams:b}=L.parse(w.url),{privy_oauth_state:v,privy_oauth_code:E}=b;if(!E||!v)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:l?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});let g,A;if(l){let M=yield n.auth.oauth.loginWithCode(E,v,i);g=M.user,A=M.is_new_user}else g=yield n.auth.oauth.linkWithCode(E,v,i);return(f=e==null?void 0:e.onSuccess)==null||f.call(e,g,A),yield L.openURL(w.url.split("?")[0]),a({status:"done"}),g!=null?g:void 0}catch(S){s(S)}})},[t,n,a,s]),state:o}};function Mo(e){let{state:t,start:o}=de(T(R({},e),{action:"login"}));return{state:t,login:o}}function To(e){let{state:t,start:o}=de(T(R({},e),{action:"link"}));return{state:t,link:o}}function jo(e){return de(e)}var Ue=()=>_expoapplication.applicationId;function Ie(e){return{get(t){return e.get(t.replaceAll(":","-"))},put(t,o){return e.put(t.replaceAll(":","-"),o)},del(t){return e.del(t.replaceAll(":","-"))},getKeys:()=>p(this,null,function*(){return[]})}}var Fe={get(e){return k.getItemAsync(e,{keychainAccessible:k.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},put(e,t){return k.setItemAsync(e,t,{keychainAccessible:k.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},del(e){return k.deleteItemAsync(e,{keychainAccessible:k.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},getKeys:()=>p(void 0,null,function*(){return[]})};var Vo=e=>e.status==="connected",Ho= exports.o =e=>e.status==="reconnecting",qo= exports.p =e=>e.status==="connecting",zo= exports.q =e=>e.status==="disconnected",Ko= exports.r =e=>e.status==="not-created",Bo= exports.s =e=>e.status==="creating",Go= exports.t =e=>e.status==="error",Yo= exports.u =e=>e.status==="needs-recovery";exports.a = R; exports.b = T; exports.c = p; exports.d = C; exports.e = mr; exports.f = wr; exports.g = Mo; exports.h = To; exports.i = jo; exports.j = Fe; exports.k = ne; exports.l = Co; exports.m = ko; exports.n = Vo; exports.o = Ho; exports.p = qo; exports.q = zo; exports.r = Ko; exports.s = Bo; exports.t = Go; exports.u = Yo;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var Xe=Object.defineProperty,Je=Object.defineProperties;var $e=Object.getOwnPropertyDescriptors;var ue=Object.getOwnPropertySymbols;var Qe=Object.prototype.hasOwnProperty,Ze=Object.prototype.propertyIsEnumerable;var me=(e,t,o)=>t in e?Xe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o,R=(e,t)=>{for(var o in t||(t={}))Qe.call(t,o)&&me(e,o,t[o]);if(ue)for(var o of ue(t))Ze.call(t,o)&&me(e,o,t[o]);return e},T=(e,t)=>Je(e,$e(t));var p=(e,t,o)=>new Promise((a,u)=>{var n=d=>{try{s(o.next(d))}catch(r){u(r)}},l=d=>{try{s(o.throw(d))}catch(r){u(r)}},s=d=>d.done?a(d.value):Promise.resolve(d.value).then(n,l);s((o=o.apply(e,t)).next())});import{applicationId as jt}from"expo-application";import*as L from"expo-linking";import*as k from"expo-secure-store";import*as q from"expo-web-browser";import{useCallback as Le,useContext as Dt,useEffect as Nt}from"react";import{Platform as Me}from"react-native";import{PrivyClientError as H}from"@privy-io/js-sdk-core";import{digest as Ut}from"expo-crypto";import V,{useState as h,useMemo as It,createContext as Ft,useCallback as ae,useRef as F,useEffect as Lt}from"react";import{AppState as Oe,View as Mt}from"react-native";import Tt from"@privy-io/js-sdk-core";var pe={name:"@privy-io/expo",version:"0.20.4",description:"Expo client for the Privy Auth API",keywords:["authentication","authorization","identity","privacy","privy","user data","react-native","expo","web3"],license:"Apache-2.0",source:"./src/index.ts",main:"./dist/index.js",module:"./dist/index.mjs",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:{react:"*","react-native":"*","react-native-passkeys":"^0.2.1","react-native-webview":"*","expo-constants":"*","expo-linking":"*","expo-crypto":"*","expo-secure-store":"*","expo-application":"*","expo-web-browser":"*"},dependencies:{"@privy-io/js-sdk-core":"0.23.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 tt from"react";import{useCallback as rt,useEffect as ye,useRef as ot}from"react";import{AppState as at}from"react-native";import nt from"react-native-webview";var be=({client:e,isClientReady:t,setWebViewState:o,webViewState:a,logLevel:u})=>{let n=ot(null);ye(()=>{n.current&&a==="loaded"&&e.setMessagePoster(n.current)},[e,n.current,a==="loaded"]),ye(()=>at.addEventListener("change",d=>p(void 0,null,function*(){n.current&&d==="active"&&((yield e.embeddedWallet.ping(150))||(n.current.reload(),o("reloading")))})).remove,[]);let l=rt(s=>p(void 0,null,function*(){let{data:d}=s.nativeEvent,r=e.embeddedWallet.getMessageHandler();r==null||r(JSON.parse(d))}),[e]);return t?tt.createElement(nt,{style:{flex:1},ref:n,source:{uri:e.embeddedWallet.getURL()},webviewDebuggingEnabled:u==="DEBUG",onLoad:()=>o("loaded"),onError:console.error,onMessage:l}):null};import{useCallback as ee,useEffect as fe,useMemo as st}from"react";import{errorIndicatesRecoveryIsNeeded as it,getUserEmbeddedSolanaWallet as lt,PrivyClientError as D}from"@privy-io/js-sdk-core";import{getUserEmbeddedWallet as dt}from"@privy-io/js-sdk-core";import{PrivyClientError as j}from"@privy-io/js-sdk-core";function K(s){return p(this,arguments,function*({client:e,setWallet:t,createWalletCallbacks:o,recoveryMethod:a,setRecoveryFlowState:u,password:n,recoveryToken:l}){var d,r;switch(a){case"user-passcode":if(!n)throw new j({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!l)throw new j({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!l)throw new j({code:"embedded_wallet_recovery_error",error:"Recovery token is required for icloud recovery method"});break}t({status:"creating",account:null});try{let{provider:i,user:c}=yield e.embeddedWallet.create(n,a,l),y=dt(c);return(r=(d=o.current)==null?void 0:d.onSuccess)==null||r.call(d,i),t({status:"connected",provider:i,account:y}),u({status:"initial"}),i}catch(i){let c=i instanceof Error?i.message:"Error creating embedded wallet";throw t({status:"error",error:c,account:null}),u({status:"initial"}),new j({code:"embedded_wallet_creation_error",error:c})}})}function ve(u){return p(this,arguments,function*({client:e,setSolanaWallet:t,createSolanaWalletCallbacks:o,setSolanaRecoveryFlowState:a}){var n,l;t({status:"creating"});try{let s=yield e.embeddedWallet.createSolana();return(l=(n=o.current)==null?void 0:n.onSuccess)==null||l.call(n,s),t({status:"connected",publicKey:s._publicKey}),a({status:"initial"}),s}catch(s){let d=s instanceof Error?s.message:"Error creating embedded wallet";throw t({status:"error",error:d}),a({status:"initial"}),new j({code:"embedded_wallet_creation_error",error:d})}})}import{PrivyClientError as P}from"@privy-io/js-sdk-core";function B(d){return p(this,arguments,function*({client:e,account:t,setWallet:o,recoverWalletCallbacks:a,recoveryMethod:u,setRecoveryFlowState:n,password:l,recoveryToken:s}){var r,i,c,y;if(!t)throw new P({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});switch(u){case"user-passcode":if(!l)throw new P({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!s)throw new P({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!s)throw new P({code:"embedded_wallet_recovery_error",error:"Recovery token is required for icloud recovery method"});break}o({status:"connecting",account:t});try{let f=yield e.embeddedWallet.getProvider(t,l,s);return o({status:"connected",provider:f,account:t}),n({status:"initial"}),(i=(r=a.current)==null?void 0:r.onSuccess)==null||i.call(r,f),f}catch(f){o({status:"needs-recovery",account:t}),n({status:"initial"});let S=new P({code:"embedded_wallet_recovery_error",error:f instanceof Error?f.message:"Error recovering embedded wallet"});throw(y=(c=a.current)==null?void 0:c.onError)==null||y.call(c,S),S}})}function we(n){return p(this,arguments,function*({client:e,solanaAccount:t,setSolanaWallet:o,recoverSolanaWalletCallbacks:a,setSolanaRecoveryFlowState:u}){var l,s,d,r;if(!t)throw new P({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});o({status:"connecting"});try{let i=yield e.embeddedWallet.getSolanaProvider(t);return o({status:"connected",publicKey:i._publicKey}),u({status:"initial"}),(s=(l=a.current)==null?void 0:l.onSuccess)==null||s.call(l,i),i}catch(i){o({status:"needs-recovery"}),u({status:"initial"});let c=new P({code:"embedded_wallet_recovery_error",error:i instanceof Error?i.message:"Error recovering embedded wallet"});throw(r=(d=a.current)==null?void 0:d.onError)==null||r.call(d,c),c}})}var Se=({client:e,user:t,solanaWallet:o,setSolanaWallet:a,setSolanaRecoveryFlowState:u,webViewState:n,createSolanaWalletCallbacks:l,recoverSolanaWalletCallbacks:s})=>{let d=st(()=>lt(t),[t]),r=ee(()=>p(void 0,null,function*(){return yield ve({client:e,setSolanaWallet:a,createSolanaWalletCallbacks:l,setSolanaRecoveryFlowState:u})}),[e,l]),i=ee(()=>p(void 0,null,function*(){if(!d)throw new D({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});return we({client:e,solanaAccount:d,setSolanaWallet:a,recoverSolanaWalletCallbacks:s,setSolanaRecoveryFlowState:u})}),[e,d]),c=ee(()=>p(void 0,null,function*(){if(!d)throw a({status:"not-created"}),new D({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});a(y=>y.status==="connected"?{status:"reconnecting"}:{status:"connecting"});try{let y=yield e.embeddedWallet.getSolanaProvider(d);return a({status:"connected",publicKey:y._publicKey}),y}catch(y){throw it(y)?(a({status:"needs-recovery"}),new D({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):y instanceof Error?(a({status:"error",error:y.message}),new D({code:"unknown_embedded_wallet_error",error:y.message})):(a({status:"error",error:"Error loading embedded wallet"}),new D({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,d]);return fe(()=>{if(!t&&o.status!=="disconnected")return a({status:"disconnected"});n==="loaded"&&c().catch(()=>{})},[n,t,d]),fe(()=>{o.status==="error"&&o.error.includes("User must be logged in")&&c()},[o.status]),{create:r,recover:i,getProvider:c}};import{useCallback as N,useEffect as ge,useMemo as wt}from"react";import{Platform as oe}from"react-native";import{throwIfInvalidRecoveryUpgradePath as ft}from"@privy-io/js-sdk-core";import{errorIndicatesRecoveryIsNeeded as St,getUserEmbeddedWallet as Et,PrivyClientError as _}from"@privy-io/js-sdk-core";import*as G from"expo-linking";import*as he from"expo-web-browser";import{Platform as bt}from"react-native";import{PrivyClientError as x}from"@privy-io/js-sdk-core";import ct from"react-fast-compare";var Ee=e=>t=>e(o=>ct(o,t)?o:t);import{PrivyApiError as ut,PrivyClientError as mt}from"@privy-io/js-sdk-core";function C(e){return e instanceof Error||e instanceof ut||e instanceof mt?e:typeof e=="string"?new Error(e):new Error("Unknown error")}var mr=e=>new Promise(t=>setTimeout(t,e));import{useEffect as pt,useRef as yt}from"react";import{AppState as te}from"react-native";function wr(){let e=yt(te.currentState);pt(()=>te.addEventListener("change",a=>{e.current=a}).remove,[]);function t(){return te.currentState}return{appState:e,getCurrentAppState:t}}function Y(u){return p(this,arguments,function*({provider:e,redirectUri:t,client:o,onError:a}){try{let n;switch(e){case"google-drive":{let{url:r}=yield o.recovery.auth.generateURL(G.createURL(t||"/"));n=r;break}case"icloud":{let{url:r}=yield o.recovery.icloudAuth.init("expo-ios");n=r;break}default:throw new x({error:"OAuth invalid provider",code:"embedded_wallet_recovery_error"})}let l=yield he.openAuthSessionAsync(n);if(bt.OS==="android")return;if(l.type!=="success")throw new x({error:"Recovery OAuth session failed",code:"embedded_wallet_recovery_error"});let{queryParams:s}=G.parse(l.url),d;switch(e){case"google-drive":{let{privy_oauth_state:r,privy_oauth_code:i}=s;if(!i||!r)throw new x({error:"Recovery OAuth invalid credentials",code:"embedded_wallet_recovery_error"});d=yield re({oAuthCode:i,oAuthState:r,client:o});break}case"icloud":{let{ckWebAuthToken:r}=s;if(!r)throw new x({error:"Recovery iCloud token not found in query params",code:"embedded_wallet_recovery_error"});d=r;break}default:throw new x({error:"Recovery OAuth invalid provider",code:"embedded_wallet_recovery_error"})}return d}catch(n){throw a==null||a(C(n)),n}})}function re(a){return p(this,arguments,function*({oAuthCode:e,oAuthState:t,client:o}){let{access_token:u}=yield o.recovery.auth.authorize(e,t);if(!u)throw new x({error:"OAuth invalid credentials",code:"login_with_oauth_returned_with_invalid_credentials"});return u})}import{PrivyClientError as vt}from"@privy-io/js-sdk-core";function X(u){return p(this,arguments,function*({client:e,recoveryInput:t,setWalletRecoveryCallbacks:o,setRecoveryFlowState:a}){var n,l,s,d;try{let r=yield e.embeddedWallet.setRecovery(t);return(l=(n=o.current)==null?void 0:n.onSuccess)==null||l.call(n,r),a({status:"initial"}),r}catch(r){let i=new vt({code:"embedded_wallet_set_recovery_error",error:r instanceof Error?r.message:"Error setting password on embedded wallet"});throw(d=(s=o.current)==null?void 0:s.onError)==null||d.call(s,i),a({status:"initial"}),i}})}function We(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 _e=({client:e,user:t,wallet:o,setWallet:a,setRecoveryFlowState:u,webViewState:n,createWalletCallbacks:l,recoverWalletCallbacks:s,setWalletRecoveryCallbacks:d})=>{let r=wt(()=>Et(t),[t]),i=N(m=>p(void 0,null,function*(){var E;if(r)throw new _({error:"This user already has an embedded wallet",code:"embedded_wallet_already_exists"});let{password:w,recoveryMethod:b}=We(m),v;if(["google-drive","icloud"].includes(b)){if(b==="icloud"&&oe.OS==="android")throw new _({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});if(v=yield Y({provider:b,client:e,onError:(E=l.current)==null?void 0:E.onError}),u({status:"creating-wallet"}),!v)return null}return yield K({client:e,setWallet:a,createWalletCallbacks:l,recoveryMethod:b,setRecoveryFlowState:u,password:w,recoveryToken:v})}),[e,r]),c=N(m=>p(void 0,null,function*(){var v,E,g;if(o.status!=="connected")throw new _({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"});if(!r)throw new _({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});ft({currentRecoveryMethod:r.recovery_method,upgradeToRecoveryMethod:m.recoveryMethod});let w,b;switch(m.recoveryMethod){case"user-passcode":b=T(R({},m),{wallet:r,password:m.password});break;case"google-drive":case"icloud":if(m.recoveryMethod==="icloud"&&oe.OS==="android"){let A=new _({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});throw(E=(v=d.current)==null?void 0:v.onError)==null||E.call(v,A),A}if(w=yield Y({provider:m.recoveryMethod,client:e,onError:(g=d.current)==null?void 0:g.onError}),u({status:"upgrading-recovery"}),!w)return null;b={recoveryMethod:m.recoveryMethod,wallet:r,recoveryAccessToken:w};break;default:throw new _({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}return X({client:e,recoveryInput:b,setWalletRecoveryCallbacks:d,setRecoveryFlowState:u})}),[e,r,o.status]),y=N(m=>p(void 0,null,function*(){return c({recoveryMethod:"user-passcode",password:m})}),[e,r,o.status]),f=N(m=>p(void 0,null,function*(){var E;if(!r)throw new _({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{password:w,recoveryMethod:b}=We(m),v;if(["google-drive","icloud"].includes(b)){if(b==="icloud"&&oe.OS==="android")throw new _({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});if(v=yield Y({provider:b,client:e,onError:(E=s.current)==null?void 0:E.onError}),u({status:"recovering"}),!v)return null}return B({client:e,account:r,setWallet:a,recoverWalletCallbacks:s,recoveryMethod:b,setRecoveryFlowState:u,password:w,recoveryToken:v})}),[e,r]),S=N(()=>p(void 0,null,function*(){if(!r)throw a({status:"not-created",account:null}),new _({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});a(m=>m.status==="connected"?{status:"reconnecting",account:r}:{status:"connecting",account:r});try{let m=yield e.embeddedWallet.getProvider(r);return a({status:"connected",provider:m,account:r}),m}catch(m){throw St(m)?(a({status:"needs-recovery",account:r}),new _({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):m instanceof Error?(a({status:"error",error:m.message,account:r}),new _({code:"unknown_embedded_wallet_error",error:m.message})):(a({status:"error",error:"Error loading embedded wallet",account:r}),new _({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,r]);return ge(()=>{if(!t&&o.status!=="disconnected")return a({status:"disconnected",account:null});n==="loaded"&&S().catch(()=>{})},[n,t,r]),ge(()=>{o.status==="error"&&o.error.includes("User must be logged in")&&S()},[o.status]),{create:i,recover:f,setPassword:y,setRecovery:c,getProvider:S}};import{useEffect as ht,useState as gt}from"react";import{PrivyClientError as Re}from"@privy-io/js-sdk-core";var Ce=({client:e,user:t,isReady:o,customAuth:a})=>{let[u,n]=gt({status:"initial"});return ht(()=>{(()=>p(void 0,null,function*(){if(!(a!=null&&a.enabled)){n({status:"not-enabled"});return}n({status:"loading"});let{getCustomAccessToken:s,isLoading:d}=a;if(!(!o||d))try{let r=yield s();if(!r&&t){yield e.auth.logout(),n({status:"done"});return}if(!r){n({status:"done"});return}if(t){n({status:"done"});return}if(!(yield e.auth.customProvider.syncWithToken(r))){yield e.auth.logout(),n({status:"error",error:new Re({error:"Failed to sync with custom auth provider",code:"third_party_auth_error"})});return}n({status:"done"})}catch(r){if(console.log("Error syncing with custom auth provider",r),n({status:"error",error:r}),t)throw yield e.auth.logout(),new Re({error:"Third-party auth failed",code:"third_party_auth_error"})}}))()},[e,t,o,a==null?void 0:a.enabled,a==null?void 0:a.getCustomAccessToken,a==null?void 0:a.isLoading]),{customAuthState:u,customAuthStateIsSettled:u.status!=="loading"&&u.status!=="initial"}};import*as U from"expo-linking";import{useCallback as Wt,useEffect as _t}from"react";import{Platform as Rt}from"react-native";var ke=({client:e,user:t,isUserInitialized:o,oAuthState:a,oAuthCallbacks:u,setOAuthState:n,recoveryFlowState:l})=>{let s=U.useURL(),d=Wt(r=>{var c,y;let i=C(r);n({status:"error",error:i}),(y=(c=u.current).onError)==null||y.call(c,i)},[n]);return _t(()=>{function r(){return p(this,null,function*(){var f,S;if(!s||a.status!=="loading"||l.status!=="initial")return;let{queryParams:i}=U.parse(s),{privy_oauth_state:c,privy_oauth_code:y}=i;if(!y||!c){n({status:"done"});return}try{let m,w;if(t)m=yield e.auth.oauth.linkWithCode(y,c);else{let b=yield e.auth.oauth.loginWithCode(y,c);m=b.user,w=!!b.is_new_user}return(S=(f=u.current).onSuccess)==null||S.call(f,m,w),n({status:"done"}),yield U.openURL(s.split("?")[0])}catch(m){d(m)}})}Rt.OS==="android"&&o&&r()},[s,o])};import*as I from"expo-linking";import{useCallback as Ct,useEffect as kt,useMemo as At}from"react";import{Platform as Pt}from"react-native";import{getUserEmbeddedWallet as Ot}from"@privy-io/js-sdk-core";var Ae=({client:e,user:t,createWalletCallbacks:o,recoverWalletCallbacks:a,setWalletRecoveryCallbacks:u,recoveryFlowState:n,oAuthState:l,setRecoveryFlowState:s,setWallet:d,appStateVisible:r,webViewLoaded:i})=>{let c=I.useURL(),y=At(()=>Ot(t),[t]),f=Ct(S=>{var w,b,v,E;let m=C(S);n.status==="creating-wallet"?(b=(w=o.current).onError)==null||b.call(w,C(m)):(E=(v=a.current).onError)==null||E.call(v,C(m)),s({status:"initial"})},[n]);return kt(()=>{function S(){return p(this,null,function*(){if(!c&&n.status!=="initial"&&r&&f(new Error("Recovery OAuth session failed")),!c||n.status==="initial"||l.status!=="initial"||!r||!i)return;let{queryParams:m}=I.parse(c),{privy_oauth_state:w,privy_oauth_code:b}=m;if(!(!b||!w)){yield I.openURL(c.split("?")[0]);try{let v=yield re({oAuthCode:b,oAuthState:w,client:e});if(n.status==="creating-wallet")yield K({client:e,setWallet:d,createWalletCallbacks:o,recoveryMethod:"google-drive",setRecoveryFlowState:s,recoveryToken:v});else if(n.status==="upgrading-recovery"){if(!y)throw new Error("Embedded wallet not found");yield X({client:e,recoveryInput:{recoveryMethod:"google-drive",wallet:y,recoveryAccessToken:v},setWalletRecoveryCallbacks:u,setRecoveryFlowState:s})}else yield B({client:e,account:y,setWallet:d,recoverWalletCallbacks:a,recoveryMethod:"google-drive",setRecoveryFlowState:s,recoveryToken:v})}catch(v){f(v)}}})}Pt.OS==="android"&&S()},[c,n.status,r,i])};import{useEffect as xt}from"react";var Pe=({client:e,isUserInitialized:t,setIsUserInitialized:o})=>{xt(()=>{t||(()=>p(void 0,null,function*(){try{yield e.user.get()}catch(u){}finally{o(!0)}}))()},[t])};var ne=Ft({}),J;function Co(){return J?J.getAccessToken():Promise.resolve(null)}var ko=e=>{var ce;let[t,o]=h(Oe.currentState==="active");Lt(()=>{let O=Oe.addEventListener("change",Ye=>{o(Ye==="active")});return()=>{O.remove()}},[]);let[a,u]=h(!1),[n,l]=h("loading"),[s,d]=h(!1),[r,i]=h(null),[c,y]=h({status:"disconnected",account:null}),[f,S]=h({status:"disconnected"}),[m,w]=h({status:"initial"}),[b,v]=h({status:"initial"}),[E,g]=h({status:"initial"}),[A,M]=h({status:"initial"}),[Te,je]=h({status:"initial"}),[De,Ne]=h({status:"initial"}),[Ve,He]=h({status:"initial"}),se=F({}),$=F({}),Q=F({}),Z=F({}),ie=F({}),le=F({}),z=ae(O=>{if(O)return Ee(i)(O);i(null),w({status:"initial"}),v({status:"initial"}),y({status:"disconnected",account:null})},[]),W=It(()=>{let O=e.storage||Fe;return J=new Tt({storage:Ie(O),appId:e.appId,clientId:e.clientId,supportedChains:e.supportedChains,nativeAppIdentifier:Ue(),baseUrl:e.baseUrl,sdkVersion:`expo:${pe.version}`,callbacks:{setUser:z,setIsReady:d},logLevel:e.logLevel,crypto:{digest:Ut}}),J},[e.storage,e.appId,e.clientId,e.baseUrl,e.supportedChains,e.logLevel,z]),qe=ae(()=>(z(null),W.auth.logout()),[z,W]),ze=ae(()=>W.getAccessToken(),[W]);Pe({client:W,isUserInitialized:a,setIsUserInitialized:u});let Ke=_e({client:W,user:r,webViewState:n,createWalletCallbacks:$,recoverWalletCallbacks:Q,setWalletRecoveryCallbacks:Z,setRecoveryFlowState:g,wallet:c,setWallet:y}),Be=Se({client:W,user:r,webViewState:n,createSolanaWalletCallbacks:ie,recoverSolanaWalletCallbacks:le,setSolanaRecoveryFlowState:M,solanaWallet:f,setSolanaWallet:S});ke({client:W,isUserInitialized:a,user:r,oAuthState:b,setOAuthState:v,oAuthCallbacks:se,recoveryFlowState:E}),Ae({client:W,user:r,webViewLoaded:n==="loaded",createWalletCallbacks:$,recoverWalletCallbacks:Q,setWalletRecoveryCallbacks:Z,recoveryFlowState:E,oAuthState:b,setRecoveryFlowState:g,setWallet:y,appStateVisible:t});let{customAuthStateIsSettled:Ge}=Ce({client:W,user:r,isReady:a,customAuth:(ce=e.config)==null?void 0:ce.customAuth});return V.createElement(V.Fragment,null,V.createElement(ne.Provider,{value:{client:W,user:r,isReady:n!=="loading"&&a&&xe(b)&&Ge,logout:qe,getAccessToken:ze,wallet:R(R({},c),Ke),solanaWallet:R(R({},f),Be),oAuthState:b,oAuthCallbacks:se,recoveryFlowState:E,setRecoveryFlowState:g,solanaRecoveryFlowState:A,setSolanaRecoveryFlowState:M,createWalletCallbacks:$,recoverWalletCallbacks:Q,setWalletRecoveryCallbacks:Z,createSolanaWalletCallbacks:ie,recoverSolanaWalletCallbacks:le,setOAuthState:v,siweState:Te,setSiweState:je,otpState:m,setOtpState:w,passkeyState:De,setPasskeyState:Ne,farcasterState:Ve,setFarcasterState:He}},e.children),V.createElement(Mt,{style:{width:0,height:0,overflow:"hidden"}},V.createElement(be,{logLevel:e.logLevel,client:W,isClientReady:s,setWebViewState:l,webViewState:n})))};var xe=e=>e.status!=="loading",de=(e={})=>{let{user:t,oAuthState:o,setOAuthState:a,oAuthCallbacks:u,client:n}=Dt(ne),l=e.action?e.action==="login":!t;Nt(()=>{u.current={onSuccess:e.onSuccess,onError:e.onError}},[e.onSuccess,e.onError]);let s=Le(r=>{var c;let i=C(r);return a({status:"error",error:i}),(c=e==null?void 0:e.onError)==null||c.call(e,i),i},[e==null?void 0:e.onError]);return{start:Le(function(y){return p(this,arguments,function*({provider:i,redirectUri:c}){var f;a({status:"loading"});try{if(t&&e.action==="login")throw new H({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 H({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(i,L.createURL(c||"/")),m=Me.OS==="android"?S.replace("x.com","twitter.com"):S,w=yield q.openAuthSessionAsync(m);if(Me.OS==="android")return;if(w.type!=="success")throw[q.WebBrowserResultType.CANCEL,q.WebBrowserResultType.DISMISS].includes(w.type)?new H({error:"OAuth was cancelled",code:l?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):new H({error:"OAuth session failed",code:l?"failed_to_complete_login_with_oauth":"failed_to_complete_link_with_oauth"});let{queryParams:b}=L.parse(w.url),{privy_oauth_state:v,privy_oauth_code:E}=b;if(!E||!v)throw new H({error:"OAuth invalid credentials",code:l?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});let g,A;if(l){let M=yield n.auth.oauth.loginWithCode(E,v,i);g=M.user,A=M.is_new_user}else g=yield n.auth.oauth.linkWithCode(E,v,i);return(f=e==null?void 0:e.onSuccess)==null||f.call(e,g,A),yield L.openURL(w.url.split("?")[0]),a({status:"done"}),g!=null?g:void 0}catch(S){s(S)}})},[t,n,a,s]),state:o}};function Mo(e){let{state:t,start:o}=de(T(R({},e),{action:"login"}));return{state:t,login:o}}function To(e){let{state:t,start:o}=de(T(R({},e),{action:"link"}));return{state:t,link:o}}function jo(e){return de(e)}var Ue=()=>jt;function Ie(e){return{get(t){return e.get(t.replaceAll(":","-"))},put(t,o){return e.put(t.replaceAll(":","-"),o)},del(t){return e.del(t.replaceAll(":","-"))},getKeys:()=>p(this,null,function*(){return[]})}}var Fe={get(e){return k.getItemAsync(e,{keychainAccessible:k.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},put(e,t){return k.setItemAsync(e,t,{keychainAccessible:k.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},del(e){return k.deleteItemAsync(e,{keychainAccessible:k.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},getKeys:()=>p(void 0,null,function*(){return[]})};var Vo=e=>e.status==="connected",Ho=e=>e.status==="reconnecting",qo=e=>e.status==="connecting",zo=e=>e.status==="disconnected",Ko=e=>e.status==="not-created",Bo=e=>e.status==="creating",Go=e=>e.status==="error",Yo=e=>e.status==="needs-recovery";export{R as a,T as b,p as c,C as d,mr as e,wr as f,Mo as g,To as h,jo as i,Fe as j,ne as k,Co as l,ko as m,Vo as n,Ho as o,qo as p,zo as q,Ko as r,Bo as s,Go as t,Yo as u};
|
|
1
|
+
var Xe=Object.defineProperty,Je=Object.defineProperties;var $e=Object.getOwnPropertyDescriptors;var ue=Object.getOwnPropertySymbols;var Qe=Object.prototype.hasOwnProperty,Ze=Object.prototype.propertyIsEnumerable;var me=(e,t,o)=>t in e?Xe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o,R=(e,t)=>{for(var o in t||(t={}))Qe.call(t,o)&&me(e,o,t[o]);if(ue)for(var o of ue(t))Ze.call(t,o)&&me(e,o,t[o]);return e},T=(e,t)=>Je(e,$e(t));var p=(e,t,o)=>new Promise((a,u)=>{var n=d=>{try{s(o.next(d))}catch(r){u(r)}},l=d=>{try{s(o.throw(d))}catch(r){u(r)}},s=d=>d.done?a(d.value):Promise.resolve(d.value).then(n,l);s((o=o.apply(e,t)).next())});import{applicationId as jt}from"expo-application";import*as L from"expo-linking";import*as k from"expo-secure-store";import*as q from"expo-web-browser";import{useCallback as Le,useContext as Dt,useEffect as Nt}from"react";import{Platform as Me}from"react-native";import{PrivyClientError as H}from"@privy-io/js-sdk-core";import{digest as Ut}from"expo-crypto";import V,{useState as h,useMemo as It,createContext as Ft,useCallback as ae,useRef as F,useEffect as Lt}from"react";import{AppState as Oe,View as Mt}from"react-native";import Tt from"@privy-io/js-sdk-core";var pe={name:"@privy-io/expo",version:"0.21.0",description:"Expo client for the Privy Auth API",keywords:["authentication","authorization","identity","privacy","privy","user data","react-native","expo","web3"],license:"Apache-2.0",source:"./src/index.ts",main:"./dist/index.js",module:"./dist/index.mjs",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:{react:"*","react-native":"*","react-native-passkeys":"^0.2.1","react-native-webview":"*","expo-constants":"*","expo-linking":"*","expo-crypto":"*","expo-secure-store":"*","expo-application":"*","expo-web-browser":"*"},dependencies:{"@privy-io/js-sdk-core":"0.23.5","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 tt from"react";import{useCallback as rt,useEffect as ye,useRef as ot}from"react";import{AppState as at}from"react-native";import nt from"react-native-webview";var be=({client:e,isClientReady:t,setWebViewState:o,webViewState:a,logLevel:u})=>{let n=ot(null);ye(()=>{n.current&&a==="loaded"&&e.setMessagePoster(n.current)},[e,n.current,a==="loaded"]),ye(()=>at.addEventListener("change",d=>p(void 0,null,function*(){n.current&&d==="active"&&((yield e.embeddedWallet.ping(150))||(n.current.reload(),o("reloading")))})).remove,[]);let l=rt(s=>p(void 0,null,function*(){let{data:d}=s.nativeEvent,r=e.embeddedWallet.getMessageHandler();r==null||r(JSON.parse(d))}),[e]);return t?tt.createElement(nt,{style:{flex:1},ref:n,source:{uri:e.embeddedWallet.getURL()},webviewDebuggingEnabled:u==="DEBUG",onLoad:()=>o("loaded"),onError:console.error,onMessage:l}):null};import{useCallback as ee,useEffect as fe,useMemo as st}from"react";import{errorIndicatesRecoveryIsNeeded as it,getUserEmbeddedSolanaWallet as lt,PrivyClientError as D}from"@privy-io/js-sdk-core";import{getUserEmbeddedWallet as dt}from"@privy-io/js-sdk-core";import{PrivyClientError as j}from"@privy-io/js-sdk-core";function K(s){return p(this,arguments,function*({client:e,setWallet:t,createWalletCallbacks:o,recoveryMethod:a,setRecoveryFlowState:u,password:n,recoveryToken:l}){var d,r;switch(a){case"user-passcode":if(!n)throw new j({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!l)throw new j({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!l)throw new j({code:"embedded_wallet_recovery_error",error:"Recovery token is required for icloud recovery method"});break}t({status:"creating",account:null});try{let{provider:i,user:c}=yield e.embeddedWallet.create(n,a,l),y=dt(c);return(r=(d=o.current)==null?void 0:d.onSuccess)==null||r.call(d,i),t({status:"connected",provider:i,account:y}),u({status:"initial"}),i}catch(i){let c=i instanceof Error?i.message:"Error creating embedded wallet";throw t({status:"error",error:c,account:null}),u({status:"initial"}),new j({code:"embedded_wallet_creation_error",error:c})}})}function ve(u){return p(this,arguments,function*({client:e,setSolanaWallet:t,createSolanaWalletCallbacks:o,setSolanaRecoveryFlowState:a}){var n,l;t({status:"creating"});try{let s=yield e.embeddedWallet.createSolana();return(l=(n=o.current)==null?void 0:n.onSuccess)==null||l.call(n,s),t({status:"connected",publicKey:s._publicKey}),a({status:"initial"}),s}catch(s){let d=s instanceof Error?s.message:"Error creating embedded wallet";throw t({status:"error",error:d}),a({status:"initial"}),new j({code:"embedded_wallet_creation_error",error:d})}})}import{PrivyClientError as P}from"@privy-io/js-sdk-core";function B(d){return p(this,arguments,function*({client:e,account:t,setWallet:o,recoverWalletCallbacks:a,recoveryMethod:u,setRecoveryFlowState:n,password:l,recoveryToken:s}){var r,i,c,y;if(!t)throw new P({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});switch(u){case"user-passcode":if(!l)throw new P({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!s)throw new P({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!s)throw new P({code:"embedded_wallet_recovery_error",error:"Recovery token is required for icloud recovery method"});break}o({status:"connecting",account:t});try{let f=yield e.embeddedWallet.getProvider(t,l,s);return o({status:"connected",provider:f,account:t}),n({status:"initial"}),(i=(r=a.current)==null?void 0:r.onSuccess)==null||i.call(r,f),f}catch(f){o({status:"needs-recovery",account:t}),n({status:"initial"});let S=new P({code:"embedded_wallet_recovery_error",error:f instanceof Error?f.message:"Error recovering embedded wallet"});throw(y=(c=a.current)==null?void 0:c.onError)==null||y.call(c,S),S}})}function we(n){return p(this,arguments,function*({client:e,solanaAccount:t,setSolanaWallet:o,recoverSolanaWalletCallbacks:a,setSolanaRecoveryFlowState:u}){var l,s,d,r;if(!t)throw new P({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});o({status:"connecting"});try{let i=yield e.embeddedWallet.getSolanaProvider(t);return o({status:"connected",publicKey:i._publicKey}),u({status:"initial"}),(s=(l=a.current)==null?void 0:l.onSuccess)==null||s.call(l,i),i}catch(i){o({status:"needs-recovery"}),u({status:"initial"});let c=new P({code:"embedded_wallet_recovery_error",error:i instanceof Error?i.message:"Error recovering embedded wallet"});throw(r=(d=a.current)==null?void 0:d.onError)==null||r.call(d,c),c}})}var Se=({client:e,user:t,solanaWallet:o,setSolanaWallet:a,setSolanaRecoveryFlowState:u,webViewState:n,createSolanaWalletCallbacks:l,recoverSolanaWalletCallbacks:s})=>{let d=st(()=>lt(t),[t]),r=ee(()=>p(void 0,null,function*(){return yield ve({client:e,setSolanaWallet:a,createSolanaWalletCallbacks:l,setSolanaRecoveryFlowState:u})}),[e,l]),i=ee(()=>p(void 0,null,function*(){if(!d)throw new D({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});return we({client:e,solanaAccount:d,setSolanaWallet:a,recoverSolanaWalletCallbacks:s,setSolanaRecoveryFlowState:u})}),[e,d]),c=ee(()=>p(void 0,null,function*(){if(!d)throw a({status:"not-created"}),new D({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});a(y=>y.status==="connected"?{status:"reconnecting"}:{status:"connecting"});try{let y=yield e.embeddedWallet.getSolanaProvider(d);return a({status:"connected",publicKey:y._publicKey}),y}catch(y){throw it(y)?(a({status:"needs-recovery"}),new D({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):y instanceof Error?(a({status:"error",error:y.message}),new D({code:"unknown_embedded_wallet_error",error:y.message})):(a({status:"error",error:"Error loading embedded wallet"}),new D({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,d]);return fe(()=>{if(!t&&o.status!=="disconnected")return a({status:"disconnected"});n==="loaded"&&c().catch(()=>{})},[n,t,d]),fe(()=>{o.status==="error"&&o.error.includes("User must be logged in")&&c()},[o.status]),{create:r,recover:i,getProvider:c}};import{useCallback as N,useEffect as ge,useMemo as wt}from"react";import{Platform as oe}from"react-native";import{throwIfInvalidRecoveryUpgradePath as ft}from"@privy-io/js-sdk-core";import{errorIndicatesRecoveryIsNeeded as St,getUserEmbeddedWallet as Et,PrivyClientError as _}from"@privy-io/js-sdk-core";import*as G from"expo-linking";import*as he from"expo-web-browser";import{Platform as bt}from"react-native";import{PrivyClientError as x}from"@privy-io/js-sdk-core";import ct from"react-fast-compare";var Ee=e=>t=>e(o=>ct(o,t)?o:t);import{PrivyApiError as ut,PrivyClientError as mt}from"@privy-io/js-sdk-core";function C(e){return e instanceof Error||e instanceof ut||e instanceof mt?e:typeof e=="string"?new Error(e):new Error("Unknown error")}var mr=e=>new Promise(t=>setTimeout(t,e));import{useEffect as pt,useRef as yt}from"react";import{AppState as te}from"react-native";function wr(){let e=yt(te.currentState);pt(()=>te.addEventListener("change",a=>{e.current=a}).remove,[]);function t(){return te.currentState}return{appState:e,getCurrentAppState:t}}function Y(u){return p(this,arguments,function*({provider:e,redirectUri:t,client:o,onError:a}){try{let n;switch(e){case"google-drive":{let{url:r}=yield o.recovery.auth.generateURL(G.createURL(t||"/"));n=r;break}case"icloud":{let{url:r}=yield o.recovery.icloudAuth.init("expo-ios");n=r;break}default:throw new x({error:"OAuth invalid provider",code:"embedded_wallet_recovery_error"})}let l=yield he.openAuthSessionAsync(n);if(bt.OS==="android")return;if(l.type!=="success")throw new x({error:"Recovery OAuth session failed",code:"embedded_wallet_recovery_error"});let{queryParams:s}=G.parse(l.url),d;switch(e){case"google-drive":{let{privy_oauth_state:r,privy_oauth_code:i}=s;if(!i||!r)throw new x({error:"Recovery OAuth invalid credentials",code:"embedded_wallet_recovery_error"});d=yield re({oAuthCode:i,oAuthState:r,client:o});break}case"icloud":{let{ckWebAuthToken:r}=s;if(!r)throw new x({error:"Recovery iCloud token not found in query params",code:"embedded_wallet_recovery_error"});d=r;break}default:throw new x({error:"Recovery OAuth invalid provider",code:"embedded_wallet_recovery_error"})}return d}catch(n){throw a==null||a(C(n)),n}})}function re(a){return p(this,arguments,function*({oAuthCode:e,oAuthState:t,client:o}){let{access_token:u}=yield o.recovery.auth.authorize(e,t);if(!u)throw new x({error:"OAuth invalid credentials",code:"login_with_oauth_returned_with_invalid_credentials"});return u})}import{PrivyClientError as vt}from"@privy-io/js-sdk-core";function X(u){return p(this,arguments,function*({client:e,recoveryInput:t,setWalletRecoveryCallbacks:o,setRecoveryFlowState:a}){var n,l,s,d;try{let r=yield e.embeddedWallet.setRecovery(t);return(l=(n=o.current)==null?void 0:n.onSuccess)==null||l.call(n,r),a({status:"initial"}),r}catch(r){let i=new vt({code:"embedded_wallet_set_recovery_error",error:r instanceof Error?r.message:"Error setting password on embedded wallet"});throw(d=(s=o.current)==null?void 0:s.onError)==null||d.call(s,i),a({status:"initial"}),i}})}function We(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 _e=({client:e,user:t,wallet:o,setWallet:a,setRecoveryFlowState:u,webViewState:n,createWalletCallbacks:l,recoverWalletCallbacks:s,setWalletRecoveryCallbacks:d})=>{let r=wt(()=>Et(t),[t]),i=N(m=>p(void 0,null,function*(){var E;if(r)throw new _({error:"This user already has an embedded wallet",code:"embedded_wallet_already_exists"});let{password:w,recoveryMethod:b}=We(m),v;if(["google-drive","icloud"].includes(b)){if(b==="icloud"&&oe.OS==="android")throw new _({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});if(v=yield Y({provider:b,client:e,onError:(E=l.current)==null?void 0:E.onError}),u({status:"creating-wallet"}),!v)return null}return yield K({client:e,setWallet:a,createWalletCallbacks:l,recoveryMethod:b,setRecoveryFlowState:u,password:w,recoveryToken:v})}),[e,r]),c=N(m=>p(void 0,null,function*(){var v,E,g;if(o.status!=="connected")throw new _({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"});if(!r)throw new _({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});ft({currentRecoveryMethod:r.recovery_method,upgradeToRecoveryMethod:m.recoveryMethod});let w,b;switch(m.recoveryMethod){case"user-passcode":b=T(R({},m),{wallet:r,password:m.password});break;case"google-drive":case"icloud":if(m.recoveryMethod==="icloud"&&oe.OS==="android"){let A=new _({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});throw(E=(v=d.current)==null?void 0:v.onError)==null||E.call(v,A),A}if(w=yield Y({provider:m.recoveryMethod,client:e,onError:(g=d.current)==null?void 0:g.onError}),u({status:"upgrading-recovery"}),!w)return null;b={recoveryMethod:m.recoveryMethod,wallet:r,recoveryAccessToken:w};break;default:throw new _({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}return X({client:e,recoveryInput:b,setWalletRecoveryCallbacks:d,setRecoveryFlowState:u})}),[e,r,o.status]),y=N(m=>p(void 0,null,function*(){return c({recoveryMethod:"user-passcode",password:m})}),[e,r,o.status]),f=N(m=>p(void 0,null,function*(){var E;if(!r)throw new _({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{password:w,recoveryMethod:b}=We(m),v;if(["google-drive","icloud"].includes(b)){if(b==="icloud"&&oe.OS==="android")throw new _({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});if(v=yield Y({provider:b,client:e,onError:(E=s.current)==null?void 0:E.onError}),u({status:"recovering"}),!v)return null}return B({client:e,account:r,setWallet:a,recoverWalletCallbacks:s,recoveryMethod:b,setRecoveryFlowState:u,password:w,recoveryToken:v})}),[e,r]),S=N(()=>p(void 0,null,function*(){if(!r)throw a({status:"not-created",account:null}),new _({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});a(m=>m.status==="connected"?{status:"reconnecting",account:r}:{status:"connecting",account:r});try{let m=yield e.embeddedWallet.getProvider(r);return a({status:"connected",provider:m,account:r}),m}catch(m){throw St(m)?(a({status:"needs-recovery",account:r}),new _({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):m instanceof Error?(a({status:"error",error:m.message,account:r}),new _({code:"unknown_embedded_wallet_error",error:m.message})):(a({status:"error",error:"Error loading embedded wallet",account:r}),new _({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,r]);return ge(()=>{if(!t&&o.status!=="disconnected")return a({status:"disconnected",account:null});n==="loaded"&&S().catch(()=>{})},[n,t,r]),ge(()=>{o.status==="error"&&o.error.includes("User must be logged in")&&S()},[o.status]),{create:i,recover:f,setPassword:y,setRecovery:c,getProvider:S}};import{useEffect as ht,useState as gt}from"react";import{PrivyClientError as Re}from"@privy-io/js-sdk-core";var Ce=({client:e,user:t,isReady:o,customAuth:a})=>{let[u,n]=gt({status:"initial"});return ht(()=>{(()=>p(void 0,null,function*(){if(!(a!=null&&a.enabled)){n({status:"not-enabled"});return}n({status:"loading"});let{getCustomAccessToken:s,isLoading:d}=a;if(!(!o||d))try{let r=yield s();if(!r&&t){yield e.auth.logout(),n({status:"done"});return}if(!r){n({status:"done"});return}if(t){n({status:"done"});return}if(!(yield e.auth.customProvider.syncWithToken(r))){yield e.auth.logout(),n({status:"error",error:new Re({error:"Failed to sync with custom auth provider",code:"third_party_auth_error"})});return}n({status:"done"})}catch(r){if(console.log("Error syncing with custom auth provider",r),n({status:"error",error:r}),t)throw yield e.auth.logout(),new Re({error:"Third-party auth failed",code:"third_party_auth_error"})}}))()},[e,t,o,a==null?void 0:a.enabled,a==null?void 0:a.getCustomAccessToken,a==null?void 0:a.isLoading]),{customAuthState:u,customAuthStateIsSettled:u.status!=="loading"&&u.status!=="initial"}};import*as U from"expo-linking";import{useCallback as Wt,useEffect as _t}from"react";import{Platform as Rt}from"react-native";var ke=({client:e,user:t,isUserInitialized:o,oAuthState:a,oAuthCallbacks:u,setOAuthState:n,recoveryFlowState:l})=>{let s=U.useURL(),d=Wt(r=>{var c,y;let i=C(r);n({status:"error",error:i}),(y=(c=u.current).onError)==null||y.call(c,i)},[n]);return _t(()=>{function r(){return p(this,null,function*(){var f,S;if(!s||a.status!=="loading"||l.status!=="initial")return;let{queryParams:i}=U.parse(s),{privy_oauth_state:c,privy_oauth_code:y}=i;if(!y||!c){n({status:"done"});return}try{let m,w;if(t)m=yield e.auth.oauth.linkWithCode(y,c);else{let b=yield e.auth.oauth.loginWithCode(y,c);m=b.user,w=!!b.is_new_user}return(S=(f=u.current).onSuccess)==null||S.call(f,m,w),n({status:"done"}),yield U.openURL(s.split("?")[0])}catch(m){d(m)}})}Rt.OS==="android"&&o&&r()},[s,o])};import*as I from"expo-linking";import{useCallback as Ct,useEffect as kt,useMemo as At}from"react";import{Platform as Pt}from"react-native";import{getUserEmbeddedWallet as Ot}from"@privy-io/js-sdk-core";var Ae=({client:e,user:t,createWalletCallbacks:o,recoverWalletCallbacks:a,setWalletRecoveryCallbacks:u,recoveryFlowState:n,oAuthState:l,setRecoveryFlowState:s,setWallet:d,appStateVisible:r,webViewLoaded:i})=>{let c=I.useURL(),y=At(()=>Ot(t),[t]),f=Ct(S=>{var w,b,v,E;let m=C(S);n.status==="creating-wallet"?(b=(w=o.current).onError)==null||b.call(w,C(m)):(E=(v=a.current).onError)==null||E.call(v,C(m)),s({status:"initial"})},[n]);return kt(()=>{function S(){return p(this,null,function*(){if(!c&&n.status!=="initial"&&r&&f(new Error("Recovery OAuth session failed")),!c||n.status==="initial"||l.status!=="initial"||!r||!i)return;let{queryParams:m}=I.parse(c),{privy_oauth_state:w,privy_oauth_code:b}=m;if(!(!b||!w)){yield I.openURL(c.split("?")[0]);try{let v=yield re({oAuthCode:b,oAuthState:w,client:e});if(n.status==="creating-wallet")yield K({client:e,setWallet:d,createWalletCallbacks:o,recoveryMethod:"google-drive",setRecoveryFlowState:s,recoveryToken:v});else if(n.status==="upgrading-recovery"){if(!y)throw new Error("Embedded wallet not found");yield X({client:e,recoveryInput:{recoveryMethod:"google-drive",wallet:y,recoveryAccessToken:v},setWalletRecoveryCallbacks:u,setRecoveryFlowState:s})}else yield B({client:e,account:y,setWallet:d,recoverWalletCallbacks:a,recoveryMethod:"google-drive",setRecoveryFlowState:s,recoveryToken:v})}catch(v){f(v)}}})}Pt.OS==="android"&&S()},[c,n.status,r,i])};import{useEffect as xt}from"react";var Pe=({client:e,isUserInitialized:t,setIsUserInitialized:o})=>{xt(()=>{t||(()=>p(void 0,null,function*(){try{yield e.user.get()}catch(u){}finally{o(!0)}}))()},[t])};var ne=Ft({}),J;function Co(){return J?J.getAccessToken():Promise.resolve(null)}var ko=e=>{var ce;let[t,o]=h(Oe.currentState==="active");Lt(()=>{let O=Oe.addEventListener("change",Ye=>{o(Ye==="active")});return()=>{O.remove()}},[]);let[a,u]=h(!1),[n,l]=h("loading"),[s,d]=h(!1),[r,i]=h(null),[c,y]=h({status:"disconnected",account:null}),[f,S]=h({status:"disconnected"}),[m,w]=h({status:"initial"}),[b,v]=h({status:"initial"}),[E,g]=h({status:"initial"}),[A,M]=h({status:"initial"}),[Te,je]=h({status:"initial"}),[De,Ne]=h({status:"initial"}),[Ve,He]=h({status:"initial"}),se=F({}),$=F({}),Q=F({}),Z=F({}),ie=F({}),le=F({}),z=ae(O=>{if(O)return Ee(i)(O);i(null),w({status:"initial"}),v({status:"initial"}),y({status:"disconnected",account:null})},[]),W=It(()=>{let O=e.storage||Fe;return J=new Tt({storage:Ie(O),appId:e.appId,clientId:e.clientId,supportedChains:e.supportedChains,nativeAppIdentifier:Ue(),baseUrl:e.baseUrl,sdkVersion:`expo:${pe.version}`,callbacks:{setUser:z,setIsReady:d},logLevel:e.logLevel,crypto:{digest:Ut}}),J},[e.storage,e.appId,e.clientId,e.baseUrl,e.supportedChains,e.logLevel,z]),qe=ae(()=>(z(null),W.auth.logout()),[z,W]),ze=ae(()=>W.getAccessToken(),[W]);Pe({client:W,isUserInitialized:a,setIsUserInitialized:u});let Ke=_e({client:W,user:r,webViewState:n,createWalletCallbacks:$,recoverWalletCallbacks:Q,setWalletRecoveryCallbacks:Z,setRecoveryFlowState:g,wallet:c,setWallet:y}),Be=Se({client:W,user:r,webViewState:n,createSolanaWalletCallbacks:ie,recoverSolanaWalletCallbacks:le,setSolanaRecoveryFlowState:M,solanaWallet:f,setSolanaWallet:S});ke({client:W,isUserInitialized:a,user:r,oAuthState:b,setOAuthState:v,oAuthCallbacks:se,recoveryFlowState:E}),Ae({client:W,user:r,webViewLoaded:n==="loaded",createWalletCallbacks:$,recoverWalletCallbacks:Q,setWalletRecoveryCallbacks:Z,recoveryFlowState:E,oAuthState:b,setRecoveryFlowState:g,setWallet:y,appStateVisible:t});let{customAuthStateIsSettled:Ge}=Ce({client:W,user:r,isReady:a,customAuth:(ce=e.config)==null?void 0:ce.customAuth});return V.createElement(V.Fragment,null,V.createElement(ne.Provider,{value:{client:W,user:r,isReady:n!=="loading"&&a&&xe(b)&&Ge,logout:qe,getAccessToken:ze,wallet:R(R({},c),Ke),solanaWallet:R(R({},f),Be),oAuthState:b,oAuthCallbacks:se,recoveryFlowState:E,setRecoveryFlowState:g,solanaRecoveryFlowState:A,setSolanaRecoveryFlowState:M,createWalletCallbacks:$,recoverWalletCallbacks:Q,setWalletRecoveryCallbacks:Z,createSolanaWalletCallbacks:ie,recoverSolanaWalletCallbacks:le,setOAuthState:v,siweState:Te,setSiweState:je,otpState:m,setOtpState:w,passkeyState:De,setPasskeyState:Ne,farcasterState:Ve,setFarcasterState:He}},e.children),V.createElement(Mt,{style:{width:0,height:0,overflow:"hidden"}},V.createElement(be,{logLevel:e.logLevel,client:W,isClientReady:s,setWebViewState:l,webViewState:n})))};var xe=e=>e.status!=="loading",de=(e={})=>{let{user:t,oAuthState:o,setOAuthState:a,oAuthCallbacks:u,client:n}=Dt(ne),l=e.action?e.action==="login":!t;Nt(()=>{u.current={onSuccess:e.onSuccess,onError:e.onError}},[e.onSuccess,e.onError]);let s=Le(r=>{var c;let i=C(r);return a({status:"error",error:i}),(c=e==null?void 0:e.onError)==null||c.call(e,i),i},[e==null?void 0:e.onError]);return{start:Le(function(y){return p(this,arguments,function*({provider:i,redirectUri:c}){var f;a({status:"loading"});try{if(t&&e.action==="login")throw new H({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 H({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(i,L.createURL(c||"/")),m=Me.OS==="android"?S.replace("x.com","twitter.com"):S,w=yield q.openAuthSessionAsync(m);if(Me.OS==="android")return;if(w.type!=="success")throw[q.WebBrowserResultType.CANCEL,q.WebBrowserResultType.DISMISS].includes(w.type)?new H({error:"OAuth was cancelled",code:l?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):new H({error:"OAuth session failed",code:l?"failed_to_complete_login_with_oauth":"failed_to_complete_link_with_oauth"});let{queryParams:b}=L.parse(w.url),{privy_oauth_state:v,privy_oauth_code:E}=b;if(!E||!v)throw new H({error:"OAuth invalid credentials",code:l?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});let g,A;if(l){let M=yield n.auth.oauth.loginWithCode(E,v,i);g=M.user,A=M.is_new_user}else g=yield n.auth.oauth.linkWithCode(E,v,i);return(f=e==null?void 0:e.onSuccess)==null||f.call(e,g,A),yield L.openURL(w.url.split("?")[0]),a({status:"done"}),g!=null?g:void 0}catch(S){s(S)}})},[t,n,a,s]),state:o}};function Mo(e){let{state:t,start:o}=de(T(R({},e),{action:"login"}));return{state:t,login:o}}function To(e){let{state:t,start:o}=de(T(R({},e),{action:"link"}));return{state:t,link:o}}function jo(e){return de(e)}var Ue=()=>jt;function Ie(e){return{get(t){return e.get(t.replaceAll(":","-"))},put(t,o){return e.put(t.replaceAll(":","-"),o)},del(t){return e.del(t.replaceAll(":","-"))},getKeys:()=>p(this,null,function*(){return[]})}}var Fe={get(e){return k.getItemAsync(e,{keychainAccessible:k.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},put(e,t){return k.setItemAsync(e,t,{keychainAccessible:k.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},del(e){return k.deleteItemAsync(e,{keychainAccessible:k.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY})},getKeys:()=>p(void 0,null,function*(){return[]})};var Vo=e=>e.status==="connected",Ho=e=>e.status==="reconnecting",qo=e=>e.status==="connecting",zo=e=>e.status==="disconnected",Ko=e=>e.status==="not-created",Bo=e=>e.status==="creating",Go=e=>e.status==="error",Yo=e=>e.status==="needs-recovery";export{R as a,T as b,p as c,C as d,mr as e,wr as f,Mo as g,To as h,jo as i,Fe as j,ne as k,Co as l,ko as m,Vo as n,Ho as o,qo as p,zo as q,Ko as r,Bo as s,Go as t,Yo as u};
|
package/dist/esm/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as L,c as f,d as k,e as _,f as b,g as Q,h as X,i as Y,j as Z,k as h,l as _e,m as We,n as Ce,o as Le,p as be,q as ve,r as xe,s as Oe,t as Re,u as Pe}from"./chunk-UWQPCSYG.js";export*from"@privy-io/js-sdk-core";import{useCallback as P,useContext as $}from"react";import{PrivyClientError as p}from"@privy-io/js-sdk-core";var Ue=e=>{let{user:a,client:d,setSiweState:s,siweState:t}=$(h),m=P(S=>{var r;let u=k(S);return s({status:"error",error:u}),(r=e==null?void 0:e.onError)==null||r.call(e,u),u},[e==null?void 0:e.onError]),i=P(n=>f(void 0,[n],function*({wallet:S,from:{domain:u,uri:r}}){var o;try{s({status:"generating-message"});let c=yield d.auth.siwe.init(S,u,r);return s({status:"awaiting-signature"}),(o=e==null?void 0:e.onGenerateMessage)==null||o.call(e,c.message),c.message}catch(c){throw m(c)}}),[d,m,e==null?void 0:e.onGenerateMessage]),l=P(r=>f(void 0,[r],function*({signature:S,messageOverride:u}){var n;try{if(!a)throw new p({code:"attempted_link_siwe_before_logged_in",error:"Must be logged in to link a wallet, Use `useLoginWithSiwe` to login with a wallet"});s({status:"submitting-signature"});let o=yield d.auth.siwe.linkWithSiwe(S,void 0,u);return s({status:"done"}),(n=e==null?void 0:e.onSuccess)==null||n.call(e,o),o}catch(o){m(o)}}),[a,d,m,e==null?void 0:e.onSuccess]);return{generateSiweMessage:i,linkWithSiwe:l,state:t}};import{useCallback as F,useContext as ee}from"react";import{PrivyClientError as re}from"@privy-io/js-sdk-core";var ze=e=>{let{user:a,client:d,setSiweState:s,siweState:t}=ee(h),m=F(S=>{var r;let u=k(S);return s({status:"error",error:u}),(r=e==null?void 0:e.onError)==null||r.call(e,u),u},[e==null?void 0:e.onError]),i=F(n=>f(void 0,[n],function*({wallet:S,from:{domain:u,uri:r}}){var o;try{s({status:"generating-message"});let c=yield d.auth.siwe.init(S,u,r);return s({status:"awaiting-signature"}),(o=e==null?void 0:e.onGenerateMessage)==null||o.call(e,c.message),c.message}catch(c){throw m(c)}}),[d,m,e==null?void 0:e.onGenerateMessage]);return{loginWithSiwe:F(r=>f(void 0,[r],function*({signature:S,messageOverride:u}){var n;try{if(a)throw new re({code:"attempted_login_with_siwe_while_already_logged_in",error:"Already logged in, use `useLinkWithSiwe` if you are trying to link a wallet to an existing account"});s({status:"submitting-signature"});let o=yield d.auth.siwe.loginWithSiwe(S,void 0,u);return s({status:"done"}),(n=e==null?void 0:e.onSuccess)==null||n.call(e,o.user,o.is_new_user),o.user}catch(o){m(o)}}),[a,d,m,e==null?void 0:e.onSuccess]),generateSiweMessage:i,state:t}};import{useCallback as M,useContext as te,useState as ne}from"react";import{PrivyClientError as N}from"@privy-io/js-sdk-core";var Xe=e=>{let[a,d]=ne(""),{user:s,client:t,otpState:m,setOtpState:i}=te(h),l=M(r=>{var o;let n=k(r);return i({status:"error",error:n}),(o=e==null?void 0:e.onError)==null||o.call(e,n),n},[e==null?void 0:e.onError]),S=M(n=>f(void 0,[n],function*({email:r}){var o;d(r);try{i({status:"sending-code"});let c=yield t.auth.email.sendCode(r);return i({status:"awaiting-code-input"}),(o=e==null?void 0:e.onSendCodeSuccess)==null||o.call(e,{email:r}),c}catch(c){return l(c),{success:!1}}}),[t,l,e==null?void 0:e.onSendCodeSuccess]),u=M(o=>f(void 0,[o],function*({code:r,email:n}){var c;try{if(!s)throw new N({code:"attempted_link_email_before_logged_in",error:"Must be logged in to link an email, Use `useLoginWithEmail` to login with email"});let w=n||a;if(!w)throw new N({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid email before calling `linkWithCode`"});i({status:"submitting-code"});let g=yield t.auth.email.linkWithCode(w,r);return i({status:"done"}),(c=e==null?void 0:e.onLinkSuccess)==null||c.call(e,g),g}catch(w){l(w)}}),[s,t,a,l,e==null?void 0:e.onLinkSuccess]);return{sendCode:S,linkWithCode:u,state:m}};import{useCallback as H,useContext as ie,useState as ae}from"react";import{PrivyClientError as j}from"@privy-io/js-sdk-core";var tr=e=>{let[a,d]=ae(""),{user:s,client:t,otpState:m,setOtpState:i}=ie(h),l=H(r=>{var o;let n=k(r);return i({status:"error",error:n}),(o=e==null?void 0:e.onError)==null||o.call(e,n),n},[e==null?void 0:e.onError]),S=H(n=>f(void 0,[n],function*({email:r}){var o;d(r);try{i({status:"sending-code"});let c=yield t.auth.email.sendCode(r);return i({status:"awaiting-code-input"}),(o=e==null?void 0:e.onSendCodeSuccess)==null||o.call(e,{email:r}),c}catch(c){return l(c),{success:!1}}}),[t,l,e==null?void 0:e.onSendCodeSuccess]),u=H(o=>f(void 0,[o],function*({code:r,email:n}){var c;try{if(s)throw new j({code:"attempted_login_with_email_while_already_logged_in",error:"Already logged in, use `useLinkWithEmail` if you are trying to link an email to an existing account"});let w=n||a;if(!w)throw new j({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid email before calling `loginWithCode`"});i({status:"submitting-code"});let g=yield t.auth.email.loginWithCode(w,r);return i({status:"done"}),(c=e==null?void 0:e.onLoginSuccess)==null||c.call(e,g.user,g.is_new_user),g==null?void 0:g.user}catch(w){l(w)}}),[s,t,a,l,e==null?void 0:e.onLoginSuccess]);return{sendCode:S,loginWithCode:u,state:m}};import{useCallback as A,useContext as oe,useState as le}from"react";import{PrivyClientError as z}from"@privy-io/js-sdk-core";var sr=e=>{let[a,d]=le(""),{user:s,client:t,otpState:m,setOtpState:i}=oe(h),l=A(r=>{var o;let n=k(r);return i({status:"error",error:n}),(o=e==null?void 0:e.onError)==null||o.call(e,n),n},[e==null?void 0:e.onError]),S=A(n=>f(void 0,[n],function*({phone:r}){var o;d(r);try{i({status:"sending-code"});let c=yield t.auth.phone.sendCode(r);return i({status:"awaiting-code-input"}),(o=e==null?void 0:e.onSendCodeSuccess)==null||o.call(e,{phone:r}),c}catch(c){return l(c),{success:!1}}}),[t,l,e==null?void 0:e.onSendCodeSuccess]),u=A(o=>f(void 0,[o],function*({code:r,phone:n}){var c;try{if(!s)throw new z({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(!(n||a))throw new z({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid phone number before calling `linkWithCode`"});i({status:"submitting-code"});let g=yield t.auth.phone.linkWithCode(n||a,r);return i({status:"done"}),(c=e==null?void 0:e.onLinkSuccess)==null||c.call(e,g),g}catch(w){l(w)}}),[s,t,a,l,e==null?void 0:e.onLinkSuccess]);return{sendCode:S,linkWithCode:u,state:m}};import{useCallback as U,useContext as ce,useState as se}from"react";import{PrivyClientError as V}from"@privy-io/js-sdk-core";var fr=e=>{let[a,d]=se(""),{user:s,client:t,otpState:m,setOtpState:i}=ce(h),l=U(r=>{var o;let n=k(r);return i({status:"error",error:n}),(o=e==null?void 0:e.onError)==null||o.call(e,n),n},[e==null?void 0:e.onError]),S=U(n=>f(void 0,[n],function*({phone:r}){var o;d(r);try{i({status:"sending-code"});let c=yield t.auth.phone.sendCode(r);return i({status:"awaiting-code-input"}),(o=e==null?void 0:e.onSendCodeSuccess)==null||o.call(e,{phone:r}),c}catch(c){return l(c),{success:!1}}}),[t,l,e==null?void 0:e.onSendCodeSuccess]),u=U(o=>f(void 0,[o],function*({code:r,phone:n}){var c;try{if(s)throw new V({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(!(n||a))throw new V({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid phone number before calling `loginWithCode`"});i({status:"submitting-code"});let g=yield t.auth.phone.loginWithCode(n||a,r);return i({status:"done"}),(c=e==null?void 0:e.onLoginSuccess)==null||c.call(e,g.user,g.is_new_user),g==null?void 0:g.user}catch(w){l(w)}}),[s,t,a,l,e==null?void 0:e.onLoginSuccess]);return{sendCode:S,loginWithCode:u,state:m}};import*as x from"expo-linking";import{useCallback as q,useContext as ue}from"react";import{PrivyClientError as v}from"@privy-io/js-sdk-core";var Cr=e=>{let{client:a,user:d,farcasterState:s,setFarcasterState:t}=ue(h),m=q(u=>{var n;let r=k(u);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]),{appState:i,getCurrentAppState:l}=b();return{linkWithFarcaster:q((o,...c)=>f(void 0,[o,...c],function*({relyingParty:u,redirectUrl:r},n={pollAttempts:10,pollIntervalMs:1e3}){var w;try{if(!d)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:g,channel_token:y}=yield a.auth.farcaster.initializeAuth({relyingParty:u,redirectUrl:x.createURL(r!=null?r:"/")});if(!g)throw new v({code:"failed_to_generate_farcaster_uri",error:"Failed to generate farcaster uri"});if(!y)throw new v({code:"failed_to_generate_farcaster_channel_token",error:"Failed to generate farcaster channel token"});yield x.openURL(g),t({status:"polling-status"});let W=0;for(;W<n.pollAttempts;){if(i.current!=="active"&&l()!=="active"){yield _(n.pollIntervalMs);continue}let C=yield a.auth.farcaster.getFarcasterStatus({channel_token:y});if(C.state==="completed"){t({status:"submitting-token"});let E=yield a.auth.farcaster.link(L({channel_token:y},C));return t({status:"done"}),(w=e==null?void 0:e.onSuccess)==null||w.call(e,E),E}W++,yield _(n.pollIntervalMs)}throw new v({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(g){throw m(g)}}),[a,e==null?void 0:e.onSuccess,m,t,d]),state:s}};import{useCallback as B,useContext as de}from"react";var Rr=e=>{let{client:a}=de(h),d=B(t=>{var i;let m=k(t);return(i=e==null?void 0:e.onError)==null||i.call(e,m),m},[e==null?void 0:e.onError]);return{unlinkFarcaster:B(m=>f(void 0,[m],function*({fid:t}){var i;try{let l=yield a.auth.farcaster.unlink({fid:t});return(i=e==null?void 0:e.onSuccess)==null||i.call(e,l),l}catch(l){throw d(l)}}),[a,e==null?void 0:e.onSuccess,d])}};import*as R from"expo-linking";import{useCallback as J,useContext as me}from"react";import{PrivyClientError as O}from"@privy-io/js-sdk-core";var Tr=e=>{let{client:a,user:d,farcasterState:s,setFarcasterState:t}=me(h),m=J(u=>{var n;let r=k(u);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]),{appState:i,getCurrentAppState:l}=b();return{loginWithFarcaster:J((o,...c)=>f(void 0,[o,...c],function*({relyingParty:u,redirectUrl:r},n={pollAttempts:10,pollIntervalMs:1e3}){var w;try{if(d)throw new O({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:g,channel_token:y}=yield a.auth.farcaster.initializeAuth({relyingParty:u,redirectUrl:R.createURL(r!=null?r:"/")});if(!g)throw new O({code:"failed_to_generate_farcaster_uri",error:"Failed to generate farcaster uri"});if(!y)throw new O({code:"failed_to_generate_farcaster_channel_token",error:"Failed to generate farcaster channel token"});yield R.openURL(g),t({status:"polling-status"});let W=0;for(;W<n.pollAttempts;){if(i.current!=="active"&&l()!=="active"){yield _(n.pollIntervalMs);continue}let C=yield a.auth.farcaster.getFarcasterStatus({channel_token:y});if(C.state==="completed"){t({status:"submitting-token"});let E=yield a.auth.farcaster.authenticate(L({channel_token:y},C));return t({status:"done"}),(w=e==null?void 0:e.onSuccess)==null||w.call(e,E.user,E.is_new_user),E.user}W++,yield _(n.pollIntervalMs)}throw new O({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(g){throw m(g)}}),[a,m,e==null?void 0:e.onSuccess,t,d,i]),state:s}};import{useEffect as he}from"react";import{useContext as ge,useEffect as I}from"react";var D=(e={})=>{let{wallet:a,createWalletCallbacks:d,recoverWalletCallbacks:s,setWalletRecoveryCallbacks:t}=ge(h),{onCreateWalletSuccess:m,onCreateWalletError:i,onRecoverWalletError:l,onRecoverWalletSuccess:S,onSetWalletRecoverySuccess:u,onSetWalletRecoveryError:r}=e;return I(()=>{d.current={onSuccess:m,onError:i}},[m,i]),I(()=>{s.current={onSuccess:S,onError:l}},[S,l]),I(()=>{t.current={onSuccess:u,onError:r}},[S,l]),a};var qr=({onStateChange:e})=>{let a=D();return he(()=>{e(a)},[a])};import{useContext as Se,useEffect as K}from"react";var fe=(e={})=>{let{solanaWallet:a,createSolanaWalletCallbacks:d,recoverSolanaWalletCallbacks:s}=Se(h),{onCreateWalletSuccess:t,onCreateWalletError:m,onRecoverWalletError:i,onRecoverWalletSuccess:l}=e;return K(()=>{d.current={onSuccess:t,onError:m}},[t,m]),K(()=>{s.current={onSuccess:l,onError:i}},[l,i]),a};import{useContext as we}from"react";var ke=()=>{let{client:e}=we(h);return e};import{useContext as ye}from"react";var Ee=()=>{let{user:e,isReady:a,logout:d,getAccessToken:s}=ye(h);return{user:e,isReady:a,logout:d,getAccessToken:s}};export{h as PrivyContext,We as PrivyProvider,Z as SecureStorageAdapter,_e as getAccessToken,Re as hasError,Ce as isConnected,be as isConnecting,Oe as isCreating,ve as isDisconnected,xe as isNotCreated,Le as isReconnecting,Pe as needsRecovery,fe as useEmbeddedSolanaWallet,D as useEmbeddedWallet,qr as useEmbeddedWalletStateChange,Xe as useLinkEmail,sr as useLinkSMS,Cr as useLinkWithFarcaster,X as useLinkWithOAuth,Ue as useLinkWithSiwe,tr as useLoginWithEmail,Tr as useLoginWithFarcaster,Q as useLoginWithOAuth,fr as useLoginWithSMS,ze as useLoginWithSiwe,Y as useOAuthFlow,Ee as usePrivy,ke as usePrivyClient,Rr 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 xe,m as Oe,n as Re,o as Pe,p as Fe,q as Me,r as He,s as Ae,t as Ue,u as Te}from"./chunk-B3DPI6NT.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 je=e=>{let{user:s,client:d,setSiweState:o,siweState:l}=ee(h),m=M(g=>{var i;let u=f(g);return o({status:"error",error:u}),(i=e==null?void 0:e.onError)==null||i.call(e,u),u},[e==null?void 0:e.onError]),t=M(c=>S(void 0,[c],function*({wallet:g,from:{domain:u,uri:i}}){var r;try{o({status:"generating-message"});let n=yield d.auth.siwe.init(g,u,i);return o({status:"awaiting-signature"}),(r=e==null?void 0:e.onGenerateMessage)==null||r.call(e,n.message),n.message}catch(n){throw m(n)}}),[d,m,e==null?void 0:e.onGenerateMessage]),a=M(i=>S(void 0,[i],function*({signature:g,messageOverride:u}){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"});o({status:"submitting-signature"});let r=yield d.auth.siwe.linkWithSiwe(g,void 0,u);return o({status:"done"}),(c=e==null?void 0:e.onSuccess)==null||c.call(e,r),r}catch(r){m(r)}}),[s,d,m,e==null?void 0:e.onSuccess]);return{generateSiweMessage:t,linkWithSiwe:a,state:l}};import{useCallback as H,useContext as te}from"react";import{PrivyClientError as ne}from"@privy-io/js-sdk-core";var Qe=e=>{let{user:s,client:d,setSiweState:o,siweState:l}=te(h),m=H(g=>{var i;let u=f(g);return o({status:"error",error:u}),(i=e==null?void 0:e.onError)==null||i.call(e,u),u},[e==null?void 0:e.onError]),t=H(c=>S(void 0,[c],function*({wallet:g,from:{domain:u,uri:i}}){var r;try{o({status:"generating-message"});let n=yield d.auth.siwe.init(g,u,i);return o({status:"awaiting-signature"}),(r=e==null?void 0:e.onGenerateMessage)==null||r.call(e,n.message),n.message}catch(n){throw m(n)}}),[d,m,e==null?void 0:e.onGenerateMessage]);return{loginWithSiwe:H(i=>S(void 0,[i],function*({signature:g,messageOverride:u}){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"});o({status:"submitting-signature"});let r=yield d.auth.siwe.loginWithSiwe(g,void 0,u);return o({status:"done"}),(c=e==null?void 0:e.onSuccess)==null||c.call(e,r.user,r.is_new_user),r.user}catch(r){m(r)}}),[s,d,m,e==null?void 0:e.onSuccess]),generateSiweMessage:t,state:l}};import{useCallback as A,useContext as ie,useState as ae}from"react";import{PrivyClientError as q}from"@privy-io/js-sdk-core";var rr=e=>{let[s,d]=ae(""),{user:o,client:l,otpState:m,setOtpState:t}=ie(h),a=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]),g=A(c=>S(void 0,[c],function*({email:i}){var r;d(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 a(n),{success:!1}}}),[l,a,e==null?void 0:e.onSendCodeSuccess]),u=A(r=>S(void 0,[r],function*({code:i,email:c}){var n;try{if(!o)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){a(k)}}),[o,l,s,a,e==null?void 0:e.onLinkSuccess]);return{sendCode:g,linkWithCode:u,state:m}};import{useCallback as U,useContext as oe,useState as ce}from"react";import{PrivyClientError as B}from"@privy-io/js-sdk-core";var lr=e=>{let[s,d]=ce(""),{user:o,client:l,otpState:m,setOtpState:t}=oe(h),a=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]),g=U(c=>S(void 0,[c],function*({email:i}){var r;d(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 a(n),{success:!1}}}),[l,a,e==null?void 0:e.onSendCodeSuccess]),u=U(r=>S(void 0,[r],function*({code:i,email:c}){var n;try{if(o)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){a(k)}}),[o,l,s,a,e==null?void 0:e.onLoginSuccess]);return{sendCode:g,loginWithCode:u,state:m}};import{useCallback as T,useContext as le,useState as se}from"react";import{PrivyClientError as J}from"@privy-io/js-sdk-core";var Sr=e=>{let[s,d]=se(""),{user:o,client:l,otpState:m,setOtpState:t}=le(h),a=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]),g=T(c=>S(void 0,[c],function*({phone:i}){var r;d(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 a(n),{success:!1}}}),[l,a,e==null?void 0:e.onSendCodeSuccess]),u=T(r=>S(void 0,[r],function*({code:i,phone:c}){var n;try{if(!o)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){a(k)}}),[o,l,s,a,e==null?void 0:e.onLinkSuccess]);return{sendCode:g,linkWithCode:u,state:m}};import{useCallback as G,useContext as ue,useState as de}from"react";import{PrivyClientError as K}from"@privy-io/js-sdk-core";var Wr=e=>{let[s,d]=de(""),{user:o,client:l,otpState:m,setOtpState:t}=ue(h),a=G(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]),g=G(c=>S(void 0,[c],function*({phone:i}){var r;d(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 a(n),{success:!1}}}),[l,a,e==null?void 0:e.onSendCodeSuccess]),u=G(r=>S(void 0,[r],function*({code:i,phone:c}){var n;try{if(o)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){a(k)}}),[o,l,s,a,e==null?void 0:e.onLoginSuccess]);return{sendCode:g,loginWithCode:u,state:m}};import*as P from"expo-linking";import{useCallback as I,useContext as me,useEffect as ge,useRef as he}from"react";import{PrivyClientError as v}from"@privy-io/js-sdk-core";var Rr=e=>{let{appState:s,getCurrentAppState:d}=R(),{client:o,user:l,farcasterState:m,setFarcasterState:t}=me(h),a=he(!1),g=I(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]),u=I(()=>{a.current=!0},[]),i=I((k,...w)=>S(void 0,[k,...w],function*({relyingParty:c,redirectUrl:r},n={pollAttempts:10,pollIntervalMs:1e3}){var C;try{if(a.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:E}=yield o.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(!E)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(a.current)throw new v({code:"farcaster_polling_canceled",error:"Farcasting polling canceled"});if(s.current!=="active"&&d()!=="active"){yield W(n.pollIntervalMs);continue}let b=yield o.auth.farcaster.getFarcasterStatus({channel_token:E});if(b.state==="completed"){t({status:"submitting-token"});let _=yield o.auth.farcaster.link(O({channel_token:E},b));return t({status:"done"}),(C=e==null?void 0:e.onSuccess)==null||C.call(e,_),_}L++,yield W(n.pollIntervalMs)}throw new v({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(y){throw g(y)}}),[o,e==null?void 0:e.onSuccess,g,t,l]);return ge(()=>()=>{u()},[]),{linkWithFarcaster:i,state:m,cancel:u}};import{useCallback as Q,useContext as Se}from"react";var Ur=e=>{let{client:s}=Se(h),d=Q(l=>{var t;let m=f(l);return(t=e==null?void 0:e.onError)==null||t.call(e,m),m},[e==null?void 0:e.onError]);return{unlinkFarcaster:Q(m=>S(void 0,[m],function*({fid:l}){var t;try{let a=yield s.auth.farcaster.unlink({fid:l});return(t=e==null?void 0:e.onSuccess)==null||t.call(e,a),a}catch(a){throw d(a)}}),[s,e==null?void 0:e.onSuccess,d])}};import*as F from"expo-linking";import{useCallback as j,useContext as fe,useEffect as we,useRef as ke}from"react";import{PrivyClientError as x}from"@privy-io/js-sdk-core";var zr=e=>{let{appState:s,getCurrentAppState:d}=R(),{client:o,user:l,farcasterState:m,setFarcasterState:t}=fe(h),a=ke(!1),g=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]),u=j(()=>{a.current=!0},[]),i=j((k,...w)=>S(void 0,[k,...w],function*({relyingParty:c,redirectUrl:r},n={pollAttempts:10,pollIntervalMs:1e3}){var C;try{if(a.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:E}=yield o.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(!E)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(a.current)throw new x({code:"farcaster_polling_canceled",error:"Farcasting polling canceled"});if(s.current!=="active"&&d()!=="active"){yield W(n.pollIntervalMs);continue}let b=yield o.auth.farcaster.getFarcasterStatus({channel_token:E});if(b.state==="completed"){t({status:"submitting-token"});let _=yield o.auth.farcaster.authenticate(O({channel_token:E},b));return t({status:"done"}),(C=e==null?void 0:e.onSuccess)==null||C.call(e,_.user,_.is_new_user),_.user}L++,yield W(n.pollIntervalMs)}throw new x({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(y){throw g(y)}}),[o,g,e==null?void 0:e.onSuccess,t,l,s]);return we(()=>()=>{u()},[]),{loginWithFarcaster:i,state:m,cancel:u}};import{useEffect as Ee}from"react";import{useContext as ye,useEffect as z}from"react";var V=(e={})=>{let{wallet:s,createWalletCallbacks:d,recoverWalletCallbacks:o,setWalletRecoveryCallbacks:l}=ye(h),{onCreateWalletSuccess:m,onCreateWalletError:t,onRecoverWalletError:a,onRecoverWalletSuccess:g,onSetWalletRecoverySuccess:u,onSetWalletRecoveryError:i}=e;return z(()=>{d.current={onSuccess:m,onError:t}},[m,t]),z(()=>{o.current={onSuccess:g,onError:a}},[g,a]),z(()=>{l.current={onSuccess:u,onError:i}},[g,a]),s};var Yr=({onStateChange:e})=>{let s=V();return Ee(()=>{e(s)},[s])};import{useContext as _e,useEffect as X}from"react";var We=(e={})=>{let{solanaWallet:s,createSolanaWalletCallbacks:d,recoverSolanaWalletCallbacks:o}=_e(h),{onCreateWalletSuccess:l,onCreateWalletError:m,onRecoverWalletError:t,onRecoverWalletSuccess:a}=e;return X(()=>{d.current={onSuccess:l,onError:m}},[l,m]),X(()=>{o.current={onSuccess:a,onError:t}},[a,t]),s};import{useContext as Ce}from"react";var Le=()=>{let{client:e}=Ce(h);return e};import{useContext as be}from"react";var ve=()=>{let{user:e,isReady:s,logout:d,getAccessToken:o}=be(h);return{user:e,isReady:s,logout:d,getAccessToken:o}};export{h as PrivyContext,Oe as PrivyProvider,p as SecureStorageAdapter,xe as getAccessToken,Ue as hasError,Re as isConnected,Fe as isConnecting,Ae as isCreating,Me as isDisconnected,He as isNotCreated,Pe as isReconnecting,Te as needsRecovery,We as useEmbeddedSolanaWallet,V as useEmbeddedWallet,Yr as useEmbeddedWalletStateChange,rr as useLinkEmail,Sr as useLinkSMS,Rr as useLinkWithFarcaster,Z as useLinkWithOAuth,je as useLinkWithSiwe,lr as useLoginWithEmail,zr as useLoginWithFarcaster,Y as useLoginWithOAuth,Wr as useLoginWithSMS,Qe as useLoginWithSiwe,$ as useOAuthFlow,ve as usePrivy,Le as usePrivyClient,Ur 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-B3DPI6NT.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.d.ts
CHANGED
|
@@ -4,8 +4,8 @@ export * from '@privy-io/js-sdk-core';
|
|
|
4
4
|
import React from 'react';
|
|
5
5
|
import * as _privy_io_public_api from '@privy-io/public-api';
|
|
6
6
|
import { PrivyUser } from '@privy-io/public-api';
|
|
7
|
-
import { S as SiweHookOptions, a as SiweHookResult, O as OtpLinkHookOptions, b as OtpLinkHookResult, c as OtpLoginHookOptions, d as OtpLoginHookResult, L as LinkWithFarcasterOptions, F as FarcasterHookResult, e as LoginWithFarcasterOptions, E as EmbeddedWalletState, C as CreateOrRecoverEmbeddedWalletProps, f as OtpFlowState, g as OAuthFlowState, h as OAuthHookOptions, W as WalletRecoveryCallbacks, i as SolanaWalletRecoveryCallbacks, R as RecoveryFlowState, j as SiweFlowState, P as PasskeyFlowState, k as FarcasterFlowState } from './EmbeddedWalletState-
|
|
8
|
-
export { n as CustomAuthFlowState, l as EmbeddedWallet, o as EmbeddedWalletActions, p as EmbeddedWalletStatus, m as SetRecoveryProps, U as User, w as hasError, q as isConnected, s as isConnecting, v as isCreating, t as isDisconnected, u as isNotCreated, r as isReconnecting, x as needsRecovery } from './EmbeddedWalletState-
|
|
7
|
+
import { S as SiweHookOptions, a as SiweHookResult, O as OtpLinkHookOptions, b as OtpLinkHookResult, c as OtpLoginHookOptions, d as OtpLoginHookResult, L as LinkWithFarcasterOptions, F as FarcasterHookResult, e as LoginWithFarcasterOptions, E as EmbeddedWalletState, C as CreateOrRecoverEmbeddedWalletProps, f as OtpFlowState, g as OAuthFlowState, h as OAuthHookOptions, W as WalletRecoveryCallbacks, i as SolanaWalletRecoveryCallbacks, R as RecoveryFlowState, j as SiweFlowState, P as PasskeyFlowState, k as FarcasterFlowState } from './EmbeddedWalletState-0274a129.js';
|
|
8
|
+
export { n as CustomAuthFlowState, l as EmbeddedWallet, o as EmbeddedWalletActions, p as EmbeddedWalletStatus, m as SetRecoveryProps, U as User, w as hasError, q as isConnected, s as isConnecting, v as isCreating, t as isDisconnected, u as isNotCreated, r as isReconnecting, x as needsRecovery } from './EmbeddedWalletState-0274a129.js';
|
|
9
9
|
|
|
10
10
|
type CustomAuthProviderConfig = {
|
|
11
11
|
/**
|
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 _chunkUWQPCSYGjs = require('./chunk-UWQPCSYG.js');var _jssdkcore = require('@privy-io/js-sdk-core'); _createStarExport(_jssdkcore);var _react = require('react');var Ue=e=>{let{user:a,client:d,setSiweState:s,siweState:t}=_react.useContext.call(void 0, _chunkUWQPCSYGjs.k),m=_react.useCallback.call(void 0, S=>{var r;let u=_chunkUWQPCSYGjs.d.call(void 0, S);return s({status:"error",error:u}),(r=e==null?void 0:e.onError)==null||r.call(e,u),u},[e==null?void 0:e.onError]),i=_react.useCallback.call(void 0, n=>_chunkUWQPCSYGjs.c.call(void 0, void 0,[n],function*({wallet:S,from:{domain:u,uri:r}}){var o;try{s({status:"generating-message"});let c=yield d.auth.siwe.init(S,u,r);return s({status:"awaiting-signature"}),(o=e==null?void 0:e.onGenerateMessage)==null||o.call(e,c.message),c.message}catch(c){throw m(c)}}),[d,m,e==null?void 0:e.onGenerateMessage]),l=_react.useCallback.call(void 0, r=>_chunkUWQPCSYGjs.c.call(void 0, void 0,[r],function*({signature:S,messageOverride:u}){var n;try{if(!a)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_link_siwe_before_logged_in",error:"Must be logged in to link a wallet, Use `useLoginWithSiwe` to login with a wallet"});s({status:"submitting-signature"});let o=yield d.auth.siwe.linkWithSiwe(S,void 0,u);return s({status:"done"}),(n=e==null?void 0:e.onSuccess)==null||n.call(e,o),o}catch(o){m(o)}}),[a,d,m,e==null?void 0:e.onSuccess]);return{generateSiweMessage:i,linkWithSiwe:l,state:t}};var ze=e=>{let{user:a,client:d,setSiweState:s,siweState:t}=_react.useContext.call(void 0, _chunkUWQPCSYGjs.k),m=_react.useCallback.call(void 0, S=>{var r;let u=_chunkUWQPCSYGjs.d.call(void 0, S);return s({status:"error",error:u}),(r=e==null?void 0:e.onError)==null||r.call(e,u),u},[e==null?void 0:e.onError]),i=_react.useCallback.call(void 0, n=>_chunkUWQPCSYGjs.c.call(void 0, void 0,[n],function*({wallet:S,from:{domain:u,uri:r}}){var o;try{s({status:"generating-message"});let c=yield d.auth.siwe.init(S,u,r);return s({status:"awaiting-signature"}),(o=e==null?void 0:e.onGenerateMessage)==null||o.call(e,c.message),c.message}catch(c){throw m(c)}}),[d,m,e==null?void 0:e.onGenerateMessage]);return{loginWithSiwe:_react.useCallback.call(void 0, r=>_chunkUWQPCSYGjs.c.call(void 0, void 0,[r],function*({signature:S,messageOverride:u}){var n;try{if(a)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_login_with_siwe_while_already_logged_in",error:"Already logged in, use `useLinkWithSiwe` if you are trying to link a wallet to an existing account"});s({status:"submitting-signature"});let o=yield d.auth.siwe.loginWithSiwe(S,void 0,u);return s({status:"done"}),(n=e==null?void 0:e.onSuccess)==null||n.call(e,o.user,o.is_new_user),o.user}catch(o){m(o)}}),[a,d,m,e==null?void 0:e.onSuccess]),generateSiweMessage:i,state:t}};var Xe=e=>{let[a,d]=_react.useState.call(void 0, ""),{user:s,client:t,otpState:m,setOtpState:i}=_react.useContext.call(void 0, _chunkUWQPCSYGjs.k),l=_react.useCallback.call(void 0, r=>{var o;let n=_chunkUWQPCSYGjs.d.call(void 0, r);return i({status:"error",error:n}),(o=e==null?void 0:e.onError)==null||o.call(e,n),n},[e==null?void 0:e.onError]),S=_react.useCallback.call(void 0, n=>_chunkUWQPCSYGjs.c.call(void 0, void 0,[n],function*({email:r}){var o;d(r);try{i({status:"sending-code"});let c=yield t.auth.email.sendCode(r);return i({status:"awaiting-code-input"}),(o=e==null?void 0:e.onSendCodeSuccess)==null||o.call(e,{email:r}),c}catch(c){return l(c),{success:!1}}}),[t,l,e==null?void 0:e.onSendCodeSuccess]),u=_react.useCallback.call(void 0, o=>_chunkUWQPCSYGjs.c.call(void 0, void 0,[o],function*({code:r,email:n}){var c;try{if(!s)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_link_email_before_logged_in",error:"Must be logged in to link an email, Use `useLoginWithEmail` to login with email"});let w=n||a;if(!w)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid email before calling `linkWithCode`"});i({status:"submitting-code"});let g=yield t.auth.email.linkWithCode(w,r);return i({status:"done"}),(c=e==null?void 0:e.onLinkSuccess)==null||c.call(e,g),g}catch(w){l(w)}}),[s,t,a,l,e==null?void 0:e.onLinkSuccess]);return{sendCode:S,linkWithCode:u,state:m}};var tr=e=>{let[a,d]=_react.useState.call(void 0, ""),{user:s,client:t,otpState:m,setOtpState:i}=_react.useContext.call(void 0, _chunkUWQPCSYGjs.k),l=_react.useCallback.call(void 0, r=>{var o;let n=_chunkUWQPCSYGjs.d.call(void 0, r);return i({status:"error",error:n}),(o=e==null?void 0:e.onError)==null||o.call(e,n),n},[e==null?void 0:e.onError]),S=_react.useCallback.call(void 0, n=>_chunkUWQPCSYGjs.c.call(void 0, void 0,[n],function*({email:r}){var o;d(r);try{i({status:"sending-code"});let c=yield t.auth.email.sendCode(r);return i({status:"awaiting-code-input"}),(o=e==null?void 0:e.onSendCodeSuccess)==null||o.call(e,{email:r}),c}catch(c){return l(c),{success:!1}}}),[t,l,e==null?void 0:e.onSendCodeSuccess]),u=_react.useCallback.call(void 0, o=>_chunkUWQPCSYGjs.c.call(void 0, void 0,[o],function*({code:r,email:n}){var c;try{if(s)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_login_with_email_while_already_logged_in",error:"Already logged in, use `useLinkWithEmail` if you are trying to link an email to an existing account"});let w=n||a;if(!w)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid email before calling `loginWithCode`"});i({status:"submitting-code"});let g=yield t.auth.email.loginWithCode(w,r);return i({status:"done"}),(c=e==null?void 0:e.onLoginSuccess)==null||c.call(e,g.user,g.is_new_user),g==null?void 0:g.user}catch(w){l(w)}}),[s,t,a,l,e==null?void 0:e.onLoginSuccess]);return{sendCode:S,loginWithCode:u,state:m}};var sr=e=>{let[a,d]=_react.useState.call(void 0, ""),{user:s,client:t,otpState:m,setOtpState:i}=_react.useContext.call(void 0, _chunkUWQPCSYGjs.k),l=_react.useCallback.call(void 0, r=>{var o;let n=_chunkUWQPCSYGjs.d.call(void 0, r);return i({status:"error",error:n}),(o=e==null?void 0:e.onError)==null||o.call(e,n),n},[e==null?void 0:e.onError]),S=_react.useCallback.call(void 0, n=>_chunkUWQPCSYGjs.c.call(void 0, void 0,[n],function*({phone:r}){var o;d(r);try{i({status:"sending-code"});let c=yield t.auth.phone.sendCode(r);return i({status:"awaiting-code-input"}),(o=e==null?void 0:e.onSendCodeSuccess)==null||o.call(e,{phone:r}),c}catch(c){return l(c),{success:!1}}}),[t,l,e==null?void 0:e.onSendCodeSuccess]),u=_react.useCallback.call(void 0, o=>_chunkUWQPCSYGjs.c.call(void 0, void 0,[o],function*({code:r,phone:n}){var c;try{if(!s)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(!(n||a))throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid phone number before calling `linkWithCode`"});i({status:"submitting-code"});let g=yield t.auth.phone.linkWithCode(n||a,r);return i({status:"done"}),(c=e==null?void 0:e.onLinkSuccess)==null||c.call(e,g),g}catch(w){l(w)}}),[s,t,a,l,e==null?void 0:e.onLinkSuccess]);return{sendCode:S,linkWithCode:u,state:m}};var fr=e=>{let[a,d]=_react.useState.call(void 0, ""),{user:s,client:t,otpState:m,setOtpState:i}=_react.useContext.call(void 0, _chunkUWQPCSYGjs.k),l=_react.useCallback.call(void 0, r=>{var o;let n=_chunkUWQPCSYGjs.d.call(void 0, r);return i({status:"error",error:n}),(o=e==null?void 0:e.onError)==null||o.call(e,n),n},[e==null?void 0:e.onError]),S=_react.useCallback.call(void 0, n=>_chunkUWQPCSYGjs.c.call(void 0, void 0,[n],function*({phone:r}){var o;d(r);try{i({status:"sending-code"});let c=yield t.auth.phone.sendCode(r);return i({status:"awaiting-code-input"}),(o=e==null?void 0:e.onSendCodeSuccess)==null||o.call(e,{phone:r}),c}catch(c){return l(c),{success:!1}}}),[t,l,e==null?void 0:e.onSendCodeSuccess]),u=_react.useCallback.call(void 0, o=>_chunkUWQPCSYGjs.c.call(void 0, void 0,[o],function*({code:r,phone:n}){var c;try{if(s)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(!(n||a))throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid phone number before calling `loginWithCode`"});i({status:"submitting-code"});let g=yield t.auth.phone.loginWithCode(n||a,r);return i({status:"done"}),(c=e==null?void 0:e.onLoginSuccess)==null||c.call(e,g.user,g.is_new_user),g==null?void 0:g.user}catch(w){l(w)}}),[s,t,a,l,e==null?void 0:e.onLoginSuccess]);return{sendCode:S,loginWithCode:u,state:m}};var _expolinking = require('expo-linking'); var x = _interopRequireWildcard(_expolinking); var R = _interopRequireWildcard(_expolinking);var Cr=e=>{let{client:a,user:d,farcasterState:s,setFarcasterState:t}=_react.useContext.call(void 0, _chunkUWQPCSYGjs.k),m=_react.useCallback.call(void 0, u=>{var n;let r=_chunkUWQPCSYGjs.d.call(void 0, u);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]),{appState:i,getCurrentAppState:l}=_chunkUWQPCSYGjs.f.call(void 0, );return{linkWithFarcaster:_react.useCallback.call(void 0, (o,...c)=>_chunkUWQPCSYGjs.c.call(void 0, void 0,[o,...c],function*({relyingParty:u,redirectUrl:r},n={pollAttempts:10,pollIntervalMs:1e3}){var w;try{if(!d)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:g,channel_token:y}=yield a.auth.farcaster.initializeAuth({relyingParty:u,redirectUrl:x.createURL(r!=null?r:"/")});if(!g)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_generate_farcaster_uri",error:"Failed to generate farcaster uri"});if(!y)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_generate_farcaster_channel_token",error:"Failed to generate farcaster channel token"});yield x.openURL(g),t({status:"polling-status"});let W=0;for(;W<n.pollAttempts;){if(i.current!=="active"&&l()!=="active"){yield _chunkUWQPCSYGjs.e.call(void 0, n.pollIntervalMs);continue}let C=yield a.auth.farcaster.getFarcasterStatus({channel_token:y});if(C.state==="completed"){t({status:"submitting-token"});let E=yield a.auth.farcaster.link(_chunkUWQPCSYGjs.a.call(void 0, {channel_token:y},C));return t({status:"done"}),(w=e==null?void 0:e.onSuccess)==null||w.call(e,E),E}W++,yield _chunkUWQPCSYGjs.e.call(void 0, n.pollIntervalMs)}throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(g){throw m(g)}}),[a,e==null?void 0:e.onSuccess,m,t,d]),state:s}};var Rr=e=>{let{client:a}=_react.useContext.call(void 0, _chunkUWQPCSYGjs.k),d=_react.useCallback.call(void 0, t=>{var i;let m=_chunkUWQPCSYGjs.d.call(void 0, t);return(i=e==null?void 0:e.onError)==null||i.call(e,m),m},[e==null?void 0:e.onError]);return{unlinkFarcaster:_react.useCallback.call(void 0, m=>_chunkUWQPCSYGjs.c.call(void 0, void 0,[m],function*({fid:t}){var i;try{let l=yield a.auth.farcaster.unlink({fid:t});return(i=e==null?void 0:e.onSuccess)==null||i.call(e,l),l}catch(l){throw d(l)}}),[a,e==null?void 0:e.onSuccess,d])}};var Tr=e=>{let{client:a,user:d,farcasterState:s,setFarcasterState:t}=_react.useContext.call(void 0, _chunkUWQPCSYGjs.k),m=_react.useCallback.call(void 0, u=>{var n;let r=_chunkUWQPCSYGjs.d.call(void 0, u);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]),{appState:i,getCurrentAppState:l}=_chunkUWQPCSYGjs.f.call(void 0, );return{loginWithFarcaster:_react.useCallback.call(void 0, (o,...c)=>_chunkUWQPCSYGjs.c.call(void 0, void 0,[o,...c],function*({relyingParty:u,redirectUrl:r},n={pollAttempts:10,pollIntervalMs:1e3}){var w;try{if(d)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:g,channel_token:y}=yield a.auth.farcaster.initializeAuth({relyingParty:u,redirectUrl:R.createURL(r!=null?r:"/")});if(!g)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_generate_farcaster_uri",error:"Failed to generate farcaster uri"});if(!y)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_generate_farcaster_channel_token",error:"Failed to generate farcaster channel token"});yield R.openURL(g),t({status:"polling-status"});let W=0;for(;W<n.pollAttempts;){if(i.current!=="active"&&l()!=="active"){yield _chunkUWQPCSYGjs.e.call(void 0, n.pollIntervalMs);continue}let C=yield a.auth.farcaster.getFarcasterStatus({channel_token:y});if(C.state==="completed"){t({status:"submitting-token"});let E=yield a.auth.farcaster.authenticate(_chunkUWQPCSYGjs.a.call(void 0, {channel_token:y},C));return t({status:"done"}),(w=e==null?void 0:e.onSuccess)==null||w.call(e,E.user,E.is_new_user),E.user}W++,yield _chunkUWQPCSYGjs.e.call(void 0, n.pollIntervalMs)}throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(g){throw m(g)}}),[a,m,e==null?void 0:e.onSuccess,t,d,i]),state:s}};var D=(e={})=>{let{wallet:a,createWalletCallbacks:d,recoverWalletCallbacks:s,setWalletRecoveryCallbacks:t}=_react.useContext.call(void 0, _chunkUWQPCSYGjs.k),{onCreateWalletSuccess:m,onCreateWalletError:i,onRecoverWalletError:l,onRecoverWalletSuccess:S,onSetWalletRecoverySuccess:u,onSetWalletRecoveryError:r}=e;return _react.useEffect.call(void 0, ()=>{d.current={onSuccess:m,onError:i}},[m,i]),_react.useEffect.call(void 0, ()=>{s.current={onSuccess:S,onError:l}},[S,l]),_react.useEffect.call(void 0, ()=>{t.current={onSuccess:u,onError:r}},[S,l]),a};var qr=({onStateChange:e})=>{let a=D();return _react.useEffect.call(void 0, ()=>{e(a)},[a])};var fe=(e={})=>{let{solanaWallet:a,createSolanaWalletCallbacks:d,recoverSolanaWalletCallbacks:s}=_react.useContext.call(void 0, _chunkUWQPCSYGjs.k),{onCreateWalletSuccess:t,onCreateWalletError:m,onRecoverWalletError:i,onRecoverWalletSuccess:l}=e;return _react.useEffect.call(void 0, ()=>{d.current={onSuccess:t,onError:m}},[t,m]),_react.useEffect.call(void 0, ()=>{s.current={onSuccess:l,onError:i}},[l,i]),a};var ke=()=>{let{client:e}=_react.useContext.call(void 0, _chunkUWQPCSYGjs.k);return e};var Ee=()=>{let{user:e,isReady:a,logout:d,getAccessToken:s}=_react.useContext.call(void 0, _chunkUWQPCSYGjs.k);return{user:e,isReady:a,logout:d,getAccessToken:s}};exports.PrivyContext = _chunkUWQPCSYGjs.k; exports.PrivyProvider = _chunkUWQPCSYGjs.m; exports.SecureStorageAdapter = _chunkUWQPCSYGjs.j; exports.getAccessToken = _chunkUWQPCSYGjs.l; exports.hasError = _chunkUWQPCSYGjs.t; exports.isConnected = _chunkUWQPCSYGjs.n; exports.isConnecting = _chunkUWQPCSYGjs.p; exports.isCreating = _chunkUWQPCSYGjs.s; exports.isDisconnected = _chunkUWQPCSYGjs.q; exports.isNotCreated = _chunkUWQPCSYGjs.r; exports.isReconnecting = _chunkUWQPCSYGjs.o; exports.needsRecovery = _chunkUWQPCSYGjs.u; exports.useEmbeddedSolanaWallet = fe; exports.useEmbeddedWallet = D; exports.useEmbeddedWalletStateChange = qr; exports.useLinkEmail = Xe; exports.useLinkSMS = sr; exports.useLinkWithFarcaster = Cr; exports.useLinkWithOAuth = _chunkUWQPCSYGjs.h; exports.useLinkWithSiwe = Ue; exports.useLoginWithEmail = tr; exports.useLoginWithFarcaster = Tr; exports.useLoginWithOAuth = _chunkUWQPCSYGjs.g; exports.useLoginWithSMS = fr; exports.useLoginWithSiwe = ze; exports.useOAuthFlow = _chunkUWQPCSYGjs.i; exports.usePrivy = Ee; exports.usePrivyClient = ke; exports.useUnlinkFarcaster = Rr;
|
|
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 _chunkB3DPI6NTjs = require('./chunk-B3DPI6NT.js');var _jssdkcore = require('@privy-io/js-sdk-core'); _createStarExport(_jssdkcore);var _react = require('react');var je=e=>{let{user:s,client:d,setSiweState:o,siweState:l}=_react.useContext.call(void 0, _chunkB3DPI6NTjs.k),m=_react.useCallback.call(void 0, g=>{var i;let u=_chunkB3DPI6NTjs.d.call(void 0, g);return o({status:"error",error:u}),(i=e==null?void 0:e.onError)==null||i.call(e,u),u},[e==null?void 0:e.onError]),t=_react.useCallback.call(void 0, c=>_chunkB3DPI6NTjs.c.call(void 0, void 0,[c],function*({wallet:g,from:{domain:u,uri:i}}){var r;try{o({status:"generating-message"});let n=yield d.auth.siwe.init(g,u,i);return o({status:"awaiting-signature"}),(r=e==null?void 0:e.onGenerateMessage)==null||r.call(e,n.message),n.message}catch(n){throw m(n)}}),[d,m,e==null?void 0:e.onGenerateMessage]),a=_react.useCallback.call(void 0, i=>_chunkB3DPI6NTjs.c.call(void 0, void 0,[i],function*({signature:g,messageOverride:u}){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"});o({status:"submitting-signature"});let r=yield d.auth.siwe.linkWithSiwe(g,void 0,u);return o({status:"done"}),(c=e==null?void 0:e.onSuccess)==null||c.call(e,r),r}catch(r){m(r)}}),[s,d,m,e==null?void 0:e.onSuccess]);return{generateSiweMessage:t,linkWithSiwe:a,state:l}};var Qe=e=>{let{user:s,client:d,setSiweState:o,siweState:l}=_react.useContext.call(void 0, _chunkB3DPI6NTjs.k),m=_react.useCallback.call(void 0, g=>{var i;let u=_chunkB3DPI6NTjs.d.call(void 0, g);return o({status:"error",error:u}),(i=e==null?void 0:e.onError)==null||i.call(e,u),u},[e==null?void 0:e.onError]),t=_react.useCallback.call(void 0, c=>_chunkB3DPI6NTjs.c.call(void 0, void 0,[c],function*({wallet:g,from:{domain:u,uri:i}}){var r;try{o({status:"generating-message"});let n=yield d.auth.siwe.init(g,u,i);return o({status:"awaiting-signature"}),(r=e==null?void 0:e.onGenerateMessage)==null||r.call(e,n.message),n.message}catch(n){throw m(n)}}),[d,m,e==null?void 0:e.onGenerateMessage]);return{loginWithSiwe:_react.useCallback.call(void 0, i=>_chunkB3DPI6NTjs.c.call(void 0, void 0,[i],function*({signature:g,messageOverride:u}){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"});o({status:"submitting-signature"});let r=yield d.auth.siwe.loginWithSiwe(g,void 0,u);return o({status:"done"}),(c=e==null?void 0:e.onSuccess)==null||c.call(e,r.user,r.is_new_user),r.user}catch(r){m(r)}}),[s,d,m,e==null?void 0:e.onSuccess]),generateSiweMessage:t,state:l}};var rr=e=>{let[s,d]=_react.useState.call(void 0, ""),{user:o,client:l,otpState:m,setOtpState:t}=_react.useContext.call(void 0, _chunkB3DPI6NTjs.k),a=_react.useCallback.call(void 0, i=>{var r;let c=_chunkB3DPI6NTjs.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]),g=_react.useCallback.call(void 0, c=>_chunkB3DPI6NTjs.c.call(void 0, void 0,[c],function*({email:i}){var r;d(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 a(n),{success:!1}}}),[l,a,e==null?void 0:e.onSendCodeSuccess]),u=_react.useCallback.call(void 0, r=>_chunkB3DPI6NTjs.c.call(void 0, void 0,[r],function*({code:i,email:c}){var n;try{if(!o)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){a(k)}}),[o,l,s,a,e==null?void 0:e.onLinkSuccess]);return{sendCode:g,linkWithCode:u,state:m}};var lr=e=>{let[s,d]=_react.useState.call(void 0, ""),{user:o,client:l,otpState:m,setOtpState:t}=_react.useContext.call(void 0, _chunkB3DPI6NTjs.k),a=_react.useCallback.call(void 0, i=>{var r;let c=_chunkB3DPI6NTjs.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]),g=_react.useCallback.call(void 0, c=>_chunkB3DPI6NTjs.c.call(void 0, void 0,[c],function*({email:i}){var r;d(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 a(n),{success:!1}}}),[l,a,e==null?void 0:e.onSendCodeSuccess]),u=_react.useCallback.call(void 0, r=>_chunkB3DPI6NTjs.c.call(void 0, void 0,[r],function*({code:i,email:c}){var n;try{if(o)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){a(k)}}),[o,l,s,a,e==null?void 0:e.onLoginSuccess]);return{sendCode:g,loginWithCode:u,state:m}};var Sr=e=>{let[s,d]=_react.useState.call(void 0, ""),{user:o,client:l,otpState:m,setOtpState:t}=_react.useContext.call(void 0, _chunkB3DPI6NTjs.k),a=_react.useCallback.call(void 0, i=>{var r;let c=_chunkB3DPI6NTjs.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]),g=_react.useCallback.call(void 0, c=>_chunkB3DPI6NTjs.c.call(void 0, void 0,[c],function*({phone:i}){var r;d(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 a(n),{success:!1}}}),[l,a,e==null?void 0:e.onSendCodeSuccess]),u=_react.useCallback.call(void 0, r=>_chunkB3DPI6NTjs.c.call(void 0, void 0,[r],function*({code:i,phone:c}){var n;try{if(!o)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){a(k)}}),[o,l,s,a,e==null?void 0:e.onLinkSuccess]);return{sendCode:g,linkWithCode:u,state:m}};var Wr=e=>{let[s,d]=_react.useState.call(void 0, ""),{user:o,client:l,otpState:m,setOtpState:t}=_react.useContext.call(void 0, _chunkB3DPI6NTjs.k),a=_react.useCallback.call(void 0, i=>{var r;let c=_chunkB3DPI6NTjs.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]),g=_react.useCallback.call(void 0, c=>_chunkB3DPI6NTjs.c.call(void 0, void 0,[c],function*({phone:i}){var r;d(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 a(n),{success:!1}}}),[l,a,e==null?void 0:e.onSendCodeSuccess]),u=_react.useCallback.call(void 0, r=>_chunkB3DPI6NTjs.c.call(void 0, void 0,[r],function*({code:i,phone:c}){var n;try{if(o)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){a(k)}}),[o,l,s,a,e==null?void 0:e.onLoginSuccess]);return{sendCode:g,loginWithCode:u,state:m}};var _expolinking = require('expo-linking'); var P = _interopRequireWildcard(_expolinking); var F = _interopRequireWildcard(_expolinking);var Rr=e=>{let{appState:s,getCurrentAppState:d}=_chunkB3DPI6NTjs.f.call(void 0, ),{client:o,user:l,farcasterState:m,setFarcasterState:t}=_react.useContext.call(void 0, _chunkB3DPI6NTjs.k),a=_react.useRef.call(void 0, !1),g=_react.useCallback.call(void 0, c=>{var n;let r=_chunkB3DPI6NTjs.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]),u=_react.useCallback.call(void 0, ()=>{a.current=!0},[]),i=_react.useCallback.call(void 0, (k,...w)=>_chunkB3DPI6NTjs.c.call(void 0, void 0,[k,...w],function*({relyingParty:c,redirectUrl:r},n={pollAttempts:10,pollIntervalMs:1e3}){var C;try{if(a.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:E}=yield o.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(!E)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(a.current)throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_canceled",error:"Farcasting polling canceled"});if(s.current!=="active"&&d()!=="active"){yield _chunkB3DPI6NTjs.e.call(void 0, n.pollIntervalMs);continue}let b=yield o.auth.farcaster.getFarcasterStatus({channel_token:E});if(b.state==="completed"){t({status:"submitting-token"});let _=yield o.auth.farcaster.link(_chunkB3DPI6NTjs.a.call(void 0, {channel_token:E},b));return t({status:"done"}),(C=e==null?void 0:e.onSuccess)==null||C.call(e,_),_}L++,yield _chunkB3DPI6NTjs.e.call(void 0, n.pollIntervalMs)}throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(y){throw g(y)}}),[o,e==null?void 0:e.onSuccess,g,t,l]);return _react.useEffect.call(void 0, ()=>()=>{u()},[]),{linkWithFarcaster:i,state:m,cancel:u}};var Ur=e=>{let{client:s}=_react.useContext.call(void 0, _chunkB3DPI6NTjs.k),d=_react.useCallback.call(void 0, l=>{var t;let m=_chunkB3DPI6NTjs.d.call(void 0, l);return(t=e==null?void 0:e.onError)==null||t.call(e,m),m},[e==null?void 0:e.onError]);return{unlinkFarcaster:_react.useCallback.call(void 0, m=>_chunkB3DPI6NTjs.c.call(void 0, void 0,[m],function*({fid:l}){var t;try{let a=yield s.auth.farcaster.unlink({fid:l});return(t=e==null?void 0:e.onSuccess)==null||t.call(e,a),a}catch(a){throw d(a)}}),[s,e==null?void 0:e.onSuccess,d])}};var zr=e=>{let{appState:s,getCurrentAppState:d}=_chunkB3DPI6NTjs.f.call(void 0, ),{client:o,user:l,farcasterState:m,setFarcasterState:t}=_react.useContext.call(void 0, _chunkB3DPI6NTjs.k),a=_react.useRef.call(void 0, !1),g=_react.useCallback.call(void 0, c=>{var n;let r=_chunkB3DPI6NTjs.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]),u=_react.useCallback.call(void 0, ()=>{a.current=!0},[]),i=_react.useCallback.call(void 0, (k,...w)=>_chunkB3DPI6NTjs.c.call(void 0, void 0,[k,...w],function*({relyingParty:c,redirectUrl:r},n={pollAttempts:10,pollIntervalMs:1e3}){var C;try{if(a.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:E}=yield o.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(!E)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(a.current)throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_canceled",error:"Farcasting polling canceled"});if(s.current!=="active"&&d()!=="active"){yield _chunkB3DPI6NTjs.e.call(void 0, n.pollIntervalMs);continue}let b=yield o.auth.farcaster.getFarcasterStatus({channel_token:E});if(b.state==="completed"){t({status:"submitting-token"});let _=yield o.auth.farcaster.authenticate(_chunkB3DPI6NTjs.a.call(void 0, {channel_token:E},b));return t({status:"done"}),(C=e==null?void 0:e.onSuccess)==null||C.call(e,_.user,_.is_new_user),_.user}L++,yield _chunkB3DPI6NTjs.e.call(void 0, n.pollIntervalMs)}throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_timeout",error:"Farcasting polling timed out"})}catch(y){throw g(y)}}),[o,g,e==null?void 0:e.onSuccess,t,l,s]);return _react.useEffect.call(void 0, ()=>()=>{u()},[]),{loginWithFarcaster:i,state:m,cancel:u}};var V=(e={})=>{let{wallet:s,createWalletCallbacks:d,recoverWalletCallbacks:o,setWalletRecoveryCallbacks:l}=_react.useContext.call(void 0, _chunkB3DPI6NTjs.k),{onCreateWalletSuccess:m,onCreateWalletError:t,onRecoverWalletError:a,onRecoverWalletSuccess:g,onSetWalletRecoverySuccess:u,onSetWalletRecoveryError:i}=e;return _react.useEffect.call(void 0, ()=>{d.current={onSuccess:m,onError:t}},[m,t]),_react.useEffect.call(void 0, ()=>{o.current={onSuccess:g,onError:a}},[g,a]),_react.useEffect.call(void 0, ()=>{l.current={onSuccess:u,onError:i}},[g,a]),s};var Yr=({onStateChange:e})=>{let s=V();return _react.useEffect.call(void 0, ()=>{e(s)},[s])};var We=(e={})=>{let{solanaWallet:s,createSolanaWalletCallbacks:d,recoverSolanaWalletCallbacks:o}=_react.useContext.call(void 0, _chunkB3DPI6NTjs.k),{onCreateWalletSuccess:l,onCreateWalletError:m,onRecoverWalletError:t,onRecoverWalletSuccess:a}=e;return _react.useEffect.call(void 0, ()=>{d.current={onSuccess:l,onError:m}},[l,m]),_react.useEffect.call(void 0, ()=>{o.current={onSuccess:a,onError:t}},[a,t]),s};var Le=()=>{let{client:e}=_react.useContext.call(void 0, _chunkB3DPI6NTjs.k);return e};var ve=()=>{let{user:e,isReady:s,logout:d,getAccessToken:o}=_react.useContext.call(void 0, _chunkB3DPI6NTjs.k);return{user:e,isReady:s,logout:d,getAccessToken:o}};exports.PrivyContext = _chunkB3DPI6NTjs.k; exports.PrivyProvider = _chunkB3DPI6NTjs.m; exports.SecureStorageAdapter = _chunkB3DPI6NTjs.j; exports.getAccessToken = _chunkB3DPI6NTjs.l; exports.hasError = _chunkB3DPI6NTjs.t; exports.isConnected = _chunkB3DPI6NTjs.n; exports.isConnecting = _chunkB3DPI6NTjs.p; exports.isCreating = _chunkB3DPI6NTjs.s; exports.isDisconnected = _chunkB3DPI6NTjs.q; exports.isNotCreated = _chunkB3DPI6NTjs.r; exports.isReconnecting = _chunkB3DPI6NTjs.o; exports.needsRecovery = _chunkB3DPI6NTjs.u; exports.useEmbeddedSolanaWallet = We; exports.useEmbeddedWallet = V; exports.useEmbeddedWalletStateChange = Yr; exports.useLinkEmail = rr; exports.useLinkSMS = Sr; exports.useLinkWithFarcaster = Rr; exports.useLinkWithOAuth = _chunkB3DPI6NTjs.h; exports.useLinkWithSiwe = je; exports.useLoginWithEmail = lr; exports.useLoginWithFarcaster = zr; exports.useLoginWithOAuth = _chunkB3DPI6NTjs.g; exports.useLoginWithSMS = Wr; exports.useLoginWithSiwe = Qe; exports.useOAuthFlow = _chunkB3DPI6NTjs.i; exports.usePrivy = ve; exports.usePrivyClient = Le; exports.useUnlinkFarcaster = Ur;
|
package/dist/passkey.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { y as PasskeyLinkHookOptions, z as PasskeyHookResult, A as PasskeyLoginHookOptions } from './EmbeddedWalletState-
|
|
2
|
-
export { C as CreateOrRecoverEmbeddedWalletProps, n as CustomAuthFlowState, l as EmbeddedWallet, o as EmbeddedWalletActions, E as EmbeddedWalletState, p as EmbeddedWalletStatus, g as OAuthFlowState, R as RecoveryFlowState, m as SetRecoveryProps, U as User, w as hasError, q as isConnected, s as isConnecting, v as isCreating, t as isDisconnected, u as isNotCreated, r as isReconnecting, x as needsRecovery } from './EmbeddedWalletState-
|
|
1
|
+
import { y as PasskeyLinkHookOptions, z as PasskeyHookResult, A as PasskeyLoginHookOptions } from './EmbeddedWalletState-0274a129.js';
|
|
2
|
+
export { C as CreateOrRecoverEmbeddedWalletProps, n as CustomAuthFlowState, l as EmbeddedWallet, o as EmbeddedWalletActions, E as EmbeddedWalletState, p as EmbeddedWalletStatus, g as OAuthFlowState, R as RecoveryFlowState, m as SetRecoveryProps, U as User, w as hasError, q as isConnected, s as isConnecting, v as isCreating, t as isDisconnected, u as isNotCreated, r as isReconnecting, x as needsRecovery } from './EmbeddedWalletState-0274a129.js';
|
|
3
3
|
import '@privy-io/js-sdk-core';
|
|
4
4
|
import '@privy-io/public-api';
|
|
5
5
|
|
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 _chunkB3DPI6NTjs = require('./chunk-B3DPI6NT.js');var _react = require('react');var _jssdkcore = require('@privy-io/js-sdk-core');var w=e=>_chunkB3DPI6NTjs.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 _chunkB3DPI6NTjs.b.call(void 0, _chunkB3DPI6NTjs.a.call(void 0, {},r),{type:(a=r.type)!=null?a:"public-key",clientExtensionResults:{}})});var C=e=>_chunkB3DPI6NTjs.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 _chunkB3DPI6NTjs.b.call(void 0, _chunkB3DPI6NTjs.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, _chunkB3DPI6NTjs.k),d=_react.useCallback.call(void 0, o=>{var n;let u=_chunkB3DPI6NTjs.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=>_chunkB3DPI6NTjs.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, _chunkB3DPI6NTjs.k),d=_react.useCallback.call(void 0, o=>{var n;let u=_chunkB3DPI6NTjs.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=>_chunkB3DPI6NTjs.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(_chunkB3DPI6NTjs.b.call(void 0, _chunkB3DPI6NTjs.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 = _chunkB3DPI6NTjs.t; exports.isConnected = _chunkB3DPI6NTjs.n; exports.isConnecting = _chunkB3DPI6NTjs.p; exports.isCreating = _chunkB3DPI6NTjs.s; exports.isDisconnected = _chunkB3DPI6NTjs.q; exports.isNotCreated = _chunkB3DPI6NTjs.r; exports.isReconnecting = _chunkB3DPI6NTjs.o; exports.needsRecovery = _chunkB3DPI6NTjs.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.
|
|
3
|
+
"version": "0.21.0",
|
|
4
4
|
"description": "Expo client for the Privy Auth API",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"authentication",
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
"expo-web-browser": "*"
|
|
59
59
|
},
|
|
60
60
|
"dependencies": {
|
|
61
|
-
"@privy-io/js-sdk-core": "0.23.
|
|
61
|
+
"@privy-io/js-sdk-core": "0.23.5",
|
|
62
62
|
"react-fast-compare": "^3.2.2"
|
|
63
63
|
},
|
|
64
64
|
"devDependencies": {
|