@descope/react-sdk 1.0.3 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -99,28 +99,30 @@ This can be helpful to implement application-specific logic. Examples:
99
99
  - Logout button
100
100
 
101
101
  ```js
102
- import { useDescope, useSession, useUser } from '@descope/react-sdk'
102
+ import { useDescope, useSession, useUser } from '@descope/react-sdk';
103
103
 
104
104
  const App = () => {
105
- // NOTE - `useDescope`, `useSession`, `useUser` should be used inside `AuthProvider` context,
106
- // and will throw an exception if this requirement is not met
107
- const { isAuthenticated, isSessionLoading } = useSession()
108
- const { user, isUserLoading } = useUser()
109
- const sdk = useDescope()
110
-
111
- if(isSessionLoading || isUserLoading){
112
- return <p>Loading...</p>
113
- }
114
-
115
- if(isAuthenticated){
116
- return (
117
- <p>Hello ${user.name}</p>
118
- <button onClick={sdk.logout}>Logout</div>
119
- )
120
- }
121
-
122
- return <p>You are not logged in</p>
123
- }
105
+ // NOTE - `useDescope`, `useSession`, `useUser` should be used inside `AuthProvider` context,
106
+ // and will throw an exception if this requirement is not met
107
+ const { isAuthenticated, isSessionLoading } = useSession();
108
+ const { user, isUserLoading } = useUser();
109
+ const sdk = useDescope();
110
+
111
+ if (isSessionLoading || isUserLoading) {
112
+ return <p>Loading...</p>;
113
+ }
114
+
115
+ if (isAuthenticated) {
116
+ return (
117
+ <>
118
+ <p>Hello {user.name}</p>
119
+ <button onClick={sdk.logout}>Logout</button>
120
+ </>
121
+ );
122
+ }
123
+
124
+ return <p>You are not logged in</p>;
125
+ };
124
126
  ```
125
127
 
