@privy-io/expo 0.21.7 → 0.22.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/dist/{chunk-FVF74TBA.js → chunk-U6537SSN.js} +1 -1
- package/dist/esm/{chunk-FVF74TBA.js → chunk-U6537SSN.js} +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/passkey.js +1 -1
- package/dist/index.d.ts +200 -2
- package/dist/index.js +1 -1
- package/dist/passkey.js +1 -1
- package/package.json +2 -2
|
@@ -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 $e=Object.defineProperty,Qe=Object.defineProperties;var Ze=Object.getOwnPropertyDescriptors;var fe=Object.getOwnPropertySymbols;var et=Object.prototype.hasOwnProperty,tt=Object.prototype.propertyIsEnumerable;var we=(e,t,o)=>t in e?$e(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o,_= exports.a =(e,t)=>{for(var o in t||(t={}))et.call(t,o)&&we(e,o,t[o]);if(fe)for(var o of fe(t))tt.call(t,o)&&we(e,o,t[o]);return e},H= exports.b =(e,t)=>Qe(e,Ze(t));var y=(e,t,o)=>new Promise((a,c)=>{var n=d=>{try{l(o.next(d))}catch(r){c(r)}},i=d=>{try{l(o.throw(d))}catch(r){c(r)}},l=d=>d.done?a(d.value):Promise.resolve(d.value).then(n,i);l((o=o.apply(e,t)).next())});var _expoappleauthentication = require('expo-apple-authentication'); var qe = _interopRequireWildcard(_expoappleauthentication);var _expoapplication = require('expo-application');var _expolinking = require('expo-linking'); var M = _interopRequireWildcard(_expolinking); var Z = _interopRequireWildcard(_expolinking); var U = _interopRequireWildcard(_expolinking); var F = _interopRequireWildcard(_expolinking);var _exposecurestore = require('expo-secure-store'); var k = _interopRequireWildcard(_exposecurestore);var _expowebbrowser = require('expo-web-browser'); var G = _interopRequireWildcard(_expowebbrowser); var Oe = _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 he={name:"@privy-io/expo",version:"0.21.7",description:"Expo client for the Privy Auth API",keywords:["authentication","authorization","identity","privacy","privy","user data","react-native","expo","web3"],license:"Apache-2.0",source:"./src/index.ts",main:"./dist/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-apple-authentication":"*","expo-web-browser":"*"},dependencies:{"@privy-io/js-sdk-core":"0.24.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 ge=({client:e,isClientReady:t,setWebViewState:o,webViewState:a,logLevel:c})=>{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=>y(void 0,null,function*(){n.current&&d==="active"&&((yield e.embeddedWallet.ping(150))||(n.current.reload(),o("reloading")))})).remove,[]);let i=_react.useCallback.call(void 0, l=>y(void 0,null,function*(){let{data:d}=l.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:c==="DEBUG",onLoad:()=>o("loaded"),onError:console.error,onMessage:i}):null};function $(l){return y(this,arguments,function*({client:e,setWallet:t,createWalletCallbacks:o,recoveryMethod:a,setRecoveryFlowState:c,password:n,recoveryToken:i}){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(!i)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!i)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:s,user:u}=yield e.embeddedWallet.create(n,a,i),v=_jssdkcore.getUserEmbeddedWallet.call(void 0, u);return(r=(d=o.current)==null?void 0:d.onSuccess)==null||r.call(d,s),t({status:"connected",provider:s,account:v}),c({status:"initial"}),s}catch(s){let u=s instanceof Error?s.message:"Error creating embedded wallet";throw t({status:"error",error:u,account:null}),c({status:"initial"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:u})}})}function We(n){return y(this,arguments,function*({client:e,setSolanaWallet:t,createSolanaWalletCallbacks:o,setSolanaRecoveryFlowState:a,ethereumAccount:c}){var i,l;t({status:"creating"});try{let d=yield e.embeddedWallet.createSolana({ethereumAccount:c});return(l=(i=o.current)==null?void 0:i.onSuccess)==null||l.call(i,d),t({status:"connected",publicKey:d._publicKey}),a({status:"initial"}),d}catch(d){let r=d instanceof Error?d.message:"Error creating embedded wallet";throw t({status:"error",error:r}),a({status:"initial"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:r})}})}function Q(d){return y(this,arguments,function*({client:e,account:t,setWallet:o,recoverWalletCallbacks:a,recoveryMethod:c,setRecoveryFlowState:n,password:i,recoveryToken:l}){var r,s,u,v;if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});switch(c){case"user-passcode":if(!i)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!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}o({status:"connecting",account:t});try{let S=yield e.embeddedWallet.getProvider(t,i,l);return o({status:"connected",provider:S,account:t}),n({status:"initial"}),(s=(r=a.current)==null?void 0:r.onSuccess)==null||s.call(r,S),S}catch(S){o({status:"needs-recovery",account:t}),n({status:"initial"});let h=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:S instanceof Error?S.message:"Error recovering embedded wallet"});throw(v=(u=a.current)==null?void 0:u.onError)==null||v.call(u,h),h}})}function _e(n){return y(this,arguments,function*({client:e,solanaAccount:t,setSolanaWallet:o,recoverSolanaWalletCallbacks:a,setSolanaRecoveryFlowState:c}){var i,l,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 s=yield e.embeddedWallet.getSolanaProvider(t);return o({status:"connected",publicKey:s._publicKey}),c({status:"initial"}),(l=(i=a.current)==null?void 0:i.onSuccess)==null||l.call(i,s),s}catch(s){o({status:"needs-recovery"}),c({status:"initial"});let u=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:s instanceof Error?s.message:"Error recovering embedded wallet"});throw(r=(d=a.current)==null?void 0:d.onError)==null||r.call(d,u),u}})}var Re=({client:e,user:t,solanaWallet:o,setSolanaWallet:a,setSolanaRecoveryFlowState:c,webViewState:n,createSolanaWalletCallbacks:i,recoverSolanaWalletCallbacks:l})=>{let d=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, t),[t]),r=_react.useMemo.call(void 0, ()=>{var S;return(S=_jssdkcore.getUserEmbeddedWallet.call(void 0, t))!=null?S:void 0},[t]),s=_react.useCallback.call(void 0, ()=>y(void 0,null,function*(){return yield We({client:e,setSolanaWallet:a,createSolanaWalletCallbacks:i,setSolanaRecoveryFlowState:c,ethereumAccount:r})}),[e,i,r]),u=_react.useCallback.call(void 0, ()=>y(void 0,null,function*(){if(!d)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});return _e({client:e,solanaAccount:d,setSolanaWallet:a,recoverSolanaWalletCallbacks:l,setSolanaRecoveryFlowState:c})}),[e,d]),v=_react.useCallback.call(void 0, ()=>y(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(S=>S.status==="connected"?{status:"reconnecting"}:{status:"connecting"});try{let S=yield e.embeddedWallet.getSolanaProvider(d);return a({status:"connected",publicKey:S._publicKey}),S}catch(S){throw _jssdkcore.errorIndicatesRecoveryIsNeeded.call(void 0, S)?(a({status:"needs-recovery"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):S instanceof Error?(a({status:"error",error:S.message}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:S.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"&&v().catch(()=>{})},[n,t,d]),_react.useEffect.call(void 0, ()=>{o.status==="error"&&o.error.includes("User must be logged in")&&v()},[o.status]),{create:s,recover:u,getProvider:v}};var _reactfastcompare = require('react-fast-compare'); var _reactfastcompare2 = _interopRequireDefault(_reactfastcompare);var Ae=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 br=e=>new Promise(t=>setTimeout(t,e));function hr(){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 ee(c){return y(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(Z.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 i=yield Oe.openAuthSessionAsync(n);if(_reactnative.Platform.OS==="android")return;if(i.type!=="success")throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth session failed",code:"embedded_wallet_recovery_error"});let{queryParams:l}=Z.parse(i.url),d;switch(e){case"google-drive":{let{privy_oauth_state:r,privy_oauth_code:s}=l;if(!s||!r)throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth invalid credentials",code:"embedded_wallet_recovery_error"});d=yield ie({oAuthCode:s,oAuthState:r,client:o});break}case"icloud":{let{ckWebAuthToken:r}=l;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 ie(a){return y(this,arguments,function*({oAuthCode:e,oAuthState:t,client:o}){let{access_token:c}=yield o.recovery.auth.authorize(e,t);if(!c)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:"login_with_oauth_returned_with_invalid_credentials"});return c})}function te(n){return y(this,arguments,function*({client:e,recoveryInput:t,setWalletRecoveryCallbacks:o,setRecoveryFlowState:a,setWallet:c}){var i,l,d,r;try{let{provider:s,user:u}=yield e.embeddedWallet.setRecovery(t),v=_jssdkcore.getUserEmbeddedWallet.call(void 0, u);return c({status:"connected",provider:s,account:v}),(l=(i=o.current)==null?void 0:i.onSuccess)==null||l.call(i,s),a({status:"initial"}),s}catch(s){let u=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_set_recovery_error",error:s instanceof Error?s.message:"Error setting password on embedded wallet"});throw(r=(d=o.current)==null?void 0:d.onError)==null||r.call(d,u),a({status:"initial"}),u}})}function Pe(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 Ue=({client:e,user:t,wallet:o,setWallet:a,setRecoveryFlowState:c,webViewState:n,createWalletCallbacks:i,recoverWalletCallbacks:l,setWalletRecoveryCallbacks:d})=>{let r=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedWallet.call(void 0, t),[t]),s=_react.useCallback.call(void 0, m=>y(void 0,null,function*(){var w;if(r)throw new (0, _jssdkcore.PrivyClientError)({error:"This user already has an embedded wallet",code:"embedded_wallet_already_exists"});let{password:f,recoveryMethod:b}=Pe(m),p;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(p=yield ee({provider:b,client:e,onError:(w=i.current)==null?void 0:w.onError}),c({status:"creating-wallet"}),!p)return null}return yield $({client:e,setWallet:a,createWalletCallbacks:i,recoveryMethod:b,setRecoveryFlowState:c,password:f,recoveryToken:p})}),[e,r]),u=_react.useCallback.call(void 0, m=>y(void 0,null,function*(){var p,w,A;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 f,b;switch(m.recoveryMethod){case"user-passcode":b=H(_({},m),{wallet:r,password:m.password});break;case"google-drive":case"icloud":if(m.recoveryMethod==="icloud"&&_reactnative.Platform.OS==="android"){let R=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});throw(w=(p=d.current)==null?void 0:p.onError)==null||w.call(p,R),R}if(f=yield ee({provider:m.recoveryMethod,client:e,onError:(A=d.current)==null?void 0:A.onError}),c({status:"upgrading-recovery"}),!f)return null;b={recoveryMethod:m.recoveryMethod,wallet:r,recoveryAccessToken:f};break;default:throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}return te({client:e,recoveryInput:b,setWalletRecoveryCallbacks:d,setRecoveryFlowState:c,setWallet:a})}),[e,r,o.status]),v=_react.useCallback.call(void 0, m=>y(void 0,null,function*(){return u({recoveryMethod:"user-passcode",password:m})}),[e,r,o.status]),S=_react.useCallback.call(void 0, m=>y(void 0,null,function*(){var w;if(!r)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{password:f,recoveryMethod:b}=Pe(m),p;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(p=yield ee({provider:b,client:e,onError:(w=l.current)==null?void 0:w.onError}),c({status:"recovering"}),!p)return null}return Q({client:e,account:r,setWallet:a,recoverWalletCallbacks:l,recoveryMethod:b,setRecoveryFlowState:c,password:f,recoveryToken:p})}),[e,r]),h=_react.useCallback.call(void 0, ()=>y(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"&&h().catch(()=>{})},[n,t,r]),_react.useEffect.call(void 0, ()=>{o.status==="error"&&o.error.includes("User must be logged in")&&h()},[o.status]),{create:s,recover:S,setPassword:v,setRecovery:u,getProvider:h}};var Le=({client:e,user:t,isReady:o,customAuth:a})=>{let[c,n]=_react.useState.call(void 0, {status:"initial"});return _react.useEffect.call(void 0, ()=>{(()=>y(void 0,null,function*(){if(!(a!=null&&a.enabled)){n({status:"not-enabled"});return}n({status:"loading"});let{getCustomAccessToken:l,isLoading:d}=a;if(!(!o||d))try{let r=yield l();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:c,customAuthStateIsSettled:c.status!=="loading"&&c.status!=="initial"}};var Ie=({client:e,user:t,isUserInitialized:o,oAuthState:a,oAuthCallbacks:c,setOAuthState:n,recoveryFlowState:i})=>{let l=U.useURL(),d=_react.useCallback.call(void 0, r=>{var u,v;let s=C(r);n({status:"error",error:s}),(v=(u=c.current).onError)==null||v.call(u,s)},[n]);return _react.useEffect.call(void 0, ()=>{function r(){return y(this,null,function*(){var S,h;if(!l||a.status!=="loading"||i.status!=="initial")return;let{queryParams:s}=U.parse(l),{privy_oauth_state:u,privy_oauth_code:v}=s;if(!v||!u){n({status:"done"});return}try{let m,f;if(t)m=yield e.auth.oauth.linkWithCode(v,u);else{let b=yield e.auth.oauth.loginWithCode(v,u);m=b.user,f=!!b.is_new_user}return(h=(S=c.current).onSuccess)==null||h.call(S,m,f),n({status:"done"}),yield U.openURL(l.split("?")[0])}catch(m){d(m)}})}_reactnative.Platform.OS==="android"&&o&&r()},[l,o])};var Me=({client:e,user:t,createWalletCallbacks:o,recoverWalletCallbacks:a,setWalletRecoveryCallbacks:c,recoveryFlowState:n,oAuthState:i,setRecoveryFlowState:l,setWallet:d,appStateVisible:r,webViewLoaded:s})=>{let u=F.useURL(),v=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedWallet.call(void 0, t),[t]),S=_react.useCallback.call(void 0, h=>{var f,b,p,w;let m=C(h);n.status==="creating-wallet"?(b=(f=o.current).onError)==null||b.call(f,C(m)):(w=(p=a.current).onError)==null||w.call(p,C(m)),l({status:"initial"})},[n]);return _react.useEffect.call(void 0, ()=>{function h(){return y(this,null,function*(){if(!u&&n.status!=="initial"&&r&&S(new Error("Recovery OAuth session failed")),!u||n.status==="initial"||i.status!=="initial"||!r||!s)return;let{queryParams:m}=F.parse(u),{privy_oauth_state:f,privy_oauth_code:b}=m;if(!(!b||!f)){yield F.openURL(u.split("?")[0]);try{let p=yield ie({oAuthCode:b,oAuthState:f,client:e});if(n.status==="creating-wallet")yield $({client:e,setWallet:d,createWalletCallbacks:o,recoveryMethod:"google-drive",setRecoveryFlowState:l,recoveryToken:p});else if(n.status==="upgrading-recovery"){if(!v)throw new Error("Embedded wallet not found");yield te({client:e,recoveryInput:{recoveryMethod:"google-drive",wallet:v,recoveryAccessToken:p},setWalletRecoveryCallbacks:c,setRecoveryFlowState:l,setWallet:d})}else yield Q({client:e,account:v,setWallet:d,recoverWalletCallbacks:a,recoveryMethod:"google-drive",setRecoveryFlowState:l,recoveryToken:p})}catch(p){S(p)}}})}_reactnative.Platform.OS==="android"&&h()},[u,n.status,r,s])};var Te=({client:e,isUserInitialized:t,setIsUserInitialized:o})=>{_react.useEffect.call(void 0, ()=>{t||(()=>y(void 0,null,function*(){try{yield e.user.get()}catch(c){}finally{o(!0)}}))()},[t])};var ue=_react.createContext.call(void 0, {}),re;function Oo(){return re?re.getAccessToken():Promise.resolve(null)}var xo=e=>{var ve;let[t,o]=_react.useState.call(void 0, _reactnative.AppState.currentState==="active");_react.useEffect.call(void 0, ()=>{let x=_reactnative.AppState.addEventListener("change",Je=>{o(Je==="active")});return()=>{x.remove()}},[]);let[a,c]=_react.useState.call(void 0, !1),[n,i]=_react.useState.call(void 0, "loading"),[l,d]=_react.useState.call(void 0, !1),[r,s]=_react.useState.call(void 0, null),[u,v]=_react.useState.call(void 0, {status:"disconnected",account:null}),[S,h]=_react.useState.call(void 0, {status:"disconnected"}),[m,f]=_react.useState.call(void 0, {status:"initial"}),[b,p]=_react.useState.call(void 0, {status:"initial"}),[w,A]=_react.useState.call(void 0, {status:"initial"}),[R,Y]=_react.useState.call(void 0, {status:"initial"}),[T,j]=_react.useState.call(void 0, {status:"initial"}),[D,N]=_react.useState.call(void 0, {status:"initial"}),[V,X]=_react.useState.call(void 0, {status:"initial"}),ye=_react.useRef.call(void 0, {}),oe=_react.useRef.call(void 0, {}),ae=_react.useRef.call(void 0, {}),ne=_react.useRef.call(void 0, {}),be=_react.useRef.call(void 0, {}),Se=_react.useRef.call(void 0, {}),J=_react.useCallback.call(void 0, x=>{if(x)return Ae(s)(x);s(null),f({status:"initial"}),p({status:"initial"}),v({status:"disconnected",account:null})},[]),g=_react.useMemo.call(void 0, ()=>{let x=e.storage||He;return re=new (0, _jssdkcore2.default)({storage:Ve(x),appId:e.appId,clientId:e.clientId,supportedChains:e.supportedChains,nativeAppIdentifier:Ne(),baseUrl:e.baseUrl,sdkVersion:`expo:${he.version}`,callbacks:{setUser:J,setIsReady:d},logLevel:e.logLevel,crypto:{digest:_expocrypto.digest}}),re},[e.storage,e.appId,e.clientId,e.baseUrl,e.supportedChains,e.logLevel,J]),Be=_react.useCallback.call(void 0, ()=>(J(null),g.auth.logout()),[J,g]),Ke=_react.useCallback.call(void 0, ()=>g.getAccessToken(),[g]);Te({client:g,isUserInitialized:a,setIsUserInitialized:c});let Ge=Ue({client:g,user:r,webViewState:n,createWalletCallbacks:oe,recoverWalletCallbacks:ae,setWalletRecoveryCallbacks:ne,setRecoveryFlowState:A,wallet:u,setWallet:v}),Ye=Re({client:g,user:r,webViewState:n,createSolanaWalletCallbacks:be,recoverSolanaWalletCallbacks:Se,setSolanaRecoveryFlowState:Y,solanaWallet:S,setSolanaWallet:h});Ie({client:g,isUserInitialized:a,user:r,oAuthState:b,setOAuthState:p,oAuthCallbacks:ye,recoveryFlowState:w}),Me({client:g,user:r,webViewLoaded:n==="loaded",createWalletCallbacks:oe,recoverWalletCallbacks:ae,setWalletRecoveryCallbacks:ne,recoveryFlowState:w,oAuthState:b,setRecoveryFlowState:A,setWallet:v,appStateVisible:t});let{customAuthStateIsSettled:Xe}=Le({client:g,user:r,isReady:a,customAuth:(ve=e.config)==null?void 0:ve.customAuth});return _react2.default.createElement(_react2.default.Fragment,null,_react2.default.createElement(ue.Provider,{value:{client:g,user:r,isReady:n!=="loading"&&a&&De(b)&&Xe,logout:Be,getAccessToken:Ke,wallet:_(_({},u),Ge),solanaWallet:_(_({},S),Ye),oAuthState:b,oAuthCallbacks:ye,recoveryFlowState:w,setRecoveryFlowState:A,solanaRecoveryFlowState:R,setSolanaRecoveryFlowState:Y,createWalletCallbacks:oe,recoverWalletCallbacks:ae,setWalletRecoveryCallbacks:ne,createSolanaWalletCallbacks:be,recoverSolanaWalletCallbacks:Se,setOAuthState:p,siweState:T,setSiweState:j,otpState:m,setOtpState:f,passkeyState:D,setPasskeyState:N,farcasterState:V,setFarcasterState:X}},e.children),_react2.default.createElement(_reactnative.View,{style:{width:0,height:0,overflow:"hidden"}},_react2.default.createElement(ge,{logLevel:e.logLevel,client:g,isClientReady:l,setWebViewState:i,webViewState:n})))};var De=e=>e.status!=="loading",pe=(e={})=>{let{user:t,oAuthState:o,setOAuthState:a,oAuthCallbacks:c,client:n}=_react.useContext.call(void 0, ue),i=e.action?e.action==="login":!t;_react.useEffect.call(void 0, ()=>{c.current={onSuccess:e.onSuccess,onError:e.onError}},[e.onSuccess,e.onError]);let l=_react.useCallback.call(void 0, r=>{var u;let s=C(r);return a({status:"error",error:s}),(u=e==null?void 0:e.onError)==null||u.call(e,s),s},[e==null?void 0:e.onError]);return{start:_react.useCallback.call(void 0, function(S){return y(this,arguments,function*({provider:s,redirectUri:u,isLegacyAppleIosBehaviorEnabled:v=!1}){var h,m,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:b}=yield n.auth.oauth.generateURL(s,M.createURL(u||"/")),p,w;if(_reactnative.Platform.OS==="ios"&&s==="apple"&&!v){let N=(h=new URL(b).searchParams.get("state"))!=null?h:"",V=yield qe.signInAsync({state:N});if(!V.authorizationCode)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:i?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(i){let X=yield n.auth.oauth.loginWithCode(V.authorizationCode,N,s,"raw");p=X.user,w=X.is_new_user}else p=yield n.auth.oauth.linkWithCode(V.authorizationCode,N,s,"raw");return(m=e==null?void 0:e.onSuccess)==null||m.call(e,p,w),a({status:"done"}),p!=null?p:void 0}let A=_reactnative.Platform.OS==="android"?b.replace("x.com","twitter.com"):b,R=yield G.openAuthSessionAsync(A);if(_reactnative.Platform.OS==="android")return;if(R.type!=="success")throw[G.WebBrowserResultType.CANCEL,G.WebBrowserResultType.DISMISS].includes(R.type)?new (0, _jssdkcore.PrivyClientError)({error:"OAuth was cancelled",code:i?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):new (0, _jssdkcore.PrivyClientError)({error:"OAuth session failed",code:i?"failed_to_complete_login_with_oauth":"failed_to_complete_link_with_oauth"});let{queryParams:Y}=M.parse(R.url),{privy_oauth_state:T,privy_oauth_code:j}=Y;if(!j||!T)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:i?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(i){let D=yield n.auth.oauth.loginWithCode(j,T,s);p=D.user,w=D.is_new_user}else p=yield n.auth.oauth.linkWithCode(j,T,s);return(f=e==null?void 0:e.onSuccess)==null||f.call(e,p,w),yield M.openURL(R.url.split("?")[0]),a({status:"done"}),p!=null?p:void 0}catch(b){l(b)}})},[t,n,a,l]),state:o}};function Do(e){let{state:t,start:o}=pe(H(_({},e),{action:"login"}));return{state:t,login:o}}function No(e){let{state:t,start:o}=pe(H(_({},e),{action:"link"}));return{state:t,link:o}}function Vo(e){return pe(e)}var Ne=()=>_expoapplication.applicationId;function Ve(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:()=>y(this,null,function*(){return[]})}}var He={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:()=>y(void 0,null,function*(){return[]})};function qo(e){return e.status==="connected"}function Bo(e){return e.status==="reconnecting"}function Ko(e){return e.status==="connecting"}function Go(e){return e.status==="disconnected"}function Yo(e){return e.status==="not-created"}function Xo(e){return e.status==="creating"}function Jo(e){return e.status==="error"}function $o(e){return e.status==="needs-recovery"}exports.a = _; exports.b = H; exports.c = y; exports.d = C; exports.e = br; exports.f = hr; exports.g = Do; exports.h = No; exports.i = Vo; exports.j = He; exports.k = ue; exports.l = Oo; exports.m = xo; exports.n = qo; exports.o = Bo; exports.p = Ko; exports.q = Go; exports.r = Yo; exports.s = Xo; exports.t = Jo; exports.u = $o;
|
|
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 Qe=Object.defineProperty,Ze=Object.defineProperties;var et=Object.getOwnPropertyDescriptors;var fe=Object.getOwnPropertySymbols;var tt=Object.prototype.hasOwnProperty,rt=Object.prototype.propertyIsEnumerable;var we=(e,t,o)=>t in e?Qe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o,_= exports.a =(e,t)=>{for(var o in t||(t={}))tt.call(t,o)&&we(e,o,t[o]);if(fe)for(var o of fe(t))rt.call(t,o)&&we(e,o,t[o]);return e},H= exports.b =(e,t)=>Ze(e,et(t));var y=(e,t,o)=>new Promise((a,c)=>{var n=d=>{try{l(o.next(d))}catch(r){c(r)}},i=d=>{try{l(o.throw(d))}catch(r){c(r)}},l=d=>d.done?a(d.value):Promise.resolve(d.value).then(n,i);l((o=o.apply(e,t)).next())});var _expoappleauthentication = require('expo-apple-authentication'); var qe = _interopRequireWildcard(_expoappleauthentication);var _expoapplication = require('expo-application');var _expolinking = require('expo-linking'); var M = _interopRequireWildcard(_expolinking); var Z = _interopRequireWildcard(_expolinking); var U = _interopRequireWildcard(_expolinking); var F = _interopRequireWildcard(_expolinking);var _exposecurestore = require('expo-secure-store'); var k = _interopRequireWildcard(_exposecurestore);var _expowebbrowser = require('expo-web-browser'); var G = _interopRequireWildcard(_expowebbrowser); var Oe = _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 he={name:"@privy-io/expo",version:"0.22.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-apple-authentication":"*","expo-web-browser":"*"},dependencies:{"@privy-io/js-sdk-core":"0.25.0","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 ge=({client:e,isClientReady:t,setWebViewState:o,webViewState:a,logLevel:c})=>{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=>y(void 0,null,function*(){n.current&&d==="active"&&((yield e.embeddedWallet.ping(150))||(n.current.reload(),o("reloading")))})).remove,[]);let i=_react.useCallback.call(void 0, l=>y(void 0,null,function*(){let{data:d}=l.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:c==="DEBUG",onLoad:()=>o("loaded"),onError:console.error,onMessage:i}):null};function $(l){return y(this,arguments,function*({client:e,setWallet:t,createWalletCallbacks:o,recoveryMethod:a,setRecoveryFlowState:c,password:n,recoveryToken:i}){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(!i)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!i)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:s,user:u}=yield e.embeddedWallet.create(n,a,i),v=_jssdkcore.getUserEmbeddedWallet.call(void 0, u);return(r=(d=o.current)==null?void 0:d.onSuccess)==null||r.call(d,s),t({status:"connected",provider:s,account:v}),c({status:"initial"}),s}catch(s){let u=s instanceof Error?s.message:"Error creating embedded wallet";throw t({status:"error",error:u,account:null}),c({status:"initial"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:u})}})}function We(n){return y(this,arguments,function*({client:e,setSolanaWallet:t,createSolanaWalletCallbacks:o,setSolanaRecoveryFlowState:a,ethereumAccount:c}){var i,l;t({status:"creating"});try{let d=yield e.embeddedWallet.createSolana({ethereumAccount:c});return(l=(i=o.current)==null?void 0:i.onSuccess)==null||l.call(i,d),t({status:"connected",publicKey:d._publicKey}),a({status:"initial"}),d}catch(d){let r=d instanceof Error?d.message:"Error creating embedded wallet";throw t({status:"error",error:r}),a({status:"initial"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_creation_error",error:r})}})}function Q(d){return y(this,arguments,function*({client:e,account:t,setWallet:o,recoverWalletCallbacks:a,recoveryMethod:c,setRecoveryFlowState:n,password:i,recoveryToken:l}){var r,s,u,v;if(!t)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});switch(c){case"user-passcode":if(!i)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!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}o({status:"connecting",account:t});try{let S=yield e.embeddedWallet.getProvider(t,i,l);return o({status:"connected",provider:S,account:t}),n({status:"initial"}),(s=(r=a.current)==null?void 0:r.onSuccess)==null||s.call(r,S),S}catch(S){o({status:"needs-recovery",account:t}),n({status:"initial"});let h=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:S instanceof Error?S.message:"Error recovering embedded wallet"});throw(v=(u=a.current)==null?void 0:u.onError)==null||v.call(u,h),h}})}function _e(n){return y(this,arguments,function*({client:e,solanaAccount:t,setSolanaWallet:o,recoverSolanaWalletCallbacks:a,setSolanaRecoveryFlowState:c}){var i,l,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 s=yield e.embeddedWallet.getSolanaProvider(t);return o({status:"connected",publicKey:s._publicKey}),c({status:"initial"}),(l=(i=a.current)==null?void 0:i.onSuccess)==null||l.call(i,s),s}catch(s){o({status:"needs-recovery"}),c({status:"initial"});let u=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:s instanceof Error?s.message:"Error recovering embedded wallet"});throw(r=(d=a.current)==null?void 0:d.onError)==null||r.call(d,u),u}})}var Re=({client:e,user:t,solanaWallet:o,setSolanaWallet:a,setSolanaRecoveryFlowState:c,webViewState:n,createSolanaWalletCallbacks:i,recoverSolanaWalletCallbacks:l})=>{let d=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedSolanaWallet.call(void 0, t),[t]),r=_react.useMemo.call(void 0, ()=>{var S;return(S=_jssdkcore.getUserEmbeddedWallet.call(void 0, t))!=null?S:void 0},[t]),s=_react.useCallback.call(void 0, ()=>y(void 0,null,function*(){return yield We({client:e,setSolanaWallet:a,createSolanaWalletCallbacks:i,setSolanaRecoveryFlowState:c,ethereumAccount:r})}),[e,i,r]),u=_react.useCallback.call(void 0, ()=>y(void 0,null,function*(){if(!d)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});return _e({client:e,solanaAccount:d,setSolanaWallet:a,recoverSolanaWalletCallbacks:l,setSolanaRecoveryFlowState:c})}),[e,d]),v=_react.useCallback.call(void 0, ()=>y(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(S=>S.status==="connected"?{status:"reconnecting"}:{status:"connecting"});try{let S=yield e.embeddedWallet.getSolanaProvider(d);return a({status:"connected",publicKey:S._publicKey}),S}catch(S){throw _jssdkcore.errorIndicatesRecoveryIsNeeded.call(void 0, S)?(a({status:"needs-recovery"}),new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):S instanceof Error?(a({status:"error",error:S.message}),new (0, _jssdkcore.PrivyClientError)({code:"unknown_embedded_wallet_error",error:S.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"&&v().catch(()=>{})},[n,t,d]),_react.useEffect.call(void 0, ()=>{o.status==="error"&&o.error.includes("User must be logged in")&&v()},[o.status]),{create:s,recover:u,getProvider:v}};var _reactfastcompare = require('react-fast-compare'); var _reactfastcompare2 = _interopRequireDefault(_reactfastcompare);var Ae=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 Sr=e=>new Promise(t=>setTimeout(t,e));function Er(){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 ee(c){return y(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(Z.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 i=yield Oe.openAuthSessionAsync(n);if(_reactnative.Platform.OS==="android")return;if(i.type!=="success")throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth session failed",code:"embedded_wallet_recovery_error"});let{queryParams:l}=Z.parse(i.url),d;switch(e){case"google-drive":{let{privy_oauth_state:r,privy_oauth_code:s}=l;if(!s||!r)throw new (0, _jssdkcore.PrivyClientError)({error:"Recovery OAuth invalid credentials",code:"embedded_wallet_recovery_error"});d=yield le({oAuthCode:s,oAuthState:r,client:o});break}case"icloud":{let{ckWebAuthToken:r}=l;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 le(a){return y(this,arguments,function*({oAuthCode:e,oAuthState:t,client:o}){let{access_token:c}=yield o.recovery.auth.authorize(e,t);if(!c)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:"login_with_oauth_returned_with_invalid_credentials"});return c})}function te(n){return y(this,arguments,function*({client:e,recoveryInput:t,setWalletRecoveryCallbacks:o,setRecoveryFlowState:a,setWallet:c}){var i,l,d,r;try{let{provider:s,user:u}=yield e.embeddedWallet.setRecovery(t),v=_jssdkcore.getUserEmbeddedWallet.call(void 0, u);return c({status:"connected",provider:s,account:v}),(l=(i=o.current)==null?void 0:i.onSuccess)==null||l.call(i,s),a({status:"initial"}),s}catch(s){let u=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_set_recovery_error",error:s instanceof Error?s.message:"Error setting password on embedded wallet"});throw(r=(d=o.current)==null?void 0:d.onError)==null||r.call(d,u),a({status:"initial"}),u}})}function Pe(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 Ue=({client:e,user:t,wallet:o,setWallet:a,setRecoveryFlowState:c,webViewState:n,createWalletCallbacks:i,recoverWalletCallbacks:l,setWalletRecoveryCallbacks:d})=>{let r=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedWallet.call(void 0, t),[t]),s=_react.useCallback.call(void 0, m=>y(void 0,null,function*(){var w;if(r)throw new (0, _jssdkcore.PrivyClientError)({error:"This user already has an embedded wallet",code:"embedded_wallet_already_exists"});let{password:f,recoveryMethod:b}=Pe(m),p;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(p=yield ee({provider:b,client:e,onError:(w=i.current)==null?void 0:w.onError}),c({status:"creating-wallet"}),!p)return null}return yield $({client:e,setWallet:a,createWalletCallbacks:i,recoveryMethod:b,setRecoveryFlowState:c,password:f,recoveryToken:p})}),[e,r]),u=_react.useCallback.call(void 0, m=>y(void 0,null,function*(){var p,w,A;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 f,b;switch(m.recoveryMethod){case"user-passcode":b=H(_({},m),{wallet:r,password:m.password});break;case"google-drive":case"icloud":if(m.recoveryMethod==="icloud"&&_reactnative.Platform.OS==="android"){let R=new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});throw(w=(p=d.current)==null?void 0:p.onError)==null||w.call(p,R),R}if(f=yield ee({provider:m.recoveryMethod,client:e,onError:(A=d.current)==null?void 0:A.onError}),c({status:"upgrading-recovery"}),!f)return null;b={recoveryMethod:m.recoveryMethod,wallet:r,recoveryAccessToken:f};break;default:throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}return te({client:e,recoveryInput:b,setWalletRecoveryCallbacks:d,setRecoveryFlowState:c,setWallet:a})}),[e,r,o.status]),v=_react.useCallback.call(void 0, m=>y(void 0,null,function*(){return u({recoveryMethod:"user-passcode",password:m})}),[e,r,o.status]),S=_react.useCallback.call(void 0, m=>y(void 0,null,function*(){var w;if(!r)throw new (0, _jssdkcore.PrivyClientError)({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{password:f,recoveryMethod:b}=Pe(m),p;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(p=yield ee({provider:b,client:e,onError:(w=l.current)==null?void 0:w.onError}),c({status:"recovering"}),!p)return null}return Q({client:e,account:r,setWallet:a,recoverWalletCallbacks:l,recoveryMethod:b,setRecoveryFlowState:c,password:f,recoveryToken:p})}),[e,r]),h=_react.useCallback.call(void 0, ()=>y(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"&&h().catch(()=>{})},[n,t,r]),_react.useEffect.call(void 0, ()=>{o.status==="error"&&o.error.includes("User must be logged in")&&h()},[o.status]),{create:s,recover:S,setPassword:v,setRecovery:u,getProvider:h}};var Le=({client:e,user:t,isReady:o,customAuth:a})=>{let[c,n]=_react.useState.call(void 0, {status:"initial"});return _react.useEffect.call(void 0, ()=>{(()=>y(void 0,null,function*(){if(!(a!=null&&a.enabled)){n({status:"not-enabled"});return}n({status:"loading"});let{getCustomAccessToken:l,isLoading:d}=a;if(!(!o||d))try{let r=yield l();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:c,customAuthStateIsSettled:c.status!=="loading"&&c.status!=="initial"}};var Ie=({client:e,user:t,isUserInitialized:o,oAuthState:a,oAuthCallbacks:c,setOAuthState:n,recoveryFlowState:i})=>{let l=U.useURL(),d=_react.useCallback.call(void 0, r=>{var u,v;let s=C(r);n({status:"error",error:s}),(v=(u=c.current).onError)==null||v.call(u,s)},[n]);return _react.useEffect.call(void 0, ()=>{function r(){return y(this,null,function*(){var S,h;if(!l||a.status!=="loading"||i.status!=="initial")return;let{queryParams:s}=U.parse(l),{privy_oauth_state:u,privy_oauth_code:v}=s;if(!v||!u){n({status:"done"});return}try{let m,f;if(t)m=yield e.auth.oauth.linkWithCode(v,u);else{let b=yield e.auth.oauth.loginWithCode(v,u);m=b.user,f=!!b.is_new_user}return(h=(S=c.current).onSuccess)==null||h.call(S,m,f),n({status:"done"}),yield U.openURL(l.split("?")[0])}catch(m){d(m)}})}_reactnative.Platform.OS==="android"&&o&&r()},[l,o])};var Me=({client:e,user:t,createWalletCallbacks:o,recoverWalletCallbacks:a,setWalletRecoveryCallbacks:c,recoveryFlowState:n,oAuthState:i,setRecoveryFlowState:l,setWallet:d,appStateVisible:r,webViewLoaded:s})=>{let u=F.useURL(),v=_react.useMemo.call(void 0, ()=>_jssdkcore.getUserEmbeddedWallet.call(void 0, t),[t]),S=_react.useCallback.call(void 0, h=>{var f,b,p,w;let m=C(h);n.status==="creating-wallet"?(b=(f=o.current).onError)==null||b.call(f,C(m)):(w=(p=a.current).onError)==null||w.call(p,C(m)),l({status:"initial"})},[n]);return _react.useEffect.call(void 0, ()=>{function h(){return y(this,null,function*(){if(!u&&n.status!=="initial"&&r&&S(new Error("Recovery OAuth session failed")),!u||n.status==="initial"||i.status!=="initial"||!r||!s)return;let{queryParams:m}=F.parse(u),{privy_oauth_state:f,privy_oauth_code:b}=m;if(!(!b||!f)){yield F.openURL(u.split("?")[0]);try{let p=yield le({oAuthCode:b,oAuthState:f,client:e});if(n.status==="creating-wallet")yield $({client:e,setWallet:d,createWalletCallbacks:o,recoveryMethod:"google-drive",setRecoveryFlowState:l,recoveryToken:p});else if(n.status==="upgrading-recovery"){if(!v)throw new Error("Embedded wallet not found");yield te({client:e,recoveryInput:{recoveryMethod:"google-drive",wallet:v,recoveryAccessToken:p},setWalletRecoveryCallbacks:c,setRecoveryFlowState:l,setWallet:d})}else yield Q({client:e,account:v,setWallet:d,recoverWalletCallbacks:a,recoveryMethod:"google-drive",setRecoveryFlowState:l,recoveryToken:p})}catch(p){S(p)}}})}_reactnative.Platform.OS==="android"&&h()},[u,n.status,r,s])};var Te=({client:e,isUserInitialized:t,setIsUserInitialized:o})=>{_react.useEffect.call(void 0, ()=>{t||(()=>y(void 0,null,function*(){try{yield e.user.get()}catch(c){}finally{o(!0)}}))()},[t])};var ue=_react.createContext.call(void 0, {}),oe;function xo(){return oe?oe.getAccessToken():Promise.resolve(null)}var Po=e=>{var ve;let[t,o]=_react.useState.call(void 0, _reactnative.AppState.currentState==="active");_react.useEffect.call(void 0, ()=>{let x=_reactnative.AppState.addEventListener("change",$e=>{o($e==="active")});return()=>{x.remove()}},[]);let[a,c]=_react.useState.call(void 0, !1),[n,i]=_react.useState.call(void 0, "loading"),[l,d]=_react.useState.call(void 0, !1),[r,s]=_react.useState.call(void 0, null),[u,v]=_react.useState.call(void 0, {status:"disconnected",account:null}),[S,h]=_react.useState.call(void 0, {status:"disconnected"}),[m,f]=_react.useState.call(void 0, {status:"initial"}),[b,p]=_react.useState.call(void 0, {status:"initial"}),[w,A]=_react.useState.call(void 0, {status:"initial"}),[R,Y]=_react.useState.call(void 0, {status:"initial"}),[T,j]=_react.useState.call(void 0, {status:"initial"}),[D,N]=_react.useState.call(void 0, {status:"initial"}),[V,X]=_react.useState.call(void 0, {status:"initial"}),ye=_react.useRef.call(void 0, {}),ae=_react.useRef.call(void 0, {}),ne=_react.useRef.call(void 0, {}),de=_react.useRef.call(void 0, {}),be=_react.useRef.call(void 0, {}),Se=_react.useRef.call(void 0, {}),J=_react.useCallback.call(void 0, x=>{if(x)return Ae(s)(x);s(null),f({status:"initial"}),p({status:"initial"}),v({status:"disconnected",account:null})},[]),E=_react.useMemo.call(void 0, ()=>{let x=e.storage||He;return oe=new (0, _jssdkcore2.default)({storage:Ve(x),appId:e.appId,clientId:e.clientId,supportedChains:e.supportedChains,nativeAppIdentifier:Ne(),baseUrl:e.baseUrl,sdkVersion:`expo:${he.version}`,callbacks:{setUser:J,setIsReady:d},logLevel:e.logLevel,crypto:{digest:_expocrypto.digest}}),oe},[e.storage,e.appId,e.clientId,e.baseUrl,e.supportedChains,e.logLevel,J]),Be=_react.useCallback.call(void 0, ()=>(J(null),E.auth.logout()),[J,E]),Ke=_react.useCallback.call(void 0, ()=>E.getAccessToken(),[E]),Ge=_react.useCallback.call(void 0, ()=>E.getIdentityToken(),[E]);Te({client:E,isUserInitialized:a,setIsUserInitialized:c});let Ye=Ue({client:E,user:r,webViewState:n,createWalletCallbacks:ae,recoverWalletCallbacks:ne,setWalletRecoveryCallbacks:de,setRecoveryFlowState:A,wallet:u,setWallet:v}),Xe=Re({client:E,user:r,webViewState:n,createSolanaWalletCallbacks:be,recoverSolanaWalletCallbacks:Se,setSolanaRecoveryFlowState:Y,solanaWallet:S,setSolanaWallet:h});Ie({client:E,isUserInitialized:a,user:r,oAuthState:b,setOAuthState:p,oAuthCallbacks:ye,recoveryFlowState:w}),Me({client:E,user:r,webViewLoaded:n==="loaded",createWalletCallbacks:ae,recoverWalletCallbacks:ne,setWalletRecoveryCallbacks:de,recoveryFlowState:w,oAuthState:b,setRecoveryFlowState:A,setWallet:v,appStateVisible:t});let{customAuthStateIsSettled:Je}=Le({client:E,user:r,isReady:a,customAuth:(ve=e.config)==null?void 0:ve.customAuth});return _react2.default.createElement(_react2.default.Fragment,null,_react2.default.createElement(ue.Provider,{value:{client:E,user:r,isReady:n!=="loading"&&a&&De(b)&&Je,logout:Be,getAccessToken:Ke,getIdentityToken:Ge,wallet:_(_({},u),Ye),solanaWallet:_(_({},S),Xe),oAuthState:b,oAuthCallbacks:ye,recoveryFlowState:w,setRecoveryFlowState:A,solanaRecoveryFlowState:R,setSolanaRecoveryFlowState:Y,createWalletCallbacks:ae,recoverWalletCallbacks:ne,setWalletRecoveryCallbacks:de,createSolanaWalletCallbacks:be,recoverSolanaWalletCallbacks:Se,setOAuthState:p,siweState:T,setSiweState:j,otpState:m,setOtpState:f,passkeyState:D,setPasskeyState:N,farcasterState:V,setFarcasterState:X}},e.children),_react2.default.createElement(_reactnative.View,{style:{width:0,height:0,overflow:"hidden"}},_react2.default.createElement(ge,{logLevel:e.logLevel,client:E,isClientReady:l,setWebViewState:i,webViewState:n})))};var De=e=>e.status!=="loading",pe=(e={})=>{let{user:t,oAuthState:o,setOAuthState:a,oAuthCallbacks:c,client:n}=_react.useContext.call(void 0, ue),i=e.action?e.action==="login":!t;_react.useEffect.call(void 0, ()=>{c.current={onSuccess:e.onSuccess,onError:e.onError}},[e.onSuccess,e.onError]);let l=_react.useCallback.call(void 0, r=>{var u;let s=C(r);return a({status:"error",error:s}),(u=e==null?void 0:e.onError)==null||u.call(e,s),s},[e==null?void 0:e.onError]);return{start:_react.useCallback.call(void 0, function(S){return y(this,arguments,function*({provider:s,redirectUri:u,isLegacyAppleIosBehaviorEnabled:v=!1}){var h,m,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:b}=yield n.auth.oauth.generateURL(s,M.createURL(u||"/")),p,w;if(_reactnative.Platform.OS==="ios"&&s==="apple"&&!v){let N=(h=new URL(b).searchParams.get("state"))!=null?h:"",V=yield qe.signInAsync({state:N});if(!V.authorizationCode)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:i?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(i){let X=yield n.auth.oauth.loginWithCode(V.authorizationCode,N,s,"raw");p=X.user,w=X.is_new_user}else p=yield n.auth.oauth.linkWithCode(V.authorizationCode,N,s,"raw");return(m=e==null?void 0:e.onSuccess)==null||m.call(e,p,w),a({status:"done"}),p!=null?p:void 0}let A=_reactnative.Platform.OS==="android"?b.replace("x.com","twitter.com"):b,R=yield G.openAuthSessionAsync(A);if(_reactnative.Platform.OS==="android")return;if(R.type!=="success")throw[G.WebBrowserResultType.CANCEL,G.WebBrowserResultType.DISMISS].includes(R.type)?new (0, _jssdkcore.PrivyClientError)({error:"OAuth was cancelled",code:i?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):new (0, _jssdkcore.PrivyClientError)({error:"OAuth session failed",code:i?"failed_to_complete_login_with_oauth":"failed_to_complete_link_with_oauth"});let{queryParams:Y}=M.parse(R.url),{privy_oauth_state:T,privy_oauth_code:j}=Y;if(!j||!T)throw new (0, _jssdkcore.PrivyClientError)({error:"OAuth invalid credentials",code:i?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(i){let D=yield n.auth.oauth.loginWithCode(j,T,s);p=D.user,w=D.is_new_user}else p=yield n.auth.oauth.linkWithCode(j,T,s);return(f=e==null?void 0:e.onSuccess)==null||f.call(e,p,w),yield M.openURL(R.url.split("?")[0]),a({status:"done"}),p!=null?p:void 0}catch(b){l(b)}})},[t,n,a,l]),state:o}};function No(e){let{state:t,start:o}=pe(H(_({},e),{action:"login"}));return{state:t,login:o}}function Vo(e){let{state:t,start:o}=pe(H(_({},e),{action:"link"}));return{state:t,link:o}}function Ho(e){return pe(e)}var Ne=()=>_expoapplication.applicationId;function Ve(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:()=>y(this,null,function*(){return[]})}}var He={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:()=>y(void 0,null,function*(){return[]})};function Bo(e){return e.status==="connected"}function Ko(e){return e.status==="reconnecting"}function Go(e){return e.status==="connecting"}function Yo(e){return e.status==="disconnected"}function Xo(e){return e.status==="not-created"}function Jo(e){return e.status==="creating"}function $o(e){return e.status==="error"}function Qo(e){return e.status==="needs-recovery"}exports.a = _; exports.b = H; exports.c = y; exports.d = C; exports.e = Sr; exports.f = Er; exports.g = No; exports.h = Vo; exports.i = Ho; exports.j = He; exports.k = ue; exports.l = xo; exports.m = Po; exports.n = Bo; exports.o = Ko; exports.p = Go; exports.q = Yo; exports.r = Xo; exports.s = Jo; exports.t = $o; exports.u = Qo;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var $e=Object.defineProperty,Qe=Object.defineProperties;var Ze=Object.getOwnPropertyDescriptors;var fe=Object.getOwnPropertySymbols;var et=Object.prototype.hasOwnProperty,tt=Object.prototype.propertyIsEnumerable;var we=(e,t,o)=>t in e?$e(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o,_=(e,t)=>{for(var o in t||(t={}))et.call(t,o)&&we(e,o,t[o]);if(fe)for(var o of fe(t))tt.call(t,o)&&we(e,o,t[o]);return e},H=(e,t)=>Qe(e,Ze(t));var y=(e,t,o)=>new Promise((a,c)=>{var n=d=>{try{l(o.next(d))}catch(r){c(r)}},i=d=>{try{l(o.throw(d))}catch(r){c(r)}},l=d=>d.done?a(d.value):Promise.resolve(d.value).then(n,i);l((o=o.apply(e,t)).next())});import*as qe from"expo-apple-authentication";import{applicationId as Vt}from"expo-application";import*as M from"expo-linking";import*as k from"expo-secure-store";import*as G from"expo-web-browser";import{useCallback as ze,useContext as Ht,useEffect as zt}from"react";import{Platform as me}from"react-native";import{PrivyClientError as I}from"@privy-io/js-sdk-core";import{digest as It}from"expo-crypto";import K,{useState as E,useMemo as Mt,createContext as Tt,useCallback as ce,useRef as L,useEffect as jt}from"react";import{AppState as je,View as Dt}from"react-native";import Nt from"@privy-io/js-sdk-core";var he={name:"@privy-io/expo",version:"0.21.7",description:"Expo client for the Privy Auth API",keywords:["authentication","authorization","identity","privacy","privy","user data","react-native","expo","web3"],license:"Apache-2.0",source:"./src/index.ts",main:"./dist/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-apple-authentication":"*","expo-web-browser":"*"},dependencies:{"@privy-io/js-sdk-core":"0.24.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 ot from"react";import{useCallback as at,useEffect as Ee,useRef as nt}from"react";import{AppState as dt}from"react-native";import st from"react-native-webview";var ge=({client:e,isClientReady:t,setWebViewState:o,webViewState:a,logLevel:c})=>{let n=nt(null);Ee(()=>{n.current&&a==="loaded"&&e.setMessagePoster(n.current)},[e,n.current,a==="loaded"]),Ee(()=>dt.addEventListener("change",d=>y(void 0,null,function*(){n.current&&d==="active"&&((yield e.embeddedWallet.ping(150))||(n.current.reload(),o("reloading")))})).remove,[]);let i=at(l=>y(void 0,null,function*(){let{data:d}=l.nativeEvent,r=e.embeddedWallet.getMessageHandler();r==null||r(JSON.parse(d))}),[e]);return t?ot.createElement(st,{style:{flex:1},ref:n,source:{uri:e.embeddedWallet.getURL()},webviewDebuggingEnabled:c==="DEBUG",onLoad:()=>o("loaded"),onError:console.error,onMessage:i}):null};import{useCallback as de,useEffect as Ce,useMemo as ke}from"react";import{errorIndicatesRecoveryIsNeeded as lt,getUserEmbeddedSolanaWallet as ct,getUserEmbeddedWallet as ut,PrivyClientError as q}from"@privy-io/js-sdk-core";import{getUserEmbeddedWallet as it}from"@privy-io/js-sdk-core";import{PrivyClientError as z}from"@privy-io/js-sdk-core";function $(l){return y(this,arguments,function*({client:e,setWallet:t,createWalletCallbacks:o,recoveryMethod:a,setRecoveryFlowState:c,password:n,recoveryToken:i}){var d,r;switch(a){case"user-passcode":if(!n)throw new z({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!i)throw new z({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!i)throw new z({code:"embedded_wallet_recovery_error",error:"Recovery token is required for icloud recovery method"});break}t({status:"creating",account:null});try{let{provider:s,user:u}=yield e.embeddedWallet.create(n,a,i),v=it(u);return(r=(d=o.current)==null?void 0:d.onSuccess)==null||r.call(d,s),t({status:"connected",provider:s,account:v}),c({status:"initial"}),s}catch(s){let u=s instanceof Error?s.message:"Error creating embedded wallet";throw t({status:"error",error:u,account:null}),c({status:"initial"}),new z({code:"embedded_wallet_creation_error",error:u})}})}function We(n){return y(this,arguments,function*({client:e,setSolanaWallet:t,createSolanaWalletCallbacks:o,setSolanaRecoveryFlowState:a,ethereumAccount:c}){var i,l;t({status:"creating"});try{let d=yield e.embeddedWallet.createSolana({ethereumAccount:c});return(l=(i=o.current)==null?void 0:i.onSuccess)==null||l.call(i,d),t({status:"connected",publicKey:d._publicKey}),a({status:"initial"}),d}catch(d){let r=d instanceof Error?d.message:"Error creating embedded wallet";throw t({status:"error",error:r}),a({status:"initial"}),new z({code:"embedded_wallet_creation_error",error:r})}})}import{PrivyClientError as O}from"@privy-io/js-sdk-core";function Q(d){return y(this,arguments,function*({client:e,account:t,setWallet:o,recoverWalletCallbacks:a,recoveryMethod:c,setRecoveryFlowState:n,password:i,recoveryToken:l}){var r,s,u,v;if(!t)throw new O({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});switch(c){case"user-passcode":if(!i)throw new O({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!l)throw new O({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!l)throw new O({code:"embedded_wallet_recovery_error",error:"Recovery token is required for icloud recovery method"});break}o({status:"connecting",account:t});try{let S=yield e.embeddedWallet.getProvider(t,i,l);return o({status:"connected",provider:S,account:t}),n({status:"initial"}),(s=(r=a.current)==null?void 0:r.onSuccess)==null||s.call(r,S),S}catch(S){o({status:"needs-recovery",account:t}),n({status:"initial"});let h=new O({code:"embedded_wallet_recovery_error",error:S instanceof Error?S.message:"Error recovering embedded wallet"});throw(v=(u=a.current)==null?void 0:u.onError)==null||v.call(u,h),h}})}function _e(n){return y(this,arguments,function*({client:e,solanaAccount:t,setSolanaWallet:o,recoverSolanaWalletCallbacks:a,setSolanaRecoveryFlowState:c}){var i,l,d,r;if(!t)throw new O({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});o({status:"connecting"});try{let s=yield e.embeddedWallet.getSolanaProvider(t);return o({status:"connected",publicKey:s._publicKey}),c({status:"initial"}),(l=(i=a.current)==null?void 0:i.onSuccess)==null||l.call(i,s),s}catch(s){o({status:"needs-recovery"}),c({status:"initial"});let u=new O({code:"embedded_wallet_recovery_error",error:s instanceof Error?s.message:"Error recovering embedded wallet"});throw(r=(d=a.current)==null?void 0:d.onError)==null||r.call(d,u),u}})}var Re=({client:e,user:t,solanaWallet:o,setSolanaWallet:a,setSolanaRecoveryFlowState:c,webViewState:n,createSolanaWalletCallbacks:i,recoverSolanaWalletCallbacks:l})=>{let d=ke(()=>ct(t),[t]),r=ke(()=>{var S;return(S=ut(t))!=null?S:void 0},[t]),s=de(()=>y(void 0,null,function*(){return yield We({client:e,setSolanaWallet:a,createSolanaWalletCallbacks:i,setSolanaRecoveryFlowState:c,ethereumAccount:r})}),[e,i,r]),u=de(()=>y(void 0,null,function*(){if(!d)throw new q({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});return _e({client:e,solanaAccount:d,setSolanaWallet:a,recoverSolanaWalletCallbacks:l,setSolanaRecoveryFlowState:c})}),[e,d]),v=de(()=>y(void 0,null,function*(){if(!d)throw a({status:"not-created"}),new q({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});a(S=>S.status==="connected"?{status:"reconnecting"}:{status:"connecting"});try{let S=yield e.embeddedWallet.getSolanaProvider(d);return a({status:"connected",publicKey:S._publicKey}),S}catch(S){throw lt(S)?(a({status:"needs-recovery"}),new q({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):S instanceof Error?(a({status:"error",error:S.message}),new q({code:"unknown_embedded_wallet_error",error:S.message})):(a({status:"error",error:"Error loading embedded wallet"}),new q({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,d]);return Ce(()=>{if(!t&&o.status!=="disconnected")return a({status:"disconnected"});n==="loaded"&&v().catch(()=>{})},[n,t,d]),Ce(()=>{o.status==="error"&&o.error.includes("User must be logged in")&&v()},[o.status]),{create:s,recover:u,getProvider:v}};import{useCallback as B,useEffect as xe,useMemo as ht}from"react";import{Platform as le}from"react-native";import{throwIfInvalidRecoveryUpgradePath as Et}from"@privy-io/js-sdk-core";import{errorIndicatesRecoveryIsNeeded as gt,getUserEmbeddedWallet as Wt,PrivyClientError as W}from"@privy-io/js-sdk-core";import*as Z from"expo-linking";import*as Oe from"expo-web-browser";import{Platform as vt}from"react-native";import{PrivyClientError as P}from"@privy-io/js-sdk-core";import mt from"react-fast-compare";var Ae=e=>t=>e(o=>mt(o,t)?o:t);import{PrivyApiError as pt,PrivyClientError as yt}from"@privy-io/js-sdk-core";function C(e){return e instanceof Error||e instanceof pt||e instanceof yt?e:typeof e=="string"?new Error(e):new Error("Unknown error")}var br=e=>new Promise(t=>setTimeout(t,e));import{useEffect as bt,useRef as St}from"react";import{AppState as se}from"react-native";function hr(){let e=St(se.currentState);bt(()=>se.addEventListener("change",a=>{e.current=a}).remove,[]);function t(){return se.currentState}return{appState:e,getCurrentAppState:t}}function ee(c){return y(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(Z.createURL(t||"/"));n=r;break}case"icloud":{let{url:r}=yield o.recovery.icloudAuth.init("expo-ios");n=r;break}default:throw new P({error:"OAuth invalid provider",code:"embedded_wallet_recovery_error"})}let i=yield Oe.openAuthSessionAsync(n);if(vt.OS==="android")return;if(i.type!=="success")throw new P({error:"Recovery OAuth session failed",code:"embedded_wallet_recovery_error"});let{queryParams:l}=Z.parse(i.url),d;switch(e){case"google-drive":{let{privy_oauth_state:r,privy_oauth_code:s}=l;if(!s||!r)throw new P({error:"Recovery OAuth invalid credentials",code:"embedded_wallet_recovery_error"});d=yield ie({oAuthCode:s,oAuthState:r,client:o});break}case"icloud":{let{ckWebAuthToken:r}=l;if(!r)throw new P({error:"Recovery iCloud token not found in query params",code:"embedded_wallet_recovery_error"});d=r;break}default:throw new P({error:"Recovery OAuth invalid provider",code:"embedded_wallet_recovery_error"})}return d}catch(n){throw a==null||a(C(n)),n}})}function ie(a){return y(this,arguments,function*({oAuthCode:e,oAuthState:t,client:o}){let{access_token:c}=yield o.recovery.auth.authorize(e,t);if(!c)throw new P({error:"OAuth invalid credentials",code:"login_with_oauth_returned_with_invalid_credentials"});return c})}import{getUserEmbeddedWallet as ft,PrivyClientError as wt}from"@privy-io/js-sdk-core";function te(n){return y(this,arguments,function*({client:e,recoveryInput:t,setWalletRecoveryCallbacks:o,setRecoveryFlowState:a,setWallet:c}){var i,l,d,r;try{let{provider:s,user:u}=yield e.embeddedWallet.setRecovery(t),v=ft(u);return c({status:"connected",provider:s,account:v}),(l=(i=o.current)==null?void 0:i.onSuccess)==null||l.call(i,s),a({status:"initial"}),s}catch(s){let u=new wt({code:"embedded_wallet_set_recovery_error",error:s instanceof Error?s.message:"Error setting password on embedded wallet"});throw(r=(d=o.current)==null?void 0:d.onError)==null||r.call(d,u),a({status:"initial"}),u}})}function Pe(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 Ue=({client:e,user:t,wallet:o,setWallet:a,setRecoveryFlowState:c,webViewState:n,createWalletCallbacks:i,recoverWalletCallbacks:l,setWalletRecoveryCallbacks:d})=>{let r=ht(()=>Wt(t),[t]),s=B(m=>y(void 0,null,function*(){var w;if(r)throw new W({error:"This user already has an embedded wallet",code:"embedded_wallet_already_exists"});let{password:f,recoveryMethod:b}=Pe(m),p;if(["google-drive","icloud"].includes(b)){if(b==="icloud"&&le.OS==="android")throw new W({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});if(p=yield ee({provider:b,client:e,onError:(w=i.current)==null?void 0:w.onError}),c({status:"creating-wallet"}),!p)return null}return yield $({client:e,setWallet:a,createWalletCallbacks:i,recoveryMethod:b,setRecoveryFlowState:c,password:f,recoveryToken:p})}),[e,r]),u=B(m=>y(void 0,null,function*(){var p,w,A;if(o.status!=="connected")throw new W({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"});if(!r)throw new W({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});Et({currentRecoveryMethod:r.recovery_method,upgradeToRecoveryMethod:m.recoveryMethod});let f,b;switch(m.recoveryMethod){case"user-passcode":b=H(_({},m),{wallet:r,password:m.password});break;case"google-drive":case"icloud":if(m.recoveryMethod==="icloud"&&le.OS==="android"){let R=new W({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});throw(w=(p=d.current)==null?void 0:p.onError)==null||w.call(p,R),R}if(f=yield ee({provider:m.recoveryMethod,client:e,onError:(A=d.current)==null?void 0:A.onError}),c({status:"upgrading-recovery"}),!f)return null;b={recoveryMethod:m.recoveryMethod,wallet:r,recoveryAccessToken:f};break;default:throw new W({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}return te({client:e,recoveryInput:b,setWalletRecoveryCallbacks:d,setRecoveryFlowState:c,setWallet:a})}),[e,r,o.status]),v=B(m=>y(void 0,null,function*(){return u({recoveryMethod:"user-passcode",password:m})}),[e,r,o.status]),S=B(m=>y(void 0,null,function*(){var w;if(!r)throw new W({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{password:f,recoveryMethod:b}=Pe(m),p;if(["google-drive","icloud"].includes(b)){if(b==="icloud"&&le.OS==="android")throw new W({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});if(p=yield ee({provider:b,client:e,onError:(w=l.current)==null?void 0:w.onError}),c({status:"recovering"}),!p)return null}return Q({client:e,account:r,setWallet:a,recoverWalletCallbacks:l,recoveryMethod:b,setRecoveryFlowState:c,password:f,recoveryToken:p})}),[e,r]),h=B(()=>y(void 0,null,function*(){if(!r)throw a({status:"not-created",account:null}),new W({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 gt(m)?(a({status:"needs-recovery",account:r}),new W({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):m instanceof Error?(a({status:"error",error:m.message,account:r}),new W({code:"unknown_embedded_wallet_error",error:m.message})):(a({status:"error",error:"Error loading embedded wallet",account:r}),new W({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,r]);return xe(()=>{if(!t&&o.status!=="disconnected")return a({status:"disconnected",account:null});n==="loaded"&&h().catch(()=>{})},[n,t,r]),xe(()=>{o.status==="error"&&o.error.includes("User must be logged in")&&h()},[o.status]),{create:s,recover:S,setPassword:v,setRecovery:u,getProvider:h}};import{useEffect as _t,useState as Ct}from"react";import{PrivyClientError as Fe}from"@privy-io/js-sdk-core";var Le=({client:e,user:t,isReady:o,customAuth:a})=>{let[c,n]=Ct({status:"initial"});return _t(()=>{(()=>y(void 0,null,function*(){if(!(a!=null&&a.enabled)){n({status:"not-enabled"});return}n({status:"loading"});let{getCustomAccessToken:l,isLoading:d}=a;if(!(!o||d))try{let r=yield l();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 Fe({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 Fe({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:c,customAuthStateIsSettled:c.status!=="loading"&&c.status!=="initial"}};import*as U from"expo-linking";import{useCallback as kt,useEffect as Rt}from"react";import{Platform as At}from"react-native";var Ie=({client:e,user:t,isUserInitialized:o,oAuthState:a,oAuthCallbacks:c,setOAuthState:n,recoveryFlowState:i})=>{let l=U.useURL(),d=kt(r=>{var u,v;let s=C(r);n({status:"error",error:s}),(v=(u=c.current).onError)==null||v.call(u,s)},[n]);return Rt(()=>{function r(){return y(this,null,function*(){var S,h;if(!l||a.status!=="loading"||i.status!=="initial")return;let{queryParams:s}=U.parse(l),{privy_oauth_state:u,privy_oauth_code:v}=s;if(!v||!u){n({status:"done"});return}try{let m,f;if(t)m=yield e.auth.oauth.linkWithCode(v,u);else{let b=yield e.auth.oauth.loginWithCode(v,u);m=b.user,f=!!b.is_new_user}return(h=(S=c.current).onSuccess)==null||h.call(S,m,f),n({status:"done"}),yield U.openURL(l.split("?")[0])}catch(m){d(m)}})}At.OS==="android"&&o&&r()},[l,o])};import*as F from"expo-linking";import{useCallback as Ot,useEffect as xt,useMemo as Pt}from"react";import{Platform as Ut}from"react-native";import{getUserEmbeddedWallet as Ft}from"@privy-io/js-sdk-core";var Me=({client:e,user:t,createWalletCallbacks:o,recoverWalletCallbacks:a,setWalletRecoveryCallbacks:c,recoveryFlowState:n,oAuthState:i,setRecoveryFlowState:l,setWallet:d,appStateVisible:r,webViewLoaded:s})=>{let u=F.useURL(),v=Pt(()=>Ft(t),[t]),S=Ot(h=>{var f,b,p,w;let m=C(h);n.status==="creating-wallet"?(b=(f=o.current).onError)==null||b.call(f,C(m)):(w=(p=a.current).onError)==null||w.call(p,C(m)),l({status:"initial"})},[n]);return xt(()=>{function h(){return y(this,null,function*(){if(!u&&n.status!=="initial"&&r&&S(new Error("Recovery OAuth session failed")),!u||n.status==="initial"||i.status!=="initial"||!r||!s)return;let{queryParams:m}=F.parse(u),{privy_oauth_state:f,privy_oauth_code:b}=m;if(!(!b||!f)){yield F.openURL(u.split("?")[0]);try{let p=yield ie({oAuthCode:b,oAuthState:f,client:e});if(n.status==="creating-wallet")yield $({client:e,setWallet:d,createWalletCallbacks:o,recoveryMethod:"google-drive",setRecoveryFlowState:l,recoveryToken:p});else if(n.status==="upgrading-recovery"){if(!v)throw new Error("Embedded wallet not found");yield te({client:e,recoveryInput:{recoveryMethod:"google-drive",wallet:v,recoveryAccessToken:p},setWalletRecoveryCallbacks:c,setRecoveryFlowState:l,setWallet:d})}else yield Q({client:e,account:v,setWallet:d,recoverWalletCallbacks:a,recoveryMethod:"google-drive",setRecoveryFlowState:l,recoveryToken:p})}catch(p){S(p)}}})}Ut.OS==="android"&&h()},[u,n.status,r,s])};import{useEffect as Lt}from"react";var Te=({client:e,isUserInitialized:t,setIsUserInitialized:o})=>{Lt(()=>{t||(()=>y(void 0,null,function*(){try{yield e.user.get()}catch(c){}finally{o(!0)}}))()},[t])};var ue=Tt({}),re;function Oo(){return re?re.getAccessToken():Promise.resolve(null)}var xo=e=>{var ve;let[t,o]=E(je.currentState==="active");jt(()=>{let x=je.addEventListener("change",Je=>{o(Je==="active")});return()=>{x.remove()}},[]);let[a,c]=E(!1),[n,i]=E("loading"),[l,d]=E(!1),[r,s]=E(null),[u,v]=E({status:"disconnected",account:null}),[S,h]=E({status:"disconnected"}),[m,f]=E({status:"initial"}),[b,p]=E({status:"initial"}),[w,A]=E({status:"initial"}),[R,Y]=E({status:"initial"}),[T,j]=E({status:"initial"}),[D,N]=E({status:"initial"}),[V,X]=E({status:"initial"}),ye=L({}),oe=L({}),ae=L({}),ne=L({}),be=L({}),Se=L({}),J=ce(x=>{if(x)return Ae(s)(x);s(null),f({status:"initial"}),p({status:"initial"}),v({status:"disconnected",account:null})},[]),g=Mt(()=>{let x=e.storage||He;return re=new Nt({storage:Ve(x),appId:e.appId,clientId:e.clientId,supportedChains:e.supportedChains,nativeAppIdentifier:Ne(),baseUrl:e.baseUrl,sdkVersion:`expo:${he.version}`,callbacks:{setUser:J,setIsReady:d},logLevel:e.logLevel,crypto:{digest:It}}),re},[e.storage,e.appId,e.clientId,e.baseUrl,e.supportedChains,e.logLevel,J]),Be=ce(()=>(J(null),g.auth.logout()),[J,g]),Ke=ce(()=>g.getAccessToken(),[g]);Te({client:g,isUserInitialized:a,setIsUserInitialized:c});let Ge=Ue({client:g,user:r,webViewState:n,createWalletCallbacks:oe,recoverWalletCallbacks:ae,setWalletRecoveryCallbacks:ne,setRecoveryFlowState:A,wallet:u,setWallet:v}),Ye=Re({client:g,user:r,webViewState:n,createSolanaWalletCallbacks:be,recoverSolanaWalletCallbacks:Se,setSolanaRecoveryFlowState:Y,solanaWallet:S,setSolanaWallet:h});Ie({client:g,isUserInitialized:a,user:r,oAuthState:b,setOAuthState:p,oAuthCallbacks:ye,recoveryFlowState:w}),Me({client:g,user:r,webViewLoaded:n==="loaded",createWalletCallbacks:oe,recoverWalletCallbacks:ae,setWalletRecoveryCallbacks:ne,recoveryFlowState:w,oAuthState:b,setRecoveryFlowState:A,setWallet:v,appStateVisible:t});let{customAuthStateIsSettled:Xe}=Le({client:g,user:r,isReady:a,customAuth:(ve=e.config)==null?void 0:ve.customAuth});return K.createElement(K.Fragment,null,K.createElement(ue.Provider,{value:{client:g,user:r,isReady:n!=="loading"&&a&&De(b)&&Xe,logout:Be,getAccessToken:Ke,wallet:_(_({},u),Ge),solanaWallet:_(_({},S),Ye),oAuthState:b,oAuthCallbacks:ye,recoveryFlowState:w,setRecoveryFlowState:A,solanaRecoveryFlowState:R,setSolanaRecoveryFlowState:Y,createWalletCallbacks:oe,recoverWalletCallbacks:ae,setWalletRecoveryCallbacks:ne,createSolanaWalletCallbacks:be,recoverSolanaWalletCallbacks:Se,setOAuthState:p,siweState:T,setSiweState:j,otpState:m,setOtpState:f,passkeyState:D,setPasskeyState:N,farcasterState:V,setFarcasterState:X}},e.children),K.createElement(Dt,{style:{width:0,height:0,overflow:"hidden"}},K.createElement(ge,{logLevel:e.logLevel,client:g,isClientReady:l,setWebViewState:i,webViewState:n})))};var De=e=>e.status!=="loading",pe=(e={})=>{let{user:t,oAuthState:o,setOAuthState:a,oAuthCallbacks:c,client:n}=Ht(ue),i=e.action?e.action==="login":!t;zt(()=>{c.current={onSuccess:e.onSuccess,onError:e.onError}},[e.onSuccess,e.onError]);let l=ze(r=>{var u;let s=C(r);return a({status:"error",error:s}),(u=e==null?void 0:e.onError)==null||u.call(e,s),s},[e==null?void 0:e.onError]);return{start:ze(function(S){return y(this,arguments,function*({provider:s,redirectUri:u,isLegacyAppleIosBehaviorEnabled:v=!1}){var h,m,f;a({status:"loading"});try{if(t&&e.action==="login")throw new I({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 I({code:"attempted_link_oauth_before_logged_in",error:"Must be logged in to link an OAuth account, use `useLoginWithOAuth`"});let{url:b}=yield n.auth.oauth.generateURL(s,M.createURL(u||"/")),p,w;if(me.OS==="ios"&&s==="apple"&&!v){let N=(h=new URL(b).searchParams.get("state"))!=null?h:"",V=yield qe.signInAsync({state:N});if(!V.authorizationCode)throw new I({error:"OAuth invalid credentials",code:i?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(i){let X=yield n.auth.oauth.loginWithCode(V.authorizationCode,N,s,"raw");p=X.user,w=X.is_new_user}else p=yield n.auth.oauth.linkWithCode(V.authorizationCode,N,s,"raw");return(m=e==null?void 0:e.onSuccess)==null||m.call(e,p,w),a({status:"done"}),p!=null?p:void 0}let A=me.OS==="android"?b.replace("x.com","twitter.com"):b,R=yield G.openAuthSessionAsync(A);if(me.OS==="android")return;if(R.type!=="success")throw[G.WebBrowserResultType.CANCEL,G.WebBrowserResultType.DISMISS].includes(R.type)?new I({error:"OAuth was cancelled",code:i?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):new I({error:"OAuth session failed",code:i?"failed_to_complete_login_with_oauth":"failed_to_complete_link_with_oauth"});let{queryParams:Y}=M.parse(R.url),{privy_oauth_state:T,privy_oauth_code:j}=Y;if(!j||!T)throw new I({error:"OAuth invalid credentials",code:i?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(i){let D=yield n.auth.oauth.loginWithCode(j,T,s);p=D.user,w=D.is_new_user}else p=yield n.auth.oauth.linkWithCode(j,T,s);return(f=e==null?void 0:e.onSuccess)==null||f.call(e,p,w),yield M.openURL(R.url.split("?")[0]),a({status:"done"}),p!=null?p:void 0}catch(b){l(b)}})},[t,n,a,l]),state:o}};function Do(e){let{state:t,start:o}=pe(H(_({},e),{action:"login"}));return{state:t,login:o}}function No(e){let{state:t,start:o}=pe(H(_({},e),{action:"link"}));return{state:t,link:o}}function Vo(e){return pe(e)}var Ne=()=>Vt;function Ve(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:()=>y(this,null,function*(){return[]})}}var He={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:()=>y(void 0,null,function*(){return[]})};function qo(e){return e.status==="connected"}function Bo(e){return e.status==="reconnecting"}function Ko(e){return e.status==="connecting"}function Go(e){return e.status==="disconnected"}function Yo(e){return e.status==="not-created"}function Xo(e){return e.status==="creating"}function Jo(e){return e.status==="error"}function $o(e){return e.status==="needs-recovery"}export{_ as a,H as b,y as c,C as d,br as e,hr as f,Do as g,No as h,Vo as i,He as j,ue as k,Oo as l,xo as m,qo as n,Bo as o,Ko as p,Go as q,Yo as r,Xo as s,Jo as t,$o as u};
|
|
1
|
+
var Qe=Object.defineProperty,Ze=Object.defineProperties;var et=Object.getOwnPropertyDescriptors;var fe=Object.getOwnPropertySymbols;var tt=Object.prototype.hasOwnProperty,rt=Object.prototype.propertyIsEnumerable;var we=(e,t,o)=>t in e?Qe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o,_=(e,t)=>{for(var o in t||(t={}))tt.call(t,o)&&we(e,o,t[o]);if(fe)for(var o of fe(t))rt.call(t,o)&&we(e,o,t[o]);return e},H=(e,t)=>Ze(e,et(t));var y=(e,t,o)=>new Promise((a,c)=>{var n=d=>{try{l(o.next(d))}catch(r){c(r)}},i=d=>{try{l(o.throw(d))}catch(r){c(r)}},l=d=>d.done?a(d.value):Promise.resolve(d.value).then(n,i);l((o=o.apply(e,t)).next())});import*as qe from"expo-apple-authentication";import{applicationId as Ht}from"expo-application";import*as M from"expo-linking";import*as k from"expo-secure-store";import*as G from"expo-web-browser";import{useCallback as ze,useContext as zt,useEffect as qt}from"react";import{Platform as me}from"react-native";import{PrivyClientError as I}from"@privy-io/js-sdk-core";import{digest as Mt}from"expo-crypto";import K,{useState as g,useMemo as Tt,createContext as jt,useCallback as re,useRef as L,useEffect as Dt}from"react";import{AppState as je,View as Nt}from"react-native";import Vt from"@privy-io/js-sdk-core";var he={name:"@privy-io/expo",version:"0.22.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-apple-authentication":"*","expo-web-browser":"*"},dependencies:{"@privy-io/js-sdk-core":"0.25.0","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 at from"react";import{useCallback as nt,useEffect as Ee,useRef as dt}from"react";import{AppState as st}from"react-native";import it from"react-native-webview";var ge=({client:e,isClientReady:t,setWebViewState:o,webViewState:a,logLevel:c})=>{let n=dt(null);Ee(()=>{n.current&&a==="loaded"&&e.setMessagePoster(n.current)},[e,n.current,a==="loaded"]),Ee(()=>st.addEventListener("change",d=>y(void 0,null,function*(){n.current&&d==="active"&&((yield e.embeddedWallet.ping(150))||(n.current.reload(),o("reloading")))})).remove,[]);let i=nt(l=>y(void 0,null,function*(){let{data:d}=l.nativeEvent,r=e.embeddedWallet.getMessageHandler();r==null||r(JSON.parse(d))}),[e]);return t?at.createElement(it,{style:{flex:1},ref:n,source:{uri:e.embeddedWallet.getURL()},webviewDebuggingEnabled:c==="DEBUG",onLoad:()=>o("loaded"),onError:console.error,onMessage:i}):null};import{useCallback as se,useEffect as Ce,useMemo as ke}from"react";import{errorIndicatesRecoveryIsNeeded as ct,getUserEmbeddedSolanaWallet as ut,getUserEmbeddedWallet as mt,PrivyClientError as q}from"@privy-io/js-sdk-core";import{getUserEmbeddedWallet as lt}from"@privy-io/js-sdk-core";import{PrivyClientError as z}from"@privy-io/js-sdk-core";function $(l){return y(this,arguments,function*({client:e,setWallet:t,createWalletCallbacks:o,recoveryMethod:a,setRecoveryFlowState:c,password:n,recoveryToken:i}){var d,r;switch(a){case"user-passcode":if(!n)throw new z({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!i)throw new z({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!i)throw new z({code:"embedded_wallet_recovery_error",error:"Recovery token is required for icloud recovery method"});break}t({status:"creating",account:null});try{let{provider:s,user:u}=yield e.embeddedWallet.create(n,a,i),v=lt(u);return(r=(d=o.current)==null?void 0:d.onSuccess)==null||r.call(d,s),t({status:"connected",provider:s,account:v}),c({status:"initial"}),s}catch(s){let u=s instanceof Error?s.message:"Error creating embedded wallet";throw t({status:"error",error:u,account:null}),c({status:"initial"}),new z({code:"embedded_wallet_creation_error",error:u})}})}function We(n){return y(this,arguments,function*({client:e,setSolanaWallet:t,createSolanaWalletCallbacks:o,setSolanaRecoveryFlowState:a,ethereumAccount:c}){var i,l;t({status:"creating"});try{let d=yield e.embeddedWallet.createSolana({ethereumAccount:c});return(l=(i=o.current)==null?void 0:i.onSuccess)==null||l.call(i,d),t({status:"connected",publicKey:d._publicKey}),a({status:"initial"}),d}catch(d){let r=d instanceof Error?d.message:"Error creating embedded wallet";throw t({status:"error",error:r}),a({status:"initial"}),new z({code:"embedded_wallet_creation_error",error:r})}})}import{PrivyClientError as O}from"@privy-io/js-sdk-core";function Q(d){return y(this,arguments,function*({client:e,account:t,setWallet:o,recoverWalletCallbacks:a,recoveryMethod:c,setRecoveryFlowState:n,password:i,recoveryToken:l}){var r,s,u,v;if(!t)throw new O({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});switch(c){case"user-passcode":if(!i)throw new O({code:"embedded_wallet_recovery_error",error:"password is required for user-passcode recovery method"});break;case"google-drive":if(!l)throw new O({code:"embedded_wallet_recovery_error",error:"Recovery token is required for google-drive recovery method"});break;case"icloud":if(!l)throw new O({code:"embedded_wallet_recovery_error",error:"Recovery token is required for icloud recovery method"});break}o({status:"connecting",account:t});try{let S=yield e.embeddedWallet.getProvider(t,i,l);return o({status:"connected",provider:S,account:t}),n({status:"initial"}),(s=(r=a.current)==null?void 0:r.onSuccess)==null||s.call(r,S),S}catch(S){o({status:"needs-recovery",account:t}),n({status:"initial"});let h=new O({code:"embedded_wallet_recovery_error",error:S instanceof Error?S.message:"Error recovering embedded wallet"});throw(v=(u=a.current)==null?void 0:u.onError)==null||v.call(u,h),h}})}function _e(n){return y(this,arguments,function*({client:e,solanaAccount:t,setSolanaWallet:o,recoverSolanaWalletCallbacks:a,setSolanaRecoveryFlowState:c}){var i,l,d,r;if(!t)throw new O({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});o({status:"connecting"});try{let s=yield e.embeddedWallet.getSolanaProvider(t);return o({status:"connected",publicKey:s._publicKey}),c({status:"initial"}),(l=(i=a.current)==null?void 0:i.onSuccess)==null||l.call(i,s),s}catch(s){o({status:"needs-recovery"}),c({status:"initial"});let u=new O({code:"embedded_wallet_recovery_error",error:s instanceof Error?s.message:"Error recovering embedded wallet"});throw(r=(d=a.current)==null?void 0:d.onError)==null||r.call(d,u),u}})}var Re=({client:e,user:t,solanaWallet:o,setSolanaWallet:a,setSolanaRecoveryFlowState:c,webViewState:n,createSolanaWalletCallbacks:i,recoverSolanaWalletCallbacks:l})=>{let d=ke(()=>ut(t),[t]),r=ke(()=>{var S;return(S=mt(t))!=null?S:void 0},[t]),s=se(()=>y(void 0,null,function*(){return yield We({client:e,setSolanaWallet:a,createSolanaWalletCallbacks:i,setSolanaRecoveryFlowState:c,ethereumAccount:r})}),[e,i,r]),u=se(()=>y(void 0,null,function*(){if(!d)throw new q({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});return _e({client:e,solanaAccount:d,setSolanaWallet:a,recoverSolanaWalletCallbacks:l,setSolanaRecoveryFlowState:c})}),[e,d]),v=se(()=>y(void 0,null,function*(){if(!d)throw a({status:"not-created"}),new q({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});a(S=>S.status==="connected"?{status:"reconnecting"}:{status:"connecting"});try{let S=yield e.embeddedWallet.getSolanaProvider(d);return a({status:"connected",publicKey:S._publicKey}),S}catch(S){throw ct(S)?(a({status:"needs-recovery"}),new q({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):S instanceof Error?(a({status:"error",error:S.message}),new q({code:"unknown_embedded_wallet_error",error:S.message})):(a({status:"error",error:"Error loading embedded wallet"}),new q({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,d]);return Ce(()=>{if(!t&&o.status!=="disconnected")return a({status:"disconnected"});n==="loaded"&&v().catch(()=>{})},[n,t,d]),Ce(()=>{o.status==="error"&&o.error.includes("User must be logged in")&&v()},[o.status]),{create:s,recover:u,getProvider:v}};import{useCallback as B,useEffect as xe,useMemo as Et}from"react";import{Platform as ce}from"react-native";import{throwIfInvalidRecoveryUpgradePath as gt}from"@privy-io/js-sdk-core";import{errorIndicatesRecoveryIsNeeded as Wt,getUserEmbeddedWallet as _t,PrivyClientError as W}from"@privy-io/js-sdk-core";import*as Z from"expo-linking";import*as Oe from"expo-web-browser";import{Platform as ft}from"react-native";import{PrivyClientError as P}from"@privy-io/js-sdk-core";import pt from"react-fast-compare";var Ae=e=>t=>e(o=>pt(o,t)?o:t);import{PrivyApiError as yt,PrivyClientError as bt}from"@privy-io/js-sdk-core";function C(e){return e instanceof Error||e instanceof yt||e instanceof bt?e:typeof e=="string"?new Error(e):new Error("Unknown error")}var Sr=e=>new Promise(t=>setTimeout(t,e));import{useEffect as St,useRef as vt}from"react";import{AppState as ie}from"react-native";function Er(){let e=vt(ie.currentState);St(()=>ie.addEventListener("change",a=>{e.current=a}).remove,[]);function t(){return ie.currentState}return{appState:e,getCurrentAppState:t}}function ee(c){return y(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(Z.createURL(t||"/"));n=r;break}case"icloud":{let{url:r}=yield o.recovery.icloudAuth.init("expo-ios");n=r;break}default:throw new P({error:"OAuth invalid provider",code:"embedded_wallet_recovery_error"})}let i=yield Oe.openAuthSessionAsync(n);if(ft.OS==="android")return;if(i.type!=="success")throw new P({error:"Recovery OAuth session failed",code:"embedded_wallet_recovery_error"});let{queryParams:l}=Z.parse(i.url),d;switch(e){case"google-drive":{let{privy_oauth_state:r,privy_oauth_code:s}=l;if(!s||!r)throw new P({error:"Recovery OAuth invalid credentials",code:"embedded_wallet_recovery_error"});d=yield le({oAuthCode:s,oAuthState:r,client:o});break}case"icloud":{let{ckWebAuthToken:r}=l;if(!r)throw new P({error:"Recovery iCloud token not found in query params",code:"embedded_wallet_recovery_error"});d=r;break}default:throw new P({error:"Recovery OAuth invalid provider",code:"embedded_wallet_recovery_error"})}return d}catch(n){throw a==null||a(C(n)),n}})}function le(a){return y(this,arguments,function*({oAuthCode:e,oAuthState:t,client:o}){let{access_token:c}=yield o.recovery.auth.authorize(e,t);if(!c)throw new P({error:"OAuth invalid credentials",code:"login_with_oauth_returned_with_invalid_credentials"});return c})}import{getUserEmbeddedWallet as wt,PrivyClientError as ht}from"@privy-io/js-sdk-core";function te(n){return y(this,arguments,function*({client:e,recoveryInput:t,setWalletRecoveryCallbacks:o,setRecoveryFlowState:a,setWallet:c}){var i,l,d,r;try{let{provider:s,user:u}=yield e.embeddedWallet.setRecovery(t),v=wt(u);return c({status:"connected",provider:s,account:v}),(l=(i=o.current)==null?void 0:i.onSuccess)==null||l.call(i,s),a({status:"initial"}),s}catch(s){let u=new ht({code:"embedded_wallet_set_recovery_error",error:s instanceof Error?s.message:"Error setting password on embedded wallet"});throw(r=(d=o.current)==null?void 0:d.onError)==null||r.call(d,u),a({status:"initial"}),u}})}function Pe(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 Ue=({client:e,user:t,wallet:o,setWallet:a,setRecoveryFlowState:c,webViewState:n,createWalletCallbacks:i,recoverWalletCallbacks:l,setWalletRecoveryCallbacks:d})=>{let r=Et(()=>_t(t),[t]),s=B(m=>y(void 0,null,function*(){var w;if(r)throw new W({error:"This user already has an embedded wallet",code:"embedded_wallet_already_exists"});let{password:f,recoveryMethod:b}=Pe(m),p;if(["google-drive","icloud"].includes(b)){if(b==="icloud"&&ce.OS==="android")throw new W({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});if(p=yield ee({provider:b,client:e,onError:(w=i.current)==null?void 0:w.onError}),c({status:"creating-wallet"}),!p)return null}return yield $({client:e,setWallet:a,createWalletCallbacks:i,recoveryMethod:b,setRecoveryFlowState:c,password:f,recoveryToken:p})}),[e,r]),u=B(m=>y(void 0,null,function*(){var p,w,A;if(o.status!=="connected")throw new W({code:"attempted_to_set_password_before_connected",error:"Embedded wallet must be connected before setting password"});if(!r)throw new W({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});gt({currentRecoveryMethod:r.recovery_method,upgradeToRecoveryMethod:m.recoveryMethod});let f,b;switch(m.recoveryMethod){case"user-passcode":b=H(_({},m),{wallet:r,password:m.password});break;case"google-drive":case"icloud":if(m.recoveryMethod==="icloud"&&ce.OS==="android"){let R=new W({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});throw(w=(p=d.current)==null?void 0:p.onError)==null||w.call(p,R),R}if(f=yield ee({provider:m.recoveryMethod,client:e,onError:(A=d.current)==null?void 0:A.onError}),c({status:"upgrading-recovery"}),!f)return null;b={recoveryMethod:m.recoveryMethod,wallet:r,recoveryAccessToken:f};break;default:throw new W({code:"embedded_wallet_recovery_error",error:"Unrecognized recovery method"})}return te({client:e,recoveryInput:b,setWalletRecoveryCallbacks:d,setRecoveryFlowState:c,setWallet:a})}),[e,r,o.status]),v=B(m=>y(void 0,null,function*(){return u({recoveryMethod:"user-passcode",password:m})}),[e,r,o.status]),S=B(m=>y(void 0,null,function*(){var w;if(!r)throw new W({code:"embedded_wallet_does_not_exist",error:"Embedded wallet does not exist"});let{password:f,recoveryMethod:b}=Pe(m),p;if(["google-drive","icloud"].includes(b)){if(b==="icloud"&&ce.OS==="android")throw new W({code:"embedded_wallet_recovery_error",error:"iCloud recovery is not supported on Android"});if(p=yield ee({provider:b,client:e,onError:(w=l.current)==null?void 0:w.onError}),c({status:"recovering"}),!p)return null}return Q({client:e,account:r,setWallet:a,recoverWalletCallbacks:l,recoveryMethod:b,setRecoveryFlowState:c,password:f,recoveryToken:p})}),[e,r]),h=B(()=>y(void 0,null,function*(){if(!r)throw a({status:"not-created",account:null}),new W({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 Wt(m)?(a({status:"needs-recovery",account:r}),new W({code:"embedded_wallet_needs_recovery",error:"Embedded wallet not loaded on device"})):m instanceof Error?(a({status:"error",error:m.message,account:r}),new W({code:"unknown_embedded_wallet_error",error:m.message})):(a({status:"error",error:"Error loading embedded wallet",account:r}),new W({code:"unknown_embedded_wallet_error",error:"Error loading embedded wallet"}))}}),[e,r]);return xe(()=>{if(!t&&o.status!=="disconnected")return a({status:"disconnected",account:null});n==="loaded"&&h().catch(()=>{})},[n,t,r]),xe(()=>{o.status==="error"&&o.error.includes("User must be logged in")&&h()},[o.status]),{create:s,recover:S,setPassword:v,setRecovery:u,getProvider:h}};import{useEffect as Ct,useState as kt}from"react";import{PrivyClientError as Fe}from"@privy-io/js-sdk-core";var Le=({client:e,user:t,isReady:o,customAuth:a})=>{let[c,n]=kt({status:"initial"});return Ct(()=>{(()=>y(void 0,null,function*(){if(!(a!=null&&a.enabled)){n({status:"not-enabled"});return}n({status:"loading"});let{getCustomAccessToken:l,isLoading:d}=a;if(!(!o||d))try{let r=yield l();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 Fe({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 Fe({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:c,customAuthStateIsSettled:c.status!=="loading"&&c.status!=="initial"}};import*as U from"expo-linking";import{useCallback as Rt,useEffect as At}from"react";import{Platform as Ot}from"react-native";var Ie=({client:e,user:t,isUserInitialized:o,oAuthState:a,oAuthCallbacks:c,setOAuthState:n,recoveryFlowState:i})=>{let l=U.useURL(),d=Rt(r=>{var u,v;let s=C(r);n({status:"error",error:s}),(v=(u=c.current).onError)==null||v.call(u,s)},[n]);return At(()=>{function r(){return y(this,null,function*(){var S,h;if(!l||a.status!=="loading"||i.status!=="initial")return;let{queryParams:s}=U.parse(l),{privy_oauth_state:u,privy_oauth_code:v}=s;if(!v||!u){n({status:"done"});return}try{let m,f;if(t)m=yield e.auth.oauth.linkWithCode(v,u);else{let b=yield e.auth.oauth.loginWithCode(v,u);m=b.user,f=!!b.is_new_user}return(h=(S=c.current).onSuccess)==null||h.call(S,m,f),n({status:"done"}),yield U.openURL(l.split("?")[0])}catch(m){d(m)}})}Ot.OS==="android"&&o&&r()},[l,o])};import*as F from"expo-linking";import{useCallback as xt,useEffect as Pt,useMemo as Ut}from"react";import{Platform as Ft}from"react-native";import{getUserEmbeddedWallet as Lt}from"@privy-io/js-sdk-core";var Me=({client:e,user:t,createWalletCallbacks:o,recoverWalletCallbacks:a,setWalletRecoveryCallbacks:c,recoveryFlowState:n,oAuthState:i,setRecoveryFlowState:l,setWallet:d,appStateVisible:r,webViewLoaded:s})=>{let u=F.useURL(),v=Ut(()=>Lt(t),[t]),S=xt(h=>{var f,b,p,w;let m=C(h);n.status==="creating-wallet"?(b=(f=o.current).onError)==null||b.call(f,C(m)):(w=(p=a.current).onError)==null||w.call(p,C(m)),l({status:"initial"})},[n]);return Pt(()=>{function h(){return y(this,null,function*(){if(!u&&n.status!=="initial"&&r&&S(new Error("Recovery OAuth session failed")),!u||n.status==="initial"||i.status!=="initial"||!r||!s)return;let{queryParams:m}=F.parse(u),{privy_oauth_state:f,privy_oauth_code:b}=m;if(!(!b||!f)){yield F.openURL(u.split("?")[0]);try{let p=yield le({oAuthCode:b,oAuthState:f,client:e});if(n.status==="creating-wallet")yield $({client:e,setWallet:d,createWalletCallbacks:o,recoveryMethod:"google-drive",setRecoveryFlowState:l,recoveryToken:p});else if(n.status==="upgrading-recovery"){if(!v)throw new Error("Embedded wallet not found");yield te({client:e,recoveryInput:{recoveryMethod:"google-drive",wallet:v,recoveryAccessToken:p},setWalletRecoveryCallbacks:c,setRecoveryFlowState:l,setWallet:d})}else yield Q({client:e,account:v,setWallet:d,recoverWalletCallbacks:a,recoveryMethod:"google-drive",setRecoveryFlowState:l,recoveryToken:p})}catch(p){S(p)}}})}Ft.OS==="android"&&h()},[u,n.status,r,s])};import{useEffect as It}from"react";var Te=({client:e,isUserInitialized:t,setIsUserInitialized:o})=>{It(()=>{t||(()=>y(void 0,null,function*(){try{yield e.user.get()}catch(c){}finally{o(!0)}}))()},[t])};var ue=jt({}),oe;function xo(){return oe?oe.getAccessToken():Promise.resolve(null)}var Po=e=>{var ve;let[t,o]=g(je.currentState==="active");Dt(()=>{let x=je.addEventListener("change",$e=>{o($e==="active")});return()=>{x.remove()}},[]);let[a,c]=g(!1),[n,i]=g("loading"),[l,d]=g(!1),[r,s]=g(null),[u,v]=g({status:"disconnected",account:null}),[S,h]=g({status:"disconnected"}),[m,f]=g({status:"initial"}),[b,p]=g({status:"initial"}),[w,A]=g({status:"initial"}),[R,Y]=g({status:"initial"}),[T,j]=g({status:"initial"}),[D,N]=g({status:"initial"}),[V,X]=g({status:"initial"}),ye=L({}),ae=L({}),ne=L({}),de=L({}),be=L({}),Se=L({}),J=re(x=>{if(x)return Ae(s)(x);s(null),f({status:"initial"}),p({status:"initial"}),v({status:"disconnected",account:null})},[]),E=Tt(()=>{let x=e.storage||He;return oe=new Vt({storage:Ve(x),appId:e.appId,clientId:e.clientId,supportedChains:e.supportedChains,nativeAppIdentifier:Ne(),baseUrl:e.baseUrl,sdkVersion:`expo:${he.version}`,callbacks:{setUser:J,setIsReady:d},logLevel:e.logLevel,crypto:{digest:Mt}}),oe},[e.storage,e.appId,e.clientId,e.baseUrl,e.supportedChains,e.logLevel,J]),Be=re(()=>(J(null),E.auth.logout()),[J,E]),Ke=re(()=>E.getAccessToken(),[E]),Ge=re(()=>E.getIdentityToken(),[E]);Te({client:E,isUserInitialized:a,setIsUserInitialized:c});let Ye=Ue({client:E,user:r,webViewState:n,createWalletCallbacks:ae,recoverWalletCallbacks:ne,setWalletRecoveryCallbacks:de,setRecoveryFlowState:A,wallet:u,setWallet:v}),Xe=Re({client:E,user:r,webViewState:n,createSolanaWalletCallbacks:be,recoverSolanaWalletCallbacks:Se,setSolanaRecoveryFlowState:Y,solanaWallet:S,setSolanaWallet:h});Ie({client:E,isUserInitialized:a,user:r,oAuthState:b,setOAuthState:p,oAuthCallbacks:ye,recoveryFlowState:w}),Me({client:E,user:r,webViewLoaded:n==="loaded",createWalletCallbacks:ae,recoverWalletCallbacks:ne,setWalletRecoveryCallbacks:de,recoveryFlowState:w,oAuthState:b,setRecoveryFlowState:A,setWallet:v,appStateVisible:t});let{customAuthStateIsSettled:Je}=Le({client:E,user:r,isReady:a,customAuth:(ve=e.config)==null?void 0:ve.customAuth});return K.createElement(K.Fragment,null,K.createElement(ue.Provider,{value:{client:E,user:r,isReady:n!=="loading"&&a&&De(b)&&Je,logout:Be,getAccessToken:Ke,getIdentityToken:Ge,wallet:_(_({},u),Ye),solanaWallet:_(_({},S),Xe),oAuthState:b,oAuthCallbacks:ye,recoveryFlowState:w,setRecoveryFlowState:A,solanaRecoveryFlowState:R,setSolanaRecoveryFlowState:Y,createWalletCallbacks:ae,recoverWalletCallbacks:ne,setWalletRecoveryCallbacks:de,createSolanaWalletCallbacks:be,recoverSolanaWalletCallbacks:Se,setOAuthState:p,siweState:T,setSiweState:j,otpState:m,setOtpState:f,passkeyState:D,setPasskeyState:N,farcasterState:V,setFarcasterState:X}},e.children),K.createElement(Nt,{style:{width:0,height:0,overflow:"hidden"}},K.createElement(ge,{logLevel:e.logLevel,client:E,isClientReady:l,setWebViewState:i,webViewState:n})))};var De=e=>e.status!=="loading",pe=(e={})=>{let{user:t,oAuthState:o,setOAuthState:a,oAuthCallbacks:c,client:n}=zt(ue),i=e.action?e.action==="login":!t;qt(()=>{c.current={onSuccess:e.onSuccess,onError:e.onError}},[e.onSuccess,e.onError]);let l=ze(r=>{var u;let s=C(r);return a({status:"error",error:s}),(u=e==null?void 0:e.onError)==null||u.call(e,s),s},[e==null?void 0:e.onError]);return{start:ze(function(S){return y(this,arguments,function*({provider:s,redirectUri:u,isLegacyAppleIosBehaviorEnabled:v=!1}){var h,m,f;a({status:"loading"});try{if(t&&e.action==="login")throw new I({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 I({code:"attempted_link_oauth_before_logged_in",error:"Must be logged in to link an OAuth account, use `useLoginWithOAuth`"});let{url:b}=yield n.auth.oauth.generateURL(s,M.createURL(u||"/")),p,w;if(me.OS==="ios"&&s==="apple"&&!v){let N=(h=new URL(b).searchParams.get("state"))!=null?h:"",V=yield qe.signInAsync({state:N});if(!V.authorizationCode)throw new I({error:"OAuth invalid credentials",code:i?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(i){let X=yield n.auth.oauth.loginWithCode(V.authorizationCode,N,s,"raw");p=X.user,w=X.is_new_user}else p=yield n.auth.oauth.linkWithCode(V.authorizationCode,N,s,"raw");return(m=e==null?void 0:e.onSuccess)==null||m.call(e,p,w),a({status:"done"}),p!=null?p:void 0}let A=me.OS==="android"?b.replace("x.com","twitter.com"):b,R=yield G.openAuthSessionAsync(A);if(me.OS==="android")return;if(R.type!=="success")throw[G.WebBrowserResultType.CANCEL,G.WebBrowserResultType.DISMISS].includes(R.type)?new I({error:"OAuth was cancelled",code:i?"login_with_oauth_was_cancelled_by_user":"link_with_oauth_was_cancelled_by_user"}):new I({error:"OAuth session failed",code:i?"failed_to_complete_login_with_oauth":"failed_to_complete_link_with_oauth"});let{queryParams:Y}=M.parse(R.url),{privy_oauth_state:T,privy_oauth_code:j}=Y;if(!j||!T)throw new I({error:"OAuth invalid credentials",code:i?"login_with_oauth_returned_with_invalid_credentials":"link_with_oauth_returned_with_invalid_credentials"});if(i){let D=yield n.auth.oauth.loginWithCode(j,T,s);p=D.user,w=D.is_new_user}else p=yield n.auth.oauth.linkWithCode(j,T,s);return(f=e==null?void 0:e.onSuccess)==null||f.call(e,p,w),yield M.openURL(R.url.split("?")[0]),a({status:"done"}),p!=null?p:void 0}catch(b){l(b)}})},[t,n,a,l]),state:o}};function No(e){let{state:t,start:o}=pe(H(_({},e),{action:"login"}));return{state:t,login:o}}function Vo(e){let{state:t,start:o}=pe(H(_({},e),{action:"link"}));return{state:t,link:o}}function Ho(e){return pe(e)}var Ne=()=>Ht;function Ve(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:()=>y(this,null,function*(){return[]})}}var He={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:()=>y(void 0,null,function*(){return[]})};function Bo(e){return e.status==="connected"}function Ko(e){return e.status==="reconnecting"}function Go(e){return e.status==="connecting"}function Yo(e){return e.status==="disconnected"}function Xo(e){return e.status==="not-created"}function Jo(e){return e.status==="creating"}function $o(e){return e.status==="error"}function Qo(e){return e.status==="needs-recovery"}export{_ as a,H as b,y as c,C as d,Sr as e,Er as f,No as g,Vo as h,Ho as i,He as j,ue as k,xo as l,Po as m,Bo as n,Ko as o,Go as p,Yo as q,Xo as r,Jo as s,$o as t,Qo as u};
|
package/dist/esm/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as O,c as S,d as f,e as W,f as R,g as Y,h as Z,i as $,j as p,k as h,l as 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-FVF74TBA.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};
|
|
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 Oe,m as Re,n as Pe,o as Fe,p as Me,q as He,r as Ae,s as Te,t as Ue,u as Ie}from"./chunk-U6537SSN.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 ze=e=>{let{user:s,client:d,setSiweState:a,siweState:l}=ee(h),m=M(g=>{var o;let u=f(g);return a({status:"error",error:u}),(o=e==null?void 0:e.onError)==null||o.call(e,u),u},[e==null?void 0:e.onError]),t=M(c=>S(void 0,[c],function*({wallet:g,from:{domain:u,uri:o}}){var r;try{a({status:"generating-message"});let n=yield d.auth.siwe.init(g,u,o);return a({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]),i=M(o=>S(void 0,[o],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"});a({status:"submitting-signature"});let r=yield d.auth.siwe.linkWithSiwe(g,void 0,u);return a({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:i,state:l}};import{useCallback as H,useContext as te}from"react";import{PrivyClientError as ne}from"@privy-io/js-sdk-core";var Xe=e=>{let{user:s,client:d,setSiweState:a,siweState:l}=te(h),m=H(g=>{var o;let u=f(g);return a({status:"error",error:u}),(o=e==null?void 0:e.onError)==null||o.call(e,u),u},[e==null?void 0:e.onError]),t=H(c=>S(void 0,[c],function*({wallet:g,from:{domain:u,uri:o}}){var r;try{a({status:"generating-message"});let n=yield d.auth.siwe.init(g,u,o);return a({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(o=>S(void 0,[o],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"});a({status:"submitting-signature"});let r=yield d.auth.siwe.loginWithSiwe(g,void 0,u);return a({status:"done"}),(c=e==null?void 0:e.onSuccess)==null||c.call(e,r.user,r.is_new_user),r.user}catch(r){m(r)}}),[s,d,m,e==null?void 0:e.onSuccess]),generateSiweMessage:t,state:l}};import{useCallback as A,useContext as oe,useState as ie}from"react";import{PrivyClientError as q}from"@privy-io/js-sdk-core";var tr=e=>{let[s,d]=ie(""),{user:a,client:l,otpState:m,setOtpState:t}=oe(h),i=A(o=>{var r;let c=f(o);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:o}){var r;d(o);try{t({status:"sending-code"});let n=yield l.auth.email.sendCode(o);return t({status:"awaiting-code-input"}),(r=e==null?void 0:e.onSendCodeSuccess)==null||r.call(e,{email:o}),n}catch(n){return i(n),{success:!1}}}),[l,i,e==null?void 0:e.onSendCodeSuccess]),u=A(r=>S(void 0,[r],function*({code:o,email:c}){var n;try{if(!a)throw new q({code:"attempted_link_email_before_logged_in",error:"Must be logged in to link an email, Use `useLoginWithEmail` to login with email"});let k=c||s;if(!k)throw new q({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid email before calling `linkWithCode`"});t({status:"submitting-code"});let w=yield l.auth.email.linkWithCode(k,o);return t({status:"done"}),(n=e==null?void 0:e.onLinkSuccess)==null||n.call(e,w),w}catch(k){i(k)}}),[a,l,s,i,e==null?void 0:e.onLinkSuccess]);return{sendCode:g,linkWithCode:u,state:m}};import{useCallback as T,useContext as ae,useState as ce}from"react";import{PrivyClientError as B}from"@privy-io/js-sdk-core";var sr=e=>{let[s,d]=ce(""),{user:a,client:l,otpState:m,setOtpState:t}=ae(h),i=T(o=>{var r;let c=f(o);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*({email:o}){var r;d(o);try{t({status:"sending-code"});let n=yield l.auth.email.sendCode(o);return t({status:"awaiting-code-input"}),(r=e==null?void 0:e.onSendCodeSuccess)==null||r.call(e,{email:o}),n}catch(n){return i(n),{success:!1}}}),[l,i,e==null?void 0:e.onSendCodeSuccess]),u=T(r=>S(void 0,[r],function*({code:o,email:c}){var n;try{if(a)throw new B({code:"attempted_login_with_email_while_already_logged_in",error:"Already logged in, use `useLinkWithEmail` if you are trying to link an email to an existing account"});let k=c||s;if(!k)throw new B({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid email before calling `loginWithCode`"});t({status:"submitting-code"});let w=yield l.auth.email.loginWithCode(k,o);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){i(k)}}),[a,l,s,i,e==null?void 0:e.onLoginSuccess]);return{sendCode:g,loginWithCode:u,state:m}};import{useCallback as U,useContext as le,useState as se}from"react";import{PrivyClientError as J}from"@privy-io/js-sdk-core";var fr=e=>{let[s,d]=se(""),{user:a,client:l,otpState:m,setOtpState:t}=le(h),i=U(o=>{var r;let c=f(o);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*({phone:o}){var r;d(o);try{t({status:"sending-code"});let n=yield l.auth.phone.sendCode(o);return t({status:"awaiting-code-input"}),(r=e==null?void 0:e.onSendCodeSuccess)==null||r.call(e,{phone:o}),n}catch(n){return i(n),{success:!1}}}),[l,i,e==null?void 0:e.onSendCodeSuccess]),u=U(r=>S(void 0,[r],function*({code:o,phone:c}){var n;try{if(!a)throw new J({code:"attempted_link_sms_before_logged_in",error:"Must be logged in to link a phone number, Use `useLoginWithSMS` to login with a phone number"});if(!(c||s))throw new J({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid phone number before calling `linkWithCode`"});t({status:"submitting-code"});let w=yield l.auth.phone.linkWithCode(c||s,o);return t({status:"done"}),(n=e==null?void 0:e.onLinkSuccess)==null||n.call(e,w),w}catch(k){i(k)}}),[a,l,s,i,e==null?void 0:e.onLinkSuccess]);return{sendCode:g,linkWithCode:u,state:m}};import{useCallback as I,useContext as ue,useState as de}from"react";import{PrivyClientError as K}from"@privy-io/js-sdk-core";var Cr=e=>{let[s,d]=de(""),{user:a,client:l,otpState:m,setOtpState:t}=ue(h),i=I(o=>{var r;let c=f(o);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=I(c=>S(void 0,[c],function*({phone:o}){var r;d(o);try{t({status:"sending-code"});let n=yield l.auth.phone.sendCode(o);return t({status:"awaiting-code-input"}),(r=e==null?void 0:e.onSendCodeSuccess)==null||r.call(e,{phone:o}),n}catch(n){return i(n),{success:!1}}}),[l,i,e==null?void 0:e.onSendCodeSuccess]),u=I(r=>S(void 0,[r],function*({code:o,phone:c}){var n;try{if(a)throw new K({code:"attempted_login_with_sms_while_already_logged_in",error:"Already logged in, use `useLinkWithSMS` if you are trying to link a phone number to an existing account"});if(!(c||s))throw new K({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid phone number before calling `loginWithCode`"});t({status:"submitting-code"});let w=yield l.auth.phone.loginWithCode(c||s,o);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){i(k)}}),[a,l,s,i,e==null?void 0:e.onLoginSuccess]);return{sendCode:g,loginWithCode:u,state:m}};import*as P from"expo-linking";import{useCallback as G,useContext as me,useEffect as ge,useRef as he}from"react";import{PrivyClientError as v}from"@privy-io/js-sdk-core";var Pr=e=>{let{appState:s,getCurrentAppState:d}=R(),{client:a,user:l,farcasterState:m,setFarcasterState:t}=me(h),i=he(!1),g=G(c=>{var n;let r=f(c);return t({status:"error",error:r}),(n=e==null?void 0:e.onError)==null||n.call(e,r),r},[e==null?void 0:e.onError,t]),u=G(()=>{i.current=!0},[]),o=G((k,...w)=>S(void 0,[k,...w],function*({relyingParty:c,redirectUrl:r},n={pollAttempts:10,pollIntervalMs:1e3}){var C;try{if(i.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 a.auth.farcaster.initializeAuth({relyingParty:c,redirectUrl:P.createURL(r!=null?r:"/")});if(!y)throw new v({code:"failed_to_generate_farcaster_uri",error:"Failed to generate farcaster uri"});if(!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(i.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 a.auth.farcaster.getFarcasterStatus({channel_token:E});if(b.state==="completed"){t({status:"submitting-token"});let _=yield a.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)}}),[a,e==null?void 0:e.onSuccess,g,t,l]);return ge(()=>()=>{u()},[]),{linkWithFarcaster:o,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 i=yield s.auth.farcaster.unlink({fid:l});return(t=e==null?void 0:e.onSuccess)==null||t.call(e,i),i}catch(i){throw d(i)}}),[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 Vr=e=>{let{appState:s,getCurrentAppState:d}=R(),{client:a,user:l,farcasterState:m,setFarcasterState:t}=fe(h),i=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(()=>{i.current=!0},[]),o=j((k,...w)=>S(void 0,[k,...w],function*({relyingParty:c,redirectUrl:r},n={pollAttempts:10,pollIntervalMs:1e3}){var C;try{if(i.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 a.auth.farcaster.initializeAuth({relyingParty:c,redirectUrl:F.createURL(r!=null?r:"/")});if(!y)throw new x({code:"failed_to_generate_farcaster_uri",error:"Failed to generate farcaster uri"});if(!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(i.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 a.auth.farcaster.getFarcasterStatus({channel_token:E});if(b.state==="completed"){t({status:"submitting-token"});let _=yield a.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)}}),[a,g,e==null?void 0:e.onSuccess,t,l,s]);return we(()=>()=>{u()},[]),{loginWithFarcaster:o,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:a,setWalletRecoveryCallbacks:l}=ye(h),{onCreateWalletSuccess:m,onCreateWalletError:t,onRecoverWalletError:i,onRecoverWalletSuccess:g,onSetWalletRecoverySuccess:u,onSetWalletRecoveryError:o}=e;return z(()=>{d.current={onSuccess:m,onError:t}},[m,t]),z(()=>{a.current={onSuccess:g,onError:i}},[g,i]),z(()=>{l.current={onSuccess:u,onError:o}},[g,i]),s};var Zr=({onStateChange:e})=>{let s=V();return Ee(()=>{e(s)},[s])};import{useContext as _e}from"react";var rt=()=>{let{getIdentityToken:e}=_e(h);return{getIdentityToken:e}};import{useContext as We,useEffect as X}from"react";var Ce=(e={})=>{let{solanaWallet:s,createSolanaWalletCallbacks:d,recoverSolanaWalletCallbacks:a}=We(h),{onCreateWalletSuccess:l,onCreateWalletError:m,onRecoverWalletError:t,onRecoverWalletSuccess:i}=e;return X(()=>{d.current={onSuccess:l,onError:m}},[l,m]),X(()=>{a.current={onSuccess:i,onError:t}},[i,t]),s};import{useContext as Le}from"react";var be=()=>{let{client:e}=Le(h);return e};import{useContext as ve}from"react";var xe=()=>{let{user:e,isReady:s,logout:d,getAccessToken:a}=ve(h);return{user:e,isReady:s,logout:d,getAccessToken:a}};export{h as PrivyContext,Re as PrivyProvider,p as SecureStorageAdapter,Oe as getAccessToken,Ue as hasError,Pe as isConnected,Me as isConnecting,Te as isCreating,He as isDisconnected,Ae as isNotCreated,Fe as isReconnecting,Ie as needsRecovery,Ce as useEmbeddedSolanaWallet,V as useEmbeddedWallet,Zr as useEmbeddedWalletStateChange,rt as useIdentityToken,tr as useLinkEmail,fr as useLinkSMS,Pr as useLinkWithFarcaster,Z as useLinkWithOAuth,ze as useLinkWithSiwe,sr as useLoginWithEmail,Vr as useLoginWithFarcaster,Y as useLoginWithOAuth,Cr as useLoginWithSMS,Xe as useLoginWithSiwe,$ as useOAuthFlow,xe as usePrivy,be 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-U6537SSN.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
|
@@ -104,7 +104,200 @@ declare const useLinkWithFarcaster: (opts?: LinkWithFarcasterOptions) => Farcast
|
|
|
104
104
|
declare const useUnlinkFarcaster: (opts?: LinkWithFarcasterOptions) => {
|
|
105
105
|
unlinkFarcaster: ({ fid }: {
|
|
106
106
|
fid: number;
|
|
107
|
-
}) => Promise<
|
|
107
|
+
}) => Promise<{
|
|
108
|
+
id: string;
|
|
109
|
+
mfa_methods: ({
|
|
110
|
+
type: "sms";
|
|
111
|
+
verified_at: number;
|
|
112
|
+
} | {
|
|
113
|
+
type: "totp";
|
|
114
|
+
verified_at: number;
|
|
115
|
+
} | {
|
|
116
|
+
type: "passkey";
|
|
117
|
+
verified_at: number;
|
|
118
|
+
})[];
|
|
119
|
+
linked_accounts: ({
|
|
120
|
+
type: "email";
|
|
121
|
+
address: string;
|
|
122
|
+
verified_at: number;
|
|
123
|
+
first_verified_at: number | null;
|
|
124
|
+
latest_verified_at: number | null;
|
|
125
|
+
} | {
|
|
126
|
+
type: "phone";
|
|
127
|
+
phoneNumber: string;
|
|
128
|
+
verified_at: number;
|
|
129
|
+
first_verified_at: number | null;
|
|
130
|
+
latest_verified_at: number | null;
|
|
131
|
+
} | {
|
|
132
|
+
type: "wallet";
|
|
133
|
+
address: string;
|
|
134
|
+
verified_at: number;
|
|
135
|
+
first_verified_at: number | null;
|
|
136
|
+
latest_verified_at: number | null;
|
|
137
|
+
chain_type: "ethereum";
|
|
138
|
+
wallet_client: "unknown";
|
|
139
|
+
chain_id?: string | undefined;
|
|
140
|
+
wallet_client_type?: string | undefined;
|
|
141
|
+
connector_type?: string | undefined;
|
|
142
|
+
} | {
|
|
143
|
+
type: "farcaster";
|
|
144
|
+
fid: number;
|
|
145
|
+
verified_at: number;
|
|
146
|
+
first_verified_at: number | null;
|
|
147
|
+
latest_verified_at: number | null;
|
|
148
|
+
owner_address: string;
|
|
149
|
+
username?: string | undefined;
|
|
150
|
+
display_name?: string | undefined;
|
|
151
|
+
bio?: string | undefined;
|
|
152
|
+
profile_picture?: string | undefined;
|
|
153
|
+
profile_picture_url?: string | undefined;
|
|
154
|
+
homepage_url?: string | undefined;
|
|
155
|
+
signer_public_key?: string | undefined;
|
|
156
|
+
} | {
|
|
157
|
+
type: "passkey";
|
|
158
|
+
credential_id: string;
|
|
159
|
+
verified_at: number;
|
|
160
|
+
first_verified_at: number | null;
|
|
161
|
+
latest_verified_at: number | null;
|
|
162
|
+
enrolled_in_mfa: boolean;
|
|
163
|
+
created_with_browser?: string | undefined;
|
|
164
|
+
created_with_os?: string | undefined;
|
|
165
|
+
created_with_device?: string | undefined;
|
|
166
|
+
authenticator_name?: string | undefined;
|
|
167
|
+
} | {
|
|
168
|
+
telegramUserId: string;
|
|
169
|
+
firstName: string | null | undefined;
|
|
170
|
+
type: "telegram";
|
|
171
|
+
verified_at: number;
|
|
172
|
+
first_verified_at: number | null;
|
|
173
|
+
latest_verified_at: number | null;
|
|
174
|
+
telegram_user_id: string;
|
|
175
|
+
username?: string | null | undefined;
|
|
176
|
+
first_name?: string | null | undefined;
|
|
177
|
+
last_name?: string | null | undefined;
|
|
178
|
+
photo_url?: string | null | undefined;
|
|
179
|
+
} | {
|
|
180
|
+
type: "wallet";
|
|
181
|
+
address: string;
|
|
182
|
+
verified_at: number;
|
|
183
|
+
first_verified_at: number | null;
|
|
184
|
+
latest_verified_at: number | null;
|
|
185
|
+
chain_id: "eip155:1";
|
|
186
|
+
chain_type: "ethereum";
|
|
187
|
+
wallet_client: "privy";
|
|
188
|
+
wallet_client_type: "privy";
|
|
189
|
+
connector_type: "embedded";
|
|
190
|
+
imported: boolean;
|
|
191
|
+
wallet_index: number;
|
|
192
|
+
recovery_method: "user-passcode" | "google-drive" | "icloud" | "privy";
|
|
193
|
+
} | {
|
|
194
|
+
type: "wallet";
|
|
195
|
+
address: string;
|
|
196
|
+
public_key: string;
|
|
197
|
+
verified_at: number;
|
|
198
|
+
first_verified_at: number | null;
|
|
199
|
+
latest_verified_at: number | null;
|
|
200
|
+
chain_type: "solana";
|
|
201
|
+
wallet_client_type: "privy";
|
|
202
|
+
connector_type: "embedded";
|
|
203
|
+
imported: boolean;
|
|
204
|
+
recovery_method: "privy";
|
|
205
|
+
} | {
|
|
206
|
+
type: "google_oauth";
|
|
207
|
+
name: string | null;
|
|
208
|
+
email: string;
|
|
209
|
+
subject: string;
|
|
210
|
+
verified_at: number;
|
|
211
|
+
first_verified_at: number | null;
|
|
212
|
+
latest_verified_at: number | null;
|
|
213
|
+
} | {
|
|
214
|
+
type: "twitter_oauth";
|
|
215
|
+
name: string | null;
|
|
216
|
+
username: string | null;
|
|
217
|
+
subject: string;
|
|
218
|
+
verified_at: number;
|
|
219
|
+
first_verified_at: number | null;
|
|
220
|
+
latest_verified_at: number | null;
|
|
221
|
+
profile_picture_url: string | null;
|
|
222
|
+
} | {
|
|
223
|
+
type: "discord_oauth";
|
|
224
|
+
email: string | null;
|
|
225
|
+
username: string | null;
|
|
226
|
+
subject: string;
|
|
227
|
+
verified_at: number;
|
|
228
|
+
first_verified_at: number | null;
|
|
229
|
+
latest_verified_at: number | null;
|
|
230
|
+
} | {
|
|
231
|
+
type: "github_oauth";
|
|
232
|
+
name: string | null;
|
|
233
|
+
email: string | null;
|
|
234
|
+
username: string | null;
|
|
235
|
+
subject: string;
|
|
236
|
+
verified_at: number;
|
|
237
|
+
first_verified_at: number | null;
|
|
238
|
+
latest_verified_at: number | null;
|
|
239
|
+
} | {
|
|
240
|
+
type: "linkedin_oauth";
|
|
241
|
+
email: string | null;
|
|
242
|
+
subject: string;
|
|
243
|
+
verified_at: number;
|
|
244
|
+
first_verified_at: number | null;
|
|
245
|
+
latest_verified_at: number | null;
|
|
246
|
+
name?: string | undefined;
|
|
247
|
+
vanity_name?: string | undefined;
|
|
248
|
+
} | {
|
|
249
|
+
type: "spotify_oauth";
|
|
250
|
+
name: string | null;
|
|
251
|
+
email: string | null;
|
|
252
|
+
subject: string;
|
|
253
|
+
verified_at: number;
|
|
254
|
+
first_verified_at: number | null;
|
|
255
|
+
latest_verified_at: number | null;
|
|
256
|
+
} | {
|
|
257
|
+
type: "instagram_oauth";
|
|
258
|
+
username: string | null;
|
|
259
|
+
subject: string;
|
|
260
|
+
verified_at: number;
|
|
261
|
+
first_verified_at: number | null;
|
|
262
|
+
latest_verified_at: number | null;
|
|
263
|
+
} | {
|
|
264
|
+
type: "tiktok_oauth";
|
|
265
|
+
name: string | null;
|
|
266
|
+
username: string | null;
|
|
267
|
+
subject: string;
|
|
268
|
+
verified_at: number;
|
|
269
|
+
first_verified_at: number | null;
|
|
270
|
+
latest_verified_at: number | null;
|
|
271
|
+
} | {
|
|
272
|
+
type: "apple_oauth";
|
|
273
|
+
email: string | null;
|
|
274
|
+
subject: string;
|
|
275
|
+
verified_at: number;
|
|
276
|
+
first_verified_at: number | null;
|
|
277
|
+
latest_verified_at: number | null;
|
|
278
|
+
} | {
|
|
279
|
+
type: "custom_auth";
|
|
280
|
+
verified_at: number;
|
|
281
|
+
first_verified_at: number | null;
|
|
282
|
+
latest_verified_at: number | null;
|
|
283
|
+
custom_user_id: string;
|
|
284
|
+
} | {
|
|
285
|
+
type: "cross_app";
|
|
286
|
+
subject: string;
|
|
287
|
+
verified_at: number;
|
|
288
|
+
first_verified_at: number | null;
|
|
289
|
+
latest_verified_at: number | null;
|
|
290
|
+
provider_app_id: string;
|
|
291
|
+
embedded_wallets: {
|
|
292
|
+
address: string;
|
|
293
|
+
}[];
|
|
294
|
+
smart_wallets: {
|
|
295
|
+
address: string;
|
|
296
|
+
}[];
|
|
297
|
+
})[];
|
|
298
|
+
created_at: number;
|
|
299
|
+
has_accepted_terms: boolean;
|
|
300
|
+
}>;
|
|
108
301
|
};
|
|
109
302
|
|
|
110
303
|
declare const useLoginWithFarcaster: (opts?: LoginWithFarcasterOptions) => FarcasterHookResult<"login">;
|
|
@@ -130,6 +323,10 @@ interface UseOnEmbeddedWalletStateChange {
|
|
|
130
323
|
*/
|
|
131
324
|
declare const useEmbeddedWalletStateChange: ({ onStateChange }: UseOnEmbeddedWalletStateChange) => void;
|
|
132
325
|
|
|
326
|
+
declare const useIdentityToken: () => {
|
|
327
|
+
getIdentityToken: () => Promise<string | null>;
|
|
328
|
+
};
|
|
329
|
+
|
|
133
330
|
type UseEmbeddedWallet = {
|
|
134
331
|
/**
|
|
135
332
|
* Callback function triggered when wallet creation is successful.
|
|
@@ -225,6 +422,7 @@ type PrivyContext = {
|
|
|
225
422
|
setFarcasterState: React.Dispatch<React.SetStateAction<FarcasterFlowState>>;
|
|
226
423
|
logout: () => Promise<void>;
|
|
227
424
|
getAccessToken: () => Promise<string | null>;
|
|
425
|
+
getIdentityToken: () => Promise<string | null>;
|
|
228
426
|
};
|
|
229
427
|
declare const PrivyContext: React.Context<PrivyContext>;
|
|
230
428
|
interface PrivyProviderProps {
|
|
@@ -383,4 +581,4 @@ declare function useOAuthFlow(opts?: OAuthHookOptions): OAuthFlowHookResult;
|
|
|
383
581
|
*/
|
|
384
582
|
declare const SecureStorageAdapter: Storage;
|
|
385
583
|
|
|
386
|
-
export { EmbeddedSolanaWalletState, EmbeddedWalletState, LinkWithEmailHookResult, LinkWithEmailOptions, LinkWithSMSHookResult, LinkWithSMSOptions, LoginWithEmailHookResult, LoginWithEmailOptions, LoginWithSMSHookResult, LoginWithSMSOptions, OAuthFlowHookResult, OAuthFlowState, OtpFlowState, PrivyContext, PrivyProvider, PrivyProviderProps, RecoveryFlowState, SecureStorageAdapter, UseOnEmbeddedWalletStateChange, getAccessToken, useEmbeddedSolanaWallet, useEmbeddedWallet, useEmbeddedWalletStateChange, useLinkEmail, useLinkSMS, useLinkWithFarcaster, useLinkWithOAuth, useLinkWithSiwe, useLoginWithEmail, useLoginWithFarcaster, useLoginWithOAuth, useLoginWithSMS, useLoginWithSiwe, useOAuthFlow, usePrivy, usePrivyClient, useUnlinkFarcaster };
|
|
584
|
+
export { EmbeddedSolanaWalletState, EmbeddedWalletState, LinkWithEmailHookResult, LinkWithEmailOptions, LinkWithSMSHookResult, LinkWithSMSOptions, LoginWithEmailHookResult, LoginWithEmailOptions, LoginWithSMSHookResult, LoginWithSMSOptions, OAuthFlowHookResult, OAuthFlowState, OtpFlowState, PrivyContext, PrivyProvider, PrivyProviderProps, RecoveryFlowState, SecureStorageAdapter, UseOnEmbeddedWalletStateChange, getAccessToken, useEmbeddedSolanaWallet, useEmbeddedWallet, useEmbeddedWalletStateChange, useIdentityToken, useLinkEmail, useLinkSMS, useLinkWithFarcaster, useLinkWithOAuth, useLinkWithSiwe, useLoginWithEmail, useLoginWithFarcaster, useLoginWithOAuth, useLoginWithSMS, useLoginWithSiwe, useOAuthFlow, usePrivy, usePrivyClient, useUnlinkFarcaster };
|
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 _chunkFVF74TBAjs = require('./chunk-FVF74TBA.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, _chunkFVF74TBAjs.k),m=_react.useCallback.call(void 0, g=>{var i;let u=_chunkFVF74TBAjs.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=>_chunkFVF74TBAjs.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=>_chunkFVF74TBAjs.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, _chunkFVF74TBAjs.k),m=_react.useCallback.call(void 0, g=>{var i;let u=_chunkFVF74TBAjs.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=>_chunkFVF74TBAjs.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=>_chunkFVF74TBAjs.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, _chunkFVF74TBAjs.k),a=_react.useCallback.call(void 0, i=>{var r;let c=_chunkFVF74TBAjs.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=>_chunkFVF74TBAjs.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=>_chunkFVF74TBAjs.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, _chunkFVF74TBAjs.k),a=_react.useCallback.call(void 0, i=>{var r;let c=_chunkFVF74TBAjs.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=>_chunkFVF74TBAjs.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=>_chunkFVF74TBAjs.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, _chunkFVF74TBAjs.k),a=_react.useCallback.call(void 0, i=>{var r;let c=_chunkFVF74TBAjs.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=>_chunkFVF74TBAjs.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=>_chunkFVF74TBAjs.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, _chunkFVF74TBAjs.k),a=_react.useCallback.call(void 0, i=>{var r;let c=_chunkFVF74TBAjs.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=>_chunkFVF74TBAjs.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=>_chunkFVF74TBAjs.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}=_chunkFVF74TBAjs.f.call(void 0, ),{client:o,user:l,farcasterState:m,setFarcasterState:t}=_react.useContext.call(void 0, _chunkFVF74TBAjs.k),a=_react.useRef.call(void 0, !1),g=_react.useCallback.call(void 0, c=>{var n;let r=_chunkFVF74TBAjs.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)=>_chunkFVF74TBAjs.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 _chunkFVF74TBAjs.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(_chunkFVF74TBAjs.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 _chunkFVF74TBAjs.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, _chunkFVF74TBAjs.k),d=_react.useCallback.call(void 0, l=>{var t;let m=_chunkFVF74TBAjs.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=>_chunkFVF74TBAjs.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}=_chunkFVF74TBAjs.f.call(void 0, ),{client:o,user:l,farcasterState:m,setFarcasterState:t}=_react.useContext.call(void 0, _chunkFVF74TBAjs.k),a=_react.useRef.call(void 0, !1),g=_react.useCallback.call(void 0, c=>{var n;let r=_chunkFVF74TBAjs.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)=>_chunkFVF74TBAjs.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 _chunkFVF74TBAjs.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(_chunkFVF74TBAjs.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 _chunkFVF74TBAjs.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, _chunkFVF74TBAjs.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, _chunkFVF74TBAjs.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, _chunkFVF74TBAjs.k);return e};var ve=()=>{let{user:e,isReady:s,logout:d,getAccessToken:o}=_react.useContext.call(void 0, _chunkFVF74TBAjs.k);return{user:e,isReady:s,logout:d,getAccessToken:o}};exports.PrivyContext = _chunkFVF74TBAjs.k; exports.PrivyProvider = _chunkFVF74TBAjs.m; exports.SecureStorageAdapter = _chunkFVF74TBAjs.j; exports.getAccessToken = _chunkFVF74TBAjs.l; exports.hasError = _chunkFVF74TBAjs.t; exports.isConnected = _chunkFVF74TBAjs.n; exports.isConnecting = _chunkFVF74TBAjs.p; exports.isCreating = _chunkFVF74TBAjs.s; exports.isDisconnected = _chunkFVF74TBAjs.q; exports.isNotCreated = _chunkFVF74TBAjs.r; exports.isReconnecting = _chunkFVF74TBAjs.o; exports.needsRecovery = _chunkFVF74TBAjs.u; exports.useEmbeddedSolanaWallet = We; exports.useEmbeddedWallet = V; exports.useEmbeddedWalletStateChange = Yr; exports.useLinkEmail = rr; exports.useLinkSMS = Sr; exports.useLinkWithFarcaster = Rr; exports.useLinkWithOAuth = _chunkFVF74TBAjs.h; exports.useLinkWithSiwe = je; exports.useLoginWithEmail = lr; exports.useLoginWithFarcaster = zr; exports.useLoginWithOAuth = _chunkFVF74TBAjs.g; exports.useLoginWithSMS = Wr; exports.useLoginWithSiwe = Qe; exports.useOAuthFlow = _chunkFVF74TBAjs.i; exports.usePrivy = ve; exports.usePrivyClient = Le; exports.useUnlinkFarcaster = Ur;
|
|
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 _chunkU6537SSNjs = require('./chunk-U6537SSN.js');var _jssdkcore = require('@privy-io/js-sdk-core'); _createStarExport(_jssdkcore);var _react = require('react');var ze=e=>{let{user:s,client:d,setSiweState:a,siweState:l}=_react.useContext.call(void 0, _chunkU6537SSNjs.k),m=_react.useCallback.call(void 0, g=>{var o;let u=_chunkU6537SSNjs.d.call(void 0, g);return a({status:"error",error:u}),(o=e==null?void 0:e.onError)==null||o.call(e,u),u},[e==null?void 0:e.onError]),t=_react.useCallback.call(void 0, c=>_chunkU6537SSNjs.c.call(void 0, void 0,[c],function*({wallet:g,from:{domain:u,uri:o}}){var r;try{a({status:"generating-message"});let n=yield d.auth.siwe.init(g,u,o);return a({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]),i=_react.useCallback.call(void 0, o=>_chunkU6537SSNjs.c.call(void 0, void 0,[o],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"});a({status:"submitting-signature"});let r=yield d.auth.siwe.linkWithSiwe(g,void 0,u);return a({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:i,state:l}};var Xe=e=>{let{user:s,client:d,setSiweState:a,siweState:l}=_react.useContext.call(void 0, _chunkU6537SSNjs.k),m=_react.useCallback.call(void 0, g=>{var o;let u=_chunkU6537SSNjs.d.call(void 0, g);return a({status:"error",error:u}),(o=e==null?void 0:e.onError)==null||o.call(e,u),u},[e==null?void 0:e.onError]),t=_react.useCallback.call(void 0, c=>_chunkU6537SSNjs.c.call(void 0, void 0,[c],function*({wallet:g,from:{domain:u,uri:o}}){var r;try{a({status:"generating-message"});let n=yield d.auth.siwe.init(g,u,o);return a({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, o=>_chunkU6537SSNjs.c.call(void 0, void 0,[o],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"});a({status:"submitting-signature"});let r=yield d.auth.siwe.loginWithSiwe(g,void 0,u);return a({status:"done"}),(c=e==null?void 0:e.onSuccess)==null||c.call(e,r.user,r.is_new_user),r.user}catch(r){m(r)}}),[s,d,m,e==null?void 0:e.onSuccess]),generateSiweMessage:t,state:l}};var tr=e=>{let[s,d]=_react.useState.call(void 0, ""),{user:a,client:l,otpState:m,setOtpState:t}=_react.useContext.call(void 0, _chunkU6537SSNjs.k),i=_react.useCallback.call(void 0, o=>{var r;let c=_chunkU6537SSNjs.d.call(void 0, o);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=>_chunkU6537SSNjs.c.call(void 0, void 0,[c],function*({email:o}){var r;d(o);try{t({status:"sending-code"});let n=yield l.auth.email.sendCode(o);return t({status:"awaiting-code-input"}),(r=e==null?void 0:e.onSendCodeSuccess)==null||r.call(e,{email:o}),n}catch(n){return i(n),{success:!1}}}),[l,i,e==null?void 0:e.onSendCodeSuccess]),u=_react.useCallback.call(void 0, r=>_chunkU6537SSNjs.c.call(void 0, void 0,[r],function*({code:o,email:c}){var n;try{if(!a)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_link_email_before_logged_in",error:"Must be logged in to link an email, Use `useLoginWithEmail` to login with email"});let k=c||s;if(!k)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid email before calling `linkWithCode`"});t({status:"submitting-code"});let w=yield l.auth.email.linkWithCode(k,o);return t({status:"done"}),(n=e==null?void 0:e.onLinkSuccess)==null||n.call(e,w),w}catch(k){i(k)}}),[a,l,s,i,e==null?void 0:e.onLinkSuccess]);return{sendCode:g,linkWithCode:u,state:m}};var sr=e=>{let[s,d]=_react.useState.call(void 0, ""),{user:a,client:l,otpState:m,setOtpState:t}=_react.useContext.call(void 0, _chunkU6537SSNjs.k),i=_react.useCallback.call(void 0, o=>{var r;let c=_chunkU6537SSNjs.d.call(void 0, o);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=>_chunkU6537SSNjs.c.call(void 0, void 0,[c],function*({email:o}){var r;d(o);try{t({status:"sending-code"});let n=yield l.auth.email.sendCode(o);return t({status:"awaiting-code-input"}),(r=e==null?void 0:e.onSendCodeSuccess)==null||r.call(e,{email:o}),n}catch(n){return i(n),{success:!1}}}),[l,i,e==null?void 0:e.onSendCodeSuccess]),u=_react.useCallback.call(void 0, r=>_chunkU6537SSNjs.c.call(void 0, void 0,[r],function*({code:o,email:c}){var n;try{if(a)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_login_with_email_while_already_logged_in",error:"Already logged in, use `useLinkWithEmail` if you are trying to link an email to an existing account"});let k=c||s;if(!k)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid email before calling `loginWithCode`"});t({status:"submitting-code"});let w=yield l.auth.email.loginWithCode(k,o);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){i(k)}}),[a,l,s,i,e==null?void 0:e.onLoginSuccess]);return{sendCode:g,loginWithCode:u,state:m}};var fr=e=>{let[s,d]=_react.useState.call(void 0, ""),{user:a,client:l,otpState:m,setOtpState:t}=_react.useContext.call(void 0, _chunkU6537SSNjs.k),i=_react.useCallback.call(void 0, o=>{var r;let c=_chunkU6537SSNjs.d.call(void 0, o);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=>_chunkU6537SSNjs.c.call(void 0, void 0,[c],function*({phone:o}){var r;d(o);try{t({status:"sending-code"});let n=yield l.auth.phone.sendCode(o);return t({status:"awaiting-code-input"}),(r=e==null?void 0:e.onSendCodeSuccess)==null||r.call(e,{phone:o}),n}catch(n){return i(n),{success:!1}}}),[l,i,e==null?void 0:e.onSendCodeSuccess]),u=_react.useCallback.call(void 0, r=>_chunkU6537SSNjs.c.call(void 0, void 0,[r],function*({code:o,phone:c}){var n;try{if(!a)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_link_sms_before_logged_in",error:"Must be logged in to link a phone number, Use `useLoginWithSMS` to login with a phone number"});if(!(c||s))throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid phone number before calling `linkWithCode`"});t({status:"submitting-code"});let w=yield l.auth.phone.linkWithCode(c||s,o);return t({status:"done"}),(n=e==null?void 0:e.onLinkSuccess)==null||n.call(e,w),w}catch(k){i(k)}}),[a,l,s,i,e==null?void 0:e.onLinkSuccess]);return{sendCode:g,linkWithCode:u,state:m}};var Cr=e=>{let[s,d]=_react.useState.call(void 0, ""),{user:a,client:l,otpState:m,setOtpState:t}=_react.useContext.call(void 0, _chunkU6537SSNjs.k),i=_react.useCallback.call(void 0, o=>{var r;let c=_chunkU6537SSNjs.d.call(void 0, o);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=>_chunkU6537SSNjs.c.call(void 0, void 0,[c],function*({phone:o}){var r;d(o);try{t({status:"sending-code"});let n=yield l.auth.phone.sendCode(o);return t({status:"awaiting-code-input"}),(r=e==null?void 0:e.onSendCodeSuccess)==null||r.call(e,{phone:o}),n}catch(n){return i(n),{success:!1}}}),[l,i,e==null?void 0:e.onSendCodeSuccess]),u=_react.useCallback.call(void 0, r=>_chunkU6537SSNjs.c.call(void 0, void 0,[r],function*({code:o,phone:c}){var n;try{if(a)throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_login_with_sms_while_already_logged_in",error:"Already logged in, use `useLinkWithSMS` if you are trying to link a phone number to an existing account"});if(!(c||s))throw new (0, _jssdkcore.PrivyClientError)({code:"attempted_submit_otp_before_sending",error:"Must `sendCode` with a valid phone number before calling `loginWithCode`"});t({status:"submitting-code"});let w=yield l.auth.phone.loginWithCode(c||s,o);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){i(k)}}),[a,l,s,i,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 Pr=e=>{let{appState:s,getCurrentAppState:d}=_chunkU6537SSNjs.f.call(void 0, ),{client:a,user:l,farcasterState:m,setFarcasterState:t}=_react.useContext.call(void 0, _chunkU6537SSNjs.k),i=_react.useRef.call(void 0, !1),g=_react.useCallback.call(void 0, c=>{var n;let r=_chunkU6537SSNjs.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, ()=>{i.current=!0},[]),o=_react.useCallback.call(void 0, (k,...w)=>_chunkU6537SSNjs.c.call(void 0, void 0,[k,...w],function*({relyingParty:c,redirectUrl:r},n={pollAttempts:10,pollIntervalMs:1e3}){var C;try{if(i.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 a.auth.farcaster.initializeAuth({relyingParty:c,redirectUrl:P.createURL(r!=null?r:"/")});if(!y)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_generate_farcaster_uri",error:"Failed to generate farcaster uri"});if(!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(i.current)throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_canceled",error:"Farcasting polling canceled"});if(s.current!=="active"&&d()!=="active"){yield _chunkU6537SSNjs.e.call(void 0, n.pollIntervalMs);continue}let b=yield a.auth.farcaster.getFarcasterStatus({channel_token:E});if(b.state==="completed"){t({status:"submitting-token"});let _=yield a.auth.farcaster.link(_chunkU6537SSNjs.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 _chunkU6537SSNjs.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)}}),[a,e==null?void 0:e.onSuccess,g,t,l]);return _react.useEffect.call(void 0, ()=>()=>{u()},[]),{linkWithFarcaster:o,state:m,cancel:u}};var Ur=e=>{let{client:s}=_react.useContext.call(void 0, _chunkU6537SSNjs.k),d=_react.useCallback.call(void 0, l=>{var t;let m=_chunkU6537SSNjs.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=>_chunkU6537SSNjs.c.call(void 0, void 0,[m],function*({fid:l}){var t;try{let i=yield s.auth.farcaster.unlink({fid:l});return(t=e==null?void 0:e.onSuccess)==null||t.call(e,i),i}catch(i){throw d(i)}}),[s,e==null?void 0:e.onSuccess,d])}};var Vr=e=>{let{appState:s,getCurrentAppState:d}=_chunkU6537SSNjs.f.call(void 0, ),{client:a,user:l,farcasterState:m,setFarcasterState:t}=_react.useContext.call(void 0, _chunkU6537SSNjs.k),i=_react.useRef.call(void 0, !1),g=_react.useCallback.call(void 0, c=>{var n;let r=_chunkU6537SSNjs.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, ()=>{i.current=!0},[]),o=_react.useCallback.call(void 0, (k,...w)=>_chunkU6537SSNjs.c.call(void 0, void 0,[k,...w],function*({relyingParty:c,redirectUrl:r},n={pollAttempts:10,pollIntervalMs:1e3}){var C;try{if(i.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 a.auth.farcaster.initializeAuth({relyingParty:c,redirectUrl:F.createURL(r!=null?r:"/")});if(!y)throw new (0, _jssdkcore.PrivyClientError)({code:"failed_to_generate_farcaster_uri",error:"Failed to generate farcaster uri"});if(!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(i.current)throw new (0, _jssdkcore.PrivyClientError)({code:"farcaster_polling_canceled",error:"Farcasting polling canceled"});if(s.current!=="active"&&d()!=="active"){yield _chunkU6537SSNjs.e.call(void 0, n.pollIntervalMs);continue}let b=yield a.auth.farcaster.getFarcasterStatus({channel_token:E});if(b.state==="completed"){t({status:"submitting-token"});let _=yield a.auth.farcaster.authenticate(_chunkU6537SSNjs.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 _chunkU6537SSNjs.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)}}),[a,g,e==null?void 0:e.onSuccess,t,l,s]);return _react.useEffect.call(void 0, ()=>()=>{u()},[]),{loginWithFarcaster:o,state:m,cancel:u}};var V=(e={})=>{let{wallet:s,createWalletCallbacks:d,recoverWalletCallbacks:a,setWalletRecoveryCallbacks:l}=_react.useContext.call(void 0, _chunkU6537SSNjs.k),{onCreateWalletSuccess:m,onCreateWalletError:t,onRecoverWalletError:i,onRecoverWalletSuccess:g,onSetWalletRecoverySuccess:u,onSetWalletRecoveryError:o}=e;return _react.useEffect.call(void 0, ()=>{d.current={onSuccess:m,onError:t}},[m,t]),_react.useEffect.call(void 0, ()=>{a.current={onSuccess:g,onError:i}},[g,i]),_react.useEffect.call(void 0, ()=>{l.current={onSuccess:u,onError:o}},[g,i]),s};var Zr=({onStateChange:e})=>{let s=V();return _react.useEffect.call(void 0, ()=>{e(s)},[s])};var rt=()=>{let{getIdentityToken:e}=_react.useContext.call(void 0, _chunkU6537SSNjs.k);return{getIdentityToken:e}};var Ce=(e={})=>{let{solanaWallet:s,createSolanaWalletCallbacks:d,recoverSolanaWalletCallbacks:a}=_react.useContext.call(void 0, _chunkU6537SSNjs.k),{onCreateWalletSuccess:l,onCreateWalletError:m,onRecoverWalletError:t,onRecoverWalletSuccess:i}=e;return _react.useEffect.call(void 0, ()=>{d.current={onSuccess:l,onError:m}},[l,m]),_react.useEffect.call(void 0, ()=>{a.current={onSuccess:i,onError:t}},[i,t]),s};var be=()=>{let{client:e}=_react.useContext.call(void 0, _chunkU6537SSNjs.k);return e};var xe=()=>{let{user:e,isReady:s,logout:d,getAccessToken:a}=_react.useContext.call(void 0, _chunkU6537SSNjs.k);return{user:e,isReady:s,logout:d,getAccessToken:a}};exports.PrivyContext = _chunkU6537SSNjs.k; exports.PrivyProvider = _chunkU6537SSNjs.m; exports.SecureStorageAdapter = _chunkU6537SSNjs.j; exports.getAccessToken = _chunkU6537SSNjs.l; exports.hasError = _chunkU6537SSNjs.t; exports.isConnected = _chunkU6537SSNjs.n; exports.isConnecting = _chunkU6537SSNjs.p; exports.isCreating = _chunkU6537SSNjs.s; exports.isDisconnected = _chunkU6537SSNjs.q; exports.isNotCreated = _chunkU6537SSNjs.r; exports.isReconnecting = _chunkU6537SSNjs.o; exports.needsRecovery = _chunkU6537SSNjs.u; exports.useEmbeddedSolanaWallet = Ce; exports.useEmbeddedWallet = V; exports.useEmbeddedWalletStateChange = Zr; exports.useIdentityToken = rt; exports.useLinkEmail = tr; exports.useLinkSMS = fr; exports.useLinkWithFarcaster = Pr; exports.useLinkWithOAuth = _chunkU6537SSNjs.h; exports.useLinkWithSiwe = ze; exports.useLoginWithEmail = sr; exports.useLoginWithFarcaster = Vr; exports.useLoginWithOAuth = _chunkU6537SSNjs.g; exports.useLoginWithSMS = Cr; exports.useLoginWithSiwe = Xe; exports.useOAuthFlow = _chunkU6537SSNjs.i; exports.usePrivy = xe; exports.usePrivyClient = be; exports.useUnlinkFarcaster = Ur;
|
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 _chunkU6537SSNjs = require('./chunk-U6537SSN.js');var _react = require('react');var _jssdkcore = require('@privy-io/js-sdk-core');var w=e=>_chunkU6537SSNjs.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 _chunkU6537SSNjs.b.call(void 0, _chunkU6537SSNjs.a.call(void 0, {},r),{type:(a=r.type)!=null?a:"public-key",clientExtensionResults:{}})});var C=e=>_chunkU6537SSNjs.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 _chunkU6537SSNjs.b.call(void 0, _chunkU6537SSNjs.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, _chunkU6537SSNjs.k),d=_react.useCallback.call(void 0, o=>{var n;let u=_chunkU6537SSNjs.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=>_chunkU6537SSNjs.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, _chunkU6537SSNjs.k),d=_react.useCallback.call(void 0, o=>{var n;let u=_chunkU6537SSNjs.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=>_chunkU6537SSNjs.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(_chunkU6537SSNjs.b.call(void 0, _chunkU6537SSNjs.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 = _chunkU6537SSNjs.t; exports.isConnected = _chunkU6537SSNjs.n; exports.isConnecting = _chunkU6537SSNjs.p; exports.isCreating = _chunkU6537SSNjs.s; exports.isDisconnected = _chunkU6537SSNjs.q; exports.isNotCreated = _chunkU6537SSNjs.r; exports.isReconnecting = _chunkU6537SSNjs.o; exports.needsRecovery = _chunkU6537SSNjs.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.22.0",
|
|
4
4
|
"description": "Expo client for the Privy Auth API",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"authentication",
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
"expo-web-browser": "*"
|
|
60
60
|
},
|
|
61
61
|
"dependencies": {
|
|
62
|
-
"@privy-io/js-sdk-core": "0.
|
|
62
|
+
"@privy-io/js-sdk-core": "0.25.0",
|
|
63
63
|
"react-fast-compare": "^3.2.2"
|
|
64
64
|
},
|
|
65
65
|
"devDependencies": {
|