@descope/react-sdk 2.0.23 → 2.0.24

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
@@ -338,7 +338,7 @@ Important Note:
338
338
 
339
339
  #### User Management
340
340
 
341
- The `UserManagement` widget will let you embed a user table in your site to view and take action.
341
+ The `UserManagement` widget lets you embed a user table in your site to view and take action.
342
342
 
343
343
  The widget lets you:
344
344
 
@@ -369,7 +369,7 @@ Example:
369
369
 
370
370
  #### Role Management
371
371
 
372
- The `RoleManagement` widget will let you embed a role table in your site to view and take action.
372
+ The `RoleManagement` widget lets you embed a role table in your site to view and take action.
373
373
 
374
374
  The widget lets you:
375
375
 
@@ -398,7 +398,7 @@ Example:
398
398
 
399
399
  #### Access Key Management
400
400
 
401
- The `AccessKeyManagement` widget will let you embed an access key table in your site to view and take action.
401
+ The `AccessKeyManagement` widget lets you embed an access key table in your site to view and take action.
402
402
 
403
403
  The widget lets you:
404
404
 
@@ -433,7 +433,7 @@ Example:
433
433
 
434
434
  #### Audit Management
435
435
 
436
- The `AuditManagement` widget will let you embed an audit table in your site.
436
+ The `AuditManagement` widget lets you embed an audit table in your site.
437
437
 
438
438
  ###### Usage
439
439
 
@@ -449,6 +449,34 @@ import { AuditManagement } from '@descope/react-sdk';
449
449
  Example:
450
450
  [Manage Audit](./examples/app/ManageAudit.tsx)
451
451
 
452
+ #### User Profile
453
+
454
+ The `UserProfile` widget lets you embed a user profile component in your app and let the logged in user update his profile.
455
+
456
+ The widget lets you:
457
+
458
+ - Update user profile picture
459
+ - Update user personal information
460
+ - Update authentication methods
461
+ - Logout
462
+
463
+ ###### Usage
464
+
465
+ ```js
466
+ import { UserProfile } from '@descope/react-sdk';
467
+ ...
468
+ <UserProfile
469
+ widgetId="user-profile-widget"
470
+ onLogout={() => {
471
+ // add here you own logout callback
472
+ window.location.href = '/login';
473
+ }}
474
+ />
475
+ ```
476
+
477
+ Example:
478
+ [User Profile](./examples/app/MyUserProfile.tsx)
479
+
452
480
  ## Code Example
453
481
 