126
128
  **For more SDK usage examples refer to [docs](https://docs.descope.com/build/guides/client_sdks/)**
@@ -173,7 +175,7 @@ const Component = () => {
173
175
  {...}
174
176
  {
175
177
  // button that triggers an API that may use session token
176
- <button onClick={onClick}>Click Me</div>
178
+ <button onClick={onClick}>Click Me</button>
177
179
  }
178
180
  )
179
181
  }
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("@descope/web-js-sdk");function r(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function s(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var s=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,s.get?s:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var o=r(e),n=r(t);const u=o.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 r;try{r=e(...t)}catch(e){console.error(e)}return r},c={"x-descope-sdk-name":"react","x-descope-sdk-version":"1.0.3"},d="undefined"!=typeof window;let l;const f=e=>{const t=n.default({...e,persistTokens:d,autoRefresh:d});return l=t,t};l=f({projectId:"temp pid"});const p=()=>d?l?.getSessionToken():(console.warn("Get session token is not supported in SSR"),""),h=()=>d?l?.getRefreshToken():(console.warn("Get refresh token is not supported in SSR"),""),m=a(((e=p(),t)=>l?.getJwtPermissions(e,t))),k=a(((e=p(),t)=>l?.getJwtRoles(e,t)));const b=({projectId:t,baseUrl:r,sessionTokenViaCookie:s,children:n})=>{const[a,d]=e.useState(),[l,p]=e.useState(),[h,m]=e.useState(!1),[k,b]=e.useState(!1),g=(({projectId:t,baseUrl:r,sessionTokenViaCookie:s})=>e.useMemo((()=>{if(t)return f({projectId:t,baseUrl:r,sessionTokenViaCookie:s,baseHeaders:c,persistToken:!0,autoRefresh:!0})}),[t,r,s]))({projectId:t,baseUrl:r,sessionTokenViaCookie:s});e.useEffect((()=>{if(g){const e=g.onSessionTokenChange(p),t=g.onUserChange(d);return()=>{e(),t()}}}),[g]);const w=e.useCallback((()=>{b(!0),i(g?.refresh)().then((()=>{b(!1)}))}),[g]),y=e.useCallback((()=>{m(!0),i(g.me)().then((()=>{m(!1)}))}),[g]),S=e.useMemo((()=>({fetchUser:y,user:a,isUserLoading:h,fetchSession:w,session:l,isSessionLoading:k,projectId:t,baseUrl:r,setUser:d,setSession:p,sdk:g})),[y,a,h,w,l,k,t,r,d,p,g]);return o.default.createElement(u.Provider,{value:S},n)};b.defaultProps={baseUrl:"",children:void 0,sessionTokenViaCookie:!1};const g=e.lazy((async()=>((await Promise.resolve().then((function(){return s(require("@descope/web-component"))}))).default.sdkConfigOverrides={baseHeaders:c},{default:({projectId:e,flowId:t,baseUrl:r,innerRef:s,tenant:n,theme:u,debug:i,telemetryKey:a,redirectUrl:c,autoFocus:d})=>o.default.createElement("descope-wc",{"project-id":e,"flow-id":t,"base-url":r,ref:s,tenant:n,theme:u,debug:i,telemetryKey:a,"redirect-url":c,"auto-focus":d})}))),w=o.default.forwardRef((({flowId:t,onSuccess:r,onError:s,tenant:n,theme:i,debug:a,telemetryKey:c,redirectUrl:d,autoFocus:l},f)=>{const[p,h]=e.useState(null);e.useImperativeHandle(f,(()=>p));const{projectId:m,baseUrl:k,sdk:b}=o.default.useContext(u),w=e.useCallback((async e=>{await b.httpClient.hooks.afterRequest({},new Response(JSON.stringify(e.detail))),r&&r(e)}),[r]);return e.useEffect((()=>{const e=p;return e?.addEventListener("success",w),s&&e?.addEventListener("error",s),()=>{s&&e?.removeEventListener("error",s),e?.removeEventListener("success",w)}}),[p,s,w]),o.default.createElement("form",null,o.default.createElement(e.Suspense,{fallback:null},o.default.createElement(g,{projectId:m,flowId:t,baseUrl:k,innerRef:h,tenant:n,theme:i,debug:a,telemetryKey:c,redirectUrl:d,autoFocus:l})))}));w.defaultProps={onError:void 0,onSuccess:void 0};var y=()=>{const t=e.useContext(u);if(!t)throw Error("You can only use this hook in the context of <AuthProvider />");return t};const S=e=>`You can only use this ${e} after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component`,v={get(e,t){if("object"==typeof e[t]&&null!==e[t])return new Proxy(e[t],v);if("function"==typeof e[t])return()=>{throw Error(S("function"))};throw Error(S("attribute"))}};exports.AuthProvider=b,exports.Descope=w,exports.SignInFlow=e=>o.default.createElement(w,{...e,flowId:"sign-in"}),exports.SignUpFlow=e=>o.default.createElement(w,{...e,flowId:"sign-up"}),exports.SignUpOrInFlow=e=>o.default.createElement(w,{...e,flowId:"sign-up-or-in"}),exports.getJwtPermissions=m,exports.getJwtRoles=k,exports.getRefreshToken=h,exports.getSessionToken=p,exports.refresh=(e=h())=>l?.refresh(e),exports.useDescope=()=>{const{sdk:t}=y();return e.useMemo((()=>t||new Proxy(f({projectId:"dummy"}),v)),[t])},exports.useSession=()=>{const{session:t,isSessionLoading:r,fetchSession:s}=y(),o=e.useRef(r);return e.useMemo((()=>{o.current=r}),[r]),e.useMemo((()=>{t||r||(o.current=!0)}),[s]),e.useEffect((()=>{t||r||s()}),[s]),{isSessionLoading:o.current,sessionToken:t,isAuthenticated:!!t}},exports.useUser=()=>{const{user:t,fetchUser:r,isUserLoading:s,session:o}=y(),[n,u]=e.useState(!1),i=e.useRef(s),a=e.useMemo((()=>!t&&!s&&o&&!n),[r,o,n]);return e.useMemo((()=>{i.current=s}),[s]),e.useMemo((()=>{a&&(i.current=!0)}),[a]),e.useEffect((()=>{a&&(u(!0),r())}),[a]),{isUserLoading:i.current,user:t}};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("@descope/web-js-sdk");function r(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function s(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var s=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,s.get?s:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var o=r(e),n=r(t);const u=o.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 r;try{r=e(...t)}catch(e){console.error(e)}return r},c={"x-descope-sdk-name":"react","x-descope-sdk-version":"1.0.5"},d="undefined"!=typeof window;let l;const f=e=>{const t=n.default({...e,persistTokens:d,autoRefresh:d});return l=t,t};l=f({projectId:"temp pid"});const p=()=>d?l?.getSessionToken():(console.warn("Get session token is not supported in SSR"),""),h=()=>d?l?.getRefreshToken():(console.warn("Get refresh token is not supported in SSR"),""),m=a(((e=p(),t)=>l?.getJwtPermissions(e,t))),k=a(((e=p(),t)=>l?.getJwtRoles(e,t)));const b=({projectId:t,baseUrl:r,sessionTokenViaCookie:s,children:n})=>{const[a,d]=e.useState(),[l,p]=e.useState(),[h,m]=e.useState(!1),[k,b]=e.useState(!1),g=(({projectId:t,baseUrl:r,sessionTokenViaCookie:s})=>e.useMemo((()=>{if(t)return f({projectId:t,baseUrl:r,sessionTokenViaCookie:s,baseHeaders:c,persistToken:!0,autoRefresh:!0})}),[t,r,s]))({projectId:t,baseUrl:r,sessionTokenViaCookie:s});e.useEffect((()=>{if(g){const e=g.onSessionTokenChange(p),t=g.onUserChange(d);return()=>{e(),t()}}}),[g]);const w=e.useRef(!1),y=e.useCallback((()=>{w.current||(w.current=!0,b(!0),i(g?.refresh)().then((()=>{b(!1)})))}),[g]),S=e.useCallback((()=>{m(!0),i(g.me)().then((()=>{m(!1)}))}),[g]),v=e.useMemo((()=>({fetchUser:S,user:a,isUserLoading:h,fetchSession:y,session:l,isSessionLoading:k,projectId:t,baseUrl:r,setUser:d,setSession:p,sdk:g})),[S,a,h,y,l,k,t,r,d,p,g]);return o.default.createElement(u.Provider,{value:v},n)};b.defaultProps={baseUrl:"",children:void 0,sessionTokenViaCookie:!1};const g=e.lazy((async()=>((await Promise.resolve().then((function(){return s(require("@descope/web-component"))}))).default.sdkConfigOverrides={baseHeaders:c},{default:({projectId:e,flowId:t,baseUrl:r,innerRef:s,tenant:n,theme:u,debug:i,telemetryKey:a,redirectUrl:c,autoFocus:d})=>o.default.createElement("descope-wc",{"project-id":e,"flow-id":t,"base-url":r,ref:s,tenant:n,theme:u,debug:i,telemetryKey:a,"redirect-url":c,"auto-focus":d})}))),w=o.default.forwardRef((({flowId:t,onSuccess:r,onError:s,tenant:n,theme:i,debug:a,telemetryKey:c,redirectUrl:d,autoFocus:l},f)=>{const[p,h]=e.useState(null);e.useImperativeHandle(f,(()=>p));const{projectId:m,baseUrl:k,sdk:b}=o.default.useContext(u),w=e.useCallback((async e=>{await b.httpClient.hooks.afterRequest({},new Response(JSON.stringify(e.detail))),r&&r(e)}),[r]);return e.useEffect((()=>{const e=p;return e?.addEventListener("success",w),s&&e?.addEventListener("error",s),()=>{s&&e?.removeEventListener("error",s),e?.removeEventListener("success",w)}}),[p,s,w]),o.default.createElement("form",null,o.default.createElement(e.Suspense,{fallback:null},o.default.createElement(g,{projectId:m,flowId:t,baseUrl:k,innerRef:h,tenant:n,theme:i,debug:a,telemetryKey:c,redirectUrl:d,autoFocus:l})))}));w.defaultProps={onError:void 0,onSuccess:void 0};var y=()=>{const t=e.useContext(u);if(!t)throw Error("You can only use this hook in the context of <AuthProvider />");return t};const S=e=>`You can only use this ${e} after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component`,v={get(e,t){if("object"==typeof e[t]&&null!==e[t])return new Proxy(e[t],v);if("function"==typeof e[t])return()=>{throw Error(S("function"))};throw Error(S("attribute"))}};exports.AuthProvider=b,exports.Descope=w,exports.SignInFlow=e=>o.default.createElement(w,{...e,flowId:"sign-in"}),exports.SignUpFlow=e=>o.default.createElement(w,{...e,flowId:"sign-up"}),exports.SignUpOrInFlow=e=>o.default.createElement(w,{...e,flowId:"sign-up-or-in"}),exports.getJwtPermissions=m,exports.getJwtRoles=k,exports.getRefreshToken=h,exports.getSessionToken=p,exports.refresh=(e=h())=>l?.refresh(e),exports.useDescope=()=>{const{sdk:t}=y();return e.useMemo((()=>t||new Proxy(f({projectId:"dummy"}),v)),[t])},exports.useSession=()=>{const{session:t,isSessionLoading:r,fetchSession:s}=y(),o=e.useRef(r);return e.useMemo((()=>{o.current=r}),[r]),e.useMemo((()=>{t||r||(o.current=!0)}),[s]),e.useEffect((()=>{t||r||s()}),[s]),{isSessionLoading:o.current,sessionToken:t,isAuthenticated:!!t}},exports.useUser=()=>{const{user:t,fetchUser:r,isUserLoading:s,session:o}=y(),[n,u]=e.useState(!1),i=e.useRef(s),a=e.useMemo((()=>!t&&!s&&o&&!n),[r,o,n]);return e.useMemo((()=>{i.current=s}),[s]),e.useMemo((()=>{a&&(i.current=!0)}),[a]),e.useEffect((()=>{a&&(u(!0),r())}),[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/hooks/useDescope.ts","../../src/components/DefaultFlows.tsx","../../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 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\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\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 { useMemo } from 'react';\nimport { Sdk } from '../types';\nimport useContext from './useContext';\nimport createSdk from '../sdk';\n\nconst generateErrorMsg = (entryType: string) =>\n\t`You can only use this ${entryType} after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component`;\n\n// handler which throw an error for every SDK function\nconst proxyThrowHandler = {\n\t// eslint-disable-next-line prefer-arrow/prefer-arrow-functions\n\tget(target: Record<string, any>, key: string) {\n\t\tif (typeof target[key] === 'object' && target[key] !== null) {\n\t\t\treturn new Proxy(target[key], proxyThrowHandler);\n\t\t}\n\n\t\tif (typeof target[key] === 'function') {\n\t\t\treturn () => {\n\t\t\t\tthrow Error(generateErrorMsg('function'));\n\t\t\t};\n\t\t}\n\n\t\tthrow Error(generateErrorMsg('attribute'));\n\t}\n};\n\nconst useDescope = (): Sdk => {\n\tconst { sdk } = useContext();\n\n\treturn useMemo(() => {\n\t\tif (!sdk) {\n\t\t\t// In case the SDK is not initialized, we want to throw an error when the SDK functions are called\n\t\t\treturn new Proxy(\n\t\t\t\tcreateSdk({ projectId: 'dummy' }),\n\t\t\t\tproxyThrowHandler\n\t\t\t) as Sdk;\n\t\t}\n\n\t\treturn sdk;\n\t}, [sdk]);\n};\n\nexport default useDescope;\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 { 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","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","generateErrorMsg","entryType","proxyThrowHandler","get","target","key","Proxy","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/hooks/useDescope.ts","../../src/components/DefaultFlows.tsx","../../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, {\n\tFC,\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState\n} 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 isSessionFetched = useRef(false);\n\n\tconst fetchSession = useCallback(() => {\n\t\t// We want that the session will fetched only once\n\t\tif (isSessionFetched.current) return;\n\t\tisSessionFetched.current = true;\n\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 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\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\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 { useMemo } from 'react';\nimport { Sdk } from '../types';\nimport useContext from './useContext';\nimport createSdk from '../sdk';\n\nconst generateErrorMsg = (entryType: string) =>\n\t`You can only use this ${entryType} after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component`;\n\n// handler which throw an error for every SDK function\nconst proxyThrowHandler = {\n\t// eslint-disable-next-line prefer-arrow/prefer-arrow-functions\n\tget(target: Record<string, any>, key: string) {\n\t\tif (typeof target[key] === 'object' && target[key] !== null) {\n\t\t\treturn new Proxy(target[key], proxyThrowHandler);\n\t\t}\n\n\t\tif (typeof target[key] === 'function') {\n\t\t\treturn () => {\n\t\t\t\tthrow Error(generateErrorMsg('function'));\n\t\t\t};\n\t\t}\n\n\t\tthrow Error(generateErrorMsg('attribute'));\n\t}\n};\n\nconst useDescope = (): Sdk => {\n\tconst { sdk } = useContext();\n\n\treturn useMemo(() => {\n\t\tif (!sdk) {\n\t\t\t// In case the SDK is not initialized, we want to throw an error when the SDK functions are called\n\t\t\treturn new Proxy(\n\t\t\t\tcreateSdk({ projectId: 'dummy' }),\n\t\t\t\tproxyThrowHandler\n\t\t\t) as Sdk;\n\t\t}\n\n\t\treturn sdk;\n\t}, [sdk]);\n};\n\nexport default useDescope;\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 { 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","isSessionFetched","useRef","fetchSession","useCallback","current","refresh","then","fetchUser","me","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","generateErrorMsg","entryType","proxyThrowHandler","get","target","key","Proxy","props","isLoading","sessionToken","isAuthenticated","isInit","setIsInit","shouldFetchUser"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- /// <reference types="react" />
2
- declare const App: () => JSX.Element;
1
+ import React from 'react';
2
+ declare const App: () => React.JSX.Element;
3
3
  export default App;
@@ -1,3 +1,3 @@
1
- /// <reference types="react" />
2
- declare const Home: () => JSX.Element;
1
+ import React from 'react';
2
+ declare const Home: () => React.JSX.Element;
3
3
  export default Home;
@@ -1,3 +1,3 @@
1
- /// <reference types="react" />
2
- declare const Login: () => JSX.Element;
1
+ import React from 'react';
2
+ declare const Login: () => React.JSX.Element;
3
3
  export default Login;
@@ -1,3 +1,3 @@
1
- /// <reference types="react" />
2
- declare const StepUp: () => JSX.Element;
1
+ import React from 'react';
2
+ declare const StepUp: () => React.JSX.Element;
3
3
  export default StepUp;