@descope/react-sdk 0.0.52-alpha.28 → 0.0.52-alpha.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -19
- package/dist/cjs/index.cjs.js +1 -1
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/index.d.ts +12 -40
- package/dist/index.esm.js +1 -1
- package/dist/index.esm.js.map +1 -1
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -72,7 +72,7 @@ const App = () => {
|
|
|
72
72
|
}
|
|
73
73
|
```
|
|
74
74
|
|
|
75
|
-
#### Use the `
|
|
75
|
+
#### Use the `useAuth` hook in your components in order to access authentication state and utilities
|
|
76
76
|
|
|
77
77
|
This can be helpful to implement application-specific logic. Examples:
|
|
78
78
|
|
|
@@ -81,27 +81,27 @@ This can be helpful to implement application-specific logic. Examples:
|
|
|
81
81
|
- Logout button
|
|
82
82
|
|
|
83
83
|
```js
|
|
84
|
-
import {
|
|
84
|
+
import { useAuth } from '@descope/react-sdk'
|
|
85
85
|
|
|
86
86
|
const App = () => {
|
|
87
|
-
// NOTE - `
|
|
87
|
+
// NOTE - `useAuth` should be used inside `AuthProvider` context,
|
|
88
88
|
// and will throw an exception if this requirement is not met
|
|
89
|
-
const {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
89
|
+
const { authenticated, user, logout } = useAuth()
|
|
90
|
+
return (
|
|
91
|
+
{...}
|
|
92
|
+
{
|
|
93
|
+
// render different components if current session is authenticated
|
|
94
|
+
authenticated && <MyPrivateComponent />
|
|
95
|
+
}
|
|
96
|
+
{
|
|
97
|
+
// render user's content
|
|
98
|
+
authenticated && <div>Hello ${user.name}</div>
|
|
99
|
+
}
|
|
100
|
+
{
|
|
101
|
+
// logout button
|
|
102
|
+
authenticated && <button onClick={logout}>Logout</div>
|
|
103
|
+
}
|
|
104
|
+
)
|
|
105
105
|
}
|
|
106
106
|
```
|
|
107
107
|
|
package/dist/cjs/index.cjs.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("@descope/web-js-sdk");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function o(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(s){if("default"!==s){var o=Object.getOwnPropertyDescriptor(e,s);Object.defineProperty(t,s,o.get?o:{enumerable:!0,get:function(){return e[s]}})}})),t.default=e,Object.freeze(t)}var r=s(e),n=s(t);
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("@descope/web-js-sdk");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function o(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(s){if("default"!==s){var o=Object.getOwnPropertyDescriptor(e,s);Object.defineProperty(t,s,o.get?o:{enumerable:!0,get:function(){return e[s]}})}})),t.default=e,Object.freeze(t)}var r=s(e),n=s(t);let u;const a=e=>{const t=n.default({...e,persistTokens:!0,autoRefresh:!0});return u=t,t};u=a({projectId:"temp pid"});const l=r.default.createContext(void 0),i=({projectId:t,baseUrl:s,sessionTokenViaCookie:o,children:n})=>{const[u,i]=e.useState({}),[c,d]=e.useState(""),f=e.useMemo((()=>{if(t)return a({projectId:t,baseUrl:s,sessionTokenViaCookie:o,hooks:{beforeRequest:e=>{const t=e;return t.headers={...t.headers,"x-descope-sdk-name":"react","x-descope-sdk-version":"0.0.52-alpha.29"},t}},persistToken:!0,autoRefresh:!0})}),[t,s]);e.useEffect((()=>{if(!f)return;const e=f.onSessionTokenChange(d),t=f.onUserChange(i);return f.refresh(),()=>{e?.(),t?.()}}),[f]);const p=e.useMemo((()=>({sdk:f,projectId:t,baseUrl:s,user:u,sessionToken:c,setUser:i,setSessionToken:d})),[c,u,t,s]);return r.default.createElement(l.Provider,{value:p},n)};i.defaultProps={baseUrl:"",children:void 0,sessionTokenViaCookie:!1};const c=e.lazy((async()=>(await Promise.resolve().then((function(){return o(require("@descope/web-component"))})),{default:({projectId:e,flowId:t,baseUrl:s,innerRef:o,tenant:n,theme:u,debug:a})=>r.default.createElement("descope-wc",{"project-id":e,"flow-id":t,"base-url":s,ref:o,tenant:n,theme:u,debug:a})}))),d=r.default.forwardRef((({flowId:t,onSuccess:s,onError:o,tenant:n,theme:u,debug:a},i)=>{const[d,f]=e.useState(null);e.useImperativeHandle(i,(()=>d));const{projectId:p,baseUrl:k,setUser:b,setSessionToken:h,sdk:m}=r.default.useContext(l),g=e.useCallback((e=>{b(e.detail?.user);const t=e.detail?.sessionJwt;h(t),m.httpClient.hooks.afterRequest({},new Response(JSON.stringify(e.detail))),s&&s(e)}),[b,h,s]);return e.useEffect((()=>{const e=d;return e?.addEventListener("success",g),o&&e?.addEventListener("error",o),()=>{o&&e?.removeEventListener("error",o),e?.removeEventListener("success",g)}}),[d,o,g]),r.default.createElement("form",null,r.default.createElement(e.Suspense,{fallback:null},r.default.createElement(c,{projectId:p,flowId:t,baseUrl:k,innerRef:f,tenant:n,theme:u,debug:a})))}));d.defaultProps={onError:void 0,onSuccess:void 0};const f=e=>(...t)=>{if(!e)throw Error("You can only use this function after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component");return e(...t)};exports.AuthProvider=i,exports.Descope=d,exports.SignInFlow=e=>r.default.createElement(d,{...e,flowId:"sign-in"}),exports.SignUpFlow=e=>r.default.createElement(d,{...e,flowId:"sign-up"}),exports.SignUpOrInFlow=e=>r.default.createElement(d,{...e,flowId:"sign-up-or-in"}),exports.getSessionToken=()=>u?.getSessionToken(),exports.useAuth=()=>{const t=r.default.useContext(l);if(!t)throw Error("You can only use 'useAuth' in the context of <AuthProvider />");const{user:s,sessionToken:o,sdk:n}=t,u=e.useCallback(f(n?.logoutAll),[n]),a=e.useCallback(f(n?.logout),[n]),i=e.useCallback(f(n?.me),[n]),c=e.useCallback(f(n?.getJwtPermissions),[n]),d=e.useCallback(f(n?.getJwtRoles),[n]),p=e.useCallback(f(n?.getRefreshToken),[n]);return e.useMemo((()=>({authenticated:!!o,user:s,sessionToken:o,logoutAll:u,logout:a,me:i,getJwtPermissions:c,getJwtRoles:d,getRefreshToken:p})),[s,o,n])};
|
|
2
2
|
//# sourceMappingURL=index.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../../src/lib/hooks/Context.ts","../../src/lib/constants.ts","../../src/lib/sdk.ts","../../src/lib/utils.ts","../../src/lib/components/AuthProvider/AuthProvider.tsx","../../src/lib/components/AuthProvider/useSdk.ts","../../src/lib/components/Descope.tsx","../../src/lib/hooks/useContext.ts","../../src/lib/components/DefaultFlows.tsx","../../src/lib/hooks/useDescope.ts","../../src/lib/hooks/useSession.ts","../../src/lib/hooks/useUser.ts"],"sourcesContent":["import React from 'react';\nimport { IContext } from '../types';\n\nconst Context = React.createContext<IContext>(undefined);\n\nexport default Context;\n","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","import createSdk from '@descope/web-js-sdk';\n\ntype Sdk = ReturnType<typeof createSdkWrapper>;\nlet sdkInstance: Sdk;\n\nconst createSdkWrapper = <P extends Parameters<typeof createSdk>[0]>(\n\tconfig: P\n) => {\n\tconst sdk = createSdk({\n\t\t...config,\n\t\tpersistTokens: true,\n\t\tautoRefresh: true\n\t});\n\tsdkInstance = sdk;\n\n\treturn sdk;\n};\n\n/**\n * We want to make sure the getSessionToken fn is used only when persistTokens is on\n *\n * So we are keeping the SDK init in a single place,\n * and we are creating a temp instance in order to export the getSessionToken\n * even before the SDK was init\n */\nsdkInstance = createSdkWrapper({ projectId: 'temp pid' });\n\nexport const getSessionToken = () => sdkInstance?.getSessionToken();\nexport const getJwtPermissions = (token = getSessionToken(), tenant?: string) =>\n\tsdkInstance?.getJwtPermissions(token, tenant);\nexport const getJwtRoles = (token = getSessionToken(), tenant?: string) =>\n\tsdkInstance?.getJwtRoles(token, tenant);\nexport const getRefreshToken = () => sdkInstance?.getRefreshToken();\n\nexport default createSdkWrapper;\n","/* eslint-disable import/prefer-default-export */\n\n/**\n * Wrap a function with a validation that it exists\n * @param fn The function to wrap with the validation\n * @throws if function does not exist, an error with the relevant message will be thrown\n */\nexport const withValidation =\n\t<T extends Array<any>, U>(fn: (...args: T) => U) =>\n\t(...args: T): U => {\n\t\tif (!fn) {\n\t\t\tthrow Error(\n\t\t\t\t`You can only use this function after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component`\n\t\t\t);\n\t\t}\n\t\treturn fn(...args);\n\t};\n","import React, { FC, useCallback, useEffect, useMemo, useState } from 'react';\nimport Context from '../../hooks/Context';\nimport { IContext, User } from '../../types';\nimport useSdk from './useSdk';\nimport { withValidation } from '../../utils';\n\ninterface IAuthProviderProps {\n\tprojectId: string;\n\tbaseUrl?: string;\n\t// If true, session token (jwt) will be stored on cookie. Otherwise, the session token will be\n\t// stored on local storage and can accessed with getSessionToken function\n\t// Use this option if session token will stay small (less than 1k)\n\t// NOTE: Session token can grow, especially in cases of using authorization, or adding custom claims\n\tsessionTokenViaCookie?: boolean;\n\tchildren?: JSX.Element;\n}\n\nconst AuthProvider: FC<IAuthProviderProps> = ({\n\tprojectId,\n\tbaseUrl,\n\tsessionTokenViaCookie,\n\tchildren\n}) => {\n\tconst [user, setUser] = useState<User>();\n\tconst [session, setSession] = useState<string>();\n\n\tconst [isUserLoading, setIsUserLoading] = useState(false);\n\tconst [isSessionLoading, setIsSessionLoading] = useState(false);\n\n\tconst sdk = useSdk({ projectId, baseUrl, sessionTokenViaCookie });\n\n\tuseEffect(() => {\n\t\tif (sdk) {\n\t\t\tconst unsubscribeSessionToken = sdk.onSessionTokenChange(setSession);\n\t\t\tconst unsubscribeUser = sdk.onUserChange(setUser);\n\n\t\t\treturn () => {\n\t\t\t\tunsubscribeSessionToken();\n\t\t\t\tunsubscribeUser();\n\t\t\t};\n\t\t}\n\t\treturn undefined;\n\t}, [sdk]);\n\n\tconst fetchSession = useCallback(() => {\n\t\tsetIsSessionLoading(true);\n\t\twithValidation(sdk?.refresh)().then(() => {\n\t\t\tsetIsSessionLoading(false);\n\t\t});\n\t}, [sdk]);\n\n\tconst fetchUser = useCallback(() => {\n\t\tsetIsUserLoading(true);\n\t\twithValidation(sdk.me)().then(() => {\n\t\t\tsetIsUserLoading(false);\n\t\t});\n\t}, [sdk]);\n\n\tconst logoutAll = useCallback(withValidation(sdk?.logoutAll), [sdk]);\n\n\tconst logout = useCallback(withValidation(sdk?.logout), [sdk]);\n\n\tconst value = useMemo<IContext>(\n\t\t() => ({\n\t\t\tfetchUser,\n\t\t\tuser,\n\t\t\tisUserLoading,\n\t\t\tfetchSession,\n\t\t\tsession,\n\t\t\tisSessionLoading,\n\t\t\tlogout,\n\t\t\tlogoutAll,\n\t\t\tprojectId,\n\t\t\tbaseUrl,\n\t\t\tsetUser,\n\t\t\tsetSession,\n\t\t\tsdk\n\t\t}),\n\t\t[\n\t\t\tfetchUser,\n\t\t\tuser,\n\t\t\tisUserLoading,\n\t\t\tfetchSession,\n\t\t\tsession,\n\t\t\tisSessionLoading,\n\t\t\tlogout,\n\t\t\tlogoutAll,\n\t\t\tprojectId,\n\t\t\tbaseUrl,\n\t\t\tsetUser,\n\t\t\tsetSession,\n\t\t\tsdk\n\t\t]\n\t);\n\treturn <Context.Provider value={value}>{children}</Context.Provider>;\n};\n\nAuthProvider.defaultProps = {\n\tbaseUrl: '',\n\tchildren: undefined,\n\tsessionTokenViaCookie: false\n};\n\nexport default AuthProvider;\n","import { useMemo } from 'react';\nimport { 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 Context from '../hooks/Context';\nimport { DescopeProps } from '../types';\nimport { baseHeaders } from '../constants';\n\n// web-component code uses browser API, but can be used in SSR apps, hence the lazy loading\nconst DescopeWC = lazy(async () => {\n\tconst module = await import('@descope/web-component');\n\t// we want to override the web-component base headers so we can tell that is was used via the React SDK\n\tmodule.default.sdkConfigOverrides = { baseHeaders };\n\n\treturn {\n\t\tdefault: ({\n\t\t\tprojectId,\n\t\t\tflowId,\n\t\t\tbaseUrl,\n\t\t\tinnerRef,\n\t\t\ttenant,\n\t\t\ttheme,\n\t\t\tdebug\n\t\t}) => (\n\t\t\t<descope-wc\n\t\t\t\tproject-id={projectId}\n\t\t\t\tflow-id={flowId}\n\t\t\t\tbase-url={baseUrl}\n\t\t\t\tref={innerRef}\n\t\t\t\ttenant={tenant}\n\t\t\t\ttheme={theme}\n\t\t\t\tdebug={debug}\n\t\t\t/>\n\t\t)\n\t};\n});\n\nconst Descope = React.forwardRef<HTMLElement, DescopeProps>(\n\t({ flowId, onSuccess, onError, tenant, theme, debug }, ref) => {\n\t\tconst [innerRef, setInnerRef] = useState(null);\n\n\t\tuseImperativeHandle(ref, () => innerRef);\n\n\t\tconst { projectId, baseUrl, setUser, setSession, sdk } =\n\t\t\tReact.useContext(Context);\n\n\t\tconst handleSuccess = useCallback(\n\t\t\t(e: CustomEvent) => {\n\t\t\t\tsetUser(e.detail?.user);\n\t\t\t\tconst sessionJwt = e.detail?.sessionJwt;\n\t\t\t\tsetSession(sessionJwt);\n\t\t\t\t// In order to make sure all the after-hooks are running with the success response\n\t\t\t\t// we are generating a fake response with the success data and calling the http client after hook fn with it\n\t\t\t\tsdk.httpClient.hooks.afterRequest(\n\t\t\t\t\t{} as any,\n\t\t\t\t\tnew Response(JSON.stringify(e.detail))\n\t\t\t\t);\n\t\t\t\tif (onSuccess) {\n\t\t\t\t\tonSuccess(e);\n\t\t\t\t}\n\t\t\t},\n\t\t\t[setUser, setSession, onSuccess]\n\t\t);\n\n\t\tuseEffect(() => {\n\t\t\tconst ele = innerRef;\n\t\t\tele?.addEventListener('success', handleSuccess);\n\t\t\tif (onError) ele?.addEventListener('error', onError);\n\n\t\t\treturn () => {\n\t\t\t\tif (onError) ele?.removeEventListener('error', onError);\n\n\t\t\t\tele?.removeEventListener('success', handleSuccess);\n\t\t\t};\n\t\t}, [innerRef, onError, handleSuccess]);\n\n\t\treturn (\n\t\t\t/**\n\t\t\t * in order to avoid redundant remounting of the WC, we are wrapping it with a form element\n\t\t\t * this workaround is done in order to support webauthn passkeys\n\t\t\t * it can be removed once this issue will be solved\n\t\t\t * https://bugs.chromium.org/p/chromium/issues/detail?id=1404106#c2\n\t\t\t */\n\t\t\t<form>\n\t\t\t\t<Suspense fallback={null}>\n\t\t\t\t\t<DescopeWC\n\t\t\t\t\t\tprojectId={projectId}\n\t\t\t\t\t\tflowId={flowId}\n\t\t\t\t\t\tbaseUrl={baseUrl}\n\t\t\t\t\t\tinnerRef={setInnerRef}\n\t\t\t\t\t\ttenant={tenant}\n\t\t\t\t\t\ttheme={theme}\n\t\t\t\t\t\tdebug={debug}\n\t\t\t\t\t/>\n\t\t\t\t</Suspense>\n\t\t\t</form>\n\t\t);\n\t}\n);\n\nDescope.defaultProps = {\n\tonError: undefined,\n\tonSuccess: undefined\n};\n\nexport default Descope;\n","import { useContext } from 'react';\nimport Context from './Context';\n\nexport default () => {\n\tconst ctx = useContext(Context);\n\tif (!ctx) {\n\t\tthrow Error(\n\t\t\t`You can only use this hook in the context of <AuthProvider />`\n\t\t);\n\t}\n\n\treturn ctx;\n};\n","import React from 'react';\nimport { DefaultFlowProps } from '../types';\nimport Descope from './Descope';\n\nexport const SignInFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-in\" />\n);\n\nexport const SignUpFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-up\" />\n);\n\nexport const SignUpOrInFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-up-or-in\" />\n);\n","import { useMemo } from 'react';\nimport { IAuth } from '../types';\nimport useContext from './useContext';\n\nconst useDescope = (): IAuth => {\n\tconst { logout, logoutAll } = useContext();\n\n\treturn useMemo(\n\t\t() => ({\n\t\t\tlogoutAll,\n\t\t\tlogout\n\t\t}),\n\t\t[logoutAll, logout]\n\t);\n};\n\nexport default useDescope;\n","import { useEffect } from 'react';\nimport useContext from './useContext';\n\nconst useSession = () => {\n\tconst { session, isSessionLoading, fetchSession } = useContext();\n\n\tuseEffect(() => {\n\t\tif (!session && !isSessionLoading) {\n\t\t\tfetchSession();\n\t\t}\n\t}, [fetchSession]);\n\n\treturn {\n\t\tisSessionLoading,\n\t\tsessionToken: session,\n\t\tisAuthenticated: !!session\n\t};\n};\n\nexport default useSession;\n","import { useEffect, useState } from 'react';\nimport useContext from './useContext';\n\nconst useUser = () => {\n\tconst { user, fetchUser, isUserLoading, session, isSessionLoading } =\n\t\tuseContext();\n\tconst [isInit, setIsInit] = useState(false); // we want to get the user only in the first time we got a session\n\n\tuseEffect(() => {\n\t\tif (!user && !isUserLoading && session && !isSessionLoading && !isInit) {\n\t\t\tsetIsInit(true);\n\t\t\tfetchUser();\n\t\t}\n\t}, [isSessionLoading, fetchUser, session, isInit]);\n\n\treturn { isUserLoading, user };\n};\n\nexport default useUser;\n"],"names":["Context","React","createContext","undefined","baseHeaders","sdkInstance","createSdkWrapper","config","sdk","createSdk","persistTokens","autoRefresh","projectId","getSessionToken","withValidation","fn","args","Error","AuthProvider","baseUrl","sessionTokenViaCookie","children","user","setUser","useState","session","setSession","isUserLoading","setIsUserLoading","isSessionLoading","setIsSessionLoading","useMemo","persistToken","useSdk","useEffect","unsubscribeSessionToken","onSessionTokenChange","unsubscribeUser","onUserChange","fetchSession","useCallback","refresh","then","fetchUser","me","logoutAll","logout","value","createElement","Provider","defaultProps","DescopeWC","lazy","async","Promise","resolve","_interopNamespace","require","default","sdkConfigOverrides","flowId","innerRef","tenant","theme","debug","ref","Descope","forwardRef","onSuccess","onError","setInnerRef","useImperativeHandle","useContext","handleSuccess","e","detail","sessionJwt","httpClient","hooks","afterRequest","Response","JSON","stringify","ele","addEventListener","removeEventListener","Suspense","fallback","ctx","props","token","getJwtPermissions","getJwtRoles","getRefreshToken","sessionToken","isAuthenticated","isInit","setIsInit"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../src/lib/sdk.ts","../../src/lib/hooks/authContext.ts","../../src/lib/components/AuthProvider.tsx","../../src/lib/components/Descope.tsx","../../src/lib/hooks/useAuth.ts","../../src/lib/components/DefaultFlows.tsx"],"sourcesContent":["import createSdk from '@descope/web-js-sdk';\n\nlet sdkInstance;\n\nconst createSdkWrapper = <P extends Parameters<typeof createSdk>[0]>(\n\tconfig: P\n) => {\n\tconst sdk = createSdk({\n\t\t...config,\n\t\tpersistTokens: true,\n\t\tautoRefresh: true\n\t});\n\tsdkInstance = sdk;\n\n\treturn sdk;\n};\n\n/**\n * We want to make sure the getSessionToken fn is used only when persistTokens is on\n *\n * So we are keeping the SDK init in a single place,\n * and we are creating a temp instance in order to export the getSessionToken\n * even before the SDK was init\n */\nsdkInstance = createSdkWrapper({ projectId: 'temp pid' });\n\nexport const getSessionToken = () => sdkInstance?.getSessionToken();\n\nexport default createSdkWrapper;\n","import React from 'react';\nimport { IAuthContext } from '../types';\n\nconst AuthContext = React.createContext<IAuthContext>(undefined);\n\nexport default AuthContext;\n","import React, { FC, useEffect, useMemo, useState } from 'react';\nimport createSdk from '../sdk';\nimport AuthContext from '../hooks/authContext';\nimport { IAuthContext } from '../types';\n\ndeclare const BUILD_VERSION: string;\n\ninterface IAuthProviderProps {\n\tprojectId: string;\n\tbaseUrl?: string;\n\t// If true, session token (jwt) will be stored on cookie. Otherwise, the session token will be\n\t// stored on local storage and can accessed with getSessionToken function\n\t// Use this option if session token will stay small (less than 1k)\n\t// NOTE: Session token can grow, especially in cases of using authorization, or adding custom claims\n\tsessionTokenViaCookie?: boolean;\n\tchildren?: JSX.Element;\n}\n\nconst AuthProvider: FC<IAuthProviderProps> = ({\n\tprojectId,\n\tbaseUrl,\n\tsessionTokenViaCookie,\n\tchildren\n}) => {\n\tconst [user, setUser] = useState({});\n\tconst [sessionToken, setSessionToken] = useState('');\n\n\tconst sdk = useMemo(() => {\n\t\tif (!projectId) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn createSdk({\n\t\t\tprojectId,\n\t\t\tbaseUrl,\n\t\t\tsessionTokenViaCookie,\n\t\t\thooks: {\n\t\t\t\tbeforeRequest: (config) => {\n\t\t\t\t\tconst conf = config;\n\t\t\t\t\tconf.headers = {\n\t\t\t\t\t\t...conf.headers,\n\t\t\t\t\t\t'x-descope-sdk-name': 'react',\n\t\t\t\t\t\t'x-descope-sdk-version': BUILD_VERSION\n\t\t\t\t\t};\n\t\t\t\t\treturn conf;\n\t\t\t\t}\n\t\t\t},\n\t\t\tpersistToken: true,\n\t\t\tautoRefresh: true\n\t\t});\n\t}, [projectId, baseUrl]);\n\n\tuseEffect(() => {\n\t\tif (!sdk) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst unsubscribeSessionToken = sdk.onSessionTokenChange(setSessionToken);\n\t\tconst unsubscribeUser = sdk.onUserChange(setUser);\n\t\t// we are calling refresh once after creating the SDK instance\n\t\t// so if refresh token exists, the user will be logged in automatically\n\t\tsdk.refresh();\n\t\treturn () => {\n\t\t\tunsubscribeSessionToken?.();\n\t\t\tunsubscribeUser?.();\n\t\t};\n\t}, [sdk]);\n\n\tconst value = useMemo<IAuthContext>(\n\t\t() => ({\n\t\t\tsdk,\n\t\t\tprojectId,\n\t\t\tbaseUrl,\n\t\t\tuser,\n\t\t\tsessionToken,\n\t\t\tsetUser,\n\t\t\tsetSessionToken\n\t\t}),\n\t\t[sessionToken, user, projectId, baseUrl]\n\t);\n\treturn <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;\n};\n\nAuthProvider.defaultProps = {\n\tbaseUrl: '',\n\tchildren: undefined,\n\tsessionTokenViaCookie: false\n};\n\nexport default AuthProvider;\n","import React, {\n\tlazy,\n\tSuspense,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseState\n} from 'react';\nimport AuthContext from '../hooks/authContext';\nimport { DescopeProps } from '../types';\n\n// web-component code uses browser API, but can be used in SSR apps, hence the lazy loading\nconst DescopeWC = lazy(async () => {\n\tawait import('@descope/web-component');\n\treturn {\n\t\tdefault: ({\n\t\t\tprojectId,\n\t\t\tflowId,\n\t\t\tbaseUrl,\n\t\t\tinnerRef,\n\t\t\ttenant,\n\t\t\ttheme,\n\t\t\tdebug\n\t\t}) => (\n\t\t\t<descope-wc\n\t\t\t\tproject-id={projectId}\n\t\t\t\tflow-id={flowId}\n\t\t\t\tbase-url={baseUrl}\n\t\t\t\tref={innerRef}\n\t\t\t\ttenant={tenant}\n\t\t\t\ttheme={theme}\n\t\t\t\tdebug={debug}\n\t\t\t/>\n\t\t)\n\t};\n});\n\nconst Descope = React.forwardRef<HTMLElement, DescopeProps>(\n\t({ flowId, onSuccess, onError, tenant, theme, debug }, ref) => {\n\t\tconst [innerRef, setInnerRef] = useState(null);\n\n\t\tuseImperativeHandle(ref, () => innerRef);\n\n\t\tconst { projectId, baseUrl, setUser, setSessionToken, sdk } =\n\t\t\tReact.useContext(AuthContext);\n\n\t\tconst handleSuccess = useCallback(\n\t\t\t(e: CustomEvent) => {\n\t\t\t\tsetUser(e.detail?.user);\n\t\t\t\tconst sessionJwt = e.detail?.sessionJwt;\n\t\t\t\tsetSessionToken(sessionJwt);\n\t\t\t\t// In order to make sure all the after-hooks are running with the success response\n\t\t\t\t// we are generating a fake response with the success data and calling the http client after hook fn with it\n\t\t\t\tsdk.httpClient.hooks.afterRequest(\n\t\t\t\t\t{} as any,\n\t\t\t\t\tnew Response(JSON.stringify(e.detail))\n\t\t\t\t);\n\t\t\t\tif (onSuccess) {\n\t\t\t\t\tonSuccess(e);\n\t\t\t\t}\n\t\t\t},\n\t\t\t[setUser, setSessionToken, onSuccess]\n\t\t);\n\n\t\tuseEffect(() => {\n\t\t\tconst ele = innerRef;\n\t\t\tele?.addEventListener('success', handleSuccess);\n\t\t\tif (onError) ele?.addEventListener('error', onError);\n\n\t\t\treturn () => {\n\t\t\t\tif (onError) ele?.removeEventListener('error', onError);\n\n\t\t\t\tele?.removeEventListener('success', handleSuccess);\n\t\t\t};\n\t\t}, [innerRef, onError, handleSuccess]);\n\n\t\treturn (\n\t\t\t/**\n\t\t\t * in order to avoid redundant remounting of the WC, we are wrapping it with a form element\n\t\t\t * this workaround is done in order to support webauthn passkeys\n\t\t\t * it can be removed once this issue will be solved\n\t\t\t * https://bugs.chromium.org/p/chromium/issues/detail?id=1404106#c2\n\t\t\t */\n\t\t\t<form>\n\t\t\t\t<Suspense fallback={null}>\n\t\t\t\t\t<DescopeWC\n\t\t\t\t\t\tprojectId={projectId}\n\t\t\t\t\t\tflowId={flowId}\n\t\t\t\t\t\tbaseUrl={baseUrl}\n\t\t\t\t\t\tinnerRef={setInnerRef}\n\t\t\t\t\t\ttenant={tenant}\n\t\t\t\t\t\ttheme={theme}\n\t\t\t\t\t\tdebug={debug}\n\t\t\t\t\t/>\n\t\t\t\t</Suspense>\n\t\t\t</form>\n\t\t);\n\t}\n);\n\nDescope.defaultProps = {\n\tonError: undefined,\n\tonSuccess: undefined\n};\n\nexport default Descope;\n","import React, { useCallback, useMemo } from 'react';\nimport { IAuth } from '../types';\nimport AuthContext from './authContext';\n\n/**\n * Wrap a function with a validation that it exists\n * @param fn The function to wrap with the validation\n * @throws if function does not exist, an error with the relevant message will be thrown\n */\nconst withValidation =\n\t<T extends Array<any>, U>(fn: (...args: T) => U) =>\n\t(...args: T): U => {\n\t\tif (!fn) {\n\t\t\tthrow Error(\n\t\t\t\t`You can only use this function after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component`\n\t\t\t);\n\t\t}\n\t\treturn fn(...args);\n\t};\n\nconst useAuth = (): IAuth => {\n\tconst ctx = React.useContext(AuthContext);\n\tif (!ctx) {\n\t\tthrow Error(\n\t\t\t`You can only use 'useAuth' in the context of <AuthProvider />`\n\t\t);\n\t}\n\tconst { user, sessionToken, sdk } = ctx;\n\n\tconst logoutAll = useCallback(withValidation(sdk?.logoutAll), [sdk]);\n\n\tconst logout = useCallback(withValidation(sdk?.logout), [sdk]);\n\n\tconst me = useCallback(withValidation(sdk?.me), [sdk]);\n\n\tconst getJwtPermissions = useCallback(\n\t\twithValidation(sdk?.getJwtPermissions),\n\t\t[sdk]\n\t);\n\n\tconst getJwtRoles = useCallback(withValidation(sdk?.getJwtRoles), [sdk]);\n\n\tconst getRefreshToken = useCallback(withValidation(sdk?.getRefreshToken), [\n\t\tsdk\n\t]);\n\n\treturn useMemo(\n\t\t() => ({\n\t\t\tauthenticated: !!sessionToken,\n\t\t\tuser,\n\t\t\tsessionToken,\n\t\t\tlogoutAll,\n\t\t\tlogout,\n\t\t\tme,\n\t\t\tgetJwtPermissions,\n\t\t\tgetJwtRoles,\n\t\t\t/**\n\t\t\t * Returns refresh token. Use this function when:\n\t\t\t * 1. You need to pass refresh token to another party (For example, in SSR)\n\t\t\t * 2. Descope project's configuration is set to manage token response in BODY (in contrast to manage response in COOKIES)\n\t\t\t * NOTE: Use carefully! Refresh token is sensitive token with relativity long expiration. Prefer using this function only for testing, and to manage token response in COOKIES)\n\t\t\t */\n\t\t\tgetRefreshToken\n\t\t}),\n\t\t[user, sessionToken, sdk]\n\t);\n};\n\nexport default useAuth;\n","import React from 'react';\nimport { DefaultFlowProps } from '../types';\nimport Descope from './Descope';\n\nexport const SignInFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-in\" />\n);\n\nexport const SignUpFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-up\" />\n);\n\nexport const SignUpOrInFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-up-or-in\" />\n);\n"],"names":["sdkInstance","createSdkWrapper","config","sdk","createSdk","persistTokens","autoRefresh","projectId","AuthContext","React","createContext","undefined","AuthProvider","baseUrl","sessionTokenViaCookie","children","user","setUser","useState","sessionToken","setSessionToken","useMemo","hooks","beforeRequest","conf","headers","persistToken","useEffect","unsubscribeSessionToken","onSessionTokenChange","unsubscribeUser","onUserChange","refresh","value","createElement","Provider","defaultProps","DescopeWC","lazy","async","Promise","resolve","then","_interopNamespace","require","default","flowId","innerRef","tenant","theme","debug","ref","Descope","forwardRef","onSuccess","onError","setInnerRef","useImperativeHandle","useContext","handleSuccess","useCallback","e","detail","sessionJwt","httpClient","afterRequest","Response","JSON","stringify","ele","addEventListener","removeEventListener","Suspense","fallback","withValidation","fn","args","Error","props","getSessionToken","ctx","logoutAll","logout","me","getJwtPermissions","getJwtRoles","getRefreshToken","authenticated"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -33,7 +33,6 @@ declare const createSdkWrapper: <P extends Omit<{
|
|
|
33
33
|
afterRequest?: (req: _descope_core_js_sdk.RequestConfig, res: Response) => void;
|
|
34
34
|
};
|
|
35
35
|
cookiePolicy?: RequestCredentials;
|
|
36
|
-
baseHeaders?: HeadersInit;
|
|
37
36
|
}, "hooks"> & {
|
|
38
37
|
hooks?: {
|
|
39
38
|
beforeRequest?: ((config: _descope_core_js_sdk.RequestConfig) => _descope_core_js_sdk.RequestConfig) | ((config: _descope_core_js_sdk.RequestConfig) => _descope_core_js_sdk.RequestConfig)[];
|
|
@@ -229,16 +228,6 @@ declare const createSdkWrapper: <P extends Omit<{
|
|
|
229
228
|
}>(redirectURL?: string, config?: B_5) => Promise<B_5 extends {
|
|
230
229
|
redirect: true;
|
|
231
230
|
} ? undefined : _descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.URLResponse>>;
|
|
232
|
-
discord: <B_6 extends {
|
|
233
|
-
redirect: boolean;
|
|
234
|
-
}>(redirectURL?: string, config?: B_6) => Promise<B_6 extends {
|
|
235
|
-
redirect: true;
|
|
236
|
-
} ? undefined : _descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.URLResponse>>;
|
|
237
|
-
linkedin: <B_7 extends {
|
|
238
|
-
redirect: boolean;
|
|
239
|
-
}>(redirectURL?: string, config?: B_7) => Promise<B_7 extends {
|
|
240
|
-
redirect: true;
|
|
241
|
-
} ? undefined : _descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.URLResponse>>;
|
|
242
231
|
};
|
|
243
232
|
exchange: (code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
244
233
|
};
|
|
@@ -456,9 +445,9 @@ declare const createSdkWrapper: <P extends Omit<{
|
|
|
456
445
|
};
|
|
457
446
|
oauth: {
|
|
458
447
|
start: {
|
|
459
|
-
facebook: <
|
|
448
|
+
facebook: <B_6 extends {
|
|
460
449
|
redirect: boolean;
|
|
461
|
-
}>(redirectURL?: string, config?:
|
|
450
|
+
}>(redirectURL?: string, config?: B_6) => Promise<B_6 extends {
|
|
462
451
|
redirect: true;
|
|
463
452
|
} ? undefined : _descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.URLResponse>>;
|
|
464
453
|
github: <B_1_2 extends {
|
|
@@ -486,16 +475,6 @@ declare const createSdkWrapper: <P extends Omit<{
|
|
|
486
475
|
}>(redirectURL?: string, config?: B_5_1) => Promise<B_5_1 extends {
|
|
487
476
|
redirect: true;
|
|
488
477
|
} ? undefined : _descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.URLResponse>>;
|
|
489
|
-
discord: <B_6_1 extends {
|
|
490
|
-
redirect: boolean;
|
|
491
|
-
}>(redirectURL?: string, config?: B_6_1) => Promise<B_6_1 extends {
|
|
492
|
-
redirect: true;
|
|
493
|
-
} ? undefined : _descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.URLResponse>>;
|
|
494
|
-
linkedin: <B_7_1 extends {
|
|
495
|
-
redirect: boolean;
|
|
496
|
-
}>(redirectURL?: string, config?: B_7_1) => Promise<B_7_1 extends {
|
|
497
|
-
redirect: true;
|
|
498
|
-
} ? undefined : _descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.URLResponse>>;
|
|
499
478
|
};
|
|
500
479
|
exchange: (code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
501
480
|
};
|
|
@@ -568,10 +547,7 @@ declare const createSdkWrapper: <P extends Omit<{
|
|
|
568
547
|
getRefreshToken: () => string;
|
|
569
548
|
getSessionToken: () => string;
|
|
570
549
|
};
|
|
571
|
-
declare const getSessionToken: () =>
|
|
572
|
-
declare const getJwtPermissions: (token?: string, tenant?: string) => string[];
|
|
573
|
-
declare const getJwtRoles: (token?: string, tenant?: string) => string[];
|
|
574
|
-
declare const getRefreshToken: () => string;
|
|
550
|
+
declare const getSessionToken: () => any;
|
|
575
551
|
|
|
576
552
|
declare global {
|
|
577
553
|
namespace JSX {
|
|
@@ -613,8 +589,15 @@ interface User {
|
|
|
613
589
|
tenants?: string[];
|
|
614
590
|
}
|
|
615
591
|
interface IAuth {
|
|
592
|
+
authenticated: boolean;
|
|
593
|
+
user?: User;
|
|
594
|
+
sessionToken?: string;
|
|
616
595
|
logoutAll: Sdk['logoutAll'];
|
|
617
596
|
logout: Sdk['logout'];
|
|
597
|
+
me: Sdk['me'];
|
|
598
|
+
getJwtRoles: Sdk['getJwtRoles'];
|
|
599
|
+
getJwtPermissions: Sdk['getJwtPermissions'];
|
|
600
|
+
getRefreshToken: Sdk['getRefreshToken'];
|
|
618
601
|
}
|
|
619
602
|
type DescopeTheme = 'light' | 'dark';
|
|
620
603
|
interface DescopeProps {
|
|
@@ -633,17 +616,6 @@ declare const SignUpOrInFlow: (props: DefaultFlowProps) => JSX.Element;
|
|
|
633
616
|
|
|
634
617
|
declare const Descope: React.ForwardRefExoticComponent<DescopeProps & React.RefAttributes<HTMLElement>>;
|
|
635
618
|
|
|
636
|
-
declare const
|
|
637
|
-
|
|
638
|
-
declare const useSession: () => {
|
|
639
|
-
isSessionLoading: boolean;
|
|
640
|
-
sessionToken: string;
|
|
641
|
-
isAuthenticated: boolean;
|
|
642
|
-
};
|
|
643
|
-
|
|
644
|
-
declare const useUser: () => {
|
|
645
|
-
isUserLoading: boolean;
|
|
646
|
-
user: User;
|
|
647
|
-
};
|
|
619
|
+
declare const useAuth: () => IAuth;
|
|
648
620
|
|
|
649
|
-
export { AuthProvider, Descope, SignInFlow, SignUpFlow, SignUpOrInFlow,
|
|
621
|
+
export { AuthProvider, Descope, SignInFlow, SignUpFlow, SignUpOrInFlow, getSessionToken, useAuth };
|
package/dist/index.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import e,{
|
|
1
|
+
import e,{useState as t,useMemo as o,useEffect as s,lazy as n,useImperativeHandle as r,useCallback as i,Suspense as c}from"react";import a from"@descope/web-js-sdk";let l;const d=e=>{const t=a({...e,persistTokens:!0,autoRefresh:!0});return l=t,t};l=d({projectId:"temp pid"});const u=()=>l?.getSessionToken(),f=e.createContext(void 0),p=({projectId:n,baseUrl:r,sessionTokenViaCookie:i,children:c})=>{const[a,l]=t({}),[u,p]=t(""),k=o((()=>{if(n)return d({projectId:n,baseUrl:r,sessionTokenViaCookie:i,hooks:{beforeRequest:e=>{const t=e;return t.headers={...t.headers,"x-descope-sdk-name":"react","x-descope-sdk-version":"0.0.52-alpha.29"},t}},persistToken:!0,autoRefresh:!0})}),[n,r]);s((()=>{if(!k)return;const e=k.onSessionTokenChange(p),t=k.onUserChange(l);return k.refresh(),()=>{e?.(),t?.()}}),[k]);const m=o((()=>({sdk:k,projectId:n,baseUrl:r,user:a,sessionToken:u,setUser:l,setSessionToken:p})),[u,a,n,r]);return e.createElement(f.Provider,{value:m},c)};p.defaultProps={baseUrl:"",children:void 0,sessionTokenViaCookie:!1};const k=n((async()=>(await import("@descope/web-component"),{default:({projectId:t,flowId:o,baseUrl:s,innerRef:n,tenant:r,theme:i,debug:c})=>e.createElement("descope-wc",{"project-id":t,"flow-id":o,"base-url":s,ref:n,tenant:r,theme:i,debug:c})}))),m=e.forwardRef((({flowId:o,onSuccess:n,onError:a,tenant:l,theme:d,debug:u},p)=>{const[m,h]=t(null);r(p,(()=>m));const{projectId:g,baseUrl:w,setUser:b,setSessionToken:E,sdk:v}=e.useContext(f),I=i((e=>{b(e.detail?.user);const t=e.detail?.sessionJwt;E(t),v.httpClient.hooks.afterRequest({},new Response(JSON.stringify(e.detail))),n&&n(e)}),[b,E,n]);return s((()=>{const e=m;return e?.addEventListener("success",I),a&&e?.addEventListener("error",a),()=>{a&&e?.removeEventListener("error",a),e?.removeEventListener("success",I)}}),[m,a,I]),e.createElement("form",null,e.createElement(c,{fallback:null},e.createElement(k,{projectId:g,flowId:o,baseUrl:w,innerRef:h,tenant:l,theme:d,debug:u})))}));m.defaultProps={onError:void 0,onSuccess:void 0};const h=t=>e.createElement(m,{...t,flowId:"sign-in"}),g=t=>e.createElement(m,{...t,flowId:"sign-up"}),w=t=>e.createElement(m,{...t,flowId:"sign-up-or-in"}),b=e=>(...t)=>{if(!e)throw Error("You can only use this function after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component");return e(...t)},E=()=>{const t=e.useContext(f);if(!t)throw Error("You can only use 'useAuth' in the context of <AuthProvider />");const{user:s,sessionToken:n,sdk:r}=t,c=i(b(r?.logoutAll),[r]),a=i(b(r?.logout),[r]),l=i(b(r?.me),[r]),d=i(b(r?.getJwtPermissions),[r]),u=i(b(r?.getJwtRoles),[r]),p=i(b(r?.getRefreshToken),[r]);return o((()=>({authenticated:!!n,user:s,sessionToken:n,logoutAll:c,logout:a,me:l,getJwtPermissions:d,getJwtRoles:u,getRefreshToken:p})),[s,n,r])};export{p as AuthProvider,m as Descope,h as SignInFlow,g as SignUpFlow,w as SignUpOrInFlow,u as getSessionToken,E as useAuth};
|
|
2
2
|
//# sourceMappingURL=index.esm.js.map
|
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/lib/hooks/Context.ts","../src/lib/constants.ts","../src/lib/sdk.ts","../src/lib/utils.ts","../src/lib/components/AuthProvider/AuthProvider.tsx","../src/lib/components/AuthProvider/useSdk.ts","../src/lib/components/Descope.tsx","../src/lib/components/DefaultFlows.tsx","../src/lib/hooks/useContext.ts","../src/lib/hooks/useDescope.ts","../src/lib/hooks/useSession.ts","../src/lib/hooks/useUser.ts"],"sourcesContent":["import React from 'react';\nimport { IContext } from '../types';\n\nconst Context = React.createContext<IContext>(undefined);\n\nexport default Context;\n","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","import createSdk from '@descope/web-js-sdk';\n\ntype Sdk = ReturnType<typeof createSdkWrapper>;\nlet sdkInstance: Sdk;\n\nconst createSdkWrapper = <P extends Parameters<typeof createSdk>[0]>(\n\tconfig: P\n) => {\n\tconst sdk = createSdk({\n\t\t...config,\n\t\tpersistTokens: true,\n\t\tautoRefresh: true\n\t});\n\tsdkInstance = sdk;\n\n\treturn sdk;\n};\n\n/**\n * We want to make sure the getSessionToken fn is used only when persistTokens is on\n *\n * So we are keeping the SDK init in a single place,\n * and we are creating a temp instance in order to export the getSessionToken\n * even before the SDK was init\n */\nsdkInstance = createSdkWrapper({ projectId: 'temp pid' });\n\nexport const getSessionToken = () => sdkInstance?.getSessionToken();\nexport const getJwtPermissions = (token = getSessionToken(), tenant?: string) =>\n\tsdkInstance?.getJwtPermissions(token, tenant);\nexport const getJwtRoles = (token = getSessionToken(), tenant?: string) =>\n\tsdkInstance?.getJwtRoles(token, tenant);\nexport const getRefreshToken = () => sdkInstance?.getRefreshToken();\n\nexport default createSdkWrapper;\n","/* eslint-disable import/prefer-default-export */\n\n/**\n * Wrap a function with a validation that it exists\n * @param fn The function to wrap with the validation\n * @throws if function does not exist, an error with the relevant message will be thrown\n */\nexport const withValidation =\n\t<T extends Array<any>, U>(fn: (...args: T) => U) =>\n\t(...args: T): U => {\n\t\tif (!fn) {\n\t\t\tthrow Error(\n\t\t\t\t`You can only use this function after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component`\n\t\t\t);\n\t\t}\n\t\treturn fn(...args);\n\t};\n","import React, { FC, useCallback, useEffect, useMemo, useState } from 'react';\nimport Context from '../../hooks/Context';\nimport { IContext, User } from '../../types';\nimport useSdk from './useSdk';\nimport { withValidation } from '../../utils';\n\ninterface IAuthProviderProps {\n\tprojectId: string;\n\tbaseUrl?: string;\n\t// If true, session token (jwt) will be stored on cookie. Otherwise, the session token will be\n\t// stored on local storage and can accessed with getSessionToken function\n\t// Use this option if session token will stay small (less than 1k)\n\t// NOTE: Session token can grow, especially in cases of using authorization, or adding custom claims\n\tsessionTokenViaCookie?: boolean;\n\tchildren?: JSX.Element;\n}\n\nconst AuthProvider: FC<IAuthProviderProps> = ({\n\tprojectId,\n\tbaseUrl,\n\tsessionTokenViaCookie,\n\tchildren\n}) => {\n\tconst [user, setUser] = useState<User>();\n\tconst [session, setSession] = useState<string>();\n\n\tconst [isUserLoading, setIsUserLoading] = useState(false);\n\tconst [isSessionLoading, setIsSessionLoading] = useState(false);\n\n\tconst sdk = useSdk({ projectId, baseUrl, sessionTokenViaCookie });\n\n\tuseEffect(() => {\n\t\tif (sdk) {\n\t\t\tconst unsubscribeSessionToken = sdk.onSessionTokenChange(setSession);\n\t\t\tconst unsubscribeUser = sdk.onUserChange(setUser);\n\n\t\t\treturn () => {\n\t\t\t\tunsubscribeSessionToken();\n\t\t\t\tunsubscribeUser();\n\t\t\t};\n\t\t}\n\t\treturn undefined;\n\t}, [sdk]);\n\n\tconst fetchSession = useCallback(() => {\n\t\tsetIsSessionLoading(true);\n\t\twithValidation(sdk?.refresh)().then(() => {\n\t\t\tsetIsSessionLoading(false);\n\t\t});\n\t}, [sdk]);\n\n\tconst fetchUser = useCallback(() => {\n\t\tsetIsUserLoading(true);\n\t\twithValidation(sdk.me)().then(() => {\n\t\t\tsetIsUserLoading(false);\n\t\t});\n\t}, [sdk]);\n\n\tconst logoutAll = useCallback(withValidation(sdk?.logoutAll), [sdk]);\n\n\tconst logout = useCallback(withValidation(sdk?.logout), [sdk]);\n\n\tconst value = useMemo<IContext>(\n\t\t() => ({\n\t\t\tfetchUser,\n\t\t\tuser,\n\t\t\tisUserLoading,\n\t\t\tfetchSession,\n\t\t\tsession,\n\t\t\tisSessionLoading,\n\t\t\tlogout,\n\t\t\tlogoutAll,\n\t\t\tprojectId,\n\t\t\tbaseUrl,\n\t\t\tsetUser,\n\t\t\tsetSession,\n\t\t\tsdk\n\t\t}),\n\t\t[\n\t\t\tfetchUser,\n\t\t\tuser,\n\t\t\tisUserLoading,\n\t\t\tfetchSession,\n\t\t\tsession,\n\t\t\tisSessionLoading,\n\t\t\tlogout,\n\t\t\tlogoutAll,\n\t\t\tprojectId,\n\t\t\tbaseUrl,\n\t\t\tsetUser,\n\t\t\tsetSession,\n\t\t\tsdk\n\t\t]\n\t);\n\treturn <Context.Provider value={value}>{children}</Context.Provider>;\n};\n\nAuthProvider.defaultProps = {\n\tbaseUrl: '',\n\tchildren: undefined,\n\tsessionTokenViaCookie: false\n};\n\nexport default AuthProvider;\n","import { useMemo } from 'react';\nimport { 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 Context from '../hooks/Context';\nimport { DescopeProps } from '../types';\nimport { baseHeaders } from '../constants';\n\n// web-component code uses browser API, but can be used in SSR apps, hence the lazy loading\nconst DescopeWC = lazy(async () => {\n\tconst module = await import('@descope/web-component');\n\t// we want to override the web-component base headers so we can tell that is was used via the React SDK\n\tmodule.default.sdkConfigOverrides = { baseHeaders };\n\n\treturn {\n\t\tdefault: ({\n\t\t\tprojectId,\n\t\t\tflowId,\n\t\t\tbaseUrl,\n\t\t\tinnerRef,\n\t\t\ttenant,\n\t\t\ttheme,\n\t\t\tdebug\n\t\t}) => (\n\t\t\t<descope-wc\n\t\t\t\tproject-id={projectId}\n\t\t\t\tflow-id={flowId}\n\t\t\t\tbase-url={baseUrl}\n\t\t\t\tref={innerRef}\n\t\t\t\ttenant={tenant}\n\t\t\t\ttheme={theme}\n\t\t\t\tdebug={debug}\n\t\t\t/>\n\t\t)\n\t};\n});\n\nconst Descope = React.forwardRef<HTMLElement, DescopeProps>(\n\t({ flowId, onSuccess, onError, tenant, theme, debug }, ref) => {\n\t\tconst [innerRef, setInnerRef] = useState(null);\n\n\t\tuseImperativeHandle(ref, () => innerRef);\n\n\t\tconst { projectId, baseUrl, setUser, setSession, sdk } =\n\t\t\tReact.useContext(Context);\n\n\t\tconst handleSuccess = useCallback(\n\t\t\t(e: CustomEvent) => {\n\t\t\t\tsetUser(e.detail?.user);\n\t\t\t\tconst sessionJwt = e.detail?.sessionJwt;\n\t\t\t\tsetSession(sessionJwt);\n\t\t\t\t// In order to make sure all the after-hooks are running with the success response\n\t\t\t\t// we are generating a fake response with the success data and calling the http client after hook fn with it\n\t\t\t\tsdk.httpClient.hooks.afterRequest(\n\t\t\t\t\t{} as any,\n\t\t\t\t\tnew Response(JSON.stringify(e.detail))\n\t\t\t\t);\n\t\t\t\tif (onSuccess) {\n\t\t\t\t\tonSuccess(e);\n\t\t\t\t}\n\t\t\t},\n\t\t\t[setUser, setSession, onSuccess]\n\t\t);\n\n\t\tuseEffect(() => {\n\t\t\tconst ele = innerRef;\n\t\t\tele?.addEventListener('success', handleSuccess);\n\t\t\tif (onError) ele?.addEventListener('error', onError);\n\n\t\t\treturn () => {\n\t\t\t\tif (onError) ele?.removeEventListener('error', onError);\n\n\t\t\t\tele?.removeEventListener('success', handleSuccess);\n\t\t\t};\n\t\t}, [innerRef, onError, handleSuccess]);\n\n\t\treturn (\n\t\t\t/**\n\t\t\t * in order to avoid redundant remounting of the WC, we are wrapping it with a form element\n\t\t\t * this workaround is done in order to support webauthn passkeys\n\t\t\t * it can be removed once this issue will be solved\n\t\t\t * https://bugs.chromium.org/p/chromium/issues/detail?id=1404106#c2\n\t\t\t */\n\t\t\t<form>\n\t\t\t\t<Suspense fallback={null}>\n\t\t\t\t\t<DescopeWC\n\t\t\t\t\t\tprojectId={projectId}\n\t\t\t\t\t\tflowId={flowId}\n\t\t\t\t\t\tbaseUrl={baseUrl}\n\t\t\t\t\t\tinnerRef={setInnerRef}\n\t\t\t\t\t\ttenant={tenant}\n\t\t\t\t\t\ttheme={theme}\n\t\t\t\t\t\tdebug={debug}\n\t\t\t\t\t/>\n\t\t\t\t</Suspense>\n\t\t\t</form>\n\t\t);\n\t}\n);\n\nDescope.defaultProps = {\n\tonError: undefined,\n\tonSuccess: undefined\n};\n\nexport default Descope;\n","import React from 'react';\nimport { DefaultFlowProps } from '../types';\nimport Descope from './Descope';\n\nexport const SignInFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-in\" />\n);\n\nexport const SignUpFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-up\" />\n);\n\nexport const SignUpOrInFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-up-or-in\" />\n);\n","import { useContext } from 'react';\nimport Context from './Context';\n\nexport default () => {\n\tconst ctx = useContext(Context);\n\tif (!ctx) {\n\t\tthrow Error(\n\t\t\t`You can only use this hook in the context of <AuthProvider />`\n\t\t);\n\t}\n\n\treturn ctx;\n};\n","import { useMemo } from 'react';\nimport { IAuth } from '../types';\nimport useContext from './useContext';\n\nconst useDescope = (): IAuth => {\n\tconst { logout, logoutAll } = useContext();\n\n\treturn useMemo(\n\t\t() => ({\n\t\t\tlogoutAll,\n\t\t\tlogout\n\t\t}),\n\t\t[logoutAll, logout]\n\t);\n};\n\nexport default useDescope;\n","import { useEffect } from 'react';\nimport useContext from './useContext';\n\nconst useSession = () => {\n\tconst { session, isSessionLoading, fetchSession } = useContext();\n\n\tuseEffect(() => {\n\t\tif (!session && !isSessionLoading) {\n\t\t\tfetchSession();\n\t\t}\n\t}, [fetchSession]);\n\n\treturn {\n\t\tisSessionLoading,\n\t\tsessionToken: session,\n\t\tisAuthenticated: !!session\n\t};\n};\n\nexport default useSession;\n","import { useEffect, useState } from 'react';\nimport useContext from './useContext';\n\nconst useUser = () => {\n\tconst { user, fetchUser, isUserLoading, session, isSessionLoading } =\n\t\tuseContext();\n\tconst [isInit, setIsInit] = useState(false); // we want to get the user only in the first time we got a session\n\n\tuseEffect(() => {\n\t\tif (!user && !isUserLoading && session && !isSessionLoading && !isInit) {\n\t\t\tsetIsInit(true);\n\t\t\tfetchUser();\n\t\t}\n\t}, [isSessionLoading, fetchUser, session, isInit]);\n\n\treturn { isUserLoading, user };\n};\n\nexport default useUser;\n"],"names":["Context","React","createContext","undefined","baseHeaders","sdkInstance","createSdkWrapper","config","sdk","createSdk","persistTokens","autoRefresh","projectId","getSessionToken","getJwtPermissions","token","tenant","getJwtRoles","getRefreshToken","withValidation","fn","args","Error","AuthProvider","baseUrl","sessionTokenViaCookie","children","user","setUser","useState","session","setSession","isUserLoading","setIsUserLoading","isSessionLoading","setIsSessionLoading","useMemo","persistToken","useSdk","useEffect","unsubscribeSessionToken","onSessionTokenChange","unsubscribeUser","onUserChange","fetchSession","useCallback","refresh","then","fetchUser","me","logoutAll","logout","value","createElement","Provider","defaultProps","DescopeWC","lazy","async","import","default","sdkConfigOverrides","flowId","innerRef","theme","debug","ref","Descope","forwardRef","onSuccess","onError","setInnerRef","useImperativeHandle","useContext","handleSuccess","e","detail","sessionJwt","httpClient","hooks","afterRequest","Response","JSON","stringify","ele","addEventListener","removeEventListener","Suspense","fallback","SignInFlow","props","SignUpFlow","SignUpOrInFlow","ctx","useDescope","useSession","sessionToken","isAuthenticated","useUser","isInit","setIsInit"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/lib/sdk.ts","../src/lib/hooks/authContext.ts","../src/lib/components/AuthProvider.tsx","../src/lib/components/Descope.tsx","../src/lib/components/DefaultFlows.tsx","../src/lib/hooks/useAuth.ts"],"sourcesContent":["import createSdk from '@descope/web-js-sdk';\n\nlet sdkInstance;\n\nconst createSdkWrapper = <P extends Parameters<typeof createSdk>[0]>(\n\tconfig: P\n) => {\n\tconst sdk = createSdk({\n\t\t...config,\n\t\tpersistTokens: true,\n\t\tautoRefresh: true\n\t});\n\tsdkInstance = sdk;\n\n\treturn sdk;\n};\n\n/**\n * We want to make sure the getSessionToken fn is used only when persistTokens is on\n *\n * So we are keeping the SDK init in a single place,\n * and we are creating a temp instance in order to export the getSessionToken\n * even before the SDK was init\n */\nsdkInstance = createSdkWrapper({ projectId: 'temp pid' });\n\nexport const getSessionToken = () => sdkInstance?.getSessionToken();\n\nexport default createSdkWrapper;\n","import React from 'react';\nimport { IAuthContext } from '../types';\n\nconst AuthContext = React.createContext<IAuthContext>(undefined);\n\nexport default AuthContext;\n","import React, { FC, useEffect, useMemo, useState } from 'react';\nimport createSdk from '../sdk';\nimport AuthContext from '../hooks/authContext';\nimport { IAuthContext } from '../types';\n\ndeclare const BUILD_VERSION: string;\n\ninterface IAuthProviderProps {\n\tprojectId: string;\n\tbaseUrl?: string;\n\t// If true, session token (jwt) will be stored on cookie. Otherwise, the session token will be\n\t// stored on local storage and can accessed with getSessionToken function\n\t// Use this option if session token will stay small (less than 1k)\n\t// NOTE: Session token can grow, especially in cases of using authorization, or adding custom claims\n\tsessionTokenViaCookie?: boolean;\n\tchildren?: JSX.Element;\n}\n\nconst AuthProvider: FC<IAuthProviderProps> = ({\n\tprojectId,\n\tbaseUrl,\n\tsessionTokenViaCookie,\n\tchildren\n}) => {\n\tconst [user, setUser] = useState({});\n\tconst [sessionToken, setSessionToken] = useState('');\n\n\tconst sdk = useMemo(() => {\n\t\tif (!projectId) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn createSdk({\n\t\t\tprojectId,\n\t\t\tbaseUrl,\n\t\t\tsessionTokenViaCookie,\n\t\t\thooks: {\n\t\t\t\tbeforeRequest: (config) => {\n\t\t\t\t\tconst conf = config;\n\t\t\t\t\tconf.headers = {\n\t\t\t\t\t\t...conf.headers,\n\t\t\t\t\t\t'x-descope-sdk-name': 'react',\n\t\t\t\t\t\t'x-descope-sdk-version': BUILD_VERSION\n\t\t\t\t\t};\n\t\t\t\t\treturn conf;\n\t\t\t\t}\n\t\t\t},\n\t\t\tpersistToken: true,\n\t\t\tautoRefresh: true\n\t\t});\n\t}, [projectId, baseUrl]);\n\n\tuseEffect(() => {\n\t\tif (!sdk) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst unsubscribeSessionToken = sdk.onSessionTokenChange(setSessionToken);\n\t\tconst unsubscribeUser = sdk.onUserChange(setUser);\n\t\t// we are calling refresh once after creating the SDK instance\n\t\t// so if refresh token exists, the user will be logged in automatically\n\t\tsdk.refresh();\n\t\treturn () => {\n\t\t\tunsubscribeSessionToken?.();\n\t\t\tunsubscribeUser?.();\n\t\t};\n\t}, [sdk]);\n\n\tconst value = useMemo<IAuthContext>(\n\t\t() => ({\n\t\t\tsdk,\n\t\t\tprojectId,\n\t\t\tbaseUrl,\n\t\t\tuser,\n\t\t\tsessionToken,\n\t\t\tsetUser,\n\t\t\tsetSessionToken\n\t\t}),\n\t\t[sessionToken, user, projectId, baseUrl]\n\t);\n\treturn <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;\n};\n\nAuthProvider.defaultProps = {\n\tbaseUrl: '',\n\tchildren: undefined,\n\tsessionTokenViaCookie: false\n};\n\nexport default AuthProvider;\n","import React, {\n\tlazy,\n\tSuspense,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseState\n} from 'react';\nimport AuthContext from '../hooks/authContext';\nimport { DescopeProps } from '../types';\n\n// web-component code uses browser API, but can be used in SSR apps, hence the lazy loading\nconst DescopeWC = lazy(async () => {\n\tawait import('@descope/web-component');\n\treturn {\n\t\tdefault: ({\n\t\t\tprojectId,\n\t\t\tflowId,\n\t\t\tbaseUrl,\n\t\t\tinnerRef,\n\t\t\ttenant,\n\t\t\ttheme,\n\t\t\tdebug\n\t\t}) => (\n\t\t\t<descope-wc\n\t\t\t\tproject-id={projectId}\n\t\t\t\tflow-id={flowId}\n\t\t\t\tbase-url={baseUrl}\n\t\t\t\tref={innerRef}\n\t\t\t\ttenant={tenant}\n\t\t\t\ttheme={theme}\n\t\t\t\tdebug={debug}\n\t\t\t/>\n\t\t)\n\t};\n});\n\nconst Descope = React.forwardRef<HTMLElement, DescopeProps>(\n\t({ flowId, onSuccess, onError, tenant, theme, debug }, ref) => {\n\t\tconst [innerRef, setInnerRef] = useState(null);\n\n\t\tuseImperativeHandle(ref, () => innerRef);\n\n\t\tconst { projectId, baseUrl, setUser, setSessionToken, sdk } =\n\t\t\tReact.useContext(AuthContext);\n\n\t\tconst handleSuccess = useCallback(\n\t\t\t(e: CustomEvent) => {\n\t\t\t\tsetUser(e.detail?.user);\n\t\t\t\tconst sessionJwt = e.detail?.sessionJwt;\n\t\t\t\tsetSessionToken(sessionJwt);\n\t\t\t\t// In order to make sure all the after-hooks are running with the success response\n\t\t\t\t// we are generating a fake response with the success data and calling the http client after hook fn with it\n\t\t\t\tsdk.httpClient.hooks.afterRequest(\n\t\t\t\t\t{} as any,\n\t\t\t\t\tnew Response(JSON.stringify(e.detail))\n\t\t\t\t);\n\t\t\t\tif (onSuccess) {\n\t\t\t\t\tonSuccess(e);\n\t\t\t\t}\n\t\t\t},\n\t\t\t[setUser, setSessionToken, onSuccess]\n\t\t);\n\n\t\tuseEffect(() => {\n\t\t\tconst ele = innerRef;\n\t\t\tele?.addEventListener('success', handleSuccess);\n\t\t\tif (onError) ele?.addEventListener('error', onError);\n\n\t\t\treturn () => {\n\t\t\t\tif (onError) ele?.removeEventListener('error', onError);\n\n\t\t\t\tele?.removeEventListener('success', handleSuccess);\n\t\t\t};\n\t\t}, [innerRef, onError, handleSuccess]);\n\n\t\treturn (\n\t\t\t/**\n\t\t\t * in order to avoid redundant remounting of the WC, we are wrapping it with a form element\n\t\t\t * this workaround is done in order to support webauthn passkeys\n\t\t\t * it can be removed once this issue will be solved\n\t\t\t * https://bugs.chromium.org/p/chromium/issues/detail?id=1404106#c2\n\t\t\t */\n\t\t\t<form>\n\t\t\t\t<Suspense fallback={null}>\n\t\t\t\t\t<DescopeWC\n\t\t\t\t\t\tprojectId={projectId}\n\t\t\t\t\t\tflowId={flowId}\n\t\t\t\t\t\tbaseUrl={baseUrl}\n\t\t\t\t\t\tinnerRef={setInnerRef}\n\t\t\t\t\t\ttenant={tenant}\n\t\t\t\t\t\ttheme={theme}\n\t\t\t\t\t\tdebug={debug}\n\t\t\t\t\t/>\n\t\t\t\t</Suspense>\n\t\t\t</form>\n\t\t);\n\t}\n);\n\nDescope.defaultProps = {\n\tonError: undefined,\n\tonSuccess: undefined\n};\n\nexport default Descope;\n","import React from 'react';\nimport { DefaultFlowProps } from '../types';\nimport Descope from './Descope';\n\nexport const SignInFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-in\" />\n);\n\nexport const SignUpFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-up\" />\n);\n\nexport const SignUpOrInFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-up-or-in\" />\n);\n","import React, { useCallback, useMemo } from 'react';\nimport { IAuth } from '../types';\nimport AuthContext from './authContext';\n\n/**\n * Wrap a function with a validation that it exists\n * @param fn The function to wrap with the validation\n * @throws if function does not exist, an error with the relevant message will be thrown\n */\nconst withValidation =\n\t<T extends Array<any>, U>(fn: (...args: T) => U) =>\n\t(...args: T): U => {\n\t\tif (!fn) {\n\t\t\tthrow Error(\n\t\t\t\t`You can only use this function after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component`\n\t\t\t);\n\t\t}\n\t\treturn fn(...args);\n\t};\n\nconst useAuth = (): IAuth => {\n\tconst ctx = React.useContext(AuthContext);\n\tif (!ctx) {\n\t\tthrow Error(\n\t\t\t`You can only use 'useAuth' in the context of <AuthProvider />`\n\t\t);\n\t}\n\tconst { user, sessionToken, sdk } = ctx;\n\n\tconst logoutAll = useCallback(withValidation(sdk?.logoutAll), [sdk]);\n\n\tconst logout = useCallback(withValidation(sdk?.logout), [sdk]);\n\n\tconst me = useCallback(withValidation(sdk?.me), [sdk]);\n\n\tconst getJwtPermissions = useCallback(\n\t\twithValidation(sdk?.getJwtPermissions),\n\t\t[sdk]\n\t);\n\n\tconst getJwtRoles = useCallback(withValidation(sdk?.getJwtRoles), [sdk]);\n\n\tconst getRefreshToken = useCallback(withValidation(sdk?.getRefreshToken), [\n\t\tsdk\n\t]);\n\n\treturn useMemo(\n\t\t() => ({\n\t\t\tauthenticated: !!sessionToken,\n\t\t\tuser,\n\t\t\tsessionToken,\n\t\t\tlogoutAll,\n\t\t\tlogout,\n\t\t\tme,\n\t\t\tgetJwtPermissions,\n\t\t\tgetJwtRoles,\n\t\t\t/**\n\t\t\t * Returns refresh token. Use this function when:\n\t\t\t * 1. You need to pass refresh token to another party (For example, in SSR)\n\t\t\t * 2. Descope project's configuration is set to manage token response in BODY (in contrast to manage response in COOKIES)\n\t\t\t * NOTE: Use carefully! Refresh token is sensitive token with relativity long expiration. Prefer using this function only for testing, and to manage token response in COOKIES)\n\t\t\t */\n\t\t\tgetRefreshToken\n\t\t}),\n\t\t[user, sessionToken, sdk]\n\t);\n};\n\nexport default useAuth;\n"],"names":["sdkInstance","createSdkWrapper","config","sdk","createSdk","persistTokens","autoRefresh","projectId","getSessionToken","AuthContext","React","createContext","undefined","AuthProvider","baseUrl","sessionTokenViaCookie","children","user","setUser","useState","sessionToken","setSessionToken","useMemo","hooks","beforeRequest","conf","headers","persistToken","useEffect","unsubscribeSessionToken","onSessionTokenChange","unsubscribeUser","onUserChange","refresh","value","createElement","Provider","defaultProps","DescopeWC","lazy","async","import","default","flowId","innerRef","tenant","theme","debug","ref","Descope","forwardRef","onSuccess","onError","setInnerRef","useImperativeHandle","useContext","handleSuccess","useCallback","e","detail","sessionJwt","httpClient","afterRequest","Response","JSON","stringify","ele","addEventListener","removeEventListener","Suspense","fallback","SignInFlow","props","SignUpFlow","SignUpOrInFlow","withValidation","fn","args","Error","useAuth","ctx","logoutAll","logout","me","getJwtPermissions","getJwtRoles","getRefreshToken","authenticated"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@descope/react-sdk",
|
|
3
|
-
"version": "0.0.52-alpha.
|
|
3
|
+
"version": "0.0.52-alpha.29",
|
|
4
4
|
"main": "dist/cjs/index.cjs.js",
|
|
5
5
|
"module": "dist/index.esm.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -19,11 +19,11 @@
|
|
|
19
19
|
"dist"
|
|
20
20
|
],
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@descope/web-component": "0.1.0-alpha.
|
|
22
|
+
"@descope/web-component": "0.1.0-alpha.29",
|
|
23
23
|
"react-router-dom": "6.6.1"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
|
-
"@babel/core": "7.20.
|
|
26
|
+
"@babel/core": "7.20.7",
|
|
27
27
|
"@babel/preset-env": "7.20.2",
|
|
28
28
|
"@babel/preset-react": "7.18.6",
|
|
29
29
|
"@babel/preset-typescript": "7.18.6",
|
|
@@ -81,9 +81,9 @@
|
|
|
81
81
|
"typescript": "^4.5.3"
|
|
82
82
|
},
|
|
83
83
|
"peerDependencies": {
|
|
84
|
-
"@descope/web-js-sdk": "0.1.0-alpha.23",
|
|
85
84
|
"@types/react": ">=16",
|
|
86
|
-
"react": ">=16"
|
|
85
|
+
"react": ">=16",
|
|
86
|
+
"@descope/web-js-sdk": "0.1.0-alpha.21"
|
|
87
87
|
},
|
|
88
88
|
"scripts": {
|
|
89
89
|
"start": "npm run build && rollup -c rollup.config.app.js -w",
|