@descope/react-sdk 0.0.52-alpha.25 → 0.0.52-alpha.27

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/README.md CHANGED
@@ -72,7 +72,7 @@ const App = () => {
72
72
  }
73
73
  ```
74
74
 
75
- #### Use the `useAuth` hook in your components in order to access authentication state and utilities
75
+ #### Use the `useDescope`, `useSession` and `useUser` hooks in your components in order to get authentication state, user details and utilities
76
76
 
77
77
  This can be helpful to implement application-specific logic. Examples:
78
78
 
@@ -81,27 +81,27 @@ This can be helpful to implement application-specific logic. Examples:
81
81
  - Logout button
82
82
 
83
83
  ```js
84
- import { useAuth } from '@descope/react-sdk'
84
+ import { useDescope, useSession, useUser } from '@descope/react-sdk'
85
85
 
86
86
  const App = () => {
87
- // NOTE - `useAuth` should be used inside `AuthProvider` context,
87
+ // NOTE - `useDescope`, `useSession`, `useUser` should be used inside `AuthProvider` context,
88
88
  // and will throw an exception if this requirement is not met
89
- const { authenticated, user, logout } = useAuth()
90
- return (
91
- {...}
92
- {
93
- // render different components if current session is authenticated
94
- authenticated && <MyPrivateComponent />
95
- }
96
- {
97
- // render user's content
98
- authenticated && <div>Hello ${user.name}</div>
99
- }
100
- {
101
- // logout button
102
- authenticated && <button onClick={logout}>Logout</div>
103
- }
104
- )
89
+ const { isAuthenticated, isSessionLoading } = useSession()
90
+ const { user, isUserLoading } = useUser()
91
+ const { logout } = useDescope()
92
+
93
+ if(isSessionLoading || isUserLoading){
94
+ return <p>Loading...</p>
95
+ }
96
+
97
+ if(isAuthenticated){
98
+ return (
99
+ <p>Hello ${user.name}</p>
100
+ <button onClick={logout}>Logout</div>
101
+ )
102
+ }
103
+
104
+ return <p>You are not logged in</p>
105
105
  }
