@descope/react-sdk 2.11.6 → 2.12.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 CHANGED
@@ -641,19 +641,21 @@ npm i && npm start
641
641
 
642
642
  See the following table for customization environment variables for the example app:
643
643
 
644
- | Env Variable | Description | Default value |
645
- | ----------------------- | ------------------------------------------------------------------------------------------------------------- | -------------------------------- |
646
- | DESCOPE_FLOW_ID | Which flow ID to use in the login page | **sign-up-or-in** |
647
- | DESCOPE_BASE_URL | Custom Descope base URL | None |
648
- | DESCOPE_BASE_STATIC_URL | Allows to override the base URL that is used to fetch static files | https://static.descope.com/pages |
649
- | DESCOPE_THEME | Flow theme | None |
650
- | DESCOPE_LOCALE | Flow locale | Browser's locale |
651
- | DESCOPE_REDIRECT_URL | Flow redirect URL for OAuth/SSO/Magic Link/Enchanted Link | None |
652
- | DESCOPE_TENANT_ID | Flow tenant ID for SSO/SAML | None |
653
- | DESCOPE_DEBUG_MODE | **"true"** - Enable debugger</br>**"false"** - Disable flow debugger | None |
654
- | DESCOPE_STEP_UP_FLOW_ID | Step up flow ID to show to logged in user (via button). e.g. "step-up". Button will be hidden if not provided | None |
655
- | DESCOPE_TELEMETRY_KEY | **String** - Telemetry public key provided by Descope Inc | None |
656
- | | | |
644
+ | Env Variable | Description | Default value |
645
+ | --------------------------- | ------------------------------------------------------------------------------------------------------------- | -------------------------------- |
646
+ | DESCOPE_FLOW_ID | Which flow ID to use in the login page | **sign-up-or-in** |
647
+ | DESCOPE_BASE_URL | Custom Descope base URL | None |
648
+ | DESCOPE_BASE_STATIC_URL | Allows to override the base URL that is used to fetch static files | https://static.descope.com/pages |
649
+ | DESCOPE_THEME | Flow theme | None |
650
+ | DESCOPE_LOCALE | Flow locale | Browser's locale |
651
+ | DESCOPE_REDIRECT_URL | Flow redirect URL for OAuth/SSO/Magic Link/Enchanted Link | None |
652
+ | DESCOPE_TENANT_ID | Flow tenant ID for SSO/SAML | None |
653
+ | DESCOPE_DEBUG_MODE | **"true"** - Enable debugger</br>**"false"** - Disable flow debugger | None |
654
+ | DESCOPE_STEP_UP_FLOW_ID | Step up flow ID to show to logged in user (via button). e.g. "step-up". Button will be hidden if not provided | None |
655
+ | DESCOPE_TELEMETRY_KEY | **String** - Telemetry public key provided by Descope Inc | None |
656
+ | | | |
657
+ | DESCOPE_OIDC_ENABLED | **"true"** - Use OIDC login | None |
658
+ | DESCOPE_OIDC_APPLICATION_ID | Descope OIDC Application ID, In case OIDC login is used | None |
657
659
 
658
660
  Example for `.env` file template:
659
661
 
