@seamless-auth/react-native 0.3.1 → 0.3.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 +20 -0
- package/README.md +9 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# @seamless-auth/react-native
|
|
2
2
|
|
|
3
|
+
## 0.3.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- f21867d: OAuth sign-in now carries the state binding the auth server returns from `POST /oauth/:providerId/start` back to the callback. The session actions `startOAuthLogin` and `finishOAuthLogin` (and so `useAuth()` in React and React Native, and the Angular, Vue and Svelte bindings) store the binding with its state, attach it to the matching callback, and clear it afterwards, so apps that call these actions directly need no code change. The binding is kept in `sessionStorage` under `seamless:oauth:binding` in a browser and in memory elsewhere, and is never sent to the provider or put in a URL. `startOAuthSignIn` passes it explicitly when an in-app browser hands the callback back, and now refuses a callback whose state is not the one it started.
|
|
8
|
+
|
|
9
|
+
`StartOAuthLoginResult` gains an optional `binding` and `FinishOAuthLoginInput` an optional `binding`. Older auth servers return no binding and are unaffected. Auth API 0.19.x with fells-code/seamless-auth-api#463 refuses a callback without the binding, so upgrade this SDK before or with that API release.
|
|
10
|
+
|
|
11
|
+
- Updated dependencies [f21867d]
|
|
12
|
+
- @seamless-auth/client@0.7.1
|
|
13
|
+
|
|
14
|
+
## 0.3.2
|
|
15
|
+
|
|
16
|
+
### Patch Changes
|
|
17
|
+
|
|
18
|
+
- 782583c: In bearer transport, a request that carries a token no longer follows a redirect to an origin outside `apiHost` and `trustedOrigins`. The client asks `fetch` for `redirect: 'manual'`, follows a redirect to a trusted origin itself (up to five hops, turning a `303`, or a `301` or `302` after a POST, into a GET as `fetch` does), and rejects any other with the new `UntrustedRedirectError` without sending the token on. Where the platform follows redirects regardless, as React Native's `fetch` does, a response that ended on another origin is rejected instead. A caller that sets `redirect` itself keeps that choice, and the final-origin check still applies. Requests without a token, and cookie transport, are unchanged.
|
|
19
|
+
- Updated dependencies [782583c]
|
|
20
|
+
- Updated dependencies [e3cf1f9]
|
|
21
|
+
- @seamless-auth/client@0.7.0
|
|
22
|
+
|
|
3
23
|
## 0.3.1
|
|
4
24
|
|
|
5
25
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -99,7 +99,8 @@ token and refreshes it once on a 401; a path resolves on `apiHost`, and a path
|
|
|
99
99
|
under the adapter's mount (`/auth/sessions`) is sent as an adapter call. The
|
|
100
100
|
token goes only to `apiHost` and the origins in the provider's `trustedOrigins`
|
|
101
101
|
prop; any other origin rejects with `UntrustedOriginError` before anything is
|
|
102
|
-
sent
|
|
102
|
+
sent. A response that a redirect took to any other origin rejects with
|
|
103
|
+
`UntrustedRedirectError`, and the client never follows such a redirect itself:
|
|
103
104
|
|
|
104
105
|
```ts
|
|
105
106
|
const authorizedFetch = useAuthorizedFetch();
|
|
@@ -152,6 +153,13 @@ it with `ports.oauthRedirect.open(url, redirectUri)`, which resolves with the
|
|
|
152
153
|
callback's `code` and `state`, and finish with `finishOAuthLogin`.
|
|
153
154
|
`redirectUri` must be registered with the provider and allowed by the auth API.
|
|
154
155
|
|
|
156
|
+
Newer auth servers also return a `binding` from `startOAuthLogin` and refuse a
|
|
157
|
+
callback without it. The session actions keep it in memory with its `state` and
|
|
158
|
+
send it from `finishOAuthLogin`, so this needs nothing from you. If you finish
|
|
159
|
+
with another client, pass `binding` yourself, and check that the callback's
|
|
160
|
+
`state` matches the one `startOAuthLogin` returned. Never put the binding in a
|
|
161
|
+
URL or send it to the provider.
|
|
162
|
+
|
|
155
163
|
## License
|
|
156
164
|
|
|
157
165
|
Apache-2.0. See [LICENSE](LICENSE).
|
package/dist/index.d.ts
CHANGED
|
@@ -12,5 +12,5 @@ export { createSecureStoreTokenStorage } from './ports/secureStoreTokenStorage';
|
|
|
12
12
|
export type { SecureStoreLike, SecureStoreTokenStorageOptions, } from './ports/secureStoreTokenStorage';
|
|
13
13
|
export { createWebBrowserOAuthRedirect, parseOAuthCallbackUrl, } from './ports/webBrowserOAuthRedirect';
|
|
14
14
|
export type { WebBrowserLike } from './ports/webBrowserOAuthRedirect';
|
|
15
|
-
export { createSeamlessAuthClient, encodePrfSalt, extractPasskeyPrfResult, getOAuthErrorCode, getPasskeyPolicyErrorCode, getWebAuthnErrorDetail, hasScopedRole, isUnauthenticated, PasskeyCeremonyError, roleGrantsAccess, SeamlessAuthError, UntrustedOriginError, } from '@seamless-auth/client';
|
|
15
|
+
export { createSeamlessAuthClient, encodePrfSalt, extractPasskeyPrfResult, getOAuthErrorCode, getPasskeyPolicyErrorCode, getWebAuthnErrorDetail, hasScopedRole, isUnauthenticated, PasskeyCeremonyError, roleGrantsAccess, SeamlessAuthError, UntrustedOriginError, UntrustedRedirectError, } from '@seamless-auth/client';
|
|
16
16
|
export type { Credential, CredentialUpdateResult, CurrentUserResult, FinishOAuthLoginInput, FinishOAuthLoginResult, LoginInput, LoginMethod, LoginStartResult, MessageResult, OAuthErrorCode, OAuthProvider, OAuthProvidersResult, OAuthRedirectOutcome, OAuthRedirectPort, Organization, OrganizationMembership, OrganizationSwitchResult, PasskeyAttachment, PasskeyLoginData, PasskeyMetadata, PasskeyPolicyErrorCode, PasskeyPort, PasskeyPrfInput, PasskeyPrfResult, PasskeyRegistrationData, PublicSystemConfigResult, RegisterInput, RegisterPasskeyOptions, SeamlessAuthClient, SeamlessAuthClientOptions, SeamlessAuthResult, StartOAuthLoginInput, StartOAuthLoginResult, StepUpMethod, StepUpPrfData, StepUpStatus, StoredTokens, TokenStoragePort, TotpEnrollmentStartResult, TotpStatus, User, WebAuthnErrorDetail, } from '@seamless-auth/client';
|
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,loadLoginMethods as s,detectPasskeySupport as n,PasskeyCeremonyError as o}from"@seamless-auth/client";export{FALLBACK_LOGIN_METHODS,PasskeyCeremonyError,SeamlessAuthError,UntrustedOriginError,createSeamlessAuthClient,encodePrfSalt,extractPasskeyPrfResult,getOAuthErrorCode,getPasskeyPolicyErrorCode,getWebAuthnErrorDetail,hasNonPasskeyLoginMethod,hasScopedRole,isUnauthenticated,roleGrantsAccess}from"@seamless-auth/client";import{createContext as a,useContext as i,useMemo as c,useSyncExternalStore as l,useEffect as u,useState as d}from"react";const h=a(void 0),y=()=>{const e=i(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:i,fetch:d,trustedOrigins:y})=>{const{passkeys:p,oauthRedirect:f,tokenStorage:g}=i,m=y?JSON.stringify(y):void 0,k=c(()=>t({apiHost:n,magicLinkRedirectUri:a,passkeys:p,transport:{mode:"bearer",basePath:o,tokenStorage:g??r(),fetch:d,trustedOrigins:m?JSON.parse(m):void 0},detectPreviousSignIn:!1}),[n,o,a,p,g,d,m]),S=l(k.subscribe,k.getState,k.getState);u(()=>{k.actions.refreshSession()},[k]);const w=c(()=>({...S,...k.actions,apiHost:n,magicLinkRedirectUri:a,client:k.client,ports:{passkeys:p,oauthRedirect:f,tokenStorage:g}}),[S,k,n,a,p,f,g]);return e(h.Provider,{value:w,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 g=()=>y().client,m=()=>y().client.authorizedFetch,k=()=>{const e=g(),[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 O(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 P(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=P(n.url);return o?{type:"callback",...o}:{type:"cancelled"}}}}export{p as AuthProvider,A as createNativePasskeyPort,O as createSecureStoreTokenStorage,v as createWebBrowserOAuthRedirect,f as describeDevice,P as parseOAuthCallbackUrl,y as useAuth,g as useAuthClient,m as useAuthorizedFetch,k 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,UntrustedOriginError,UntrustedRedirectError,createSeamlessAuthClient,encodePrfSalt,extractPasskeyPrfResult,getOAuthErrorCode,getPasskeyPolicyErrorCode,getWebAuthnErrorDetail,hasNonPasskeyLoginMethod,hasScopedRole,isUnauthenticated,roleGrantsAccess}from"@seamless-auth/client";import{createContext as a,useContext as i,useMemo as c,useSyncExternalStore as l,useEffect as u,useState as d}from"react";const h=a(void 0),y=()=>{const e=i(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:i,fetch:d,trustedOrigins:y})=>{const{passkeys:p,oauthRedirect:f,tokenStorage:g}=i,m=y?JSON.stringify(y):void 0,k=c(()=>t({apiHost:n,magicLinkRedirectUri:a,passkeys:p,transport:{mode:"bearer",basePath:o,tokenStorage:g??r(),fetch:d,trustedOrigins:m?JSON.parse(m):void 0},detectPreviousSignIn:!1}),[n,o,a,p,g,d,m]),S=l(k.subscribe,k.getState,k.getState);u(()=>{k.actions.refreshSession()},[k]);const w=c(()=>({...S,...k.actions,apiHost:n,magicLinkRedirectUri:a,client:k.client,ports:{passkeys:p,oauthRedirect:f,tokenStorage:g}}),[S,k,n,a,p,f,g]);return e(h.Provider,{value:w,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 g=()=>y().client,m=()=>y().client.authorizedFetch,k=()=>{const e=g(),[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 O(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 P(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=P(n.url);return o?{type:"callback",...o}:{type:"cancelled"}}}}export{p as AuthProvider,A as createNativePasskeyPort,O as createSecureStoreTokenStorage,v as createWebBrowserOAuthRedirect,f as describeDevice,P as parseOAuthCallbackUrl,y as useAuth,g as useAuthClient,m 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","trustedOrigins","passkeys","oauthRedirect","tokenStorage","trustedOriginsKey","JSON","stringify","session","useMemo","createAuthSession","transport","mode","createMemoryTokenStorage","parse","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","accessToken","refreshToken","set","tokens","setItemAsync","remove","deleteItemAsync","parseOAuthCallbackUrl","url","params","URL","searchParams","query","split","URLSearchParams","createWebBrowserOAuthRedirect","open","authorizationUrl","redirectUri","openAuthSessionAsync","type","callback"],"mappings":"
|
|
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","trustedOrigins","passkeys","oauthRedirect","tokenStorage","trustedOriginsKey","JSON","stringify","session","useMemo","createAuthSession","transport","mode","createMemoryTokenStorage","parse","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","accessToken","refreshToken","set","tokens","setItemAsync","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.3.
|
|
3
|
+
"version": "0.3.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.
|
|
49
|
-
"@seamless-auth/types": "^0.
|
|
48
|
+
"@seamless-auth/client": "^0.7.1",
|
|
49
|
+
"@seamless-auth/types": "^0.29.0"
|
|
50
50
|
},
|
|
51
51
|
"sideEffects": false
|
|
52
52
|
}
|