106
106
  ```
107
107
 
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("@descope/web-js-sdk");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function o(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(s){if("default"!==s){var o=Object.getOwnPropertyDescriptor(e,s);Object.defineProperty(t,s,o.get?o:{enumerable:!0,get:function(){return e[s]}})}})),t.default=e,Object.freeze(t)}var r=s(e),n=s(t);let u;const a=e=>{const t=n.default({...e,persistTokens:!0,autoRefresh:!0});return u=t,t};u=a({projectId:"temp pid"});const l=r.default.createContext(void 0),i=({projectId:t,baseUrl:s,sessionTokenViaCookie:o,children:n})=>{const[u,i]=e.useState({}),[c,d]=e.useState(""),f=e.useMemo((()=>{if(t)return a({projectId:t,baseUrl:s,sessionTokenViaCookie:o,hooks:{beforeRequest:e=>{const t=e;return t.headers={...t.headers,"x-descope-sdk-name":"react","x-descope-sdk-version":"0.0.52-alpha.25"},t}},persistToken:!0,autoRefresh:!0})}),[t,s]);e.useEffect((()=>{if(!f)return;const e=f.onSessionTokenChange(d),t=f.onUserChange(i);return f.refresh(),()=>{e?.(),t?.()}}),[f]);const p=e.useMemo((()=>({sdk:f,projectId:t,baseUrl:s,user:u,sessionToken:c,setUser:i,setSessionToken:d})),[c,u,t,s]);return r.default.createElement(l.Provider,{value:p},n)};i.defaultProps={baseUrl:"",children:void 0,sessionTokenViaCookie:!1};const c=e.lazy((async()=>(await Promise.resolve().then((function(){return o(require("@descope/web-component"))})),{default:({projectId:e,flowId:t,baseUrl:s,innerRef:o,tenant:n,theme:u,debug:a})=>r.default.createElement("descope-wc",{"project-id":e,"flow-id":t,"base-url":s,ref:o,tenant:n,theme:u,debug:a})}))),d=r.default.forwardRef((({flowId:t,onSuccess:s,onError:o,tenant:n,theme:u,debug:a},i)=>{const[d,f]=e.useState(null);e.useImperativeHandle(i,(()=>d));const{projectId:p,baseUrl:k,setUser:b,setSessionToken:h,sdk:g}=r.default.useContext(l),m=e.useCallback((e=>{b(e.detail?.user);const t=e.detail?.sessionJwt;h(t),s&&s(e),g.httpClient.hooks.afterRequest({},new Response(JSON.stringify(e.detail)))}),[b,h,s]);return e.useEffect((()=>{const e=d;return e?.addEventListener("success",m),o&&e?.addEventListener("error",o),()=>{o&&e?.removeEventListener("error",o),e?.removeEventListener("success",m)}}),[d,o,m]),r.default.createElement(e.Suspense,{fallback:null},r.default.createElement(c,{projectId:p,flowId:t,baseUrl:k,innerRef:f,tenant:n,theme:u,debug:a}))}));d.defaultProps={onError:void 0,onSuccess:void 0};const f=e=>(...t)=>{if(!e)throw Error("You can only use this function after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component");return e(...t)};exports.AuthProvider=i,exports.Descope=d,exports.SignInFlow=e=>r.default.createElement(d,{...e,flowId:"sign-in"}),exports.SignUpFlow=e=>r.default.createElement(d,{...e,flowId:"sign-up"}),exports.SignUpOrInFlow=e=>r.default.createElement(d,{...e,flowId:"sign-up-or-in"}),exports.getSessionToken=()=>u?.getSessionToken(),exports.useAuth=()=>{const t=r.default.useContext(l);if(!t)throw Error("You can only use 'useAuth' in the context of <AuthProvider />");const{user:s,sessionToken:o,sdk:n}=t,u=e.useCallback(f(n?.logoutAll),[n]),a=e.useCallback(f(n?.logout),[n]),i=e.useCallback(f(n?.me),[n]),c=e.useCallback(f(n?.getJwtPermissions),[n]),d=e.useCallback(f(n?.getJwtRoles),[n]),p=e.useCallback(f(n?.getRefreshToken),[n]);return e.useMemo((()=>({authenticated:!!o,user:s,sessionToken:o,logoutAll:u,logout:a,me:i,getJwtPermissions:c,getJwtRoles:d,getRefreshToken:p})),[s,o,n])};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("@descope/web-js-sdk");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function o(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(s){if("default"!==s){var o=Object.getOwnPropertyDescriptor(e,s);Object.defineProperty(t,s,o.get?o:{enumerable:!0,get:function(){return e[s]}})}})),t.default=e,Object.freeze(t)}var r=s(e),n=s(t);const i=r.default.createContext(void 0);let a;const u=e=>{const t=n.default({...e,persistTokens:!0,autoRefresh:!0});return a=t,t};a=u({projectId:"temp pid"});const l=()=>a?.getSessionToken(),c={"x-descope-sdk-name":"react","x-descope-sdk-version":"0.0.52-alpha.27"};const d=e=>(...t)=>{if(!e)throw Error("You can only use this function after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component");return e(...t)},f=({projectId:t,baseUrl:s,sessionTokenViaCookie:o,children:n})=>{const[a,l]=e.useState(),[f,p]=e.useState(),[g,k]=e.useState(!1),[h,b]=e.useState(!1),m=(({projectId:t,baseUrl:s,sessionTokenViaCookie:o})=>e.useMemo((()=>{if(t)return u({projectId:t,baseUrl:s,sessionTokenViaCookie:o,baseHeaders:c,persistToken:!0,autoRefresh:!0})}),[t,s]))({projectId:t,baseUrl:s,sessionTokenViaCookie:o});e.useEffect((()=>{if(m){const e=m.onSessionTokenChange(p),t=m.onUserChange(l);return()=>{e(),t()}}}),[m]);const v=e.useCallback((()=>{b(!0),d(m?.refresh)().then((()=>{b(!1)}))}),[m]),S=e.useCallback((()=>{k(!0),d(m.me)().then((()=>{k(!1)}))}),[m]),w=e.useCallback(d(m?.logoutAll),[m]),E=e.useCallback(d(m?.logout),[m]),U=e.useMemo((()=>({fetchUser:S,user:a,isUserLoading:g,fetchSession:v,session:f,isSessionLoading:h,logout:E,logoutAll:w,projectId:t,baseUrl:s,setUser:l,setSession:p,sdk:m})),[S,a,g,v,f,h,E,w,t,s,l,p,m]);return r.default.createElement(i.Provider,{value:U},n)};f.defaultProps={baseUrl:"",children:void 0,sessionTokenViaCookie:!1};const p=e.lazy((async()=>((await Promise.resolve().then((function(){return o(require("@descope/web-component"))}))).default.sdkConfigOverrides={baseHeaders:c},{default:({projectId:e,flowId:t,baseUrl:s,innerRef:o,tenant:n,theme:i,debug:a})=>r.default.createElement("descope-wc",{"project-id":e,"flow-id":t,"base-url":s,ref:o,tenant:n,theme:i,debug:a})}))),g=r.default.forwardRef((({flowId:t,onSuccess:s,onError:o,tenant:n,theme:a,debug:u},l)=>{const[c,d]=e.useState(null);e.useImperativeHandle(l,(()=>c));const{projectId:f,baseUrl:g,setUser:k,setSession:h,sdk:b}=r.default.useContext(i),m=e.useCallback((e=>{k(e.detail?.user);const t=e.detail?.sessionJwt;h(t),b.httpClient.hooks.afterRequest({},new Response(JSON.stringify(e.detail))),s&&s(e)}),[k,h,s]);return e.useEffect((()=>{const e=c;return e?.addEventListener("success",m),o&&e?.addEventListener("error",o),()=>{o&&e?.removeEventListener("error",o),e?.removeEventListener("success",m)}}),[c,o,m]),r.default.createElement("form",null,r.default.createElement(e.Suspense,{fallback:null},r.default.createElement(p,{projectId:f,flowId:t,baseUrl:g,innerRef:d,tenant:n,theme:a,debug:u})))}));g.defaultProps={onError:void 0,onSuccess:void 0};var k=()=>{const t=e.useContext(i);if(!t)throw Error("You can only use this hook in the context of <AuthProvider />");return t};exports.AuthProvider=f,exports.Descope=g,exports.SignInFlow=e=>r.default.createElement(g,{...e,flowId:"sign-in"}),exports.SignUpFlow=e=>r.default.createElement(g,{...e,flowId:"sign-up"}),exports.SignUpOrInFlow=e=>r.default.createElement(g,{...e,flowId:"sign-up-or-in"}),exports.getJwtPermissions=(e=l(),t)=>a?.getJwtPermissions(e,t),exports.getJwtRoles=(e=l(),t)=>a?.getJwtRoles(e,t),exports.getRefreshToken=()=>a?.getRefreshToken(),exports.getSessionToken=l,exports.useDescope=()=>{const{logout:t,logoutAll:s}=k();return e.useMemo((()=>({logoutAll:s,logout:t})),[s,t])},exports.useSession=()=>{const{session:t,isSessionLoading:s,fetchSession:o}=k();return e.useEffect((()=>{t||s||o()}),[o]),{isSessionLoading:s,sessionToken:t,isAuthenticated:!!t}},exports.useUser=()=>{const{user:t,fetchUser:s,isUserLoading:o,session:r,isSessionLoading:n}=k(),[i,a]=e.useState(!1);return e.useEffect((()=>{t||o||!r||n||i||(a(!0),s())}),[n,s,r,i]),{isUserLoading:o,user:t}};
2
2
  //# sourceMappingURL=index.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../../src/lib/sdk.ts","../../src/lib/hooks/authContext.ts","../../src/lib/components/AuthProvider.tsx","../../src/lib/components/Descope.tsx","../../src/lib/hooks/useAuth.ts","../../src/lib/components/DefaultFlows.tsx"],"sourcesContent":["import createSdk from '@descope/web-js-sdk';\n\nlet sdkInstance;\n\nconst createSdkWrapper = <P extends Parameters<typeof createSdk>[0]>(\n\tconfig: P\n) => {\n\tconst sdk = createSdk({\n\t\t...config,\n\t\tpersistTokens: true,\n\t\tautoRefresh: true\n\t});\n\tsdkInstance = sdk;\n\n\treturn sdk;\n};\n\n/**\n * We want to make sure the getSessionToken fn is used only when persistTokens is on\n *\n * So we are keeping the SDK init in a single place,\n * and we are creating a temp instance in order to export the getSessionToken\n * even before the SDK was init\n */\nsdkInstance = createSdkWrapper({ projectId: 'temp pid' });\n\nexport const getSessionToken = () => sdkInstance?.getSessionToken();\n\nexport default createSdkWrapper;\n","import React from 'react';\nimport { IAuthContext } from '../types';\n\nconst AuthContext = React.createContext<IAuthContext>(undefined);\n\nexport default AuthContext;\n","import React, { FC, useEffect, useMemo, useState } from 'react';\nimport createSdk from '../sdk';\nimport AuthContext from '../hooks/authContext';\nimport { IAuthContext } from '../types';\n\ndeclare const BUILD_VERSION: string;\n\ninterface IAuthProviderProps {\n\tprojectId: string;\n\tbaseUrl?: string;\n\t// If true, session token (jwt) will be stored on cookie. Otherwise, the session token will be\n\t// stored on local storage and can accessed with getSessionToken function\n\t// Use this option if session token will stay small (less than 1k)\n\t// NOTE: Session token can grow, especially in cases of using authorization, or adding custom claims\n\tsessionTokenViaCookie?: boolean;\n\tchildren?: JSX.Element;\n}\n\nconst AuthProvider: FC<IAuthProviderProps> = ({\n\tprojectId,\n\tbaseUrl,\n\tsessionTokenViaCookie,\n\tchildren\n}) => {\n\tconst [user, setUser] = useState({});\n\tconst [sessionToken, setSessionToken] = useState('');\n\n\tconst sdk = useMemo(() => {\n\t\tif (!projectId) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn createSdk({\n\t\t\tprojectId,\n\t\t\tbaseUrl,\n\t\t\tsessionTokenViaCookie,\n\t\t\thooks: {\n\t\t\t\tbeforeRequest: (config) => {\n\t\t\t\t\tconst conf = config;\n\t\t\t\t\tconf.headers = {\n\t\t\t\t\t\t...conf.headers,\n\t\t\t\t\t\t'x-descope-sdk-name': 'react',\n\t\t\t\t\t\t'x-descope-sdk-version': BUILD_VERSION\n\t\t\t\t\t};\n\t\t\t\t\treturn conf;\n\t\t\t\t}\n\t\t\t},\n\t\t\tpersistToken: true,\n\t\t\tautoRefresh: true\n\t\t});\n\t}, [projectId, baseUrl]);\n\n\tuseEffect(() => {\n\t\tif (!sdk) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst unsubscribeSessionToken = sdk.onSessionTokenChange(setSessionToken);\n\t\tconst unsubscribeUser = sdk.onUserChange(setUser);\n\t\t// we are calling refresh once after creating the SDK instance\n\t\t// so if refresh token exists, the user will be logged in automatically\n\t\tsdk.refresh();\n\t\treturn () => {\n\t\t\tunsubscribeSessionToken?.();\n\t\t\tunsubscribeUser?.();\n\t\t};\n\t}, [sdk]);\n\n\tconst value = useMemo<IAuthContext>(\n\t\t() => ({\n\t\t\tsdk,\n\t\t\tprojectId,\n\t\t\tbaseUrl,\n\t\t\tuser,\n\t\t\tsessionToken,\n\t\t\tsetUser,\n\t\t\tsetSessionToken\n\t\t}),\n\t\t[sessionToken, user, projectId, baseUrl]\n\t);\n\treturn <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;\n};\n\nAuthProvider.defaultProps = {\n\tbaseUrl: '',\n\tchildren: undefined,\n\tsessionTokenViaCookie: false\n};\n\nexport default AuthProvider;\n","import React, {\n\tlazy,\n\tSuspense,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseState\n} from 'react';\nimport AuthContext from '../hooks/authContext';\nimport { DescopeProps } from '../types';\n\n// web-component code uses browser API, but can be used in SSR apps, hence the lazy loading\nconst DescopeWC = lazy(async () => {\n\tawait import('@descope/web-component');\n\treturn {\n\t\tdefault: ({\n\t\t\tprojectId,\n\t\t\tflowId,\n\t\t\tbaseUrl,\n\t\t\tinnerRef,\n\t\t\ttenant,\n\t\t\ttheme,\n\t\t\tdebug\n\t\t}) => (\n\t\t\t<descope-wc\n\t\t\t\tproject-id={projectId}\n\t\t\t\tflow-id={flowId}\n\t\t\t\tbase-url={baseUrl}\n\t\t\t\tref={innerRef}\n\t\t\t\ttenant={tenant}\n\t\t\t\ttheme={theme}\n\t\t\t\tdebug={debug}\n\t\t\t/>\n\t\t)\n\t};\n});\n\nconst Descope = React.forwardRef<HTMLElement, DescopeProps>(\n\t({ flowId, onSuccess, onError, tenant, theme, debug }, ref) => {\n\t\tconst [innerRef, setInnerRef] = useState(null);\n\n\t\tuseImperativeHandle(ref, () => innerRef);\n\n\t\tconst { projectId, baseUrl, setUser, setSessionToken, sdk } =\n\t\t\tReact.useContext(AuthContext);\n\n\t\tconst handleSuccess = useCallback(\n\t\t\t(e: CustomEvent) => {\n\t\t\t\tsetUser(e.detail?.user);\n\t\t\t\tconst sessionJwt = e.detail?.sessionJwt;\n\t\t\t\tsetSessionToken(sessionJwt);\n\t\t\t\tif (onSuccess) {\n\t\t\t\t\tonSuccess(e);\n\t\t\t\t}\n\t\t\t\t// In order to make sure all the after-hooks are running with the success response\n\t\t\t\t// we are generating a fake response with the success data and calling the http client after hook fn with it\n\t\t\t\tsdk.httpClient.hooks.afterRequest(\n\t\t\t\t\t{} as any,\n\t\t\t\t\tnew Response(JSON.stringify(e.detail))\n\t\t\t\t);\n\t\t\t},\n\t\t\t[setUser, setSessionToken, onSuccess]\n\t\t);\n\n\t\tuseEffect(() => {\n\t\t\tconst ele = innerRef;\n\t\t\tele?.addEventListener('success', handleSuccess);\n\t\t\tif (onError) ele?.addEventListener('error', onError);\n\n\t\t\treturn () => {\n\t\t\t\tif (onError) ele?.removeEventListener('error', onError);\n\n\t\t\t\tele?.removeEventListener('success', handleSuccess);\n\t\t\t};\n\t\t}, [innerRef, onError, handleSuccess]);\n\n\t\treturn (\n\t\t\t<Suspense fallback={null}>\n\t\t\t\t<DescopeWC\n\t\t\t\t\tprojectId={projectId}\n\t\t\t\t\tflowId={flowId}\n\t\t\t\t\tbaseUrl={baseUrl}\n\t\t\t\t\tinnerRef={setInnerRef}\n\t\t\t\t\ttenant={tenant}\n\t\t\t\t\ttheme={theme}\n\t\t\t\t\tdebug={debug}\n\t\t\t\t/>\n\t\t\t</Suspense>\n\t\t);\n\t}\n);\n\nDescope.defaultProps = {\n\tonError: undefined,\n\tonSuccess: undefined\n};\n\nexport default Descope;\n","import React, { useCallback, useMemo } from 'react';\nimport { IAuth } from '../types';\nimport AuthContext from './authContext';\n\n/**\n * Wrap a function with a validation that it exists\n * @param fn The function to wrap with the validation\n * @throws if function does not exist, an error with the relevant message will be thrown\n */\nconst withValidation =\n\t<T extends Array<any>, U>(fn: (...args: T) => U) =>\n\t(...args: T): U => {\n\t\tif (!fn) {\n\t\t\tthrow Error(\n\t\t\t\t`You can only use this function after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component`\n\t\t\t);\n\t\t}\n\t\treturn fn(...args);\n\t};\n\nconst useAuth = (): IAuth => {\n\tconst ctx = React.useContext(AuthContext);\n\tif (!ctx) {\n\t\tthrow Error(\n\t\t\t`You can only use 'useAuth' in the context of <AuthProvider />`\n\t\t);\n\t}\n\tconst { user, sessionToken, sdk } = ctx;\n\n\tconst logoutAll = useCallback(withValidation(sdk?.logoutAll), [sdk]);\n\n\tconst logout = useCallback(withValidation(sdk?.logout), [sdk]);\n\n\tconst me = useCallback(withValidation(sdk?.me), [sdk]);\n\n\tconst getJwtPermissions = useCallback(\n\t\twithValidation(sdk?.getJwtPermissions),\n\t\t[sdk]\n\t);\n\n\tconst getJwtRoles = useCallback(withValidation(sdk?.getJwtRoles), [sdk]);\n\n\tconst getRefreshToken = useCallback(withValidation(sdk?.getRefreshToken), [\n\t\tsdk\n\t]);\n\n\treturn useMemo(\n\t\t() => ({\n\t\t\tauthenticated: !!sessionToken,\n\t\t\tuser,\n\t\t\tsessionToken,\n\t\t\tlogoutAll,\n\t\t\tlogout,\n\t\t\tme,\n\t\t\tgetJwtPermissions,\n\t\t\tgetJwtRoles,\n\t\t\t/**\n\t\t\t * Returns refresh token. Use this function when:\n\t\t\t * 1. You need to pass refresh token to another party (For example, in SSR)\n\t\t\t * 2. Descope project's configuration is set to manage token response in BODY (in contrast to manage response in COOKIES)\n\t\t\t * NOTE: Use carefully! Refresh token is sensitive token with relativity long expiration. Prefer using this function only for testing, and to manage token response in COOKIES)\n\t\t\t */\n\t\t\tgetRefreshToken\n\t\t}),\n\t\t[user, sessionToken, sdk]\n\t);\n};\n\nexport default useAuth;\n","import React from 'react';\nimport { DefaultFlowProps } from '../types';\nimport Descope from './Descope';\n\nexport const SignInFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-in\" />\n);\n\nexport const SignUpFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-up\" />\n);\n\nexport const SignUpOrInFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-up-or-in\" />\n);\n"],"names":["sdkInstance","createSdkWrapper","config","sdk","createSdk","persistTokens","autoRefresh","projectId","AuthContext","React","createContext","undefined","AuthProvider","baseUrl","sessionTokenViaCookie","children","user","setUser","useState","sessionToken","setSessionToken","useMemo","hooks","beforeRequest","conf","headers","persistToken","useEffect","unsubscribeSessionToken","onSessionTokenChange","unsubscribeUser","onUserChange","refresh","value","createElement","Provider","defaultProps","DescopeWC","lazy","async","Promise","resolve","then","_interopNamespace","require","default","flowId","innerRef","tenant","theme","debug","ref","Descope","forwardRef","onSuccess","onError","setInnerRef","useImperativeHandle","useContext","handleSuccess","useCallback","e","detail","sessionJwt","httpClient","afterRequest","Response","JSON","stringify","ele","addEventListener","removeEventListener","Suspense","fallback","withValidation","fn","args","Error","props","getSessionToken","ctx","logoutAll","logout","me","getJwtPermissions","getJwtRoles","getRefreshToken","authenticated"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../../src/lib/hooks/Context.ts","../../src/lib/sdk.ts","../../src/lib/constants.ts","../../src/lib/utils.ts","../../src/lib/components/AuthProvider/AuthProvider.tsx","../../src/lib/components/AuthProvider/useSdk.ts","../../src/lib/components/Descope.tsx","../../src/lib/hooks/useContext.ts","../../src/lib/components/DefaultFlows.tsx","../../src/lib/hooks/useDescope.ts","../../src/lib/hooks/useSession.ts","../../src/lib/hooks/useUser.ts"],"sourcesContent":["import React from 'react';\nimport { IContext } from '../types';\n\nconst Context = React.createContext<IContext>(undefined);\n\nexport default Context;\n","import createSdk from '@descope/web-js-sdk';\n\ntype Sdk = ReturnType<typeof createSdkWrapper>;\nlet sdkInstance: Sdk;\n\nconst createSdkWrapper = <P extends Parameters<typeof createSdk>[0]>(\n\tconfig: P\n) => {\n\tconst sdk = createSdk({\n\t\t...config,\n\t\tpersistTokens: true,\n\t\tautoRefresh: true\n\t});\n\tsdkInstance = sdk;\n\n\treturn sdk;\n};\n\n/**\n * We want to make sure the getSessionToken fn is used only when persistTokens is on\n *\n * So we are keeping the SDK init in a single place,\n * and we are creating a temp instance in order to export the getSessionToken\n * even before the SDK was init\n */\nsdkInstance = createSdkWrapper({ projectId: 'temp pid' });\n\nexport const getSessionToken = () => sdkInstance?.getSessionToken();\nexport const getJwtPermissions = (token = getSessionToken(), tenant?: string) =>\n\tsdkInstance?.getJwtPermissions(token, tenant);\nexport const getJwtRoles = (token = getSessionToken(), tenant?: string) =>\n\tsdkInstance?.getJwtRoles(token, tenant);\nexport const getRefreshToken = () => sdkInstance?.getRefreshToken();\n\nexport default createSdkWrapper;\n","declare const BUILD_VERSION: string;\n\n// eslint-disable-next-line import/prefer-default-export\nexport const baseHeaders = {\n\t'x-descope-sdk-name': 'react',\n\t'x-descope-sdk-version': BUILD_VERSION\n};\n","/* eslint-disable import/prefer-default-export */\n\n/**\n * Wrap a function with a validation that it exists\n * @param fn The function to wrap with the validation\n * @throws if function does not exist, an error with the relevant message will be thrown\n */\nexport const withValidation =\n\t<T extends Array<any>, U>(fn: (...args: T) => U) =>\n\t(...args: T): U => {\n\t\tif (!fn) {\n\t\t\tthrow Error(\n\t\t\t\t`You can only use this function after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component`\n\t\t\t);\n\t\t}\n\t\treturn fn(...args);\n\t};\n","import React, { FC, useCallback, useEffect, useMemo, useState } from 'react';\nimport Context from '../../hooks/Context';\nimport { IContext, User } from '../../types';\nimport useSdk from './useSdk';\nimport { withValidation } from '../../utils';\n\ninterface IAuthProviderProps {\n\tprojectId: string;\n\tbaseUrl?: string;\n\t// If true, session token (jwt) will be stored on cookie. Otherwise, the session token will be\n\t// stored on local storage and can accessed with getSessionToken function\n\t// Use this option if session token will stay small (less than 1k)\n\t// NOTE: Session token can grow, especially in cases of using authorization, or adding custom claims\n\tsessionTokenViaCookie?: boolean;\n\tchildren?: JSX.Element;\n}\n\nconst AuthProvider: FC<IAuthProviderProps> = ({\n\tprojectId,\n\tbaseUrl,\n\tsessionTokenViaCookie,\n\tchildren\n}) => {\n\tconst [user, setUser] = useState<User>();\n\tconst [session, setSession] = useState<string>();\n\n\tconst [isUserLoading, setIsUserLoading] = useState(false);\n\tconst [isSessionLoading, setIsSessionLoading] = useState(false);\n\n\tconst sdk = useSdk({ projectId, baseUrl, sessionTokenViaCookie });\n\n\tuseEffect(() => {\n\t\tif (sdk) {\n\t\t\tconst unsubscribeSessionToken = sdk.onSessionTokenChange(setSession);\n\t\t\tconst unsubscribeUser = sdk.onUserChange(setUser);\n\n\t\t\treturn () => {\n\t\t\t\tunsubscribeSessionToken();\n\t\t\t\tunsubscribeUser();\n\t\t\t};\n\t\t}\n\t\treturn undefined;\n\t}, [sdk]);\n\n\tconst fetchSession = useCallback(() => {\n\t\tsetIsSessionLoading(true);\n\t\twithValidation(sdk?.refresh)().then(() => {\n\t\t\tsetIsSessionLoading(false);\n\t\t});\n\t}, [sdk]);\n\n\tconst fetchUser = useCallback(() => {\n\t\tsetIsUserLoading(true);\n\t\twithValidation(sdk.me)().then(() => {\n\t\t\tsetIsUserLoading(false);\n\t\t});\n\t}, [sdk]);\n\n\tconst logoutAll = useCallback(withValidation(sdk?.logoutAll), [sdk]);\n\n\tconst logout = useCallback(withValidation(sdk?.logout), [sdk]);\n\n\tconst value = useMemo<IContext>(\n\t\t() => ({\n\t\t\tfetchUser,\n\t\t\tuser,\n\t\t\tisUserLoading,\n\t\t\tfetchSession,\n\t\t\tsession,\n\t\t\tisSessionLoading,\n\t\t\tlogout,\n\t\t\tlogoutAll,\n\t\t\tprojectId,\n\t\t\tbaseUrl,\n\t\t\tsetUser,\n\t\t\tsetSession,\n\t\t\tsdk\n\t\t}),\n\t\t[\n\t\t\tfetchUser,\n\t\t\tuser,\n\t\t\tisUserLoading,\n\t\t\tfetchSession,\n\t\t\tsession,\n\t\t\tisSessionLoading,\n\t\t\tlogout,\n\t\t\tlogoutAll,\n\t\t\tprojectId,\n\t\t\tbaseUrl,\n\t\t\tsetUser,\n\t\t\tsetSession,\n\t\t\tsdk\n\t\t]\n\t);\n\treturn <Context.Provider value={value}>{children}</Context.Provider>;\n};\n\nAuthProvider.defaultProps = {\n\tbaseUrl: '',\n\tchildren: undefined,\n\tsessionTokenViaCookie: false\n};\n\nexport default AuthProvider;\n","import { useMemo } from 'react';\nimport createSdk from '../../sdk';\nimport { baseHeaders } from '../../constants';\n\ntype Config = Pick<\n\tParameters<typeof createSdk>[0],\n\t'projectId' | 'baseUrl' | 'sessionTokenViaCookie'\n>;\n\nexport default ({\n\tprojectId,\n\tbaseUrl,\n\tsessionTokenViaCookie\n}: Config): ReturnType<typeof createSdk> =>\n\tuseMemo(() => {\n\t\tif (!projectId) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn createSdk({\n\t\t\tprojectId,\n\t\t\tbaseUrl,\n\t\t\tsessionTokenViaCookie,\n\t\t\tbaseHeaders,\n\t\t\tpersistToken: true,\n\t\t\tautoRefresh: true\n\t\t});\n\t}, [projectId, baseUrl]);\n","import React, {\n\tlazy,\n\tSuspense,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseState\n} from 'react';\nimport Context from '../hooks/Context';\nimport { DescopeProps } from '../types';\nimport { baseHeaders } from '../constants';\n\n// web-component code uses browser API, but can be used in SSR apps, hence the lazy loading\nconst DescopeWC = lazy(async () => {\n\tconst module = await import('@descope/web-component');\n\t// we want to override the web-component base headers so we can tell that is was used via the React SDK\n\tmodule.default.sdkConfigOverrides = { baseHeaders };\n\n\treturn {\n\t\tdefault: ({\n\t\t\tprojectId,\n\t\t\tflowId,\n\t\t\tbaseUrl,\n\t\t\tinnerRef,\n\t\t\ttenant,\n\t\t\ttheme,\n\t\t\tdebug\n\t\t}) => (\n\t\t\t<descope-wc\n\t\t\t\tproject-id={projectId}\n\t\t\t\tflow-id={flowId}\n\t\t\t\tbase-url={baseUrl}\n\t\t\t\tref={innerRef}\n\t\t\t\ttenant={tenant}\n\t\t\t\ttheme={theme}\n\t\t\t\tdebug={debug}\n\t\t\t/>\n\t\t)\n\t};\n});\n\nconst Descope = React.forwardRef<HTMLElement, DescopeProps>(\n\t({ flowId, onSuccess, onError, tenant, theme, debug }, ref) => {\n\t\tconst [innerRef, setInnerRef] = useState(null);\n\n\t\tuseImperativeHandle(ref, () => innerRef);\n\n\t\tconst { projectId, baseUrl, setUser, setSession, sdk } =\n\t\t\tReact.useContext(Context);\n\n\t\tconst handleSuccess = useCallback(\n\t\t\t(e: CustomEvent) => {\n\t\t\t\tsetUser(e.detail?.user);\n\t\t\t\tconst sessionJwt = e.detail?.sessionJwt;\n\t\t\t\tsetSession(sessionJwt);\n\t\t\t\t// In order to make sure all the after-hooks are running with the success response\n\t\t\t\t// we are generating a fake response with the success data and calling the http client after hook fn with it\n\t\t\t\tsdk.httpClient.hooks.afterRequest(\n\t\t\t\t\t{} as any,\n\t\t\t\t\tnew Response(JSON.stringify(e.detail))\n\t\t\t\t);\n\t\t\t\tif (onSuccess) {\n\t\t\t\t\tonSuccess(e);\n\t\t\t\t}\n\t\t\t},\n\t\t\t[setUser, setSession, onSuccess]\n\t\t);\n\n\t\tuseEffect(() => {\n\t\t\tconst ele = innerRef;\n\t\t\tele?.addEventListener('success', handleSuccess);\n\t\t\tif (onError) ele?.addEventListener('error', onError);\n\n\t\t\treturn () => {\n\t\t\t\tif (onError) ele?.removeEventListener('error', onError);\n\n\t\t\t\tele?.removeEventListener('success', handleSuccess);\n\t\t\t};\n\t\t}, [innerRef, onError, handleSuccess]);\n\n\t\treturn (\n\t\t\t/**\n\t\t\t * in order to avoid redundant remounting of the WC, we are wrapping it with a form element\n\t\t\t * this workaround is done in order to support webauthn passkeys\n\t\t\t * it can be removed once this issue will be solved\n\t\t\t * https://bugs.chromium.org/p/chromium/issues/detail?id=1404106#c2\n\t\t\t */\n\t\t\t<form>\n\t\t\t\t<Suspense fallback={null}>\n\t\t\t\t\t<DescopeWC\n\t\t\t\t\t\tprojectId={projectId}\n\t\t\t\t\t\tflowId={flowId}\n\t\t\t\t\t\tbaseUrl={baseUrl}\n\t\t\t\t\t\tinnerRef={setInnerRef}\n\t\t\t\t\t\ttenant={tenant}\n\t\t\t\t\t\ttheme={theme}\n\t\t\t\t\t\tdebug={debug}\n\t\t\t\t\t/>\n\t\t\t\t</Suspense>\n\t\t\t</form>\n\t\t);\n\t}\n);\n\nDescope.defaultProps = {\n\tonError: undefined,\n\tonSuccess: undefined\n};\n\nexport default Descope;\n","import { useContext } from 'react';\nimport Context from './Context';\n\nexport default () => {\n\tconst ctx = useContext(Context);\n\tif (!ctx) {\n\t\tthrow Error(\n\t\t\t`You can only use this hook in the context of <AuthProvider />`\n\t\t);\n\t}\n\n\treturn ctx;\n};\n","import React from 'react';\nimport { DefaultFlowProps } from '../types';\nimport Descope from './Descope';\n\nexport const SignInFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-in\" />\n);\n\nexport const SignUpFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-up\" />\n);\n\nexport const SignUpOrInFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-up-or-in\" />\n);\n","import { useMemo } from 'react';\nimport { IAuth } from '../types';\nimport useContext from './useContext';\n\nconst useDescope = (): IAuth => {\n\tconst { logout, logoutAll } = useContext();\n\n\treturn useMemo(\n\t\t() => ({\n\t\t\tlogoutAll,\n\t\t\tlogout\n\t\t}),\n\t\t[logoutAll, logout]\n\t);\n};\n\nexport default useDescope;\n","import { useEffect } from 'react';\nimport useContext from './useContext';\n\nconst useSession = () => {\n\tconst { session, isSessionLoading, fetchSession } = useContext();\n\n\tuseEffect(() => {\n\t\tif (!session && !isSessionLoading) {\n\t\t\tfetchSession();\n\t\t}\n\t}, [fetchSession]);\n\n\treturn {\n\t\tisSessionLoading,\n\t\tsessionToken: session,\n\t\tisAuthenticated: !!session\n\t};\n};\n\nexport default useSession;\n","import { useEffect, useState } from 'react';\nimport useContext from './useContext';\n\nconst useUser = () => {\n\tconst { user, fetchUser, isUserLoading, session, isSessionLoading } =\n\t\tuseContext();\n\tconst [isInit, setIsInit] = useState(false); // we want to get the user only in the first time we got a session\n\n\tuseEffect(() => {\n\t\tif (!user && !isUserLoading && session && !isSessionLoading && !isInit) {\n\t\t\tsetIsInit(true);\n\t\t\tfetchUser();\n\t\t}\n\t}, [isSessionLoading, fetchUser, session, isInit]);\n\n\treturn { isUserLoading, user };\n};\n\nexport default useUser;\n"],"names":["Context","React","createContext","undefined","sdkInstance","createSdkWrapper","config","sdk","createSdk","persistTokens","autoRefresh","projectId","getSessionToken","baseHeaders","withValidation","fn","args","Error","AuthProvider","baseUrl","sessionTokenViaCookie","children","user","setUser","useState","session","setSession","isUserLoading","setIsUserLoading","isSessionLoading","setIsSessionLoading","useMemo","persistToken","useSdk","useEffect","unsubscribeSessionToken","onSessionTokenChange","unsubscribeUser","onUserChange","fetchSession","useCallback","refresh","then","fetchUser","me","logoutAll","logout","value","createElement","Provider","defaultProps","DescopeWC","lazy","async","Promise","resolve","_interopNamespace","require","default","sdkConfigOverrides","flowId","innerRef","tenant","theme","debug","ref","Descope","forwardRef","onSuccess","onError","setInnerRef","useImperativeHandle","useContext","handleSuccess","e","detail","sessionJwt","httpClient","hooks","afterRequest","Response","JSON","stringify","ele","addEventListener","removeEventListener","Suspense","fallback","ctx","props","token","getJwtPermissions","getJwtRoles","getRefreshToken","sessionToken","isAuthenticated","isInit","setIsInit"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -33,6 +33,7 @@ declare const createSdkWrapper: <P extends Omit<{
33
33
  afterRequest?: (req: _descope_core_js_sdk.RequestConfig, res: Response) => void;
34
34
  };
35
35
  cookiePolicy?: RequestCredentials;
36
+ baseHeaders?: HeadersInit;
36
37
  }, "hooks"> & {
37
38
  hooks?: {
38
39
  beforeRequest?: ((config: _descope_core_js_sdk.RequestConfig) => _descope_core_js_sdk.RequestConfig) | ((config: _descope_core_js_sdk.RequestConfig) => _descope_core_js_sdk.RequestConfig)[];
@@ -54,14 +55,46 @@ declare const createSdkWrapper: <P extends Omit<{
54
55
  next: (executionId: string, stepId: string, interactionId: string, input?: Record<string, FormDataEntryValue>) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.FlowResponse>>;
55
56
  };
56
57
  webauthn: {
57
- signUp(identifier: string, name: string): Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
58
- signIn(identifier: string): Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
59
- signUpOrIn(identifier: string): Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
60
- update(identifier: string, token: string): Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.ResponseData>>;
58
+ signUp: ((identifier: string, name: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>) & {
59
+ start: (loginId: string, origin: string, name: string) => Promise<_descope_core_js_sdk.SdkResponse<{
60
+ transactionId: string;
61
+ options: string;
62
+ create: boolean;
63
+ }>>;
64
+ finish: (transactionId: string, response: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
65
+ };
66
+ signIn: ((identifier: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>) & {
67
+ start: (loginId: string, origin: string, loginOptions?: {
68
+ stepup?: boolean;
69
+ mfa?: boolean;
70
+ customClaims?: Record<string, any>;
71
+ }, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<{
72
+ transactionId: string;
73
+ options: string;
74
+ create: boolean;
75
+ }>>;
76
+ finish: (transactionId: string, response: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
77
+ };
78
+ signUpOrIn: ((identifier: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>) & {
79
+ start: (loginId: string, origin: string) => Promise<_descope_core_js_sdk.SdkResponse<{
80
+ transactionId: string;
81
+ options: string;
82
+ create: boolean;
83
+ }>>;
84
+ };
85
+ update: ((identifier: string, token: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.ResponseData>>) & {
86
+ start: (loginId: string, origin: string, token: string) => Promise<_descope_core_js_sdk.SdkResponse<{
87
+ transactionId: string;
88
+ options: string;
89
+ create: boolean;
90
+ }>>;
91
+ finish: (transactionId: string, response: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.ResponseData>>;
92
+ };
61
93
  helpers: {
62
94
  create: (options: string) => Promise<string>;
63
95
  get: (options: string) => Promise<string>;
64
96
  isSupported: (requirePlatformAuthenticator?: boolean) => Promise<boolean>;
97
+ conditional: (options: string, abort: AbortController) => Promise<string>;
65
98
  };
66
99
  };
67
100
  accessKey: {
@@ -69,89 +102,89 @@ declare const createSdkWrapper: <P extends Omit<{
69
102
  };
70
103
  otp: {
71
104
  verify: {
72
- email: (identifier: string, code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
73
- sms: (identifier: string, code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
74
- whatsapp: (identifier: string, code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
105
+ email: (loginId: string, code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
106
+ sms: (loginId: string, code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
107
+ whatsapp: (loginId: string, code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
75
108
  };
76
109
  signIn: {
77
- email: (identifier: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
78
- sms: (identifier: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
79
- whatsapp: (identifier: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
110
+ email: (loginId: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
111
+ sms: (loginId: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
112
+ whatsapp: (loginId: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
80
113
  };
81
114
  signUp: {
82
- email: (identifier: string, user?: {
115
+ email: (loginId: string, user?: {
83
116
  email?: string;
84
117
  name?: string;
85
118
  phone?: string;
86
119
  }) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
87
- sms: (identifier: string, user?: {
120
+ sms: (loginId: string, user?: {
88
121
  email?: string;
89
122
  name?: string;
90
123
  phone?: string;
91
124
  }) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
92
- whatsapp: (identifier: string, user?: {
125
+ whatsapp: (loginId: string, user?: {
93
126
  email?: string;
94
127
  name?: string;
95
128
  phone?: string;
96
129
  }) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
97
130
  };
98
131
  signUpOrIn: {
99
- email: (identifier: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
100
- sms: (identifier: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
101
- whatsapp: (identifier: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
132
+ email: (loginId: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
133
+ sms: (loginId: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
134
+ whatsapp: (loginId: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
102
135
  };
103
136
  update: {
104
- email: (identifier: string, email: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
137
+ email: (loginId: string, email: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
105
138
  phone: {
106
- email: (identifier: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
107
- sms: (identifier: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
108
- whatsapp: (identifier: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
139
+ email: (loginId: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
140
+ sms: (loginId: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
141
+ whatsapp: (loginId: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
109
142
  };
110
143
  };
111
144
  };
112
145
  magicLink: {
113
146
  verify: (token: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
114
147
  signIn: {
115
- email: (identifier: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
116
- sms: (identifier: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
117
- whatsapp: (identifier: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
148
+ email: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
149
+ sms: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
150
+ whatsapp: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
118
151
  };
119
152
  signUp: {
120
- email: (identifier: string, uri: string, user?: {
153
+ email: (loginId: string, uri: string, user?: {
121
154
  email?: string;
122
155
  name?: string;
123
156
  phone?: string;
124
157
  }) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
125
- sms: (identifier: string, uri: string, user?: {
158
+ sms: (loginId: string, uri: string, user?: {
126
159
  email?: string;
127
160
  name?: string;
128
161
  phone?: string;
129
162
  }) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
130
- whatsapp: (identifier: string, uri: string, user?: {
163
+ whatsapp: (loginId: string, uri: string, user?: {
131
164
  email?: string;
132
165
  name?: string;
133
166
  phone?: string;
134
167
  }) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
135
168
  };
136
169
  signUpOrIn: {
137
- email: (identifier: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
138
- sms: (identifier: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
139
- whatsapp: (identifier: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
170
+ email: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
171
+ sms: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
172
+ whatsapp: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
140
173
  };
141
174
  update: {
142
- email: (identifier: string, email: string, uri: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
175
+ email: (loginId: string, email: string, uri: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
143
176
  phone: {
144
- email: (identifier: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
145
- sms: (identifier: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
146
- whatsapp: (identifier: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
177
+ email: (loginId: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
178
+ sms: (loginId: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
179
+ whatsapp: (loginId: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
147
180
  };
148
181
  };
149
182
  };
150
183
  enchantedLink: {
151
184
  verify: (token: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
152
- signIn: (identifier: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.EnchantedLinkResponse>>;
153
- signUpOrIn: (identifier: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.EnchantedLinkResponse>>;
154
- signUp: (identifier: string, uri: string, user?: {
185
+ signIn: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.EnchantedLinkResponse>>;
186
+ signUpOrIn: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.EnchantedLinkResponse>>;
187
+ signUp: (loginId: string, uri: string, user?: {
155
188
  email?: string;
156
189
  name?: string;
157
190
  phone?: string;
@@ -161,7 +194,7 @@ declare const createSdkWrapper: <P extends Omit<{
161
194
  timeoutMs: number;
162
195
  }) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
163
196
  update: {
164
- email: (identifier: string, email: string, uri: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.EnchantedLinkResponse>>;
197
+ email: (loginId: string, email: string, uri: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.EnchantedLinkResponse>>;
165
198
  };
166
199
  };
167
200
  oauth: {
@@ -196,6 +229,16 @@ declare const createSdkWrapper: <P extends Omit<{
196
229
  }>(redirectURL?: string, config?: B_5) => Promise<B_5 extends {
197
230
  redirect: true;
198
231
  } ? undefined : _descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.URLResponse>>;
232
+ discord: <B_6 extends {
233
+ redirect: boolean;
234
+ }>(redirectURL?: string, config?: B_6) => Promise<B_6 extends {
235
+ redirect: true;
236
+ } ? undefined : _descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.URLResponse>>;
237
+ linkedin: <B_7 extends {
238
+ redirect: boolean;
239
+ }>(redirectURL?: string, config?: B_7) => Promise<B_7 extends {
240
+ redirect: true;
241
+ } ? undefined : _descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.URLResponse>>;
199
242
  };
200
243
  exchange: (code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
201
244
  };
@@ -208,17 +251,17 @@ declare const createSdkWrapper: <P extends Omit<{
208
251
  exchange: (code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
209
252
  };
210
253
  totp: {
211
- signUp: (identifier: string, user?: {
254
+ signUp: (loginId: string, user?: {
212
255
  email?: string;
213
256
  name?: string;
214
257
  phone?: string;
215
258
  }) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.TOTPResponse>>;
216
- verify: (identifier: string, code: string, loginOptions?: {
259
+ verify: (loginId: string, code: string, loginOptions?: {
217
260
  stepup?: boolean;
218
261
  mfa?: boolean;
219
262
  customClaims?: Record<string, any>;
220
263
  }, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
221
- update: (identifier: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.TOTPResponse>>;
264
+ update: (loginId: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.TOTPResponse>>;
222
265
  };
223
266
  refresh: (token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
224
267
  logout: (token?: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
@@ -269,14 +312,46 @@ declare const createSdkWrapper: <P extends Omit<{
269
312
  next: (executionId: string, stepId: string, interactionId: string, input?: Record<string, FormDataEntryValue>) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.FlowResponse>>;
270
313
  };
271
314
  webauthn: {
272
- signUp(identifier: string, name: string): Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
273
- signIn(identifier: string): Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
274
- signUpOrIn(identifier: string): Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
275
- update(identifier: string, token: string): Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.ResponseData>>;
315
+ signUp: ((identifier: string, name: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>) & {
316
+ start: (loginId: string, origin: string, name: string) => Promise<_descope_core_js_sdk.SdkResponse<{
317
+ transactionId: string;
318
+ options: string;
319
+ create: boolean;
320
+ }>>;
321
+ finish: (transactionId: string, response: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
322
+ };
323
+ signIn: ((identifier: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>) & {
324
+ start: (loginId: string, origin: string, loginOptions?: {
325
+ stepup?: boolean;
326
+ mfa?: boolean;
327
+ customClaims?: Record<string, any>;
328
+ }, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<{
329
+ transactionId: string;
330
+ options: string;
331
+ create: boolean;
332
+ }>>;
333
+ finish: (transactionId: string, response: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
334
+ };
335
+ signUpOrIn: ((identifier: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>) & {
336
+ start: (loginId: string, origin: string) => Promise<_descope_core_js_sdk.SdkResponse<{
337
+ transactionId: string;
338
+ options: string;
339
+ create: boolean;
340
+ }>>;
341
+ };
342
+ update: ((identifier: string, token: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.ResponseData>>) & {
343
+ start: (loginId: string, origin: string, token: string) => Promise<_descope_core_js_sdk.SdkResponse<{
344
+ transactionId: string;
345
+ options: string;
346
+ create: boolean;
347
+ }>>;
348
+ finish: (transactionId: string, response: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.ResponseData>>;
349
+ };
276
350
  helpers: {
277
351
  create: (options: string) => Promise<string>;
278
352
  get: (options: string) => Promise<string>;
279
353
  isSupported: (requirePlatformAuthenticator?: boolean) => Promise<boolean>;
354
+ conditional: (options: string, abort: AbortController) => Promise<string>;
280
355
  };
281
356
  };
282
357
  accessKey: {
@@ -284,89 +359,89 @@ declare const createSdkWrapper: <P extends Omit<{
284
359
  };
285
360
  otp: {
286
361
  verify: {
287
- email: (identifier: string, code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
288
- sms: (identifier: string, code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
289
- whatsapp: (identifier: string, code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
362
+ email: (loginId: string, code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
363
+ sms: (loginId: string, code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
364
+ whatsapp: (loginId: string, code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
290
365
  };
291
366
  signIn: {
292
- email: (identifier: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
293
- sms: (identifier: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
294
- whatsapp: (identifier: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
367
+ email: (loginId: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
368
+ sms: (loginId: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
369
+ whatsapp: (loginId: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
295
370
  };
296
371
  signUp: {
297
- email: (identifier: string, user?: {
372
+ email: (loginId: string, user?: {
298
373
  email?: string;
299
374
  name?: string;
300
375
  phone?: string;
301
376
  }) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
302
- sms: (identifier: string, user?: {
377
+ sms: (loginId: string, user?: {
303
378
  email?: string;
304
379
  name?: string;
305
380
  phone?: string;
306
381
  }) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
307
- whatsapp: (identifier: string, user?: {
382
+ whatsapp: (loginId: string, user?: {
308
383
  email?: string;
309
384
  name?: string;
310
385
  phone?: string;
311
386
  }) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
312
387
  };
313
388
  signUpOrIn: {
314
- email: (identifier: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
315
- sms: (identifier: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
316
- whatsapp: (identifier: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
389
+ email: (loginId: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
390
+ sms: (loginId: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
391
+ whatsapp: (loginId: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
317
392
  };
318
393
  update: {
319
- email: (identifier: string, email: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
394
+ email: (loginId: string, email: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
320
395
  phone: {
321
- email: (identifier: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
322
- sms: (identifier: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
323
- whatsapp: (identifier: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
396
+ email: (loginId: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
397
+ sms: (loginId: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
398
+ whatsapp: (loginId: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
324
399
  };
325
400
  };
326
401
  };
327
402
  magicLink: {
328
403
  verify: (token: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
329
404
  signIn: {
330
- email: (identifier: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
331
- sms: (identifier: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
332
- whatsapp: (identifier: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
405
+ email: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
406
+ sms: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
407
+ whatsapp: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
333
408
  };
334
409
  signUp: {
335
- email: (identifier: string, uri: string, user?: {
410
+ email: (loginId: string, uri: string, user?: {
336
411
  email?: string;
337
412
  name?: string;
338
413
  phone?: string;
339
414
  }) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
340
- sms: (identifier: string, uri: string, user?: {
415
+ sms: (loginId: string, uri: string, user?: {
341
416
  email?: string;
342
417
  name?: string;
343
418
  phone?: string;
344
419
  }) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
345
- whatsapp: (identifier: string, uri: string, user?: {
420
+ whatsapp: (loginId: string, uri: string, user?: {
346
421
  email?: string;
347
422
  name?: string;
348
423
  phone?: string;
349
424
  }) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
350
425
  };
351
426
  signUpOrIn: {
352
- email: (identifier: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
353
- sms: (identifier: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
354
- whatsapp: (identifier: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
427
+ email: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
428
+ sms: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
429
+ whatsapp: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
355
430
  };
356
431
  update: {
357
- email: (identifier: string, email: string, uri: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
432
+ email: (loginId: string, email: string, uri: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
358
433
  phone: {
359
- email: (identifier: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
360
- sms: (identifier: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
361
- whatsapp: (identifier: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
434
+ email: (loginId: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
435
+ sms: (loginId: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
436
+ whatsapp: (loginId: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
362
437
  };
363
438
  };
364
439
  };
365
440
  enchantedLink: {
366
441
  verify: (token: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
367
- signIn: (identifier: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.EnchantedLinkResponse>>;
368
- signUpOrIn: (identifier: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.EnchantedLinkResponse>>;
369
- signUp: (identifier: string, uri: string, user?: {
442
+ signIn: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.EnchantedLinkResponse>>;
443
+ signUpOrIn: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.EnchantedLinkResponse>>;
444
+ signUp: (loginId: string, uri: string, user?: {
370
445
  email?: string;
371
446
  name?: string;
372
447
  phone?: string;
@@ -376,14 +451,14 @@ declare const createSdkWrapper: <P extends Omit<{
376
451
  timeoutMs: number;
377
452
  }) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
378
453
  update: {
379
- email: (identifier: string, email: string, uri: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.EnchantedLinkResponse>>;
454
+ email: (loginId: string, email: string, uri: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.EnchantedLinkResponse>>;
380
455
  };
381
456
  };
382
457
  oauth: {
383
458
  start: {
384
- facebook: <B_6 extends {
459
+ facebook: <B_8 extends {
385
460
  redirect: boolean;
386
- }>(redirectURL?: string, config?: B_6) => Promise<B_6 extends {
461
+ }>(redirectURL?: string, config?: B_8) => Promise<B_8 extends {
387
462
  redirect: true;
388
463
  } ? undefined : _descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.URLResponse>>;
389
464
  github: <B_1_2 extends {
@@ -411,6 +486,16 @@ declare const createSdkWrapper: <P extends Omit<{
411
486
  }>(redirectURL?: string, config?: B_5_1) => Promise<B_5_1 extends {
412
487
  redirect: true;
413
488
  } ? undefined : _descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.URLResponse>>;
489
+ discord: <B_6_1 extends {
490
+ redirect: boolean;
491
+ }>(redirectURL?: string, config?: B_6_1) => Promise<B_6_1 extends {
492
+ redirect: true;
493
+ } ? undefined : _descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.URLResponse>>;
494
+ linkedin: <B_7_1 extends {
495
+ redirect: boolean;
496
+ }>(redirectURL?: string, config?: B_7_1) => Promise<B_7_1 extends {
497
+ redirect: true;
498
+ } ? undefined : _descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.URLResponse>>;
414
499
  };
415
500
  exchange: (code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
416
501
  };
@@ -423,17 +508,17 @@ declare const createSdkWrapper: <P extends Omit<{
423
508
  exchange: (code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
424
509
  };
425
510
  totp: {
426
- signUp: (identifier: string, user?: {
511
+ signUp: (loginId: string, user?: {
427
512
  email?: string;
428
513
  name?: string;
429
514
  phone?: string;
430
515
  }) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.TOTPResponse>>;
431
- verify: (identifier: string, code: string, loginOptions?: {
516
+ verify: (loginId: string, code: string, loginOptions?: {
432
517
  stepup?: boolean;
433
518
  mfa?: boolean;
434
519
  customClaims?: Record<string, any>;
435
520
  }, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
436
- update: (identifier: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.TOTPResponse>>;
521
+ update: (loginId: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.TOTPResponse>>;
437
522
  };
438
523
  refresh: (token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
439
524
  logout: (token?: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
@@ -483,7 +568,10 @@ declare const createSdkWrapper: <P extends Omit<{
483
568
  getRefreshToken: () => string;
484
569
  getSessionToken: () => string;
485
570
  };
486
- declare const getSessionToken: () => any;
571
+ declare const getSessionToken: () => string;
572
+ declare const getJwtPermissions: (token?: string, tenant?: string) => string[];
573
+ declare const getJwtRoles: (token?: string, tenant?: string) => string[];
574
+ declare const getRefreshToken: () => string;
487
575
 
488
576
  declare global {
489
577
  namespace JSX {
@@ -525,15 +613,8 @@ interface User {
525
613
  tenants?: string[];
526
614
  }
527
615
  interface IAuth {
528
- authenticated: boolean;
529
- user?: User;
530
- sessionToken?: string;
531
616
  logoutAll: Sdk['logoutAll'];
532
617
  logout: Sdk['logout'];
533
- me: Sdk['me'];
534
- getJwtRoles: Sdk['getJwtRoles'];
535
- getJwtPermissions: Sdk['getJwtPermissions'];
536
- getRefreshToken: Sdk['getRefreshToken'];
537
618
  }
538
619
  type DescopeTheme = 'light' | 'dark';
539
620
  interface DescopeProps {
@@ -552,6 +633,17 @@ declare const SignUpOrInFlow: (props: DefaultFlowProps) => JSX.Element;
552
633
 
553
634
  declare const Descope: React.ForwardRefExoticComponent<DescopeProps & React.RefAttributes<HTMLElement>>;
554
635
 
555
- declare const useAuth: () => IAuth;
636
+ declare const useDescope: () => IAuth;
637
+
638
+ declare const useSession: () => {
639
+ isSessionLoading: boolean;
640
+ sessionToken: string;
641
+ isAuthenticated: boolean;
642
+ };
643
+
644
+ declare const useUser: () => {
645
+ isUserLoading: boolean;
646
+ user: User;
647
+ };
556
648
 
557
- export { AuthProvider, Descope, SignInFlow, SignUpFlow, SignUpOrInFlow, getSessionToken, useAuth };
649
+ export { AuthProvider, Descope, SignInFlow, SignUpFlow, SignUpOrInFlow, getJwtPermissions, getJwtRoles, getRefreshToken, getSessionToken, useDescope, useSession, useUser };
package/dist/index.esm.js CHANGED
@@ -1,2 +1,2 @@
1
- import e,{useState as t,useMemo as o,useEffect as s,lazy as n,useImperativeHandle as r,useCallback as i,Suspense as c}from"react";import a from"@descope/web-js-sdk";let d;const l=e=>{const t=a({...e,persistTokens:!0,autoRefresh:!0});return d=t,t};d=l({projectId:"temp pid"});const u=()=>d?.getSessionToken(),f=e.createContext(void 0),p=({projectId:n,baseUrl:r,sessionTokenViaCookie:i,children:c})=>{const[a,d]=t({}),[u,p]=t(""),k=o((()=>{if(n)return l({projectId:n,baseUrl:r,sessionTokenViaCookie:i,hooks:{beforeRequest:e=>{const t=e;return t.headers={...t.headers,"x-descope-sdk-name":"react","x-descope-sdk-version":"0.0.52-alpha.25"},t}},persistToken:!0,autoRefresh:!0})}),[n,r]);s((()=>{if(!k)return;const e=k.onSessionTokenChange(p),t=k.onUserChange(d);return k.refresh(),()=>{e?.(),t?.()}}),[k]);const h=o((()=>({sdk:k,projectId:n,baseUrl:r,user:a,sessionToken:u,setUser:d,setSessionToken:p})),[u,a,n,r]);return e.createElement(f.Provider,{value:h},c)};p.defaultProps={baseUrl:"",children:void 0,sessionTokenViaCookie:!1};const k=n((async()=>(await import("@descope/web-component"),{default:({projectId:t,flowId:o,baseUrl:s,innerRef:n,tenant:r,theme:i,debug:c})=>e.createElement("descope-wc",{"project-id":t,"flow-id":o,"base-url":s,ref:n,tenant:r,theme:i,debug:c})}))),h=e.forwardRef((({flowId:o,onSuccess:n,onError:a,tenant:d,theme:l,debug:u},p)=>{const[h,m]=t(null);r(p,(()=>h));const{projectId:g,baseUrl:w,setUser:b,setSessionToken:v,sdk:E}=e.useContext(f),I=i((e=>{b(e.detail?.user);const t=e.detail?.sessionJwt;v(t),n&&n(e),E.httpClient.hooks.afterRequest({},new Response(JSON.stringify(e.detail)))}),[b,v,n]);return s((()=>{const e=h;return e?.addEventListener("success",I),a&&e?.addEventListener("error",a),()=>{a&&e?.removeEventListener("error",a),e?.removeEventListener("success",I)}}),[h,a,I]),e.createElement(c,{fallback:null},e.createElement(k,{projectId:g,flowId:o,baseUrl:w,innerRef:m,tenant:d,theme:l,debug:u}))}));h.defaultProps={onError:void 0,onSuccess:void 0};const m=t=>e.createElement(h,{...t,flowId:"sign-in"}),g=t=>e.createElement(h,{...t,flowId:"sign-up"}),w=t=>e.createElement(h,{...t,flowId:"sign-up-or-in"}),b=e=>(...t)=>{if(!e)throw Error("You can only use this function after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component");return e(...t)},v=()=>{const t=e.useContext(f);if(!t)throw Error("You can only use 'useAuth' in the context of <AuthProvider />");const{user:s,sessionToken:n,sdk:r}=t,c=i(b(r?.logoutAll),[r]),a=i(b(r?.logout),[r]),d=i(b(r?.me),[r]),l=i(b(r?.getJwtPermissions),[r]),u=i(b(r?.getJwtRoles),[r]),p=i(b(r?.getRefreshToken),[r]);return o((()=>({authenticated:!!n,user:s,sessionToken:n,logoutAll:c,logout:a,me:d,getJwtPermissions:l,getJwtRoles:u,getRefreshToken:p})),[s,n,r])};export{p as AuthProvider,h as Descope,m as SignInFlow,g as SignUpFlow,w as SignUpOrInFlow,u as getSessionToken,v as useAuth};
1
+ import e,{useMemo as s,useState as o,useEffect as t,useCallback as n,lazy as r,useImperativeHandle as i,Suspense as a,useContext as c}from"react";import d from"@descope/web-js-sdk";const l=e.createContext(void 0);let u;const f=e=>{const s=d({...e,persistTokens:!0,autoRefresh:!0});return u=s,s};u=f({projectId:"temp pid"});const p=()=>u?.getSessionToken(),g=(e=p(),s)=>u?.getJwtPermissions(e,s),h=(e=p(),s)=>u?.getJwtRoles(e,s),k=()=>u?.getRefreshToken(),m={"x-descope-sdk-name":"react","x-descope-sdk-version":"0.0.52-alpha.27"};const b=e=>(...s)=>{if(!e)throw Error("You can only use this function after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component");return e(...s)},w=({projectId:r,baseUrl:i,sessionTokenViaCookie:a,children:c})=>{const[d,u]=o(),[p,g]=o(),[h,k]=o(!1),[w,v]=o(!1),U=(({projectId:e,baseUrl:o,sessionTokenViaCookie:t})=>s((()=>{if(e)return f({projectId:e,baseUrl:o,sessionTokenViaCookie:t,baseHeaders:m,persistToken:!0,autoRefresh:!0})}),[e,o]))({projectId:r,baseUrl:i,sessionTokenViaCookie:a});t((()=>{if(U){const e=U.onSessionTokenChange(g),s=U.onUserChange(u);return()=>{e(),s()}}}),[U]);const E=n((()=>{v(!0),b(U?.refresh)().then((()=>{v(!1)}))}),[U]),I=n((()=>{k(!0),b(U.me)().then((()=>{k(!1)}))}),[U]),S=n(b(U?.logoutAll),[U]),j=n(b(U?.logout),[U]),C=s((()=>({fetchUser:I,user:d,isUserLoading:h,fetchSession:E,session:p,isSessionLoading:w,logout:j,logoutAll:S,projectId:r,baseUrl:i,setUser:u,setSession:g,sdk:U})),[I,d,h,E,p,w,j,S,r,i,u,g,U]);return e.createElement(l.Provider,{value:C},c)};w.defaultProps={baseUrl:"",children:void 0,sessionTokenViaCookie:!1};const v=r((async()=>((await import("@descope/web-component")).default.sdkConfigOverrides={baseHeaders:m},{default:({projectId:s,flowId:o,baseUrl:t,innerRef:n,tenant:r,theme:i,debug:a})=>e.createElement("descope-wc",{"project-id":s,"flow-id":o,"base-url":t,ref:n,tenant:r,theme:i,debug:a})}))),U=e.forwardRef((({flowId:s,onSuccess:r,onError:c,tenant:d,theme:u,debug:f},p)=>{const[g,h]=o(null);i(p,(()=>g));const{projectId:k,baseUrl:m,setUser:b,setSession:w,sdk:U}=e.useContext(l),E=n((e=>{b(e.detail?.user);const s=e.detail?.sessionJwt;w(s),U.httpClient.hooks.afterRequest({},new Response(JSON.stringify(e.detail))),r&&r(e)}),[b,w,r]);return t((()=>{const e=g;return e?.addEventListener("success",E),c&&e?.addEventListener("error",c),()=>{c&&e?.removeEventListener("error",c),e?.removeEventListener("success",E)}}),[g,c,E]),e.createElement("form",null,e.createElement(a,{fallback:null},e.createElement(v,{projectId:k,flowId:s,baseUrl:m,innerRef:h,tenant:d,theme:u,debug:f})))}));U.defaultProps={onError:void 0,onSuccess:void 0};const E=s=>e.createElement(U,{...s,flowId:"sign-in"}),I=s=>e.createElement(U,{...s,flowId:"sign-up"}),S=s=>e.createElement(U,{...s,flowId:"sign-up-or-in"});var j=()=>{const e=c(l);if(!e)throw Error("You can only use this hook in the context of <AuthProvider />");return e};const C=()=>{const{logout:e,logoutAll:o}=j();return s((()=>({logoutAll:o,logout:e})),[o,e])},L=()=>{const{session:e,isSessionLoading:s,fetchSession:o}=j();return t((()=>{e||s||o()}),[o]),{isSessionLoading:s,sessionToken:e,isAuthenticated:!!e}},T=()=>{const{user:e,fetchUser:s,isUserLoading:n,session:r,isSessionLoading:i}=j(),[a,c]=o(!1);return t((()=>{e||n||!r||i||a||(c(!0),s())}),[i,s,r,a]),{isUserLoading:n,user:e}};export{w as AuthProvider,U as Descope,E as SignInFlow,I as SignUpFlow,S as SignUpOrInFlow,g as getJwtPermissions,h as getJwtRoles,k as getRefreshToken,p as getSessionToken,C as useDescope,L as useSession,T as useUser};
2
2
  //# sourceMappingURL=index.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/lib/sdk.ts","../src/lib/hooks/authContext.ts","../src/lib/components/AuthProvider.tsx","../src/lib/components/Descope.tsx","../src/lib/components/DefaultFlows.tsx","../src/lib/hooks/useAuth.ts"],"sourcesContent":["import createSdk from '@descope/web-js-sdk';\n\nlet sdkInstance;\n\nconst createSdkWrapper = <P extends Parameters<typeof createSdk>[0]>(\n\tconfig: P\n) => {\n\tconst sdk = createSdk({\n\t\t...config,\n\t\tpersistTokens: true,\n\t\tautoRefresh: true\n\t});\n\tsdkInstance = sdk;\n\n\treturn sdk;\n};\n\n/**\n * We want to make sure the getSessionToken fn is used only when persistTokens is on\n *\n * So we are keeping the SDK init in a single place,\n * and we are creating a temp instance in order to export the getSessionToken\n * even before the SDK was init\n */\nsdkInstance = createSdkWrapper({ projectId: 'temp pid' });\n\nexport const getSessionToken = () => sdkInstance?.getSessionToken();\n\nexport default createSdkWrapper;\n","import React from 'react';\nimport { IAuthContext } from '../types';\n\nconst AuthContext = React.createContext<IAuthContext>(undefined);\n\nexport default AuthContext;\n","import React, { FC, useEffect, useMemo, useState } from 'react';\nimport createSdk from '../sdk';\nimport AuthContext from '../hooks/authContext';\nimport { IAuthContext } from '../types';\n\ndeclare const BUILD_VERSION: string;\n\ninterface IAuthProviderProps {\n\tprojectId: string;\n\tbaseUrl?: string;\n\t// If true, session token (jwt) will be stored on cookie. Otherwise, the session token will be\n\t// stored on local storage and can accessed with getSessionToken function\n\t// Use this option if session token will stay small (less than 1k)\n\t// NOTE: Session token can grow, especially in cases of using authorization, or adding custom claims\n\tsessionTokenViaCookie?: boolean;\n\tchildren?: JSX.Element;\n}\n\nconst AuthProvider: FC<IAuthProviderProps> = ({\n\tprojectId,\n\tbaseUrl,\n\tsessionTokenViaCookie,\n\tchildren\n}) => {\n\tconst [user, setUser] = useState({});\n\tconst [sessionToken, setSessionToken] = useState('');\n\n\tconst sdk = useMemo(() => {\n\t\tif (!projectId) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn createSdk({\n\t\t\tprojectId,\n\t\t\tbaseUrl,\n\t\t\tsessionTokenViaCookie,\n\t\t\thooks: {\n\t\t\t\tbeforeRequest: (config) => {\n\t\t\t\t\tconst conf = config;\n\t\t\t\t\tconf.headers = {\n\t\t\t\t\t\t...conf.headers,\n\t\t\t\t\t\t'x-descope-sdk-name': 'react',\n\t\t\t\t\t\t'x-descope-sdk-version': BUILD_VERSION\n\t\t\t\t\t};\n\t\t\t\t\treturn conf;\n\t\t\t\t}\n\t\t\t},\n\t\t\tpersistToken: true,\n\t\t\tautoRefresh: true\n\t\t});\n\t}, [projectId, baseUrl]);\n\n\tuseEffect(() => {\n\t\tif (!sdk) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst unsubscribeSessionToken = sdk.onSessionTokenChange(setSessionToken);\n\t\tconst unsubscribeUser = sdk.onUserChange(setUser);\n\t\t// we are calling refresh once after creating the SDK instance\n\t\t// so if refresh token exists, the user will be logged in automatically\n\t\tsdk.refresh();\n\t\treturn () => {\n\t\t\tunsubscribeSessionToken?.();\n\t\t\tunsubscribeUser?.();\n\t\t};\n\t}, [sdk]);\n\n\tconst value = useMemo<IAuthContext>(\n\t\t() => ({\n\t\t\tsdk,\n\t\t\tprojectId,\n\t\t\tbaseUrl,\n\t\t\tuser,\n\t\t\tsessionToken,\n\t\t\tsetUser,\n\t\t\tsetSessionToken\n\t\t}),\n\t\t[sessionToken, user, projectId, baseUrl]\n\t);\n\treturn <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;\n};\n\nAuthProvider.defaultProps = {\n\tbaseUrl: '',\n\tchildren: undefined,\n\tsessionTokenViaCookie: false\n};\n\nexport default AuthProvider;\n","import React, {\n\tlazy,\n\tSuspense,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseState\n} from 'react';\nimport AuthContext from '../hooks/authContext';\nimport { DescopeProps } from '../types';\n\n// web-component code uses browser API, but can be used in SSR apps, hence the lazy loading\nconst DescopeWC = lazy(async () => {\n\tawait import('@descope/web-component');\n\treturn {\n\t\tdefault: ({\n\t\t\tprojectId,\n\t\t\tflowId,\n\t\t\tbaseUrl,\n\t\t\tinnerRef,\n\t\t\ttenant,\n\t\t\ttheme,\n\t\t\tdebug\n\t\t}) => (\n\t\t\t<descope-wc\n\t\t\t\tproject-id={projectId}\n\t\t\t\tflow-id={flowId}\n\t\t\t\tbase-url={baseUrl}\n\t\t\t\tref={innerRef}\n\t\t\t\ttenant={tenant}\n\t\t\t\ttheme={theme}\n\t\t\t\tdebug={debug}\n\t\t\t/>\n\t\t)\n\t};\n});\n\nconst Descope = React.forwardRef<HTMLElement, DescopeProps>(\n\t({ flowId, onSuccess, onError, tenant, theme, debug }, ref) => {\n\t\tconst [innerRef, setInnerRef] = useState(null);\n\n\t\tuseImperativeHandle(ref, () => innerRef);\n\n\t\tconst { projectId, baseUrl, setUser, setSessionToken, sdk } =\n\t\t\tReact.useContext(AuthContext);\n\n\t\tconst handleSuccess = useCallback(\n\t\t\t(e: CustomEvent) => {\n\t\t\t\tsetUser(e.detail?.user);\n\t\t\t\tconst sessionJwt = e.detail?.sessionJwt;\n\t\t\t\tsetSessionToken(sessionJwt);\n\t\t\t\tif (onSuccess) {\n\t\t\t\t\tonSuccess(e);\n\t\t\t\t}\n\t\t\t\t// In order to make sure all the after-hooks are running with the success response\n\t\t\t\t// we are generating a fake response with the success data and calling the http client after hook fn with it\n\t\t\t\tsdk.httpClient.hooks.afterRequest(\n\t\t\t\t\t{} as any,\n\t\t\t\t\tnew Response(JSON.stringify(e.detail))\n\t\t\t\t);\n\t\t\t},\n\t\t\t[setUser, setSessionToken, onSuccess]\n\t\t);\n\n\t\tuseEffect(() => {\n\t\t\tconst ele = innerRef;\n\t\t\tele?.addEventListener('success', handleSuccess);\n\t\t\tif (onError) ele?.addEventListener('error', onError);\n\n\t\t\treturn () => {\n\t\t\t\tif (onError) ele?.removeEventListener('error', onError);\n\n\t\t\t\tele?.removeEventListener('success', handleSuccess);\n\t\t\t};\n\t\t}, [innerRef, onError, handleSuccess]);\n\n\t\treturn (\n\t\t\t<Suspense fallback={null}>\n\t\t\t\t<DescopeWC\n\t\t\t\t\tprojectId={projectId}\n\t\t\t\t\tflowId={flowId}\n\t\t\t\t\tbaseUrl={baseUrl}\n\t\t\t\t\tinnerRef={setInnerRef}\n\t\t\t\t\ttenant={tenant}\n\t\t\t\t\ttheme={theme}\n\t\t\t\t\tdebug={debug}\n\t\t\t\t/>\n\t\t\t</Suspense>\n\t\t);\n\t}\n);\n\nDescope.defaultProps = {\n\tonError: undefined,\n\tonSuccess: undefined\n};\n\nexport default Descope;\n","import React from 'react';\nimport { DefaultFlowProps } from '../types';\nimport Descope from './Descope';\n\nexport const SignInFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-in\" />\n);\n\nexport const SignUpFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-up\" />\n);\n\nexport const SignUpOrInFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-up-or-in\" />\n);\n","import React, { useCallback, useMemo } from 'react';\nimport { IAuth } from '../types';\nimport AuthContext from './authContext';\n\n/**\n * Wrap a function with a validation that it exists\n * @param fn The function to wrap with the validation\n * @throws if function does not exist, an error with the relevant message will be thrown\n */\nconst withValidation =\n\t<T extends Array<any>, U>(fn: (...args: T) => U) =>\n\t(...args: T): U => {\n\t\tif (!fn) {\n\t\t\tthrow Error(\n\t\t\t\t`You can only use this function after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component`\n\t\t\t);\n\t\t}\n\t\treturn fn(...args);\n\t};\n\nconst useAuth = (): IAuth => {\n\tconst ctx = React.useContext(AuthContext);\n\tif (!ctx) {\n\t\tthrow Error(\n\t\t\t`You can only use 'useAuth' in the context of <AuthProvider />`\n\t\t);\n\t}\n\tconst { user, sessionToken, sdk } = ctx;\n\n\tconst logoutAll = useCallback(withValidation(sdk?.logoutAll), [sdk]);\n\n\tconst logout = useCallback(withValidation(sdk?.logout), [sdk]);\n\n\tconst me = useCallback(withValidation(sdk?.me), [sdk]);\n\n\tconst getJwtPermissions = useCallback(\n\t\twithValidation(sdk?.getJwtPermissions),\n\t\t[sdk]\n\t);\n\n\tconst getJwtRoles = useCallback(withValidation(sdk?.getJwtRoles), [sdk]);\n\n\tconst getRefreshToken = useCallback(withValidation(sdk?.getRefreshToken), [\n\t\tsdk\n\t]);\n\n\treturn useMemo(\n\t\t() => ({\n\t\t\tauthenticated: !!sessionToken,\n\t\t\tuser,\n\t\t\tsessionToken,\n\t\t\tlogoutAll,\n\t\t\tlogout,\n\t\t\tme,\n\t\t\tgetJwtPermissions,\n\t\t\tgetJwtRoles,\n\t\t\t/**\n\t\t\t * Returns refresh token. Use this function when:\n\t\t\t * 1. You need to pass refresh token to another party (For example, in SSR)\n\t\t\t * 2. Descope project's configuration is set to manage token response in BODY (in contrast to manage response in COOKIES)\n\t\t\t * NOTE: Use carefully! Refresh token is sensitive token with relativity long expiration. Prefer using this function only for testing, and to manage token response in COOKIES)\n\t\t\t */\n\t\t\tgetRefreshToken\n\t\t}),\n\t\t[user, sessionToken, sdk]\n\t);\n};\n\nexport default useAuth;\n"],"names":["sdkInstance","createSdkWrapper","config","sdk","createSdk","persistTokens","autoRefresh","projectId","getSessionToken","AuthContext","React","createContext","undefined","AuthProvider","baseUrl","sessionTokenViaCookie","children","user","setUser","useState","sessionToken","setSessionToken","useMemo","hooks","beforeRequest","conf","headers","persistToken","useEffect","unsubscribeSessionToken","onSessionTokenChange","unsubscribeUser","onUserChange","refresh","value","createElement","Provider","defaultProps","DescopeWC","lazy","async","import","default","flowId","innerRef","tenant","theme","debug","ref","Descope","forwardRef","onSuccess","onError","setInnerRef","useImperativeHandle","useContext","handleSuccess","useCallback","e","detail","sessionJwt","httpClient","afterRequest","Response","JSON","stringify","ele","addEventListener","removeEventListener","Suspense","fallback","SignInFlow","props","SignUpFlow","SignUpOrInFlow","withValidation","fn","args","Error","useAuth","ctx","logoutAll","logout","me","getJwtPermissions","getJwtRoles","getRefreshToken","authenticated"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/lib/hooks/Context.ts","../src/lib/sdk.ts","../src/lib/constants.ts","../src/lib/utils.ts","../src/lib/components/AuthProvider/AuthProvider.tsx","../src/lib/components/AuthProvider/useSdk.ts","../src/lib/components/Descope.tsx","../src/lib/components/DefaultFlows.tsx","../src/lib/hooks/useContext.ts","../src/lib/hooks/useDescope.ts","../src/lib/hooks/useSession.ts","../src/lib/hooks/useUser.ts"],"sourcesContent":["import React from 'react';\nimport { IContext } from '../types';\n\nconst Context = React.createContext<IContext>(undefined);\n\nexport default Context;\n","import createSdk from '@descope/web-js-sdk';\n\ntype Sdk = ReturnType<typeof createSdkWrapper>;\nlet sdkInstance: Sdk;\n\nconst createSdkWrapper = <P extends Parameters<typeof createSdk>[0]>(\n\tconfig: P\n) => {\n\tconst sdk = createSdk({\n\t\t...config,\n\t\tpersistTokens: true,\n\t\tautoRefresh: true\n\t});\n\tsdkInstance = sdk;\n\n\treturn sdk;\n};\n\n/**\n * We want to make sure the getSessionToken fn is used only when persistTokens is on\n *\n * So we are keeping the SDK init in a single place,\n * and we are creating a temp instance in order to export the getSessionToken\n * even before the SDK was init\n */\nsdkInstance = createSdkWrapper({ projectId: 'temp pid' });\n\nexport const getSessionToken = () => sdkInstance?.getSessionToken();\nexport const getJwtPermissions = (token = getSessionToken(), tenant?: string) =>\n\tsdkInstance?.getJwtPermissions(token, tenant);\nexport const getJwtRoles = (token = getSessionToken(), tenant?: string) =>\n\tsdkInstance?.getJwtRoles(token, tenant);\nexport const getRefreshToken = () => sdkInstance?.getRefreshToken();\n\nexport default createSdkWrapper;\n","declare const BUILD_VERSION: string;\n\n// eslint-disable-next-line import/prefer-default-export\nexport const baseHeaders = {\n\t'x-descope-sdk-name': 'react',\n\t'x-descope-sdk-version': BUILD_VERSION\n};\n","/* eslint-disable import/prefer-default-export */\n\n/**\n * Wrap a function with a validation that it exists\n * @param fn The function to wrap with the validation\n * @throws if function does not exist, an error with the relevant message will be thrown\n */\nexport const withValidation =\n\t<T extends Array<any>, U>(fn: (...args: T) => U) =>\n\t(...args: T): U => {\n\t\tif (!fn) {\n\t\t\tthrow Error(\n\t\t\t\t`You can only use this function after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component`\n\t\t\t);\n\t\t}\n\t\treturn fn(...args);\n\t};\n","import React, { FC, useCallback, useEffect, useMemo, useState } from 'react';\nimport Context from '../../hooks/Context';\nimport { IContext, User } from '../../types';\nimport useSdk from './useSdk';\nimport { withValidation } from '../../utils';\n\ninterface IAuthProviderProps {\n\tprojectId: string;\n\tbaseUrl?: string;\n\t// If true, session token (jwt) will be stored on cookie. Otherwise, the session token will be\n\t// stored on local storage and can accessed with getSessionToken function\n\t// Use this option if session token will stay small (less than 1k)\n\t// NOTE: Session token can grow, especially in cases of using authorization, or adding custom claims\n\tsessionTokenViaCookie?: boolean;\n\tchildren?: JSX.Element;\n}\n\nconst AuthProvider: FC<IAuthProviderProps> = ({\n\tprojectId,\n\tbaseUrl,\n\tsessionTokenViaCookie,\n\tchildren\n}) => {\n\tconst [user, setUser] = useState<User>();\n\tconst [session, setSession] = useState<string>();\n\n\tconst [isUserLoading, setIsUserLoading] = useState(false);\n\tconst [isSessionLoading, setIsSessionLoading] = useState(false);\n\n\tconst sdk = useSdk({ projectId, baseUrl, sessionTokenViaCookie });\n\n\tuseEffect(() => {\n\t\tif (sdk) {\n\t\t\tconst unsubscribeSessionToken = sdk.onSessionTokenChange(setSession);\n\t\t\tconst unsubscribeUser = sdk.onUserChange(setUser);\n\n\t\t\treturn () => {\n\t\t\t\tunsubscribeSessionToken();\n\t\t\t\tunsubscribeUser();\n\t\t\t};\n\t\t}\n\t\treturn undefined;\n\t}, [sdk]);\n\n\tconst fetchSession = useCallback(() => {\n\t\tsetIsSessionLoading(true);\n\t\twithValidation(sdk?.refresh)().then(() => {\n\t\t\tsetIsSessionLoading(false);\n\t\t});\n\t}, [sdk]);\n\n\tconst fetchUser = useCallback(() => {\n\t\tsetIsUserLoading(true);\n\t\twithValidation(sdk.me)().then(() => {\n\t\t\tsetIsUserLoading(false);\n\t\t});\n\t}, [sdk]);\n\n\tconst logoutAll = useCallback(withValidation(sdk?.logoutAll), [sdk]);\n\n\tconst logout = useCallback(withValidation(sdk?.logout), [sdk]);\n\n\tconst value = useMemo<IContext>(\n\t\t() => ({\n\t\t\tfetchUser,\n\t\t\tuser,\n\t\t\tisUserLoading,\n\t\t\tfetchSession,\n\t\t\tsession,\n\t\t\tisSessionLoading,\n\t\t\tlogout,\n\t\t\tlogoutAll,\n\t\t\tprojectId,\n\t\t\tbaseUrl,\n\t\t\tsetUser,\n\t\t\tsetSession,\n\t\t\tsdk\n\t\t}),\n\t\t[\n\t\t\tfetchUser,\n\t\t\tuser,\n\t\t\tisUserLoading,\n\t\t\tfetchSession,\n\t\t\tsession,\n\t\t\tisSessionLoading,\n\t\t\tlogout,\n\t\t\tlogoutAll,\n\t\t\tprojectId,\n\t\t\tbaseUrl,\n\t\t\tsetUser,\n\t\t\tsetSession,\n\t\t\tsdk\n\t\t]\n\t);\n\treturn <Context.Provider value={value}>{children}</Context.Provider>;\n};\n\nAuthProvider.defaultProps = {\n\tbaseUrl: '',\n\tchildren: undefined,\n\tsessionTokenViaCookie: false\n};\n\nexport default AuthProvider;\n","import { useMemo } from 'react';\nimport createSdk from '../../sdk';\nimport { baseHeaders } from '../../constants';\n\ntype Config = Pick<\n\tParameters<typeof createSdk>[0],\n\t'projectId' | 'baseUrl' | 'sessionTokenViaCookie'\n>;\n\nexport default ({\n\tprojectId,\n\tbaseUrl,\n\tsessionTokenViaCookie\n}: Config): ReturnType<typeof createSdk> =>\n\tuseMemo(() => {\n\t\tif (!projectId) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn createSdk({\n\t\t\tprojectId,\n\t\t\tbaseUrl,\n\t\t\tsessionTokenViaCookie,\n\t\t\tbaseHeaders,\n\t\t\tpersistToken: true,\n\t\t\tautoRefresh: true\n\t\t});\n\t}, [projectId, baseUrl]);\n","import React, {\n\tlazy,\n\tSuspense,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseState\n} from 'react';\nimport Context from '../hooks/Context';\nimport { DescopeProps } from '../types';\nimport { baseHeaders } from '../constants';\n\n// web-component code uses browser API, but can be used in SSR apps, hence the lazy loading\nconst DescopeWC = lazy(async () => {\n\tconst module = await import('@descope/web-component');\n\t// we want to override the web-component base headers so we can tell that is was used via the React SDK\n\tmodule.default.sdkConfigOverrides = { baseHeaders };\n\n\treturn {\n\t\tdefault: ({\n\t\t\tprojectId,\n\t\t\tflowId,\n\t\t\tbaseUrl,\n\t\t\tinnerRef,\n\t\t\ttenant,\n\t\t\ttheme,\n\t\t\tdebug\n\t\t}) => (\n\t\t\t<descope-wc\n\t\t\t\tproject-id={projectId}\n\t\t\t\tflow-id={flowId}\n\t\t\t\tbase-url={baseUrl}\n\t\t\t\tref={innerRef}\n\t\t\t\ttenant={tenant}\n\t\t\t\ttheme={theme}\n\t\t\t\tdebug={debug}\n\t\t\t/>\n\t\t)\n\t};\n});\n\nconst Descope = React.forwardRef<HTMLElement, DescopeProps>(\n\t({ flowId, onSuccess, onError, tenant, theme, debug }, ref) => {\n\t\tconst [innerRef, setInnerRef] = useState(null);\n\n\t\tuseImperativeHandle(ref, () => innerRef);\n\n\t\tconst { projectId, baseUrl, setUser, setSession, sdk } =\n\t\t\tReact.useContext(Context);\n\n\t\tconst handleSuccess = useCallback(\n\t\t\t(e: CustomEvent) => {\n\t\t\t\tsetUser(e.detail?.user);\n\t\t\t\tconst sessionJwt = e.detail?.sessionJwt;\n\t\t\t\tsetSession(sessionJwt);\n\t\t\t\t// In order to make sure all the after-hooks are running with the success response\n\t\t\t\t// we are generating a fake response with the success data and calling the http client after hook fn with it\n\t\t\t\tsdk.httpClient.hooks.afterRequest(\n\t\t\t\t\t{} as any,\n\t\t\t\t\tnew Response(JSON.stringify(e.detail))\n\t\t\t\t);\n\t\t\t\tif (onSuccess) {\n\t\t\t\t\tonSuccess(e);\n\t\t\t\t}\n\t\t\t},\n\t\t\t[setUser, setSession, onSuccess]\n\t\t);\n\n\t\tuseEffect(() => {\n\t\t\tconst ele = innerRef;\n\t\t\tele?.addEventListener('success', handleSuccess);\n\t\t\tif (onError) ele?.addEventListener('error', onError);\n\n\t\t\treturn () => {\n\t\t\t\tif (onError) ele?.removeEventListener('error', onError);\n\n\t\t\t\tele?.removeEventListener('success', handleSuccess);\n\t\t\t};\n\t\t}, [innerRef, onError, handleSuccess]);\n\n\t\treturn (\n\t\t\t/**\n\t\t\t * in order to avoid redundant remounting of the WC, we are wrapping it with a form element\n\t\t\t * this workaround is done in order to support webauthn passkeys\n\t\t\t * it can be removed once this issue will be solved\n\t\t\t * https://bugs.chromium.org/p/chromium/issues/detail?id=1404106#c2\n\t\t\t */\n\t\t\t<form>\n\t\t\t\t<Suspense fallback={null}>\n\t\t\t\t\t<DescopeWC\n\t\t\t\t\t\tprojectId={projectId}\n\t\t\t\t\t\tflowId={flowId}\n\t\t\t\t\t\tbaseUrl={baseUrl}\n\t\t\t\t\t\tinnerRef={setInnerRef}\n\t\t\t\t\t\ttenant={tenant}\n\t\t\t\t\t\ttheme={theme}\n\t\t\t\t\t\tdebug={debug}\n\t\t\t\t\t/>\n\t\t\t\t</Suspense>\n\t\t\t</form>\n\t\t);\n\t}\n);\n\nDescope.defaultProps = {\n\tonError: undefined,\n\tonSuccess: undefined\n};\n\nexport default Descope;\n","import React from 'react';\nimport { DefaultFlowProps } from '../types';\nimport Descope from './Descope';\n\nexport const SignInFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-in\" />\n);\n\nexport const SignUpFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-up\" />\n);\n\nexport const SignUpOrInFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-up-or-in\" />\n);\n","import { useContext } from 'react';\nimport Context from './Context';\n\nexport default () => {\n\tconst ctx = useContext(Context);\n\tif (!ctx) {\n\t\tthrow Error(\n\t\t\t`You can only use this hook in the context of <AuthProvider />`\n\t\t);\n\t}\n\n\treturn ctx;\n};\n","import { useMemo } from 'react';\nimport { IAuth } from '../types';\nimport useContext from './useContext';\n\nconst useDescope = (): IAuth => {\n\tconst { logout, logoutAll } = useContext();\n\n\treturn useMemo(\n\t\t() => ({\n\t\t\tlogoutAll,\n\t\t\tlogout\n\t\t}),\n\t\t[logoutAll, logout]\n\t);\n};\n\nexport default useDescope;\n","import { useEffect } from 'react';\nimport useContext from './useContext';\n\nconst useSession = () => {\n\tconst { session, isSessionLoading, fetchSession } = useContext();\n\n\tuseEffect(() => {\n\t\tif (!session && !isSessionLoading) {\n\t\t\tfetchSession();\n\t\t}\n\t}, [fetchSession]);\n\n\treturn {\n\t\tisSessionLoading,\n\t\tsessionToken: session,\n\t\tisAuthenticated: !!session\n\t};\n};\n\nexport default useSession;\n","import { useEffect, useState } from 'react';\nimport useContext from './useContext';\n\nconst useUser = () => {\n\tconst { user, fetchUser, isUserLoading, session, isSessionLoading } =\n\t\tuseContext();\n\tconst [isInit, setIsInit] = useState(false); // we want to get the user only in the first time we got a session\n\n\tuseEffect(() => {\n\t\tif (!user && !isUserLoading && session && !isSessionLoading && !isInit) {\n\t\t\tsetIsInit(true);\n\t\t\tfetchUser();\n\t\t}\n\t}, [isSessionLoading, fetchUser, session, isInit]);\n\n\treturn { isUserLoading, user };\n};\n\nexport default useUser;\n"],"names":["Context","React","createContext","undefined","sdkInstance","createSdkWrapper","config","sdk","createSdk","persistTokens","autoRefresh","projectId","getSessionToken","getJwtPermissions","token","tenant","getJwtRoles","getRefreshToken","baseHeaders","withValidation","fn","args","Error","AuthProvider","baseUrl","sessionTokenViaCookie","children","user","setUser","useState","session","setSession","isUserLoading","setIsUserLoading","isSessionLoading","setIsSessionLoading","useMemo","persistToken","useSdk","useEffect","unsubscribeSessionToken","onSessionTokenChange","unsubscribeUser","onUserChange","fetchSession","useCallback","refresh","then","fetchUser","me","logoutAll","logout","value","createElement","Provider","defaultProps","DescopeWC","lazy","async","import","default","sdkConfigOverrides","flowId","innerRef","theme","debug","ref","Descope","forwardRef","onSuccess","onError","setInnerRef","useImperativeHandle","useContext","handleSuccess","e","detail","sessionJwt","httpClient","hooks","afterRequest","Response","JSON","stringify","ele","addEventListener","removeEventListener","Suspense","fallback","SignInFlow","props","SignUpFlow","SignUpOrInFlow","ctx","useDescope","useSession","sessionToken","isAuthenticated","useUser","isInit","setIsInit"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@descope/react-sdk",
3
- "version": "0.0.52-alpha.25",
3
+ "version": "0.0.52-alpha.27",
4
4
  "main": "dist/cjs/index.cjs.js",
5
5
  "module": "dist/index.esm.js",
6
6
  "types": "dist/index.d.ts",
@@ -19,11 +19,11 @@
19
19
  "dist"
20
20
  ],
21
21
  "dependencies": {
22
- "@descope/web-component": "0.1.0-alpha.24",
23
- "react-router-dom": "6.5.0"
22
+ "@descope/web-component": "0.1.0-alpha.34",
23
+ "react-router-dom": "6.6.1"
24
24
  },
25
25
  "devDependencies": {
26
- "@babel/core": "7.20.5",
26
+ "@babel/core": "7.20.12",
27
27
  "@babel/preset-env": "7.20.2",
28
28
  "@babel/preset-react": "7.18.6",
29
29
  "@babel/preset-typescript": "7.18.6",
@@ -37,13 +37,13 @@
37
37
  "@testing-library/user-event": "14.4.3",
38
38
  "@types/jest": "^27.0.2",
39
39
  "@types/react": "18.0.26",
40
- "@types/react-dom": "18.0.9",
40
+ "@types/react-dom": "18.0.10",
41
41
  "@types/react-router-dom": "^5.3.3",
42
42
  "babel-jest": "27.5.1",
43
- "eslint": "8.30.0",
43
+ "eslint": "8.31.0",
44
44
  "eslint-config-airbnb": "19.0.4",
45
45
  "eslint-config-airbnb-typescript": "17.0.0",
46
- "eslint-config-prettier": "8.5.0",
46
+ "eslint-config-prettier": "8.6.0",
47
47
  "eslint-config-standard": "17.0.0",
48
48
  "eslint-import-resolver-typescript": "2.7.1",
49
49
  "eslint-plugin-import": "2.26.0",
@@ -61,6 +61,7 @@
61
61
  "eslint-plugin-testing-library": "5.9.1",
62
62
  "husky": "^8.0.1",
63
63
  "jest": "^27.3.1",
64
+ "jest-extended": "^3.2.2",
64
65
  "lint-staged": "^13.0.3",
65
66
  "pretty-quick": "^3.1.3",
66
67
  "react": "18.2.0",
@@ -80,9 +81,9 @@
80
81
  "typescript": "^4.5.3"
81
82
  },
82
83
  "peerDependencies": {
84
+ "@descope/web-js-sdk": "0.1.0-alpha.23",
83
85
  "@types/react": ">=16",
84
- "react": ">=16",
85
- "@descope/web-js-sdk": "0.1.0-alpha.17"
86
+ "react": ">=16"
86
87
  },
87
88
  "scripts": {
88
89
  "start": "npm run build && rollup -c rollup.config.app.js -w",