@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 +19 -19
- package/dist/cjs/index.cjs.js +1 -1
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/index.d.ts +184 -92
- package/dist/index.esm.js +1 -1
- package/dist/index.esm.js.map +1 -1
- package/package.json +10 -9
package/README.md
CHANGED
|
@@ -72,7 +72,7 @@ const App = () => {
|
|
|
72
72
|
}
|
|
73
73
|
```
|
|
74
74
|
|
|
75
|
-
#### Use the `
|
|
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 {
|
|
84
|
+
import { useDescope, useSession, useUser } from '@descope/react-sdk'
|
|
85
85
|
|
|
86
86
|
const App = () => {
|
|
87
|
-
// NOTE - `
|
|
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 {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
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
|
|
package/dist/cjs/index.cjs.js
CHANGED
|
@@ -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
|
|
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)
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
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: (
|
|
73
|
-
sms: (
|
|
74
|
-
whatsapp: (
|
|
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: (
|
|
78
|
-
sms: (
|
|
79
|
-
whatsapp: (
|
|
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: (
|
|
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: (
|
|
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: (
|
|
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: (
|
|
100
|
-
sms: (
|
|
101
|
-
whatsapp: (
|
|
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: (
|
|
137
|
+
email: (loginId: string, email: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
105
138
|
phone: {
|
|
106
|
-
email: (
|
|
107
|
-
sms: (
|
|
108
|
-
whatsapp: (
|
|
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: (
|
|
116
|
-
sms: (
|
|
117
|
-
whatsapp: (
|
|
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: (
|
|
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: (
|
|
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: (
|
|
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: (
|
|
138
|
-
sms: (
|
|
139
|
-
whatsapp: (
|
|
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: (
|
|
175
|
+
email: (loginId: string, email: string, uri: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
143
176
|
phone: {
|
|
144
|
-
email: (
|
|
145
|
-
sms: (
|
|
146
|
-
whatsapp: (
|
|
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: (
|
|
153
|
-
signUpOrIn: (
|
|
154
|
-
signUp: (
|
|
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: (
|
|
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: (
|
|
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: (
|
|
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: (
|
|
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)
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
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: (
|
|
288
|
-
sms: (
|
|
289
|
-
whatsapp: (
|
|
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: (
|
|
293
|
-
sms: (
|
|
294
|
-
whatsapp: (
|
|
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: (
|
|
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: (
|
|
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: (
|
|
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: (
|
|
315
|
-
sms: (
|
|
316
|
-
whatsapp: (
|
|
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: (
|
|
394
|
+
email: (loginId: string, email: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
320
395
|
phone: {
|
|
321
|
-
email: (
|
|
322
|
-
sms: (
|
|
323
|
-
whatsapp: (
|
|
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: (
|
|
331
|
-
sms: (
|
|
332
|
-
whatsapp: (
|
|
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: (
|
|
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: (
|
|
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: (
|
|
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: (
|
|
353
|
-
sms: (
|
|
354
|
-
whatsapp: (
|
|
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: (
|
|
432
|
+
email: (loginId: string, email: string, uri: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
358
433
|
phone: {
|
|
359
|
-
email: (
|
|
360
|
-
sms: (
|
|
361
|
-
whatsapp: (
|
|
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: (
|
|
368
|
-
signUpOrIn: (
|
|
369
|
-
signUp: (
|
|
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: (
|
|
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: <
|
|
459
|
+
facebook: <B_8 extends {
|
|
385
460
|
redirect: boolean;
|
|
386
|
-
}>(redirectURL?: string, config?:
|
|
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: (
|
|
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: (
|
|
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: (
|
|
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: () =>
|
|
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
|
|
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,
|
|
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,{
|
|
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
|
package/dist/index.esm.js.map
CHANGED
|
@@ -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.
|
|
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.
|
|
23
|
-
"react-router-dom": "6.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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",
|