@descope/react-sdk 2.7.1 → 2.8.0
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 +9 -1
- package/dist/cjs/components/AuthProvider/AuthProvider.js +1 -1
- package/dist/cjs/components/AuthProvider/AuthProvider.js.map +1 -1
- package/dist/cjs/constants.js +1 -1
- package/dist/cjs/hooks/useSession.js +1 -1
- package/dist/cjs/hooks/useSession.js.map +1 -1
- package/dist/cjs/hooks/useUser.js +1 -1
- package/dist/cjs/hooks/useUser.js.map +1 -1
- package/dist/esm/components/AuthProvider/AuthProvider.js +1 -1
- package/dist/esm/components/AuthProvider/AuthProvider.js.map +1 -1
- package/dist/esm/constants.js +1 -1
- package/dist/esm/hooks/useSession.js +1 -1
- package/dist/esm/hooks/useSession.js.map +1 -1
- package/dist/esm/hooks/useUser.js +1 -1
- package/dist/esm/hooks/useUser.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.umd.js +2 -2
- package/dist/index.umd.js.map +1 -1
- package/dist/types/sdk.d.ts +3 -0
- package/dist/types/types.d.ts +1 -0
- package/package.json +10 -10
package/README.md
CHANGED
|
@@ -251,6 +251,7 @@ const App = () => {
|
|
|
251
251
|
// NOTE - `useDescope`, `useSession`, `useUser` should be used inside `AuthProvider` context,
|
|
252
252
|
// and will throw an exception if this requirement is not met
|
|
253
253
|
// useSession retrieves authentication state, session loading status, and session token
|
|
254
|
+
// If the session token is managed in cookies in project settings, sessionToken will be empty.
|
|
254
255
|
const { isAuthenticated, isSessionLoading, sessionToken } = useSession();
|
|
255
256
|
// useUser retrieves the logged in user information
|
|
256
257
|
const { user, isUserLoading } = useUser();
|
|
@@ -344,6 +345,8 @@ const Component = () => {
|
|
|
344
345
|
}
|
|
345
346
|
```
|
|
346
347
|
|
|
348
|
+
Note that ff Descope project settings are configured to manage session token in cookies, the `getSessionToken` function will return an empty string.
|
|
349
|
+
|
|
347
350
|
#### 2. Passing `sessionTokenViaCookie` boolean prop to the `AuthProvider`
|
|
348
351
|
|
|
349
352
|
Passing `sessionTokenViaCookie` prop to `AuthProvider` component. Descope SDK will automatically store session token on the `DS` cookie.
|
|
@@ -373,6 +376,11 @@ In addition, some browsers (e.g. Safari) may not store `Secure` cookie if the ho
|
|
|
373
376
|
The session token cookie is set to [`SameSite=Strict`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#samesitesamesite-value) by default.
|
|
374
377
|
If you need to customize this, you can set `sessionTokenViaCookie={sameSite: 'Lax'}`
|
|
375
378
|
|
|
379
|
+
#### 3. Configure Descope project to manage session token in cookies
|
|
380
|
+
|
|
381
|
+
If project settings are configured to manage session token in cookies, Descope services will automatically set the session token in the `DS` cookie as a `Secure` and `HttpOnly` cookie. In this case, the session token will not be stored in the browser's and will not be accessible to the client-side code using `useSession` or `getSessionToken`.
|
|
382
|
+
|
|
383
|
+
````js
|
|
376
384
|
### Helper Functions
|
|
377
385
|
|
|
378
386
|
You can also use the following functions to assist with various actions managing your JWT.
|
|
@@ -425,7 +433,7 @@ const AppRoot = () => {
|
|
|
425
433
|
</AuthProvider>
|
|
426
434
|
);
|
|
427
435
|
};
|
|
428
|
-
|
|
436
|
+
````
|
|
429
437
|
|
|
430
438
|
### Last User Persistence
|
|
431
439
|
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../../hooks/Context.js"),s=require("../../utils.js"),r=require("./useSdk.js");function o(e){return e&&e.__esModule?e:{default:e}}var a=o(e);exports.default=({projectId:o,baseUrl:n="",baseStaticUrl:i="",sessionTokenViaCookie:u=!1,persistTokens:c=!0,storeLastAuthenticatedUser:d=!0,keepLastAuthenticatedUserAfterLogout:
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../../hooks/Context.js"),s=require("../../utils.js"),r=require("./useSdk.js");function o(e){return e&&e.__esModule?e:{default:e}}var a=o(e);exports.default=({projectId:o,baseUrl:n="",baseStaticUrl:i="",sessionTokenViaCookie:u=!1,persistTokens:c=!0,storeLastAuthenticatedUser:d=!0,keepLastAuthenticatedUserAfterLogout:h=!1,refreshCookieName:l="",children:f})=>{const[k,U]=e.useState(),[S,p]=e.useState(),[A,C]=e.useState(!1),[L,b]=e.useState(!1),[g,j]=e.useState(!1),m=r.default({projectId:o,baseUrl:n,persistTokens:c,sessionTokenViaCookie:u,storeLastAuthenticatedUser:d,keepLastAuthenticatedUserAfterLogout:h,refreshCookieName:l});e.useEffect((()=>{if(m){const e=m.onSessionTokenChange(p),t=m.onUserChange(U),s=m.onIsAuthenticatedChange(C);return()=>{e(),t(),s()}}}),[m]);const v=e.useRef(!1),T=e.useRef(!1),q=e.useCallback((()=>{v.current||(v.current=!0,j(!0),s.withValidation(null==m?void 0:m.refresh)().then((()=>{j(!1)})))}),[m]),I=e.useCallback((()=>{T.current||(T.current=!0,b(!0),s.withValidation(m.me)().then((()=>{b(!1)})))}),[m]),V=e.useMemo((()=>({fetchUser:I,user:k,isUserLoading:L,isUserFetched:T.current,fetchSession:q,session:S,isAuthenticated:A,isSessionLoading:g,isSessionFetched:v.current,projectId:o,baseUrl:n,baseStaticUrl:i,storeLastAuthenticatedUser:d,keepLastAuthenticatedUserAfterLogout:h,refreshCookieName:l,setUser:U,setSession:p,sdk:m})),[I,k,L,T.current,q,S,A,g,v.current,o,n,i,h,l,U,p,m]);return a.default.createElement(t.default.Provider,{value:V},f)};
|
|
2
2
|
//# sourceMappingURL=AuthProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthProvider.js","sources":["../../../../src/components/AuthProvider/AuthProvider.tsx"],"sourcesContent":["import React, {\n FC,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport Context from '../../hooks/Context';\nimport { IContext, User } from '../../types';\nimport { withValidation } from '../../utils';\nimport useSdk from './useSdk';\n\ntype SameSite = 'Strict' | 'Lax' | 'None';\ninterface IAuthProviderProps {\n projectId: string;\n baseUrl?: string;\n // allows to override the base URL that is used to fetch static files\n baseStaticUrl?: string;\n // If true, tokens will be stored on local storage and can accessed with getToken function\n persistTokens?: boolean;\n // If true, session token (jwt) will be stored on cookie. Otherwise, the session token will be\n // stored on local storage and can accessed with getSessionToken function\n // Use this option if session token will stay small (less than 1k)\n // NOTE: Session token can grow, especially in cases of using authorization, or adding custom claims\n sessionTokenViaCookie?: boolean | { sameSite: SameSite };\n // If true, last authenticated user will be stored on local storage and can accessed with getUser function\n storeLastAuthenticatedUser?: boolean;\n // If true, last authenticated user will not be removed after logout\n keepLastAuthenticatedUserAfterLogout?: boolean;\n // Use this option if the authentication is done via cookie, and configured with a different name\n // Currently, this is done using Descope Flows\n refreshCookieName?: string;\n children?: React.ReactNode;\n}\n\nconst AuthProvider: FC<IAuthProviderProps> = ({\n projectId,\n baseUrl = '',\n baseStaticUrl = '',\n sessionTokenViaCookie = false,\n persistTokens = true,\n storeLastAuthenticatedUser = true,\n keepLastAuthenticatedUserAfterLogout = false,\n refreshCookieName = '',\n children = undefined,\n}) => {\n const [user, setUser] = useState<User>();\n const [session, setSession] = useState<string>();\n\n const [isUserLoading, setIsUserLoading] = useState(false);\n const [isSessionLoading, setIsSessionLoading] = useState(false);\n\n const sdk = useSdk({\n projectId,\n baseUrl,\n persistTokens,\n sessionTokenViaCookie,\n storeLastAuthenticatedUser,\n keepLastAuthenticatedUserAfterLogout,\n refreshCookieName,\n });\n\n useEffect(() => {\n if (sdk) {\n const unsubscribeSessionToken = sdk.onSessionTokenChange(setSession);\n const unsubscribeUser = sdk.onUserChange(setUser);\n\n return () => {\n unsubscribeSessionToken();\n unsubscribeUser();\n };\n }\n return undefined;\n }, [sdk]);\n\n const isSessionFetched = useRef(false);\n const isUserFetched = useRef(false);\n\n const fetchSession = useCallback(() => {\n // We want that the session will fetched only once\n if (isSessionFetched.current) return;\n isSessionFetched.current = true;\n\n setIsSessionLoading(true);\n withValidation(sdk?.refresh)().then(() => {\n setIsSessionLoading(false);\n });\n }, [sdk]);\n\n const fetchUser = useCallback(() => {\n // We want that the user will fetched only once\n if (isUserFetched.current) return;\n isUserFetched.current = true;\n\n setIsUserLoading(true);\n withValidation(sdk.me)().then(() => {\n setIsUserLoading(false);\n });\n }, [sdk]);\n\n const value = useMemo<IContext>(\n () => ({\n fetchUser,\n user,\n isUserLoading,\n isUserFetched: isUserFetched.current,\n fetchSession,\n session,\n isSessionLoading,\n isSessionFetched: isSessionFetched.current,\n projectId,\n baseUrl,\n baseStaticUrl,\n storeLastAuthenticatedUser,\n keepLastAuthenticatedUserAfterLogout,\n refreshCookieName,\n setUser,\n setSession,\n sdk,\n }),\n [\n fetchUser,\n user,\n isUserLoading,\n isUserFetched.current,\n fetchSession,\n session,\n isSessionLoading,\n isSessionFetched.current,\n projectId,\n baseUrl,\n baseStaticUrl,\n keepLastAuthenticatedUserAfterLogout,\n refreshCookieName,\n setUser,\n setSession,\n sdk,\n ],\n );\n return <Context.Provider value={value}>{children}</Context.Provider>;\n};\n\nexport default AuthProvider;\n"],"names":["projectId","baseUrl","baseStaticUrl","sessionTokenViaCookie","persistTokens","storeLastAuthenticatedUser","keepLastAuthenticatedUserAfterLogout","refreshCookieName","children","user","setUser","useState","session","setSession","isUserLoading","setIsUserLoading","isSessionLoading","setIsSessionLoading","sdk","useSdk","useEffect","unsubscribeSessionToken","onSessionTokenChange","unsubscribeUser","onUserChange","isSessionFetched","useRef","isUserFetched","fetchSession","useCallback","current","withValidation","refresh","then","fetchUser","me","value","useMemo","React","default","createElement","Context","Provider"],"mappings":"kQAoC6C,EAC3CA,YACAC,UAAU,GACVC,gBAAgB,GAChBC,yBAAwB,EACxBC,iBAAgB,EAChBC,8BAA6B,EAC7BC,wCAAuC,EACvCC,oBAAoB,GACpBC,eAEA,MAAOC,EAAMC,GAAWC,EAAQA,YACzBC,EAASC,GAAcF,EAAQA,
|
|
1
|
+
{"version":3,"file":"AuthProvider.js","sources":["../../../../src/components/AuthProvider/AuthProvider.tsx"],"sourcesContent":["import React, {\n FC,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport Context from '../../hooks/Context';\nimport { IContext, User } from '../../types';\nimport { withValidation } from '../../utils';\nimport useSdk from './useSdk';\n\ntype SameSite = 'Strict' | 'Lax' | 'None';\ninterface IAuthProviderProps {\n projectId: string;\n baseUrl?: string;\n // allows to override the base URL that is used to fetch static files\n baseStaticUrl?: string;\n // If true, tokens will be stored on local storage and can accessed with getToken function\n persistTokens?: boolean;\n // If true, session token (jwt) will be stored on cookie. Otherwise, the session token will be\n // stored on local storage and can accessed with getSessionToken function\n // Use this option if session token will stay small (less than 1k)\n // NOTE: Session token can grow, especially in cases of using authorization, or adding custom claims\n sessionTokenViaCookie?: boolean | { sameSite: SameSite };\n // If true, last authenticated user will be stored on local storage and can accessed with getUser function\n storeLastAuthenticatedUser?: boolean;\n // If true, last authenticated user will not be removed after logout\n keepLastAuthenticatedUserAfterLogout?: boolean;\n // Use this option if the authentication is done via cookie, and configured with a different name\n // Currently, this is done using Descope Flows\n refreshCookieName?: string;\n children?: React.ReactNode;\n}\n\nconst AuthProvider: FC<IAuthProviderProps> = ({\n projectId,\n baseUrl = '',\n baseStaticUrl = '',\n sessionTokenViaCookie = false,\n persistTokens = true,\n storeLastAuthenticatedUser = true,\n keepLastAuthenticatedUserAfterLogout = false,\n refreshCookieName = '',\n children = undefined,\n}) => {\n const [user, setUser] = useState<User>();\n const [session, setSession] = useState<string>();\n const [isAuthenticated, setIsAuthenticated] = useState(false);\n\n const [isUserLoading, setIsUserLoading] = useState(false);\n const [isSessionLoading, setIsSessionLoading] = useState(false);\n\n const sdk = useSdk({\n projectId,\n baseUrl,\n persistTokens,\n sessionTokenViaCookie,\n storeLastAuthenticatedUser,\n keepLastAuthenticatedUserAfterLogout,\n refreshCookieName,\n });\n\n useEffect(() => {\n if (sdk) {\n const unsubscribeSessionToken = sdk.onSessionTokenChange(setSession);\n const unsubscribeUser = sdk.onUserChange(setUser);\n const unsubscribeIsAuthenticated =\n sdk.onIsAuthenticatedChange(setIsAuthenticated);\n\n return () => {\n unsubscribeSessionToken();\n unsubscribeUser();\n unsubscribeIsAuthenticated();\n };\n }\n return undefined;\n }, [sdk]);\n\n const isSessionFetched = useRef(false);\n const isUserFetched = useRef(false);\n\n const fetchSession = useCallback(() => {\n // We want that the session will fetched only once\n if (isSessionFetched.current) return;\n isSessionFetched.current = true;\n\n setIsSessionLoading(true);\n withValidation(sdk?.refresh)().then(() => {\n setIsSessionLoading(false);\n });\n }, [sdk]);\n\n const fetchUser = useCallback(() => {\n // We want that the user will fetched only once\n if (isUserFetched.current) return;\n isUserFetched.current = true;\n\n setIsUserLoading(true);\n withValidation(sdk.me)().then(() => {\n setIsUserLoading(false);\n });\n }, [sdk]);\n\n const value = useMemo<IContext>(\n () => ({\n fetchUser,\n user,\n isUserLoading,\n isUserFetched: isUserFetched.current,\n fetchSession,\n session,\n isAuthenticated,\n isSessionLoading,\n isSessionFetched: isSessionFetched.current,\n projectId,\n baseUrl,\n baseStaticUrl,\n storeLastAuthenticatedUser,\n keepLastAuthenticatedUserAfterLogout,\n refreshCookieName,\n setUser,\n setSession,\n sdk,\n }),\n [\n fetchUser,\n user,\n isUserLoading,\n isUserFetched.current,\n fetchSession,\n session,\n isAuthenticated,\n isSessionLoading,\n isSessionFetched.current,\n projectId,\n baseUrl,\n baseStaticUrl,\n keepLastAuthenticatedUserAfterLogout,\n refreshCookieName,\n setUser,\n setSession,\n sdk,\n ],\n );\n return <Context.Provider value={value}>{children}</Context.Provider>;\n};\n\nexport default AuthProvider;\n"],"names":["projectId","baseUrl","baseStaticUrl","sessionTokenViaCookie","persistTokens","storeLastAuthenticatedUser","keepLastAuthenticatedUserAfterLogout","refreshCookieName","children","user","setUser","useState","session","setSession","isAuthenticated","setIsAuthenticated","isUserLoading","setIsUserLoading","isSessionLoading","setIsSessionLoading","sdk","useSdk","useEffect","unsubscribeSessionToken","onSessionTokenChange","unsubscribeUser","onUserChange","unsubscribeIsAuthenticated","onIsAuthenticatedChange","isSessionFetched","useRef","isUserFetched","fetchSession","useCallback","current","withValidation","refresh","then","fetchUser","me","value","useMemo","React","default","createElement","Context","Provider"],"mappings":"kQAoC6C,EAC3CA,YACAC,UAAU,GACVC,gBAAgB,GAChBC,yBAAwB,EACxBC,iBAAgB,EAChBC,8BAA6B,EAC7BC,wCAAuC,EACvCC,oBAAoB,GACpBC,eAEA,MAAOC,EAAMC,GAAWC,EAAQA,YACzBC,EAASC,GAAcF,EAAQA,YAC/BG,EAAiBC,GAAsBJ,EAAQA,UAAC,IAEhDK,EAAeC,GAAoBN,EAAQA,UAAC,IAC5CO,EAAkBC,GAAuBR,EAAQA,UAAC,GAEnDS,EAAMC,EAAAA,QAAO,CACjBrB,YACAC,UACAG,gBACAD,wBACAE,6BACAC,uCACAC,sBAGFe,EAAAA,WAAU,KACR,GAAIF,EAAK,CACP,MAAMG,EAA0BH,EAAII,qBAAqBX,GACnDY,EAAkBL,EAAIM,aAAahB,GACnCiB,EACJP,EAAIQ,wBAAwBb,GAE9B,MAAO,KACLQ,IACAE,IACAE,GAA4B,CAE/B,CACe,GACf,CAACP,IAEJ,MAAMS,EAAmBC,UAAO,GAC1BC,EAAgBD,UAAO,GAEvBE,EAAeC,EAAAA,aAAY,KAE3BJ,EAAiBK,UACrBL,EAAiBK,SAAU,EAE3Bf,GAAoB,GACpBgB,EAAAA,eAAef,eAAAA,EAAKgB,QAApBD,GAA+BE,MAAK,KAClClB,GAAoB,EAAM,IAC1B,GACD,CAACC,IAEEkB,EAAYL,EAAAA,aAAY,KAExBF,EAAcG,UAClBH,EAAcG,SAAU,EAExBjB,GAAiB,GACjBkB,EAAAA,eAAef,EAAImB,GAAnBJ,GAAyBE,MAAK,KAC5BpB,GAAiB,EAAM,IACvB,GACD,CAACG,IAEEoB,EAAQC,EAAAA,SACZ,KAAO,CACLH,YACA7B,OACAO,gBACAe,cAAeA,EAAcG,QAC7BF,eACApB,UACAE,kBACAI,mBACAW,iBAAkBA,EAAiBK,QACnClC,YACAC,UACAC,gBACAG,6BACAC,uCACAC,oBACAG,UACAG,aACAO,SAEF,CACEkB,EACA7B,EACAO,EACAe,EAAcG,QACdF,EACApB,EACAE,EACAI,EACAW,EAAiBK,QACjBlC,EACAC,EACAC,EACAI,EACAC,EACAG,EACAG,EACAO,IAGJ,OAAOsB,EAAAC,QAAAC,cAACC,UAAQC,SAAQ,CAACN,MAAOA,GAAQhC,EAA4B"}
|
package/dist/cjs/constants.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";const e="undefined"!=typeof window;exports.IS_BROWSER=e,exports.baseHeaders={"x-descope-sdk-name":"react","x-descope-sdk-version":"2.
|
|
1
|
+
"use strict";const e="undefined"!=typeof window;exports.IS_BROWSER=e,exports.baseHeaders={"x-descope-sdk-name":"react","x-descope-sdk-version":"2.8.0"};
|
|
2
2
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),s=require("./useContext.js");exports.default=()=>{const{session:t,isSessionLoading:
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),s=require("./useContext.js");exports.default=()=>{const{session:t,isSessionLoading:i,fetchSession:n,isSessionFetched:r,isAuthenticated:o}=s.default(),u=e.useRef(i);e.useMemo((()=>{u.current=i}),[i]);const c=!o&&!i;return e.useMemo((()=>{c&&!r&&(u.current=!0)}),[r]),e.useEffect((()=>{c&&n()}),[n]),{isSessionLoading:u.current,sessionToken:t,isAuthenticated:o}};
|
|
2
2
|
//# sourceMappingURL=useSession.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSession.js","sources":["../../../src/hooks/useSession.ts"],"sourcesContent":["import { useEffect, useMemo, useRef } from 'react';\nimport useContext from './useContext';\n\nconst useSession = () => {\n const {
|
|
1
|
+
{"version":3,"file":"useSession.js","sources":["../../../src/hooks/useSession.ts"],"sourcesContent":["import { useEffect, useMemo, useRef } from 'react';\nimport useContext from './useContext';\n\nconst useSession = () => {\n const {\n session,\n isSessionLoading,\n fetchSession,\n isSessionFetched,\n isAuthenticated,\n } = useContext();\n\n // when session should be received, we want the return value of \"isSessionLoading\" to be true starting from the first call\n // (and not only when receiving an update from the context)\n const isLoading = useRef(isSessionLoading);\n\n // we want this to happen before returning a value so we are using \"useMemo\" and not \"useEffect\"\n useMemo(() => {\n isLoading.current = isSessionLoading;\n }, [isSessionLoading]);\n\n const shouldFetchSession = !isAuthenticated && !isSessionLoading;\n\n // we want this to happen before returning a value so we are using \"useMemo\" and not \"useEffect\"\n useMemo(() => {\n if (shouldFetchSession && !isSessionFetched) {\n isLoading.current = true;\n }\n }, [isSessionFetched]);\n\n // Fetch session if it's not already fetched\n // We want this to happen only once, so the dependency array should not contain shouldFetchSession\n useEffect(() => {\n if (shouldFetchSession) {\n fetchSession();\n }\n }, [fetchSession]);\n return {\n isSessionLoading: isLoading.current,\n sessionToken: session,\n isAuthenticated,\n };\n};\n\nexport default useSession;\n"],"names":["session","isSessionLoading","fetchSession","isSessionFetched","isAuthenticated","useContext","isLoading","useRef","useMemo","current","shouldFetchSession","useEffect","sessionToken"],"mappings":"wIAGmB,KACjB,MAAMA,QACJA,EAAOC,iBACPA,EAAgBC,aAChBA,EAAYC,iBACZA,EAAgBC,gBAChBA,GACEC,EAAAA,UAIEC,EAAYC,SAAON,GAGzBO,EAAAA,SAAQ,KACNF,EAAUG,QAAUR,CAAgB,GACnC,CAACA,IAEJ,MAAMS,GAAsBN,IAAoBH,EAgBhD,OAbAO,EAAAA,SAAQ,KACFE,IAAuBP,IACzBG,EAAUG,SAAU,EACrB,GACA,CAACN,IAIJQ,EAAAA,WAAU,KACJD,GACFR,GACD,GACA,CAACA,IACG,CACLD,iBAAkBK,EAAUG,QAC5BG,aAAcZ,EACdI,kBACD"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("./useContext.js");exports.default=()=>{const{user:s,fetchUser:t,isUserLoading:u,isAuthenticated:c,isUserFetched:i}=r.default(),[o,n]=e.useState(!1),a=e.useRef(u),d=e.useMemo((()=>!s&&!u&&c&&!o),[t,c,o]);return e.useMemo((()=>{a.current=u}),[u]),e.useMemo((()=>{d&&!i&&(a.current=!0)}),[d,i]),e.useEffect((()=>{d&&(n(!0),t())}),[d]),{isUserLoading:a.current,user:s}};
|
|
2
2
|
//# sourceMappingURL=useUser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useUser.js","sources":["../../../src/hooks/useUser.ts"],"sourcesContent":["import { useEffect, useMemo, useRef, useState } from 'react';\nimport useContext from './useContext';\n\nconst useUser = () => {\n const { user, fetchUser, isUserLoading,
|
|
1
|
+
{"version":3,"file":"useUser.js","sources":["../../../src/hooks/useUser.ts"],"sourcesContent":["import { useEffect, useMemo, useRef, useState } from 'react';\nimport useContext from './useContext';\n\nconst useUser = () => {\n const { user, fetchUser, isUserLoading, isAuthenticated, isUserFetched } =\n useContext();\n const [isInit, setIsInit] = useState(false); // we want to get the user only in the first time we got a session\n\n // when session should be received, we want the return value of \"isUserLoading\" to be true starting from the first call\n // (and not only when receiving an update from the context)\n const isLoading = useRef(isUserLoading);\n\n const shouldFetchUser = useMemo(\n () => !user && !isUserLoading && isAuthenticated && !isInit,\n [fetchUser, isAuthenticated, isInit],\n );\n\n // we want this to happen before returning a value so we are using \"useMemo\" and not \"useEffect\"\n useMemo(() => {\n isLoading.current = isUserLoading;\n }, [isUserLoading]);\n\n // we want this to happen before returning a value so we are using \"useMemo\" and not \"useEffect\"\n useMemo(() => {\n if (shouldFetchUser && !isUserFetched) {\n isLoading.current = true;\n }\n }, [shouldFetchUser, isUserFetched]);\n\n useEffect(() => {\n if (shouldFetchUser) {\n setIsInit(true);\n fetchUser();\n }\n }, [shouldFetchUser]);\n\n return { isUserLoading: isLoading.current, user };\n};\n\nexport default useUser;\n"],"names":["user","fetchUser","isUserLoading","isAuthenticated","isUserFetched","useContext","isInit","setIsInit","useState","isLoading","useRef","shouldFetchUser","useMemo","current","useEffect"],"mappings":"wIAGgB,KACd,MAAMA,KAAEA,EAAIC,UAAEA,EAASC,cAAEA,EAAaC,gBAAEA,EAAeC,cAAEA,GACvDC,EAAAA,WACKC,EAAQC,GAAaC,EAAQA,UAAC,GAI/BC,EAAYC,SAAOR,GAEnBS,EAAkBC,EAAOA,SAC7B,KAAOZ,IAASE,GAAiBC,IAAoBG,GACrD,CAACL,EAAWE,EAAiBG,IAsB/B,OAlBAM,EAAAA,SAAQ,KACNH,EAAUI,QAAUX,CAAa,GAChC,CAACA,IAGJU,EAAAA,SAAQ,KACFD,IAAoBP,IACtBK,EAAUI,SAAU,EACrB,GACA,CAACF,EAAiBP,IAErBU,EAAAA,WAAU,KACJH,IACFJ,GAAU,GACVN,IACD,GACA,CAACU,IAEG,CAAET,cAAeO,EAAUI,QAASb,OAAM"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import e,{useState as t,useEffect as s,useRef as r,useCallback as o,useMemo as n}from"react";import i from"../../hooks/Context.js";import{withValidation as a}from"../../utils.js";import c from"./useSdk.js";const u=({projectId:u,baseUrl:h="",baseStaticUrl:d="",sessionTokenViaCookie:k=!1,persistTokens:U=!0,storeLastAuthenticatedUser:f=!0,keepLastAuthenticatedUserAfterLogout:m=!1,refreshCookieName:p="",children:l})=>{const[L
|
|
1
|
+
import e,{useState as t,useEffect as s,useRef as r,useCallback as o,useMemo as n}from"react";import i from"../../hooks/Context.js";import{withValidation as a}from"../../utils.js";import c from"./useSdk.js";const u=({projectId:u,baseUrl:h="",baseStaticUrl:d="",sessionTokenViaCookie:k=!1,persistTokens:U=!0,storeLastAuthenticatedUser:f=!0,keepLastAuthenticatedUserAfterLogout:m=!1,refreshCookieName:p="",children:l})=>{const[A,L]=t(),[C,g]=t(),[S,j]=t(!1),[b,T]=t(!1),[I,v]=t(!1),N=c({projectId:u,baseUrl:h,persistTokens:U,sessionTokenViaCookie:k,storeLastAuthenticatedUser:f,keepLastAuthenticatedUserAfterLogout:m,refreshCookieName:p});s((()=>{if(N){const e=N.onSessionTokenChange(g),t=N.onUserChange(L),s=N.onIsAuthenticatedChange(j);return()=>{e(),t(),s()}}}),[N]);const x=r(!1),F=r(!1),V=o((()=>{x.current||(x.current=!0,v(!0),a(null==N?void 0:N.refresh)().then((()=>{v(!1)})))}),[N]),E=o((()=>{F.current||(F.current=!0,T(!0),a(N.me)().then((()=>{T(!1)})))}),[N]),P=n((()=>({fetchUser:E,user:A,isUserLoading:b,isUserFetched:F.current,fetchSession:V,session:C,isAuthenticated:S,isSessionLoading:I,isSessionFetched:x.current,projectId:u,baseUrl:h,baseStaticUrl:d,storeLastAuthenticatedUser:f,keepLastAuthenticatedUserAfterLogout:m,refreshCookieName:p,setUser:L,setSession:g,sdk:N})),[E,A,b,F.current,V,C,S,I,x.current,u,h,d,m,p,L,g,N]);return e.createElement(i.Provider,{value:P},l)};export{u as default};
|
|
2
2
|
//# sourceMappingURL=AuthProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthProvider.js","sources":["../../../../src/components/AuthProvider/AuthProvider.tsx"],"sourcesContent":["import React, {\n FC,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport Context from '../../hooks/Context';\nimport { IContext, User } from '../../types';\nimport { withValidation } from '../../utils';\nimport useSdk from './useSdk';\n\ntype SameSite = 'Strict' | 'Lax' | 'None';\ninterface IAuthProviderProps {\n projectId: string;\n baseUrl?: string;\n // allows to override the base URL that is used to fetch static files\n baseStaticUrl?: string;\n // If true, tokens will be stored on local storage and can accessed with getToken function\n persistTokens?: boolean;\n // If true, session token (jwt) will be stored on cookie. Otherwise, the session token will be\n // stored on local storage and can accessed with getSessionToken function\n // Use this option if session token will stay small (less than 1k)\n // NOTE: Session token can grow, especially in cases of using authorization, or adding custom claims\n sessionTokenViaCookie?: boolean | { sameSite: SameSite };\n // If true, last authenticated user will be stored on local storage and can accessed with getUser function\n storeLastAuthenticatedUser?: boolean;\n // If true, last authenticated user will not be removed after logout\n keepLastAuthenticatedUserAfterLogout?: boolean;\n // Use this option if the authentication is done via cookie, and configured with a different name\n // Currently, this is done using Descope Flows\n refreshCookieName?: string;\n children?: React.ReactNode;\n}\n\nconst AuthProvider: FC<IAuthProviderProps> = ({\n projectId,\n baseUrl = '',\n baseStaticUrl = '',\n sessionTokenViaCookie = false,\n persistTokens = true,\n storeLastAuthenticatedUser = true,\n keepLastAuthenticatedUserAfterLogout = false,\n refreshCookieName = '',\n children = undefined,\n}) => {\n const [user, setUser] = useState<User>();\n const [session, setSession] = useState<string>();\n\n const [isUserLoading, setIsUserLoading] = useState(false);\n const [isSessionLoading, setIsSessionLoading] = useState(false);\n\n const sdk = useSdk({\n projectId,\n baseUrl,\n persistTokens,\n sessionTokenViaCookie,\n storeLastAuthenticatedUser,\n keepLastAuthenticatedUserAfterLogout,\n refreshCookieName,\n });\n\n useEffect(() => {\n if (sdk) {\n const unsubscribeSessionToken = sdk.onSessionTokenChange(setSession);\n const unsubscribeUser = sdk.onUserChange(setUser);\n\n return () => {\n unsubscribeSessionToken();\n unsubscribeUser();\n };\n }\n return undefined;\n }, [sdk]);\n\n const isSessionFetched = useRef(false);\n const isUserFetched = useRef(false);\n\n const fetchSession = useCallback(() => {\n // We want that the session will fetched only once\n if (isSessionFetched.current) return;\n isSessionFetched.current = true;\n\n setIsSessionLoading(true);\n withValidation(sdk?.refresh)().then(() => {\n setIsSessionLoading(false);\n });\n }, [sdk]);\n\n const fetchUser = useCallback(() => {\n // We want that the user will fetched only once\n if (isUserFetched.current) return;\n isUserFetched.current = true;\n\n setIsUserLoading(true);\n withValidation(sdk.me)().then(() => {\n setIsUserLoading(false);\n });\n }, [sdk]);\n\n const value = useMemo<IContext>(\n () => ({\n fetchUser,\n user,\n isUserLoading,\n isUserFetched: isUserFetched.current,\n fetchSession,\n session,\n isSessionLoading,\n isSessionFetched: isSessionFetched.current,\n projectId,\n baseUrl,\n baseStaticUrl,\n storeLastAuthenticatedUser,\n keepLastAuthenticatedUserAfterLogout,\n refreshCookieName,\n setUser,\n setSession,\n sdk,\n }),\n [\n fetchUser,\n user,\n isUserLoading,\n isUserFetched.current,\n fetchSession,\n session,\n isSessionLoading,\n isSessionFetched.current,\n projectId,\n baseUrl,\n baseStaticUrl,\n keepLastAuthenticatedUserAfterLogout,\n refreshCookieName,\n setUser,\n setSession,\n sdk,\n ],\n );\n return <Context.Provider value={value}>{children}</Context.Provider>;\n};\n\nexport default AuthProvider;\n"],"names":["AuthProvider","projectId","baseUrl","baseStaticUrl","sessionTokenViaCookie","persistTokens","storeLastAuthenticatedUser","keepLastAuthenticatedUserAfterLogout","refreshCookieName","children","user","setUser","useState","session","setSession","isUserLoading","setIsUserLoading","isSessionLoading","setIsSessionLoading","sdk","useSdk","useEffect","unsubscribeSessionToken","onSessionTokenChange","unsubscribeUser","onUserChange","isSessionFetched","useRef","isUserFetched","fetchSession","useCallback","current","withValidation","refresh","then","fetchUser","me","value","useMemo","React","createElement","Context","Provider"],"mappings":"8MAoCA,MAAMA,EAAuC,EAC3CC,YACAC,UAAU,GACVC,gBAAgB,GAChBC,yBAAwB,EACxBC,iBAAgB,EAChBC,8BAA6B,EAC7BC,wCAAuC,EACvCC,oBAAoB,GACpBC,eAEA,MAAOC,EAAMC,GAAWC,KACjBC,EAASC,GAAcF,
|
|
1
|
+
{"version":3,"file":"AuthProvider.js","sources":["../../../../src/components/AuthProvider/AuthProvider.tsx"],"sourcesContent":["import React, {\n FC,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport Context from '../../hooks/Context';\nimport { IContext, User } from '../../types';\nimport { withValidation } from '../../utils';\nimport useSdk from './useSdk';\n\ntype SameSite = 'Strict' | 'Lax' | 'None';\ninterface IAuthProviderProps {\n projectId: string;\n baseUrl?: string;\n // allows to override the base URL that is used to fetch static files\n baseStaticUrl?: string;\n // If true, tokens will be stored on local storage and can accessed with getToken function\n persistTokens?: boolean;\n // If true, session token (jwt) will be stored on cookie. Otherwise, the session token will be\n // stored on local storage and can accessed with getSessionToken function\n // Use this option if session token will stay small (less than 1k)\n // NOTE: Session token can grow, especially in cases of using authorization, or adding custom claims\n sessionTokenViaCookie?: boolean | { sameSite: SameSite };\n // If true, last authenticated user will be stored on local storage and can accessed with getUser function\n storeLastAuthenticatedUser?: boolean;\n // If true, last authenticated user will not be removed after logout\n keepLastAuthenticatedUserAfterLogout?: boolean;\n // Use this option if the authentication is done via cookie, and configured with a different name\n // Currently, this is done using Descope Flows\n refreshCookieName?: string;\n children?: React.ReactNode;\n}\n\nconst AuthProvider: FC<IAuthProviderProps> = ({\n projectId,\n baseUrl = '',\n baseStaticUrl = '',\n sessionTokenViaCookie = false,\n persistTokens = true,\n storeLastAuthenticatedUser = true,\n keepLastAuthenticatedUserAfterLogout = false,\n refreshCookieName = '',\n children = undefined,\n}) => {\n const [user, setUser] = useState<User>();\n const [session, setSession] = useState<string>();\n const [isAuthenticated, setIsAuthenticated] = useState(false);\n\n const [isUserLoading, setIsUserLoading] = useState(false);\n const [isSessionLoading, setIsSessionLoading] = useState(false);\n\n const sdk = useSdk({\n projectId,\n baseUrl,\n persistTokens,\n sessionTokenViaCookie,\n storeLastAuthenticatedUser,\n keepLastAuthenticatedUserAfterLogout,\n refreshCookieName,\n });\n\n useEffect(() => {\n if (sdk) {\n const unsubscribeSessionToken = sdk.onSessionTokenChange(setSession);\n const unsubscribeUser = sdk.onUserChange(setUser);\n const unsubscribeIsAuthenticated =\n sdk.onIsAuthenticatedChange(setIsAuthenticated);\n\n return () => {\n unsubscribeSessionToken();\n unsubscribeUser();\n unsubscribeIsAuthenticated();\n };\n }\n return undefined;\n }, [sdk]);\n\n const isSessionFetched = useRef(false);\n const isUserFetched = useRef(false);\n\n const fetchSession = useCallback(() => {\n // We want that the session will fetched only once\n if (isSessionFetched.current) return;\n isSessionFetched.current = true;\n\n setIsSessionLoading(true);\n withValidation(sdk?.refresh)().then(() => {\n setIsSessionLoading(false);\n });\n }, [sdk]);\n\n const fetchUser = useCallback(() => {\n // We want that the user will fetched only once\n if (isUserFetched.current) return;\n isUserFetched.current = true;\n\n setIsUserLoading(true);\n withValidation(sdk.me)().then(() => {\n setIsUserLoading(false);\n });\n }, [sdk]);\n\n const value = useMemo<IContext>(\n () => ({\n fetchUser,\n user,\n isUserLoading,\n isUserFetched: isUserFetched.current,\n fetchSession,\n session,\n isAuthenticated,\n isSessionLoading,\n isSessionFetched: isSessionFetched.current,\n projectId,\n baseUrl,\n baseStaticUrl,\n storeLastAuthenticatedUser,\n keepLastAuthenticatedUserAfterLogout,\n refreshCookieName,\n setUser,\n setSession,\n sdk,\n }),\n [\n fetchUser,\n user,\n isUserLoading,\n isUserFetched.current,\n fetchSession,\n session,\n isAuthenticated,\n isSessionLoading,\n isSessionFetched.current,\n projectId,\n baseUrl,\n baseStaticUrl,\n keepLastAuthenticatedUserAfterLogout,\n refreshCookieName,\n setUser,\n setSession,\n sdk,\n ],\n );\n return <Context.Provider value={value}>{children}</Context.Provider>;\n};\n\nexport default AuthProvider;\n"],"names":["AuthProvider","projectId","baseUrl","baseStaticUrl","sessionTokenViaCookie","persistTokens","storeLastAuthenticatedUser","keepLastAuthenticatedUserAfterLogout","refreshCookieName","children","user","setUser","useState","session","setSession","isAuthenticated","setIsAuthenticated","isUserLoading","setIsUserLoading","isSessionLoading","setIsSessionLoading","sdk","useSdk","useEffect","unsubscribeSessionToken","onSessionTokenChange","unsubscribeUser","onUserChange","unsubscribeIsAuthenticated","onIsAuthenticatedChange","isSessionFetched","useRef","isUserFetched","fetchSession","useCallback","current","withValidation","refresh","then","fetchUser","me","value","useMemo","React","createElement","Context","Provider"],"mappings":"8MAoCA,MAAMA,EAAuC,EAC3CC,YACAC,UAAU,GACVC,gBAAgB,GAChBC,yBAAwB,EACxBC,iBAAgB,EAChBC,8BAA6B,EAC7BC,wCAAuC,EACvCC,oBAAoB,GACpBC,eAEA,MAAOC,EAAMC,GAAWC,KACjBC,EAASC,GAAcF,KACvBG,EAAiBC,GAAsBJ,GAAS,IAEhDK,EAAeC,GAAoBN,GAAS,IAC5CO,EAAkBC,GAAuBR,GAAS,GAEnDS,EAAMC,EAAO,CACjBrB,YACAC,UACAG,gBACAD,wBACAE,6BACAC,uCACAC,sBAGFe,GAAU,KACR,GAAIF,EAAK,CACP,MAAMG,EAA0BH,EAAII,qBAAqBX,GACnDY,EAAkBL,EAAIM,aAAahB,GACnCiB,EACJP,EAAIQ,wBAAwBb,GAE9B,MAAO,KACLQ,IACAE,IACAE,GAA4B,CAE/B,CACe,GACf,CAACP,IAEJ,MAAMS,EAAmBC,GAAO,GAC1BC,EAAgBD,GAAO,GAEvBE,EAAeC,GAAY,KAE3BJ,EAAiBK,UACrBL,EAAiBK,SAAU,EAE3Bf,GAAoB,GACpBgB,EAAef,eAAAA,EAAKgB,QAApBD,GAA+BE,MAAK,KAClClB,GAAoB,EAAM,IAC1B,GACD,CAACC,IAEEkB,EAAYL,GAAY,KAExBF,EAAcG,UAClBH,EAAcG,SAAU,EAExBjB,GAAiB,GACjBkB,EAAef,EAAImB,GAAnBJ,GAAyBE,MAAK,KAC5BpB,GAAiB,EAAM,IACvB,GACD,CAACG,IAEEoB,EAAQC,GACZ,KAAO,CACLH,YACA7B,OACAO,gBACAe,cAAeA,EAAcG,QAC7BF,eACApB,UACAE,kBACAI,mBACAW,iBAAkBA,EAAiBK,QACnClC,YACAC,UACAC,gBACAG,6BACAC,uCACAC,oBACAG,UACAG,aACAO,SAEF,CACEkB,EACA7B,EACAO,EACAe,EAAcG,QACdF,EACApB,EACAE,EACAI,EACAW,EAAiBK,QACjBlC,EACAC,EACAC,EACAI,EACAC,EACAG,EACAG,EACAO,IAGJ,OAAOsB,EAAAC,cAACC,EAAQC,SAAQ,CAACL,MAAOA,GAAQhC,EAA4B"}
|
package/dist/esm/constants.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e={"x-descope-sdk-name":"react","x-descope-sdk-version":"2.
|
|
1
|
+
const e={"x-descope-sdk-name":"react","x-descope-sdk-version":"2.8.0"},d="undefined"!=typeof window;export{d as IS_BROWSER,e as baseHeaders};
|
|
2
2
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{useRef as s,useMemo as e,useEffect as t}from"react";import n from"./useContext.js";const o=()=>{const{session:o,isSessionLoading:i,fetchSession:r,isSessionFetched:c}=n(),
|
|
1
|
+
import{useRef as s,useMemo as e,useEffect as t}from"react";import n from"./useContext.js";const o=()=>{const{session:o,isSessionLoading:i,fetchSession:r,isSessionFetched:c,isAuthenticated:u}=n(),a=s(i);e((()=>{a.current=i}),[i]);const d=!u&&!i;return e((()=>{d&&!c&&(a.current=!0)}),[c]),t((()=>{d&&r()}),[r]),{isSessionLoading:a.current,sessionToken:o,isAuthenticated:u}};export{o as default};
|
|
2
2
|
//# sourceMappingURL=useSession.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSession.js","sources":["../../../src/hooks/useSession.ts"],"sourcesContent":["import { useEffect, useMemo, useRef } from 'react';\nimport useContext from './useContext';\n\nconst useSession = () => {\n const {
|
|
1
|
+
{"version":3,"file":"useSession.js","sources":["../../../src/hooks/useSession.ts"],"sourcesContent":["import { useEffect, useMemo, useRef } from 'react';\nimport useContext from './useContext';\n\nconst useSession = () => {\n const {\n session,\n isSessionLoading,\n fetchSession,\n isSessionFetched,\n isAuthenticated,\n } = useContext();\n\n // when session should be received, we want the return value of \"isSessionLoading\" to be true starting from the first call\n // (and not only when receiving an update from the context)\n const isLoading = useRef(isSessionLoading);\n\n // we want this to happen before returning a value so we are using \"useMemo\" and not \"useEffect\"\n useMemo(() => {\n isLoading.current = isSessionLoading;\n }, [isSessionLoading]);\n\n const shouldFetchSession = !isAuthenticated && !isSessionLoading;\n\n // we want this to happen before returning a value so we are using \"useMemo\" and not \"useEffect\"\n useMemo(() => {\n if (shouldFetchSession && !isSessionFetched) {\n isLoading.current = true;\n }\n }, [isSessionFetched]);\n\n // Fetch session if it's not already fetched\n // We want this to happen only once, so the dependency array should not contain shouldFetchSession\n useEffect(() => {\n if (shouldFetchSession) {\n fetchSession();\n }\n }, [fetchSession]);\n return {\n isSessionLoading: isLoading.current,\n sessionToken: session,\n isAuthenticated,\n };\n};\n\nexport default useSession;\n"],"names":["useSession","session","isSessionLoading","fetchSession","isSessionFetched","isAuthenticated","useContext","isLoading","useRef","useMemo","current","shouldFetchSession","useEffect","sessionToken"],"mappings":"0FAGM,MAAAA,EAAa,KACjB,MAAMC,QACJA,EAAOC,iBACPA,EAAgBC,aAChBA,EAAYC,iBACZA,EAAgBC,gBAChBA,GACEC,IAIEC,EAAYC,EAAON,GAGzBO,GAAQ,KACNF,EAAUG,QAAUR,CAAgB,GACnC,CAACA,IAEJ,MAAMS,GAAsBN,IAAoBH,EAgBhD,OAbAO,GAAQ,KACFE,IAAuBP,IACzBG,EAAUG,SAAU,EACrB,GACA,CAACN,IAIJQ,GAAU,KACJD,GACFR,GACD,GACA,CAACA,IACG,CACLD,iBAAkBK,EAAUG,QAC5BG,aAAcZ,EACdI,kBACD"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{useState as
|
|
1
|
+
import{useState as e,useRef as r,useMemo as t,useEffect as s}from"react";import n from"./useContext.js";const o=()=>{const{user:o,fetchUser:c,isUserLoading:i,isAuthenticated:u,isUserFetched:a}=n(),[d,f]=e(!1),m=r(i),U=t((()=>!o&&!i&&u&&!d),[c,u,d]);return t((()=>{m.current=i}),[i]),t((()=>{U&&!a&&(m.current=!0)}),[U,a]),s((()=>{U&&(f(!0),c())}),[U]),{isUserLoading:m.current,user:o}};export{o as default};
|
|
2
2
|
//# sourceMappingURL=useUser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useUser.js","sources":["../../../src/hooks/useUser.ts"],"sourcesContent":["import { useEffect, useMemo, useRef, useState } from 'react';\nimport useContext from './useContext';\n\nconst useUser = () => {\n const { user, fetchUser, isUserLoading,
|
|
1
|
+
{"version":3,"file":"useUser.js","sources":["../../../src/hooks/useUser.ts"],"sourcesContent":["import { useEffect, useMemo, useRef, useState } from 'react';\nimport useContext from './useContext';\n\nconst useUser = () => {\n const { user, fetchUser, isUserLoading, isAuthenticated, isUserFetched } =\n useContext();\n const [isInit, setIsInit] = useState(false); // we want to get the user only in the first time we got a session\n\n // when session should be received, we want the return value of \"isUserLoading\" to be true starting from the first call\n // (and not only when receiving an update from the context)\n const isLoading = useRef(isUserLoading);\n\n const shouldFetchUser = useMemo(\n () => !user && !isUserLoading && isAuthenticated && !isInit,\n [fetchUser, isAuthenticated, isInit],\n );\n\n // we want this to happen before returning a value so we are using \"useMemo\" and not \"useEffect\"\n useMemo(() => {\n isLoading.current = isUserLoading;\n }, [isUserLoading]);\n\n // we want this to happen before returning a value so we are using \"useMemo\" and not \"useEffect\"\n useMemo(() => {\n if (shouldFetchUser && !isUserFetched) {\n isLoading.current = true;\n }\n }, [shouldFetchUser, isUserFetched]);\n\n useEffect(() => {\n if (shouldFetchUser) {\n setIsInit(true);\n fetchUser();\n }\n }, [shouldFetchUser]);\n\n return { isUserLoading: isLoading.current, user };\n};\n\nexport default useUser;\n"],"names":["useUser","user","fetchUser","isUserLoading","isAuthenticated","isUserFetched","useContext","isInit","setIsInit","useState","isLoading","useRef","shouldFetchUser","useMemo","current","useEffect"],"mappings":"wGAGM,MAAAA,EAAU,KACd,MAAMC,KAAEA,EAAIC,UAAEA,EAASC,cAAEA,EAAaC,gBAAEA,EAAeC,cAAEA,GACvDC,KACKC,EAAQC,GAAaC,GAAS,GAI/BC,EAAYC,EAAOR,GAEnBS,EAAkBC,GACtB,KAAOZ,IAASE,GAAiBC,IAAoBG,GACrD,CAACL,EAAWE,EAAiBG,IAsB/B,OAlBAM,GAAQ,KACNH,EAAUI,QAAUX,CAAa,GAChC,CAACA,IAGJU,GAAQ,KACFD,IAAoBP,IACtBK,EAAUI,SAAU,EACrB,GACA,CAACF,EAAiBP,IAErBU,GAAU,KACJH,IACFJ,GAAU,GACVN,IACD,GACA,CAACU,IAEG,CAAET,cAAeO,EAAUI,QAASb,OAAM"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1303,6 +1303,7 @@ declare const createSdkWrapper: <P extends Omit<{
|
|
|
1303
1303
|
}) & {
|
|
1304
1304
|
onSessionTokenChange: (cb: (data: string) => void) => () => any[];
|
|
1305
1305
|
onUserChange: (cb: (data: _1.UserResponse) => void) => () => any[];
|
|
1306
|
+
onIsAuthenticatedChange: (cb: (isAuthenticated: boolean) => void) => () => any[];
|
|
1306
1307
|
}) & {
|
|
1307
1308
|
getLastUserLoginId: () => string;
|
|
1308
1309
|
getLastUserDisplayName: () => string;
|