454
482
  You can find an example react app in the [examples folder](./examples).
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("@descope/web-js-sdk");function r(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function n(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var s=r(e),o=r(t);const a=s.default.createContext(void 0),u=e=>(...t)=>{if(!e)throw Error("You can only use this function after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component");return e(...t)},i=e=>(...t)=>{let r;try{r=e(...t)}catch(e){console.error(e)}return r},l={"x-descope-sdk-name":"react","x-descope-sdk-version":"2.0.23"},d="undefined"!=typeof window;let c;const f=e=>{const t=o.default(Object.assign({persistTokens:d,autoRefresh:d},e));return c=t,t},p=()=>f({projectId:"temp pid",persistTokens:!1,autoRefresh:!1,storeLastAuthenticatedUser:!1});c=p();const g=()=>d?null==c?void 0:c.getSessionToken():(console.warn("Get session token is not supported in SSR"),""),m=()=>d?null==c?void 0:c.getRefreshToken():(console.warn("Get refresh token is not supported in SSR"),""),b=i(((e=g(),t)=>null==c?void 0:c.getJwtPermissions(e,t))),h=i(((e=g(),t)=>null==c?void 0:c.getJwtRoles(e,t)));const w=e.lazy((async()=>((await Promise.resolve().then((function(){return n(require("@descope/web-component"))}))).default.sdkConfigOverrides={baseHeaders:l,persistTokens:!1,hooks:{get beforeRequest(){return c.httpClient.hooks.beforeRequest},set beforeRequest(e){}}},{default:({projectId:e,flowId:t,baseUrl:r,innerRef:n,tenant:o,theme:a,locale:u,debug:i,redirectUrl:l,client:d,form:c,autoFocus:f})=>s.default.createElement("descope-wc",{"project-id":e,"flow-id":t,"base-url":r,ref:n,tenant:o,theme:a,locale:u,debug:i,client:d,form:c,"redirect-url":l,"auto-focus":f})}))),E=s.default.forwardRef((({flowId:t,onSuccess:r,onError:n,onReady:o,logger:u,tenant:i,theme:l,locale:d,debug:c,client:f,form:p,telemetryKey:g,redirectUrl:m,autoFocus:b,errorTransformer:h},E)=>{const[k,v]=e.useState(null);e.useImperativeHandle(E,(()=>k));const{projectId:I,baseUrl:U,storeLastAuthenticatedUser:j,sdk:y}=s.default.useContext(a),S=e.useCallback((async e=>{await y.httpClient.hooks.afterRequest({},new Response(JSON.stringify(e.detail))),r&&r(e)}),[r]);e.useEffect((()=>{const e=k;return null==e||e.addEventListener("success",S),n&&(null==e||e.addEventListener("error",n)),o&&(null==e||e.addEventListener("ready",o)),()=>{n&&(null==e||e.removeEventListener("error",n)),o&&(null==e||e.removeEventListener("ready",o)),null==e||e.removeEventListener("success",S)}}),[k,n,S]),e.useEffect((()=>{const e=k;return null==e||e.addEventListener("success",S),()=>{null==e||e.removeEventListener("success",S)}}),[k,S]),e.useEffect((()=>{const e=k;return n&&(null==e||e.addEventListener("error",n)),()=>{n&&(null==e||e.removeEventListener("error",n))}}),[k,n]),e.useEffect((()=>{const e=k;return o&&(null==e||e.addEventListener("ready",o)),()=>{o&&(null==e||e.removeEventListener("error",o))}}),[k,o]),e.useEffect((()=>{k&&(k.errorTransformer=h)}),[k,h]),e.useEffect((()=>{k&&u&&(k.logger=u)}),[k,u]);const{form:x,client:R}=e.useMemo((()=>({form:JSON.stringify(p||{}),client:JSON.stringify(f||{})})),[p,f]);return s.default.createElement("form",null,s.default.createElement(e.Suspense,{fallback:null},s.default.createElement(w,{projectId:I,flowId:t,baseUrl:U,innerRef:v,tenant:i,theme:l,locale:d,debug:c,form:x,client:R,telemetryKey:g,redirectUrl:m,autoFocus:b,storeLastAuthenticatedUser:j})))})),k=e.lazy((async()=>(await Promise.resolve().then((function(){return n(require("@descope/user-management-widget"))})),{default:({projectId:e,baseUrl:t,innerRef:r,tenant:n,widgetId:o,theme:a,debug:u})=>s.default.createElement("descope-user-management-widget",{"project-id":e,"widget-id":o,"base-url":t,theme:a,tenant:n,debug:u,ref:r})}))),v=s.default.forwardRef((({logger:t,tenant:r,theme:n,debug:o,widgetId:u},i)=>{const[l,d]=e.useState(null);e.useImperativeHandle(i,(()=>l));const{projectId:c,baseUrl:f}=s.default.useContext(a);return e.useEffect((()=>{l&&t&&(l.logger=t)}),[l,t]),s.default.createElement(e.Suspense,{fallback:null},s.default.createElement(k,{projectId:c,widgetId:u,baseUrl:f,innerRef:d,tenant:r,theme:n,debug:o}))})),I=e.lazy((async()=>(await Promise.resolve().then((function(){return n(require("@descope/role-management-widget"))})),{default:({projectId:e,baseUrl:t,innerRef:r,tenant:n,widgetId:o,theme:a,debug:u})=>s.default.createElement("descope-role-management-widget",{"project-id":e,"widget-id":o,"base-url":t,theme:a,tenant:n,debug:u,ref:r})}))),U=s.default.forwardRef((({logger:t,tenant:r,theme:n,debug:o,widgetId:u},i)=>{const[l,d]=e.useState(null);e.useImperativeHandle(i,(()=>l));const{projectId:c,baseUrl:f}=s.default.useContext(a);return e.useEffect((()=>{l&&t&&(l.logger=t)}),[l,t]),s.default.createElement(e.Suspense,{fallback:null},s.default.createElement(I,{projectId:c,widgetId:u,baseUrl:f,innerRef:d,tenant:r,theme:n,debug:o}))})),j=e.lazy((async()=>(await Promise.resolve().then((function(){return n(require("@descope/access-key-management-widget"))})),{default:({projectId:e,baseUrl:t,innerRef:r,tenant:n,widgetId:o,theme:a,debug:u})=>s.default.createElement("descope-access-key-management-widget",{"project-id":e,"widget-id":o,"base-url":t,theme:a,tenant:n,debug:u,ref:r})}))),y=s.default.forwardRef((({logger:t,tenant:r,theme:n,debug:o,widgetId:u},i)=>{const[l,d]=e.useState(null);e.useImperativeHandle(i,(()=>l));const{projectId:c,baseUrl:f}=s.default.useContext(a);return e.useEffect((()=>{l&&t&&(l.logger=t)}),[l,t]),s.default.createElement(e.Suspense,{fallback:null},s.default.createElement(j,{projectId:c,widgetId:u,baseUrl:f,innerRef:d,tenant:r,theme:n,debug:o}))})),S=e.lazy((async()=>(await Promise.resolve().then((function(){return n(require("@descope/audit-management-widget"))})),{default:({projectId:e,baseUrl:t,innerRef:r,tenant:n,widgetId:o,theme:a,debug:u})=>s.default.createElement("descope-audit-management-widget",{"project-id":e,"widget-id":o,"base-url":t,theme:a,tenant:n,debug:u,ref:r})}))),x=s.default.forwardRef((({logger:t,tenant:r,theme:n,debug:o,widgetId:u},i)=>{const[l,d]=e.useState(null);e.useImperativeHandle(i,(()=>l));const{projectId:c,baseUrl:f}=s.default.useContext(a);return e.useEffect((()=>{l&&t&&(l.logger=t)}),[l,t]),s.default.createElement(e.Suspense,{fallback:null},s.default.createElement(S,{projectId:c,widgetId:u,baseUrl:f,innerRef:d,tenant:r,theme:n,debug:o}))}));var R=()=>{const t=e.useContext(a);if(!t)throw Error("You can only use this hook in the context of <AuthProvider />");return t};const L=e=>`You can only use this ${e} after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component`,T={get(e,t){if("object"==typeof e[t]&&null!==e[t])return new Proxy(e[t],T);if("function"==typeof e[t])return()=>{throw Error(L("function"))};throw Error(L("attribute"))}};exports.AccessKeyManagement=y,exports.AuditManagement=x,exports.AuthProvider=({projectId:t,baseUrl:r="",sessionTokenViaCookie:n=!1,persistTokens:o=!0,storeLastAuthenticatedUser:i=!0,children:d})=>{const[c,p]=e.useState(),[g,m]=e.useState(),[b,h]=e.useState(!1),[w,E]=e.useState(!1),k=(({projectId:t,baseUrl:r,persistTokens:n,sessionTokenViaCookie:s,storeLastAuthenticatedUser:o})=>e.useMemo((()=>{if(t)return f({projectId:t,baseUrl:r,sessionTokenViaCookie:s,baseHeaders:l,persistTokens:n,storeLastAuthenticatedUser:o,autoRefresh:!0})}),[t,r,s]))({projectId:t,baseUrl:r,persistTokens:o,sessionTokenViaCookie:n,storeLastAuthenticatedUser:i});e.useEffect((()=>{if(k){const e=k.onSessionTokenChange(m),t=k.onUserChange(p);return()=>{e(),t()}}}),[k]);const v=e.useRef(!1),I=e.useCallback((()=>{v.current||(v.current=!0,E(!0),u(null==k?void 0:k.refresh)().then((()=>{E(!1)})))}),[k]),U=e.useCallback((()=>{h(!0),u(k.me)().then((()=>{h(!1)}))}),[k]),j=e.useMemo((()=>({fetchUser:U,user:c,isUserLoading:b,fetchSession:I,session:g,isSessionLoading:w,isSessionFetched:v.current,projectId:t,baseUrl:r,storeLastAuthenticatedUser:i,setUser:p,setSession:m,sdk:k})),[U,c,b,I,g,w,v.current,t,r,p,m,k]);return s.default.createElement(a.Provider,{value:j},d)},exports.Descope=E,exports.RoleManagement=U,exports.SignInFlow=e=>s.default.createElement(E,Object.assign({},e,{flowId:"sign-in"})),exports.SignUpFlow=e=>s.default.createElement(E,Object.assign({},e,{flowId:"sign-up"})),exports.SignUpOrInFlow=e=>s.default.createElement(E,Object.assign({},e,{flowId:"sign-up-or-in"})),exports.UserManagement=v,exports.baseHeaders=l,exports.getJwtPermissions=b,exports.getJwtRoles=h,exports.getRefreshToken=m,exports.getSessionToken=g,exports.isRefreshTokenExpired=(e=m())=>null==c?void 0:c.isJwtExpired(e),exports.isSessionTokenExpired=(e=g())=>null==c?void 0:c.isJwtExpired(e),exports.refresh=(e=m())=>null==c?void 0:c.refresh(e),exports.useDescope=()=>{const{sdk:t}=R();return e.useMemo((()=>t||new Proxy(p(),T)),[t])},exports.useSession=()=>{const{session:t,isSessionLoading:r,fetchSession:n,isSessionFetched:s}=R(),o=e.useRef(r);e.useMemo((()=>{o.current=r}),[r]);const a=!t&&!r;return e.useMemo((()=>{a&&!s&&(o.current=!0)}),[s]),e.useEffect((()=>{a&&n()}),[n]),{isSessionLoading:o.current,sessionToken:t,isAuthenticated:!!t}},exports.useUser=()=>{const{user:t,fetchUser:r,isUserLoading:n,session:s}=R(),[o,a]=e.useState(!1),u=e.useRef(n),i=e.useMemo((()=>!t&&!n&&s&&!o),[r,s,o]);return e.useMemo((()=>{u.current=n}),[n]),e.useMemo((()=>{i&&(u.current=!0)}),[i]),e.useEffect((()=>{i&&(a(!0),r())}),[i]),{isUserLoading:u.current,user:t}};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("@descope/web-js-sdk");function r(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function n(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var s=r(e),o=r(t);const a=s.default.createContext(void 0),u=e=>(...t)=>{if(!e)throw Error("You can only use this function after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component");return e(...t)},l=e=>(...t)=>{let r;try{r=e(...t)}catch(e){console.error(e)}return r},d={"x-descope-sdk-name":"react","x-descope-sdk-version":"2.0.24"},i="undefined"!=typeof window;let c;const f=e=>{const t=o.default(Object.assign({persistTokens:i,autoRefresh:i},e));return c=t,t},g=()=>f({projectId:"temp pid",persistTokens:!1,autoRefresh:!1,storeLastAuthenticatedUser:!1});c=g();const p=()=>i?null==c?void 0:c.getSessionToken():(console.warn("Get session token is not supported in SSR"),""),m=()=>i?null==c?void 0:c.getRefreshToken():(console.warn("Get refresh token is not supported in SSR"),""),b=l(((e=p(),t)=>null==c?void 0:c.getJwtPermissions(e,t))),h=l(((e=p(),t)=>null==c?void 0:c.getJwtRoles(e,t)));const w=e.lazy((async()=>((await Promise.resolve().then((function(){return n(require("@descope/web-component"))}))).default.sdkConfigOverrides={baseHeaders:d,persistTokens:!1,hooks:{get beforeRequest(){return c.httpClient.hooks.beforeRequest},set beforeRequest(e){}}},{default:({projectId:e,flowId:t,baseUrl:r,innerRef:n,tenant:o,theme:a,locale:u,debug:l,redirectUrl:d,client:i,form:c,autoFocus:f})=>s.default.createElement("descope-wc",{"project-id":e,"flow-id":t,"base-url":r,ref:n,tenant:o,theme:a,locale:u,debug:l,client:i,form:c,"redirect-url":d,"auto-focus":f})}))),E=s.default.forwardRef((({flowId:t,onSuccess:r,onError:n,onReady:o,logger:u,tenant:l,theme:d,locale:i,debug:c,client:f,form:g,telemetryKey:p,redirectUrl:m,autoFocus:b,errorTransformer:h},E)=>{const[v,I]=e.useState(null);e.useImperativeHandle(E,(()=>v));const{projectId:k,baseUrl:U,storeLastAuthenticatedUser:j,sdk:y}=s.default.useContext(a),S=e.useCallback((async e=>{await y.httpClient.hooks.afterRequest({},new Response(JSON.stringify(e.detail))),r&&r(e)}),[r]);e.useEffect((()=>{const e=v;return null==e||e.addEventListener("success",S),n&&(null==e||e.addEventListener("error",n)),o&&(null==e||e.addEventListener("ready",o)),()=>{n&&(null==e||e.removeEventListener("error",n)),o&&(null==e||e.removeEventListener("ready",o)),null==e||e.removeEventListener("success",S)}}),[v,n,S]),e.useEffect((()=>{const e=v;return null==e||e.addEventListener("success",S),()=>{null==e||e.removeEventListener("success",S)}}),[v,S]),e.useEffect((()=>{const e=v;return n&&(null==e||e.addEventListener("error",n)),()=>{n&&(null==e||e.removeEventListener("error",n))}}),[v,n]),e.useEffect((()=>{const e=v;return o&&(null==e||e.addEventListener("ready",o)),()=>{o&&(null==e||e.removeEventListener("error",o))}}),[v,o]),e.useEffect((()=>{v&&(v.errorTransformer=h)}),[v,h]),e.useEffect((()=>{v&&u&&(v.logger=u)}),[v,u]);const{form:x,client:R}=e.useMemo((()=>({form:JSON.stringify(g||{}),client:JSON.stringify(f||{})})),[g,f]);return s.default.createElement("form",null,s.default.createElement(e.Suspense,{fallback:null},s.default.createElement(w,{projectId:k,flowId:t,baseUrl:U,innerRef:I,tenant:l,theme:d,locale:i,debug:c,form:x,client:R,telemetryKey:p,redirectUrl:m,autoFocus:b,storeLastAuthenticatedUser:j})))})),v=e.lazy((async()=>(await Promise.resolve().then((function(){return n(require("@descope/user-management-widget"))})),{default:({projectId:e,baseUrl:t,innerRef:r,tenant:n,widgetId:o,theme:a,debug:u})=>s.default.createElement("descope-user-management-widget",{"project-id":e,"widget-id":o,"base-url":t,theme:a,tenant:n,debug:u,ref:r})}))),I=s.default.forwardRef((({logger:t,tenant:r,theme:n,debug:o,widgetId:u},l)=>{const[d,i]=e.useState(null);e.useImperativeHandle(l,(()=>d));const{projectId:c,baseUrl:f}=s.default.useContext(a);return e.useEffect((()=>{d&&t&&(d.logger=t)}),[d,t]),s.default.createElement(e.Suspense,{fallback:null},s.default.createElement(v,{projectId:c,widgetId:u,baseUrl:f,innerRef:i,tenant:r,theme:n,debug:o}))})),k=e.lazy((async()=>(await Promise.resolve().then((function(){return n(require("@descope/role-management-widget"))})),{default:({projectId:e,baseUrl:t,innerRef:r,tenant:n,widgetId:o,theme:a,debug:u})=>s.default.createElement("descope-role-management-widget",{"project-id":e,"widget-id":o,"base-url":t,theme:a,tenant:n,debug:u,ref:r})}))),U=s.default.forwardRef((({logger:t,tenant:r,theme:n,debug:o,widgetId:u},l)=>{const[d,i]=e.useState(null);e.useImperativeHandle(l,(()=>d));const{projectId:c,baseUrl:f}=s.default.useContext(a);return e.useEffect((()=>{d&&t&&(d.logger=t)}),[d,t]),s.default.createElement(e.Suspense,{fallback:null},s.default.createElement(k,{projectId:c,widgetId:u,baseUrl:f,innerRef:i,tenant:r,theme:n,debug:o}))})),j=e.lazy((async()=>(await Promise.resolve().then((function(){return n(require("@descope/access-key-management-widget"))})),{default:({projectId:e,baseUrl:t,innerRef:r,tenant:n,widgetId:o,theme:a,debug:u})=>s.default.createElement("descope-access-key-management-widget",{"project-id":e,"widget-id":o,"base-url":t,theme:a,tenant:n,debug:u,ref:r})}))),y=s.default.forwardRef((({logger:t,tenant:r,theme:n,debug:o,widgetId:u},l)=>{const[d,i]=e.useState(null);e.useImperativeHandle(l,(()=>d));const{projectId:c,baseUrl:f}=s.default.useContext(a);return e.useEffect((()=>{d&&t&&(d.logger=t)}),[d,t]),s.default.createElement(e.Suspense,{fallback:null},s.default.createElement(j,{projectId:c,widgetId:u,baseUrl:f,innerRef:i,tenant:r,theme:n,debug:o}))})),S=e.lazy((async()=>(await Promise.resolve().then((function(){return n(require("@descope/audit-management-widget"))})),{default:({projectId:e,baseUrl:t,innerRef:r,tenant:n,widgetId:o,theme:a,debug:u})=>s.default.createElement("descope-audit-management-widget",{"project-id":e,"widget-id":o,"base-url":t,theme:a,tenant:n,debug:u,ref:r})}))),x=s.default.forwardRef((({logger:t,tenant:r,theme:n,debug:o,widgetId:u},l)=>{const[d,i]=e.useState(null);e.useImperativeHandle(l,(()=>d));const{projectId:c,baseUrl:f}=s.default.useContext(a);return e.useEffect((()=>{d&&t&&(d.logger=t)}),[d,t]),s.default.createElement(e.Suspense,{fallback:null},s.default.createElement(S,{projectId:c,widgetId:u,baseUrl:f,innerRef:i,tenant:r,theme:n,debug:o}))})),R=e.lazy((async()=>(await Promise.resolve().then((function(){return n(require("@descope/user-profile-widget"))})),{default:({projectId:e,baseUrl:t,innerRef:r,widgetId:n,theme:o,debug:a})=>s.default.createElement("descope-user-profile-widget",{"project-id":e,"widget-id":n,"base-url":t,theme:o,debug:a,ref:r})}))),L=s.default.forwardRef((({logger:t,theme:r,debug:n,widgetId:o,onLogout:u},l)=>{const[d,i]=e.useState(null);e.useImperativeHandle(l,(()=>d));const{projectId:c,baseUrl:f}=s.default.useContext(a);return e.useEffect((()=>{d&&t&&(d.logger=t)}),[d,t]),e.useEffect((()=>{if(d&&u)return d.addEventListener("logout",u),()=>d.removeEventListener("logout",u)}),[d,u]),s.default.createElement(e.Suspense,{fallback:null},s.default.createElement(R,{projectId:c,widgetId:o,baseUrl:f,innerRef:i,theme:r,debug:n}))}));var T=()=>{const t=e.useContext(a);if(!t)throw Error("You can only use this hook in the context of <AuthProvider />");return t};const C=e=>`You can only use this ${e} after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component`,P={get(e,t){if("object"==typeof e[t]&&null!==e[t])return new Proxy(e[t],P);if("function"==typeof e[t])return()=>{throw Error(C("function"))};throw Error(C("attribute"))}};exports.AccessKeyManagement=y,exports.AuditManagement=x,exports.AuthProvider=({projectId:t,baseUrl:r="",sessionTokenViaCookie:n=!1,persistTokens:o=!0,storeLastAuthenticatedUser:l=!0,children:i})=>{const[c,g]=e.useState(),[p,m]=e.useState(),[b,h]=e.useState(!1),[w,E]=e.useState(!1),v=(({projectId:t,baseUrl:r,persistTokens:n,sessionTokenViaCookie:s,storeLastAuthenticatedUser:o})=>e.useMemo((()=>{if(t)return f({projectId:t,baseUrl:r,sessionTokenViaCookie:s,baseHeaders:d,persistTokens:n,storeLastAuthenticatedUser:o,autoRefresh:!0})}),[t,r,s]))({projectId:t,baseUrl:r,persistTokens:o,sessionTokenViaCookie:n,storeLastAuthenticatedUser:l});e.useEffect((()=>{if(v){const e=v.onSessionTokenChange(m),t=v.onUserChange(g);return()=>{e(),t()}}}),[v]);const I=e.useRef(!1),k=e.useCallback((()=>{I.current||(I.current=!0,E(!0),u(null==v?void 0:v.refresh)().then((()=>{E(!1)})))}),[v]),U=e.useCallback((()=>{h(!0),u(v.me)().then((()=>{h(!1)}))}),[v]),j=e.useMemo((()=>({fetchUser:U,user:c,isUserLoading:b,fetchSession:k,session:p,isSessionLoading:w,isSessionFetched:I.current,projectId:t,baseUrl:r,storeLastAuthenticatedUser:l,setUser:g,setSession:m,sdk:v})),[U,c,b,k,p,w,I.current,t,r,g,m,v]);return s.default.createElement(a.Provider,{value:j},i)},exports.Descope=E,exports.RoleManagement=U,exports.SignInFlow=e=>s.default.createElement(E,Object.assign({},e,{flowId:"sign-in"})),exports.SignUpFlow=e=>s.default.createElement(E,Object.assign({},e,{flowId:"sign-up"})),exports.SignUpOrInFlow=e=>s.default.createElement(E,Object.assign({},e,{flowId:"sign-up-or-in"})),exports.UserManagement=I,exports.UserProfile=L,exports.baseHeaders=d,exports.getJwtPermissions=b,exports.getJwtRoles=h,exports.getRefreshToken=m,exports.getSessionToken=p,exports.isRefreshTokenExpired=(e=m())=>null==c?void 0:c.isJwtExpired(e),exports.isSessionTokenExpired=(e=p())=>null==c?void 0:c.isJwtExpired(e),exports.refresh=(e=m())=>null==c?void 0:c.refresh(e),exports.useDescope=()=>{const{sdk:t}=T();return e.useMemo((()=>t||new Proxy(g(),P)),[t])},exports.useSession=()=>{const{session:t,isSessionLoading:r,fetchSession:n,isSessionFetched:s}=T(),o=e.useRef(r);e.useMemo((()=>{o.current=r}),[r]);const a=!t&&!r;return e.useMemo((()=>{a&&!s&&(o.current=!0)}),[s]),e.useEffect((()=>{a&&n()}),[n]),{isSessionLoading:o.current,sessionToken:t,isAuthenticated:!!t}},exports.useUser=()=>{const{user:t,fetchUser:r,isUserLoading:n,session:s}=T(),[o,a]=e.useState(!1),u=e.useRef(n),l=e.useMemo((()=>!t&&!n&&s&&!o),[r,s,o]);return e.useMemo((()=>{u.current=n}),[n]),e.useMemo((()=>{l&&(u.current=!0)}),[l]),e.useEffect((()=>{l&&(a(!0),r())}),[l]),{isUserLoading:u.current,user:t}};
2
2
  //# sourceMappingURL=index.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../../src/hooks/Context.ts","../../src/utils.ts","../../src/constants.ts","../../src/sdk.ts","../../src/components/AuthProvider/AuthProvider.tsx","../../src/components/Descope.tsx","../../src/components/UserManagement.tsx","../../src/components/RoleManagement.tsx","../../src/components/AccessKeyManagement.tsx","../../src/components/AuditManagement.tsx","../../src/hooks/useContext.ts","../../src/hooks/useDescope.ts","../../src/components/AuthProvider/useSdk.ts","../../src/components/DefaultFlows.tsx","../../src/hooks/useSession.ts","../../src/hooks/useUser.ts"],"sourcesContent":["import React from 'react';\nimport { IContext } from '../types';\n\nconst Context = React.createContext<IContext>(undefined);\n\nexport default Context;\n","/**\n * Wrap a function with a validation that it exists\n * @param fn The function to wrap with the validation\n * @throws if function does not exist, an error with the relevant message will be thrown\n */\nexport const withValidation =\n\t<T extends Array<any>, U>(fn: (...args: T) => U) =>\n\t(...args: T): U => {\n\t\tif (!fn) {\n\t\t\tthrow Error(\n\t\t\t\t`You can only use this function after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component`\n\t\t\t);\n\t\t}\n\t\treturn fn(...args);\n\t};\n\nexport const wrapInTry =\n\t<T extends Array<any>, U>(fn: (...args: T) => U) =>\n\t(...args: T): U => {\n\t\tlet res: U;\n\t\ttry {\n\t\t\tres = fn(...args);\n\t\t} catch (err) {\n\t\t\tconsole.error(err); // eslint-disable-line no-console\n\t\t}\n\t\treturn res;\n\t};\n","declare const BUILD_VERSION: string;\n\nexport const baseHeaders = {\n\t'x-descope-sdk-name': 'react',\n\t'x-descope-sdk-version': BUILD_VERSION\n};\n\n// This sdk can be used in SSR apps\nexport const IS_BROWSER = typeof window !== 'undefined';\n","import createSdk from '@descope/web-js-sdk';\nimport { IS_BROWSER } from './constants';\nimport { wrapInTry } from './utils';\n\ntype Sdk = ReturnType<typeof createSdkWrapper>;\nlet globalSdk: Sdk;\n\nconst createSdkWrapper = <P extends Parameters<typeof createSdk>[0]>(\n\tconfig: P\n) => {\n\tconst sdk = createSdk({\n\t\tpersistTokens: IS_BROWSER as true,\n\t\tautoRefresh: IS_BROWSER as true,\n\t\t...config\n\t});\n\tglobalSdk = sdk;\n\n\treturn sdk;\n};\n\n// eslint-disable-next-line import/exports-last\nexport const createTempSdk = () =>\n\tcreateSdkWrapper({\n\t\tprojectId: 'temp pid',\n\t\tpersistTokens: false,\n\t\tautoRefresh: false,\n\t\tstoreLastAuthenticatedUser: false\n\t});\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\tif (IS_BROWSER) {\n\t\treturn globalSdk?.getSessionToken();\n\t}\n\n\t// eslint-disable-next-line no-console\n\tconsole.warn('Get session token is not supported in SSR');\n\treturn '';\n};\n\nexport const getRefreshToken = () => {\n\tif (IS_BROWSER) {\n\t\treturn globalSdk?.getRefreshToken();\n\t}\n\t// eslint-disable-next-line no-console\n\tconsole.warn('Get refresh token is not supported in SSR');\n\treturn '';\n};\n\nexport const isSessionTokenExpired = (token = getSessionToken()) =>\n\tglobalSdk?.isJwtExpired(token);\n\nexport const isRefreshTokenExpired = (token = getRefreshToken()) =>\n\tglobalSdk?.isJwtExpired(token);\n\nexport const getJwtPermissions = wrapInTry(\n\t(token = getSessionToken(), tenant?: string) =>\n\t\tglobalSdk?.getJwtPermissions(token, tenant)\n);\n\nexport const getJwtRoles = wrapInTry(\n\t(token = getSessionToken(), tenant?: string) =>\n\t\tglobalSdk?.getJwtRoles(token, tenant)\n);\n\nexport const refresh = (token = getRefreshToken()) => globalSdk?.refresh(token);\n\nexport const getGlobalSdk = () => globalSdk;\n\nexport default createSdkWrapper;\n","import React, {\n\tFC,\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState\n} from 'react';\nimport Context from '../../hooks/Context';\nimport { IContext, User } from '../../types';\nimport { withValidation } from '../../utils';\nimport useSdk from './useSdk';\n\ninterface IAuthProviderProps {\n\tprojectId: string;\n\tbaseUrl?: string;\n\t// If true, tokens will be stored on local storage and can accessed with getToken function\n\tpersistTokens?: boolean;\n\t// If true, session token (jwt) will be stored on cookie. Otherwise, the session token will be\n\t// stored on local storage and can accessed with getSessionToken function\n\t// Use this option if session token will stay small (less than 1k)\n\t// NOTE: Session token can grow, especially in cases of using authorization, or adding custom claims\n\tsessionTokenViaCookie?: boolean;\n\t// If true, last authenticated user will be stored on local storage and can accessed with getUser function\n\tstoreLastAuthenticatedUser?: boolean;\n\tchildren?: JSX.Element;\n}\n\nconst AuthProvider: FC<IAuthProviderProps> = ({\n\tprojectId,\n\tbaseUrl = '',\n\tsessionTokenViaCookie = false,\n\tpersistTokens = true,\n\tstoreLastAuthenticatedUser = true,\n\tchildren = undefined\n}) => {\n\tconst [user, setUser] = useState<User>();\n\tconst [session, setSession] = useState<string>();\n\n\tconst [isUserLoading, setIsUserLoading] = useState(false);\n\tconst [isSessionLoading, setIsSessionLoading] = useState(false);\n\n\tconst sdk = useSdk({\n\t\tprojectId,\n\t\tbaseUrl,\n\t\tpersistTokens,\n\t\tsessionTokenViaCookie,\n\t\tstoreLastAuthenticatedUser\n\t});\n\n\tuseEffect(() => {\n\t\tif (sdk) {\n\t\t\tconst unsubscribeSessionToken = sdk.onSessionTokenChange(setSession);\n\t\t\tconst unsubscribeUser = sdk.onUserChange(setUser);\n\n\t\t\treturn () => {\n\t\t\t\tunsubscribeSessionToken();\n\t\t\t\tunsubscribeUser();\n\t\t\t};\n\t\t}\n\t\treturn undefined;\n\t}, [sdk]);\n\n\tconst isSessionFetched = useRef(false);\n\n\tconst fetchSession = useCallback(() => {\n\t\t// We want that the session will fetched only once\n\t\tif (isSessionFetched.current) return;\n\t\tisSessionFetched.current = true;\n\n\t\tsetIsSessionLoading(true);\n\t\twithValidation(sdk?.refresh)().then(() => {\n\t\t\tsetIsSessionLoading(false);\n\t\t});\n\t}, [sdk]);\n\n\tconst fetchUser = useCallback(() => {\n\t\tsetIsUserLoading(true);\n\t\twithValidation(sdk.me)().then(() => {\n\t\t\tsetIsUserLoading(false);\n\t\t});\n\t}, [sdk]);\n\n\tconst value = useMemo<IContext>(\n\t\t() => ({\n\t\t\tfetchUser,\n\t\t\tuser,\n\t\t\tisUserLoading,\n\t\t\tfetchSession,\n\t\t\tsession,\n\t\t\tisSessionLoading,\n\t\t\tisSessionFetched: isSessionFetched.current,\n\t\t\tprojectId,\n\t\t\tbaseUrl,\n\t\t\tstoreLastAuthenticatedUser,\n\t\t\tsetUser,\n\t\t\tsetSession,\n\t\t\tsdk\n\t\t}),\n\t\t[\n\t\t\tfetchUser,\n\t\t\tuser,\n\t\t\tisUserLoading,\n\t\t\tfetchSession,\n\t\t\tsession,\n\t\t\tisSessionLoading,\n\t\t\tisSessionFetched.current,\n\t\t\tprojectId,\n\t\t\tbaseUrl,\n\t\t\tsetUser,\n\t\t\tsetSession,\n\t\t\tsdk\n\t\t]\n\t);\n\treturn <Context.Provider value={value}>{children}</Context.Provider>;\n};\n\nexport default AuthProvider;\n","import React, {\n\tlazy,\n\tSuspense,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseMemo,\n\tuseState\n} from 'react';\nimport { baseHeaders } from '../constants';\nimport Context from '../hooks/Context';\nimport { DescopeProps } from '../types';\nimport { getGlobalSdk } from '../sdk';\n\n// web-component code uses browser API, but can be used in SSR apps, hence the lazy loading\nconst DescopeWC = lazy(async () => {\n\tconst module = await import('@descope/web-component');\n\tmodule.default.sdkConfigOverrides = {\n\t\t// Overrides the web-component's base headers to indicate usage via the React SDK\n\t\tbaseHeaders,\n\t\t// Disables token persistence within the web-component to delegate token management\n\t\t// to the global SDK hooks. This ensures token handling aligns with the SDK's configuration,\n\t\t// and web-component requests leverage the global SDK's beforeRequest hooks for consistency\n\t\tpersistTokens: false,\n\t\thooks: {\n\t\t\tget beforeRequest() {\n\t\t\t\t// Retrieves the beforeRequest hook from the global SDK, which is initialized\n\t\t\t\t// within the AuthProvider using the desired configuration. This approach ensures\n\t\t\t\t// the web-component utilizes the same beforeRequest hooks as the global SDK\n\t\t\t\treturn getGlobalSdk().httpClient.hooks.beforeRequest;\n\t\t\t},\n\t\t\tset beforeRequest(_) {\n\t\t\t\t// The empty setter prevents runtime errors when attempts are made to assign a value to 'beforeRequest'.\n\t\t\t\t// JavaScript objects default to having both getters and setters\n\t\t\t}\n\t\t}\n\t};\n\n\treturn {\n\t\tdefault: ({\n\t\t\tprojectId,\n\t\t\tflowId,\n\t\t\tbaseUrl,\n\t\t\tinnerRef,\n\t\t\ttenant,\n\t\t\ttheme,\n\t\t\tlocale,\n\t\t\tdebug,\n\t\t\tredirectUrl,\n\t\t\tclient,\n\t\t\tform,\n\t\t\tautoFocus\n\t\t}) => (\n\t\t\t<descope-wc\n\t\t\t\tproject-id={projectId}\n\t\t\t\tflow-id={flowId}\n\t\t\t\tbase-url={baseUrl}\n\t\t\t\tref={innerRef}\n\t\t\t\ttenant={tenant}\n\t\t\t\ttheme={theme}\n\t\t\t\tlocale={locale}\n\t\t\t\tdebug={debug}\n\t\t\t\tclient={client}\n\t\t\t\tform={form}\n\t\t\t\tredirect-url={redirectUrl}\n\t\t\t\tauto-focus={autoFocus}\n\t\t\t/>\n\t\t)\n\t};\n});\n\nconst Descope = React.forwardRef<HTMLElement, DescopeProps>(\n\t(\n\t\t{\n\t\t\tflowId,\n\t\t\tonSuccess,\n\t\t\tonError,\n\t\t\tonReady,\n\t\t\tlogger,\n\t\t\ttenant,\n\t\t\ttheme,\n\t\t\tlocale,\n\t\t\tdebug,\n\t\t\tclient,\n\t\t\tform,\n\t\t\ttelemetryKey,\n\t\t\tredirectUrl,\n\t\t\tautoFocus,\n\t\t\terrorTransformer\n\t\t},\n\t\tref\n\t) => {\n\t\tconst [innerRef, setInnerRef] = useState(null);\n\n\t\tuseImperativeHandle(ref, () => innerRef);\n\n\t\tconst { projectId, baseUrl, storeLastAuthenticatedUser, sdk } =\n\t\t\tReact.useContext(Context);\n\n\t\tconst handleSuccess = useCallback(\n\t\t\tasync (e: CustomEvent) => {\n\t\t\t\t// In order to make sure all the after-hooks are running with the success response\n\t\t\t\t// we are generating a fake response with the success data and calling the http client after hook fn with it\n\t\t\t\tawait sdk.httpClient.hooks.afterRequest(\n\t\t\t\t\t{} as any,\n\t\t\t\t\tnew Response(JSON.stringify(e.detail))\n\t\t\t\t);\n\t\t\t\tif (onSuccess) {\n\t\t\t\t\tonSuccess(e);\n\t\t\t\t}\n\t\t\t},\n\t\t\t[onSuccess]\n\t\t);\n\n\t\tuseEffect(() => {\n\t\t\tconst ele = innerRef;\n\t\t\tele?.addEventListener('success', handleSuccess);\n\t\t\tif (onError) ele?.addEventListener('error', onError);\n\t\t\tif (onReady) ele?.addEventListener('ready', onReady);\n\n\t\t\treturn () => {\n\t\t\t\tif (onError) ele?.removeEventListener('error', onError);\n\t\t\t\tif (onReady) ele?.removeEventListener('ready', onReady);\n\n\t\t\t\tele?.removeEventListener('success', handleSuccess);\n\t\t\t};\n\t\t}, [innerRef, onError, handleSuccess]);\n\n\t\t// Success event\n\t\tuseEffect(() => {\n\t\t\tconst ele = innerRef;\n\t\t\tele?.addEventListener('success', handleSuccess);\n\t\t\treturn () => {\n\t\t\t\tele?.removeEventListener('success', handleSuccess);\n\t\t\t};\n\t\t}, [innerRef, handleSuccess]);\n\n\t\t// Error event\n\t\tuseEffect(() => {\n\t\t\tconst ele = innerRef;\n\t\t\tif (onError) ele?.addEventListener('error', onError);\n\n\t\t\treturn () => {\n\t\t\t\tif (onError) ele?.removeEventListener('error', onError);\n\t\t\t};\n\t\t}, [innerRef, onError]);\n\n\t\t// Ready event\n\t\tuseEffect(() => {\n\t\t\tconst ele = innerRef;\n\t\t\tif (onReady) ele?.addEventListener('ready', onReady);\n\n\t\t\treturn () => {\n\t\t\t\tif (onReady) ele?.removeEventListener('error', onReady);\n\t\t\t};\n\t\t}, [innerRef, onReady]);\n\n\t\tuseEffect(() => {\n\t\t\tif (innerRef) {\n\t\t\t\tinnerRef.errorTransformer = errorTransformer;\n\t\t\t}\n\t\t}, [innerRef, errorTransformer]);\n\n\t\tuseEffect(() => {\n\t\t\tif (innerRef && logger) {\n\t\t\t\tinnerRef.logger = logger;\n\t\t\t}\n\t\t}, [innerRef, logger]);\n\n\t\tconst { form: stringifiedForm, client: stringifiedClient } = useMemo(\n\t\t\t() => ({\n\t\t\t\tform: JSON.stringify(form || {}),\n\t\t\t\tclient: JSON.stringify(client || {})\n\t\t\t}),\n\t\t\t[form, client]\n\t\t);\n\n\t\treturn (\n\t\t\t/**\n\t\t\t * in order to avoid redundant remounting of the WC, we are wrapping it with a form element\n\t\t\t * this workaround is done in order to support webauthn passkeys\n\t\t\t * it can be removed once this issue will be solved\n\t\t\t * https://bugs.chromium.org/p/chromium/issues/detail?id=1404106#c2\n\t\t\t */\n\t\t\t<form>\n\t\t\t\t<Suspense fallback={null}>\n\t\t\t\t\t<DescopeWC\n\t\t\t\t\t\tprojectId={projectId}\n\t\t\t\t\t\tflowId={flowId}\n\t\t\t\t\t\tbaseUrl={baseUrl}\n\t\t\t\t\t\tinnerRef={setInnerRef}\n\t\t\t\t\t\ttenant={tenant}\n\t\t\t\t\t\ttheme={theme}\n\t\t\t\t\t\tlocale={locale}\n\t\t\t\t\t\tdebug={debug}\n\t\t\t\t\t\tform={stringifiedForm}\n\t\t\t\t\t\tclient={stringifiedClient}\n\t\t\t\t\t\ttelemetryKey={telemetryKey}\n\t\t\t\t\t\tredirectUrl={redirectUrl}\n\t\t\t\t\t\tautoFocus={autoFocus}\n\t\t\t\t\t\tstoreLastAuthenticatedUser={storeLastAuthenticatedUser}\n\t\t\t\t\t/>\n\t\t\t\t</Suspense>\n\t\t\t</form>\n\t\t);\n\t}\n);\n\nexport default Descope;\n","import React, {\n\tlazy,\n\tSuspense,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseState\n} from 'react';\nimport Context from '../hooks/Context';\nimport { UserManagementProps } from '../types';\n\n// web-component code uses browser API, but can be used in SSR apps, hence the lazy loading\nconst UserManagementWC = lazy(async () => {\n\tawait import('@descope/user-management-widget');\n\n\treturn {\n\t\tdefault: ({\n\t\t\tprojectId,\n\t\t\tbaseUrl,\n\t\t\tinnerRef,\n\t\t\ttenant,\n\t\t\twidgetId,\n\t\t\ttheme,\n\t\t\tdebug\n\t\t}) => (\n\t\t\t<descope-user-management-widget\n\t\t\t\tproject-id={projectId}\n\t\t\t\twidget-id={widgetId}\n\t\t\t\tbase-url={baseUrl}\n\t\t\t\ttheme={theme}\n\t\t\t\ttenant={tenant}\n\t\t\t\tdebug={debug}\n\t\t\t\tref={innerRef}\n\t\t\t/>\n\t\t)\n\t};\n});\n\nconst UserManagement = React.forwardRef<HTMLElement, UserManagementProps>(\n\t({ logger, tenant, theme, debug, widgetId }, ref) => {\n\t\tconst [innerRef, setInnerRef] = useState(null);\n\n\t\tuseImperativeHandle(ref, () => innerRef);\n\n\t\tconst { projectId, baseUrl } = React.useContext(Context);\n\n\t\tuseEffect(() => {\n\t\t\tif (innerRef && logger) {\n\t\t\t\tinnerRef.logger = logger;\n\t\t\t}\n\t\t}, [innerRef, logger]);\n\n\t\treturn (\n\t\t\t<Suspense fallback={null}>\n\t\t\t\t<UserManagementWC\n\t\t\t\t\tprojectId={projectId}\n\t\t\t\t\twidgetId={widgetId}\n\t\t\t\t\tbaseUrl={baseUrl}\n\t\t\t\t\tinnerRef={setInnerRef}\n\t\t\t\t\ttenant={tenant}\n\t\t\t\t\ttheme={theme}\n\t\t\t\t\tdebug={debug}\n\t\t\t\t/>\n\t\t\t</Suspense>\n\t\t);\n\t}\n);\n\nexport default UserManagement;\n","import React, {\n\tlazy,\n\tSuspense,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseState\n} from 'react';\nimport Context from '../hooks/Context';\nimport { RoleManagementProps } from '../types';\n\n// web-component code uses browser API, but can be used in SSR apps, hence the lazy loading\nconst RoleManagementWC = lazy(async () => {\n\tawait import('@descope/role-management-widget');\n\n\treturn {\n\t\tdefault: ({\n\t\t\tprojectId,\n\t\t\tbaseUrl,\n\t\t\tinnerRef,\n\t\t\ttenant,\n\t\t\twidgetId,\n\t\t\ttheme,\n\t\t\tdebug\n\t\t}) => (\n\t\t\t<descope-role-management-widget\n\t\t\t\tproject-id={projectId}\n\t\t\t\twidget-id={widgetId}\n\t\t\t\tbase-url={baseUrl}\n\t\t\t\ttheme={theme}\n\t\t\t\ttenant={tenant}\n\t\t\t\tdebug={debug}\n\t\t\t\tref={innerRef}\n\t\t\t/>\n\t\t)\n\t};\n});\n\nconst RoleManagement = React.forwardRef<HTMLElement, RoleManagementProps>(\n\t({ logger, tenant, theme, debug, widgetId }, ref) => {\n\t\tconst [innerRef, setInnerRef] = useState(null);\n\n\t\tuseImperativeHandle(ref, () => innerRef);\n\n\t\tconst { projectId, baseUrl } = React.useContext(Context);\n\n\t\tuseEffect(() => {\n\t\t\tif (innerRef && logger) {\n\t\t\t\tinnerRef.logger = logger;\n\t\t\t}\n\t\t}, [innerRef, logger]);\n\n\t\treturn (\n\t\t\t<Suspense fallback={null}>\n\t\t\t\t<RoleManagementWC\n\t\t\t\t\tprojectId={projectId}\n\t\t\t\t\twidgetId={widgetId}\n\t\t\t\t\tbaseUrl={baseUrl}\n\t\t\t\t\tinnerRef={setInnerRef}\n\t\t\t\t\ttenant={tenant}\n\t\t\t\t\ttheme={theme}\n\t\t\t\t\tdebug={debug}\n\t\t\t\t/>\n\t\t\t</Suspense>\n\t\t);\n\t}\n);\n\nexport default RoleManagement;\n","import React, {\n\tlazy,\n\tSuspense,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseState\n} from 'react';\nimport Context from '../hooks/Context';\nimport { AccessKeyManagementProps } from '../types';\n\n// web-component code uses browser API, but can be used in SSR apps, hence the lazy loading\nconst AccessKeyManagementWC = lazy(async () => {\n\tawait import('@descope/access-key-management-widget');\n\n\treturn {\n\t\tdefault: ({\n\t\t\tprojectId,\n\t\t\tbaseUrl,\n\t\t\tinnerRef,\n\t\t\ttenant,\n\t\t\twidgetId,\n\t\t\ttheme,\n\t\t\tdebug\n\t\t}) => (\n\t\t\t<descope-access-key-management-widget\n\t\t\t\tproject-id={projectId}\n\t\t\t\twidget-id={widgetId}\n\t\t\t\tbase-url={baseUrl}\n\t\t\t\ttheme={theme}\n\t\t\t\ttenant={tenant}\n\t\t\t\tdebug={debug}\n\t\t\t\tref={innerRef}\n\t\t\t/>\n\t\t)\n\t};\n});\n\nconst AccessKeyManagement = React.forwardRef<\n\tHTMLElement,\n\tAccessKeyManagementProps\n>(({ logger, tenant, theme, debug, widgetId }, ref) => {\n\tconst [innerRef, setInnerRef] = useState(null);\n\n\tuseImperativeHandle(ref, () => innerRef);\n\n\tconst { projectId, baseUrl } = React.useContext(Context);\n\n\tuseEffect(() => {\n\t\tif (innerRef && logger) {\n\t\t\tinnerRef.logger = logger;\n\t\t}\n\t}, [innerRef, logger]);\n\n\treturn (\n\t\t<Suspense fallback={null}>\n\t\t\t<AccessKeyManagementWC\n\t\t\t\tprojectId={projectId}\n\t\t\t\twidgetId={widgetId}\n\t\t\t\tbaseUrl={baseUrl}\n\t\t\t\tinnerRef={setInnerRef}\n\t\t\t\ttenant={tenant}\n\t\t\t\ttheme={theme}\n\t\t\t\tdebug={debug}\n\t\t\t/>\n\t\t</Suspense>\n\t);\n});\n\nexport default AccessKeyManagement;\n","import React, {\n\tlazy,\n\tSuspense,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseState\n} from 'react';\nimport Context from '../hooks/Context';\nimport { AuditManagementProps } from '../types';\n\n// web-component code uses browser API, but can be used in SSR apps, hence the lazy loading\nconst AuditManagementWC = lazy(async () => {\n\tawait import('@descope/audit-management-widget');\n\n\treturn {\n\t\tdefault: ({\n\t\t\tprojectId,\n\t\t\tbaseUrl,\n\t\t\tinnerRef,\n\t\t\ttenant,\n\t\t\twidgetId,\n\t\t\ttheme,\n\t\t\tdebug\n\t\t}) => (\n\t\t\t<descope-audit-management-widget\n\t\t\t\tproject-id={projectId}\n\t\t\t\twidget-id={widgetId}\n\t\t\t\tbase-url={baseUrl}\n\t\t\t\ttheme={theme}\n\t\t\t\ttenant={tenant}\n\t\t\t\tdebug={debug}\n\t\t\t\tref={innerRef}\n\t\t\t/>\n\t\t)\n\t};\n});\n\nconst AuditManagement = React.forwardRef<HTMLElement, AuditManagementProps>(\n\t({ logger, tenant, theme, debug, widgetId }, ref) => {\n\t\tconst [innerRef, setInnerRef] = useState(null);\n\n\t\tuseImperativeHandle(ref, () => innerRef);\n\n\t\tconst { projectId, baseUrl } = React.useContext(Context);\n\n\t\tuseEffect(() => {\n\t\t\tif (innerRef && logger) {\n\t\t\t\tinnerRef.logger = logger;\n\t\t\t}\n\t\t}, [innerRef, logger]);\n\n\t\treturn (\n\t\t\t<Suspense fallback={null}>\n\t\t\t\t<AuditManagementWC\n\t\t\t\t\tprojectId={projectId}\n\t\t\t\t\twidgetId={widgetId}\n\t\t\t\t\tbaseUrl={baseUrl}\n\t\t\t\t\tinnerRef={setInnerRef}\n\t\t\t\t\ttenant={tenant}\n\t\t\t\t\ttheme={theme}\n\t\t\t\t\tdebug={debug}\n\t\t\t\t/>\n\t\t\t</Suspense>\n\t\t);\n\t}\n);\n\nexport default AuditManagement;\n","import { useContext } from 'react';\nimport Context from './Context';\n\nexport default () => {\n\tconst ctx = useContext(Context);\n\tif (!ctx) {\n\t\tthrow Error(\n\t\t\t`You can only use this hook in the context of <AuthProvider />`\n\t\t);\n\t}\n\n\treturn ctx;\n};\n","import { useMemo } from 'react';\nimport { Sdk } from '../types';\nimport useContext from './useContext';\nimport { createTempSdk } from '../sdk';\n\nconst generateErrorMsg = (entryType: string) =>\n\t`You can only use this ${entryType} after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component`;\n\n// handler which throw an error for every SDK function\nconst proxyThrowHandler = {\n\t// eslint-disable-next-line prefer-arrow/prefer-arrow-functions\n\tget(target: Record<string, any>, key: string) {\n\t\tif (typeof target[key] === 'object' && target[key] !== null) {\n\t\t\treturn new Proxy(target[key], proxyThrowHandler);\n\t\t}\n\n\t\tif (typeof target[key] === 'function') {\n\t\t\treturn () => {\n\t\t\t\tthrow Error(generateErrorMsg('function'));\n\t\t\t};\n\t\t}\n\n\t\tthrow Error(generateErrorMsg('attribute'));\n\t}\n};\n\nconst useDescope = (): Sdk => {\n\tconst { sdk } = useContext();\n\n\treturn useMemo(() => {\n\t\tif (!sdk) {\n\t\t\t// In case the SDK is not initialized, we want to throw an error when the SDK functions are called\n\t\t\treturn new Proxy(createTempSdk(), proxyThrowHandler) as Sdk;\n\t\t}\n\n\t\treturn sdk;\n\t}, [sdk]);\n};\n\nexport default useDescope;\n","import { useMemo } from 'react';\nimport { baseHeaders } from '../../constants';\nimport createSdk from '../../sdk';\n\ntype Config = Pick<\n\tParameters<typeof createSdk>[0],\n\t| 'projectId'\n\t| 'baseUrl'\n\t| 'persistTokens'\n\t| 'sessionTokenViaCookie'\n\t| 'storeLastAuthenticatedUser'\n>;\n\nexport default ({\n\tprojectId,\n\tbaseUrl,\n\tpersistTokens,\n\tsessionTokenViaCookie,\n\tstoreLastAuthenticatedUser\n}: Config): ReturnType<typeof createSdk> =>\n\tuseMemo(() => {\n\t\tif (!projectId) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn createSdk({\n\t\t\tprojectId,\n\t\t\tbaseUrl,\n\t\t\tsessionTokenViaCookie,\n\t\t\tbaseHeaders,\n\t\t\tpersistTokens,\n\t\t\tstoreLastAuthenticatedUser,\n\t\t\tautoRefresh: true\n\t\t});\n\t}, [projectId, baseUrl, sessionTokenViaCookie]);\n","import React from 'react';\nimport { DefaultFlowProps } from '../types';\nimport Descope from './Descope';\n\nexport const SignInFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-in\" />\n);\n\nexport const SignUpFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-up\" />\n);\n\nexport const SignUpOrInFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-up-or-in\" />\n);\n","import { useEffect, useMemo, useRef } from 'react';\nimport useContext from './useContext';\n\nconst useSession = () => {\n\tconst { session, isSessionLoading, fetchSession, isSessionFetched } =\n\t\tuseContext();\n\n\t// when session should be received, we want the return value of \"isSessionLoading\" to be true starting from the first call\n\t// (and not only when receiving an update from the context)\n\tconst isLoading = useRef(isSessionLoading);\n\n\t// we want this to happen before returning a value so we are using \"useMemo\" and not \"useEffect\"\n\tuseMemo(() => {\n\t\tisLoading.current = isSessionLoading;\n\t}, [isSessionLoading]);\n\n\tconst shouldFetchSession = !session && !isSessionLoading;\n\n\t// we want this to happen before returning a value so we are using \"useMemo\" and not \"useEffect\"\n\tuseMemo(() => {\n\t\tif (shouldFetchSession && !isSessionFetched) {\n\t\t\tisLoading.current = true;\n\t\t}\n\t}, [isSessionFetched]);\n\n\t// Fetch session if it's not already fetched\n\t// We want this to happen only once, so the dependency array should not contain shouldFetchSession\n\tuseEffect(() => {\n\t\tif (shouldFetchSession) {\n\t\t\tfetchSession();\n\t\t}\n\t}, [fetchSession]);\n\treturn {\n\t\tisSessionLoading: isLoading.current,\n\t\tsessionToken: session,\n\t\tisAuthenticated: !!session\n\t};\n};\n\nexport default useSession;\n","import { useEffect, useMemo, useRef, useState } from 'react';\nimport useContext from './useContext';\n\nconst useUser = () => {\n\tconst { user, fetchUser, isUserLoading, session } = useContext();\n\tconst [isInit, setIsInit] = useState(false); // we want to get the user only in the first time we got a session\n\n\t// when session should be received, we want the return value of \"isUserLoading\" to be true starting from the first call\n\t// (and not only when receiving an update from the context)\n\tconst isLoading = useRef(isUserLoading);\n\n\tconst shouldFetchUser = useMemo(\n\t\t() => !user && !isUserLoading && session && !isInit,\n\t\t[fetchUser, session, isInit]\n\t);\n\n\t// we want this to happen before returning a value so we are using \"useMemo\" and not \"useEffect\"\n\tuseMemo(() => {\n\t\tisLoading.current = isUserLoading;\n\t}, [isUserLoading]);\n\n\t// we want this to happen before returning a value so we are using \"useMemo\" and not \"useEffect\"\n\tuseMemo(() => {\n\t\tif (shouldFetchUser) {\n\t\t\tisLoading.current = true;\n\t\t}\n\t}, [shouldFetchUser]);\n\n\tuseEffect(() => {\n\t\tif (shouldFetchUser) {\n\t\t\tsetIsInit(true);\n\t\t\tfetchUser();\n\t\t}\n\t}, [shouldFetchUser]);\n\n\treturn { isUserLoading: isLoading.current, user };\n};\n\nexport default useUser;\n"],"names":["Context","React","createContext","undefined","withValidation","fn","args","Error","wrapInTry","res","err","console","error","baseHeaders","IS_BROWSER","window","globalSdk","createSdkWrapper","config","sdk","createSdk","Object","assign","persistTokens","autoRefresh","createTempSdk","projectId","storeLastAuthenticatedUser","getSessionToken","warn","getRefreshToken","getJwtPermissions","token","tenant","getJwtRoles","DescopeWC","lazy","async","Promise","resolve","then","_interopNamespace","require","default","sdkConfigOverrides","hooks","beforeRequest","httpClient","_","flowId","baseUrl","innerRef","theme","locale","debug","redirectUrl","client","form","autoFocus","createElement","ref","Descope","forwardRef","onSuccess","onError","onReady","logger","telemetryKey","errorTransformer","setInnerRef","useState","useImperativeHandle","useContext","handleSuccess","useCallback","e","afterRequest","Response","JSON","stringify","detail","useEffect","ele","addEventListener","removeEventListener","stringifiedForm","stringifiedClient","useMemo","Suspense","fallback","UserManagementWC","widgetId","UserManagement","RoleManagementWC","RoleManagement","AccessKeyManagementWC","AccessKeyManagement","AuditManagementWC","AuditManagement","ctx","generateErrorMsg","entryType","proxyThrowHandler","get","target","key","Proxy","sessionTokenViaCookie","children","user","setUser","session","setSession","isUserLoading","setIsUserLoading","isSessionLoading","setIsSessionLoading","useSdk","unsubscribeSessionToken","onSessionTokenChange","unsubscribeUser","onUserChange","isSessionFetched","useRef","fetchSession","current","refresh","fetchUser","me","value","Provider","props","isJwtExpired","isLoading","shouldFetchSession","sessionToken","isAuthenticated","isInit","setIsInit","shouldFetchUser"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../../src/hooks/Context.ts","../../src/utils.ts","../../src/constants.ts","../../src/sdk.ts","../../src/components/AuthProvider/AuthProvider.tsx","../../src/components/Descope.tsx","../../src/components/UserManagement.tsx","../../src/components/RoleManagement.tsx","../../src/components/AccessKeyManagement.tsx","../../src/components/AuditManagement.tsx","../../src/components/UserProfile.tsx","../../src/hooks/useContext.ts","../../src/hooks/useDescope.ts","../../src/components/AuthProvider/useSdk.ts","../../src/components/DefaultFlows.tsx","../../src/hooks/useSession.ts","../../src/hooks/useUser.ts"],"sourcesContent":["import React from 'react';\nimport { IContext } from '../types';\n\nconst Context = React.createContext<IContext>(undefined);\n\nexport default Context;\n","/**\n * Wrap a function with a validation that it exists\n * @param fn The function to wrap with the validation\n * @throws if function does not exist, an error with the relevant message will be thrown\n */\nexport const withValidation =\n\t<T extends Array<any>, U>(fn: (...args: T) => U) =>\n\t(...args: T): U => {\n\t\tif (!fn) {\n\t\t\tthrow Error(\n\t\t\t\t`You can only use this function after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component`\n\t\t\t);\n\t\t}\n\t\treturn fn(...args);\n\t};\n\nexport const wrapInTry =\n\t<T extends Array<any>, U>(fn: (...args: T) => U) =>\n\t(...args: T): U => {\n\t\tlet res: U;\n\t\ttry {\n\t\t\tres = fn(...args);\n\t\t} catch (err) {\n\t\t\tconsole.error(err); // eslint-disable-line no-console\n\t\t}\n\t\treturn res;\n\t};\n","declare const BUILD_VERSION: string;\n\nexport const baseHeaders = {\n\t'x-descope-sdk-name': 'react',\n\t'x-descope-sdk-version': BUILD_VERSION\n};\n\n// This sdk can be used in SSR apps\nexport const IS_BROWSER = typeof window !== 'undefined';\n","import createSdk from '@descope/web-js-sdk';\nimport { IS_BROWSER } from './constants';\nimport { wrapInTry } from './utils';\n\ntype Sdk = ReturnType<typeof createSdkWrapper>;\nlet globalSdk: Sdk;\n\nconst createSdkWrapper = <P extends Parameters<typeof createSdk>[0]>(\n\tconfig: P\n) => {\n\tconst sdk = createSdk({\n\t\tpersistTokens: IS_BROWSER as true,\n\t\tautoRefresh: IS_BROWSER as true,\n\t\t...config\n\t});\n\tglobalSdk = sdk;\n\n\treturn sdk;\n};\n\n// eslint-disable-next-line import/exports-last\nexport const createTempSdk = () =>\n\tcreateSdkWrapper({\n\t\tprojectId: 'temp pid',\n\t\tpersistTokens: false,\n\t\tautoRefresh: false,\n\t\tstoreLastAuthenticatedUser: false\n\t});\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\tif (IS_BROWSER) {\n\t\treturn globalSdk?.getSessionToken();\n\t}\n\n\t// eslint-disable-next-line no-console\n\tconsole.warn('Get session token is not supported in SSR');\n\treturn '';\n};\n\nexport const getRefreshToken = () => {\n\tif (IS_BROWSER) {\n\t\treturn globalSdk?.getRefreshToken();\n\t}\n\t// eslint-disable-next-line no-console\n\tconsole.warn('Get refresh token is not supported in SSR');\n\treturn '';\n};\n\nexport const isSessionTokenExpired = (token = getSessionToken()) =>\n\tglobalSdk?.isJwtExpired(token);\n\nexport const isRefreshTokenExpired = (token = getRefreshToken()) =>\n\tglobalSdk?.isJwtExpired(token);\n\nexport const getJwtPermissions = wrapInTry(\n\t(token = getSessionToken(), tenant?: string) =>\n\t\tglobalSdk?.getJwtPermissions(token, tenant)\n);\n\nexport const getJwtRoles = wrapInTry(\n\t(token = getSessionToken(), tenant?: string) =>\n\t\tglobalSdk?.getJwtRoles(token, tenant)\n);\n\nexport const refresh = (token = getRefreshToken()) => globalSdk?.refresh(token);\n\nexport const getGlobalSdk = () => globalSdk;\n\nexport default createSdkWrapper;\n","import React, {\n\tFC,\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState\n} from 'react';\nimport Context from '../../hooks/Context';\nimport { IContext, User } from '../../types';\nimport { withValidation } from '../../utils';\nimport useSdk from './useSdk';\n\ninterface IAuthProviderProps {\n\tprojectId: string;\n\tbaseUrl?: string;\n\t// If true, tokens will be stored on local storage and can accessed with getToken function\n\tpersistTokens?: boolean;\n\t// If true, session token (jwt) will be stored on cookie. Otherwise, the session token will be\n\t// stored on local storage and can accessed with getSessionToken function\n\t// Use this option if session token will stay small (less than 1k)\n\t// NOTE: Session token can grow, especially in cases of using authorization, or adding custom claims\n\tsessionTokenViaCookie?: boolean;\n\t// If true, last authenticated user will be stored on local storage and can accessed with getUser function\n\tstoreLastAuthenticatedUser?: boolean;\n\tchildren?: JSX.Element;\n}\n\nconst AuthProvider: FC<IAuthProviderProps> = ({\n\tprojectId,\n\tbaseUrl = '',\n\tsessionTokenViaCookie = false,\n\tpersistTokens = true,\n\tstoreLastAuthenticatedUser = true,\n\tchildren = undefined\n}) => {\n\tconst [user, setUser] = useState<User>();\n\tconst [session, setSession] = useState<string>();\n\n\tconst [isUserLoading, setIsUserLoading] = useState(false);\n\tconst [isSessionLoading, setIsSessionLoading] = useState(false);\n\n\tconst sdk = useSdk({\n\t\tprojectId,\n\t\tbaseUrl,\n\t\tpersistTokens,\n\t\tsessionTokenViaCookie,\n\t\tstoreLastAuthenticatedUser\n\t});\n\n\tuseEffect(() => {\n\t\tif (sdk) {\n\t\t\tconst unsubscribeSessionToken = sdk.onSessionTokenChange(setSession);\n\t\t\tconst unsubscribeUser = sdk.onUserChange(setUser);\n\n\t\t\treturn () => {\n\t\t\t\tunsubscribeSessionToken();\n\t\t\t\tunsubscribeUser();\n\t\t\t};\n\t\t}\n\t\treturn undefined;\n\t}, [sdk]);\n\n\tconst isSessionFetched = useRef(false);\n\n\tconst fetchSession = useCallback(() => {\n\t\t// We want that the session will fetched only once\n\t\tif (isSessionFetched.current) return;\n\t\tisSessionFetched.current = true;\n\n\t\tsetIsSessionLoading(true);\n\t\twithValidation(sdk?.refresh)().then(() => {\n\t\t\tsetIsSessionLoading(false);\n\t\t});\n\t}, [sdk]);\n\n\tconst fetchUser = useCallback(() => {\n\t\tsetIsUserLoading(true);\n\t\twithValidation(sdk.me)().then(() => {\n\t\t\tsetIsUserLoading(false);\n\t\t});\n\t}, [sdk]);\n\n\tconst value = useMemo<IContext>(\n\t\t() => ({\n\t\t\tfetchUser,\n\t\t\tuser,\n\t\t\tisUserLoading,\n\t\t\tfetchSession,\n\t\t\tsession,\n\t\t\tisSessionLoading,\n\t\t\tisSessionFetched: isSessionFetched.current,\n\t\t\tprojectId,\n\t\t\tbaseUrl,\n\t\t\tstoreLastAuthenticatedUser,\n\t\t\tsetUser,\n\t\t\tsetSession,\n\t\t\tsdk\n\t\t}),\n\t\t[\n\t\t\tfetchUser,\n\t\t\tuser,\n\t\t\tisUserLoading,\n\t\t\tfetchSession,\n\t\t\tsession,\n\t\t\tisSessionLoading,\n\t\t\tisSessionFetched.current,\n\t\t\tprojectId,\n\t\t\tbaseUrl,\n\t\t\tsetUser,\n\t\t\tsetSession,\n\t\t\tsdk\n\t\t]\n\t);\n\treturn <Context.Provider value={value}>{children}</Context.Provider>;\n};\n\nexport default AuthProvider;\n","import React, {\n\tlazy,\n\tSuspense,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseMemo,\n\tuseState\n} from 'react';\nimport { baseHeaders } from '../constants';\nimport Context from '../hooks/Context';\nimport { DescopeProps } from '../types';\nimport { getGlobalSdk } from '../sdk';\n\n// web-component code uses browser API, but can be used in SSR apps, hence the lazy loading\nconst DescopeWC = lazy(async () => {\n\tconst module = await import('@descope/web-component');\n\tmodule.default.sdkConfigOverrides = {\n\t\t// Overrides the web-component's base headers to indicate usage via the React SDK\n\t\tbaseHeaders,\n\t\t// Disables token persistence within the web-component to delegate token management\n\t\t// to the global SDK hooks. This ensures token handling aligns with the SDK's configuration,\n\t\t// and web-component requests leverage the global SDK's beforeRequest hooks for consistency\n\t\tpersistTokens: false,\n\t\thooks: {\n\t\t\tget beforeRequest() {\n\t\t\t\t// Retrieves the beforeRequest hook from the global SDK, which is initialized\n\t\t\t\t// within the AuthProvider using the desired configuration. This approach ensures\n\t\t\t\t// the web-component utilizes the same beforeRequest hooks as the global SDK\n\t\t\t\treturn getGlobalSdk().httpClient.hooks.beforeRequest;\n\t\t\t},\n\t\t\tset beforeRequest(_) {\n\t\t\t\t// The empty setter prevents runtime errors when attempts are made to assign a value to 'beforeRequest'.\n\t\t\t\t// JavaScript objects default to having both getters and setters\n\t\t\t}\n\t\t}\n\t};\n\n\treturn {\n\t\tdefault: ({\n\t\t\tprojectId,\n\t\t\tflowId,\n\t\t\tbaseUrl,\n\t\t\tinnerRef,\n\t\t\ttenant,\n\t\t\ttheme,\n\t\t\tlocale,\n\t\t\tdebug,\n\t\t\tredirectUrl,\n\t\t\tclient,\n\t\t\tform,\n\t\t\tautoFocus\n\t\t}) => (\n\t\t\t<descope-wc\n\t\t\t\tproject-id={projectId}\n\t\t\t\tflow-id={flowId}\n\t\t\t\tbase-url={baseUrl}\n\t\t\t\tref={innerRef}\n\t\t\t\ttenant={tenant}\n\t\t\t\ttheme={theme}\n\t\t\t\tlocale={locale}\n\t\t\t\tdebug={debug}\n\t\t\t\tclient={client}\n\t\t\t\tform={form}\n\t\t\t\tredirect-url={redirectUrl}\n\t\t\t\tauto-focus={autoFocus}\n\t\t\t/>\n\t\t)\n\t};\n});\n\nconst Descope = React.forwardRef<HTMLElement, DescopeProps>(\n\t(\n\t\t{\n\t\t\tflowId,\n\t\t\tonSuccess,\n\t\t\tonError,\n\t\t\tonReady,\n\t\t\tlogger,\n\t\t\ttenant,\n\t\t\ttheme,\n\t\t\tlocale,\n\t\t\tdebug,\n\t\t\tclient,\n\t\t\tform,\n\t\t\ttelemetryKey,\n\t\t\tredirectUrl,\n\t\t\tautoFocus,\n\t\t\terrorTransformer\n\t\t},\n\t\tref\n\t) => {\n\t\tconst [innerRef, setInnerRef] = useState(null);\n\n\t\tuseImperativeHandle(ref, () => innerRef);\n\n\t\tconst { projectId, baseUrl, storeLastAuthenticatedUser, sdk } =\n\t\t\tReact.useContext(Context);\n\n\t\tconst handleSuccess = useCallback(\n\t\t\tasync (e: CustomEvent) => {\n\t\t\t\t// In order to make sure all the after-hooks are running with the success response\n\t\t\t\t// we are generating a fake response with the success data and calling the http client after hook fn with it\n\t\t\t\tawait sdk.httpClient.hooks.afterRequest(\n\t\t\t\t\t{} as any,\n\t\t\t\t\tnew Response(JSON.stringify(e.detail))\n\t\t\t\t);\n\t\t\t\tif (onSuccess) {\n\t\t\t\t\tonSuccess(e);\n\t\t\t\t}\n\t\t\t},\n\t\t\t[onSuccess]\n\t\t);\n\n\t\tuseEffect(() => {\n\t\t\tconst ele = innerRef;\n\t\t\tele?.addEventListener('success', handleSuccess);\n\t\t\tif (onError) ele?.addEventListener('error', onError);\n\t\t\tif (onReady) ele?.addEventListener('ready', onReady);\n\n\t\t\treturn () => {\n\t\t\t\tif (onError) ele?.removeEventListener('error', onError);\n\t\t\t\tif (onReady) ele?.removeEventListener('ready', onReady);\n\n\t\t\t\tele?.removeEventListener('success', handleSuccess);\n\t\t\t};\n\t\t}, [innerRef, onError, handleSuccess]);\n\n\t\t// Success event\n\t\tuseEffect(() => {\n\t\t\tconst ele = innerRef;\n\t\t\tele?.addEventListener('success', handleSuccess);\n\t\t\treturn () => {\n\t\t\t\tele?.removeEventListener('success', handleSuccess);\n\t\t\t};\n\t\t}, [innerRef, handleSuccess]);\n\n\t\t// Error event\n\t\tuseEffect(() => {\n\t\t\tconst ele = innerRef;\n\t\t\tif (onError) ele?.addEventListener('error', onError);\n\n\t\t\treturn () => {\n\t\t\t\tif (onError) ele?.removeEventListener('error', onError);\n\t\t\t};\n\t\t}, [innerRef, onError]);\n\n\t\t// Ready event\n\t\tuseEffect(() => {\n\t\t\tconst ele = innerRef;\n\t\t\tif (onReady) ele?.addEventListener('ready', onReady);\n\n\t\t\treturn () => {\n\t\t\t\tif (onReady) ele?.removeEventListener('error', onReady);\n\t\t\t};\n\t\t}, [innerRef, onReady]);\n\n\t\tuseEffect(() => {\n\t\t\tif (innerRef) {\n\t\t\t\tinnerRef.errorTransformer = errorTransformer;\n\t\t\t}\n\t\t}, [innerRef, errorTransformer]);\n\n\t\tuseEffect(() => {\n\t\t\tif (innerRef && logger) {\n\t\t\t\tinnerRef.logger = logger;\n\t\t\t}\n\t\t}, [innerRef, logger]);\n\n\t\tconst { form: stringifiedForm, client: stringifiedClient } = useMemo(\n\t\t\t() => ({\n\t\t\t\tform: JSON.stringify(form || {}),\n\t\t\t\tclient: JSON.stringify(client || {})\n\t\t\t}),\n\t\t\t[form, client]\n\t\t);\n\n\t\treturn (\n\t\t\t/**\n\t\t\t * in order to avoid redundant remounting of the WC, we are wrapping it with a form element\n\t\t\t * this workaround is done in order to support webauthn passkeys\n\t\t\t * it can be removed once this issue will be solved\n\t\t\t * https://bugs.chromium.org/p/chromium/issues/detail?id=1404106#c2\n\t\t\t */\n\t\t\t<form>\n\t\t\t\t<Suspense fallback={null}>\n\t\t\t\t\t<DescopeWC\n\t\t\t\t\t\tprojectId={projectId}\n\t\t\t\t\t\tflowId={flowId}\n\t\t\t\t\t\tbaseUrl={baseUrl}\n\t\t\t\t\t\tinnerRef={setInnerRef}\n\t\t\t\t\t\ttenant={tenant}\n\t\t\t\t\t\ttheme={theme}\n\t\t\t\t\t\tlocale={locale}\n\t\t\t\t\t\tdebug={debug}\n\t\t\t\t\t\tform={stringifiedForm}\n\t\t\t\t\t\tclient={stringifiedClient}\n\t\t\t\t\t\ttelemetryKey={telemetryKey}\n\t\t\t\t\t\tredirectUrl={redirectUrl}\n\t\t\t\t\t\tautoFocus={autoFocus}\n\t\t\t\t\t\tstoreLastAuthenticatedUser={storeLastAuthenticatedUser}\n\t\t\t\t\t/>\n\t\t\t\t</Suspense>\n\t\t\t</form>\n\t\t);\n\t}\n);\n\nexport default Descope;\n","import React, {\n\tlazy,\n\tSuspense,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseState\n} from 'react';\nimport Context from '../hooks/Context';\nimport { UserManagementProps } from '../types';\n\n// web-component code uses browser API, but can be used in SSR apps, hence the lazy loading\nconst UserManagementWC = lazy(async () => {\n\tawait import('@descope/user-management-widget');\n\n\treturn {\n\t\tdefault: ({\n\t\t\tprojectId,\n\t\t\tbaseUrl,\n\t\t\tinnerRef,\n\t\t\ttenant,\n\t\t\twidgetId,\n\t\t\ttheme,\n\t\t\tdebug\n\t\t}) => (\n\t\t\t<descope-user-management-widget\n\t\t\t\tproject-id={projectId}\n\t\t\t\twidget-id={widgetId}\n\t\t\t\tbase-url={baseUrl}\n\t\t\t\ttheme={theme}\n\t\t\t\ttenant={tenant}\n\t\t\t\tdebug={debug}\n\t\t\t\tref={innerRef}\n\t\t\t/>\n\t\t)\n\t};\n});\n\nconst UserManagement = React.forwardRef<HTMLElement, UserManagementProps>(\n\t({ logger, tenant, theme, debug, widgetId }, ref) => {\n\t\tconst [innerRef, setInnerRef] = useState(null);\n\n\t\tuseImperativeHandle(ref, () => innerRef);\n\n\t\tconst { projectId, baseUrl } = React.useContext(Context);\n\n\t\tuseEffect(() => {\n\t\t\tif (innerRef && logger) {\n\t\t\t\tinnerRef.logger = logger;\n\t\t\t}\n\t\t}, [innerRef, logger]);\n\n\t\treturn (\n\t\t\t<Suspense fallback={null}>\n\t\t\t\t<UserManagementWC\n\t\t\t\t\tprojectId={projectId}\n\t\t\t\t\twidgetId={widgetId}\n\t\t\t\t\tbaseUrl={baseUrl}\n\t\t\t\t\tinnerRef={setInnerRef}\n\t\t\t\t\ttenant={tenant}\n\t\t\t\t\ttheme={theme}\n\t\t\t\t\tdebug={debug}\n\t\t\t\t/>\n\t\t\t</Suspense>\n\t\t);\n\t}\n);\n\nexport default UserManagement;\n","import React, {\n\tlazy,\n\tSuspense,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseState\n} from 'react';\nimport Context from '../hooks/Context';\nimport { RoleManagementProps } from '../types';\n\n// web-component code uses browser API, but can be used in SSR apps, hence the lazy loading\nconst RoleManagementWC = lazy(async () => {\n\tawait import('@descope/role-management-widget');\n\n\treturn {\n\t\tdefault: ({\n\t\t\tprojectId,\n\t\t\tbaseUrl,\n\t\t\tinnerRef,\n\t\t\ttenant,\n\t\t\twidgetId,\n\t\t\ttheme,\n\t\t\tdebug\n\t\t}) => (\n\t\t\t<descope-role-management-widget\n\t\t\t\tproject-id={projectId}\n\t\t\t\twidget-id={widgetId}\n\t\t\t\tbase-url={baseUrl}\n\t\t\t\ttheme={theme}\n\t\t\t\ttenant={tenant}\n\t\t\t\tdebug={debug}\n\t\t\t\tref={innerRef}\n\t\t\t/>\n\t\t)\n\t};\n});\n\nconst RoleManagement = React.forwardRef<HTMLElement, RoleManagementProps>(\n\t({ logger, tenant, theme, debug, widgetId }, ref) => {\n\t\tconst [innerRef, setInnerRef] = useState(null);\n\n\t\tuseImperativeHandle(ref, () => innerRef);\n\n\t\tconst { projectId, baseUrl } = React.useContext(Context);\n\n\t\tuseEffect(() => {\n\t\t\tif (innerRef && logger) {\n\t\t\t\tinnerRef.logger = logger;\n\t\t\t}\n\t\t}, [innerRef, logger]);\n\n\t\treturn (\n\t\t\t<Suspense fallback={null}>\n\t\t\t\t<RoleManagementWC\n\t\t\t\t\tprojectId={projectId}\n\t\t\t\t\twidgetId={widgetId}\n\t\t\t\t\tbaseUrl={baseUrl}\n\t\t\t\t\tinnerRef={setInnerRef}\n\t\t\t\t\ttenant={tenant}\n\t\t\t\t\ttheme={theme}\n\t\t\t\t\tdebug={debug}\n\t\t\t\t/>\n\t\t\t</Suspense>\n\t\t);\n\t}\n);\n\nexport default RoleManagement;\n","import React, {\n\tlazy,\n\tSuspense,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseState\n} from 'react';\nimport Context from '../hooks/Context';\nimport { AccessKeyManagementProps } from '../types';\n\n// web-component code uses browser API, but can be used in SSR apps, hence the lazy loading\nconst AccessKeyManagementWC = lazy(async () => {\n\tawait import('@descope/access-key-management-widget');\n\n\treturn {\n\t\tdefault: ({\n\t\t\tprojectId,\n\t\t\tbaseUrl,\n\t\t\tinnerRef,\n\t\t\ttenant,\n\t\t\twidgetId,\n\t\t\ttheme,\n\t\t\tdebug\n\t\t}) => (\n\t\t\t<descope-access-key-management-widget\n\t\t\t\tproject-id={projectId}\n\t\t\t\twidget-id={widgetId}\n\t\t\t\tbase-url={baseUrl}\n\t\t\t\ttheme={theme}\n\t\t\t\ttenant={tenant}\n\t\t\t\tdebug={debug}\n\t\t\t\tref={innerRef}\n\t\t\t/>\n\t\t)\n\t};\n});\n\nconst AccessKeyManagement = React.forwardRef<\n\tHTMLElement,\n\tAccessKeyManagementProps\n>(({ logger, tenant, theme, debug, widgetId }, ref) => {\n\tconst [innerRef, setInnerRef] = useState(null);\n\n\tuseImperativeHandle(ref, () => innerRef);\n\n\tconst { projectId, baseUrl } = React.useContext(Context);\n\n\tuseEffect(() => {\n\t\tif (innerRef && logger) {\n\t\t\tinnerRef.logger = logger;\n\t\t}\n\t}, [innerRef, logger]);\n\n\treturn (\n\t\t<Suspense fallback={null}>\n\t\t\t<AccessKeyManagementWC\n\t\t\t\tprojectId={projectId}\n\t\t\t\twidgetId={widgetId}\n\t\t\t\tbaseUrl={baseUrl}\n\t\t\t\tinnerRef={setInnerRef}\n\t\t\t\ttenant={tenant}\n\t\t\t\ttheme={theme}\n\t\t\t\tdebug={debug}\n\t\t\t/>\n\t\t</Suspense>\n\t);\n});\n\nexport default AccessKeyManagement;\n","import React, {\n\tlazy,\n\tSuspense,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseState\n} from 'react';\nimport Context from '../hooks/Context';\nimport { AuditManagementProps } from '../types';\n\n// web-component code uses browser API, but can be used in SSR apps, hence the lazy loading\nconst AuditManagementWC = lazy(async () => {\n\tawait import('@descope/audit-management-widget');\n\n\treturn {\n\t\tdefault: ({\n\t\t\tprojectId,\n\t\t\tbaseUrl,\n\t\t\tinnerRef,\n\t\t\ttenant,\n\t\t\twidgetId,\n\t\t\ttheme,\n\t\t\tdebug\n\t\t}) => (\n\t\t\t<descope-audit-management-widget\n\t\t\t\tproject-id={projectId}\n\t\t\t\twidget-id={widgetId}\n\t\t\t\tbase-url={baseUrl}\n\t\t\t\ttheme={theme}\n\t\t\t\ttenant={tenant}\n\t\t\t\tdebug={debug}\n\t\t\t\tref={innerRef}\n\t\t\t/>\n\t\t)\n\t};\n});\n\nconst AuditManagement = React.forwardRef<HTMLElement, AuditManagementProps>(\n\t({ logger, tenant, theme, debug, widgetId }, ref) => {\n\t\tconst [innerRef, setInnerRef] = useState(null);\n\n\t\tuseImperativeHandle(ref, () => innerRef);\n\n\t\tconst { projectId, baseUrl } = React.useContext(Context);\n\n\t\tuseEffect(() => {\n\t\t\tif (innerRef && logger) {\n\t\t\t\tinnerRef.logger = logger;\n\t\t\t}\n\t\t}, [innerRef, logger]);\n\n\t\treturn (\n\t\t\t<Suspense fallback={null}>\n\t\t\t\t<AuditManagementWC\n\t\t\t\t\tprojectId={projectId}\n\t\t\t\t\twidgetId={widgetId}\n\t\t\t\t\tbaseUrl={baseUrl}\n\t\t\t\t\tinnerRef={setInnerRef}\n\t\t\t\t\ttenant={tenant}\n\t\t\t\t\ttheme={theme}\n\t\t\t\t\tdebug={debug}\n\t\t\t\t/>\n\t\t\t</Suspense>\n\t\t);\n\t}\n);\n\nexport default AuditManagement;\n","import React, {\n\tlazy,\n\tSuspense,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseState\n} from 'react';\nimport Context from '../hooks/Context';\nimport { UserProfileProps } from '../types';\n\n// web-component code uses browser API, but can be used in SSR apps, hence the lazy loading\nconst UserProfileWC = lazy(async () => {\n\tawait import('@descope/user-profile-widget');\n\n\treturn {\n\t\tdefault: ({ projectId, baseUrl, innerRef, widgetId, theme, debug }) => (\n\t\t\t<descope-user-profile-widget\n\t\t\t\tproject-id={projectId}\n\t\t\t\twidget-id={widgetId}\n\t\t\t\tbase-url={baseUrl}\n\t\t\t\ttheme={theme}\n\t\t\t\tdebug={debug}\n\t\t\t\tref={innerRef}\n\t\t\t/>\n\t\t)\n\t};\n});\n\nconst UserProfile = React.forwardRef<HTMLElement, UserProfileProps>(\n\t({ logger, theme, debug, widgetId, onLogout }, ref) => {\n\t\tconst [innerRef, setInnerRef] = useState(null);\n\n\t\tuseImperativeHandle(ref, () => innerRef);\n\n\t\tconst { projectId, baseUrl } = React.useContext(Context);\n\n\t\tuseEffect(() => {\n\t\t\tif (innerRef && logger) {\n\t\t\t\tinnerRef.logger = logger;\n\t\t\t}\n\t\t}, [innerRef, logger]);\n\n\t\tuseEffect(() => {\n\t\t\tif (innerRef && onLogout) {\n\t\t\t\tinnerRef.addEventListener('logout', onLogout);\n\t\t\t\treturn () => innerRef.removeEventListener('logout', onLogout);\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}, [innerRef, onLogout]);\n\n\t\treturn (\n\t\t\t<Suspense fallback={null}>\n\t\t\t\t<UserProfileWC\n\t\t\t\t\tprojectId={projectId}\n\t\t\t\t\twidgetId={widgetId}\n\t\t\t\t\tbaseUrl={baseUrl}\n\t\t\t\t\tinnerRef={setInnerRef}\n\t\t\t\t\ttheme={theme}\n\t\t\t\t\tdebug={debug}\n\t\t\t\t/>\n\t\t\t</Suspense>\n\t\t);\n\t}\n);\n\nexport default UserProfile;\n","import { useContext } from 'react';\nimport Context from './Context';\n\nexport default () => {\n\tconst ctx = useContext(Context);\n\tif (!ctx) {\n\t\tthrow Error(\n\t\t\t`You can only use this hook in the context of <AuthProvider />`\n\t\t);\n\t}\n\n\treturn ctx;\n};\n","import { useMemo } from 'react';\nimport { Sdk } from '../types';\nimport useContext from './useContext';\nimport { createTempSdk } from '../sdk';\n\nconst generateErrorMsg = (entryType: string) =>\n\t`You can only use this ${entryType} after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component`;\n\n// handler which throw an error for every SDK function\nconst proxyThrowHandler = {\n\t// eslint-disable-next-line prefer-arrow/prefer-arrow-functions\n\tget(target: Record<string, any>, key: string) {\n\t\tif (typeof target[key] === 'object' && target[key] !== null) {\n\t\t\treturn new Proxy(target[key], proxyThrowHandler);\n\t\t}\n\n\t\tif (typeof target[key] === 'function') {\n\t\t\treturn () => {\n\t\t\t\tthrow Error(generateErrorMsg('function'));\n\t\t\t};\n\t\t}\n\n\t\tthrow Error(generateErrorMsg('attribute'));\n\t}\n};\n\nconst useDescope = (): Sdk => {\n\tconst { sdk } = useContext();\n\n\treturn useMemo(() => {\n\t\tif (!sdk) {\n\t\t\t// In case the SDK is not initialized, we want to throw an error when the SDK functions are called\n\t\t\treturn new Proxy(createTempSdk(), proxyThrowHandler) as Sdk;\n\t\t}\n\n\t\treturn sdk;\n\t}, [sdk]);\n};\n\nexport default useDescope;\n","import { useMemo } from 'react';\nimport { baseHeaders } from '../../constants';\nimport createSdk from '../../sdk';\n\ntype Config = Pick<\n\tParameters<typeof createSdk>[0],\n\t| 'projectId'\n\t| 'baseUrl'\n\t| 'persistTokens'\n\t| 'sessionTokenViaCookie'\n\t| 'storeLastAuthenticatedUser'\n>;\n\nexport default ({\n\tprojectId,\n\tbaseUrl,\n\tpersistTokens,\n\tsessionTokenViaCookie,\n\tstoreLastAuthenticatedUser\n}: Config): ReturnType<typeof createSdk> =>\n\tuseMemo(() => {\n\t\tif (!projectId) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn createSdk({\n\t\t\tprojectId,\n\t\t\tbaseUrl,\n\t\t\tsessionTokenViaCookie,\n\t\t\tbaseHeaders,\n\t\t\tpersistTokens,\n\t\t\tstoreLastAuthenticatedUser,\n\t\t\tautoRefresh: true\n\t\t});\n\t}, [projectId, baseUrl, sessionTokenViaCookie]);\n","import React from 'react';\nimport { DefaultFlowProps } from '../types';\nimport Descope from './Descope';\n\nexport const SignInFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-in\" />\n);\n\nexport const SignUpFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-up\" />\n);\n\nexport const SignUpOrInFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-up-or-in\" />\n);\n","import { useEffect, useMemo, useRef } from 'react';\nimport useContext from './useContext';\n\nconst useSession = () => {\n\tconst { session, isSessionLoading, fetchSession, isSessionFetched } =\n\t\tuseContext();\n\n\t// when session should be received, we want the return value of \"isSessionLoading\" to be true starting from the first call\n\t// (and not only when receiving an update from the context)\n\tconst isLoading = useRef(isSessionLoading);\n\n\t// we want this to happen before returning a value so we are using \"useMemo\" and not \"useEffect\"\n\tuseMemo(() => {\n\t\tisLoading.current = isSessionLoading;\n\t}, [isSessionLoading]);\n\n\tconst shouldFetchSession = !session && !isSessionLoading;\n\n\t// we want this to happen before returning a value so we are using \"useMemo\" and not \"useEffect\"\n\tuseMemo(() => {\n\t\tif (shouldFetchSession && !isSessionFetched) {\n\t\t\tisLoading.current = true;\n\t\t}\n\t}, [isSessionFetched]);\n\n\t// Fetch session if it's not already fetched\n\t// We want this to happen only once, so the dependency array should not contain shouldFetchSession\n\tuseEffect(() => {\n\t\tif (shouldFetchSession) {\n\t\t\tfetchSession();\n\t\t}\n\t}, [fetchSession]);\n\treturn {\n\t\tisSessionLoading: isLoading.current,\n\t\tsessionToken: session,\n\t\tisAuthenticated: !!session\n\t};\n};\n\nexport default useSession;\n","import { useEffect, useMemo, useRef, useState } from 'react';\nimport useContext from './useContext';\n\nconst useUser = () => {\n\tconst { user, fetchUser, isUserLoading, session } = useContext();\n\tconst [isInit, setIsInit] = useState(false); // we want to get the user only in the first time we got a session\n\n\t// when session should be received, we want the return value of \"isUserLoading\" to be true starting from the first call\n\t// (and not only when receiving an update from the context)\n\tconst isLoading = useRef(isUserLoading);\n\n\tconst shouldFetchUser = useMemo(\n\t\t() => !user && !isUserLoading && session && !isInit,\n\t\t[fetchUser, session, isInit]\n\t);\n\n\t// we want this to happen before returning a value so we are using \"useMemo\" and not \"useEffect\"\n\tuseMemo(() => {\n\t\tisLoading.current = isUserLoading;\n\t}, [isUserLoading]);\n\n\t// we want this to happen before returning a value so we are using \"useMemo\" and not \"useEffect\"\n\tuseMemo(() => {\n\t\tif (shouldFetchUser) {\n\t\t\tisLoading.current = true;\n\t\t}\n\t}, [shouldFetchUser]);\n\n\tuseEffect(() => {\n\t\tif (shouldFetchUser) {\n\t\t\tsetIsInit(true);\n\t\t\tfetchUser();\n\t\t}\n\t}, [shouldFetchUser]);\n\n\treturn { isUserLoading: isLoading.current, user };\n};\n\nexport default useUser;\n"],"names":["Context","React","createContext","undefined","withValidation","fn","args","Error","wrapInTry","res","err","console","error","baseHeaders","IS_BROWSER","window","globalSdk","createSdkWrapper","config","sdk","createSdk","Object","assign","persistTokens","autoRefresh","createTempSdk","projectId","storeLastAuthenticatedUser","getSessionToken","warn","getRefreshToken","getJwtPermissions","token","tenant","getJwtRoles","DescopeWC","lazy","async","Promise","resolve","then","_interopNamespace","require","default","sdkConfigOverrides","hooks","beforeRequest","httpClient","_","flowId","baseUrl","innerRef","theme","locale","debug","redirectUrl","client","form","autoFocus","createElement","ref","Descope","forwardRef","onSuccess","onError","onReady","logger","telemetryKey","errorTransformer","setInnerRef","useState","useImperativeHandle","useContext","handleSuccess","useCallback","e","afterRequest","Response","JSON","stringify","detail","useEffect","ele","addEventListener","removeEventListener","stringifiedForm","stringifiedClient","useMemo","Suspense","fallback","UserManagementWC","widgetId","UserManagement","RoleManagementWC","RoleManagement","AccessKeyManagementWC","AccessKeyManagement","AuditManagementWC","AuditManagement","UserProfileWC","UserProfile","onLogout","ctx","generateErrorMsg","entryType","proxyThrowHandler","get","target","key","Proxy","sessionTokenViaCookie","children","user","setUser","session","setSession","isUserLoading","setIsUserLoading","isSessionLoading","setIsSessionLoading","useSdk","unsubscribeSessionToken","onSessionTokenChange","unsubscribeUser","onUserChange","isSessionFetched","useRef","fetchSession","current","refresh","fetchUser","me","value","Provider","props","isJwtExpired","isLoading","shouldFetchSession","sessionToken","isAuthenticated","isInit","setIsInit","shouldFetchUser"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const MyUserProfile: () => React.JSX.Element;
3
+ export default MyUserProfile;
package/dist/index.d.ts CHANGED
@@ -6,6 +6,7 @@ import UserManagementWidget from '@descope/user-management-widget';
6
6
  import RoleManagementWidget from '@descope/role-management-widget';
7
7
  import AccessKeyManagementWidget from '@descope/access-key-management-widget';
8
8
  import AuditManagementWidget from '@descope/audit-management-widget';
9
+ import UserProfileWidget from '@descope/user-profile-widget';
9
10
  import * as _descope_web_js_sdk from '@descope/web-js-sdk';
10
11
  import * as _descope_core_js_sdk from '@descope/core-js-sdk';
11
12
 
@@ -1202,6 +1203,7 @@ declare global {
1202
1203
  ['descope-role-management-widget']: RoleManagementCustomElement;
1203
1204
  ['descope-access-key-management-widget']: AccessKeyManagementCustomElement;
1204
1205
  ['descope-audit-management-widget']: AuditManagementCustomElement;
1206
+ ['descope-user-profile-widget']: UserProfileCustomElement;
1205
1207
  }
1206
1208
  }
1207
1209
  }
@@ -1225,6 +1227,7 @@ type UserManagementCustomElement = CustomElement<typeof UserManagementWidget & U
1225
1227
  type RoleManagementCustomElement = CustomElement<typeof RoleManagementWidget & RoleManagementProps>;
1226
1228
  type AccessKeyManagementCustomElement = CustomElement<typeof AccessKeyManagementWidget & AccessKeyManagementProps>;
1227
1229
  type AuditManagementCustomElement = CustomElement<typeof AuditManagementWidget & AuditManagementProps>;
1230
+ type UserProfileCustomElement = CustomElement<typeof UserProfileWidget & UserProfileProps>;
1228
1231
  type DescopeProps = {
1229
1232
  flowId: string;
1230
1233
  onSuccess?: DescopeCustomElement['onsuccess'];
@@ -1249,6 +1252,9 @@ type UserManagementProps = WidgetProps;
1249
1252
  type RoleManagementProps = WidgetProps;
1250
1253
  type AccessKeyManagementProps = WidgetProps;
1251
1254
  type AuditManagementProps = WidgetProps;
1255
+ type UserProfileProps = Omit<WidgetProps, 'tenant'> & {
1256
+ onLogout?: (e: CustomEvent) => void;
1257
+ };
1252
1258
 
1253
1259
  type DefaultFlowProps = Omit<DescopeProps, 'flowId'>;
1254
1260
 
@@ -1290,6 +1296,16 @@ declare const AuditManagement: React.ForwardRefExoticComponent<{
1290
1296
  debug?: boolean;
1291
1297
  } & React.RefAttributes<HTMLElement>>;
1292
1298
 
1299
+ declare const UserProfile: React.ForwardRefExoticComponent<Omit<{
1300
+ logger?: _descope_web_component.ILogger;
1301
+ tenant: string;
1302
+ widgetId: string;
1303
+ theme?: _descope_web_component.ThemeOptions;
1304
+ debug?: boolean;
1305
+ }, "tenant"> & {
1306
+ onLogout?: (e: CustomEvent<any>) => void;
1307
+ } & React.RefAttributes<HTMLElement>>;
1308
+
1293
1309
  declare const useDescope: () => Sdk;
1294
1310
 
1295
1311
  declare const useSession: () => {
@@ -1308,4 +1324,4 @@ declare const baseHeaders: {
1308
1324
  'x-descope-sdk-version': string;
1309
1325
  };
1310
1326
 
1311
- export { AccessKeyManagement, AuditManagement, AuthProvider, Descope, RoleManagement, SignInFlow, SignUpFlow, SignUpOrInFlow, UserManagement, baseHeaders, getJwtPermissions, getJwtRoles, getRefreshToken, getSessionToken, isRefreshTokenExpired, isSessionTokenExpired, refresh, useDescope, useSession, useUser };
1327
+ export { AccessKeyManagement, AuditManagement, AuthProvider, Descope, RoleManagement, SignInFlow, SignUpFlow, SignUpOrInFlow, UserManagement, UserProfile, baseHeaders, getJwtPermissions, getJwtRoles, getRefreshToken, getSessionToken, isRefreshTokenExpired, isSessionTokenExpired, refresh, useDescope, useSession, useUser };
package/dist/index.esm.js CHANGED
@@ -1,2 +1,2 @@
1
- import e,{useMemo as t,useState as r,useEffect as n,useRef as s,useCallback as o,lazy as i,useImperativeHandle as a,Suspense as d,useContext as c}from"react";import l from"@descope/web-js-sdk";const u=e.createContext(void 0),g=e=>(...t)=>{if(!e)throw Error("You can only use this function after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component");return e(...t)},f=e=>(...t)=>{let r;try{r=e(...t)}catch(e){console.error(e)}return r},m={"x-descope-sdk-name":"react","x-descope-sdk-version":"2.0.23"},p="undefined"!=typeof window;let h;const b=e=>{const t=l(Object.assign({persistTokens:p,autoRefresh:p},e));return h=t,t},w=()=>b({projectId:"temp pid",persistTokens:!1,autoRefresh:!1,storeLastAuthenticatedUser:!1});h=w();const k=()=>p?null==h?void 0:h.getSessionToken():(console.warn("Get session token is not supported in SSR"),""),I=()=>p?null==h?void 0:h.getRefreshToken():(console.warn("Get refresh token is not supported in SSR"),""),E=(e=k())=>null==h?void 0:h.isJwtExpired(e),U=(e=I())=>null==h?void 0:h.isJwtExpired(e),v=f(((e=k(),t)=>null==h?void 0:h.getJwtPermissions(e,t))),j=f(((e=k(),t)=>null==h?void 0:h.getJwtRoles(e,t))),y=(e=I())=>null==h?void 0:h.refresh(e);const R=({projectId:i,baseUrl:a="",sessionTokenViaCookie:d=!1,persistTokens:c=!0,storeLastAuthenticatedUser:l=!0,children:f})=>{const[p,h]=r(),[w,k]=r(),[I,E]=r(!1),[U,v]=r(!1),j=(({projectId:e,baseUrl:r,persistTokens:n,sessionTokenViaCookie:s,storeLastAuthenticatedUser:o})=>t((()=>{if(e)return b({projectId:e,baseUrl:r,sessionTokenViaCookie:s,baseHeaders:m,persistTokens:n,storeLastAuthenticatedUser:o,autoRefresh:!0})}),[e,r,s]))({projectId:i,baseUrl:a,persistTokens:c,sessionTokenViaCookie:d,storeLastAuthenticatedUser:l});n((()=>{if(j){const e=j.onSessionTokenChange(k),t=j.onUserChange(h);return()=>{e(),t()}}}),[j]);const y=s(!1),R=o((()=>{y.current||(y.current=!0,v(!0),g(null==j?void 0:j.refresh)().then((()=>{v(!1)})))}),[j]),L=o((()=>{E(!0),g(j.me)().then((()=>{E(!1)}))}),[j]),S=t((()=>({fetchUser:L,user:p,isUserLoading:I,fetchSession:R,session:w,isSessionLoading:U,isSessionFetched:y.current,projectId:i,baseUrl:a,storeLastAuthenticatedUser:l,setUser:h,setSession:k,sdk:j})),[L,p,I,R,w,U,y.current,i,a,h,k,j]);return e.createElement(u.Provider,{value:S},f)},L=i((async()=>((await import("@descope/web-component")).default.sdkConfigOverrides={baseHeaders:m,persistTokens:!1,hooks:{get beforeRequest(){return h.httpClient.hooks.beforeRequest},set beforeRequest(e){}}},{default:({projectId:t,flowId:r,baseUrl:n,innerRef:s,tenant:o,theme:i,locale:a,debug:d,redirectUrl:c,client:l,form:u,autoFocus:g})=>e.createElement("descope-wc",{"project-id":t,"flow-id":r,"base-url":n,ref:s,tenant:o,theme:i,locale:a,debug:d,client:l,form:u,"redirect-url":c,"auto-focus":g})}))),S=e.forwardRef((({flowId:s,onSuccess:i,onError:c,onReady:l,logger:g,tenant:f,theme:m,locale:p,debug:h,client:b,form:w,telemetryKey:k,redirectUrl:I,autoFocus:E,errorTransformer:U},v)=>{const[j,y]=r(null);a(v,(()=>j));const{projectId:R,baseUrl:S,storeLastAuthenticatedUser:T,sdk:C}=e.useContext(u),x=o((async e=>{await C.httpClient.hooks.afterRequest({},new Response(JSON.stringify(e.detail))),i&&i(e)}),[i]);n((()=>{const e=j;return null==e||e.addEventListener("success",x),c&&(null==e||e.addEventListener("error",c)),l&&(null==e||e.addEventListener("ready",l)),()=>{c&&(null==e||e.removeEventListener("error",c)),l&&(null==e||e.removeEventListener("ready",l)),null==e||e.removeEventListener("success",x)}}),[j,c,x]),n((()=>{const e=j;return null==e||e.addEventListener("success",x),()=>{null==e||e.removeEventListener("success",x)}}),[j,x]),n((()=>{const e=j;return c&&(null==e||e.addEventListener("error",c)),()=>{c&&(null==e||e.removeEventListener("error",c))}}),[j,c]),n((()=>{const e=j;return l&&(null==e||e.addEventListener("ready",l)),()=>{l&&(null==e||e.removeEventListener("error",l))}}),[j,l]),n((()=>{j&&(j.errorTransformer=U)}),[j,U]),n((()=>{j&&g&&(j.logger=g)}),[j,g]);const{form:A,client:O}=t((()=>({form:JSON.stringify(w||{}),client:JSON.stringify(b||{})})),[w,b]);return e.createElement("form",null,e.createElement(d,{fallback:null},e.createElement(L,{projectId:R,flowId:s,baseUrl:S,innerRef:y,tenant:f,theme:m,locale:p,debug:h,form:A,client:O,telemetryKey:k,redirectUrl:I,autoFocus:E,storeLastAuthenticatedUser:T})))})),T=t=>e.createElement(S,Object.assign({},t,{flowId:"sign-in"})),C=t=>e.createElement(S,Object.assign({},t,{flowId:"sign-up"})),x=t=>e.createElement(S,Object.assign({},t,{flowId:"sign-up-or-in"})),A=i((async()=>(await import("@descope/user-management-widget"),{default:({projectId:t,baseUrl:r,innerRef:n,tenant:s,widgetId:o,theme:i,debug:a})=>e.createElement("descope-user-management-widget",{"project-id":t,"widget-id":o,"base-url":r,theme:i,tenant:s,debug:a,ref:n})}))),O=e.forwardRef((({logger:t,tenant:s,theme:o,debug:i,widgetId:c},l)=>{const[g,f]=r(null);a(l,(()=>g));const{projectId:m,baseUrl:p}=e.useContext(u);return n((()=>{g&&t&&(g.logger=t)}),[g,t]),e.createElement(d,{fallback:null},e.createElement(A,{projectId:m,widgetId:c,baseUrl:p,innerRef:f,tenant:s,theme:o,debug:i}))})),J=i((async()=>(await import("@descope/role-management-widget"),{default:({projectId:t,baseUrl:r,innerRef:n,tenant:s,widgetId:o,theme:i,debug:a})=>e.createElement("descope-role-management-widget",{"project-id":t,"widget-id":o,"base-url":r,theme:i,tenant:s,debug:a,ref:n})}))),P=e.forwardRef((({logger:t,tenant:s,theme:o,debug:i,widgetId:c},l)=>{const[g,f]=r(null);a(l,(()=>g));const{projectId:m,baseUrl:p}=e.useContext(u);return n((()=>{g&&t&&(g.logger=t)}),[g,t]),e.createElement(d,{fallback:null},e.createElement(J,{projectId:m,widgetId:c,baseUrl:p,innerRef:f,tenant:s,theme:o,debug:i}))})),F=i((async()=>(await import("@descope/access-key-management-widget"),{default:({projectId:t,baseUrl:r,innerRef:n,tenant:s,widgetId:o,theme:i,debug:a})=>e.createElement("descope-access-key-management-widget",{"project-id":t,"widget-id":o,"base-url":r,theme:i,tenant:s,debug:a,ref:n})}))),q=e.forwardRef((({logger:t,tenant:s,theme:o,debug:i,widgetId:c},l)=>{const[g,f]=r(null);a(l,(()=>g));const{projectId:m,baseUrl:p}=e.useContext(u);return n((()=>{g&&t&&(g.logger=t)}),[g,t]),e.createElement(d,{fallback:null},e.createElement(F,{projectId:m,widgetId:c,baseUrl:p,innerRef:f,tenant:s,theme:o,debug:i}))})),V=i((async()=>(await import("@descope/audit-management-widget"),{default:({projectId:t,baseUrl:r,innerRef:n,tenant:s,widgetId:o,theme:i,debug:a})=>e.createElement("descope-audit-management-widget",{"project-id":t,"widget-id":o,"base-url":r,theme:i,tenant:s,debug:a,ref:n})}))),N=e.forwardRef((({logger:t,tenant:s,theme:o,debug:i,widgetId:c},l)=>{const[g,f]=r(null);a(l,(()=>g));const{projectId:m,baseUrl:p}=e.useContext(u);return n((()=>{g&&t&&(g.logger=t)}),[g,t]),e.createElement(d,{fallback:null},e.createElement(V,{projectId:m,widgetId:c,baseUrl:p,innerRef:f,tenant:s,theme:o,debug:i}))}));var Y=()=>{const e=c(u);if(!e)throw Error("You can only use this hook in the context of <AuthProvider />");return e};const z=e=>`You can only use this ${e} after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component`,G={get(e,t){if("object"==typeof e[t]&&null!==e[t])return new Proxy(e[t],G);if("function"==typeof e[t])return()=>{throw Error(z("function"))};throw Error(z("attribute"))}},H=()=>{const{sdk:e}=Y();return t((()=>e||new Proxy(w(),G)),[e])},K=()=>{const{session:e,isSessionLoading:r,fetchSession:o,isSessionFetched:i}=Y(),a=s(r);t((()=>{a.current=r}),[r]);const d=!e&&!r;return t((()=>{d&&!i&&(a.current=!0)}),[i]),n((()=>{d&&o()}),[o]),{isSessionLoading:a.current,sessionToken:e,isAuthenticated:!!e}},M=()=>{const{user:e,fetchUser:o,isUserLoading:i,session:a}=Y(),[d,c]=r(!1),l=s(i),u=t((()=>!e&&!i&&a&&!d),[o,a,d]);return t((()=>{l.current=i}),[i]),t((()=>{u&&(l.current=!0)}),[u]),n((()=>{u&&(c(!0),o())}),[u]),{isUserLoading:l.current,user:e}};export{q as AccessKeyManagement,N as AuditManagement,R as AuthProvider,S as Descope,P as RoleManagement,T as SignInFlow,C as SignUpFlow,x as SignUpOrInFlow,O as UserManagement,m as baseHeaders,v as getJwtPermissions,j as getJwtRoles,I as getRefreshToken,k as getSessionToken,U as isRefreshTokenExpired,E as isSessionTokenExpired,y as refresh,H as useDescope,K as useSession,M as useUser};
1
+ import e,{useMemo as t,useState as r,useEffect as n,useRef as s,useCallback as o,lazy as i,useImperativeHandle as a,Suspense as d,useContext as l}from"react";import c from"@descope/web-js-sdk";const u=e.createContext(void 0),g=e=>(...t)=>{if(!e)throw Error("You can only use this function after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component");return e(...t)},f=e=>(...t)=>{let r;try{r=e(...t)}catch(e){console.error(e)}return r},m={"x-descope-sdk-name":"react","x-descope-sdk-version":"2.0.24"},p="undefined"!=typeof window;let b;const h=e=>{const t=c(Object.assign({persistTokens:p,autoRefresh:p},e));return b=t,t},w=()=>h({projectId:"temp pid",persistTokens:!1,autoRefresh:!1,storeLastAuthenticatedUser:!1});b=w();const I=()=>p?null==b?void 0:b.getSessionToken():(console.warn("Get session token is not supported in SSR"),""),k=()=>p?null==b?void 0:b.getRefreshToken():(console.warn("Get refresh token is not supported in SSR"),""),E=(e=I())=>null==b?void 0:b.isJwtExpired(e),U=(e=k())=>null==b?void 0:b.isJwtExpired(e),j=f(((e=I(),t)=>null==b?void 0:b.getJwtPermissions(e,t))),v=f(((e=I(),t)=>null==b?void 0:b.getJwtRoles(e,t))),y=(e=k())=>null==b?void 0:b.refresh(e);const R=({projectId:i,baseUrl:a="",sessionTokenViaCookie:d=!1,persistTokens:l=!0,storeLastAuthenticatedUser:c=!0,children:f})=>{const[p,b]=r(),[w,I]=r(),[k,E]=r(!1),[U,j]=r(!1),v=(({projectId:e,baseUrl:r,persistTokens:n,sessionTokenViaCookie:s,storeLastAuthenticatedUser:o})=>t((()=>{if(e)return h({projectId:e,baseUrl:r,sessionTokenViaCookie:s,baseHeaders:m,persistTokens:n,storeLastAuthenticatedUser:o,autoRefresh:!0})}),[e,r,s]))({projectId:i,baseUrl:a,persistTokens:l,sessionTokenViaCookie:d,storeLastAuthenticatedUser:c});n((()=>{if(v){const e=v.onSessionTokenChange(I),t=v.onUserChange(b);return()=>{e(),t()}}}),[v]);const y=s(!1),R=o((()=>{y.current||(y.current=!0,j(!0),g(null==v?void 0:v.refresh)().then((()=>{j(!1)})))}),[v]),L=o((()=>{E(!0),g(v.me)().then((()=>{E(!1)}))}),[v]),S=t((()=>({fetchUser:L,user:p,isUserLoading:k,fetchSession:R,session:w,isSessionLoading:U,isSessionFetched:y.current,projectId:i,baseUrl:a,storeLastAuthenticatedUser:c,setUser:b,setSession:I,sdk:v})),[L,p,k,R,w,U,y.current,i,a,b,I,v]);return e.createElement(u.Provider,{value:S},f)},L=i((async()=>((await import("@descope/web-component")).default.sdkConfigOverrides={baseHeaders:m,persistTokens:!1,hooks:{get beforeRequest(){return b.httpClient.hooks.beforeRequest},set beforeRequest(e){}}},{default:({projectId:t,flowId:r,baseUrl:n,innerRef:s,tenant:o,theme:i,locale:a,debug:d,redirectUrl:l,client:c,form:u,autoFocus:g})=>e.createElement("descope-wc",{"project-id":t,"flow-id":r,"base-url":n,ref:s,tenant:o,theme:i,locale:a,debug:d,client:c,form:u,"redirect-url":l,"auto-focus":g})}))),S=e.forwardRef((({flowId:s,onSuccess:i,onError:l,onReady:c,logger:g,tenant:f,theme:m,locale:p,debug:b,client:h,form:w,telemetryKey:I,redirectUrl:k,autoFocus:E,errorTransformer:U},j)=>{const[v,y]=r(null);a(j,(()=>v));const{projectId:R,baseUrl:S,storeLastAuthenticatedUser:C,sdk:T}=e.useContext(u),x=o((async e=>{await T.httpClient.hooks.afterRequest({},new Response(JSON.stringify(e.detail))),i&&i(e)}),[i]);n((()=>{const e=v;return null==e||e.addEventListener("success",x),l&&(null==e||e.addEventListener("error",l)),c&&(null==e||e.addEventListener("ready",c)),()=>{l&&(null==e||e.removeEventListener("error",l)),c&&(null==e||e.removeEventListener("ready",c)),null==e||e.removeEventListener("success",x)}}),[v,l,x]),n((()=>{const e=v;return null==e||e.addEventListener("success",x),()=>{null==e||e.removeEventListener("success",x)}}),[v,x]),n((()=>{const e=v;return l&&(null==e||e.addEventListener("error",l)),()=>{l&&(null==e||e.removeEventListener("error",l))}}),[v,l]),n((()=>{const e=v;return c&&(null==e||e.addEventListener("ready",c)),()=>{c&&(null==e||e.removeEventListener("error",c))}}),[v,c]),n((()=>{v&&(v.errorTransformer=U)}),[v,U]),n((()=>{v&&g&&(v.logger=g)}),[v,g]);const{form:A,client:O}=t((()=>({form:JSON.stringify(w||{}),client:JSON.stringify(h||{})})),[w,h]);return e.createElement("form",null,e.createElement(d,{fallback:null},e.createElement(L,{projectId:R,flowId:s,baseUrl:S,innerRef:y,tenant:f,theme:m,locale:p,debug:b,form:A,client:O,telemetryKey:I,redirectUrl:k,autoFocus:E,storeLastAuthenticatedUser:C})))})),C=t=>e.createElement(S,Object.assign({},t,{flowId:"sign-in"})),T=t=>e.createElement(S,Object.assign({},t,{flowId:"sign-up"})),x=t=>e.createElement(S,Object.assign({},t,{flowId:"sign-up-or-in"})),A=i((async()=>(await import("@descope/user-management-widget"),{default:({projectId:t,baseUrl:r,innerRef:n,tenant:s,widgetId:o,theme:i,debug:a})=>e.createElement("descope-user-management-widget",{"project-id":t,"widget-id":o,"base-url":r,theme:i,tenant:s,debug:a,ref:n})}))),O=e.forwardRef((({logger:t,tenant:s,theme:o,debug:i,widgetId:l},c)=>{const[g,f]=r(null);a(c,(()=>g));const{projectId:m,baseUrl:p}=e.useContext(u);return n((()=>{g&&t&&(g.logger=t)}),[g,t]),e.createElement(d,{fallback:null},e.createElement(A,{projectId:m,widgetId:l,baseUrl:p,innerRef:f,tenant:s,theme:o,debug:i}))})),J=i((async()=>(await import("@descope/role-management-widget"),{default:({projectId:t,baseUrl:r,innerRef:n,tenant:s,widgetId:o,theme:i,debug:a})=>e.createElement("descope-role-management-widget",{"project-id":t,"widget-id":o,"base-url":r,theme:i,tenant:s,debug:a,ref:n})}))),P=e.forwardRef((({logger:t,tenant:s,theme:o,debug:i,widgetId:l},c)=>{const[g,f]=r(null);a(c,(()=>g));const{projectId:m,baseUrl:p}=e.useContext(u);return n((()=>{g&&t&&(g.logger=t)}),[g,t]),e.createElement(d,{fallback:null},e.createElement(J,{projectId:m,widgetId:l,baseUrl:p,innerRef:f,tenant:s,theme:o,debug:i}))})),F=i((async()=>(await import("@descope/access-key-management-widget"),{default:({projectId:t,baseUrl:r,innerRef:n,tenant:s,widgetId:o,theme:i,debug:a})=>e.createElement("descope-access-key-management-widget",{"project-id":t,"widget-id":o,"base-url":r,theme:i,tenant:s,debug:a,ref:n})}))),q=e.forwardRef((({logger:t,tenant:s,theme:o,debug:i,widgetId:l},c)=>{const[g,f]=r(null);a(c,(()=>g));const{projectId:m,baseUrl:p}=e.useContext(u);return n((()=>{g&&t&&(g.logger=t)}),[g,t]),e.createElement(d,{fallback:null},e.createElement(F,{projectId:m,widgetId:l,baseUrl:p,innerRef:f,tenant:s,theme:o,debug:i}))})),V=i((async()=>(await import("@descope/audit-management-widget"),{default:({projectId:t,baseUrl:r,innerRef:n,tenant:s,widgetId:o,theme:i,debug:a})=>e.createElement("descope-audit-management-widget",{"project-id":t,"widget-id":o,"base-url":r,theme:i,tenant:s,debug:a,ref:n})}))),N=e.forwardRef((({logger:t,tenant:s,theme:o,debug:i,widgetId:l},c)=>{const[g,f]=r(null);a(c,(()=>g));const{projectId:m,baseUrl:p}=e.useContext(u);return n((()=>{g&&t&&(g.logger=t)}),[g,t]),e.createElement(d,{fallback:null},e.createElement(V,{projectId:m,widgetId:l,baseUrl:p,innerRef:f,tenant:s,theme:o,debug:i}))})),Y=i((async()=>(await import("@descope/user-profile-widget"),{default:({projectId:t,baseUrl:r,innerRef:n,widgetId:s,theme:o,debug:i})=>e.createElement("descope-user-profile-widget",{"project-id":t,"widget-id":s,"base-url":r,theme:o,debug:i,ref:n})}))),z=e.forwardRef((({logger:t,theme:s,debug:o,widgetId:i,onLogout:l},c)=>{const[g,f]=r(null);a(c,(()=>g));const{projectId:m,baseUrl:p}=e.useContext(u);return n((()=>{g&&t&&(g.logger=t)}),[g,t]),n((()=>{if(g&&l)return g.addEventListener("logout",l),()=>g.removeEventListener("logout",l)}),[g,l]),e.createElement(d,{fallback:null},e.createElement(Y,{projectId:m,widgetId:i,baseUrl:p,innerRef:f,theme:s,debug:o}))}));var G=()=>{const e=l(u);if(!e)throw Error("You can only use this hook in the context of <AuthProvider />");return e};const H=e=>`You can only use this ${e} after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component`,K={get(e,t){if("object"==typeof e[t]&&null!==e[t])return new Proxy(e[t],K);if("function"==typeof e[t])return()=>{throw Error(H("function"))};throw Error(H("attribute"))}},M=()=>{const{sdk:e}=G();return t((()=>e||new Proxy(w(),K)),[e])},$=()=>{const{session:e,isSessionLoading:r,fetchSession:o,isSessionFetched:i}=G(),a=s(r);t((()=>{a.current=r}),[r]);const d=!e&&!r;return t((()=>{d&&!i&&(a.current=!0)}),[i]),n((()=>{d&&o()}),[o]),{isSessionLoading:a.current,sessionToken:e,isAuthenticated:!!e}},B=()=>{const{user:e,fetchUser:o,isUserLoading:i,session:a}=G(),[d,l]=r(!1),c=s(i),u=t((()=>!e&&!i&&a&&!d),[o,a,d]);return t((()=>{c.current=i}),[i]),t((()=>{u&&(c.current=!0)}),[u]),n((()=>{u&&(l(!0),o())}),[u]),{isUserLoading:c.current,user:e}};export{q as AccessKeyManagement,N as AuditManagement,R as AuthProvider,S as Descope,P as RoleManagement,C as SignInFlow,T as SignUpFlow,x as SignUpOrInFlow,O as UserManagement,z as UserProfile,m as baseHeaders,j as getJwtPermissions,v as getJwtRoles,k as getRefreshToken,I as getSessionToken,U as isRefreshTokenExpired,E as isSessionTokenExpired,y as refresh,M as useDescope,$ as useSession,B as useUser};
2
2
  //# sourceMappingURL=index.esm.js.map