@@ -712,6 +714,111 @@ const handleUpdateUser = useCallback(() => {
712
714
 
713
715
  To learn more please see the [Descope Documentation and API reference page](https://docs.descope.com/).
714
716
 
717
+ ## OIDC Login
718
+
719
+ Descope also supports OIDC login. To enable OIDC login, pass `oidcConfig` prop to the `AuthProvider` component. Example:
720
+
721
+ ### AuthProvider setup with OIDC
722
+
723
+ ```js
724
+ import { AuthProvider } from '@descope/react-sdk';
725
+
726
+ const AppRoot = () => {
727
+ return (
728
+ <AuthProvider
729
+ projectId="my-project-id" // also serves as the client ID
730
+ oidcConfig={true}
731
+
732
+ /* alternatively, you can pass the oidcConfig object
733
+ oidcConfig={{
734
+ applicationId: 'my-application-id', // optional, if not provided, the default OIDC application will be used
735
+
736
+ redirectUri: 'https://my-app.com/redirect', // optional, if not provided, the default redirect URI will be used
737
+
738
+
739
+ scope: 'openid profile email', // optional, if not provided, default is openid email offline_access roles descope.custom_claims
740
+ }}
741
+ */
742
+ >
743
+ <App />
744
+ </AuthProvider>
745
+ );
746
+ };
747
+ ```
748
+
749
+ ### Login
750
+
751
+ Use the `oidc.loginWithRedirect` method from the `useDescope` hook to trigger the OIDC login. Example:
752
+
753
+ ```js
754
+ const MyComponent = () => {
755
+ const sdk = useDescope();
756
+
757
+ return (
758
+ // ...
759
+ <button
760
+ onClick={() => {
761
+ sdk.oidc.loginWithRedirect({
762
+ // By default, the login will redirect the user to the current URL
763
+ // If you want to redirect the user to a different URL, you can specify it here
764
+ redirect_uri: window.location.origin,
765
+ });
766
+ }}
767
+ >
768
+ Login with OIDC
769
+ </button>
770
+ );
771
+ };
772
+ ```
773
+
774
+ ### Redirect back from OIDC provider
775
+
776
+ The `AuthProvider` will automatically handle the redirect back from the OIDC provider. The user will be redirected to the `redirect_uri` specified in the `oidc.login` method.
777
+
778
+ ### Logout
779
+
780
+ You can call `sdk.logout` to logout the user. Example:
781
+
782
+ ```js
783
+ const MyComponent = () => {
784
+ const sdk = useDescope();
785
+
786
+ return (
787
+ // ...
788
+ <button
789
+ onClick={() => {
790
+ sdk.logout();
791
+ }}
792
+ >
793
+ Logout
794
+ </button>
795
+ );
796
+ };
797
+ ```
798
+
799
+ If you want to redirect the user to a different URL after logout, you can use `oidc.logout` method. Example:
800
+
801
+ ```js
802
+ const MyComponent = () => {
803
+ const sdk = useDescope();
804
+
805
+ return (
806
+ // ...
807
+ <button
808
+ onClick={() => {
809
+ sdk.oidc.logout({
810
+ // by default, the logout will redirect the user to the current URL
811
+ // if you want to redirect the user to a different URL, you can specify it here
812
+ post_logout_redirect_uri: window.location.origin + '/after-logout',
813
+ });
814
+ }}
815
+ >
816
+ Logout
817
+ </button>
818
+ );
819
+ };
820
+ ```
821
+
715
822
  ## Contact Us
716
823
 
717
824
  If you need help you can email [Descope Support](mailto:support@descope.com)
@@ -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: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)};
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 i=o(e);exports.default=({projectId:o,baseUrl:n="",baseStaticUrl:a="",sessionTokenViaCookie:u=!1,persistTokens:c=!0,oidcConfig:d,storeLastAuthenticatedUser:f=!0,keepLastAuthenticatedUserAfterLogout:l=!1,refreshCookieName:h="",children:k})=>{const[U,S]=e.useState(),[C,L]=e.useState(),[g,p]=e.useState(!1),[A,b]=e.useState(!1),[j,m]=e.useState(!1),[v,I]=e.useState(!!d),T=e.useRef(!1),q=r.default({projectId:o,baseUrl:n,persistTokens:c,sessionTokenViaCookie:u,oidcConfig:d,storeLastAuthenticatedUser:f,keepLastAuthenticatedUserAfterLogout:l,refreshCookieName:h});e.useEffect((()=>{if(q){const e=q.onSessionTokenChange(L),t=q.onUserChange(S),s=q.onIsAuthenticatedChange(p);return()=>{e(),t(),s()}}}),[q]);const N=e.useRef(!1),V=e.useRef(!1);e.useEffect((()=>{q&&d&&!T.current&&(T.current=!0,q.oidc.finishLoginIfNeed().finally((()=>{I(!1),N.current=!0})))}),[]);const _=e.useCallback((()=>{N.current||(N.current=!0,m(!0),s.withValidation(null==q?void 0:q.refresh)().then((()=>{m(!1)})))}),[q]),x=e.useCallback((()=>{V.current||(V.current=!0,b(!0),s.withValidation(q.me)().then((()=>{b(!1)})))}),[q]),E=e.useMemo((()=>({fetchUser:x,user:U,isUserLoading:A,isUserFetched:V.current,fetchSession:_,session:C,isAuthenticated:g,isSessionLoading:j,isOidcLoading:v,isSessionFetched:N.current,projectId:o,baseUrl:n,baseStaticUrl:a,storeLastAuthenticatedUser:f,keepLastAuthenticatedUserAfterLogout:l,refreshCookieName:h,setUser:S,setSession:L,sdk:q})),[x,U,A,V.current,_,C,g,j,v,N.current,o,n,a,l,h,S,L,q]);return i.default.createElement(t.default.Provider,{value:E},k)};
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 { CookieConfig } from '@descope/web-js-sdk';\nimport Context from '../../hooks/Context';\nimport { IContext, User } from '../../types';\nimport { withValidation } from '../../utils';\nimport useSdk from './useSdk';\n\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?: CookieConfig;\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"}
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 { CookieConfig, OidcConfig } from '@descope/web-js-sdk';\nimport Context from '../../hooks/Context';\nimport { IContext, User } from '../../types';\nimport { withValidation } from '../../utils';\nimport useSdk from './useSdk';\n\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?: CookieConfig;\n // If truthy he SDK refresh and logout functions will use the OIDC client\n // Accepts boolean or OIDC configuration\n oidcConfig?: OidcConfig;\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 oidcConfig = undefined,\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 // if oidc config is enabled, we attempt to finish the login, so we start as loading\n const [isOidcLoading, setIsOidcLoading] = useState(!!oidcConfig);\n const isOidcFinishedLogin = useRef(false);\n\n const sdk = useSdk({\n projectId,\n baseUrl,\n persistTokens,\n sessionTokenViaCookie,\n oidcConfig,\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 // if oidc config is enabled, and we have oidc params in the url\n // we will finish the login (this should run only once)\n useEffect(() => {\n if (sdk && oidcConfig && !isOidcFinishedLogin.current) {\n isOidcFinishedLogin.current = true;\n sdk.oidc.finishLoginIfNeed().finally(() => {\n setIsOidcLoading(false);\n // We want that the session will fetched only once\n isSessionFetched.current = true;\n });\n }\n }, []);\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 isOidcLoading,\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 isOidcLoading,\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","oidcConfig","storeLastAuthenticatedUser","keepLastAuthenticatedUserAfterLogout","refreshCookieName","children","user","setUser","useState","session","setSession","isAuthenticated","setIsAuthenticated","isUserLoading","setIsUserLoading","isSessionLoading","setIsSessionLoading","isOidcLoading","setIsOidcLoading","isOidcFinishedLogin","useRef","sdk","useSdk","useEffect","unsubscribeSessionToken","onSessionTokenChange","unsubscribeUser","onUserChange","unsubscribeIsAuthenticated","onIsAuthenticatedChange","isSessionFetched","isUserFetched","current","oidc","finishLoginIfNeed","finally","fetchSession","useCallback","withValidation","refresh","then","fetchUser","me","value","useMemo","React","default","createElement","Context","Provider"],"mappings":"kQAuC6C,EAC3CA,YACAC,UAAU,GACVC,gBAAgB,GAChBC,yBAAwB,EACxBC,iBAAgB,EAChBC,aACAC,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,IAGlDS,EAAeC,GAAoBV,EAAAA,WAAWP,GAC/CkB,EAAsBC,UAAO,GAE7BC,EAAMC,EAAAA,QAAO,CACjB1B,YACAC,UACAG,gBACAD,wBACAE,aACAC,6BACAC,uCACAC,sBAGFmB,EAAAA,WAAU,KACR,GAAIF,EAAK,CACP,MAAMG,EAA0BH,EAAII,qBAAqBf,GACnDgB,EAAkBL,EAAIM,aAAapB,GACnCqB,EACJP,EAAIQ,wBAAwBjB,GAE9B,MAAO,KACLY,IACAE,IACAE,GAA4B,CAE/B,CACe,GACf,CAACP,IAEJ,MAAMS,EAAmBV,UAAO,GAC1BW,EAAgBX,UAAO,GAI7BG,EAAAA,WAAU,KACJF,GAAOpB,IAAekB,EAAoBa,UAC5Cb,EAAoBa,SAAU,EAC9BX,EAAIY,KAAKC,oBAAoBC,SAAQ,KACnCjB,GAAiB,GAEjBY,EAAiBE,SAAU,CAAI,IAElC,GACA,IAEH,MAAMI,EAAeC,EAAAA,aAAY,KAE3BP,EAAiBE,UACrBF,EAAiBE,SAAU,EAE3BhB,GAAoB,GACpBsB,EAAAA,eAAejB,eAAAA,EAAKkB,QAApBD,GAA+BE,MAAK,KAClCxB,GAAoB,EAAM,IAC1B,GACD,CAACK,IAEEoB,EAAYJ,EAAAA,aAAY,KAExBN,EAAcC,UAClBD,EAAcC,SAAU,EAExBlB,GAAiB,GACjBwB,EAAAA,eAAejB,EAAIqB,GAAnBJ,GAAyBE,MAAK,KAC5B1B,GAAiB,EAAM,IACvB,GACD,CAACO,IAEEsB,EAAQC,EAAAA,SACZ,KAAO,CACLH,YACAnC,OACAO,gBACAkB,cAAeA,EAAcC,QAC7BI,eACA3B,UACAE,kBACAI,mBACAE,gBACAa,iBAAkBA,EAAiBE,QACnCpC,YACAC,UACAC,gBACAI,6BACAC,uCACAC,oBACAG,UACAG,aACAW,SAEF,CACEoB,EACAnC,EACAO,EACAkB,EAAcC,QACdI,EACA3B,EACAE,EACAI,EACAE,EACAa,EAAiBE,QACjBpC,EACAC,EACAC,EACAK,EACAC,EACAG,EACAG,EACAW,IAGJ,OAAOwB,EAAAC,QAAAC,cAACC,UAAQC,SAAQ,CAACN,MAAOA,GAAQtC,EAA4B"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),s=require("../../constants.js"),t=require("../../sdk.js");exports.default=({projectId:r,baseUrl:o,persistTokens:a,sessionTokenViaCookie:i,refreshCookieName:u,storeLastAuthenticatedUser:n,keepLastAuthenticatedUserAfterLogout:d})=>e.useMemo((()=>{if(r)return t.default({projectId:r,baseUrl:o,sessionTokenViaCookie:i,baseHeaders:s.baseHeaders,persistTokens:a,refreshCookieName:u,storeLastAuthenticatedUser:n,keepLastAuthenticatedUserAfterLogout:d,autoRefresh:!0})}),[r,o,i]);
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),s=require("../../constants.js"),t=require("../../sdk.js");exports.default=({projectId:r,baseUrl:o,persistTokens:a,sessionTokenViaCookie:i,refreshCookieName:u,oidcConfig:n,storeLastAuthenticatedUser:d,keepLastAuthenticatedUserAfterLogout:c})=>e.useMemo((()=>{if(r)return t.default({projectId:r,baseUrl:o,sessionTokenViaCookie:i,baseHeaders:s.baseHeaders,persistTokens:a,refreshCookieName:u,oidcConfig:n,storeLastAuthenticatedUser:d,keepLastAuthenticatedUserAfterLogout:c,autoRefresh:!0})}),[r,o,i]);
2
2
  //# sourceMappingURL=useSdk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useSdk.js","sources":["../../../../src/components/AuthProvider/useSdk.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport { baseHeaders } from '../../constants';\nimport createSdk from '../../sdk';\n\ntype Config = Pick<\n Parameters<typeof createSdk>[0],\n | 'projectId'\n | 'baseUrl'\n | 'persistTokens'\n | 'sessionTokenViaCookie'\n | 'storeLastAuthenticatedUser'\n | 'keepLastAuthenticatedUserAfterLogout'\n | 'refreshCookieName'\n>;\n\nexport default ({\n projectId,\n baseUrl,\n persistTokens,\n sessionTokenViaCookie,\n refreshCookieName,\n storeLastAuthenticatedUser,\n keepLastAuthenticatedUserAfterLogout,\n}: Config): ReturnType<typeof createSdk> =>\n useMemo(() => {\n if (!projectId) {\n return undefined;\n }\n return createSdk({\n projectId,\n baseUrl,\n sessionTokenViaCookie,\n baseHeaders,\n persistTokens,\n refreshCookieName,\n storeLastAuthenticatedUser,\n keepLastAuthenticatedUserAfterLogout,\n autoRefresh: true,\n });\n }, [projectId, baseUrl, sessionTokenViaCookie]);\n"],"names":["projectId","baseUrl","persistTokens","sessionTokenViaCookie","refreshCookieName","storeLastAuthenticatedUser","keepLastAuthenticatedUserAfterLogout","useMemo","createSdk","baseHeaders","autoRefresh"],"mappings":"qKAee,EACbA,YACAC,UACAC,gBACAC,wBACAC,oBACAC,6BACAC,0CAEAC,EAAAA,SAAQ,KACN,GAAKP,EAGL,OAAOQ,UAAU,CACfR,YACAC,UACAE,oCACAM,EAAWA,YACXP,gBACAE,oBACAC,6BACAC,uCACAI,aAAa,GACb,GACD,CAACV,EAAWC,EAASE"}
