@privy-io/expo 0.2.1 → 0.2.2
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/index.d.ts.map +1 -1
- package/dist/index.js +5 -5
- package/dist/index.mjs +5 -5
- package/package.json +1 -1
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"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
|
|
1
|
+
{"mappings":"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","sources":["packages-js-public/expo/src/src/context/EmbeddedWalletWebView.tsx","packages-js-public/expo/src/src/models/EmbeddedWalletState.ts","packages-js-public/expo/src/src/models/index.ts","packages-js-public/expo/src/src/utils/toStableSetter.ts","packages-js-public/expo/src/src/types.ts","packages-js-public/expo/src/src/utils/getUserEmbeddedWallet.ts","packages-js-public/expo/src/src/utils/toErrorState.ts","packages-js-public/expo/src/src/utils/index.ts","packages-js-public/expo/src/src/context/useConnectEmbeddedWallet.ts","packages-js-public/expo/src/src/context/useInitializeUser.ts","packages-js-public/expo/src/src/context/useRNAppStateToFetchUserOnAppResume.ts","packages-js-public/expo/src/src/expo.ts","packages-js-public/expo/src/src/hooks/hooks.types.ts","packages-js-public/expo/src/src/hooks/useLoginWithEmail.ts","packages-js-public/expo/src/src/hooks/useLinkEmail.ts","packages-js-public/expo/src/src/hooks/useLoginWithSMS.ts","packages-js-public/expo/src/src/hooks/useLinkSMS.ts","packages-js-public/expo/src/src/hooks/useEmbeddedWallet.ts","packages-js-public/expo/src/src/hooks/usePrivyClient.ts","packages-js-public/expo/src/src/hooks/usePrivy.ts","packages-js-public/expo/src/src/hooks/index.ts","packages-js-public/expo/src/src/PrivyProvider.tsx","packages-js-public/expo/src/src/index.ts","packages-js-public/expo/src/index.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"export * from '@privy-io/js-sdk-core';\nexport * from './PrivyProvider';\nexport * from './types';\nexport * from './models';\nexport * from './hooks';\nexport {getUserEmbeddedWallet} from './utils';\nexport {SecureStorageAdapter, useOAuthFlow} from './expo';\nexport type {OAuthFlowState} from './expo';\n"],"names":[],"version":3,"file":"index.d.ts.map"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var e=require("@privy-io/js-sdk-core"),t=require("react"),s=require("react-native"),a=require("react-native-webview"),r=require("react-fast-compare")
|
|
1
|
+
var e=require("@privy-io/js-sdk-core"),t=require("react"),s=require("react-native"),a=require("react-native-webview"),r=require("react-fast-compare"),i=require("expo-constants"),n=require("expo-linking"),o=require("expo-secure-store");function u(e,t){return Object.keys(t).forEach(function(s){"default"===s||"__esModule"===s||e.hasOwnProperty(s)||Object.defineProperty(e,s,{enumerable:!0,get:function(){return t[s]}})}),e}function l(e,t,s,a){Object.defineProperty(e,t,{get:s,set:a,enumerable:!0,configurable:!0})}function c(e){return e&&e.__esModule?e.default:e}l(module.exports,"getUserEmbeddedWallet",()=>g),l(module.exports,"SecureStorageAdapter",()=>k),l(module.exports,"useOAuthFlow",()=>w);var d={};l(d,"PrivyContext",()=>E),l(d,"PrivyProvider",()=>W);var p={};p=JSON.parse('{"name":"@privy-io/expo","version":"0.2.2","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/index.mjs","types":"./dist/index.d.ts"}},"targets":{"main":{"isLibrary":true,"sourceMap":false,"optimize":true},"module":{"isLibrary":true,"sourceMap":false,"optimize":true}},"files":["dist/**/*","LICENSE","README.md"],"scripts":{"build":"npx parcel build --no-cache","clean":"rm -rf dist .turbo","prepublishOnly":"npm run clean && npm run build","dev":"npx parcel watch -p 4234","test":"jest --testMatch \\"**/test/unit/**/*.test.ts\\"","test:ci":"npm run test","test-integration":"jest --testMatch \\"**/test/integration/**/*.test.ts\\"","lint":"eslint \\"src/**/*.{ts,tsx,js,jsx}\\" && npx tsc --noEmit","format":"eslint \\"src/**/*.{ts,tsx,js,jsx}\\" --fix"},"peerDependencies":{"react":"*","react-native":"*","react-native-webview":"*","expo-constants":"*","expo-linking":"*","expo-secure-store":"*"},"dependencies":{"@privy-io/js-sdk-core":"*","react-fast-compare":"^3.2.2"},"devDependencies":{"@privy-io/eslint-config-custom":"*","@privy-io/tsconfig":"*","@tsconfig/node16-strictest-esm":"^1.0.3","parcel":"2.10.0","tsup":"^6.2.3","typescript":"^4.9.5"},"author":"privy.io","publishConfig":{"access":"public"}}');const h=({client:e,isWebViewReady:s,setIsWebViewReady:r})=>{let i=(0,t.useRef)(null);(0,t.useEffect)(()=>{i.current&&e.setMessagePoster(i.current)},[s,e]);let n=(0,t.useCallback)(async t=>{let{data:s}=t.nativeEvent,a=e.embeddedWallet.getMessageHandler();a?.(JSON.parse(s))},[e]);return c(t).createElement(c(a),{style:{flex:1},ref:i,source:{uri:e.embeddedWallet.getURL()},onLoad:()=>r(!0),onMessage:n})},y=e=>t=>e(e=>c(r)(e,t)?e:t),g=e=>{if(!e)return null;let t=e.linked_accounts.find(e=>"wallet"===e.type&&"privy"===e.wallet_client_type&&"embedded"===e.connector_type);return t||null},m=e=>t=>e instanceof Error?{status:"error",error:e}:"string"==typeof e?{status:"error",error:Error(e)}:t,b=({client:s,user:a,setWallet:r,isWebViewReady:i})=>{let n=(0,t.useCallback)(async e=>{r({status:"creating"});try{let t=await s.embeddedWallet.create(e);r({status:"connected",provider:t})}catch(e){r({status:"error",error:"Error creating embedded wallet"})}},[s]),o=(0,t.useCallback)(async e=>{r({status:"connecting"});try{let t=await s.embeddedWallet.getProvider(e);r({status:"connected",provider:t})}catch(e){r({status:"error",error:"Error creating embedded wallet"})}},[s]);return(0,t.useEffect)(()=>{let t=async()=>{let t=!!g(a);// There is a user but no embedded wallet account
|
|
2
2
|
// We need to create an embedded walert for this user
|
|
3
3
|
if(a&&!t){r({status:"not-created",create:n});return}// There is no embedded wallet account and there is also no user
|
|
4
4
|
// No change in state
|
|
@@ -7,8 +7,8 @@ if(t){// There is definitely a user with an embedded wallet
|
|
|
7
7
|
// `getProvider` will internally attempt recovery of `pinless` wallets
|
|
8
8
|
// Otherwise, let the user know they need to prompt for recovery
|
|
9
9
|
r({status:"connecting"});try{let e=await s.embeddedWallet.getProvider();r({status:"connected",provider:e})}catch(t){(0,e.errorIndicatesRecoveryIsNeeded)(t)?r({status:"needs-recovery",recover:o}):r({status:"error",error:"Error loading embedded wallet"})}}};// Automatically run on first load, once we know the iframe is loaded
|
|
10
|
-
i&&t()},[i,a])},
|
|
11
|
-
}finally{a(!0)}};s||t()},[s])},v=({client:e})=>{let a=(0,t.useRef)(s.AppState.currentState);(0,t.useEffect)(()=>{let t=(0,s.AppState).addEventListener("change",t=>{a.current.match(/inactive|background/)&&"active"===t&&e.user.get().catch(()=>{}),a.current=t});return()=>{t.remove()}},[])},
|
|
10
|
+
i&&t()},[i,a])},f=({client:e,isUserInitialized:s,setIsUserInitialized:a})=>{(0,t.useEffect)(()=>{let t=async()=>{try{await e.user.get()}catch(e){// Explicitly swallow this error
|
|
11
|
+
}finally{a(!0)}};s||t()},[s])},v=({client:e})=>{let a=(0,t.useRef)(s.AppState.currentState);(0,t.useEffect)(()=>{let t=(0,s.AppState).addEventListener("change",t=>{a.current.match(/inactive|background/)&&"active"===t&&e.user.get().catch(()=>{}),a.current=t});return()=>{t.remove()}},[])},C=e=>"done"===e.status||"error"===e.status,w=()=>{let{oAuthState:e,client:s}=(0,t.useContext)(E),a=(0,t.useCallback)(async function({provider:e,redirectUri:t}){let{url:a}=await s.auth.oauth.generateURL(e,n.createURL(t||"/"));return n.openURL(a)},[s]);return{start:a,state:e}},x=({client:e,user:s,isUserInitialized:a,setOAuthState:r})=>{let i=n.useURL();return(0,t.useEffect)(()=>{let t=async()=>{if(!i){r({status:"done"});return}let{queryParams:t}=n.parse(i),{privy_oauth_state:a,privy_oauth_code:o}=t;if(!o||!a){r({status:"done"});return}r({status:"loading"});try{s?await e.auth.oauth.linkWithCode(o,a):await e.auth.oauth.loginWithCode(o,a),r({status:"done"})}catch(e){r(m(e))}// Since stripping query params off the url in place is not possible
|
|
12
12
|
// navigating to the currentUrl less the query params should accomplish the same
|
|
13
|
-
return
|
|
14
|
-
nativeAppOrigin:
|
|
13
|
+
return n.openURL(i.split("?")[0])};a&&t()},[i,a])},S=()=>{let e=c(i).expoConfig?.ios?.bundleIdentifier||c(i).expoConfig?.android?.package;return e?`https://${e}`:"https://placeholder.privy.com"},k={get:e=>o.getItemAsync(e.replace(":","-")),put(e,t){o.setItemAsync(e.replace(":","-"),t)},del(e){o.deleteItemAsync(e.replace(":","-"))},getKeys:async()=>[]},E=/*#__PURE__*/(0,t.createContext)({}),W=a=>{let[r,i]=(0,t.useState)(!1),[n,o]=(0,t.useState)(!1),[u,l]=(0,t.useState)(null),[d,g]=(0,t.useState)({status:"initial"}),[m,w]=(0,t.useState)({status:"disconnected"}),[W,I]=(0,t.useState)({status:"initial"}),R=(0,t.useMemo)(()=>new(c(e))({storage:a.storage||k,appId:a.appId,// @ts-expect-error config for internal use only
|
|
14
|
+
nativeAppOrigin:S(),baseUrl:a.baseUrl,sdkVersion:`expo:${/*@__PURE__*/c(p).version}`,callbacks:{setUser:y(l)}}),[a.storage,a.appId,a.baseUrl,l]);return v({client:R}),f({client:R,isUserInitialized:r,setIsUserInitialized:i}),b({client:R,user:u,isWebViewReady:n,setWallet:w}),x({client:R,isUserInitialized:r,user:u,setOAuthState:g}),c(t).createElement(c(t).Fragment,null,c(t).createElement(E.Provider,{value:{client:R,user:u,isReady:n&&r&&C(d),wallet:m,oAuthState:d,otpState:W,setOtpState:I}},a.children),c(t).createElement(s.View,{style:{width:0,height:0,overflow:"hidden"}},c(t).createElement(h,{client:R,isWebViewReady:n,setIsWebViewReady:o})))};var I={},R={};l(R,"isConnected",()=>U),l(R,"isConnecting",()=>M),l(R,"isDisconnected",()=>A),l(R,"isNotCreated",()=>O),l(R,"isCreating",()=>j),l(R,"hasError",()=>L),l(R,"needsRecovery",()=>P);const U=e=>"connected"===e.status,M=e=>"connecting"===e.status,A=e=>"disconnected"===e.status,O=e=>"not-created"===e.status,j=e=>"creating"===e.status,L=e=>"error"===e.status,P=e=>"needs-recovery"===e.status;u(I,R);var _={};l(_,"useLoginWithEmail",()=>q),l(_,"useLinkEmail",()=>z),l(_,"useLoginWithSMS",()=>V),l(_,"useLinkSMS",()=>N),l(_,"useEmbeddedWallet",()=>D),l(_,"usePrivyClient",()=>F),l(_,"usePrivy",()=>J);const q=()=>{let[e,s]=(0,t.useState)(""),{client:a,otpState:r,setOtpState:i}=(0,t.useContext)(E),n=(0,t.useCallback)(async({email:e})=>{s(e);try{i({status:"sending-code"}),await a.auth.email.sendCode(e),i({status:"awaiting-code-input"})}catch(e){i(m(e))}},[a]),o=(0,t.useCallback)(async({code:t,email:s})=>{let r=s||e;if(!r)throw Error("Must `sendCode` with a valid email before calling `loginWithCode`");try{i({status:"submitting-code"});let e=await a.auth.email.loginWithCode(r,t);return i({status:"done"}),e}catch(e){i(m(e))}},[a,e]);return{sendCode:n,loginWithCode:o,state:r}},z=()=>{let[e,s]=(0,t.useState)(""),{client:a,otpState:r,setOtpState:i}=(0,t.useContext)(E),n=(0,t.useCallback)(async({email:e})=>{s(e);try{i({status:"sending-code"}),await a.auth.email.sendCode(e),i({status:"awaiting-code-input"})}catch(e){i(m(e))}},[a]),o=(0,t.useCallback)(async({code:t,email:s})=>{let r=s||e;if(!r)throw Error("Must `sendCode` with a valid email before calling `linkWithCode`");try{i({status:"submitting-code"});let e=await a.auth.email.linkWithCode(r,t);return i({status:"done"}),e}catch(e){i(m(e))}},[a,e]);return{sendCode:n,linkWithCode:o,state:r}},V=()=>{let[e,s]=(0,t.useState)(""),{client:a,otpState:r,setOtpState:i}=(0,t.useContext)(E),n=(0,t.useCallback)(async({phone:e})=>{s(e);try{i({status:"sending-code"}),await a.auth.phone.sendCode(e),i({status:"awaiting-code-input"})}catch(e){i(m(e))}},[a]),o=(0,t.useCallback)(async({code:t,phone:s})=>{let r=s||e;if(!r)throw Error("Must `sendCode` with a valid phone number before calling `loginWithCode`");try{i({status:"submitting-code"});let r=await a.auth.phone.loginWithCode(s||e,t);return i({status:"done"}),r}catch(e){i(m(e))}},[a,e]);return{sendCode:n,loginWithCode:o,state:r}},N=()=>{let[e,s]=(0,t.useState)(""),{client:a,otpState:r,setOtpState:i}=(0,t.useContext)(E),n=(0,t.useCallback)(async({phone:e})=>{s(e);try{i({status:"sending-code"}),await a.auth.phone.sendCode(e),i({status:"awaiting-code-input"})}catch(e){i(m(e))}},[a]),o=(0,t.useCallback)(async({code:t,phone:s})=>{let r=s||e;if(!r)throw Error("Must `sendCode` with a valid phone number before calling `linkWithCode`");try{i({status:"submitting-code"});let r=await a.auth.phone.linkWithCode(s||e,t);return i({status:"done"}),r}catch(e){i(m(e))}},[a,e]);return{sendCode:n,linkWithCode:o,state:r}},D=()=>{let{wallet:e}=(0,t.useContext)(E);return e},F=()=>{let{client:e}=(0,t.useContext)(E);return e},J=()=>{let{user:e,isReady:s,client:a}=(0,t.useContext)(E),r=(0,t.useCallback)(()=>a.auth.logout(),[a]);return{user:e,isReady:s,logout:r}};u(module.exports,e),u(module.exports,d),u(module.exports,{}),u(module.exports,I),u(module.exports,_);
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import e from"@privy-io/js-sdk-core";import t,{createContext as a,useState as s,useMemo as r,useRef as i,useEffect as n,useCallback as o,useContext as c}from"react";import{View as d,AppState as l}from"react-native";import u from"react-native-webview";import p from"react-fast-compare";import"expo-constants";import{createURL as
|
|
1
|
+
import e from"@privy-io/js-sdk-core";import t,{createContext as a,useState as s,useMemo as r,useRef as i,useEffect as n,useCallback as o,useContext as c}from"react";import{View as d,AppState as l}from"react-native";import u from"react-native-webview";import p from"react-fast-compare";import h from"expo-constants";import{createURL as b,openURL as f,useURL as y,parse as m}from"expo-linking";import{getItemAsync as g,setItemAsync as v,deleteItemAsync as $}from"expo-secure-store";function w(e,t,a,s){Object.defineProperty(e,t,{get:a,set:s,enumerable:!0,configurable:!0})}var x,C={};w(C,"PrivyContext",()=>_),w(C,"PrivyProvider",()=>z);var W={};W=JSON.parse('{"name":"@privy-io/expo","version":"0.2.2","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/index.mjs","types":"./dist/index.d.ts"}},"targets":{"main":{"isLibrary":true,"sourceMap":false,"optimize":true},"module":{"isLibrary":true,"sourceMap":false,"optimize":true}},"files":["dist/**/*","LICENSE","README.md"],"scripts":{"build":"npx parcel build --no-cache","clean":"rm -rf dist .turbo","prepublishOnly":"npm run clean && npm run build","dev":"npx parcel watch -p 4234","test":"jest --testMatch \\"**/test/unit/**/*.test.ts\\"","test:ci":"npm run test","test-integration":"jest --testMatch \\"**/test/integration/**/*.test.ts\\"","lint":"eslint \\"src/**/*.{ts,tsx,js,jsx}\\" && npx tsc --noEmit","format":"eslint \\"src/**/*.{ts,tsx,js,jsx}\\" --fix"},"peerDependencies":{"react":"*","react-native":"*","react-native-webview":"*","expo-constants":"*","expo-linking":"*","expo-secure-store":"*"},"dependencies":{"@privy-io/js-sdk-core":"*","react-fast-compare":"^3.2.2"},"devDependencies":{"@privy-io/eslint-config-custom":"*","@privy-io/tsconfig":"*","@tsconfig/node16-strictest-esm":"^1.0.3","parcel":"2.10.0","tsup":"^6.2.3","typescript":"^4.9.5"},"author":"privy.io","publishConfig":{"access":"public"}}');let E=({client:e,isWebViewReady:a,setIsWebViewReady:s})=>{let r=i(null);n(()=>{r.current&&e.setMessagePoster(r.current)},[a,e]);let c=o(async t=>{let{data:a}=t.nativeEvent,s=e.embeddedWallet.getMessageHandler();s?.(JSON.parse(a))},[e]);return t.createElement(u,{style:{flex:1},ref:r,source:{uri:e.embeddedWallet.getURL()},onLoad:()=>s(!0),onMessage:c})},S=e=>t=>e(e=>p(e,t)?e:t),k=e=>{if(!e)return null;let t=e.linked_accounts.find(e=>"wallet"===e.type&&"privy"===e.wallet_client_type&&"embedded"===e.connector_type);return t||null},I=e=>t=>e instanceof Error?{status:"error",error:e}:"string"==typeof e?{status:"error",error:Error(e)}:t,P=({client:e,user:t,setWallet:a,isWebViewReady:s})=>{let r=o(async t=>{a({status:"creating"});try{let s=await e.embeddedWallet.create(t);a({status:"connected",provider:s})}catch(e){a({status:"error",error:"Error creating embedded wallet"})}},[e]),i=o(async t=>{a({status:"connecting"});try{let s=await e.embeddedWallet.getProvider(t);a({status:"connected",provider:s})}catch(e){a({status:"error",error:"Error creating embedded wallet"})}},[e]);return n(()=>{let n=async()=>{let s=!!k(t);// There is a user but no embedded wallet account
|
|
2
2
|
// We need to create an embedded walert for this user
|
|
3
3
|
if(t&&!s){a({status:"not-created",create:r});return}// There is no embedded wallet account and there is also no user
|
|
4
4
|
// No change in state
|
|
@@ -7,8 +7,8 @@ if(s){// There is definitely a user with an embedded wallet
|
|
|
7
7
|
// `getProvider` will internally attempt recovery of `pinless` wallets
|
|
8
8
|
// Otherwise, let the user know they need to prompt for recovery
|
|
9
9
|
a({status:"connecting"});try{let t=await e.embeddedWallet.getProvider();a({status:"connected",provider:t})}catch(e){$diYGi$errorIndicatesRecoveryIsNeeded(e)?a({status:"needs-recovery",recover:i}):a({status:"error",error:"Error loading embedded wallet"})}}};// Automatically run on first load, once we know the iframe is loaded
|
|
10
|
-
s&&n()},[s,t])},
|
|
11
|
-
}finally{a(!0)}};t||s()},[t])},
|
|
10
|
+
s&&n()},[s,t])},M=({client:e,isUserInitialized:t,setIsUserInitialized:a})=>{n(()=>{let s=async()=>{try{await e.user.get()}catch(e){// Explicitly swallow this error
|
|
11
|
+
}finally{a(!0)}};t||s()},[t])},R=({client:e})=>{let t=i(l.currentState);n(()=>{let a=l.addEventListener("change",a=>{t.current.match(/inactive|background/)&&"active"===a&&e.user.get().catch(()=>{}),t.current=a});return()=>{a.remove()}},[])},L=e=>"done"===e.status||"error"===e.status,U=()=>{let{oAuthState:e,client:t}=c(_),a=o(async function({provider:e,redirectUri:a}){let{url:s}=await t.auth.oauth.generateURL(e,b(a||"/"));return f(s)},[t]);return{start:a,state:e}},O=({client:e,user:t,isUserInitialized:a,setOAuthState:s})=>{let r=y();return n(()=>{let i=async()=>{if(!r){s({status:"done"});return}let{queryParams:a}=m(r),{privy_oauth_state:i,privy_oauth_code:n}=a;if(!n||!i){s({status:"done"});return}s({status:"loading"});try{t?await e.auth.oauth.linkWithCode(n,i):await e.auth.oauth.loginWithCode(n,i),s({status:"done"})}catch(e){s(I(e))}// Since stripping query params off the url in place is not possible
|
|
12
12
|
// navigating to the currentUrl less the query params should accomplish the same
|
|
13
|
-
return
|
|
14
|
-
nativeAppOrigin:
|
|
13
|
+
return f(r.split("?")[0])};a&&i()},[r,a])},j=()=>{let e=h.expoConfig?.ios?.bundleIdentifier||h.expoConfig?.android?.package;return e?`https://${e}`:"https://placeholder.privy.com"},A={get:e=>g(e.replace(":","-")),put(e,t){v(e.replace(":","-"),t)},del(e){$(e.replace(":","-"))},getKeys:async()=>[]},_=a({}),z=a=>{let[i,n]=s(!1),[o,c]=s(!1),[l,u]=s(null),[p,h]=s({status:"initial"}),[b,f]=s({status:"disconnected"}),[y,m]=s({status:"initial"}),g=r(()=>{var t;return new e({storage:a.storage||A,appId:a.appId,// @ts-expect-error config for internal use only
|
|
14
|
+
nativeAppOrigin:j(),baseUrl:a.baseUrl,sdkVersion:`expo:${((t=W)&&t.__esModule?t.default:t).version}`,callbacks:{setUser:S(u)}})},[a.storage,a.appId,a.baseUrl,u]);return R({client:g}),M({client:g,isUserInitialized:i,setIsUserInitialized:n}),P({client:g,user:l,isWebViewReady:o,setWallet:f}),O({client:g,isUserInitialized:i,user:l,setOAuthState:h}),t.createElement(t.Fragment,null,t.createElement(_.Provider,{value:{client:g,user:l,isReady:o&&i&&L(p),wallet:b,oAuthState:p,otpState:y,setOtpState:m}},a.children),t.createElement(d,{style:{width:0,height:0,overflow:"hidden"}},t.createElement(E,{client:g,isWebViewReady:o,setIsWebViewReady:c})))};var V={};w(V,"isConnected",()=>N),w(V,"isConnecting",()=>D),w(V,"isDisconnected",()=>q),w(V,"isNotCreated",()=>F),w(V,"isCreating",()=>J),w(V,"hasError",()=>G),w(V,"needsRecovery",()=>H);let N=e=>"connected"===e.status,D=e=>"connecting"===e.status,q=e=>"disconnected"===e.status,F=e=>"not-created"===e.status,J=e=>"creating"===e.status,G=e=>"error"===e.status,H=e=>"needs-recovery"===e.status;x={},Object.keys(V).forEach(function(e){"default"===e||"__esModule"===e||x.hasOwnProperty(e)||Object.defineProperty(x,e,{enumerable:!0,get:function(){return V[e]}})});var K={};w(K,"useLoginWithEmail",()=>Y),w(K,"useLinkEmail",()=>B),w(K,"useLoginWithSMS",()=>Q),w(K,"useLinkSMS",()=>T),w(K,"useEmbeddedWallet",()=>X),w(K,"usePrivyClient",()=>Z),w(K,"usePrivy",()=>ee);let Y=()=>{let[e,t]=s(""),{client:a,otpState:r,setOtpState:i}=c(_),n=o(async({email:e})=>{t(e);try{i({status:"sending-code"}),await a.auth.email.sendCode(e),i({status:"awaiting-code-input"})}catch(e){i(I(e))}},[a]),d=o(async({code:t,email:s})=>{let r=s||e;if(!r)throw Error("Must `sendCode` with a valid email before calling `loginWithCode`");try{i({status:"submitting-code"});let e=await a.auth.email.loginWithCode(r,t);return i({status:"done"}),e}catch(e){i(I(e))}},[a,e]);return{sendCode:n,loginWithCode:d,state:r}},B=()=>{let[e,t]=s(""),{client:a,otpState:r,setOtpState:i}=c(_),n=o(async({email:e})=>{t(e);try{i({status:"sending-code"}),await a.auth.email.sendCode(e),i({status:"awaiting-code-input"})}catch(e){i(I(e))}},[a]),d=o(async({code:t,email:s})=>{let r=s||e;if(!r)throw Error("Must `sendCode` with a valid email before calling `linkWithCode`");try{i({status:"submitting-code"});let e=await a.auth.email.linkWithCode(r,t);return i({status:"done"}),e}catch(e){i(I(e))}},[a,e]);return{sendCode:n,linkWithCode:d,state:r}},Q=()=>{let[e,t]=s(""),{client:a,otpState:r,setOtpState:i}=c(_),n=o(async({phone:e})=>{t(e);try{i({status:"sending-code"}),await a.auth.phone.sendCode(e),i({status:"awaiting-code-input"})}catch(e){i(I(e))}},[a]),d=o(async({code:t,phone:s})=>{let r=s||e;if(!r)throw Error("Must `sendCode` with a valid phone number before calling `loginWithCode`");try{i({status:"submitting-code"});let r=await a.auth.phone.loginWithCode(s||e,t);return i({status:"done"}),r}catch(e){i(I(e))}},[a,e]);return{sendCode:n,loginWithCode:d,state:r}},T=()=>{let[e,t]=s(""),{client:a,otpState:r,setOtpState:i}=c(_),n=o(async({phone:e})=>{t(e);try{i({status:"sending-code"}),await a.auth.phone.sendCode(e),i({status:"awaiting-code-input"})}catch(e){i(I(e))}},[a]),d=o(async({code:t,phone:s})=>{let r=s||e;if(!r)throw Error("Must `sendCode` with a valid phone number before calling `linkWithCode`");try{i({status:"submitting-code"});let r=await a.auth.phone.linkWithCode(s||e,t);return i({status:"done"}),r}catch(e){i(I(e))}},[a,e]);return{sendCode:n,linkWithCode:d,state:r}},X=()=>{let{wallet:e}=c(_);return e},Z=()=>{let{client:e}=c(_);return e},ee=()=>{let{user:e,isReady:t,client:a}=c(_),s=o(()=>a.auth.logout(),[a]);return{user:e,isReady:t,logout:s}};export{k as getUserEmbeddedWallet,A as SecureStorageAdapter,U as useOAuthFlow,_ as PrivyContext,z as PrivyProvider,N as isConnected,D as isConnecting,q as isDisconnected,F as isNotCreated,J as isCreating,G as hasError,H as needsRecovery,Y as useLoginWithEmail,B as useLinkEmail,Q as useLoginWithSMS,T as useLinkSMS,X as useEmbeddedWallet,Z as usePrivyClient,ee as usePrivy};
|