@descope/react-sdk 2.0.49 → 2.0.50
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/dist/cjs/index.cjs.js +1 -1
- package/dist/dts/src/components/AccessKeyManagement.d.ts +9 -0
- package/dist/dts/src/components/AuditManagement.d.ts +9 -0
- package/dist/dts/src/components/AuthProvider/AuthProvider.d.ts +13 -0
- package/dist/dts/src/components/AuthProvider/index.d.ts +1 -0
- package/dist/dts/src/components/AuthProvider/useSdk.d.ts +4 -0
- package/dist/dts/src/components/DefaultFlows.d.ts +5 -0
- package/dist/dts/src/components/Descope.d.ts +4 -0
- package/dist/dts/src/components/RoleManagement.d.ts +9 -0
- package/dist/dts/src/components/UserManagement.d.ts +9 -0
- package/dist/dts/src/components/UserProfile.d.ts +11 -0
- package/dist/dts/src/constants.d.ts +5 -0
- package/dist/dts/src/hooks/Context.d.ts +4 -0
- package/dist/dts/src/hooks/useContext.d.ts +2 -0
- package/dist/dts/src/hooks/useDescope.d.ts +3 -0
- package/dist/dts/src/hooks/useSession.d.ts +6 -0
- package/dist/dts/src/hooks/useUser.d.ts +5 -0
- package/dist/dts/src/index.d.ts +14 -0
- package/dist/dts/src/sdk.d.ts +3543 -0
- package/dist/dts/src/types.d.ts +92 -0
- package/dist/dts/src/utils.d.ts +7 -0
- package/dist/index.esm.js +1 -1
- package/dist/index.umd.js +2 -2
- package/dist/index.umd.js.map +1 -1
- package/package.json +26 -26
- /package/dist/{examples → dts/examples}/app/App.d.ts +0 -0
- /package/dist/{examples → dts/examples}/app/Home.d.ts +0 -0
- /package/dist/{examples → dts/examples}/app/Login.d.ts +0 -0
- /package/dist/{examples → dts/examples}/app/ManageAccessKeys.d.ts +0 -0
- /package/dist/{examples → dts/examples}/app/ManageAudit.d.ts +0 -0
- /package/dist/{examples → dts/examples}/app/ManageRoles.d.ts +0 -0
- /package/dist/{examples → dts/examples}/app/ManageUsers.d.ts +0 -0
- /package/dist/{examples → dts/examples}/app/MyUserProfile.d.ts +0 -0
- /package/dist/{examples → dts/examples}/app/StepUp.d.ts +0 -0
- /package/dist/{examples → dts/examples}/app/api.d.ts +0 -0
- /package/dist/{examples → dts/examples}/app/index.d.ts +0 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import type { AutoFocusOptions, ILogger, ThemeOptions } from '@descope/web-component';
|
|
2
|
+
import DescopeWc from '@descope/web-component';
|
|
3
|
+
import UserManagementWidget from '@descope/user-management-widget';
|
|
4
|
+
import type { UserResponse } from '@descope/web-js-sdk';
|
|
5
|
+
import React, { DOMAttributes } from 'react';
|
|
6
|
+
import RoleManagementWidget from '@descope/role-management-widget';
|
|
7
|
+
import AccessKeyManagementWidget from '@descope/access-key-management-widget';
|
|
8
|
+
import AuditManagementWidget from '@descope/audit-management-widget';
|
|
9
|
+
import UserProfileWidget from '@descope/user-profile-widget';
|
|
10
|
+
import createSdk from './sdk';
|
|
11
|
+
declare global {
|
|
12
|
+
namespace JSX {
|
|
13
|
+
interface IntrinsicElements {
|
|
14
|
+
['descope-wc']: DescopeCustomElement;
|
|
15
|
+
['descope-user-management-widget']: UserManagementCustomElement;
|
|
16
|
+
['descope-role-management-widget']: RoleManagementCustomElement;
|
|
17
|
+
['descope-access-key-management-widget']: AccessKeyManagementCustomElement;
|
|
18
|
+
['descope-audit-management-widget']: AuditManagementCustomElement;
|
|
19
|
+
['descope-user-profile-widget']: UserProfileCustomElement;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
type WidgetProps = {
|
|
24
|
+
logger?: ILogger;
|
|
25
|
+
tenant: string;
|
|
26
|
+
widgetId: string;
|
|
27
|
+
theme?: ThemeOptions;
|
|
28
|
+
debug?: boolean;
|
|
29
|
+
};
|
|
30
|
+
type FlowResponse = Awaited<ReturnType<Sdk['flow']['next']>>;
|
|
31
|
+
type ErrorResponse = FlowResponse['error'];
|
|
32
|
+
type JWTResponse = FlowResponse['data']['authInfo'];
|
|
33
|
+
type CustomEventCb<T extends Record<string, any>> = (e: CustomEvent<T>) => void;
|
|
34
|
+
export type User = UserResponse;
|
|
35
|
+
export type Sdk = ReturnType<typeof createSdk>;
|
|
36
|
+
export type CustomElement<T> = Partial<T & DOMAttributes<T> & {
|
|
37
|
+
children: React.ReactChild;
|
|
38
|
+
ref: React.Ref<HTMLElement>;
|
|
39
|
+
}>;
|
|
40
|
+
export type DescopeCustomElement = CustomElement<DescopeWc>;
|
|
41
|
+
export type UserManagementCustomElement = CustomElement<typeof UserManagementWidget & UserManagementProps>;
|
|
42
|
+
export type RoleManagementCustomElement = CustomElement<typeof RoleManagementWidget & RoleManagementProps>;
|
|
43
|
+
export type AccessKeyManagementCustomElement = CustomElement<typeof AccessKeyManagementWidget & AccessKeyManagementProps>;
|
|
44
|
+
export type AuditManagementCustomElement = CustomElement<typeof AuditManagementWidget & AuditManagementProps>;
|
|
45
|
+
export type UserProfileCustomElement = CustomElement<typeof UserProfileWidget & UserProfileProps>;
|
|
46
|
+
export interface IContext {
|
|
47
|
+
fetchUser: () => void;
|
|
48
|
+
user: User;
|
|
49
|
+
isUserLoading: boolean;
|
|
50
|
+
fetchSession: () => void;
|
|
51
|
+
session: string;
|
|
52
|
+
isSessionLoading: boolean;
|
|
53
|
+
isSessionFetched: boolean;
|
|
54
|
+
projectId: string;
|
|
55
|
+
baseUrl?: string;
|
|
56
|
+
baseStaticUrl?: string;
|
|
57
|
+
storeLastAuthenticatedUser?: boolean;
|
|
58
|
+
keepLastAuthenticatedUserAfterLogout?: boolean;
|
|
59
|
+
sdk?: Sdk;
|
|
60
|
+
setUser: React.Dispatch<React.SetStateAction<User>>;
|
|
61
|
+
setSession: React.Dispatch<React.SetStateAction<string>>;
|
|
62
|
+
}
|
|
63
|
+
export type DescopeProps = {
|
|
64
|
+
flowId: string;
|
|
65
|
+
onSuccess?: CustomEventCb<JWTResponse>;
|
|
66
|
+
onError?: CustomEventCb<ErrorResponse>;
|
|
67
|
+
onReady?: CustomEventCb<{}>;
|
|
68
|
+
logger?: ILogger;
|
|
69
|
+
tenant?: string;
|
|
70
|
+
theme?: ThemeOptions;
|
|
71
|
+
locale?: string;
|
|
72
|
+
autoFocus?: AutoFocusOptions;
|
|
73
|
+
validateOnBlur?: boolean;
|
|
74
|
+
debug?: boolean;
|
|
75
|
+
telemetryKey?: string;
|
|
76
|
+
redirectUrl?: string;
|
|
77
|
+
errorTransformer?: (error: {
|
|
78
|
+
text: string;
|
|
79
|
+
type: string;
|
|
80
|
+
}) => string;
|
|
81
|
+
form?: Record<string, any>;
|
|
82
|
+
client?: Record<string, any>;
|
|
83
|
+
};
|
|
84
|
+
export type UserManagementProps = WidgetProps;
|
|
85
|
+
export type RoleManagementProps = WidgetProps;
|
|
86
|
+
export type AccessKeyManagementProps = WidgetProps;
|
|
87
|
+
export type AuditManagementProps = WidgetProps;
|
|
88
|
+
export type UserProfileProps = Omit<WidgetProps, 'tenant'> & {
|
|
89
|
+
onLogout?: (e: CustomEvent) => void;
|
|
90
|
+
};
|
|
91
|
+
export type { ILogger };
|
|
92
|
+
export type DefaultFlowProps = Omit<DescopeProps, 'flowId'>;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wrap a function with a validation that it exists
|
|
3
|
+
* @param fn The function to wrap with the validation
|
|
4
|
+
* @throws if function does not exist, an error with the relevant message will be thrown
|
|
5
|
+
*/
|
|
6
|
+
export declare const withValidation: <T extends any[], U>(fn: (...args: T) => U) => (...args: T) => U;
|
|
7
|
+
export declare const wrapInTry: <T extends any[], U>(fn: (...args: T) => U) => (...args: T) => U;
|
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 a,useImperativeHandle as i,Suspense as l,useContext as c}from"react";import d from"@descope/web-js-sdk";import"@descope/core-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},b={"x-descope-sdk-name":"react","x-descope-sdk-version":"2.0.
|
|
1
|
+
import e,{useMemo as t,useState as r,useEffect as n,useRef as s,useCallback as o,lazy as a,useImperativeHandle as i,Suspense as l,useContext as c}from"react";import d from"@descope/web-js-sdk";import"@descope/core-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},b={"x-descope-sdk-name":"react","x-descope-sdk-version":"2.0.50"},m="undefined"!=typeof window;let p;const h=e=>{const t=d(Object.assign({persistTokens:m,autoRefresh:m},e));return p=t,t},w=()=>h({projectId:"temp pid",persistTokens:!1,autoRefresh:!1,storeLastAuthenticatedUser:!1});p=w();const U=()=>m?null==p?void 0:p.getSessionToken():(console.warn("Get session token is not supported in SSR"),""),k=()=>m?null==p?void 0:p.getRefreshToken():(console.warn("Get refresh token is not supported in SSR"),""),I=(e=U())=>null==p?void 0:p.isJwtExpired(e),E=(e=k())=>null==p?void 0:p.isJwtExpired(e),L=f(((e=U(),t)=>null==p?void 0:p.getJwtPermissions(e,t))),v=f(((e=U(),t)=>null==p?void 0:p.getJwtRoles(e,t))),j=(e=k())=>null==p?void 0:p.refresh(e);const S=({projectId:a,baseUrl:i="",baseStaticUrl:l="",sessionTokenViaCookie:c=!1,persistTokens:d=!0,storeLastAuthenticatedUser:f=!0,keepLastAuthenticatedUserAfterLogout:m=!1,children:p})=>{const[w,U]=r(),[k,I]=r(),[E,L]=r(!1),[v,j]=r(!1),S=(({projectId:e,baseUrl:r,persistTokens:n,sessionTokenViaCookie:s,storeLastAuthenticatedUser:o,keepLastAuthenticatedUserAfterLogout:a})=>t((()=>{if(e)return h({projectId:e,baseUrl:r,sessionTokenViaCookie:s,baseHeaders:b,persistTokens:n,storeLastAuthenticatedUser:o,keepLastAuthenticatedUserAfterLogout:a,autoRefresh:!0})}),[e,r,s]))({projectId:a,baseUrl:i,persistTokens:d,sessionTokenViaCookie:c,storeLastAuthenticatedUser:f,keepLastAuthenticatedUserAfterLogout:m});n((()=>{if(S){const e=S.onSessionTokenChange(I),t=S.onUserChange(U);return()=>{e(),t()}}}),[S]);const y=s(!1),R=o((()=>{y.current||(y.current=!0,j(!0),g(null==S?void 0:S.refresh)().then((()=>{j(!1)})))}),[S]),A=o((()=>{L(!0),g(S.me)().then((()=>{L(!1)}))}),[S]),C=t((()=>({fetchUser:A,user:w,isUserLoading:E,fetchSession:R,session:k,isSessionLoading:v,isSessionFetched:y.current,projectId:a,baseUrl:i,baseStaticUrl:l,storeLastAuthenticatedUser:f,keepLastAuthenticatedUserAfterLogout:m,setUser:U,setSession:I,sdk:S})),[A,w,E,R,k,v,y.current,a,i,l,U,I,S]);return e.createElement(u.Provider,{value:C},p)},y=a((async()=>((await import("@descope/web-component")).default.sdkConfigOverrides={baseHeaders:b,persistTokens:!1,hooks:{get beforeRequest(){return p.httpClient.hooks.beforeRequest},set beforeRequest(e){}}},{default:({projectId:t,flowId:r,baseUrl:n,baseStaticUrl:s,innerRef:o,tenant:a,theme:i,locale:l,debug:c,redirectUrl:d,client:u,form:g,autoFocus:f,validateOnBlur:b})=>e.createElement("descope-wc",{"project-id":t,"flow-id":r,"base-url":n,"base-static-url":s,ref:o,tenant:a,theme:i,locale:l,debug:c,client:u,form:g,"redirect-url":d,"auto-focus":f,"validate-on-blur":b})}))),R=e.forwardRef((({flowId:s,onSuccess:a,onError:c,onReady:d,logger:g,tenant:f,theme:b,locale:m,debug:p,client:h,form:w,telemetryKey:U,redirectUrl:k,autoFocus:I,validateOnBlur:E,errorTransformer:L},v)=>{const[j,S]=r(null);i(v,(()=>j));const{projectId:R,baseUrl:A,baseStaticUrl:C,storeLastAuthenticatedUser:T,keepLastAuthenticatedUserAfterLogout:x,sdk:O}=e.useContext(u),J=o((async e=>{await O.httpClient.hooks.afterRequest({},new Response(JSON.stringify(e.detail))),a&&a(e)}),[a]);n((()=>{const e=j;return null==e||e.addEventListener("success",J),c&&(null==e||e.addEventListener("error",c)),d&&(null==e||e.addEventListener("ready",d)),()=>{c&&(null==e||e.removeEventListener("error",c)),d&&(null==e||e.removeEventListener("ready",d)),null==e||e.removeEventListener("success",J)}}),[j,c,J]),n((()=>{const e=j;return null==e||e.addEventListener("success",J),()=>{null==e||e.removeEventListener("success",J)}}),[j,J]),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 d&&(null==e||e.addEventListener("ready",d)),()=>{d&&(null==e||e.removeEventListener("error",d))}}),[j,d]),n((()=>{j&&(j.errorTransformer=L)}),[j,L]),n((()=>{j&&g&&(j.logger=g)}),[j,g]);const{form:P,client:F}=t((()=>({form:JSON.stringify(w||{}),client:JSON.stringify(h||{})})),[w,h]);return e.createElement("form",null,e.createElement(l,{fallback:null},e.createElement(y,{projectId:R,flowId:s,baseUrl:A,baseStaticUrl:C,innerRef:S,tenant:f,theme:b,locale:m,debug:p,form:P,client:F,telemetryKey:U,redirectUrl:k,autoFocus:I,validateOnBlur:E,storeLastAuthenticatedUser:T,keepLastAuthenticatedUserAfterLogout:x})))})),A=t=>e.createElement(R,Object.assign({},t,{flowId:"sign-in"})),C=t=>e.createElement(R,Object.assign({},t,{flowId:"sign-up"})),T=t=>e.createElement(R,Object.assign({},t,{flowId:"sign-up-or-in"})),x=a((async()=>(await import("@descope/user-management-widget"),{default:({projectId:t,baseUrl:r,baseStaticUrl:n,innerRef:s,tenant:o,widgetId:a,theme:i,debug:l})=>e.createElement("descope-user-management-widget",{"project-id":t,"widget-id":a,"base-url":r,"base-static-url":n,theme:i,tenant:o,debug:l,ref:s})}))),O=e.forwardRef((({logger:t,tenant:s,theme:o,debug:a,widgetId:c},d)=>{const[g,f]=r(null);i(d,(()=>g));const{projectId:b,baseUrl:m,baseStaticUrl:p}=e.useContext(u);return n((()=>{g&&t&&(g.logger=t)}),[g,t]),e.createElement(l,{fallback:null},e.createElement(x,{projectId:b,widgetId:c,baseUrl:m,baseStaticUrl:p,innerRef:f,tenant:s,theme:o,debug:a}))})),J=a((async()=>(await import("@descope/role-management-widget"),{default:({projectId:t,baseUrl:r,baseStaticUrl:n,innerRef:s,tenant:o,widgetId:a,theme:i,debug:l})=>e.createElement("descope-role-management-widget",{"project-id":t,"widget-id":a,"base-url":r,"base-static-url":n,theme:i,tenant:o,debug:l,ref:s})}))),P=e.forwardRef((({logger:t,tenant:s,theme:o,debug:a,widgetId:c},d)=>{const[g,f]=r(null);i(d,(()=>g));const{projectId:b,baseUrl:m,baseStaticUrl:p}=e.useContext(u);return n((()=>{g&&t&&(g.logger=t)}),[g,t]),e.createElement(l,{fallback:null},e.createElement(J,{projectId:b,widgetId:c,baseUrl:m,baseStaticUrl:p,innerRef:f,tenant:s,theme:o,debug:a}))})),F=a((async()=>(await import("@descope/access-key-management-widget"),{default:({projectId:t,baseUrl:r,baseStaticUrl:n,innerRef:s,tenant:o,widgetId:a,theme:i,debug:l})=>e.createElement("descope-access-key-management-widget",{"project-id":t,"widget-id":a,"base-url":r,"base-static-url":n,theme:i,tenant:o,debug:l,ref:s})}))),q=e.forwardRef((({logger:t,tenant:s,theme:o,debug:a,widgetId:c},d)=>{const[g,f]=r(null);i(d,(()=>g));const{projectId:b,baseUrl:m,baseStaticUrl:p}=e.useContext(u);return n((()=>{g&&t&&(g.logger=t)}),[g,t]),e.createElement(l,{fallback:null},e.createElement(F,{projectId:b,widgetId:c,baseUrl:m,baseStaticUrl:p,innerRef:f,tenant:s,theme:o,debug:a}))})),V=a((async()=>(await import("@descope/audit-management-widget"),{default:({projectId:t,baseUrl:r,baseStaticUrl:n,innerRef:s,tenant:o,widgetId:a,theme:i,debug:l})=>e.createElement("descope-audit-management-widget",{"project-id":t,"widget-id":a,"base-url":r,"base-static-url":n,theme:i,tenant:o,debug:l,ref:s})}))),B=e.forwardRef((({logger:t,tenant:s,theme:o,debug:a,widgetId:c},d)=>{const[g,f]=r(null);i(d,(()=>g));const{projectId:b,baseUrl:m,baseStaticUrl:p}=e.useContext(u);return n((()=>{g&&t&&(g.logger=t)}),[g,t]),e.createElement(l,{fallback:null},e.createElement(V,{projectId:b,widgetId:c,baseUrl:m,baseStaticUrl:p,innerRef:f,tenant:s,theme:o,debug:a}))})),N=a((async()=>(await import("@descope/user-profile-widget"),{default:({projectId:t,baseUrl:r,baseStaticUrl:n,innerRef:s,widgetId:o,theme:a,debug:i})=>e.createElement("descope-user-profile-widget",{"project-id":t,"widget-id":o,"base-url":r,"base-static-url":n,theme:a,debug:i,ref:s})}))),Y=e.forwardRef((({logger:t,theme:s,debug:o,widgetId:a,onLogout:c},d)=>{const[g,f]=r(null);i(d,(()=>g));const{projectId:b,baseUrl:m,baseStaticUrl:p}=e.useContext(u);return n((()=>{g&&t&&(g.logger=t)}),[g,t]),n((()=>{if(g&&c)return g.addEventListener("logout",c),()=>g.removeEventListener("logout",c)}),[g,c]),e.createElement(l,{fallback:null},e.createElement(N,{projectId:b,widgetId:a,baseUrl:m,baseStaticUrl:p,innerRef:f,theme:s,debug:o}))}));var z=()=>{const e=c(u);if(!e)throw Error("You can only use this hook in the context of <AuthProvider />");return e};const G=e=>`You can only use this ${e} after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component`,H={get(e,t){if("object"==typeof e[t]&&null!==e[t])return new Proxy(e[t],H);if("function"==typeof e[t])return()=>{throw Error(G("function"))};throw Error(G("attribute"))}},K=()=>{const{sdk:e}=z();return t((()=>e||new Proxy(w(),H)),[e])},M=()=>{const{session:e,isSessionLoading:r,fetchSession:o,isSessionFetched:a}=z(),i=s(r);t((()=>{i.current=r}),[r]);const l=!e&&!r;return t((()=>{l&&!a&&(i.current=!0)}),[a]),n((()=>{l&&o()}),[o]),{isSessionLoading:i.current,sessionToken:e,isAuthenticated:!!e}},$=()=>{const{user:e,fetchUser:o,isUserLoading:a,session:i}=z(),[l,c]=r(!1),d=s(a),u=t((()=>!e&&!a&&i&&!l),[o,i,l]);return t((()=>{d.current=a}),[a]),t((()=>{u&&(d.current=!0)}),[u]),n((()=>{u&&(c(!0),o())}),[u]),{isUserLoading:d.current,user:e}};export{q as AccessKeyManagement,B as AuditManagement,S as AuthProvider,R as Descope,P as RoleManagement,A as SignInFlow,C as SignUpFlow,T as SignUpOrInFlow,O as UserManagement,Y as UserProfile,b as baseHeaders,L as getJwtPermissions,v as getJwtRoles,k as getRefreshToken,U as getSessionToken,E as isRefreshTokenExpired,I as isSessionTokenExpired,j as refresh,K as useDescope,M as useSession,$ as useUser};
|
|
2
2
|
//# sourceMappingURL=index.esm.js.map
|