@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.
@@ -1 +1 @@
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"}
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");require("expo-constants");var i=require("expo-linking"),n=require("expo-secure-store");function o(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 u(e,t,s,a){Object.defineProperty(e,t,{get:s,set:a,enumerable:!0,configurable:!0})}function l(e){return e&&e.__esModule?e.default:e}u(module.exports,"getUserEmbeddedWallet",()=>y),u(module.exports,"SecureStorageAdapter",()=>x),u(module.exports,"useOAuthFlow",()=>C);var c={};u(c,"PrivyContext",()=>S),u(c,"PrivyProvider",()=>E);var d={};d=JSON.parse('{"name":"@privy-io/expo","version":"0.2.1","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 p=({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 l(t).createElement(l(a),{style:{flex:1},ref:i,source:{uri:e.embeddedWallet.getURL()},onLoad:()=>r(!0),onMessage:n})},h=e=>t=>e(e=>l(r)(e,t)?e:t),y=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},g=e=>t=>e instanceof Error?{status:"error",error:e}:"string"==typeof e?{status:"error",error:Error(e)}:t,m=({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=!!y(a);// There is a user but no embedded wallet account
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])},b=({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()}},[])},f=e=>"done"===e.status||"error"===e.status,C=()=>{let{oAuthState:e,client:s}=(0,t.useContext)(S),a=(0,t.useCallback)(async function({provider:e,redirectUri:t}){let{url:a}=await s.auth.oauth.generateURL(e,i.createURL(t||"/"));return i.openURL(a)},[s]);return{start:a,state:e}},w=({client:e,user:s,isUserInitialized:a,setOAuthState:r})=>{let n=i.useURL();return(0,t.useEffect)(()=>{let t=async()=>{if(!n){r({status:"done"});return}let{queryParams:t}=i.parse(n),{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(g(e))}// Since stripping query params off the url in place is not possible
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 i.openURL(n.split("?")[0])};a&&t()},[n,a])},x={get:e=>n.getItemAsync(e.replace(":","-")),put(e,t){n.setItemAsync(e.replace(":","-"),t)},del(e){n.deleteItemAsync(e.replace(":","-"))},getKeys:async()=>[]},S=/*#__PURE__*/(0,t.createContext)({}),E=a=>{let[r,i]=(0,t.useState)(!1),[n,o]=(0,t.useState)(!1),[u,c]=(0,t.useState)(null),[y,g]=(0,t.useState)({status:"initial"}),[C,E]=(0,t.useState)({status:"disconnected"}),[k,W]=(0,t.useState)({status:"initial"}),I=(0,t.useMemo)(()=>new(l(e))({storage:a.storage||x,appId:a.appId,// @ts-expect-error config for internal use only
14
- nativeAppOrigin:getAppOriginFromExpoBundleId(),baseUrl:a.baseUrl,sdkVersion:`expo:${/*@__PURE__*/l(d).version}`,callbacks:{setUser:h(c)}}),[a.storage,a.appId,a.baseUrl,c]);return v({client:I}),b({client:I,isUserInitialized:r,setIsUserInitialized:i}),m({client:I,user:u,isWebViewReady:n,setWallet:E}),w({client:I,isUserInitialized:r,user:u,setOAuthState:g}),l(t).createElement(l(t).Fragment,null,l(t).createElement(S.Provider,{value:{client:I,user:u,isReady:n&&r&&f(y),wallet:C,oAuthState:y,otpState:k,setOtpState:W}},a.children),l(t).createElement(s.View,{style:{width:0,height:0,overflow:"hidden"}},l(t).createElement(p,{client:I,isWebViewReady:n,setIsWebViewReady:o})))};var k={},W={};u(W,"isConnected",()=>I),u(W,"isConnecting",()=>R),u(W,"isDisconnected",()=>U),u(W,"isNotCreated",()=>A),u(W,"isCreating",()=>M),u(W,"hasError",()=>O),u(W,"needsRecovery",()=>j);const I=e=>"connected"===e.status,R=e=>"connecting"===e.status,U=e=>"disconnected"===e.status,A=e=>"not-created"===e.status,M=e=>"creating"===e.status,O=e=>"error"===e.status,j=e=>"needs-recovery"===e.status;o(k,W);var L={};u(L,"useLoginWithEmail",()=>P),u(L,"useLinkEmail",()=>_),u(L,"useLoginWithSMS",()=>q),u(L,"useLinkSMS",()=>z),u(L,"useEmbeddedWallet",()=>V),u(L,"usePrivyClient",()=>N),u(L,"usePrivy",()=>D);const P=()=>{let[e,s]=(0,t.useState)(""),{client:a,otpState:r,setOtpState:i}=(0,t.useContext)(S),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(g(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(g(e))}},[a,e]);return{sendCode:n,loginWithCode:o,state:r}},_=()=>{let[e,s]=(0,t.useState)(""),{client:a,otpState:r,setOtpState:i}=(0,t.useContext)(S),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(g(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(g(e))}},[a,e]);return{sendCode:n,linkWithCode:o,state:r}},q=()=>{let[e,s]=(0,t.useState)(""),{client:a,otpState:r,setOtpState:i}=(0,t.useContext)(S),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(g(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(g(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)(S),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(g(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(g(e))}},[a,e]);return{sendCode:n,linkWithCode:o,state:r}},V=()=>{let{wallet:e}=(0,t.useContext)(S);return e},N=()=>{let{client:e}=(0,t.useContext)(S);return e},D=()=>{let{user:e,isReady:s,client:a}=(0,t.useContext)(S),r=(0,t.useCallback)(()=>a.auth.logout(),[a]);return{user:e,isReady:s,logout:r}};o(module.exports,e),o(module.exports,c),o(module.exports,{}),o(module.exports,k),o(module.exports,L);
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 h,openURL as b,useURL as y,parse as f}from"expo-linking";import{getItemAsync as m,setItemAsync as g,deleteItemAsync as v}from"expo-secure-store";function $(e,t,a,s){Object.defineProperty(e,t,{get:a,set:s,enumerable:!0,configurable:!0})}var w,x={};$(x,"PrivyContext",()=>A),$(x,"PrivyProvider",()=>j);var C={};C=JSON.parse('{"name":"@privy-io/expo","version":"0.2.1","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})},W=e=>t=>e(e=>p(e,t)?e:t),S=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},k=e=>t=>e instanceof Error?{status:"error",error:e}:"string"==typeof e?{status:"error",error:Error(e)}:t,I=({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=!!S(t);// There is a user but no embedded wallet account
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])},P=({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])},M=({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()}},[])},R=e=>"done"===e.status||"error"===e.status,L=()=>{let{oAuthState:e,client:t}=c(A),a=o(async function({provider:e,redirectUri:a}){let{url:s}=await t.auth.oauth.generateURL(e,h(a||"/"));return b(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}=f(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(k(e))}// Since stripping query params off the url in place is not possible
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 b(r.split("?")[0])};a&&i()},[r,a])},U={get:e=>m(e.replace(":","-")),put(e,t){g(e.replace(":","-"),t)},del(e){v(e.replace(":","-"))},getKeys:async()=>[]},A=a({}),j=a=>{let[i,n]=s(!1),[o,c]=s(!1),[l,u]=s(null),[p,h]=s({status:"initial"}),[b,y]=s({status:"disconnected"}),[f,m]=s({status:"initial"}),g=r(()=>{var t;return new e({storage:a.storage||U,appId:a.appId,// @ts-expect-error config for internal use only
14
- nativeAppOrigin:getAppOriginFromExpoBundleId(),baseUrl:a.baseUrl,sdkVersion:`expo:${((t=C)&&t.__esModule?t.default:t).version}`,callbacks:{setUser:W(u)}})},[a.storage,a.appId,a.baseUrl,u]);return M({client:g}),P({client:g,isUserInitialized:i,setIsUserInitialized:n}),I({client:g,user:l,isWebViewReady:o,setWallet:y}),O({client:g,isUserInitialized:i,user:l,setOAuthState:h}),t.createElement(t.Fragment,null,t.createElement(A.Provider,{value:{client:g,user:l,isReady:o&&i&&R(p),wallet:b,oAuthState:p,otpState:f,setOtpState:m}},a.children),t.createElement(d,{style:{width:0,height:0,overflow:"hidden"}},t.createElement(E,{client:g,isWebViewReady:o,setIsWebViewReady:c})))};var _={};$(_,"isConnected",()=>z),$(_,"isConnecting",()=>V),$(_,"isDisconnected",()=>N),$(_,"isNotCreated",()=>D),$(_,"isCreating",()=>F),$(_,"hasError",()=>q),$(_,"needsRecovery",()=>J);let z=e=>"connected"===e.status,V=e=>"connecting"===e.status,N=e=>"disconnected"===e.status,D=e=>"not-created"===e.status,F=e=>"creating"===e.status,q=e=>"error"===e.status,J=e=>"needs-recovery"===e.status;w={},Object.keys(_).forEach(function(e){"default"===e||"__esModule"===e||w.hasOwnProperty(e)||Object.defineProperty(w,e,{enumerable:!0,get:function(){return _[e]}})});var B={};$(B,"useLoginWithEmail",()=>G),$(B,"useLinkEmail",()=>H),$(B,"useLoginWithSMS",()=>K),$(B,"useLinkSMS",()=>Y),$(B,"useEmbeddedWallet",()=>Q),$(B,"usePrivyClient",()=>T),$(B,"usePrivy",()=>X);let G=()=>{let[e,t]=s(""),{client:a,otpState:r,setOtpState:i}=c(A),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(k(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(k(e))}},[a,e]);return{sendCode:n,loginWithCode:d,state:r}},H=()=>{let[e,t]=s(""),{client:a,otpState:r,setOtpState:i}=c(A),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(k(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(k(e))}},[a,e]);return{sendCode:n,linkWithCode:d,state:r}},K=()=>{let[e,t]=s(""),{client:a,otpState:r,setOtpState:i}=c(A),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(k(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(k(e))}},[a,e]);return{sendCode:n,loginWithCode:d,state:r}},Y=()=>{let[e,t]=s(""),{client:a,otpState:r,setOtpState:i}=c(A),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(k(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(k(e))}},[a,e]);return{sendCode:n,linkWithCode:d,state:r}},Q=()=>{let{wallet:e}=c(A);return e},T=()=>{let{client:e}=c(A);return e},X=()=>{let{user:e,isReady:t,client:a}=c(A),s=o(()=>a.auth.logout(),[a]);return{user:e,isReady:t,logout:s}};export{S as getUserEmbeddedWallet,U as SecureStorageAdapter,L as useOAuthFlow,A as PrivyContext,j as PrivyProvider,z as isConnected,V as isConnecting,N as isDisconnected,D as isNotCreated,F as isCreating,q as hasError,J as needsRecovery,G as useLoginWithEmail,H as useLinkEmail,K as useLoginWithSMS,Y as useLinkSMS,Q as useEmbeddedWallet,T as usePrivyClient,X as usePrivy};
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};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@privy-io/expo",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "description": "Expo client for the Privy Auth API",
5
5
  "keywords": [
6
6
  "authentication",