@descope/react-sdk 2.23.6 → 2.23.8

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
@@ -494,10 +494,7 @@ const AppRoot = () => {
494
494
  }, []);
495
495
 
496
496
  return (
497
- <AuthProvider
498
- projectId="my-project-id"
499
- getExternalToken={externalToken}
500
- >
497
+ <AuthProvider projectId="my-project-id" getExternalToken={externalToken}>
501
498
  <App />
502
499
  </AuthProvider>
503
500
  );
@@ -779,6 +776,32 @@ const AppRoot = () => {
779
776
  };
780
777
  ```
781
778
 
779
+ #### Using Inbound Apps as OIDC Provider
780
+
781
+ To use an inbound app as an OIDC provider, you must provide both the `issuer` and `clientId` configuration options. The `issuer` is the OIDC authority URL, and the `clientId` is the client ID for your inbound app.
782
+
783
+ > **Note:** When configuring an inbound app as an OIDC provider, you must obtain the issuer URL directly from the inbound app settings page in the Descope console. The issuer URL is specific to your inbound app configuration and cannot be constructed manually. In addition, you'll need to provide the client ID from the same inbound app settings.
784
+
785
+ ```js
786
+ <AuthProvider
787
+ projectId="my-project-id"
788
+ oidcConfig={{
789
+ // Required: Get this from your inbound app settings page
790
+ issuer: 'https://api.descope.com/v1/apps/<Project ID>',
791
+ // Required: Client ID from your inbound app settings
792
+ clientId: 'your-inbound-app-client-id',
793
+ // Optional: Custom redirect URI (defaults to current URL)
794
+ redirectUri: 'https://my-app.com/redirect',
795
+ // Optional: Custom scope (defaults to 'openid' when issuer is provided)
796
+ scope: 'openid profile email',
797
+ }}
798
+ >
799
+ <App />
800
+ </AuthProvider>
801
+ ```
802
+
803
+ When using a custom `issuer` (including inbound apps), the default scope is `'openid'` instead of the full Descope scope. You can override this by providing a custom `scope` value.
804
+
782
805
  ### Login
783
806
 
784
807
  Use the `oidc.loginWithRedirect` method from the `useDescope` hook to trigger the OIDC login. Example:
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../hooks/Context.js"),r=require("./withPropsMapping/index.js");function a(e){return e&&e.__esModule?e:{default:e}}var d=a(e);const l=e.lazy((async()=>(await import("@descope/outbound-applications-widget"),{default:r.default(d.default.forwardRef(((e,t)=>d.default.createElement("descope-outbound-applications-widget",Object.assign({ref:t},e)))))}))),s=d.default.forwardRef((({logger:r,theme:a,debug:s,widgetId:o,styleId:u,onReady:n},i)=>{const[f,c]=e.useState(null);e.useImperativeHandle(i,(()=>f));const{projectId:p,baseUrl:b,baseStaticUrl:g,baseCdnUrl:m,refreshCookieName:w}=d.default.useContext(t.default);return e.useEffect((()=>{const e=f;return n&&(null==e||e.addEventListener("ready",n)),()=>{n&&(null==e||e.removeEventListener("ready",n))}}),[f,n]),d.default.createElement(e.Suspense,{fallback:null},d.default.createElement(l,{ref:c,projectId:p,widgetId:o,baseUrl:b,baseStaticUrl:g,baseCdnUrl:m,"theme.attr":a,"debug.attr":s,"styleId.attr":u,"refreshCookieName.attr":w,"logger.prop":r}))}));exports.default=s;
2
+ //# sourceMappingURL=OutboundApplications.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OutboundApplications.js","sources":["../../../src/components/OutboundApplications.tsx"],"sourcesContent":["import React, {\n lazy,\n Suspense,\n useImperativeHandle,\n useState,\n useEffect,\n} from 'react';\nimport Context from '../hooks/Context';\nimport { OutboundApplicationsProps } from '../types';\nimport withPropsMapping from './withPropsMapping';\n\n// web-component code uses browser API, but can be used in SSR apps, hence the lazy loading\nconst OutboundApplicationsWC = lazy(async () => {\n await import('@descope/outbound-applications-widget');\n\n return {\n default: withPropsMapping(\n React.forwardRef<HTMLElement>((props, ref) => (\n <descope-outbound-applications-widget ref={ref} {...props} />\n )),\n ),\n };\n});\n\nconst OutboundApplications = React.forwardRef<\n HTMLElement,\n OutboundApplicationsProps\n>(({ logger, theme, debug, widgetId, styleId, onReady }, ref) => {\n const [innerRef, setInnerRef] = useState(null);\n\n useImperativeHandle(ref, () => innerRef);\n\n const { projectId, baseUrl, baseStaticUrl, baseCdnUrl, refreshCookieName } =\n React.useContext(Context);\n\n useEffect(() => {\n const ele = innerRef;\n if (onReady) ele?.addEventListener('ready', onReady);\n\n return () => {\n if (onReady) ele?.removeEventListener('ready', onReady);\n };\n }, [innerRef, onReady]);\n\n return (\n <Suspense fallback={null}>\n <OutboundApplicationsWC\n ref={setInnerRef}\n projectId={projectId}\n widgetId={widgetId}\n baseUrl={baseUrl}\n baseStaticUrl={baseStaticUrl}\n baseCdnUrl={baseCdnUrl}\n {...{\n // attributes\n 'theme.attr': theme,\n 'debug.attr': debug,\n 'styleId.attr': styleId,\n 'refreshCookieName.attr': refreshCookieName,\n // props\n 'logger.prop': logger,\n }}\n />\n </Suspense>\n );\n});\n\nexport default OutboundApplications;\n"],"names":["OutboundApplicationsWC","lazy","async","import","default","withPropsMapping","React","forwardRef","props","ref","createElement","Object","assign","OutboundApplications","logger","theme","debug","widgetId","styleId","onReady","innerRef","setInnerRef","useState","useImperativeHandle","projectId","baseUrl","baseStaticUrl","baseCdnUrl","refreshCookieName","useContext","Context","useEffect","ele","addEventListener","removeEventListener","Suspense","fallback"],"mappings":"mOAYA,MAAMA,EAAyBC,EAAIA,MAACC,gBAC5BC,OAAO,yCAEN,CACLC,QAASC,EAAgBD,QACvBE,UAAMC,YAAwB,CAACC,EAAOC,IACpCH,EAAAA,QAAsCI,cAAA,uCAAAC,OAAAC,OAAA,CAAAH,IAAKA,GAASD,WAMtDK,EAAuBP,EAAKF,QAACG,YAGjC,EAAGO,SAAQC,QAAOC,QAAOC,WAAUC,UAASC,WAAWV,KACvD,MAAOW,EAAUC,GAAeC,EAAQA,SAAC,MAEzCC,sBAAoBd,GAAK,IAAMW,IAE/B,MAAMI,UAAEA,EAASC,QAAEA,EAAOC,cAAEA,EAAaC,WAAEA,EAAUC,kBAAEA,GACrDtB,EAAKF,QAACyB,WAAWC,EAAAA,SAWnB,OATAC,EAAAA,WAAU,KACR,MAAMC,EAAMZ,EAGZ,OAFID,IAASa,SAAAA,EAAKC,iBAAiB,QAASd,IAErC,KACDA,IAASa,SAAAA,EAAKE,oBAAoB,QAASf,GAAQ,CACxD,GACA,CAACC,EAAUD,IAGZb,EAACF,QAAAM,cAAAyB,EAAQA,SAAC,CAAAC,SAAU,MAClB9B,EAACF,QAAAM,cAAAV,EACC,CAAAS,IAAKY,EACLG,UAAWA,EACXP,SAAUA,EACVQ,QAASA,EACTC,cAAeA,EACfC,WAAYA,EAGV,aAAcZ,EACd,aAAcC,EACd,eAAgBE,EAChB,yBAA0BU,EAE1B,cAAed,IAIrB"}
@@ -1,2 +1,2 @@
1
- "use strict";const e="undefined"!=typeof window;exports.IS_BROWSER=e,exports.baseHeaders={"x-descope-sdk-name":"react","x-descope-sdk-version":"2.23.6"};
1
+ "use strict";const e="undefined"!=typeof window;exports.IS_BROWSER=e,exports.baseHeaders={"x-descope-sdk-name":"react","x-descope-sdk-version":"2.23.8"};
2
2
  //# sourceMappingURL=constants.js.map
package/dist/cjs/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var e=require("./components/AuthProvider/AuthProvider.js"),s=require("./components/DefaultFlows.js"),r=require("./components/Descope.js"),o=require("./hooks/useDescope.js"),t=require("./hooks/useSession.js"),n=require("./hooks/useUser.js"),i=require("./sdk.js"),p=require("./constants.js"),a=require("./components/AccessKeyManagement.js"),u=require("./components/ApplicationsPortal.js"),l=require("./components/AuditManagement.js"),x=require("./components/RoleManagement.js"),d=require("./components/TenantProfile.js"),g=require("./components/UserManagement.js"),f=require("./components/UserProfile.js");exports.AuthProvider=e.default,exports.SignInFlow=s.SignInFlow,exports.SignUpFlow=s.SignUpFlow,exports.SignUpOrInFlow=s.SignUpOrInFlow,exports.Descope=r.default,exports.useDescope=o.default,exports.useSession=t.default,exports.useUser=n.default,exports.getCurrentTenant=i.getCurrentTenant,exports.getJwtPermissions=i.getJwtPermissions,exports.getJwtRoles=i.getJwtRoles,exports.getRefreshToken=i.getRefreshToken,exports.getSessionToken=i.getSessionToken,exports.isRefreshTokenExpired=i.isRefreshTokenExpired,exports.isSessionTokenExpired=i.isSessionTokenExpired,exports.refresh=i.refresh,exports.baseHeaders=p.baseHeaders,exports.AccessKeyManagement=a.default,exports.ApplicationsPortal=u.default,exports.AuditManagement=l.default,exports.RoleManagement=x.default,exports.TenantProfile=d.default,exports.UserManagement=g.default,exports.UserProfile=f.default;
1
+ "use strict";var e=require("./components/AuthProvider/AuthProvider.js"),s=require("./components/DefaultFlows.js"),o=require("./components/Descope.js"),r=require("./hooks/useDescope.js"),t=require("./hooks/useSession.js"),n=require("./hooks/useUser.js"),i=require("./sdk.js"),p=require("./constants.js"),u=require("./components/AccessKeyManagement.js"),a=require("./components/ApplicationsPortal.js"),l=require("./components/AuditManagement.js"),x=require("./components/OutboundApplications.js"),d=require("./components/RoleManagement.js"),c=require("./components/TenantProfile.js"),f=require("./components/UserManagement.js"),g=require("./components/UserProfile.js");exports.AuthProvider=e.default,exports.SignInFlow=s.SignInFlow,exports.SignUpFlow=s.SignUpFlow,exports.SignUpOrInFlow=s.SignUpOrInFlow,exports.Descope=o.default,exports.useDescope=r.default,exports.useSession=t.default,exports.useUser=n.default,exports.getCurrentTenant=i.getCurrentTenant,exports.getJwtPermissions=i.getJwtPermissions,exports.getJwtRoles=i.getJwtRoles,exports.getRefreshToken=i.getRefreshToken,exports.getSessionToken=i.getSessionToken,exports.isRefreshTokenExpired=i.isRefreshTokenExpired,exports.isSessionTokenExpired=i.isSessionTokenExpired,exports.refresh=i.refresh,exports.baseHeaders=p.baseHeaders,exports.AccessKeyManagement=u.default,exports.ApplicationsPortal=a.default,exports.AuditManagement=l.default,exports.OutboundApplications=x.default,exports.RoleManagement=d.default,exports.TenantProfile=c.default,exports.UserManagement=f.default,exports.UserProfile=g.default;
2
2
  //# sourceMappingURL=index.js.map
@@ -0,0 +1,2 @@
1
+ import e,{lazy as t,useState as r,useImperativeHandle as a,useEffect as o,Suspense as n}from"react";import s from"../hooks/Context.js";import d from"./withPropsMapping/index.js";const l=t((async()=>(await import("@descope/outbound-applications-widget"),{default:d(e.forwardRef(((t,r)=>e.createElement("descope-outbound-applications-widget",Object.assign({ref:r},t)))))}))),i=e.forwardRef((({logger:t,theme:d,debug:i,widgetId:c,styleId:p,onReady:m},u)=>{const[f,b]=r(null);a(u,(()=>f));const{projectId:g,baseUrl:w,baseStaticUrl:h,baseCdnUrl:y,refreshCookieName:C}=e.useContext(s);return o((()=>{const e=f;return m&&(null==e||e.addEventListener("ready",m)),()=>{m&&(null==e||e.removeEventListener("ready",m))}}),[f,m]),e.createElement(n,{fallback:null},e.createElement(l,{ref:b,projectId:g,widgetId:c,baseUrl:w,baseStaticUrl:h,baseCdnUrl:y,"theme.attr":d,"debug.attr":i,"styleId.attr":p,"refreshCookieName.attr":C,"logger.prop":t}))}));export{i as default};
2
+ //# sourceMappingURL=OutboundApplications.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OutboundApplications.js","sources":["../../../src/components/OutboundApplications.tsx"],"sourcesContent":["import React, {\n lazy,\n Suspense,\n useImperativeHandle,\n useState,\n useEffect,\n} from 'react';\nimport Context from '../hooks/Context';\nimport { OutboundApplicationsProps } from '../types';\nimport withPropsMapping from './withPropsMapping';\n\n// web-component code uses browser API, but can be used in SSR apps, hence the lazy loading\nconst OutboundApplicationsWC = lazy(async () => {\n await import('@descope/outbound-applications-widget');\n\n return {\n default: withPropsMapping(\n React.forwardRef<HTMLElement>((props, ref) => (\n <descope-outbound-applications-widget ref={ref} {...props} />\n )),\n ),\n };\n});\n\nconst OutboundApplications = React.forwardRef<\n HTMLElement,\n OutboundApplicationsProps\n>(({ logger, theme, debug, widgetId, styleId, onReady }, ref) => {\n const [innerRef, setInnerRef] = useState(null);\n\n useImperativeHandle(ref, () => innerRef);\n\n const { projectId, baseUrl, baseStaticUrl, baseCdnUrl, refreshCookieName } =\n React.useContext(Context);\n\n useEffect(() => {\n const ele = innerRef;\n if (onReady) ele?.addEventListener('ready', onReady);\n\n return () => {\n if (onReady) ele?.removeEventListener('ready', onReady);\n };\n }, [innerRef, onReady]);\n\n return (\n <Suspense fallback={null}>\n <OutboundApplicationsWC\n ref={setInnerRef}\n projectId={projectId}\n widgetId={widgetId}\n baseUrl={baseUrl}\n baseStaticUrl={baseStaticUrl}\n baseCdnUrl={baseCdnUrl}\n {...{\n // attributes\n 'theme.attr': theme,\n 'debug.attr': debug,\n 'styleId.attr': styleId,\n 'refreshCookieName.attr': refreshCookieName,\n // props\n 'logger.prop': logger,\n }}\n />\n </Suspense>\n );\n});\n\nexport default OutboundApplications;\n"],"names":["OutboundApplicationsWC","lazy","async","import","default","withPropsMapping","React","forwardRef","props","ref","createElement","Object","assign","OutboundApplications","logger","theme","debug","widgetId","styleId","onReady","innerRef","setInnerRef","useState","useImperativeHandle","projectId","baseUrl","baseStaticUrl","baseCdnUrl","refreshCookieName","useContext","Context","useEffect","ele","addEventListener","removeEventListener","Suspense","fallback"],"mappings":"kLAYA,MAAMA,EAAyBC,GAAKC,gBAC5BC,OAAO,yCAEN,CACLC,QAASC,EACPC,EAAMC,YAAwB,CAACC,EAAOC,IACpCH,EAAsCI,cAAA,uCAAAC,OAAAC,OAAA,CAAAH,IAAKA,GAASD,WAMtDK,EAAuBP,EAAMC,YAGjC,EAAGO,SAAQC,QAAOC,QAAOC,WAAUC,UAASC,WAAWV,KACvD,MAAOW,EAAUC,GAAeC,EAAS,MAEzCC,EAAoBd,GAAK,IAAMW,IAE/B,MAAMI,UAAEA,EAASC,QAAEA,EAAOC,cAAEA,EAAaC,WAAEA,EAAUC,kBAAEA,GACrDtB,EAAMuB,WAAWC,GAWnB,OATAC,GAAU,KACR,MAAMC,EAAMZ,EAGZ,OAFID,IAASa,SAAAA,EAAKC,iBAAiB,QAASd,IAErC,KACDA,IAASa,SAAAA,EAAKE,oBAAoB,QAASf,GAAQ,CACxD,GACA,CAACC,EAAUD,IAGZb,EAACI,cAAAyB,EAAS,CAAAC,SAAU,MAClB9B,EAACI,cAAAV,EACC,CAAAS,IAAKY,EACLG,UAAWA,EACXP,SAAUA,EACVQ,QAASA,EACTC,cAAeA,EACfC,WAAYA,EAGV,aAAcZ,EACd,aAAcC,EACd,eAAgBE,EAChB,yBAA0BU,EAE1B,cAAed,IAIrB"}
@@ -1,2 +1,2 @@
1
- const e={"x-descope-sdk-name":"react","x-descope-sdk-version":"2.23.6"},d="undefined"!=typeof window;export{d as IS_BROWSER,e as baseHeaders};
1
+ const e={"x-descope-sdk-name":"react","x-descope-sdk-version":"2.23.8"},d="undefined"!=typeof window;export{d as IS_BROWSER,e as baseHeaders};
2
2
  //# sourceMappingURL=constants.js.map
package/dist/esm/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export{default as AuthProvider}from"./components/AuthProvider/AuthProvider.js";export{SignInFlow,SignUpFlow,SignUpOrInFlow}from"./components/DefaultFlows.js";export{default as Descope}from"./components/Descope.js";export{default as useDescope}from"./hooks/useDescope.js";export{default as useSession}from"./hooks/useSession.js";export{default as useUser}from"./hooks/useUser.js";export{getCurrentTenant,getJwtPermissions,getJwtRoles,getRefreshToken,getSessionToken,isRefreshTokenExpired,isSessionTokenExpired,refresh}from"./sdk.js";export{baseHeaders}from"./constants.js";export{default as AccessKeyManagement}from"./components/AccessKeyManagement.js";export{default as ApplicationsPortal}from"./components/ApplicationsPortal.js";export{default as AuditManagement}from"./components/AuditManagement.js";export{default as RoleManagement}from"./components/RoleManagement.js";export{default as TenantProfile}from"./components/TenantProfile.js";export{default as UserManagement}from"./components/UserManagement.js";export{default as UserProfile}from"./components/UserProfile.js";
1
+ export{default as AuthProvider}from"./components/AuthProvider/AuthProvider.js";export{SignInFlow,SignUpFlow,SignUpOrInFlow}from"./components/DefaultFlows.js";export{default as Descope}from"./components/Descope.js";export{default as useDescope}from"./hooks/useDescope.js";export{default as useSession}from"./hooks/useSession.js";export{default as useUser}from"./hooks/useUser.js";export{getCurrentTenant,getJwtPermissions,getJwtRoles,getRefreshToken,getSessionToken,isRefreshTokenExpired,isSessionTokenExpired,refresh}from"./sdk.js";export{baseHeaders}from"./constants.js";export{default as AccessKeyManagement}from"./components/AccessKeyManagement.js";export{default as ApplicationsPortal}from"./components/ApplicationsPortal.js";export{default as AuditManagement}from"./components/AuditManagement.js";export{default as OutboundApplications}from"./components/OutboundApplications.js";export{default as RoleManagement}from"./components/RoleManagement.js";export{default as TenantProfile}from"./components/TenantProfile.js";export{default as UserManagement}from"./components/UserManagement.js";export{default as UserProfile}from"./components/UserProfile.js";
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.d.ts CHANGED
@@ -13,6 +13,7 @@ import RoleManagementWidget from '@descope/role-management-widget';
13
13
  import TenantProfileWidget from '@descope/tenant-profile-widget';
14
14
  import UserManagementWidget from '@descope/user-management-widget';
15
15
  import UserProfileWidget from '@descope/user-profile-widget';
16
+ import OutboundApplicationsWidget from '@descope/outbound-applications-widget';
16
17
 
17
18
  declare const createSdkWrapper: <P extends {
18
19
  projectId: string;
@@ -2057,6 +2058,7 @@ declare global {
2057
2058
  ['descope-user-profile-widget']: UserProfileCustomElement;
2058
2059
  ['descope-applications-portal-widget']: ApplicationsPortalCustomElement;
2059
2060
  ['descope-tenant-profile-widget']: TenantProfileCustomElement;
2061
+ ['descope-outbound-applications-widget']: OutboundApplicationsCustomElement;
2060
2062
  }
2061
2063
  }
2062
2064
  }
@@ -2085,6 +2087,7 @@ type AuditManagementCustomElement = CustomElement<typeof AuditManagementWidget &
2085
2087
  type UserProfileCustomElement = CustomElement<typeof UserProfileWidget & UserProfileProps>;
2086
2088
  type ApplicationsPortalCustomElement = CustomElement<typeof ApplicationsPortalWidget & ApplicationsPortalProps>;
2087
2089
  type TenantProfileCustomElement = CustomElement<typeof TenantProfileWidget & TenantProfileProps>;
2090
+ type OutboundApplicationsCustomElement = CustomElement<typeof OutboundApplicationsWidget & OutboundApplicationsProps>;
2088
2091
  type DescopeProps = {
2089
2092
  flowId: string;
2090
2093
  onSuccess?: CustomEventCb<FlowJWTResponse>;
@@ -2127,6 +2130,7 @@ type ApplicationsPortalProps = Omit<WidgetProps, 'tenant'> & {
2127
2130
  onLogout?: (e: CustomEvent) => void;
2128
2131
  };
2129
2132
  type TenantProfileProps = WidgetProps;
2133
+ type OutboundApplicationsProps = WidgetProps;
2130
2134
 
2131
2135
  type DefaultFlowProps = Omit<DescopeProps, 'flowId'>;
2132
2136
 
@@ -2187,6 +2191,16 @@ declare const AuditManagement: React.ForwardRefExoticComponent<{
2187
2191
  onReady?: (e: CustomEvent<{}>) => void;
2188
2192
  } & React.RefAttributes<HTMLElement>>;
2189
2193
 
2194
+ declare const OutboundApplications: React.ForwardRefExoticComponent<{
2195
+ logger?: Partial<any>;
2196
+ tenant: string;
2197
+ widgetId: string;
2198
+ theme?: _descope_web_component.ThemeOptions;
2199
+ debug?: boolean;
2200
+ styleId?: string;
2201
+ onReady?: (e: CustomEvent<{}>) => void;
2202
+ } & React.RefAttributes<HTMLElement>>;
2203
+
2190
2204
  declare const RoleManagement: React.ForwardRefExoticComponent<{
2191
2205
  logger?: Partial<any>;
2192
2206
  tenant: string;
@@ -2229,4 +2243,4 @@ declare const UserProfile: React.ForwardRefExoticComponent<Omit<{
2229
2243
  onLogout?: (e: CustomEvent<any>) => void;
2230
2244
  } & React.RefAttributes<HTMLElement>>;
2231
2245
 
2232
- export { AccessKeyManagement, ApplicationsPortal, AuditManagement, AuthProvider, Descope, RoleManagement, SignInFlow, SignUpFlow, SignUpOrInFlow, TenantProfile, UserManagement, UserProfile, baseHeaders, getCurrentTenant, getJwtPermissions, getJwtRoles, getRefreshToken, getSessionToken, isRefreshTokenExpired, isSessionTokenExpired, refresh, useDescope, useSession, useUser };
2246
+ export { AccessKeyManagement, ApplicationsPortal, AuditManagement, AuthProvider, Descope, OutboundApplications, RoleManagement, SignInFlow, SignUpFlow, SignUpOrInFlow, TenantProfile, UserManagement, UserProfile, baseHeaders, getCurrentTenant, getJwtPermissions, getJwtRoles, getRefreshToken, getSessionToken, isRefreshTokenExpired, isSessionTokenExpired, refresh, useDescope, useSession, useUser };