1
+ {"version":3,"file":"useSdk.js","sources":["../../../../src/components/AuthProvider/useSdk.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport { baseHeaders } from '../../constants';\nimport createSdk from '../../sdk';\n\ntype Config = Pick<\n Parameters<typeof createSdk>[0],\n | 'projectId'\n | 'baseUrl'\n | 'persistTokens'\n | 'sessionTokenViaCookie'\n | 'storeLastAuthenticatedUser'\n | 'oidcConfig'\n | 'keepLastAuthenticatedUserAfterLogout'\n | 'refreshCookieName'\n>;\n\nexport default ({\n projectId,\n baseUrl,\n persistTokens,\n sessionTokenViaCookie,\n refreshCookieName,\n oidcConfig,\n storeLastAuthenticatedUser,\n keepLastAuthenticatedUserAfterLogout,\n}: Config): ReturnType<typeof createSdk> =>\n useMemo(() => {\n if (!projectId) {\n return undefined;\n }\n return createSdk({\n projectId,\n baseUrl,\n sessionTokenViaCookie,\n baseHeaders,\n persistTokens,\n refreshCookieName,\n oidcConfig,\n storeLastAuthenticatedUser,\n keepLastAuthenticatedUserAfterLogout,\n autoRefresh: true,\n });\n }, [projectId, baseUrl, sessionTokenViaCookie]);\n"],"names":["projectId","baseUrl","persistTokens","sessionTokenViaCookie","refreshCookieName","oidcConfig","storeLastAuthenticatedUser","keepLastAuthenticatedUserAfterLogout","useMemo","createSdk","baseHeaders","autoRefresh"],"mappings":"qKAgBe,EACbA,YACAC,UACAC,gBACAC,wBACAC,oBACAC,aACAC,6BACAC,0CAEAC,EAAOA,SAAC,KACN,GAAKR,EAGL,OAAOS,UAAU,CACfT,YACAC,UACAE,oCACAO,EAAWA,YACXR,gBACAE,oBACAC,aACAC,6BACAC,uCACAI,aAAa,GACb,GACD,CAACX,EAAWC,EAASE"}
@@ -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.11.6"};
1
+ "use strict";const e="undefined"!=typeof window;exports.IS_BROWSER=e,exports.baseHeaders={"x-descope-sdk-name":"react","x-descope-sdk-version":"2.12.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: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}};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),s=require("./useContext.js");exports.default=()=>{const{session:t,isSessionLoading:i,isOidcLoading:n,fetchSession:o,isSessionFetched:r,isAuthenticated:u}=s.default(),c=e.useRef(i||n);e.useMemo((()=>{c.current=i||n}),[i,n]);const d=!u&&!i;return e.useMemo((()=>{d&&!r&&(c.current=!0)}),[r]),e.useEffect((()=>{d&&o()}),[o]),{isSessionLoading:c.current,sessionToken:t,isAuthenticated:u}};
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 {\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
+ {"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 isOidcLoading,\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 || isOidcLoading);\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 || isOidcLoading;\n }, [isSessionLoading, isOidcLoading]);\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","isOidcLoading","fetchSession","isSessionFetched","isAuthenticated","useContext","isLoading","useRef","useMemo","current","shouldFetchSession","useEffect","sessionToken"],"mappings":"wIAGmB,KACjB,MAAMA,QACJA,EAAOC,iBACPA,EAAgBC,cAChBA,EAAaC,aACbA,EAAYC,iBACZA,EAAgBC,gBAChBA,GACEC,EAAAA,UAIEC,EAAYC,EAAAA,OAAOP,GAAoBC,GAG7CO,EAAAA,SAAQ,KACNF,EAAUG,QAAUT,GAAoBC,CAAa,GACpD,CAACD,EAAkBC,IAEtB,MAAMS,GAAsBN,IAAoBJ,EAgBhD,OAbAQ,EAAAA,SAAQ,KACFE,IAAuBP,IACzBG,EAAUG,SAAU,EACrB,GACA,CAACN,IAIJQ,EAAAA,WAAU,KACJD,GACFR,GACD,GACA,CAACA,IACG,CACLF,iBAAkBM,EAAUG,QAC5BG,aAAcb,EACdK,kBACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"sdk.js","sources":["../../src/sdk.ts"],"sourcesContent":["// workaround for TS issue https://github.com/microsoft/TypeScript/issues/42873\n// eslint-disable-next-line\nimport type * as _1 from '@descope/core-js-sdk';\nimport createSdk from '@descope/web-js-sdk';\nimport { IS_BROWSER } from './constants';\nimport { wrapInTry } from './utils';\n\ntype Sdk = ReturnType<typeof createSdkWrapper>;\nlet globalSdk: Sdk;\n\nconst createSdkWrapper = <P extends Parameters<typeof createSdk>[0]>(\n config: P,\n) => {\n const sdk = createSdk({\n persistTokens: IS_BROWSER as true,\n autoRefresh: IS_BROWSER as true,\n ...config,\n });\n globalSdk = sdk;\n\n return sdk;\n};\n\n// eslint-disable-next-line import/exports-last\nexport const createTempSdk = () =>\n createSdkWrapper({\n projectId: 'temp pid',\n persistTokens: false,\n autoRefresh: false,\n storeLastAuthenticatedUser: false,\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 */\nglobalSdk = createTempSdk();\n\nexport const getSessionToken = () => {\n if (IS_BROWSER) {\n return globalSdk?.getSessionToken();\n }\n\n // eslint-disable-next-line no-console\n console.warn('Get session token is not supported in SSR');\n return '';\n};\n\nexport const getRefreshToken = () => {\n if (IS_BROWSER) {\n return globalSdk?.getRefreshToken();\n }\n // eslint-disable-next-line no-console\n console.warn('Get refresh token is not supported in SSR');\n return '';\n};\n\nexport const isSessionTokenExpired = (token = getSessionToken()) =>\n globalSdk?.isJwtExpired(token);\n\nexport const isRefreshTokenExpired = (token = getRefreshToken()) =>\n globalSdk?.isJwtExpired(token);\n\nexport const getJwtPermissions = wrapInTry(\n (token = getSessionToken(), tenant?: string) =>\n globalSdk?.getJwtPermissions(token, tenant),\n);\n\nexport const getJwtRoles = wrapInTry(\n (token = getSessionToken(), tenant?: string) =>\n globalSdk?.getJwtRoles(token, tenant),\n);\n\nexport const getCurrentTenant = wrapInTry(\n (token = getSessionToken()) => globalSdk?.getCurrentTenant(token),\n);\n\nexport const refresh = (token = getRefreshToken()) => globalSdk?.refresh(token);\n\nexport const getGlobalSdk = () => globalSdk;\n\nexport default createSdkWrapper;\n"],"names":["globalSdk","createSdkWrapper","config","sdk","createSdk","Object","assign","persistTokens","IS_BROWSER","autoRefresh","createTempSdk","projectId","storeLastAuthenticatedUser","getSessionToken","console","warn","getRefreshToken","getJwtPermissions","wrapInTry","token","tenant","getJwtRoles","getCurrentTenant","isJwtExpired","refresh"],"mappings":"2NAQA,IAAIA,EAEJ,MAAMC,EACJC,IAEA,MAAMC,EAAMC,EAAAA,QAASC,OAAAC,OAAA,CACnBC,cAAeC,EAAkBA,WACjCC,YAAaD,EAAAA,YACVN,IAIL,OAFAF,EAAYG,EAELA,CAAG,EAICO,EAAgB,IAC3BT,EAAiB,CACfU,UAAW,WACXJ,eAAe,EACfE,aAAa,EACbG,4BAA4B,IAUhCZ,EAAYU,IAEL,MAAMG,EAAkB,IACzBL,aACKR,aAAS,EAATA,EAAWa,mBAIpBC,QAAQC,KAAK,6CACN,IAGIC,EAAkB,IACzBR,aACKR,aAAS,EAATA,EAAWgB,mBAGpBF,QAAQC,KAAK,6CACN,IASIE,EAAoBC,EAASA,WACxC,CAACC,EAAQN,IAAmBO,IAC1BpB,aAAS,EAATA,EAAWiB,kBAAkBE,EAAOC,KAG3BC,EAAcH,EAASA,WAClC,CAACC,EAAQN,IAAmBO,IAC1BpB,aAAS,EAATA,EAAWqB,YAAYF,EAAOC,KAGrBE,EAAmBJ,EAASA,WACvC,CAACC,EAAQN,MAAsBb,aAAA,EAAAA,EAAWsB,iBAAiBH,+FAKjC,IAAMnB,sIAnBG,CAACmB,EAAQH,MAC5ChB,aAAA,EAAAA,EAAWuB,aAAaJ,iCAJW,CAACA,EAAQN,MAC5Cb,aAAA,EAAAA,EAAWuB,aAAaJ,mBAmBH,CAACA,EAAQH,MAAsBhB,aAAA,EAAAA,EAAWwB,QAAQL"}
1
+ {"version":3,"file":"sdk.js","sources":["../../src/sdk.ts"],"sourcesContent":["// workaround for TS issue https://github.com/microsoft/TypeScript/issues/42873\n// eslint-disable-next-line\nimport type * as _1 from '@descope/core-js-sdk';\nimport createSdk from '@descope/web-js-sdk';\nimport type * as _2 from '@descope/web-js-sdk/node_modules/oidc-client-ts/dist/types/oidc-client-ts'; // eslint-disable-line\nimport { IS_BROWSER } from './constants';\nimport { wrapInTry } from './utils';\n\ntype Sdk = ReturnType<typeof createSdkWrapper>;\nlet globalSdk: Sdk;\n\nconst createSdkWrapper = <P extends Parameters<typeof createSdk>[0]>(\n config: P,\n) => {\n const sdk = createSdk({\n persistTokens: IS_BROWSER as true,\n autoRefresh: IS_BROWSER as true,\n ...config,\n });\n globalSdk = sdk;\n\n return sdk;\n};\n\n// eslint-disable-next-line import/exports-last\nexport const createTempSdk = () =>\n createSdkWrapper({\n projectId: 'temp pid',\n persistTokens: false,\n autoRefresh: false,\n storeLastAuthenticatedUser: false,\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 */\nglobalSdk = createTempSdk();\n\nexport const getSessionToken = () => {\n if (IS_BROWSER) {\n return globalSdk?.getSessionToken();\n }\n\n // eslint-disable-next-line no-console\n console.warn('Get session token is not supported in SSR');\n return '';\n};\n\nexport const getRefreshToken = () => {\n if (IS_BROWSER) {\n return globalSdk?.getRefreshToken();\n }\n // eslint-disable-next-line no-console\n console.warn('Get refresh token is not supported in SSR');\n return '';\n};\n\nexport const isSessionTokenExpired = (token = getSessionToken()) =>\n globalSdk?.isJwtExpired(token);\n\nexport const isRefreshTokenExpired = (token = getRefreshToken()) =>\n globalSdk?.isJwtExpired(token);\n\nexport const getJwtPermissions = wrapInTry(\n (token = getSessionToken(), tenant?: string) =>\n globalSdk?.getJwtPermissions(token, tenant),\n);\n\nexport const getJwtRoles = wrapInTry(\n (token = getSessionToken(), tenant?: string) =>\n globalSdk?.getJwtRoles(token, tenant),\n);\n\nexport const getCurrentTenant = wrapInTry(\n (token = getSessionToken()) => globalSdk?.getCurrentTenant(token),\n);\n\nexport const refresh = (token = getRefreshToken()) => globalSdk?.refresh(token);\n\nexport const getGlobalSdk = () => globalSdk;\n\nexport default createSdkWrapper;\n"],"names":["globalSdk","createSdkWrapper","config","sdk","createSdk","Object","assign","persistTokens","IS_BROWSER","autoRefresh","createTempSdk","projectId","storeLastAuthenticatedUser","getSessionToken","console","warn","getRefreshToken","getJwtPermissions","wrapInTry","token","tenant","getJwtRoles","getCurrentTenant","isJwtExpired","refresh"],"mappings":"2NASA,IAAIA,EAEJ,MAAMC,EACJC,IAEA,MAAMC,EAAMC,EAAAA,QAASC,OAAAC,OAAA,CACnBC,cAAeC,EAAkBA,WACjCC,YAAaD,EAAAA,YACVN,IAIL,OAFAF,EAAYG,EAELA,CAAG,EAICO,EAAgB,IAC3BT,EAAiB,CACfU,UAAW,WACXJ,eAAe,EACfE,aAAa,EACbG,4BAA4B,IAUhCZ,EAAYU,IAEL,MAAMG,EAAkB,IACzBL,aACKR,aAAS,EAATA,EAAWa,mBAIpBC,QAAQC,KAAK,6CACN,IAGIC,EAAkB,IACzBR,aACKR,aAAS,EAATA,EAAWgB,mBAGpBF,QAAQC,KAAK,6CACN,IASIE,EAAoBC,EAASA,WACxC,CAACC,EAAQN,IAAmBO,IAC1BpB,aAAS,EAATA,EAAWiB,kBAAkBE,EAAOC,KAG3BC,EAAcH,EAASA,WAClC,CAACC,EAAQN,IAAmBO,IAC1BpB,aAAS,EAATA,EAAWqB,YAAYF,EAAOC,KAGrBE,EAAmBJ,EAASA,WACvC,CAACC,EAAQN,MAAsBb,aAAA,EAAAA,EAAWsB,iBAAiBH,+FAKjC,IAAMnB,sIAnBG,CAACmB,EAAQH,MAC5ChB,aAAA,EAAAA,EAAWuB,aAAaJ,iCAJW,CAACA,EAAQN,MAC5Cb,aAAA,EAAAA,EAAWuB,aAAaJ,mBAmBH,CAACA,EAAQH,MAAsBhB,aAAA,EAAAA,EAAWwB,QAAQL"}
@@ -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[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};
1
+ import e,{useState as t,useRef as s,useEffect as r,useCallback as o,useMemo as n}from"react";import i from"../../hooks/Context.js";import{withValidation as c}from"../../utils.js";import a from"./useSdk.js";const u=({projectId:u,baseUrl:d="",baseStaticUrl:h="",sessionTokenViaCookie:f=!1,persistTokens:k=!0,oidcConfig:U,storeLastAuthenticatedUser:l=!0,keepLastAuthenticatedUserAfterLogout:m=!1,refreshCookieName:p="",children:L})=>{const[g,A]=t(),[C,S]=t(),[j,b]=t(!1),[I,T]=t(!1),[N,v]=t(!1),[x,F]=t(!!U),V=s(!1),y=a({projectId:u,baseUrl:d,persistTokens:k,sessionTokenViaCookie:f,oidcConfig:U,storeLastAuthenticatedUser:l,keepLastAuthenticatedUserAfterLogout:m,refreshCookieName:p});r((()=>{if(y){const e=y.onSessionTokenChange(S),t=y.onUserChange(A),s=y.onIsAuthenticatedChange(b);return()=>{e(),t(),s()}}}),[y]);const E=s(!1),O=s(!1);r((()=>{y&&U&&!V.current&&(V.current=!0,y.oidc.finishLoginIfNeed().finally((()=>{F(!1),E.current=!0})))}),[]);const P=o((()=>{E.current||(E.current=!0,v(!0),c(null==y?void 0:y.refresh)().then((()=>{v(!1)})))}),[y]),q=o((()=>{O.current||(O.current=!0,T(!0),c(y.me)().then((()=>{T(!1)})))}),[y]),w=n((()=>({fetchUser:q,user:g,isUserLoading:I,isUserFetched:O.current,fetchSession:P,session:C,isAuthenticated:j,isSessionLoading:N,isOidcLoading:x,isSessionFetched:E.current,projectId:u,baseUrl:d,baseStaticUrl:h,storeLastAuthenticatedUser:l,keepLastAuthenticatedUserAfterLogout:m,refreshCookieName:p,setUser:A,setSession:S,sdk:y})),[q,g,I,O.current,P,C,j,N,x,E.current,u,d,h,m,p,A,S,y]);return e.createElement(i.Provider,{value:w},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 { CookieConfig } from '@descope/web-js-sdk';\nimport Context from '../../hooks/Context';\nimport { IContext, User } from '../../types';\nimport { withValidation } from '../../utils';\nimport useSdk from './useSdk';\n\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?: CookieConfig;\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"}
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 { CookieConfig, OidcConfig } from '@descope/web-js-sdk';\nimport Context from '../../hooks/Context';\nimport { IContext, User } from '../../types';\nimport { withValidation } from '../../utils';\nimport useSdk from './useSdk';\n\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?: CookieConfig;\n // If truthy he SDK refresh and logout functions will use the OIDC client\n // Accepts boolean or OIDC configuration\n oidcConfig?: OidcConfig;\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 oidcConfig = undefined,\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 // if oidc config is enabled, we attempt to finish the login, so we start as loading\n const [isOidcLoading, setIsOidcLoading] = useState(!!oidcConfig);\n const isOidcFinishedLogin = useRef(false);\n\n const sdk = useSdk({\n projectId,\n baseUrl,\n persistTokens,\n sessionTokenViaCookie,\n oidcConfig,\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 // if oidc config is enabled, and we have oidc params in the url\n // we will finish the login (this should run only once)\n useEffect(() => {\n if (sdk && oidcConfig && !isOidcFinishedLogin.current) {\n isOidcFinishedLogin.current = true;\n sdk.oidc.finishLoginIfNeed().finally(() => {\n setIsOidcLoading(false);\n // We want that the session will fetched only once\n isSessionFetched.current = true;\n });\n }\n }, []);\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 isOidcLoading,\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 isOidcLoading,\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","oidcConfig","storeLastAuthenticatedUser","keepLastAuthenticatedUserAfterLogout","refreshCookieName","children","user","setUser","useState","session","setSession","isAuthenticated","setIsAuthenticated","isUserLoading","setIsUserLoading","isSessionLoading","setIsSessionLoading","isOidcLoading","setIsOidcLoading","isOidcFinishedLogin","useRef","sdk","useSdk","useEffect","unsubscribeSessionToken","onSessionTokenChange","unsubscribeUser","onUserChange","unsubscribeIsAuthenticated","onIsAuthenticatedChange","isSessionFetched","isUserFetched","current","oidc","finishLoginIfNeed","finally","fetchSession","useCallback","withValidation","refresh","then","fetchUser","me","value","useMemo","React","createElement","Context","Provider"],"mappings":"8MAuCA,MAAMA,EAAuC,EAC3CC,YACAC,UAAU,GACVC,gBAAgB,GAChBC,yBAAwB,EACxBC,iBAAgB,EAChBC,aACAC,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,IAGlDS,EAAeC,GAAoBV,IAAWP,GAC/CkB,EAAsBC,GAAO,GAE7BC,EAAMC,EAAO,CACjB1B,YACAC,UACAG,gBACAD,wBACAE,aACAC,6BACAC,uCACAC,sBAGFmB,GAAU,KACR,GAAIF,EAAK,CACP,MAAMG,EAA0BH,EAAII,qBAAqBf,GACnDgB,EAAkBL,EAAIM,aAAapB,GACnCqB,EACJP,EAAIQ,wBAAwBjB,GAE9B,MAAO,KACLY,IACAE,IACAE,GAA4B,CAE/B,CACe,GACf,CAACP,IAEJ,MAAMS,EAAmBV,GAAO,GAC1BW,EAAgBX,GAAO,GAI7BG,GAAU,KACJF,GAAOpB,IAAekB,EAAoBa,UAC5Cb,EAAoBa,SAAU,EAC9BX,EAAIY,KAAKC,oBAAoBC,SAAQ,KACnCjB,GAAiB,GAEjBY,EAAiBE,SAAU,CAAI,IAElC,GACA,IAEH,MAAMI,EAAeC,GAAY,KAE3BP,EAAiBE,UACrBF,EAAiBE,SAAU,EAE3BhB,GAAoB,GACpBsB,EAAejB,eAAAA,EAAKkB,QAApBD,GAA+BE,MAAK,KAClCxB,GAAoB,EAAM,IAC1B,GACD,CAACK,IAEEoB,EAAYJ,GAAY,KAExBN,EAAcC,UAClBD,EAAcC,SAAU,EAExBlB,GAAiB,GACjBwB,EAAejB,EAAIqB,GAAnBJ,GAAyBE,MAAK,KAC5B1B,GAAiB,EAAM,IACvB,GACD,CAACO,IAEEsB,EAAQC,GACZ,KAAO,CACLH,YACAnC,OACAO,gBACAkB,cAAeA,EAAcC,QAC7BI,eACA3B,UACAE,kBACAI,mBACAE,gBACAa,iBAAkBA,EAAiBE,QACnCpC,YACAC,UACAC,gBACAI,6BACAC,uCACAC,oBACAG,UACAG,aACAW,SAEF,CACEoB,EACAnC,EACAO,EACAkB,EAAcC,QACdI,EACA3B,EACAE,EACAI,EACAE,EACAa,EAAiBE,QACjBpC,EACAC,EACAC,EACAK,EACAC,EACAG,EACAG,EACAW,IAGJ,OAAOwB,EAAAC,cAACC,EAAQC,SAAQ,CAACL,MAAOA,GAAQtC,EAA4B"}
@@ -1,2 +1,2 @@
1
- import{useMemo as e}from"react";import{baseHeaders as t}from"../../constants.js";import s from"../../sdk.js";var o=({projectId:o,baseUrl:r,persistTokens:a,sessionTokenViaCookie:i,refreshCookieName:n,storeLastAuthenticatedUser:k,keepLastAuthenticatedUserAfterLogout:f})=>e((()=>{if(o)return s({projectId:o,baseUrl:r,sessionTokenViaCookie:i,baseHeaders:t,persistTokens:a,refreshCookieName:n,storeLastAuthenticatedUser:k,keepLastAuthenticatedUserAfterLogout:f,autoRefresh:!0})}),[o,r,i]);export{o as default};
1
+ import{useMemo as e}from"react";import{baseHeaders as t}from"../../constants.js";import o from"../../sdk.js";var s=({projectId:s,baseUrl:r,persistTokens:a,sessionTokenViaCookie:i,refreshCookieName:n,oidcConfig:f,storeLastAuthenticatedUser:d,keepLastAuthenticatedUserAfterLogout:k})=>e((()=>{if(s)return o({projectId:s,baseUrl:r,sessionTokenViaCookie:i,baseHeaders:t,persistTokens:a,refreshCookieName:n,oidcConfig:f,storeLastAuthenticatedUser:d,keepLastAuthenticatedUserAfterLogout:k,autoRefresh:!0})}),[s,r,i]);export{s as default};
2
2
  //# sourceMappingURL=useSdk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useSdk.js","sources":["../../../../src/components/AuthProvider/useSdk.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport { baseHeaders } from '../../constants';\nimport createSdk from '../../sdk';\n\ntype Config = Pick<\n Parameters<typeof createSdk>[0],\n | 'projectId'\n | 'baseUrl'\n | 'persistTokens'\n | 'sessionTokenViaCookie'\n | 'storeLastAuthenticatedUser'\n | 'keepLastAuthenticatedUserAfterLogout'\n | 'refreshCookieName'\n>;\n\nexport default ({\n projectId,\n baseUrl,\n persistTokens,\n sessionTokenViaCookie,\n refreshCookieName,\n storeLastAuthenticatedUser,\n keepLastAuthenticatedUserAfterLogout,\n}: Config): ReturnType<typeof createSdk> =>\n useMemo(() => {\n if (!projectId) {\n return undefined;\n }\n return createSdk({\n projectId,\n baseUrl,\n sessionTokenViaCookie,\n baseHeaders,\n persistTokens,\n refreshCookieName,\n storeLastAuthenticatedUser,\n keepLastAuthenticatedUserAfterLogout,\n autoRefresh: true,\n });\n }, [projectId, baseUrl, sessionTokenViaCookie]);\n"],"names":["useSdk","projectId","baseUrl","persistTokens","sessionTokenViaCookie","refreshCookieName","storeLastAuthenticatedUser","keepLastAuthenticatedUserAfterLogout","useMemo","createSdk","baseHeaders","autoRefresh"],"mappings":"6GAeA,IAAAA,EAAe,EACbC,YACAC,UACAC,gBACAC,wBACAC,oBACAC,6BACAC,0CAEAC,GAAQ,KACN,GAAKP,EAGL,OAAOQ,EAAU,CACfR,YACAC,UACAE,wBACAM,cACAP,gBACAE,oBACAC,6BACAC,uCACAI,aAAa,GACb,GACD,CAACV,EAAWC,EAASE"}
1
+ {"version":3,"file":"useSdk.js","sources":["../../../../src/components/AuthProvider/useSdk.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport { baseHeaders } from '../../constants';\nimport createSdk from '../../sdk';\n\ntype Config = Pick<\n Parameters<typeof createSdk>[0],\n | 'projectId'\n | 'baseUrl'\n | 'persistTokens'\n | 'sessionTokenViaCookie'\n | 'storeLastAuthenticatedUser'\n | 'oidcConfig'\n | 'keepLastAuthenticatedUserAfterLogout'\n | 'refreshCookieName'\n>;\n\nexport default ({\n projectId,\n baseUrl,\n persistTokens,\n sessionTokenViaCookie,\n refreshCookieName,\n oidcConfig,\n storeLastAuthenticatedUser,\n keepLastAuthenticatedUserAfterLogout,\n}: Config): ReturnType<typeof createSdk> =>\n useMemo(() => {\n if (!projectId) {\n return undefined;\n }\n return createSdk({\n projectId,\n baseUrl,\n sessionTokenViaCookie,\n baseHeaders,\n persistTokens,\n refreshCookieName,\n oidcConfig,\n storeLastAuthenticatedUser,\n keepLastAuthenticatedUserAfterLogout,\n autoRefresh: true,\n });\n }, [projectId, baseUrl, sessionTokenViaCookie]);\n"],"names":["useSdk","projectId","baseUrl","persistTokens","sessionTokenViaCookie","refreshCookieName","oidcConfig","storeLastAuthenticatedUser","keepLastAuthenticatedUserAfterLogout","useMemo","createSdk","baseHeaders","autoRefresh"],"mappings":"6GAgBA,IAAeA,EAAA,EACbC,YACAC,UACAC,gBACAC,wBACAC,oBACAC,aACAC,6BACAC,0CAEAC,GAAQ,KACN,GAAKR,EAGL,OAAOS,EAAU,CACfT,YACAC,UACAE,wBACAO,cACAR,gBACAE,oBACAC,aACAC,6BACAC,uCACAI,aAAa,GACb,GACD,CAACX,EAAWC,EAASE"}
@@ -1,2 +1,2 @@
1
- const e={"x-descope-sdk-name":"react","x-descope-sdk-version":"2.11.6"},d="undefined"!=typeof window;export{d as IS_BROWSER,e as baseHeaders};
1
+ const e={"x-descope-sdk-name":"react","x-descope-sdk-version":"2.12.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,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};
1
+ import{useRef as s,useMemo as e,useEffect as t}from"react";import i from"./useContext.js";const n=()=>{const{session:n,isSessionLoading:o,isOidcLoading:r,fetchSession:c,isSessionFetched:a,isAuthenticated:d}=i(),u=s(o||r);e((()=>{u.current=o||r}),[o,r]);const f=!d&&!o;return e((()=>{f&&!a&&(u.current=!0)}),[a]),t((()=>{f&&c()}),[c]),{isSessionLoading:u.current,sessionToken:n,isAuthenticated:d}};export{n 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 {\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
+ {"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 isOidcLoading,\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 || isOidcLoading);\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 || isOidcLoading;\n }, [isSessionLoading, isOidcLoading]);\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","isOidcLoading","fetchSession","isSessionFetched","isAuthenticated","useContext","isLoading","useRef","useMemo","current","shouldFetchSession","useEffect","sessionToken"],"mappings":"0FAGM,MAAAA,EAAa,KACjB,MAAMC,QACJA,EAAOC,iBACPA,EAAgBC,cAChBA,EAAaC,aACbA,EAAYC,iBACZA,EAAgBC,gBAChBA,GACEC,IAIEC,EAAYC,EAAOP,GAAoBC,GAG7CO,GAAQ,KACNF,EAAUG,QAAUT,GAAoBC,CAAa,GACpD,CAACD,EAAkBC,IAEtB,MAAMS,GAAsBN,IAAoBJ,EAgBhD,OAbAQ,GAAQ,KACFE,IAAuBP,IACzBG,EAAUG,SAAU,EACrB,GACA,CAACN,IAIJQ,GAAU,KACJD,GACFR,GACD,GACA,CAACA,IACG,CACLF,iBAAkBM,EAAUG,QAC5BG,aAAcb,EACdK,kBACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"sdk.js","sources":["../../src/sdk.ts"],"sourcesContent":["// workaround for TS issue https://github.com/microsoft/TypeScript/issues/42873\n// eslint-disable-next-line\nimport type * as _1 from '@descope/core-js-sdk';\nimport createSdk from '@descope/web-js-sdk';\nimport { IS_BROWSER } from './constants';\nimport { wrapInTry } from './utils';\n\ntype Sdk = ReturnType<typeof createSdkWrapper>;\nlet globalSdk: Sdk;\n\nconst createSdkWrapper = <P extends Parameters<typeof createSdk>[0]>(\n config: P,\n) => {\n const sdk = createSdk({\n persistTokens: IS_BROWSER as true,\n autoRefresh: IS_BROWSER as true,\n ...config,\n });\n globalSdk = sdk;\n\n return sdk;\n};\n\n// eslint-disable-next-line import/exports-last\nexport const createTempSdk = () =>\n createSdkWrapper({\n projectId: 'temp pid',\n persistTokens: false,\n autoRefresh: false,\n storeLastAuthenticatedUser: false,\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 */\nglobalSdk = createTempSdk();\n\nexport const getSessionToken = () => {\n if (IS_BROWSER) {\n return globalSdk?.getSessionToken();\n }\n\n // eslint-disable-next-line no-console\n console.warn('Get session token is not supported in SSR');\n return '';\n};\n\nexport const getRefreshToken = () => {\n if (IS_BROWSER) {\n return globalSdk?.getRefreshToken();\n }\n // eslint-disable-next-line no-console\n console.warn('Get refresh token is not supported in SSR');\n return '';\n};\n\nexport const isSessionTokenExpired = (token = getSessionToken()) =>\n globalSdk?.isJwtExpired(token);\n\nexport const isRefreshTokenExpired = (token = getRefreshToken()) =>\n globalSdk?.isJwtExpired(token);\n\nexport const getJwtPermissions = wrapInTry(\n (token = getSessionToken(), tenant?: string) =>\n globalSdk?.getJwtPermissions(token, tenant),\n);\n\nexport const getJwtRoles = wrapInTry(\n (token = getSessionToken(), tenant?: string) =>\n globalSdk?.getJwtRoles(token, tenant),\n);\n\nexport const getCurrentTenant = wrapInTry(\n (token = getSessionToken()) => globalSdk?.getCurrentTenant(token),\n);\n\nexport const refresh = (token = getRefreshToken()) => globalSdk?.refresh(token);\n\nexport const getGlobalSdk = () => globalSdk;\n\nexport default createSdkWrapper;\n"],"names":["globalSdk","createSdkWrapper","config","sdk","createSdk","Object","assign","persistTokens","IS_BROWSER","autoRefresh","createTempSdk","projectId","storeLastAuthenticatedUser","getSessionToken","console","warn","getRefreshToken","isSessionTokenExpired","token","isJwtExpired","isRefreshTokenExpired","getJwtPermissions","wrapInTry","tenant","getJwtRoles","getCurrentTenant","refresh","getGlobalSdk"],"mappings":"sHAQA,IAAIA,EAEJ,MAAMC,EACJC,IAEA,MAAMC,EAAMC,EAASC,OAAAC,OAAA,CACnBC,cAAeC,EACfC,YAAaD,GACVN,IAIL,OAFAF,EAAYG,EAELA,CAAG,EAICO,EAAgB,IAC3BT,EAAiB,CACfU,UAAW,WACXJ,eAAe,EACfE,aAAa,EACbG,4BAA4B,IAUhCZ,EAAYU,IAEL,MAAMG,EAAkB,IACzBL,EACKR,aAAS,EAATA,EAAWa,mBAIpBC,QAAQC,KAAK,6CACN,IAGIC,EAAkB,IACzBR,EACKR,aAAS,EAATA,EAAWgB,mBAGpBF,QAAQC,KAAK,6CACN,IAGIE,EAAwB,CAACC,EAAQL,MAC5Cb,aAAA,EAAAA,EAAWmB,aAAaD,GAEbE,EAAwB,CAACF,EAAQF,MAC5ChB,aAAA,EAAAA,EAAWmB,aAAaD,GAEbG,EAAoBC,GAC/B,CAACJ,EAAQL,IAAmBU,IAC1BvB,aAAS,EAATA,EAAWqB,kBAAkBH,EAAOK,KAG3BC,EAAcF,GACzB,CAACJ,EAAQL,IAAmBU,IAC1BvB,aAAS,EAATA,EAAWwB,YAAYN,EAAOK,KAGrBE,EAAmBH,GAC9B,CAACJ,EAAQL,MAAsBb,aAAA,EAAAA,EAAWyB,iBAAiBP,KAGhDQ,EAAU,CAACR,EAAQF,MAAsBhB,aAAA,EAAAA,EAAW0B,QAAQR,GAE5DS,EAAe,IAAM3B"}
1
+ {"version":3,"file":"sdk.js","sources":["../../src/sdk.ts"],"sourcesContent":["// workaround for TS issue https://github.com/microsoft/TypeScript/issues/42873\n// eslint-disable-next-line\nimport type * as _1 from '@descope/core-js-sdk';\nimport createSdk from '@descope/web-js-sdk';\nimport type * as _2 from '@descope/web-js-sdk/node_modules/oidc-client-ts/dist/types/oidc-client-ts'; // eslint-disable-line\nimport { IS_BROWSER } from './constants';\nimport { wrapInTry } from './utils';\n\ntype Sdk = ReturnType<typeof createSdkWrapper>;\nlet globalSdk: Sdk;\n\nconst createSdkWrapper = <P extends Parameters<typeof createSdk>[0]>(\n config: P,\n) => {\n const sdk = createSdk({\n persistTokens: IS_BROWSER as true,\n autoRefresh: IS_BROWSER as true,\n ...config,\n });\n globalSdk = sdk;\n\n return sdk;\n};\n\n// eslint-disable-next-line import/exports-last\nexport const createTempSdk = () =>\n createSdkWrapper({\n projectId: 'temp pid',\n persistTokens: false,\n autoRefresh: false,\n storeLastAuthenticatedUser: false,\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 */\nglobalSdk = createTempSdk();\n\nexport const getSessionToken = () => {\n if (IS_BROWSER) {\n return globalSdk?.getSessionToken();\n }\n\n // eslint-disable-next-line no-console\n console.warn('Get session token is not supported in SSR');\n return '';\n};\n\nexport const getRefreshToken = () => {\n if (IS_BROWSER) {\n return globalSdk?.getRefreshToken();\n }\n // eslint-disable-next-line no-console\n console.warn('Get refresh token is not supported in SSR');\n return '';\n};\n\nexport const isSessionTokenExpired = (token = getSessionToken()) =>\n globalSdk?.isJwtExpired(token);\n\nexport const isRefreshTokenExpired = (token = getRefreshToken()) =>\n globalSdk?.isJwtExpired(token);\n\nexport const getJwtPermissions = wrapInTry(\n (token = getSessionToken(), tenant?: string) =>\n globalSdk?.getJwtPermissions(token, tenant),\n);\n\nexport const getJwtRoles = wrapInTry(\n (token = getSessionToken(), tenant?: string) =>\n globalSdk?.getJwtRoles(token, tenant),\n);\n\nexport const getCurrentTenant = wrapInTry(\n (token = getSessionToken()) => globalSdk?.getCurrentTenant(token),\n);\n\nexport const refresh = (token = getRefreshToken()) => globalSdk?.refresh(token);\n\nexport const getGlobalSdk = () => globalSdk;\n\nexport default createSdkWrapper;\n"],"names":["globalSdk","createSdkWrapper","config","sdk","createSdk","Object","assign","persistTokens","IS_BROWSER","autoRefresh","createTempSdk","projectId","storeLastAuthenticatedUser","getSessionToken","console","warn","getRefreshToken","isSessionTokenExpired","token","isJwtExpired","isRefreshTokenExpired","getJwtPermissions","wrapInTry","tenant","getJwtRoles","getCurrentTenant","refresh","getGlobalSdk"],"mappings":"sHASA,IAAIA,EAEJ,MAAMC,EACJC,IAEA,MAAMC,EAAMC,EAASC,OAAAC,OAAA,CACnBC,cAAeC,EACfC,YAAaD,GACVN,IAIL,OAFAF,EAAYG,EAELA,CAAG,EAICO,EAAgB,IAC3BT,EAAiB,CACfU,UAAW,WACXJ,eAAe,EACfE,aAAa,EACbG,4BAA4B,IAUhCZ,EAAYU,IAEL,MAAMG,EAAkB,IACzBL,EACKR,aAAS,EAATA,EAAWa,mBAIpBC,QAAQC,KAAK,6CACN,IAGIC,EAAkB,IACzBR,EACKR,aAAS,EAATA,EAAWgB,mBAGpBF,QAAQC,KAAK,6CACN,IAGIE,EAAwB,CAACC,EAAQL,MAC5Cb,aAAA,EAAAA,EAAWmB,aAAaD,GAEbE,EAAwB,CAACF,EAAQF,MAC5ChB,aAAA,EAAAA,EAAWmB,aAAaD,GAEbG,EAAoBC,GAC/B,CAACJ,EAAQL,IAAmBU,IAC1BvB,aAAS,EAATA,EAAWqB,kBAAkBH,EAAOK,KAG3BC,EAAcF,GACzB,CAACJ,EAAQL,IAAmBU,IAC1BvB,aAAS,EAATA,EAAWwB,YAAYN,EAAOK,KAGrBE,EAAmBH,GAC9B,CAACJ,EAAQL,MAAsBb,aAAA,EAAAA,EAAWyB,iBAAiBP,KAGhDQ,EAAU,CAACR,EAAQF,MAAsBhB,aAAA,EAAAA,EAAW0B,QAAQR,GAE5DS,EAAe,IAAM3B"}