@seamless-auth/react-native 0.2.1 → 0.2.3

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/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # @seamless-auth/react-native
2
2
 
3
+ ## 0.2.3
4
+
5
+ ### Patch Changes
6
+
7
+ - 5041bb3: `@seamless-auth/client` now exports the step logic behind the bundled sign-in screens: `beginSignIn`, `registerWithEmail`, `requestOtp` and `verifyOtp`, `watchMagicLink` and `finishMagicLinkSignIn`, `startOAuthSignIn` and `completeOAuthCallback`, `enrollPasskey`, `loadLoginMethods`, `fallbackSignInOptions`, `detectPasskeySupport`, `safeReturnPath` and `inAppPath`, plus `isValidEmail`, `isValidPhoneNumber` and `parseUserAgent`. A custom UI in any framework can call them, and every binding's screens now share one implementation. The React and React Native screens behave as before.
8
+ - Updated dependencies [5041bb3]
9
+ - Updated dependencies [5041bb3]
10
+ - @seamless-auth/client@0.4.0
11
+
12
+ ## 0.2.2
13
+
14
+ ### Patch Changes
15
+
16
+ - 19f8f1b: Depend on `@seamless-auth/types` `^0.28.0` (was `^0.26.0`), so the SDK's wire types track the current auth API contract. No SDK request or response shape changes; 0.27.0 and 0.28.0 only add admin system config and dashboard metrics fields.
17
+ - Updated dependencies [19f8f1b]
18
+ - @seamless-auth/client@0.3.2
19
+
3
20
  ## 0.2.1
4
21
 
5
22
  ### Patch Changes
package/README.md CHANGED
@@ -13,6 +13,10 @@ when the access token expires. Your backend needs `@seamless-auth/express` or
13
13
  `@seamless-auth/fastify` 0.16 or later, and its own routes accept the same
14
14
  access token once `requireAuth` is given `authServerUrl` and `audience`.
15
15
 
