@descope/react-sdk 1.0.1 → 1.0.2
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 +196 -50
- package/dist/index.esm.js +1 -1
- package/dist/index.esm.js.map +1 -1
- package/package.json +4 -4
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);const u=r.default.createContext(void 0),i=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)},a=e=>(...t)=>{let s;try{s=e(...t)}catch(e){console.error(e)}return s},l={"x-descope-sdk-name":"react","x-descope-sdk-version":"1.0.
|
|
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 u=r.default.createContext(void 0),i=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)},a=e=>(...t)=>{let s;try{s=e(...t)}catch(e){console.error(e)}return s},l={"x-descope-sdk-name":"react","x-descope-sdk-version":"1.0.2"},c="undefined"!=typeof window;let d;const f=e=>{const t=n.default({...e,persistTokens:c,autoRefresh:c});return d=t,t};d=f({projectId:"temp pid"});const p=()=>c?d?.getSessionToken():(console.warn("Get session token is not supported in SSR"),""),g=()=>c?d?.getRefreshToken():(console.warn("Get refresh token is not supported in SSR"),""),h=a(((e=p(),t)=>d?.getJwtPermissions(e,t))),k=a(((e=p(),t)=>d?.getJwtRoles(e,t)));const m=({projectId:t,baseUrl:s,sessionTokenViaCookie:o,children:n})=>{const[a,c]=e.useState(),[d,p]=e.useState(),[g,h]=e.useState(!1),[k,m]=e.useState(!1),b=(({projectId:t,baseUrl:s,sessionTokenViaCookie:o})=>e.useMemo((()=>{if(t)return f({projectId:t,baseUrl:s,sessionTokenViaCookie:o,baseHeaders:l,persistToken:!0,autoRefresh:!0})}),[t,s,o]))({projectId:t,baseUrl:s,sessionTokenViaCookie:o});e.useEffect((()=>{if(b){const e=b.onSessionTokenChange(p),t=b.onUserChange(c);return()=>{e(),t()}}}),[b]);const w=e.useCallback((()=>{m(!0),i(b?.refresh)().then((()=>{m(!1)}))}),[b]),S=e.useCallback((()=>{h(!0),i(b.me)().then((()=>{h(!1)}))}),[b]),v=e.useCallback(i(b?.logoutAll),[b]),y=e.useCallback(i(b?.logout),[b]),U=e.useMemo((()=>({fetchUser:S,user:a,isUserLoading:g,fetchSession:w,session:d,isSessionLoading:k,logout:y,logoutAll:v,projectId:t,baseUrl:s,setUser:c,setSession:p,sdk:b})),[S,a,g,w,d,k,y,v,t,s,c,p,b]);return r.default.createElement(u.Provider,{value:U},n)};m.defaultProps={baseUrl:"",children:void 0,sessionTokenViaCookie:!1};const b=e.lazy((async()=>((await Promise.resolve().then((function(){return o(require("@descope/web-component"))}))).default.sdkConfigOverrides={baseHeaders:l},{default:({projectId:e,flowId:t,baseUrl:s,innerRef:o,tenant:n,theme:u,debug:i,telemetryKey:a,redirectUrl:l,autoFocus:c})=>r.default.createElement("descope-wc",{"project-id":e,"flow-id":t,"base-url":s,ref:o,tenant:n,theme:u,debug:i,telemetryKey:a,"redirect-url":l,"auto-focus":c})}))),w=r.default.forwardRef((({flowId:t,onSuccess:s,onError:o,tenant:n,theme:i,debug:a,telemetryKey:l,redirectUrl:c,autoFocus:d},f)=>{const[p,g]=e.useState(null);e.useImperativeHandle(f,(()=>p));const{projectId:h,baseUrl:k,sdk:m}=r.default.useContext(u),w=e.useCallback((async e=>{await m.httpClient.hooks.afterRequest({},new Response(JSON.stringify(e.detail))),s&&s(e)}),[s]);return e.useEffect((()=>{const e=p;return e?.addEventListener("success",w),o&&e?.addEventListener("error",o),()=>{o&&e?.removeEventListener("error",o),e?.removeEventListener("success",w)}}),[p,o,w]),r.default.createElement("form",null,r.default.createElement(e.Suspense,{fallback:null},r.default.createElement(b,{projectId:h,flowId:t,baseUrl:k,innerRef:g,tenant:n,theme:i,debug:a,telemetryKey:l,redirectUrl:c,autoFocus:d})))}));w.defaultProps={onError:void 0,onSuccess:void 0};var S=()=>{const t=e.useContext(u);if(!t)throw Error("You can only use this hook in the context of <AuthProvider />");return t};exports.AuthProvider=m,exports.Descope=w,exports.SignInFlow=e=>r.default.createElement(w,{...e,flowId:"sign-in"}),exports.SignUpFlow=e=>r.default.createElement(w,{...e,flowId:"sign-up"}),exports.SignUpOrInFlow=e=>r.default.createElement(w,{...e,flowId:"sign-up-or-in"}),exports.getJwtPermissions=h,exports.getJwtRoles=k,exports.getRefreshToken=g,exports.getSessionToken=p,exports.refresh=(e=g())=>d?.refresh(e),exports.useDescope=()=>{const{logout:t,logoutAll:s}=S();return e.useMemo((()=>({logoutAll:s,logout:t})),[s,t])},exports.useSession=()=>{const{session:t,isSessionLoading:s,fetchSession:o}=S(),r=e.useRef(s);return e.useMemo((()=>{r.current=s}),[s]),e.useMemo((()=>{t||s||(r.current=!0)}),[o]),e.useEffect((()=>{t||s||o()}),[o]),{isSessionLoading:r.current,sessionToken:t,isAuthenticated:!!t}},exports.useUser=()=>{const{user:t,fetchUser:s,isUserLoading:o,session:r}=S(),[n,u]=e.useState(!1),i=e.useRef(o),a=e.useMemo((()=>!t&&!o&&r&&!n),[s,r,n]);return e.useMemo((()=>{i.current=o}),[o]),e.useMemo((()=>{a&&(i.current=!0)}),[a]),e.useEffect((()=>{a&&(u(!0),s())}),[a]),{isUserLoading:i.current,user:t}};
|
|
2
2
|
//# sourceMappingURL=index.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../../src/hooks/Context.ts","../../src/utils.ts","../../src/constants.ts","../../src/sdk.ts","../../src/components/AuthProvider/AuthProvider.tsx","../../src/components/AuthProvider/useSdk.ts","../../src/components/Descope.tsx","../../src/hooks/useContext.ts","../../src/components/DefaultFlows.tsx","../../src/hooks/useDescope.ts","../../src/hooks/useSession.ts","../../src/hooks/useUser.ts"],"sourcesContent":["import React from 'react';\nimport { IContext } from '../types';\n\nconst Context = React.createContext<IContext>(undefined);\n\nexport default Context;\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\nexport const wrapInTry =\n\t<T extends Array<any>, U>(fn: (...args: T) => U) =>\n\t(...args: T): U => {\n\t\tlet res: U;\n\t\ttry {\n\t\t\tres = fn(...args);\n\t\t} catch (err) {\n\t\t\tconsole.error(err); // eslint-disable-line no-console\n\t\t}\n\t\treturn res;\n\t};\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\n// This sdk can be used in SSR apps\nexport const IS_BROWSER = typeof window !== 'undefined';\n","import createSdk from '@descope/web-js-sdk';\nimport { IS_BROWSER } from './constants';\nimport { wrapInTry } from './utils';\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: IS_BROWSER as true,\n\t\tautoRefresh: IS_BROWSER as 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 = () => {\n\tif (IS_BROWSER) {\n\t\treturn sdkInstance?.getSessionToken();\n\t}\n\n\t// eslint-disable-next-line no-console\n\tconsole.warn('Get session token is not supported in SSR');\n\treturn '';\n};\n\nexport const getRefreshToken = () => {\n\tif (IS_BROWSER) {\n\t\treturn sdkInstance?.getRefreshToken();\n\t}\n\t// eslint-disable-next-line no-console\n\tconsole.warn('Get refresh token is not supported in SSR');\n\treturn '';\n};\n\nexport const getJwtPermissions = wrapInTry(\n\t(token = getSessionToken(), tenant?: string) =>\n\t\tsdkInstance?.getJwtPermissions(token, tenant)\n);\n\nexport const getJwtRoles = wrapInTry(\n\t(token = getSessionToken(), tenant?: string) =>\n\t\tsdkInstance?.getJwtRoles(token, tenant)\n);\n\nexport const refresh = (token = getRefreshToken()) =>\n\tsdkInstance?.refresh(token);\n\nexport default createSdkWrapper;\n","import React, { FC, useCallback, useEffect, useMemo, useState } from 'react';\nimport Context from '../../hooks/Context';\nimport { IContext, User } from '../../types';\nimport { withValidation } from '../../utils';\nimport useSdk from './useSdk';\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 { baseHeaders } from '../../constants';\nimport createSdk from '../../sdk';\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, sessionTokenViaCookie]);\n","import React, {\n\tlazy,\n\tSuspense,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseState\n} from 'react';\nimport { baseHeaders } from '../constants';\nimport Context from '../hooks/Context';\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\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\ttelemetryKey,\n\t\t\tredirectUrl,\n\t\t\tautoFocus\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\ttelemetryKey={telemetryKey}\n\t\t\t\tredirect-url={redirectUrl}\n\t\t\t\tauto-focus={autoFocus}\n\t\t\t/>\n\t\t)\n\t};\n});\n\nconst Descope = React.forwardRef<HTMLElement, DescopeProps>(\n\t(\n\t\t{\n\t\t\tflowId,\n\t\t\tonSuccess,\n\t\t\tonError,\n\t\t\ttenant,\n\t\t\ttheme,\n\t\t\tdebug,\n\t\t\ttelemetryKey,\n\t\t\tredirectUrl,\n\t\t\tautoFocus\n\t\t},\n\t\tref\n\t) => {\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\tasync (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\tawait sdk.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\ttelemetryKey={telemetryKey}\n\t\t\t\t\t\tredirectUrl={redirectUrl}\n\t\t\t\t\t\tautoFocus={autoFocus}\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, useMemo, useRef } from 'react';\nimport useContext from './useContext';\n\nconst useSession = () => {\n\tconst { session, isSessionLoading, fetchSession } = useContext();\n\n\t// when session should be received, we want the return value of \"isSessionLoading\" to be true starting from the first call\n\t// (and not only when receiving an update from the context)\n\tconst isLoading = useRef(isSessionLoading);\n\n\t// we want this to happen before returning a value so we are using \"useMemo\" and not \"useEffect\"\n\tuseMemo(() => {\n\t\tisLoading.current = isSessionLoading;\n\t}, [isSessionLoading]);\n\n\t// we want this to happen before returning a value so we are using \"useMemo\" and not \"useEffect\"\n\tuseMemo(() => {\n\t\tif (!session && !isSessionLoading) {\n\t\t\tisLoading.current = true;\n\t\t}\n\t}, [fetchSession]);\n\n\tuseEffect(() => {\n\t\tif (!session && !isSessionLoading) {\n\t\t\tfetchSession();\n\t\t}\n\t}, [fetchSession]);\n\n\treturn {\n\t\tisSessionLoading: isLoading.current,\n\t\tsessionToken: session,\n\t\tisAuthenticated: !!session\n\t};\n};\n\nexport default useSession;\n","import { useEffect, useMemo, useRef, useState } from 'react';\nimport useContext from './useContext';\n\nconst useUser = () => {\n\tconst { user, fetchUser, isUserLoading, session } = useContext();\n\tconst [isInit, setIsInit] = useState(false); // we want to get the user only in the first time we got a session\n\n\t// when session should be received, we want the return value of \"isUserLoading\" to be true starting from the first call\n\t// (and not only when receiving an update from the context)\n\tconst isLoading = useRef(isUserLoading);\n\n\tconst shouldFetchUser = useMemo(\n\t\t() => !user && !isUserLoading && session && !isInit,\n\t\t[fetchUser, session, isInit]\n\t);\n\n\t// we want this to happen before returning a value so we are using \"useMemo\" and not \"useEffect\"\n\tuseMemo(() => {\n\t\tisLoading.current = isUserLoading;\n\t}, [isUserLoading]);\n\n\t// we want this to happen before returning a value so we are using \"useMemo\" and not \"useEffect\"\n\tuseMemo(() => {\n\t\tif (shouldFetchUser) {\n\t\t\tisLoading.current = true;\n\t\t}\n\t}, [shouldFetchUser]);\n\n\tuseEffect(() => {\n\t\tif (shouldFetchUser) {\n\t\t\tsetIsInit(true);\n\t\t\tfetchUser();\n\t\t}\n\t}, [shouldFetchUser]);\n\n\treturn { isUserLoading: isLoading.current, user };\n};\n\nexport default useUser;\n"],"names":["Context","React","createContext","undefined","withValidation","fn","args","Error","wrapInTry","res","err","console","error","baseHeaders","IS_BROWSER","window","sdkInstance","createSdkWrapper","config","sdk","createSdk","persistTokens","autoRefresh","projectId","getSessionToken","warn","getRefreshToken","getJwtPermissions","token","tenant","getJwtRoles","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","theme","debug","telemetryKey","redirectUrl","autoFocus","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","isLoading","useRef","current","sessionToken","isAuthenticated","isInit","setIsInit","shouldFetchUser"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../src/hooks/Context.ts","../../src/utils.ts","../../src/constants.ts","../../src/sdk.ts","../../src/components/AuthProvider/AuthProvider.tsx","../../src/components/AuthProvider/useSdk.ts","../../src/components/Descope.tsx","../../src/hooks/useContext.ts","../../src/components/DefaultFlows.tsx","../../src/hooks/useDescope.ts","../../src/hooks/useSession.ts","../../src/hooks/useUser.ts"],"sourcesContent":["import React from 'react';\nimport { IContext } from '../types';\n\nconst Context = React.createContext<IContext>(undefined);\n\nexport default Context;\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\nexport const wrapInTry =\n\t<T extends Array<any>, U>(fn: (...args: T) => U) =>\n\t(...args: T): U => {\n\t\tlet res: U;\n\t\ttry {\n\t\t\tres = fn(...args);\n\t\t} catch (err) {\n\t\t\tconsole.error(err); // eslint-disable-line no-console\n\t\t}\n\t\treturn res;\n\t};\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\n// This sdk can be used in SSR apps\nexport const IS_BROWSER = typeof window !== 'undefined';\n","import createSdk from '@descope/web-js-sdk';\nimport { IS_BROWSER } from './constants';\nimport { wrapInTry } from './utils';\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: IS_BROWSER as true,\n\t\tautoRefresh: IS_BROWSER as 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 = () => {\n\tif (IS_BROWSER) {\n\t\treturn sdkInstance?.getSessionToken();\n\t}\n\n\t// eslint-disable-next-line no-console\n\tconsole.warn('Get session token is not supported in SSR');\n\treturn '';\n};\n\nexport const getRefreshToken = () => {\n\tif (IS_BROWSER) {\n\t\treturn sdkInstance?.getRefreshToken();\n\t}\n\t// eslint-disable-next-line no-console\n\tconsole.warn('Get refresh token is not supported in SSR');\n\treturn '';\n};\n\nexport const getJwtPermissions = wrapInTry(\n\t(token = getSessionToken(), tenant?: string) =>\n\t\tsdkInstance?.getJwtPermissions(token, tenant)\n);\n\nexport const getJwtRoles = wrapInTry(\n\t(token = getSessionToken(), tenant?: string) =>\n\t\tsdkInstance?.getJwtRoles(token, tenant)\n);\n\nexport const refresh = (token = getRefreshToken()) =>\n\tsdkInstance?.refresh(token);\n\nexport default createSdkWrapper;\n","import React, { FC, useCallback, useEffect, useMemo, useState } from 'react';\nimport Context from '../../hooks/Context';\nimport { IContext, User } from '../../types';\nimport { withValidation } from '../../utils';\nimport useSdk from './useSdk';\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 { baseHeaders } from '../../constants';\nimport createSdk from '../../sdk';\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, sessionTokenViaCookie]);\n","import React, {\n\tlazy,\n\tSuspense,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseState\n} from 'react';\nimport { baseHeaders } from '../constants';\nimport Context from '../hooks/Context';\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\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\ttelemetryKey,\n\t\t\tredirectUrl,\n\t\t\tautoFocus\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\ttelemetryKey={telemetryKey}\n\t\t\t\tredirect-url={redirectUrl}\n\t\t\t\tauto-focus={autoFocus}\n\t\t\t/>\n\t\t)\n\t};\n});\n\nconst Descope = React.forwardRef<HTMLElement, DescopeProps>(\n\t(\n\t\t{\n\t\t\tflowId,\n\t\t\tonSuccess,\n\t\t\tonError,\n\t\t\ttenant,\n\t\t\ttheme,\n\t\t\tdebug,\n\t\t\ttelemetryKey,\n\t\t\tredirectUrl,\n\t\t\tautoFocus\n\t\t},\n\t\tref\n\t) => {\n\t\tconst [innerRef, setInnerRef] = useState(null);\n\n\t\tuseImperativeHandle(ref, () => innerRef);\n\n\t\tconst { projectId, baseUrl, sdk } = React.useContext(Context);\n\n\t\tconst handleSuccess = useCallback(\n\t\t\tasync (e: CustomEvent) => {\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\tawait sdk.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[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\ttelemetryKey={telemetryKey}\n\t\t\t\t\t\tredirectUrl={redirectUrl}\n\t\t\t\t\t\tautoFocus={autoFocus}\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, useMemo, useRef } from 'react';\nimport useContext from './useContext';\n\nconst useSession = () => {\n\tconst { session, isSessionLoading, fetchSession } = useContext();\n\n\t// when session should be received, we want the return value of \"isSessionLoading\" to be true starting from the first call\n\t// (and not only when receiving an update from the context)\n\tconst isLoading = useRef(isSessionLoading);\n\n\t// we want this to happen before returning a value so we are using \"useMemo\" and not \"useEffect\"\n\tuseMemo(() => {\n\t\tisLoading.current = isSessionLoading;\n\t}, [isSessionLoading]);\n\n\t// we want this to happen before returning a value so we are using \"useMemo\" and not \"useEffect\"\n\tuseMemo(() => {\n\t\tif (!session && !isSessionLoading) {\n\t\t\tisLoading.current = true;\n\t\t}\n\t}, [fetchSession]);\n\n\tuseEffect(() => {\n\t\tif (!session && !isSessionLoading) {\n\t\t\tfetchSession();\n\t\t}\n\t}, [fetchSession]);\n\n\treturn {\n\t\tisSessionLoading: isLoading.current,\n\t\tsessionToken: session,\n\t\tisAuthenticated: !!session\n\t};\n};\n\nexport default useSession;\n","import { useEffect, useMemo, useRef, useState } from 'react';\nimport useContext from './useContext';\n\nconst useUser = () => {\n\tconst { user, fetchUser, isUserLoading, session } = useContext();\n\tconst [isInit, setIsInit] = useState(false); // we want to get the user only in the first time we got a session\n\n\t// when session should be received, we want the return value of \"isUserLoading\" to be true starting from the first call\n\t// (and not only when receiving an update from the context)\n\tconst isLoading = useRef(isUserLoading);\n\n\tconst shouldFetchUser = useMemo(\n\t\t() => !user && !isUserLoading && session && !isInit,\n\t\t[fetchUser, session, isInit]\n\t);\n\n\t// we want this to happen before returning a value so we are using \"useMemo\" and not \"useEffect\"\n\tuseMemo(() => {\n\t\tisLoading.current = isUserLoading;\n\t}, [isUserLoading]);\n\n\t// we want this to happen before returning a value so we are using \"useMemo\" and not \"useEffect\"\n\tuseMemo(() => {\n\t\tif (shouldFetchUser) {\n\t\t\tisLoading.current = true;\n\t\t}\n\t}, [shouldFetchUser]);\n\n\tuseEffect(() => {\n\t\tif (shouldFetchUser) {\n\t\t\tsetIsInit(true);\n\t\t\tfetchUser();\n\t\t}\n\t}, [shouldFetchUser]);\n\n\treturn { isUserLoading: isLoading.current, user };\n};\n\nexport default useUser;\n"],"names":["Context","React","createContext","undefined","withValidation","fn","args","Error","wrapInTry","res","err","console","error","baseHeaders","IS_BROWSER","window","sdkInstance","createSdkWrapper","config","sdk","createSdk","persistTokens","autoRefresh","projectId","getSessionToken","warn","getRefreshToken","getJwtPermissions","token","tenant","getJwtRoles","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","theme","debug","telemetryKey","redirectUrl","autoFocus","ref","Descope","forwardRef","onSuccess","onError","setInnerRef","useImperativeHandle","useContext","handleSuccess","e","httpClient","hooks","afterRequest","Response","JSON","stringify","detail","ele","addEventListener","removeEventListener","Suspense","fallback","ctx","props","isLoading","useRef","current","sessionToken","isAuthenticated","isInit","setIsInit","shouldFetchUser"],"mappings":"qfAGA,MAAMA,EAAUC,EAAAA,QAAMC,mBAAwBC,GCEjCC,EACcC,GAC1B,IAAIC,KACH,IAAKD,EACJ,MAAME,MACL,0HAGF,OAAOF,KAAMC,EAAK,EAGPE,EACcH,GAC1B,IAAIC,KACH,IAAIG,EACJ,IACCA,EAAMJ,KAAMC,EAGZ,CAFC,MAAOI,GACRC,QAAQC,MAAMF,EACd,CACD,OAAOD,CAAG,ECtBCI,EAAc,CAC1B,qBAAsB,QACtB,wBAAyB,SAIbC,EAA+B,oBAAXC,OCJjC,IAAIC,EAEJ,MAAMC,EACLC,IAEA,MAAMC,EAAMC,EAAAA,QAAU,IAClBF,EACHG,cAAeP,EACfQ,YAAaR,IAId,OAFAE,EAAcG,EAEPA,CAAG,EAUXH,EAAcC,EAAiB,CAAEM,UAAW,aAErC,MAAMC,EAAkB,IAC1BV,EACIE,GAAaQ,mBAIrBb,QAAQc,KAAK,6CACN,IAGKC,EAAkB,IAC1BZ,EACIE,GAAaU,mBAGrBf,QAAQc,KAAK,6CACN,IAGKE,EAAoBnB,GAChC,CAACoB,EAAQJ,IAAmBK,IAC3Bb,GAAaW,kBAAkBC,EAAOC,KAG3BC,EAActB,GAC1B,CAACoB,EAAQJ,IAAmBK,IAC3Bb,GAAac,YAAYF,EAAOC,KCtClC,MAAME,EAAuC,EAC5CR,YACAS,UACAC,wBACAC,eAEA,MAAOC,EAAMC,GAAWC,EAAQA,YACzBC,EAASC,GAAcF,EAAQA,YAE/BG,EAAeC,GAAoBJ,EAAQA,UAAC,IAC5CK,EAAkBC,GAAuBN,EAAQA,UAAC,GAEnDlB,ECpBQ,GACdI,YACAS,UACAC,2BAEAW,EAAOA,SAAC,KACP,GAAKrB,EAGL,OAAOH,EAAU,CAChBG,YACAS,UACAC,wBACApB,cACAgC,cAAc,EACdvB,aAAa,GACZ,GACA,CAACC,EAAWS,EAASC,IDGZa,CAAO,CAAEvB,YAAWS,UAASC,0BAEzCc,EAAAA,WAAU,KACT,GAAI5B,EAAK,CACR,MAAM6B,EAA0B7B,EAAI8B,qBAAqBV,GACnDW,EAAkB/B,EAAIgC,aAAaf,GAEzC,MAAO,KACNY,IACAE,GAAiB,CAElB,CACe,GACd,CAAC/B,IAEJ,MAAMiC,EAAeC,EAAAA,aAAY,KAChCV,GAAoB,GACpBvC,EAAee,GAAKmC,QAApBlD,GAA+BmD,MAAK,KACnCZ,GAAoB,EAAM,GACzB,GACA,CAACxB,IAEEqC,EAAYH,EAAAA,aAAY,KAC7BZ,GAAiB,GACjBrC,EAAee,EAAIsC,GAAnBrD,GAAyBmD,MAAK,KAC7Bd,GAAiB,EAAM,GACtB,GACA,CAACtB,IAEEuC,EAAYL,EAAWA,YAACjD,EAAee,GAAKuC,WAAY,CAACvC,IAEzDwC,EAASN,EAAWA,YAACjD,EAAee,GAAKwC,QAAS,CAACxC,IAEnDyC,EAAQhB,EAAAA,SACb,KAAO,CACNY,YACArB,OACAK,gBACAY,eACAd,UACAI,mBACAiB,SACAD,YACAnC,YACAS,UACAI,UACAG,aACApB,SAED,CACCqC,EACArB,EACAK,EACAY,EACAd,EACAI,EACAiB,EACAD,EACAnC,EACAS,EACAI,EACAG,EACApB,IAGF,OAAOlB,EAAA,QAAA4D,cAAC7D,EAAQ8D,SAAQ,CAACF,MAAOA,GAAQ1B,EAA4B,EAGrEH,EAAagC,aAAe,CAC3B/B,QAAS,GACTE,cAAU/B,EACV8B,uBAAuB,GEvFxB,MAAM+B,EAAYC,EAAIA,MAACC,iBACDC,QAAOC,UAAAb,MAAA,WAAA,OAAAc,EAAAC,QAAA,+BAErBC,QAAQC,mBAAqB,CAAE3D,eAE/B,CACN0D,QAAS,EACRhD,YACAkD,SACAzC,UACA0C,WACA7C,SACA8C,QACAC,QACAC,eACAC,cACAC,eAEA9E,EAAAA,QACa4D,cAAA,aAAA,CAAA,aAAAtC,YACHkD,EAAM,WACLzC,EACVgD,IAAKN,EACL7C,OAAQA,EACR8C,MAAOA,EACPC,MAAOA,EACPC,aAAcA,EAAY,eACZC,EAAW,aACbC,QAMVE,EAAUhF,EAAK,QAACiF,YACrB,EAEET,SACAU,YACAC,UACAvD,SACA8C,QACAC,QACAC,eACAC,cACAC,aAEDC,KAEA,MAAON,EAAUW,GAAehD,EAAQA,SAAC,MAEzCiD,sBAAoBN,GAAK,IAAMN,IAE/B,MAAMnD,UAAEA,EAASS,QAAEA,EAAOb,IAAEA,GAAQlB,UAAMsF,WAAWvF,GAE/CwF,EAAgBnC,eACrBa,MAAOuB,UAGAtE,EAAIuE,WAAWC,MAAMC,aAC1B,CAAA,EACA,IAAIC,SAASC,KAAKC,UAAUN,EAAEO,UAE3Bb,GACHA,EAAUM,EACV,GAEF,CAACN,IAeF,OAZApC,EAAAA,WAAU,KACT,MAAMkD,EAAMvB,EAIZ,OAHAuB,GAAKC,iBAAiB,UAAWV,GAC7BJ,GAASa,GAAKC,iBAAiB,QAASd,GAErC,KACFA,GAASa,GAAKE,oBAAoB,QAASf,GAE/Ca,GAAKE,oBAAoB,UAAWX,EAAc,CAClD,GACC,CAACd,EAAUU,EAASI,IAStBvF,UAAA4D,cAAA,OAAA,KACC5D,EAAAA,QAAA4D,cAACuC,EAAAA,SAAQ,CAACC,SAAU,MACnBpG,EAAAA,QAAC4D,cAAAG,GACAzC,UAAWA,EACXkD,OAAQA,EACRzC,QAASA,EACT0C,SAAUW,EACVxD,OAAQA,EACR8C,MAAOA,EACPC,MAAOA,EACPC,aAAcA,EACdC,YAAaA,EACbC,UAAWA,KAIb,IAIJE,EAAQlB,aAAe,CACtBqB,aAASjF,EACTgF,eAAWhF,GCzHZ,IAAAoF,EAAe,KACd,MAAMe,EAAMf,aAAWvF,GACvB,IAAKsG,EACJ,MAAM/F,MACL,iEAIF,OAAO+F,CAAG,8DCPgBC,GAC1BtG,wBAACgF,EAAO,IAAKsB,EAAO9B,OAAO,+BAGD8B,GAC1BtG,wBAACgF,EAAO,IAAKsB,EAAO9B,OAAO,mCAGG8B,GAC9BtG,EAAAA,sBAACgF,EAAO,IAAKsB,EAAO9B,OAAO,wIL6CL,CAAC7C,EAAQF,MAC/BV,GAAasC,QAAQ1B,sBMvDH,KAClB,MAAM+B,OAAEA,EAAMD,UAAEA,GAAc6B,IAE9B,OAAO3C,EAAOA,SACb,KAAO,CACNc,YACAC,YAED,CAACD,EAAWC,GACZ,qBCViB,KAClB,MAAMrB,QAAEA,EAAOI,iBAAEA,EAAgBU,aAAEA,GAAiBmC,IAI9CiB,EAAYC,SAAO/D,GAoBzB,OAjBAE,EAAAA,SAAQ,KACP4D,EAAUE,QAAUhE,CAAgB,GAClC,CAACA,IAGJE,EAAAA,SAAQ,KACFN,GAAYI,IAChB8D,EAAUE,SAAU,EACpB,GACC,CAACtD,IAEJL,EAAAA,WAAU,KACJT,GAAYI,GAChBU,GACA,GACC,CAACA,IAEG,CACNV,iBAAkB8D,EAAUE,QAC5BC,aAAcrE,EACdsE,kBAAmBtE,EACnB,kBC7Bc,KACf,MAAMH,KAAEA,EAAIqB,UAAEA,EAAShB,cAAEA,EAAaF,QAAEA,GAAYiD,KAC7CsB,EAAQC,GAAazE,EAAQA,UAAC,GAI/BmE,EAAYC,SAAOjE,GAEnBuE,EAAkBnE,EAAOA,SAC9B,KAAOT,IAASK,GAAiBF,IAAYuE,GAC7C,CAACrD,EAAWlB,EAASuE,IAsBtB,OAlBAjE,EAAAA,SAAQ,KACP4D,EAAUE,QAAUlE,CAAa,GAC/B,CAACA,IAGJI,EAAAA,SAAQ,KACHmE,IACHP,EAAUE,SAAU,EACpB,GACC,CAACK,IAEJhE,EAAAA,WAAU,KACLgE,IACHD,GAAU,GACVtD,IACA,GACC,CAACuD,IAEG,CAAEvE,cAAegE,EAAUE,QAASvE,OAAM"}
|
package/dist/index.d.ts
CHANGED
|
@@ -133,76 +133,126 @@ declare const createSdkWrapper: <P extends Omit<{
|
|
|
133
133
|
whatsapp: (loginId: string, code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
134
134
|
};
|
|
135
135
|
signIn: {
|
|
136
|
-
email: (loginId: string) => Promise<_descope_core_js_sdk.SdkResponse<
|
|
137
|
-
|
|
138
|
-
|
|
136
|
+
email: (loginId: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
137
|
+
maskedEmail: string;
|
|
138
|
+
}>>;
|
|
139
|
+
sms: (loginId: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
140
|
+
maskedPhone: string;
|
|
141
|
+
}>>;
|
|
142
|
+
whatsapp: (loginId: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
143
|
+
maskedPhone: string;
|
|
144
|
+
}>>;
|
|
139
145
|
};
|
|
140
146
|
signUp: {
|
|
141
147
|
email: (loginId: string, user?: {
|
|
142
148
|
email?: string;
|
|
143
149
|
name?: string;
|
|
144
150
|
phone?: string;
|
|
145
|
-
}) => Promise<_descope_core_js_sdk.SdkResponse<
|
|
151
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
152
|
+
maskedEmail: string;
|
|
153
|
+
}>>;
|
|
146
154
|
sms: (loginId: string, user?: {
|
|
147
155
|
email?: string;
|
|
148
156
|
name?: string;
|
|
149
157
|
phone?: string;
|
|
150
|
-
}) => Promise<_descope_core_js_sdk.SdkResponse<
|
|
158
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
159
|
+
maskedPhone: string;
|
|
160
|
+
}>>;
|
|
151
161
|
whatsapp: (loginId: string, user?: {
|
|
152
162
|
email?: string;
|
|
153
163
|
name?: string;
|
|
154
164
|
phone?: string;
|
|
155
|
-
}) => Promise<_descope_core_js_sdk.SdkResponse<
|
|
165
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
166
|
+
maskedPhone: string;
|
|
167
|
+
}>>;
|
|
156
168
|
};
|
|
157
169
|
signUpOrIn: {
|
|
158
|
-
email: (loginId: string) => Promise<_descope_core_js_sdk.SdkResponse<
|
|
159
|
-
|
|
160
|
-
|
|
170
|
+
email: (loginId: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
171
|
+
maskedEmail: string;
|
|
172
|
+
}>>;
|
|
173
|
+
sms: (loginId: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
174
|
+
maskedPhone: string;
|
|
175
|
+
}>>;
|
|
176
|
+
whatsapp: (loginId: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
177
|
+
maskedPhone: string;
|
|
178
|
+
}>>;
|
|
161
179
|
};
|
|
162
180
|
update: {
|
|
163
|
-
email: (loginId: string, email: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<
|
|
181
|
+
email: (loginId: string, email: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
182
|
+
maskedEmail: string;
|
|
183
|
+
}>>;
|
|
164
184
|
phone: {
|
|
165
|
-
email: (loginId: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<
|
|
166
|
-
|
|
167
|
-
|
|
185
|
+
email: (loginId: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
186
|
+
maskedPhone: string;
|
|
187
|
+
}>>;
|
|
188
|
+
sms: (loginId: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
189
|
+
maskedPhone: string;
|
|
190
|
+
}>>;
|
|
191
|
+
whatsapp: (loginId: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
192
|
+
maskedPhone: string;
|
|
193
|
+
}>>;
|
|
168
194
|
};
|
|
169
195
|
};
|
|
170
196
|
};
|
|
171
197
|
magicLink: {
|
|
172
198
|
verify: (token: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
173
199
|
signIn: {
|
|
174
|
-
email: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<
|
|
175
|
-
|
|
176
|
-
|
|
200
|
+
email: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
201
|
+
maskedEmail: string;
|
|
202
|
+
}>>;
|
|
203
|
+
sms: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
204
|
+
maskedPhone: string;
|
|
205
|
+
}>>;
|
|
206
|
+
whatsapp: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
207
|
+
maskedPhone: string;
|
|
208
|
+
}>>;
|
|
177
209
|
};
|
|
178
210
|
signUp: {
|
|
179
211
|
email: (loginId: string, uri: string, user?: {
|
|
180
212
|
email?: string;
|
|
181
213
|
name?: string;
|
|
182
214
|
phone?: string;
|
|
183
|
-
}) => Promise<_descope_core_js_sdk.SdkResponse<
|
|
215
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
216
|
+
maskedEmail: string;
|
|
217
|
+
}>>;
|
|
184
218
|
sms: (loginId: string, uri: string, user?: {
|
|
185
219
|
email?: string;
|
|
186
220
|
name?: string;
|
|
187
221
|
phone?: string;
|
|
188
|
-
}) => Promise<_descope_core_js_sdk.SdkResponse<
|
|
222
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
223
|
+
maskedPhone: string;
|
|
224
|
+
}>>;
|
|
189
225
|
whatsapp: (loginId: string, uri: string, user?: {
|
|
190
226
|
email?: string;
|
|
191
227
|
name?: string;
|
|
192
228
|
phone?: string;
|
|
193
|
-
}) => Promise<_descope_core_js_sdk.SdkResponse<
|
|
229
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
230
|
+
maskedPhone: string;
|
|
231
|
+
}>>;
|
|
194
232
|
};
|
|
195
233
|
signUpOrIn: {
|
|
196
|
-
email: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<
|
|
197
|
-
|
|
198
|
-
|
|
234
|
+
email: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
235
|
+
maskedEmail: string;
|
|
236
|
+
}>>;
|
|
237
|
+
sms: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
238
|
+
maskedPhone: string;
|
|
239
|
+
}>>;
|
|
240
|
+
whatsapp: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
241
|
+
maskedPhone: string;
|
|
242
|
+
}>>;
|
|
199
243
|
};
|
|
200
244
|
update: {
|
|
201
245
|
email: (loginId: string, email: string, URI?: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
202
246
|
phone: {
|
|
203
|
-
email: (loginId: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<
|
|
204
|
-
|
|
205
|
-
|
|
247
|
+
email: (loginId: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
248
|
+
maskedPhone: string;
|
|
249
|
+
}>>;
|
|
250
|
+
sms: (loginId: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
251
|
+
maskedPhone: string;
|
|
252
|
+
}>>;
|
|
253
|
+
whatsapp: (loginId: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
254
|
+
maskedPhone: string;
|
|
255
|
+
}>>;
|
|
206
256
|
};
|
|
207
257
|
};
|
|
208
258
|
};
|
|
@@ -289,6 +339,29 @@ declare const createSdkWrapper: <P extends Omit<{
|
|
|
289
339
|
}, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
290
340
|
update: (loginId: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.TOTPResponse>>;
|
|
291
341
|
};
|
|
342
|
+
password: {
|
|
343
|
+
signUp: (loginId: string, password: string, user?: {
|
|
344
|
+
email?: string;
|
|
345
|
+
name?: string;
|
|
346
|
+
phone?: string;
|
|
347
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
348
|
+
signIn: (loginId: string, password: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
349
|
+
sendReset: (loginId: string, redirectUrl?: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
350
|
+
resetMethod: string;
|
|
351
|
+
pendingRef?: string;
|
|
352
|
+
linkId?: string;
|
|
353
|
+
maskedEmail: string;
|
|
354
|
+
}>>;
|
|
355
|
+
update: (loginId: string, newPassword: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
356
|
+
replace: (loginId: string, oldPassword: string, newPassword: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
357
|
+
policy: () => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
358
|
+
minLength: number;
|
|
359
|
+
lowercase: boolean;
|
|
360
|
+
uppercase: boolean;
|
|
361
|
+
number: boolean;
|
|
362
|
+
nonAlphanumeric: boolean;
|
|
363
|
+
}>>;
|
|
364
|
+
};
|
|
292
365
|
refresh: (token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
293
366
|
logout: (token?: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
294
367
|
logoutAll: (token?: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
@@ -411,76 +484,126 @@ declare const createSdkWrapper: <P extends Omit<{
|
|
|
411
484
|
whatsapp: (loginId: string, code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
412
485
|
};
|
|
413
486
|
signIn: {
|
|
414
|
-
email: (loginId: string) => Promise<_descope_core_js_sdk.SdkResponse<
|
|
415
|
-
|
|
416
|
-
|
|
487
|
+
email: (loginId: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
488
|
+
maskedEmail: string;
|
|
489
|
+
}>>;
|
|
490
|
+
sms: (loginId: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
491
|
+
maskedPhone: string;
|
|
492
|
+
}>>;
|
|
493
|
+
whatsapp: (loginId: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
494
|
+
maskedPhone: string;
|
|
495
|
+
}>>;
|
|
417
496
|
};
|
|
418
497
|
signUp: {
|
|
419
498
|
email: (loginId: string, user?: {
|
|
420
499
|
email?: string;
|
|
421
500
|
name?: string;
|
|
422
501
|
phone?: string;
|
|
423
|
-
}) => Promise<_descope_core_js_sdk.SdkResponse<
|
|
502
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
503
|
+
maskedEmail: string;
|
|
504
|
+
}>>;
|
|
424
505
|
sms: (loginId: string, user?: {
|
|
425
506
|
email?: string;
|
|
426
507
|
name?: string;
|
|
427
508
|
phone?: string;
|
|
428
|
-
}) => Promise<_descope_core_js_sdk.SdkResponse<
|
|
509
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
510
|
+
maskedPhone: string;
|
|
511
|
+
}>>;
|
|
429
512
|
whatsapp: (loginId: string, user?: {
|
|
430
513
|
email?: string;
|
|
431
514
|
name?: string;
|
|
432
515
|
phone?: string;
|
|
433
|
-
}) => Promise<_descope_core_js_sdk.SdkResponse<
|
|
516
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
517
|
+
maskedPhone: string;
|
|
518
|
+
}>>;
|
|
434
519
|
};
|
|
435
520
|
signUpOrIn: {
|
|
436
|
-
email: (loginId: string) => Promise<_descope_core_js_sdk.SdkResponse<
|
|
437
|
-
|
|
438
|
-
|
|
521
|
+
email: (loginId: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
522
|
+
maskedEmail: string;
|
|
523
|
+
}>>;
|
|
524
|
+
sms: (loginId: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
525
|
+
maskedPhone: string;
|
|
526
|
+
}>>;
|
|
527
|
+
whatsapp: (loginId: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
528
|
+
maskedPhone: string;
|
|
529
|
+
}>>;
|
|
439
530
|
};
|
|
440
531
|
update: {
|
|
441
|
-
email: (loginId: string, email: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<
|
|
532
|
+
email: (loginId: string, email: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
533
|
+
maskedEmail: string;
|
|
534
|
+
}>>;
|
|
442
535
|
phone: {
|
|
443
|
-
email: (loginId: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<
|
|
444
|
-
|
|
445
|
-
|
|
536
|
+
email: (loginId: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
537
|
+
maskedPhone: string;
|
|
538
|
+
}>>;
|
|
539
|
+
sms: (loginId: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
540
|
+
maskedPhone: string;
|
|
541
|
+
}>>;
|
|
542
|
+
whatsapp: (loginId: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
543
|
+
maskedPhone: string;
|
|
544
|
+
}>>;
|
|
446
545
|
};
|
|
447
546
|
};
|
|
448
547
|
};
|
|
449
548
|
magicLink: {
|
|
450
549
|
verify: (token: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
451
550
|
signIn: {
|
|
452
|
-
email: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<
|
|
453
|
-
|
|
454
|
-
|
|
551
|
+
email: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
552
|
+
maskedEmail: string;
|
|
553
|
+
}>>;
|
|
554
|
+
sms: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
555
|
+
maskedPhone: string;
|
|
556
|
+
}>>;
|
|
557
|
+
whatsapp: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
558
|
+
maskedPhone: string;
|
|
559
|
+
}>>;
|
|
455
560
|
};
|
|
456
561
|
signUp: {
|
|
457
562
|
email: (loginId: string, uri: string, user?: {
|
|
458
563
|
email?: string;
|
|
459
564
|
name?: string;
|
|
460
565
|
phone?: string;
|
|
461
|
-
}) => Promise<_descope_core_js_sdk.SdkResponse<
|
|
566
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
567
|
+
maskedEmail: string;
|
|
568
|
+
}>>;
|
|
462
569
|
sms: (loginId: string, uri: string, user?: {
|
|
463
570
|
email?: string;
|
|
464
571
|
name?: string;
|
|
465
572
|
phone?: string;
|
|
466
|
-
}) => Promise<_descope_core_js_sdk.SdkResponse<
|
|
573
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
574
|
+
maskedPhone: string;
|
|
575
|
+
}>>;
|
|
467
576
|
whatsapp: (loginId: string, uri: string, user?: {
|
|
468
577
|
email?: string;
|
|
469
578
|
name?: string;
|
|
470
579
|
phone?: string;
|
|
471
|
-
}) => Promise<_descope_core_js_sdk.SdkResponse<
|
|
580
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
581
|
+
maskedPhone: string;
|
|
582
|
+
}>>;
|
|
472
583
|
};
|
|
473
584
|
signUpOrIn: {
|
|
474
|
-
email: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<
|
|
475
|
-
|
|
476
|
-
|
|
585
|
+
email: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
586
|
+
maskedEmail: string;
|
|
587
|
+
}>>;
|
|
588
|
+
sms: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
589
|
+
maskedPhone: string;
|
|
590
|
+
}>>;
|
|
591
|
+
whatsapp: (loginId: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
592
|
+
maskedPhone: string;
|
|
593
|
+
}>>;
|
|
477
594
|
};
|
|
478
595
|
update: {
|
|
479
596
|
email: (loginId: string, email: string, URI?: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
480
597
|
phone: {
|
|
481
|
-
email: (loginId: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<
|
|
482
|
-
|
|
483
|
-
|
|
598
|
+
email: (loginId: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
599
|
+
maskedPhone: string;
|
|
600
|
+
}>>;
|
|
601
|
+
sms: (loginId: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
602
|
+
maskedPhone: string;
|
|
603
|
+
}>>;
|
|
604
|
+
whatsapp: (loginId: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
605
|
+
maskedPhone: string;
|
|
606
|
+
}>>;
|
|
484
607
|
};
|
|
485
608
|
};
|
|
486
609
|
};
|
|
@@ -567,6 +690,29 @@ declare const createSdkWrapper: <P extends Omit<{
|
|
|
567
690
|
}, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
568
691
|
update: (loginId: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.TOTPResponse>>;
|
|
569
692
|
};
|
|
693
|
+
password: {
|
|
694
|
+
signUp: (loginId: string, password: string, user?: {
|
|
695
|
+
email?: string;
|
|
696
|
+
name?: string;
|
|
697
|
+
phone?: string;
|
|
698
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
699
|
+
signIn: (loginId: string, password: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
700
|
+
sendReset: (loginId: string, redirectUrl?: string) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
701
|
+
resetMethod: string;
|
|
702
|
+
pendingRef?: string;
|
|
703
|
+
linkId?: string;
|
|
704
|
+
maskedEmail: string;
|
|
705
|
+
}>>;
|
|
706
|
+
update: (loginId: string, newPassword: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
707
|
+
replace: (loginId: string, oldPassword: string, newPassword: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
708
|
+
policy: () => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
709
|
+
minLength: number;
|
|
710
|
+
lowercase: boolean;
|
|
711
|
+
uppercase: boolean;
|
|
712
|
+
number: boolean;
|
|
713
|
+
nonAlphanumeric: boolean;
|
|
714
|
+
}>>;
|
|
715
|
+
};
|
|
570
716
|
refresh: (token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
571
717
|
logout: (token?: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
572
718
|
logoutAll: (token?: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
package/dist/index.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import e,{useMemo as
|
|
1
|
+
import e,{useMemo as o,useState as t,useEffect as r,useCallback as s,lazy as n,useImperativeHandle as i,Suspense as c,useContext as a,useRef as l}from"react";import u from"@descope/web-js-sdk";const d=e.createContext(void 0),f=e=>(...o)=>{if(!e)throw Error("You can only use this function after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component");return e(...o)},p=e=>(...o)=>{let t;try{t=e(...o)}catch(e){console.error(e)}return t},h={"x-descope-sdk-name":"react","x-descope-sdk-version":"1.0.2"},m="undefined"!=typeof window;let g;const k=e=>{const o=u({...e,persistTokens:m,autoRefresh:m});return g=o,o};g=k({projectId:"temp pid"});const w=()=>m?g?.getSessionToken():(console.warn("Get session token is not supported in SSR"),""),b=()=>m?g?.getRefreshToken():(console.warn("Get refresh token is not supported in SSR"),""),U=p(((e=w(),o)=>g?.getJwtPermissions(e,o))),v=p(((e=w(),o)=>g?.getJwtRoles(e,o))),y=(e=b())=>g?.refresh(e);const E=({projectId:n,baseUrl:i,sessionTokenViaCookie:c,children:a})=>{const[l,u]=t(),[p,m]=t(),[g,w]=t(!1),[b,U]=t(!1),v=(({projectId:e,baseUrl:t,sessionTokenViaCookie:r})=>o((()=>{if(e)return k({projectId:e,baseUrl:t,sessionTokenViaCookie:r,baseHeaders:h,persistToken:!0,autoRefresh:!0})}),[e,t,r]))({projectId:n,baseUrl:i,sessionTokenViaCookie:c});r((()=>{if(v){const e=v.onSessionTokenChange(m),o=v.onUserChange(u);return()=>{e(),o()}}}),[v]);const y=s((()=>{U(!0),f(v?.refresh)().then((()=>{U(!1)}))}),[v]),E=s((()=>{w(!0),f(v.me)().then((()=>{w(!1)}))}),[v]),I=s(f(v?.logoutAll),[v]),S=s(f(v?.logout),[v]),j=o((()=>({fetchUser:E,user:l,isUserLoading:g,fetchSession:y,session:p,isSessionLoading:b,logout:S,logoutAll:I,projectId:n,baseUrl:i,setUser:u,setSession:m,sdk:v})),[E,l,g,y,p,b,S,I,n,i,u,m,v]);return e.createElement(d.Provider,{value:j},a)};E.defaultProps={baseUrl:"",children:void 0,sessionTokenViaCookie:!1};const I=n((async()=>((await import("@descope/web-component")).default.sdkConfigOverrides={baseHeaders:h},{default:({projectId:o,flowId:t,baseUrl:r,innerRef:s,tenant:n,theme:i,debug:c,telemetryKey:a,redirectUrl:l,autoFocus:u})=>e.createElement("descope-wc",{"project-id":o,"flow-id":t,"base-url":r,ref:s,tenant:n,theme:i,debug:c,telemetryKey:a,"redirect-url":l,"auto-focus":u})}))),S=e.forwardRef((({flowId:o,onSuccess:n,onError:a,tenant:l,theme:u,debug:f,telemetryKey:p,redirectUrl:h,autoFocus:m},g)=>{const[k,w]=t(null);i(g,(()=>k));const{projectId:b,baseUrl:U,sdk:v}=e.useContext(d),y=s((async e=>{await v.httpClient.hooks.afterRequest({},new Response(JSON.stringify(e.detail))),n&&n(e)}),[n]);return r((()=>{const e=k;return e?.addEventListener("success",y),a&&e?.addEventListener("error",a),()=>{a&&e?.removeEventListener("error",a),e?.removeEventListener("success",y)}}),[k,a,y]),e.createElement("form",null,e.createElement(c,{fallback:null},e.createElement(I,{projectId:b,flowId:o,baseUrl:U,innerRef:w,tenant:l,theme:u,debug:f,telemetryKey:p,redirectUrl:h,autoFocus:m})))}));S.defaultProps={onError:void 0,onSuccess:void 0};const j=o=>e.createElement(S,{...o,flowId:"sign-in"}),C=o=>e.createElement(S,{...o,flowId:"sign-up"}),R=o=>e.createElement(S,{...o,flowId:"sign-up-or-in"});var T=()=>{const e=a(d);if(!e)throw Error("You can only use this hook in the context of <AuthProvider />");return e};const L=()=>{const{logout:e,logoutAll:t}=T();return o((()=>({logoutAll:t,logout:e})),[t,e])},x=()=>{const{session:e,isSessionLoading:t,fetchSession:s}=T(),n=l(t);return o((()=>{n.current=t}),[t]),o((()=>{e||t||(n.current=!0)}),[s]),r((()=>{e||t||s()}),[s]),{isSessionLoading:n.current,sessionToken:e,isAuthenticated:!!e}},A=()=>{const{user:e,fetchUser:s,isUserLoading:n,session:i}=T(),[c,a]=t(!1),u=l(n),d=o((()=>!e&&!n&&i&&!c),[s,i,c]);return o((()=>{u.current=n}),[n]),o((()=>{d&&(u.current=!0)}),[d]),r((()=>{d&&(a(!0),s())}),[d]),{isUserLoading:u.current,user:e}};export{E as AuthProvider,S as Descope,j as SignInFlow,C as SignUpFlow,R as SignUpOrInFlow,U as getJwtPermissions,v as getJwtRoles,b as getRefreshToken,w as getSessionToken,y as refresh,L as useDescope,x as useSession,A 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/hooks/Context.ts","../src/utils.ts","../src/constants.ts","../src/sdk.ts","../src/components/AuthProvider/AuthProvider.tsx","../src/components/AuthProvider/useSdk.ts","../src/components/Descope.tsx","../src/components/DefaultFlows.tsx","../src/hooks/useContext.ts","../src/hooks/useDescope.ts","../src/hooks/useSession.ts","../src/hooks/useUser.ts"],"sourcesContent":["import React from 'react';\nimport { IContext } from '../types';\n\nconst Context = React.createContext<IContext>(undefined);\n\nexport default Context;\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\nexport const wrapInTry =\n\t<T extends Array<any>, U>(fn: (...args: T) => U) =>\n\t(...args: T): U => {\n\t\tlet res: U;\n\t\ttry {\n\t\t\tres = fn(...args);\n\t\t} catch (err) {\n\t\t\tconsole.error(err); // eslint-disable-line no-console\n\t\t}\n\t\treturn res;\n\t};\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\n// This sdk can be used in SSR apps\nexport const IS_BROWSER = typeof window !== 'undefined';\n","import createSdk from '@descope/web-js-sdk';\nimport { IS_BROWSER } from './constants';\nimport { wrapInTry } from './utils';\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: IS_BROWSER as true,\n\t\tautoRefresh: IS_BROWSER as 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 = () => {\n\tif (IS_BROWSER) {\n\t\treturn sdkInstance?.getSessionToken();\n\t}\n\n\t// eslint-disable-next-line no-console\n\tconsole.warn('Get session token is not supported in SSR');\n\treturn '';\n};\n\nexport const getRefreshToken = () => {\n\tif (IS_BROWSER) {\n\t\treturn sdkInstance?.getRefreshToken();\n\t}\n\t// eslint-disable-next-line no-console\n\tconsole.warn('Get refresh token is not supported in SSR');\n\treturn '';\n};\n\nexport const getJwtPermissions = wrapInTry(\n\t(token = getSessionToken(), tenant?: string) =>\n\t\tsdkInstance?.getJwtPermissions(token, tenant)\n);\n\nexport const getJwtRoles = wrapInTry(\n\t(token = getSessionToken(), tenant?: string) =>\n\t\tsdkInstance?.getJwtRoles(token, tenant)\n);\n\nexport const refresh = (token = getRefreshToken()) =>\n\tsdkInstance?.refresh(token);\n\nexport default createSdkWrapper;\n","import React, { FC, useCallback, useEffect, useMemo, useState } from 'react';\nimport Context from '../../hooks/Context';\nimport { IContext, User } from '../../types';\nimport { withValidation } from '../../utils';\nimport useSdk from './useSdk';\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 { baseHeaders } from '../../constants';\nimport createSdk from '../../sdk';\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, sessionTokenViaCookie]);\n","import React, {\n\tlazy,\n\tSuspense,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseState\n} from 'react';\nimport { baseHeaders } from '../constants';\nimport Context from '../hooks/Context';\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\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\ttelemetryKey,\n\t\t\tredirectUrl,\n\t\t\tautoFocus\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\ttelemetryKey={telemetryKey}\n\t\t\t\tredirect-url={redirectUrl}\n\t\t\t\tauto-focus={autoFocus}\n\t\t\t/>\n\t\t)\n\t};\n});\n\nconst Descope = React.forwardRef<HTMLElement, DescopeProps>(\n\t(\n\t\t{\n\t\t\tflowId,\n\t\t\tonSuccess,\n\t\t\tonError,\n\t\t\ttenant,\n\t\t\ttheme,\n\t\t\tdebug,\n\t\t\ttelemetryKey,\n\t\t\tredirectUrl,\n\t\t\tautoFocus\n\t\t},\n\t\tref\n\t) => {\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\tasync (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\tawait sdk.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\ttelemetryKey={telemetryKey}\n\t\t\t\t\t\tredirectUrl={redirectUrl}\n\t\t\t\t\t\tautoFocus={autoFocus}\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, useMemo, useRef } from 'react';\nimport useContext from './useContext';\n\nconst useSession = () => {\n\tconst { session, isSessionLoading, fetchSession } = useContext();\n\n\t// when session should be received, we want the return value of \"isSessionLoading\" to be true starting from the first call\n\t// (and not only when receiving an update from the context)\n\tconst isLoading = useRef(isSessionLoading);\n\n\t// we want this to happen before returning a value so we are using \"useMemo\" and not \"useEffect\"\n\tuseMemo(() => {\n\t\tisLoading.current = isSessionLoading;\n\t}, [isSessionLoading]);\n\n\t// we want this to happen before returning a value so we are using \"useMemo\" and not \"useEffect\"\n\tuseMemo(() => {\n\t\tif (!session && !isSessionLoading) {\n\t\t\tisLoading.current = true;\n\t\t}\n\t}, [fetchSession]);\n\n\tuseEffect(() => {\n\t\tif (!session && !isSessionLoading) {\n\t\t\tfetchSession();\n\t\t}\n\t}, [fetchSession]);\n\n\treturn {\n\t\tisSessionLoading: isLoading.current,\n\t\tsessionToken: session,\n\t\tisAuthenticated: !!session\n\t};\n};\n\nexport default useSession;\n","import { useEffect, useMemo, useRef, useState } from 'react';\nimport useContext from './useContext';\n\nconst useUser = () => {\n\tconst { user, fetchUser, isUserLoading, session } = useContext();\n\tconst [isInit, setIsInit] = useState(false); // we want to get the user only in the first time we got a session\n\n\t// when session should be received, we want the return value of \"isUserLoading\" to be true starting from the first call\n\t// (and not only when receiving an update from the context)\n\tconst isLoading = useRef(isUserLoading);\n\n\tconst shouldFetchUser = useMemo(\n\t\t() => !user && !isUserLoading && session && !isInit,\n\t\t[fetchUser, session, isInit]\n\t);\n\n\t// we want this to happen before returning a value so we are using \"useMemo\" and not \"useEffect\"\n\tuseMemo(() => {\n\t\tisLoading.current = isUserLoading;\n\t}, [isUserLoading]);\n\n\t// we want this to happen before returning a value so we are using \"useMemo\" and not \"useEffect\"\n\tuseMemo(() => {\n\t\tif (shouldFetchUser) {\n\t\t\tisLoading.current = true;\n\t\t}\n\t}, [shouldFetchUser]);\n\n\tuseEffect(() => {\n\t\tif (shouldFetchUser) {\n\t\t\tsetIsInit(true);\n\t\t\tfetchUser();\n\t\t}\n\t}, [shouldFetchUser]);\n\n\treturn { isUserLoading: isLoading.current, user };\n};\n\nexport default useUser;\n"],"names":["Context","React","createContext","undefined","withValidation","fn","args","Error","wrapInTry","res","err","console","error","baseHeaders","IS_BROWSER","window","sdkInstance","createSdkWrapper","config","sdk","createSdk","persistTokens","autoRefresh","projectId","getSessionToken","warn","getRefreshToken","getJwtPermissions","token","tenant","getJwtRoles","refresh","AuthProvider","baseUrl","sessionTokenViaCookie","children","user","setUser","useState","session","setSession","isUserLoading","setIsUserLoading","isSessionLoading","setIsSessionLoading","useMemo","persistToken","useSdk","useEffect","unsubscribeSessionToken","onSessionTokenChange","unsubscribeUser","onUserChange","fetchSession","useCallback","then","fetchUser","me","logoutAll","logout","value","createElement","Provider","defaultProps","DescopeWC","lazy","async","import","default","sdkConfigOverrides","flowId","innerRef","theme","debug","telemetryKey","redirectUrl","autoFocus","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","isLoading","useRef","current","sessionToken","isAuthenticated","useUser","isInit","setIsInit","shouldFetchUser"],"mappings":"iMAGA,MAAMA,EAAUC,EAAMC,mBAAwBC,GCEjCC,EACcC,GAC1B,IAAIC,KACH,IAAKD,EACJ,MAAME,MACL,0HAGF,OAAOF,KAAMC,EAAK,EAGPE,EACcH,GAC1B,IAAIC,KACH,IAAIG,EACJ,IACCA,EAAMJ,KAAMC,EAGZ,CAFC,MAAOI,GACRC,QAAQC,MAAMF,EACd,CACD,OAAOD,CAAG,ECtBCI,EAAc,CAC1B,qBAAsB,QACtB,wBAAyB,SAIbC,EAA+B,oBAAXC,OCJjC,IAAIC,EAEJ,MAAMC,EACLC,IAEA,MAAMC,EAAMC,EAAU,IAClBF,EACHG,cAAeP,EACfQ,YAAaR,IAId,OAFAE,EAAcG,EAEPA,CAAG,EAUXH,EAAcC,EAAiB,CAAEM,UAAW,aAErC,MAAMC,EAAkB,IAC1BV,EACIE,GAAaQ,mBAIrBb,QAAQc,KAAK,6CACN,IAGKC,EAAkB,IAC1BZ,EACIE,GAAaU,mBAGrBf,QAAQc,KAAK,6CACN,IAGKE,EAAoBnB,GAChC,CAACoB,EAAQJ,IAAmBK,IAC3Bb,GAAaW,kBAAkBC,EAAOC,KAG3BC,EAActB,GAC1B,CAACoB,EAAQJ,IAAmBK,IAC3Bb,GAAac,YAAYF,EAAOC,KAGrBE,EAAU,CAACH,EAAQF,MAC/BV,GAAae,QAAQH,GC1CtB,MAAMI,EAAuC,EAC5CT,YACAU,UACAC,wBACAC,eAEA,MAAOC,EAAMC,GAAWC,KACjBC,EAASC,GAAcF,KAEvBG,EAAeC,GAAoBJ,GAAS,IAC5CK,EAAkBC,GAAuBN,GAAS,GAEnDnB,ECpBQ,GACdI,YACAU,UACAC,2BAEAW,GAAQ,KACP,GAAKtB,EAGL,OAAOH,EAAU,CAChBG,YACAU,UACAC,wBACArB,cACAiC,cAAc,EACdxB,aAAa,GACZ,GACA,CAACC,EAAWU,EAASC,IDGZa,CAAO,CAAExB,YAAWU,UAASC,0BAEzCc,GAAU,KACT,GAAI7B,EAAK,CACR,MAAM8B,EAA0B9B,EAAI+B,qBAAqBV,GACnDW,EAAkBhC,EAAIiC,aAAaf,GAEzC,MAAO,KACNY,IACAE,GAAiB,CAElB,CACe,GACd,CAAChC,IAEJ,MAAMkC,EAAeC,GAAY,KAChCV,GAAoB,GACpBxC,EAAee,GAAKY,QAApB3B,GAA+BmD,MAAK,KACnCX,GAAoB,EAAM,GACzB,GACA,CAACzB,IAEEqC,EAAYF,GAAY,KAC7BZ,GAAiB,GACjBtC,EAAee,EAAIsC,GAAnBrD,GAAyBmD,MAAK,KAC7Bb,GAAiB,EAAM,GACtB,GACA,CAACvB,IAEEuC,EAAYJ,EAAYlD,EAAee,GAAKuC,WAAY,CAACvC,IAEzDwC,EAASL,EAAYlD,EAAee,GAAKwC,QAAS,CAACxC,IAEnDyC,EAAQf,GACb,KAAO,CACNW,YACApB,OACAK,gBACAY,eACAd,UACAI,mBACAgB,SACAD,YACAnC,YACAU,UACAI,UACAG,aACArB,SAED,CACCqC,EACApB,EACAK,EACAY,EACAd,EACAI,EACAgB,EACAD,EACAnC,EACAU,EACAI,EACAG,EACArB,IAGF,OAAOlB,EAAA4D,cAAC7D,EAAQ8D,SAAQ,CAACF,MAAOA,GAAQzB,EAA4B,EAGrEH,EAAa+B,aAAe,CAC3B9B,QAAS,GACTE,cAAUhC,EACV+B,uBAAuB,GEvFxB,MAAM8B,EAAYC,GAAKC,iBACDC,OAAO,2BAErBC,QAAQC,mBAAqB,CAAExD,eAE/B,CACNuD,QAAS,EACR7C,YACA+C,SACArC,UACAsC,WACA1C,SACA2C,QACAC,QACAC,eACAC,cACAC,eAEA3E,EACa4D,cAAA,aAAA,CAAA,aAAAtC,YACH+C,EAAM,WACLrC,EACV4C,IAAKN,EACL1C,OAAQA,EACR2C,MAAOA,EACPC,MAAOA,EACPC,aAAcA,EAAY,eACZC,EAAW,aACbC,QAMVE,EAAU7E,EAAM8E,YACrB,EAEET,SACAU,YACAC,UACApD,SACA2C,QACAC,QACAC,eACAC,cACAC,aAEDC,KAEA,MAAON,EAAUW,GAAe5C,EAAS,MAEzC6C,EAAoBN,GAAK,IAAMN,IAE/B,MAAMhD,UAAEA,EAASU,QAAEA,EAAOI,QAAEA,EAAOG,WAAEA,EAAUrB,IAAEA,GAChDlB,EAAMmF,WAAWpF,GAEZqF,EAAgB/B,GACrBY,MAAOoB,IACNjD,EAAQiD,EAAEC,QAAQnD,MAClB,MAAMoD,EAAaF,EAAEC,QAAQC,WAC7BhD,EAAWgD,SAGLrE,EAAIsE,WAAWC,MAAMC,aAC1B,CAAA,EACA,IAAIC,SAASC,KAAKC,UAAUR,EAAEC,UAE3BP,GACHA,EAAUM,EACV,GAEF,CAACjD,EAASG,EAAYwC,IAevB,OAZAhC,GAAU,KACT,MAAM+C,EAAMxB,EAIZ,OAHAwB,GAAKC,iBAAiB,UAAWX,GAC7BJ,GAASc,GAAKC,iBAAiB,QAASf,GAErC,KACFA,GAASc,GAAKE,oBAAoB,QAAShB,GAE/Cc,GAAKE,oBAAoB,UAAWZ,EAAc,CAClD,GACC,CAACd,EAAUU,EAASI,IAStBpF,EAAA4D,cAAA,OAAA,KACC5D,EAAA4D,cAACqC,EAAQ,CAACC,SAAU,MACnBlG,EAAC4D,cAAAG,GACAzC,UAAWA,EACX+C,OAAQA,EACRrC,QAASA,EACTsC,SAAUW,EACVrD,OAAQA,EACR2C,MAAOA,EACPC,MAAOA,EACPC,aAAcA,EACdC,YAAaA,EACbC,UAAWA,KAIb,IAIJE,EAAQf,aAAe,CACtBkB,aAAS9E,EACT6E,eAAW7E,SC5HCiG,EAAcC,GAC1BpG,gBAAC6E,EAAO,IAAKuB,EAAO/B,OAAO,YAGfgC,EAAcD,GAC1BpG,gBAAC6E,EAAO,IAAKuB,EAAO/B,OAAO,YAGfiC,EAAkBF,GAC9BpG,gBAAC6E,EAAO,IAAKuB,EAAO/B,OAAO,kBCV5B,IAAAc,EAAe,KACd,MAAMoB,EAAMpB,EAAWpF,GACvB,IAAKwG,EACJ,MAAMjG,MACL,iEAIF,OAAOiG,CAAG,ECPL,MAAAC,EAAa,KAClB,MAAM9C,OAAEA,EAAMD,UAAEA,GAAc0B,IAE9B,OAAOvC,GACN,KAAO,CACNa,YACAC,YAED,CAACD,EAAWC,GACZ,ECVI+C,EAAa,KAClB,MAAMnE,QAAEA,EAAOI,iBAAEA,EAAgBU,aAAEA,GAAiB+B,IAI9CuB,EAAYC,EAAOjE,GAoBzB,OAjBAE,GAAQ,KACP8D,EAAUE,QAAUlE,CAAgB,GAClC,CAACA,IAGJE,GAAQ,KACFN,GAAYI,IAChBgE,EAAUE,SAAU,EACpB,GACC,CAACxD,IAEJL,GAAU,KACJT,GAAYI,GAChBU,GACA,GACC,CAACA,IAEG,CACNV,iBAAkBgE,EAAUE,QAC5BC,aAAcvE,EACdwE,kBAAmBxE,EACnB,EC7BIyE,EAAU,KACf,MAAM5E,KAAEA,EAAIoB,UAAEA,EAASf,cAAEA,EAAaF,QAAEA,GAAY6C,KAC7C6B,EAAQC,GAAa5E,GAAS,GAI/BqE,EAAYC,EAAOnE,GAEnB0E,EAAkBtE,GACvB,KAAOT,IAASK,GAAiBF,IAAY0E,GAC7C,CAACzD,EAAWjB,EAAS0E,IAsBtB,OAlBApE,GAAQ,KACP8D,EAAUE,QAAUpE,CAAa,GAC/B,CAACA,IAGJI,GAAQ,KACHsE,IACHR,EAAUE,SAAU,EACpB,GACC,CAACM,IAEJnE,GAAU,KACLmE,IACHD,GAAU,GACV1D,IACA,GACC,CAAC2D,IAEG,CAAE1E,cAAekE,EAAUE,QAASzE,OAAM"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/hooks/Context.ts","../src/utils.ts","../src/constants.ts","../src/sdk.ts","../src/components/AuthProvider/AuthProvider.tsx","../src/components/AuthProvider/useSdk.ts","../src/components/Descope.tsx","../src/components/DefaultFlows.tsx","../src/hooks/useContext.ts","../src/hooks/useDescope.ts","../src/hooks/useSession.ts","../src/hooks/useUser.ts"],"sourcesContent":["import React from 'react';\nimport { IContext } from '../types';\n\nconst Context = React.createContext<IContext>(undefined);\n\nexport default Context;\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\nexport const wrapInTry =\n\t<T extends Array<any>, U>(fn: (...args: T) => U) =>\n\t(...args: T): U => {\n\t\tlet res: U;\n\t\ttry {\n\t\t\tres = fn(...args);\n\t\t} catch (err) {\n\t\t\tconsole.error(err); // eslint-disable-line no-console\n\t\t}\n\t\treturn res;\n\t};\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\n// This sdk can be used in SSR apps\nexport const IS_BROWSER = typeof window !== 'undefined';\n","import createSdk from '@descope/web-js-sdk';\nimport { IS_BROWSER } from './constants';\nimport { wrapInTry } from './utils';\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: IS_BROWSER as true,\n\t\tautoRefresh: IS_BROWSER as 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 = () => {\n\tif (IS_BROWSER) {\n\t\treturn sdkInstance?.getSessionToken();\n\t}\n\n\t// eslint-disable-next-line no-console\n\tconsole.warn('Get session token is not supported in SSR');\n\treturn '';\n};\n\nexport const getRefreshToken = () => {\n\tif (IS_BROWSER) {\n\t\treturn sdkInstance?.getRefreshToken();\n\t}\n\t// eslint-disable-next-line no-console\n\tconsole.warn('Get refresh token is not supported in SSR');\n\treturn '';\n};\n\nexport const getJwtPermissions = wrapInTry(\n\t(token = getSessionToken(), tenant?: string) =>\n\t\tsdkInstance?.getJwtPermissions(token, tenant)\n);\n\nexport const getJwtRoles = wrapInTry(\n\t(token = getSessionToken(), tenant?: string) =>\n\t\tsdkInstance?.getJwtRoles(token, tenant)\n);\n\nexport const refresh = (token = getRefreshToken()) =>\n\tsdkInstance?.refresh(token);\n\nexport default createSdkWrapper;\n","import React, { FC, useCallback, useEffect, useMemo, useState } from 'react';\nimport Context from '../../hooks/Context';\nimport { IContext, User } from '../../types';\nimport { withValidation } from '../../utils';\nimport useSdk from './useSdk';\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 { baseHeaders } from '../../constants';\nimport createSdk from '../../sdk';\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, sessionTokenViaCookie]);\n","import React, {\n\tlazy,\n\tSuspense,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseState\n} from 'react';\nimport { baseHeaders } from '../constants';\nimport Context from '../hooks/Context';\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\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\ttelemetryKey,\n\t\t\tredirectUrl,\n\t\t\tautoFocus\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\ttelemetryKey={telemetryKey}\n\t\t\t\tredirect-url={redirectUrl}\n\t\t\t\tauto-focus={autoFocus}\n\t\t\t/>\n\t\t)\n\t};\n});\n\nconst Descope = React.forwardRef<HTMLElement, DescopeProps>(\n\t(\n\t\t{\n\t\t\tflowId,\n\t\t\tonSuccess,\n\t\t\tonError,\n\t\t\ttenant,\n\t\t\ttheme,\n\t\t\tdebug,\n\t\t\ttelemetryKey,\n\t\t\tredirectUrl,\n\t\t\tautoFocus\n\t\t},\n\t\tref\n\t) => {\n\t\tconst [innerRef, setInnerRef] = useState(null);\n\n\t\tuseImperativeHandle(ref, () => innerRef);\n\n\t\tconst { projectId, baseUrl, sdk } = React.useContext(Context);\n\n\t\tconst handleSuccess = useCallback(\n\t\t\tasync (e: CustomEvent) => {\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\tawait sdk.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[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\ttelemetryKey={telemetryKey}\n\t\t\t\t\t\tredirectUrl={redirectUrl}\n\t\t\t\t\t\tautoFocus={autoFocus}\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, useMemo, useRef } from 'react';\nimport useContext from './useContext';\n\nconst useSession = () => {\n\tconst { session, isSessionLoading, fetchSession } = useContext();\n\n\t// when session should be received, we want the return value of \"isSessionLoading\" to be true starting from the first call\n\t// (and not only when receiving an update from the context)\n\tconst isLoading = useRef(isSessionLoading);\n\n\t// we want this to happen before returning a value so we are using \"useMemo\" and not \"useEffect\"\n\tuseMemo(() => {\n\t\tisLoading.current = isSessionLoading;\n\t}, [isSessionLoading]);\n\n\t// we want this to happen before returning a value so we are using \"useMemo\" and not \"useEffect\"\n\tuseMemo(() => {\n\t\tif (!session && !isSessionLoading) {\n\t\t\tisLoading.current = true;\n\t\t}\n\t}, [fetchSession]);\n\n\tuseEffect(() => {\n\t\tif (!session && !isSessionLoading) {\n\t\t\tfetchSession();\n\t\t}\n\t}, [fetchSession]);\n\n\treturn {\n\t\tisSessionLoading: isLoading.current,\n\t\tsessionToken: session,\n\t\tisAuthenticated: !!session\n\t};\n};\n\nexport default useSession;\n","import { useEffect, useMemo, useRef, useState } from 'react';\nimport useContext from './useContext';\n\nconst useUser = () => {\n\tconst { user, fetchUser, isUserLoading, session } = useContext();\n\tconst [isInit, setIsInit] = useState(false); // we want to get the user only in the first time we got a session\n\n\t// when session should be received, we want the return value of \"isUserLoading\" to be true starting from the first call\n\t// (and not only when receiving an update from the context)\n\tconst isLoading = useRef(isUserLoading);\n\n\tconst shouldFetchUser = useMemo(\n\t\t() => !user && !isUserLoading && session && !isInit,\n\t\t[fetchUser, session, isInit]\n\t);\n\n\t// we want this to happen before returning a value so we are using \"useMemo\" and not \"useEffect\"\n\tuseMemo(() => {\n\t\tisLoading.current = isUserLoading;\n\t}, [isUserLoading]);\n\n\t// we want this to happen before returning a value so we are using \"useMemo\" and not \"useEffect\"\n\tuseMemo(() => {\n\t\tif (shouldFetchUser) {\n\t\t\tisLoading.current = true;\n\t\t}\n\t}, [shouldFetchUser]);\n\n\tuseEffect(() => {\n\t\tif (shouldFetchUser) {\n\t\t\tsetIsInit(true);\n\t\t\tfetchUser();\n\t\t}\n\t}, [shouldFetchUser]);\n\n\treturn { isUserLoading: isLoading.current, user };\n};\n\nexport default useUser;\n"],"names":["Context","React","createContext","undefined","withValidation","fn","args","Error","wrapInTry","res","err","console","error","baseHeaders","IS_BROWSER","window","sdkInstance","createSdkWrapper","config","sdk","createSdk","persistTokens","autoRefresh","projectId","getSessionToken","warn","getRefreshToken","getJwtPermissions","token","tenant","getJwtRoles","refresh","AuthProvider","baseUrl","sessionTokenViaCookie","children","user","setUser","useState","session","setSession","isUserLoading","setIsUserLoading","isSessionLoading","setIsSessionLoading","useMemo","persistToken","useSdk","useEffect","unsubscribeSessionToken","onSessionTokenChange","unsubscribeUser","onUserChange","fetchSession","useCallback","then","fetchUser","me","logoutAll","logout","value","createElement","Provider","defaultProps","DescopeWC","lazy","async","import","default","sdkConfigOverrides","flowId","innerRef","theme","debug","telemetryKey","redirectUrl","autoFocus","ref","Descope","forwardRef","onSuccess","onError","setInnerRef","useImperativeHandle","useContext","handleSuccess","e","httpClient","hooks","afterRequest","Response","JSON","stringify","detail","ele","addEventListener","removeEventListener","Suspense","fallback","SignInFlow","props","SignUpFlow","SignUpOrInFlow","ctx","useDescope","useSession","isLoading","useRef","current","sessionToken","isAuthenticated","useUser","isInit","setIsInit","shouldFetchUser"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@descope/react-sdk",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "Descope React SDK",
|
|
5
5
|
"author": "Descope Team <info@descope.com>",
|
|
6
6
|
"homepage": "https://github.com/descope/react-sdk",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
]
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@descope/web-component": "2.0.
|
|
45
|
+
"@descope/web-component": "2.0.12",
|
|
46
46
|
"react-router-dom": "6.8.2"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
"eslint": "8.35.0",
|
|
67
67
|
"eslint-config-airbnb": "19.0.4",
|
|
68
68
|
"eslint-config-airbnb-typescript": "17.0.0",
|
|
69
|
-
"eslint-config-prettier": "8.
|
|
69
|
+
"eslint-config-prettier": "8.7.0",
|
|
70
70
|
"eslint-config-standard": "17.0.0",
|
|
71
71
|
"eslint-import-resolver-typescript": "2.7.1",
|
|
72
72
|
"eslint-plugin-import": "2.27.5",
|
|
@@ -104,7 +104,7 @@
|
|
|
104
104
|
"typescript": "^4.5.3"
|
|
105
105
|
},
|
|
106
106
|
"peerDependencies": {
|
|
107
|
-
"@descope/web-js-sdk": "1.0.
|
|
107
|
+
"@descope/web-js-sdk": "1.0.6",
|
|
108
108
|
"@types/react": ">=16",
|
|
109
109
|
"react": ">=16"
|
|
110
110
|
}
|