@descope/react-sdk 0.0.52-alpha.25 → 0.0.52-alpha.26
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/dist/cjs/index.cjs.js +1 -1
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/index.d.ts +144 -80
- package/dist/index.esm.js +1 -1
- package/dist/index.esm.js.map +1 -1
- package/package.json +9 -8
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 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.
|
|
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.26"},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:m}=r.default.useContext(l),g=e.useCallback((e=>{b(e.detail?.user);const t=e.detail?.sessionJwt;h(t),m.httpClient.hooks.afterRequest({},new Response(JSON.stringify(e.detail))),s&&s(e)}),[b,h,s]);return e.useEffect((()=>{const e=d;return e?.addEventListener("success",g),o&&e?.addEventListener("error",o),()=>{o&&e?.removeEventListener("error",o),e?.removeEventListener("success",g)}}),[d,o,g]),r.default.createElement("form",null,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])};
|
|
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/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\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, 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/**\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, { 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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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -54,14 +54,46 @@ declare const createSdkWrapper: <P extends Omit<{
|
|
|
54
54
|
next: (executionId: string, stepId: string, interactionId: string, input?: Record<string, FormDataEntryValue>) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.FlowResponse>>;
|
|
55
55
|
};
|
|
56
56
|
webauthn: {
|
|
57
|
-
signUp(identifier: string, name: string)
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
57
|
+
signUp: ((identifier: string, name: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>) & {
|
|
58
|
+
start: (loginId: string, origin: string, name: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
59
|
+
transactionId: string;
|
|
60
|
+
options: string;
|
|
61
|
+
create: boolean;
|
|
62
|
+
}>>;
|
|
63
|
+
finish: (transactionId: string, response: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
64
|
+
};
|
|
65
|
+
signIn: ((identifier: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>) & {
|
|
66
|
+
start: (loginId: string, origin: string, loginOptions?: {
|
|
67
|
+
stepup?: boolean;
|
|
68
|
+
mfa?: boolean;
|
|
69
|
+
customClaims?: Record<string, any>;
|
|
70
|
+
}, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
71
|
+
transactionId: string;
|
|
72
|
+
options: string;
|
|
73
|
+
create: boolean;
|
|
74
|
+
}>>;
|
|
75
|
+
finish: (transactionId: string, response: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
76
|
+
};
|
|
77
|
+
signUpOrIn: ((identifier: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>) & {
|
|
78
|
+
start: (loginId: string, origin: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
79
|
+
transactionId: string;
|
|
80
|
+
options: string;
|
|
81
|
+
create: boolean;
|
|
82
|
+
}>>;
|
|
83
|
+
};
|
|
84
|
+
update: ((identifier: string, token: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.ResponseData>>) & {
|
|
85
|
+
start: (loginId: string, origin: string, token: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
86
|
+
transactionId: string;
|
|
87
|
+
options: string;
|
|
88
|
+
create: boolean;
|
|
89
|
+
}>>;
|
|
90
|
+
finish: (transactionId: string, response: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.ResponseData>>;
|
|
91
|
+
};
|
|
61
92
|
helpers: {
|
|
62
93
|
create: (options: string) => Promise<string>;
|
|
63
94
|
get: (options: string) => Promise<string>;
|
|
64
95
|
isSupported: (requirePlatformAuthenticator?: boolean) => Promise<boolean>;
|
|
96
|
+
conditional: (options: string, abort: AbortController) => Promise<string>;
|
|
65
97
|
};
|
|
66
98
|
};
|
|
67
99
|
accessKey: {
|
|
@@ -69,89 +101,89 @@ declare const createSdkWrapper: <P extends Omit<{
|
|
|
69
101
|
};
|
|
70
102
|
otp: {
|
|
71
103
|
verify: {
|
|
72
|
-
email: (
|
|
73
|
-
sms: (
|
|
74
|
-
whatsapp: (
|
|
104
|
+
email: (loginId: string, code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
105
|
+
sms: (loginId: string, code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
106
|
+
whatsapp: (loginId: string, code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
75
107
|
};
|
|
76
108
|
signIn: {
|
|
77
|
-
email: (
|
|
78
|
-
sms: (
|
|
79
|
-
whatsapp: (
|
|
109
|
+
email: (loginId: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
110
|
+
sms: (loginId: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
111
|
+
whatsapp: (loginId: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
80
112
|
};
|
|
81
113
|
signUp: {
|
|
82
|
-
email: (
|
|
114
|
+
email: (loginId: string, user?: {
|
|
83
115
|
email?: string;
|
|
84
116
|
name?: string;
|
|
85
117
|
phone?: string;
|
|
86
118
|
}) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
87
|
-
sms: (
|
|
119
|
+
sms: (loginId: string, user?: {
|
|
88
120
|
email?: string;
|
|
89
121
|
name?: string;
|
|
90
122
|
phone?: string;
|
|
91
123
|
}) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
92
|
-
whatsapp: (
|
|
124
|
+
whatsapp: (loginId: string, user?: {
|
|
93
125
|
email?: string;
|
|
94
126
|
name?: string;
|
|
95
127
|
phone?: string;
|
|
96
128
|
}) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
97
129
|
};
|
|
98
130
|
signUpOrIn: {
|
|
99
|
-
email: (
|
|
100
|
-
sms: (
|
|
101
|
-
whatsapp: (
|
|
131
|
+
email: (loginId: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
132
|
+
sms: (loginId: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
133
|
+
whatsapp: (loginId: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
102
134
|
};
|
|
103
135
|
update: {
|
|
104
|
-
email: (
|
|
136
|
+
email: (loginId: string, email: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
105
137
|
phone: {
|
|
106
|
-
email: (
|
|
107
|
-
sms: (
|
|
108
|
-
whatsapp: (
|
|
138
|
+
email: (loginId: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
139
|
+
sms: (loginId: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
140
|
+
whatsapp: (loginId: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
109
141
|
};
|
|
110
142
|
};
|
|
111
143
|
};
|
|
112
144
|
magicLink: {
|
|
113
145
|
verify: (token: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
114
146
|
signIn: {
|
|
115
|
-
email: (
|
|
116
|
-
sms: (
|
|
117
|
-
whatsapp: (
|
|
147
|
+
email: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
148
|
+
sms: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
149
|
+
whatsapp: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
118
150
|
};
|
|
119
151
|
signUp: {
|
|
120
|
-
email: (
|
|
152
|
+
email: (loginId: string, uri: string, user?: {
|
|
121
153
|
email?: string;
|
|
122
154
|
name?: string;
|
|
123
155
|
phone?: string;
|
|
124
156
|
}) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
125
|
-
sms: (
|
|
157
|
+
sms: (loginId: string, uri: string, user?: {
|
|
126
158
|
email?: string;
|
|
127
159
|
name?: string;
|
|
128
160
|
phone?: string;
|
|
129
161
|
}) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
130
|
-
whatsapp: (
|
|
162
|
+
whatsapp: (loginId: string, uri: string, user?: {
|
|
131
163
|
email?: string;
|
|
132
164
|
name?: string;
|
|
133
165
|
phone?: string;
|
|
134
166
|
}) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
135
167
|
};
|
|
136
168
|
signUpOrIn: {
|
|
137
|
-
email: (
|
|
138
|
-
sms: (
|
|
139
|
-
whatsapp: (
|
|
169
|
+
email: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
170
|
+
sms: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
171
|
+
whatsapp: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
140
172
|
};
|
|
141
173
|
update: {
|
|
142
|
-
email: (
|
|
174
|
+
email: (loginId: string, email: string, uri: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
143
175
|
phone: {
|
|
144
|
-
email: (
|
|
145
|
-
sms: (
|
|
146
|
-
whatsapp: (
|
|
176
|
+
email: (loginId: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
177
|
+
sms: (loginId: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
178
|
+
whatsapp: (loginId: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
147
179
|
};
|
|
148
180
|
};
|
|
149
181
|
};
|
|
150
182
|
enchantedLink: {
|
|
151
183
|
verify: (token: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
152
|
-
signIn: (
|
|
153
|
-
signUpOrIn: (
|
|
154
|
-
signUp: (
|
|
184
|
+
signIn: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.EnchantedLinkResponse>>;
|
|
185
|
+
signUpOrIn: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.EnchantedLinkResponse>>;
|
|
186
|
+
signUp: (loginId: string, uri: string, user?: {
|
|
155
187
|
email?: string;
|
|
156
188
|
name?: string;
|
|
157
189
|
phone?: string;
|
|
@@ -161,7 +193,7 @@ declare const createSdkWrapper: <P extends Omit<{
|
|
|
161
193
|
timeoutMs: number;
|
|
162
194
|
}) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
163
195
|
update: {
|
|
164
|
-
email: (
|
|
196
|
+
email: (loginId: string, email: string, uri: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.EnchantedLinkResponse>>;
|
|
165
197
|
};
|
|
166
198
|
};
|
|
167
199
|
oauth: {
|
|
@@ -208,17 +240,17 @@ declare const createSdkWrapper: <P extends Omit<{
|
|
|
208
240
|
exchange: (code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
209
241
|
};
|
|
210
242
|
totp: {
|
|
211
|
-
signUp: (
|
|
243
|
+
signUp: (loginId: string, user?: {
|
|
212
244
|
email?: string;
|
|
213
245
|
name?: string;
|
|
214
246
|
phone?: string;
|
|
215
247
|
}) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.TOTPResponse>>;
|
|
216
|
-
verify: (
|
|
248
|
+
verify: (loginId: string, code: string, loginOptions?: {
|
|
217
249
|
stepup?: boolean;
|
|
218
250
|
mfa?: boolean;
|
|
219
251
|
customClaims?: Record<string, any>;
|
|
220
252
|
}, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
221
|
-
update: (
|
|
253
|
+
update: (loginId: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.TOTPResponse>>;
|
|
222
254
|
};
|
|
223
255
|
refresh: (token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
224
256
|
logout: (token?: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
@@ -269,14 +301,46 @@ declare const createSdkWrapper: <P extends Omit<{
|
|
|
269
301
|
next: (executionId: string, stepId: string, interactionId: string, input?: Record<string, FormDataEntryValue>) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.FlowResponse>>;
|
|
270
302
|
};
|
|
271
303
|
webauthn: {
|
|
272
|
-
signUp(identifier: string, name: string)
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
304
|
+
signUp: ((identifier: string, name: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>) & {
|
|
305
|
+
start: (loginId: string, origin: string, name: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
306
|
+
transactionId: string;
|
|
307
|
+
options: string;
|
|
308
|
+
create: boolean;
|
|
309
|
+
}>>;
|
|
310
|
+
finish: (transactionId: string, response: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
311
|
+
};
|
|
312
|
+
signIn: ((identifier: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>) & {
|
|
313
|
+
start: (loginId: string, origin: string, loginOptions?: {
|
|
314
|
+
stepup?: boolean;
|
|
315
|
+
mfa?: boolean;
|
|
316
|
+
customClaims?: Record<string, any>;
|
|
317
|
+
}, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
318
|
+
transactionId: string;
|
|
319
|
+
options: string;
|
|
320
|
+
create: boolean;
|
|
321
|
+
}>>;
|
|
322
|
+
finish: (transactionId: string, response: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
323
|
+
};
|
|
324
|
+
signUpOrIn: ((identifier: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>) & {
|
|
325
|
+
start: (loginId: string, origin: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
326
|
+
transactionId: string;
|
|
327
|
+
options: string;
|
|
328
|
+
create: boolean;
|
|
329
|
+
}>>;
|
|
330
|
+
};
|
|
331
|
+
update: ((identifier: string, token: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.ResponseData>>) & {
|
|
332
|
+
start: (loginId: string, origin: string, token: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
333
|
+
transactionId: string;
|
|
334
|
+
options: string;
|
|
335
|
+
create: boolean;
|
|
336
|
+
}>>;
|
|
337
|
+
finish: (transactionId: string, response: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.ResponseData>>;
|
|
338
|
+
};
|
|
276
339
|
helpers: {
|
|
277
340
|
create: (options: string) => Promise<string>;
|
|
278
341
|
get: (options: string) => Promise<string>;
|
|
279
342
|
isSupported: (requirePlatformAuthenticator?: boolean) => Promise<boolean>;
|
|
343
|
+
conditional: (options: string, abort: AbortController) => Promise<string>;
|
|
280
344
|
};
|
|
281
345
|
};
|
|
282
346
|
accessKey: {
|
|
@@ -284,89 +348,89 @@ declare const createSdkWrapper: <P extends Omit<{
|
|
|
284
348
|
};
|
|
285
349
|
otp: {
|
|
286
350
|
verify: {
|
|
287
|
-
email: (
|
|
288
|
-
sms: (
|
|
289
|
-
whatsapp: (
|
|
351
|
+
email: (loginId: string, code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
352
|
+
sms: (loginId: string, code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
353
|
+
whatsapp: (loginId: string, code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
290
354
|
};
|
|
291
355
|
signIn: {
|
|
292
|
-
email: (
|
|
293
|
-
sms: (
|
|
294
|
-
whatsapp: (
|
|
356
|
+
email: (loginId: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
357
|
+
sms: (loginId: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
358
|
+
whatsapp: (loginId: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
295
359
|
};
|
|
296
360
|
signUp: {
|
|
297
|
-
email: (
|
|
361
|
+
email: (loginId: string, user?: {
|
|
298
362
|
email?: string;
|
|
299
363
|
name?: string;
|
|
300
364
|
phone?: string;
|
|
301
365
|
}) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
302
|
-
sms: (
|
|
366
|
+
sms: (loginId: string, user?: {
|
|
303
367
|
email?: string;
|
|
304
368
|
name?: string;
|
|
305
369
|
phone?: string;
|
|
306
370
|
}) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
307
|
-
whatsapp: (
|
|
371
|
+
whatsapp: (loginId: string, user?: {
|
|
308
372
|
email?: string;
|
|
309
373
|
name?: string;
|
|
310
374
|
phone?: string;
|
|
311
375
|
}) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
312
376
|
};
|
|
313
377
|
signUpOrIn: {
|
|
314
|
-
email: (
|
|
315
|
-
sms: (
|
|
316
|
-
whatsapp: (
|
|
378
|
+
email: (loginId: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
379
|
+
sms: (loginId: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
380
|
+
whatsapp: (loginId: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
317
381
|
};
|
|
318
382
|
update: {
|
|
319
|
-
email: (
|
|
383
|
+
email: (loginId: string, email: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
320
384
|
phone: {
|
|
321
|
-
email: (
|
|
322
|
-
sms: (
|
|
323
|
-
whatsapp: (
|
|
385
|
+
email: (loginId: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
386
|
+
sms: (loginId: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
387
|
+
whatsapp: (loginId: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
324
388
|
};
|
|
325
389
|
};
|
|
326
390
|
};
|
|
327
391
|
magicLink: {
|
|
328
392
|
verify: (token: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
329
393
|
signIn: {
|
|
330
|
-
email: (
|
|
331
|
-
sms: (
|
|
332
|
-
whatsapp: (
|
|
394
|
+
email: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
395
|
+
sms: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
396
|
+
whatsapp: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
333
397
|
};
|
|
334
398
|
signUp: {
|
|
335
|
-
email: (
|
|
399
|
+
email: (loginId: string, uri: string, user?: {
|
|
336
400
|
email?: string;
|
|
337
401
|
name?: string;
|
|
338
402
|
phone?: string;
|
|
339
403
|
}) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
340
|
-
sms: (
|
|
404
|
+
sms: (loginId: string, uri: string, user?: {
|
|
341
405
|
email?: string;
|
|
342
406
|
name?: string;
|
|
343
407
|
phone?: string;
|
|
344
408
|
}) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
345
|
-
whatsapp: (
|
|
409
|
+
whatsapp: (loginId: string, uri: string, user?: {
|
|
346
410
|
email?: string;
|
|
347
411
|
name?: string;
|
|
348
412
|
phone?: string;
|
|
349
413
|
}) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
350
414
|
};
|
|
351
415
|
signUpOrIn: {
|
|
352
|
-
email: (
|
|
353
|
-
sms: (
|
|
354
|
-
whatsapp: (
|
|
416
|
+
email: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
417
|
+
sms: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
418
|
+
whatsapp: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
355
419
|
};
|
|
356
420
|
update: {
|
|
357
|
-
email: (
|
|
421
|
+
email: (loginId: string, email: string, uri: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
358
422
|
phone: {
|
|
359
|
-
email: (
|
|
360
|
-
sms: (
|
|
361
|
-
whatsapp: (
|
|
423
|
+
email: (loginId: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
424
|
+
sms: (loginId: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
425
|
+
whatsapp: (loginId: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
362
426
|
};
|
|
363
427
|
};
|
|
364
428
|
};
|
|
365
429
|
enchantedLink: {
|
|
366
430
|
verify: (token: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
367
|
-
signIn: (
|
|
368
|
-
signUpOrIn: (
|
|
369
|
-
signUp: (
|
|
431
|
+
signIn: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.EnchantedLinkResponse>>;
|
|
432
|
+
signUpOrIn: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.EnchantedLinkResponse>>;
|
|
433
|
+
signUp: (loginId: string, uri: string, user?: {
|
|
370
434
|
email?: string;
|
|
371
435
|
name?: string;
|
|
372
436
|
phone?: string;
|
|
@@ -376,7 +440,7 @@ declare const createSdkWrapper: <P extends Omit<{
|
|
|
376
440
|
timeoutMs: number;
|
|
377
441
|
}) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
378
442
|
update: {
|
|
379
|
-
email: (
|
|
443
|
+
email: (loginId: string, email: string, uri: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.EnchantedLinkResponse>>;
|
|
380
444
|
};
|
|
381
445
|
};
|
|
382
446
|
oauth: {
|
|
@@ -423,17 +487,17 @@ declare const createSdkWrapper: <P extends Omit<{
|
|
|
423
487
|
exchange: (code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
424
488
|
};
|
|
425
489
|
totp: {
|
|
426
|
-
signUp: (
|
|
490
|
+
signUp: (loginId: string, user?: {
|
|
427
491
|
email?: string;
|
|
428
492
|
name?: string;
|
|
429
493
|
phone?: string;
|
|
430
494
|
}) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.TOTPResponse>>;
|
|
431
|
-
verify: (
|
|
495
|
+
verify: (loginId: string, code: string, loginOptions?: {
|
|
432
496
|
stepup?: boolean;
|
|
433
497
|
mfa?: boolean;
|
|
434
498
|
customClaims?: Record<string, any>;
|
|
435
499
|
}, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
436
|
-
update: (
|
|
500
|
+
update: (loginId: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.TOTPResponse>>;
|
|
437
501
|
};
|
|
438
502
|
refresh: (token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
439
503
|
logout: (token?: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
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
|
|
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 l;const d=e=>{const t=a({...e,persistTokens:!0,autoRefresh:!0});return l=t,t};l=d({projectId:"temp pid"});const u=()=>l?.getSessionToken(),f=e.createContext(void 0),p=({projectId:n,baseUrl:r,sessionTokenViaCookie:i,children:c})=>{const[a,l]=t({}),[u,p]=t(""),k=o((()=>{if(n)return d({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.26"},t}},persistToken:!0,autoRefresh:!0})}),[n,r]);s((()=>{if(!k)return;const e=k.onSessionTokenChange(p),t=k.onUserChange(l);return k.refresh(),()=>{e?.(),t?.()}}),[k]);const m=o((()=>({sdk:k,projectId:n,baseUrl:r,user:a,sessionToken:u,setUser:l,setSessionToken:p})),[u,a,n,r]);return e.createElement(f.Provider,{value:m},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})}))),m=e.forwardRef((({flowId:o,onSuccess:n,onError:a,tenant:l,theme:d,debug:u},p)=>{const[m,h]=t(null);r(p,(()=>m));const{projectId:g,baseUrl:w,setUser:b,setSessionToken:E,sdk:v}=e.useContext(f),I=i((e=>{b(e.detail?.user);const t=e.detail?.sessionJwt;E(t),v.httpClient.hooks.afterRequest({},new Response(JSON.stringify(e.detail))),n&&n(e)}),[b,E,n]);return s((()=>{const e=m;return e?.addEventListener("success",I),a&&e?.addEventListener("error",a),()=>{a&&e?.removeEventListener("error",a),e?.removeEventListener("success",I)}}),[m,a,I]),e.createElement("form",null,e.createElement(c,{fallback:null},e.createElement(k,{projectId:g,flowId:o,baseUrl:w,innerRef:h,tenant:l,theme:d,debug:u})))}));m.defaultProps={onError:void 0,onSuccess:void 0};const h=t=>e.createElement(m,{...t,flowId:"sign-in"}),g=t=>e.createElement(m,{...t,flowId:"sign-up"}),w=t=>e.createElement(m,{...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)},E=()=>{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]),l=i(b(r?.me),[r]),d=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:l,getJwtPermissions:d,getJwtRoles:u,getRefreshToken:p})),[s,n,r])};export{p as AuthProvider,m as Descope,h as SignInFlow,g as SignUpFlow,w as SignUpOrInFlow,u as getSessionToken,E as useAuth};
|
|
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/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\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, 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/**\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 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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"}
|
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.26",
|
|
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.29",
|
|
23
|
+
"react-router-dom": "6.6.1"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
|
-
"@babel/core": "7.20.
|
|
26
|
+
"@babel/core": "7.20.7",
|
|
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",
|
|
@@ -82,7 +83,7 @@
|
|
|
82
83
|
"peerDependencies": {
|
|
83
84
|
"@types/react": ">=16",
|
|
84
85
|
"react": ">=16",
|
|
85
|
-
"@descope/web-js-sdk": "0.1.0-alpha.
|
|
86
|
+
"@descope/web-js-sdk": "0.1.0-alpha.21"
|
|
86
87
|
},
|
|
87
88
|
"scripts": {
|
|
88
89
|
"start": "npm run build && rollup -c rollup.config.app.js -w",
|