16
+ ## Start here
17
+
18
+ New to Seamless Auth? The [self-hosted quickstart](https://docs.seamlessauth.com/start/quickstart/) runs the full stack locally with Docker. If Seamless hosts your auth instance, follow the [managed quickstart](https://docs.seamlessauth.com/start/managed-quickstart/) instead. The [compatibility matrix](https://docs.seamlessauth.com/build/ecosystem/#compatibility-matrix) lists which package versions work together.
19
+
16
20
  ## Install
17
21
 
18
22
  ```bash
@@ -1,12 +1,4 @@
1
- import type { LoginMethod } from '@seamless-auth/client';
2
- /**
3
- * Used only until the instance answers, and if it never does.
4
- *
5
- * Deliberately the narrowest useful set, and matching the auth server's own
6
- * defaults. Offering a method that turns out to be disabled sends a user down a
7
- * path that fails, which is worse than showing one option too few.
8
- */
9
- export declare const FALLBACK_LOGIN_METHODS: LoginMethod[];
1
+ export { FALLBACK_LOGIN_METHODS, hasNonPasskeyLoginMethod } from '@seamless-auth/client';
10
2
  /**
11
3
  * Which sign-in methods this instance has enabled, read from the auth server
12
4
  * rather than assumed.
@@ -20,11 +12,3 @@ export declare const useLoginMethods: () => {
20
12
  loginMethods: ("passkey" | "magic_link" | "email_otp" | "phone_otp" | "oauth")[] | null;
21
13
  loading: boolean;
22
14
  };
23
- /**
24
- * Whether a user who declines a passkey would still have a way to sign in.
25
- *
26
- * Returns false while the methods are unknown, so a failed or in-flight request
27
- * never produces a skip control that could strand someone in an account they
28
- * cannot get back into.
29
- */
30
- export declare const hasNonPasskeyLoginMethod: (loginMethods: LoginMethod[] | null) => boolean;
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{jsx as e}from"react/jsx-runtime";import{createAuthSession as t,createMemoryTokenStorage as r,PasskeyCeremonyError as s}from"@seamless-auth/client";export{PasskeyCeremonyError,SeamlessAuthError,createSeamlessAuthClient,encodePrfSalt,extractPasskeyPrfResult,getOAuthErrorCode,getPasskeyPolicyErrorCode,getWebAuthnErrorDetail,hasScopedRole,isUnauthenticated,roleGrantsAccess}from"@seamless-auth/client";import{createContext as n,useContext as o,useMemo as a,useSyncExternalStore as c,useEffect as i,useState as l}from"react";const u=n(void 0),d=()=>{const e=o(u);if(!e)throw new Error("useAuth must be used within an AuthProvider");return e},y=({children:s,apiHost:n,basePath:o,magicLinkRedirectUri:l,ports:d,fetch:y})=>{const{passkeys:p,oauthRedirect:h,tokenStorage:f}=d,g=a(()=>t({apiHost:n,magicLinkRedirectUri:l,passkeys:p,transport:{mode:"bearer",basePath:o,tokenStorage:f??r(),fetch:y},detectPreviousSignIn:!1}),[n,o,l,p,f,y]),m=c(g.subscribe,g.getState,g.getState);i(()=>{g.actions.refreshSession()},[g]);const k=a(()=>({...m,...g.actions,apiHost:n,magicLinkRedirectUri:l,client:g.client,ports:{passkeys:p,oauthRedirect:h,tokenStorage:f}}),[m,g,n,l,p,h,f]);return e(u.Provider,{value:k,children:s})};function p(e,t){const r="ios"===e.OS?"iOS":"android"===e.OS?"Android":e.OS;return{friendlyName:t??`${r} device`,platform:e.OS,browser:"native",deviceInfo:`${r} ${String(e.Version)}`}}const h=()=>d().client,f=()=>d().client.authorizedFetch,g=["passkey","magic_link"],m=()=>{const e=h(),[t,r]=l(null),[s,n]=l(!0);return i(()=>{let t=!0;return(async()=>{try{const{data:s,error:n}=await e.getPublicSystemConfig();t&&!n&&s?.loginMethods?.length&&r(s.loginMethods)}catch{}finally{t&&n(!1)}})(),()=>{t=!1}},[e]),{loginMethods:t,loading:s}},k=e=>Boolean(e?.some(e=>"passkey"!==e)),S=()=>{const{ports:e}=d(),[t,r]=l(!1),[s,n]=l(!0);return i(()=>{let t=!0;return(async()=>{try{const s=e.passkeys.isSupported()&&await e.passkeys.isPlatformAuthenticatorAvailable();t&&r(s)}catch{t&&r(!1)}finally{t&&n(!1)}})(),()=>{t=!1}},[e.passkeys]),{passkeySupported:t,loading:s}};function w(e){const t=e,r="string"==typeof t?.code?t.code:void 0,n="string"==typeof t?.name?t.name:"UnknownError",o="string"==typeof t?.message?t.message:"Passkey ceremony failed.",a=/cancel|abort|dismiss|NotAllowed|UserCancelled|1001/i.test(`${n} ${r??""} ${o}`)?"NotAllowedError":/InvalidState|exists|excluded|already/i.test(`${n} ${r??""} ${o}`)?"InvalidStateError":n;return new s(a,o,r??a,e)}function A(e){return{isSupported:()=>e.isSupported(),isPlatformAuthenticatorAvailable:async()=>e.isSupported(),async create(t){let r;try{r=await e.create(t)}catch(e){throw w(e)}if(!r)throw new s("NotAllowedError","Passkey registration was cancelled.");return r},async get(t){let r;try{r=await e.get(t)}catch(e){throw w(e)}if(!r)throw new s("NotAllowedError","Passkey sign-in was cancelled.");return r}}}function P(e,t={}){const r=t.key??"seamless-auth.session";return{async get(){try{const s=await e.getItemAsync(r,t.storeOptions);if(!s)return null;const n=JSON.parse(s);if(n&&"object"==typeof n&&"string"==typeof n.accessToken&&"string"==typeof n.refreshToken){const{accessToken:e,refreshToken:t}=n;return{accessToken:e,refreshToken:t}}return null}catch{return null}},async set(s){try{await e.setItemAsync(r,JSON.stringify({accessToken:s.accessToken,refreshToken:s.refreshToken}),t.storeOptions)}catch{}},async remove(){try{await e.deleteItemAsync(r,t.storeOptions)}catch{}}}}function b(e){let t;try{t=new URL(e).searchParams}catch{const r=e.split("?")[1];if(!r)return null;t=new URLSearchParams(r.split("#")[0])}const r=t.get("code"),s=t.get("state");return r&&s?{code:r,state:s}:null}function v(e,t){return{async open(r,s){const n=await e.openAuthSessionAsync(r,s,t);if("success"!==n.type||!n.url)return{type:"cancelled"};const o=b(n.url);return o?{type:"callback",...o}:{type:"cancelled"}}}}export{y as AuthProvider,g as FALLBACK_LOGIN_METHODS,A as createNativePasskeyPort,P as createSecureStoreTokenStorage,v as createWebBrowserOAuthRedirect,p as describeDevice,k as hasNonPasskeyLoginMethod,b as parseOAuthCallbackUrl,d as useAuth,h as useAuthClient,f as useAuthorizedFetch,m as useLoginMethods,S as usePasskeySupport};
1
+ import{jsx as e}from"react/jsx-runtime";import{createAuthSession as t,createMemoryTokenStorage as r,loadLoginMethods as s,detectPasskeySupport as n,PasskeyCeremonyError as o}from"@seamless-auth/client";export{FALLBACK_LOGIN_METHODS,PasskeyCeremonyError,SeamlessAuthError,createSeamlessAuthClient,encodePrfSalt,extractPasskeyPrfResult,getOAuthErrorCode,getPasskeyPolicyErrorCode,getWebAuthnErrorDetail,hasNonPasskeyLoginMethod,hasScopedRole,isUnauthenticated,roleGrantsAccess}from"@seamless-auth/client";import{createContext as a,useContext as c,useMemo as i,useSyncExternalStore as l,useEffect as u,useState as d}from"react";const h=a(void 0),y=()=>{const e=c(h);if(!e)throw new Error("useAuth must be used within an AuthProvider");return e},p=({children:s,apiHost:n,basePath:o,magicLinkRedirectUri:a,ports:c,fetch:d})=>{const{passkeys:y,oauthRedirect:p,tokenStorage:f}=c,m=i(()=>t({apiHost:n,magicLinkRedirectUri:a,passkeys:y,transport:{mode:"bearer",basePath:o,tokenStorage:f??r(),fetch:d},detectPreviousSignIn:!1}),[n,o,a,y,f,d]),g=l(m.subscribe,m.getState,m.getState);u(()=>{m.actions.refreshSession()},[m]);const k=i(()=>({...g,...m.actions,apiHost:n,magicLinkRedirectUri:a,client:m.client,ports:{passkeys:y,oauthRedirect:p,tokenStorage:f}}),[g,m,n,a,y,p,f]);return e(h.Provider,{value:k,children:s})};function f(e,t){const r="ios"===e.OS?"iOS":"android"===e.OS?"Android":e.OS;return{friendlyName:t??`${r} device`,platform:e.OS,browser:"native",deviceInfo:`${r} ${String(e.Version)}`}}const m=()=>y().client,g=()=>y().client.authorizedFetch,k=()=>{const e=m(),[t,r]=d(null),[n,o]=d(!0);return u(()=>{let t=!0;return s(e).then(e=>{t&&(e&&r(e),o(!1))}),()=>{t=!1}},[e]),{loginMethods:t,loading:n}},S=()=>{const{ports:e}=y(),[t,r]=d(!1),[s,o]=d(!0);return u(()=>{let t=!0;return n(e.passkeys).then(e=>{t&&(r(e),o(!1))}),()=>{t=!1}},[e.passkeys]),{passkeySupported:t,loading:s}};function w(e){const t=e,r="string"==typeof t?.code?t.code:void 0,s="string"==typeof t?.name?t.name:"UnknownError",n="string"==typeof t?.message?t.message:"Passkey ceremony failed.",a=/cancel|abort|dismiss|NotAllowed|UserCancelled|1001/i.test(`${s} ${r??""} ${n}`)?"NotAllowedError":/InvalidState|exists|excluded|already/i.test(`${s} ${r??""} ${n}`)?"InvalidStateError":s;return new o(a,n,r??a,e)}function A(e){return{isSupported:()=>e.isSupported(),isPlatformAuthenticatorAvailable:async()=>e.isSupported(),async create(t){let r;try{r=await e.create(t)}catch(e){throw w(e)}if(!r)throw new o("NotAllowedError","Passkey registration was cancelled.");return r},async get(t){let r;try{r=await e.get(t)}catch(e){throw w(e)}if(!r)throw new o("NotAllowedError","Passkey sign-in was cancelled.");return r}}}function P(e,t={}){const r=t.key??"seamless-auth.session";return{async get(){try{const s=await e.getItemAsync(r,t.storeOptions);if(!s)return null;const n=JSON.parse(s);if(n&&"object"==typeof n&&"string"==typeof n.accessToken&&"string"==typeof n.refreshToken){const{accessToken:e,refreshToken:t}=n;return{accessToken:e,refreshToken:t}}return null}catch{return null}},async set(s){try{await e.setItemAsync(r,JSON.stringify({accessToken:s.accessToken,refreshToken:s.refreshToken}),t.storeOptions)}catch{}},async remove(){try{await e.deleteItemAsync(r,t.storeOptions)}catch{}}}}function v(e){let t;try{t=new URL(e).searchParams}catch{const r=e.split("?")[1];if(!r)return null;t=new URLSearchParams(r.split("#")[0])}const r=t.get("code"),s=t.get("state");return r&&s?{code:r,state:s}:null}function O(e,t){return{async open(r,s){const n=await e.openAuthSessionAsync(r,s,t);if("success"!==n.type||!n.url)return{type:"cancelled"};const o=v(n.url);return o?{type:"callback",...o}:{type:"cancelled"}}}}export{p as AuthProvider,A as createNativePasskeyPort,P as createSecureStoreTokenStorage,O as createWebBrowserOAuthRedirect,f as describeDevice,v as parseOAuthCallbackUrl,y as useAuth,m as useAuthClient,g as useAuthorizedFetch,k as useLoginMethods,S as usePasskeySupport};
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/AuthProvider.tsx","../src/deviceInfo.ts","../src/hooks/useAuthClient.ts","../src/hooks/useAuthorizedFetch.ts","../src/hooks/useLoginMethods.ts","../src/hooks/usePasskeySupport.ts","../src/ports/nativePasskeys.ts","../src/ports/secureStoreTokenStorage.ts","../src/ports/webBrowserOAuthRedirect.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null],"names":["AuthContext","createContext","undefined","useAuth","context","useContext","Error","AuthProvider","children","apiHost","basePath","magicLinkRedirectUri","ports","fetch","fetchImpl","passkeys","oauthRedirect","tokenStorage","session","useMemo","createAuthSession","transport","mode","createMemoryTokenStorage","detectPreviousSignIn","state","useSyncExternalStore","subscribe","getState","useEffect","actions","refreshSession","value","client","_jsx","Provider","describeDevice","platform","friendlyName","os","OS","browser","deviceInfo","String","Version","useAuthClient","useAuthorizedFetch","authorizedFetch","FALLBACK_LOGIN_METHODS","useLoginMethods","authClient","loginMethods","setLoginMethods","useState","loading","setLoading","active","async","data","error","getPublicSystemConfig","length","read","hasNonPasskeyLoginMethod","Boolean","some","method","usePasskeySupport","passkeySupported","setPasskeySupported","supported","isSupported","isPlatformAuthenticatorAvailable","checkSupport","toCeremonyError","thrown","code","rawName","name","message","test","PasskeyCeremonyError","createNativePasskeyPort","native","create","optionsJSON","result","get","createSecureStoreTokenStorage","store","options","key","raw","getItemAsync","storeOptions","parsed","JSON","parse","accessToken","refreshToken","set","tokens","setItemAsync","stringify","remove","deleteItemAsync","parseOAuthCallbackUrl","url","params","URL","searchParams","query","split","URLSearchParams","createWebBrowserOAuthRedirect","open","authorizationUrl","redirectUri","openAuthSessionAsync","type","callback"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/AuthProvider.tsx","../src/deviceInfo.ts","../src/hooks/useAuthClient.ts","../src/hooks/useAuthorizedFetch.ts","../src/hooks/useLoginMethods.ts","../src/hooks/usePasskeySupport.ts","../src/ports/nativePasskeys.ts","../src/ports/secureStoreTokenStorage.ts","../src/ports/webBrowserOAuthRedirect.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null],"names":["AuthContext","createContext","undefined","useAuth","context","useContext","Error","AuthProvider","children","apiHost","basePath","magicLinkRedirectUri","ports","fetch","fetchImpl","passkeys","oauthRedirect","tokenStorage","session","useMemo","createAuthSession","transport","mode","createMemoryTokenStorage","detectPreviousSignIn","state","useSyncExternalStore","subscribe","getState","useEffect","actions","refreshSession","value","client","_jsx","Provider","describeDevice","platform","friendlyName","os","OS","browser","deviceInfo","String","Version","useAuthClient","useAuthorizedFetch","authorizedFetch","useLoginMethods","authClient","loginMethods","setLoginMethods","useState","loading","setLoading","active","loadLoginMethods","then","methods","usePasskeySupport","passkeySupported","setPasskeySupported","detectPasskeySupport","supported","toCeremonyError","thrown","error","code","rawName","name","message","test","PasskeyCeremonyError","createNativePasskeyPort","native","isSupported","isPlatformAuthenticatorAvailable","async","create","optionsJSON","result","get","createSecureStoreTokenStorage","store","options","key","raw","getItemAsync","storeOptions","parsed","JSON","parse","accessToken","refreshToken","set","tokens","setItemAsync","stringify","remove","deleteItemAsync","parseOAuthCallbackUrl","url","params","URL","searchParams","query","split","URLSearchParams","createWebBrowserOAuthRedirect","open","authorizationUrl","redirectUri","openAuthSessionAsync","type","callback"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seamless-auth/react-native",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "description": "Headless React Native binding for Seamless Auth: provider, hooks, and the native ports for passkeys, secure token storage, and in-app browser OAuth.",
5
5
  "type": "module",
6
6
  "exports": {
@@ -45,8 +45,8 @@
45
45
  "react": "^18.0.0 || ^19.0.0"
46
46
  },
47
47
  "dependencies": {
48
- "@seamless-auth/client": "^0.3.1",
49
- "@seamless-auth/types": "^0.26.0"
48
+ "@seamless-auth/client": "^0.4.0",
49
+ "@seamless-auth/types": "^0.28.0"
50
50
  },
51
51
  "sideEffects": false
52
52
  }